From b70b6fb43a25dcc0fa0673f360cae86caca3eb42 Mon Sep 17 00:00:00 2001 From: hsc Date: Thu, 8 Mar 2012 19:43:02 +0000 Subject: [PATCH] another directory rename: failstar -> fail "failstar" sounds like a name for a cruise liner from the 80s. As "*" isn't a desirable part of directory names, just name the whole thing "fail/", the core parts being stored in "fail/core/". Additionally fixing two build system dependency issues: - missing jobserver -> protomessages dependency - broken bochs -> fail dependency (add_custom_target DEPENDS only allows plain file dependencies ... cmake for the win) git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@956 8c4709b5-6ec9-48aa-a5cd-a96041d1645a --- .gitignore | 27 + CMakeLists.txt | 68 + bochs/.bochsrc | 989 + bochs/.conf.amigaos | 6 + bochs/.conf.beos | 21 + bochs/.conf.everything | 36 + bochs/.conf.linux | 64 + bochs/.conf.macos | 34 + bochs/.conf.macosx | 33 + bochs/.conf.nothing | 18 + bochs/.conf.sparc | 31 + bochs/.conf.win32-cygwin | 28 + bochs/.conf.win32-vcpp | 29 + bochs/CHANGES | 3374 ++ bochs/COPYING | 504 + bochs/Makefile.in | 726 + bochs/PARAM_TREE.txt | 267 + bochs/README | 84 + bochs/README-plugins | 357 + bochs/README-wxWindows | 337 + bochs/README.rfb | 3 + bochs/TESTFORM.txt | 133 + bochs/TODO | 237 + bochs/aclocal.m4 | 6634 ++++ bochs/bios/BIOS-bochs-latest | Bin 0 -> 131072 bytes bochs/bios/BIOS-bochs-legacy | Bin 0 -> 65536 bytes bochs/bios/Makefile.in | 120 + bochs/bios/VGABIOS-elpin-2.40 | Bin 0 -> 32768 bytes bochs/bios/VGABIOS-elpin-LICENSE | 9 + bochs/bios/VGABIOS-lgpl-README | 226 + bochs/bios/VGABIOS-lgpl-latest | Bin 0 -> 40448 bytes bochs/bios/VGABIOS-lgpl-latest-cirrus | Bin 0 -> 35840 bytes bochs/bios/VGABIOS-lgpl-latest-cirrus-debug | Bin 0 -> 35840 bytes bochs/bios/VGABIOS-lgpl-latest-debug | Bin 0 -> 41472 bytes bochs/bios/acpi-dsdt.dsl | 594 + bochs/bios/acpi-dsdt.hex | 273 + bochs/bios/apmbios.S | 365 + bochs/bios/bios_usage | 4 + bochs/bios/biossums.c | 589 + bochs/bios/makesym.perl | 43 + bochs/bios/notes | 44 + bochs/bios/rombios.c | 11498 +++++++ bochs/bios/rombios.h | 248 + bochs/bios/rombios32.c | 2328 ++ bochs/bios/rombios32.ld | 17 + bochs/bios/rombios32start.S | 119 + bochs/bios/usage.cc | 99 + bochs/bochs.h | 626 + bochs/bochsrc-multiple-ne2k | 57 + bochs/build/batch-build.perl | 320 + bochs/build/beos/resource.zip | Bin 0 -> 2566 bytes bochs/build/debian/README.Debian | 17 + bochs/build/debian/changelog | 65 + bochs/build/debian/conffiles.ex | 7 + bochs/build/debian/control | 17 + bochs/build/debian/copyright | 10 + bochs/build/debian/cron.d.ex | 4 + bochs/build/debian/dirs | 0 bochs/build/debian/docs | 6 + bochs/build/debian/emacsen-install.ex | 45 + bochs/build/debian/emacsen-remove.ex | 15 + bochs/build/debian/emacsen-startup.ex | 18 + bochs/build/debian/ex.doc-base.package | 22 + bochs/build/debian/init.d.ex | 70 + bochs/build/debian/manpage.1.ex | 60 + bochs/build/debian/manpage.sgml.ex | 143 + bochs/build/debian/menu.ex | 2 + bochs/build/debian/postinst | 48 + bochs/build/debian/postinst.ex | 47 + bochs/build/debian/postrm.ex | 36 + bochs/build/debian/preinst.ex | 42 + bochs/build/debian/prerm.ex | 37 + bochs/build/debian/rules | 90 + bochs/build/debian/watch.ex | 5 + bochs/build/linux/README.linux-binary | 0 bochs/build/linux/bochs-dlx.in | 118 + bochs/build/macos/CWPro3_project.sit | Bin 0 -> 1255450 bytes bochs/build/macos/bochs.rsrc | 300 + bochs/build/macos/bochsico.bmp | Bin 0 -> 3032 bytes bochs/build/macos/macos_defines.h | 12 + bochs/build/macosx/Info.plist.in | 30 + bochs/build/macosx/README.macosx-binary | 0 bochs/build/macosx/bochs-icn.icns | Bin 0 -> 57092 bytes bochs/build/macosx/bochs.applescript | 70 + bochs/build/macosx/bochs.r | 1365 + bochs/build/macosx/diskimage.pl | 117 + bochs/build/macosx/make-dmg.sh | 99 + bochs/build/macosx/pbdevelopment.plist | 8 + bochs/build/macosx/script.data | Bin 0 -> 13780 bytes bochs/build/macosx/script.r | 2712 ++ bochs/build/makeall.sh | 10 + bochs/build/redhat/NOTES | 48 + bochs/build/redhat/bochs.rpmspec.template | 81 + bochs/build/redhat/make-rpm | 100 + bochs/build/win32/README.win32-binary | 0 bochs/build/win32/bochs.win32.manifest | 22 + bochs/build/win32/bochs.win64.manifest | 22 + bochs/build/win32/cc2cpp | 6 + bochs/build/win32/cpp2cc | 6 + bochs/build/win32/diffcc2cpp | 6 + bochs/build/win32/nsis/Makefile.in | 30 + bochs/build/win32/nsis/bochs.ico | Bin 0 -> 766 bytes bochs/build/win32/nsis/bochs.nsi.in | 290 + bochs/build/win32/nsis/lgban.ico | Bin 0 -> 174246 bytes bochs/build/win32/nsis/logo.ico | Bin 0 -> 174246 bytes bochs/build/win32/nsis/penguin.ico | Bin 0 -> 3310 bytes bochs/build/win32/nsis/unbochs.ico | Bin 0 -> 766 bytes bochs/build/win32/vs2008ex-workspace.zip | Bin 0 -> 19190 bytes bochs/bx_debug/Makefile.in | 141 + bochs/bx_debug/dbg_main.cc | 3884 +++ bochs/bx_debug/debug.h | 507 + bochs/bx_debug/lexer.c | 3482 ++ bochs/bx_debug/lexer.l | 288 + bochs/bx_debug/linux.cc | 92 + bochs/bx_debug/make-syscalls-linux.pl | 34 + bochs/bx_debug/parser.c | 4029 +++ bochs/bx_debug/parser.h | 276 + bochs/bx_debug/parser.y | 1247 + bochs/bx_debug/symbols.cc | 442 + bochs/bx_debug/syscalls-linux.h | 209 + bochs/bxversion.h.in | 7 + bochs/bxversion.rc.in | 15 + bochs/config.cc | 3907 +++ bochs/config.guess | 1502 + bochs/config.h.in | 891 + bochs/config.sub | 1731 + bochs/configure | 26711 ++++++++++++++++ bochs/configure.in | 2839 ++ bochs/cpu/3dnow.cc | 291 + bochs/cpu/Makefile.in | 773 + bochs/cpu/access.cc | 503 + bochs/cpu/access32.cc | 1234 + bochs/cpu/access64.cc | 920 + bochs/cpu/aes.cc | 422 + bochs/cpu/apic.cc | 1188 + bochs/cpu/apic.h | 169 + bochs/cpu/arith16.cc | 497 + bochs/cpu/arith32.cc | 570 + bochs/cpu/arith64.cc | 580 + bochs/cpu/arith8.cc | 487 + bochs/cpu/bcd.cc | 202 + bochs/cpu/bit.cc | 337 + bochs/cpu/bit16.cc | 327 + bochs/cpu/bit32.cc | 332 + bochs/cpu/bit64.cc | 336 + bochs/cpu/call_far.cc | 570 + bochs/cpu/cpu.cc | 994 + bochs/cpu/cpu.h | 3972 +++ bochs/cpu/cpuid.cc | 1133 + bochs/cpu/crc32.cc | 140 + bochs/cpu/crregs.cc | 1282 + bochs/cpu/crregs.h | 222 + bochs/cpu/ctrl_xfer16.cc | 785 + bochs/cpu/ctrl_xfer32.cc | 829 + bochs/cpu/ctrl_xfer64.cc | 576 + bochs/cpu/ctrl_xfer_pro.cc | 165 + bochs/cpu/data_xfer16.cc | 313 + bochs/cpu/data_xfer32.cc | 317 + bochs/cpu/data_xfer64.cc | 350 + bochs/cpu/data_xfer8.cc | 112 + bochs/cpu/debugstuff.cc | 392 + bochs/cpu/descriptor.h | 192 + bochs/cpu/exception.cc | 941 + bochs/cpu/fetchdecode.cc | 1811 ++ bochs/cpu/fetchdecode.h | 793 + bochs/cpu/fetchdecode64.cc | 2228 ++ bochs/cpu/fetchdecode_sse.h | 1424 + bochs/cpu/fetchdecode_x87.h | 768 + bochs/cpu/flag_ctrl.cc | 331 + bochs/cpu/flag_ctrl_pro.cc | 114 + bochs/cpu/fpu_emu.cc | 46 + bochs/cpu/i387.h | 263 + bochs/cpu/ia_opcodes.h | 1352 + bochs/cpu/icache.cc | 269 + bochs/cpu/icache.h | 242 + bochs/cpu/init.cc | 1239 + bochs/cpu/instr.h | 279 + bochs/cpu/io.cc | 868 + bochs/cpu/iret.cc | 564 + bochs/cpu/jmp_far.cc | 292 + bochs/cpu/lazy_flags.cc | 299 + bochs/cpu/lazy_flags.h | 254 + bochs/cpu/load.cc | 121 + bochs/cpu/logical16.cc | 248 + bochs/cpu/logical32.cc | 254 + bochs/cpu/logical64.cc | 272 + bochs/cpu/logical8.cc | 253 + bochs/cpu/mmx.cc | 2768 ++ bochs/cpu/model_specific.h | 235 + bochs/cpu/msr.cc | 807 + bochs/cpu/mult16.cc | 159 + bochs/cpu/mult32.cc | 177 + bochs/cpu/mult64.cc | 367 + bochs/cpu/mult8.cc | 117 + bochs/cpu/paging.cc | 1762 + bochs/cpu/proc_ctrl.cc | 1102 + bochs/cpu/protect_ctrl.cc | 899 + bochs/cpu/resolver.cc | 69 + bochs/cpu/ret_far.cc | 236 + bochs/cpu/segment_ctrl.cc | 200 + bochs/cpu/segment_ctrl_pro.cc | 679 + bochs/cpu/shift16.cc | 641 + bochs/cpu/shift32.cc | 576 + bochs/cpu/shift64.cc | 552 + bochs/cpu/shift8.cc | 469 + bochs/cpu/smm.cc | 874 + bochs/cpu/smm.h | 203 + bochs/cpu/soft_int.cc | 162 + bochs/cpu/sse.cc | 2438 ++ bochs/cpu/sse_move.cc | 1074 + bochs/cpu/sse_pfp.cc | 2272 ++ bochs/cpu/sse_rcp.cc | 727 + bochs/cpu/sse_string.cc | 485 + bochs/cpu/stack.h | 140 + bochs/cpu/stack16.cc | 309 + bochs/cpu/stack32.cc | 397 + bochs/cpu/stack64.cc | 139 + bochs/cpu/string.cc | 2112 ++ bochs/cpu/tasking.cc | 798 + bochs/cpu/todo | 52 + bochs/cpu/vm8086.cc | 263 + bochs/cpu/vmcs.cc | 324 + bochs/cpu/vmexit.cc | 792 + bochs/cpu/vmx.cc | 3050 ++ bochs/cpu/vmx.h | 1038 + bochs/cpu/xmm.h | 267 + bochs/cpu/xsave.cc | 359 + bochs/crc.cc | 65 + bochs/disasm/Makefile.in | 81 + bochs/disasm/dis_decode.cc | 369 + bochs/disasm/dis_groups.cc | 722 + bochs/disasm/dis_tables.h | 202 + bochs/disasm/dis_tables.inc | 3237 ++ bochs/disasm/dis_tables_sse.inc | 1587 + bochs/disasm/dis_tables_x87.inc | 919 + bochs/disasm/disasm.h | 567 + bochs/disasm/opcodes.inc | 1352 + bochs/disasm/resolve.cc | 661 + bochs/disasm/syntax.cc | 289 + bochs/doc/docbook/Makefile.in | 104 + bochs/doc/docbook/Makefile.jade | 84 + bochs/doc/docbook/README | 15 + bochs/doc/docbook/development/development.dbk | 2551 ++ .../docbook/documentation/documentation.dbk | 506 + bochs/doc/docbook/fixtitles.pl | 54 + .../doc/docbook/images/dlxlinux-in-linux.png | Bin 0 -> 8464 bytes bochs/doc/docbook/images/headerbar.png | Bin 0 -> 2230 bytes bochs/doc/docbook/images/undercon.png | Bin 0 -> 383 bytes bochs/doc/docbook/include/defs.sgm | 31 + bochs/doc/docbook/index.html | 42 + bochs/doc/docbook/misc.txt | 426 + bochs/doc/docbook/outline.txt | 164 + bochs/doc/docbook/user/user.dbk | 8771 +++++ bochs/doc/man/bochs-dlx.1 | 54 + bochs/doc/man/bochs.1 | 96 + bochs/doc/man/bochsrc.5 | 1032 + bochs/doc/man/bxcommit.1 | 53 + bochs/doc/man/bximage.1 | 91 + bochs/docs-html/00README | 5 + bochs/docs-html/biossums.txt | 118 + bochs/docs-html/cosimulation.html | 606 + bochs/docs-html/enh_dbg_user_man.txt | 163 + bochs/docs-html/memory.txt | 114 + bochs/docs-html/random.txt | 12 + bochs/dynamic/README | 5 + bochs/extplugin.h | 55 + bochs/font/vga.bitmap.h | 284 + bochs/fpu/Makefile.in | 178 + bochs/fpu/control_w.h | 58 + bochs/fpu/f2xm1.cc | 178 + bochs/fpu/ferr.cc | 133 + bochs/fpu/fpatan.cc | 283 + bochs/fpu/fprem.cc | 191 + bochs/fpu/fpu.cc | 569 + bochs/fpu/fpu_arith.cc | 1199 + bochs/fpu/fpu_compare.cc | 563 + bochs/fpu/fpu_const.cc | 174 + bochs/fpu/fpu_constant.h | 82 + bochs/fpu/fpu_load_store.cc | 733 + bochs/fpu/fpu_misc.cc | 151 + bochs/fpu/fpu_tags.cc | 66 + bochs/fpu/fpu_trans.cc | 436 + bochs/fpu/fsincos.cc | 431 + bochs/fpu/fyl2x.cc | 353 + bochs/fpu/poly.cc | 105 + bochs/fpu/softfloat-compare.h | 496 + bochs/fpu/softfloat-macros.h | 650 + bochs/fpu/softfloat-round-pack.cc | 730 + bochs/fpu/softfloat-round-pack.h | 260 + bochs/fpu/softfloat-specialize.cc | 195 + bochs/fpu/softfloat-specialize.h | 619 + bochs/fpu/softfloat.cc | 2911 ++ bochs/fpu/softfloat.h | 339 + bochs/fpu/softfloatx80.cc | 363 + bochs/fpu/softfloatx80.h | 100 + bochs/fpu/status_w.h | 69 + bochs/fpu/tag_w.h | 33 + bochs/fpu/todo | 7 + bochs/gdbstub.cc | 941 + bochs/gui/Makefile.in | 395 + bochs/gui/amigagui.h | 200 + bochs/gui/amigaos.cc | 855 + bochs/gui/beos.cc | 1167 + bochs/gui/bitmaps/cdromd.h | 34 + bochs/gui/bitmaps/cdromd.xpm | 41 + bochs/gui/bitmaps/configbutton.h | 16 + bochs/gui/bitmaps/configbutton.xpm | 41 + bochs/gui/bitmaps/copy.h | 19 + bochs/gui/bitmaps/copy.xpm | 41 + bochs/gui/bitmaps/floppya.h | 34 + bochs/gui/bitmaps/floppya.xpm | 41 + bochs/gui/bitmaps/floppyb.h | 34 + bochs/gui/bitmaps/floppyb.xpm | 41 + bochs/gui/bitmaps/mouse.h | 34 + bochs/gui/bitmaps/mouse.xpm | 41 + bochs/gui/bitmaps/paste.h | 19 + bochs/gui/bitmaps/paste.xpm | 41 + bochs/gui/bitmaps/power.h | 20 + bochs/gui/bitmaps/power.xpm | 41 + bochs/gui/bitmaps/reset.h | 20 + bochs/gui/bitmaps/reset.xpm | 41 + bochs/gui/bitmaps/saverestore.h | 26 + bochs/gui/bitmaps/saverestore.xpm | 41 + bochs/gui/bitmaps/snapshot.h | 20 + bochs/gui/bitmaps/snapshot.xpm | 41 + bochs/gui/bitmaps/userbutton.h | 20 + bochs/gui/bitmaps/userbutton.xpm | 40 + bochs/gui/carbon.cc | 2200 ++ bochs/gui/enh_dbg.cc | 3381 ++ bochs/gui/enh_dbg.h | 420 + bochs/gui/gtk_enh_dbg_osdep.cc | 2393 ++ bochs/gui/gui.cc | 867 + bochs/gui/gui.h | 437 + bochs/gui/icon_bochs.h | 36 + bochs/gui/icon_bochs.xpm | 45 + bochs/gui/keymap.cc | 313 + bochs/gui/keymap.h | 79 + bochs/gui/keymaps/convertmap.pl | 14 + bochs/gui/keymaps/sdl-pc-de.map | 222 + bochs/gui/keymaps/sdl-pc-us.map | 211 + bochs/gui/keymaps/x11-pc-be.map | 220 + bochs/gui/keymaps/x11-pc-da.map | 247 + bochs/gui/keymaps/x11-pc-de.map | 248 + bochs/gui/keymaps/x11-pc-es.map | 217 + bochs/gui/keymaps/x11-pc-fr.map | 218 + bochs/gui/keymaps/x11-pc-it.map | 207 + bochs/gui/keymaps/x11-pc-ru.map | 211 + bochs/gui/keymaps/x11-pc-se.map | 278 + bochs/gui/keymaps/x11-pc-si.map | 206 + bochs/gui/keymaps/x11-pc-uk.map | 209 + bochs/gui/keymaps/x11-pc-us.map | 205 + bochs/gui/macintosh.cc | 1696 + bochs/gui/nogui.cc | 332 + bochs/gui/paramtree.cc | 1009 + bochs/gui/paramtree.h | 461 + bochs/gui/rfb.cc | 1702 + bochs/gui/rfb.h | 392 + bochs/gui/rfbkeys.h | 632 + bochs/gui/sdl.cc | 1661 + bochs/gui/sdl.h | 804 + bochs/gui/sdlkeys.h | 257 + bochs/gui/siminterface.cc | 1264 + bochs/gui/siminterface.h | 749 + bochs/gui/svga.cc | 593 + bochs/gui/term.cc | 817 + bochs/gui/textconfig.cc | 1063 + bochs/gui/textconfig.h | 58 + bochs/gui/wenhdbg_res.h | 79 + bochs/gui/win32.cc | 2388 ++ bochs/gui/win32_enh_dbg_osdep.cc | 1877 ++ bochs/gui/win32dialog.cc | 791 + bochs/gui/win32dialog.h | 60 + bochs/gui/win32paramdlg.cc | 846 + bochs/gui/win32paramdlg.h | 33 + bochs/gui/win32res.h | 47 + bochs/gui/wx.cc | 1708 + bochs/gui/wxdialog.cc | 1667 + bochs/gui/wxdialog.h | 896 + bochs/gui/wxmain.cc | 1553 + bochs/gui/wxmain.h | 226 + bochs/gui/x.cc | 2626 ++ bochs/host/linux/pcidev/Make.kbuild | 2 + bochs/host/linux/pcidev/Makefile.in | 75 + bochs/host/linux/pcidev/kernel_pcidev.h | 93 + bochs/host/linux/pcidev/pcidev.c | 481 + bochs/install-sh | 251 + bochs/instrument/example0/Makefile.in | 71 + bochs/instrument/example0/instrument.cc | 231 + bochs/instrument/example0/instrument.h | 200 + bochs/instrument/example1/Makefile.in | 72 + bochs/instrument/example1/instrument.cc | 197 + bochs/instrument/example1/instrument.h | 249 + bochs/instrument/example2/Makefile.in | 72 + bochs/instrument/example2/instrument.cc | 98 + bochs/instrument/example2/instrument.h | 187 + bochs/instrument/instrumentation.txt | 254 + bochs/instrument/stubs/Makefile.in | 72 + bochs/instrument/stubs/instrument.cc | 72 + bochs/instrument/stubs/instrument.h | 228 + bochs/iodev/Makefile.in | 899 + bochs/iodev/acpi.cc | 586 + bochs/iodev/acpi.h | 86 + bochs/iodev/aspi-win32.h | 210 + bochs/iodev/biosdev.cc | 219 + bochs/iodev/biosdev.h | 61 + bochs/iodev/busmouse.cc | 331 + bochs/iodev/busmouse.h | 108 + bochs/iodev/cdrom.cc | 1471 + bochs/iodev/cdrom.h | 65 + bochs/iodev/cdrom_amigaos.cc | 271 + bochs/iodev/cdrom_beos.cc | 74 + bochs/iodev/cdrom_beos.h | 33 + bochs/iodev/cmos.cc | 828 + bochs/iodev/cmos.h | 91 + bochs/iodev/crc32.cc | 52 + bochs/iodev/crc32.h | 25 + bochs/iodev/devices.cc | 1212 + bochs/iodev/devices.txt | 109 + bochs/iodev/dma.cc | 812 + bochs/iodev/dma.h | 104 + bochs/iodev/eth.cc | 214 + bochs/iodev/eth.h | 83 + bochs/iodev/eth_arpback.cc | 188 + bochs/iodev/eth_fbsd.cc | 373 + bochs/iodev/eth_linux.cc | 284 + bochs/iodev/eth_null.cc | 148 + bochs/iodev/eth_packetmaker.cc | 202 + bochs/iodev/eth_packetmaker.h | 146 + bochs/iodev/eth_tap.cc | 415 + bochs/iodev/eth_tuntap.cc | 381 + bochs/iodev/eth_vde.cc | 327 + bochs/iodev/eth_vnet.cc | 1422 + bochs/iodev/eth_win32.cc | 386 + bochs/iodev/extfpuirq.cc | 90 + bochs/iodev/extfpuirq.h | 50 + bochs/iodev/floppy.cc | 1983 ++ bochs/iodev/floppy.h | 201 + bochs/iodev/gameport.cc | 234 + bochs/iodev/gameport.h | 62 + bochs/iodev/guest2host.cc | 135 + bochs/iodev/guest2host.h | 68 + bochs/iodev/harddrv.cc | 3462 ++ bochs/iodev/harddrv.h | 258 + bochs/iodev/hdimage.cc | 1897 ++ bochs/iodev/hdimage.h | 590 + bochs/iodev/ioapic.cc | 308 + bochs/iodev/ioapic.h | 112 + bochs/iodev/iodebug.cc | 343 + bochs/iodev/iodebug.h | 49 + bochs/iodev/iodev.h | 619 + bochs/iodev/keyboard.cc | 1685 + bochs/iodev/keyboard.h | 234 + bochs/iodev/ne2k.cc | 1931 ++ bochs/iodev/ne2k.h | 263 + bochs/iodev/parallel.cc | 343 + bochs/iodev/parallel.h | 81 + bochs/iodev/pci.cc | 603 + bochs/iodev/pci.h | 100 + bochs/iodev/pci2isa.cc | 377 + bochs/iodev/pci2isa.h | 70 + bochs/iodev/pci_ide.cc | 460 + bochs/iodev/pci_ide.h | 83 + bochs/iodev/pcidev.cc | 464 + bochs/iodev/pcidev.h | 69 + bochs/iodev/pcipnic.cc | 522 + bochs/iodev/pcipnic.h | 96 + bochs/iodev/pcivga.cc | 195 + bochs/iodev/pcivga.h | 49 + bochs/iodev/pic.cc | 889 + bochs/iodev/pic.h | 97 + bochs/iodev/pit82c54.cc | 972 + bochs/iodev/pit82c54.h | 148 + bochs/iodev/pit_wrap.cc | 372 + bochs/iodev/pit_wrap.h | 71 + bochs/iodev/pnic_api.h | 59 + bochs/iodev/sb16.cc | 3688 +++ bochs/iodev/sb16.h | 378 + bochs/iodev/scancodes.cc | 772 + bochs/iodev/scancodes.h | 35 + bochs/iodev/scsi_commands.h | 416 + bochs/iodev/scsi_device.cc | 792 + bochs/iodev/scsi_device.h | 106 + bochs/iodev/scsidefs.h | 283 + bochs/iodev/scsipt.h | 142 + bochs/iodev/serial.cc | 1627 + bochs/iodev/serial.h | 249 + bochs/iodev/serial_raw.cc | 477 + bochs/iodev/serial_raw.h | 97 + bochs/iodev/slowdown_timer.cc | 179 + bochs/iodev/slowdown_timer.h | 53 + bochs/iodev/soundlnx.cc | 530 + bochs/iodev/soundlnx.h | 81 + bochs/iodev/soundmod.cc | 140 + bochs/iodev/soundmod.h | 68 + bochs/iodev/soundosx.cc | 409 + bochs/iodev/soundosx.h | 72 + bochs/iodev/soundwin.cc | 511 + bochs/iodev/soundwin.h | 222 + bochs/iodev/speaker.cc | 152 + bochs/iodev/speaker.h | 52 + bochs/iodev/svga_cirrus.cc | 3388 ++ bochs/iodev/svga_cirrus.h | 273 + bochs/iodev/unmapped.cc | 285 + bochs/iodev/unmapped.h | 56 + bochs/iodev/usb_common.cc | 422 + bochs/iodev/usb_common.h | 202 + bochs/iodev/usb_hid.cc | 861 + bochs/iodev/usb_hid.h | 60 + bochs/iodev/usb_hub.cc | 686 + bochs/iodev/usb_hub.h | 68 + bochs/iodev/usb_msd.cc | 711 + bochs/iodev/usb_msd.h | 82 + bochs/iodev/usb_ohci.cc | 1505 + bochs/iodev/usb_ohci.h | 302 + bochs/iodev/usb_printer.cc | 316 + bochs/iodev/usb_printer.h | 47 + bochs/iodev/usb_uhci.cc | 1119 + bochs/iodev/usb_uhci.h | 233 + bochs/iodev/vga.cc | 3491 ++ bochs/iodev/vga.h | 343 + bochs/iodev/virt_timer.cc | 572 + bochs/iodev/virt_timer.h | 154 + bochs/iodev/vmware3.cc | 526 + bochs/iodev/vmware3.h | 126 + bochs/iodev/vmware4.cc | 333 + bochs/iodev/vmware4.h | 96 + bochs/iodev/vvfat.cc | 1961 ++ bochs/iodev/vvfat.h | 187 + bochs/load32bitOShack.cc | 305 + bochs/logio.cc | 626 + bochs/ltdl.c | 4067 +++ bochs/ltdl.h | 398 + bochs/ltdlconf.h.in | 160 + bochs/ltmain.sh | 6322 ++++ bochs/main.cc | 1361 + bochs/make-ag++.sh | 4 + bochs/memory/Makefile.in | 87 + bochs/memory/memory.cc | 367 + bochs/memory/memory.h | 150 + bochs/memory/misc_mem.cc | 802 + bochs/misc/Makefile.in | 55 + bochs/misc/bxcommit.c | 381 + bochs/misc/bximage.c | 748 + bochs/misc/make_cmos_image.cc | 103 + bochs/misc/niclist.c | 187 + bochs/misc/sb16/sb16ctrl.c | 502 + bochs/misc/sb16/sb16ctrl.example | 36 + bochs/misc/sb16/sb16ctrl.exe | Bin 0 -> 10012 bytes bochs/misc/spoolpipe.c | 181 + bochs/misc/test-access-check.cc | 378 + bochs/msrs.def | 45 + bochs/osdep.cc | 339 + bochs/osdep.h | 240 + bochs/param_names.h | 184 + bochs/patches/HEADER | 16 + bochs/patches/NOTES | 5 + bochs/patches/beos-gui-fabo.capture-filter | Bin 0 -> 18423 bytes .../beos-gui-fabo.capture-filter.README | 20 + bochs/patches/bochs-bios-win32.diff | 74 + bochs/patches/patch.beos-gui-fabo | 2372 ++ bochs/patches/patch.beos-gui-fabo-template | 2338 ++ bochs/patches/patch.cosimulation | 2519 ++ bochs/patches/patch.decode-interrupts.gz | Bin 0 -> 35666 bytes bochs/patches/patch.example-override-ask | 112 + bochs/patches/patch.example-user-plugin | 319 + bochs/patches/patch.fast-dma-cbothamy | 572 + bochs/patches/patch.floppy-athiel | 306 + bochs/patches/patch.hosttime-port | 165 + bochs/patches/patch.marklog | 161 + bochs/patches/patch.mingw-resources | 53 + bochs/pc_system.cc | 572 + bochs/pc_system.h | 186 + bochs/plex86-interface.cc | 434 + bochs/plex86-interface.h | 37 + bochs/plex86/COPYING | 504 + bochs/plex86/Makefile.in | 46 + bochs/plex86/PERFORMANCE | 17 + bochs/plex86/TODO | 80 + bochs/plex86/config.h.in | 63 + bochs/plex86/configure | 2535 ++ bochs/plex86/configure.in | 169 + bochs/plex86/descriptor.h | 128 + bochs/plex86/kernel/Makefile.in | 127 + bochs/plex86/kernel/fault-mon.c | 306 + bochs/plex86/kernel/freebsd/Makefile | 6 + bochs/plex86/kernel/host-beos.c | 219 + bochs/plex86/kernel/host-freebsd.c | 569 + bochs/plex86/kernel/host-linux.c | 800 + bochs/plex86/kernel/host-netbsd.c | 566 + bochs/plex86/kernel/host-null.c | 161 + bochs/plex86/kernel/include/descriptor2.h | 66 + bochs/plex86/kernel/include/eflags.h | 78 + bochs/plex86/kernel/include/guest_context.h | 59 + bochs/plex86/kernel/include/monitor.h | 709 + bochs/plex86/kernel/include/paging.h | 51 + bochs/plex86/kernel/include/tss.h | 50 + bochs/plex86/kernel/monitor-host.c | 1886 ++ bochs/plex86/kernel/monitor-mon.c | 63 + bochs/plex86/kernel/nexus.S | 326 + bochs/plex86/kernel/paging-mon.c | 767 + bochs/plex86/kernel/panic-mon.c | 71 + bochs/plex86/kernel/print-mon.c | 262 + bochs/plex86/kernel/util-nexus.c | 57 + bochs/plex86/misc/load_module.sh | 55 + bochs/plex86/misc/netbsd_post.sh | 17 + bochs/plex86/misc/unload_module.sh | 34 + bochs/plex86/plex86.h | 259 + bochs/plugin.cc | 773 + bochs/plugin.h | 428 + bochs/win32_enh_dbg.rc | 86 + bochs/win32res.rc | 116 + bochs/wxbochs.rc | 8 + cmake/FindLibDwarf.cmake | 62 + cmake/FindLibElf.cmake | 55 + cmake/compilerconfig.cmake | 66 + cmake/config_failbochs.sh.in | 19 + cmake/mergelib.sh | 30 + core/AspectConfig.hpp | 30 + core/CMakeLists.txt | 65 + core/Doxyfile.in | 1553 + core/SAL/CMakeLists.txt | 10 + core/SAL/Memory.cc | 12 + core/SAL/Memory.hpp | 77 + core/SAL/Register.cc | 72 + core/SAL/Register.hpp | 279 + core/SAL/SALConfig.hpp | 45 + core/SAL/SALInst.hpp | 35 + core/SAL/SimulatorController.cc | 285 + core/SAL/SimulatorController.hpp | 250 + core/SAL/bochs/BochsConfig.hpp | 24 + core/SAL/bochs/BochsController.hpp | 106 + core/SAL/bochs/BochsMemory.hpp | 115 + core/SAL/bochs/BochsRegister.hpp | 219 + core/SAL/bochs/CPULoop.ah | 35 + core/SAL/bochs/Controller.cc | 179 + core/SAL/bochs/GuestSysCom.ah | 37 + core/SAL/bochs/Interrupt.ah | 40 + core/SAL/bochs/Interrupt_suppression.ah | 28 + core/SAL/bochs/Jump.ah | 139 + core/SAL/bochs/JumpToPreviousCtx.ah | 33 + core/SAL/bochs/MemAccessBitFlip.ah | 100 + core/SAL/bochs/MemEvents.ah | 146 + core/SAL/bochs/Trap.ah | 27 + core/SAL/bochs/bochs_helpers.hpp | 15 + core/SAL/bochs/credits.ah | 27 + core/SAL/bochs/disable_add_remove_logfn.ah | 19 + core/SAL/bochs/disable_keyboard_interrupt.ah | 25 + core/SAL/bochs/failbochs.hpp | 21 + core/SAL/bochs/fireTimer.ah | 27 + core/SAL/bochs/init.ah | 12 + core/SAL/bochs/reboot.ah | 27 + core/SAL/bochs/restore.ah | 23 + core/SAL/bochs/save.ah | 32 + core/SAL/bochs/stfu.ah | 54 + core/SAL/ovp/Controller.cc | 139 + core/SAL/ovp/OVPConfig.hpp | 18 + core/SAL/ovp/OVPController.hpp | 90 + core/SAL/ovp/OVPMemory.hpp | 92 + core/SAL/ovp/OVPRegister.hpp | 80 + core/SAL/ovp/init.ah | 13 + core/config/CMakeLists.txt | 13 + core/config/experiments.hpp.in | 24 + core/controller/CMakeLists.txt | 11 + core/controller/Campaign.hpp | 31 + core/controller/CampaignManager.cc | 9 + core/controller/CampaignManager.hpp | 90 + core/controller/CoroutineManager.cc | 96 + core/controller/CoroutineManager.hpp | 78 + core/controller/Event.cc | 79 + core/controller/Event.hpp | 486 + core/controller/EventList.cc | 136 + core/controller/EventList.hpp | 201 + core/controller/ExperimentData.hpp | 56 + core/controller/ExperimentDataQueue.cc | 22 + core/controller/ExperimentDataQueue.hpp | 53 + core/controller/ExperimentFlow.hpp | 41 + core/controller/Minion.hpp | 67 + core/controller/Signal.cc | 14 + core/controller/Signal.hpp | 136 + .../SynchronizedExperimentDataQueue.cc | 23 + .../SynchronizedExperimentDataQueue.hpp | 55 + core/experiments/CMakeLists.txt | 6 + .../FaultCoverageExperiment/CMakeLists.txt | 18 + .../FaultCoverageExperiment/experiment.cc | 140 + .../FaultCoverageExperiment/experiment.hpp | 32 + .../experiments/MHTestCampaign/CMakeLists.txt | 31 + core/experiments/MHTestCampaign/MHTest.proto | 5 + .../MHTestCampaign/MHTestCampaign.cc | 42 + .../MHTestCampaign/MHTestCampaign.hpp | 27 + core/experiments/MHTestCampaign/experiment.cc | 42 + .../experiments/MHTestCampaign/experiment.hpp | 17 + core/experiments/MHTestCampaign/mhcampaign.cc | 25 + core/experiments/TracingTest/CMakeLists.txt | 15 + core/experiments/TracingTest/experiment.cc | 79 + core/experiments/TracingTest/experiment.hpp | 12 + .../attic/DataRetrievalExperiment.cc | 36 + .../attic/DataRetrievalExperiment.hpp | 14 + .../ExperimentDataExample/CMakeLists.txt | 19 + .../FaultCoverageExperiment.proto | 7 + .../ExperimentDataExample/build_example.sh | 3 + .../attic/ExperimentDataExample/example.cc | 89 + .../JumpAndRunExperiment.hpp | 80 + core/experiments/attic/MemWriteExperiment.hpp | 76 + core/experiments/attic/MyExperiment.hpp | 64 + .../attic/SingleSteppingExperiment.hpp | 64 + .../attic/instantiate-experiment.ah.template | 16 + .../checksum-oostubs/CMakeLists.txt | 31 + .../checksum-oostubs/MemoryMap.hpp | 1 + core/experiments/checksum-oostubs/campaign.cc | 140 + .../experiments/checksum-oostubs/campaign.hpp | 20 + .../checksum-oostubs/checksum-oostubs.proto | 29 + .../checksum-oostubs/experiment.cc | 180 + .../checksum-oostubs/experiment.hpp | 14 + .../checksum-oostubs/experimentInfo.hpp | 48 + core/experiments/checksum-oostubs/main.cc | 15 + core/experiments/coolchecksum/CMakeLists.txt | 31 + core/experiments/coolchecksum/campaign.cc | 273 + core/experiments/coolchecksum/campaign.hpp | 20 + .../coolchecksum/coolchecksum.proto | 29 + core/experiments/coolchecksum/experiment.cc | 197 + core/experiments/coolchecksum/experiment.hpp | 14 + .../coolchecksum/experimentInfo.hpp | 40 + core/experiments/coolchecksum/main.cc | 15 + core/experiments/hscsimple/CMakeLists.txt | 17 + core/experiments/hscsimple/experiment.cc | 49 + core/experiments/hscsimple/experiment.hpp | 14 + core/experiments/instantiate-experiment.ah.in | 19 + core/jobserver/CMakeLists.txt | 8 + core/jobserver/JobClient.cc | 101 + core/jobserver/JobClient.hpp | 63 + core/jobserver/JobServer.cc | 220 + core/jobserver/JobServer.hpp | 159 + core/jobserver/SocketComm.cc | 49 + core/jobserver/SocketComm.hpp | 44 + core/jobserver/messagedefs/CMakeLists.txt | 15 + .../messagedefs/FailControlMessage.proto | 16 + core/jobserver/messagedefs/protogen.sh | 2 + core/plugins/CMakeLists.txt | 6 + core/plugins/tracing/CMakeLists.txt | 18 + core/plugins/tracing/TracingPlugin.cc | 75 + core/plugins/tracing/TracingPlugin.hpp | 76 + core/plugins/tracing/dump-trace.py | 34 + core/plugins/tracing/trace.proto | 12 + core/tests/CMakeLists.txt | 34 + core/tests/TestData.proto | 6 + core/tests/client.cc | 110 + core/tests/dwarf.cc | 163 + core/tests/main.elf | Bin 0 -> 313919 bytes core/tests/server.cc | 62 + core/tests/testjc.cc | 42 + core/util/CMakeLists.txt | 7 + core/util/Logger.cc | 29 + core/util/Logger.hpp | 67 + core/util/MemoryMap.hpp | 50 + core/util/SynchronizedCounter.cc | 30 + core/util/SynchronizedCounter.hpp | 26 + core/util/SynchronizedMap.hpp | 75 + core/util/SynchronizedQueue.hpp | 90 + core/variant_config.h.cmake | 8 + doc/class-diagram.dia | 15603 +++++++++ doc/class-diagram.png | 15603 +++++++++ doc/collaboration.dia | Bin 0 -> 4878 bytes doc/collaboration.png | Bin 0 -> 62938 bytes doc/communication-sequence-normal.dia | Bin 0 -> 2117 bytes doc/communication-sequence-normal.png | Bin 0 -> 18684 bytes doc/coverage-experiment-excerpt.cc | 29 + doc/coverage-experiment.cc | 49 + doc/howto-build.txt | 243 + doc/todo.txt | 180 + firesults/buildplots.py | 101 + firesults/exp3/exp1290163825.-d-bit0.dat | 862 + firesults/exp3/exp1290163825.-d-bit1.dat | 862 + firesults/exp3/exp1290163825.-d-bit10.dat | 862 + firesults/exp3/exp1290163825.-d-bit11.dat | 862 + firesults/exp3/exp1290163825.-d-bit12.dat | 862 + firesults/exp3/exp1290163825.-d-bit13.dat | 862 + firesults/exp3/exp1290163825.-d-bit14.dat | 862 + firesults/exp3/exp1290163825.-d-bit15.dat | 862 + firesults/exp3/exp1290163825.-d-bit16.dat | 862 + firesults/exp3/exp1290163825.-d-bit17.dat | 862 + firesults/exp3/exp1290163825.-d-bit18.dat | 862 + firesults/exp3/exp1290163825.-d-bit19.dat | 862 + firesults/exp3/exp1290163825.-d-bit2.dat | 862 + firesults/exp3/exp1290163825.-d-bit20.dat | 862 + firesults/exp3/exp1290163825.-d-bit21.dat | 862 + firesults/exp3/exp1290163825.-d-bit22.dat | 862 + firesults/exp3/exp1290163825.-d-bit23.dat | 862 + firesults/exp3/exp1290163825.-d-bit24.dat | 862 + firesults/exp3/exp1290163825.-d-bit25.dat | 862 + firesults/exp3/exp1290163825.-d-bit26.dat | 862 + firesults/exp3/exp1290163825.-d-bit27.dat | 862 + firesults/exp3/exp1290163825.-d-bit28.dat | 862 + firesults/exp3/exp1290163825.-d-bit29.dat | 862 + firesults/exp3/exp1290163825.-d-bit3.dat | 862 + firesults/exp3/exp1290163825.-d-bit30.dat | 862 + firesults/exp3/exp1290163825.-d-bit31.dat | 862 + firesults/exp3/exp1290163825.-d-bit4.dat | 862 + firesults/exp3/exp1290163825.-d-bit5.dat | 862 + firesults/exp3/exp1290163825.-d-bit6.dat | 862 + firesults/exp3/exp1290163825.-d-bit7.dat | 862 + firesults/exp3/exp1290163825.-d-bit8.dat | 862 + firesults/exp3/exp1290163825.-d-bit9.dat | 862 + firesults/exp4/exp1290265642.-a-bit0.dat | 862 + firesults/exp4/exp1290265642.-a-bit1.dat | 862 + firesults/exp4/exp1290265642.-a-bit10.dat | 862 + firesults/exp4/exp1290265642.-a-bit11.dat | 862 + firesults/exp4/exp1290265642.-a-bit12.dat | 862 + firesults/exp4/exp1290265642.-a-bit13.dat | 862 + firesults/exp4/exp1290265642.-a-bit14.dat | 862 + firesults/exp4/exp1290265642.-a-bit15.dat | 862 + firesults/exp4/exp1290265642.-a-bit16.dat | 862 + firesults/exp4/exp1290265642.-a-bit17.dat | 862 + firesults/exp4/exp1290265642.-a-bit18.dat | 862 + firesults/exp4/exp1290265642.-a-bit19.dat | 862 + firesults/exp4/exp1290265642.-a-bit2.dat | 862 + firesults/exp4/exp1290265642.-a-bit20.dat | 862 + firesults/exp4/exp1290265642.-a-bit21.dat | 862 + firesults/exp4/exp1290265642.-a-bit22.dat | 862 + firesults/exp4/exp1290265642.-a-bit23.dat | 862 + firesults/exp4/exp1290265642.-a-bit24.dat | 862 + firesults/exp4/exp1290265642.-a-bit25.dat | 862 + firesults/exp4/exp1290265642.-a-bit26.dat | 862 + firesults/exp4/exp1290265642.-a-bit27.dat | 862 + firesults/exp4/exp1290265642.-a-bit28.dat | 862 + firesults/exp4/exp1290265642.-a-bit29.dat | 862 + firesults/exp4/exp1290265642.-a-bit3.dat | 862 + firesults/exp4/exp1290265642.-a-bit30.dat | 862 + firesults/exp4/exp1290265642.-a-bit31.dat | 862 + firesults/exp4/exp1290265642.-a-bit4.dat | 862 + firesults/exp4/exp1290265642.-a-bit5.dat | 862 + firesults/exp4/exp1290265642.-a-bit6.dat | 862 + firesults/exp4/exp1290265642.-a-bit7.dat | 862 + firesults/exp4/exp1290265642.-a-bit8.dat | 862 + firesults/exp4/exp1290265642.-a-bit9.dat | 862 + ovp/CMakeLists.txt | 53 + ovp/OVPCpu.hpp | 132 + ovp/OVPPlatform.cc | 49 + ovp/OVPPlatform.hpp | 53 + ovp/OVPStatusRegister.hpp | 52 + ovp/README | 7 + ovp/armmModel/CMakeLists.txt | 98 + ovp/armmModel/Makefile | 5 + ovp/armmModel/armAttributeEntriesThumb16.h | 245 + ovp/armmModel/armAttributeEntriesThumb32.h | 635 + ovp/armmModel/armBitMacros.h | 43 + ovp/armmModel/armBus.c | 63 + ovp/armmModel/armConfig.h | 146 + ovp/armmModel/armDebug.h | 46 + ovp/armmModel/armDecode.h | 62 + ovp/armmModel/armDecodeEntriesThumb16.h | 138 + ovp/armmModel/armDecodeEntriesThumb32.h | 390 + ovp/armmModel/armDecodeThumb.h | 57 + ovp/armmModel/armDecodeTypes.h | 762 + ovp/armmModel/armDisassemble.h | 50 + ovp/armmModel/armDisassembleFormats.h | 213 + ovp/armmModel/armEmit.h | 540 + ovp/armmModel/armExceptionTypes.h | 120 + ovp/armmModel/armExceptions.h | 156 + ovp/armmModel/armFPConstants.h | 108 + ovp/armmModel/armFunctions.h | 93 + ovp/armmModel/armInfo.c | 66 + ovp/armmModel/armMessage.h | 53 + ovp/armmModel/armMode.h | 83 + ovp/armmModel/armMorph.h | 139 + ovp/armmModel/armMorphEntries.h | 304 + ovp/armmModel/armMorphFunctions.h | 240 + ovp/armmModel/armRegisters.h | 122 + ovp/armmModel/armStructure.h | 359 + ovp/armmModel/armSys.h | 128 + ovp/armmModel/armSysRegisters.h | 1026 + ovp/armmModel/armTypeRefs.h | 46 + ovp/armmModel/armUtils.h | 136 + ovp/armmModel/armVFP.h | 80 + ovp/armmModel/armVM.h | 116 + ovp/armmModel/armVariant.h | 107 + ovp/armmModel/armmAttrs.c | 135 + ovp/armmModel/armmConfigList.c | 488 + ovp/armmModel/armmDebug.c | 683 + ovp/armmModel/armmDecode.c | 76 + ovp/armmModel/armmDecodeThumb.c | 2725 ++ ovp/armmModel/armmDisassemble.c | 929 + ovp/armmModel/armmDoc.c | 81 + ovp/armmModel/armmDoc.h | 43 + ovp/armmModel/armmEmit.c | 1123 + ovp/armmModel/armmExceptions.c | 2378 ++ ovp/armmModel/armmMain.c | 284 + ovp/armmModel/armmMorphFunctions.c | 5141 +++ ovp/armmModel/armmMorphTable.c | 423 + ovp/armmModel/armmParameters.c | 166 + ovp/armmModel/armmParameters.h | 88 + ovp/armmModel/armmSemiHost.c | 182 + ovp/armmModel/armmSys.c | 1683 + ovp/armmModel/armmUtils.c | 509 + ovp/armmModel/armmVFP.c | 876 + ovp/armmModel/armmVM.c | 1271 + ovp/armmModel/export.def | 3 + ovp/armmModel/failSALlink.cc | 15 + ovp/cortexM3/CMakeLists.txt | 15 + ovp/cortexM3/platform/platform.cc | 362 + ovp/cortexM3/platform/platform.hpp | 32 + ovp/cortexM3/platform/statreg.hpp | 90 + .../mmc/flakyMemory/1.0/model/CMakeLists.txt | 13 + .../mmc/flakyMemory/1.0/model/flipBits.cpp | 11 + .../mmc/flakyMemory/1.0/model/flipBits.h | 10 + .../mmc/flakyMemory/1.0/model/model.cpp | 189 + ovp/setImperas.sh | 11 + ovp/test1/CMakeLists.txt | 13 + ovp/test1/application.elf | Bin 0 -> 88526 bytes ovp/test1/application/application.c | 20 + ovp/test1/platform/beforeInstruction.cpp | 91 + ovp/test1/platform/beforeInstruction.hpp | 46 + ovp/test1/platform/flakyMemory.cpp | 66 + ovp/test1/platform/flakyMemory.hpp | 21 + ovp/test1/platform/platform.cpp | 90 + scripts/client.sh | 29 + scripts/colorize.pl | 132 + scripts/distribute-experiment.sh | 44 + scripts/fail-env.sh | 21 + scripts/multiple-clients.sh | 59 + scripts/rebuild-bochs.sh | 31 + scripts/runcampaign.sh | 53 + 921 files changed, 473161 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 bochs/.bochsrc create mode 100755 bochs/.conf.amigaos create mode 100755 bochs/.conf.beos create mode 100644 bochs/.conf.everything create mode 100755 bochs/.conf.linux create mode 100755 bochs/.conf.macos create mode 100644 bochs/.conf.macosx create mode 100755 bochs/.conf.nothing create mode 100755 bochs/.conf.sparc create mode 100755 bochs/.conf.win32-cygwin create mode 100755 bochs/.conf.win32-vcpp create mode 100644 bochs/CHANGES create mode 100644 bochs/COPYING create mode 100644 bochs/Makefile.in create mode 100644 bochs/PARAM_TREE.txt create mode 100644 bochs/README create mode 100644 bochs/README-plugins create mode 100644 bochs/README-wxWindows create mode 100644 bochs/README.rfb create mode 100644 bochs/TESTFORM.txt create mode 100644 bochs/TODO create mode 100644 bochs/aclocal.m4 create mode 100644 bochs/bios/BIOS-bochs-latest create mode 100644 bochs/bios/BIOS-bochs-legacy create mode 100644 bochs/bios/Makefile.in create mode 100644 bochs/bios/VGABIOS-elpin-2.40 create mode 100644 bochs/bios/VGABIOS-elpin-LICENSE create mode 100644 bochs/bios/VGABIOS-lgpl-README create mode 100644 bochs/bios/VGABIOS-lgpl-latest create mode 100644 bochs/bios/VGABIOS-lgpl-latest-cirrus create mode 100644 bochs/bios/VGABIOS-lgpl-latest-cirrus-debug create mode 100644 bochs/bios/VGABIOS-lgpl-latest-debug create mode 100644 bochs/bios/acpi-dsdt.dsl create mode 100644 bochs/bios/acpi-dsdt.hex create mode 100644 bochs/bios/apmbios.S create mode 100644 bochs/bios/bios_usage create mode 100644 bochs/bios/biossums.c create mode 100755 bochs/bios/makesym.perl create mode 100644 bochs/bios/notes create mode 100644 bochs/bios/rombios.c create mode 100644 bochs/bios/rombios.h create mode 100644 bochs/bios/rombios32.c create mode 100644 bochs/bios/rombios32.ld create mode 100644 bochs/bios/rombios32start.S create mode 100644 bochs/bios/usage.cc create mode 100644 bochs/bochs.h create mode 100644 bochs/bochsrc-multiple-ne2k create mode 100755 bochs/build/batch-build.perl create mode 100644 bochs/build/beos/resource.zip create mode 100644 bochs/build/debian/README.Debian create mode 100644 bochs/build/debian/changelog create mode 100644 bochs/build/debian/conffiles.ex create mode 100644 bochs/build/debian/control create mode 100644 bochs/build/debian/copyright create mode 100644 bochs/build/debian/cron.d.ex create mode 100644 bochs/build/debian/dirs create mode 100644 bochs/build/debian/docs create mode 100644 bochs/build/debian/emacsen-install.ex create mode 100644 bochs/build/debian/emacsen-remove.ex create mode 100644 bochs/build/debian/emacsen-startup.ex create mode 100644 bochs/build/debian/ex.doc-base.package create mode 100644 bochs/build/debian/init.d.ex create mode 100644 bochs/build/debian/manpage.1.ex create mode 100644 bochs/build/debian/manpage.sgml.ex create mode 100644 bochs/build/debian/menu.ex create mode 100644 bochs/build/debian/postinst create mode 100644 bochs/build/debian/postinst.ex create mode 100644 bochs/build/debian/postrm.ex create mode 100644 bochs/build/debian/preinst.ex create mode 100644 bochs/build/debian/prerm.ex create mode 100755 bochs/build/debian/rules create mode 100644 bochs/build/debian/watch.ex create mode 100644 bochs/build/linux/README.linux-binary create mode 100755 bochs/build/linux/bochs-dlx.in create mode 100644 bochs/build/macos/CWPro3_project.sit create mode 100644 bochs/build/macos/bochs.rsrc create mode 100644 bochs/build/macos/bochsico.bmp create mode 100644 bochs/build/macos/macos_defines.h create mode 100644 bochs/build/macosx/Info.plist.in create mode 100644 bochs/build/macosx/README.macosx-binary create mode 100644 bochs/build/macosx/bochs-icn.icns create mode 100644 bochs/build/macosx/bochs.applescript create mode 100755 bochs/build/macosx/bochs.r create mode 100755 bochs/build/macosx/diskimage.pl create mode 100755 bochs/build/macosx/make-dmg.sh create mode 100644 bochs/build/macosx/pbdevelopment.plist create mode 100755 bochs/build/macosx/script.data create mode 100644 bochs/build/macosx/script.r create mode 100755 bochs/build/makeall.sh create mode 100644 bochs/build/redhat/NOTES create mode 100644 bochs/build/redhat/bochs.rpmspec.template create mode 100755 bochs/build/redhat/make-rpm create mode 100644 bochs/build/win32/README.win32-binary create mode 100755 bochs/build/win32/bochs.win32.manifest create mode 100755 bochs/build/win32/bochs.win64.manifest create mode 100755 bochs/build/win32/cc2cpp create mode 100755 bochs/build/win32/cpp2cc create mode 100755 bochs/build/win32/diffcc2cpp create mode 100644 bochs/build/win32/nsis/Makefile.in create mode 100644 bochs/build/win32/nsis/bochs.ico create mode 100644 bochs/build/win32/nsis/bochs.nsi.in create mode 100755 bochs/build/win32/nsis/lgban.ico create mode 100755 bochs/build/win32/nsis/logo.ico create mode 100644 bochs/build/win32/nsis/penguin.ico create mode 100644 bochs/build/win32/nsis/unbochs.ico create mode 100644 bochs/build/win32/vs2008ex-workspace.zip create mode 100644 bochs/bx_debug/Makefile.in create mode 100644 bochs/bx_debug/dbg_main.cc create mode 100644 bochs/bx_debug/debug.h create mode 100644 bochs/bx_debug/lexer.c create mode 100644 bochs/bx_debug/lexer.l create mode 100644 bochs/bx_debug/linux.cc create mode 100755 bochs/bx_debug/make-syscalls-linux.pl create mode 100644 bochs/bx_debug/parser.c create mode 100644 bochs/bx_debug/parser.h create mode 100644 bochs/bx_debug/parser.y create mode 100755 bochs/bx_debug/symbols.cc create mode 100644 bochs/bx_debug/syscalls-linux.h create mode 100644 bochs/bxversion.h.in create mode 100755 bochs/bxversion.rc.in create mode 100755 bochs/config.cc create mode 100755 bochs/config.guess create mode 100644 bochs/config.h.in create mode 100755 bochs/config.sub create mode 100755 bochs/configure create mode 100644 bochs/configure.in create mode 100755 bochs/cpu/3dnow.cc create mode 100644 bochs/cpu/Makefile.in create mode 100644 bochs/cpu/access.cc create mode 100755 bochs/cpu/access32.cc create mode 100755 bochs/cpu/access64.cc create mode 100755 bochs/cpu/aes.cc create mode 100644 bochs/cpu/apic.cc create mode 100644 bochs/cpu/apic.h create mode 100644 bochs/cpu/arith16.cc create mode 100644 bochs/cpu/arith32.cc create mode 100644 bochs/cpu/arith64.cc create mode 100644 bochs/cpu/arith8.cc create mode 100644 bochs/cpu/bcd.cc create mode 100644 bochs/cpu/bit.cc create mode 100755 bochs/cpu/bit16.cc create mode 100755 bochs/cpu/bit32.cc create mode 100755 bochs/cpu/bit64.cc create mode 100755 bochs/cpu/call_far.cc create mode 100644 bochs/cpu/cpu.cc create mode 100644 bochs/cpu/cpu.h create mode 100755 bochs/cpu/cpuid.cc create mode 100755 bochs/cpu/crc32.cc create mode 100755 bochs/cpu/crregs.cc create mode 100755 bochs/cpu/crregs.h create mode 100644 bochs/cpu/ctrl_xfer16.cc create mode 100644 bochs/cpu/ctrl_xfer32.cc create mode 100644 bochs/cpu/ctrl_xfer64.cc create mode 100644 bochs/cpu/ctrl_xfer_pro.cc create mode 100644 bochs/cpu/data_xfer16.cc create mode 100644 bochs/cpu/data_xfer32.cc create mode 100644 bochs/cpu/data_xfer64.cc create mode 100644 bochs/cpu/data_xfer8.cc create mode 100644 bochs/cpu/debugstuff.cc create mode 100755 bochs/cpu/descriptor.h create mode 100644 bochs/cpu/exception.cc create mode 100644 bochs/cpu/fetchdecode.cc create mode 100755 bochs/cpu/fetchdecode.h create mode 100644 bochs/cpu/fetchdecode64.cc create mode 100755 bochs/cpu/fetchdecode_sse.h create mode 100755 bochs/cpu/fetchdecode_x87.h create mode 100644 bochs/cpu/flag_ctrl.cc create mode 100644 bochs/cpu/flag_ctrl_pro.cc create mode 100644 bochs/cpu/fpu_emu.cc create mode 100644 bochs/cpu/i387.h create mode 100644 bochs/cpu/ia_opcodes.h create mode 100755 bochs/cpu/icache.cc create mode 100755 bochs/cpu/icache.h create mode 100644 bochs/cpu/init.cc create mode 100755 bochs/cpu/instr.h create mode 100644 bochs/cpu/io.cc create mode 100755 bochs/cpu/iret.cc create mode 100755 bochs/cpu/jmp_far.cc create mode 100644 bochs/cpu/lazy_flags.cc create mode 100644 bochs/cpu/lazy_flags.h create mode 100755 bochs/cpu/load.cc create mode 100644 bochs/cpu/logical16.cc create mode 100644 bochs/cpu/logical32.cc create mode 100644 bochs/cpu/logical64.cc create mode 100644 bochs/cpu/logical8.cc create mode 100644 bochs/cpu/mmx.cc create mode 100755 bochs/cpu/model_specific.h create mode 100755 bochs/cpu/msr.cc create mode 100644 bochs/cpu/mult16.cc create mode 100644 bochs/cpu/mult32.cc create mode 100644 bochs/cpu/mult64.cc create mode 100644 bochs/cpu/mult8.cc create mode 100644 bochs/cpu/paging.cc create mode 100644 bochs/cpu/proc_ctrl.cc create mode 100644 bochs/cpu/protect_ctrl.cc create mode 100644 bochs/cpu/resolver.cc create mode 100755 bochs/cpu/ret_far.cc create mode 100644 bochs/cpu/segment_ctrl.cc create mode 100644 bochs/cpu/segment_ctrl_pro.cc create mode 100644 bochs/cpu/shift16.cc create mode 100644 bochs/cpu/shift32.cc create mode 100644 bochs/cpu/shift64.cc create mode 100644 bochs/cpu/shift8.cc create mode 100755 bochs/cpu/smm.cc create mode 100755 bochs/cpu/smm.h create mode 100644 bochs/cpu/soft_int.cc create mode 100644 bochs/cpu/sse.cc create mode 100644 bochs/cpu/sse_move.cc create mode 100644 bochs/cpu/sse_pfp.cc create mode 100755 bochs/cpu/sse_rcp.cc create mode 100755 bochs/cpu/sse_string.cc create mode 100755 bochs/cpu/stack.h create mode 100644 bochs/cpu/stack16.cc create mode 100644 bochs/cpu/stack32.cc create mode 100644 bochs/cpu/stack64.cc create mode 100644 bochs/cpu/string.cc create mode 100644 bochs/cpu/tasking.cc create mode 100755 bochs/cpu/todo create mode 100644 bochs/cpu/vm8086.cc create mode 100755 bochs/cpu/vmcs.cc create mode 100755 bochs/cpu/vmexit.cc create mode 100755 bochs/cpu/vmx.cc create mode 100755 bochs/cpu/vmx.h create mode 100644 bochs/cpu/xmm.h create mode 100755 bochs/cpu/xsave.cc create mode 100755 bochs/crc.cc create mode 100644 bochs/disasm/Makefile.in create mode 100644 bochs/disasm/dis_decode.cc create mode 100644 bochs/disasm/dis_groups.cc create mode 100755 bochs/disasm/dis_tables.h create mode 100755 bochs/disasm/dis_tables.inc create mode 100755 bochs/disasm/dis_tables_sse.inc create mode 100755 bochs/disasm/dis_tables_x87.inc create mode 100644 bochs/disasm/disasm.h create mode 100755 bochs/disasm/opcodes.inc create mode 100755 bochs/disasm/resolve.cc create mode 100755 bochs/disasm/syntax.cc create mode 100644 bochs/doc/docbook/Makefile.in create mode 100644 bochs/doc/docbook/Makefile.jade create mode 100644 bochs/doc/docbook/README create mode 100644 bochs/doc/docbook/development/development.dbk create mode 100644 bochs/doc/docbook/documentation/documentation.dbk create mode 100755 bochs/doc/docbook/fixtitles.pl create mode 100644 bochs/doc/docbook/images/dlxlinux-in-linux.png create mode 100644 bochs/doc/docbook/images/headerbar.png create mode 100644 bochs/doc/docbook/images/undercon.png create mode 100644 bochs/doc/docbook/include/defs.sgm create mode 100644 bochs/doc/docbook/index.html create mode 100644 bochs/doc/docbook/misc.txt create mode 100644 bochs/doc/docbook/outline.txt create mode 100644 bochs/doc/docbook/user/user.dbk create mode 100644 bochs/doc/man/bochs-dlx.1 create mode 100644 bochs/doc/man/bochs.1 create mode 100644 bochs/doc/man/bochsrc.5 create mode 100644 bochs/doc/man/bxcommit.1 create mode 100644 bochs/doc/man/bximage.1 create mode 100644 bochs/docs-html/00README create mode 100644 bochs/docs-html/biossums.txt create mode 100644 bochs/docs-html/cosimulation.html create mode 100755 bochs/docs-html/enh_dbg_user_man.txt create mode 100755 bochs/docs-html/memory.txt create mode 100644 bochs/docs-html/random.txt create mode 100644 bochs/dynamic/README create mode 100644 bochs/extplugin.h create mode 100644 bochs/font/vga.bitmap.h create mode 100644 bochs/fpu/Makefile.in create mode 100644 bochs/fpu/control_w.h create mode 100755 bochs/fpu/f2xm1.cc create mode 100755 bochs/fpu/ferr.cc create mode 100755 bochs/fpu/fpatan.cc create mode 100755 bochs/fpu/fprem.cc create mode 100644 bochs/fpu/fpu.cc create mode 100755 bochs/fpu/fpu_arith.cc create mode 100755 bochs/fpu/fpu_compare.cc create mode 100755 bochs/fpu/fpu_const.cc create mode 100755 bochs/fpu/fpu_constant.h create mode 100755 bochs/fpu/fpu_load_store.cc create mode 100755 bochs/fpu/fpu_misc.cc create mode 100644 bochs/fpu/fpu_tags.cc create mode 100755 bochs/fpu/fpu_trans.cc create mode 100755 bochs/fpu/fsincos.cc create mode 100755 bochs/fpu/fyl2x.cc create mode 100755 bochs/fpu/poly.cc create mode 100755 bochs/fpu/softfloat-compare.h create mode 100755 bochs/fpu/softfloat-macros.h create mode 100755 bochs/fpu/softfloat-round-pack.cc create mode 100755 bochs/fpu/softfloat-round-pack.h create mode 100755 bochs/fpu/softfloat-specialize.cc create mode 100755 bochs/fpu/softfloat-specialize.h create mode 100755 bochs/fpu/softfloat.cc create mode 100755 bochs/fpu/softfloat.h create mode 100755 bochs/fpu/softfloatx80.cc create mode 100755 bochs/fpu/softfloatx80.h create mode 100644 bochs/fpu/status_w.h create mode 100755 bochs/fpu/tag_w.h create mode 100755 bochs/fpu/todo create mode 100644 bochs/gdbstub.cc create mode 100644 bochs/gui/Makefile.in create mode 100644 bochs/gui/amigagui.h create mode 100644 bochs/gui/amigaos.cc create mode 100644 bochs/gui/beos.cc create mode 100644 bochs/gui/bitmaps/cdromd.h create mode 100644 bochs/gui/bitmaps/cdromd.xpm create mode 100644 bochs/gui/bitmaps/configbutton.h create mode 100644 bochs/gui/bitmaps/configbutton.xpm create mode 100644 bochs/gui/bitmaps/copy.h create mode 100644 bochs/gui/bitmaps/copy.xpm create mode 100644 bochs/gui/bitmaps/floppya.h create mode 100644 bochs/gui/bitmaps/floppya.xpm create mode 100644 bochs/gui/bitmaps/floppyb.h create mode 100644 bochs/gui/bitmaps/floppyb.xpm create mode 100644 bochs/gui/bitmaps/mouse.h create mode 100644 bochs/gui/bitmaps/mouse.xpm create mode 100644 bochs/gui/bitmaps/paste.h create mode 100644 bochs/gui/bitmaps/paste.xpm create mode 100644 bochs/gui/bitmaps/power.h create mode 100644 bochs/gui/bitmaps/power.xpm create mode 100644 bochs/gui/bitmaps/reset.h create mode 100644 bochs/gui/bitmaps/reset.xpm create mode 100755 bochs/gui/bitmaps/saverestore.h create mode 100755 bochs/gui/bitmaps/saverestore.xpm create mode 100644 bochs/gui/bitmaps/snapshot.h create mode 100644 bochs/gui/bitmaps/snapshot.xpm create mode 100644 bochs/gui/bitmaps/userbutton.h create mode 100644 bochs/gui/bitmaps/userbutton.xpm create mode 100644 bochs/gui/carbon.cc create mode 100755 bochs/gui/enh_dbg.cc create mode 100755 bochs/gui/enh_dbg.h create mode 100755 bochs/gui/gtk_enh_dbg_osdep.cc create mode 100644 bochs/gui/gui.cc create mode 100644 bochs/gui/gui.h create mode 100644 bochs/gui/icon_bochs.h create mode 100644 bochs/gui/icon_bochs.xpm create mode 100644 bochs/gui/keymap.cc create mode 100644 bochs/gui/keymap.h create mode 100755 bochs/gui/keymaps/convertmap.pl create mode 100644 bochs/gui/keymaps/sdl-pc-de.map create mode 100644 bochs/gui/keymaps/sdl-pc-us.map create mode 100644 bochs/gui/keymaps/x11-pc-be.map create mode 100644 bochs/gui/keymaps/x11-pc-da.map create mode 100644 bochs/gui/keymaps/x11-pc-de.map create mode 100644 bochs/gui/keymaps/x11-pc-es.map create mode 100644 bochs/gui/keymaps/x11-pc-fr.map create mode 100644 bochs/gui/keymaps/x11-pc-it.map create mode 100644 bochs/gui/keymaps/x11-pc-ru.map create mode 100644 bochs/gui/keymaps/x11-pc-se.map create mode 100644 bochs/gui/keymaps/x11-pc-si.map create mode 100644 bochs/gui/keymaps/x11-pc-uk.map create mode 100644 bochs/gui/keymaps/x11-pc-us.map create mode 100644 bochs/gui/macintosh.cc create mode 100644 bochs/gui/nogui.cc create mode 100755 bochs/gui/paramtree.cc create mode 100755 bochs/gui/paramtree.h create mode 100644 bochs/gui/rfb.cc create mode 100644 bochs/gui/rfb.h create mode 100644 bochs/gui/rfbkeys.h create mode 100644 bochs/gui/sdl.cc create mode 100644 bochs/gui/sdl.h create mode 100644 bochs/gui/sdlkeys.h create mode 100644 bochs/gui/siminterface.cc create mode 100644 bochs/gui/siminterface.h create mode 100644 bochs/gui/svga.cc create mode 100644 bochs/gui/term.cc create mode 100644 bochs/gui/textconfig.cc create mode 100644 bochs/gui/textconfig.h create mode 100755 bochs/gui/wenhdbg_res.h create mode 100644 bochs/gui/win32.cc create mode 100755 bochs/gui/win32_enh_dbg_osdep.cc create mode 100644 bochs/gui/win32dialog.cc create mode 100644 bochs/gui/win32dialog.h create mode 100644 bochs/gui/win32paramdlg.cc create mode 100644 bochs/gui/win32paramdlg.h create mode 100644 bochs/gui/win32res.h create mode 100644 bochs/gui/wx.cc create mode 100644 bochs/gui/wxdialog.cc create mode 100644 bochs/gui/wxdialog.h create mode 100644 bochs/gui/wxmain.cc create mode 100644 bochs/gui/wxmain.h create mode 100644 bochs/gui/x.cc create mode 100644 bochs/host/linux/pcidev/Make.kbuild create mode 100644 bochs/host/linux/pcidev/Makefile.in create mode 100644 bochs/host/linux/pcidev/kernel_pcidev.h create mode 100644 bochs/host/linux/pcidev/pcidev.c create mode 100755 bochs/install-sh create mode 100644 bochs/instrument/example0/Makefile.in create mode 100644 bochs/instrument/example0/instrument.cc create mode 100644 bochs/instrument/example0/instrument.h create mode 100644 bochs/instrument/example1/Makefile.in create mode 100644 bochs/instrument/example1/instrument.cc create mode 100644 bochs/instrument/example1/instrument.h create mode 100755 bochs/instrument/example2/Makefile.in create mode 100755 bochs/instrument/example2/instrument.cc create mode 100755 bochs/instrument/example2/instrument.h create mode 100755 bochs/instrument/instrumentation.txt create mode 100644 bochs/instrument/stubs/Makefile.in create mode 100644 bochs/instrument/stubs/instrument.cc create mode 100644 bochs/instrument/stubs/instrument.h create mode 100644 bochs/iodev/Makefile.in create mode 100644 bochs/iodev/acpi.cc create mode 100644 bochs/iodev/acpi.h create mode 100644 bochs/iodev/aspi-win32.h create mode 100644 bochs/iodev/biosdev.cc create mode 100644 bochs/iodev/biosdev.h create mode 100644 bochs/iodev/busmouse.cc create mode 100644 bochs/iodev/busmouse.h create mode 100644 bochs/iodev/cdrom.cc create mode 100644 bochs/iodev/cdrom.h create mode 100644 bochs/iodev/cdrom_amigaos.cc create mode 100644 bochs/iodev/cdrom_beos.cc create mode 100644 bochs/iodev/cdrom_beos.h create mode 100644 bochs/iodev/cmos.cc create mode 100644 bochs/iodev/cmos.h create mode 100644 bochs/iodev/crc32.cc create mode 100644 bochs/iodev/crc32.h create mode 100644 bochs/iodev/devices.cc create mode 100755 bochs/iodev/devices.txt create mode 100644 bochs/iodev/dma.cc create mode 100644 bochs/iodev/dma.h create mode 100644 bochs/iodev/eth.cc create mode 100644 bochs/iodev/eth.h create mode 100644 bochs/iodev/eth_arpback.cc create mode 100644 bochs/iodev/eth_fbsd.cc create mode 100644 bochs/iodev/eth_linux.cc create mode 100644 bochs/iodev/eth_null.cc create mode 100644 bochs/iodev/eth_packetmaker.cc create mode 100644 bochs/iodev/eth_packetmaker.h create mode 100644 bochs/iodev/eth_tap.cc create mode 100644 bochs/iodev/eth_tuntap.cc create mode 100644 bochs/iodev/eth_vde.cc create mode 100644 bochs/iodev/eth_vnet.cc create mode 100644 bochs/iodev/eth_win32.cc create mode 100644 bochs/iodev/extfpuirq.cc create mode 100644 bochs/iodev/extfpuirq.h create mode 100644 bochs/iodev/floppy.cc create mode 100644 bochs/iodev/floppy.h create mode 100644 bochs/iodev/gameport.cc create mode 100644 bochs/iodev/gameport.h create mode 100644 bochs/iodev/guest2host.cc create mode 100644 bochs/iodev/guest2host.h create mode 100644 bochs/iodev/harddrv.cc create mode 100644 bochs/iodev/harddrv.h create mode 100644 bochs/iodev/hdimage.cc create mode 100644 bochs/iodev/hdimage.h create mode 100644 bochs/iodev/ioapic.cc create mode 100644 bochs/iodev/ioapic.h create mode 100644 bochs/iodev/iodebug.cc create mode 100644 bochs/iodev/iodebug.h create mode 100644 bochs/iodev/iodev.h create mode 100644 bochs/iodev/keyboard.cc create mode 100644 bochs/iodev/keyboard.h create mode 100644 bochs/iodev/ne2k.cc create mode 100644 bochs/iodev/ne2k.h create mode 100644 bochs/iodev/parallel.cc create mode 100644 bochs/iodev/parallel.h create mode 100644 bochs/iodev/pci.cc create mode 100644 bochs/iodev/pci.h create mode 100644 bochs/iodev/pci2isa.cc create mode 100644 bochs/iodev/pci2isa.h create mode 100644 bochs/iodev/pci_ide.cc create mode 100644 bochs/iodev/pci_ide.h create mode 100644 bochs/iodev/pcidev.cc create mode 100644 bochs/iodev/pcidev.h create mode 100644 bochs/iodev/pcipnic.cc create mode 100644 bochs/iodev/pcipnic.h create mode 100644 bochs/iodev/pcivga.cc create mode 100644 bochs/iodev/pcivga.h create mode 100644 bochs/iodev/pic.cc create mode 100644 bochs/iodev/pic.h create mode 100644 bochs/iodev/pit82c54.cc create mode 100644 bochs/iodev/pit82c54.h create mode 100644 bochs/iodev/pit_wrap.cc create mode 100644 bochs/iodev/pit_wrap.h create mode 100644 bochs/iodev/pnic_api.h create mode 100644 bochs/iodev/sb16.cc create mode 100644 bochs/iodev/sb16.h create mode 100644 bochs/iodev/scancodes.cc create mode 100644 bochs/iodev/scancodes.h create mode 100644 bochs/iodev/scsi_commands.h create mode 100644 bochs/iodev/scsi_device.cc create mode 100644 bochs/iodev/scsi_device.h create mode 100644 bochs/iodev/scsidefs.h create mode 100644 bochs/iodev/scsipt.h create mode 100644 bochs/iodev/serial.cc create mode 100644 bochs/iodev/serial.h create mode 100644 bochs/iodev/serial_raw.cc create mode 100644 bochs/iodev/serial_raw.h create mode 100644 bochs/iodev/slowdown_timer.cc create mode 100644 bochs/iodev/slowdown_timer.h create mode 100644 bochs/iodev/soundlnx.cc create mode 100644 bochs/iodev/soundlnx.h create mode 100644 bochs/iodev/soundmod.cc create mode 100644 bochs/iodev/soundmod.h create mode 100644 bochs/iodev/soundosx.cc create mode 100644 bochs/iodev/soundosx.h create mode 100644 bochs/iodev/soundwin.cc create mode 100644 bochs/iodev/soundwin.h create mode 100644 bochs/iodev/speaker.cc create mode 100644 bochs/iodev/speaker.h create mode 100644 bochs/iodev/svga_cirrus.cc create mode 100644 bochs/iodev/svga_cirrus.h create mode 100644 bochs/iodev/unmapped.cc create mode 100644 bochs/iodev/unmapped.h create mode 100644 bochs/iodev/usb_common.cc create mode 100644 bochs/iodev/usb_common.h create mode 100644 bochs/iodev/usb_hid.cc create mode 100644 bochs/iodev/usb_hid.h create mode 100644 bochs/iodev/usb_hub.cc create mode 100644 bochs/iodev/usb_hub.h create mode 100644 bochs/iodev/usb_msd.cc create mode 100644 bochs/iodev/usb_msd.h create mode 100644 bochs/iodev/usb_ohci.cc create mode 100644 bochs/iodev/usb_ohci.h create mode 100755 bochs/iodev/usb_printer.cc create mode 100755 bochs/iodev/usb_printer.h create mode 100644 bochs/iodev/usb_uhci.cc create mode 100644 bochs/iodev/usb_uhci.h create mode 100644 bochs/iodev/vga.cc create mode 100644 bochs/iodev/vga.h create mode 100644 bochs/iodev/virt_timer.cc create mode 100644 bochs/iodev/virt_timer.h create mode 100644 bochs/iodev/vmware3.cc create mode 100644 bochs/iodev/vmware3.h create mode 100644 bochs/iodev/vmware4.cc create mode 100644 bochs/iodev/vmware4.h create mode 100644 bochs/iodev/vvfat.cc create mode 100644 bochs/iodev/vvfat.h create mode 100644 bochs/load32bitOShack.cc create mode 100644 bochs/logio.cc create mode 100644 bochs/ltdl.c create mode 100644 bochs/ltdl.h create mode 100644 bochs/ltdlconf.h.in create mode 100644 bochs/ltmain.sh create mode 100644 bochs/main.cc create mode 100755 bochs/make-ag++.sh create mode 100644 bochs/memory/Makefile.in create mode 100644 bochs/memory/memory.cc create mode 100644 bochs/memory/memory.h create mode 100644 bochs/memory/misc_mem.cc create mode 100644 bochs/misc/Makefile.in create mode 100644 bochs/misc/bxcommit.c create mode 100644 bochs/misc/bximage.c create mode 100644 bochs/misc/make_cmos_image.cc create mode 100644 bochs/misc/niclist.c create mode 100644 bochs/misc/sb16/sb16ctrl.c create mode 100644 bochs/misc/sb16/sb16ctrl.example create mode 100755 bochs/misc/sb16/sb16ctrl.exe create mode 100644 bochs/misc/spoolpipe.c create mode 100644 bochs/misc/test-access-check.cc create mode 100755 bochs/msrs.def create mode 100644 bochs/osdep.cc create mode 100644 bochs/osdep.h create mode 100755 bochs/param_names.h create mode 100644 bochs/patches/HEADER create mode 100644 bochs/patches/NOTES create mode 100755 bochs/patches/beos-gui-fabo.capture-filter create mode 100644 bochs/patches/beos-gui-fabo.capture-filter.README create mode 100755 bochs/patches/bochs-bios-win32.diff create mode 100644 bochs/patches/patch.beos-gui-fabo create mode 100644 bochs/patches/patch.beos-gui-fabo-template create mode 100755 bochs/patches/patch.cosimulation create mode 100644 bochs/patches/patch.decode-interrupts.gz create mode 100644 bochs/patches/patch.example-override-ask create mode 100644 bochs/patches/patch.example-user-plugin create mode 100644 bochs/patches/patch.fast-dma-cbothamy create mode 100644 bochs/patches/patch.floppy-athiel create mode 100644 bochs/patches/patch.hosttime-port create mode 100644 bochs/patches/patch.marklog create mode 100755 bochs/patches/patch.mingw-resources create mode 100644 bochs/pc_system.cc create mode 100644 bochs/pc_system.h create mode 100644 bochs/plex86-interface.cc create mode 100644 bochs/plex86-interface.h create mode 100644 bochs/plex86/COPYING create mode 100644 bochs/plex86/Makefile.in create mode 100644 bochs/plex86/PERFORMANCE create mode 100644 bochs/plex86/TODO create mode 100644 bochs/plex86/config.h.in create mode 100755 bochs/plex86/configure create mode 100644 bochs/plex86/configure.in create mode 100644 bochs/plex86/descriptor.h create mode 100644 bochs/plex86/kernel/Makefile.in create mode 100644 bochs/plex86/kernel/fault-mon.c create mode 100644 bochs/plex86/kernel/freebsd/Makefile create mode 100644 bochs/plex86/kernel/host-beos.c create mode 100644 bochs/plex86/kernel/host-freebsd.c create mode 100644 bochs/plex86/kernel/host-linux.c create mode 100644 bochs/plex86/kernel/host-netbsd.c create mode 100644 bochs/plex86/kernel/host-null.c create mode 100644 bochs/plex86/kernel/include/descriptor2.h create mode 100644 bochs/plex86/kernel/include/eflags.h create mode 100644 bochs/plex86/kernel/include/guest_context.h create mode 100644 bochs/plex86/kernel/include/monitor.h create mode 100644 bochs/plex86/kernel/include/paging.h create mode 100644 bochs/plex86/kernel/include/tss.h create mode 100644 bochs/plex86/kernel/monitor-host.c create mode 100644 bochs/plex86/kernel/monitor-mon.c create mode 100644 bochs/plex86/kernel/nexus.S create mode 100644 bochs/plex86/kernel/paging-mon.c create mode 100644 bochs/plex86/kernel/panic-mon.c create mode 100644 bochs/plex86/kernel/print-mon.c create mode 100644 bochs/plex86/kernel/util-nexus.c create mode 100755 bochs/plex86/misc/load_module.sh create mode 100755 bochs/plex86/misc/netbsd_post.sh create mode 100755 bochs/plex86/misc/unload_module.sh create mode 100644 bochs/plex86/plex86.h create mode 100644 bochs/plugin.cc create mode 100644 bochs/plugin.h create mode 100755 bochs/win32_enh_dbg.rc create mode 100644 bochs/win32res.rc create mode 100644 bochs/wxbochs.rc create mode 100644 cmake/FindLibDwarf.cmake create mode 100644 cmake/FindLibElf.cmake create mode 100644 cmake/compilerconfig.cmake create mode 100755 cmake/config_failbochs.sh.in create mode 100755 cmake/mergelib.sh create mode 100644 core/AspectConfig.hpp create mode 100644 core/CMakeLists.txt create mode 100644 core/Doxyfile.in create mode 100644 core/SAL/CMakeLists.txt create mode 100644 core/SAL/Memory.cc create mode 100644 core/SAL/Memory.hpp create mode 100644 core/SAL/Register.cc create mode 100644 core/SAL/Register.hpp create mode 100644 core/SAL/SALConfig.hpp create mode 100644 core/SAL/SALInst.hpp create mode 100644 core/SAL/SimulatorController.cc create mode 100644 core/SAL/SimulatorController.hpp create mode 100644 core/SAL/bochs/BochsConfig.hpp create mode 100644 core/SAL/bochs/BochsController.hpp create mode 100644 core/SAL/bochs/BochsMemory.hpp create mode 100644 core/SAL/bochs/BochsRegister.hpp create mode 100644 core/SAL/bochs/CPULoop.ah create mode 100644 core/SAL/bochs/Controller.cc create mode 100644 core/SAL/bochs/GuestSysCom.ah create mode 100644 core/SAL/bochs/Interrupt.ah create mode 100644 core/SAL/bochs/Interrupt_suppression.ah create mode 100644 core/SAL/bochs/Jump.ah create mode 100644 core/SAL/bochs/JumpToPreviousCtx.ah create mode 100644 core/SAL/bochs/MemAccessBitFlip.ah create mode 100644 core/SAL/bochs/MemEvents.ah create mode 100644 core/SAL/bochs/Trap.ah create mode 100644 core/SAL/bochs/bochs_helpers.hpp create mode 100644 core/SAL/bochs/credits.ah create mode 100644 core/SAL/bochs/disable_add_remove_logfn.ah create mode 100644 core/SAL/bochs/disable_keyboard_interrupt.ah create mode 100644 core/SAL/bochs/failbochs.hpp create mode 100644 core/SAL/bochs/fireTimer.ah create mode 100644 core/SAL/bochs/init.ah create mode 100644 core/SAL/bochs/reboot.ah create mode 100644 core/SAL/bochs/restore.ah create mode 100644 core/SAL/bochs/save.ah create mode 100644 core/SAL/bochs/stfu.ah create mode 100644 core/SAL/ovp/Controller.cc create mode 100644 core/SAL/ovp/OVPConfig.hpp create mode 100644 core/SAL/ovp/OVPController.hpp create mode 100644 core/SAL/ovp/OVPMemory.hpp create mode 100644 core/SAL/ovp/OVPRegister.hpp create mode 100644 core/SAL/ovp/init.ah create mode 100644 core/config/CMakeLists.txt create mode 100644 core/config/experiments.hpp.in create mode 100644 core/controller/CMakeLists.txt create mode 100644 core/controller/Campaign.hpp create mode 100644 core/controller/CampaignManager.cc create mode 100644 core/controller/CampaignManager.hpp create mode 100644 core/controller/CoroutineManager.cc create mode 100644 core/controller/CoroutineManager.hpp create mode 100644 core/controller/Event.cc create mode 100644 core/controller/Event.hpp create mode 100644 core/controller/EventList.cc create mode 100644 core/controller/EventList.hpp create mode 100644 core/controller/ExperimentData.hpp create mode 100644 core/controller/ExperimentDataQueue.cc create mode 100644 core/controller/ExperimentDataQueue.hpp create mode 100644 core/controller/ExperimentFlow.hpp create mode 100644 core/controller/Minion.hpp create mode 100644 core/controller/Signal.cc create mode 100644 core/controller/Signal.hpp create mode 100644 core/controller/SynchronizedExperimentDataQueue.cc create mode 100644 core/controller/SynchronizedExperimentDataQueue.hpp create mode 100644 core/experiments/CMakeLists.txt create mode 100644 core/experiments/FaultCoverageExperiment/CMakeLists.txt create mode 100644 core/experiments/FaultCoverageExperiment/experiment.cc create mode 100644 core/experiments/FaultCoverageExperiment/experiment.hpp create mode 100644 core/experiments/MHTestCampaign/CMakeLists.txt create mode 100644 core/experiments/MHTestCampaign/MHTest.proto create mode 100644 core/experiments/MHTestCampaign/MHTestCampaign.cc create mode 100644 core/experiments/MHTestCampaign/MHTestCampaign.hpp create mode 100644 core/experiments/MHTestCampaign/experiment.cc create mode 100644 core/experiments/MHTestCampaign/experiment.hpp create mode 100644 core/experiments/MHTestCampaign/mhcampaign.cc create mode 100644 core/experiments/TracingTest/CMakeLists.txt create mode 100644 core/experiments/TracingTest/experiment.cc create mode 100644 core/experiments/TracingTest/experiment.hpp create mode 100644 core/experiments/attic/DataRetrievalExperiment.cc create mode 100644 core/experiments/attic/DataRetrievalExperiment.hpp create mode 100644 core/experiments/attic/ExperimentDataExample/CMakeLists.txt create mode 100644 core/experiments/attic/ExperimentDataExample/FaultCoverageExperiment.proto create mode 100755 core/experiments/attic/ExperimentDataExample/build_example.sh create mode 100644 core/experiments/attic/ExperimentDataExample/example.cc create mode 100644 core/experiments/attic/JumpAndRunExperiment/JumpAndRunExperiment.hpp create mode 100644 core/experiments/attic/MemWriteExperiment.hpp create mode 100644 core/experiments/attic/MyExperiment.hpp create mode 100644 core/experiments/attic/SingleSteppingExperiment.hpp create mode 100644 core/experiments/attic/instantiate-experiment.ah.template create mode 100644 core/experiments/checksum-oostubs/CMakeLists.txt create mode 120000 core/experiments/checksum-oostubs/MemoryMap.hpp create mode 100644 core/experiments/checksum-oostubs/campaign.cc create mode 100644 core/experiments/checksum-oostubs/campaign.hpp create mode 100644 core/experiments/checksum-oostubs/checksum-oostubs.proto create mode 100644 core/experiments/checksum-oostubs/experiment.cc create mode 100644 core/experiments/checksum-oostubs/experiment.hpp create mode 100644 core/experiments/checksum-oostubs/experimentInfo.hpp create mode 100644 core/experiments/checksum-oostubs/main.cc create mode 100644 core/experiments/coolchecksum/CMakeLists.txt create mode 100644 core/experiments/coolchecksum/campaign.cc create mode 100644 core/experiments/coolchecksum/campaign.hpp create mode 100644 core/experiments/coolchecksum/coolchecksum.proto create mode 100644 core/experiments/coolchecksum/experiment.cc create mode 100644 core/experiments/coolchecksum/experiment.hpp create mode 100644 core/experiments/coolchecksum/experimentInfo.hpp create mode 100644 core/experiments/coolchecksum/main.cc create mode 100644 core/experiments/hscsimple/CMakeLists.txt create mode 100644 core/experiments/hscsimple/experiment.cc create mode 100644 core/experiments/hscsimple/experiment.hpp create mode 100644 core/experiments/instantiate-experiment.ah.in create mode 100644 core/jobserver/CMakeLists.txt create mode 100644 core/jobserver/JobClient.cc create mode 100644 core/jobserver/JobClient.hpp create mode 100644 core/jobserver/JobServer.cc create mode 100644 core/jobserver/JobServer.hpp create mode 100644 core/jobserver/SocketComm.cc create mode 100644 core/jobserver/SocketComm.hpp create mode 100644 core/jobserver/messagedefs/CMakeLists.txt create mode 100644 core/jobserver/messagedefs/FailControlMessage.proto create mode 100755 core/jobserver/messagedefs/protogen.sh create mode 100644 core/plugins/CMakeLists.txt create mode 100644 core/plugins/tracing/CMakeLists.txt create mode 100644 core/plugins/tracing/TracingPlugin.cc create mode 100644 core/plugins/tracing/TracingPlugin.hpp create mode 100755 core/plugins/tracing/dump-trace.py create mode 100644 core/plugins/tracing/trace.proto create mode 100644 core/tests/CMakeLists.txt create mode 100644 core/tests/TestData.proto create mode 100644 core/tests/client.cc create mode 100644 core/tests/dwarf.cc create mode 100755 core/tests/main.elf create mode 100644 core/tests/server.cc create mode 100644 core/tests/testjc.cc create mode 100644 core/util/CMakeLists.txt create mode 100644 core/util/Logger.cc create mode 100644 core/util/Logger.hpp create mode 100644 core/util/MemoryMap.hpp create mode 100644 core/util/SynchronizedCounter.cc create mode 100644 core/util/SynchronizedCounter.hpp create mode 100644 core/util/SynchronizedMap.hpp create mode 100644 core/util/SynchronizedQueue.hpp create mode 100644 core/variant_config.h.cmake create mode 100644 doc/class-diagram.dia create mode 100644 doc/class-diagram.png create mode 100644 doc/collaboration.dia create mode 100644 doc/collaboration.png create mode 100644 doc/communication-sequence-normal.dia create mode 100644 doc/communication-sequence-normal.png create mode 100644 doc/coverage-experiment-excerpt.cc create mode 100644 doc/coverage-experiment.cc create mode 100644 doc/howto-build.txt create mode 100644 doc/todo.txt create mode 100755 firesults/buildplots.py create mode 100644 firesults/exp3/exp1290163825.-d-bit0.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit1.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit10.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit11.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit12.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit13.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit14.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit15.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit16.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit17.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit18.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit19.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit2.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit20.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit21.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit22.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit23.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit24.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit25.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit26.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit27.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit28.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit29.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit3.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit30.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit31.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit4.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit5.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit6.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit7.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit8.dat create mode 100644 firesults/exp3/exp1290163825.-d-bit9.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit0.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit1.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit10.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit11.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit12.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit13.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit14.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit15.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit16.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit17.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit18.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit19.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit2.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit20.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit21.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit22.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit23.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit24.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit25.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit26.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit27.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit28.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit29.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit3.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit30.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit31.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit4.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit5.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit6.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit7.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit8.dat create mode 100644 firesults/exp4/exp1290265642.-a-bit9.dat create mode 100644 ovp/CMakeLists.txt create mode 100644 ovp/OVPCpu.hpp create mode 100644 ovp/OVPPlatform.cc create mode 100644 ovp/OVPPlatform.hpp create mode 100644 ovp/OVPStatusRegister.hpp create mode 100644 ovp/README create mode 100644 ovp/armmModel/CMakeLists.txt create mode 100644 ovp/armmModel/Makefile create mode 100644 ovp/armmModel/armAttributeEntriesThumb16.h create mode 100644 ovp/armmModel/armAttributeEntriesThumb32.h create mode 100644 ovp/armmModel/armBitMacros.h create mode 100644 ovp/armmModel/armBus.c create mode 100644 ovp/armmModel/armConfig.h create mode 100644 ovp/armmModel/armDebug.h create mode 100644 ovp/armmModel/armDecode.h create mode 100644 ovp/armmModel/armDecodeEntriesThumb16.h create mode 100644 ovp/armmModel/armDecodeEntriesThumb32.h create mode 100644 ovp/armmModel/armDecodeThumb.h create mode 100644 ovp/armmModel/armDecodeTypes.h create mode 100644 ovp/armmModel/armDisassemble.h create mode 100644 ovp/armmModel/armDisassembleFormats.h create mode 100644 ovp/armmModel/armEmit.h create mode 100644 ovp/armmModel/armExceptionTypes.h create mode 100644 ovp/armmModel/armExceptions.h create mode 100644 ovp/armmModel/armFPConstants.h create mode 100644 ovp/armmModel/armFunctions.h create mode 100644 ovp/armmModel/armInfo.c create mode 100644 ovp/armmModel/armMessage.h create mode 100644 ovp/armmModel/armMode.h create mode 100644 ovp/armmModel/armMorph.h create mode 100644 ovp/armmModel/armMorphEntries.h create mode 100644 ovp/armmModel/armMorphFunctions.h create mode 100644 ovp/armmModel/armRegisters.h create mode 100644 ovp/armmModel/armStructure.h create mode 100644 ovp/armmModel/armSys.h create mode 100644 ovp/armmModel/armSysRegisters.h create mode 100644 ovp/armmModel/armTypeRefs.h create mode 100644 ovp/armmModel/armUtils.h create mode 100644 ovp/armmModel/armVFP.h create mode 100644 ovp/armmModel/armVM.h create mode 100644 ovp/armmModel/armVariant.h create mode 100644 ovp/armmModel/armmAttrs.c create mode 100644 ovp/armmModel/armmConfigList.c create mode 100644 ovp/armmModel/armmDebug.c create mode 100644 ovp/armmModel/armmDecode.c create mode 100644 ovp/armmModel/armmDecodeThumb.c create mode 100644 ovp/armmModel/armmDisassemble.c create mode 100644 ovp/armmModel/armmDoc.c create mode 100644 ovp/armmModel/armmDoc.h create mode 100644 ovp/armmModel/armmEmit.c create mode 100644 ovp/armmModel/armmExceptions.c create mode 100644 ovp/armmModel/armmMain.c create mode 100644 ovp/armmModel/armmMorphFunctions.c create mode 100644 ovp/armmModel/armmMorphTable.c create mode 100644 ovp/armmModel/armmParameters.c create mode 100644 ovp/armmModel/armmParameters.h create mode 100644 ovp/armmModel/armmSemiHost.c create mode 100644 ovp/armmModel/armmSys.c create mode 100644 ovp/armmModel/armmUtils.c create mode 100644 ovp/armmModel/armmVFP.c create mode 100644 ovp/armmModel/armmVM.c create mode 100755 ovp/armmModel/export.def create mode 100644 ovp/armmModel/failSALlink.cc create mode 100644 ovp/cortexM3/CMakeLists.txt create mode 100644 ovp/cortexM3/platform/platform.cc create mode 100644 ovp/cortexM3/platform/platform.hpp create mode 100644 ovp/cortexM3/platform/statreg.hpp create mode 100644 ovp/ovpworld.org/mmc/flakyMemory/1.0/model/CMakeLists.txt create mode 100644 ovp/ovpworld.org/mmc/flakyMemory/1.0/model/flipBits.cpp create mode 100644 ovp/ovpworld.org/mmc/flakyMemory/1.0/model/flipBits.h create mode 100644 ovp/ovpworld.org/mmc/flakyMemory/1.0/model/model.cpp create mode 100644 ovp/setImperas.sh create mode 100644 ovp/test1/CMakeLists.txt create mode 100755 ovp/test1/application.elf create mode 100644 ovp/test1/application/application.c create mode 100644 ovp/test1/platform/beforeInstruction.cpp create mode 100644 ovp/test1/platform/beforeInstruction.hpp create mode 100644 ovp/test1/platform/flakyMemory.cpp create mode 100644 ovp/test1/platform/flakyMemory.hpp create mode 100644 ovp/test1/platform/platform.cpp create mode 100755 scripts/client.sh create mode 100755 scripts/colorize.pl create mode 100755 scripts/distribute-experiment.sh create mode 100644 scripts/fail-env.sh create mode 100755 scripts/multiple-clients.sh create mode 100755 scripts/rebuild-bochs.sh create mode 100755 scripts/runcampaign.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..81f96c69 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +*.o +*.a +*.d +*.acc +*.pb.h +*.pb.cc +*.gcda +*~ +Makefile +build + +bochs/autom4te.cache/ +bochs/bochs +bochs/build/linux/bochs-dlx +bochs/build/macosx/Info.plist +bochs/build/win32/nsis/bochs.nsi +bochs/bxcommit +bochs/bximage +bochs/bxversion.h +bochs/bxversion.rc +bochs/config.h +bochs/config.log +bochs/config.status +bochs/libtool +bochs/ltdlconf.h + +!bochs/plex86/kernel/freebsd/Makefile diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..967dc791 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,68 @@ +cmake_minimum_required(VERSION 2.6) + +PROJECT(Fail*) + +set(PROJECT_VERSION "0.0.1" CACHE STRING "Fail* version number") + +#### Put all resulting library files in /lib #### +SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) + +#### Put all resulting executables in /bin #### +SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) +# At the moment this is the campaign controller executable. +## (The autoconf'd Bochs instance is placed in the auto-configured path, +## as we still just call Bochs' Makefile's make install) + + +#### Setup search path for custom cmake scipts #### +SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) + +#### Compiler configuration, see cmake/compilerconfig.cmake +include(compilerconfig) + +#### #OPTION to configure Bochs/OVP #### +OPTION( BUILD_OVP "Build OVP Variant?" OFF) # Defaults to BOCHS ON +OPTION( BUILD_BOCHS "Build Bochs Variant?" ON) + +#### Configuration file emitting BUILD_OVP/BOCHS defines #### +configure_file(${CMAKE_SOURCE_DIR}/core/variant_config.h.cmake ${CMAKE_SOURCE_DIR}/core/variant_config.h) + +if(BUILD_OVP) + message(STATUS "[${PROJECT_NAME}] Building OVP variant...") + SET(VARIANT ovp) +else(BUILD_OVP) + message(STATUS "[${PROJECT_NAME}] Building Bochs variant...") + ## add necessary additional header search paths. + add_definitions(-I${CMAKE_SOURCE_DIR}/bochs/instrument/stubs/ -I${CMAKE_SOURCE_DIR}/bochs/) + SET(VARIANT bochs) +endif(BUILD_OVP) + +## Additional Compiler flags ## +set(CMAKE_C_FLAGS "-g -Wall") +set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}") +## Tell the linker where to find the libfail.a +link_directories("${LIBRARY_OUTPUT_PATH}") + +## Add CMakeLists from subdirectories (at the moment only core) +add_subdirectory(core) + +if(BUILD_OVP) + add_subdirectory(ovp) +else(BUILD_OVP) +endif(BUILD_OVP) + +## Just for testing: +## Invoking bochs build via external project +# Setup configure call for bochs (-> make ebochs) +# Prefix dir for make install etc +#set(BOCHS_PREFIX_DIR "${CMAKE_BINARY_DIR}/bochs") +#configure_file(${CMAKE_SOURCE_DIR}/cmake/config_failbochs.sh.in ${CMAKE_BINARY_DIR}/config_bochs.sh) +# +#include(ExternalProject) +#externalproject_add( +# ebochs +# SOURCE_DIR ${CMAKE_SOURCE_DIR}/bochs +# CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/config_bochs.sh +# BUILD_IN_SOURCE 1 +# PREFIX ${BOCHS_PREFIX_DIR} +#) diff --git a/bochs/.bochsrc b/bochs/.bochsrc new file mode 100644 index 00000000..81a11d0e --- /dev/null +++ b/bochs/.bochsrc @@ -0,0 +1,989 @@ +# You may now use double quotes around pathnames, in case +# your pathname includes spaces. + +#======================================================================= +# CONFIG_INTERFACE +# +# The configuration interface is a series of menus or dialog boxes that +# allows you to change all the settings that control Bochs's behavior. +# Depending on the platform there are up to 3 choices of configuration +# interface: a text mode version called "textconfig" and two graphical versions +# called "win32config" and "wx". The text mode version uses stdin/stdout and +# is always compiled in, unless Bochs is compiled for wx only. The choice +# "win32config" is only available on win32 and it is the default there. +# The choice "wx" is only available when you use "--with-wx" on the configure +# command. If you do not write a config_interface line, Bochs will +# choose a default for you. +# +# NOTE: if you use the "wx" configuration interface, you must also use +# the "wx" display library. +#======================================================================= +#config_interface: textconfig +#config_interface: win32config +#config_interface: wx + +#======================================================================= +# DISPLAY_LIBRARY +# +# The display library is the code that displays the Bochs VGA screen. Bochs +# has a selection of about 10 different display library implementations for +# different platforms. If you run configure with multiple --with-* options, +# the display_library command lets you choose which one you want to run with. +# If you do not write a display_library line, Bochs will choose a default for +# you. +# +# The choices are: +# x use X windows interface, cross platform +# win32 use native win32 libraries +# carbon use Carbon library (for MacOS X) +# beos use native BeOS libraries +# macintosh use MacOS pre-10 +# amigaos use native AmigaOS libraries +# sdl use SDL library, cross platform +# svga use SVGALIB library for Linux, allows graphics without X11 +# term text only, uses curses/ncurses library, cross platform +# rfb provides an interface to AT&T's VNC viewer, cross platform +# wx use wxWidgets library, cross platform +# nogui no display at all +# +# NOTE: if you use the "wx" configuration interface, you must also use +# the "wx" display library. +# +# Specific options: +# Some display libraries now support specific option to control their +# behaviour. See the examples below for currently supported options. +#======================================================================= +#display_library: amigaos +#display_library: beos +#display_library: carbon +#display_library: macintosh +#display_library: nogui +#display_library: rfb, options="timeout=60" # time to wait for client +#display_library: sdl, options="fullscreen" # startup in fullscreen mode +#display_library: term +#display_library: win32, options="gui_debug" # use Win32 debugger gui +#display_library: wx +#display_library: x, options="hideIPS" # disable IPS output in status bar +#display_library: x, options="gui_debug" # use GTK debugger gui + +#======================================================================= +# ROMIMAGE: +# The ROM BIOS controls what the PC does when it first powers on. +# Normally, you can use a precompiled BIOS in the source or binary +# distribution called BIOS-bochs-latest. The ROM BIOS is usually loaded +# starting at address 0xf0000, and it is exactly 64k long. Another option +# is 128k BIOS which is loaded at address 0xe0000. +# You can also use the environment variable $BXSHARE to specify the +# location of the BIOS. +# The usage of external large BIOS images (up to 512k) at memory top is +# now supported, but we still recommend to use the BIOS distributed with +# Bochs. The start address optional, since it can be calculated from image size. +#======================================================================= +romimage: file=$BXSHARE/BIOS-bochs-latest +#romimage: file=bios/seabios-0.5.1.bin +#romimage: file=mybios.bin, address=0xfff80000 # 512k at memory top + +#======================================================================= +# CPU: +# This defines cpu-related parameters inside Bochs: +# +# COUNT: +# Set the number of processors:cores per processor:threads per core +# when Bochs is compiled for SMP emulation. +# Bochs currently supports up to 8 threads running simultaniosly. +# If Bochs is compiled without SMP support, it won't accept values +# different from 1. +# +# QUANTUM: +# Maximum amount of instructions allowed to execute by processor before +# returning control to another cpu. This option exists only in Bochs +# binary compiled with SMP support. +# +# RESET_ON_TRIPLE_FAULT: +# Reset the CPU when triple fault occur (highly recommended) rather than +# PANIC. Remember that if you trying to continue after triple fault the +# simulation will be completely bogus ! +# +# MSRS: +# Define path to user CPU Model Specific Registers (MSRs) specification. +# See example in msrs.def. +# +# IGNORE_BAD_MSRS: +# Ignore MSR references that Bochs does not understand; print a warning +# message instead of generating #GP exception. This option is enabled +# by default but will not be avaiable if configurable MSRs are enabled. +# +# IPS: +# Emulated Instructions Per Second. This is the number of IPS that bochs +# is capable of running on your machine. You can recompile Bochs with +# --enable-show-ips option enabled, to find your host's capability. +# Measured IPS value will then be logged into your log file or shown +# in the status bar (if supported by the gui). +# +# IPS is used to calibrate many time-dependent events within the bochs +# simulation. For example, changing IPS affects the frequency of VGA +# updates, the duration of time before a key starts to autorepeat, and +# the measurement of BogoMips and other benchmarks. +# +# Examples: +# +# Bochs Machine/Compiler Mips +# ____________________________________________________________________ +# 2.3.7 3.2Ghz Intel Core 2 Q9770 with WinXP/g++ 3.4 50 to 55 Mips +# 2.3.7 2.6Ghz Intel Core 2 Duo with WinXP/g++ 3.4 38 to 43 Mips +# 2.2.6 2.6Ghz Intel Core 2 Duo with WinXP/g++ 3.4 21 to 25 Mips +# 2.2.6 2.1Ghz Athlon XP with Linux 2.6/g++ 3.4 12 to 15 Mips +# 2.0.1 1.6Ghz Intel P4 with Win2000/g++ 3.3 5 to 7 Mips +#======================================================================= +cpu: count=1, ips=50000000, reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def" + +#======================================================================= +# CPUID: +# +# This defines features and functionality supported by Bochs emulated CPU: +# +# MMX: +# Select MMX instruction set support. +# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 5. +# +# SEP: +# Select SYSENTER/SYSEXIT instruction set support. +# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. +# +# SSE: +# Select SSE instruction set support. +# Any of NONE/SSE/SSE2/SSE3/SSSE3/SSE4_1/SSE4_2 could be selected. +# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. +# +# XAPIC: +# Select XAPIC extensions support. +# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. +# +# AES: +# Select AES instruction set support. +# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. +# +# MOVBE: +# Select MOVBE Intel(R) Atom instruction support. +# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. +# +# XSAVE: +# Select XSAVE extensions support. +# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. +# +# 1G_PAGES: +# Enable 1G page size support in long mode. +# This option exists only if Bochs compiled with x86-64 support. +# +# PCID: +# Enable Process-Context Identifiers (PCID) support in long mode. +# This option exists only if Bochs compiled with x86-64 support. +# +# FSGSBASE: +# Enable GS/GS BASE access instructions support in long mode. +# This option exists only if Bochs compiled with x86-64 support. +# +# MWAIT: +# Select MONITOR/MWAIT instructions support. +# This option exists only if Bochs compiled with --enable-monitor-mwait. +# +# MWAIT_IS_NOP: +# When this option is enabled MWAIT will not put the CPU into a sleep state. +# This option exists only if Bochs compiled with --enable-monitor-mwait. +# +# VENDOR_STRING: +# Set the CPUID vendor string returned by CPUID(0x0). This should be a +# twelve-character ASCII string. +# +# BRAND_STRING: +# Set the CPUID vendor string returned by CPUID(0x80000002 .. 0x80000004). +# This should be at most a forty-eight-character ASCII string. +# +# STEPPING: +# Set stepping information returned by CPUID. Default stepping value is 3. +# +# CPUID_LIMIT_WINNT: +# Determine whether to limit maximum CPUID function to 3. This mode is +# required to workaround WinNT installation and boot issues. +#======================================================================= +cpuid: mmx=1, sep=1, sse=sse4_2, xapic=1, aes=1, movbe=1, xsave=1 +cpuid: stepping=5 +cpuid: cpuid_limit_winnt=0 + +#======================================================================= +# MEMORY +# Set the amount of physical memory you want to emulate. +# +# GUEST: +# Set amount of guest physical memory to emulate. The default is 32MB, +# the maximum amount limited only by physical address space limitations. +# +# HOST: +# Set amount of host memory you want to allocate for guest RAM emulation. +# It is possible to allocate less memory than you want to emulate in guest +# system. This will fake guest to see the non-existing memory. Once guest +# system touches new memory block it will be dynamically taken from the +# memory pool. You will be warned (by FATAL PANIC) in case guest already +# used all allocated host memory and wants more. +# +#======================================================================= +memory: guest=512, host=256 + +#======================================================================= +# OPTROMIMAGE[1-4]: +# You may now load up to 4 optional ROM images. Be sure to use a +# read-only area, typically between C8000 and EFFFF. These optional +# ROM images should not overwrite the rombios (located at +# F0000-FFFFF) and the videobios (located at C0000-C7FFF). +# Those ROM images will be initialized by the bios if they contain +# the right signature (0x55AA) and a valid checksum. +# It can also be a convenient way to upload some arbitrary code/data +# in the simulation, that can be retrieved by the boot loader +#======================================================================= +#optromimage1: file=optionalrom.bin, address=0xd0000 +#optromimage2: file=optionalrom.bin, address=0xd1000 +#optromimage3: file=optionalrom.bin, address=0xd2000 +#optromimage4: file=optionalrom.bin, address=0xd3000 + +#optramimage1: file=/path/file1.img, address=0x0010000 +#optramimage2: file=/path/file2.img, address=0x0020000 +#optramimage3: file=/path/file3.img, address=0x0030000 +#optramimage4: file=/path/file4.img, address=0x0040000 + +#======================================================================= +# VGAROMIMAGE +# You now need to load a VGA ROM BIOS into C0000. +#======================================================================= +#vgaromimage: file=bios/VGABIOS-elpin-2.40 +vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest +#vgaromimage: file=bios/VGABIOS-lgpl-latest-cirrus + +#======================================================================= +# VGA: +# Here you can specify the display extension to be used. With the value +# 'none' you can use standard VGA with no extension. Other supported +# values are 'vbe' for Bochs VBE and 'cirrus' for Cirrus SVGA support. +#======================================================================= +#vga: extension=cirrus +vga: extension=vbe + +#======================================================================= +# FLOPPYA: +# Point this to pathname of floppy image file or device +# This should be of a bootable floppy(image/device) if you're +# booting from 'a' (or 'floppy'). +# +# You can set the initial status of the media to 'ejected' or 'inserted'. +# floppya: 2_88=path, status=ejected (2.88M 3.5" media) +# floppya: 1_44=path, status=inserted (1.44M 3.5" media) +# floppya: 1_2=path, status=ejected (1.2M 5.25" media) +# floppya: 720k=path, status=inserted (720K 3.5" media) +# floppya: 360k=path, status=inserted (360K 5.25" media) +# floppya: 320k=path, status=inserted (320K 5.25" media) +# floppya: 180k=path, status=inserted (180K 5.25" media) +# floppya: 160k=path, status=inserted (160K 5.25" media) +# floppya: image=path, status=inserted (guess media type from image size) +# floppya: 1_44=vvfat:path, status=inserted (use directory as VFAT media) +# floppya: type=1_44 (1.44M 3.5" floppy drive, no media) +# +# The path should be the name of a disk image file. On Unix, you can use a raw +# device name such as /dev/fd0 on Linux. On win32 platforms, use drive letters +# such as a: or b: as the path. The parameter 'image' works with image files +# only. In that case the size must match one of the supported types. +# The parameter 'type' can be used to enable the floppy drive without media +# and status specified. Usually the drive type is set up based on the media type. +# The optional parameter 'write_protected' can be used to control the media +# write protect switch. By default it is turned off. +#======================================================================= +floppya: 1_44=/dev/fd0, status=inserted +#floppya: image=../1.44, status=inserted +#floppya: 1_44=/dev/fd0H1440, status=inserted +#floppya: 1_2=../1_2, status=inserted +#floppya: 1_44=a:, status=inserted +#floppya: 1_44=a.img, status=inserted, write_protected=1 +#floppya: 1_44=/dev/rfd0a, status=inserted + +#======================================================================= +# FLOPPYB: +# See FLOPPYA above for syntax +#======================================================================= +#floppyb: 1_44=b:, status=inserted +#floppyb: 1_44=b.img, status=inserted + +#======================================================================= +# ATA0, ATA1, ATA2, ATA3 +# ATA controller for hard disks and cdroms +# +# ata[0-3]: enabled=[0|1], ioaddr1=addr, ioaddr2=addr, irq=number +# +# These options enables up to 4 ata channels. For each channel +# the two base io addresses and the irq must be specified. +# +# ata0 and ata1 are enabled by default with the values shown below +# +# Examples: +# ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 +# ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15 +# ata2: enabled=1, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11 +# ata3: enabled=1, ioaddr1=0x168, ioaddr2=0x360, irq=9 +#======================================================================= +ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 +ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15 +ata2: enabled=0, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11 +ata3: enabled=0, ioaddr1=0x168, ioaddr2=0x360, irq=9 + +#======================================================================= +# ATA[0-3]-MASTER, ATA[0-3]-SLAVE +# +# This defines the type and characteristics of all attached ata devices: +# type= type of attached device [disk|cdrom] +# mode= only valid for disks [flat|concat|external|dll|sparse|vmware3] +# mode= only valid for disks [undoable|growing|volatile|vvfat] +# path= path of the image / directory +# cylinders= only valid for disks +# heads= only valid for disks +# spt= only valid for disks +# status= only valid for cdroms [inserted|ejected] +# biosdetect= type of biosdetection [none|auto], only for disks on ata0 [cmos] +# translation=type of translation of the bios, only for disks [none|lba|large|rechs|auto] +# model= string returned by identify device command +# journal= optional filename of the redolog for undoable, volatile and vvfat disks +# +# Point this at a hard disk image file, cdrom iso file, or physical cdrom +# device. To create a hard disk image, try running bximage. It will help you +# choose the size and then suggest a line that works with it. +# +# In UNIX it may be possible to use a raw device as a Bochs hard disk, +# but WE DON'T RECOMMEND IT. In Windows there is no easy way. +# +# In windows, the drive letter + colon notation should be used for cdroms. +# Depending on versions of windows and drivers, you may only be able to +# access the "first" cdrom in the system. On MacOSX, use path="drive" +# to access the physical drive. +# +# The path is mandatory for hard disks. Disk geometry autodetection works with +# images created by bximage if CHS is set to 0/0/0 (cylinders are calculated +# using heads=16 and spt=63). For other hard disk images and modes the +# cylinders, heads, and spt are mandatory. In all cases the disk size reported +# from the image must be exactly C*H*S*512. +# +# Default values are: +# mode=flat, biosdetect=auto, translation=auto, model="Generic 1234" +# +# The biosdetect option has currently no effect on the bios +# +# Examples: +# ata0-master: type=disk, mode=flat, path=10M.sample, cylinders=306, heads=4, spt=17 +# ata0-slave: type=disk, mode=flat, path=20M.sample, cylinders=615, heads=4, spt=17 +# ata1-master: type=disk, mode=flat, path=30M.sample, cylinders=615, heads=6, spt=17 +# ata1-slave: type=disk, mode=flat, path=46M.sample, cylinders=940, heads=6, spt=17 +# ata2-master: type=disk, mode=flat, path=62M.sample, cylinders=940, heads=8, spt=17 +# ata2-slave: type=disk, mode=flat, path=112M.sample, cylinders=900, heads=15, spt=17 +# ata3-master: type=disk, mode=flat, path=483M.sample, cylinders=1024, heads=15, spt=63 +# ata3-slave: type=cdrom, path=iso.sample, status=inserted +#======================================================================= +ata0-master: type=disk, mode=flat, path="30M.sample" +#ata0-master: type=disk, mode=flat, path="30M.sample", cylinders=615, heads=6, spt=17 +#ata0-master: type=disk, mode=flat, path="c.img", cylinders=0 # autodetect +#ata0-slave: type=disk, mode=vvfat, path=/bochs/images/vvfat, journal=vvfat.redolog +#ata0-slave: type=cdrom, path=D:, status=inserted +#ata0-slave: type=cdrom, path=/dev/cdrom, status=inserted +#ata0-slave: type=cdrom, path="drive", status=inserted +#ata0-slave: type=cdrom, path=/dev/rcd0d, status=inserted + +#======================================================================= +# BOOT: +# This defines the boot sequence. Now you can specify up to 3 boot drives, +# which can be 'floppy', 'disk', 'cdrom' or 'network' (boot ROM). +# Legacy 'a' and 'c' are also supported. +# Examples: +# boot: floppy +# boot: cdrom, disk +# boot: network, disk +# boot: cdrom, floppy, disk +#======================================================================= +#boot: floppy +boot: disk + +#======================================================================= +# CLOCK: +# This defines the parameters of the clock inside Bochs: +# +# SYNC: +# This defines the method how to synchronize the Bochs internal time +# with realtime. With the value 'none' the Bochs time relies on the IPS +# value and no host time synchronization is used. The 'slowdown' method +# sacrifices performance to preserve reproducibility while allowing host +# time correlation. The 'realtime' method sacrifices reproducibility to +# preserve performance and host-time correlation. +# It is possible to enable both synchronization methods. +# +# TIME0: +# Specifies the start (boot) time of the virtual machine. Use a time +# value as returned by the time(2) system call. If no time0 value is +# set or if time0 equal to 1 (special case) or if time0 equal 'local', +# the simulation will be started at the current local host time. +# If time0 equal to 2 (special case) or if time0 equal 'utc', +# the simulation will be started at the current utc time. +# +# Syntax: +# clock: sync=[none|slowdown|realtime|both], time0=[timeValue|local|utc] +# +# Example: +# clock: sync=none, time0=local # Now (localtime) +# clock: sync=slowdown, time0=315529200 # Tue Jan 1 00:00:00 1980 +# clock: sync=none, time0=631148400 # Mon Jan 1 00:00:00 1990 +# clock: sync=realtime, time0=938581955 # Wed Sep 29 07:12:35 1999 +# clock: sync=realtime, time0=946681200 # Sat Jan 1 00:00:00 2000 +# clock: sync=none, time0=1 # Now (localtime) +# clock: sync=none, time0=utc # Now (utc/gmt) +# +# Default value are sync=none, time0=local +#======================================================================= +#clock: sync=none, time0=local + + +#======================================================================= +# FLOPPY_BOOTSIG_CHECK: disabled=[0|1] +# Enables or disables the 0xaa55 signature check on boot floppies +# Defaults to disabled=0 +# Examples: +# floppy_bootsig_check: disabled=0 +# floppy_bootsig_check: disabled=1 +#======================================================================= +floppy_bootsig_check: disabled=0 + +#======================================================================= +# LOG: +# Give the path of the log file you'd like Bochs debug and misc. verbiage +# to be written to. If you don't use this option or set the filename to +# '-' the output is written to the console. If you really don't want it, +# make it "/dev/null" (Unix) or "nul" (win32). :^( +# +# Examples: +# log: ./bochs.out +# log: /dev/tty +#======================================================================= +#log: /dev/null +log: bochsout.txt + +#======================================================================= +# LOGPREFIX: +# This handles the format of the string prepended to each log line. +# You may use those special tokens : +# %t : 11 decimal digits timer tick +# %i : 8 hexadecimal digits of cpu current eip (ignored in SMP configuration) +# %e : 1 character event type ('i'nfo, 'd'ebug, 'p'anic, 'e'rror) +# %d : 5 characters string of the device, between brackets +# +# Default : %t%e%d +# Examples: +# logprefix: %t-%e-@%i-%d +# logprefix: %i%e%d +#======================================================================= +#logprefix: %t%e%d + +#======================================================================= +# LOG CONTROLS +# +# Bochs now has four severity levels for event logging. +# panic: cannot proceed. If you choose to continue after a panic, +# don't be surprised if you get strange behavior or crashes. +# error: something went wrong, but it is probably safe to continue the +# simulation. +# info: interesting or useful messages. +# debug: messages useful only when debugging the code. This may +# spit out thousands per second. +# +# For events of each level, you can choose to crash, report, or ignore. +# TODO: allow choice based on the facility: e.g. crash on panics from +# everything except the cdrom, and only report those. +# +# If you are experiencing many panics, it can be helpful to change +# the panic action to report instead of fatal. However, be aware +# that anything executed after a panic is uncharted territory and can +# cause bochs to become unstable. The panic is a "graceful exit," so +# if you disable it you may get a spectacular disaster instead. +#======================================================================= +panic: action=ask +error: action=report +info: action=report +debug: action=ignore +#pass: action=fatal + +#======================================================================= +# DEBUGGER_LOG: +# Give the path of the log file you'd like Bochs to log debugger output. +# If you really don't want it, make it /dev/null or '-'. :^( +# +# Examples: +# debugger_log: ./debugger.out +#======================================================================= +#debugger_log: /dev/null +#debugger_log: debugger.out +debugger_log: - + +#======================================================================= +# COM1, COM2, COM3, COM4: +# This defines a serial port (UART type 16550A). In the 'term' you can specify +# a device to use as com1. This can be a real serial line, or a pty. To use +# a pty (under X/Unix), create two windows (xterms, usually). One of them will +# run bochs, and the other will act as com1. Find out the tty the com1 +# window using the `tty' command, and use that as the `dev' parameter. +# Then do `sleep 1000000' in the com1 window to keep the shell from +# messing with things, and run bochs in the other window. Serial I/O to +# com1 (port 0x3f8) will all go to the other window. +# In socket* and pipe* (win32 only) modes Bochs becomes either socket/named pipe +# client or server. In client mode it connects to an already running server (if +# connection fails Bochs treats com port as not connected). In server mode it +# opens socket/named pipe and waits until a client application connects to it +# before starting simulation. This mode is useful for remote debugging (e.g. +# with gdb's "target remote host:port" command or windbg's command line option +# -k com:pipe,port=\\.\pipe\pipename). Note: 'socket' is a shorthand for +# 'socket-client' and 'pipe' for 'pipe-client'. Socket modes use simple TCP +# communication, pipe modes use duplex byte mode pipes. +# Other serial modes are 'null' (no input/output), 'file' (output to a file +# specified as the 'dev' parameter), 'raw' (use the real serial port - under +# construction for win32), 'mouse' (standard serial mouse - requires +# mouse option setting 'type=serial', 'type=serial_wheel' or 'type=serial_msys'). +# +# Examples: +# com1: enabled=1, mode=null +# com1: enabled=1, mode=mouse +# com2: enabled=1, mode=file, dev=serial.out +# com3: enabled=1, mode=raw, dev=com1 +# com3: enabled=1, mode=socket-client, dev=localhost:8888 +# com3: enabled=1, mode=socket-server, dev=localhost:8888 +# com4: enabled=1, mode=pipe-client, dev=\\.\pipe\mypipe +# com4: enabled=1, mode=pipe-server, dev=\\.\pipe\mypipe +#======================================================================= +#com1: enabled=1, mode=term, dev=/dev/ttyp9 + + +#======================================================================= +# PARPORT1, PARPORT2: +# This defines a parallel (printer) port. When turned on and an output file is +# defined the emulated printer port sends characters printed by the guest OS +# into the output file. On some platforms a device filename can be used to +# send the data to the real parallel port (e.g. "/dev/lp0" on Linux, "lpt1" on +# win32 platforms). +# +# Examples: +# parport1: enabled=1, file="parport.out" +# parport2: enabled=1, file="/dev/lp0" +# parport1: enabled=0 +#======================================================================= +parport1: enabled=1, file="parport.out" + +#======================================================================= +# SB16: +# This defines the SB16 sound emulation. It can have several of the +# following properties. +# All properties are in the format sb16: property=value +# midi: The filename is where the midi data is sent. This can be a +# device or just a file if you want to record the midi data. +# midimode: +# 0=no data +# 1=output to device (system dependent. midi denotes the device driver) +# 2=SMF file output, including headers +# 3=output the midi data stream to the file (no midi headers and no +# delta times, just command and data bytes) +# wave: This is the device/file where wave output is stored +# wavemode: +# 0=no data +# 1=output to device (system dependent. wave denotes the device driver) +# 2=VOC file output, incl. headers +# 3=output the raw wave stream to the file +# log: The file to write the sb16 emulator messages to. +# loglevel: +# 0=no log +# 1=resource changes, midi program and bank changes +# 2=severe errors +# 3=all errors +# 4=all errors plus all port accesses +# 5=all errors and port accesses plus a lot of extra info +# dmatimer: +# microseconds per second for a DMA cycle. Make it smaller to fix +# non-continuous sound. 750000 is usually a good value. This needs a +# reasonably correct setting for the IPS parameter of the CPU option. +# +# Examples for output devices: +# sb16: midimode=1, midi="", wavemode=1, wave="" # win32 +# sb16: midimode=1, midi=alsa:128:0, wavemode=1, wave=alsa # Linux with ALSA +#======================================================================= +#sb16: midimode=1, midi=/dev/midi00, wavemode=1, wave=/dev/dsp, loglevel=2, log=sb16.log, dmatimer=600000 + +#======================================================================= +# VGA_UPDATE_INTERVAL: +# Video memory is scanned for updates and screen updated every so many +# virtual seconds. The default is 50000, about 20Hz. Keep in mind that +# you must tweak the 'cpu: ips=N' directive to be as close to the number +# of emulated instructions-per-second your workstation can do, for this +# to be accurate. +# +# Examples: +# vga_update_interval: 250000 +#======================================================================= +vga_update_interval: 300000 + +# using for Winstone '98 tests +#vga_update_interval: 100000 + +#======================================================================= +# KEYBOARD_SERIAL_DELAY: +# Approximate time in microseconds that it takes one character to +# be transfered from the keyboard to controller over the serial path. +# Examples: +# keyboard_serial_delay: 200 +#======================================================================= +keyboard_serial_delay: 250 + +#======================================================================= +# KEYBOARD_PASTE_DELAY: +# Approximate time in microseconds between attempts to paste +# characters to the keyboard controller. This leaves time for the +# guest os to deal with the flow of characters. The ideal setting +# depends on how your operating system processes characters. The +# default of 100000 usec (.1 seconds) was chosen because it works +# consistently in Windows. +# +# If your OS is losing characters during a paste, increase the paste +# delay until it stops losing characters. +# +# Examples: +# keyboard_paste_delay: 100000 +#======================================================================= +keyboard_paste_delay: 100000 + +#======================================================================= +# MOUSE: +# This defines parameters for the emulated mouse type, the initial status +# of the mouse capture and the runtime method to toggle it. +# +# TYPE: +# With the mouse type option you can select the type of mouse to emulate. +# The default value is 'ps2'. The other choices are 'imps2' (wheel mouse +# on PS/2), 'serial', 'serial_wheel' and 'serial_msys' (one com port requires +# setting 'mode=mouse'). To connect a mouse to an USB port, see the 'usb_uhci' +# or 'usb_ohci' option (requires PCI and USB support). +# +# ENABLED: +# The Bochs gui creates mouse "events" unless the 'enabled' option is +# set to 0. The hardware emulation itself is not disabled by this. +# Unless you have a particular reason for enabling the mouse by default, +# it is recommended that you leave it off. You can also toggle the mouse +# usage at runtime (RFB, SDL, Win32, wxWidgets and X11 - see below). +# +# TOGGLE: +# The default method to toggle the mouse capture at runtime is to press the +# CTRL key and the middle mouse button ('ctrl+mbutton'). This option allows +# to change the method to 'ctrl+f10' (like DOSBox), 'ctrl+alt' (like QEMU) +# or 'f12' (replaces win32 'legacyF12' option). +# +# Examples: +# mouse: enabled=1 +# mouse: type=imps2, enabled=1 +# mouse: type=serial, enabled=1 +# mouse: enabled=0, toggle=ctrl+f10 +#======================================================================= +mouse: enabled=0 + +#======================================================================= +# private_colormap: Request that the GUI create and use it's own +# non-shared colormap. This colormap will be used +# when in the bochs window. If not enabled, a +# shared colormap scheme may be used. Not implemented +# on all GUI's. +# +# Examples: +# private_colormap: enabled=1 +# private_colormap: enabled=0 +#======================================================================= +private_colormap: enabled=0 + +#======================================================================= +# fullscreen: ONLY IMPLEMENTED ON AMIGA +# Request that Bochs occupy the entire screen instead of a +# window. +# +# Examples: +# fullscreen: enabled=0 +# fullscreen: enabled=1 +#======================================================================= +#fullscreen: enabled=0 +#screenmode: name="sample" + +#======================================================================= +# ne2k: NE2000 compatible ethernet adapter +# +# Examples: +# ne2k: ioaddr=IOADDR, irq=IRQ, mac=MACADDR, ethmod=MODULE, ethdev=DEVICE, script=SCRIPT +# +# ioaddr, irq: You probably won't need to change ioaddr and irq, unless there +# are IRQ conflicts. These arguments are ignored when assign the ne2k to a +# PCI slot. +# +# mac: The MAC address MUST NOT match the address of any machine on the net. +# Also, the first byte must be an even number (bit 0 set means a multicast +# address), and you cannot use ff:ff:ff:ff:ff:ff because that's the broadcast +# address. For the ethertap module, you must use fe:fd:00:00:00:01. There may +# be other restrictions too. To be safe, just use the b0:c4... address. +# +# ethdev: The ethdev value is the name of the network interface on your host +# platform. On UNIX machines, you can get the name by running ifconfig. On +# Windows machines, you must run niclist to get the name of the ethdev. +# Niclist source code is in misc/niclist.c and it is included in Windows +# binary releases. +# +# script: The script value is optional, and is the name of a script that +# is executed after bochs initialize the network interface. You can use +# this script to configure this network interface, or enable masquerading. +# This is mainly useful for the tun/tap devices that only exist during +# Bochs execution. The network interface name is supplied to the script +# as first parameter +# +# If you don't want to make connections to any physical networks, +# you can use the following 'ethmod's to simulate a virtual network. +# null: All packets are discarded, but logged to a few files. +# arpback: ARP is simulated. Disabled by default. +# vde: Virtual Distributed Ethernet +# vnet: ARP, ICMP-echo(ping), DHCP and read/write TFTP are simulated. +# The virtual host uses 192.168.10.1. +# DHCP assigns 192.168.10.2 to the guest. +# TFTP uses the ethdev value for the root directory and doesn't +# overwrite files. +# +#======================================================================= +# ne2k: ioaddr=0x300, irq=9, mac=fe:fd:00:00:00:01, ethmod=fbsd, ethdev=en0 #macosx +# ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:00, ethmod=fbsd, ethdev=xl0 +# ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:00, ethmod=linux, ethdev=eth0 +# ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:01, ethmod=win32, ethdev=MYCARD +# ne2k: ioaddr=0x300, irq=9, mac=fe:fd:00:00:00:01, ethmod=tap, ethdev=tap0 +# ne2k: ioaddr=0x300, irq=9, mac=fe:fd:00:00:00:01, ethmod=tuntap, ethdev=/dev/net/tun0, script=./tunconfig +# ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:01, ethmod=null, ethdev=eth0 +# ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:01, ethmod=vde, ethdev="/tmp/vde.ctl" +# ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:01, ethmod=vnet, ethdev="c:/temp" + +#======================================================================= +# pnic: Bochs/Etherboot pseudo-NIC +# +# Example: +# pnic: enabled=1, mac=MACADDR, ethmod=MODULE, ethdev=DEVICE, script=SCRIPT +# +# The pseudo-NIC accepts the same syntax (for mac, ethmod, ethdev, script) and +# supports the same networking modules as the NE2000 adapter. In addition to +# this, it must be assigned to a PCI slot. +#======================================================================= +#pnic: enabled=1, mac=b0:c4:20:00:00:00, ethmod=vnet + +#======================================================================= +# KEYBOARD_MAPPING: +# This enables a remap of a physical localized keyboard to a +# virtualized us keyboard, as the PC architecture expects. +# If enabled, the keymap file must be specified. +# +# Examples: +# keyboard_mapping: enabled=1, map=gui/keymaps/x11-pc-de.map +#======================================================================= +keyboard_mapping: enabled=0, map= + +#======================================================================= +# KEYBOARD_TYPE: +# Type of keyboard return by a "identify keyboard" command to the +# keyboard controler. It must be one of "xt", "at" or "mf". +# Defaults to "mf". It should be ok for almost everybody. A known +# exception is french macs, that do have a "at"-like keyboard. +# +# Examples: +# keyboard_type: mf +#======================================================================= +#keyboard_type: mf + +#======================================================================= +# USER_SHORTCUT: +# This defines the keyboard shortcut to be sent when you press the "user" +# button in the headerbar. The shortcut string is a combination of maximum +# 3 key names (listed below) separated with a '-' character. +# Valid key names: +# "alt", "bksl", "bksp", "ctrl", "del", "down", "end", "enter", "esc", +# "f1", ... "f12", "home", "ins", "left", "menu", "minus", "pgdwn", "pgup", +# "plus", "right", "shift", "space", "tab", "up", "win", "print" and "power". +# +# Example: +# user_shortcut: keys=ctrl-alt-del +#======================================================================= +#user_shortcut: keys=ctrl-alt-del + +#======================================================================= +# I440FXSUPPORT: +# This option controls the presence of the i440FX PCI chipset. You can +# also specify the devices connected to PCI slots. Up to 5 slots are +# available now. These devices are currently supported: ne2k, pcivga, +# pcidev, pcipnic and usb_ohci. If Bochs is compiled with Cirrus SVGA +# support you'll have the additional choice 'cirrus'. +# +# Example: +# i440fxsupport: enabled=1, slot1=pcivga, slot2=ne2k +#======================================================================= +i440fxsupport: enabled=1 + +#======================================================================= +# USB_UHCI: +# This option controls the presence of the USB root hub which is a part +# of the i440FX PCI chipset. With the portX parameter you can connect devices +# to the hub (currently supported: 'mouse', 'tablet', 'keypad', 'disk', 'cdrom' +# 'hub' and 'printer'). +# +# The optionsX parameter can be used to assign specific options to the device +# connected to the corresponding USB port. Currently this feature is only used +# to set the speed reported by device and by the 'disk' device to specify +# an alternative redolog file of some image modes. +# +# If you connect the mouse or tablet to one of the ports, Bochs forwards the +# mouse movement data to the USB device instead of the selected mouse type. +# When connecting the keypad to one of the ports, Bochs forwards the input of +# the numeric keypad to the USB device instead of the PS/2 keyboard. +# +# To connect a 'flat' mode image as an USB hardisk you can use the 'disk' device +# with the path to the image separated with a colon. To use other disk image modes +# similar to ATA disks the syntax 'disk:mode:filename' must be used (see below). +# +# To emulate an USB cdrom you can use the 'cdrom' device name and the path to +# an ISO image or raw device name also separated with a colon. An option to +# insert/eject media is available in the runtime configuration. +# +# The device name 'hub' connects an external hub with max. 8 ports (default: 4) +# to the root hub. To specify the number of ports you have to add the value +# separated with a colon. Connecting devices to the external hub ports is only +# available in the runtime configuration. +# +# The device 'printer' emulates the HP Deskjet 920C printer. The PCL data is +# sent to a file specified in bochsrc.txt. The current code appends the PCL +# code to the file if the file already existed. It would probably be nice to +# overwrite the file instead, asking user first. +#======================================================================= +#usb_uhci: enabled=1 +#usb_uhci: enabled=1, port1=mouse, port2=disk:usbstick.img +#usb_uhci: enabled=1, port1=hub:7, port2=disk:growing:usbdisk.img +#usb_uhci: enabled=1, port2=disk:undoable:usbdisk.img, options1=journal:redo.log +#usb_uhci: enabled=1, port1=printer:printdata.bin, port2=cdrom:image.iso + +#======================================================================= +# USB_OHCI: +# This option controls the presence of the USB OHCI host controller with a +# 2-port hub. The portX option accepts the same device types with the same +# syntax as the UHCI controller (see above). The OHCI HC must be assigned to +# a PCI slot. +#======================================================================= +#usb_ohci: enabled=1 +#usb_ohci: enabled=1, port1=printer:usbprinter.bin + +#======================================================================= +# CMOSIMAGE: +# This defines image file that can be loaded into the CMOS RAM at startup. +# The rtc_init parameter controls whether initialize the RTC with values stored +# in the image. By default the time0 argument given to the clock option is used. +# With 'rtc_init=image' the image is the source for the initial time. +# +# Example: +# cmosimage: file=cmos.img, rtc_init=image +#======================================================================= +#cmosimage: file=cmos.img, rtc_init=time0 + +#======================================================================= +# MAGIC_BREAK: +# This enables the "magic breakpoint" feature when using the debugger. +# The useless cpu instruction XCHG BX, BX causes Bochs to enter the +# debugger mode. This might be useful for software development. +# +# Example: +# magic_break: enabled=1 +#======================================================================= +#magic_break: enabled=1 + +#======================================================================= +# PORT_E9_HACK: +# The 0xE9 port doesn't exists in normal ISA architecture. However, we +# define a convention here, to display on the console of the system running +# Bochs anything that is written to it. The idea is to provide debug output +# very early when writing BIOS or OS code for example, without having to +# bother with setting up a serial port or etc. Reading from port 0xE9 will +# will return 0xe9 to let you know if the feature is available. +# Leave this 0 unless you have a reason to use it. +# +# Example: +# port_e9_hack: enabled=1 +#======================================================================= +#port_e9_hack: enabled=1 + +#======================================================================= +# DEBUG_SYMBOLS: +# This loads symbols from the specified file for use in Bochs' internal +# debugger. Symbols are loaded into global context. This is equivalent to +# issuing ldsym debugger command at start up. +# +# Example: +# debug_symbols: file="kernel.sym" +# debug_symbols: file="kernel.sym", offset=0x80000000 +#======================================================================= +#debug_symbols: file="kernel.sym" + +#======================================================================= +# other stuff +#======================================================================= +#load32bitOSImage: os=nullkernel, path=../kernel.img, iolog=../vga_io.log +#load32bitOSImage: os=linux, path=../linux.img, iolog=../vga_io.log, initrd=../initrd.img +#text_snapshot_check: enabled=1 +#print_timestamps: enabled=1 + +#------------------------- +# PCI host device mapping +#------------------------- +#pcidev: vendor=0x1234, device=0x5678 + +#======================================================================= +# GDBSTUB: +# Enable GDB stub. See user documentation for details. +# Default value is enabled=0. +#======================================================================= +#gdbstub: enabled=0, port=1234, text_base=0, data_base=0, bss_base=0 + +#======================================================================= +# PLUGIN_CTRL: +# Controls the presence of optional plugins without a separate option. +# By default all existing plugins are enabled. These plugins are currently +# supported: 'acpi', 'biosdev', 'extfpuirq', 'gameport', 'iodebug', +# 'pci_ide', 'speaker' and 'unmapped'. +#======================================================================= +#plugin_ctrl: biosdev=0, speaker=0 + +#======================================================================= +# USER_PLUGIN: +# Load user-defined plugin. This option is available only if Bochs is +# compiled with plugin support. Maximum 8 different plugins are supported. +# See the example in the Bochs sources how to write a plugin device. +#======================================================================= +#user_plugin: name=testdev + +#======================================================================= +# for Macintosh, use the style of pathnames in the following +# examples. +# +# vgaromimage: :bios:VGABIOS-elpin-2.40 +# romimage: file=:bios:BIOS-bochs-latest, address=0xf0000 +# floppya: 1_44=[fd:], status=inserted +#======================================================================= + +#======================================================================= +# MEGS +# Set the number of Megabytes of physical memory you want to emulate. +# The default is 32MB, most OS's won't need more than that. +# The maximum amount of memory supported is 2048Mb. +# The 'MEGS' option is deprecated. Use 'MEMORY' option instead. +#======================================================================= +#megs: 256 +#megs: 128 +#megs: 64 +#megs: 32 +#megs: 16 +#megs: 8 diff --git a/bochs/.conf.amigaos b/bochs/.conf.amigaos new file mode 100755 index 00000000..7abbc6dc --- /dev/null +++ b/bochs/.conf.amigaos @@ -0,0 +1,6 @@ +#!/bin/sh +# +# These options should work on Amiga/MorphOS +# + +./configure --with-amigaos --disable-shared ${CONFIGURE_ARGS} diff --git a/bochs/.conf.beos b/bochs/.conf.beos new file mode 100755 index 00000000..821bce99 --- /dev/null +++ b/bochs/.conf.beos @@ -0,0 +1,21 @@ +#!/bin/sh + +# +# These options are suggested by Bernd Korz, who maintains the BeOS +# port. He says that SDL works better than the native BeOS gui. +# + +CC=gcc +CXX=$CC +CFLAGS="-Wall -O9 -mpentium -fomit-frame-pointer -pipe" +CXXFLAGS=$CFLAGS + +export CC +export CXX +export CFLAGS +export CXXFLAGS + +./configure --with-sdl \ + --enable-ne2000 \ + --enable-all-optimizations \ + --enable-pci diff --git a/bochs/.conf.everything b/bochs/.conf.everything new file mode 100644 index 00000000..26179abd --- /dev/null +++ b/bochs/.conf.everything @@ -0,0 +1,36 @@ +# This script tries to turn on nearly every configure option. +# It is useful for finding compile problems, but it may turn on +# more things than you actually want. + +./configure \ + --enable-smp \ + --enable-x2apic \ + --enable-x86-64 \ + --enable-all-optimizations \ + --enable-long-phy-address \ + --enable-configurable-msrs \ + --enable-debugger \ + --enable-disasm \ + --enable-debugger-gui \ + --enable-fpu \ + --enable-misaligned-sse \ + --enable-alignment-check \ + --enable-3dnow \ + --enable-monitor-mwait \ + --enable-vmx \ + --enable-x86-debugger \ + --enable-a20-pin \ + --enable-instrumentation=instrument/example1 \ + --enable-vbe \ + --enable-ne2000 \ + --enable-pci \ + --enable-acpi \ + --enable-clgd54xx \ + --enable-usb \ + --enable-usb-ohci \ + --enable-cdrom \ + --enable-sb16 \ + --enable-iodebug \ + --enable-gdb-stub \ + --enable-show-ips \ + --with-all-libs diff --git a/bochs/.conf.linux b/bochs/.conf.linux new file mode 100755 index 00000000..b67c620c --- /dev/null +++ b/bochs/.conf.linux @@ -0,0 +1,64 @@ +#!/bin/sh +# +# .conf.linux +# + +#which_config=normal +which_config=plugins + +CC="gcc" +CXX="c++" +CFLAGS="-Wall -O3 -fomit-frame-pointer -pipe" # for speed +#CFLAGS="-Wall -g -pipe" # for development +CXXFLAGS="$CFLAGS" + +export CC +export CXX +export CFLAGS +export CXXFLAGS + + +case $which_config in + + normal) + + ####################################################################### + # configuration 1 for release binary RPMs + # Include a few standard options, speed optimizations, X11 only. + ####################################################################### + ./configure --enable-sb16 \ + --enable-ne2000 \ + --enable-all-optimizations \ + --enable-cpu-level=6 \ + --enable-x86-64 \ + --enable-pci \ + --enable-acpi \ + --enable-clgd54xx \ + --enable-usb \ + --enable-usb-ohci \ + --enable-show-ips \ + ${CONFIGURE_ARGS} + ;; + + plugins) + ####################################################################### + # configuration 2 for release binary RPMs + # Include plugins, every possible gui. + ####################################################################### + ./configure --enable-sb16 \ + --enable-ne2000 \ + --enable-all-optimizations \ + --enable-cpu-level=6 \ + --enable-x86-64 \ + --enable-pci \ + --enable-acpi \ + --enable-clgd54xx \ + --enable-usb \ + --enable-usb-ohci \ + --enable-plugins \ + --enable-show-ips \ + --with-all-libs \ + ${CONFIGURE_ARGS} + ;; + +esac diff --git a/bochs/.conf.macos b/bochs/.conf.macos new file mode 100755 index 00000000..7efa36b3 --- /dev/null +++ b/bochs/.conf.macos @@ -0,0 +1,34 @@ +#!/bin/sh + +# This script will run configure for a Macintosh/CodeWarrior Pro +# environment. I actually run this on my Linux machine, but +# the generated files are for a Mac. + +set echo + +# These really just make ./configure happy on your Unix machine. +# They are not the options used on your Mac. +CC="gcc" +CFLAGS="" +CXX="$CC" +CXXFLAGS="$CFLAGS" + +export CC +export CXX +export CFLAGS +export CXXFLAGS + +./configure --target=ppc-macos \ + --enable-sb16 \ + --enable-all-optimizations \ + --enable-cpu-level=6 \ + --enable-x86-64 \ + --enable-pci \ + --enable-acpi \ + --enable-clgd54xx \ + --enable-usb \ + --enable-plugins \ + --with-macos \ + ${CONFIGURE_ARGS} + +unset echo diff --git a/bochs/.conf.macosx b/bochs/.conf.macosx new file mode 100644 index 00000000..5157eb74 --- /dev/null +++ b/bochs/.conf.macosx @@ -0,0 +1,33 @@ +#!/bin/sh + +# this sets up the compile for MacOS X +# +# To support plugins on macosx, you must have "dlcompat" installed. You can +# get dlcompat by installing the fink package "dlcompat-devel". On the SF +# compile farm, dlcompat is in /sw/include and /sw/lib, so we have added +# those paths to the environment variables. + +set echo +CFLAGS="-pipe -O3 -I/sw/include -fomit-frame-pointer -finline-functions -falign-loops=16 -falign-jumps=16 -falign-functions=16 -falign-labels=16 -falign-loops-max-skip=15 -falign-jumps-max-skip=15 -fprefetch-loop-arrays $CFLAGS" +CPATH="/sw/include" +CPPFLAGS="" +CXXFLAGS="$CFLAGS" +LDFLAGS="-L/sw/lib" + +export CFLAGS +export CPATH +export CPPFLAGS +export CXXFLAGS +export LDFLAGS + +./configure --enable-sb16 \ + --enable-ne2000 \ + --enable-all-optimizations \ + --enable-cpu-level=6 \ + --enable-x86-64 \ + --enable-pci \ + --enable-acpi \ + --enable-clgd54xx \ + --enable-usb \ + --enable-plugins \ + ${CONFIGURE_ARGS} diff --git a/bochs/.conf.nothing b/bochs/.conf.nothing new file mode 100755 index 00000000..052414e9 --- /dev/null +++ b/bochs/.conf.nothing @@ -0,0 +1,18 @@ +#!/bin/sh +# +# These are the steps I typically use to configure and compile Bochs +# on a Win32 system with cygwin (v.20.1) +# + +CC="gcc" +CXX="g++" +CFLAGS="-O3 -Wall -Wno-format" +CXXFLAGS="$CFLAGS" + +export CC +export CXX +export CFLAGS +export CXXFLAGS + +./configure --enable-cpu-level=3 \ + --disable-fpu diff --git a/bochs/.conf.sparc b/bochs/.conf.sparc new file mode 100755 index 00000000..fa4c8d09 --- /dev/null +++ b/bochs/.conf.sparc @@ -0,0 +1,31 @@ +#!/bin/sh + +# +# These are the steps I typically use to configure and compile Bochs. +# + +# superSPARC w/ Solaris 2.x +set echo +CC="gcc" +CXX="g++" +#CFLAGS="-Wall -O2 -mv8 -msupersparc -mno-epilogue" +CFLAGS="-Wall -O2 -mv8 -msupersparc" +#CFLAGS="-Wall -O2 -g" +CXXFLAGS="$CFLAGS" + + +export CC +export CXX +export CFLAGS +export CXXFLAGS + +./configure --enable-ne2000 \ + --enable-all-optimizations \ + --enable-cpu-level=6 \ + --enable-x86-64 \ + --enable-pci \ + --enable-acpi \ + --enable-clgd54xx \ + --enable-usb + +unset echo diff --git a/bochs/.conf.win32-cygwin b/bochs/.conf.win32-cygwin new file mode 100755 index 00000000..15f52906 --- /dev/null +++ b/bochs/.conf.win32-cygwin @@ -0,0 +1,28 @@ +#!/bin/sh +# +# These are the steps I typically use to configure and compile Bochs +# on a Win32 system with cygwin (v.20.1) +# + +CC="gcc" +CXX="g++" +CFLAGS="-O3 -Wall -Wno-format" +CXXFLAGS="$CFLAGS" + +export CC +export CXX +export CFLAGS +export CXXFLAGS + +./configure --enable-sb16 \ + --enable-ne2000 \ + --enable-all-optimizations \ + --enable-cpu-level=6 \ + --enable-x86-64 \ + --enable-pci \ + --enable-acpi \ + --enable-clgd54xx \ + --enable-usb \ + --enable-usb-ohci \ + --enable-show-ips \ + --with-win32 --with-rfb --with-nogui diff --git a/bochs/.conf.win32-vcpp b/bochs/.conf.win32-vcpp new file mode 100755 index 00000000..a476ad4c --- /dev/null +++ b/bochs/.conf.win32-vcpp @@ -0,0 +1,29 @@ +#!/bin/sh + +set echo + +./configure --target=pentium-windows \ + --enable-sb16 \ + --enable-ne2000 \ + --enable-all-optimizations \ + --enable-cpu-level=6 \ + --enable-x86-64 \ + --enable-pci \ + --enable-acpi \ + --enable-clgd54xx \ + --enable-usb \ + --enable-usb-ohci \ + --enable-show-ips \ + --disable-readline \ + --without-x \ + --with-win32 --with-rfb --with-nogui + +unset echo + +# Fix up all makefiles so that nmake can handle them. +for i in `find . -name Makefile`; do + echo Removing curly brackets in $i for NMAKE. + mv $i $i.tmp + sed -e 's/{/(/g' -e 's/}/)/g' < $i.tmp > $i + rm -f $i.tmp +done diff --git a/bochs/CHANGES b/bochs/CHANGES new file mode 100644 index 00000000..216dbaf1 --- /dev/null +++ b/bochs/CHANGES @@ -0,0 +1,3374 @@ +Changes in 2.4.6 (February 22, 2011): + +Brief summary : +- Support more host OS to run on: + - Include win64 native binary in the release. + - Fixed failures on big endian hosts. +- BIOS: Support for up to 2M ROM BIOS images. +- GUI: select mouse capture toggle method in .bochsrc. +- Ported most of Qemu's 'virtual VFAT' block driver + (except runtime write support, but plus FAT32 suppport) +- Added write protect option for floppy drives. +- Bugfixes / improved internal debugger + instrumentation. + +Detailed change log : + +- CPU and internal debugger + - Implemented Process Context ID (PCID) feature + - Implemented FS/GS BASE access instructions support + (according to document from http://software.intel.com/en-us/avx/) + - Rewritten from scratch SMC detection algorithm + - Implemented fine-grained SMC detection (on 128 byte granularity) + - Bugfixes for CPU emulation correctness and stability + - Fixed failures on Big Endian hosts ! + - Print detailed page walk information and attributes in + internal debugger 'page' command + - Updated/Fixed instrumentation callbacks + +- Configure and compile + - Bochs now can be compiled as native Windows x86-64 application + (tested with Mingw gcc 4.5.1 and Microsoft Visual Studio Express 2010) + - Added ability to configure CPUID stepping through .bochsrc. + The default stepping value is 3. + - Added ability to disable MONITOR/MWAIT support through .bochsrc + CPUID option. The option is available only if compiled with + --enable-monitor-mwait configure option. + - Determine and select max physical address size automatically at + configure time: + - 32-bit physical address for 386/486 guests + - 36-bit physical address for PSE-36 enabled Pentium guest + - 40-bit physical address for PAE enabled P6 or later guests + - Update config.guess/config.sub scripts to May 2010 revisions. + - Update Visual Studio 2008 project files in build/win32/vs2008ex-workspace.zip + - Added Bochs compilation timestamp after Bochs version string. + +- GUI and display libraries (Volker) + - Added new .bochsrc option to select mouse capture toggle method. + In addition to the default Bochs method using the CTRL key and the + middle mouse button there are now the choices: + - CTRL+F10 (like DOSBox) + - CTRL+ALT (like QEMU) + - F12 (replaces win32 'legacyF12' option) + - display library 'x' now uses the desktop size for the maximum guest resolution + +- ROM BIOS + - Support for up to 2M ROM BIOS images + +- I/O Devices + - 3 new 'pseudo device' plugins created by plugin separation (see below) + - Fixes for emulated DHCP in eth_vnet (patch from @SF tracker) + - Added support for VGA graphics mode with 400 lines (partial fix for SF bug #2948724) + - NE2K: Fixed "send buffer" command issue on big endian hosts + - USB + - converted common USB code plus devices to the new 'usb_common' plugin + Now the USB device classes no longer exist twice if both HC plugins are loaded. + - added 'pseudo device' in common USB code for the device creation. This makes + the HCs independent from the device specific code. + - USB MSD: added support for disk image modes (like ATA disks) + - USB printer: output file creation failure now causes a disconnect + - re-implemented "options" parameter for additional options of connected + devices (currently only used to set the speed reported by device and to + specify an alternative redolog file of USB MSD disk image modes) + - hard drive + - new disk image mode 'vvfat' + - ported the read-only part of Qemu's 'virtual VFAT' block driver + - additions: configurable disk geometry, FAT32 support, read MBR and/or + boot sector from file, volatile write support using hdimage redolog_t + class, optional commit support on Bochs exit, save/restore file + attributes, 1.44 MB floppy support, set file modification date/time + - converted the complete hdimage stuff to the new 'hdimage' plugin + - new hdimage method get_capabilities() that can return special flags + - vmware3, vmware4 and vvfat classes now return HDIMAGE_HAS_GEOMETRY flag + - other disk image modes by default return HDIMAGE_AUTO_GEOMETRY if + cylinder value is set to 0 + - multiple sector read/write support for some image modes + - new log prefix "IMG" for hdimage messages + - floppy + - added write protect option for floppy drives (based on @SF patch by Ben Lunt) + - vvfat support + - bugfix: close images on exit + - SB16 + - converted the sound output module stuff to the new 'soundmod' plugin + +- SF patches applied + [3164945] hack to compile under WIN64 by Darek Mihocka and Stanislav + [3164073] Fine grain SMC invalidation by Stanislav + [1539417] write protect for floppy drives by Ben Lunt + [2862322] fixes for emulated DHCP in eth_vnet + +- these S.F. bugs were closed/fixed + [2588085] Mouse capture + [3140332] typo in mf3/ps2 mapping of BX_KEY_CTRL_R + [3111577] No "back" option in log settings + [3108422] Timing window in NE2K emulation + [3084390] Bochs won't load floppy plugin right on startup + [3043174] Docbook use of '_' build failure + [3085140] Ia_arpl_Ew_Rw definition of error + [3078995] ROL/ROR/SHL/SHR modeling wrong when dest reg is 32 bit + [2864794] BX_INSTR_OPCODE in "cpu_loop" causes crash in x86_64 host + [2884071] [AIX host] prefetch: EIP [00010000] > CS.limit [0000ffff] + [3053542] 64 bit mode: far-jmp instruction is error + [3011112] error compile vs2008/2010 with X2APIC + [3002017] compile error with vs 2010 + [3009767] guest RFLAGS.IF blocks externel interrupt in VMX guest mode + [2964655] VMX not enabled in MSR IA32_FEATURE_CONTROL + [3005865] IDT show bug + [3001637] CMOS MAP register meaning error + [2994370] Cannot build with 3DNow support + +- these S.F. feature requests were closed/implemented + [1510142] Native Windows XP x64 Edition binary + [1062553] select mouse (de)activation in bochsrc + [2930633] legacy mouse capture key : not specific enough + [2930679] Let user change mouse capture control key + [2803538] Show flags for pages when using "info tab" + +------------------------------------------------------------------------- +Changes in 2.4.5 (April 25, 2010): + +Brief summary : +- Major configure/cpu rework allowing to enable/disable CPU options at runtime + through .bochsrc (Stanislav) +- Bugfixes for CPU emulation correctness and stability +- Implemented X2APIC extensions (Stanislav) +- Implemented Intel VMXx2 extensions (Stanislav) + - Extended VMX capability MSRs, APIC Virtualization, + X2APIC Virtualization, Extended Page Tables (EPT), + VPID, Unrestricted Guests, new VMX controls. +- Implemented PCLMULQDQ AES instruction +- Extended Bochs internal debugger functionality +- USB HP DeskJet 920C printer device emulation (Ben Lunt) + +Detailed change log : + +- Configure rework + - Deprecate --enable-popcnt configure option. POPCNT instruction will be + enabled automatically iff SSE4_2 is supported (like in hardware). + + - Make --ignore-bad-msrs runtime option in .bochsrc. Old --ignore-bad-msrs + configure option is deprecated and should not be used anymore. + + - Enable changing part of CPU functionality at runtime through .bochsrc. + - Now you could enable/disable any of SSEx/AES/MOVBE/SYSENTER_SYSEXIT/XSAVE + instruction sets using new CPUID option in .bochsrc. + - When x86-64 support is compiled in, you could enable/disable long mode + 1G pages support without recompile using new CPUID option in .bochsrc. + Configure options: + --enable-mmx, --enable-sse, --enable-movbe, --enable-xsave, + --enable-sep, --enable-aes, --enable-1g-pages + are deprecated and should not be used anymore. + + - Local APIC configure option --enable-apic is deprecated and should not + be used anymore. The LAPIC option now automatically determined from + other configure options. XAPIC functionality could be enabled using + new CPUID .bochsrc option. + + - Changed default CPU configuration (generated by configure script with + default options) to BX_CPU_LEVEL=6 with SSE2 enabled. + +- CPU + - Implemented PCLMULQDQ AES instruction + - Implemented X2APIC extensions / enable extended topology CPUID leaf (0xb), + in order to enable X2APIC configure with --enable-x2apic + - Implemented Intel VMXx2 extensions: + - Enabled extended VMX capability MSRs + - Implemented VMX controls for loading/storing of MSR_PAT and MSR_EFER + - Enabled/Implemented secondary proc-based vmexec controls: + - Implemented APIC virtualization + - Implemented Extended Page Tables (EPT) mode + - Implemented Descriptor Table Access VMEXIT control + - Implemented RDTSCP VMEXIT control + - Implemented Virtualize X2APIC mode control + - Implemented Virtual Process ID (VPID) + - Implemented WBINVD VMEXIT control + - Implemented Unrestricted Guest mode + In order to enable emulation of VMXx2 extensions configure with + --enable-vmx=2 option (x86-64 must be enabled) + - Bugfixes for CPU emulation correctness + - Fixed Bochs crash when accessing the first byte above emulated memory size + +- Internal Debugger + - Introduced range read/write physical watchpoints + - Allow reloading of segment registers from internal debugger + - Improved verbose physical memory access tracing + +- BIOS + - Fix MTRR configuration (prevented boot of modern Linux kernels) + - Fix interrupt vectors for INT 60h-66h (reserved for user interrupt) by + setting them to zero + - Fix BIOS INT13 function 08 when the number of cylinders on the disk = 1 + +- I/O Devices + - USB HP DeskJet 920C printer device emulation (Ben Lunt) + +- Misc + - Updated Bochs TESTFORM to version 0.5 + +- SF patches applied + [2864402] outstanding x2apic patches by Stanislav + [2960379] Fix build with -Wformat -Werror=format-security by Per Oyvind Karlsen + [2938273] allow instrumentation to change execute by Konrad Grochowski + [2926072] Indirection operators in expressions by Derek Peschel + [2914433] makesym.perl misses symbols by John R. Jackson + [2908481] USB Printer by Ben Lunt + +- these S.F. bugs were closed/fixed + [2861662] dbg_xlate_linear2phy needs to be updated + [2956217] INT13 AH=8 returns wrong values when cylinders=1 + [2981161] Allow DMA transfers to continue when CPU is in HALT state + [2795115] NX fault could be missed + [2964824] bad newline sequence in aspi-win32.h + [913419] configure options and build process needs some work + [2938398] gdbstub compile error with x86_64 enabled + [2734455] shutdown/reset type 05 should reinit the PICs + [1921294] extended memory less than 1M wrong size + [1947249] BX_USE_EBDA_TABLES and MP table placement + [1933859] BX_USE_EBDA_TABLES and memory overlapping + [2923680] "help dregs" is a syntax error + [2919661] CPU may fail to do 16bit near call + [2790768] Memory corruption with SMP > 32, Panic BIOS Keyboard Error + [2902118] interrupts vectors 0x60 to 67 should be NULL ! + [2912502] Instruction Pointer behaving erratically + [2901047] Bochs crashed, closed by guest os + [2905385] Bochs crash + [2901481] Instruction SYSRET and SS(PL) + [2900632] Broken long mode RETF to outer priviledge with null SS + [1429011] Use bx_phyaddr_t for physaddr vars and bx_adress for lin adr + +- these S.F. feature requests were closed/implemented + [2955911] RPM preuninstall scriptlet removes /core + [2947863] don't abort on unrecognised options + [2878861] numerics in the disassembler output + [2900619] make more CPU state changeable + +------------------------------------------------------------------------- +Changes in 2.4.2 (November 12, 2009): + +- CPU and internal debugger + - VMX: Implemented TPR shadow VMEXIT + - Bugfixes for CPU emulation correctness (mostly for VMX support). + - Bugfixes and updates for Bochs internal debugger + - On SMP system stepN command now affects only current processor + +- Memory + - Bugfixes for > 32-bit physical address space. + - Allow to emulate more physical memory than host actually could or would + like to allocate. For more details look for new .bochsrc 'memory' option. + +- Cleanup configure options + - All paging related options now will be automatically determined according + to --enable-cpu-level option. Related configure options + --enable-global-pages, --enable-large-pages, + --enable-pae, --enable-mtrr + are deprecated now. Only 1G paging option still remaining unchanged. + - Deprecate --enable-daz configure option. Denormals-are-zeros MXCSR control + will be enabled automatically iff SSE2 is supported (like in hardware). + - Deprecate --enable-vme configure option, now it will be supported iff + CPU_LEVEL >= 5 (like in hardware). + +- I/O Devices + - Bugfixes for 8254 PIT, VGA, Cirrus-Logic SVGA, USB UCHI + +- SF patches applied + [2817840] Make old_callback static by Mark Marshall + [2874004] fix for VMWRITE instruction by Roberto Paleari + [2873999] fix CS segment type during fast syscall invocation by Roberto Paleari + [2864389] Debugger gui maximize on startup by Thomas Nilsen + [2817868] Rework loops in the memory code by Mark Marshall + [2812948] PIT bug by Derek + +- these S.F. bugs were closed/fixed + [2833504] GUI debugger bug-about GDT display + [2872244] BIOS writes not allowed value to MTRR MSR causing #GP + [2885383] SDL GUI memory leak + [2872290] compilation in AIX5.3 ML10 failes + [2867904] crash with cirrus bx_vga_c::mem_write + [2851495] BIOS PCI returns with INT flag = 0 + [2860333] vista 64 guest STOP 109 (GDT modification) + [2849745] disassembler bug for 3DNow and SSE opcodes + [1066748] Wrong registers values after #RESET, #INIT + [2836893] Regression: Windows XP installer unable to format harddrive + [2812239] VMX: VM-Exit: Incorrect instruction length on software int + [2814130] bx_debug lex/yacc files incorrectly generated + [2813199] MP Tables Missing From BIOS + [2824093] VMX exception bug + [2811909] VMX : CS Access-rights Type.Accessed stays 0 + [2810571] Compile Errors on OSX + [2823749] GCC regression or VM_EXIT RDMSR/WRMSR bug + [2815929] Vista/XP64 unnecessary panic + [2803519] Wrong example in man page bochsrc + +- these S.F. feature requests were closed/implemented + [422766] Large Memory configurations + [1311287] Idea for a better GUI + [455971] USB support + [615363] debugger shortcut for repeat last cmd + +------------------------------------------------------------------------- +Changes in 2.4.1 (June 7, 2009): + +- Fixed bunch of CPUID issues + - Bochs is now able to install and boot 64-bit Windows images! + (special thanks to Mark Ebersole for his patch) +- Several bugfixes in CPU emulation (mostly for x87 instructions) +- Fixed two critical deadlock bugs in the Win32 gui (patches from @SF tracker) +- Fixes related to the 'show ips' feature + - removed conflicting win32-specific alarm() functions ('win32' and 'sdl' gui) + - feature now works in wx on win32 +- Added support for gdb stub on big endian machine (patch by Godmar Back) +- Rewritten obsolete hash_map code in dbg symbols module (patch from @SF) +- BIOS: implemented missing INT 15h/89h (patch by Sebastian Herbszt) + +------------------------------------------------------------------------- +Changes in 2.4 (May 3, 2009): + +Brief summary : + +- Added graphical Bochs debugger frontend for most of the supported platforms. + - Thanks for Chourdakis Michael and Bruce Ewing. +- Many new CPU features in emulation + - Support for > 32 bit physical address space and configurable MSRs + - VMX, 1G pages in long mode, MOVBE instruction +- Bugfixes for CPU emulation correctness, debugger and CPU instrumentation. +- New config interface 'win32config' with start and runtime menu +- USB: added OHCI support, external hub and cdrom +- Added user plugin interface support. + +Detailed change log : + +- CPU and internal debugger + - Support for VMX hardware emulation in Bochs CPU, to enable configure with + --enable-vmx option + Nearly complete VMX implementation, with few exceptions: + - Dual-monitor treatment of SMIs and SMM not implemented yet + - NMI virtualization, APIC virtualization not implemented yet + - VMENTER to not-active state not supported yet + - No advanced features like Extended Page Tables or VPID + - Support for configurable MSR registers emulation, to enable configure with + --enable-configurable-msrs option + Look for configuration example in .bochsrc and msrs.def + - Support new Intel Atom(R) MOVBE instruction, to enable configure with + --enable-movbe option + - Support for 1G pages in long mode, to enable configure with + --enable-1g-pages option + - Support for > 32 bit physical address space in CPU. Up to 36 bit could be + seen in legacy mode (PAE) and up to 40 bit in x86-64 mode. + Still support the same amount of the physical memory in the memory object, + so system with > 4Gb of RAM yet cannot be emulated. + To enable configure with --enable-long-phy-address option. + - Implemented modern BIOSes mode limiting max reported CPUID function + to 3 using .bochsrc CPU option. The mode is required in order to + correctly install and boot WinNT. + - Added ability to configure CPUID vendor/brand strings through .bochsrc + (patch from @SF by Doug Reed). + - Many bugfixes for CPU emulation correctness (both x86 and x86-64). + - Updated CPU instrumentation callbacks. + - Fixed Bochs internal debugger breakpoints/watchpoints handling. + +- Configure and compile + - Added ability to choose Bochs log file name and Bochs debugger log file + name from Bochs command line (using new -log and -dbglog options) + - Removed Peter Tattam's closed source external debugger interface from + the code. + - Removed --enable-guest2host-tlb configure option. The option is always + enabled for any Bochs configuration. + - Removed --enable-icache configure option. The option is always enabled + for any Bochs configuration. Trace cache support still remains optional + and could be configured off. + - Added configure option to compile in GUI frontend for Bochs debugger, + to enable configure with --enable-debugger-gui option. + The GUI debugger frontend is enabled by default with Bochs debugger. + - Removed --enable-port-e9-hack configure option. The feature now could be + configured at runtime through .bochsrc. + - Added configure option to enable/disable A20 pin support. Disabling the + A20 pin support slightly speeds up the emulation. + - reduced dependencies between source files for faster code generation + +- BIOS + - Added S3 (suspend to RAM) ACPI state to BIOS (patch by Gleb Natapov) + - Implemented MTRR support in the bios (patches by Avi Kivity and Alex + Williamsion with additions by Sebastian Herbszt) + - Bug fixes + +- I/O Devices + - Added user plugin support + - remaining devices converted to plugins: pit, ioapic, iodebug + - added 'plugin_ctrl' bochsrc option to control the presence of optional + device plugins without a separate option. By default all plugins are enabled. + - added register mechanism for removable mouse and keyboard devices + - Hard drive / cdrom + - PACKET-DMA feature now supported by all ATAPI commands + - ATAPI command 0x1A added (based on the Qemu implementation) + - sb16 + - Added ALSA sound support on Linux (PCM/MIDI output) + - FM synthesizer now usable with MIDI output (simple piano only) + - Fixed OPL frequency to MIDI note translation + - Fixed MIDI output command + - keyboard + - added keyboard controller commands 0xCA and 0xCB + - USB + - USB code reorganized to support more HC types and devices + - added USB OHCI support written by Ben Lunt + - added external USB hub support (initial code ported from Qemu) + - added USB cdrom support (SCSI layer ported from Qemu) + - added status bar indicators to show data transfer + - VGA + - VBE video memory increased to 16 MB + - implemented changeable VBE LFB base address (PCI only, requires latest + BIOS and VGABIOS images) + - I/O APIC + - implemented I/O APIC device hardware reset + +- Config interface + - new config interface 'win32config' with start and runtime menu is now + the default on Windows ('textconfig' is still available) + - win32 device config dialogs are now created dynamicly from a parameter list + (works like the wx ParamDialog) + - changes in textcofig and the wx ParamDialog for compatibility with the new + win32 dialog behaviour + - Bochs param tree index keys are case independent now + - some other additions / bugfixes in the simulator interface code + +- Misc + - updated LGPL'd VGABIOS to version 0.6c + - Updated Bochs TESTFORM to version 0.4 + +- SF patches applied + [2784858] IO Handler names are not compared properly + [2712569] Legacy bios serial data buffer timeout bug by grybranix + [2655090] 64 bit BSWAP with REX.W broken by M. Eby + [2645919] CR8 bug when reading by M. Eby + [1895665] kvm: bios: add support to memory above the pci hole by Izik Eidus + [2403372] rombios: check for valid cdrom before using it by Sebastian + [2307269] acpi: handle S3 by Sebastian + [2354134] TAP networking on Solaris/Sparc repaired + [2144692] The scsi device can not complete its writing data command by naiyue + [1827082] [PATCH] Configurable CPU vendor by Marcel Sondaar + [2217229] Panic on EBDA overflow in rombios32 by Sebastian + [2210194] Log pci class code by Sebastian + [1984662] red led for disk write and titlebar mod by ggbsf + [2142955] Fix for monitor/mwait by Doug Gibson + [2137774] Patch to fix bug: cdrom: read_block: lseek returned error by Gabor Olah + [2134642] Fix scan_to_scanascii table for F11 and F12 by Ben Guthro & Steve Ofsthun + [2123036] sdl fullscreen fix by ggbsf + [2073039] Remove CMOS accsess from AML code by Gleb Natapov + [2072168] smbios: add L1-L3 cache handle to processor information by Sebastian + [2055416] bochsrc cpu options for cpuid vendor and brand string by Doug Reed + [2035278] rombios: Fix return from BEV via retf by Sebastian + [2035260] rombios: El Torito load segment fix by Sebastian + [2031978] Fix VMware backdoor command 0Ah by Jamie Lokier + [2015277] Remove obsolete comment about DATA_SEG_DEFS_HERE hack by Sebastian + [2011268] Set new default format and unit only if both are supported by Sebastian + [2001919] gdbstub: fix qSupported reply by Sebastian + [2001912] gdbstub: enclose packet data by apostrophes by Sebastian + [1998071] fix missing SIGHUP and SIGQUIT with term ui on mingw by Sebastian + [1998063] fix wrong colors with term ui by Sebastian + [1995064] Compile fix needed for --enable-debugger and gcc 4.3 by Hans de Goede + [1994564] Fix typo in RDMSR BX_MSR_MTRRFIX16K_A0000 by Sebastian + [1994396] Change hard_drive_post #if by Sebastian + [1993235] TESTFORM email address update by Sebastian + [1992322] PATCH: fix compilation of bochs 2.3.7 on bigendian machines by Hans de Goede + [1991280] Shutdown status code 0Ch handler by Sebastian + [1990108] Shutdown status code 0Bh handler by Sebastian + [1988907] Shutdown status code 0Ah handler by Sebastian + [1984467] two typos in a release! (2.3.7) + [1981505] Init PIIX4 PCI to ISA bridge and IDE by Sebastian + +- these S.F. bugs were closed/fixed + [2784148] an integer overflow BUG of Bochs-2.3.7 source code + [2695273] MSVC cpu.dsp failure in 2.3.7.zip + [616114] Snapshot/Copy crash on Win2K + [2628318] 'VGABIOS-latest' bug + [1945055] can't 'make install' lastest bochs on loepard + [2031993] Mac OS X Makefile bug + [1843199] install error on mac osx + [2710931] Problem compiling both instrumentation and debugger + [2617003] ExceptionInfo conflicts with OS X api + [2609432] stepping causes segfault (CVS) + [2605861] compile error with --enable-smp + [1757068] current cvs(Jul19, 07) failed to boot smp + [2426271] cannot get correct symbol entry + [2471982] VGA character height glitches + [1659659] wrong behaviour a20 at boot + [1998027] minwg + --with-term + --with-out-win32 = link failure + [1871936] bochs-2.3.6 make fails on wx.cc + [1684666] info idt for long mode + [2105989] could not read() hard drive image file at byte 269824 + [1173093] Debugger totally not supports x86-64 + [1803018] new win32debug dialog problems + [2141679] windows vcc build broken + [2162824] latest cvs fails to compile + [2164506] latest bochs fails to start + [2129223] MOV reg16, SS not working in real mode due to dead code + [2106514] RIS / startrom.com install ALMOST works + [2123358] SMP (HTT): wbinvd executed by CPU1 crashes CPU0 + [2002758] Arch Linux: >>PANIC<< ATAPI command with zero byte count + [2026501] El Torito incorrect boot segment:offset + [2029758] BEV can return via retf instead of int 18h + [2010173] x command breaks after one error about x/s or x/i + [1830665] harddrv PANIC: ATAPI command with zero byte count + [1985387] fail to make using gcc4 with --enable-debugger + [1990187] testform feedback + [1992138] Misspell in cpu/ia_opcodes.h + +- these S.F. feature requests were closed/implemented + [2175153] Update MSVC project files + [658800] front end program and bios + [1883370] Make cd and floppy images more usable + [422783] change floppy size without restarting + [2552685] param tree names should be case insensitive + [1214659] PC Speaker emu turnoff. Plugin Controll. + [1977045] support 40 bit physical address + [1506385] Intel Core Duo VT features + [1429015] Support for user plugins + [1488136] debugger access to floppy controller + [1363136] Full debugger SMP and 64 bit support + [2068304] Support for ACPI + [431032] debugger "x" command + [423420] profiling ideas (SMF) + [445342] Add FM support? + [928439] alsa + +------------------------------------------------------------------------- +Changes in 2.3.7 (June 3, 2008): + +Brief summary : + ++ More optimizations in CPU code - Bochs 2.3.7 is more than 2x faster + than Bochs 2.3.5 build ! +- Implemented LBA48 support in BIOS +- Added memory access tracing for Bochs internal debugger +- Implemented Intel(R) XSAVE/XRSTOR and AES instruction set extensions +- Many fixes in CPU emulation and internal debugger + - MenuetOS64 floppy images booting perfect again ! +- updated LGPL'd VGABIOS to version 0.6b + +Detailed change log : + +- CPU + - Support of XSAVE/XRSTOR CPU extensions, to enable configure with + --enable-xsave option + - Support of AES CPU extensions, to enable configure with + --enable-aes option + - Fixed Bochs failure on RISC host machines with BxRepeatSpeedups + optimization enabled + - Implemented SYSENTER/SYSEXIT instructions in long mode + - More than 100 bugfixes for CPU emulation correctness (both x86 and x86-64) + - MenuetOS64 floppy images booting perfect again ! + - Updated CPU instrumentation callbacks + +- Bochs Internal Debugger and Disassembler + - Added memory access tracing for Bochs internal debugger, enable + by typing 'trace-mem on' in debugger command line + - Many bug fixes in Bochs internal debugger and disassembler + +- System BIOS (Volker) + - Implemented LBA48 support + - Added generation of SSDT ACPI table that contains definitions + for available processors + - Added RTC device to ACPI DSDT table + - Added implementation of SMBIOS + +- I/O devices (Volker) + - VGA + - Implemented screen disable bit in sequencer register #1 + - Implemented text mode cursor blinking + - Serial + - new serial modes 'pipe-server' and 'pipe-client' for win32 + - new serial mode 'socket-server' + +- Configure and compile + - Fixed configure bug with enabling of POPCNT instruction, POPCNT + instruction should be enabled by default when SSE4.2 is enabled. + - Removed --enable-magic-breakpoint configure option. The option is + automatically enabled if Bochs internal debugger is compiled in. + It is still possible to turn on/off the feature through .bochsrc. + - Allow boot from network option in .bochsrc + - Added Bochs version info for Win32 + +- Display libraries + - implemented text mode character blinking in some guis + - improved 'X' gui runtime dialogs + +- SF patches applied + [1980833] Fix shutdown status code 5h handler by Kevin O'Connor + [1928848] "pipe" mode for serial port (win32 only) by Eugene Toder + [1956843] Set the compatible pci interrupt router back to PIIX by Sebastian + [1956366] Do not announce C2 & C3 cpu power state support by Igor Lvovsky + [1921733] support for LBA48 by Robert Millan + [1938185] Fix link problem with --enable-debugger by Sebastian + [1938182] Makefile.in - use @IODEV_LIB_VAR@ by Sebastian + [1928945] fix for legacy rombios - e820 map and ACPI_DATA_SIZE by Sebastian + [1925578] rombios32.c - fix ram_size in ram_probe for low memory setup by Sebastian + [1908921] rombios32.c - move uuid_probe() call by Sebastian + [1928902] improvements to load-symbols by Eugene Toder + [1925568] PATCH: msvc compilation by Eugene Toder + [1913150] rombios.c - e820 cover full size if memory <= 16 mb by Alexander van Heukelum + [1919804] rombios.c - fix and add #ifdef comments by Sebastian + [1909782] rombios.c - remove segment values from comment by Sebastian + [1908918] SMBIOS - BIOS characteristics fix by Sebastian + [1901027] BIOS boot menu support (take 3) + [1902579] rombios32.c - define pci ids by Sebastian + [1859447] Pass segment:offset to put_str and introduce %S by Sebastian + [1889057] rombios.c - boot failure message by Sebastian + [1891469] rombios.c - print BEV product string by Sebastian + [1889851] Win32 version information FILEVERSION for bochs.exe by Sebastian + [1889042] rombios.c - fix comment by Sebastian + [1881500] bochsrc, allow boot: network by Sebastian + [1880755] Win32 version information for bochs.exe by Sebastian + [1880471] SMBIOS fix type 0 by Sebastian + [1878558] SMBIOS fixes by Sebastian + [1864692] SMBIOS support by Filip Navara + [1865105] Move bios_table_area_end to 0xcc00 by Sebastian + [1875414] Makefile.in - change make use by Sebastian + [1874276] Added instrumentation for sysenter/sysexit by Lluis + [1873221] TLB page flush: add logical address to instrumentation by Lluis + [1830626] lba32 support by Samuel Thibault + [1861839] Move option rom scan after floppy and hard drive post by Sebastian + [1838283] Early vga bios init by Sebastian + [1838272] rom_scan range parameter by Sebastian + [1864680] Save CPUID signature by Filip Navara + +- these S.F. bugs were closed + [1976171] Keyboard missing break code for enter (0x9C) + [666433] physical read/write breakpoint sometimes fails + [1744820] info gdt and info idt shows the entire tables + [1755652] graphics: MenuetOS64 shows black screen + [1782207] Windows Installer malfunction, Host=Linux, Guest=Win98SE + [1697762] OS/2 Warp Install Failed + [1952548] String to char * warnings + [1940714] SYSENTER/SYSEXIT doesn't work in long mode + [1422342] SYSRET errors + [1923803] legacy rombios - e820 map and ACPI_DATA_SIZE + [1936132] Link problem with --enable-debugger & --enable-disasm + [1934477] Linear address wrap is not working + [1424984] virtual machine freezes in Bochs 2.2.6 + [1902928] with debugger cpu_loop leaves CPU with unstable state + [1898929] Bochs VESA BIOS violates specs (banks == 1) + [1569256] bug in datasegment change in long mode + [1830662] ACPI: no DMI BIOS year, acpi=force is required + [1868806] VGA blink enable & screen disable + [1875721] Bit "Accessed" in LDT/GDT descriptors & #PF + [1874124] bx_Instruction_c::ilen() const + [1873488] bochs-2.3.6 make fails on dbg_main.cc + +- these S.F. feature requests were implemented + [1422769] SYSENTER/SYSEXIT support in x86-64 mode + [1847955] Version information for bochs(dbg).exe + [939797] SMBIOS support + +------------------------------------------------------------------------- +Changes in 2.3.6 (December 24, 2007): + +Brief summary : + ++ More than 25% emulation speedup vs Bochs 2.3.5 release! + + - Thanks to Darek Mihocka (http://www.emulators.com) + for providing patches and ideas that made the + speedup possible! + ++ Up to 40% speedup vs Bochs 2.3.5 release with trace cache optimization! + +- Lots of bugfixes in CPU emulation +- Bochs benchmarking support +- Added emulation of Intel SSE4.2 instruction set + +Detailed change log : + +- CPU + - Added emulation of SSE4.2 instruction set, to enable use + --enable-sse=4 --enable-sse-extension configure options + to enable POPCNT instruction only use configure option + --enable-popcnt + - Implemented MTRR emulation, to enable use --enable-mtrr configure + option. MTRRs is enabled by default when cpu-level >= 6. + - Implemented experimental MONITOR/MWAIT support including optimized + MWAIT CPU state and hardware monitoring of physical address range, + to enable use --enable-monitor-mwait configure option. + - Removed hostasm optimizations, after Bochs rebenchmarking it was found + that the feature bringing no speedup or even sometimes slows down + emulation! + - Merged trace cache optimization patch, the trace cache optimization + is enabled by default when configure with --enable-all-optimizations + option, to disable trace cache optimization configure with + --disable-trace-cache + - Many minor bugfixes in CPU emulation (both ia32 and x86-64) + - Updated CPU instrumentation callbacks + +- Bochs Internal Debugger and Disassembler + - Many fixes in Bochs internal debugger and disassembler, some debugger + interfaces significantly changed due transition to the param tree + architecture + - Added support for restoring of the CPU state from external file + directly from Bochs debugger + +- Configure and compile + - Renamed configure option --enable-4meg-pages to --enable-large-pages. + The option enables page size extensions (PSE) which refers to 2M pages + as well. + - Removed --enable-save-restore configure option, save/restore feature + changed to be one of the basic Bochs features and compiled by default + for all configurations. + - Added new Bochs benchmark mode. To run Bochs in benchmark mode execute + it with new command line option 'bochs -benchmark time'. The emulation + will be automatically stopped after 'time' millions of emulation + cycles executed. + - Another very useful option for benchmarking of Bochs could be enabled + using new 'print_timestamps' directive from .bochsrc: + print_timestamps: enable=1 + - Added --enable-show-ips option to all configuration scripts used to + build release binaries, so all future releases will enjoy IPS display. + - Enable alignment check in the CPU and #AC exception by default for + --cpu-level >= 4 (like in real hardware) + +- SF patches applied + [1491207] Trace Cache Speedup patch by Stanislav + [1857149] Define some IPL values by Sebastian + [1850183] Get memory access mode in BX_INSTR_LIN_READ by Lluis Vilanova + [1841421] pic: keep slave_pic.INT and master_pic.IRQ_in bit 2 in sync by Russ Cox + [1841420] give segment numbers in exception logs by Russ Cox + [1801696] Allow Intel builds on Mac OS X + [1830658] Fix >32GB disk banner by Samuel Thibault + [1813314] Move #define IPL_* and typedef ipl_entry by Sebastian + [1809001] Save PnP Option ROM Product Name string in IPL Boot Table by Sebastian + [1821242] Fix for #1801285, Niclist.exe broken by Sebastian + [1819567] Code warning cleanup + [1816162] Update comment on bios_printf() by Sebastian + [1811139] Trivial Fix when BX_PCIBIOS and BX_ROMBIOS32 not defined by Myles Watson + [1811190] Improve HD recognition and CD boot by Myles Watson + [1811860] Implement %X in bios_printf by Sebastian + [1809649] printf %lx %ld %lu by Myles Watson + [1809651] move BX_SUPPORT_FLOPPY by Myles Watson + [1809652] dpte and Int13DPT fixes by Myles Watson + [1809669] clip cylinders to 16383 in hard drive by Myles Watson + [1799903] Build BIOS on amd64 by Robert Millan + [1799877] Fix for parallel build (make -j2) by Robert Millan + +- these S.F. bugs were closed + [1837354] website bug: View the Source link broken + [1801268] Reset from real mode no longer working + [1843250] Using forward slashes gives invalid filename + [1823446] BIOS bug, local APIC #0 not detected + [1801285] Niclist.exe broken + [1364472] breakpoints sometimes don't work + [994451] breakpoint bug + [1801295] NSIS installer vs Windows Notepad + [1715328] Unreal mode quirk + [1503972] debugger doesn't debug first instruction on exception + [1069071] div al, byte ptr [ds:0x7c18] fails to execute + [1800080] Wrong "BX_MAX_SMP_THREADS_SUPPORTED" assertion + +- these S.F. feature requests were implemented + [1662687] Download for Win32-exe with x64 Mode and debugging + [604221] Debugger command: query lin->phys mapping + +------------------------------------------------------------------------- +Changes in 2.3.5 (September 16, 2007): + +Brief summary : +- Critical problems fixed for x86-64 support in CPU and Bochs internal debugger +- ACPI support +- The release compiled with x86-64 and ACPI +- Hard disk emulation supports ATA-6 (LBA48 addressing, UDMA modes) +- Added emulation of Intel SSE4.1 instruction set + +Detailed change log : + +- CPU + - Fixed critical bug with 0x90 opcode (NOP) handling in x86-64 mode + - implied stack references where the stack address is not in canonical form + should causes a stack exception (#SS) + - Added emulation of SSE4.1 instruction set (Stanislav) + - Do not save and restore XMM8-XMM15 registers when not in x86-64 mode + - Fixed zero upper 32-bit part of GPR in x86-64 mode + - CMOV_GdEd should zero upper 32-bit part of GPR register even if the + 'cmov' condition was false ! + - Implemented CLFLUSH instruction, report non-zero cache size in CPUID + - Fixed PUSHA/POPA instructions behavior in real mode + - Fixed detection of inexact result by FPU + - Fixed denormals-are-zero (DAZ) handling by SSE convert instructions + - Implemented Misaligned Exception Mask support for SSE (MXCSR[17]) + - Implemented Alignment Check in the CPU and #AC exception, to enable + use --enable-alignment-check configure option + +- General + - 2nd simulation support in wxBochs now almost usable (simulation cleanup + code added and memory leaks fixed) + +- Configure and compile + - several fixes for MacOSX, OpenBSD and Solaris 10 + - enable save/restore feature by default for all configurations + - reorganized SSE configure options to match Intel(R) Programming + Reference Manual, new option introduced for SSE extensions enabling. + To enable Intel Core Duo 2 new instructions use + --enable-sse=3 --enable-sse-extension + enabling of SSE4.1 (--enable-sse=4) will enable SSE3 extensions as well + - removed old PIT, always use new PIT written by Greg Alexander, + removed configure option --enable-new-pit + +- I/O devices (Volker) + - Floppy + - partial non-DMA mode support (patch by John Comeau) + - Hard drive / cdrom + - hard disk emulation now supports ATA-6 (LBA48 addressing, UDMA modes) + - VMWare version 4 disk image support added (patch by Sharvil Nanavati) + - PCI + - initial support for the PIIX4 ACPI controller + - Serial + - added support for 3-button mouse with Mousesystems protocol + - USB + - experimental USB device change support added + - rewrite of the existing USB devices code + - new USB devices 'disk' and 'tablet' (ported from the Qemu project) + +- Bochs internal debugger + - fixed broken debugger "rc file" option (execute debugger command from file) + - implementation of a gui frontend ("windebug") for win32 started + - gdbstub now accepts connection from any host + - several documentation updates + - a lot of disasm and internal debugger x86_64 support fixes + +- Configuration interface + - fixes and improvements to the save state dialog handling + +- Display libraries + - text mode color handling improved in some guis + - win32 fullscreen mode (patch by John Comeau) + +- System BIOS (Volker) + - 32-bit PM BIOS init code for ACPI, PCI, SMP and SMM (initial patches by + Fabrice Bellard) + - PCI BIOS function "find class code" implemented + +- SF patches applied + [1791000] 15h 8600h is reading the wrong stack frame by Sebastian + [1791016] rombios32.c, ram_probe(), BX_INFO missing value by Sebastian + [1786429] typo in bochsrc.5 by Sebastian + [1785204] Extend acpi_build_table_header to accept a revision number by Sebastian + [1766536] Partial Patch for Bug Report 1549873 by Ben Lunt + [1763578] ACPI Table Revision 0 -> 1 + [1642490] implement alignment check and #AC exception by Stanislav Shwartsman + [1695652] [PATCH] .pcap pktlog and vnet PXE boot by Duane Voth + [1741153] Add expansion-ROM boot support to the ROMBIOS + [1734159] Implemented INT15h, fn 0xC2 (mouse), subfn 3, set resolution + [1712970] bios_printf %s fix + [1573297] PUSHA/POPA real mode fix by Stanislav Shwartsman + [1641816] partial support for non-DMA access to floppy by John Comeau + [1624032] shows where write outside of memory occurred by John Comeau + [1607793] allow fullscreen when app requests it by John Comeau + [1603013] Bugfix for major NOP problem on x64 by mvysin + [1600178] Make tap and tuntap compile on OpenBSD by Jonathan Gray + [1149659] improve gdbstub network efficiency by Avi Kivity + [1554502] Trivial FPU exception handling fix + +- these S.F. bugs were closed + [1316008] Double faults when it shouldn't - gcc 4.0.2 + [1787289] broken ABI for redolog class when enable-compressed-hd + [1787500] tftp_send_optack not 64bit clean + [1264540] Security issue with Bochs website + [1767217] Debugger Faults including ud2 + [1729822] Various security issues in io device emulation + [1675202] mptable hosed (bad entry count in header) + [1197141] 'make install' installs to bad location + [1157623] x86Solaris10 cannot recoginize ACPI RSD PTR + [1768254] large HDD in Bochs/bximage + [1496157] Windows Vista Beta2 dosn't boot + [1755915] Illegal Hard Disk Signature Output + [1717790] info gdt and info idt scrolls away, too long result + [1726640] Debugger displays incorrect segment for mov instruction + [1719156] Typo in misc_mem.cpp + [1715270] Debugger broken in/beyond 2.3 + [1689107] v8086 mode priviledge check failed + [1704484] A few checks when CPU_LEVEL < 4 + [1678395] Problem with zero sector... + [876990] SA-RTL OS fails on PIC configuration + [1673582] save/restore didn't restore simulation correctly + [1586662] EDD int 13h bug, modify eax + [666618] POP_A Panic in DOS EMU + [1001485] panic: not enough bytes on stack + [1667336] delay times an order of magnitude slow + [1665601] crash disassembling bootcode + [1657065] CVS sources won't compile + [1653805] bochs's gdbstub uses incorrect protocol + [1640737] ASM sti command frezzes guest OS + [1636439] latest CVS sources don't compile under Cygwin + [1634357] disasm incorrect (no sign ext) displacement in 64-bit mode + [1376453] pcidev segfaults bochs + [1180890] IOAPIC in BOCHS - WinXP 64 in MP version + [1597528] 2.3 fails to compile on amd64 + [1526255] FLD1 broken when compaling with gcc 4.0.x + [1597451] eth_fbsd is broken under FreeBSD + [1571949] Bochs will not compile under Solaris + [1500216] Bochs fails to boot BeOs CD + [1458339] bochs-2.2.6 WinXP Binary ACPI error installing FreeBSD 6.0 + [1440011] patches needed for FreeBSD 6.0 to compile Bochs + [431674] some devices don't have a prefix + [458150] QNX demo disk crashes with new pit + [818322] Bochs 2.1 cvs: OS/2 - read verify on non disk + [906840] KBD: bogus scan codes generated in set 3 + [1005053] No keyboard codes translation + [1109374] Problem with Scancodeset 2 + [1572345] Bochs won't continue + [1568153] Bochs looks for (and loads?) unspecified display libraries + [1563462] Errors in /iodev/harddrv.h + [1562172] TLB_init() fails to initialize priv_check array if USE_TLB 0 + [1385303] debugger crashes after panic + [1438227] crc.cpp missing in bx_debug version 2.2.6 + [1501825] debugger crashes on to high input + [1420959] Memory leak + buffer overflow in Bochs debugger + [1553289] Error in Dis-assembler + [542464] I cannot use FLAT + [1548270] Bochs won't die with its pseudo terminal + [1545588] roundAndPackFloatx80 does not detect round up correctly + +------------------------------------------------------------------------- +Changes in 2.3 (August 27, 2006): + +Brief summary : +- limited save/restore support added (config + log options, hardware state) +- configuration parameter handling rewritten to a parameter tree +- lots of cpu and internal debugger fixes +- hard disk geometry autodetection now supported by most of the image types +- hard disk emulation now supports ATA-3 (multiple sector transfers) +- VBE memory size increased to 8MB and several VGA/VBE fixes +- updated LGPL'd VGABIOS to version 0.6a + +Detailed change log : + +- CPU and internal debugger fixes + - Fixed bug in FSTENV instruction (Stanislav Shwartsman) + - Recognize #XF exception (19) when SSE is enabled + - Fixed bug in PSRAW/PSRAD MMX and SSE instructions + - Save and restore RIP/RSP only for FAULT-type exceptions, not for traps + - Correctly decode, disassemble and execute multi-byte NOP '0F F1' opcode + - Raise A20 line after system reset (Stanislav Shwartsman) + - Implemented SMI and NMI delivery (APIC) and handling in CPU (Stanislav) + - Experimental implementation of System Management Mode (Stanislav) + - Added emulation of SSE3E instructions (Stanislav Shwarstman) + - Save and restore FPU opcode, FIP and FDP in FXSAVE/FRSTOR instructions + - Fixed bug in MOVD_EdVd opcode (always generated #UD exception) + - Fixed critical issue, Bochs was not supporting > 16 bit LDT.LIMIT values + - Many fixes in Bochs internal debugger and disassembler + +- CPU x86-64 fixes + - Fixed SYSRET instruction implementation + - Fixed bug in CALL/JMP far through 64-bit callgate in x86-64 mode + - Correctly decode, disassemble and execute 'XCHG R8, rAX' instruction + - Correctly decode and execute 'BSWAP R8-R15' instructions + - Fixed ENTER and LEAVE instructions in x86-64 mode (Stanislav) + - Fixed CR4 exception condition (No Name) + - Fixed x86 debugger to support x86-64 mode (Stanislav) + +- APIC and SMP + - Support for Dual Core and Intel(R) HyperThreading Technology. Now you + could choose amount of cores per processor and amount of HT threads per + core from .bochsrc for SMP simulation (Stanislav Shwartsman) + - Allow to control SMP quantum value through .bochsrc CPU + option parameter. Previous Bochs versions used hardcoded quantum=5 + value. + - Fixed interrupt priority bug in service_local_apic() + - Fixed again reading of APIC IRR/ISR/TMR registers. Finally it becomes + fully correct :-) + +- Configure and compile + - Moved configure time --enable-reset-on-triple-fault option to runtime, + the 'cpu' option in .bochsrc is extended and the old configure option + is deprecated (Stanislav Shwartsman) + - Removed --enable-pni configure option, to compile with PNI use + --enable-sse=3 instead (Stanislav Shwartsman) + - enable SEP (SYSENTER/SYSEXIT) support by default for Penitum II+ + processor emulation (i.e. if cpu-level >= 6 and MMX is enabled) + +- general + - Limited save/restore support added. The state of CPU, memory and all + devices can be saved now (state of harddisk images not handled yet). + - Fixed several memory leaks + +- configuration interface + - Configuration parameter handling rewritten to a parameter tree. This is + required for dynamic menus/dialogs, user-defined options and save/restore. + - Support for user-defined bochsrc options added + - help support at the parameter prompt in textconfig added + +- I/O devices (Volker) + - Floppy + - partial sector transfers fixed + - Hard drive / cdrom + - several fixes to the IDE register behaviour (e.g. in case of a channel + with only one drive connected) + - fixed data alignment of 'growing' hard drive images (sharing images + between Windows and Linux now possible) + - disk geometry autodetection now supported by most of the image types + (unsupported: external, dll and compressed modes) + - multi sector read/write commands implemented + - hard disk now reporting ATA-3 supported + - ATAPI 'inquiry' now returns a unique device name + - Keyboard + - reset sent to keyboard has no effect on the 8042 (scancode translation) + - PCI + - forward PIRQ register changes to the I/O APIC (if present) + - attempt to fix and update the emulation part of 'pcidev' (untested) + - VGA + - VBE memory size increased to 8MB and several VBE fixes + - VGA memory read access fixed (bit plane access and read mode) + - VGA memory is now a part of the common video memory + +- System BIOS (Volker) + - enable interrupts before executing INT 19h + - fixed ATA device detection in case of one drive only connected to controller + - improved INT 15h function AX=E820h + - real mode PCI BIOS now returns IRQ routing information (function 0Eh) + - keyboard LED flags handling fixed and improved + - fixed handling of extended keys in INT 09h + - Updated LGPL'd VGABIOS to version 0.6a + +- SF patches applied + [1340111] fixes and updates to usb support by Ben Lunt + [1539420] minor addition to pci_usb code by Ben Lunt + [1455958] call/jmp through call gate in 64-bit mode + [1433107] PATCH: fix compile with wxwindows 2.6 (unicode / utf8) by jwrdegoede + [1386671] Combined dual core and hyper-threading patch + +- these S.F. bugs were closed + [833927] TTD: System Error TNT.40025: Unexpected processor exception + [789230] Sending code that shows lock up when setting idt + [909670] Problems with Symantec Ghost + [1540241] include missing in osdep.cc + [1539373] Incorrect disasm for "mov moffset,bla" in 64bit + [1538419] incorrect disassembly of [rip+disp] with rex.b + [1535432] shift+cursor key maps to a digit + [1504891] Knoopix 5.0.1 error + [1424355] bochs-2.2.6 ata failure in windoze 98se + [1533979] wrong disassembly of IN instruction + [620059] paste won't stop + [1164904] status bar doesn't show num/caps/scroll lock status + [1061720] ATA Support level for HD + [1522196] Broken CHANGES link in main page + [1438415] crash if screen scrolled downwards + [778441] Shouldn't interrupts be enable after BIOS? + [1514949] I got a problem with the 8253 timer + [1513544] disasm of 0xec (in AL,DX) returns ilen of 2 instead of 1 + [1508947] APIC interrupt priority checking and interrupt delivery + [766286] Debugger halts after any GPF exception + [639143] va_list is not a pointer on linuxppc + [1501815] debugger examines memory over page-boundary wrong + [1503978] movsb/w/d doesn't work when direction is stored + [1499405] WinPCap has changed URL hosting + [1498519] APIC IRR bits not set while interrupts disabled + [1498193] Bochs segfaults on LTR instruction + [787140] Guest2HostTLB optimization bug + [1492070] instrument stop + [1487772] No SEP on P4 + [1488335] Growing hard disk images severe interoperability errors! + [1076312] Shadow RAM and TLB + [1282249] The real i440FX chipset Award bios hangs + [1479763] mistake "mov ax,[es:di]" for "mov ax,[ds:di]" + [1453575] Misconfigured floppy DMA transfers do not terminate. + [1460068] Incorrect handling for the Options Menu Item + [910203] bochs-2.1.1 wx.lo failed + [1438654] PANIC when trying to run install-amd64-minimal-2005.0.iso + [1458320] compile hdimage.h fails + [1455880] bochs-2.2.6,2: make error on FreeBSD + [696890] Network wouldn't run under W2k hosting MSDOS + [673391] SMP timer problems + [1291059] wxWindows GUI on non-windows/configure issue + [1356450] bochs 2.2.1 errors-omittions + [1178017] Win98 guest cannot receive network packets from host + [1076315] a20_mask after restarting + [1436323] real hw does not panic when bad Ib in CMPSS_VssWssIb + [1435269] cdrom_amigaos is not compilable + [1433314] disasm issues + [1170614] relative jumps/calls wrong in debugger + [758121] user might get confused when interrupt handler invoked + [1170622] You cannot toggle OFF "show" flags + [1406387] JMP instruction should display absolute address + [1428813] PANIC: ROM address space out of range + [1426288] DR-DOSs EMM386 problem + [1412036] Bochs cannot recognize PCI NIC correctly + [435115] dbg: modebp broken and no docs + [1419366] disasm cs:eip does not work anymore + [1419393] SSE's #XF exception -> "exception(19): bad vector" + [1419429] disassembly of "260f6f00" show DS: instead of ES: prefix + [1417583] Interrupt behaviour changed from 2.2.1 to 2.2.5 + [1418281] 'push' (6A) incorrectly disassembled + [1417791] FLDENV generating exception when real hw does not. + [1264583] OS/2 1.1 doesn't run + +------------------------------------------------------------------------- +Changes in 2.2.6 (January 29, 2006): + +- First major SMP release ! + - several APIC and I/O APIC fixes make SMP Bochs booting Windows NT4.0 + or Knoppix 4.0.2 without noapic kernel option in SMP configuration. + - critical APIC timer bug fixed + - obsolete SMP BIOS images removed (MP tables created dynamicaly) + - determine number of processors in SMP configuration through .bochsrc + new .bochsrc option 'CPU' allows to choose number of processors to emulate + - new configure option --enable-smp to configure Bochs for SMP support, + the old --enable-processors=N option is deprecated +- CPU and internal debugger fixes + - enabled #PCE bit in CR4 register, previosly setting of this bit + generated #GP(0) fault + - enabled LAHF/SAHF instructions in x86-64 mode + - fixed bug in PMULUDQ SSE2 instruction + - fixes in Bochs debugger +- Configure and compile + - enable VME (virtual 8086 mode extensions) by default if cpu-level >= 5 + - enable Bochs disassembler by default for all configurations + - win32 installer script improvements + - ips parameter moved to new 'CPU' option + - show IPS value in status bar if BX_SHOW_IPS is enabled +- Other + - several fixes in the hard drive, keyboard, timer, usb and vga code + - new user button shortcut "bksl" (backslash) + - updated Bochs instrumentation examples + - user and development documentation improved + +------------------------------------------------------------------------- +Changes in 2.2.5 (December 30, 2005): + +Brief summary : +- added virtual 8086 mode extensions (VME) implementation +- several fixes/improvements in x86-64 emulation, debugger and disassembler +- new serial mode 'socket' connects a network socket +- IDE busmaster DMA feature for harddisks and cdroms completed and enabled +- many improvements in Bochs emulated I/O devices (e.g. floppy, cdrom) +- Updated LGPL'd VGABIOS to version 0.5d + +Detailed change log : + +- CPU + - fixed XMM registers restore in FXRSTOR instruction (Andrej Palkovsky) + - print registers dump to the log if tripple fault occured + - fixed PANIC in LTR instruction (Stanislav) + - added virtual 8086 mode extensions (VME) implementation, to enable + configure with --enable-vme (Stanislav) + - flush caches and TLBs when executing WBINVD and INVD instructions + - do not modify segment limit and AR bytes when modifying segment + register in real mode (support for unreal mode) + - fixed init/reset values for LDTR and TR registers + - reimplemented hardware task switching mechanism (Stanislav) + - generate #GP(0) when fetching instruction cross segment boundary + +- CPU (x86-64) (Stanislav Shwartsman) + - implemented call_far/ret_far/jmp_far instructions in long mode + - fixed IRET operation in long mode + - fixed bug prevented setting of NXE/FFXSR bits in MSR.EFER register + - implemented RDTSCP instruction + - do not check CS.limit when prefetching instructions in long mode + - fixed masked write instructions (MASKMOVQ/MASKMOVDQU) in long mode + - fetchdecode fixes for x86-64 + +- APIC + - Fixed bug in changing local APIC id (Stanislav) + - Fixed reading of IRR/ISR/TMR registers (patch by wmrieker) + - Implemented spurious interrupt register (Stanislav, patch by wmrieker) + - Fixed interrupt delivery bug (anonymous #SF patch) + - Correctly implemented ESR APIC register (Stanislav) + +- Bochs debugger + - Fixed bug in bochs debugger caused breakpoints doesn't fire sometimes + (Alexander Krisak) + - watchpoints in device memory fixed (Nickolai Zeldovich) + - new debug interface to access Bochs CPU general purpose registers + with support for x86-64 + +- Disassembler (Stanislav Shwartsman) + - Fixed disassembly for FCOMI/FUCOMI instructions + - Full x86-64 support in disassembler. The disassembler module extended + to support x86-64 extensions. Still limited by Bochs debugger which + is not supporting x86-64 at all ;( + +- I/O devices (Volker) + - general + - memory management prepared for large BIOS images (up to 512k) + - slowdown timer sleep rate fixed (now using 1 msec on all platforms) + - some device specific parameter handlers moved into the device code + - serial + - new serial mode 'socket' connects a network socket (#SF patch by Andrew Backer) + - hard drive / cdrom + - assign a unique serial number to each drive (fixes harddrive detection + problems with Linux kernels 2.6.x: "ignoring undecoded slave") + - geometry autodetection for 'flat' hard disk images added. Works with + images created with bximage (heads = 16, sectors per track = 63) + - ATAPI command 'read cd' implemented, some other commands improved + - cdrom read block function now tries up to 3 times before giving up + - emulation of raw cdrom reads added, some other lowlevel cdrom fixes + - IDE busmaster DMA feature for harddisks and cdroms completed and enabled + - disk image size limit changed from 32 to 127 GB + - split ATA/ATAPI emulation code and image handling code + - floppy + - fixes for OS/2 (patch by Robin Kay) + - disk change line behaviour fixed (initial patch by Ben Lunt) + - end-of-track (EOT) condition handling implemented + - more accurate timing for read/write data and format track commands using + a motor speed of 300 RPM + - timing of recalibrate and seek commands now depends on the step rate, + date rate and the steps to do + - floppy controller type changed to 82077AA + - cmos + - RTC 12-hour and binary mode implemented + - number of CMOS registers changed from 64 to 128 + - bochsrc option 'cmosimage' improved + - save cmos image on exit if enabled + - speaker + - simple speaker support for OS X added (patch by brianonn@telus.net) + - pci + - BeOS boot failure fix in the PCI IDE code + - don't register i/o and memory regions during PCI probe + - vga + - memory allocation for vga extensions fixed + - usb + - some bugfixes by Ben Lunt (mouse and keypad are usable now) + - networking modules + - VDE networking module now enabled on Linux + +- display libraries + - general + - new syntax for the userbutton shortcut string and more keys supported + - win32 + - fixed keycode generation for right alt/ctrl/shift keys + - runtime dialog is now a property sheet + - x11 + - simple dialog boxes for the "ask" and "user shortcut" feature implemented + - Slovenian keymap added (contributed by Mitja Ursic) + +- configuration interface + - ask dialog is now enabled by default for win32, wx and x display libraries + - bochsrc option floppy_command_delay is obsolete now (floppy timing now based + on hardware specs) + - floppy image size detection now available in the whole config interface + - some device specific parameter handlers moved into the device code + - calculate BIOS ROM start address from image if not specified + +- System BIOS (Volker) + - PCI i/o and memory base address initialization added + - several keyboard interrupt handler fixes (e.g. patch by japheth) + - several floppy fixes (e.g. OS/2 works with patch by Robin Kay) + - some more APM functions added + - Updated LGPL'd VGABIOS to version 0.5d + - generate SMP specific tables dynamicly by the Bochs memory init code + +- SF patches applied + [1389776] Disk sizes over 64 Gbytes by Andrzej Zaborowski + [1359162] disasm support for x86-64 by Stanislav Shwartsman + [857235] task priority and other APIC bugs, etc by wmrieker + [1359011] build breaks for 386 + debugger + disasm by shirokuma + [1352761] Infinite loop when trying to debug a triple exception + [1311170] small APIC bug fix (interrupt sent to the wrong CPU) + [1309763] Watchpoints don't work in device memory by Nickolai Zeldovich + [1294930] change line status on floppy by Ben Lunt + [1282033] SSE FXRESTORE not working correctly by Ondrej Palkovsky + [816979] wget generalizations by Lyndon Nerenberg + [1214886] No more pageWriteStamp / unified icache by H. Johansson + [1107945] com->socket redirection support by Andrew Backer + +- these S.F. bugs were closed + [669180] win95 install : unknown SET FEATURES subcommand 0x03 + [1346692] bochs 2.2.1 VGA BIOS error + [1354963] floppy in KolibriOS + [1378204] error: bochs-2.2.1, --enable-sb16, --disable-gameport + [1368412] VDE problems in BOCHS + [533446] CPU and APIC devices appear twice + [1000796] bximage fails to create image of specified size + [1170793] Quarterdeck QEMM doesn't work + [923704] Multiple opcode prefixes don't reflect Trap 13 + [1166392] DocBook/documentation issues + [1368239] broken grater than 4GB size of sparse type hd image + [1365830] i386 compile breaks on paging + [427550] Incomplete IRETD implementation + [1215081] MSVC workspace STILL not fixed + [736279] Jump to Task + [1356488] FD change fail & occur error + [957615] [CPU ] prefetch: RIP > CS.limit + [1353866] not booting linux-2.6.14 + [1351667] load32bitOSImage does not work with --enable-x86-debugger + [1217476] Incorrect (?) handling of segment registers in real mode + [1184711] OS2 DOS crash [2.2.pre2] + [624330] support for disks > 32GiB + [1348368] bochs 2.2.1 bximage error + [1342081] Configuration Menu option failed + [1138616] OS/2 Warp 4 hangs when booting + [1049840] mouse and video conflict + [1164570] Unable to perform Fedora Core 4 test 1 installation + [1183201] Windows 2000 (MSDN build 2150?) does not completely install + [1194284] Can't boot from CD-ROM (Windows NT) + [962969] Windows NT crashes while trying to intall them. + [1054594] WinXP install halts (redo) + [1153107] Windows XP fails with BSOD on 'vga' + [938518] Win XP installation fails + [645420] getHostMemAddr vetoed direct read + [1179985] MS XENIX: >>PANIC<< VGABIOS panic at vgabios.c, line 0 + [1329600] WBINVD and INVD should flush caches and TLB + [638924] eliminate BX_USE_CONFIG_INTERFACE + [1048711] Funny behaviour with CTRL + [1288450] keyboard BIOS error + [1310706] Keyboard - about key SHIFT + [1295981] Ubuntu 5.04 Live-CD won't boot in Bochs + [879047] APIC timer behavior different before reset and after + [1188506] I still can't install the german Windows XP! + [1301847] Windows XP dosn't boot - FXRSTOR problem ? + [661259] does not boot QNX under WinX + [924412] Keyboard lock states all whacked + [681127] MIPSpro compiler (IRIX) is allergic to ^M + [1285923] BIOS keyboard handler + [516639] ATA controller revisited... + [657918] does not boot BeOS under WinX + [649245] BeOS CD locks halfway on boot + [1094385] Attachment for bug 1090339 (beos failure) + [1183196] BeOS 4.5 developer CD does not install + [1090339] BeOS fails to boot + [639484] panics when int 13 is called + [711701] divide by zero + [704295] ATAPI/BIOS call missing + [682856] hard drive problems + [627691] Cursor keys problem + [588011] keyboard not working + [542260] os/2 warp crashes with floppy handling + [1273878] SB16 doesn't work in pure DOS + [542254] OS/2 FDC driver dies + [1099610] Windows 98 SE Does not install + [875479] cr3 problem on task switch + [731423] NE2000 causing PANIC on Win2K detection + [1156155] bochs fails to boot plan9 iso + [1251979] --enable-cpu-level=3 should assume --without-fpu + [1257538] Interupt 15h 83h - set wait event interval + [658396] Panic for DR DOS emm386 + [679339] /? doesn't divulge Bochs command-line syntax + [1167016] call/jump/return_protected doesn't support x86-64 + [1252432] Mac OS X compile bug + [881442] Bochs 2.1 PANIC when loading DOS Turbo Pascal protected mode + [1249324] Boch2.2.1 Buffer Overfollow in void bx_local_apic_c::init () + [1197144] 'make install' has dependency on wget + [1079595] LTR:386TSS: loading tr.limit < 103 + [1244070] Compilation Error in gui/rfb.cc + [761707] CPU error when trying to start Privateer + [517281] Crash running Privateer in DOS... + +------------------------------------------------------------------------- +Changes in 2.2.1 (July 8, 2005): + +- Fixed several compilation warnings and errors for different platforms (Volker) +- Fixed FPU tag word restore in FXRSTOR instruction (Stanislav) +- Added missing scancodes for F11 and F12 to BIOS translation table (Volker) +- Bochs disassembler bugfixes (h.johansson) +- About 5% emulation speed improvement (h.johansson) +- Handle writing of zero to APIC timer initial count register (Stanislav) +- Enable Idle-Hack for 'TERM' GUI (h.johansson) +- Reduced overhead of BX_SHOW_IPS option to minimum. Now every simulation + could run with --enable-show-ips without significant performance + penalty. (Stanislav) +- Fixed pcipnic register access (Volker) +- Limited write support for TFTP server in 'vnet' networking module added (Volker) +- Changed some timing defaults to more useful values (Volker) +- WinXP/2003 style common controls now supported (Vitaly Vorobyov) +- Updated LGPL'd VGABIOS to version 0.5c (Volker) +- Added new BX_INSTR_HLT callback to instrumentation (Stanislav) + +------------------------------------------------------------------------- +Changes in 2.2 (May 28, 2005): + +Brief summary : +- New floating point emulator based on SoftFloat floating point + emulation library. +- improved x86-64 emulation +- Cirrus SVGA card emulation added +- status bar with indicators for keyboard, floppy, cdrom and disk (gui dependant) +- many improvements in Bochs emulated I/O devices (e.g. PCI subsystem) + +Detailed change log : + +- CPU + - fixes for booting OS/2 by Dmitri Froloff + - fixed v8086 priveleged instruction processing bug (was also reported + by LightCone Aug 7 2003) + - exception process bug (was reported by Diego Henriquez Sat Nov 15 + 01:16:51 CET 2003) + - segment validation with IRET instruction + - CS segment not present exception processing with IRET + - several fixes by Kevin Lawton + - add MSVC host asm instructions (patch by suzu) + - fixed bug in HADDPD/HSUBPD (SSE3) instructions + - fixed bug in float to integer SSE/SSE2 convert instructions + - fixed BCD instructions implementation + - execution speed improvements (sshwarts and psychosmur) + - fix MSR_APICBASE base address (Kangmo Kim, Christian Neubert) + - change BX_PANIC messages to BX_INFO when behaviour exactly + matches Intel docs + - EIP > CS.limit case should always cause #GP(0), even in real mode. + Fixed all jump, call and ret instructions for 16/32 modes + - fixed using invalid segment register for MOV instruction (h.johansson) + - fixed ET bit mismatch between CR0 and SMSW instruction + - fixed possible simulator #DIVZERO fault when executing IDIV instruction + - fixed undocumented flags handling for BTS, BTR, SHR, SHLD, MUL and IMUL + instructions (Stanislav Shwartsman) + - added missed #GP(0) exception when loading incorrect flags combination + to CR0 (Stanislav Shwartsman) + - in case of --enable-ignore-bad-msr enabled read ignored MSRs as zero + - enabled #DE, #TSD and #MCE bits in CR4 register, previosly setting + of one of these bits generated #GP(0) (Stanislav, Volker Ruppert) + - exceeding the instruction length limit of 15 bytes (this only can + occur when redundant prefixes are placed before an instruction) + generate #GP(0) (Stanislav Shwartsman) + - corrected PAE functionality + +- CPU (x86-64) + - fetchdecode fixes for x86-64 and 3DNow! (Stanislav) + - fixed CF flag handling for SHL instruction in x86-64 mode (Stanislav) + - implemented CR8 register (aliased to APIC.TPR[7:4]) (Stanislav) + - implemented NXE bit (No-Execute page protection) support (Stanislav) + - STOSQ instruction emulation fixed (Avi Kivity) + - allow null SS selector for MOV SS, POP SS, and LSS instructions + in long mode (Avi Kivity) + - ignore segment bases for all segments (except FS and GS) in long + mode (Avi Kivity) + - allow SYSENTER/SYSEXIT instructions together with x86-64 (Stanislav) + - canonical address checking for RIP (Stanislav) + +- FPU (Stanislav Shwartsman) + - totally rewritten all FPU code based on softfloat library + - significantly improved accuracy of all floating point + instructions. + - implemented all missed P6 and PNI floating point instructions. + - hundreds of bug fixes in FPU code. + + TODO: + ! Unmasked underflow/overflow should correct the result + by magic number for all operations, including float32 + and float64. + +- APIC (Zwane Mwaikambo) + - APIC arbitration + - Processor priority + - Various interrupt delivery fixes + - Focus processor checking + - ExtINT delivery + +- Disassembler + - fixed MOV opcode 0x88, had exchanged the operands (h.johansson) + - fixed MOV opcode 0xA3, had wrong operand size (h.johansson) + - fixed BOUND opcode 0x62 (Stanislav) + - fixed CALLW opcode 0xFF /3 and JMPW opcode 0xFF /5 (Stanislav) + - fixed INS opcode 0x6D, had wrong operand size (Stanislav) + - fixed disassembly for repeatable instructions (Stanislav) + - fixed sign-extended immediate opcodes (Stanislav) + - fixed MOVSS/MOVSD instructions opcode names (Stanislav) + - fixed NEG instruction opcode name (Stanislav) + - fixed CMPXCHG8B instruction, had wrong operand size (Stanislav) + - fixed floating point instructions operands (Stanislav) + - experimental support of AT&T syntax in disassembler (Stanislav) + +- I/O devices + - general + - handle cpu reset through port 0x92 + - new memory handler API for PCI i/o and memory handling (Frank Cornelis) + - speaker emulation for Linux (David N. Welton) and Win32 (Volker Ruppert) added + - pci + - PCI slot configuration added for 5 slots (Volker) + - PCI irq routing, irq sharing and level sensitive irq mode implemented + - ne2k device appears as a Realtec 8029 NIC if connected to a PCI slot + - PCI IDE controller dummy device added + - PCI host device mapping for Linux (Frank Cornelis) + - PCI Pseudo-NIC emulation (Michael Brown) + - serial + - multiple serial port support added (4 ports now available) + - partial raw serial support on win32 (transmit data) + - serial port i/o mode option added (modes: null, file, term, raw, mouse) + - parallel + - multiple parallel port support added (2 ports now available) + - mouse + - serial mouse support (Volker) + - PS/2 and serial wheel mouse support (Ben Lunt) + - usb + - USB mouse and keypad support (Ben Lunt) + - config option to specify devices connected to USB ports + - vga + - VBE 8 bit DAC support added + - VBE memory now registered using DEV_register_memory_handlers() + - CL-GD 54xx SVGA emulation added (Makoto Suzuki) + - vga extension option added (choices: vbe, cirrus, none) (Volker) + - floppy + - raw floppy access now works on Win9x host (Ben Lunt) + - sb16 + - MacOSX sound support (Brian Huffman) + - networking modules + - new: 'eth_vnet' simulates ARP, DHCP, ICMP-echo and read-only TFTP + (m_suzu, easeway) + - new: 'eth_vde' for Virtual Distributed Ethernet (Renzo Davoli) + +- System BIOS + - turn floppy motor off 2 seconds after last read/write/recalibrate command + (Ben Lunt) + - int13_cdrom / 32 bit register update fixes for FreeBSD cdrom boot + (Fabrice Bellard) + - APM and system shutdown support (Fabrice Bellard) + - checksum calculation for expansion ROMs + - extended floppy parameter table (Mike Nordell, Derek Favcus) + - PCI IRQ initialisation added + - boot sequence with up to 3 boot devices added + +- display libraries + - status bar with indicators for cdrom, floppy, harddisk and keyboard added + (done in rfb, sdl, win32, wx and x) + - 3rd (middle) mouse button now supported (rfb, sdl, win32, wx, x) + - mouse wheel support (sdl, win32, x) + - CTRL key + middle mouse button now used to toggle the mouse capture mode + (sdl, win32, wx, x) + - text mode split screen feature added (sdl, win32, wx, x) + - new gui function returns the display library capabilities (xres, yres, bpp) + for the Bochs VBE support + - display library specific options added - currently supported: + rfb: timeout (time to wait for client connection) + sdl: fullscreen (startup in fullscreen mode) + win32: legacyF12 (use F12 to toggle mouse) + - new graphics update API added (used by svga_cirrus) (Robin Kay) + +- configuration interface + - win32: gui runtime dialogs replace textconfig runtime dialogs + - set default IPS to 10000000 in .bochsrc sample + - SB16 options dmatimer and loglevel now available at runtime + +- configure script / compile + - --enable-ignore-bad-msr (ignore bad MSR references) option is enabled + by default + - --enable-mmx enabled by default only if cpu-level >= 5 + - --enable-4meg-pages will be enabled by default if cpu-level >= 5 + - fixes for Solaris SunPro (Robin Kay) + - --enable-pni option added + - --enable-show-ips option added, enable Instruction Per Second counter + in log file + - autodetection for lowlevel sound support added + +- documentation + - a bunch of updates in user and documentation docs (Alexander Schuch) + +- SF patches applied + [894595] MSR_APICBASE always returns APIC ADDRESS 0 by Kangmo Kim + [907163] ctrl_xfer8 clean/speed up + [907161] clean/speed up of io.cc + [899972] data xfer performance patch V 2.0.4 + [904549] imul gives incorrect result in long mode + [877510] amd64 fixes... + [903465] SEGV in iodev/ne2k.cc line 1211 on Alpha architecture by Christian Lestrade + [903332] copy the bximage result to clipboard, etc by Lukewarm + [950905] Do not PANIC on rare, bad input from user-mode by h.johansson + [924428] ET bit mismatch between CR0 and MSW + [869822] a real SVGA implementation by m_suzu + [867045] fix for compiler errors on VC++ by m_suzu + [838601] support for the over 2GB disk size with MSVC++ + [874816] local ARP/ping/DHCP simulator by m_suzu + [976066] Keyboard: Get controller version by Ben Lunt + [832330] ROMBIOS improvement (reduce stack consumption, etc.) + [977900] READ_CDROM_TOC and base address by Ben Lunt + [961665] WinXP patch to read physical CDROM's TOC by Ben Lunt + [978793] CDROM_SENSE_MODE medium_type by Ben Lunt + [615457] gif to png migration + [1021767] Portability in sb16ctrl.c by Robert Millan + [690400] gzip is confused by GZIP variable in Makefile + [567595] guess floppy image size from image file length by Tal Benavidor + [888426] bochsrc to make vnet useful by m_suzu + [1021758] GNU/k*BSD host support by Robert Millan + [969967] int 15/ah=87h clearing cr0 by Ben Lunt + [1048327] Russian Keymap by Dmitry Soshnikov + [851332] DESTDIR support for install_dlx by Ville Skytt + [970929] gdbstub support for MinGW tool chains by Muranaka Masaki + [1021740] Turn gdb stub into a runtime option by Charles Duffy + [1063329] RFB key press/release bug fix by Remko van der Vossen + [1079240] Wheel Mouse by Ben Lunt + [1087537] Fix for Win9x CD boot by lukewarm + [1083218] Start of wheel for USB #2 by Ben Lunt + [1098480] bochsrc: fixed floppya example by Alexander Schuch (ci-dev) + [1094407] configure.in: changed wxWindows to wxWidgets by Alexander Schuch + [1092058] serial.cc debug output cleanup by Ben Lunt + [1101165] APIC base address by Christian Neubert (flashburn) + [1093796] Fix for bug #1093786 (Nigel Horne) + [1082584] The start of Bus mice and USB mice by Ben Lunt + [1104695] msvc6 compatibility update (Royce Mitchell III) + [1059199] VGA text font bug fix (Anonymous) + [1108001] Null pointer on bx_atexit() (Ben Lunt) + [1112093] Fixed mouse cursor remain area drawing (Anonymous) + [1114826] Fix PCIBIOS (Destruction prevention of esi and edi) + [1095473] Reading from a CDRW (Fixed) by Ben Lunt + [1123895] x86-64 gdb/debugger fixes by Avi Kivity + [1145423] stosq simulation bugfix by Avi Kivity + [1151012] allow null ss on x86-64 by Avi Kivity + [1153327] ignore segment bases in x86-64 by Avi Kivity + [1153511] Fixed broken screen update (VBE) + [1152808] use 'install' instead of 'cp' during installation by Avi Kivity + [1159626] bugfix [1156776] keyboard scanmode fault by Rene Kootstra + [843328] PATCH: support for Flat-style ToolBar with Win32GUI + [1198308] PATCH: fix incorrect moving mouse cursor when wheel used + [1200515] add TFTP server to vnet & ipv4 bug fix by easeway + [1203305] tuntap incompatibility by Jan Kratochvil + +- SF patches partially applied + [896733] Lazy flags, for more instructions, only 1 src op + [1005422] Improve mouse cursol Grub when 2 buttons-mouse use (WIN32) + (TODO: improved japanese keyboard support) + +- patches applied + - patch.rombios.markevich (Start/Stop Wait Timer) (Kory Markevich) + - patch.apic-zwane (APIC fixes) (Zwane Mwaikambo) + - patch.v8086-exception.lightcone (LightCone) + +- these S.F. bugs were closed + #957660 >>PANIC<< APIC: R(curr timer count): delta < initial + #1192654 60 x 90 text not quite right... + #1189097 "configure --with-sdl --with-rfb" doesn't compile + #1188980 Crash on XP when break into debugger + #1186693 Improving quality of ./configure --help + #1185245 Errors Making Bochs with Mingw32 + #1185289 PSE is not enabled by default on Pentium + #1170620 info cpu scrolls away, is too long + #1157998 ips shown even when waiting for input + #663108 APIC Timer Bug + #831750 bochs unlike real PC in paging + #1182698 PAE support doesn't work + #954400 debugger causes segfaults when gcc 3.4.0 is used + #1171312 Possible SMP problem with ICACHE pageWriteStamp + #1179964 PANIC: RIP>CS.limit when jumping to longmode + #1171067 configure fails to add -lpthread + #1171065 Term UI needs -lncurses + #1171061 SDL GUI startup failure + #1022056 win32 error build debug version..c2146 + #957190 error while attempting to compile sb16.cc + #804797 Debugger: visualization problem (jmp) + #675523 2.0.1 doesn't run on W2K? + #1167358 When using 5430PCI in DR-DOS Bochs would panic with a PUSHAD + #1164654 Bochs VBE bios causing exception 0B in Windows 95 (SVGA bios) + #1162983 conflicts which configure could detect + #1164536 Windows 95 B crashes during install + #526978 cygwin: in an rxvt, stdout is flaky + #542303 >>PANIC<< call_protected: CS selector null + #859457 BRICKS game doesn't work + #1159639 text modes on address A0000-BFFFF are not handled properly + #1164225 define BX_SUPPORT_X86_64 0 + #1163720 ROL bug + #1156776 keyboard scanmode fault + #1162042 Duke Nukem 3D: >>PANIC<< iret: VM set on stack, CPL!=0 + #1161945 ctrl_xfer32 compile/make error + #1157124 Bochs doesn't run with large amounts of memory in bochsrc + #1154266 weird INT handling in V86 mode + #1157051 default Bochs CVS doesn't work-out-of-the-box + #923954 enter() with level > 0, >>PANIC<< iret: return CS selector + #1098476 Privilege Problem after SYSEXIT + #1121734 Bochs crashes when shutting down Win95 + #1099294 VESA for Win98 bogus + #1112836 PGE-Bit crashes Bochs + #947586 The specification difference in x86-64 emulation + #1117145 Push reset Button, APIC0 Error occur + #1123043 fpu stack pointer changed *despite* fault occured (e.g. #pf) + #1122066 PANIC: iret: IP > descriptor limit when installing os/2 warp + #809574 rm -f segfaults + #593952 SuSE rm segfaults + #929783 floppy not recogniced since 2.1 + #1099298 SB16 for Win98 Bogus + #1079483 Reading from a CDRW + #549793 flaw in interrupt gate handling(exception.cc) + #692055 SMP Error + #805479 Booting from disk causes illegal instruction warnings + #909677 pc-speaker doesn't work + #831751 behaviour unrealistic + #661213 CR4.TSD is broken + #685508 PANIC: prefetch: RIP > CS.limit + #1037923 Non-executable page support missed (NX bit, x86-64) + #1106530 wrong disassemble result + #1105208 drive order for boot gets saved wrong + #661060 Problem with Win98SE + #837377 Norton Ghost don't boot + #876689 Unknown register 0x17 [CPU] / WIN98SE + #947282 Bochs segfault + #963317 Persistent Win98SE + #1101168 APIC base address change + #680737 panic when installing winme + #1097187 Install FC3 on bochs-win failed + #875461 vgabios-lgpl should be default + #594797 Bochs segfaults + #602994 bochs breaks boot kernel + #571539 FreeBSD Install from CD Fails + #774257 Device doesn't work under W98 + #759228 Installing Suse 8.2 in Bochs on WinME + #792561 cant boot freebsd 5.1 from cdrom + #804004 Live cd will halt on boot.. + #956173 FreeBSD won't boot iso install images in Bochs v2.1 or 2.2. + #864401 >>PANIC<< jmp_ev: IP out of CS limits! + #853831 Error on int 15h + #1094150 DR-DOS 7.03: panics when using multitasker + #655592 win98 hardwaredetection + #1093786 Solaris 9 installation CD fails + #959585 USB UHCI IO-Device + #963314 Redhat Fedora Installer Kernel Panic and Crash + #1086920 Bochs (cvs) doesn't compile on FreeBSD 5 + #879050 Bochs reports enabled APIC without support + #1071199 dBaseII cause prefetch: RIP > CS limit + #1070812 typecast error while compiling wx.cc + #1068786 FSINCOS Cos value wrong at 90 degrees + #675248 Panic: EIP > limit on win98 install + #829793 [CPU ] prefetch: RIP > CS.limit + #1034059 >>PANIC<< prefetch: running in bogus memory + #1067813 pbm fpu_proto.h:144 ebuild gentoo bochs 2.1.1 + #922034 bios not aliased at 0xFFFFF000, registers wrong after reset + #912666 Configure fails on Yellow Dog Linux 3.0.1 + #922038 Unexisting memory should read back as 0xFFFFFFFF + #1019723 HD image + #1057814 Shadow RAM not aligned + #1057240 Invalid IRET32 implementation + #809682 >> PANIC << : prefetch: RIP > CS.limit + #618680 memory referencing problems + #724262 A few things (Windows 2.03, Wolfenstein) + #985375 Crash Mandrake 7.1 + #913418 compiler errors with --enable-external-debugger option + #708847 CR8 access should not panic X86-64 + #1039499 Compile error pcipnic.cc (cygwin) + #978024 compile against wxGTK-2.5.2 fails + #639073 MacOSX: Networking not implemented + #639074 MacOSX: Soundblaster not implemented + #963264 Latest CVS --enable-pcidev fails to configue on YDL Linux + #586282 Mac OS X, will not "make" + #699532 CVS (as of 2003/03/07) cannot read disk images + #639275 wrong more than 2GB size DVD-ROM + #766020 info registers / dump_cpu get old eflags + #655920 QuickBasic (qbx.exe) panics + #676188 Error BX_MAX_DIRTY_PAGE_TABLE_MEGS + #923821 LOCK not generating exceptions properly + #1007747 Wrong configure? + #1022577 show "call" command crashes bochs every time + #681849 SuSE 8.1 Compile problem + #660322 Install bochs 2.0 on SuSe 8,0 + #1022587 "Unrecognized args" message wrong after invalid show command + #833118 TUN/TAP interface bug + #1022178 tuntap module mangles incoming broadcast packets + #1028682 Report incorrect disk parameters of floppy + #1026234 make fails on Cygwin because of missing .exe extension + #1026241 --enable-cpp needed for .conf.win32-cygwin + #855323 BIOS Panic at rombios.c, line 1563 + #762773 ROM checksum is not checked in rom_scan_loop + #657604 concat_image_t.lseek to byte -1378816 fa + #800140 No AH=83h INT15h implemented + #831965 Win32.zip BIOSes in wrong directory + #873280 bximage crashes after createing "growing" + #892223 bochsrc-sample.txt/vgaromimage option error + #1014361 Bximage on WinXP won't create image + #651510 bximage won't create larger than 2GB + #759206 bximage fails on Win32 for hd images over 2Gb + #759210 Bochs fails on image files over 2Gb on Win32 + #799785 bximage doesn't work + #903345 Problem compiling harddrv.cc + #933303 Bochs cannot lseek() HD images > 2GB on W32 platforms + #888438 bximage crashes...(hacked fix included) + #871720 bximage 2GB file size limit + #930368 Can't create big hard drives (>2 GB) + #912496 IDIV can cause simulator divide error + #522111 Host os SIGILL, booting grub from hd + #1005052 DMA Controller Model Problem + #552939 Bochs window doesn't resize when win311 + #989478 I-Cache and undefined Instructions + #661008 make install fails + #845691 Workaround: Ne2k and Windows 2000 not working + #923662 BIOS diskette motor countdown byte broken + #848141 VGA problems running Scitech Display Driver on Win95 + #799370 Problem booting ReactOS 0.1.3 + #670143 No rule to make config.h + #653444 with vbe/lgpl bios, scrn updates broken + #655696 quickstart broken? + #659350 FDC + #620853 Ne2000 ethernet card *NOT* supported + #607611 Numlock + #543476 Sound card does not work in Windows 95 + #529554 unsupported VBE features DISPI update + #487316 Access violation on Win32 + #576253 RTC too fast + #489748 io read from address 000003c0, len=2 + #656861 Gentoo Linux panics in VGA code + #787184 Video BIOS's don't checksum correctly + #988529 textconfig [Save options to] function output obsolete option + #987293 Cannot accesss header/toolbar + #988246 floppy read error + #933199 speedup Bochs compilation 4x -> suggestion + #979106 Incorrect disassembly table entry + #658374 FPU incorrect emulation + #706933 Problem with the F12-Key + #477043 math_abort panic in RH 7.1 + #634371 Floating point problems + #681138 // is not valid in C + #643300 cpuid feature flag 15, cmov and fcmov + #913697 missing division by 0 exeption in fpu emuation + #923682 FSTENV/FINIT problems + #923855 FPTAN doesn't work right with full NPX stack + #924379 ET bit mismatch between CR0 and MSW + #716116 Direct floppy access + #962919 Mac: iodev/cdrom.cc disordered + #954751 Two FPU.CPP in project + #954359 Compile faile is 3dnow support is selected without SSE support + #906412 FreeSCO error + #942060 FDC Controller not conforming to specifications + #938522 Win XP installation fails + #923613 BOUND instruction exception handling is broken + #923223 memtest86 errors + #593342 autoconf script doesn't regenerate clean + #616116 Crash on exit... + #922042 shutdown through port 92 does not work + #891633 02839990390p[CPU0 ] >>PANIC<< RDMSR: Unknown register 0x17 + #923653 DAA instruction is broken + #911225 obscure AAA / AAS bugs + #837206 Problems with numerical keys + #658765 BOCHS halts in runtime config + #890734 Bochsrc Parser Bug with commas included in strings + #877285 MSR_APICBASE zero upon startup + #526984 SDL compiled in cygwin just quits + #886406 I/O permissions bug + #883239 undefined symbols in gui/siminterface.h:1215 + #419647 on OSF1, cxx hates C++ inlines + #809790 "No rule to make target `devices.cc?..." + #873654 How compile without plug-in support ? + #837161 Test case for BX_CPU_C::IRET32 + #888116 mmx.cc compile error + +------------------------------------------------------------------------- +Changes in 2.1.1 (February 8, 2004): + +- fix bug in int15h function 0xe820 (Christian Neubert) +- fix vmware3 disk support on big-endian platforms (Christophe Bothamy) +- fix conditions for NM exception on FWAIT instruction (Christophe) +- fix symbol conflict in rfb and x display libraries (Volker Ruppert) +- allow 16 bit writes to ne2k page 0 (Kenneth Stailey) +- notify display libraries on change of bpp (Volker) +- fix bug in int13h function 0x10 (Volker) +- fix floppy dialog error on win2k (Volker) +- fix adress check in TSS IO permission bitmap (Christophe) +- fix buffer overflow vulnerability pointed out by SeSoX (Christophe) +- updates for MacOS compile (Daniel Gimpelevich) + +------------------------------------------------------------------------- +Changes in 2.1 (January 9, 2004): + +Brief summary : +- New disassembler +- 3DNow!/SSE/SSE2/PNI instruction support +- Vmware3/Sparse/Undoable/Growing harddisk images support +- many VGA emulation improvements (e.g. high/true color VBE modes added) +- No more X11 vga font required + +Detailed change log : + +- CPU + - added emulation of AMD 3DNow! instructions set. (Stanislav Shwartsman) + Bochs now could decode all AMD 3DNow! instructions. + Most of instructions still not implemented, but the basis already presents. + Configure --enable-3dnow to enable 3DNow! support. + Notes : + - These instructions are not implemented yet: + PFPNACC_PqQq, PF2IW_PqQq, PFNACC_PqQq, PFCMPGE_PqQq, PFMIN_PqQq, + PFRCP_PqQq, PFRSQRT_PqQq, PFSUB_PqQq, PFADD_PqQq, PFCMPGT_PqQq, + PFMAX_PqQq, PFRCPIT1_PqQq, PFRSQIT1_PqQq, PFSUBR_PqQq, PFACC_PqQq, + PFCMPEQ_PqQq, PFMUL_PqQq, PFRCPIT2_PqQq + - CPUID does not report 3DNow! instruction set. + - added emulation of SSE/SSE2 floating point instructions. (Stanislav) + All SSE/SSE2 floating point instructions are fully implemented using + free softfloat library (including DAZ support and floating point + exceptions). Correctness of the emulation checked with heavily random + testing. + - added emulation of SSE3 (PNI) instructions (Stanislav) + Currently only 3 PNI opcodes still not implemented: + FISTTP m16int, FISTTP m32int, FISTTP m64int + - added P4 CPU support to CPUID instruction. (Stanislav) + - fixed implementation of FXSAVE/FXRSTOR instructions. (Stanislav) + - bugfix: unallowed lock prefix cases must cause #UD exception. (Stanislav) + - fixed fetchdecode bug caused #UD in SYSENTER/SYSEXIT instructions + in 32bit mode. (Stanislav) + - fixed fetchdecode64 bug caused wrong decoding of opcodes containing + BxImmediate_IvIw or BxImmediate_IwIb in x86-64. (Stanislav) + - fixed bug in int01 (opcode 0xF1) emulation. (Vitaly Vorobyov) + - fixed bug in x86 debugger with dr0-dr3 registers (Vitaly) + - fixed bug with mov to/from dr register in v86mode. + (now exception is generated (according to Intel documentation) + instead of panic) (Vitaly) + - fixed stack limit checking, now message is generated as BX_DEBUG, + rather then BX_PANIC, and exception code is executed. (Vitaly) + - instrumentation code updated. (Stanislav) + - fix flaw in IO bitmap permission of TSS (Christophe Bothamy) + - cpu resets on triple fault (Christophe) + - remove calculation on cr3 in dtranslate_linear to increase + emulation speed (Conn Clark) + - numerous x86-64 fixes (Peter Tattam) + +- FPU + - hundreds of bugfixes in FPU emulation after checking of the emulation + with testfloat (Scott Duplichan). + - Fixed cases: + - floatx80_to_int32, floatx80_to_float32 + - floatx80_to_float64, floatx80_round_to_int + - floatx80_add, floatx80_sub, + - floatx80_mul, floatx80_div + - implemented FCMOVcc instructions (Stanislav) + - 64-bit addressing support for x86-64 mode (Peter) + +- Disassembler + - replaced Bochs disassember. New table-based disassembler fully supports + all IA-32 instruction sets including all FPU/MMX/SSE/SSE2/SSE3 opcodes. + (Stanislav) + +- I/O devices + - general + - i/o access mask implemented, unallowed cases are now handled in the devices + code and cause a BX_ERROR (Volker Ruppert) + - include slowdown timer as a runtime option (Christophe) + - netBSD : fix serial, ethernet, cdrom (fredb, uebayasi and David Laight) + - VGA + - color depth 15, 16, 24 and 32 bpp supported by VBE (Volker and + Christopher Nelson for 32 bpp on win32). Supported by sdl, x, win32 and wx. + - SVGA mode 0x6A (800x600x4bpp) implemented (Volker) + - new CGA graphics modes 640x200x1bpp and 160x100x4bpp (text mode 80x100) (Volker) + - raster operations AND, OR and XOR in write mode 2 (based on SF patch #707931) (Volker) + - 'split screen' in standard VGA graphics mode implemented (Volker) + - 'double scan' and 'double width' now handled in the VGA code (Volker) + - more accurate emulation of the horizontal and vertical retrace (Volker) + - changeable start address and variable line length supported by all + graphics modes (Volker) + - VBE: preserve video memory feature implemented (Volker) + - additional text mode features prepared (handled in the display library + code) (Volker) + - PCI + - add experimental PCI VGA card (Mike Nordell) + - add experimental PCI USB card (Ben Lunt) + - Harddisks + - per device selectable harddisk modes : + - undoable, volatile, growing disks support (Christophe) + - sparse disks support (justinSB) + - vmware3 disks support (Sharvil Nanavati) + - fix non detection of hard drives by minix2 (Christophe) + - implement atapi command 0xA8 read (12) (Christophe) + - mode sense command updated (Hartmut Birr) + - sb16 + - opl2 support enhanced (James E. Flemer) + - ne2k + - tap support for FreeBSD (Ronald Klop and Gen Otsuji) + - fix when booting with grub (Keir Fraser) + - cmos + - date/time change support added (Volker) + - UIP bit and divider chain reset implemented (Volker) + - initial time can now be set to local time or utc (Christophe, Daniel Gimpelevich) + - keyboard + - keyboard reset function (0xff) now resets the keyboard (Volker) + - gameport + - new standard PC gameport device (real joystick connected on Linux and + win32 only). Enable it with --enable-gameport or the SB16 emulation (Volker) + - serial + - FIFO emulation (UART type 16550A) implemented (Volker) + - floppies + - 160k,180k,320k floppies support (Ben Lunt) + +- display libraries + - X11 + - onboard vgacard charmap usage (no need for external X11 vga font any more) (Christophe) + - vgacard charmap change support (Christophe) + - fix black stripes on partial exposes (Dirk Thierbach) + - headerbar redraw optimizations (Dirk Thierbach) + - external font files and their installation mechanism removed (Volker) + - belgian keymap support (Wouter Verhelst, Eric Brasseur) + - win32 + wx + x: new application/window icon (bochs.ico / icon_bochs.xpm) (Volker) + - sdl + win32 + wx + x: new textmode features: variable line length, + char width switch, horizontal and vertical pel panning (Volker) + - win32 + wxMSW: key event handling rewritten (Volker) + - win32: status bar at the bottom of the simulation window added (Volker) + - wxMSW: resource problems fixed - wx dll plugin works now without errors (Volker) + - term: variable line length and cursor enable/disable feature implemented (Volker) + - rfb + - textmode: charmap change, better cursor emulation, variable line length (Volker) + - headerbar works now (power, reset and user button are okay) (Volker) + - key event handling rewritten (Volker) + - Bochs-RFB waits up to 30 seconds for a client connection. The emulation + starts after connecting the client. (Volker) + - carbon: Alt/Ctrl/Shift key handling rewritten & SysRq/Ctrl-Break key support added + (Daniel) + +- configuration interface + - gui dialogs as an extension of the textconfig interface on win32 added (Volker) + * ask dialog + * save text snapshot + * user button shortcut + * floppy image change + - wxwindows configuration dialogs improved (Volker, Christophe) + +- support tools + - bximage : added support for + - growing disks (Christophe) + - sparse disks (justinSB) + - created bxcommit tool for undoable disk images (Christophe) + +- System BIOS : + - fixed int15 function e801 (get memory size) (Christophe) + - added int75_handler for FPU Dos Exceptions (Christophe) + - added int16 function 0a (Get Keyboard ID) (Volker) + - added support for ElTorito Harddisk-on-CD emulation (Christophe) + - fixed ATA/Serial ioport conflict (Daniel) + +- VGA BIOS : updated to version 0.4c (Christophe) + +- configure script/compile/porting to other OSes/installation + - fixes for compilation with MSVC (Andrew Zabolotny) + - fixes for cross-compilation (Jeroen Janssen) + - win32 nsis installer script updates (Volker) + - small configure fixes for MacOS (Christophe) + - optimizations & compile fixes for MacOS/X (Daniel) + +- configuration files. The following options have been deprecated : + diskc, diskd, cdromd, time0, pit, newharddrivesupport. + +- documentation + - already ported and obsolete parts of the old documentation removed (Volker) + - user documentation updated and extended : + - improved section "What does Bochs need" (Volker) + - command line arguments (Volker) + - search order for the configuration file (Volker) + - the configuration interface 'textconfig' (Volker) + - FreeDOS Beta 8 installation instructions (Volker) + - disk modes (Christophe) + - LBA translation (Christophe) + - cdboot error codes (Christophe) + - SCO OpenServer install section (Carl Sopchak) + - MacOS-X DMG install guide (Aard Vark) + - update Win98 install guide (Dirk Thierbach) + +- SF patches applied + #658950 Bug in FPU (Anonymous) + #678117 build fail due to bad SGML punctuation (Anonymous) + #671873 minimal USB support (UHCI) (Ben Lunt) + #682539 Fix CapsLock and NumLock behavior (rock at gimp.org) + #720776 REX MOVB immediate broken for x86_64 (Arnd Bergmann) + #729450 new keymap x11-pc-be.map (Wouter Verhelst) + #735990 Limited patches for VC++ (Anonymous) + #742670 fix library dependencies in GUI plugins (Robert Millan) + #742782 LFB bugfix (Jan L. Hauffa) + #748414 load32bitOShack bug (kyriazis at nvidia.com) + #830079 Fix bochs's application error if unsupported key pressed (Anonymous) + #724466 enable building with CC=gcc-3.2 CXX=g++-3.2; dist-clean adds(Leonard Norrgard) + #834962 Fixed drawing graphics is broken (Anonymous) + #838401 Fixed redrawing of ToolBar on Win32GUI (Anonymous) + #850236 Fixed accessing DVD-ROM with direct device access on Win32 (Anonymous) + #847822 Bochs crash when exmining memory that crosses page boundary (ortal at jungo.com) + +- SF patches partially applied + #707931 Support EGA/VGA write mode 2 and others (Anonymous) + already applied: disable IME, split screen, write mode 2, + BIOS INT16h/AH=05h + #856506/#856510 Patch to fix compile-time iodev/cd-rom.cc error (alden.dima at nist.gov) + Correct patch provided in SF bug report #843433 (birkhofer at users.sourceforge.net) + +- patches applied + - patch.highmem (memory allocation) (Zwane Mwaikambo) + - patch.floppy-160k-180k-320k-benlunt (exotic floppies) (Ben Lunt) + - patch.perf-regparm-cclark (performance) (Conn Clark) + +- new patches present in the patches directory : + patch.pipelined-asm-cclark + patch.mingw-resources + patch.v8086-exception.lightcone + patch.pit-vitaly-vorobyov + patch.rombios-vitaly-vorobyov + patch.win32-vitaly-vorobyov + patch.win32-new-files-vitaly-vorobyov.tgz + patch.rombios.markevich + patch.rombios.dirk.thierbach + +- these S.F. bugs were closed + #865354 ">>PANIC<< CRA: divider chain control 0x07" in Linux 1.1 + #725796 configure script bug + #859768 cpuid + #863964 panic in duron 2000 + #843433 cdrom.cc on MacOSX: wrong const names + #818493 EMU][ (DJGPP app running on FreeDOS) broken + #787005 Some MOV instructions are not implemented!!! + #840664 2200136693936p[CPU ] >>PANIC<< prefetch: RIP > CS.limit + #837416 V2 OS not compatible !? + #650917 Serial port broken under win95 + #829863 Make bochs 2.0.2 build with gcc3 + #816971 main.cc: getcwd() missing argument + #813556 Compile error under gcc 3.3.1 + #809758 RIGHT ALT does not function properly + #809695 CVS complains about unknown files after compilation + #628762 Error in Floppy Booting + #474526 Crash under win32 (access violation) + #687619 test case for BX_CPU_C::IRET32 + #664544 Panic in IRET32 - Reporting test case + #637822 test case for BX_CPU_C::IRET32 + #603410 BX_CP U_C::IRET32 + #537047 IRET32 incomplete emulation, panic + #805541 Compile fails on i686, gcc 3.3 + #798829 Problem booting from ISO image + #688163 Panic at rombios.c + #688161 rombios.c crashes when boot from a CD. + #796339 int 15h, e801h broken? + #666946 Slowdown Timer should be a module + #783826 the clock is extremely fast + #645609 Real Time Clock is too *FAST* + #663320 flaw in IO bitmap permission handling + #764929 Timing is off. + #659510 Bochs timing off by x10 + #787138 No ROM BIOS character map + #787134 Config options not saved + #689201 Disassembler bug + #666202 Windows 2000 - random screen blanking with linux DLX demo + #629242 reset during Doom -> BIOS panic + #695434 minix floppies won't boot. + #764473 Freesco Linux crashes on boot + #656026 error when trying to run some stuff + #614202 HD: non-byte IO read to 01f4 + #777357 Strange FPU compiler error + #583758 gag bootloader doesn't run + #658639 ne2k panics with MS lanman Client/DOS62 + #536711 problem running smart bootmanager + #741433 Disabling all ata# results in HD error. + #753200 lock instruction doesn't do an illegal instruction trap + #679389 libbx_wx.so.0: undefined symbol + #758936 Problem Installing Bochs + #742580 I configured fants but bochs still give me the same error + #772242 iodev/vga.cc wrong memory access. + #739222 Cannot change resultion + #693344 libwx_gtk2.3.so.2 RedHat linux 8.0 + #639320 sparc: needs -lm to compile + #587422 Windows 95j doesn't boot + #547817 sparc: rfb needs -lsocket + #480963 RFB: option to wait for client + #763893 i've got problems with a "libvga.so.1" and another file + #766490 Documentation mistake + #766481 Bochs 2.0.2 Fails to compile on YDL3.0 + #626144 %lld is not portable + #752241 lock prefix erronously allowed for some instructions + #743305 fetchdecode.c probs + #658707 Automatic exit? + #696758 BeOS can't mount image disk, won't complete boot. + #737048 Enabling keyboard resets controllers translation mode + #717713 Bochs panics on startup on RH 9 + #741108 VGA PANIC + #730922 seg fault on "bochs boot: cdrom" + #658905 VGA read write error + #564218 Panic on vga_mem_write + #614231 X11 doesn't support charmap change + #708311 Missing CGA low-res emulation + #720776 REX MOVB immediate broken for x86_64 + #643296 lock prefix, unallowed cases + #716964 [sb16] OPL.timer_running not initialized + #662074 little mistake in the default config example + #470701 CD-ROM on Win2K needs FILE_SHARE_READ + #706454 bug?? + #653861 Win32 build bug + #421155 panic on vga read 0x3c7,0x3cb + #666434 VGA BIOS: Incompatible mode reporting + #681819 Incorrent return value from cdrom reads + #648222 Lotus Agenda futuristic dates off + #657455 doesn't boot plan9 + #658938 SGDT in VM8086 + +------------------------------------------------------------------------- +Changes in 2.0.2 (January 21, 2003): + +- fix possible segfault in wxWindows (Volker Ruppert) +- fix instrumentation (Stanislav Shwartsman) +- fix cdrom read_toc() function for *BSD (Keith Matthew Jones) +- fix NetBSD boot from cdrom (Christophe Bothamy) +- fix cmos checksum (Volker) +- fix "refresh bit" behaviour in pit (Volker) +- fix .bochsrc parsing (Volker) +- fix vga resize/redraw problems (Volker) +- fix compilation issues on Irix and Tru64 (Christophe) +- fix MMX/SSE bugs (Stanislav, Peter Tattam) + +------------------------------------------------------------------------- +Changes in 2.0.1 (January 4, 2003): + +- fix corrupt saved configuration files (Christophe Bothamy) +- fix missing break statements in apic (Shai Fultheim) +- fix compiling sb16 under FreeBSD (Volker Ruppert) +- updates to the documentation (Volker) +- fix text mode colors 8 to 15 (Volker) +- fix FPU integer load bug (Volker) +- stop pasting on hardware reset (Volker) + +------------------------------------------------------------------------- +Changes in 2.0 (December 21, 2002): + +Since the change log is hundreds of lines long, here is a very brief summary. +- 2x emulation speedup!!! +- added plugin devices and guis. Now you can compile with many more + options, and choose between them at runtime. +- added emulation of AMD x86-64, MMX, SSE, SSE2 instructions +- add wxWindows port (a graphical configuration interface and display lib) + and SVGAlib port (full screen display for Linux without X11) +- improvements in many I/O devices: for example up to 8 hard disks/cdroms, + TUN/TAP network interface, 360k floppies, +- improved MacOSX/Carbon interface and updated MacOS9 port +- GDB remote stub, allows symbolic debugging with Bochs simulation. +- support for up to 32gig hard disk images + +Detailed change log follows. + +- documentation + - manpages updated (Volker, Christophe) + - install HTML rendering of docbook documentation instead of + docs-html (Bryce) + - doc/docbook/Makefile is now generated by configure script. + if configure detects docbook2html on your system, it will turn on + --enable-docbook and run make in the doc/docbook directory. Also + make install will install documentation into $(docdir). You can use + --disable-docbook to turn this off, if necessary. (Bryce) + - add "make bochsdoc.tar.gz" target to create a documentation tarball. + If you do "make webinst" and you have write access on SF shell server, + it updates doc/docbook/* on the website (Bryce) + - user documentation additions: + - new options (Bryce, Volker, Christophe) + - Bios tips section (Christophe) + - Tuntap section (Christophe) + - Serial Port section (Christophe) + - "Will it Work for Me" / "Is Bochs Right for Me" sections + (N. David Guarneri) + - VESA section (Jeroen Janssen) + - several documents, previously existing as separate html files, have + been included : + - internal debugger section (Christophe) + - gdb stub debugger section (Christophe) + - WinME, WinNT, WinXP, The Hurd, Japanese Win95 install tips (Christophe) + - Win95, Win98 install tips (N. David) + - SB16 section (N. David) + +- configure script/compile/porting to other OSes/installation + - added plugin architecture + - plugin code written by Bryce, Christophe, Volker based on + plex86's plugin code by Kevin. Testing help from Psyon and Br'fin. + - Plugins are shared libraries that can be loaded on demand. Example: + the serial device is implemented as a plugin. In UNIX, the + serial plugin is called libbx_serial.so. When Bochs reads its + configuration file, if the serial device is enabled it loads + libbx_serial.so. + - all display libraries, most I/O devices are converted to plugins now + - plugins supported on Linux, Solaris, and MacOS X using libtool, + Cygwin using dlltool. On MacOSX, you must have dlcompat installed + and in your include/library paths at configure time. (See .conf.macosx + for an example.) + - we use libtool's LTDL library from libtool 1.4.2, with a number of + critical bug fixes (Bryce Denney) + - the Linux binary RPMs are built with plugin support + - to compile with plugins, configure with --enable-plugins + - the LTDL_LIBRARY_PATH variable tells Bochs where its plugins can be + found. Bochs has a compile-time default for this variable which is + correct if you do a make install. You would only need to set the + variable if the default is wrong. + - for win32 plugins we added "BOCHSAPI" in front of many classes + and methods, to aid in building DLLs. This turns into __declspecs + which are used when making an export library for Bochs. + - allow many display libraries to be configured and compiled at + a time. For example --with-win32 --with-sdl --with-rfb. + Also, we added an experimental option --with-all-libs which + tries to detect which --with-* options will work. If the + autodetection fails, just type the --with-* options explicitly. (Bryce) + - add #if's around all files which are conditionally compiled such + as cdrom.cc and sb16.cc. This makes it possible to compile every + source file all the time, which has the potential to simplify the + configure script and makefiles. At present we only take advantage + of this capability in the win32 VC++ workspace. (Bryce) + - the MacOS9 port has been updated so that it works again. It had + not been updated in at least 2 years, maybe more. (Christophe Bothamy) + - improve support for FHS standard (Robert Millan, Volker Ruppert) + See patches 551811 and 650066. + - keep separate CFLAGS and CXXFLAGS for Bochs (usually a graphical + program) and console programs such as bximage and niclist. Some + sdl and wx compile flags were making bximage and niclist unusable.(Bryce) + - add concept of cross-configuring in the configure script. If you + use the --target option to generate makefiles to be used on another + machine, some detection of compilers and libraries is disabled. (Bryce) + - fix term compile on Cygwin, but it has to be done without -mno-cygwin, + which means that several win32 features such as networking do not work. + - add "-Wno-multichar" on beos + - test for largefile support, and add required CFLAGS (Bryce) + - add -lm when it's needed, and not when it's not (Bryce) + - add configure support for 8 processors. Bochs can support up to 15 + with some work on the BIOS. + - fix nmake makefile generation (Psyon) + - improved pthread detection function from ac-archive project on SF + - add installer package for Windows, using Nullsoft (Michael Rich, Bryce) + - on MacOSX, add startup script that creates a text console and then + runs Bochs. Also add make target to create a DMG disk image (Br'fin) + - do not restart the font server on Unix/X11, if vga.pcf was already + installed. On several modern machines, if you restart the font + server the user has to restart X windows. (Bryce) + - update most .conf.* files with modern options such as + --enable-all-optimizations. (Bryce) + - The MacosX .conf script adds /sw/include and /sw/lib to the compile/link + path list because it is a common place to put dlcompat. Dlcompat is + required when building with plugins. (Bryce) + - rpms can now be built without root privileges (Bryce) + +- command line + - fixed up our command line options (Volker, Bryce, Christophe) + Usage: bochs [flags] [bochsrc options] + -n no configuration file + -f configfile specify configuration file + -q quick start (skip configuration interface) + --help display this help and exit + +- configuration file (bochsrc) + - There are several new options. See the documentation for more details. + - config_interface: select text mode menus or wxWindows for configuration + - display_library: select which display lib to use + - optromimage: load optional rom images + - ataN (N=0,1,2,3): up to 4 ATA controllers for hard disks, cdroms + - ataN-master, ataN-slave, N=0,1,2,3: defines a hard disk or cdrom. + The "ata*" options replace diskc, diskd, and cdromd, which are + now deprecated. + - floppy_bootsig_check: control the 0xaa55 signature check on boot floppies + - logprefix: lets you change the format of log messages + (patch by Carl Sopchak, help from Christophe) + - debugger_log: log all output from bochs debugger + - user_shortcut: allow you to type key combinations like Ctrl-Alt-Del + - pit: control the PIT model, including realtime option to try to + keep in sync with real time. + - Credits: Christophe added optromimage, everything about ATA, + floppy_bootsig_check, debugger_log. Bryce added config_interface + and display_library. Volker did the user_shortcut button. + Greg Alexander wrote the PIT model and added the realtime option. + - since v1.3 we've been able to use environment variables in pathnames + in the bochsrc file. Now, a few variables have default values, set at + compile time, that are used if the user does not set a value. If Bochs + is installed correctly, the defaults will be correct and the user will + not need to override them. + - $LTDL_LIBRARY_PATH is the path name where the plugins can be found. + The default value comes from $(plugdir) in the makefile. This is only + important if plugins are enabled. (Bryce) + - $BXSHARE is the path where the BIOSes and keymaps are installed. + The default value comes from $(sharedir) in the makefile. Disk + images on the Bochs website will begin to use BIOS pathnames like + $BXSHARE/BIOS-bios-latest. On win32, the $BXSHARE default is + set by the NSIS installer and read from the registry. On MacoSX, + the $BXSHARE default is set to the path containing bochs.app. + (Bryce, Volker, Br'fin) + - new option in the configuration interface to reset all bochsrc + settings to initial defaults. A reset occurs just before reading + a new configuration file, so that leftover parameters from a + previous configuration do not affect the new configuration. Also, + you can request a reset using the configuration interface. (Volker, Bryce) + - ne2k line can now specify a script to set up the interface (Christophe) + - on Unix, also search /etc/bochsrc (Bernhard Bablok) + - you can use #include in the bochsrc to read configuration from other + files (Volker) + +- CPU + - speed optimizations from Kevin Lawton, yielding around 2x speedup + - guest2host_tlb : for entries in the paging TLB which point to normal + physical memory pages, a pointer to the host address of the emulated + physical memory (from malloc()) page is stored in the TLB entry. In + many cases, this pointer can be used in memory accesses to directly + read/write the guest memory address. In exceptional cases, the physical + memory access routines are used. Turn on with --enable-guest2host-tlb. + - repeat IO/string : for some variants of repeatable IO and string + instructions, the segmentation and paging checks are done in batch along + with the data transfers, constrained within page boundaries and the + segment limits. Turn on with --enable-repeat-speedups. + - icache : The structure holding instruction decode information was + reduced to 32 bytes. 24 bytes for the actual decode data, and 4 each + for pointers to the address resolution routine (not always needed) and + the instruction emulation routine. With a reasonably small + per-instruction decode size, an instruction cache (iCache) was created, + which is simply a hash table. The main cpu loop looks in the table + first; if the instruction has already been decoded, execution can begin + immediately without decoding. Turn on with --enable-icache. + - host specific asm : when compiling on an x86 platform, use of + x86-specific asms can be enabled to accelerate several facets of + emulating instructions. For example, the EFLAGS values are much more + efficient to calculate when the actual x86 instructions are used to + generate the EFLAGS values. Turn on with --enable-host-specific-asms. + (Kevin, with help from Jas Sandys-Lumsdaine) + - if you want to enable all the speed optimizations that we believe + to be stable, use --enable-all-optimizations. The release binaries + are built with this option. + - add support for AMD's x86-64 instruction set. To enable, configure with + --enable-x86-64. The AMD x86-64 support is about 90% complete and is + still experimental. We've implemented the core x86-64 instruction set and + the changes to the rest of Bochs necessary to operate in long mode, but + we've still to implement checking for canonical 64 bit addresses. The code + has been tested on a limited number of test programs. It has been able to + successfully boot a x86-64 Linux kernel and run a 64 bit userland + application. It has also successfully run a DOS based 64 bit protected + mode test application. (Peter Tattam, with merge/bugfix help from Kevin + Lawton and Bryce Denney) + - add MMX support. To enable, configure with --enable-mmx. + (Stanislav Shwartsman) + - add SSE and SSE2 support. To enable, configure with --enable-sse=1 + or --enable-sse=2. (Stanislav) + - fixed the behaviour of the bcd instructions AAM, AAD and DAA based on + SF patch #537146 (Volker) + - stop printing an error for VERR/VERW. According to the i386 opcode + description there is no error present. (Volker) + - fix bug [ 625878 ] reset doesn't reset something(?). Fix cpu reset + when executing a rep instruction (Christophe) + - use accessors methods for CFLAGS and several other registers, so that + the implementation can be changed transparently later (Bryce, Stanislav) + - add support for page size extensions, also known as 4meg pages. + Turn on with --enable-4meg-pages. (Kevin Lawton) + - add support for page global extensions. Turn on with + --enable-global-pages. (Kevin) + - add support for physical address extensions. Turn on with --enable-pae. + (Peter Tattam) + - implement RDMSR and WRMSR. not all MSRs are supported (Zwane Mwaikambo) + - new configure option --enable-ignore-bad-msr, which makes unrecognized + MSR reads and writes into just a warning + - fix PIC/APIC interrupt problem that caused Linux 2.4.19 to hang + during boot (Peter) + - CMPXCHG8B patch (Michael Hohmuth) + - EFLAGS are now stored in the same form as the native EFLAGS on an x86, + so that we can use native machine instructions in some cases (Kevin) + - instrumentation code updated (Stanislav) + +- FPU + - fixed bug [ 452275 ] fprem emulation bug (Volker) + - fixed bug [ 648579 ] Mac OSX >>PANIC<< FPU_printall. There was an + endianness issue with the fpu (Christophe) + +- I/O devices + - rewrote pc_system timers (Kevin) + - biosdev + - this new device handles the panic/error/info/debug messages sent + by the Bios and VGABios. It was previously done in the unmapped device. + - cdrom + - implementation of the function READ TOC for cdrom image files. (Volker) + - function capacity() for win32 fixed. Now it returns the number of blocks + instead of bytes. (Volker) + - added multiple cdrom support for win32 (NT/2000 version untested). The + ASPI version uses the cdrom drives in the system's order. Drive letters + are not used by ASPI. (Volker) + - fix configure script's cdrom detection on BeOS (Bryce) + - fix physical CD change at runtime (Bryce) + - cmos + - fix panic when WinXP read port 70h (Christophe) + - add ps/2 style century at index 37 to allow WinXP to boot. (Bryce) + - dma + - DMA register and unregister functions for DMA channels added and macros + for DMA functions defined. The changes are based on the Plex86 functions. + (Volker) + - implementation of the DMA controller reset (Volker) + - the value of the command register must be always 0x00 (BX_ERROR fixed) + - floppy (Volker) + - implemented Tape Drive Register (Dave Poirier) + - added support for 360k floppy images + - the skip flag (SK) in command 'read sector' is ignored now + - floppy read and write function do not set the 'seek end' bit in status + register 0 (fixes SF bug #553377) + - the status of the 'disk changed' line depends on the selected drive. + The digital input register is now an array (DIR[4]). + - apply patch [ 635021 ] floppy cleanup by Alex Thiel + - distinguish between floppy drive type and media type + - hard drive + - add largefiles support, to allow disk images larger than 2gig. + (Stu Grossman) + - missing conditions for lower_irq() added (Volker) + - several noncritical panics replaced with BX_ERRORS and the controller + returns an error code until we implement the features (Volker) + - applied patch from Carl Sopchak for booting sco openserver + - allow disk block access only if concatenated images are not used + (Christophe) + - fix bug [ 419415 ] netbsd 1.5 rescue disk won't boot (Volker) + - multiple drq atapi data transfers corruption fixed (Christophe) + - added some commands to the unsupported "Set Feature" commands (Christophe) + - speedups in repeated IO transfers (Kevin) + - support for Peter Tattam's external disk simulator (Bryce) + - 4 channels / 8 devices support (Christophe) + - "inquiry" atapi command results corrected (Volker) + - check for incomplete devices configuration before starting the + simulation (Bryce) + - implemented the different bios disk translation schemes (Christophe) + - keyboard and mouse + - add commands 0xd2, 0xdd and 0xdf (Dave) + - fix bug [ 613975 ] wxWindows: params redefined on restart (Bryce) + - in function mouse_motion(): added parentheses to fix compilation problems + with MSVC. See SF bug #575301. (Volker) + - added missing register_irq() for the PS/2 mouse IRQ12 (Volker) + - fix "AltGr" key on European keyboards wxWindows/win32, SDL (Volker) + - NE2000 + - function reset() clears the IRQ line (Volker) + - added TUN/TAP interface (Renzo Davoli, Christophe) + - fix DOS based packet drivers that use an odd count for the NE2000 DMA (Peter) + - changed "TCR write, reserved bits set" panic into an error, fixes + networking with debian image (Bryce) + - parallel + - parport1 enable/disable support added (Volker) + - PCI (Volker) + - implementation of the PCI device register mechanism + - PCI memory handling moved to the memory code + - replaced memcpy() in pci_read() by a more portable code. Problems with + PCI on big-endian machines are fixed now (SF bug #638481). + - implementation of the PCI-to-ISA bridge started (still incomplete) + - PIC + - fixed detection of single mode and level senistive mode in ICW1 (Volker) + - fixed handling of rotate_on_autoeoi for master PIC (Volker) + - irq mask is now cleared on initialization (Dave) + - fixed lockup during mouse movements during win98 install. (patch from + Wilfried Weissmann) + - PIT + - Added realtime PIT support (Greg) + - Sound Blaster 16 + - it used to enable itself all the time; now only when you ask + - fix memory leaks (Bryce) + - serial + - don't cause problems when serial device is disabled (Volker) + - unmapped + - add programmatic shutdown feature at port 0x8900 (Christophe) + - vga + - VBE fixes (Jeroen, Volker) + - CRTC fixes (Volker) + - sequencer reset with bits 'reset1' and 'reset2' implemented (Volker) + - add charmap change support (used by SDL, win32 and wxWindows gui) (Volker) + - screen dimensions / updates for some graphics and text modes fixed (Volker) + - use the start address when calculating the byte offset for standard + EGA/VGA modes (Volker) + - byte offset for modeX fixed (use value of CRT register 0x13) (Volker) + - text mode memory mappings 0 and 1 support (Christophe) + - fix bug [ 612741 ] VBE mem conflicts w/ local APIC address (Jeroen) + - fix bug #635223: VGA tiles array access out of bounds (Bryce) + +- ROM BIOS + - improve compile process. Now bioses for 1, 2, 4 and 8 processors + are built at the same time (Bryce) + - fixes to be able to compile the bios with gcc2 or gcc3 (Jeroen and + Christophe) + - changes on boot signature check (Christophe): + - never done for cdroms + - always done for hard-disks + - conditional for floppies + - add keyboard int16 functions 0x09 (get keyboard functionality) and + 0x0a (get keyboard id) (Christophe) + - fix bug [ 629810 ] int 16/ah=01 broken? Enable interrupt on entering + int16 handler (Christophe) + - new keyboard init in POST (patch from Adam Sulmicki) + - flush input and output keyboard buffer before keyboard self test + (Volker and Christophe) + - fix bug [ 547603 ] kbd up/down arrows in dos install (Christophe) + - fix bug [ 549815 ] bios wrongly loads CS,ES. CS and ES are set to 0 + before the bootloader code is called. (Christophe) + - PCI functions support (Volker) : + - BIOS32 service directory + - real mode PCI int1a functions + - protected mode PCI int1a functions + - fix reset for MS-DOS and Win95 (Volker) + - 360K floppy support (Volker) + - enhanced ata/atapi support (Christophe) : + - 4 channels / 8 devices + - device auto detection (with help from Adam Sulmicki) + - EDD3.0 + - 32bits device access + - optional disk translation "large", "r-echs" or "lba" (up to 8.4GiB) + - re-enable harddisk controller interrupt after reads/writes. + Win95 can now use native access to harddisks and cdroms. (Volker) + - shutdown status handling (cmos index 0x0f) (Christophe) : + - fix bug [ 601166 ] CMOS Problem @ "0x0F Index 0x05 data". After reset + execution will resume by a jump to [0x40:0x67] if the shutdown status + is 5 + - the bios don't panic any more if the shutdown status is 9 + - two parallel ports detection in POST (Volker) + - two serial ports detection in POST (Volker) + - add int15 extended memory function 0xe820 (patch from osmaker) and + 0xe801 (patch from Hartmut Birr) + - fix return values on some int15 functions (Bryce) + - fix int70 handler overlapping int08 handler (Christophe) + - simplify 8 processors BIOS for operating systems which don't do + paranoia/sanity checks (Zwane) + +- configuration interface + - wxWindows config interface now allows you to change every bochsrc + option using menus and dialog boxes. There is also the beginning of + a wxWindows graphical debugger, but it needs a lot of work before it + will be useful. + - renamed control.cc to textconfig.cc. Now we're calling it a + text configuration interface, instead of a control panel. + +- display libraries + - Even though we've had them for years, the term "display library" is new in + release 2.0. In the gui directory, Bochs has a number of different C++ + files which you can select to display the text and graphics on the + simulated monitor. Each of these is a display library. The display + libraries are: + x use X windows interface, cross platform + win32 use native win32 libraries + carbon use Carbon library (for MacOS X) + beos use native BeOS libraries + macintosh use MacOS pre-10 + amigaos use native AmigaOS libraries + sdl use SDL library, cross platform + svga use SVGALIB library for Linux, allows graphics without X + term text only, uses curses/ncurses library, cross platform + rfb provides an interface to AT&T's VNC viewer, cross platform + wx use wxWindows library, cross platform + nogui no display at all + - it is now possible to compile Bochs with support for many different + display libraries and select the one to use at runtime (even without + plugins). See the display_library directive in .bochsrc. + - add new svgalib display library by Igor Popik + - fix bug [ 614724 ] SDL can get stuck in full screen mode + display libraries such as SDL which have a full screen mode can be + dangerous, if Bochs does not switch back to normal display mode at + the right time. This is fixed for SDL and the new svga. + - keymap support added in SDL interface (Bryce, Volker) + - new keymap files: SDL keymaps for US and DE keyboards, X11 keymap + for Danish keyboard. + - use keyboard mapping for keyup messages too + - renamed almost all references to data type "Boolean" to "bx_bool". + The Boolean data type was defined in Carbon.h headers, and conflicted + with Bochs's definition. See bug [ 618388 ] Unable to boot under MacOS X + Exceptions: When talking to the Carbon library, you must use Boolean. + Also, siminterface.h uses standard "bool" instead of bx_bool. + - "User" button added in toolbar. It can send keyboard shortcuts to + the guest OS. (Volker) + - snapshot improvement and memory leak fixed (Volker) + - testing framework, based on comparing screen content, added (Greg) + - term display library: + - support for color terminal, function keys, clear screen (Volker) + - solaris compilation problem (bug #613393) fixed (Bryce) + - win32 display library: + - use native win32 toolbar for headerbar, use system palette (Volker) + - many Carbon interface improvements: + - patch [ 549248 ] Fix Carbon key & menu handling (Chris Thomas) + - partial keymap support, copy&paste, menu items fixed, new toolbar + behavior, dialog box display for panics (Br'fin) + - sdl display library: + - keyboard fixes and key mapping added (Bryce) + - when captured, the mouse is forced to stay in the window. fix bug + [ 619283 ] SDL: os mouse pointer leaves the window (Bryce) + - x display library: + - bug [ #537593 ] vga font not being found fixed. If vga font not + found, search for a font called "-*-vga-*" (Bryce) + - keyboard problems fixed (Bryce, Christophe) + - beos platform, any display library: add a nice icon to the executable + (Bernd Korz) + +- wxWindows + - wxWindows is a cross-platform C++ user interface library which you can + download for free at http://wxwindows.org. wxWindows provides C++ + classes for all sorts of GUI controls (buttons, menubars, etc.) and + implements all of them using the native controls on the platform. + - The new wxWindows port of Bochs provides both a graphical configuration + interface (for editing bochsrc options) and a display. It was + written by Bryce Denney, Don Becker, Dave Poirier, and Volker Ruppert. + - In release 2.0, we concentrated on making the wxWindows port as stable + and functional as the other interfaces. wxWindows provides a great + toolbox that we can use to make Bochs easier to learn and use. + - wxWindows supports charmap changes, keyboard mapping, cut and paste, + text and graphics modes, text mode cursor size, and mouse (Volker, Bryce) + - To compile Bochs with wxWindows, you should install wxWindows 2.3.3 + or later. Then configure Bochs with --with-wx. + - if you have multiple versions of wxWindows installed (e.g. a debug + and a release version), you can set $WX_CONFIG before configuring + to select between them. (Bryce) + +- Bochs debugger + - [ 609616 ] remote GDB stub + add GDB Stub support from Johan Rydberg, with bug fixes by Stu Grossman + - add hooks for external debugger for win32. The external debugger + that connects to Bochs is distributed in + build/win32/tattam-external-debugger.zip in binary form. Turn on + with --enable-external-debugger. (Peter) + - add "debugger_log" option to bochsrc, which logs all debug output + into a file. feature [ 629068 ] (Christophe) + - debugger is now usable in fullscreen SDL and SVGA guis. It will + switch back to text mode for each debug prompt (Bryce) + - disassembly output cleaned up and improved + (Kernel Panic, Peter Tattam, Jonathan Shapiro, Luiz Henrique Shigunov) + - fix [ 628806 ] debug: x/c prints unprintable chars (Bryce) + - add the beginnings of a wxWindows debugger. Not ready for mainstream use + yet. CPU register display is implemented, and you can type any debugger + command you want into the Debug Console window. (Bryce) + - add help command (Alexander Krisak) + - symbol table lookups cleaned up a bit (Bryce) + - displays the address of the caught watchpoint, feature #435271 (Dave) + - remove obsolete "loader" + +- utilities + - fixed bug [ 487758 ] bximage fails on file creation >2048meg + Bximage should now work up to 32gig. (Bryce) + - on win32, both bximage and niclist now ask the user to press + return before exiting, so that you have time to read the results + before the window disappears. (Bryce) + +------------------------------------------------------------------------- +Changes in 1.4.1 (June 22, 2002): + +- now cdrom is enabled in configure, unless you specifically disable + it with --disable-cdrom. (Christophe) +- fix compile error in main.cc when SMP or APIC is enabled (Dave) +- the runtime menu now displays 11 (continue) by default (Bryce) +- initialize DMA controller before floppy and SB16 +- fix DMA panic when installing win95 (Volker) +- first character of the vga bitmap is blank on win32 (Volker) + Before, it was incorrectly coded as a '@'. +- AltGr key on European keyboards works now on win32 (Volker) +- fix problem with console/serial port on Bochs exit (Volker) +- enable serial port for GNU and GNU/Linux (Volker) +- small documentation fixes (Volker) +- remove unnecessary include statements for X11 (Volker) +- italian keymap added (Emanuele Goldoni) +- fix win32 ethernet frames error. It will no longer reject packets + that are less than 60 bytes long. (Peter Tattam) +- BIOS fixes : + - win2k cd-boot (Christophe) + - emm386 crash (Dave) + - cs=0 at boot time (Christophe) + - keyboard failure in scandisk (Dave) +- fix bug in forming the 64-bit APIC base address from two 32-bit registers. + A compiler warning in cpu/proc_ctrl.cc pointed this out. +- fix default choice in the runtime options menu + +------------------------------------------------------------------------- +Changes in 1.4 (March 27, 2002): +- ROM BIOS + - Boot from CDROM! Christophe Bothamy added partial El Torito support in + rombios.c, which allows Bochs to boot cdroms. Booting from win2k or winXP + cdrom is not supported yet. The default BIOS includes El Torito functions. + the boot line must say "cdrom". + Example: + boot: cdrom + - implementation of int13 diskette function 5 (format track) (Volker) + - initialisation of PIC and DMA-2 added to POST code (Volker) +- configure script (Bryce Denney) + - the configure script now detects your platform and provides a default + GUI and the required compiler flags. All supported platforms should + compile with simply "configure" and "make". + - default guis by platform: + - win32/windows/cygwin: win32 gui + - MacOS X: carbon gui + - MacOS 9 or earlier: macos gui + - BeOS: beos gui + - AmigaOS: amigaos gui + - all other platforms: X windows gui + - compile arguments supplied by configure script + - win32: too many to list here; see documentation + - cygwin: -mno-cygwin -DWIN32 + - MacOS X: -fpascal-strings -fno-common -arch ppc -Wno-four-char-constants + -Wno-unknown-pragmas -Dmacintosh + - the --with-GUINAME configure option is only needed if you want to override + the default GUI. This is the only way to use the Term, RFB, and SDL + GUIs. +- VGA + - added VESA BIOS Extensions code by Jeroen Janssen (banked mode only, LFB + support in patches) + - vga memory read/write functions in text mode fixed + - implementation of CGA mode 320*200*4 (patch from Sebastien Bechet) +- VGA BIOS + - updated Christophe Bothamy's LGPL VGA BIOS to version 0.3a. This consists + of a bug fix for function ah=13 and VBE support by Jeroen Janssen. +- networking + - chipmem read/write limit fixed (Mike Lerwill) + - writing a byte in 16-bit mode now possible (Mike Lerwill) + - new ethertap interface for Linux, which allows Bochs to talk to + the local machine and the internet (Bryce Denney) + - NE2000 is now enabled by default on Win32, Cygwin, and Linux compiles + in the .conf.* scripts and release binaries. + - fix check for auto transmit disable, which was checking the wrong bit + (Peter Tattam) + - Win32 only + - niclist.exe has been revised to work on more Windows versions, and it + suggests a usable ne2k line (Dean Payne) + - fix timeout setting so that ne2000 does not slow down the whole + simulation (Don Becker) + - bug fix: be able to handle multiple packets that arrive at once + (Mike Lerwill) +- GUI changes + - cdrom button: click this to notify Bochs when you changed the CDROM (Volker) + - snapshot button: saves the text on the Bochs screen into a file called + snapshot.txt (Volker) + - copy button: on Win32 and X windows, copy the text on the Bochs screen + to the clipboard (Volker) + - paste button: on Win32 and X windows, paste the characters on the + clipboard into the Bochs window. This requires keyboard_mapping to + be enabled. (Bryce Denney) + - improved text mode cursor for Win32, X11, and SDL (Volker) + - new SDL interface (Dave Poirier, debugging by Christophe, Volker, Bryce) + SDL is a graphics library that has works on many platforms. This interface + is experimental, and is missing a few features of the standard Bochs + interfaces: extended keys (arrows, keypad). + - MacOS X: add MacOS X carbonized event handlers by Jeremy Parsons + - X windows: when not enough colors can be allocated, force use of + private colormap (Bryce Denney) + - bug #490570 fixed: OUTB set and command 0xaa encountered (Dave Poirier) +- keyboard + - completed keyboard emulation with the implementation of the three scancodes + sets (mf1, mf2, mf3) with or without translation. This is based on Ludovic + Lange's plex86 keyboard patch. (Christophe Bothamy) + - added a "keyboard_type" option, that defines the answer to an "identify + keybord" request to the keyboard controller. The available values are + "xt","at","mf". (Christophe Bothamy) + - added an optional keyboard_mapping option that enables to use your + country specific keyboard with Bochs. If enabled, the keymap file must be + specified in bochsrc. The available keymaps are US, German, Spanish and + French for PCs running X11. Contributions are welcomed. (Christophe + Bothamy) + - added Windows(tm) key definitions (Volker Ruppert) + - added paste button, which causes the emulated keyboard to type characters + from the system clipboard. This only works when keyboard_mapping is + enabled. (Bryce Denney) +- cdrom + - bug fix: win32 could not read a cdrom image file + - eject cd support for linux (patch from Petr Stehlik) + - BeOS fixes + - changing cdrom media is possible now with CDROM button +- sound blaster(tm) emulation (Volker) + - you can use --enable-sb16=freebsd now + - 16-bit DMA controller added + - 16-bit mode of the SB16 implemented (output to file works) +- floppy drive (Volker Ruppert) + - implementation of the floppy command 'format track' + - implementation of read / write operations with MT=0 + - behaviour of a few floppy commands fixed + - floppy reset behaviour fixed + - lots of other fixes +- fixed bug [ #468340 ] pic:slave: OCW3 not implemented. Now the slave PIC + supports all the modes that the master PIC does, and nobody will see this + message again. +- serial port (by Volker Ruppert unless noted) + - improved IRQ handling + - now Windows 95 serial driver works correctly + - fixed the return value of the MCR (loopback bit) + - interrupt reasons LSR change and MSR change implemented + - the number of data bits is considered when sending data + - all serial port changes are tested in loopback mode only + - serial port emulation fixed for FreeBSD and OpenBSD (Stu Grossman) + - fix receiver poll frequency so that it doesn't slow emulation (Stu Grossman) +- Bochs debugger + - when tracing, print the instruction just before it is executed, instead + of just after (Greg Alexander) + - after a triple-fault panic, you can now return to the debugger +- symmetric multiprocessor (SMP) simulation + - no more panic if you read the EOI register + - fixed default destination format in local APIC + - fix SMP instruction tracing in bochs debugger + - fix deadlock when debugger enabled and all processors HLT + - MSR support added by Zwane Mwaikambo +- simulation of interrupts is more accurate (Volker) + - implemented edge triggered interrupt mode + - added functions raise_irq() and lower_irq() +- programmable interrupt timer (Greg Alexander) + - fixed the PIT gate and improved the PIT printing options + - experimental real-time PIT +- parallel port improvements (Volker Ruppert) +- bug fix: hard disk errors caused by overflowing imul in the BIOS code. + Sebastian Bechet and Peter Tattam tracked it down and fixed it. +- fix some memory leaks (patch from Darko Tominac) +- Double-Word IO is supported for ATA devices +- fix bash-specific syntax in install-x11-fonts script +- print stack_return_from_v86 error only the first 100 times + +------------------------------------------------------------------------- +Changes in 1.3 (December 10, 2001): +- networking works on Windows and Linux platforms +- emulated cdrom can now read from ISO image files, on any platform. +- new PIT model by Greg Alexander which is much more complete than the + old one. The new PIT is used by default, but you can switch back to + the old one if you configure with --disable-new-pit. + (PIT = 8254 programmable interrupt timer) +- new configuration menus by Bryce Denney, which allow you to change any + bochsrc option using text menus, then save the configuration into + a new bochsrc file for later use. You can disable the new code using + configure --disable-control-panel. Also you can use the command + line arguments -nocp or -nocontrolpanel. Also, there is a new + "Config" button on the GUI that allows limited changes to the + configuration at runtime, such as changing the floppy disk. +- add docbook documentation directory in the sources under doc/docbook. + The transition from HTML to docbook documentation is still in progress. +- Add new log action "ask", as shown in these example bochsrc lines: + panic: action=ask + error: action=ask + When an event occurs which is set to "ask", you get a beep and message + on the text terminal that asks what you want to do. Choices are: continue, + continue and disable future messages from this device, quit immediately, + or segfault (where abort() function is available). If compiled with + --enable-debugger, you can also choose to enter the debugger. +- Parallel port emulation cleaned up by Volker Ruppert. See .bochsrc for + syntax of new parport1 line in bochsrc. +- PCI support improved by Volker Ruppert, including BIOS changes. Still + not complete. +- floppy controller returns a proper error response if you try to write + a read-only disk image. For systems such as DOS that actually use the BIOS + services, it was also necessary to add code in int13_diskette_function to + recognize a write-protected error and return the correct error status code + (AH=3, Carry Set). +- the ROM BIOS now prints panic messages to the console. Thanks to Cliff + Hones for his console display code. +- the ROM BIOS detects nonbootable disks (Barry Allard), and prints a message + on the console. Barry Allard's patch who helped with checking the boot + signature. +- LBA support added for hard disks. (Not tested very much.) +- add dependencies to makefiles +- logging code moved into a separate file, logio.cc +- new option --enable-slowdown-timer, by Greg Alexander, which kicks in if + Bochs simulation time starts to run faster than real time. This helps to + keep the Bochs clock in sync with the real clock when the CPU is mostly + idle. +- new option --enable-iodebug, by Dave Poirier, which creates an I/O + interface to the debugger. This lets you write software to be emulated + in Bochs which can turn on instruction, register, or memory tracing + using I/O accesses. +- improved detection of readline in configure script +- configure substitutes the version number into many files, instead of + using sed in the makefile. There are still a few uses of sed remaining. +- you can now use environment variables in bochsrc values. For example, + diskd: file="$BOCHS_IMG/diskd.img", cyl=615, heads=6, spt=17 +- configure with --prefix=PATH works now +- running configure from a different directory works now, thanks to + a patch from Edouard G. Parmelan +- fix [ #433759 ] virtual address checks can overflow. + > Bochs has been crashing in some cases when you try to access data which + > overlaps the segment limit, when the segment limit is near the 32-bit + > boundary. The example that came up a few times is reading/writing 4 bytes + > starting at 0xffffffff when the segment limit was 0xffffffff. The + > condition used to compare offset+length-1 with the limit, but + > offset+length-1 was overflowing so the comparison went wrong. +- cmpxchg8b patch from Michael Hohmuth +- apply patch from Thomas Fitzsimmons to fix compile + problems when BX_SUPPORT_PAGING and BX_USE_TLB are turned off +- fix bug introduced in 1.2.1 which caused spurious exceptions. + See patch #439314, Exception 1 (debug) on HALT, from + thomas.petazzoni@meridon.com. +- add panic in ctrl_xfer32.cc where the IRET32 implementation is broken. + This only happens if you are NOT in vm8086 mode or protected mode. + The intent is to warn people when they are getting bad emulation, and + encourage people to report how they got to that point. +- apply patch from Santiago Bazerque. See this bug report: + [ #463018 ] retf not removing parameters sometimes +- fix bug [ #461730 ] IRETD causes problems if NT-flag is set + reported by Peter Lammich. +- apply patch [ #455014 ] CR0 bug in 80486, described as: + > In the register CR0, when the bit PM is enabled, the bit 4 is 0 + > when should be 1. +- apply patch from Mike Rieker associated with this bug + report: [ #480422 ] gdt 'accessed' bit +- in task_switch when it tried to ensure that the old TSS was paged in, + it actually used the new TSS address, fixed. +- updated the instrumentation code, and added a working example. To try + it, configure --enable-instrumentation=instrument/example1. Then when + you run bochs, you will get one line for each instruction PC and for + each I/O access in a new file called bxevent.txt. +- set a bit in the CMOS that says the processor has an FPU. This is + from patch [ #455006 ] Device byte is not initialized aptly. + Author did not leave their name. +- add logging code to the "null ethernet" which does not require host OS + support. All this does is print the outgoing packets from the guest OS. +- cleanup of log functions (Todd Fries) +- add BX_ERROR for every command in ATAPI-6 that bochs does not support. + I still need to do add some commands from older specs that are obsolete + (and not listed) in ATAPI-6. Commands that aren't in the spec will still + panic. +- only put 0xf into the 2nd hard disk field when the cdrom is not present. + This is a patch from Volker Ruppert , who + comments: "The fdisk command reports an unusable second harddisk if the cdrom + is enabled. This patch helps, but I don't know if it is the right way." +- make hard disk code return error codes when data is not available instead + of just panicing. In particular, if the logical sector is out of bounds + or the disk image cannot be read/written at the desired offset, we now + abort the ATA command and return an error code. Many of the old BX_PANIC + messages are turned to BX_ERROR, so they will still appear in the + log, but now the device model will try to communicate this fact to + the OS instead of simply giving up. +- don't blindly reject odd length atapi commands. There are cases when + it's really ok according to ATA-4. +- for big endian machines, reversed the bit fields in interrupt_reason. + This was pointed out by Nicholai Benalal. +- extended keyboard improvements by Dave Poirier +- major mouse patch from Dave Spring, that implements several missing + mouse modes. +- commit keyboard patch from David Haslam + posted to mailing list, that addresses the problem of each key press + printing ^@. See cvs log for details. +- mouse performance fixes by Greg Alexander and Robb Main +- NE2000 fixes by Frode Vatvedt Fjeld, ecelca@yahoo.com, Greg Alexander, + and angelos@openbsd.org. +- fix bug [ #468340 ] pic:slave: OCW3 not implemented. Some event handling + code appeared in the master pic but not the slave pic. +- fix compile problems in SB16 code, related to fpos_t being treated as + an integer. +- patch from Volker Ruppert to fix + midi output file so that winamp can play it. +- some cleanup of serial code by Todd Fries and Volker Ruppert, but it + doesn't work yet. + +X Windows specific: +- commit patch from David Haslam + [ #455763 ] Cursor trail with DOS Edit/Minix vi +- error for missing fonts now points to the documentation +- new option --enable-idle-hack, by Roland Mainz, which makes Bochs more + friendly toward other processes when its CPU is idle. Presently, + this option is specific to X windows. + +Win32 specific: +- now Windows 95/98/ME can read the physical cdrom (Don Becker) +- The default configuration for Win32 VC++, given in .conf.win32-vcpp, + now enables the NE2000 and renames all .cc files to .cpp. This keeps VC++ + happy but may make it hard to use CVS. +- The default configuration for Cygwin, given in .conf.win32-cygwin, now + enables cdrom and SB16. +- See "new docs" on the web site for compile instructions for VC++ and Cygwin. +- The sources include a VC++ workspace, in addition to the old "nmake" + makefile. +- ethernet support (emulated NE2000 card), coded by Don Becker. This + implementation requires a library called WinPCap, which you can + download from http://netgroup-serv.polito.it/winpcap. +- new utility called niclist.exe which lists the ID number of all your network + cards (well probably you just have one). The ID be used when setting up your + .bochsrc. +- patch [ #466403 ] make text colors more accurate. The author did not leave + his/her name. +- fix GUI bug [ #452159 ] win32: mouse stuck if bochs win partly off screen + Now we center the mouse periodically, whether or not the mouse has + wandered outside of the window or not. +- event handler recognizes the extended keycode flag +- fixes for raw floppy and floppy disk images (Don Becker) + +Linux specific: +- Ethernet (emulated NE2000 card) now works in Linux! Contributed by + splite@purdue.edu. This has been tested using host OS kernel 2.2.14, and + works with telnet, ftp, irc, lynx, etc. Because it is a packet filter + solution, you aren't able to talk to the host machine, only to other + machines on the network. +- The default configuration for Linux, given in .conf.linux, now enables + the NE2000 model. +- RPM build process configures with --prefix=/usr so that everything is + installed in /usr/bochs instead of /usr/local/bochs. +- DLX Linux disk image is now installed so that only root can write it, to + avoid security problems. When you run the bochs-dlx script, it creates a + local copy in your home directory and then runs it. +- code that determines the capacity of a cdrom now works for both ATAPI + and SCSI drives (splite@purdue.edu) +- applied patch from bochs@sigint.cs.purdue.edu. The comments are: + > The Linux 2.4.5 CD-ROM driver sends a READ_DISC_INFO command which caused + > an "unrecognized ATAPI command" panic. Looks like READ_DISC_INFO is only + > recognized by CD-R and CD-RW drives, so I ignore it for now. + +Amiga MorphOS specific: +- Bochs now compiles and works on Amiga MorphOS. Configure with + --with-amigaos. For AmigaOS only, see .bochsrc for use of fullscreeen and + screenmode options. The Amiga MorphsOS is written and maintained by + Nicholai Benalal . +- raw cdrom supported if you configure with --enable-cdrom + +BeOS specific: +- Bochs compiles and works on BeOS. Configure with --with-beos. + Bernd Thorsten Korz maintains the BeOS port. +- raw cdrom supported if you configure with --enable-cdrom + +MacOS X specific: +- Bochs now compiles and works on MacOS X. Configure with --with-carbon. + Emmanuel Mailliard ported the Macintosh code to the + Carbon API. +- The MacOS X application is built using (gasp) mkdir, copy, and rez. + Surely this is not the right way, but it works. +- raw cdrom supported if you configure with --enable-cdrom + +RFB mode: +- apply patch.rfb-mouse by MURANAKA Masaki (monaka@users.sf.net) + see this source forge bug [ #457968 ] Strange mouse motion on RFB +- add a retry loop in RFB code, so that if port 5900 is not available + it can try 5901, etc. + +Bochs Debugger: +- do a vga update whenever you print a debugger prompt. +- added debugger command "info fpu" that prints the FPU registers. If you + do "info all" you get cpu and fpu registers. +- added debugger command "info ne2k" which prints all the registers + of the NE2000 model +- add ability to do register tracing and flag tracing (Dave Poirier). + Try the trace-reg-on and trace-reg-off commands. +- instruction trace now includes time ticks +- fixed problems in which bochs compiled with debugger measured time + differently from bochs compiled without debugger. Also when instruction + trace was enabled, breakpoints and control-C did not work. Also, + breakpoints at the beginning of an interrupt handler did not work. + +------------------------------------------------------------------------- +Changes in 1.2.1 (June 12, 2001): +- more work on makefile for building RPMs +- [ #432382 ] build debian packages patch + add build/debian directory from Rob Lemley + which allows us to make Debian packages! +- optimize for speed when simulating one processor. Now 1-processor + performance should be equivalent to 1.1.2. +- [ #425640 ] sb16 assumes fpos_t is long int + This fixes compiles of iodev/sb16.cc on linux systems with newer libraries + in which fpos_t is not an integer. +- [ #432488 ] SMP:assert "n_logfn < MAX_LOGFNS" fails + increase MAX_LOGFNS since we ran out of them on an SMP simulation with + 4 processors +- changes to compile clean on cygwin: + - don't use the WIN32 snprintf define for cygwin + - add ssize_t definition for cygwin + - only compile "struct timeval tval" if select is available + on that platform. +- [ #432491 ] SMP: CPUID says no APIC feature + clean up inconsistent use of BX_SUPPORT_APIC and BX_APIC_SUPPORT, which + caused the CPUID to report no APIC was present +- [ #431025 ] --enable-external-device-models broken + removed configure options for external-device-models and + external-cpu-memory. These don't work and aren't going to be fixed. +- [ #429448 ] configure: -lreadline when not there + Now configure allows you to choose not to use readline, even if it's found + on your system. +- [ #428915 ] apply extended keyboard patch + extended keyboard patch by Dave Poirier +- [ #428626 ] if no X11 found, configure&make fails + Now configure halts if X windows is selected but no X libraries are found. +- updated rombios to version 1.13. This fixes several problems: + - [ #430472 ] DOS HIMEM "A20 line" error + This problem was apparantly caused when Bryce added a function that prints + the BIOS version, and he called it too early in the boot process. Now the + same function is called later, and it doesn't break the A20. + - [ #431010 ] SMP structure overwritten in v1.2 + SMP structures were getting overwritten by BCC-generated data, + preventing SMP operating systems from detecting that other processors + were available. + - [ #431016 ] bios: SMP struct has wrong entry count + SMP structure had the wrong entry counts +- very minor doc updates (typos, replace broken link to mtools info) +- quit when the user clicks the power button, even if they have disabled + panics. +- win32 now defaults to having mouse capture mode turned off. For new users, + it would be distressing for their mouse cursor to disappear until they + pressed F12. +- [ #428222 ] vga font not installed + added script called "install-x11-fonts" which should help people install + the VGA font on X windows systems, if it isn't already there. + +------------------------------------------------------------------------- +Changes in 1.2 (June 3, 2001): +- [ #427259 ] rombios HALT calls don't print + Fixed bios/rombios.c HALT macro so that it writes the line number of the + panic to the PANIC_PORT (port 0x400) and then does NOT do a halt + instruction. Also changed iodev/unmapped.cc so that the line number written + to PANIC_PORT is displayed as a BX_PANIC message. Because the HALT + macro now triggers the normal panic behavior, it can be controlled by + the bochsrc. +- [ #429016 ] crash if no hard drive + rombios used to call HALT macro if no hard drive was found. Now it only + calls HALT if a hard drive has an illegal geometry. +- [ #425388 ] include source for simple disk img tool + [ #428478 ] mkimg tool creates image 1 byte too big + Added bximage tool, which makes empty floppy and hard disk images. + It is now included in the top level Makefile, so it will get built + by default on all platforms. +- [ #426036 ] eth_fbsd.cc compile problem on solaris26 + added configure test so that "configure --enable-ne2000" only + includes the Berkeley Packet Filter code (eth_fbsd) if the header + file can be found. If you don't have BPF the ne2000 + will not actually move packets, but at least it will compile clean now. +- [ #428214 ] 1.2.pre1 need documentation for binaries + Write windows and linux specific documentation to be installed in + binary releases. +- [ #429258 ] disable RESET for version 1.2 + Since soft reset was not completely working, I reverted the reset patch. + Now it does panics on reset instead of trying to reboot, as the old + bochs versions did. +- [ #428222 ] Should the linux RPM install vga font? + now font/vga.pcf will be installed in the RPM package +- [ #429020 ] stop renaming the BIOS!!! + new BIOS changes are now in BIOS-bochs-latest, instead of a BIOS + whose name changes every time we change anything! To help distinguish + different BIOS versions, the BIOS now prints its RCS Id into the + log file. +- [ #428625 ] compile problem if SHOW_IPS is on + removed extra paren that broke SHOW_IPS +- [ #428219 ] PCI doesn't compile with SMF=1 +- [ #429375 ] pthreads detection broken +- [ #429073 ] configure: if no X11, makes bad config +- [ #429229 ] install current .bochsrc in binary rels +- install Tim's man pages on linux RPM +- BIOS prints messages in log in case of boot failure +- rewrote instructions for compiling in win32 (win32.txt) +- fixed link in HTML changelog.html to point to the real sources on SF. +- added missing LOG_THIS definition to gui/nogui.cc and gui/rfb.cc +- added additional check for null pointer in debugger exit routine +- added diskd to .bochsrc + +------------------------------------------------------------------------- +Changes in version 1.2-pre1 (May 25, 2001): +- major cleanup of .bochsrc +- major cleanup of stderr output: prints bochs version information when + starting, and at the end it tries to print the message that caused + bochs to quit. +- two hard disk support (diskd). At present, you cannot have two + hard drives and a cdrom at the same time, because there is only + one IDE controller with two channels. +- split hard disk support allows different partitions to be stored in + different image files +- two new GUI choices: term mode and RFB mode. Term is a text-only + interface, and RFB creates a server that can be accessed using + the AT&T VNC viewer. +- now Bochs can simulate an SMP machine, if you configure with + --enable-processors=N. Configuring more than one processor has + a major performance impact, so the default is 1 processor. + See SMP documentation for more details. +- to make SMP work, bx_mem and bx_cpu have been replaced with + bx_mem_array[] and bx_cpu_array[]. The cpus are referenced through + the BX_CPU(n) macro and memories through the BX_MEM(n). Normal + mode has one cpu and one memory, SMP mode has multiple cpu's and + one memory, cosimulation mode has multiple cpus and multiple memories. +- use --enable-cpu-level=6 to make Bochs claim to be a Pentium Pro. + The only feature that requires CPU level 6 is apic support. +- new logging system by Todd Fries, which has 4 levels of event + severity (panic, error, info, debug). There are new .bochsrc + options that control what action to take when a + panic/error/info/debug event occurs. +- now searches for .bochsrc, bochsrc, bochsrc.txt, and (on unix only) + $HOME/.bochsrc. +- use GNU readline library if --enable-debugger is on, as long as readline + can be found on the machine +- configure checks for existence strtoull and strtouq. if neither exists, + Bochs uses its own implementation +- applied patches from Cliff Hones to fix up the + rombios. This includes many improvements, which you can list by + doing "cvs log -r 1.6 bios/rombios.c" or looking at cvsweb. +- added suggested geometries of larger disks to the documentation +- this is the first release to have official binary packages for win32 + and Linux. There is a new "make rpm" in the top-level Makefile which + will create an RPM of the current bochs directory. To use this, + become root and type "configure; make rpm". +- applied some FreeBSD patches from Maxim Sobolev (cdrom and serial). + +------------------------------------------------------------------------- +Changes in version 1.1.2 (bugfix3, May 16, 2001): +- updated Elpin VGA BIOS to version 2.40, and changed pointer in .bochsrc +- fixed .conf.x86 script so that it uses c++ instead of egcs for C++ files +- now Makefile targets that recurse into subdirectories use double colons, + so that it will always recurse into subdirectories. Now a single make + command should notice a modified source file in a subdir. +- fixed bug in bx_panic. If BX_PANIC_IS_FATAL==0 and a (non-fatal) panic + occurs, it used to call bx_atexit() and then return. It should never + call bx_atexit, which starts to shut down the simulator, unless it's + really going to quit! +- support 2.88 MB floppy disks +- since dataseghack is checked in as non-executable, invoke it with + "csh dataseghack" +- double fault patch from Thomas Petazzoni , + sourceforge patch #423726. +- removed -fno-builtin from fpu makefiles +- redefine u_char, u_short, etc. in order to not conflict with system + definitions of these same types. +- in cdrom.cc, remove the extern "C" { } structure around some of the + header files. This is no longer necessary. +- do not panic on hard disk command 0x1f2 (read sector count) +- in keyboard.cc: + - apply Todd Fries' reset patch + - recognize most of the "Grey" insert/delete/home/end/etc. keys the + same as keypad keys. + - removed panic on "kbd_ctrl_to_kbd(): got value of 0x??" + - implement mouse command 0xf6 (set defaults) +- apply Suboner@aol.com's Xwindows timing patch from + http://sourceforge.net/tracker/index.php?func=detail&aid=418730&group_id=12580&atid=312580 +- remove all patches from patches subdir which have already been applied. + The remaining ones are under consideration but not applied. + +------------------------------------------------------------------------- +Changes in version 1.1.1 (bugfix2, April 9, 2001): +- in soundwin.cc, arg 3 should be typecast to LPWAVEFORMATEX +- in fpu_entry.c, Bryce mistyped his own initials! +- in configure.in and configure, define good defaults for VC++ + #define BX_64BIT_CONSTANTS_USE_LL 0 + #define inline __inline + #define BX_NO_EMPTY_STRUCTS 1 + #define BX_NO_ATTRIBUTES 1 + #define BX_HAVE_HASH_MAP 0 +- in config.h.in, fixed typo in #error message + +------------------------------------------------------------------------- +Changes in version 1.1 (bugfix1, April 6, 2001): + +(FIXED, patch #414360: update copyrights) +update headers. Change copyright to 2001, replace config.h.in header with +the standard mandrake header that every other file uses. + +(FIXED, patch #414356: inlines) +make macro to replace inline and static/extern keywords. Then make +define the macro appropriately based on configure. + +(FIXED: patch #414234: macos-no-strdup) +--with-macos should force HAVE_STRDUP=0. + +(FIXED, patch #403027: Fix mouse bugs in Linux and BSD) +Linux and BSD (maybe others) cause panic in mouse code. + +(FIXED, patch #413851: const64bit patch) +VC++ does not allow "LL" after 64-bit constant. + +(FIXED, patch #413859: fabs symbol conflict) +fpu code contains fabs, which conflicts with math library fabs. + +(FIXED, patch #403004: Implement aborts on a few SET FEATURE commands...) +Implement aborts on a few SET FEATURE commands for ATA. + +(FIXED, patch #402991: Update to iodev/vga.cc to add 3c3h read support) +Implement VGA enable register, at 0x3c3. + +(FIXED, patch #403027: Fix mouse bugs in Linux and BSD) +Mouse panic in linux/BSD: +KBD: io write 0x64: command = 0xD3(write mouse outb) + +(FIXED, patch #414229: panic-is-fatal) +Allow user to decide if panic is fatal, or just a warning + +(FIXED, patch #414230: sun-cdrom) +Support Sun CDROM + +(FIXED, patch #413574: portable1) +there are cases where a pointer is cast to a 32-bit int, +then later cast to a pointer and dereferenced, which crashes any 64-bit +machine. + +(FIXED, patch #413574: portable1) +some machines have no snprintf or strtoull. include a replacement function +when needed. + +(FIXED, patch #413574: portable1) +Some compilers don't allow "typedef struct { } foo;" + +(FIXED, patch #413574: portable1) +Some people don't have hash_map.h, used in dbg_main.cc. Disable this code +if hash_map.h not found. + +(FIXED, patch #413574: portable1) +Some compilers can't handle labels at the end of a block, as in + void main () { /*code*/ label: } + +(FIXED, patch #413574: portable1) +Most compilers can't handle __attribute__. Use macro to define it away. + +(FIXED, patch #413574: portable1) +if --enable-debugger, turn on --enable-disasm too. + +(FIXED, patch #413574: portable1) +ome compilers can't handle any chars after an #endif + +(FIXED, patch #413574: portable1) +wrong type arg1 of bx_dbg_watch and bx_dbg_unwatch. The code in +lexer.l was calling it with integers (not booleans) + +(FIXED, patch #413574: portable1) +in fpu code, "setcc" macro was implemented with braces inside parens, +which some compilers don't understand. + +(FIXED, patch #413574: portable1) +in fpu_entry.c, FPU_load_int32 was consistently called with arg1 of +type (s32 *), but should be (u32 *) + +(FIXED, patch #413574: portable1) +comment out sigcontext structure in fpu/stubs/asm/sigcontext.h because +it conflicted with sigcontext of other machines. This struct was never +used by bochs anyway. + +(FIXED, patch #414046: portable2) +move definition of missing library functions into osdep.h and osdep.cc, +include contents of macutils*. + +(FIXED, patch #414061: win32-rawcd) +CDROM drive letter for WIN32 should not be hardcoded. + +(FIXED, patch #414060: win32-rawfloppy) +Bypass fstat when opening WIN32 raw floppy disk. + +(FIXED, patch #414226: pit-panic) +WinME install dies with panic: +bochs: panic, pit: outp(43h): comm Bh, mode 00, bcd 00 unhandled +I think I had a similar problem. All three timers should support modes +0, 2, and 3. Other modes really aren't implemented. diff --git a/bochs/COPYING b/bochs/COPYING new file mode 100644 index 00000000..654ead3a --- /dev/null +++ b/bochs/COPYING @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/bochs/Makefile.in b/bochs/Makefile.in new file mode 100644 index 00000000..6930d9bf --- /dev/null +++ b/bochs/Makefile.in @@ -0,0 +1,726 @@ +# Copyright (C) 2001 The Bochs Project +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +#################################################### +# NOTE: To be compatibile with nmake (microsoft vc++) please follow +# the following rules: +# use $(VAR) not ${VAR} + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +srcdir = @srcdir@ +VPATH = @srcdir@ +bindir = @bindir@ +libdir = @libdir@ +plugdir = @libdir@/bochs/plugins +datarootdir = @datarootdir@ +mandir = @mandir@ +man1dir = $(mandir)/man1 +man5dir = $(mandir)/man5 +docdir = $(datarootdir)/doc/bochs +sharedir = $(datarootdir)/bochs +top_builddir = . +top_srcdir = $(srcdir) + +DESTDIR = + +VERSION=@VERSION@ +VER_STRING=@VER_STRING@ +REL_STRING=@REL_STRING@ +MAN_PAGE_1_LIST=bochs bximage bxcommit bochs-dlx +MAN_PAGE_5_LIST=bochsrc +INSTALL_LIST_SHARE=bios/BIOS-bochs-* bios/VGABIOS* @INSTALL_LIST_FOR_PLATFORM@ +INSTALL_LIST_DOC=CHANGES COPYING README TODO +INSTALL_LIST_BIN=bochs@EXE@ bximage@EXE@ bxcommit@EXE@ +INSTALL_LIST_BIN_OPTIONAL=bochsdbg@EXE@ +INSTALL_LIST_WIN32=$(INSTALL_LIST_SHARE) $(INSTALL_LIST_DOC) $(INSTALL_LIST_BIN) $(INSTALL_LIST_BIN_OPTIONAL) niclist@EXE@ +INSTALL_LIST_MACOSX=$(INSTALL_LIST_SHARE) $(INSTALL_LIST_DOC) bochs.scpt +# for win32 and macosx, these files get renamed to *.txt in install process +TEXT_FILE_LIST=README CHANGES COPYING TODO VGABIOS-elpin-LICENSE VGABIOS-lgpl-README +CP=cp +CAT=cat +RM=rm +MV=mv +LN_S=ln -sf +DLXLINUX_TAR=dlxlinux4.tar.gz +DLXLINUX_TAR_URL=http://bochs.sourceforge.net/guestos/$(DLXLINUX_TAR) +DLXLINUX_ROMFILE=BIOS-bochs-latest +GUNZIP=gunzip +WGET=@WGET@ +SED=sed +MKDIR=mkdir +RMDIR=rmdir +TAR=tar +CHMOD=chmod +# the GZIP variable is reserved by gzip program +GZIP_BIN=gzip -9 +GUNZIP=gunzip +ZIP=zip +UNIX2DOS=unix2dos +LIBTOOL=@LIBTOOL@ +DLLTOOL=dlltool +RC_CMD=@RC_CMD@ + +@SUFFIX_LINE@ + +srcdir = @srcdir@ +VPATH = @srcdir@ + +SHELL = /bin/sh + +@SET_MAKE@ + +CC = @CC@ +CXX = @CXX@ +CFLAGS = @CFLAGS@ @GUI_CFLAGS@ $(MCH_CFLAGS) $(FLA_FLAGS) @DEFINE_PLUGIN_PATH@ -DBX_SHARE_PATH='"$(sharedir)"' +CXXFLAGS = @CXXFLAGS@ @GUI_CXXFLAGS@ $(MCH_CFLAGS) $(FLA_FLAGS) @DEFINE_PLUGIN_PATH@ -DBX_SHARE_PATH='"$(sharedir)"' + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +# To compile with readline: +# linux needs just -lreadline +# solaris needs -lreadline -lcurses +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +XPM_LIB = @XPM_LIB@ +GUI_LINK_OPTS_X = $(X_LIBS) $(X_PRE_LIBS) -lX11 $(XPM_LIB) -lXrandr +GUI_LINK_OPTS_SDL = `sdl-config --cflags --libs` +GUI_LINK_OPTS_SVGA = -lvga -lvgagl +GUI_LINK_OPTS_BEOS = -lbe +GUI_LINK_OPTS_RFB = @RFB_LIBS@ +GUI_LINK_OPTS_AMIGAOS = +GUI_LINK_OPTS_WIN32 = -luser32 -lgdi32 -lcomdlg32 -lcomctl32 -lwsock32 -lshell32 +GUI_LINK_OPTS_WIN32_VCPP = user32.lib gdi32.lib winmm.lib \ + comdlg32.lib comctl32.lib wsock32.lib advapi32.lib shell32.lib +GUI_LINK_OPTS_MACOS = +GUI_LINK_OPTS_CARBON = -framework Carbon +GUI_LINK_OPTS_NOGUI = +GUI_LINK_OPTS_TERM = @GUI_LINK_OPTS_TERM@ +GUI_LINK_OPTS_WX = @GUI_LINK_OPTS_WX@ +GUI_LINK_OPTS = @GUI_LINK_OPTS@ @DEVICE_LINK_OPTS@ +RANLIB = @RANLIB@ + +CFLAGS_CONSOLE = @CFLAGS@ $(MCH_CFLAGS) $(FLA_FLAGS) +CXXFLAGS_CONSOLE = @CXXFLAGS@ $(MCH_CFLAGS) $(FLA_FLAGS) +BXIMAGE_LINK_OPTS = @BXIMAGE_LINK_OPTS@ + +BX_INCDIRS = -I. -I$(srcdir)/. -I@INSTRUMENT_DIR@ -I$(srcdir)/@INSTRUMENT_DIR@ + +#SUBDIRS = iodev bx_debug + +#all install uninstall: config.h# +# for subdir in $(SUBDIRS); do # +# echo making $@ in $$subdir; # +# ($(MAKE) -C $$subdir $(MDEFINES) $@) || exit 1; # +# done# + + + +# gnu flags for clean up +#CFLAGS = -ansi -O -g -Wunused -Wuninitialized + + +NONINLINE_OBJS = \ + logio.o \ + main.o \ + config.o \ + load32bitOShack.o \ + pc_system.o \ + osdep.o \ + plugin.o \ + crc.o \ + @EXTRA_BX_OBJS@ + +EXTERN_ENVIRONMENT_OBJS = \ + main.o \ + config.o \ + load32bitOShack.o \ + pc_system.o + +DEBUGGER_LIB = bx_debug/libdebug.a +DISASM_LIB = disasm/libdisasm.a +INSTRUMENT_LIB = @INSTRUMENT_DIR@/libinstrument.a +FPU_LIB = fpu/libfpu.a +READLINE_LIB = @READLINE_LIB@ +EXTRA_LINK_OPTS = @EXTRA_LINK_OPTS@ + +GDBSTUB_OBJS = gdbstub.o + +BX_OBJS = @NONINLINE_VAR@ + +BX_INCLUDES = bochs.h config.h osdep.h + + +.@CPP_SUFFIX@.o: + $(CXX) @DASH@c $(BX_INCDIRS) $(CXXFLAGS) @CXXFP@$< @OFP@$@ +.c.o: + $(CC) @DASH@c $(BX_INCDIRS) $(CFLAGS) $(FPU_FLAGS) $< @OFP@$@ + + +all: @PRIMARY_TARGET@ @PLUGIN_TARGET@ bximage@EXE@ bxcommit@EXE@ @BUILD_DOCBOOK_VAR@ + +@EXTERNAL_DEPENDENCY@ + +bochs@EXE@: @IODEV_LIB_VAR@ @DEBUGGER_VAR@ \ + cpu/libcpu.a memory/libmemory.a ../core/libfail.a gui/libgui.a \ + @DISASM_VAR@ @INSTRUMENT_VAR@ $(BX_OBJS) \ + $(SIMX86_OBJS) @FPU_VAR@ @GDBSTUB_VAR@ @PLUGIN_VAR@ + @LINK@ @EXPORT_DYNAMIC@ $(BX_OBJS) $(SIMX86_OBJS) \ + @IODEV_LIB_VAR@ @DEBUGGER_VAR@ cpu/libcpu.a memory/libmemory.a ../core/libfail.a gui/libgui.a \ + @DISASM_VAR@ @INSTRUMENT_VAR@ @PLUGIN_VAR@ \ + @GDBSTUB_VAR@ @FPU_VAR@ \ + @NONPLUGIN_GUI_LINK_OPTS@ \ + $(MCH_LINK_FLAGS) \ + $(SIMX86_LINK_FLAGS) \ + $(READLINE_LIB) \ + $(EXTRA_LINK_OPTS) \ + $(LIBS) + +# Special make target for cygwin/mingw using dlltool instead of +# libtool. This creates a .DEF file, and exports file, an import library, +# and then links bochs.exe with the exports file. +.win32_dll_plugin_target: @IODEV_LIB_VAR@ @DEBUGGER_VAR@ \ + cpu/libcpu.a memory/libmemory.a ../core/libfail.a gui/libgui.a \ + @DISASM_VAR@ @INSTRUMENT_VAR@ $(BX_OBJS) \ + $(SIMX86_OBJS) @FPU_VAR@ @GDBSTUB_VAR@ @PLUGIN_VAR@ + $(DLLTOOL) --export-all-symbols --output-def bochs.def \ + $(BX_OBJS) $(SIMX86_OBJS) \ + @IODEV_LIB_VAR@ cpu/libcpu.a memory/libmemory.a ../core/libfail.a gui/libgui.a \ + @DEBUGGER_VAR@ @DISASM_VAR@ @INSTRUMENT_VAR@ @PLUGIN_VAR@ \ + @GDBSTUB_VAR@ @FPU_VAR@ + $(DLLTOOL) --dllname bochs.exe --def bochs.def --output-lib dllexports.a + $(DLLTOOL) --dllname bochs.exe --output-exp bochs.exp --def bochs.def + $(CXX) -o bochs.exe $(CXXFLAGS) $(LDFLAGS) -export-dynamic \ + $(BX_OBJS) bochs.exp $(SIMX86_OBJS) \ + @IODEV_LIB_VAR@ cpu/libcpu.a memory/libmemory.a ../core/libfail.a gui/libgui.a \ + @DEBUGGER_VAR@ @DISASM_VAR@ @INSTRUMENT_VAR@ @PLUGIN_VAR@ \ + @GDBSTUB_VAR@ @FPU_VAR@ \ + $(GUI_LINK_OPTS) \ + $(MCH_LINK_FLAGS) \ + $(SIMX86_LINK_FLAGS) \ + $(READLINE_LIB) \ + $(EXTRA_LINK_OPTS) \ + $(LIBS) + touch .win32_dll_plugin_target + +bochs_plugins: + cd gui @COMMAND_SEPARATOR@ + $(MAKE) plugins + @CD_UP_ONE@ + cd iodev @COMMAND_SEPARATOR@ + $(MAKE) plugins + @CD_UP_ONE@ + +bximage@EXE@: misc/bximage.o + @LINK_CONSOLE@ $(BXIMAGE_LINK_OPTS) misc/bximage.o + +bxcommit@EXE@: misc/bxcommit.o + @LINK_CONSOLE@ misc/bxcommit.o + +niclist@EXE@: misc/niclist.o + @LINK_CONSOLE@ misc/niclist.o + +# compile with console CXXFLAGS, not gui CXXFLAGS +misc/bximage.o: $(srcdir)/misc/bximage.c $(srcdir)/iodev/hdimage.h + $(CC) @DASH@c $(BX_INCDIRS) $(CFLAGS_CONSOLE) $(srcdir)/misc/bximage.c @OFP@$@ + +misc/bxcommit.o: $(srcdir)/misc/bxcommit.c $(srcdir)/iodev/hdimage.h + $(CC) @DASH@c $(BX_INCDIRS) $(CFLAGS_CONSOLE) $(srcdir)/misc/bxcommit.c @OFP@$@ + +misc/niclist.o: $(srcdir)/misc/niclist.c + $(CC) @DASH@c $(BX_INCDIRS) $(CFLAGS_CONSOLE) $(srcdir)/misc/niclist.c @OFP@$@ + +$(BX_OBJS): $(BX_INCLUDES) + +# cannot use -C option to be compatible with Microsoft nmake +iodev/libiodev.a:: + cd iodev @COMMAND_SEPARATOR@ + $(MAKE) $(MDEFINES) libiodev.a + @CD_UP_ONE@ + +bx_debug/libdebug.a:: + cd bx_debug @COMMAND_SEPARATOR@ + $(MAKE) $(MDEFINES) libdebug.a + @CD_UP_ONE@ + +cpu/libcpu.a:: + cd cpu @COMMAND_SEPARATOR@ + $(MAKE) $(MDEFINES) libcpu.a + @CD_UP_ONE@ + +memory/libmemory.a:: + cd memory @COMMAND_SEPARATOR@ + $(MAKE) $(MDEFINES) libmemory.a + @CD_UP_ONE@ + +gui/libgui.a:: + cd gui @COMMAND_SEPARATOR@ + $(MAKE) $(MDEFINES) libgui.a + @CD_UP_ONE@ + +disasm/libdisasm.a:: + cd disasm @COMMAND_SEPARATOR@ + $(MAKE) $(MDEFINES) libdisasm.a + @CD_UP_ONE@ + +@INSTRUMENT_DIR@/libinstrument.a:: + cd @INSTRUMENT_DIR@ @COMMAND_SEPARATOR@ + $(MAKE) $(MDEFINES) libinstrument.a + @CD_UP_TWO@ + +fpu/libfpu.a:: + cd fpu @COMMAND_SEPARATOR@ + $(MAKE) $(MDEFINES) libfpu.a + @CD_UP_ONE@ + +libbochs.a: + -rm -f libbochs.a + ar rv libbochs.a $(EXTERN_ENVIRONMENT_OBJS) + $(RANLIB) libbochs.a + +libbochs_cpu.a: @DEBUGGER_VAR@ $(BX_OBJS) + -rm -f libbochs_cpu.a + ar rv libbochs_cpu.a $(BX_OBJS) + $(RANLIB) libbochs_cpu.a + +# for wxWidgets port, on win32 platform +wxbochs_resources.o: wxbochs.rc + windres $(srcdir)/wxbochs.rc -o $@ --include-dir=`@WX_CONFIG@ --prefix`/include + +# for win32 gui +win32res.o: win32res.rc bxversion.rc + $(RC_CMD)$@ $(srcdir)/win32res.rc + +##################################################################### +# Install target for all platforms. +##################################################################### + +install: all @INSTALL_TARGET@ + +##################################################################### +# Install target for win32 +# +# This is intended to be run in cygwin, since it has better scripting +# tools. +##################################################################### + +install_win32: download_dlx @INSTALL_DOCBOOK_VAR@ + -mkdir -p $(prefix) + cp obj-release/*.exe . + for i in $(INSTALL_LIST_WIN32); do if test -f $$i; then cp $$i $(prefix); else cp $(srcdir)/$$i $(prefix); fi; done + cp $(srcdir)/misc/sb16/sb16ctrl.example $(prefix)/sb16ctrl.txt + cp $(srcdir)/misc/sb16/sb16ctrl.exe $(prefix) + #cat $(srcdir)/build/win32/DOC-win32.htm | $(SED) -e 's/@VERSION@/$(VERSION)/g' > $(prefix)/DOC-win32.htm + cp $(srcdir)/.bochsrc $(prefix)/bochsrc-sample.txt + -mkdir $(prefix)/keymaps + cp $(srcdir)/gui/keymaps/*.map $(prefix)/keymaps + cat $(DLXLINUX_TAR) | (cd $(prefix) && tar xzvf -) + echo '..\bochs' > $(prefix)/dlxlinux/start.bat + dlxrc=$(prefix)/dlxlinux/bochsrc.txt; mv $$dlxrc $$dlxrc.orig && sed < $$dlxrc.orig 's/\/usr\/local\/bochs\/latest/../' > $$dlxrc && rm -f $$dlxrc.orig + mv $(prefix)/README $(prefix)/README.orig + cat $(srcdir)/build/win32/README.win32-binary $(prefix)/README.orig > $(prefix)/README + rm -f $(prefix)/README.orig + for i in $(TEXT_FILE_LIST); do mv $(prefix)/$$i $(prefix)/$$i.txt; done + cd $(prefix); $(UNIX2DOS) *.txt */*.txt + cd $(prefix); NAME=`pwd|$(SED) 's/.*\///'`; (cd ..; $(ZIP) $$NAME.zip -r $$NAME); ls -l ../$$NAME.zip + +##################################################################### +# install target for unix +##################################################################### + +install_unix: install_bin @INSTALL_PLUGINS_VAR@ install_man install_share install_doc @INSTALL_DOCBOOK_VAR@ + +install_bin:: + for i in $(DESTDIR)$(bindir); do mkdir -p $$i && test -d $$i && test -w $$i; done + for i in $(INSTALL_LIST_BIN); do if test -f $$i; then install $$i $(DESTDIR)$(bindir); else install $(srcdir)/$$i $(DESTDIR)$(bindir); fi; done + -for i in $(INSTALL_LIST_BIN_OPTIONAL); do if test -f $$i; then install $$i $(DESTDIR)$(bindir); else install $(srcdir)/$$i $(DESTDIR)$(bindir); fi; done + +install_libtool_plugins:: + for i in $(DESTDIR)$(plugdir); do mkdir -p $$i && test -d $$i && test -w $$i; done + list=`cd gui && echo *.la`; for i in $$list; do $(LIBTOOL) --mode=install install gui/$$i $(DESTDIR)$(plugdir); done + list=`cd iodev && echo *.la`; for i in $$list; do $(LIBTOOL) --mode=install install iodev/$$i $(DESTDIR)$(plugdir); done + $(LIBTOOL) --finish $(DESTDIR)$(plugdir) + +install_dll_plugins:: + for i in $(DESTDIR)$(plugdir); do mkdir -p $$i && test -d $$i && test -w $$i; done + list=`cd gui && echo *.dll`; for i in $$list; do cp gui/$$i $(DESTDIR)$(plugdir); done + list=`cd iodev && echo *.dll`; for i in $$list; do cp iodev/$$i $(DESTDIR)$(plugdir); done + +install_share:: + for i in $(DESTDIR)$(sharedir); do mkdir -p $$i && test -d $$i && test -w $$i; done + for i in $(INSTALL_LIST_SHARE); do if test -f $$i; then install -m 644 $$i $(DESTDIR)$(sharedir); else install -m 644 $(srcdir)/$$i $(DESTDIR)$(sharedir); fi; done + -mkdir $(DESTDIR)$(sharedir)/keymaps + for i in $(srcdir)/gui/keymaps/*.map; do install -m 644 $$i $(DESTDIR)$(sharedir)/keymaps/; done + +install_doc:: + for i in $(DESTDIR)$(docdir); do mkdir -p $$i && test -d $$i && test -w $$i; done + for i in $(INSTALL_LIST_DOC); do if test -f $$i; then install -m 644 $$i $(DESTDIR)$(docdir); else install -m 644 $(srcdir)/$$i $(DESTDIR)$(docdir); fi; done + $(RM) -f $(DESTDIR)$(docdir)/README + $(CAT) $(srcdir)/build/linux/README.linux-binary $(srcdir)/README > $(DESTDIR)$(docdir)/README + install -m 644 $(srcdir)/.bochsrc $(DESTDIR)$(docdir)/bochsrc-sample.txt + + +build_docbook:: + cd doc/docbook; make + +dl_docbook:: + cd doc/docbook; make dl_docs + +install_docbook: build_docbook + cd doc/docbook; make install + +install_man:: + -mkdir -p $(DESTDIR)$(man1dir) + -mkdir -p $(DESTDIR)$(man5dir) + for i in $(MAN_PAGE_1_LIST); do cat $(srcdir)/doc/man/$$i.1 | $(SED) 's/@version@/$(VERSION)/g' | $(GZIP_BIN) -c > $(DESTDIR)$(man1dir)/$$i.1.gz; chmod 644 $(DESTDIR)$(man1dir)/$$i.1.gz; done + for i in $(MAN_PAGE_5_LIST); do cat $(srcdir)/doc/man/$$i.5 | $(GZIP_BIN) -c > $(DESTDIR)$(man5dir)/$$i.5.gz; chmod 644 $(DESTDIR)$(man5dir)/$$i.5.gz; done + +download_dlx: $(DLXLINUX_TAR) + +$(DLXLINUX_TAR): + $(RM) -f $(DLXLINUX_TAR) + $(WGET) $(DLXLINUX_TAR_URL) + test -f $(DLXLINUX_TAR) + +unpack_dlx: $(DLXLINUX_TAR) + rm -rf dlxlinux + $(GUNZIP) -c $(DLXLINUX_TAR) | $(TAR) -xvf - + test -d dlxlinux + (cd dlxlinux; $(MV) bochsrc.txt bochsrc.txt.orig; $(SED) -e "s/1\.1\.2/$(VERSION)/g" -e 's,/usr/local/bochs/latest,$(prefix)/share/bochs,g' < bochsrc.txt.orig > bochsrc.txt; rm -f bochsrc.txt.orig) + +install_dlx: + $(RM) -rf $(DESTDIR)$(sharedir)/dlxlinux + cp -r dlxlinux $(DESTDIR)$(sharedir)/dlxlinux + $(CHMOD) 755 $(DESTDIR)$(sharedir)/dlxlinux + $(GZIP_BIN) $(DESTDIR)$(sharedir)/dlxlinux/hd10meg.img + $(CHMOD) 644 $(DESTDIR)$(sharedir)/dlxlinux/* + for i in bochs-dlx; do cp $(srcdir)/build/linux/$$i $(DESTDIR)$(bindir)/$$i; $(CHMOD) 755 $(DESTDIR)$(bindir)/$$i; done + +uninstall:: + $(RM) -rf $(DESTDIR)$(sharedir) + $(RM) -rf $(DESTDIR)$(docdir) + $(RM) -rf $(DESTDIR)$(libdir)/bochs + for i in bochs bximage bxcommit bochs-dlx; do rm -f $(DESTDIR)$(bindir)/$$i; done + for i in $(MAN_PAGE_1_LIST); do $(RM) -f $(man1dir)/$$i.1.gz; done + for i in $(MAN_PAGE_5_LIST); do $(RM) -f $(man5dir)/$$i.5.gz; done + +VS2008_WORKSPACE_ZIP=build/win32/vs2008ex-workspace.zip +VS2008_WORKSPACE_FILES=vs2008/bochs.sln vs2008/*.vcproj + +vs2008workspace: + zip $(VS2008_WORKSPACE_ZIP) $(VS2008_WORKSPACE_FILES) + +######## +# the win32_snap target is used to create a ZIP of bochs sources configured +# for VC++. This ZIP is stuck on the website every once in a while to make +# it easier for VC++ users to compile bochs. First, you should +# run "sh .conf.win32-vcpp" to configure the source code, then do +# "make win32_snap" to unzip the workspace files and create the ZIP. +######## +win32_snap: + unzip $(VS2008_WORKSPACE_ZIP) + $(MAKE) zip + +tar: + NAME=`pwd|$(SED) 's/.*\///'`; (cd ..; $(RM) -f $$NAME.zip; tar cf - $$NAME | $(GZIP_BIN) > $$NAME.tar.gz); ls -l ../$$NAME.tar.gz + +zip: + NAME=`pwd|$(SED) 's/.*\///'`; (cd ..; $(RM) -f $$NAME-msvc-src.zip; $(ZIP) $$NAME-msvc-src.zip -r $$NAME -x \*CVS\* -x \*.cvsignore ); ls -l ../$$NAME-msvc-src.zip + +clean: + @RMCOMMAND@ *.o + @RMCOMMAND@ *.a + @RMCOMMAND@ bochs + @RMCOMMAND@ bochs.exe + @RMCOMMAND@ bximage + @RMCOMMAND@ bximage.exe + @RMCOMMAND@ bxcommit + @RMCOMMAND@ bxcommit.exe + @RMCOMMAND@ niclist + @RMCOMMAND@ niclist.exe + @RMCOMMAND@ bochs.out + @RMCOMMAND@ bochsout.txt + @RMCOMMAND@ bochs.exp + @RMCOMMAND@ bochs.def + @RMCOMMAND@ bochs.scpt + @RMCOMMAND@ -rf bochs.app + @RMCOMMAND@ -rf .libs + @RMCOMMAND@ .win32_dll_plugin_target + +local-dist-clean: clean + @RMCOMMAND@ config.h config.status config.log config.cache + @RMCOMMAND@ .dummy `find . -name '*.dsp' -o -name '*.dsw' -o -name '*.opt' -o -name '.DS_Store'` + @RMCOMMAND@ bxversion.h build/linux/bochs-dlx _rpm_top *.rpm + @RMCOMMAND@ build/win32/nsis/Makefile build/win32/nsis/bochs.nsi + @RMCOMMAND@ build/macosx/Info.plist build/macosx/script_compiled.rsrc + @RMCOMMAND@ libtool + @RMCOMMAND@ ltdlconf.h + +all-clean: clean + cd iodev @COMMAND_SEPARATOR@ + $(MAKE) clean + @CD_UP_ONE@ + cd bx_debug @COMMAND_SEPARATOR@ + $(MAKE) clean + @CD_UP_ONE@ + cd cpu @COMMAND_SEPARATOR@ + $(MAKE) clean + @CD_UP_ONE@ + cd memory @COMMAND_SEPARATOR@ + $(MAKE) clean + @CD_UP_ONE@ + cd gui @COMMAND_SEPARATOR@ + $(MAKE) clean + @CD_UP_ONE@ + cd disasm @COMMAND_SEPARATOR@ + $(MAKE) clean + @CD_UP_ONE@ + cd @INSTRUMENT_DIR@ @COMMAND_SEPARATOR@ + $(MAKE) clean + @CD_UP_TWO@ + cd misc @COMMAND_SEPARATOR@ + $(MAKE) clean + @CD_UP_ONE@ + cd fpu @COMMAND_SEPARATOR@ + $(MAKE) clean + @CD_UP_ONE@ + cd doc/docbook @COMMAND_SEPARATOR@ + $(MAKE) clean + @CD_UP_TWO@ + cd host/linux/pcidev @COMMAND_SEPARATOR@ + $(MAKE) clean + @CD_UP_THREE@ + +dist-clean: local-dist-clean + cd iodev @COMMAND_SEPARATOR@ + $(MAKE) dist-clean + @CD_UP_ONE@ + cd bx_debug @COMMAND_SEPARATOR@ + $(MAKE) dist-clean + @CD_UP_ONE@ + cd bios @COMMAND_SEPARATOR@ + $(MAKE) dist-clean + @CD_UP_ONE@ + cd cpu @COMMAND_SEPARATOR@ + $(MAKE) dist-clean + @CD_UP_ONE@ + cd memory @COMMAND_SEPARATOR@ + $(MAKE) dist-clean + @CD_UP_ONE@ + cd gui @COMMAND_SEPARATOR@ + $(MAKE) dist-clean + @CD_UP_ONE@ + cd disasm @COMMAND_SEPARATOR@ + $(MAKE) dist-clean + @CD_UP_ONE@ + cd @INSTRUMENT_DIR@ @COMMAND_SEPARATOR@ + $(MAKE) dist-clean + @CD_UP_TWO@ + cd misc @COMMAND_SEPARATOR@ + $(MAKE) dist-clean + @CD_UP_ONE@ + cd fpu @COMMAND_SEPARATOR@ + $(MAKE) dist-clean + @CD_UP_ONE@ + cd doc/docbook @COMMAND_SEPARATOR@ + $(MAKE) dist-clean + @CD_UP_TWO@ + cd host/linux/pcidev @COMMAND_SEPARATOR@ + $(MAKE) dist-clean + @CD_UP_THREE@ + @RMCOMMAND@ Makefile + +########################################### +# Build app on MacOS X +########################################### +MACOSX_STUFF=build/macosx +MACOSX_STUFF_SRCDIR=$(srcdir)/$(MACOSX_STUFF) +APP=bochs.app +APP_PLATFORM=MacOS +SCRIPT_EXEC=bochs.scpt +SCRIPT_DATA=$(MACOSX_STUFF_SRCDIR)/script.data +SCRIPT_R=$(MACOSX_STUFF_SRCDIR)/script.r +SCRIPT_APPLESCRIPT=$(MACOSX_STUFF_SRCDIR)/bochs.applescript +SCRIPT_COMPILED_RSRC=$(MACOSX_STUFF)/script_compiled.rsrc +REZ=/Developer/Tools/Rez +CPMAC=/Developer/Tools/CpMac +RINCLUDES=/System/Library/Frameworks/Carbon.framework/Libraries/RIncludes +REZ_ARGS=-append -i $RINCLUDES -d SystemSevenOrLater=1 -useDF +STANDALONE_LIBDIR=`pwd`/$(APP)/Contents/$(APP_PLATFORM)/lib +OSACOMPILE=/usr/bin/osacompile +SETFILE=/Developer/Tools/SetFile + +# On a MacOS X machine, you run rez, osacompile, and setfile to +# produce the script executable, which has both a data fork and a +# resource fork. Ideally, we would just recompile the whole +# executable at build time, but unfortunately this cannot be done on +# the SF compile farm through an ssh connection because osacompile +# needs to be run locally for some reason. Solution: If the script +# sources are changed, rebuild the executable on a MacOSX machine, +# split it into its data and resource forks and check them into CVS +# as separate files. Then at release time, all that's left to do is +# put the data and resource forks back together to make a working script. +# (This can be done through ssh.) +# +# Sources: +# 1. script.r: resources for the script +# 2. script.data: binary data for the script +# 3. bochs.applescript: the source of the script +# +# NOTE: All of this will fail if you aren't building on an HFS+ +# filesystem! On the SF compile farm building in your user directory +# will fail, while doing the build in /tmp will work ok. + +# check if this filesystem supports resource forks at all +test_hfsplus: + $(RM) -rf test_hfsplus + echo data > test_hfsplus + # if you get "Not a directory", then this filesystem doesn't support resources + echo resource > test_hfsplus/rsrc + # test succeeded + $(RM) -rf test_hfsplus + +# Step 1 (must be done locally on MacOSX, only when sources change) +# Compile and pull out just the resource fork. The resource fork is +# checked into CVS as script_compiled.rsrc. Note that we don't need +# to check in the data fork of tmpscript because it is identical to the +# script.data input file. +$(SCRIPT_COMPILED_RSRC): $(SCRIPT_R) $(SCRIPT_APPLESCRIPT) + $(RM) -f tmpscript + $(CP) -f $(SCRIPT_DATA) tmpscript + $(REZ) -append $(SCRIPT_R) -o tmpscript + $(OSACOMPILE) -o tmpscript $(SCRIPT_APPLESCRIPT) + $(CP) tmpscript/rsrc $(SCRIPT_COMPILED_RSRC) + $(RM) -f tmpscript + +# Step 2 (can be done locally or remotely on MacOSX) +# Combine the data fork and resource fork, and set attributes. +$(SCRIPT_EXEC): $(SCRIPT_DATA) $(SCRIPT_COMPILED_RSRC) + rm -f $(SCRIPT_EXEC) + $(CP) $(SCRIPT_DATA) $(SCRIPT_EXEC) + if test ! -f $(SCRIPT_COMPILED_RSRC); then $(CP) $(srcdir)/$(SCRIPT_COMPILED_RSRC) $(SCRIPT_COMPILED_RSRC); fi + $(CP) $(SCRIPT_COMPILED_RSRC) $(SCRIPT_EXEC)/rsrc + $(SETFILE) -t "APPL" -c "aplt" $(SCRIPT_EXEC) + +$(APP)/.build: bochs test_hfsplus $(SCRIPT_EXEC) + rm -f $(APP)/.build + $(MKDIR) -p $(APP) + $(MKDIR) -p $(APP)/Contents + $(CP) -f $(MACOSX_STUFF)/Info.plist $(APP)/Contents + $(CP) -f $(MACOSX_STUFF_SRCDIR)/pbdevelopment.plist $(APP)/Contents + echo -n "APPL????" > $(APP)/Contents/PkgInfo + $(MKDIR) -p $(APP)/Contents/$(APP_PLATFORM) + $(CP) bochs $(APP)/Contents/$(APP_PLATFORM) + $(MKDIR) -p $(APP)/Contents/Resources + $(REZ) $(REZ_ARGS) $(MACOSX_STUFF_SRCDIR)/bochs.r -o $(APP)/Contents/Resources/bochs.rsrc + $(CP) -f $(MACOSX_STUFF_SRCDIR)/bochs-icn.icns $(APP)/Contents/Resources + ls -ld $(APP) $(SCRIPT_EXEC) $(SCRIPT_EXEC)/rsrc + touch $(APP)/.build + +$(APP)/.build_plugins: $(APP)/.build bochs_plugins + rm -f $(APP)/.build_plugins + $(MKDIR) -p $(STANDALONE_LIBDIR); + list=`cd gui && echo *.la`; for i in $$list; do $(LIBTOOL) cp gui/$$i $(STANDALONE_LIBDIR); done; + list=`cd iodev && echo *.la`; for i in $$list; do $(LIBTOOL) cp iodev/$$i $(STANDALONE_LIBDIR); done; + $(LIBTOOL) --finish $(STANDALONE_LIBDIR); + touch $(APP)/.build_plugins + +install_macosx: all download_dlx install_man @INSTALL_DOCBOOK_VAR@ + -mkdir -p $(DESTDIR)$(sharedir) + for i in $(INSTALL_LIST_MACOSX); do if test -e $$i; then $(CPMAC) -r $$i $(DESTDIR)$(sharedir); else $(CPMAC) -r $(srcdir)/$$i $(DESTDIR)$(sharedir); fi; done + $(CPMAC) $(srcdir)/.bochsrc $(DESTDIR)$(sharedir)/bochsrc-sample.txt + -mkdir $(DESTDIR)$(sharedir)/keymaps + $(CPMAC) $(srcdir)/gui/keymaps/*.map $(DESTDIR)$(sharedir)/keymaps + cat $(DLXLINUX_TAR) | (cd $(DESTDIR)$(sharedir) && tar xzvf -) + dlxrc=$(DESTDIR)$(sharedir)/dlxlinux/bochsrc.txt; mv "$$dlxrc" "$$dlxrc.orig" && sed < "$$dlxrc.orig" 's/\/usr\/local\/bochs\/latest/../' > "$$dlxrc" && rm -f "$$dlxrc.orig" + mv $(srcdir)/README $(srcdir)/README.orig + cat $(srcdir)/build/macosx/README.macosx-binary $(srcdir)/README.orig > $(DESTDIR)$(sharedir)/README + rm -f $(DESTDIR)$(sharedir)/README.orig + $(CPMAC) $(SCRIPT_EXEC) $(DESTDIR)$(sharedir)/dlxlinux +# for i in $(TEXT_FILE_LIST); do mv $(srcdir)/$$i $(DESTDIR)$(sharedir)/$$i.txt; done + +########################################### +# BeOS make target. +# Build the binary normally, then copy the resource attributes. +########################################### +.bochs_beos_target: bochs@EXE@ + unzip $(srcdir)/build/beos/resource.zip + copyattr -t ICON BeBochs.rsrc bochs + copyattr -t MICN BeBochs.rsrc bochs + +########################################### +# dependencies generated by +# gcc -MM -I. -Iinstrument/stubs *.cc | sed -e 's/\.cc/.@CPP_SUFFIX@/g' -e 's,cpu/,cpu/,g' +########################################### +config.o: config.@CPP_SUFFIX@ bochs.h config.h osdep.h bx_debug/debug.h config.h \ + osdep.h bxversion.h gui/siminterface.h gui/paramtree.h memory/memory.h \ + pc_system.h plugin.h extplugin.h ltdl.h gui/gui.h \ + instrument/stubs/instrument.h iodev/iodev.h bochs.h param_names.h \ + param_names.h +crc.o: crc.@CPP_SUFFIX@ config.h +gdbstub.o: gdbstub.@CPP_SUFFIX@ bochs.h config.h osdep.h bx_debug/debug.h config.h \ + osdep.h bxversion.h gui/siminterface.h gui/paramtree.h memory/memory.h \ + pc_system.h plugin.h extplugin.h ltdl.h gui/gui.h \ + instrument/stubs/instrument.h param_names.h cpu/cpu.h \ + cpu/model_specific.h cpu/crregs.h cpu/descriptor.h cpu/instr.h \ + cpu/ia_opcodes.h cpu/lazy_flags.h cpu/icache.h cpu/apic.h cpu/i387.h \ + fpu/softfloat.h fpu/tag_w.h fpu/status_w.h fpu/control_w.h cpu/xmm.h \ + cpu/stack.h iodev/iodev.h bochs.h param_names.h +load32bitOShack.o: load32bitOShack.@CPP_SUFFIX@ bochs.h config.h osdep.h \ + bx_debug/debug.h config.h osdep.h bxversion.h gui/siminterface.h \ + gui/paramtree.h memory/memory.h pc_system.h plugin.h extplugin.h ltdl.h \ + gui/gui.h instrument/stubs/instrument.h param_names.h cpu/cpu.h \ + cpu/model_specific.h cpu/crregs.h cpu/descriptor.h cpu/instr.h \ + cpu/ia_opcodes.h cpu/lazy_flags.h cpu/icache.h cpu/apic.h cpu/i387.h \ + fpu/softfloat.h fpu/tag_w.h fpu/status_w.h fpu/control_w.h cpu/xmm.h \ + iodev/iodev.h bochs.h param_names.h +logio.o: logio.@CPP_SUFFIX@ bochs.h config.h osdep.h bx_debug/debug.h config.h \ + osdep.h bxversion.h gui/siminterface.h gui/paramtree.h memory/memory.h \ + pc_system.h plugin.h extplugin.h ltdl.h gui/gui.h \ + instrument/stubs/instrument.h cpu/cpu.h cpu/model_specific.h \ + cpu/crregs.h cpu/descriptor.h cpu/instr.h cpu/ia_opcodes.h \ + cpu/lazy_flags.h cpu/icache.h cpu/apic.h cpu/i387.h fpu/softfloat.h \ + fpu/tag_w.h fpu/status_w.h fpu/control_w.h cpu/xmm.h iodev/iodev.h \ + bochs.h param_names.h +main.o: main.@CPP_SUFFIX@ bochs.h config.h osdep.h bx_debug/debug.h config.h \ + osdep.h bxversion.h gui/siminterface.h gui/paramtree.h memory/memory.h \ + pc_system.h plugin.h extplugin.h ltdl.h gui/gui.h \ + instrument/stubs/instrument.h param_names.h gui/textconfig.h cpu/cpu.h \ + cpu/model_specific.h cpu/crregs.h cpu/descriptor.h cpu/instr.h \ + cpu/ia_opcodes.h cpu/lazy_flags.h cpu/icache.h cpu/apic.h cpu/i387.h \ + fpu/softfloat.h fpu/tag_w.h fpu/status_w.h fpu/control_w.h cpu/xmm.h \ + iodev/iodev.h bochs.h param_names.h +osdep.o: osdep.@CPP_SUFFIX@ bochs.h config.h osdep.h bx_debug/debug.h config.h \ + osdep.h bxversion.h gui/siminterface.h gui/paramtree.h memory/memory.h \ + pc_system.h plugin.h extplugin.h ltdl.h gui/gui.h \ + instrument/stubs/instrument.h +pc_system.o: pc_system.@CPP_SUFFIX@ bochs.h config.h osdep.h bx_debug/debug.h \ + config.h osdep.h bxversion.h gui/siminterface.h gui/paramtree.h \ + memory/memory.h pc_system.h plugin.h extplugin.h ltdl.h gui/gui.h \ + instrument/stubs/instrument.h cpu/cpu.h cpu/model_specific.h \ + cpu/crregs.h cpu/descriptor.h cpu/instr.h cpu/ia_opcodes.h \ + cpu/lazy_flags.h cpu/icache.h cpu/apic.h cpu/i387.h fpu/softfloat.h \ + fpu/tag_w.h fpu/status_w.h fpu/control_w.h cpu/xmm.h iodev/iodev.h \ + bochs.h param_names.h +plex86-interface.o: plex86-interface.@CPP_SUFFIX@ bochs.h config.h osdep.h \ + bx_debug/debug.h config.h osdep.h bxversion.h gui/siminterface.h \ + gui/paramtree.h memory/memory.h pc_system.h plugin.h extplugin.h ltdl.h \ + gui/gui.h instrument/stubs/instrument.h plex86-interface.h \ + plex86/plex86.h plex86/descriptor.h +plugin.o: plugin.@CPP_SUFFIX@ bochs.h config.h osdep.h bx_debug/debug.h config.h \ + osdep.h bxversion.h gui/siminterface.h gui/paramtree.h memory/memory.h \ + pc_system.h plugin.h extplugin.h ltdl.h gui/gui.h \ + instrument/stubs/instrument.h iodev/iodev.h bochs.h param_names.h diff --git a/bochs/PARAM_TREE.txt b/bochs/PARAM_TREE.txt new file mode 100644 index 00000000..50225323 --- /dev/null +++ b/bochs/PARAM_TREE.txt @@ -0,0 +1,267 @@ +$Id$ + +Starting from Bochs 2.3 the parameters are organized in a tree structure +instead of a huge flat list. The parameter tree was required for implementing +the save/restore feature, and it gives access to the device state from within +the debugger. +-Volker + +Current organization of parameters in the tree + +general + config_interface + start_mode + benchmark + restore + restore_path + debug_running + +cpu + n_processors + n_cores + n_threads + ips + quantum + reset_on_triple_fault + msrs + +cpuid + cpuid_limit_winnt + stepping + vendor_string + brand_string + mmx + sep + sse + aes + movbe + xsave + xapic + 1g_pages + pcid + fsgsbase + mwait + mwait_is_nop + +memory + standard + ram + size + rom + path + address + vgarom + path + optrom + 0 + path + addr + 1 + path + addr + 2 + path + addr + 3 + path + addr + optram + 0 + path + addr + 1 + path + addr + 2 + path + addr + 3 + path + addr + +clock_cmos + clock_sync + time0 + cmosimage + enabled + path + rtc_init + +pci + i440fx_support + slot + 1 + 2 + 3 + 4 + 5 + pcidev + vendor + device + +display + display_library + displaylib_options + private_colormap + fullscreen + screenmode + vga_extension + vga_update_interval + +keyboard_mouse + keyboard + type + serial_delay + paste_delay + use_mapping + keymap + user_shortcut + mouse + type + enabled + +boot_params + boot_drive1 + boot_drive2 + boot_drive3 + floppy_sig_check + load32bitos + which + path + iolog + initrd + +floppy + 0 + devtype + path + type + readonly + status + 1 + devtype + path + type + readonly + status + +ata + 0 + resources + enabled + ioaddr1 + ioaddr2 + irq + master + present + type + path + mode + journal + cylinders + heads + spt + status + model + biosdetect + translation + slave + (same options as master) + 1 + (same options as ata.0) + 2 + (same options as ata.0) + 3 + (same options as ata.0) + +ports + serial + 1 + enabled + mode + dev + 2 + (same options as ports.serial.1) + 3 + (same options as ports.serial.1) + 4 + (same options as ports.serial.1) + parallel + 1 + enabled + outfile + 2 + (same options as ports.parallel.1) + usb + uhci + enabled + port1 + device + options + port2 + device + options + ohci + (same options as ports.usb.uhci) + +network + ne2k + enabled + ioaddr + irq + macaddr + ethmod + ethdev + script + pnic + enabled + macaddr + ethmod + ethdev + script + +sound + sb16 + enabled + midifile + wavefile + logfile + midimode + wavemode + loglevel + dmatimer + +misc + text_snapshot_check + gdbstub + port + text_base + data_base + bss_base + user_plugin + 1 ... 8 + +log + filename + prefix + debugger_filename + +menu + disk + disk_win32 + memory + runtime + cdrom + usb + misc + +bochs + (subtree containing Bochs state) + +wxdebug + (special subtree for wxBochs debugger) + +user + (subtree for user-defined options) + +(updated Jan 16, 2011 by vruppert) diff --git a/bochs/README b/bochs/README new file mode 100644 index 00000000..9fd43aa6 --- /dev/null +++ b/bochs/README @@ -0,0 +1,84 @@ +Bochs - The cross platform IA-32 (x86) emulator +Updated: Tue Feb 22 18:07:00 CET 2011 +Version: 2.4.6 + +WHAT IS BOCHS? + +Bochs is a highly portable open source IA-32 (x86) PC emulator +written in C++, that runs on most popular platforms. It includes +emulation of the Intel x86 CPU, common I/O devices, and a custom +BIOS. Currently, Bochs can be compiled to emulate a 386, 486, +Pentium/PentiumII/PentiumIII/Pentium4 or x86-64 CPU, including optional +MMX, SSEx and 3DNow! instructions. Bochs is capable of running +most Operating Systems inside the emulation, for example Linux, DOS, +Windows 95/98/NT/2000/XP or Windows Vista. +Bochs was written by Kevin Lawton and is currently maintained by +the Bochs project at "http://bochs.sourceforge.net". + +Bochs can be compiled and used in a variety of modes, some which are +still in development. The 'typical' use of bochs is to provide +complete x86 PC emulation, including the x86 processor, hardware +devices, and memory. This allows you to run OS's and software within +the emulator on your workstation, much like you have a machine +inside of a machine. Bochs will allow you to run Windows +applications on a Solaris machine with X11, for example. + +Bochs is distributed under the GNU LGPL. See COPYING for details. + +GETTING CURRENT SOURCE CODE + +Source code for Bochs is available from the Bochs home page at +http://bochs.sourceforge.net. You can download the most recent +release, use CVS to get the latest sources, or grab a CVS +snapshot which is updated nightly. The releases contain the most +stable code, but if you want the very newest features try the +CVS version instead. + +WHERE ARE THE DOCS? + +The Bochs documentation is written in Docbook. Docbook is a text +format that can be rendered to many popular browser formats such +as HTML, PDF, and Postscript. Each binary release contains the +HTML rendering of the documentation. Also, you can view the +latest documentation on the web at + http://bochs.sf.net/doc/docbook/index.html + +Some information has not yet been transferred from the older +HTML docs. These can be found at http://bochs.sf.net/docs-html + +WHERE CAN I GET MORE INFORMATION? HOW DO I REPORT PROBLEMS? + +Both the documentation and the Bochs website have instructions on how +to join the bochs-developers mailing list, which is the primary +forum for discussion of Bochs. The main page of the website also +has links to bug reports and feature requests. You can browse and +add to the content in these areas even if you do not have a (free) +SourceForge account. We need your feedback so that we know what +parts of Bochs to improve. + +There is a patches section on the web site too, if you have made +some changes to Bochs that you want to share. + +HOW CAN I HELP? + +If you would like contribute to the Bochs project, a good first step +is to join the bochs-developers mailing list, and read the archive +of recent messages to see what's going on. + +If you are a technical person (can follow hardware specs, can write +C/C++) take a look at the list of open bug reports and feature +requests to see if you are interested in working on any of the +problems that are mentioned in them. If you check out the CVS +sources, make some changes, and create a patch, one of the +developers will be very happy to apply it for you. Developers who +frequently submit patches, or who embark on major changes in the +source can get write access to CVS. Be sure to communicate with the +bochs-developers list to avoid several people working on the same +thing without realizing it. + +If you are a Bochs user, not a hardware/C++ guru, there are still +many ways you could help out. For example: + - write instructions on how to install a particular operating system + - writing/cleaning up documentation + - testing out Bochs on every imaginable operating system and + reporting how it goes. diff --git a/bochs/README-plugins b/bochs/README-plugins new file mode 100644 index 00000000..8853bbe2 --- /dev/null +++ b/bochs/README-plugins @@ -0,0 +1,357 @@ +README-plugins + +This is the README file that came from the CVS branch called BRANCH_PLUGINS. +It's not intended to be user documentation for plugins. It's more like a +bunch of to-do lists that the developers used to coordinate their efforts +while working on plugins. At the bottom are some miscellaneous notes by the +plugin developers and some references to useful usenet articles. + +------------------------------------------------------------------------- +BRANCH_PLUGINS + +The branch is called BRANCH_PLUGINS. There is a normal tag called +BRANCH_PLUGINS_BASE that marks the point where the branch began. The +base marker will help at merge time. + +This branch is a place to experiment with Bochs plugins. Bryce created +the branch on October 4, 2002, and he and Christophe began working on +Bochs plugins. + +We started from Bryce's patch.plugins3, which was a patch from December 2001 +that copied in some of the plugin architecture from plex86. Here are the +comments from that patch: + +> Patch name: patch.plugins3 +> Author: Bryce Denney +> Date: Wed Dec 12 17:56:11 EST 2001 +> +> This patch replaces the Bochs keyboard with a slightly modified version +> of the plex86 keyboard device, which is implemented as a plugin. This +> is sort of a proof of concept, rather than anything that I'm about to +> check in. It uses GNU libtool to compile the plex86 keyboard code into +> a shared library, and installs that shared library in +> /tmp/bochslib/libplex-keyboard.so. Then the new code in plugin.cc (which +> is adapted from the plex86 plugin code) loads the libplex-keyboard library +> during initialization and installs the plex86 keyboard instead of the +> bochs keyboard. +> +> I chose the keyboard because it takes about 2 seconds to test that it's +> basically working, and because the bochs and plex86 implementations hadn't +> changed very much since they split. +> +> If you look at plex-keyboard.cc and plex-keyboard.h, it is fundamentally the +> same as the current plex86 code. I have changed lots of names from bx_* to +> plex_* just to reduce confusion and mayhem when I was compiling with both +> kbd implementations. I didn't change anything except to get it to compile. + +Christophe had made a plugins5 patch, so he checked it in, with these +changes: + - plex86 keyboard device was marged with Bochs keyboard, as a plugin + - plugin.cc was cleaned up + - a device registration mechanism was set up + - the biosdev and unmapped devices were plugin-ized + +TO DO: +- (LATER) some plugins, such as the GUI, PIT, SB, and NE2000, have several different + possible implementations. In this case, all implementations should be + children of a single stub class. The stub's methods produce errors or + panics if they are called, depending on the importance of the device. + There is always one instance of the stub class lying around, which will be + used if none of the implementation plugins is loaded. Either an optional + plugin or a user plugin can fill in these slots. + +- platform specific issues + - (LATER) make sure LTDL works on VC++. It doesn't and won't without + significant work. Maybe it's easier to support VC++ with ifdefs in + plugin.cc rather than using ltdl at all. This will have to wait. + - (DONE) nmake build: we must use lib.exe, not $(LIBTOOL) $(CXX) stuff + +- configure script work + - LTDL has a feature called dlpreload which sort of emulates dlopen + by linking all the modules statically and then emulating dlopen calls. + I don't see any value in this for plugins. If the platform cannot + support dlopen or some equivalent, let the configure script crash and + tell the user to configure without plugins instead. + - (DONE) to support plugins on MacOSX, the user must install dlcompat. + Otherwise libtool's configure script will discover that no dlopen() or + equivalent function is found, and it will not be able to build/load + plugins. The configure script should bomb in this case, with an error + that says where to find dlcompat. dlcompat IS installed on SF compile + farm in /sw/include and /sw/lib. + +- Understand/resolve simulation differences between CVS head and + BRANCH_PLUGINS. Simulation is slightly different. + - compare four versions + - BRANCH_PLUGINS with --enable-plugins + - BRANCH_PLUGINS without --enable-plugins + - BRANCH_PLUGINS_BASE + - CVS head + - these differences seem to be explained by a few things: + 1. devices are initialized in a different order, so they are assigned + different timer id. For any events that occur at the same tick, the + timer handlers would get called in a different order. I believe I + have fixed the order of timer registration so that it matches, and + that cleaned up some simulation differences. + 2. bx_gui->handle_events is now called from iodev/devices.cc instead of + from iodev/keyboard.cc. + 3. bx_keyb_c::periodic() used to be called directly from devices.cc + but now the keyboard registers its own timer + - I have never seen any problems caused by the sim differences, but they + make me nervous. -Bryce + +- (LATER) convert remaining devices + +- (LATER) maybe the implementation class for each plugin device should go into + the .cc file instead of the header file. If all their methods are called + through the stub class virtual functions, and no external file has access to + the real non-stub class, then maybe there is no point in letting anybody + else see the real class at all? (If you do use the class you will get + undefined symbols when you compile for plugins anyway.) For the hard drive, + we could put bx_hard_drive_stub_c in harddrv.h, and any constants or types + that external files might need, and then put the real class, bx_hard_drive_c, + at the top of harddrv.cc. + + +- (LATER) eventually we need to clarify the connection between plugins and + devices. At the moment, each plugin creates exactly one device, but it does + not have to work that way. + - it would be more correct to mark the devices as core, optional, etc. than + to use a type field in the plugin struct. The reason that the type + (core,optional,user) is currently passed into the PLUG_load_plugin macro + and placed in the plugin struct instead of letting the device code decide + is: devices.cc is responsible for initting and resetting devices, so I + wanted devices.cc to decide whether the device would be managed by the + plugin infrastructure (init_all, reset_all) or not. This is not that + important yet, but when Volker wants to write a plugin with multiple + devices, we will need to sort it out. + +- (LATER) make a way for users to replace a core plugin with one of their + choice. + +- (LATER) implement user plugins. These are plugins that Bochs does not know + anything about at compile time. The user asks Bochs to load a plugin using + just its filename. It loads the plugin and registers any bx_params that + the user can configure, and either the text config interface or the + wxWindows interface can display this param list as a menu or dialog. + Then at simulation start time, we call init() on the user device and + it can be used like any other device. + +- (LATER) make plugin CPU??? + +DONE: +- applied patch.plugins5 +- updated makefile dependencies now that plugin.h is in there +- all guis converted to plugins +- 8 I/O devices are converted to plugins +- make the Makefile use libtool to build dynamic libraries +- use libtool's ltdl library to open and read dynamic libraries, since it + has cross platform support +- the Boolean/bx_bool thing will be resolved in the main branch. I have + made patch.replace-Boolean.gz which I will apply later, after the + plugins branch has been merged. This become more urgent because it + caused bug #623152 MacOSX: Triple Exception Booting win95 +- take a look at the code generated by calls to virtual functions, to + check if there's huge overhead that I don't know about. + Answer: I don't believe there is that much extra overhead. If you call + a nonvirtual function, it must push all the args onto the stack, then + push the THIS pointer, then call the method using a known constant address. + With a virtual function, you push all the args onto the stack, then push + the THIS pointer, then do one extra memory reference to THIS+constant to read + the pointer to the virtual method, and call it. This is just what I + expected to find--no strange and magicial code was inserted by the + compiler in this case. +- wxWindows configuration interface and display works fine as a plugin now +- selection of config interface is controlled by the bochsrc line + "config_interface: NAME" and the parameter bx_options.Osel_config. +- selection of display library is controlled by the bochsrc line + "display_library: NAME" and the parameter bx_options.Osel_displaylib. +- renamed vga_library to display_library (Christophe's suggestion) +- add --with-all-libs option, which attempts to detect all the display + libraries that Bochs can compile with. You can use this with or without + plugins, compile with multiple guis in the same binary, and select between + them at runtime. If the detection fails, you can always write a bunch + of --with-PACKAGE options yourself. +- load plugins as they are needed, in main.cc and iodev/devices.cc. + - plugins are loaded using a macro PLUG_load_plugin(plugin_name, plugin_type). + When plugins are enabled, this macro calls bx_load_plugin() in plugin.cc, + which loads the plugin with lt_dlopen and calls its plugin_init method. + When plugins are disabled, the code is already linked into the binary so + the macro calls the plugin_init method directly. + - The plugin_init method for plugin ABC is called libABC_LTX_plugin_init() + and the same prefix is added before the plugin_fini method. This "name + mangling" makes the symbols unique so that they can all be linked + statically into the binary when plugins are turned off. This turned out + to be a very useful thing! + - The choice of lib*_LTX_* is not random... The libtool LTDL library + automatically searches for symbols of the form lib_LTX_ + before looking for . Libtool recommends making global symbols in + every plugin unique in some way, and in fact on MacOSX the dynamic linker + will not allow two libs to be linked in that both have plugin_init symbols, + so this sort of mangling is required. +- how do we know what plugins should be available when we start Bochs? + - we have core plugins, optional plugins, and user plugins. + - (V2.0) core plugin: These are so fundamental that Bochs won't even + initialize without them, for example the CMOS. The user can substitute + his own equivalent plugin to replace the CMOS, but he cannot say "Don't + load the CMOS at all." Core plugin devices are initialized and reset + explictly by code in iodev/devices.cc, since the initialization order for + some of them is critical. They are currently NOT added to the device + list in pluginRegisterDevice and pluginRegisterDeviceDevmodel, so that + the plugin system does not call init() and reset(). If a core plugin + cannot be found, Bochs will panic. + In the bochsrc we can provide a way for the user to REPLACE a core plugin + with a different plugin that implements the same C++ interface, but there + is no way to ask bochs to NOT load a core plugin. I'm not sure how to + configure the replacement plugin--this may have to be added later. + Bochsrc line: + replace_core_plugin: old=pic, new=mypic + - (V2.0) optional plugin: These can be loaded or not without affecting + Bochs's ability to start up and simulate. Initialization and reset for + all optional plugins are handled by bx_init_plugins() and + bx_reset_plugins(), which are now called from bx_devices_c::init() and + bx_devices_c::reset(). Bochs knows how to configure optional plugins at + compile time, and they are loaded only if the configuration settings + enables the device. Examples: serial, parallel, ne2k. See the call to + is_serial_enabled() in iodev/devices.cc. There are some plugins that you + wouldn't ever want to leave out, like vga. Maybe the term "optional" is + not clear and I need to think of a better name. Bochs will panic if an + optional plugin cannot be found. If the plugin was compiled, then + it should be available at runtime too! + - (NOT DONE) user plugin: These are plugins that Bochs does not know + anything about at compile time. The user asks Bochs to load a plugin + using just its filename. It loads the plugin and (somehow) gets + information about what settings the user can configure. The settings are + adjusted by either bochsrc lines or the user interface, and then the + device can be used. I'm missing some details here because I haven't + thought through it all the way. User plugins may not be supported until + after v2.0. + - list of plugins sorted into categories + - core plugins: unmapped, biosdev, cmos, dma, pic, vga + - optional: floppy, harddrv, keyboard, serial, parallel + - user: none yet +- clarify relationship of plugin and device + - a plugin is a shared object that you load that has a plugin_init() and + plugin_fini() function inside. The plugin_init() can create any number of + "devices" and register them. Devices are added to a global list so that we + can do operations on every registered device. + - There is (now) a pointer from each device to the plugin that created it. + - Devices created by core plugins are called core devices. These will not be + added to the device list because they are managed by existing code in + devices.cc and elsewhere. Instead of referring to them by their device_t + structure, we will use a global pointer to them, similar to the + bx_devices.pluginKeyboard pointer. (Alternative: maybe we should add + them to device list anyway, but exclude them in init_all and reset_all + functions.) + - MACOSX PLUGINS WORK! to support plugins on MacOSX, we must ensure that no + plugins have any global symbol names in common, including plugin_init! An + easy solution to this is to say that all plugin functions which can be + looked up with dlsym must follow a pattern like "%s_BXPLUG_%s", where the + first %s is the module name and the second is the plain symbol name, e.g. + pic_BXPLUG_plugin_init. Symbols that are used internally can be declared + static (file scope only). + - SOLARIS PLUGINS WORK! to support plugins on Solaris, we must not rely on + the use of global object constructors. In fact every global variable in a + module MUST BE set to a compile-time constant. We must declare object + pointers as globals, not actual objects. + - WIN32 PLUGINS WORK! to support plugins on win32, I added the + BOCHSAPI macro which expands to __declspec(dllexport) in the nonplugin + code and __declspec(dllimport) in the plugin code. Some makefile hacks + were required too. A few differences between win32 and other platforms: + - use semicolon to separate path names in LTDL_LIBRARY_PATH + - every path name in LTDL_LIBRARY_PATH should start with a drive letter, + for example: c:/cygwin/home/bryce/plugins. +- how do we locate plugins on the disk? + - make install copies the plugins into ${prefix}/lib + - if people install into a standard location, no action may be needed (?) + - we can tell people to set the LTDL_LIBRARY_PATH variable. + - if necessary we can implement a bochsrc command like + plugin_search_directory: /path/to/libs + which would call lt_dlsetsearchpath() to add the path to LTDL's list of + directories it will search. +- change log for BRANCH_PLUGINS is in patches/patch.plugins. It is + pretty complete now. + + + + + + +----------------------------------------------- +random notes: + +class heirarchy: + logfunctions + - bx_devmodel_c + - bx_keyb_stub_c + - bx_keyb_c + +bx_devmodel_c is an abstract class that defines standard functions that all +devices should define, like init and reset. Each method is defined as empty +in bx_devmodel_c so that child classes can choose to implement them or not. + +bx_keyb_stub_c declares the methods that code outside the keyboard would need +to call, such as mouse_motion, gen_scancode, etc. It declares these methods +virtual, and provides a minimal definition for each that just does a panic. A +global variable pluginKeyboard initially points to an instance of +bx_keyb_stub_c so that if you forget/fail to load the load the keyboard plugin, +you will see these panics when the methods are called. + +bx_keyb_c is the real keyboard code. In its constructor, it changes +pluginKeyboard to point to "this". This is equivalent to installing all +the plugin callbacks associated with the keyboard. It also works in +nonplugin code, which is a plus. + + +hard drive read_handler. Right now the read_handler +is a static method so it must get its object pointer from somewhere. + 1) It can get it from global variable bx_hard_drive + 2) The hard drive object can be passed in to it +We've always used #2, so every device has methods that look like this: + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsi + +If/when we switch over to using virtual methods, there will no longer be +any problem finding the this pointer. If we go that route, the this_ptr +can be eliminated. For now, we must use the this_ptr. Otherwise we could +never support more than one device of a given type. + + + +------------------------------------------ +References + +From: Tero Pulkkinen (p150650@zori.cs.tut.fi) + Subject: Re: undefined reference to `pm virtual table' + Newsgroups: gnu.g++.help + Date: 1996/11/15 + + +> The compile goes off OK, but I get this error at link time: +> pm.o(.text+0xa8): undefined reference to `pm virtual table' + +This error comes from that the compiler didnt make virtual function +table for object even though there's implemented functions that use +objects of that type(constructor for example). Probably your pm-class +has all implemented member functions *inline* and you still have +(pure) virtual functions inside the class. + +The creation point of virtual function table usually (dunno if g++ does that) +is at position of first seen noninline function body of that class. +Now if every of your function is inline, there's no place where compiler +could make virtual function table. + +Fix is to move body of for example constructor(any member is fine) to the .cc +file instead of keeping it in .h-file and linking that .o file to your +executable. + +Other sollution is to remove *all* implementations of functions from header +file. If all functions of a class are pure virtual, there's no need for +virtual function table. (Constructor must set pointer to virtual function +table to the object, so, if you have constructor, you'll need virtual +function table too, even in abstract classes...) + +> Can someone help me? Thanks in advance. + +Hope this helps.... + diff --git a/bochs/README-wxWindows b/bochs/README-wxWindows new file mode 100644 index 00000000..19cc91ac --- /dev/null +++ b/bochs/README-wxWindows @@ -0,0 +1,337 @@ +Readme for wxWindows Interface +updated Sat Dec 21 11:09:34 EST 2002 + +Contributors to wxWindows port: + Don Becker (Psyon) + Bryce Denney + Dave Poirier + Volker Ruppert + +wxWindows Configuration Interface + +The wxWindows port began in June 2001 around the time of Bochs 1.2.1. Dave +Poirier and Bryce Denney started adding a wxWindows configuration interface. +We made some progress, but stopped after a while. Then in March/April 2002 +Bryce and Psyon revived the wxWindows branch and turned it into a usable +interface. Psyon did most of the work to get text and graphics working, and +Bryce worked on event passing between threads, and keyboard mapping. +Starting in August 2002, Bryce added lots of dialog boxes to allow you +to set all the bochsrc parameters. At the time of release 2.0, there +are still some bugs but it is pretty stable and usable. + +Bochs should be build with wxWindows 2.3.3 or later. It will probably +not compile with 2.2.x without some work. wxWindows 2.3.3 includes +a patch by Bryce Denney to allow us to get raw keycode data for several +OSes. + +On any UNIX platform with wxWindows installed, configure with +--with-wx to enable the wxWindows display library. + +To build in MS VC++: +- edit .conf.win32-vcpp and add "--with-wx" to the configure line. + If you want different configure options from what you see, change them + too. +- in cygwin, do "sh .conf.win32-vcpp" to run configure +- unzip build/win32/wxworkspace.zip into the main directory. + For cygwin: unzip build/win32/wxworkspace.zip + or use winzip or whatever else. +- open up bochs.dsw, the workspace file +- edit project settings so that VC++ can find the wxWindows include + files and libraries on your system. Bryce installed them in + d:/wx/wx233/include and d:/wx/wx233/lib. Specifically, edit + - Project>Settings>C/C++>Category=Preprocessor: include directories. + - Project>Settings>Link>Category=Input: additional library path. +- build + +Note that the project is set up for wxWindows 2.3.3. To use on other +wxwindows versions, you will have to change some of the names of the libraries +to include. Use the samples that came with that version of wxwindows for +reference. + +To do: +- now that ParamDialog works, I may rewrite some of the other dialogs + as subclasses of ParamDialog. This would lead to more compact code, + and fewer bugs. +- configure time dialog + - need to think about dialog layout + - setting of IPS (controls how much time the PIT associates with each + instruction for purposes of sending timer interrupts). How can we + name this? instructions per simulated second. + - enable realtime pit, realtime pit settings (?) + - enable/disable X windows idle hack + - report instructions per wall clock second in real time +- decide which settings can be adjusted at runtime, and figure out how + to disable the others. Do we need a set_enable() on the parameters + themselves? +- the power button has always "turned off" the power. Make it also + turn ON the power. I think a few little green LEDs are in order. +- floppy config screen: on win32, both not present and ejected are selected + at first. +- log events + - Later: allow viewing of current log messages. Maybe this is a dialog that + we append to, or maybe it should periodically display the last 1K of the + log file (might be faster in high volume situations). + - Later: should we allow multiple log files with different settings? for + example dump cpu events to cpulog.txt and keyboard events to + keyboardlog.txt? +- debugger + - bug: it's possible to make the GUI stop responding to mouse and keyboard + input if you click the continue button in the debugger twice in very + close succession. I don't know why yet. + - probably the layout will be similar to BFE at first + - need to show disassembly of the next instruction to be executed +- clean up the biggest memory leaks and init/cleanup code. The gui allows you + to kill the simulator and restart, but it doesn't do well after the first + time. Valgrind should help with memory leak debugging, though until + recently it couldn't run multithreaded programes. +- disk change dialogs for floppy and cdrom need work. + http://sourceforge.net/tracker/index.php?func=detail&aid=545414&group_id=12580&atid=112580 +------------- + +------------------------------------------------------ + +Random notes follow + +Added some sketches. I'm thinking that the control +panel will be able to basically show one of these screens at a time. When +you first start you would see ChooseConfigScreen which chooses between the +configurations that you have loaded recently (which it would remember +by the pathname of their bochsrc). Whether you choose an existing +configuration to be loaded or a new one, when you click Ok you go to +the first configuration screen, ConfigDiskScreen. + +Each of the configuration screens takes up the whole control panel window. +We could use tabs on the top and/or "<-Prev" and "Next->" buttons to make +it quick to navigate the configuration screens. Each screen should +probably have a Prev, Next, Revert to Saved, and Accept button. +The menu choices like Disk..., VGA..., etc. just switch directly to +that tab. + + +------------------------------------------------------ +Notes: + +events from gui to sim: +- [async] key pressed or released +- [async] mouse motion with button state +- [sync] query parameter +- [sync] change parameter +- [async] start, pause, stop, reset simulation. Can be implemented + as changing a parameter. +- [async] request notification when some param changes + +events from sim to gui: +- [async] log message to be displayed (or not) +- [async] ask user how to proceed (like panic: action=ask) +- [async] param value changed +- make my thread sleep for X microseconds (call wxThread::sleep then return) + +In a synchronous event, the event object will contain space for the entire +response. The sender allocates memory for the event and builds it. The +receiver fills in blanks in the event structure (or could overwrite parts) +and returns the same event pointer as a response. For async events, probably +the sender will allocate and the receiver will have to delete it. + +implement the floppyA and floppyB change buttons using new event +structure. How should it work? + +vga gui detects a click on floppyA bitmap +construct a BxEvent type BX_EVT_ASK_PARAM +post the event to the wxwindows gui thread (somehow) and block for response +when it arrives in the gui thread, show a modal dialog box +get the answer back to the simulator thread + + +right now, this is working ok within the simulator thread using +wxMutexGuiEnter/Leave. Still I'm going to change it so that the +siminterface.cc code builds an event structure and the gui code +fills in the blank in the structure, instead of the stupid +notify_get_int_arg stuff. + + +Starting and Killing Threads + +When a detachable (default) thread finishes (returns from its Entry() +function), wxwindows frees the memory associated with that thread. +Unless the thread is never going to end, it is potentially dangerous to have a +pointer to it at all. Even if you try to "check if it's alive" first, you may +be dereferencing the pointer after it has already been deleted, leading to it +claiming to be alive when it's not, or a segfault. To solve this, the approach +used in the wxwindows threads example is to have code in the thread's OnExit() +method remove the thread's pointer from the list of usable threads. In +addition, any references or changes to the list of threads is controlled by a +critical section to ensure that it stays correct. This post finally +explained what I was seeing. + ++----------------------- +| From: Pieter van der Meulen (pgmvdm@yahoo.com) +| Subject: Re: Thread Sample program - bug +| Newsgroups: comp.soft-sys.wxwindows +| Date: 2001-06-28 17:51:35 PST +| +| +| At 06:24 PM 6/28/2001, you wrote: +| >Hi, +| >I have wxWindows 2.2.7 (wxMSW) installed. +| > +| >I just found in the thread.cpp sample code this section: +| > +| > +| >void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) ) +| >{ +| > size_t count = wxGetApp().m_threads.Count(); +| > for ( size_t i = 0; i < count; i++ ) +| > { +| >===> wxGetApp().m_threads[0]->Delete(); <===== +| > } +| > +| > Close(TRUE); +| >} +| > +| >The indecated line should probably rather have a +| >m_threads[i] rather than m_threads[0] . +| +| No, it should not, although it is not immediately obvious. When Delete() is +| called, the thread will eventually delete itself, but not before it calls +| MyThread::Exit(), which will remove itself from m_threads[] using +| wxArray::Remove(this). wxArray::Remove (RemoveAt) will compact the array to +| remove the element, it is now size-1. After this wxThread::Delete() returns. +| +| +| >I have have a further question to this: +| >Does this mean that a detached thread created with new +| >HAS to be deleted manually ? Or is this only in case it might still +| >be running? +| +| Firstly, you must create every detached thread using new since it will +| delete itself, literally calling delete this. +| Calling wxThread::Delete() is a correct way to terminate a thread, but +| manually deleting (using delete) a detached wxThread object is not. +| wxThread::Delete() will ask the thread to exit, the thread should check for +| this in wxThread::Entry() regularly using wxThread::TestDestroy() and exit +| when asked to do so. +| +| >(In general I have a unsatisfied felling about when delete is +| >neccessary and when not -- "I only know, it's not , if the class is +| >derived from wxWindows") +| +| For wxThreads: joinable threads must be deleted (when allocated on the +| heap), detached threads may never be deleted. For other classes, consult +| the documentation ;) +| +| +| >Thanks for some feedback, +| >Sebastian +| +| Regards, +| +| Pieter. ++----------------------- + +tracking some kind of deadlock bug in Linux. + +seems to be in ReadMailcap, src/unix/mimetypes.cpp in wxwindows sources +src/unix/mimetype.cpp:2312 + +SOLUTION: compile with -pthread on every compile and link line. + + + +---------------------------------------------- +Suggested solution for putting sizers inside a scrolled window + +From: Thaddaeus Frogley (codemonkey_uk@users.sourceforge.net) +Subject: RE: Using sizers inside of a scrolled window +Newsgroups: comp.soft-sys.wxwindows +Date: 2001-10-02 02:41:04 PST + +I have solved that same problem (scrolled windows / sizers) like so: + +In the constructor for your wxFrame derived class, + +//create a scrolling window +myScrolledWindow = new wxScrolledWindow(this, -1); + +//in the scolling window, create a panel +myMainPanel = new wxPanel(myScrolledWindow, -1); + +//place controls in the panel, laying them out with sizers + +//... + +myMainPanel->SetAutoLayout( TRUE ); +myMainPanel->SetSizer( sizer ); +sizer->Fit( myMainPanel ); +sizer->SetSizeHints( myMainPanel ); + +//set the scroll bars lengths based on the size of the inner panel +wxSize size = myMainPanel->GetBestSize(); +myScrolledWindow->SetScrollbars( 1, 1, size.GetWidth(), size.GetHeight() ); + +//calculate the size of the window, and set it appropriately +size.Set(size.GetWidth()+16,size.GetHeight()+16); + +//Get the physical size of the display in pixels. +int displaySizeX,displaySizeY; +wxDisplaySize(&displaySizeX,&displaySizeY); + +//clamp window size to % of screen +if (size.GetWidth()>displaySizeX*0.75){ + size.SetWidth(displaySizeX*0.75); +} +if (size.GetHeight()>displaySizeY*0.75){ + size.SetHeight(displaySizeY*0.75); +} + +SetClientSize(size); + + + +----------------- +How to make wxChoice as wide as the longest string in the choice box? + +From: Vadim Zeitlin (Vadim.zeitlin@dptmaths.ens-cachan.fr) +Subject: Re: wxChoice +Newsgroups: comp.soft-sys.wxwindows +Date: 2001-09-18 04:41:07 PST + + +On Sat, 15 Sep 2001 15:39:45 +0200 Merlijn Blaauw wrote: + +MB> Also, I +MB> would like the widget's parent window to change size (width) to fit the +MB> widget's new content aswell. + + You'll have to do it manually by calculating the length of the string you +add to the control (use wxClientDC(combobox) and set correct font before +calling GetTextExtent()!) and resizing the control to be slightly larger +(yes, I know it's not nice at all but I don't see any other way to do it). + + Regards, +VZ + +--------- +Hold on, this is even better! + +From: Yann Rouillard (Y.Rouillard@exeter.ac.uk) +Subject: wxChoice and wxADJUST_MINSIZE +Newsgroups: comp.soft-sys.wxwindows +Date: 2002-07-18 08:28:31 PST + +I am trying to use a wxChoice widget in a little panel. The text length of +the choices in the wxChoice can change so I used the wxADJUST_MINSIZE to +have its width correctly set. + +> the manual for wxSizer::Add() says: +Finally, you can also specify wxADJUST_MINSIZE flag to make the minimal size of +the control dynamically adjust to the value returned by its GetBestSize() +method - this allows, for example, for correct relayouting of a static text +control even if its text is changed during run-time. + +relayouting? sounds like s/size/layout/g gone wrong. + +Call Add() with wxADJUST_MINSIZE flag! +-------------- +mno-cygwin guide on mingw webpage +http://www.xraylith.wisc.edu/~khan/software/gnu-win32/mno-cygwin-howto.txt +www.mingw.org diff --git a/bochs/README.rfb b/bochs/README.rfb new file mode 100644 index 00000000..63d2892e --- /dev/null +++ b/bochs/README.rfb @@ -0,0 +1,3 @@ +The RFB server implementation is still lacking as of now, as a consequence +you should force 8bit mode on the client to use it correctly, i.e. on Linux, +use: "xvncviewer -8bit localhost" or similar. diff --git a/bochs/TESTFORM.txt b/bochs/TESTFORM.txt new file mode 100644 index 00000000..549d2a30 --- /dev/null +++ b/bochs/TESTFORM.txt @@ -0,0 +1,133 @@ +------------------------------------------------------------- +BOCHS TESTING FORM Version 0.5 +------------------------------------------------------------- + +Because of the variety of platforms and configurations that Bochs +supports, it is difficult for any one person to test it thoroughly. +This form is intended to help the Bochs developers keep track of test +results from different sources. To avoid confusion, this form should +be submitted once for each combination of host OS and guest OS you +try. For example: your host OS is Debian Linux and you get both Win95 +and FreeDOS to start up. You would send one form for +Win95-under-Debian and a second form for FreeDOS-under-Debian. In +this case it would save time to fill in the host OS part, copy it a +few times and fill out the guest OS part for each copy. + +To fill in a blank such as [__], replace the underlines and leave +the brackets. Example: [Sun Ultrasparc 10]. To fill in a +multiple-choice, just put an X in the brackets. Example: [X] +Mail completed forms to bochs-developers@lists.sourceforge.net + + +What is the date? +[__] + +What is your name? +[__] + +What is your email address? +[__] + +Do you mind if your name and email address are placed on a testing results +web page so that people with a similar setup can write to you? + [ ] Ok, put it on a web page + [ ] No, keep my address private. + +What type of hardware are you using, e.g. 2400 MHz Intel Pentium 4. +[__] + +What operating system are you using? Please be specific, e.g. +Redhat Linux 6.2 with 2.2.16 kernel. +[__] + +What version of bochs are you using? + [ ] compiled from version 2.4.2 + [ ] compiled from version [_____] + [ ] I compiled it from the CVS sources from date: [__] + [ ] other source distribution from URL: [__] + [ ] binary distribution from URL: [__] + +Please fill in the next few questions only if you compiled Bochs +yourself, as opposed to downloading a binary. + +Did the configure script run ok, and detect your hardware and +operating system? + [ ] Yes + [ ] No, configure crashed. + [ ] No, configure ran ok but produced a bad configuration. + [ ] No, I cannot run configure on my platform (win32 and mac). + +If you used configure, what arguments did you give it? If you used a +.conf.* script, give the name of the .conf script instead. +[__] + +What compiler did you use? (Please include version.) +[__] + +Did Bochs compile clean without any hacking? + [ ] Yes + [ ] No + +If you had to make changes to compile, please summarize the problems you +had or include diffs. +[__] + +End of compile-specific questions! + +What guest operating system are you using inside bochs? +[__] + +Are you booting from a floppy, hard disk or cdrom image ? + [ ] floppy image + [ ] raw floppy drive + [ ] cdrom + [ ] cdrom image + [ ] hard drive image + [ ] raw hard drive (is this even possible?) + [ ] other [__] + +Did the guest operating system boot successfully? + [ ] Yes + [ ] No + +If no, what error messages do you see on the console or in the log file? +[__] + +What applications worked under this guest operating system? +[__] + +What applications failed under this guest operating system? Did the +application function incorrectly, crash Bochs, or what? If you got a +panic, paste in the panic message that you received with some +description of what was happening at the time. +[__] + +The remaining questions are about Bochs features that you may not have +used. If you tried out the feature, move the X to the "works" or +"fails" column. + + Not Works + tested ok Fails Comments? +x86-64 [X] [ ] [ ] [__] +floating point [X] [ ] [ ] [__] +SMP [X] [ ] [ ] [__] +VMX [X] [ ] [ ] [__] +keyboard [X] [ ] [ ] [__] +floppy disk [X] [ ] [ ] [__] +raw floppy disk [X] [ ] [ ] [__] +hard disk [X] [ ] [ ] [__] +mouse [X] [ ] [ ] [__] +cdrom [X] [ ] [ ] [__] +sb16 [X] [ ] [ ] [__] +ne2000 [X] [ ] [ ] [__] +i440FX pci [X] [ ] [ ] [__] +debugger [X] [ ] [ ] [__] +gui debugger [X] [ ] [ ] [__] +external loader [X] [ ] [ ] [__] +save/restore [X] [ ] [ ] [__] +VGA [X] [ ] [ ] [__] +Cirrus Logic SVGA [X] [ ] [ ] [__] +USB [X] [ ] [ ] [__] + +Thank you for your contribution in the Bochs testing effort! Please +mail completed forms to bochs-developers@lists.sourceforge.net diff --git a/bochs/TODO b/bochs/TODO new file mode 100644 index 00000000..47c6837d --- /dev/null +++ b/bochs/TODO @@ -0,0 +1,237 @@ +This is the "roadmap" posted in the mailing list, augmented by +comments from the mailing list and the irc chat. +Anybody is welcome to work on any of these issues. Some of +these items are rather simple and can be implemented by single +individuals. Other items are quite complex and development needs +to be coordonated. So, if you want to contribute, please drop +us a note in the mailing list, so you can get help or exchange +ideas. +Christophe Bothamy. + +0. Donations +Source Forge recently set up a donation system for hosted projects. +Should we accept donations ? What could we do with the money ? +- give to EFF, FSF or other +- fund Kevin to continue the work on plex86 so we can use it +- bounties for somebody write optimized win9x/NT/XFree/linux/*BSD + drivers for our vga/net/ide cards +- other ? +Status in Bochs 2.3: +No decisions about this yet. + +1. Speed +Speed (well lack of) is one of the biggest criticism made by users +who'd like to see Bochs run as fast as Virtual PC. +Paths we can explore to get more speed : +1.1 virtualization : plex86 +1.2 dynamic translation : qemu +Status: +Some work has been done for Bochs 2.3.7 but still long way is ahead. + +2 multithreading. Conn Clark wrote : +Threading might be nice too, for those of us who have SMP/SMT machines. +I have a patch from Mathis (who hangs out on the IRC channel all the +time) that puts the video card interface in its own thread. It has +troubles though that I have not resolved. It may also be easier to debug +a threaded peripheral. +I also think that it might be possible to thread a chunk of the CPU +emulation to improve performance on a SMP/SMT machine. Specificaly +write_virtual_dword, write_virtual_word, write_virtual_byte, etc... +might just be able to be threaded. I think the threading overhead might +be less than the protection and address translation code. We would have +to try it to find out. I'm also sure there can be some nasty hurdles to +overcome. +Status: +Third party group started a para-Bochs project exactly to reach above goals, +some beta version is already released. +The home page of the project: http://grid.hust.edu.cn/cluster/VirtualMachine/main.html + +3. Plugin architecture +3.1 The plugin architecture can be reworked if we want to support +multiple similar devices like seral net or vga cards. +We currently have two "types" of plugins: "core" and "optional". +Maybe we could add "classes" of plugins. The current version of +Bochs supports the classes "display_library" and "io_device". +New classes can be "config_interface", "net_lowlevel" and +"sound_lowlevel" +3.2 Stanislav wrote : +Plugin architecture should be rewritten like real plugin architecture s.t. +Bochs VGA plugin for example will be real plugin. I mean that replacement +of plugin dll in already compiled Bochs will replace Bochs VGA card and +the new card will be detected automatically. +This will allow for example developing of plugins separately from Bochs. +3.3 Michael Brown wrote : +If the configuration interface is to be reworked, could we also make it so +that plugins are self-contained, rather than needing to pollute config.cc +with code for defining and parsing plugin-specific options +Status: +A little bit of the basic work is done now: The config parameter handling has +been rewritten to a parameter tree and user-defined bochsrc options are now +supported. The main plugin architecture rewrite is not done yet. + +4. PCI host<->guest proxy +Being able to use a real pci device from inside Bochs would be a +great feature of Bochs. It would ease reverse engineering of non +documented cards, or one could even use a real spare vga card. +Frank Cornellis has done a great job on this subject, and we began +integrating his changes. +Status: +The pcidev device is present in CVS and it has been updated for the new PCI +infrastructure, but the new code is untested yet. + +5. Subdirectories in iodev +The iodev directory contains the various implemented iodevice. +With the new pci devices, new harddrives and new net access methods, +it could be interesting to add new subdirectories like : +iodev/video/... --> for standard vga and new card emulation +iodev/disks/... --> for the ata/atapi classes, hd/cd classes and host accesses +iodev/net/... --> for ne2k and host net access +isa and pci devices would be mixed in the directories, but this should +be manageable. +Status: +Not done yet. + +6. VGA +For SVGA emulation we have Bochs VBE and the Cirrus adapter. We should have +a look at the voodoo3 (specs http://v3tv.sourceforge.net/docs.php). +Status: +Not done yet. + +7. Random thoughts on disk emulation improvements : +7.1 lba48 support +7.2 autodetection of disk size / geometry +7.3 uml cow disk image support +7.4 compressed disk image support +7.5 extend redolog-disk specification to add coherency check of the flat +image file, by storing its fstat-mtime field in the redolog. +Status: +Autodetection now works for all image types created with bximage and vmware3 +images. LBA48 and vmware4 disk images support was added in Bochs 2.3.5 release. +The other items are not done yet. + +8. net +8.1 bootable ethernet rom ? +see etherboot, Micheal Brown wrote : +This already works; you can build an Etherboot rom image with the pnic +driver, specify it as an option ROM in bochsrc and it will boot. I'm +using this extensively at the moment in Etherboot development. +In the Etherboot project's CVS, in the contrib/bochs directory, you can +find a working bochsrc file and an up-to-date README with step-by-step +instructions on getting this working. +Status: +The pnic device is present in CVS, but the status is unknown. + +9. Bios +9.1 add "jump table placeholder" and log missing function calls in the bios. +Check completness with Ralf Brown interrupt list. +Status: +Not done yet. +9.2 use Coreboot or SeaBios as possible alternatives/extensions to +Bochs Bios ROM we have. +Status: +Not done yet. + +10. LGPL VGABios +11.1 Video parameters table +There is a very nice parameter table in 3dfx banshee document +http://www2.lm-sensors.nu/~lm78/pdfs/Banshee_2d_spec.PDF +see also http://www.xyzzy.claranet.de/dos/vgacrt.c +Status: +The new version 0.6a of the LGPL'd VGABIOS has minimal support for the video +parameter table. + +11. Optimized Guest drivers still needed : VGA, IDE, NET +We have a specific VGA driver for winNT/2K, but still +lack drivers for other OSes. +Status: +Not done yet. + +12. USB support +Ben Lunt has been working on USB support. The USB mouse and keypad code +is present in Bochs and almost stable. USB flash disk support has been +started and the runtime device change support should be completed. +Status: +Under construction. + +13. Config file and dynamic menu +13.1 Benjamen R. Meyer wrote : +I think we should rework the .bochsrc file to be more standard across all +devices. I like how the USB configuration is done in it, and think we should +put something similar together for everything else. In otherwords, create +something that can be easily used for everything, and make it easier to +configure in the process. +From what I can tell right now, most of the configuration lines are randomly +thrown together as each gets implemented or added, instead of having +something that is based on a standard approach to the configuration. +The result should be something that would be able to easily auto-configured +by another program (a configuration editor?) with minimal changes necessary +when new devices/features are added. +13.2 Franck Cornelis wrote : the config system needs some work... +e.g. the main menu is static while it could be generated at run-time... +the main menu text lives somewhere in a file... while it should be generated +at run-time by iterating the main menu objects +Status: +The config options handling has been rewritten to a parameter tree. + +14. lowlevel serial support for Windows. +Volker is currently working on this. +Status: +Not yet complete (transmit works, receive is losing data). + +15. Parallel port +Conn Clark wrote : +I would like to see better parallel port support so I can use a dongle. +This is something I would find very useful as it would mean I wouldn't +have to boot back into windows ever again. I also recognize that this +may require a kernel module be written, which is beyond my current +skills. I know others will find this useful as I have had to tell a +few people that their parallel port driven peripherals that require a +bidirectional parallel port won't work. +Status: +Not done yet. + +16. Guest-To-Host Communication +Try to adapt VirtualBox guest-to-host communication methods into Bochs. +Having VirtualBox Shared Folders or VNAT support in Bochs could very +simplify its usage. + +17. Patches / Bug reports +There are dozens of patches floating around. Some are outdated, +don't apply cleanly, are obsolete/unneeded. We could try to do +some clean-up, and keep only relevent ones. +We should also clean up the SF bug tracker. Some bugreports are +very old and we asked for more information with no response. +Status: +There is some progress, but still a lot of work to do. + +18. Positions +If you want to help without coding, here are available positions : +19.1 Webmaster : update website (Jan Bruun Andersen offered to help) +19.2 patch coordonator : look at incoming patches (sourceforge and +mailing list) and upload / update in the cvs patches directory. +19.3 platform maintainers for macos / win32 +19.4 disk image maintainer : create and maintain our collection +of disk images. Usually, only the configuration file needs to be +updated, and old bios files have to be removed. Some packages +still contain very old bios files, they should definitely have +to be removed. +Status: +More active developers are needed to do the things described above. + +19. Bochs demo cd/dvd +With version 2.1, it is now technically possible to use disk images +on a read-only media, with a journal files on a read/write media. +It would be great to create a demo cd/dvd with executables for +supported platforms, configuration files and read-only disk +images, the journal files would be written in a temporary +directory on the harddisk. +Status: +Not done yet. + +20. Other CPU architectures : arm, ppc +This has been asked in the mailing list. I'm not really +interested, but other people might be. Should we propose to +host the new CPUs code in our source tree, or should we let +people fork ? +Status: +Not done yet. diff --git a/bochs/aclocal.m4 b/bochs/aclocal.m4 new file mode 100644 index 00000000..570ba653 --- /dev/null +++ b/bochs/aclocal.m4 @@ -0,0 +1,6634 @@ +##################################################################### +# $Id$ +##################################################################### + +dnl ------------------------------------------------------------------- +dnl This test for largefile support was written by Vadim Zeitlin for +dnl wxWidgets. He has given permission for Bochs to use it. +dnl ------------------------------------------------------------------- + +dnl WX_SYS_LARGEFILE_TEST +dnl +dnl NB: original autoconf test was checking if compiler supported 6 bit off_t +dnl arithmetic properly but this failed miserably with gcc under Linux +dnl whereas the system still supports 64 bit files, so now simply check +dnl that off_t is big enough +define(WX_SYS_LARGEFILE_TEST, +[typedef struct { + unsigned int field: sizeof(off_t) == 8; +} wxlf; +]) + +dnl WX_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR) +define(WX_SYS_LARGEFILE_MACRO_VALUE, +[ + AC_CACHE_CHECK([for $1 value needed for large files], [$3], + [ + AC_TRY_COMPILE([#define $1 $2 + #include ], + WX_SYS_LARGEFILE_TEST, + [$3=$2], + [$3=no]) + ] + ) + + if test "$$3" != no; then + wx_largefile=yes + AC_DEFINE_UNQUOTED([$1], [$$3]) + fi +]) + +dnl AC_SYS_LARGEFILE +dnl ---------------- +dnl By default, many hosts won't let programs access large files; +dnl one must use special compiler options to get large-file access to work. +dnl For more details about this brain damage please see: +dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html +AC_DEFUN([AC_SYS_LARGEFILE], +[AC_ARG_ENABLE(largefile, + [ --disable-largefile omit support for large files]) +if test "$enable_largefile" != no; then + dnl _FILE_OFFSET_BITS==64 is needed for Linux, Solaris, ... + dnl _LARGE_FILES -- for AIX + wx_largefile=no + WX_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, ac_cv_sys_file_offset_bits) + if test "x$wx_largefile" != "xyes"; then + WX_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, ac_cv_sys_large_files) + fi + + AC_MSG_CHECKING(if large file support is available) + if test "x$wx_largefile" = "xyes"; then + AC_DEFINE(HAVE_LARGEFILE_SUPPORT) + fi + AC_MSG_RESULT($wx_largefile) +fi +]) + +dnl ----------end of largefile test------------------------------------ + + + +########################################################################### +# The rest of this file is basically the concatenation of libtool.m4 and +# ltdl.m4 from the libtool 1.4.2 package. Also pkg.m4 from the pkg-config +# 0.20 package. However, to work around a missing AM_CONDITIONAL macro, +# Bryce made the following change: +# +# Change these lines +# AM_CONDITIONAL(INSTALL_LTDL, test x"${enable_ltdl_install-no}" != xno) +# AM_CONDITIONAL(CONVENIENCE_LTDL, test x"${enable_ltdl_convenience-no}" != xno) +# to this +# if test x"${enable_ltdl_install-no}" != xno; then +# AC_DEFINE(INSTALL_LTDL) +# fi +# if test x"${enable_ltdl_convenience-no}" != xno; then +# AC_DEFINE(CONVENIENCE_LTDL) +# fi +# +# There is probably some way to get AM_CONDITIONAL defined, which would +# be better. + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +## Copyright 1996, 1997, 1998, 1999, 2000, 2001 +## Free Software Foundation, Inc. +## Originally by Gordon Matzigkeit , 1996 +## +## This program 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. +## +## 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. +## +## 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +## +## As a special exception to the GNU General Public License, if you +## distribute this file as part of a program that contains a +## configuration script generated by Autoconf, you may include it under +## the same distribution terms that you use for the rest of that program. + +# serial 47 AC_PROG_LIBTOOL +# Debian $Rev: 47 $ + + +# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) +# ----------------------------------------------------------- +# If this macro is not defined by Autoconf, define it here. +m4_ifdef([AC_PROVIDE_IFELSE], + [], + [m4_define([AC_PROVIDE_IFELSE], + [m4_ifdef([AC_PROVIDE_$1], + [$2], [$3])])]) + + +# AC_PROG_LIBTOOL +# --------------- +AC_DEFUN([AC_PROG_LIBTOOL], +[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl +dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX +dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. + AC_PROVIDE_IFELSE([AC_PROG_CXX], + [AC_LIBTOOL_CXX], + [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX + ])]) +dnl And a similar setup for Fortran 77 support + AC_PROVIDE_IFELSE([AC_PROG_F77], + [AC_LIBTOOL_F77], + [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 +])]) + +dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. +dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run +dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. + AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [ifdef([AC_PROG_GCJ], + [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([A][M_PROG_GCJ], + [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([LT_AC_PROG_GCJ], + [define([LT_AC_PROG_GCJ], + defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) +])])# AC_PROG_LIBTOOL + + +# _AC_PROG_LIBTOOL +# ---------------- +AC_DEFUN([_AC_PROG_LIBTOOL], +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl +AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl +AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl +AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Prevent multiple expansion +define([AC_PROG_LIBTOOL], []) +])# _AC_PROG_LIBTOOL + + +# AC_LIBTOOL_SETUP +# ---------------- +AC_DEFUN([AC_LIBTOOL_SETUP], +[AC_PREREQ(2.50)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl +AC_REQUIRE([AC_PROG_NM])dnl + +AC_REQUIRE([AC_PROG_LN_S])dnl +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! +AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([AC_EXEEXT])dnl +dnl + +AC_LIBTOOL_SYS_MAX_CMD_LEN +AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +AC_LIBTOOL_OBJDIR + +AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +_LT_AC_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] + +# Same as above, but do not quote variable references. +[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +AC_CHECK_TOOL(AR, ar, false) +AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; +esac + +AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +enable_win32_dll=yes, enable_win32_dll=no) + +AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +AC_ARG_WITH([pic], + [AC_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +AC_LIBTOOL_LANG_C_CONFIG +_LT_AC_TAGCONFIG +])# AC_LIBTOOL_SETUP + + +# _LT_AC_SYS_COMPILER +# ------------------- +AC_DEFUN([_LT_AC_SYS_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_AC_SYS_COMPILER + + +# _LT_AC_SYS_LIBPATH_AIX +# ---------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], +[AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_AC_SYS_LIBPATH_AIX + + +# _LT_AC_SHELL_INIT(ARG) +# ---------------------- +AC_DEFUN([_LT_AC_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_AC_SHELL_INIT + + +# _LT_AC_PROG_ECHO_BACKSLASH +# -------------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], +[_LT_AC_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +])])# _LT_AC_PROG_ECHO_BACKSLASH + + +# _LT_AC_LOCK +# ----------- +AC_DEFUN([_LT_AC_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw* | *-*-pw32*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; + ]) +esac + +need_locks="$enable_libtool_lock" + +])# _LT_AC_LOCK + + +# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], +[AC_REQUIRE([LT_AC_PROG_SED]) +AC_CACHE_CHECK([$1], [$2], + [$2=no + ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + $2=yes + fi + fi + $rm conftest* +]) + +if test x"[$]$2" = xyes; then + ifelse([$5], , :, [$5]) +else + ifelse([$6], , :, [$6]) +fi +])# AC_LIBTOOL_COMPILER_OPTION + + +# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ------------------------------------------------------------ +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], +[AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + else + $2=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + ifelse([$4], , :, [$4]) +else + ifelse([$5], , :, [$5]) +fi +])# AC_LIBTOOL_LINKER_OPTION + + +# AC_LIBTOOL_SYS_MAX_CMD_LEN +# -------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], +[# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + testring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos* | morphos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + *) + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$testring" 2>/dev/null` \ + = "XX$testring") >/dev/null 2>&1 && + new_result=`expr "X$testring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + testring=$testring$testring + done + testring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +])# AC_LIBTOOL_SYS_MAX_CMD_LEN + + +# _LT_AC_CHECK_DLFCN +# -------------------- +AC_DEFUN([_LT_AC_CHECK_DLFCN], +[AC_CHECK_HEADERS(dlfcn.h)dnl +])# _LT_AC_CHECK_DLFCN + + +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ------------------------------------------------------------------ +AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +}] +EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_unknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_AC_TRY_DLOPEN_SELF + + +# AC_LIBTOOL_DLOPEN_SELF +# ------------------- +AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +])# AC_LIBTOOL_DLOPEN_SELF + + +# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) +# --------------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler +AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + # According to Tom Tromey, Ian Lance Taylor reported there are C compilers + # that will create temporary files in the current directory regardless of + # the output directory. Thus, making CWD read-only will cause this test + # to fail, enabling locking or at least warning the user not to do parallel + # builds. + chmod -w . + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* +]) +])# AC_LIBTOOL_PROG_CC_C_O + + +# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) +# ----------------------------------------- +# Check to see if we can do hard links to lock some files if needed +AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], +[AC_REQUIRE([_LT_AC_LOCK])dnl + +hard_links="nottested" +if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS + + +# AC_LIBTOOL_OBJDIR +# ----------------- +AC_DEFUN([AC_LIBTOOL_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +])# AC_LIBTOOL_OBJDIR + + +# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) +# ---------------------------------------------- +# Check hardcoding attributes. +AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_AC_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ + test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \ + test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_AC_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_AC_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_AC_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH + + +# AC_LIBTOOL_SYS_LIB_STRIP +# ------------------------ +AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], +[striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) +fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +])# AC_LIBTOOL_SYS_LIB_STRIP + + +# AC_LIBTOOL_SYS_DYNAMIC_LINKER +# ----------------------------- +# PORTME Fill in your ld.so characteristics +AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], +[AC_MSG_CHECKING([dynamic linker characteristics]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no +])# AC_LIBTOOL_SYS_DYNAMIC_LINKER + + +# _LT_AC_TAGCONFIG +# ---------------- +AC_DEFUN([_LT_AC_TAGCONFIG], +[AC_ARG_WITH([tags], + [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], + [include additional configurations @<:@automatic@:>@])], + [tagnames="$withval"]) + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + AC_MSG_WARN([output file `$ofile' does not exist]) + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) + else + AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) + fi + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in + "") ;; + *) AC_MSG_ERROR([invalid tag name: $tagname]) + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + AC_MSG_ERROR([tag name \"$tagname\" already exists]) + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && test "X$CXX" != "Xno"; then + AC_LIBTOOL_LANG_CXX_CONFIG + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + AC_LIBTOOL_LANG_F77_CONFIG + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + AC_LIBTOOL_LANG_GCJ_CONFIG + else + tagname="" + fi + ;; + + RC) + AC_LIBTOOL_LANG_RC_CONFIG + ;; + + *) + AC_MSG_ERROR([Unsupported tag name: $tagname]) + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + AC_MSG_ERROR([unable to update list of available tagged configurations.]) + fi +fi +])# _LT_AC_TAGCONFIG + + +# AC_LIBTOOL_DLOPEN +# ----------------- +# enable checks for dlopen support +AC_DEFUN([AC_LIBTOOL_DLOPEN], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_DLOPEN + + +# AC_LIBTOOL_WIN32_DLL +# -------------------- +# declare package support for building win32 dll's +AC_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_WIN32_DLL + + +# AC_ENABLE_SHARED([DEFAULT]) +# --------------------------- +# implement the --enable-shared flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_SHARED], +[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([shared], + [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]AC_ENABLE_SHARED_DEFAULT) +])# AC_ENABLE_SHARED + + +# AC_DISABLE_SHARED +# ----------------- +#- set the default shared flag to --disable-shared +AC_DEFUN([AC_DISABLE_SHARED], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no) +])# AC_DISABLE_SHARED + + +# AC_ENABLE_STATIC([DEFAULT]) +# --------------------------- +# implement the --enable-static flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_STATIC], +[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([static], + [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]AC_ENABLE_STATIC_DEFAULT) +])# AC_ENABLE_STATIC + + +# AC_DISABLE_STATIC +# ----------------- +# set the default static flag to --disable-static +AC_DEFUN([AC_DISABLE_STATIC], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no) +])# AC_DISABLE_STATIC + + +# AC_ENABLE_FAST_INSTALL([DEFAULT]) +# --------------------------------- +# implement the --enable-fast-install flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_FAST_INSTALL], +[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([fast-install], + [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) +])# AC_ENABLE_FAST_INSTALL + + +# AC_DISABLE_FAST_INSTALL +# ----------------------- +# set the default to --disable-fast-install +AC_DEFUN([AC_DISABLE_FAST_INSTALL], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no) +])# AC_DISABLE_FAST_INSTALL + + +# AC_LIBTOOL_PICMODE([MODE]) +# -------------------------- +# implement the --with-pic flag +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +AC_DEFUN([AC_LIBTOOL_PICMODE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +pic_mode=ifelse($#,1,$1,default) +])# AC_LIBTOOL_PICMODE + + +# AC_PROG_EGREP +# ------------- +# This is predefined starting with Autoconf 2.54, so this conditional +# definition can be removed once we require Autoconf 2.54 or later. +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], +[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], + [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi]) + EGREP=$ac_cv_prog_egrep + AC_SUBST([EGREP]) +])]) + + +# AC_PATH_TOOL_PREFIX +# ------------------- +# find a file program which can recognise shared library +AC_DEFUN([AC_PATH_TOOL_PREFIX], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="ifelse([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +])# AC_PATH_TOOL_PREFIX + + +# AC_PATH_MAGIC +# ------------- +# find a file program which can recognise a shared library +AC_DEFUN([AC_PATH_MAGIC], +[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# AC_PATH_MAGIC + + +# AC_PROG_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([AC_PROG_LD], +[AC_ARG_WITH([gnu-ld], + [AC_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no]) +AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case "$host_cpu" in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + irix5* | nonstopux*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" + ;; + *) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1" + ;; + esac + lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux*) + case $host_cpu in + alpha* | hppa* | i*86 | ia64* | m68* | mips* | powerpc* | sparc* | s390* | sh*) + lt_cv_deplibs_check_method=pass_all ;; + *) + # glibc up to 2.1.1 does not perform some relocations on ARM + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; + esac + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' + lt_cv_file_magic_test_file=/shlib/libc.so + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=/lib/libc.so + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown +])# AC_DEPLIBS_CHECK_METHOD + + +# AC_PROG_NM +# ---------- +# find the pathname to a BSD-compatible name lister +AC_DEFUN([AC_PROG_NM], +[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + esac + fi + done + IFS="$lt_save_ifs" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi]) +NM="$lt_cv_path_NM" +])# AC_PROG_NM + + +# AC_CHECK_LIBM +# ------------- +# check for math library +AC_DEFUN([AC_CHECK_LIBM], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +])# AC_CHECK_LIBM + + +# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl convenience library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will +# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and +# top_srcdir appropriately in the Makefiles. +AC_DEFUN([AC_LIBLTDL_CONVENIENCE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case $enable_ltdl_convenience in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_CONVENIENCE + + +# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl installable library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-install to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided and an installed libltdl is not found, it is +# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' +# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single +# quotes!). If your package is not flat and you're not using automake, +# define top_builddir and top_srcdir appropriately in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN([AC_LIBLTDL_INSTALLABLE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, lt_dlinit, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + LTDLINCL= + fi + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_INSTALLABLE + + +# AC_LIBTOOL_CXX +# -------------- +# enable support for C++ libraries +AC_DEFUN([AC_LIBTOOL_CXX], +[AC_REQUIRE([_LT_AC_LANG_CXX]) +])# AC_LIBTOOL_CXX + + +# _LT_AC_LANG_CXX +# --------------- +AC_DEFUN([_LT_AC_LANG_CXX], +[AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([AC_PROG_CXXCPP]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) +])# _LT_AC_LANG_CXX + + +# AC_LIBTOOL_F77 +# -------------- +# enable support for Fortran 77 libraries +AC_DEFUN([AC_LIBTOOL_F77], +[AC_REQUIRE([_LT_AC_LANG_F77]) +])# AC_LIBTOOL_F77 + + +# _LT_AC_LANG_F77 +# --------------- +AC_DEFUN([_LT_AC_LANG_F77], +[AC_REQUIRE([AC_PROG_F77]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) +])# _LT_AC_LANG_F77 + + +# AC_LIBTOOL_GCJ +# -------------- +# enable support for GCJ libraries +AC_DEFUN([AC_LIBTOOL_GCJ], +[AC_REQUIRE([_LT_AC_LANG_GCJ]) +])# AC_LIBTOOL_GCJ + + +# _LT_AC_LANG_GCJ +# --------------- +AC_DEFUN([_LT_AC_LANG_GCJ], +[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], + [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], + [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], + [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) +])# _LT_AC_LANG_GCJ + + +# AC_LIBTOOL_RC +# -------------- +# enable support for Windows resource files +AC_DEFUN([AC_LIBTOOL_RC], +[AC_REQUIRE([LT_AC_PROG_RC]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) +])# AC_LIBTOOL_RC + + +# AC_LIBTOOL_LANG_C_CONFIG +# ------------------------ +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) +AC_DEFUN([_LT_AC_LANG_C_CONFIG], +[lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + +_LT_AC_SYS_COMPILER + +# +# Check for any special shared library compilation flags. +# +_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' + ;; + esac +fi +if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then + AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) + if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$]_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[[ ]]" >/dev/null; then : + else + AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) + _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no + fi +fi + + +# +# Check to make sure the static flag actually works. +# +AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), + [], + [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +# Report which librarie types wil actually be built +AC_MSG_CHECKING([if libtool supports shared libraries]) +AC_MSG_RESULT([$can_build_shared]) + +AC_MSG_CHECKING([whether to build shared libraries]) +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + darwin* | rhapsody*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; +esac +AC_MSG_RESULT([$enable_shared]) + +AC_MSG_CHECKING([whether to build static libraries]) +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +AC_MSG_RESULT([$enable_static]) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC="$lt_save_CC" +])# AC_LIBTOOL_LANG_C_CONFIG + + +# AC_LIBTOOL_LANG_CXX_CONFIG +# -------------------------- +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) +AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], +[AC_LANG_PUSH(C++) +AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([AC_PROG_CXXCPP]) + +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_AC_TAGVAR(allow_undefined_flag, $1)= +_LT_AC_TAGVAR(always_export_symbols, $1)=no +_LT_AC_TAGVAR(archive_expsym_cmds, $1)= +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_direct, $1)=no +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no +_LT_AC_TAGVAR(hardcode_automatic, $1)=no +_LT_AC_TAGVAR(module_cmds, $1)= +_LT_AC_TAGVAR(module_expsym_cmds, $1)= +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_AC_TAGVAR(no_undefined_flag, $1)= +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Dependencies to place before and after the object being linked: +_LT_AC_TAGVAR(predep_objects, $1)= +_LT_AC_TAGVAR(postdep_objects, $1)= +_LT_AC_TAGVAR(predeps, $1)= +_LT_AC_TAGVAR(postdeps, $1)= +_LT_AC_TAGVAR(compiler_lib_search_path, $1)= + +# Source file extension for C++ test sources. +ac_ext=cc + +# Object file extension for compiled C++ test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_COMPILER + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' +else + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + AC_PROG_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +_LT_AC_TAGVAR(ld_shlibs, $1)=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + dgux*) + case $cc_basename in + ec++) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + freebsd-elf*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + ;; + gnu*) + ;; + hpux9*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case "$host_cpu" in + ia64*|hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC) + # SGI C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + linux*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc) + # Intel C++ + with_gnu_ld=yes + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + cxx) + # Compaq C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + m88k*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + mvs*) + case $cc_basename in + cxx) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + osf3*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ + $rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + sco*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + lcc) + # Lucid + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; +esac +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_AC_TAGVAR(GCC, $1)="$GXX" +_LT_AC_TAGVAR(LD, $1)="$LD" + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +AC_LIBTOOL_POSTDEP_PREDEP($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +])# AC_LIBTOOL_LANG_CXX_CONFIG + +# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) +# ------------------------ +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" +ifelse([$1], [], +[#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 1996 +# +# This program 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. +# +# 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. +# +# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG], +[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) + +# Is the compiler the GNU C compiler? +with_gcc=$_LT_AC_TAGVAR(GCC, $1) + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_[]_LT_AC_TAGVAR(LD, $1) + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP="$STRIP" + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext='$shrext' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) + +# Commands used to build and install a shared archive. +archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) +archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) +module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" + +# Set to yes if exported symbols are required. +always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) + +# The commands to list exported symbols. +export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) + +# Symbols that must always be exported. +include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) + +ifelse([$1],[], +[# ### END LIBTOOL CONFIG], +[# ### END LIBTOOL TAG CONFIG: $tagname]) + +__EOF__ + +ifelse([$1],[], [ + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +]) +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + test -f Makefile && make "$ltmain" +fi +])# AC_LIBTOOL_CONFIG + + +# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + +_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI + + +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +# --------------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_NM]) +AC_REQUIRE([AC_OBJEXT]) +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris* | sysv5*) + symcode='[[BDRT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[[]] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + + +# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) +# --------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], +[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) + ifelse([$1],[CXX],[ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC) + # KAI C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + icpc) + # Intel C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + cxx) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC) + # Rational C++ 2.4.1 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx) + # Digital/Compaq C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc) + # Lucid + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + newsos6) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + ccc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' + ;; + + solaris*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sunos4*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + uts4*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then + AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), + [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" + ;; +esac +]) + + +# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) +# ------------------------------------ +# See if the linker supports building shared libraries. +AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], +[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +ifelse([$1],[CXX],[ + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +],[ + runpath_var= + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)= + _LT_AC_TAGVAR(archive_expsym_cmds, $1)= + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= + _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown + _LT_AC_TAGVAR(hardcode_automatic, $1)=no + _LT_AC_TAGVAR(module_cmds, $1)= + _LT_AC_TAGVAR(module_expsym_cmds, $1)= + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_AC_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sunos4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + linux*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds" + fi + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + # see comment about different semantics on the GNU ld section + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + bsdi4*) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + dgux*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4.2uw2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv5*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_AC_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac +])# AC_LIBTOOL_PROG_LD_SHLIBS + + +# _LT_AC_FILE_LTDLL_C +# ------------------- +# Be careful that the start marker always follows a newline. +AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ +])# _LT_AC_FILE_LTDLL_C + + +# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) +# --------------------------------- +AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) + + +# old names +AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) +AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) +AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) + +# This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL]) + +AC_DEFUN([LT_AC_PROG_GCJ], +[AC_CHECK_TOOL(GCJ, gcj, no) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS) +]) + +AC_DEFUN([LT_AC_PROG_RC], +[AC_CHECK_TOOL(RC, windres, no) +]) + +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +# LT_AC_PROG_SED +# -------------- +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +AC_DEFUN([LT_AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && break + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +SED=$lt_cv_path_SED +]) +AC_MSG_RESULT([$SED]) +]) + +## ltdl.m4 - Configure ltdl for the target system. -*-Autoconf-*- +## Copyright (C) 1999-2000 Free Software Foundation, Inc. +## +## This program 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. +## +## 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. +## +## 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +## +## As a special exception to the GNU General Public License, if you +## distribute this file as part of a program that contains a +## configuration script generated by Autoconf, you may include it under +## the same distribution terms that you use for the rest of that program. + +# serial 6 AC_LIB_LTDL +# Debian $Rev: 42 $ + +# AC_WITH_LTDL +# ------------ +# Clients of libltdl can use this macro to allow the installer to +# choose between a shipped copy of the ltdl sources or a preinstalled +# version of the library. +AC_DEFUN([AC_WITH_LTDL], +[AC_REQUIRE([AC_LIB_LTDL]) +AC_SUBST([LIBLTDL]) +AC_SUBST([INCLTDL]) + +# Unless the user asks us to check, assume no installed ltdl exists. +use_installed_libltdl=no + +AC_ARG_WITH([included_ltdl], + [ --with-included-ltdl use the GNU ltdl sources included here]) + +if test "x$with_included_ltdl" != xyes; then + # We are not being forced to use the included libltdl sources, so + # decide whether there is a useful installed version we can use. + AC_CHECK_HEADER([ltdl.h], + [AC_CHECK_LIB([ltdl], [lt_dlcaller_register], + [with_included_ltdl=no], + [with_included_ltdl=yes]) + ]) +fi + +if test "x$enable_ltdl_install" != xyes; then + # If the user did not specify an installable libltdl, then default + # to a convenience lib. + AC_LIBLTDL_CONVENIENCE +fi + +if test "x$with_included_ltdl" = xno; then + # If the included ltdl is not to be used. then Use the + # preinstalled libltdl we found. + AC_DEFINE([HAVE_LTDL], 1, + [Define this if a modern libltdl is already installed]) + LIBLTDL=-lltdl +fi + +# Report our decision... +AC_MSG_CHECKING([whether to use included libltdl]) +AC_MSG_RESULT([$with_included_ltdl]) + +AC_CONFIG_SUBDIRS([libltdl]) +])# AC_WITH_LTDL + + +# AC_LIB_LTDL +# ----------- +# Perform all the checks necessary for compilation of the ltdl objects +# -- including compiler checks and header checks. +AC_DEFUN([AC_LIB_LTDL], +[AC_PREREQ(2.50) +AC_REQUIRE([AC_PROG_CC]) +AC_REQUIRE([AC_C_CONST]) +AC_REQUIRE([AC_HEADER_STDC]) +AC_REQUIRE([AC_HEADER_DIRENT]) +AC_REQUIRE([_LT_AC_CHECK_DLFCN]) +AC_REQUIRE([AC_LTDL_ENABLE_INSTALL]) +AC_REQUIRE([AC_LTDL_SHLIBEXT]) +AC_REQUIRE([AC_LTDL_SHLIBPATH]) +AC_REQUIRE([AC_LTDL_SYSSEARCHPATH]) +AC_REQUIRE([AC_LTDL_OBJDIR]) +AC_REQUIRE([AC_LTDL_DLPREOPEN]) +AC_REQUIRE([AC_LTDL_DLLIB]) +AC_REQUIRE([AC_LTDL_SYMBOL_USCORE]) +AC_REQUIRE([AC_LTDL_DLSYM_USCORE]) +AC_REQUIRE([AC_LTDL_SYS_DLOPEN_DEPLIBS]) +AC_REQUIRE([AC_LTDL_FUNC_ARGZ]) + +AC_CHECK_HEADERS([assert.h ctype.h errno.h malloc.h memory.h stdlib.h \ + stdio.h unistd.h]) +AC_CHECK_HEADERS([dl.h sys/dl.h dld.h mach-o/dyld.h]) +AC_CHECK_HEADERS([string.h strings.h], [break]) + +AC_CHECK_FUNCS([strchr index], [break]) +AC_CHECK_FUNCS([strrchr rindex], [break]) +AC_CHECK_FUNCS([memcpy bcopy], [break]) +AC_CHECK_FUNCS([memmove strcmp]) +AC_CHECK_FUNCS([closedir opendir readdir]) +])# AC_LIB_LTDL + + +# AC_LTDL_ENABLE_INSTALL +# ---------------------- +AC_DEFUN([AC_LTDL_ENABLE_INSTALL], +[AC_ARG_ENABLE([ltdl-install], + [AC_HELP_STRING([--enable-ltdl-install], [install libltdl])]) + +if test x"${enable_ltdl_install-no}" != xno; then + AC_DEFINE(INSTALL_LTDL) +fi +if test x"${enable_ltdl_convenience-no}" != xno; then + AC_DEFINE(CONVENIENCE_LTDL) +fi +])])# AC_LTDL_ENABLE_INSTALL + + +# AC_LTDL_SYS_DLOPEN_DEPLIBS +# -------------------------- +AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_CACHE_CHECK([whether deplibs are loaded by dlopen], + [libltdl_cv_sys_dlopen_deplibs], + [# PORTME does your system automatically load deplibs for dlopen? + # or its logical equivalent (e.g. shl_load for HP-UX < 11) + # For now, we just catch OSes we know something about -- in the + # future, we'll try test this programmatically. + libltdl_cv_sys_dlopen_deplibs=unknown + case "$host_os" in + aix3*|aix4.1.*|aix4.2.*) + # Unknown whether this is true for these versions of AIX, but + # we want this `case' here to explicitly catch those versions. + libltdl_cv_sys_dlopen_deplibs=unknown + ;; + aix[[45]]*) + libltdl_cv_sys_dlopen_deplibs=yes + ;; + darwin*) + # Assuming the user has installed a libdl from somewhere, this is true + # If you are looking for one http://www.opendarwin.org/projects/dlcompat + libltdl_cv_sys_dlopen_deplibs=yes + ;; + kfreebsd*-gnu) + libltdl_cv_sys_dlopen_deplibs=yes + ;; + gnu*) + libltdl_cv_sys_dlopen_deplibs=yes + ;; + hpux10*|hpux11*) + libltdl_cv_sys_dlopen_deplibs=yes + ;; + irix[[12345]]*|irix6.[[01]]*) + # Catch all versions of IRIX before 6.2, and indicate that we don't + # know how it worked for any of those versions. + libltdl_cv_sys_dlopen_deplibs=unknown + ;; + irix*) + # The case above catches anything before 6.2, and it's known that + # at 6.2 and later dlopen does load deplibs. + libltdl_cv_sys_dlopen_deplibs=yes + ;; + linux*) + libltdl_cv_sys_dlopen_deplibs=yes + ;; + netbsd*) + libltdl_cv_sys_dlopen_deplibs=yes + ;; + openbsd*) + libltdl_cv_sys_dlopen_deplibs=yes + ;; + osf[[1234]]*) + # dlopen did load deplibs (at least at 4.x), but until the 5.x series, + # it did *not* use an RPATH in a shared library to find objects the + # library depends on, so we explictly say `no'. + libltdl_cv_sys_dlopen_deplibs=no + ;; + osf5.0|osf5.0a|osf5.1) + # dlopen *does* load deplibs and with the right loader patch applied + # it even uses RPATH in a shared library to search for shared objects + # that the library depends on, but there's no easy way to know if that + # patch is installed. Since this is the case, all we can really + # say is unknown -- it depends on the patch being installed. If + # it is, this changes to `yes'. Without it, it would be `no'. + libltdl_cv_sys_dlopen_deplibs=unknown + ;; + osf*) + # the two cases above should catch all versions of osf <= 5.1. Read + # the comments above for what we know about them. + # At > 5.1, deplibs are loaded *and* any RPATH in a shared library + # is used to find them so we can finally say `yes'. + libltdl_cv_sys_dlopen_deplibs=yes + ;; + solaris*) + libltdl_cv_sys_dlopen_deplibs=yes + ;; + esac + ]) +if test "$libltdl_cv_sys_dlopen_deplibs" != yes; then + AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1], + [Define if the OS needs help to load dependent libraries for dlopen().]) +fi +])# AC_LTDL_SYS_DLOPEN_DEPLIBS + + +# AC_LTDL_SHLIBEXT +# ---------------- +AC_DEFUN([AC_LTDL_SHLIBEXT], +[AC_REQUIRE([AC_LIBTOOL_SYS_DYNAMIC_LINKER]) +AC_CACHE_CHECK([which extension is used for loadable modules], + [libltdl_cv_shlibext], +[ +module=yes +eval libltdl_cv_shlibext=$shrext + ]) +if test -n "$libltdl_cv_shlibext"; then + AC_DEFINE_UNQUOTED(LTDL_SHLIB_EXT, "$libltdl_cv_shlibext", + [Define to the extension used for shared libraries, say, ".so".]) +fi +])# AC_LTDL_SHLIBEXT + + +# AC_LTDL_SHLIBPATH +# ----------------- +AC_DEFUN([AC_LTDL_SHLIBPATH], +[AC_REQUIRE([AC_LIBTOOL_SYS_DYNAMIC_LINKER]) +AC_CACHE_CHECK([which variable specifies run-time library path], + [libltdl_cv_shlibpath_var], [libltdl_cv_shlibpath_var="$shlibpath_var"]) +if test -n "$libltdl_cv_shlibpath_var"; then + AC_DEFINE_UNQUOTED(LTDL_SHLIBPATH_VAR, "$libltdl_cv_shlibpath_var", + [Define to the name of the environment variable that determines the dynamic library search path.]) +fi +])# AC_LTDL_SHLIBPATH + + +# AC_LTDL_SYSSEARCHPATH +# --------------------- +AC_DEFUN([AC_LTDL_SYSSEARCHPATH], +[AC_REQUIRE([AC_LIBTOOL_SYS_DYNAMIC_LINKER]) +AC_CACHE_CHECK([for the default library search path], + [libltdl_cv_sys_search_path], + [libltdl_cv_sys_search_path="$sys_lib_dlsearch_path_spec"]) +if test -n "$libltdl_cv_sys_search_path"; then + sys_search_path= + for dir in $libltdl_cv_sys_search_path; do + if test -z "$sys_search_path"; then + sys_search_path="$dir" + else + sys_search_path="$sys_search_path$PATH_SEPARATOR$dir" + fi + done + AC_DEFINE_UNQUOTED(LTDL_SYSSEARCHPATH, "$sys_search_path", + [Define to the system default library search path.]) +fi +])# AC_LTDL_SYSSEARCHPATH + + +# AC_LTDL_OBJDIR +# -------------- +AC_DEFUN([AC_LTDL_OBJDIR], +[AC_CACHE_CHECK([for objdir], + [libltdl_cv_objdir], + [libltdl_cv_objdir="$objdir" + if test -n "$objdir"; then + : + else + rm -f .libs 2>/dev/null + mkdir .libs 2>/dev/null + if test -d .libs; then + libltdl_cv_objdir=.libs + else + # MS-DOS does not allow filenames that begin with a dot. + libltdl_cv_objdir=_libs + fi + rmdir .libs 2>/dev/null + fi + ]) +AC_DEFINE_UNQUOTED(LTDL_OBJDIR, "$libltdl_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# AC_LTDL_OBJDIR + + +# AC_LTDL_DLPREOPEN +# ----------------- +AC_DEFUN([AC_LTDL_DLPREOPEN], +[AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE]) +AC_CACHE_CHECK([whether libtool supports -dlopen/-dlpreopen], + [libltdl_cv_preloaded_symbols], + [if test -n "$lt_cv_sys_global_symbol_pipe"; then + libltdl_cv_preloaded_symbols=yes + else + libltdl_cv_preloaded_symbols=no + fi + ]) +if test x"$libltdl_cv_preloaded_symbols" = xyes; then + AC_DEFINE(HAVE_PRELOADED_SYMBOLS, 1, + [Define if libtool can extract symbol lists from object files.]) +fi +])# AC_LTDL_DLPREOPEN + + +# AC_LTDL_DLLIB +# ------------- +AC_DEFUN([AC_LTDL_DLLIB], +[LIBADD_DL= +AC_SUBST(LIBADD_DL) +AC_LANG_PUSH([C]) + +AC_CHECK_FUNC([shl_load], + [AC_DEFINE([HAVE_SHL_LOAD], [1], + [Define if you have the shl_load function.])], + [AC_CHECK_LIB([dld], [shl_load], + [AC_DEFINE([HAVE_SHL_LOAD], [1], + [Define if you have the shl_load function.]) + LIBADD_DL="$LIBADD_DL -ldld"], + [AC_CHECK_LIB([dl], [dlopen], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + LIBADD_DL="-ldl" libltdl_cv_lib_dl_dlopen="yes"], + [AC_TRY_LINK([#if HAVE_DLFCN_H +# include +#endif + ], + [dlopen(0, 0);], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) libltdl_cv_func_dlopen="yes"], + [AC_CHECK_LIB([svld], [dlopen], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + LIBADD_DL="-lsvld" libltdl_cv_func_dlopen="yes"], + [AC_CHECK_LIB([dld], [dld_link], + [AC_DEFINE([HAVE_DLD], [1], + [Define if you have the GNU dld library.]) + LIBADD_DL="$LIBADD_DL -ldld"], + [AC_CHECK_FUNC([_dyld_func_lookup], + [AC_DEFINE([HAVE_DYLD], [1], + [Define if you have the _dyld_func_lookup function.])]) + ]) + ]) + ]) + ]) + ]) +]) + +if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes +then + lt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBADD_DL" + AC_CHECK_FUNCS([dlerror]) + LIBS="$lt_save_LIBS" +fi +AC_LANG_POP +])# AC_LTDL_DLLIB + + +# AC_LTDL_SYMBOL_USCORE +# --------------------- +# does the compiler prefix global symbols with an underscore? +AC_DEFUN([AC_LTDL_SYMBOL_USCORE], +[AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE]) +AC_CACHE_CHECK([for _ prefix in compiled symbols], + [ac_cv_sys_symbol_underscore], + [ac_cv_sys_symbol_underscore=no + cat > conftest.$ac_ext < $ac_nlist) && test -s "$ac_nlist"; then + # See whether the symbols have a leading underscore. + if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then + ac_cv_sys_symbol_underscore=yes + else + if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then + : + else + echo "configure: cannot find nm_test_func in $ac_nlist" >&AC_FD_CC + fi + fi + else + echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC + fi + else + echo "configure: failed program was:" >&AC_FD_CC + cat conftest.c >&AC_FD_CC + fi + rm -rf conftest* + ]) +])# AC_LTDL_SYMBOL_USCORE + + +# AC_LTDL_DLSYM_USCORE +# -------------------- +AC_DEFUN([AC_LTDL_DLSYM_USCORE], +[AC_REQUIRE([AC_LTDL_SYMBOL_USCORE]) +if test x"$ac_cv_sys_symbol_underscore" = xyes; then + if test x"$libltdl_cv_func_dlopen" = xyes || + test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then + AC_CACHE_CHECK([whether we have to add an underscore for dlsym], + [libltdl_cv_need_uscore], + [libltdl_cv_need_uscore=unknown + save_LIBS="$LIBS" + LIBS="$LIBS $LIBADD_DL" + _LT_AC_TRY_DLOPEN_SELF( + [libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes], + [], [libltdl_cv_need_uscore=cross]) + LIBS="$save_LIBS" + ]) + fi +fi + +if test x"$libltdl_cv_need_uscore" = xyes; then + AC_DEFINE(NEED_USCORE, 1, + [Define if dlsym() requires a leading underscore in symbol names.]) +fi +])# AC_LTDL_DLSYM_USCORE + +# AC_LTDL_FUNC_ARGZ +# ----------------- +AC_DEFUN([AC_LTDL_FUNC_ARGZ], +[AC_CHECK_HEADERS([argz.h]) + +AC_CHECK_TYPES([error_t], + [], + [AC_DEFINE([error_t], [int], + [Define to a type to use for `error_t' if it is not otherwise available.])], + [#if HAVE_ARGZ_H +# include +#endif]) + +AC_CHECK_FUNCS([argz_append argz_create_sep argz_insert argz_next argz_stringify]) +])# AC_LTDL_FUNC_ARGZ + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant . +# +# This program 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. +# +# 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. +# +# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi + +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_ifval([$2], [$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$PKG_CONFIG"; then + if test -n "$$1"; then + pkg_cv_[]$1="$$1" + else + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + fi +else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT +])], + [$4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +])# PKG_CHECK_MODULES diff --git a/bochs/bios/BIOS-bochs-latest b/bochs/bios/BIOS-bochs-latest new file mode 100644 index 0000000000000000000000000000000000000000..88771631128bf1cb8f04b56991fbdf55e1f96b68 GIT binary patch literal 131072 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 S{D0s$GPhAQdrzXZpZ-5J?Q_Hc literal 0 HcmV?d00001 diff --git a/bochs/bios/BIOS-bochs-legacy b/bochs/bios/BIOS-bochs-legacy new file mode 100644 index 0000000000000000000000000000000000000000..dc03df3bce28172d625e81d28d473572155fe844 GIT binary patch literal 65536 zcmcG134ByV@_$b^XHg(T~%FOeN=UI zb-$jQT)$^ejK0}DA#UY2d5Lbjbyb<$9_{+7*dE(>^6i;1Q>V-*ze&<`pX{Cx52}s< zDz`m$)gHG!&h=&E$-n3JXpy{A%jAyNgXnX*6VV=bZnQgQd3l7pV~^>w*dT;G*2OrK z7Sm%o#2V5&YDn)H5#>W7qlUD@x1*2WFN9;$p+rZkJ&sL!;tB{q;=Gg*2K%V`W*n>&&6fp(X6l4mKD}TEJEWuz#&>D9`wz z_GB36j30)$XGD;|L);fQYEK%>QYX#LzjNW8_uV@@C1c>A%Z8?;rlgLZoi}%Q%AoX& zj7!opE*Uf=CH?Z@mkk=8J}4zs1paij&|hH@A|s+_1mF({F(@)CQbdXeg}Bt(+X~o2 zLJW>djl$EzLR=QzCmK(W2r(okH>P`xcvOg?v3+9!TP(z|Ru{Lz(-I*rkLwqQrvf3; zTVK=~PfLXu5I-}%N4!`j#E3Ti+W@v)h}eYKge3`h7OiZ;M&Cl*pExnGZK6ob5{ug2 z+_qy|(KbuWO}Zv2DoG?|i3RN@wM%Lz+GUBnMyFU)L`s%$^tAVk?kRd^iQ9W! z+bgD*=#?ez=sl))Y;Vy!OWc(@E;TMyq-Ke``&`$jbsy0uOU&y#zHfYA(Kkz6apCX_ zWjPo2>(x&_&AMpuMS-&A(=GiU>EEqCJwKE-Ev-wMNXrrr445*Y(*Q9bOWZba)WFDr zVqliYzhv?y9WD`4{CW~3(E<9Z+ zZWgn}-FUi6OcA$=d3eeaQ^jrK9z2Z{)5IKcFP^Rz)5TnIAD%{uTZBW*$J1yrL)5MzdoAp$&&y?m@#K~Dq54H!o-{JC!Mbz&i7$6q#{04YLTKjeCm zM^F7H^q)X5{JA0H2H|9E_MmJ6qzEzb(upFUpC+YGQm~wXIqHeN!v5Sc`H{&Av{F1K zT*8f1p(ql?;&CBh87H|XTdStAwW7zP@-ds9i|x_JrYZYLX&BbyDqU>19-a^U;rlr! zCoAQ%r?1HN#EER}C%>!86M;l)B(_i@9uMEsLmNDNg$K?&e!S<+*)Dst-k!6)>mNNj zwO~b=GdiP;DBSkuF~F`Yb5?jPLgfkA)nXV^W)lFp4N!IfhWVgKnq8U=0&vU#${aub zb@}7p(_E4BVFK!tv2R2GfwJvu5~lJqAM zv+bn_T95kwUW6mf=M`bAM4wNDH;F`vuzYhP`aNS`4hibcjV)PRr#*j$@b*SmE}Es$ zo!hKkd?v56KR+I|RZY`Kjj<6`i3@I>8)VsWXdN^QwN89+>!cH!ODkF2sJ&AcT;_9i zz~y9n(v>WA?%ev4#iz8HfXC)=+yB|Ld~>wfa(ahiyB`CBy9pTTl`Qm%KOg_1wJ8KD zvimWTe=@6D{c;05g^Yc&Zk~D8?2NK(?Xz0fP7u57r(C%;rwr&i16u9MJ>j;Wa_82R zEUwmms$JOEZLfCco*?Odt##S!T)FkKnW*iy0YVL@rv&n>t<6s|D5|x06oup>OU)?D z*hg*hV6E-(NBs4FBZ)o2vaLg&wbY_Vq?aKjwsk1nOd0}>g(gB{J5k;HKw-5XP|v&w z-G)(&HlV?Lg*`gI!mRj_lH6!lZk_g0qsv|c#kM!n2kTHwW{k5dn!#g%0xfGmLwK8h z&LPX8mD5o5-5H67&g|n%;8JBq-}RBG(8@B~ipvLFc82Xyx%tvNeoM?{~^@Nl_Ib%JukvO79 zdq&bXC@{+E^^tCSJ?WYYmgQ`Edu8ZrKSV;DEjw(qpW1{LG7c{$d-dq zNyFiwRv?okM-JqO(=U>;wUG1S0BJuW^&J$lI%((3GA5AaG}kWoMKz~ z3Z$0(5c?nd;U3iwXVP^Ucfi1S#KpWJ`Q$Q1XE%JEg;OUK8 zOyM*Iwhm0*KYK(9k@q*qUogoZAadew^UOl-JCT&cf!td>Z^Mxw-m^JdSkdE6UTG~A z4L(rjSd^^ATESfACUYVsZ)0XZS|deq21$+uB4uwyGMp)~ZWsu`EhqxK}+p7F`n)%0`Pe$^!QVkhba?xS?d$U?rftykEa7euG?3X|Fc5VIlRS^4uDwXbwEN2$eR z_O*84PnZ4c@#Cq9ztkhOs#Ds&Q?O$--d?KD+pz(Of-Gc*cad^w9+22pyl2rqKUHM^ zw%Gn{W}$868VmCOsZk$tPLQIMR)_O0oarlhhLzt*~u zsEo?W_Qoh?g=1f@d=JVN7kqnEF~{aZNhv8)AO>I0BWuSAALy(NUxVdaqP{@rq%}5zbMYXh;*KseV11519O5)dfE8D zpz-%=ZGqy(Zz{=Ui1&L{Vm?ZY^=?(EJCHK$AO^pzgLOot$ZzBIsyd850ekkY$}kiO z5Tcd~;bul-+}pf=Rk*Ie>216ZsboCmTci^HKZC68%>YKDb&eQ7?&-)5+>JPP!Co9VV9JtO6 zG@ICz^e3uWQ5!Ow$@}5RMz&@|x~MRNcNTa@^E!oA%$_St^-YD}%tI+yr zzW>5qc&COb(s)OeWnHH2*0~--W5>ST4%mhWvkU-EeitNux#D^$uQ)2)Q z1^|uj{N|F}M(x!~IER@QXX|2nO=>}r{j~2{EdQ;U5zh7uflX8VlrF4B2{fonq# z6iE&c={Hh->)A9xjP!J(i3+313gr_I8WbNzEql7yei~SGDK&sJ0GJ|ZzJBpg9zt|v zIslM{34o zxR3zE;$oTZ$OQAjB25CiO8{65lz=u2uz^Lo1XTW^SPYWsU6l4{U@=$%_Avm9X3r1_ z*uns8UwDQ|z-tDJ;WGUc6Wjq7nG)~<17?B6l@jn61K<{VvLqmv0IUcwboAZeTi0g! zX2c;eW9-n13QxoQ;W5=xRCubX7|DS7RVFqTEUd1=x-hIVvPTXxwx)@;RosO&O;I%S z_9SRAIP&-@)gww@#RTOB6Glf6+H(_SsB6l~%GUmbep@N}!X%O4@M|!HNVYRT<%uGa z&w?RD@=kCbCiyEtj6(8%$0S~OqRA{{E(88V#ZEM3-eg;OgQd9e&!)_`Z7Z*_&@9a@ z6Fv>ZLv~mQnsBw!_|c=!UCVC4g`cSmD_moMD%@gQ`GerX@$|J|3CRyBXQFB;GCY3m zeFhwt0J12rG2j^LP~DW7?Ce)uc)Tf7ccysILM_Ta9#Tc?bBP|RoKE!kM!sXzSt+!{ zY%yOl=NrJ~_?>;Y9KZ7do-NTB;m!0rEV68-aLnt#z@e!xw%2Dy*jBz7wS04x#~)s* znpam7o3qMLv*S`imaMLC%F*7cXCm5at??zY?YQHaO zbW0v{(W9{>9BmAm=Cg2rQ_1RS%{iJKXx|~AgOU4yv;uh%kiQbrRd@iPMu^k_pl>Cp z5+DJpNPs?-po0KK15|w|TU#eV6#%^o&@TWzL!dr_Jm$eAtG@vBD?rcuB3-}2BTcT= zRUrQoh<^c5VIU3zp*87!N>(ob>KUN^ZJ=Zxo}&sS**ROiA4-odM$IwELkENMXksM6 zzOxBb*Bm|w4*ri1Nb6z_0p+<=NbJEdta2m1kl4yFtnwrNF0mD1Smj6*N^Dh=|KlTJ z6v~y@wjZv7|6>glhr=k8Gx3h3r~t)5{D&McWYiLD9kabJs)@)AjYyEd9a_}o7)(=t zBPIVuvQ3RFDm>YwcPs{gY%N(^pa2^~2zr3x{YGdaB@_{cHMnx;p8t(|YVUKZ z{MIPniu6+|-9TekALMnbw9e^X-W4jnkJCwdVw%WXpJvJX690d|{{vL8Z??skXYpJm zT!j@)_~L09Ccc9f@DcZXNDvaBt=4E5Q#9@omJT0eOy>&lW!xeCCW<_&IRtm$|j=p z_>apByCMD_i2p;A7QL@z-QK2r_#ekzAj9fK@>V$#RfU6coY;$j64=Hm3_{(4(qoB@ z-h;~Aq0uvmfeku*vOr4&9G6yv9wDrY_UN7T4rz!r{IxmFVq5V%KJ&hyr;&a|0?`DT zuM#6JF!H>4s_%M0;o@jKhN`3T=b!wQwJls@ltaHjV#75?dGt3Dmbqf&Vf+Po$vq{C z7fH)EW7%7u8EIQtV4>wHCZkYMl)*lF0PN0Xu)imyG`4jI&SS7&GY$5-Xv1KSMN5#u zZVwHI!ES(s{qO)RI#^m$dlVHOg*l{|;1vL`W?+aFCu>Poya4FlgbudidXq<>KQ*Y} z(X&-h)vO%}UtCyqHi0sVCw^f9{cHkd6n78-nV!&=Q$}$sXJ^O4T&}29$qN$2%Nwv* zzIi+P!WWO-+TfX28Ms|P@gx!KP2awU)>Xl@%GA9nY2S<5SwUN~8$3-~=RK@h#tic! z+HCwU+1hc^?(CA)FCm?Y^skgouPoY}UKUrlz6smjXueWgQQ_}Rdaq)9(nz9Z|Ia%s zdIN=tEJANf2w1=0(a^t>_1g`X6qAwfVK_gBkp=prTd+*aKqlis{p$r`?9qU zh`h8nm)F-b5GoMH^WPv^MMQ)!`DLao`aw_7ghNg3Nrqhk%6S@yr9yhDG| zBfaTAQglnlWLRgEK;CTYf}MX}n~6kM5R& zWe~Nm8iPXBVBc=kVApQ51_u>kY)duRp^&=N$ChgF(B5qAg5Vm2YKPMJhM%c}qnwz+ zrF@?#&QB3%YBC9aU4b8B@NiS=6(see0jb@JZW8FQQICn3Ct%x(8+lSl^e^8$2mv$5 zf;dJ4z9^0{@dTS?GY0WEgrW!q+RF$-JSaibgdQiY{m{2_3FduRl~_UQaCQW4096nX zI4lSe+Ju8*KZ9?q1?_dk_A_U#1e@73P=qB2r`CZ7C9d9sRWwd7@G`F}!93Wk#YP7? z;@VHgAQUeY6~&pKK!GAn2T{e^mQqe5#$a2q0zr;CHrVD;(%#5LcqD^HTK+x%69s7z zT5069-(#GtMdSg<IPzT730K&;o&!b{_F43q?z+t4S!mtpOs%xP;|YGz93*00feZ zs%25RszEc#j1z`NWb;SH2DfXiYS$XbaaOyoljLaEAe?H~Vu{1?oj@b0>Esqd71>XE zL@dPvDxlu-}9LR&|nZ2aR67<;)X$5fh3oS=e?De~; zAt}JaE1?)N;|R6{cU;zP?zjY;jaqrT1!0^K!m_}ObpO@0Q#-K3Imm5KcIS4`cJ6Rq z$dR6s#fh482QAOMB9WrT$FOHqviOL0$Bq)m3EQ&I1Vn`tS+FlZasjbL73q~2*8~Lg z8wpKx=O#Tv7vGKnr8+okbl<9x9T#o+{?YLyRU5=F|9zn0R)_Bh#Y+yqY&2JLl0nt*1-+2a+SqBzqfU$lxG7uQkR&=ZQl#8AN3z;@hajv9*ewW7^kj2b2VPoRUq(M#pL*6M`S^xCC_^D9zF7;;~v-I ziyyc5n^9~(1*3?#)hP&QjOG_05cSy@^o}7Hsq1|dmo?;CvXkWk8P3)Z-`~%8%+s~uur?;7keq>vaqCdW^1w~)7 zEnLxSV17_Qn4(umXp4%z8MuI=Uw~q$t4Yz{Cd|1My+k6doD%)2$*n1e+{tz ztmqGa``;;g4$*}w`p?k)AVuFIlcu7tr*x>Izd@jIMSoh-om0^lNWP}Z+)8Ofp-9oY zQyAG$sDa;`qvpR*^n63nn_1D1ou%keeNWz}Tl=1L+~>+ax2pdWB0&OHbwiNXzYEuF zA8U4W3z{8cX!czpn*G3csA)@@okUH*ntd2kFS$m4swup>*q%h2G2R>CT+ygoPU@-V z$YOiE+UJmSX0iRxv!?q`s7&k=h2Ye5|B}SDWCiXaRFNHrc4$+j(v^Fdj{e6lj4F*U zvcn_9bAD85qI~AyzMU50hOL~3>|qAsi*GRCjK-X@of`9avHiH3^riU@p7gKV4hhUj zXhcvdD_a{FNV5CYozk9aGNMvB+b{ruUINhc(+GQn(OVsueuCznUkT}XRZ^2vvYi3S zC!;Z0jBu7YCSTlUN-xKxoN8$DIj$xjY44#LIM|{^;*AVD>K-T0QOEI|l;6*7@9UnB zO4Cpmj7m&8Ntm~K8=62IFQ^wQ0z3+ z-`q$b++GKj<+o1`_lv5 z5b`d;F_XCGxX2tenIOIbch>;j6y!VJyT}bLwNUDyTp*ympK~alS2tHsS zoRY1BH2ej45=Y@LlaR_^cH3*@6IKwXiV8)VhuW;D(#*e;lYl}U$=n3G;hl{SJ2y0(BP8XQ#qP* zD^BtL8+=M5;aQa?VbxcXdoV|vu@!GgU>TXjF;Rp1T0oJRj)CvOmUc4QG)B32=pksX zdLyL@MZy{#XGk2qKd_e|K|<`NH6kxk|4HJx?7M>(H@pJett}x`W@KJ_??q}2+fCXJ z-aZbl#=o{?Ycn=eHTs|$o}zX%!YW+32c@Ch@5((u8=pV>-Vr6aRXN(?EwXyCA=SGB zP*uItXSjM!#My+e1ex~cl;rNq(XQFTwf_jqWpX7)7Tfn_4u@AOceE*Gb*2^D_hMM} zDYpL%%hBCyQNqt;>y_>_WGlrQ`)3@rm1BRuJNH1z;vclBn_YI27gcxLE8MvUNg>8> zwmo)@-z?>%T=f*&PtZfruSJI_21oHd%ryLl1wB_Y5(s|dVv9Bk4P-4@yj>eEAAZm> z=)q;zT)9UO{FHKN?%X3J$Is;@j@@~eVqqBy-^B2){`@2Ue9im&k1|@boctCgpF{=s zCr3ATYm>`C#KVGE@`wqQ{%DZ&RbkSvL}r%$5&7_gwvZmAVw@#?SCZ0+SCJ~+xra9* z!c&NF?dYWml$sDxC+7I-cE0$6jL zNkdl*q&8V^V zv7<)bIQE7Kbj&!YtPPyW-n?}4;aUni{$8thMGOr=5A2jSj~;Eth-(pZ{JoY?Xs=(? zw`pxuj`tflhZ%Hm6&|hyha~Ll)p|cdkI^Le2V9(J(^{NB{QpaYcgoOFrTvPaLNE+x zNEhqr=@fmOrjMG^wng^ZlGP__bF>LxN_!!dgv}xN3Q}f|Yqd+uyIz&!5!Kn+UtoZ(*htfAvnaq?{Md=w;e`ilOV(A^n(I-C z1qnTjh!P7vQ@lnr7q<xV5E!nWER@<==%}9AN14P0?M7uz=8${pNYX2ajk_~%mwMXz|E!nWY zR$CySDr&Vm=*d-htk$)T`Xn<#SRFWGRcR_n7-g-p4DMjLnxGEO#Gzo!xD-mj zj;`$QRw|iThj({k;6Y1l+d8}u5=bW1WfmdXT4CFv5wkthrFy*q^M){gI|MxutgOIv zsq}6YA@u%)%Cs(|cfAZu9%I__DRf0VTXG=<+o5H9W=P)G1)!-GDl=EYFO~52#sG*Y zOs<0`=qjwjxT}I{VX7;Op``!gs#=dj=4wy5NQ^l$9VNMR4shutxg0^ZBekA8B-sJj zN>s3m8ac&SGfB>~+D;ES-pNi=iCh37g0 zI~z?qO-3$_0KRX9CpD037ZU}QRUV$}ea`i~@NCAJHVi%OHUO-tSJBv20zbid{;lw% z2%l||52hsTE$*m@fNAB`O_o`;8#!ya${H(afmRj0jL>=)y%X)M?d5%%I6plP=TAfv zl*(==QwDQC$xz78B>>CEMAVk{WZof2{79190Bry$TJLTgFm(|{dL@ciCr(!r-YDX3 z!lH<_?4GN6oy=;qQRY~gpA9$}9n8PWH`n29@C3Y~&oT@r3dA)4ih4xJ)sA4i_mhBw z_qOG!5&XV^ZADk?Ft_tHAim$sYx=<(Mvsm!fcysFa+qi=;gizKAXaxzM_L~=YrP3d z(=W)dc1@?dS za}eRR&uN+5js&8R_0yb0M7K+7bCJD^?`DfTkRWd3;lNIqEa57!Or4cEi(dXX1ADxQzw%P3+EVaKg9S>I0_jnu1(3@WWV1GJ}Jn$%zn$pdWNnt|h;|$WfC8^PBw@7kBSZv_iyTrpQ zqG69SD}LTq{)h+vFbw-VkA6UhGcRe>I1BRgcC&S*?XP1reqM?~Q~6x9x1+s-D3jaX zDYe;U??jGPJKtl1Mzi*GI6}XVU$5BYrNG1vjW#9W(g)?#Cxj$vbHN_Z!wlWxbt(t& zFsTO!<1Hw$v=AlAb2#_2`Yxy1{009%)W7oG92G+6yVgwmGU+i$=rpPl-nd%1Nl=W6 zHESDY2<)8_^kuG-iTN2AyzG_ic|nm@NI<;jMFsdy0unqgE5HT`Nc5~$fPWIe5W@2s zTI`MW)ZGY$98GOTjT!dVddR@9g>46xPMROXCR==#d{yin!s;01!L4y4YJwH(JpHJgD3n0%WWICdwumgiu)80opXg=hNj=~{h0=+^Y-iBsEUbrV~_Y>6f zjLeMNUx;!B!B98KjP)3SZe=pO&quHn37Zf^)=Pq}U^2{#M1~2Avf3E-l7#hsy&`g*pADn$?!Lxe4U_sR+WJ=wV5cBuNT#n`6+BI0|B0H@N`U} z7aG6WGJ13atF|#(ea#l!cY>FwJTzdFJb0~IyM&)%wv$GbAx7jW!(0BQdi%Cn;bwgUDZAD^3TE>EnnF)(7BEQL1KG6S0^bPICeLR8w4!&;W^$V_-&+_xy3F9WD zW!hHsW}|uqe@^tLb+oOx#qV1bxQWP&h}^mRDj3HK`3Mjjp=OP!(4u@$NYy=? zK-$}hSO#Znr`iUpXIuFg;+$AGTx8Vw1YRCQTwgW~H6a3yc-I~K=ZHIId$(Xv(XPy6 zq(EqAcqMjjAuWij^U{*slR4Ut!JrgvPa@a`=2A3bksbROc*(X+%bkbj(1(@AVV$qv zSei^<*HiH3lx{E0q_3+=v*~MC=^XmXDE*qgE~XYarT0z~3r=T7FY0WL>KH-*cLn2*d zh=fcgr{GKrRHi)`{H7PdgZ2E<@`)te4FUeX$0M})37!)WcD*gAi3YH!e@YNH%J1?y zq)}x5h85&@qu@45O3SczsiPq#sCJ_$*$^Tr8@Btw5_~T(%)v# zV_e!+-UuLu;e;Tdb0m-UD}q4-!vr>mCAN-E6xnfI8wV=KAkW$3R3ZB-q((}~U2MUH zQioBm!US$JJ>K&NQV+svF41vlX?t`VcdHsx2b3wYg#G2YaZ*)jYB|&wjiUkvQTBKHWG+pdm^MJj{@sh z0;U0|{0=NM3DSl0$GdYAN*2dz-nTJTyK*s1uq?dTo>;J7z}fNVR zLMf9`sPt*A+E!pVGndLPtyTLNz+msys{I`hxT3@oK?IWH=>QF)F$5_9L@oZ${ZcAB zX(z`Q+k5&(VR_Syoz+g*+H4?K=vu2|Qw6SEy*9$(r5j2e89(sltD7okrzRF{cC`8? zFM%G1RpiwnIo5f?*BbLziVy3L?2+E_DO{Z#u{66P5UvUo*CjEIC7J@S?$z$nC;OZJ+9yE+Ib%Dk5ddZ*p?)@W zW~mPaa40pAPa7I_92UTNZUJxYABG6>dOo@&BhZut^GpZXCPhXf$cr|PX&GQ8-%buR zrGcw`BY-m+%)spn!p#8hx!{enX|N`~o)NU>!*InvIIZ4RkexPR`CdbReya9JJfgsxfNzzh17+c+qYi8H z#)3Au4Z=Dw< z&k@_8ESJzm`g);XsP`FwTa^DC5hE6LR?CVR(=VDjed?;I`=-WEdtlo7X>F$KJEQ?| z*;8D(y>NV-daIi&7w0+pk=xi$j{-maZvA!xz^lt&-lB2XjWu%zKVy38HbP`#bty8z zfsM*1jOoO7=pBCU%%(2|#tLInZ%3>X@iv7e@3piZwiSaK^rQNvu($sF6t723HBbMO zr<#7WZ0JWZrJl%=kXC40@kxE!t+o}l_4+o`0M}4dlmkTnc#9{`CeL3K;3WybL9oWu z7_=$8cM6K6#tgFKel7Az*NS@2QBcopMPNKkuFEWzG zLrHEkj!XD+w5ub5gnN+SeHQITi-l?bfW){K1+ijGlg*jc&KUARn{~MV&6ySQUIFZq z0d9K61e4?&hsZf4(kU?_q7*B)2JF?^>&S2B z=8k!TdW~)$s|j3cc!JcJyYh#1D#i;{tQi9$6!tS7v9Wy*=YJ0b=-gT1EZ#L)JaKLo zJ)qxI5fX^{ehx@wTeqg8R(OY?0nxh#EaqMXCHxuRgKQwp*1y+c^yz%nr-g4rblLvg zi`D1o#dNw?#pKgh@oAwK&&S2=w}Zm$x5-rT(0)VcN^N!!E_ETWp63ag%XZ4%0WX8T3?Pj%`RnMR8X7$eP@+h{TR-e-dc;==z^agqYM^=w*Ta@ z{s5A&HLx_e$cYIY0gi)$IDQBXMOAT~6A1AgpF$aCsS>WG5&$*K=TMo(joikO84|X2 zfOWqh)>DbKDQx4KfUtYlgb2G8Nkhzygpw8S9>lAS5;Gn)hQv($HCW77iFc5gPf|Km z#@hpYlY{tv1O{8X8BKcU2>W-mwI(HxMEjFsg?n2CZX7*H#-CD}8C9Q=AEydtr z)2M9&19c-F7;rxvc+FMC6>RHm6(mU7I#-n`$M>Ky`=A^NK0YN)>W4_G)ed$Oag33g z12!zld;ABvHvEl-G!dCrBZcZgcEK7Ou?%pnv;BmSl%=Z&N9qKw#lm= zlo&9L@xaksPHkndJwQ0$8f0xu-FP;7BcqoSXX-~Ig4YqPPs;f!qvsHsMq@a7DWk99 z+*m?~qiI2|;awZ>oYJL|39CA{v9;@jyiMb|MiOX0_&3 z5b52h6(C7?E9@bx?_~_gKvAg;XBSmUbiqXtQFu{qvnbl)4KL~*E-C{>HO0rCUBZO$ z5{M|ggp14)s8hmAXw4;j7fGE`dv*y`uY}hDMBycTMMT_O)UV+syhT{wJt(1p&NVxS zQM1Adh0`sSMKuiuF1**~GLMT)9^GgJ!bF7g7{PQF&^5;6-GOj)ccTd4!i$LDtY5-M zYD_(TcGg3ysTOYl?dRxFr0*qq&YY6p311jIUXN1GtH~yidQy|p)m0;yAaJib-AS<7 zQhaSR8*td zS2eC7t&MHP*Y#=fwiTj*UVTq!q|aOG(^}hBeA!3`bkdsAZnmv(Gv((@dAgox>`ZwN zQ&uqLh$i1u3~qnwlFSS85Vvd~!$K-c${DV@@h_{v%JW~1>6`ub666c^&Ayj_fN!=@ z0s_9-za#*@8GLQLbx=o66s2$&MLAJ2Rc~D0D1Y1oKPbS{!&2mjxunS%ON1;rXUroY z#d8f0a3KMd>jjyE&S?yk<>QolL|$!Qbbk2X{y=$BV0E_~oc zo*(Ot!0vXLK7$?W)Pl?cnUNAP+=lh^4eLTv3k(KSxO{neKfa7_J#y0gN#~x>=;^pn zwWh>Tw`d}^ow=xm#F|zu@gCe?O@+@kAaNevEpOItFd%dS8$Y2^#y3ns6sVcJwAiX+ z!>~R}-aG{IBpc)e04ZOht4(65rfb2nIg0~TnA;L`Z?e3iCBGS`ajI^CJo z3MM9)imyhh(sCsg-Z2kG@~ui$+DM6nTOW+%Ym=(9REfm9Ho-_fBVVO0e@5Oq#o^je z3cg09N}Fv^1fr1IfoGhknEL4lyvq^@lpWBzJ&U%YpG0U!4+!A-uaX1@-MN(|iw|g1 zp2=6|x)EtfucY_MS3Q%59|3UL4}+K%&vdX5DQb~OXS!St^XDo4Jb_OyEwd@cY&>&7 zG>@|35IeMb-~5h2lIXVYk554%^qqxo ze|`lu9aU^1#6$ldpc8~1yM&D(7*{6M5}&|SG}q-QIr$4Wr$b4>jQnU!%8 zR7oHTh27$7{*7stlBfdFr1L1Mp;5I-&-szuI73* zT-KSKCsfw!7#1q)P=;m8Iw@IuGfXwBlGVmARVO8D1B@95HK+-dtbYW>!Nl?LiW>L4pj6JXk{8mcYhR&%nl{(z^@9WSGR|1u?;0e8hKl5Qxu; zVO)gr&6I?nKF*e&hGSYrnNet#M7~VO0Ccp376!7=FDa2AV$|ypY|0yObTz?q2+j>{Iy*I{v(uXdz_hx2b0q}#tb&z+iJ3(UdKnS%PPC-R_Ks5y`(kKCEba3=1_v53^QZ#9d6Qg?_TH0hBKFZslCfv; zh*vy@8$3qQIW^+%+kj&Cp&ad+PezX>_BX})`owzjlzdYq-@SP2QW||Ykew)yyN3d~ zov11X>5U*oRrbOkWI08wj@A&qgjnA$6oOnlIdq_6`SsuqbpBvRMIRA~xUhuKI|uCI z@c~x;DW_QW?~>prVqzIlAQr)L?#DQafdNJA9*474L+#ojV^KGe3Q@tivTEklM|@jf zjrP|kq{ZZVn@GOsuSR=BA`gZl`6j;_ZKgz4!0WogUb!$4uMl5hKe!NWS$&1QBEJv+ zh|>xDYLh9`<4UGY&P1b0; zB@)9|g8)tla2NvQEr1|Ww<_e9a-j~&6#T4`#apz8UEoY_s*aZrKWKN#huzw6dVse` z8_48N?sn(yq1RQj07pNNr$>5$C4HQFv1Dk~(!8FynW%Aq%aM=D{Y`pi^4a1|5{ zii1(uM&LkBC+dtbQS><{$~QR5dyS&&NP0@(>!V1EeVwC1dq54M8>xIuyP-%mh=xjJ z%Y&$kL{`WbP-?VV*g04x){RPRNWpHSQncFz%TsA89h5~?6o#iF^(xd5hxT!7zbuY) z5y=j;tHx@HciRt+QM)e5WWCC|eRoa=0a%BYo9~a0L%l)lmJ3)wvofK_Xjjs6XAD6WXRmvl_;g zV`v=zpnXsXJpIPT+w>qur#vcvgFkq|A8QgKY}9TkM2(fekxJkPBYjszdTxUJ*q-M> zfgQz8*hED}YMiN&z8?5#!gyZ5L~C=UEbwjP$%mzv?k7nQ)}HZERtdUFf?%lP<)S58 zdvm2)+L6YDHV`lEYP3R0LD#yMuUr@~XUS?n7DCtAoIQc9&vxYx$ai3X z@7*h%S)nw%@T}3|3>q9LTe&Du_Mz{kDUCDAZilj^*%~eKu%{@WuT>_jmx;Z)MKgd| zLjDUi1O4AWw;2e@5-a0Tms);Dv8horOmH{OUw+6#4)bW!o zKH58l{#$$(APT@^<9#)1I$C@b8KC)+564Ao{g0z8%tqWpM-f32zGRE95*}11J&{t; z7QG97?+|(t&OB75MdWGtuEckRei(-~OiQ&$$@UzSg4t~qzLx^%5eiMZ$>=3Qe^h^% zwnO)g=p+_hp|(S>fAkUOlg{7x@6rdlJlf^ammg?&guWXdk>3wKXr%xBAi=vlI$)$& z@camySagwM^7Nzm4?WL+pLpbjN1lJ^ACEl2EQojqKl$cj6Nnp!-up2sVLAiX7C}n4 zy*usTcbAdpPVs`wT!_z*qR8mj36q7!&yGFD-HZ4c?wSaA8b<(Tr>R0ZP1;!wPb<|} zW1*33vu41Ilhc&KPLsOz^$}t(LvbxQP20bdN)To6=uGb@vD5T4&k#eRe9>UbjbPXn z5#>8!HCv&pEC5kC#NL!a26=1yfwR1)4zf;-hWE71D!r$DR^Mx|(p(6(#o5}vWc8Kc zcK>r4uQ#l|d#nL{c(agO5y24Ccs(aUa3DFA{g}o}FHpwoh$|O|B&APq#GPA3 zw`O!$TH>h43)qa8(Oh%}WjARbjrb#EKMi~JYA`Fqezasuev33;3_hNtU0R4+UYDQ` z={)*zxI6Ih;XdL;bF6dt7o!Sr83?ZRK&vQ2HGCzHW9oAlD%#dG^vHX^8hk}ikZ?owG9p*P=ZWwY zMPOiLM&xsI(@`44eoa48{rb%dD|n0}$ll5KBg|4mrk~!c;PLdK)LePahDX*&FyXsV zAxn$w?gKmMHF+qc_deQyq2nwD%TkjiIWQ#WF&Iof^l~ni-H4^+qC!&C4CKs6EzvJI zAChldx2@>I2d@|4Gj9i#`l7{m7Yc5nK^|LfGzjF*GaQ-sl(bnESfCFlZEIiT=)N%e ztLSdRB4(g(S|DxD(?o{FXORUNQ$i;n>SIg^zw?w3Z}IJ?DS@0%yr9SJQYCy}2d0T5 zLQWGOwLDF%4$K2LsF86m^p!h)nefq6Koh~<;E7=J^7j^RU)*c?diB58@?L<*&+zXa zOC*FQg6A+1*dDt`sHxy@%P(D$vt<3^oF&7SPF|L?WaF~RWyFO3*71|?*7HsUnag;{ z{HLj)y&^luRB&i18!?<_<^`m0gTGSebn|XP-lH!DcPO#PTbcR;?Rj)h!T}Fg`M`iiS4>5N%xc@TG}Oken+R ztL_$fj6?0rIPFvyOdgtasW7m>8^O zxWfape--8fn4oTCfVxT7qJwlTIs`ij|5ju)o|r7uwRi?-c#d!_wj1|$+(RIWNx&sA z`fRF%McA7-ZqyW9!fjN7QT22pgq7%Q+!WA*05GCS!|hv29N*^k;2Cb4KroB-nhqO>jTO^IPA(rpdwjD zZ%$yH$!l+dl*t%RYdecntq%1W;U5m|z##7B7isr!z)eO)mcxHRaHVchA_rG$D9D1K zOZ@`Y@?pSoQ<+he96%E3Y%jk7P5k6#eBgNk>qSyZbq$`{ZK{_*#7jyRf2Q630BT;c zxJ(-+A2w?@$%n7CzVv_}iiZn?LTLeg3~h_c7lPfPueG-&*+ExsrQ3caHBznUj}iYP z+HZ@3qAFjzbGMW%-mD#2#14hY%7D)VD@0okxN-xx$$gunUHB-Rt9+oy7y1^vDel|~ z+TvT=67TuM+i;e428i=pA|6G=MfP0?BdK3f&j1H;RSdIEo8j&4Sk2)#>Nh;ZPHsImck(w4K)DO&KQ^R&htCyzY@Y4pCb zKp+y0XNa7rcad=DBo5s3DgE7WsSe=(Vc1X40sMmMm5)!zoI#cTRrub82NPnTew1rg z)r3=26MpfiH2v(Tw6JEiJf8U2fX5a;)|vlrcW-z9yEySN`c8Z-{ChoMggI-?YJZ%- z=ljcRRu;F#iRGCG|Eq~*o+1mISWZOZCqN(IQ>Ap$r2!MJhhU4yFaQ!yQ!qp362x-~ zxN8FRWtjy|-P|{5^x*w@-XPdR#OeSl-u$DJm&C_F{|a<8b3Ly3s|P!HR2&!SW}YP9>)@%%X8GVyW5yrW zU=}|-NIE(Qa+nYKAPZt$A#x5So-I`G43!RgDKvik7`bR)o$5(9lF&DbR0o>(K36Tzl7pQ?;kF6b=; zyhMS1BxV573zrS4c(WL5sRnG5w}W}L*VCPtXJCZjO8Cm44Gr|`2WMf{F(%T$bPVKq zoH14>)ReddF#1Ab7UfJT{gx0vnOXE{gorkBTo^!%Bt%RLh<=2KZ2@89Qt9Iih4X2E zpxUvropA!>DQa(dfsn_ohQ~ZuRk#xPg$lTevhAl5h|Z)VV$Q9LUa@L}n{c@VLIR%C z7)tY<=x9JWaT_H9qv#YR>6bWVZ|5B*f&BI6DBDGNH6}<03NQ%)X`af zIveZvJS(LR8Gs*y2W^2GBCn$~^_vtKhqkEq&*brdH+vr}WbgZ__x;rSYDB7gD0Sn^ zky-VF$~D36A~qR)LwNz;SbI=n*>a&RPyjkndl-RAK7|HB808shrGTw=OCGoT zpM3Lauzy*>{w2Urc{pYvt~i?+b^tlDMnMtf^|9udZLz2u4NA)*oJ=IIl-^gu7q;x0 zGsol)^Io8)j>kx?!&~h=yagUScLoc=% z(%^%QqYf0F($dev=P(^0`w+n|J~1nY58mF4##03xU-+?+bZrcdE8!U8sfDQV$t=9z z$tIco6mk`SjHC;nF`5p-4PIzS(268z1quFz_t9H!0{Ufcx>Q_ix*ttPivW_ini6zs z5i3*e5G7CqyXg$s5lp*T($>&#kZGSt+8Rkqkk<)PYRB!K@~#TL4(Uk(@>`49o~0lv zptL7KiLxLhHAm8N3){}XNE}v1;yQ_d&83auIJ;lkj=>Vlhvvzaq?%+BpDfc9Kx6Y_ zr8JjK)HU;2GGHU@%~-{akwm`|m|BNuexL+h+QF&Klxi^N!<&d5uBYem?i`>c)P)bL zo^8(A8OB7NNKDAaNj7<}k&XK^VB@N(Oo^p8{H4wX=J{HnquFO@JD*Gx;jtq}KeXAj zO$J_PkhZe?$L=E%A3q=D=Og^Qo1b-l-onpS{JepmkMi^T{Ctd`*YPuMtjDpVY|qtb z9hzw8ktoIXBLo|zU{fSaC)j8O8!chDYB<|-je@017_K75IWPt5CSi2LwdYy|i>F) z;9K|qTY3MCJD0Gg@@Cx&K@H`-loE#W_N7FK@+Jq<#zF~r%5KW&6R0WU2measjk(ugy8fcn^T2U>sjiXyEY-F4ZYnBVT|b|9 zwz|G0VIk`JoP>p_>rx2|QP+DUEJR(WN?3@xUL#>rUGZ|q5q`ZX*&`^H73?$U30{wC zlNX`l7>6`+)CBx%3_}bjCRktfej$_}5v73-XgF*3qnKnngg7Su$t7vZykSwWOOlii zcg0*fvg?)>L!(H#9!lDepdIj^&+^JFL8K&*B0q70$qi@2agvjUX)~RT^5}C7*Z-A| zK~w90sF_2Qjqbi+!OP{OcM1(XP}QuhYa&X%;&O5G@FgRIom1PQlN0|*#o zr7obfX{Bru%T{WAHLTS2%1YJT!P&yC)UO0KtWZvdyX=GOOvotbK^K-b7nL?t3`2?dSEX2s9 zOIV1J=_X+zMkZFmLX6C*+qsMoBU2$^|CNzhpxWfJyU`{A1A$J~W=D=5jc=uvcjH91 zX-TBInyZ%l%V?d9&^iKS^pQ*-xQYXB#Lx#8Ls-bi+5g}d*aOQFUe>+rpkAUaY&znv zrPA;6z%cy*@1N7Qko0-ieu;8Xm&nn&IQ+(hJuy(D;AMd+4GQ$pumAB;s3e&^38zv# ztuB-xwcnED`&@WzH-y370$n)lIpIkPhb_g;(_t|EUQetlLY1oDVisyZ#+fvR82V7} zB-LRnNW=6CacfmoX6&L1XmP+7CJue|j#nOfWz{QdUitWyEwB9Y%JEk$uj=0zVak4w zPv|?tm=D5x5ohRvrWA80iM#3a9PTCzhI6mJ4Zd;}jvEyWZaS_oFsF&|QjK|mqK`a< z`0z78#uOrnIWMBG9mvFL-?WT3^S|{U@UAet3QgcQXwkH^5WGn0nJF<#l@pdrzY0yi zIi%^|e{KJhg-?CWe`mjV`)jwqwt971d)tZ^`4%*Je>d)@#7lyA`*jyp4c$`AFVfK= ze)i{6=LFygjkNJbtNwoWc6$3fnw1y-P}y3XnQQPEzTAyCBRbTMLSW{t*c2~1*Co;5yxXMurTrCcpL+6_0Hd~`-1sb;c z72H89xndLW#0bAXFAd+s5|{CsB%?rrpBDsVnaY$w5WT%@o&@io-^vxOdoCmdkeZTy zI0>;k?I^j3P|Ws7cz*;T4dYuu$kAo~d8Nb!q*VufoiPXwj)Y7>UH)BAhmEuZ^?NUUYYOFHbYBy3eoEGG>Er#7%GK(GEFfoF2$n*T-*@@gR!y z^r8D_>wGJPcFBvpHHzyp^E%@kxwZ;bA)Tb`-2&N9$wN>L#&1M?Ig3P+6|2#&lpAP# z3bsz2f<3HFo=z|I^&-LbZoKVYA@|#VmS4;K10EH5oAm>D`4!@OH>tLbo`dZ#*Y62; zOn>KP*bmxs%EsBV;>n#e_O05ts@(OYH!X&yThQ$5$wx~q`7+XOj1T0 zd2ZS`eoo{ua3w#t~F{bX$r*&=C8c(#-tFTri&%9|3nEA=MIRZzOprzDuO7LHat8s*?S|B`@JY*bclx z>UBp1NAw;A-y(Y=UpIU|Kil{~-CTZ7@ZiNAZ7M&vEw+c$=)wr?QDT{(U6X6JRuYbK z(bY=KJ4x1tD$D#MWE!vCWpf!Pu%U;u^*C{<{CLPlsAn;PU zkrSJ&+1>(${0+!xeL5kRJKNz-O79&C^A%&TGZUX#=p2r0*dKyw<2}SgBFj`{uYxR2 z@4^VIJE;}CLg7{r4h*DrkbUo>UuN{P-XD|miICeoZ+L6_>nC1szwX|3+PbVazIkKj zn`!UaRt)s(TMb2}zVnZ#&t~qhh+DYBI8avg znnm!R0vGcSrdA|axxmJndBy%eCadEi^{(7T&yGks3Q?~en4EtXy_Wrgnu+5mGpwF@ zRsWgk3^)O;H1Er=0}Sg6f9g=9=dy^(pHFYwXdluu|7?Z=d_&}b>FHc79Ra9!=Qfrs zKA|}$?=4}0cboyvnNiK6f?a9$QLf%mHT0&%NKh|#R^c~$iUn9>l(MUH1Y8K%KM8pmuc2K>jyD<#0R3NBGr}`S+I3}QTHdT;PRw( z%~RGjPg~bKV_oyCb2 zYt~vVp0ZcgMq3aLSlfx8yI4w-NZ!=y%<8;I+z4OVnUa~8Y6M8!q`R8JM`~=(|h4LaZ&6hJ)-Ql2t6686iP*w{T8W5 zZ_=%0zgZ22@7Xqt5Tzo*YH$9=d8X$3=CUHIs-n$lDbKXYifO%$mv$k6jG9&(HSNb@ zZZ5r$zSm9?r5Dk|nwvyve}%c2F;hip9|cIIZ`8Cer#F?R@wcpL8&~)1QMVgVuj!)P z)qOG&Q;?X*08}*le_TIKY&zf!8H+Oy@dY0j5U~4k8Pi`~v zmKT*59I|2De-c;ohuBl@$S5ln)D+t9e#iR$-?g_mY7aWRSy$Tv_xln}1k-E+O~JeC z1k)s5Xx;&A*+eu}ruiFaA}`P)nMR8Yrg0@G@SI~GAy`BlO%wAub1Q@+d2!5aDY z;uu&P>#nxGd?YOsm_JD5pRM9crah^(2 z9V2~is$mprxQyyI64i4)NEM5xdL>h}x;yWvN3A^LO0^fMN{&gC$|=6ZXJll(i*q~WLC&R8mM8elhJ_;u29 z0y!kZqOXrl(=X4A2e+XCoZ{yC+HriE-ZirgxOFzTxxNN0=EJ2kb1_uYEAdsgbrR}O zARMken<`=*OaJf-N2|KjM(&1b<&Nx04(=B8isLxsaU6AUzvRVCb4>Zrf2JH?X!|Z$ z*P`{&_zrG;YH6F;IRE{+a>r!H&FF=}4s?TSN5($tgG(%u68 zEsjmTL{CJauYr1C5OSdXn}p1P=63{g{VG(hUsbNiLf^jy)HqrDR!nl$qv_3-|3IMK zleG^eJc8iVxOgj%Tl{4)iA$hPKrf-i+i68XJh-vvqp{m*_Xn}y7M+S#wrSHO2ifp; zSc>6&myejWpnu=5qGpMgyGKu)d~@T5CqGK)(bs)_MBi1{SY6+JI!m1V`^?;_F+Kj~ z6>)l7CjHQ*M|`-{G1HNIraZlpzU#`l7Yc-H4;;Z*>LltT?vrWdA~k#LBw;BKB36jP zf`Lis?chH{MeMA)1GDQ6+*)_wwz>mAC7KB!pbniRMp8uxkpeO^3udW)W&#K+bTBx7 zlxQ8-Dhd{y$B~q<;9z6y_beWaIQ&u`LuC#e>cuhuN3*=K;(eiQ@uS6$BCv%1FB0!t zwND99mD+f$cygWg4@x+WzG=bGacy!S^nsb>IL6=QU+0ZCQ^yj1}BU0ChW17Q|x;K+fu5_-Q9GaWnkfw3cWU4rmM&OK+OYM-* z)a3%h`5-mVHDjFImAarv{p~);FY@dRn*0lW z`Rb#iYhQL~f0ge24DjTu%hK<>Y`$>XV!{``zI|jbrbrX5gJmf*lOyM_{lsjX0I)BA zY&q5wYfCent7+?J;PD8f8cVPIEZqmj;lJ3EEKaWcjGTU|>)e*d=k=|FZ0E{;HnzFv z(AYW0q44bH56*ObzreC(@1I93%lp>V^_UQkL2n)Vz3p23n7m!H1$r^nQ1Ggvbg&r+cDdT(c!YpJh5+D zi!E#NH5Gr2kd4fSv;krfO^cnXfNPwE@98sj-HxBrzlASz{R@m+YWKJ#y2GQkQI{fyLe%AVOH_!I3zhg= z9HFv5>~m95#ZgvnDMHKLSm-#Fk&)OrozJgcjkZ;E^Mcy(&!7GvZK$V=x{!o@p>QDJ z52})$Uf0mrj03WKF4g1rWy{w~VkvgcgB1}7N+HRo7Lq!@U-kI5Q90=M(sBp^rVYM! zQSrEGE7EeR&4(_Ly9>!fejY8hDpEG7qL73nwZ-iTZI@J4YH@{wL9lLd?NsL9ZKv*_ zr(L2o)K*A5KGk;bB%z&77ru6NHN&cq$cjG@*l7n&AhuJcxE@8-odM}eCM`K#?Q}=b zqe@f?2K~V+sqECH1{KN_4@#nY=auQxxUlpu#^id1*m>EDxR{IDrJzTKmH{y+dLnhNr4Ci_vu47J#W54*Eh=7Ckr>O^2B0vrlDY$S%;eLc6Jq z(63#G(i>Jp-hvopA{rB_P)56}UsKH)Idxp8S1iu)gjFhQJ1JF`a4p)3AMdA zQbC&(NeoF)g0+aOiUyex9^~E*E`&q|z{ozHf1> zM-5S>RlK73E0~9UUNI2BYnFZ285}Ft01&;|UP~@Uc3J&ihG82HxMMHR74_A2{c65O zPLDUBNM5{#l6$I&gu*VD6bj|^oFV(w8_EpC6?9Eq?Pa=Mhx^qs07@?`BLjh|LD99H zw-gB`Qb%=$vj10tE|_}NLYK*lx>y`pH2E|6X3SXV)nD1`=ewZ>G-IhVwV?;=>bb2H z?r&>p!>kxZ3Nou3a*00P1>Hr(kjvxYVKFGtC#9f&X(5>*TiCbVhlw^**_k=CXZsPT zIF*fN3$xSOHPr&|0=BohU4E|@y@Ai|_2bVW@4%v?8)rX#uU%%@gl1c1kLp>|+7J7th)7(0X3p z@=Au;eJCc^=dERE<;<6E&|zq}rJf&Z^M@7m#S-lBc67iumzKE&tdnGY%8Vj>aR^p4 zG}lt@qg>{MT%FQ?!xRluym5<6W9H-}a(ZiC?uw=!$Z5yN9`r9iida0Xm{pBnV* z9sgt<77|evTRfo_?g~uP751jwy|#{eCATN+g`HO=7wjjF8lC23g%AhJAM!jY(eiL1 z*(iE+{|S-VozTElU%og@SJmxQr4X7XE9WZdYjf$>;tlB+>WHIa z;mV-#P2qSsNOaBe)y>uA?nV6nLK0jkx!OWR5rf+#f_@xW`?7FA8s_sd@~}?MIv5`S zW8O_Q!|a-+W~&q~as3Ladb|>|IXH{{UNoCf7>`ecy#Xd@)^napV7?A?D337Xslcx- zN52aTV5_pzy2i%!bY*SBnhon#z@uK<07SXvp6vIQ*RN|_tNY)~uM5L)a|>?gy%p-d zkigyKh9T$FQngLWdhDnfBy-nonzPPgnYYh9MafO-;OOekx$an_nW74}ls7+q#h@Vc zIa1d6bjtD&SFGHPCf+P5csa5%@P=lGoJ~L~L|57>d6VZu3iu`A3M7dEZ>z^2q5+pj zzxx9GKIt%mMyOn56BgNQkO`Hn+m3}e3D~2cW`QaGZw#=?M7t;Ja(0W4W}mJKh9e|IES#$)dy@d_=riHA31h8$Kn z-EKK(wH*8d%fWA34t^i&st!JDdA*c$mEM8HJ|%iEYI(f|G2gLhOBejG*wXV=rckWd zf_Z!~2j^A8dD%|9^wr*oS=&0;8!>5{1`nT^1M>3B(p!&bsRd45N#ggPjWzM`I&8K3 zQep3eSz9&OJ7Lml2YWTM_5glO+7fWMm2>z+=ip1n+IX%f2rGL&Uvza(Ui_JKEWyJ^ z^0cx3_%nxM@AJoFdGWVT$3EoY!MwOM9$Ut<*AcDh-(Dk$c=T=UsXj|082Qdy1tdlC)MfuCo~2IKZ)iJO#CcyHt8=OJ2hL~;{dP1} ztj=ST=}&0C2#J3^Pt7jHelxced)ebhU&qSG6BpTZ{0B-)uouXs?~Q(Um+<-Sa!c^kZ6PQfoeTUMh9I()iy4zZY8I7z)o}ZSA>dEk!2yC8KvZem)hG z$6^X}T>o{aIPaqNv$uNwe%QUq!1o4lH%M+40waA`jB8v50$)l5n%4FH(tM8Z6J6T- zpXQ!|vD|a`0-n$1p43mV01s}&H{N`%1{Ic z;h0Q|ZX{R?dXp};dq?OS=V$D3W=yzA@)&Fl1PlZW1PlZW1PlajE&}=nNI$%dU_hS@ z7qjpWqN!%Jq;ys^^_2RD(UhiI@#Wx%I$L|8NyHW!BegG&^u)CzkBojIJGF|fvN$@z z1f83~9u~&+TaG~I?jP-bvyIi|m zu5H7K1DhRZ&pI|Ahz?DpCx)WLG^ZwAGsgt3omOk7!-{OOOk}d_#ECz?^Uga-jjKvg zs`?|W8ag{WIUUF{oZf0BR$O?7SVid~+=$>zI|W9aNF>s@mB|^o40mLJv`lbLju5|u zNJJ2bKomvc&x(@9e+m&g5|N?_FiQ4Y1vyEol&bcV{q4l*OmI4@;B-0#E5V-?VeH`J z$T(yq2|@}C^-Ew0_`;dHkT9zV)QKqRNWORK!f*!>0s^iSiS!p$Is5f{5!5YlDE;Z8 zQj$tc6tU+jXJP`dl2kt!fKLPu>={2DMb-c-clw``mBQrX#X|ywS;?#%E7P|ldFs@u zM1%-nkm~OzDOv828L6x4$lk+#;fes_-Z^!MZ%f;vXFeggDxMM!B8 z#DqMIn=zNikE5*tKdx0SLV0sMvzy!QlJVc0)bn2a3bU+5N8ZIzfwH6%bY)Nc%)e95QN37{#Z69 z2X4?G4RSD@W^EM!aFq}bc~H-PDY#RlL=c7qp@h8`{Es~#inKG;*u{WIrb#sQ61H{P z@M_Tfu8HhD^U6!5&Zpn+K0Z1tJ7}%^TMSxDW&P9odxzxgxAjYM6CWl&x6D$IP>a*= zU{}oWt?PO}#Sr`G*k&2~9m~t)>K _rombiosl_.c + $(BCC) -o rombiosl.s -C-c -D__i86__ -0 -S _rombiosl_.c + sed -e 's/^\.text//' -e 's/^\.data//' rombiosl.s > _rombiosl_.s + $(AS86) _rombiosl_.s -b tmpl.bin -u- -w- -g -0 -j -O -l rombiosl.txt + -perl ${srcdir}/makesym.perl < rombiosl.txt > rombiosl.sym + mv tmpl.bin $@ + ./biossums $@ + @RMCOMMAND@ _rombiosl_.s + + +rombios16.bin: rombios.c apmbios.S biossums rombios.h + $(GCC32) $(BIOS_BUILD_DATE) -E -P $< > _rombios_.c + $(BCC) -o rombios.s -C-c -D__i86__ -0 -S _rombios_.c + sed -e 's/^\.text//' -e 's/^\.data//' rombios.s > _rombios_.s + $(AS86) _rombios_.s -b tmp.bin -u- -w- -g -0 -j -O -l rombios.txt + -perl ${srcdir}/makesym.perl < rombios.txt > rombios.sym + mv tmp.bin rombios16.bin + ./biossums rombios16.bin + @RMCOMMAND@ _rombios_.s + + +rombios32.bin: rombios32.out rombios.h + objcopy -O binary $< $@ + ./biossums -pad $@ + +rombios32.out: rombios32start.o rombios32.o rombios32.ld + ld -o $@ -T $(srcdir)/rombios32.ld rombios32start.o rombios32.o + +rombios32.o: rombios32.c acpi-dsdt.hex rombios.h + $(GCC32) -O2 -Wall -c -o $@ $< + +ifeq ("1", "0") +acpi-dsdt.hex: acpi-dsdt.dsl + cpp -P $< $<.i + iasl -tc -p $@ $<.i + rm $<.i + sed -i -e's/^unsigned/const unsigned/' $@ +endif + +rombios32start.o: rombios32start.S + $(GCC32) -c -o $@ $< + +BIOS-bochs-latest: rombios16.bin rombios32.bin + cat rombios32.bin rombios16.bin > $@ + +biossums: biossums.o diff --git a/bochs/bios/VGABIOS-elpin-2.40 b/bochs/bios/VGABIOS-elpin-2.40 new file mode 100644 index 0000000000000000000000000000000000000000..fc3d99dc655c186899d5e762b98140786629f694 GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/bochs/bios/VGABIOS-elpin-LICENSE b/bochs/bios/VGABIOS-elpin-LICENSE new file mode 100644 index 00000000..0ba5717a --- /dev/null +++ b/bochs/bios/VGABIOS-elpin-LICENSE @@ -0,0 +1,9 @@ +The VGA BIOS from Elpin Systems, Inc. (http://www.elpin.com/) +is now permanently licensed for use with bochs, courtesy +of MandrakeSoft, creators of the leading "Linux-Mandrake" +distribution (http://www.linux-mandrake.com/). You may +freely use/distribute it with bochs, as long as it is used +in bochs for the intended use as a VGA BIOS. + +Please check out Elpin Systems. They make cool software games, +educational software, and VGA development products. diff --git a/bochs/bios/VGABIOS-lgpl-README b/bochs/bios/VGABIOS-lgpl-README new file mode 100644 index 00000000..c68b5734 --- /dev/null +++ b/bochs/bios/VGABIOS-lgpl-README @@ -0,0 +1,226 @@ +Plex86/Bochs VGABios +-------------------- + +The goal of this project is to have a LGPL'd Video Bios in plex86, +Bochs and qemu. +This VGA Bios is very specific to the emulated VGA card. +It is NOT meant to drive a physical vga card. + + +Cirrus SVGA extension +--------------------- + +The Cirrus SVGA extension is designed for the Cirrus emulation in Bochs and +qemu. The initial patch for the Cirrus extension has been written by Makoto +Suzuki (suzu). + + +Install +------- +To compile the VGA Bios you will need : +- gcc +- bcc +- as86 +- ld86 + +Untar the archive, and type make. You should get a "VGABIOS-lgpl-latest.bin" +file. Alternatively, you can use the binary file "VGABIOS-lgpl-latest.bin", +i have compiled for you. + +Edit your plex86/bochs conf file, and modify the load-rom command in the +VGA BIOS section, to point to the new vgabios image file. + + +Debugging +--------- +You can get a very basic debugging system: messages printed by the vgabios. +You have to register the "unmapped" device driver in plex86 or bochs, and make +sure it grabs port 0xfff0. + +Comment the #undef DEBUG at the beginning of vgabios.c. +You can then use the "printf" function in the bios. + + +Testing +------- +Look at the "testvga.c" file in the archive. This is a minimal Turbo C 2.0 +source file that calls a few int10 functions. Feel free to modify it to suit +your needs. + + +Copyright and License +--------------------- +This program has been written by Christophe Bothamy +It is protected by the GNU Lesser Public License, which you should +have received a copy of along with this package. + + +Reverse Engineering +------------------- +The VGA Bios has been written without reverse-engineering any existing Bios. + + +Acknowledgment +-------------- +The source code contains code ripped from rombios.c of plex86, written +by Kevin Lawton + +The source code contains fonts from fntcol16.zip (c) by Joseph Gil avalable at : +ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip +These fonts are public domain + +The source code is based on information taken from : +- Kevin Lawton's vga card emulation for bochs/plex86 +- Ralf Brown's interrupts list avalaible at + http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html +- Finn Thogersons' VGADOC4b available at http://home.worldonline.dk/~finth/ +- Michael Abrash's Graphics Programming Black Book +- Francois Gervais' book "programmation des cartes graphiques cga-ega-vga" + edited by sybex +- DOSEMU 1.0.1 source code for several tables values and formulas + + +Feedback +-------- +Please report any bugs, comments, patches for this VGA Bios to info@vruppert.de +You can find the latest release at : http://www.nongnu.org/vgabios/ +For any information on bochs, visit the website http://bochs.sourceforge.net/ +For any information on qemu, visit the website http://fabrice.bellard.free.fr/qemu/ + + +History +------- +vgabios-0.6c : Apr 08 2009 + - Volker + . added DPMS support to cirrus vgabios (patch from Gleb Natapov) + . use VBE LFB address from PCI base address if present + . added support for a lot more non-standard VBE modes (e.g. widescreen modes) + . minor bugfixes + +vgabios-0.6b : May 30 2008 + - Volker + . added PCI data structure for the Cirrus VGABIOS images + . minor bugfixes in biossums utility, VBE support and makefile + +vgabios-0.6a : Aug 19 2006 + - Volker + . added minimal support for the video parameter table (VPT) + . Cirrus SVGA now supports the "no clear" bit in Cirrus and VESA mode + . Bochs VBE protected mode interface improved + . save/restore video state support for Bochs VBE and standard VGA added + . generate vbetables.h dynamicly + . VBE video memory increased to 8 MB (VBE dispi ID changed to B0C4) + . lots of 4bpp VBE fixes (all 4bpp VBE modes now enabled) + . VGA compatible setup for VBE modes added + +vgabios-0.5d : Dec 29 2005 + - Volker + . Bochs VBE protected mode interface added (based on a patch by malc@pulsesoft.com) + . biossums utility now supports VGABIOS sizes up to 64 kBytes + . VGA mode 0x11: all color planes must be enabled in this 2-color VGA mode + +vgabios-0.5c : Jul 07 2005 + - Volker + . BIOS configuration word usually reports initial mode 80x25 color text + . vgabios function 0x0e (write teletype): linefeed (0x0a) only increments the + cursor row value + +vgabios-0.5b : May 24 2005 + - Volker + . fixed return value for the default case in the VBE section (non-debug mode) + . removed unused stuff + +vgabios-0.5a : Mar 07 2005 + - Volker + . Cirrus SVGA extension (initial patches from Makoto Suzuki, improvements + from Fabrice Bellard) + . vgabios image size is now exactly 32k with a checksum + . a lot of vgabios and vbe functions rewritten in assembler + . dynamicly generated VBE mode info list + . write character function for CGA and LINEAR8 modes + . read/write graphics pixel for some graphics modes + . text scroll feature for some graphics modes + . VBE 8-bit DAC support + +vgabios-0.4c : Nov 06 2003 + - Christophe + . fix font problem on initial screen of NT4 Loader + +vgabios-0.4b : Nov 04 2003 + - Volker + . fix offset of character tables + . optimizations of CRT controller accesses + . VBE i/o registers changed to 0x01CE/CF + (suggestion from Daniel Gimpelevich) + . "noclear" flag stored in BIOS area + . fix character height returned by get_font_info function + +vgabios-0.4a : Aug 17 2003 + - Volker + . VBE mode search rewritten (VBE modes with LFB bit removed) + . many bugfixes and optimizations + . write character function implemented for graphics modes + . support for 15bpp, 16bpp, 24bpp and 32bpp VBE modes added + . SVGA mode 0x6A added + . VBE modes 0x102, 0x117, 0x118 and 0x142 (Bochs specific) + +vgabios-0.3b : Nov 23 2002 + - Christophe + . added lfb-mode numbers (patch from mathis) + . updated the Makefile + . removed display of copyrights. + . changed the Copyright string to "LGPL VGABios developers" + - Volker + . set the cursor shape depending on the current font height + . clear BL before calling int 0x10 function 0x1103 in vgabios_init_func + . added some text font functions + - Jeroen + . Forced to new DISPI (0xb0c1) interface (requires latest bochs vbe code) + . Added multibuffering support + . Added new DISPI interface for: virt width, height, x offset, y offset + . Added LFB modes (to be used with the vbe-lfb patch in bochs) + see VBE_HAVE_LFB in vbe.c (currently default enabled) + . updated TODO & docs for changes after bochs 1.4 + +vgabios-0.3a : Mar 10 2002 + - Christophe + . Fixed bug in function ah=13 + - Jeroen + . updated vbebios implementation to new api + . added vbe_display_api documentation + . added 640x400x8, 640x480x8, 800x600x8, 1024x768 + (>640x480 needs a special bochs patch atm) + . added 320x200x8 vbe support (uses the standard 320x200x8 vga mode to + display, this allows for testing & having something on screen as well, + at least until bochs host side display is up & running) + . adding lfbprof (vbe) testprogram (+some small fixes to it) + . merging with vbebios 0.2 + +vgabios-0.2b : Nov 19 2001 + - Christophe + . Fixed bug in function ah=13 + +vgabios-0.2a : Nov 09 2001 + - Christophe + . Included bugfix from techt@pikeonline.net about grayscale summing + . Added the "IBM" string at org 0x1e as Bart Oldeman suggested + . Fixed DS and ES that where inverted in the int10 parameters list! + . The following have been implemented : + - function ax=1a00, ax=1a01, ah=1b + - function ax=1130 + . Added debug messages for unimplemented/unknown functions + Must be compiled with DEBUG defined. The output is trapped + by the unknown-ioport driver of plex/bochs (port 0xfff0 is used) + +vgabios-0.1a : May 8 2001 + - Christophe + . First release. The work has been focused only on text mode. + . The following have been implemented : + - inits + - int 10 handler + - functions ah=00, ah=01, ah=02, ah=03, ah=05, ah=06, ah=07, ah=08 + ah=09, ah=0a, ah=0e, ah=0f, ax=1000, ax=1001, ax=1002, ax=1003 + ax=1007, ax=1008, ax=1009, ax=1010, ax=1012, ax=1013, ax=1015 + ax=1017, ax=1018, ax=1019, ax=101a, ax=101b, ah=12 bl=10, + ah=12 bl=30, ah=12 bl=31, ah=12 bl=32, ah=12 bl=33, ah=12 bl=34 + ah=13 diff --git a/bochs/bios/VGABIOS-lgpl-latest b/bochs/bios/VGABIOS-lgpl-latest new file mode 100644 index 0000000000000000000000000000000000000000..a6c56a569ef143742fc019b059f1602564f9463b GIT binary patch literal 40448 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 c=cw2Zq1Wn-fxFiPSpn#O@bI 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 literal 0 HcmV?d00001 diff --git a/bochs/bios/VGABIOS-lgpl-latest-cirrus-debug b/bochs/bios/VGABIOS-lgpl-latest-cirrus-debug new file mode 100644 index 0000000000000000000000000000000000000000..d321b9c1faae8958b8b9b5039a357023e26f1471 GIT binary patch literal 35840 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 literal 0 HcmV?d00001 diff --git a/bochs/bios/VGABIOS-lgpl-latest-debug b/bochs/bios/VGABIOS-lgpl-latest-debug new file mode 100644 index 0000000000000000000000000000000000000000..668f9788b258d18fef067eb0f1ff9530a0db414e GIT binary patch literal 41472 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 literal 0 HcmV?d00001 diff --git a/bochs/bios/acpi-dsdt.dsl b/bochs/bios/acpi-dsdt.dsl new file mode 100644 index 00000000..9762c2a9 --- /dev/null +++ b/bochs/bios/acpi-dsdt.dsl @@ -0,0 +1,594 @@ +/* + * Bochs/QEMU ACPI DSDT ASL definition + * + * Copyright (c) 2006 Fabrice Bellard + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2 as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +DefinitionBlock ( + "acpi-dsdt.aml", // Output Filename + "DSDT", // Signature + 0x01, // DSDT Compliance Revision + "BXPC", // OEMID + "BXDSDT", // TABLE ID + 0x1 // OEM Revision + ) +{ + Scope (\) + { + /* Debug Output */ + OperationRegion (DBG, SystemIO, 0xb044, 0x04) + Field (DBG, DWordAcc, NoLock, Preserve) + { + DBGL, 32, + } + } + + + /* PCI Bus definition */ + Scope(\_SB) { + Device(PCI0) { + Name (_HID, EisaId ("PNP0A03")) + Name (_ADR, 0x00) + Name (_UID, 1) + Name(_PRT, Package() { + /* PCI IRQ routing table, example from ACPI 2.0a specification, + section 6.2.8.1 */ + /* Note: we provide the same info as the PCI routing + table of the Bochs BIOS */ + + // PCI Slot 0 + Package() {0x0000ffff, 0, LNKD, 0}, + Package() {0x0000ffff, 1, LNKA, 0}, + Package() {0x0000ffff, 2, LNKB, 0}, + Package() {0x0000ffff, 3, LNKC, 0}, + + // PCI Slot 1 + Package() {0x0001ffff, 0, LNKA, 0}, + Package() {0x0001ffff, 1, LNKB, 0}, + Package() {0x0001ffff, 2, LNKC, 0}, + Package() {0x0001ffff, 3, LNKD, 0}, + + // PCI Slot 2 + Package() {0x0002ffff, 0, LNKB, 0}, + Package() {0x0002ffff, 1, LNKC, 0}, + Package() {0x0002ffff, 2, LNKD, 0}, + Package() {0x0002ffff, 3, LNKA, 0}, + + // PCI Slot 3 + Package() {0x0003ffff, 0, LNKC, 0}, + Package() {0x0003ffff, 1, LNKD, 0}, + Package() {0x0003ffff, 2, LNKA, 0}, + Package() {0x0003ffff, 3, LNKB, 0}, + + // PCI Slot 4 + Package() {0x0004ffff, 0, LNKD, 0}, + Package() {0x0004ffff, 1, LNKA, 0}, + Package() {0x0004ffff, 2, LNKB, 0}, + Package() {0x0004ffff, 3, LNKC, 0}, + + // PCI Slot 5 + Package() {0x0005ffff, 0, LNKA, 0}, + Package() {0x0005ffff, 1, LNKB, 0}, + Package() {0x0005ffff, 2, LNKC, 0}, + Package() {0x0005ffff, 3, LNKD, 0}, + }) + + Name (_CRS, ResourceTemplate () + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Address Space Granularity + 0x0000, // Address Range Minimum + 0x00FF, // Address Range Maximum + 0x0000, // Address Translation Offset + 0x0100, // Address Length + ,, ) + IO (Decode16, + 0x0CF8, // Address Range Minimum + 0x0CF8, // Address Range Maximum + 0x01, // Address Alignment + 0x08, // Address Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Address Space Granularity + 0x0000, // Address Range Minimum + 0x0CF7, // Address Range Maximum + 0x0000, // Address Translation Offset + 0x0CF8, // Address Length + ,, , TypeStatic) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Address Space Granularity + 0x0D00, // Address Range Minimum + 0xFFFF, // Address Range Maximum + 0x0000, // Address Translation Offset + 0xF300, // Address Length + ,, , TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Address Space Granularity + 0x000A0000, // Address Range Minimum + 0x000BFFFF, // Address Range Maximum + 0x00000000, // Address Translation Offset + 0x00020000, // Address Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Address Space Granularity + 0xC0000000, // Address Range Minimum + 0xFEBFFFFF, // Address Range Maximum + 0x00000000, // Address Translation Offset + 0x3EC00000, // Address Length + ,, , AddressRangeMemory, TypeStatic) + }) + } +#ifdef BX_QEMU + Device(HPET) { + Name(_HID, EISAID("PNP0103")) + Name(_UID, 0) + Method (_STA, 0, NotSerialized) { + Return(0x0F) + } + Name(_CRS, ResourceTemplate() { + DWordMemory( + ResourceConsumer, PosDecode, MinFixed, MaxFixed, + NonCacheable, ReadWrite, + 0x00000000, + 0xFED00000, + 0xFED003FF, + 0x00000000, + 0x00000400 /* 1K memory: FED00000 - FED003FF */ + ) + }) + } +#endif + } + + Scope(\_SB.PCI0) { + Device (VGA) { + Name (_ADR, 0x00020000) + Method (_S1D, 0, NotSerialized) + { + Return (0x00) + } + Method (_S2D, 0, NotSerialized) + { + Return (0x00) + } + Method (_S3D, 0, NotSerialized) + { + Return (0x00) + } + } + + /* PIIX3 ISA bridge */ + Device (ISA) { + Name (_ADR, 0x00010000) + + /* PIIX PCI to ISA irq remapping */ + OperationRegion (P40C, PCI_Config, 0x60, 0x04) + + /* Real-time clock */ + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00")) + Name (_CRS, ResourceTemplate () + { + IO (Decode16, 0x0070, 0x0070, 0x10, 0x02) + IRQNoFlags () {8} + IO (Decode16, 0x0072, 0x0072, 0x02, 0x06) + }) + } + + /* Keyboard seems to be important for WinXP install */ + Device (KBD) + { + Name (_HID, EisaId ("PNP0303")) + Method (_STA, 0, NotSerialized) + { + Return (0x0f) + } + + Method (_CRS, 0, NotSerialized) + { + Name (TMP, ResourceTemplate () + { + IO (Decode16, + 0x0060, // Address Range Minimum + 0x0060, // Address Range Maximum + 0x01, // Address Alignment + 0x01, // Address Length + ) + IO (Decode16, + 0x0064, // Address Range Minimum + 0x0064, // Address Range Maximum + 0x01, // Address Alignment + 0x01, // Address Length + ) + IRQNoFlags () + {1} + }) + Return (TMP) + } + } + + /* PS/2 mouse */ + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13")) + Method (_STA, 0, NotSerialized) + { + Return (0x0f) + } + + Method (_CRS, 0, NotSerialized) + { + Name (TMP, ResourceTemplate () + { + IRQNoFlags () {12} + }) + Return (TMP) + } + } + + /* PS/2 floppy controller */ + Device (FDC0) + { + Name (_HID, EisaId ("PNP0700")) + Method (_STA, 0, NotSerialized) + { + Return (0x0F) + } + Method (_CRS, 0, NotSerialized) + { + Name (BUF0, ResourceTemplate () + { + IO (Decode16, 0x03F2, 0x03F2, 0x00, 0x04) + IO (Decode16, 0x03F7, 0x03F7, 0x00, 0x01) + IRQNoFlags () {6} + DMA (Compatibility, NotBusMaster, Transfer8) {2} + }) + Return (BUF0) + } + } + + /* Parallel port */ + Device (LPT) + { + Name (_HID, EisaId ("PNP0400")) + Method (_STA, 0, NotSerialized) + { + Store (\_SB.PCI0.PX13.DRSA, Local0) + And (Local0, 0x80000000, Local0) + If (LEqual (Local0, 0)) + { + Return (0x00) + } + Else + { + Return (0x0F) + } + } + Method (_CRS, 0, NotSerialized) + { + Name (BUF0, ResourceTemplate () + { + IO (Decode16, 0x0378, 0x0378, 0x08, 0x08) + IRQNoFlags () {7} + }) + Return (BUF0) + } + } + + /* Serial Ports */ + Device (COM1) + { + Name (_HID, EisaId ("PNP0501")) + Name (_UID, 0x01) + Method (_STA, 0, NotSerialized) + { + Store (\_SB.PCI0.PX13.DRSC, Local0) + And (Local0, 0x08000000, Local0) + If (LEqual (Local0, 0)) + { + Return (0x00) + } + Else + { + Return (0x0F) + } + } + Method (_CRS, 0, NotSerialized) + { + Name (BUF0, ResourceTemplate () + { + IO (Decode16, 0x03F8, 0x03F8, 0x00, 0x08) + IRQNoFlags () {4} + }) + Return (BUF0) + } + } + + Device (COM2) + { + Name (_HID, EisaId ("PNP0501")) + Name (_UID, 0x02) + Method (_STA, 0, NotSerialized) + { + Store (\_SB.PCI0.PX13.DRSC, Local0) + And (Local0, 0x80000000, Local0) + If (LEqual (Local0, 0)) + { + Return (0x00) + } + Else + { + Return (0x0F) + } + } + Method (_CRS, 0, NotSerialized) + { + Name (BUF0, ResourceTemplate () + { + IO (Decode16, 0x02F8, 0x02F8, 0x00, 0x08) + IRQNoFlags () {3} + }) + Return (BUF0) + } + } + } + + /* PIIX4 PM */ + Device (PX13) { + Name (_ADR, 0x00010003) + + OperationRegion (P13C, PCI_Config, 0x5c, 0x24) + Field (P13C, DWordAcc, NoLock, Preserve) + { + DRSA, 32, + DRSB, 32, + DRSC, 32, + DRSE, 32, + DRSF, 32, + DRSG, 32, + DRSH, 32, + DRSI, 32, + DRSJ, 32 + } + } + } + + /* PCI IRQs */ + Scope(\_SB) { + Field (\_SB.PCI0.ISA.P40C, ByteAcc, NoLock, Preserve) + { + PRQ0, 8, + PRQ1, 8, + PRQ2, 8, + PRQ3, 8 + } + + Device(LNKA){ + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 1) + Name(_PRS, ResourceTemplate(){ + IRQ (Level, ActiveLow, Shared) + {3,4,5,6,7,9,10,11,12} + }) + Method (_STA, 0, NotSerialized) + { + Store (0x0B, Local0) + If (And (0x80, PRQ0, Local1)) + { + Store (0x09, Local0) + } + Return (Local0) + } + Method (_DIS, 0, NotSerialized) + { + Or (PRQ0, 0x80, PRQ0) + } + Method (_CRS, 0, NotSerialized) + { + Name (PRR0, ResourceTemplate () + { + IRQ (Level, ActiveLow, Shared) + {1} + }) + CreateWordField (PRR0, 0x01, TMP) + Store (PRQ0, Local0) + If (LLess (Local0, 0x80)) + { + ShiftLeft (One, Local0, TMP) + } + Else + { + Store (Zero, TMP) + } + Return (PRR0) + } + Method (_SRS, 1, NotSerialized) + { + CreateWordField (Arg0, 0x01, TMP) + FindSetRightBit (TMP, Local0) + Decrement (Local0) + Store (Local0, PRQ0) + } + } + Device(LNKB){ + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 2) + Name(_PRS, ResourceTemplate(){ + IRQ (Level, ActiveLow, Shared) + {3,4,5,6,7,9,10,11,12} + }) + Method (_STA, 0, NotSerialized) + { + Store (0x0B, Local0) + If (And (0x80, PRQ1, Local1)) + { + Store (0x09, Local0) + } + Return (Local0) + } + Method (_DIS, 0, NotSerialized) + { + Or (PRQ1, 0x80, PRQ1) + } + Method (_CRS, 0, NotSerialized) + { + Name (PRR0, ResourceTemplate () + { + IRQ (Level, ActiveLow, Shared) + {1} + }) + CreateWordField (PRR0, 0x01, TMP) + Store (PRQ1, Local0) + If (LLess (Local0, 0x80)) + { + ShiftLeft (One, Local0, TMP) + } + Else + { + Store (Zero, TMP) + } + Return (PRR0) + } + Method (_SRS, 1, NotSerialized) + { + CreateWordField (Arg0, 0x01, TMP) + FindSetRightBit (TMP, Local0) + Decrement (Local0) + Store (Local0, PRQ1) + } + } + Device(LNKC){ + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 3) + Name(_PRS, ResourceTemplate(){ + IRQ (Level, ActiveLow, Shared) + {3,4,5,6,7,9,10,11,12} + }) + Method (_STA, 0, NotSerialized) + { + Store (0x0B, Local0) + If (And (0x80, PRQ2, Local1)) + { + Store (0x09, Local0) + } + Return (Local0) + } + Method (_DIS, 0, NotSerialized) + { + Or (PRQ2, 0x80, PRQ2) + } + Method (_CRS, 0, NotSerialized) + { + Name (PRR0, ResourceTemplate () + { + IRQ (Level, ActiveLow, Shared) + {1} + }) + CreateWordField (PRR0, 0x01, TMP) + Store (PRQ2, Local0) + If (LLess (Local0, 0x80)) + { + ShiftLeft (One, Local0, TMP) + } + Else + { + Store (Zero, TMP) + } + Return (PRR0) + } + Method (_SRS, 1, NotSerialized) + { + CreateWordField (Arg0, 0x01, TMP) + FindSetRightBit (TMP, Local0) + Decrement (Local0) + Store (Local0, PRQ2) + } + } + Device(LNKD){ + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 4) + Name(_PRS, ResourceTemplate(){ + IRQ (Level, ActiveLow, Shared) + {3,4,5,6,7,9,10,11,12} + }) + Method (_STA, 0, NotSerialized) + { + Store (0x0B, Local0) + If (And (0x80, PRQ3, Local1)) + { + Store (0x09, Local0) + } + Return (Local0) + } + Method (_DIS, 0, NotSerialized) + { + Or (PRQ3, 0x80, PRQ3) + } + Method (_CRS, 0, NotSerialized) + { + Name (PRR0, ResourceTemplate () + { + IRQ (Level, ActiveLow, Shared) + {1} + }) + CreateWordField (PRR0, 0x01, TMP) + Store (PRQ3, Local0) + If (LLess (Local0, 0x80)) + { + ShiftLeft (One, Local0, TMP) + } + Else + { + Store (Zero, TMP) + } + Return (PRR0) + } + Method (_SRS, 1, NotSerialized) + { + CreateWordField (Arg0, 0x01, TMP) + FindSetRightBit (TMP, Local0) + Decrement (Local0) + Store (Local0, PRQ3) + } + } + } + + /* + * S3 (suspend-to-ram), S4 (suspend-to-disk) and S5 (power-off) type codes: + * must match piix4 emulation. + */ + Name (\_S3, Package (0x04) + { + 0x01, /* PM1a_CNT.SLP_TYP */ + 0x01, /* PM1b_CNT.SLP_TYP */ + Zero, /* reserved */ + Zero /* reserved */ + }) + Name (\_S4, Package (0x04) + { + Zero, /* PM1a_CNT.SLP_TYP */ + Zero, /* PM1b_CNT.SLP_TYP */ + Zero, /* reserved */ + Zero /* reserved */ + }) + Name (\_S5, Package (0x04) + { + Zero, /* PM1a_CNT.SLP_TYP */ + Zero, /* PM1b_CNT.SLP_TYP */ + Zero, /* reserved */ + Zero /* reserved */ + }) +} diff --git a/bochs/bios/acpi-dsdt.hex b/bochs/bios/acpi-dsdt.hex new file mode 100644 index 00000000..504f6bed --- /dev/null +++ b/bochs/bios/acpi-dsdt.hex @@ -0,0 +1,273 @@ +/* + * + * Intel ACPI Component Architecture + * ASL Optimizing Compiler version 20090320 [Oct 24 2009] + * Copyright (C) 2000 - 2009 Intel Corporation + * Supports ACPI Specification Revision 3.0a + * + * Compilation of "acpi-dsdt.dsl.i" - Sun Dec 20 15:20:28 2009 + * + * C source code output + * + */ +const unsigned char AmlCode[] = +{ + 0x44,0x53,0x44,0x54,0x0D,0x08,0x00,0x00, /* 00000000 "DSDT...." */ + 0x01,0x95,0x42,0x58,0x50,0x43,0x00,0x00, /* 00000008 "..BXPC.." */ + 0x42,0x58,0x44,0x53,0x44,0x54,0x00,0x00, /* 00000010 "BXDSDT.." */ + 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ + 0x20,0x03,0x09,0x20,0x10,0x1C,0x5C,0x00, /* 00000020 " .. ..\." */ + 0x5B,0x80,0x44,0x42,0x47,0x5F,0x01,0x0B, /* 00000028 "[.DBG_.." */ + 0x44,0xB0,0x0A,0x04,0x5B,0x81,0x0B,0x44, /* 00000030 "D...[..D" */ + 0x42,0x47,0x5F,0x03,0x44,0x42,0x47,0x4C, /* 00000038 "BG_.DBGL" */ + 0x20,0x10,0x49,0x1F,0x5F,0x53,0x42,0x5F, /* 00000040 " .I._SB_" */ + 0x5B,0x82,0x41,0x1F,0x50,0x43,0x49,0x30, /* 00000048 "[.A.PCI0" */ + 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 00000050 "._HID.A." */ + 0x0A,0x03,0x08,0x5F,0x41,0x44,0x52,0x00, /* 00000058 "..._ADR." */ + 0x08,0x5F,0x55,0x49,0x44,0x01,0x08,0x5F, /* 00000060 "._UID.._" */ + 0x50,0x52,0x54,0x12,0x47,0x15,0x18,0x12, /* 00000068 "PRT.G..." */ + 0x0B,0x04,0x0B,0xFF,0xFF,0x00,0x4C,0x4E, /* 00000070 "......LN" */ + 0x4B,0x44,0x00,0x12,0x0B,0x04,0x0B,0xFF, /* 00000078 "KD......" */ + 0xFF,0x01,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 00000080 "..LNKA.." */ + 0x0C,0x04,0x0B,0xFF,0xFF,0x0A,0x02,0x4C, /* 00000088 ".......L" */ + 0x4E,0x4B,0x42,0x00,0x12,0x0C,0x04,0x0B, /* 00000090 "NKB....." */ + 0xFF,0xFF,0x0A,0x03,0x4C,0x4E,0x4B,0x43, /* 00000098 "....LNKC" */ + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x01, /* 000000A0 "........" */ + 0x00,0x00,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 000000A8 "..LNKA.." */ + 0x0D,0x04,0x0C,0xFF,0xFF,0x01,0x00,0x01, /* 000000B0 "........" */ + 0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04, /* 000000B8 "LNKB...." */ + 0x0C,0xFF,0xFF,0x01,0x00,0x0A,0x02,0x4C, /* 000000C0 ".......L" */ + 0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C, /* 000000C8 "NKC....." */ + 0xFF,0xFF,0x01,0x00,0x0A,0x03,0x4C,0x4E, /* 000000D0 "......LN" */ + 0x4B,0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000000D8 "KD......" */ + 0xFF,0x02,0x00,0x00,0x4C,0x4E,0x4B,0x42, /* 000000E0 "....LNKB" */ + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x02, /* 000000E8 "........" */ + 0x00,0x01,0x4C,0x4E,0x4B,0x43,0x00,0x12, /* 000000F0 "..LNKC.." */ + 0x0E,0x04,0x0C,0xFF,0xFF,0x02,0x00,0x0A, /* 000000F8 "........" */ + 0x02,0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E, /* 00000100 ".LNKD..." */ + 0x04,0x0C,0xFF,0xFF,0x02,0x00,0x0A,0x03, /* 00000108 "........" */ + 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04, /* 00000110 "LNKA...." */ + 0x0C,0xFF,0xFF,0x03,0x00,0x00,0x4C,0x4E, /* 00000118 "......LN" */ + 0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000120 "KC......" */ + 0xFF,0x03,0x00,0x01,0x4C,0x4E,0x4B,0x44, /* 00000128 "....LNKD" */ + 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x03, /* 00000130 "........" */ + 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x41,0x00, /* 00000138 "...LNKA." */ + 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x03,0x00, /* 00000140 "........" */ + 0x0A,0x03,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000148 "..LNKB.." */ + 0x0D,0x04,0x0C,0xFF,0xFF,0x04,0x00,0x00, /* 00000150 "........" */ + 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04, /* 00000158 "LNKD...." */ + 0x0C,0xFF,0xFF,0x04,0x00,0x01,0x4C,0x4E, /* 00000160 "......LN" */ + 0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000168 "KA......" */ + 0xFF,0x04,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000170 ".....LNK" */ + 0x42,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000178 "B......." */ + 0x04,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x43, /* 00000180 "....LNKC" */ + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x05, /* 00000188 "........" */ + 0x00,0x00,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 00000190 "..LNKA.." */ + 0x0D,0x04,0x0C,0xFF,0xFF,0x05,0x00,0x01, /* 00000198 "........" */ + 0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04, /* 000001A0 "LNKB...." */ + 0x0C,0xFF,0xFF,0x05,0x00,0x0A,0x02,0x4C, /* 000001A8 ".......L" */ + 0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C, /* 000001B0 "NKC....." */ + 0xFF,0xFF,0x05,0x00,0x0A,0x03,0x4C,0x4E, /* 000001B8 "......LN" */ + 0x4B,0x44,0x00,0x08,0x5F,0x43,0x52,0x53, /* 000001C0 "KD.._CRS" */ + 0x11,0x42,0x07,0x0A,0x6E,0x88,0x0D,0x00, /* 000001C8 ".B..n..." */ + 0x02,0x0C,0x00,0x00,0x00,0x00,0x00,0xFF, /* 000001D0 "........" */ + 0x00,0x00,0x00,0x00,0x01,0x47,0x01,0xF8, /* 000001D8 ".....G.." */ + 0x0C,0xF8,0x0C,0x01,0x08,0x88,0x0D,0x00, /* 000001E0 "........" */ + 0x01,0x0C,0x03,0x00,0x00,0x00,0x00,0xF7, /* 000001E8 "........" */ + 0x0C,0x00,0x00,0xF8,0x0C,0x88,0x0D,0x00, /* 000001F0 "........" */ + 0x01,0x0C,0x03,0x00,0x00,0x00,0x0D,0xFF, /* 000001F8 "........" */ + 0xFF,0x00,0x00,0x00,0xF3,0x87,0x17,0x00, /* 00000200 "........" */ + 0x00,0x0C,0x03,0x00,0x00,0x00,0x00,0x00, /* 00000208 "........" */ + 0x00,0x0A,0x00,0xFF,0xFF,0x0B,0x00,0x00, /* 00000210 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x87, /* 00000218 "........" */ + 0x17,0x00,0x00,0x0C,0x01,0x00,0x00,0x00, /* 00000220 "........" */ + 0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xBF, /* 00000228 "........" */ + 0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0xC0, /* 00000230 "........" */ + 0x3E,0x79,0x00,0x10,0x4D,0x2B,0x2E,0x5F, /* 00000238 ">y..M+._" */ + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x5B, /* 00000240 "SB_PCI0[" */ + 0x82,0x2A,0x56,0x47,0x41,0x5F,0x08,0x5F, /* 00000248 ".*VGA_._" */ + 0x41,0x44,0x52,0x0C,0x00,0x00,0x02,0x00, /* 00000250 "ADR....." */ + 0x14,0x08,0x5F,0x53,0x31,0x44,0x00,0xA4, /* 00000258 ".._S1D.." */ + 0x00,0x14,0x08,0x5F,0x53,0x32,0x44,0x00, /* 00000260 "..._S2D." */ + 0xA4,0x00,0x14,0x08,0x5F,0x53,0x33,0x44, /* 00000268 "...._S3D" */ + 0x00,0xA4,0x00,0x5B,0x82,0x42,0x23,0x49, /* 00000270 "...[.B#I" */ + 0x53,0x41,0x5F,0x08,0x5F,0x41,0x44,0x52, /* 00000278 "SA_._ADR" */ + 0x0C,0x00,0x00,0x01,0x00,0x5B,0x80,0x50, /* 00000280 ".....[.P" */ + 0x34,0x30,0x43,0x02,0x0A,0x60,0x0A,0x04, /* 00000288 "40C..`.." */ + 0x5B,0x82,0x2D,0x52,0x54,0x43,0x5F,0x08, /* 00000290 "[.-RTC_." */ + 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x0B, /* 00000298 "_HID.A.." */ + 0x00,0x08,0x5F,0x43,0x52,0x53,0x11,0x18, /* 000002A0 ".._CRS.." */ + 0x0A,0x15,0x47,0x01,0x70,0x00,0x70,0x00, /* 000002A8 "..G.p.p." */ + 0x10,0x02,0x22,0x00,0x01,0x47,0x01,0x72, /* 000002B0 ".."..G.r" */ + 0x00,0x72,0x00,0x02,0x06,0x79,0x00,0x5B, /* 000002B8 ".r...y.[" */ + 0x82,0x44,0x04,0x4B,0x42,0x44,0x5F,0x08, /* 000002C0 ".D.KBD_." */ + 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x03, /* 000002C8 "_HID.A.." */ + 0x03,0x14,0x09,0x5F,0x53,0x54,0x41,0x00, /* 000002D0 "..._STA." */ + 0xA4,0x0A,0x0F,0x14,0x29,0x5F,0x43,0x52, /* 000002D8 "....)_CR" */ + 0x53,0x00,0x08,0x54,0x4D,0x50,0x5F,0x11, /* 000002E0 "S..TMP_." */ + 0x18,0x0A,0x15,0x47,0x01,0x60,0x00,0x60, /* 000002E8 "...G.`.`" */ + 0x00,0x01,0x01,0x47,0x01,0x64,0x00,0x64, /* 000002F0 "...G.d.d" */ + 0x00,0x01,0x01,0x22,0x02,0x00,0x79,0x00, /* 000002F8 "..."..y." */ + 0xA4,0x54,0x4D,0x50,0x5F,0x5B,0x82,0x33, /* 00000300 ".TMP_[.3" */ + 0x4D,0x4F,0x55,0x5F,0x08,0x5F,0x48,0x49, /* 00000308 "MOU_._HI" */ + 0x44,0x0C,0x41,0xD0,0x0F,0x13,0x14,0x09, /* 00000310 "D.A....." */ + 0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F, /* 00000318 "_STA...." */ + 0x14,0x19,0x5F,0x43,0x52,0x53,0x00,0x08, /* 00000320 ".._CRS.." */ + 0x54,0x4D,0x50,0x5F,0x11,0x08,0x0A,0x05, /* 00000328 "TMP_...." */ + 0x22,0x00,0x10,0x79,0x00,0xA4,0x54,0x4D, /* 00000330 ""..y..TM" */ + 0x50,0x5F,0x5B,0x82,0x47,0x04,0x46,0x44, /* 00000338 "P_[.G.FD" */ + 0x43,0x30,0x08,0x5F,0x48,0x49,0x44,0x0C, /* 00000340 "C0._HID." */ + 0x41,0xD0,0x07,0x00,0x14,0x09,0x5F,0x53, /* 00000348 "A....._S" */ + 0x54,0x41,0x00,0xA4,0x0A,0x0F,0x14,0x2C, /* 00000350 "TA.....," */ + 0x5F,0x43,0x52,0x53,0x00,0x08,0x42,0x55, /* 00000358 "_CRS..BU" */ + 0x46,0x30,0x11,0x1B,0x0A,0x18,0x47,0x01, /* 00000360 "F0....G." */ + 0xF2,0x03,0xF2,0x03,0x00,0x04,0x47,0x01, /* 00000368 "......G." */ + 0xF7,0x03,0xF7,0x03,0x00,0x01,0x22,0x40, /* 00000370 "......"@" */ + 0x00,0x2A,0x04,0x00,0x79,0x00,0xA4,0x42, /* 00000378 ".*..y..B" */ + 0x55,0x46,0x30,0x5B,0x82,0x4B,0x05,0x4C, /* 00000380 "UF0[.K.L" */ + 0x50,0x54,0x5F,0x08,0x5F,0x48,0x49,0x44, /* 00000388 "PT_._HID" */ + 0x0C,0x41,0xD0,0x04,0x00,0x14,0x28,0x5F, /* 00000390 ".A....(_" */ + 0x53,0x54,0x41,0x00,0x70,0x5E,0x5E,0x5E, /* 00000398 "STA.p^^^" */ + 0x2E,0x50,0x58,0x31,0x33,0x44,0x52,0x53, /* 000003A0 ".PX13DRS" */ + 0x41,0x60,0x7B,0x60,0x0C,0x00,0x00,0x00, /* 000003A8 "A`{`...." */ + 0x80,0x60,0xA0,0x06,0x93,0x60,0x00,0xA4, /* 000003B0 ".`...`.." */ + 0x00,0xA1,0x04,0xA4,0x0A,0x0F,0x14,0x21, /* 000003B8 ".......!" */ + 0x5F,0x43,0x52,0x53,0x00,0x08,0x42,0x55, /* 000003C0 "_CRS..BU" */ + 0x46,0x30,0x11,0x10,0x0A,0x0D,0x47,0x01, /* 000003C8 "F0....G." */ + 0x78,0x03,0x78,0x03,0x08,0x08,0x22,0x80, /* 000003D0 "x.x..."." */ + 0x00,0x79,0x00,0xA4,0x42,0x55,0x46,0x30, /* 000003D8 ".y..BUF0" */ + 0x5B,0x82,0x41,0x06,0x43,0x4F,0x4D,0x31, /* 000003E0 "[.A.COM1" */ + 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 000003E8 "._HID.A." */ + 0x05,0x01,0x08,0x5F,0x55,0x49,0x44,0x01, /* 000003F0 "..._UID." */ + 0x14,0x28,0x5F,0x53,0x54,0x41,0x00,0x70, /* 000003F8 ".(_STA.p" */ + 0x5E,0x5E,0x5E,0x2E,0x50,0x58,0x31,0x33, /* 00000400 "^^^.PX13" */ + 0x44,0x52,0x53,0x43,0x60,0x7B,0x60,0x0C, /* 00000408 "DRSC`{`." */ + 0x00,0x00,0x00,0x08,0x60,0xA0,0x06,0x93, /* 00000410 "....`..." */ + 0x60,0x00,0xA4,0x00,0xA1,0x04,0xA4,0x0A, /* 00000418 "`......." */ + 0x0F,0x14,0x21,0x5F,0x43,0x52,0x53,0x00, /* 00000420 "..!_CRS." */ + 0x08,0x42,0x55,0x46,0x30,0x11,0x10,0x0A, /* 00000428 ".BUF0..." */ + 0x0D,0x47,0x01,0xF8,0x03,0xF8,0x03,0x00, /* 00000430 ".G......" */ + 0x08,0x22,0x10,0x00,0x79,0x00,0xA4,0x42, /* 00000438 "."..y..B" */ + 0x55,0x46,0x30,0x5B,0x82,0x42,0x06,0x43, /* 00000440 "UF0[.B.C" */ + 0x4F,0x4D,0x32,0x08,0x5F,0x48,0x49,0x44, /* 00000448 "OM2._HID" */ + 0x0C,0x41,0xD0,0x05,0x01,0x08,0x5F,0x55, /* 00000450 ".A...._U" */ + 0x49,0x44,0x0A,0x02,0x14,0x28,0x5F,0x53, /* 00000458 "ID...(_S" */ + 0x54,0x41,0x00,0x70,0x5E,0x5E,0x5E,0x2E, /* 00000460 "TA.p^^^." */ + 0x50,0x58,0x31,0x33,0x44,0x52,0x53,0x43, /* 00000468 "PX13DRSC" */ + 0x60,0x7B,0x60,0x0C,0x00,0x00,0x00,0x80, /* 00000470 "`{`....." */ + 0x60,0xA0,0x06,0x93,0x60,0x00,0xA4,0x00, /* 00000478 "`...`..." */ + 0xA1,0x04,0xA4,0x0A,0x0F,0x14,0x21,0x5F, /* 00000480 "......!_" */ + 0x43,0x52,0x53,0x00,0x08,0x42,0x55,0x46, /* 00000488 "CRS..BUF" */ + 0x30,0x11,0x10,0x0A,0x0D,0x47,0x01,0xF8, /* 00000490 "0....G.." */ + 0x02,0xF8,0x02,0x00,0x08,0x22,0x08,0x00, /* 00000498 ".....".." */ + 0x79,0x00,0xA4,0x42,0x55,0x46,0x30,0x5B, /* 000004A0 "y..BUF0[" */ + 0x82,0x40,0x05,0x50,0x58,0x31,0x33,0x08, /* 000004A8 ".@.PX13." */ + 0x5F,0x41,0x44,0x52,0x0C,0x03,0x00,0x01, /* 000004B0 "_ADR...." */ + 0x00,0x5B,0x80,0x50,0x31,0x33,0x43,0x02, /* 000004B8 ".[.P13C." */ + 0x0A,0x5C,0x0A,0x24,0x5B,0x81,0x33,0x50, /* 000004C0 ".\.$[.3P" */ + 0x31,0x33,0x43,0x03,0x44,0x52,0x53,0x41, /* 000004C8 "13C.DRSA" */ + 0x20,0x44,0x52,0x53,0x42,0x20,0x44,0x52, /* 000004D0 " DRSB DR" */ + 0x53,0x43,0x20,0x44,0x52,0x53,0x45,0x20, /* 000004D8 "SC DRSE " */ + 0x44,0x52,0x53,0x46,0x20,0x44,0x52,0x53, /* 000004E0 "DRSF DRS" */ + 0x47,0x20,0x44,0x52,0x53,0x48,0x20,0x44, /* 000004E8 "G DRSH D" */ + 0x52,0x53,0x49,0x20,0x44,0x52,0x53,0x4A, /* 000004F0 "RSI DRSJ" */ + 0x20,0x10,0x4F,0x2E,0x5F,0x53,0x42,0x5F, /* 000004F8 " .O._SB_" */ + 0x5B,0x81,0x24,0x2F,0x03,0x50,0x43,0x49, /* 00000500 "[.$/.PCI" */ + 0x30,0x49,0x53,0x41,0x5F,0x50,0x34,0x30, /* 00000508 "0ISA_P40" */ + 0x43,0x01,0x50,0x52,0x51,0x30,0x08,0x50, /* 00000510 "C.PRQ0.P" */ + 0x52,0x51,0x31,0x08,0x50,0x52,0x51,0x32, /* 00000518 "RQ1.PRQ2" */ + 0x08,0x50,0x52,0x51,0x33,0x08,0x5B,0x82, /* 00000520 ".PRQ3.[." */ + 0x4E,0x0A,0x4C,0x4E,0x4B,0x41,0x08,0x5F, /* 00000528 "N.LNKA._" */ + 0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F, /* 00000530 "HID.A..." */ + 0x08,0x5F,0x55,0x49,0x44,0x01,0x08,0x5F, /* 00000538 "._UID.._" */ + 0x50,0x52,0x53,0x11,0x09,0x0A,0x06,0x23, /* 00000540 "PRS....#" */ + 0xF8,0x1E,0x18,0x79,0x00,0x14,0x1A,0x5F, /* 00000548 "...y..._" */ + 0x53,0x54,0x41,0x00,0x70,0x0A,0x0B,0x60, /* 00000550 "STA.p..`" */ + 0xA0,0x0D,0x7B,0x0A,0x80,0x50,0x52,0x51, /* 00000558 "..{..PRQ" */ + 0x30,0x61,0x70,0x0A,0x09,0x60,0xA4,0x60, /* 00000560 "0ap..`.`" */ + 0x14,0x11,0x5F,0x44,0x49,0x53,0x00,0x7D, /* 00000568 ".._DIS.}" */ + 0x50,0x52,0x51,0x30,0x0A,0x80,0x50,0x52, /* 00000570 "PRQ0..PR" */ + 0x51,0x30,0x14,0x3F,0x5F,0x43,0x52,0x53, /* 00000578 "Q0.?_CRS" */ + 0x00,0x08,0x50,0x52,0x52,0x30,0x11,0x09, /* 00000580 "..PRR0.." */ + 0x0A,0x06,0x23,0x02,0x00,0x18,0x79,0x00, /* 00000588 "..#...y." */ + 0x8B,0x50,0x52,0x52,0x30,0x01,0x54,0x4D, /* 00000590 ".PRR0.TM" */ + 0x50,0x5F,0x70,0x50,0x52,0x51,0x30,0x60, /* 00000598 "P_pPRQ0`" */ + 0xA0,0x0C,0x95,0x60,0x0A,0x80,0x79,0x01, /* 000005A0 "...`..y." */ + 0x60,0x54,0x4D,0x50,0x5F,0xA1,0x07,0x70, /* 000005A8 "`TMP_..p" */ + 0x00,0x54,0x4D,0x50,0x5F,0xA4,0x50,0x52, /* 000005B0 ".TMP_.PR" */ + 0x52,0x30,0x14,0x1B,0x5F,0x53,0x52,0x53, /* 000005B8 "R0.._SRS" */ + 0x01,0x8B,0x68,0x01,0x54,0x4D,0x50,0x5F, /* 000005C0 "..h.TMP_" */ + 0x82,0x54,0x4D,0x50,0x5F,0x60,0x76,0x60, /* 000005C8 ".TMP_`v`" */ + 0x70,0x60,0x50,0x52,0x51,0x30,0x5B,0x82, /* 000005D0 "p`PRQ0[." */ + 0x4F,0x0A,0x4C,0x4E,0x4B,0x42,0x08,0x5F, /* 000005D8 "O.LNKB._" */ + 0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F, /* 000005E0 "HID.A..." */ + 0x08,0x5F,0x55,0x49,0x44,0x0A,0x02,0x08, /* 000005E8 "._UID..." */ + 0x5F,0x50,0x52,0x53,0x11,0x09,0x0A,0x06, /* 000005F0 "_PRS...." */ + 0x23,0xF8,0x1E,0x18,0x79,0x00,0x14,0x1A, /* 000005F8 "#...y..." */ + 0x5F,0x53,0x54,0x41,0x00,0x70,0x0A,0x0B, /* 00000600 "_STA.p.." */ + 0x60,0xA0,0x0D,0x7B,0x0A,0x80,0x50,0x52, /* 00000608 "`..{..PR" */ + 0x51,0x31,0x61,0x70,0x0A,0x09,0x60,0xA4, /* 00000610 "Q1ap..`." */ + 0x60,0x14,0x11,0x5F,0x44,0x49,0x53,0x00, /* 00000618 "`.._DIS." */ + 0x7D,0x50,0x52,0x51,0x31,0x0A,0x80,0x50, /* 00000620 "}PRQ1..P" */ + 0x52,0x51,0x31,0x14,0x3F,0x5F,0x43,0x52, /* 00000628 "RQ1.?_CR" */ + 0x53,0x00,0x08,0x50,0x52,0x52,0x30,0x11, /* 00000630 "S..PRR0." */ + 0x09,0x0A,0x06,0x23,0x02,0x00,0x18,0x79, /* 00000638 "...#...y" */ + 0x00,0x8B,0x50,0x52,0x52,0x30,0x01,0x54, /* 00000640 "..PRR0.T" */ + 0x4D,0x50,0x5F,0x70,0x50,0x52,0x51,0x31, /* 00000648 "MP_pPRQ1" */ + 0x60,0xA0,0x0C,0x95,0x60,0x0A,0x80,0x79, /* 00000650 "`...`..y" */ + 0x01,0x60,0x54,0x4D,0x50,0x5F,0xA1,0x07, /* 00000658 ".`TMP_.." */ + 0x70,0x00,0x54,0x4D,0x50,0x5F,0xA4,0x50, /* 00000660 "p.TMP_.P" */ + 0x52,0x52,0x30,0x14,0x1B,0x5F,0x53,0x52, /* 00000668 "RR0.._SR" */ + 0x53,0x01,0x8B,0x68,0x01,0x54,0x4D,0x50, /* 00000670 "S..h.TMP" */ + 0x5F,0x82,0x54,0x4D,0x50,0x5F,0x60,0x76, /* 00000678 "_.TMP_`v" */ + 0x60,0x70,0x60,0x50,0x52,0x51,0x31,0x5B, /* 00000680 "`p`PRQ1[" */ + 0x82,0x4F,0x0A,0x4C,0x4E,0x4B,0x43,0x08, /* 00000688 ".O.LNKC." */ + 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C, /* 00000690 "_HID.A.." */ + 0x0F,0x08,0x5F,0x55,0x49,0x44,0x0A,0x03, /* 00000698 ".._UID.." */ + 0x08,0x5F,0x50,0x52,0x53,0x11,0x09,0x0A, /* 000006A0 "._PRS..." */ + 0x06,0x23,0xF8,0x1E,0x18,0x79,0x00,0x14, /* 000006A8 ".#...y.." */ + 0x1A,0x5F,0x53,0x54,0x41,0x00,0x70,0x0A, /* 000006B0 "._STA.p." */ + 0x0B,0x60,0xA0,0x0D,0x7B,0x0A,0x80,0x50, /* 000006B8 ".`..{..P" */ + 0x52,0x51,0x32,0x61,0x70,0x0A,0x09,0x60, /* 000006C0 "RQ2ap..`" */ + 0xA4,0x60,0x14,0x11,0x5F,0x44,0x49,0x53, /* 000006C8 ".`.._DIS" */ + 0x00,0x7D,0x50,0x52,0x51,0x32,0x0A,0x80, /* 000006D0 ".}PRQ2.." */ + 0x50,0x52,0x51,0x32,0x14,0x3F,0x5F,0x43, /* 000006D8 "PRQ2.?_C" */ + 0x52,0x53,0x00,0x08,0x50,0x52,0x52,0x30, /* 000006E0 "RS..PRR0" */ + 0x11,0x09,0x0A,0x06,0x23,0x02,0x00,0x18, /* 000006E8 "....#..." */ + 0x79,0x00,0x8B,0x50,0x52,0x52,0x30,0x01, /* 000006F0 "y..PRR0." */ + 0x54,0x4D,0x50,0x5F,0x70,0x50,0x52,0x51, /* 000006F8 "TMP_pPRQ" */ + 0x32,0x60,0xA0,0x0C,0x95,0x60,0x0A,0x80, /* 00000700 "2`...`.." */ + 0x79,0x01,0x60,0x54,0x4D,0x50,0x5F,0xA1, /* 00000708 "y.`TMP_." */ + 0x07,0x70,0x00,0x54,0x4D,0x50,0x5F,0xA4, /* 00000710 ".p.TMP_." */ + 0x50,0x52,0x52,0x30,0x14,0x1B,0x5F,0x53, /* 00000718 "PRR0.._S" */ + 0x52,0x53,0x01,0x8B,0x68,0x01,0x54,0x4D, /* 00000720 "RS..h.TM" */ + 0x50,0x5F,0x82,0x54,0x4D,0x50,0x5F,0x60, /* 00000728 "P_.TMP_`" */ + 0x76,0x60,0x70,0x60,0x50,0x52,0x51,0x32, /* 00000730 "v`p`PRQ2" */ + 0x5B,0x82,0x4F,0x0A,0x4C,0x4E,0x4B,0x44, /* 00000738 "[.O.LNKD" */ + 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 00000740 "._HID.A." */ + 0x0C,0x0F,0x08,0x5F,0x55,0x49,0x44,0x0A, /* 00000748 "..._UID." */ + 0x04,0x08,0x5F,0x50,0x52,0x53,0x11,0x09, /* 00000750 ".._PRS.." */ + 0x0A,0x06,0x23,0xF8,0x1E,0x18,0x79,0x00, /* 00000758 "..#...y." */ + 0x14,0x1A,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00000760 ".._STA.p" */ + 0x0A,0x0B,0x60,0xA0,0x0D,0x7B,0x0A,0x80, /* 00000768 "..`..{.." */ + 0x50,0x52,0x51,0x33,0x61,0x70,0x0A,0x09, /* 00000770 "PRQ3ap.." */ + 0x60,0xA4,0x60,0x14,0x11,0x5F,0x44,0x49, /* 00000778 "`.`.._DI" */ + 0x53,0x00,0x7D,0x50,0x52,0x51,0x33,0x0A, /* 00000780 "S.}PRQ3." */ + 0x80,0x50,0x52,0x51,0x33,0x14,0x3F,0x5F, /* 00000788 ".PRQ3.?_" */ + 0x43,0x52,0x53,0x00,0x08,0x50,0x52,0x52, /* 00000790 "CRS..PRR" */ + 0x30,0x11,0x09,0x0A,0x06,0x23,0x02,0x00, /* 00000798 "0....#.." */ + 0x18,0x79,0x00,0x8B,0x50,0x52,0x52,0x30, /* 000007A0 ".y..PRR0" */ + 0x01,0x54,0x4D,0x50,0x5F,0x70,0x50,0x52, /* 000007A8 ".TMP_pPR" */ + 0x51,0x33,0x60,0xA0,0x0C,0x95,0x60,0x0A, /* 000007B0 "Q3`...`." */ + 0x80,0x79,0x01,0x60,0x54,0x4D,0x50,0x5F, /* 000007B8 ".y.`TMP_" */ + 0xA1,0x07,0x70,0x00,0x54,0x4D,0x50,0x5F, /* 000007C0 "..p.TMP_" */ + 0xA4,0x50,0x52,0x52,0x30,0x14,0x1B,0x5F, /* 000007C8 ".PRR0.._" */ + 0x53,0x52,0x53,0x01,0x8B,0x68,0x01,0x54, /* 000007D0 "SRS..h.T" */ + 0x4D,0x50,0x5F,0x82,0x54,0x4D,0x50,0x5F, /* 000007D8 "MP_.TMP_" */ + 0x60,0x76,0x60,0x70,0x60,0x50,0x52,0x51, /* 000007E0 "`v`p`PRQ" */ + 0x33,0x08,0x5F,0x53,0x33,0x5F,0x12,0x06, /* 000007E8 "3._S3_.." */ + 0x04,0x01,0x01,0x00,0x00,0x08,0x5F,0x53, /* 000007F0 "......_S" */ + 0x34,0x5F,0x12,0x06,0x04,0x00,0x00,0x00, /* 000007F8 "4_......" */ + 0x00,0x08,0x5F,0x53,0x35,0x5F,0x12,0x06, /* 00000800 ".._S5_.." */ + 0x04,0x00,0x00,0x00,0x00, +}; diff --git a/bochs/bios/apmbios.S b/bochs/bios/apmbios.S new file mode 100644 index 00000000..41c9e7ef --- /dev/null +++ b/bochs/bios/apmbios.S @@ -0,0 +1,365 @@ +// APM BIOS support for the Bochs BIOS +// Copyright (C) 2004 Fabrice Bellard +// +// Debugging extensions, 16-bit interface and extended power options +// Copyright (C) 2005 Struan Bartlett +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#if defined(APM_REAL) +#define APMSYM(s) apmreal_ ## s +#elif defined(APM_PROT16) +#define APMSYM(s) apm16_ ## s +#elif defined(APM_PROT32) +#define APMSYM(s) apm32_ ## s +#else +#error unsupported APM mode +#endif + +APMSYM(out_str): + push eax + push ebx + mov ebx, eax +APMSYM(out_str1): + SEG CS + mov al, byte ptr [bx] + cmp al, #0 + je APMSYM(out_str2) + outb dx, al + inc ebx + jmp APMSYM(out_str1) +APMSYM(out_str2): + pop ebx + pop eax + ret + +APMSYM(07_poweroff_str): + .ascii "Shutdown" + db 0 +APMSYM(07_suspend_str): + .ascii "Suspend" + db 0 +APMSYM(07_standby_str): + .ascii "Standby" + db 0 + +#if DEBUG_APM +APMSYM(put_str): + push edx + mov dx, #INFO_PORT + call APMSYM(out_str) + pop edx + ret + +; print the hex number in eax +APMSYM(put_num): + push eax + push ebx + push ecx + push edx + mov ecx, eax + mov bx, #8 + mov dx, #INFO_PORT +APMSYM(put_num1): + mov eax, ecx + shr eax, #28 + add al, #0x30 + cmp al, #0x39 + jbe APMSYM(put_num2) + add al, #0x27 +APMSYM(put_num2): + outb dx, al + shl ecx, #4 + dec bx + jne APMSYM(put_num1) + pop edx + pop ecx + pop ebx + pop eax + ret + +APMSYM(put_reg): + outb dx, al + shr eax, #8 + outb dx, al + shr eax, #8 + outb dx, al + shr eax, #8 + outb dx, al + + mov eax,ebx + call APMSYM(put_num) + + mov al, #0x3b + outb dx,al + mov al, #0x20 + outb dx,al + ret + +APMSYM(put_regs): + push eax + push edx + push ebx + mov dx, #INFO_PORT + + mov ebx, eax + mov eax, #0x3d584145 // 'EAX=' + call APMSYM(put_reg) + pop ebx + push ebx + mov eax, #0x3d584245 // 'EBX=' + call APMSYM(put_reg) + mov ebx, ecx + mov eax, #0x3d584345 // 'ECX=' + call APMSYM(put_reg) + mov ebx, edx + mov eax, #0x3d584445 // 'EDX=' + call APMSYM(put_reg) + mov ebx, esi + mov eax, #0x3d495345 // 'ESI=' + call APMSYM(put_reg) + mov ebx, edi + mov eax, #0x3d494445 // 'EDI=' + call APMSYM(put_reg) + + mov al, #0x0a + outb dx, al + pop ebx + pop edx + pop eax + ret +#endif + +#if defined(APM_PROT32) +_apm32_entry: +#endif +#if defined(APM_PROT16) +_apm16_entry: +#endif + pushf + +#if defined(APM_REAL) +_apmreal_entry: +#endif + +#if DEBUG_APM + call APMSYM(put_regs) +#endif + +#if defined(APM_REAL) +;----------------- +; APM installation check +APMSYM(00): + cmp al, #0x00 + jne APMSYM(01) + + mov ah, #1 // APM major version + mov al, #2 // APM minor version + + mov bh, #0x50 // 'P' + mov bl, #0x4d // 'M' + + // bit 0 : 16 bit interface supported + // bit 1 : 32 bit interface supported + mov cx, #0x3 + jmp APMSYM(ok) + +;----------------- +; APM real mode interface connect +APMSYM(01): + cmp al, #0x01 + jne APMSYM(02) + jmp APMSYM(ok) + +;----------------- +; APM 16 bit protected mode interface connect +APMSYM(02): + cmp al, #0x02 + jne APMSYM(03) + + mov bx, #_apm16_entry + + mov ax, #0xf000 // 16 bit code segment base + mov si, #0xfff0 // 16 bit code segment size + mov cx, #0xf000 // data segment address + mov di, #0xfff0 // data segment length + jmp APMSYM(ok) + +;----------------- +; APM 32 bit protected mode interface connect +APMSYM(03): + cmp al, #0x03 + jne APMSYM(04) + mov ax, #0xf000 // 32 bit code segment base + mov ebx, #_apm32_entry + mov cx, #0xf000 // 16 bit code segment base + // 32 bit code segment size (low 16 bits) + // 16 bit code segment size (high 16 bits) + mov esi, #0xfff0fff0 + mov dx, #0xf000 // data segment address + mov di, #0xfff0 // data segment length + jmp APMSYM(ok) +#endif + +;----------------- +; APM interface disconnect +APMSYM(04): + cmp al, #0x04 + jne APMSYM(05) + jmp APMSYM(ok) + +;----------------- +; APM cpu idle +APMSYM(05): + cmp al, #0x05 + jne APMSYM(07) + sti + hlt + jmp APMSYM(ok) + +;----------------- +; APM Set Power State +APMSYM(07): + cmp al, #0x07 + jne APMSYM(08) + + cmp bx, #1 + jne APMSYM(ok) + + cmp cx, #3 + je APMSYM(07_poweroff) + + cmp cx, #2 + je APMSYM(07_suspend) + + cmp cx, #1 + je APMSYM(07_standby) + + jne APMSYM(ok) + +APMSYM(07_poweroff): + // send power off event to emulator + cli + mov dx, #0x8900 + mov ax, #APMSYM(07_poweroff_str) + call APMSYM(out_str) + +APMSYM(07_1): + hlt + jmp APMSYM(07_1) + +APMSYM(07_suspend): + push edx + mov dx, #0x8900 + mov ax, #APMSYM(07_suspend_str) + call APMSYM(out_str) + pop edx + jmp APMSYM(ok) + +APMSYM(07_standby): + push edx + mov dx, #0x8900 + mov ax, #APMSYM(07_standby_str) + call APMSYM(out_str) + pop edx + jmp APMSYM(ok) + +;----------------- +; APM Enable / Disable +APMSYM(08): + cmp al, #0x08 + jne APMSYM(0a) + + jmp APMSYM(ok) + +;----------------- +; Get Power Status +APMSYM(0a): + cmp al, #0x0a + jne APMSYM(0b) + mov bh, #0x01 // on line + // mov bh, #0x02 // battery + mov bl, #0xff // unknown battery status + // mov bl, #0x03 // charging + mov ch, #0x80 // no system battery + // mov ch, #0x8 // charging + mov cl, #0xff // unknown remaining time + // mov cl, #50 + mov dx, #0xffff // unknown remaining time + mov si, #0 // zero battery + // mov si, #1 // one battery + jmp APMSYM(ok) + +;----------------- +; Get PM Event +APMSYM(0b): + cmp al, #0x0b + jne APMSYM(0e) + mov ah, #0x80 // no event pending + jmp APMSYM(error) + +;----------------- +; APM Driver Version +APMSYM(0e): + cmp al, #0x0e + jne APMSYM(0f) + + mov ah, #1 + mov al, #2 + + jmp APMSYM(ok) + +;----------------- +; APM Engage / Disengage +APMSYM(0f): + cmp al, #0x0f + jne APMSYM(10) + + jmp APMSYM(ok) + +;----------------- +; APM Get Capabilities +APMSYM(10): + cmp al, #0x10 + jne APMSYM(unimplemented) + + mov bl, #0 + mov cx, #0 + + jmp APMSYM(ok) + +;----------------- +APMSYM(ok): + popf + clc +#if defined(APM_REAL) + jmp iret_modify_cf +#else + retf +#endif +APMSYM(unimplemented): +APMSYM(error): + popf + stc +#if defined(APM_REAL) + jmp iret_modify_cf +#else + retf +#endif + +#undef APM_PROT32 +#undef APM_PROT16 +#undef APM_REAL +#undef APMSYM diff --git a/bochs/bios/bios_usage b/bochs/bios/bios_usage new file mode 100644 index 00000000..8019ef63 --- /dev/null +++ b/bochs/bios/bios_usage @@ -0,0 +1,4 @@ +#!/bin/csh -f +gcc -E rombios.c | grep "^\.org" | sed -e 's/\.org //' | sed -e 's/ .*//' | sort >! temp.usage +usage rombios.bin temp.usage +/bin/rm temp.usage diff --git a/bochs/bios/biossums.c b/bochs/bios/biossums.c new file mode 100644 index 00000000..f6780a39 --- /dev/null +++ b/bochs/bios/biossums.c @@ -0,0 +1,589 @@ +/* + * $Id$ + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* biossums.c --- written by Eike W. for the Bochs BIOS */ + +#include +#include +#include + +typedef unsigned char byte; + +void check( int value, char* message ); + +#define LEN_BIOS_DATA 0x10000 +#define MAX_OFFSET (LEN_BIOS_DATA - 1) + + +#define BIOS_OFFSET 0xFFFF + +long chksum_bios_get_offset( byte* data, long offset ); +byte chksum_bios_calc_value( byte* data, long offset ); +byte chksum_bios_get_value( byte* data, long offset ); +void chksum_bios_set_value( byte* data, long offset, byte value ); + + +#define _32__LEN 9 +#define _32__CHKSUM 10 + +#define _32__MINHDR 16 + +long chksum__32__get_offset( byte* data, long offset ); +byte chksum__32__calc_value( byte* data, long offset ); +byte chksum__32__get_value( byte* data, long offset ); +void chksum__32__set_value( byte* data, long offset, byte value ); + + +#define _MP__LEN 8 +#define _MP__CHKSUM 10 + +#define _MP__MINHDR 16 + +long chksum__mp__get_offset( byte* data, long offset ); +byte chksum__mp__calc_value( byte* data, long offset ); +byte chksum__mp__get_value( byte* data, long offset ); +void chksum__mp__set_value( byte* data, long offset, byte value ); + + +#define PCMP_BASELEN 4 +#define PCMP_CHKSUM 7 +#define PCMP_EXT_LEN 40 +#define PCMP_EXT_CHKSUM 42 + +#define PCMP_MINHDR 42 + +long chksum_pcmp_get_offset( byte* data, long offset ); +byte chksum_pcmp_calc_value( byte* data, long offset ); +byte chksum_pcmp_get_value( byte* data, long offset ); +void chksum_pcmp_set_value( byte* data, long offset, byte value ); + + +#define _PIR_LEN 6 +#define _PIR_CHKSUM 31 + +#define _PIR_MINHDR 32 + +long chksum__pir_get_offset( byte *data, long offset ); +byte chksum__pir_calc_value( byte* data, long offset ); +byte chksum__pir_get_value( byte* data, long offset ); +void chksum__pir_set_value( byte* data, long offset, byte value ); + +#define _PNP_LEN 5 +#define _PNP_CHKSUM 8 + +#define _PNP_MINHDR 32 + +long chksum__pnp_get_offset( byte *data, long offset ); +byte chksum__pnp_calc_value( byte* data, long offset ); +byte chksum__pnp_get_value( byte* data, long offset ); +void chksum__pnp_set_value( byte* data, long offset, byte value ); + +byte bios_data[LEN_BIOS_DATA]; +long bios_len; + + +int main(int argc, char* argv[]) { + + FILE* stream; + long offset, tmp_offset; + byte cur_val = 0, new_val = 0; + int arg = 1, hits, pad = 0; + + + if ((argc == 3) && (!strcmp(argv[1], "-pad"))) { + pad = 1; + arg = 2; + } else if (argc != 2) { + printf("Error. Need a file-name as an argument.\n"); + exit(EXIT_FAILURE); + } + memset(bios_data, 0xff, LEN_BIOS_DATA); + + if ((stream = fopen(argv[arg], "rb")) == NULL) { + printf("Error opening %s for reading.\n", argv[arg]); + exit(EXIT_FAILURE); + } + bios_len = fread(bios_data, 1, LEN_BIOS_DATA, stream); + if ((bios_len < LEN_BIOS_DATA) && (pad == 0)) { + printf("Error reading 64KBytes from %s.\n", argv[arg]); + fclose(stream); + exit(EXIT_FAILURE); + } + fclose(stream); + if (pad == 1) goto write_bios; + + hits = 0; + offset = 0L; + while( (tmp_offset = chksum__32__get_offset( bios_data, offset )) != -1L ) { + offset = tmp_offset; + cur_val = chksum__32__get_value( bios_data, offset ); + new_val = chksum__32__calc_value( bios_data, offset ); + printf( "\n\nPCI-Bios header at: 0x%4lX\n", offset ); + printf( "Current checksum: 0x%02X\n", cur_val ); + printf( "Calculated checksum: 0x%02X ", new_val ); + hits++; + } + if( hits == 1 && cur_val != new_val ) { + printf( "Setting checksum." ); + chksum__32__set_value( bios_data, offset, new_val ); + } + if( hits >= 2 ) { + printf( "Multiple PCI headers! No checksum set." ); + } + if( hits ) { + printf( "\n" ); + } + + + hits = 0; + offset = 0L; + while( (tmp_offset = chksum__mp__get_offset( bios_data, offset )) != -1L ) { + offset = tmp_offset; + cur_val = chksum__mp__get_value( bios_data, offset ); + new_val = chksum__mp__calc_value( bios_data, offset ); + printf( "\n\nMP header at: 0x%4lX\n", offset ); + printf( "Current checksum: 0x%02X\n", cur_val ); + printf( "Calculated checksum: 0x%02X ", new_val ); + hits++; + } + if( hits == 1 && cur_val != new_val ) { + printf( "Setting checksum." ); + chksum__mp__set_value( bios_data, offset, new_val ); + } + if( hits >= 2 ) { + printf( "Warning! Multiple MP headers. No checksum set." ); + } + if( hits ) { + printf( "\n" ); + } + + + hits = 0; + offset = 0L; + while( (tmp_offset = chksum_pcmp_get_offset( bios_data, offset )) != -1L ) { + offset = tmp_offset; + cur_val = chksum_pcmp_get_value( bios_data, offset ); + new_val = chksum_pcmp_calc_value( bios_data, offset ); + printf( "\n\nPCMP header at: 0x%4lX\n", offset ); + printf( "Current checksum: 0x%02X\n", cur_val ); + printf( "Calculated checksum: 0x%02X ", new_val ); + hits++; + } + if( hits == 1 && cur_val != new_val ) { + printf( "Setting checksum." ); + chksum_pcmp_set_value( bios_data, offset, new_val ); + } + if( hits >= 2 ) { + printf( "Warning! Multiple PCMP headers. No checksum set." ); + } + if( hits ) { + printf( "\n" ); + } + + + hits = 0; + offset = 0L; + while( (tmp_offset = chksum__pir_get_offset( bios_data, offset )) != -1L ) { + offset = tmp_offset; + cur_val = chksum__pir_get_value( bios_data, offset ); + new_val = chksum__pir_calc_value( bios_data, offset ); + printf( "\n\n$PIR header at: 0x%4lX\n", offset ); + printf( "Current checksum: 0x%02X\n", cur_val ); + printf( "Calculated checksum: 0x%02X\n ", new_val ); + hits++; + } + if( hits == 1 && cur_val != new_val ) { + printf( "Setting checksum." ); + chksum__pir_set_value( bios_data, offset, new_val ); + } + if( hits >= 2 ) { + printf( "Warning! Multiple $PIR headers. No checksum set." ); + } + if( hits ) { + printf( "\n" ); + } + + + hits = 0; + offset = 0L; + while( (tmp_offset = chksum__pnp_get_offset( bios_data, offset )) != -1L ) { + offset = tmp_offset; + cur_val = chksum__pnp_get_value( bios_data, offset ); + new_val = chksum__pnp_calc_value( bios_data, offset ); + printf( "\n\n$PnP header at: 0x%4lX\n", offset ); + printf( "Current checksum: 0x%02X\n", cur_val ); + printf( "Calculated checksum: 0x%02X\n ", new_val ); + hits++; + } + if( hits == 1 && cur_val != new_val ) { + printf( "Setting checksum." ); + chksum__pnp_set_value( bios_data, offset, new_val ); + } + if( hits >= 2 ) { + printf( "Warning! Multiple $PnP headers. No checksum set." ); + } + if( hits ) { + printf( "\n" ); + } + + offset = 0L; + offset = chksum_bios_get_offset( bios_data, offset ); + cur_val = chksum_bios_get_value( bios_data, offset ); + new_val = chksum_bios_calc_value( bios_data, offset ); + printf( "\n\nBios checksum at: 0x%4lX\n", offset ); + printf( "Current checksum: 0x%02X\n", cur_val ); + printf( "Calculated checksum: 0x%02X ", new_val ); + if( cur_val != new_val ) { + printf( "Setting checksum." ); + chksum_bios_set_value( bios_data, offset, new_val ); + } + printf( "\n" ); + +write_bios: + if ((stream = fopen(argv[arg], "wb")) == NULL) { + printf("Error opening %s for writing.\n", argv[arg]); + exit(EXIT_FAILURE); + } + if (fwrite(bios_data, 1, LEN_BIOS_DATA, stream) < LEN_BIOS_DATA) { + printf("Error writing 64KBytes to %s.\n", argv[arg]); + fclose(stream); + exit(EXIT_FAILURE); + } + fclose(stream); + + return(EXIT_SUCCESS); +} + + +void check(int okay, char* message) { + + if (!okay) { + printf("\n\nError. %s.\n", message); + exit(EXIT_FAILURE); + } +} + + +long chksum_bios_get_offset( byte* data, long offset ) { + + return( BIOS_OFFSET ); +} + + +byte chksum_bios_calc_value( byte* data, long offset ) { + + int i; + byte sum; + + sum = 0; + for( i = 0; i < MAX_OFFSET; i++ ) { + sum = sum + *( data + i ); + } + sum = -sum; /* iso ensures -s + s == 0 on unsigned types */ + return( sum ); +} + + +byte chksum_bios_get_value( byte* data, long offset ) { + + return( *( data + BIOS_OFFSET ) ); +} + + +void chksum_bios_set_value( byte* data, long offset, byte value ) { + + *( data + BIOS_OFFSET ) = value; +} + + +byte chksum__32__calc_value( byte* data, long offset ) { + + int i; + int len; + byte sum; + + check( offset + _32__MINHDR <= MAX_OFFSET, "_32_ header out of bounds" ); + len = *( data + offset + _32__LEN ) << 4; + check( offset + len <= MAX_OFFSET, "_32_ header-length out of bounds" ); + sum = 0; + for( i = 0; i < len; i++ ) { + if( i != _32__CHKSUM ) { + sum = sum + *( data + offset + i ); + } + } + sum = -sum; + return( sum ); +} + + +long chksum__32__get_offset( byte* data, long offset ) { + + long result = -1L; + + offset = offset + 0x0F; + offset = offset & ~( 0x0F ); + while( offset + 16 < MAX_OFFSET ) { + offset = offset + 16; + if( *( data + offset + 0 ) == '_' && \ + *( data + offset + 1 ) == '3' && \ + *( data + offset + 2 ) == '2' && \ + *( data + offset + 3 ) == '_' ) { + result = offset; + break; + } + } + return( result ); +} + + +byte chksum__32__get_value( byte* data, long offset ) { + + check( offset + _32__CHKSUM <= MAX_OFFSET, "PCI-Bios checksum out of bounds" ); + return( *( data + offset + _32__CHKSUM ) ); +} + + +void chksum__32__set_value( byte* data, long offset, byte value ) { + + check( offset + _32__CHKSUM <= MAX_OFFSET, "PCI-Bios checksum out of bounds" ); + *( data + offset + _32__CHKSUM ) = value; +} + + +byte chksum__mp__calc_value( byte* data, long offset ) { + + int i; + int len; + byte sum; + + check( offset + _MP__MINHDR <= MAX_OFFSET, "_MP_ header out of bounds" ); + len = *( data + offset + _MP__LEN ) << 4; + check( offset + len <= MAX_OFFSET, "_MP_ header-length out of bounds" ); + sum = 0; + for( i = 0; i < len; i++ ) { + if( i != _MP__CHKSUM ) { + sum = sum + *( data + offset + i ); + } + } + sum = -sum; + return( sum ); +} + + +long chksum__mp__get_offset( byte* data, long offset ) { + + long result = -1L; + + offset = offset + 0x0F; + offset = offset & ~( 0x0F ); + while( offset + 16 < MAX_OFFSET ) { + offset = offset + 16; + if( *( data + offset + 0 ) == '_' && \ + *( data + offset + 1 ) == 'M' && \ + *( data + offset + 2 ) == 'P' && \ + *( data + offset + 3 ) == '_' ) { + result = offset; + break; + } + } + return( result ); +} + + +byte chksum__mp__get_value( byte* data, long offset ) { + + check( offset + _MP__CHKSUM <= MAX_OFFSET, "MP checksum out of bounds" ); + return( *( data + offset + _MP__CHKSUM ) ); +} + + +void chksum__mp__set_value( byte* data, long offset, byte value ) { + + check( offset + _MP__CHKSUM <= MAX_OFFSET, "MP checksum out of bounds" ); + *( data + offset + _MP__CHKSUM ) = value; +} + + +byte chksum_pcmp_calc_value( byte* data, long offset ) { + + int i; + int len; + byte sum; + + check( offset + PCMP_MINHDR <= MAX_OFFSET, "PCMP header out of bounds" ); + len = *( data + offset + PCMP_BASELEN ) + \ + ( *( data + offset + PCMP_BASELEN + 1 ) << 8 ); + check( offset + len <= MAX_OFFSET, "PCMP header-length out of bounds" ); + if( *( data + offset + PCMP_EXT_LEN ) | \ + *( data + offset + PCMP_EXT_LEN + 1 ) | \ + *( data + offset + PCMP_EXT_CHKSUM ) ) { + check( 0, "PCMP header indicates extended tables (unsupported)" ); + } + sum = 0; + for( i = 0; i < len; i++ ) { + if( i != PCMP_CHKSUM ) { + sum = sum + *( data + offset + i ); + } + } + sum = -sum; + return( sum ); +} + + +long chksum_pcmp_get_offset( byte* data, long offset ) { + + long result = -1L; + + offset = offset + 0x0F; + offset = offset & ~( 0x0F ); + while( offset + 16 < MAX_OFFSET ) { + offset = offset + 16; + if( *( data + offset + 0 ) == 'P' && \ + *( data + offset + 1 ) == 'C' && \ + *( data + offset + 2 ) == 'M' && \ + *( data + offset + 3 ) == 'P' ) { + result = offset; + break; + } + } + return( result ); +} + + +byte chksum_pcmp_get_value( byte* data, long offset ) { + + check( offset + PCMP_CHKSUM <= MAX_OFFSET, "PCMP checksum out of bounds" ); + return( *( data + offset + PCMP_CHKSUM ) ); +} + + +void chksum_pcmp_set_value( byte* data, long offset, byte value ) { + + check( offset + PCMP_CHKSUM <= MAX_OFFSET, "PCMP checksum out of bounds" ); + *( data + offset + PCMP_CHKSUM ) = value; +} + + +byte chksum__pir_calc_value( byte* data, long offset ) { + + int i; + int len; + byte sum; + + check( offset + _PIR_MINHDR <= MAX_OFFSET, "$PIR header out of bounds" ); + len = *( data + offset + _PIR_LEN ) + \ + ( *( data + offset + _PIR_LEN + 1 ) << 8 ); + check( offset + len <= MAX_OFFSET, "$PIR header-length out of bounds" ); + sum = 0; + for( i = 0; i < len; i++ ) { + if( i != _PIR_CHKSUM ) { + sum = sum + *( data + offset + i ); + } + } + sum = -sum; + return( sum ); +} + + +long chksum__pir_get_offset( byte* data, long offset ) { + + long result = -1L; + + offset = offset + 0x0F; + offset = offset & ~( 0x0F ); + while( offset + 16 < MAX_OFFSET ) { + offset = offset + 16; + if( *( data + offset + 0 ) == '$' && \ + *( data + offset + 1 ) == 'P' && \ + *( data + offset + 2 ) == 'I' && \ + *( data + offset + 3 ) == 'R' ) { + result = offset; + break; + } + } + return( result ); +} + + +byte chksum__pir_get_value( byte* data, long offset ) { + + check( offset + _PIR_CHKSUM <= MAX_OFFSET, "$PIR checksum out of bounds" ); + return( *( data + offset + _PIR_CHKSUM ) ); +} + + +void chksum__pir_set_value( byte* data, long offset, byte value ) { + + check( offset + _PIR_CHKSUM <= MAX_OFFSET, "$PIR checksum out of bounds" ); + *( data + offset + _PIR_CHKSUM ) = value; +} + + +byte chksum__pnp_calc_value( byte* data, long offset ) { + + int i; + int len; + byte sum; + + check( offset + _PNP_MINHDR <= MAX_OFFSET, "$PnP header out of bounds" ); + len = *( data + offset + _PNP_LEN ); + check( offset + len <= MAX_OFFSET, "$PnP header-length out of bounds" ); + sum = 0; + for( i = 0; i < len; i++ ) { + if( i != _PNP_CHKSUM ) { + sum = sum + *( data + offset + i ); + } + } + sum = -sum; + return( sum ); +} + + +long chksum__pnp_get_offset( byte* data, long offset ) { + + long result = -1L; + + offset = offset + 0x0F; + offset = offset & ~( 0x0F ); + while( offset + 16 < MAX_OFFSET ) { + offset = offset + 16; + if( *( data + offset + 0 ) == '$' && \ + *( data + offset + 1 ) == 'P' && \ + *( data + offset + 2 ) == 'n' && \ + *( data + offset + 3 ) == 'P' ) { + result = offset; + break; + } + } + return( result ); +} + + +byte chksum__pnp_get_value( byte* data, long offset ) { + + check( offset + _PNP_CHKSUM <= MAX_OFFSET, "$PnP checksum out of bounds" ); + return( *( data + offset + _PNP_CHKSUM ) ); +} + + +void chksum__pnp_set_value( byte* data, long offset, byte value ) { + + check( offset + _PNP_CHKSUM <= MAX_OFFSET, "$PnP checksum out of bounds" ); + *( data + offset + _PNP_CHKSUM ) = value; +} + diff --git a/bochs/bios/makesym.perl b/bochs/bios/makesym.perl new file mode 100755 index 00000000..da9cacb5 --- /dev/null +++ b/bochs/bios/makesym.perl @@ -0,0 +1,43 @@ +#!/usr/bin/perl +# +# $Id$ +# +# Read output file from as86 (e.g. rombios.txt) and write out a symbol +# table suitable for the Bochs debugger. +# + +use strict; +use warnings; + +my $WHERE_BEFORE_SYM_TABLE = 0; +my $WHERE_IN_SYM_TABLE = 1; +my $WHERE_AFTER_SYM_TABLE = 2; + +my $where = $WHERE_BEFORE_SYM_TABLE; +while () { + chop; + if ($where == $WHERE_BEFORE_SYM_TABLE && /^Symbols:/) { + $where = $WHERE_IN_SYM_TABLE; + } elsif ($where == $WHERE_IN_SYM_TABLE && /^$/) { + $where = $WHERE_AFTER_SYM_TABLE; + } + if ($where == $WHERE_IN_SYM_TABLE) { + my $name; + my $junk; + foreach my $f (split(/\s+/)) { + if ($f =~ /^[[:xdigit:]]{4,}$/) { + if (defined($name)) { + print '000f', lc($f), ' ', $name, "\n"; + undef($name); + undef($junk); + next; + } + } + $name = $junk + if (defined($junk)); + $junk = $f; + } + } +} + +exit(0); diff --git a/bochs/bios/notes b/bochs/bios/notes new file mode 100644 index 00000000..ae1073e9 --- /dev/null +++ b/bochs/bios/notes @@ -0,0 +1,44 @@ +#################### +# Read Disk Sector # +#################### + +System programming: +------------------- + +(Int 13h, ah=2) +in 1f7 until BSY cleared +out 1f2, AL # number of sectors +out 1f3, cl (bits 0-5) # starting sector number +out 1f4, ch # cylinder number bits 0..7, 0 based +out 1f5, cl (bits 6,7) & dh (bits 6,7) # cyl, bits 8..9, 10..11 +out 1f6, dh (bits 0..3) --> bits 0..3 # head number + dh (bits 4..5) --> ??? # head number + dl (bit 0) --> bit 4 # drive number +out 1f7, 0x20 # read sectors command normal + + + +Drive response: +--------------- + +* drive sets the busy bit in Status Reg to 1 +* if command parameters are wrong: + > drive sets the aborted-command bit in the Error register and + error bit in the Status register to 1. + > Drive also sets the busy bit in the Status register to 0. + > Drive then generates an interrupt to the system. +* else: + > drive executes an implied seek to desired track and + reads sectors into sector buffer + > when sector buffer is filled and the data is ready to be + transferred, the drive sets the data-request bit to 1, sets + the busy bit to 0, and generates an interrupt. + > on a single-sector transfer, after the system has transferred + the data, the drive sets the data-request bit and the busy bit to 0. + > on a multiple-sector transfer, after the system has transferred + the first sector of data, the drive sets the data-request bit to 0, + and the busy bit to 1. When each subsequent sector is ready to be + transferred, the drive sets the data-request bit to 1, the busy bit to 0, + and generates an interrupt. When the system has tranferred the last sector, + the drive sets the data-request bit and busy bit to 0. + diff --git a/bochs/bios/rombios.c b/bochs/bios/rombios.c new file mode 100644 index 00000000..29d7797c --- /dev/null +++ b/bochs/bios/rombios.c @@ -0,0 +1,11498 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002 MandrakeSoft S.A. +// +// MandrakeSoft S.A. +// 43, rue d'Aboukir +// 75002 Paris - France +// http://www.linux-mandrake.com/ +// http://www.mandrakesoft.com/ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +// ROM BIOS for use with Bochs/Plex86/QEMU emulation environment + + +// ROM BIOS compatibility entry points: +// =================================== +// $e05b ; POST Entry Point +// $e2c3 ; NMI Handler Entry Point +// $e3fe ; INT 13h Fixed Disk Services Entry Point +// $e401 ; Fixed Disk Parameter Table +// $e6f2 ; INT 19h Boot Load Service Entry Point +// $e6f5 ; Configuration Data Table +// $e729 ; Baud Rate Generator Table +// $e739 ; INT 14h Serial Communications Service Entry Point +// $e82e ; INT 16h Keyboard Service Entry Point +// $e987 ; INT 09h Keyboard Service Entry Point +// $ec59 ; INT 13h Diskette Service Entry Point +// $ef57 ; INT 0Eh Diskette Hardware ISR Entry Point +// $efc7 ; Diskette Controller Parameter Table +// $efd2 ; INT 17h Printer Service Entry Point +// $f045 ; INT 10 Functions 0-Fh Entry Point +// $f065 ; INT 10h Video Support Service Entry Point +// $f0a4 ; MDA/CGA Video Parameter Table (INT 1Dh) +// $f841 ; INT 12h Memory Size Service Entry Point +// $f84d ; INT 11h Equipment List Service Entry Point +// $f859 ; INT 15h System Services Entry Point +// $fa6e ; Character Font for 320x200 & 640x200 Graphics (lower 128 characters) +// $fe6e ; INT 1Ah Time-of-day Service Entry Point +// $fea5 ; INT 08h System Timer ISR Entry Point +// $fef3 ; Initial Interrupt Vector Offsets Loaded by POST +// $ff53 ; IRET Instruction for Dummy Interrupt Handler +// $ff54 ; INT 05h Print Screen Service Entry Point +// $fff0 ; Power-up Entry Point +// $fff5 ; ASCII Date ROM was built - 8 characters in MM/DD/YY +// $fffe ; System Model ID + +// NOTES for ATA/ATAPI driver (cbbochs@free.fr) +// Features +// - supports up to 4 ATA interfaces +// - device/geometry detection +// - 16bits/32bits device access +// - pchs/lba access +// - datain/dataout/packet command support +// +// NOTES for El-Torito Boot (cbbochs@free.fr) +// - CD-ROM booting is only available if ATA/ATAPI Driver is available +// - Current code is only able to boot mono-session cds +// - Current code can not boot and emulate a hard-disk +// the bios will panic otherwise +// - Current code also use memory in EBDA segment. +// - I used cmos byte 0x3D to store extended information on boot-device +// - Code has to be modified modified to handle multiple cdrom drives +// - Here are the cdrom boot failure codes: +// 1 : no atapi device found +// 2 : no atapi cdrom found +// 3 : can not read cd - BRVD +// 4 : cd is not eltorito (BRVD) +// 5 : cd is not eltorito (ISO TAG) +// 6 : cd is not eltorito (ELTORITO TAG) +// 7 : can not read cd - boot catalog +// 8 : boot catalog : bad header +// 9 : boot catalog : bad platform +// 10 : boot catalog : bad signature +// 11 : boot catalog : bootable flag not set +// 12 : can not read cd - boot image +// +// ATA driver +// - EBDA segment. +// I used memory starting at 0x121 in the segment +// - the translation policy is defined in cmos regs 0x39 & 0x3a +// +// TODO : +// +// int74 +// - needs to be reworked. Uses direct [bp] offsets. (?) +// +// int13: +// - f04 (verify sectors) isn't complete (?) +// - f02/03/04 should set current cyl,etc in BDA (?) +// - rewrite int13_relocated & clean up int13 entry code +// +// NOTES: +// - NMI access (bit7 of addr written to 70h) +// +// ATA driver +// - should handle the "don't detect" bit (cmos regs 0x3b & 0x3c) +// - could send the multiple-sector read/write commands +// +// El-Torito +// - Emulate a Hard-disk (currently only diskette can be emulated) see "FIXME ElTorito Harddisk" +// - Implement remaining int13_cdemu functions (as defined by El-Torito specs) +// - cdrom drive is hardcoded to ide 0 device 1 in several places. see "FIXME ElTorito Hardcoded" +// - int13 Fix DL when emulating a cd. In that case DL is decremented before calling real int13. +// This is ok. But DL should be reincremented afterwards. +// - Fix all "FIXME ElTorito Various" +// - should be able to boot any cdrom instead of the first one +// +// BCC Bug: find a generic way to handle the bug of #asm after an "if" (fixed in 0.16.7) + +#include "rombios.h" + + // Sanity Checks +#if BX_CPU<3 +# error Only 386+ cpu supported +#endif +#if BX_USE_ATADRV && !BX_USE_EBDA +# error ATA/ATAPI Driver can only be used if EBDA is available +#endif +#if BX_ELTORITO_BOOT && !BX_USE_ATADRV +# error El-Torito Boot can only be use if ATA/ATAPI Driver is available +#endif + +// define this if you want to make PCIBIOS working on a specific bridge only +// undef enables PCIBIOS when at least one PCI device is found +// i440FX is emulated by Bochs and QEMU +#define PCI_FIXED_HOST_BRIDGE 0x12378086 ;; i440FX PCI bridge + +// #20 is dec 20 +// #$20 is hex 20 = 32 +// #0x20 is hex 20 = 32 +// LDA #$20 +// JSR $E820 +// LDD .i,S +// JSR $C682 +// mov al, #$20 + +// all hex literals should be prefixed with '0x' +// grep "#[0-9a-fA-F][0-9a-fA-F]" rombios.c +// no mov SEG-REG, #value, must mov register into seg-reg +// grep -i "mov[ ]*.s" rombios.c + +// This is for compiling with gcc2 and gcc3 +#define ASM_START #asm +#define ASM_END #endasm + +ASM_START +.rom + +.org 0x0000 + +use16 386 + +MACRO HALT + ;; the HALT macro is called with the line number of the HALT call. + ;; The line number is then sent to the PANIC_PORT, causing Bochs/Plex + ;; to print a BX_PANIC message. This will normally halt the simulation + ;; with a message such as "BIOS panic at rombios.c, line 4091". + ;; However, users can choose to make panics non-fatal and continue. +#if BX_VIRTUAL_PORTS + mov dx,#PANIC_PORT + mov ax,#?1 + out dx,ax +#else + mov dx,#0x80 + mov ax,#?1 + out dx,al +#endif +MEND + +MACRO JMP_AP + db 0xea + dw ?2 + dw ?1 +MEND + +MACRO SET_INT_VECTOR + mov ax, ?3 + mov ?1*4, ax + mov ax, ?2 + mov ?1*4+2, ax +MEND + +ASM_END + +typedef unsigned char Bit8u; +typedef unsigned short Bit16u; +typedef unsigned short bx_bool; +typedef unsigned long Bit32u; + + + void memsetb(seg,offset,value,count); + void memcpyb(dseg,doffset,sseg,soffset,count); + void memcpyd(dseg,doffset,sseg,soffset,count); + + // memset of count bytes + void + memsetb(seg,offset,value,count) + Bit16u seg; + Bit16u offset; + Bit16u value; + Bit16u count; + { + ASM_START + push bp + mov bp, sp + + push ax + push cx + push es + push di + + mov cx, 10[bp] ; count + test cx, cx + je memsetb_end + mov ax, 4[bp] ; segment + mov es, ax + mov ax, 6[bp] ; offset + mov di, ax + mov al, 8[bp] ; value + cld + rep + stosb + + memsetb_end: + pop di + pop es + pop cx + pop ax + + pop bp + ASM_END + } + + // memcpy of count bytes + void + memcpyb(dseg,doffset,sseg,soffset,count) + Bit16u dseg; + Bit16u doffset; + Bit16u sseg; + Bit16u soffset; + Bit16u count; + { + ASM_START + push bp + mov bp, sp + + push ax + push cx + push es + push di + push ds + push si + + mov cx, 12[bp] ; count + test cx, cx + je memcpyb_end + mov ax, 4[bp] ; dsegment + mov es, ax + mov ax, 6[bp] ; doffset + mov di, ax + mov ax, 8[bp] ; ssegment + mov ds, ax + mov ax, 10[bp] ; soffset + mov si, ax + cld + rep + movsb + + memcpyb_end: + pop si + pop ds + pop di + pop es + pop cx + pop ax + + pop bp + ASM_END + } + + // memcpy of count dword + void + memcpyd(dseg,doffset,sseg,soffset,count) + Bit16u dseg; + Bit16u doffset; + Bit16u sseg; + Bit16u soffset; + Bit16u count; + { + ASM_START + push bp + mov bp, sp + + push ax + push cx + push es + push di + push ds + push si + + mov cx, 12[bp] ; count + test cx, cx + je memcpyd_end + mov ax, 4[bp] ; dsegment + mov es, ax + mov ax, 6[bp] ; doffset + mov di, ax + mov ax, 8[bp] ; ssegment + mov ds, ax + mov ax, 10[bp] ; soffset + mov si, ax + cld + rep + movsd + + memcpyd_end: + pop si + pop ds + pop di + pop es + pop cx + pop ax + + pop bp + ASM_END + } + + // read_dword and write_dword functions + static Bit32u read_dword(); + static void write_dword(); + + Bit32u + read_dword(seg, offset) + Bit16u seg; + Bit16u offset; + { + ASM_START + push bp + mov bp, sp + + push bx + push ds + mov ax, 4[bp] ; segment + mov ds, ax + mov bx, 6[bp] ; offset + mov ax, [bx] + add bx, #2 + mov dx, [bx] + ;; ax = return value (word) + ;; dx = return value (word) + pop ds + pop bx + + pop bp + ASM_END + } + + void + write_dword(seg, offset, data) + Bit16u seg; + Bit16u offset; + Bit32u data; + { + ASM_START + push bp + mov bp, sp + + push ax + push bx + push ds + mov ax, 4[bp] ; segment + mov ds, ax + mov bx, 6[bp] ; offset + mov ax, 8[bp] ; data word + mov [bx], ax ; write data word + add bx, #2 + mov ax, 10[bp] ; data word + mov [bx], ax ; write data word + pop ds + pop bx + pop ax + + pop bp + ASM_END + } + + // Bit32u (unsigned long) and long helper functions + ASM_START + + ;; and function + landl: + landul: + SEG SS + and ax,[di] + SEG SS + and bx,2[di] + ret + + ;; add function + laddl: + laddul: + SEG SS + add ax,[di] + SEG SS + adc bx,2[di] + ret + + ;; cmp function + lcmpl: + lcmpul: + and eax, #0x0000FFFF + shl ebx, #16 + or eax, ebx + shr ebx, #16 + SEG SS + cmp eax, dword ptr [di] + ret + + ;; sub function + lsubl: + lsubul: + SEG SS + sub ax,[di] + SEG SS + sbb bx,2[di] + ret + + ;; mul function + lmull: + lmulul: + and eax, #0x0000FFFF + shl ebx, #16 + or eax, ebx + SEG SS + mul eax, dword ptr [di] + mov ebx, eax + shr ebx, #16 + ret + + ;; dec function + ldecl: + ldecul: + SEG SS + dec dword ptr [bx] + ret + + ;; or function + lorl: + lorul: + SEG SS + or ax,[di] + SEG SS + or bx,2[di] + ret + + ;; inc function + lincl: + lincul: + SEG SS + inc dword ptr [bx] + ret + + ;; tst function + ltstl: + ltstul: + and eax, #0x0000FFFF + shl ebx, #16 + or eax, ebx + shr ebx, #16 + test eax, eax + ret + + ;; sr function + lsrul: + mov cx,di + jcxz lsr_exit + and eax, #0x0000FFFF + shl ebx, #16 + or eax, ebx + lsr_loop: + shr eax, #1 + loop lsr_loop + mov ebx, eax + shr ebx, #16 + lsr_exit: + ret + + ;; sl function + lsll: + lslul: + mov cx,di + jcxz lsl_exit + and eax, #0x0000FFFF + shl ebx, #16 + or eax, ebx + lsl_loop: + shl eax, #1 + loop lsl_loop + mov ebx, eax + shr ebx, #16 + lsl_exit: + ret + + idiv_: + cwd + idiv bx + ret + + idiv_u: + xor dx,dx + div bx + ret + + ldivul: + and eax, #0x0000FFFF + shl ebx, #16 + or eax, ebx + xor edx, edx + SEG SS + mov bx, 2[di] + shl ebx, #16 + SEG SS + mov bx, [di] + div ebx + mov ebx, eax + shr ebx, #16 + ret + + ASM_END + +// for access to RAM area which is used by interrupt vectors +// and BIOS Data Area + +typedef struct { + unsigned char filler1[0x400]; + unsigned char filler2[0x6c]; + Bit16u ticks_low; + Bit16u ticks_high; + Bit8u midnight_flag; +} bios_data_t; + +#define BiosData ((bios_data_t *) 0) + +#if BX_USE_ATADRV + typedef struct { + Bit16u heads; // # heads + Bit16u cylinders; // # cylinders + Bit16u spt; // # sectors / track + } chs_t; + + // DPTE definition + typedef struct { + Bit16u iobase1; + Bit16u iobase2; + Bit8u prefix; + Bit8u unused; + Bit8u irq; + Bit8u blkcount; + Bit8u dma; + Bit8u pio; + Bit16u options; + Bit16u reserved; + Bit8u revision; + Bit8u checksum; + } dpte_t; + + typedef struct { + Bit8u iface; // ISA or PCI + Bit16u iobase1; // IO Base 1 + Bit16u iobase2; // IO Base 2 + Bit8u irq; // IRQ + } ata_channel_t; + + typedef struct { + Bit8u type; // Detected type of ata (ata/atapi/none/unknown) + Bit8u device; // Detected type of attached devices (hd/cd/none) + Bit8u removable; // Removable device flag + Bit8u lock; // Locks for removable devices + Bit8u mode; // transfer mode : PIO 16/32 bits - IRQ - ISADMA - PCIDMA + Bit16u blksize; // block size + + Bit8u translation; // type of translation + chs_t lchs; // Logical CHS + chs_t pchs; // Physical CHS + + Bit32u sectors_low; // Total sectors count + Bit32u sectors_high; + } ata_device_t; + + typedef struct { + // ATA channels info + ata_channel_t channels[BX_MAX_ATA_INTERFACES]; + + // ATA devices info + ata_device_t devices[BX_MAX_ATA_DEVICES]; + // + // map between (bios hd id - 0x80) and ata channels + Bit8u hdcount, hdidmap[BX_MAX_ATA_DEVICES]; + + // map between (bios cd id - 0xE0) and ata channels + Bit8u cdcount, cdidmap[BX_MAX_ATA_DEVICES]; + + // Buffer for DPTE table + dpte_t dpte; + + // Count of transferred sectors and bytes + Bit16u trsfsectors; + Bit32u trsfbytes; + } ata_t; + +#if BX_ELTORITO_BOOT + // ElTorito Device Emulation data + typedef struct { + Bit8u active; + Bit8u media; + Bit8u emulated_drive; + Bit8u controller_index; + Bit16u device_spec; + Bit32u ilba; + Bit16u buffer_segment; + Bit16u load_segment; + Bit16u sector_count; + + // Virtual device + chs_t vdevice; + } cdemu_t; +#endif // BX_ELTORITO_BOOT + + // for access to EBDA area + // The EBDA structure should conform to + // http://www.frontiernet.net/~fys/rombios.htm document + // I made the ata and cdemu structs begin at 0x121 in the EBDA seg + // EBDA must be at most 768 bytes; it lives at EBDA_SEG, and the boot + // device tables are at IPL_SEG + typedef struct { + Bit8u size; + unsigned char filler0[0x21]; + Bit16u mouse_driver_offset; + Bit16u mouse_driver_seg; + Bit8u mouse_flag1; + Bit8u mouse_flag2; + Bit8u mouse_data[0x08]; + unsigned char filler1[0x0D]; + + // FDPT - Can be split into data members if needed + unsigned char fdpt0[0x10]; + unsigned char fdpt1[0x10]; + + unsigned char filler2[0xC4]; + + // ATA Driver data + ata_t ata; + +#if BX_ELTORITO_BOOT + // El Torito Emulation data + cdemu_t cdemu; +#endif // BX_ELTORITO_BOOT + } ebda_data_t; + + #define EbdaData ((ebda_data_t *) 0) + + // for access to the int13ext structure + typedef struct { + Bit8u size; + Bit8u reserved; + Bit16u count; + Bit16u offset; + Bit16u segment; + Bit32u lba1; + Bit32u lba2; + } int13ext_t; + + #define Int13Ext ((int13ext_t *) 0) + + // Disk Physical Table definition + typedef struct { + Bit16u size; + Bit16u infos; + Bit32u cylinders; + Bit32u heads; + Bit32u spt; + Bit32u sector_count1; + Bit32u sector_count2; + Bit16u blksize; + Bit16u dpte_offset; + Bit16u dpte_segment; + union { + struct { + Bit16u key; + Bit8u dpi_length; + Bit8u reserved1; + Bit16u reserved2; + Bit8u host_bus[4]; + Bit8u iface_type[8]; + Bit8u iface_path[8]; + Bit8u device_path[8]; + Bit8u reserved3; + Bit8u checksum; + } phoenix; + struct { + Bit16u key; + Bit8u dpi_length; + Bit8u reserved1; + Bit16u reserved2; + Bit8u host_bus[4]; + Bit8u iface_type[8]; + Bit8u iface_path[8]; + Bit8u device_path[16]; + Bit8u reserved3; + Bit8u checksum; + } t13; + } dpi; + } dpt_t; + + #define Int13DPT ((dpt_t *) 0) + +#endif // BX_USE_ATADRV + +typedef struct { + union { + struct { + Bit16u di, si, bp, sp; + Bit16u bx, dx, cx, ax; + } r16; + struct { + Bit16u filler[4]; + Bit8u bl, bh, dl, dh, cl, ch, al, ah; + } r8; + } u; +} pusha_regs_t; + +typedef struct { + union { + struct { + Bit32u edi, esi, ebp, esp; + Bit32u ebx, edx, ecx, eax; + } r32; + struct { + Bit16u di, filler1, si, filler2, bp, filler3, sp, filler4; + Bit16u bx, filler5, dx, filler6, cx, filler7, ax, filler8; + } r16; + struct { + Bit32u filler[4]; + Bit8u bl, bh; + Bit16u filler1; + Bit8u dl, dh; + Bit16u filler2; + Bit8u cl, ch; + Bit16u filler3; + Bit8u al, ah; + Bit16u filler4; + } r8; + } u; +} pushad_regs_t; + +typedef struct { + union { + struct { + Bit16u flags; + } r16; + struct { + Bit8u flagsl; + Bit8u flagsh; + } r8; + } u; +} flags_t; + +#define SetCF(x) x.u.r8.flagsl |= 0x01 +#define SetZF(x) x.u.r8.flagsl |= 0x40 +#define ClearCF(x) x.u.r8.flagsl &= 0xfe +#define ClearZF(x) x.u.r8.flagsl &= 0xbf +#define GetCF(x) (x.u.r8.flagsl & 0x01) + +typedef struct { + Bit16u ip; + Bit16u cs; + flags_t flags; +} iret_addr_t; + +typedef struct { + Bit16u type; + Bit16u flags; + Bit32u vector; + Bit32u description; + Bit32u reserved; +} ipl_entry_t; + + +static Bit8u inb(); +static Bit8u inb_cmos(); +static void outb(); +static void outb_cmos(); +static Bit16u inw(); +static void outw(); +static void init_rtc(); +static bx_bool rtc_updating(); + +static Bit8u read_byte(); +static Bit16u read_word(); +static void write_byte(); +static void write_word(); +static void bios_printf(); + +static Bit8u inhibit_mouse_int_and_events(); +static void enable_mouse_int_and_events(); +static Bit8u send_to_mouse_ctrl(); +static Bit8u get_mouse_data(); +static void set_kbd_command_byte(); + +static void int09_function(); +static void int13_harddisk(); +static void int13_cdrom(); +static void int13_cdemu(); +static void int13_eltorito(); +static void int13_diskette_function(); +static void int14_function(); +static void int15_function(); +static void int16_function(); +static void int17_function(); +static void int19_function(); +static void int1a_function(); +static void int70_function(); +static void int74_function(); +static Bit16u get_CS(); +static Bit16u get_SS(); +static unsigned int enqueue_key(); +static unsigned int dequeue_key(); +static void get_hd_geometry(); +static void set_diskette_ret_status(); +static void set_diskette_current_cyl(); +static void determine_floppy_media(); +static bx_bool floppy_drive_exists(); +static bx_bool floppy_drive_recal(); +static bx_bool floppy_media_known(); +static bx_bool floppy_media_sense(); +static bx_bool set_enable_a20(); +static void debugger_on(); +static void debugger_off(); +static void keyboard_init(); +static void keyboard_panic(); +static void shutdown_status_panic(); +static void nmi_handler_msg(); +static void delay_ticks(); +static void delay_ticks_and_check_for_keystroke(); + +static void interactive_bootkey(); +static void print_bios_banner(); +static void print_boot_device(); +static void print_boot_failure(); +static void print_cdromboot_failure(); + +# if BX_USE_ATADRV + +// ATA / ATAPI driver +void ata_init(); +void ata_detect(); +void ata_reset(); + +Bit16u ata_cmd_non_data(); +Bit16u ata_cmd_data_in(); +Bit16u ata_cmd_data_out(); +Bit16u ata_cmd_packet(); + +Bit16u atapi_get_sense(); +Bit16u atapi_is_ready(); +Bit16u atapi_is_cdrom(); + +#endif // BX_USE_ATADRV + +#if BX_ELTORITO_BOOT + +void cdemu_init(); +Bit8u cdemu_isactive(); +Bit8u cdemu_emulated_drive(); + +Bit16u cdrom_boot(); + +#endif // BX_ELTORITO_BOOT + +static char bios_cvs_version_string[] = "$Revision: 1.257 $ $Date: 2011-01-26 09:52:02 $"; + +#define BIOS_COPYRIGHT_STRING "(c) 2002 MandrakeSoft S.A. Written by Kevin Lawton & the Bochs team." + +#if DEBUG_ATA +# define BX_DEBUG_ATA(a...) BX_DEBUG(a) +#else +# define BX_DEBUG_ATA(a...) +#endif +#if DEBUG_INT13_HD +# define BX_DEBUG_INT13_HD(a...) BX_DEBUG(a) +#else +# define BX_DEBUG_INT13_HD(a...) +#endif +#if DEBUG_INT13_CD +# define BX_DEBUG_INT13_CD(a...) BX_DEBUG(a) +#else +# define BX_DEBUG_INT13_CD(a...) +#endif +#if DEBUG_INT13_ET +# define BX_DEBUG_INT13_ET(a...) BX_DEBUG(a) +#else +# define BX_DEBUG_INT13_ET(a...) +#endif +#if DEBUG_INT13_FL +# define BX_DEBUG_INT13_FL(a...) BX_DEBUG(a) +#else +# define BX_DEBUG_INT13_FL(a...) +#endif +#if DEBUG_INT15 +# define BX_DEBUG_INT15(a...) BX_DEBUG(a) +#else +# define BX_DEBUG_INT15(a...) +#endif +#if DEBUG_INT16 +# define BX_DEBUG_INT16(a...) BX_DEBUG(a) +#else +# define BX_DEBUG_INT16(a...) +#endif +#if DEBUG_INT1A +# define BX_DEBUG_INT1A(a...) BX_DEBUG(a) +#else +# define BX_DEBUG_INT1A(a...) +#endif +#if DEBUG_INT74 +# define BX_DEBUG_INT74(a...) BX_DEBUG(a) +#else +# define BX_DEBUG_INT74(a...) +#endif + +#define SET_AL(val8) AX = ((AX & 0xff00) | (val8)) +#define SET_BL(val8) BX = ((BX & 0xff00) | (val8)) +#define SET_CL(val8) CX = ((CX & 0xff00) | (val8)) +#define SET_DL(val8) DX = ((DX & 0xff00) | (val8)) +#define SET_AH(val8) AX = ((AX & 0x00ff) | ((val8) << 8)) +#define SET_BH(val8) BX = ((BX & 0x00ff) | ((val8) << 8)) +#define SET_CH(val8) CX = ((CX & 0x00ff) | ((val8) << 8)) +#define SET_DH(val8) DX = ((DX & 0x00ff) | ((val8) << 8)) + +#define GET_AL() ( AX & 0x00ff ) +#define GET_BL() ( BX & 0x00ff ) +#define GET_CL() ( CX & 0x00ff ) +#define GET_DL() ( DX & 0x00ff ) +#define GET_AH() ( AX >> 8 ) +#define GET_BH() ( BX >> 8 ) +#define GET_CH() ( CX >> 8 ) +#define GET_DH() ( DX >> 8 ) + +#define GET_ELDL() ( ELDX & 0x00ff ) +#define GET_ELDH() ( ELDX >> 8 ) + +#define SET_CF() FLAGS |= 0x0001 +#define CLEAR_CF() FLAGS &= 0xfffe +#define GET_CF() (FLAGS & 0x0001) + +#define SET_ZF() FLAGS |= 0x0040 +#define CLEAR_ZF() FLAGS &= 0xffbf +#define GET_ZF() (FLAGS & 0x0040) + +#define UNSUPPORTED_FUNCTION 0x86 + +#define none 0 +#define MAX_SCAN_CODE 0x58 + +static struct { + Bit16u normal; + Bit16u shift; + Bit16u control; + Bit16u alt; + Bit8u lock_flags; + } scan_to_scanascii[MAX_SCAN_CODE + 1] = { + { none, none, none, none, none }, + { 0x011b, 0x011b, 0x011b, 0x0100, none }, /* escape */ + { 0x0231, 0x0221, none, 0x7800, none }, /* 1! */ + { 0x0332, 0x0340, 0x0300, 0x7900, none }, /* 2@ */ + { 0x0433, 0x0423, none, 0x7a00, none }, /* 3# */ + { 0x0534, 0x0524, none, 0x7b00, none }, /* 4$ */ + { 0x0635, 0x0625, none, 0x7c00, none }, /* 5% */ + { 0x0736, 0x075e, 0x071e, 0x7d00, none }, /* 6^ */ + { 0x0837, 0x0826, none, 0x7e00, none }, /* 7& */ + { 0x0938, 0x092a, none, 0x7f00, none }, /* 8* */ + { 0x0a39, 0x0a28, none, 0x8000, none }, /* 9( */ + { 0x0b30, 0x0b29, none, 0x8100, none }, /* 0) */ + { 0x0c2d, 0x0c5f, 0x0c1f, 0x8200, none }, /* -_ */ + { 0x0d3d, 0x0d2b, none, 0x8300, none }, /* =+ */ + { 0x0e08, 0x0e08, 0x0e7f, none, none }, /* backspace */ + { 0x0f09, 0x0f00, none, none, none }, /* tab */ + { 0x1071, 0x1051, 0x1011, 0x1000, 0x40 }, /* Q */ + { 0x1177, 0x1157, 0x1117, 0x1100, 0x40 }, /* W */ + { 0x1265, 0x1245, 0x1205, 0x1200, 0x40 }, /* E */ + { 0x1372, 0x1352, 0x1312, 0x1300, 0x40 }, /* R */ + { 0x1474, 0x1454, 0x1414, 0x1400, 0x40 }, /* T */ + { 0x1579, 0x1559, 0x1519, 0x1500, 0x40 }, /* Y */ + { 0x1675, 0x1655, 0x1615, 0x1600, 0x40 }, /* U */ + { 0x1769, 0x1749, 0x1709, 0x1700, 0x40 }, /* I */ + { 0x186f, 0x184f, 0x180f, 0x1800, 0x40 }, /* O */ + { 0x1970, 0x1950, 0x1910, 0x1900, 0x40 }, /* P */ + { 0x1a5b, 0x1a7b, 0x1a1b, none, none }, /* [{ */ + { 0x1b5d, 0x1b7d, 0x1b1d, none, none }, /* ]} */ + { 0x1c0d, 0x1c0d, 0x1c0a, none, none }, /* Enter */ + { none, none, none, none, none }, /* L Ctrl */ + { 0x1e61, 0x1e41, 0x1e01, 0x1e00, 0x40 }, /* A */ + { 0x1f73, 0x1f53, 0x1f13, 0x1f00, 0x40 }, /* S */ + { 0x2064, 0x2044, 0x2004, 0x2000, 0x40 }, /* D */ + { 0x2166, 0x2146, 0x2106, 0x2100, 0x40 }, /* F */ + { 0x2267, 0x2247, 0x2207, 0x2200, 0x40 }, /* G */ + { 0x2368, 0x2348, 0x2308, 0x2300, 0x40 }, /* H */ + { 0x246a, 0x244a, 0x240a, 0x2400, 0x40 }, /* J */ + { 0x256b, 0x254b, 0x250b, 0x2500, 0x40 }, /* K */ + { 0x266c, 0x264c, 0x260c, 0x2600, 0x40 }, /* L */ + { 0x273b, 0x273a, none, none, none }, /* ;: */ + { 0x2827, 0x2822, none, none, none }, /* '" */ + { 0x2960, 0x297e, none, none, none }, /* `~ */ + { none, none, none, none, none }, /* L shift */ + { 0x2b5c, 0x2b7c, 0x2b1c, none, none }, /* |\ */ + { 0x2c7a, 0x2c5a, 0x2c1a, 0x2c00, 0x40 }, /* Z */ + { 0x2d78, 0x2d58, 0x2d18, 0x2d00, 0x40 }, /* X */ + { 0x2e63, 0x2e43, 0x2e03, 0x2e00, 0x40 }, /* C */ + { 0x2f76, 0x2f56, 0x2f16, 0x2f00, 0x40 }, /* V */ + { 0x3062, 0x3042, 0x3002, 0x3000, 0x40 }, /* B */ + { 0x316e, 0x314e, 0x310e, 0x3100, 0x40 }, /* N */ + { 0x326d, 0x324d, 0x320d, 0x3200, 0x40 }, /* M */ + { 0x332c, 0x333c, none, none, none }, /* ,< */ + { 0x342e, 0x343e, none, none, none }, /* .> */ + { 0x352f, 0x353f, none, none, none }, /* /? */ + { none, none, none, none, none }, /* R Shift */ + { 0x372a, 0x372a, none, none, none }, /* * */ + { none, none, none, none, none }, /* L Alt */ + { 0x3920, 0x3920, 0x3920, 0x3920, none }, /* space */ + { none, none, none, none, none }, /* caps lock */ + { 0x3b00, 0x5400, 0x5e00, 0x6800, none }, /* F1 */ + { 0x3c00, 0x5500, 0x5f00, 0x6900, none }, /* F2 */ + { 0x3d00, 0x5600, 0x6000, 0x6a00, none }, /* F3 */ + { 0x3e00, 0x5700, 0x6100, 0x6b00, none }, /* F4 */ + { 0x3f00, 0x5800, 0x6200, 0x6c00, none }, /* F5 */ + { 0x4000, 0x5900, 0x6300, 0x6d00, none }, /* F6 */ + { 0x4100, 0x5a00, 0x6400, 0x6e00, none }, /* F7 */ + { 0x4200, 0x5b00, 0x6500, 0x6f00, none }, /* F8 */ + { 0x4300, 0x5c00, 0x6600, 0x7000, none }, /* F9 */ + { 0x4400, 0x5d00, 0x6700, 0x7100, none }, /* F10 */ + { none, none, none, none, none }, /* Num Lock */ + { none, none, none, none, none }, /* Scroll Lock */ + { 0x4700, 0x4737, 0x7700, none, 0x20 }, /* 7 Home */ + { 0x4800, 0x4838, none, none, 0x20 }, /* 8 UP */ + { 0x4900, 0x4939, 0x8400, none, 0x20 }, /* 9 PgUp */ + { 0x4a2d, 0x4a2d, none, none, none }, /* - */ + { 0x4b00, 0x4b34, 0x7300, none, 0x20 }, /* 4 Left */ + { 0x4c00, 0x4c35, none, none, 0x20 }, /* 5 */ + { 0x4d00, 0x4d36, 0x7400, none, 0x20 }, /* 6 Right */ + { 0x4e2b, 0x4e2b, none, none, none }, /* + */ + { 0x4f00, 0x4f31, 0x7500, none, 0x20 }, /* 1 End */ + { 0x5000, 0x5032, none, none, 0x20 }, /* 2 Down */ + { 0x5100, 0x5133, 0x7600, none, 0x20 }, /* 3 PgDn */ + { 0x5200, 0x5230, none, none, 0x20 }, /* 0 Ins */ + { 0x5300, 0x532e, none, none, 0x20 }, /* Del */ + { none, none, none, none, none }, + { none, none, none, none, none }, + { 0x565c, 0x567c, none, none, none }, /* \| */ + { 0x8500, 0x8700, 0x8900, 0x8b00, none }, /* F11 */ + { 0x8600, 0x8800, 0x8a00, 0x8c00, none }, /* F12 */ + }; + + Bit8u +inb(port) + Bit16u port; +{ +ASM_START + push bp + mov bp, sp + + push dx + mov dx, 4[bp] + in al, dx + pop dx + + pop bp +ASM_END +} + +#if BX_USE_ATADRV + Bit16u +inw(port) + Bit16u port; +{ +ASM_START + push bp + mov bp, sp + + push dx + mov dx, 4[bp] + in ax, dx + pop dx + + pop bp +ASM_END +} +#endif + + void +outb(port, val) + Bit16u port; + Bit8u val; +{ +ASM_START + push bp + mov bp, sp + + push ax + push dx + mov dx, 4[bp] + mov al, 6[bp] + out dx, al + pop dx + pop ax + + pop bp +ASM_END +} + +#if BX_USE_ATADRV + void +outw(port, val) + Bit16u port; + Bit16u val; +{ +ASM_START + push bp + mov bp, sp + + push ax + push dx + mov dx, 4[bp] + mov ax, 6[bp] + out dx, ax + pop dx + pop ax + + pop bp +ASM_END +} +#endif + + void +outb_cmos(cmos_reg, val) + Bit8u cmos_reg; + Bit8u val; +{ +ASM_START + push bp + mov bp, sp + + mov al, 4[bp] ;; cmos_reg + out PORT_CMOS_INDEX, al + mov al, 6[bp] ;; val + out PORT_CMOS_DATA, al + + pop bp +ASM_END +} + + Bit8u +inb_cmos(cmos_reg) + Bit8u cmos_reg; +{ +ASM_START + push bp + mov bp, sp + + mov al, 4[bp] ;; cmos_reg + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + + pop bp +ASM_END +} + + void +init_rtc() +{ + outb_cmos(0x0a, 0x26); + outb_cmos(0x0b, 0x02); + inb_cmos(0x0c); + inb_cmos(0x0d); +} + + bx_bool +rtc_updating() +{ + // This function checks to see if the update-in-progress bit + // is set in CMOS Status Register A. If not, it returns 0. + // If it is set, it tries to wait until there is a transition + // to 0, and will return 0 if such a transition occurs. A 1 + // is returned only after timing out. The maximum period + // that this bit should be set is constrained to 244useconds. + // The count I use below guarantees coverage or more than + // this time, with any reasonable IPS setting. + + Bit16u count; + + count = 25000; + while (--count != 0) { + if ( (inb_cmos(0x0a) & 0x80) == 0 ) + return(0); + } + return(1); // update-in-progress never transitioned to 0 +} + + + Bit8u +read_byte(seg, offset) + Bit16u seg; + Bit16u offset; +{ +ASM_START + push bp + mov bp, sp + + push bx + push ds + mov ax, 4[bp] ; segment + mov ds, ax + mov bx, 6[bp] ; offset + mov al, [bx] + ;; al = return value (byte) + pop ds + pop bx + + pop bp +ASM_END +} + + Bit16u +read_word(seg, offset) + Bit16u seg; + Bit16u offset; +{ +ASM_START + push bp + mov bp, sp + + push bx + push ds + mov ax, 4[bp] ; segment + mov ds, ax + mov bx, 6[bp] ; offset + mov ax, [bx] + ;; ax = return value (word) + pop ds + pop bx + + pop bp +ASM_END +} + + void +write_byte(seg, offset, data) + Bit16u seg; + Bit16u offset; + Bit8u data; +{ +ASM_START + push bp + mov bp, sp + + push ax + push bx + push ds + mov ax, 4[bp] ; segment + mov ds, ax + mov bx, 6[bp] ; offset + mov al, 8[bp] ; data byte + mov [bx], al ; write data byte + pop ds + pop bx + pop ax + + pop bp +ASM_END +} + + void +write_word(seg, offset, data) + Bit16u seg; + Bit16u offset; + Bit16u data; +{ +ASM_START + push bp + mov bp, sp + + push ax + push bx + push ds + mov ax, 4[bp] ; segment + mov ds, ax + mov bx, 6[bp] ; offset + mov ax, 8[bp] ; data word + mov [bx], ax ; write data word + pop ds + pop bx + pop ax + + pop bp +ASM_END +} + + Bit16u +get_CS() +{ +ASM_START + mov ax, cs +ASM_END +} + + Bit16u +get_SS() +{ +ASM_START + mov ax, ss +ASM_END +} + +#if BX_DEBUG_SERIAL +/* serial debug port*/ +#define BX_DEBUG_PORT 0x03f8 + +/* data */ +#define UART_RBR 0x00 +#define UART_THR 0x00 + +/* control */ +#define UART_IER 0x01 +#define UART_IIR 0x02 +#define UART_FCR 0x02 +#define UART_LCR 0x03 +#define UART_MCR 0x04 +#define UART_DLL 0x00 +#define UART_DLM 0x01 + +/* status */ +#define UART_LSR 0x05 +#define UART_MSR 0x06 +#define UART_SCR 0x07 + +int uart_can_tx_byte(base_port) + Bit16u base_port; +{ + return inb(base_port + UART_LSR) & 0x20; +} + +void uart_wait_to_tx_byte(base_port) + Bit16u base_port; +{ + while (!uart_can_tx_byte(base_port)); +} + +void uart_wait_until_sent(base_port) + Bit16u base_port; +{ + while (!(inb(base_port + UART_LSR) & 0x40)); +} + +void uart_tx_byte(base_port, data) + Bit16u base_port; + Bit8u data; +{ + uart_wait_to_tx_byte(base_port); + outb(base_port + UART_THR, data); + uart_wait_until_sent(base_port); +} +#endif + + void +wrch(c) + Bit8u c; +{ + ASM_START + push bp + mov bp, sp + + push bx + mov ah, #0x0e + mov al, 4[bp] + xor bx,bx + int #0x10 + pop bx + + pop bp + ASM_END +} + + void +send(action, c) + Bit16u action; + Bit8u c; +{ +#if BX_DEBUG_SERIAL + if (c == '\n') uart_tx_byte(BX_DEBUG_PORT, '\r'); + uart_tx_byte(BX_DEBUG_PORT, c); +#endif +#if BX_VIRTUAL_PORTS + if (action & BIOS_PRINTF_DEBUG) outb(DEBUG_PORT, c); + if (action & BIOS_PRINTF_INFO) outb(INFO_PORT, c); +#endif + if (action & BIOS_PRINTF_SCREEN) { + if (c == '\n') wrch('\r'); + wrch(c); + } +} + + void +put_int(action, val, width, neg) + Bit16u action; + short val, width; + bx_bool neg; +{ + short nval = val / 10; + if (nval) + put_int(action, nval, width - 1, neg); + else { + while (--width > 0) send(action, ' '); + if (neg) send(action, '-'); + } + send(action, val - (nval * 10) + '0'); +} + + void +put_uint(action, val, width, neg) + Bit16u action; + unsigned short val; + short width; + bx_bool neg; +{ + unsigned short nval = val / 10; + if (nval) + put_uint(action, nval, width - 1, neg); + else { + while (--width > 0) send(action, ' '); + if (neg) send(action, '-'); + } + send(action, val - (nval * 10) + '0'); +} + + void +put_luint(action, val, width, neg) + Bit16u action; + unsigned long val; + short width; + bx_bool neg; +{ + unsigned long nval = val / 10; + if (nval) + put_luint(action, nval, width - 1, neg); + else { + while (--width > 0) send(action, ' '); + if (neg) send(action, '-'); + } + send(action, val - (nval * 10) + '0'); +} + +void put_str(action, segment, offset) + Bit16u action; + Bit16u segment; + Bit16u offset; +{ + Bit8u c; + + while (c = read_byte(segment, offset)) { + send(action, c); + offset++; + } +} + + void +delay_ticks(ticks) + Bit16u ticks; +{ + long ticks_to_wait, delta; + Bit32u prev_ticks, t; + + /* + * The 0:046c wraps around at 'midnight' according to a 18.2Hz clock. + * We also have to be careful about interrupt storms. + */ +ASM_START + pushf + sti +ASM_END + ticks_to_wait = ticks; + prev_ticks = read_dword(0x0, 0x46c); + do + { +ASM_START + hlt +ASM_END + t = read_dword(0x0, 0x46c); + if (t > prev_ticks) + { + delta = t - prev_ticks; /* The temp var is required or bcc screws up. */ + ticks_to_wait -= delta; + } + else if (t < prev_ticks) + { + ticks_to_wait -= t; /* wrapped */ + } + + prev_ticks = t; + } while (ticks_to_wait > 0); +ASM_START + cli + popf +ASM_END +} + + Bit8u +check_for_keystroke() +{ +ASM_START + mov ax, #0x100 + int #0x16 + jz no_key + mov al, #1 + jmp done +no_key: + xor al, al +done: +ASM_END +} + + Bit8u +get_keystroke() +{ +ASM_START + mov ax, #0x0 + int #0x16 + xchg ah, al +ASM_END +} + + void +delay_ticks_and_check_for_keystroke(ticks, count) + Bit16u ticks, count; +{ + Bit16u i; + for (i = 1; i <= count; i++) { + delay_ticks(ticks); + if (check_for_keystroke()) + break; + } +} + +//-------------------------------------------------------------------------- +// bios_printf() +// A compact variable argument printf function. +// +// Supports %[format_width][length]format +// where format can be x,X,u,d,s,S,c +// and the optional length modifier is l (ell) +//-------------------------------------------------------------------------- + void +bios_printf(action, s) + Bit16u action; + Bit8u *s; +{ + Bit8u c, format_char; + bx_bool in_format; + short i; + Bit16u *arg_ptr; + Bit16u arg_seg, arg, nibble, hibyte, shift_count, format_width, hexadd; + + arg_ptr = &s; + arg_seg = get_SS(); + + in_format = 0; + format_width = 0; + + if ((action & BIOS_PRINTF_DEBHALT) == BIOS_PRINTF_DEBHALT) { +#if BX_VIRTUAL_PORTS + outb(PANIC_PORT2, 0x00); +#endif + bios_printf (BIOS_PRINTF_SCREEN, "FATAL: "); + } + + while (c = read_byte(get_CS(), s)) { + if ( c == '%' ) { + in_format = 1; + format_width = 0; + } + else if (in_format) { + if ( (c>='0') && (c<='9') ) { + format_width = (format_width * 10) + (c - '0'); + } + else { + arg_ptr++; // increment to next arg + arg = read_word(arg_seg, arg_ptr); + if (c == 'x' || c == 'X') { + if (format_width == 0) + format_width = 4; + if (c == 'x') + hexadd = 'a'; + else + hexadd = 'A'; + for (i=format_width-1; i>=0; i--) { + nibble = (arg >> (4 * i)) & 0x000f; + send (action, (nibble<=9)? (nibble+'0') : (nibble-10+hexadd)); + } + } + else if (c == 'u') { + put_uint(action, arg, format_width, 0); + } + else if (c == 'l') { + s++; + c = read_byte(get_CS(), s); /* is it ld,lx,lu? */ + arg_ptr++; /* increment to next arg */ + hibyte = read_word(arg_seg, arg_ptr); + if (c == 'd') { + if (hibyte & 0x8000) + put_luint(action, 0L-(((Bit32u) hibyte << 16) | arg), format_width-1, 1); + else + put_luint(action, ((Bit32u) hibyte << 16) | arg, format_width, 0); + } + else if (c == 'u') { + put_luint(action, ((Bit32u) hibyte << 16) | arg, format_width, 0); + } + else if (c == 'x' || c == 'X') + { + if (format_width == 0) + format_width = 8; + if (c == 'x') + hexadd = 'a'; + else + hexadd = 'A'; + for (i=format_width-1; i>=0; i--) { + nibble = ((((Bit32u) hibyte <<16) | arg) >> (4 * i)) & 0x000f; + send (action, (nibble<=9)? (nibble+'0') : (nibble-10+hexadd)); + } + } + } + else if (c == 'd') { + if (arg & 0x8000) + put_int(action, -arg, format_width - 1, 1); + else + put_int(action, arg, format_width, 0); + } + else if (c == 's') { + put_str(action, get_CS(), arg); + } + else if (c == 'S') { + hibyte = arg; + arg_ptr++; + arg = read_word(arg_seg, arg_ptr); + put_str(action, hibyte, arg); + } + else if (c == 'c') { + send(action, arg); + } + else + BX_PANIC("bios_printf: unknown format\n"); + in_format = 0; + } + } + else { + send(action, c); + } + s ++; + } + + if (action & BIOS_PRINTF_HALT) { + // freeze in a busy loop. +ASM_START + cli + halt2_loop: + hlt + jmp halt2_loop +ASM_END + } +} + +//-------------------------------------------------------------------------- +// keyboard_init +//-------------------------------------------------------------------------- +// this file is based on LinuxBIOS implementation of keyboard.c +// could convert to #asm to gain space + void +keyboard_init() +{ + Bit16u max; + + /* ------------------- Flush buffers ------------------------*/ + /* Wait until buffer is empty */ + max=0xffff; + while ( (inb(PORT_PS2_STATUS) & 0x02) && (--max>0)) outb(PORT_DIAG, 0x00); + + /* flush incoming keys */ + max=0x2000; + while (--max > 0) { + outb(PORT_DIAG, 0x00); + if (inb(PORT_PS2_STATUS) & 0x01) { + inb(PORT_PS2_DATA); + max = 0x2000; + } + } + + // Due to timer issues, and if the IPS setting is > 15000000, + // the incoming keys might not be flushed here. That will + // cause a panic a few lines below. See sourceforge bug report : + // [ 642031 ] FATAL: Keyboard RESET error:993 + + /* ------------------- controller side ----------------------*/ + /* send cmd = 0xAA, self test 8042 */ + outb(PORT_PS2_STATUS, 0xaa); + + /* Wait until buffer is empty */ + max=0xffff; + while ( (inb(PORT_PS2_STATUS) & 0x02) && (--max>0)) outb(PORT_DIAG, 0x00); + if (max==0x0) keyboard_panic(00); + + /* Wait for data */ + max=0xffff; + while ( ((inb(PORT_PS2_STATUS) & 0x01) == 0) && (--max>0) ) outb(PORT_DIAG, 0x01); + if (max==0x0) keyboard_panic(01); + + /* read self-test result, 0x55 should be returned from 0x60 */ + if ((inb(PORT_PS2_DATA) != 0x55)){ + keyboard_panic(991); + } + + /* send cmd = 0xAB, keyboard interface test */ + outb(PORT_PS2_STATUS,0xab); + + /* Wait until buffer is empty */ + max=0xffff; + while ((inb(PORT_PS2_STATUS) & 0x02) && (--max>0)) outb(PORT_DIAG, 0x10); + if (max==0x0) keyboard_panic(10); + + /* Wait for data */ + max=0xffff; + while ( ((inb(PORT_PS2_STATUS) & 0x01) == 0) && (--max>0) ) outb(PORT_DIAG, 0x11); + if (max==0x0) keyboard_panic(11); + + /* read keyboard interface test result, */ + /* 0x00 should be returned form 0x60 */ + if ((inb(PORT_PS2_DATA) != 0x00)) { + keyboard_panic(992); + } + + /* Enable Keyboard clock */ + outb(PORT_PS2_STATUS,0xae); + outb(PORT_PS2_STATUS,0xa8); + + /* ------------------- keyboard side ------------------------*/ + /* reset keyboard and self test (keyboard side) */ + outb(PORT_PS2_DATA, 0xff); + + /* Wait until buffer is empty */ + max=0xffff; + while ((inb(PORT_PS2_STATUS) & 0x02) && (--max>0)) outb(PORT_DIAG, 0x20); + if (max==0x0) keyboard_panic(20); + + /* Wait for data */ + max=0xffff; + while ( ((inb(PORT_PS2_STATUS) & 0x01) == 0) && (--max>0) ) outb(PORT_DIAG, 0x21); + if (max==0x0) keyboard_panic(21); + + /* keyboard should return ACK */ + if ((inb(PORT_PS2_DATA) != 0xfa)) { + keyboard_panic(993); + } + + /* Wait for data */ + max=0xffff; + while ( ((inb(PORT_PS2_STATUS) & 0x01) == 0) && (--max>0) ) outb(PORT_DIAG, 0x31); + if (max==0x0) keyboard_panic(31); + + if ((inb(PORT_PS2_DATA) != 0xaa)) { + keyboard_panic(994); + } + + /* Disable keyboard */ + outb(PORT_PS2_DATA, 0xf5); + + /* Wait until buffer is empty */ + max=0xffff; + while ((inb(PORT_PS2_STATUS) & 0x02) && (--max>0)) outb(PORT_DIAG, 0x40); + if (max==0x0) keyboard_panic(40); + + /* Wait for data */ + max=0xffff; + while ( ((inb(PORT_PS2_STATUS) & 0x01) == 0) && (--max>0) ) outb(PORT_DIAG, 0x41); + if (max==0x0) keyboard_panic(41); + + /* keyboard should return ACK */ + if ((inb(PORT_PS2_DATA) != 0xfa)) { + keyboard_panic(995); + } + + /* Write Keyboard Mode */ + outb(PORT_PS2_STATUS, 0x60); + + /* Wait until buffer is empty */ + max=0xffff; + while ((inb(PORT_PS2_STATUS) & 0x02) && (--max>0)) outb(PORT_DIAG, 0x50); + if (max==0x0) keyboard_panic(50); + + /* send cmd: scan code convert, disable mouse, enable IRQ 1 */ + outb(PORT_PS2_DATA, 0x61); + + /* Wait until buffer is empty */ + max=0xffff; + while ((inb(PORT_PS2_STATUS) & 0x02) && (--max>0)) outb(PORT_DIAG, 0x60); + if (max==0x0) keyboard_panic(60); + + /* Enable keyboard */ + outb(PORT_PS2_DATA, 0xf4); + + /* Wait until buffer is empty */ + max=0xffff; + while ((inb(PORT_PS2_STATUS) & 0x02) && (--max>0)) outb(PORT_DIAG, 0x70); + if (max==0x0) keyboard_panic(70); + + /* Wait for data */ + max=0xffff; + while ( ((inb(PORT_PS2_STATUS) & 0x01) == 0) && (--max>0) ) outb(PORT_DIAG, 0x71); + if (max==0x0) keyboard_panic(70); + + /* keyboard should return ACK */ + if ((inb(PORT_PS2_DATA) != 0xfa)) { + keyboard_panic(996); + } + + outb(PORT_DIAG, 0x77); +} + +//-------------------------------------------------------------------------- +// keyboard_panic +//-------------------------------------------------------------------------- + void +keyboard_panic(status) + Bit16u status; +{ + // If you're getting a 993 keyboard panic here, + // please see the comment in keyboard_init + + BX_PANIC("Keyboard error:%u\n",status); +} + +//-------------------------------------------------------------------------- +// shutdown_status_panic +// called when the shutdown status is not implemented, displays the status +//-------------------------------------------------------------------------- + void +shutdown_status_panic(status) + Bit16u status; +{ + BX_PANIC("Unimplemented shutdown status: %02x\n",(Bit8u)status); +} + +void s3_resume_panic() +{ + BX_PANIC("Returned from s3_resume.\n"); +} + +//-------------------------------------------------------------------------- +// print_bios_banner +// displays a the bios version +//-------------------------------------------------------------------------- +void +print_bios_banner() +{ + printf(BX_APPNAME" BIOS - build: %s\n%s\nOptions: ", + BIOS_BUILD_DATE, bios_cvs_version_string); + printf( +#if BX_APM + "apmbios " +#endif +#if BX_PCIBIOS + "pcibios " +#endif +#if BX_PNPBIOS + "pnpbios " +#endif +#if BX_ELTORITO_BOOT + "eltorito " +#endif +#if BX_ROMBIOS32 + "rombios32 " +#endif + "\n\n"); +} + +//-------------------------------------------------------------------------- +// BIOS Boot Specification 1.0.1 compatibility +// +// Very basic support for the BIOS Boot Specification, which allows expansion +// ROMs to register themselves as boot devices, instead of just stealing the +// INT 19h boot vector. +// +// This is a hack: to do it properly requires a proper PnP BIOS and we aren't +// one; we just lie to the option ROMs to make them behave correctly. +// We also don't support letting option ROMs register as bootable disk +// drives (BCVs), only as bootable devices (BEVs). +// +// http://www.phoenix.com/en/Customer+Services/White+Papers-Specs/pc+industry+specifications.htm +//-------------------------------------------------------------------------- + +static char drivetypes[][10]={"", "Floppy","Hard Disk","CD-Rom", "Network"}; + +static void +init_boot_vectors() +{ + ipl_entry_t e; + Bit16u count = 0; + Bit16u ss = get_SS(); + + /* Clear out the IPL table. */ + memsetb(IPL_SEG, IPL_TABLE_OFFSET, 0, IPL_SIZE); + + /* User selected device not set */ + write_word(IPL_SEG, IPL_BOOTFIRST_OFFSET, 0xFFFF); + + /* Floppy drive */ + e.type = IPL_TYPE_FLOPPY; e.flags = 0; e.vector = 0; e.description = 0; e.reserved = 0; + memcpyb(IPL_SEG, IPL_TABLE_OFFSET + count * sizeof (e), ss, &e, sizeof (e)); + count++; + + /* First HDD */ + e.type = IPL_TYPE_HARDDISK; e.flags = 0; e.vector = 0; e.description = 0; e.reserved = 0; + memcpyb(IPL_SEG, IPL_TABLE_OFFSET + count * sizeof (e), ss, &e, sizeof (e)); + count++; + +#if BX_ELTORITO_BOOT + /* CDROM */ + e.type = IPL_TYPE_CDROM; e.flags = 0; e.vector = 0; e.description = 0; e.reserved = 0; + memcpyb(IPL_SEG, IPL_TABLE_OFFSET + count * sizeof (e), ss, &e, sizeof (e)); + count++; +#endif + + /* Remember how many devices we have */ + write_word(IPL_SEG, IPL_COUNT_OFFSET, count); + /* Not tried booting anything yet */ + write_word(IPL_SEG, IPL_SEQUENCE_OFFSET, 0xffff); +} + +static Bit8u +get_boot_vector(i, e) +Bit16u i; ipl_entry_t *e; +{ + Bit16u count; + Bit16u ss = get_SS(); + /* Get the count of boot devices, and refuse to overrun the array */ + count = read_word(IPL_SEG, IPL_COUNT_OFFSET); + if (i >= count) return 0; + /* OK to read this device */ + memcpyb(ss, e, IPL_SEG, IPL_TABLE_OFFSET + i * sizeof (*e), sizeof (*e)); + return 1; +} + +#if BX_ELTORITO_BOOT + void +interactive_bootkey() +{ + ipl_entry_t e; + Bit16u count; + char description[33]; + Bit8u scan_code; + Bit8u i; + Bit16u ss = get_SS(); + Bit16u valid_choice = 0; + + while (check_for_keystroke()) + get_keystroke(); + + printf("Press F12 for boot menu.\n\n"); + + delay_ticks_and_check_for_keystroke(11, 5); /* ~3 seconds */ + if (check_for_keystroke()) + { + scan_code = get_keystroke(); + if (scan_code == 0x86) /* F12 */ + { + while (check_for_keystroke()) + get_keystroke(); + + printf("Select boot device:\n\n"); + + count = read_word(IPL_SEG, IPL_COUNT_OFFSET); + for (i = 0; i < count; i++) + { + memcpyb(ss, &e, IPL_SEG, IPL_TABLE_OFFSET + i * sizeof (e), sizeof (e)); + printf("%d. ", i+1); + switch(e.type) + { + case IPL_TYPE_FLOPPY: + case IPL_TYPE_HARDDISK: + case IPL_TYPE_CDROM: + printf("%s\n", drivetypes[e.type]); + break; + case IPL_TYPE_BEV: + printf("%s", drivetypes[4]); + if (e.description != 0) + { + memcpyb(ss, &description, (Bit16u)(e.description >> 16), (Bit16u)(e.description & 0xffff), 32); + description[32] = 0; + printf(" [%S]", ss, description); + } + printf("\n"); + break; + } + } + + count++; + while (!valid_choice) { + scan_code = get_keystroke(); + if (scan_code == 0x01 || scan_code == 0x58) /* ESC or F12 */ + { + valid_choice = 1; + } + else if (scan_code <= count) + { + valid_choice = 1; + scan_code -= 1; + /* Set user selected device */ + write_word(IPL_SEG, IPL_BOOTFIRST_OFFSET, scan_code); + } + } + + printf("\n"); + } + } +} +#endif // BX_ELTORITO_BOOT + +//-------------------------------------------------------------------------- +// print_boot_device +// displays the boot device +//-------------------------------------------------------------------------- + +void +print_boot_device(e) + ipl_entry_t *e; +{ + Bit16u type; + char description[33]; + Bit16u ss = get_SS(); + type = e->type; + /* NIC appears as type 0x80 */ + if (type == IPL_TYPE_BEV) type = 0x4; + if (type == 0 || type > 0x4) BX_PANIC("Bad drive type\n"); + printf("Booting from %s", drivetypes[type]); + /* print product string if BEV */ + if (type == 4 && e->description != 0) { + /* first 32 bytes are significant */ + memcpyb(ss, &description, (Bit16u)(e->description >> 16), (Bit16u)(e->description & 0xffff), 32); + /* terminate string */ + description[32] = 0; + printf(" [%S]", ss, description); + } + printf("...\n"); +} + +//-------------------------------------------------------------------------- +// print_boot_failure +// displays the reason why boot failed +//-------------------------------------------------------------------------- + void +print_boot_failure(type, reason) + Bit16u type; Bit8u reason; +{ + if (type == 0 || type > 0x3) BX_PANIC("Bad drive type\n"); + + printf("Boot failed"); + if (type < 4) { + /* Report the reason too */ + if (reason==0) + printf(": not a bootable disk"); + else + printf(": could not read the boot disk"); + } + printf("\n\n"); +} + +//-------------------------------------------------------------------------- +// print_cdromboot_failure +// displays the reason why boot failed +//-------------------------------------------------------------------------- + void +print_cdromboot_failure( code ) + Bit16u code; +{ + bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "CDROM boot failure code : %04x\n",code); + + return; +} + +void +nmi_handler_msg() +{ + BX_PANIC("NMI Handler called\n"); +} + +void +int18_panic_msg() +{ + BX_PANIC("INT18: BOOT FAILURE\n"); +} + +void +log_bios_start() +{ +#if BX_DEBUG_SERIAL + outb(BX_DEBUG_PORT+UART_LCR, 0x03); /* setup for serial logging: 8N1 */ +#endif + BX_INFO("%s\n", bios_cvs_version_string); +} + + bx_bool +set_enable_a20(val) + bx_bool val; +{ + Bit8u oldval; + + // Use PS2 System Control port A to set A20 enable + + // get current setting first + oldval = inb(PORT_A20); + + // change A20 status + if (val) + outb(PORT_A20, oldval | 0x02); + else + outb(PORT_A20, oldval & 0xfd); + + return((oldval & 0x02) != 0); +} + + void +debugger_on() +{ + outb(0xfedc, 0x01); +} + + void +debugger_off() +{ + outb(0xfedc, 0x00); +} + +int +s3_resume() +{ + Bit32u s3_wakeup_vector; + Bit8u s3_resume_flag; + + s3_resume_flag = read_byte(0x40, 0xb0); + s3_wakeup_vector = read_dword(0x40, 0xb2); + + BX_INFO("S3 resume called %x 0x%lx\n", s3_resume_flag, s3_wakeup_vector); + if (s3_resume_flag != 0xFE || !s3_wakeup_vector) + return 0; + + write_byte(0x40, 0xb0, 0); + + /* setup wakeup vector */ + write_word(0x40, 0xb6, (s3_wakeup_vector & 0xF)); /* IP */ + write_word(0x40, 0xb8, (s3_wakeup_vector >> 4)); /* CS */ + + BX_INFO("S3 resume jump to %x:%x\n", (s3_wakeup_vector >> 4), + (s3_wakeup_vector & 0xF)); +ASM_START + jmpf [0x04b6] +ASM_END + return 1; +} + +#if BX_USE_ATADRV + +// --------------------------------------------------------------------------- +// Start of ATA/ATAPI Driver +// --------------------------------------------------------------------------- + +// Global defines -- ATA register and register bits. +// command block & control block regs +#define ATA_CB_DATA 0 // data reg in/out pio_base_addr1+0 +#define ATA_CB_ERR 1 // error in pio_base_addr1+1 +#define ATA_CB_FR 1 // feature reg out pio_base_addr1+1 +#define ATA_CB_SC 2 // sector count in/out pio_base_addr1+2 +#define ATA_CB_SN 3 // sector number in/out pio_base_addr1+3 +#define ATA_CB_CL 4 // cylinder low in/out pio_base_addr1+4 +#define ATA_CB_CH 5 // cylinder high in/out pio_base_addr1+5 +#define ATA_CB_DH 6 // device head in/out pio_base_addr1+6 +#define ATA_CB_STAT 7 // primary status in pio_base_addr1+7 +#define ATA_CB_CMD 7 // command out pio_base_addr1+7 +#define ATA_CB_ASTAT 6 // alternate status in pio_base_addr2+6 +#define ATA_CB_DC 6 // device control out pio_base_addr2+6 +#define ATA_CB_DA 7 // device address in pio_base_addr2+7 + +#define ATA_CB_ER_ICRC 0x80 // ATA Ultra DMA bad CRC +#define ATA_CB_ER_BBK 0x80 // ATA bad block +#define ATA_CB_ER_UNC 0x40 // ATA uncorrected error +#define ATA_CB_ER_MC 0x20 // ATA media change +#define ATA_CB_ER_IDNF 0x10 // ATA id not found +#define ATA_CB_ER_MCR 0x08 // ATA media change request +#define ATA_CB_ER_ABRT 0x04 // ATA command aborted +#define ATA_CB_ER_NTK0 0x02 // ATA track 0 not found +#define ATA_CB_ER_NDAM 0x01 // ATA address mark not found + +#define ATA_CB_ER_P_SNSKEY 0xf0 // ATAPI sense key (mask) +#define ATA_CB_ER_P_MCR 0x08 // ATAPI Media Change Request +#define ATA_CB_ER_P_ABRT 0x04 // ATAPI command abort +#define ATA_CB_ER_P_EOM 0x02 // ATAPI End of Media +#define ATA_CB_ER_P_ILI 0x01 // ATAPI Illegal Length Indication + +// ATAPI Interrupt Reason bits in the Sector Count reg (CB_SC) +#define ATA_CB_SC_P_TAG 0xf8 // ATAPI tag (mask) +#define ATA_CB_SC_P_REL 0x04 // ATAPI release +#define ATA_CB_SC_P_IO 0x02 // ATAPI I/O +#define ATA_CB_SC_P_CD 0x01 // ATAPI C/D + +// bits 7-4 of the device/head (CB_DH) reg +#define ATA_CB_DH_DEV0 0xa0 // select device 0 +#define ATA_CB_DH_DEV1 0xb0 // select device 1 +#define ATA_CB_DH_LBA 0x40 // use LBA + +// status reg (CB_STAT and CB_ASTAT) bits +#define ATA_CB_STAT_BSY 0x80 // busy +#define ATA_CB_STAT_RDY 0x40 // ready +#define ATA_CB_STAT_DF 0x20 // device fault +#define ATA_CB_STAT_WFT 0x20 // write fault (old name) +#define ATA_CB_STAT_SKC 0x10 // seek complete +#define ATA_CB_STAT_SERV 0x10 // service +#define ATA_CB_STAT_DRQ 0x08 // data request +#define ATA_CB_STAT_CORR 0x04 // corrected +#define ATA_CB_STAT_IDX 0x02 // index +#define ATA_CB_STAT_ERR 0x01 // error (ATA) +#define ATA_CB_STAT_CHK 0x01 // check (ATAPI) + +// device control reg (CB_DC) bits +#define ATA_CB_DC_HD15 0x08 // bit should always be set to one +#define ATA_CB_DC_SRST 0x04 // soft reset +#define ATA_CB_DC_NIEN 0x02 // disable interrupts + +// Most mandatory and optional ATA commands (from ATA-3), +#define ATA_CMD_CFA_ERASE_SECTORS 0xC0 +#define ATA_CMD_CFA_REQUEST_EXT_ERR_CODE 0x03 +#define ATA_CMD_CFA_TRANSLATE_SECTOR 0x87 +#define ATA_CMD_CFA_WRITE_MULTIPLE_WO_ERASE 0xCD +#define ATA_CMD_CFA_WRITE_SECTORS_WO_ERASE 0x38 +#define ATA_CMD_CHECK_POWER_MODE1 0xE5 +#define ATA_CMD_CHECK_POWER_MODE2 0x98 +#define ATA_CMD_DEVICE_RESET 0x08 +#define ATA_CMD_EXECUTE_DEVICE_DIAGNOSTIC 0x90 +#define ATA_CMD_FLUSH_CACHE 0xE7 +#define ATA_CMD_FORMAT_TRACK 0x50 +#define ATA_CMD_IDENTIFY_DEVICE 0xEC +#define ATA_CMD_IDENTIFY_DEVICE_PACKET 0xA1 +#define ATA_CMD_IDENTIFY_PACKET_DEVICE 0xA1 +#define ATA_CMD_IDLE1 0xE3 +#define ATA_CMD_IDLE2 0x97 +#define ATA_CMD_IDLE_IMMEDIATE1 0xE1 +#define ATA_CMD_IDLE_IMMEDIATE2 0x95 +#define ATA_CMD_INITIALIZE_DRIVE_PARAMETERS 0x91 +#define ATA_CMD_INITIALIZE_DEVICE_PARAMETERS 0x91 +#define ATA_CMD_NOP 0x00 +#define ATA_CMD_PACKET 0xA0 +#define ATA_CMD_READ_BUFFER 0xE4 +#define ATA_CMD_READ_DMA 0xC8 +#define ATA_CMD_READ_DMA_QUEUED 0xC7 +#define ATA_CMD_READ_MULTIPLE 0xC4 +#define ATA_CMD_READ_SECTORS 0x20 +#define ATA_CMD_READ_VERIFY_SECTORS 0x40 +#define ATA_CMD_RECALIBRATE 0x10 +#define ATA_CMD_REQUEST_SENSE 0x03 +#define ATA_CMD_SEEK 0x70 +#define ATA_CMD_SET_FEATURES 0xEF +#define ATA_CMD_SET_MULTIPLE_MODE 0xC6 +#define ATA_CMD_SLEEP1 0xE6 +#define ATA_CMD_SLEEP2 0x99 +#define ATA_CMD_STANDBY1 0xE2 +#define ATA_CMD_STANDBY2 0x96 +#define ATA_CMD_STANDBY_IMMEDIATE1 0xE0 +#define ATA_CMD_STANDBY_IMMEDIATE2 0x94 +#define ATA_CMD_WRITE_BUFFER 0xE8 +#define ATA_CMD_WRITE_DMA 0xCA +#define ATA_CMD_WRITE_DMA_QUEUED 0xCC +#define ATA_CMD_WRITE_MULTIPLE 0xC5 +#define ATA_CMD_WRITE_SECTORS 0x30 +#define ATA_CMD_WRITE_VERIFY 0x3C + +#define ATA_IFACE_NONE 0x00 +#define ATA_IFACE_ISA 0x00 +#define ATA_IFACE_PCI 0x01 + +#define ATA_TYPE_NONE 0x00 +#define ATA_TYPE_UNKNOWN 0x01 +#define ATA_TYPE_ATA 0x02 +#define ATA_TYPE_ATAPI 0x03 + +#define ATA_DEVICE_NONE 0x00 +#define ATA_DEVICE_HD 0xFF +#define ATA_DEVICE_CDROM 0x05 + +#define ATA_MODE_NONE 0x00 +#define ATA_MODE_PIO16 0x00 +#define ATA_MODE_PIO32 0x01 +#define ATA_MODE_ISADMA 0x02 +#define ATA_MODE_PCIDMA 0x03 +#define ATA_MODE_USEIRQ 0x10 + +#define ATA_TRANSLATION_NONE 0 +#define ATA_TRANSLATION_LBA 1 +#define ATA_TRANSLATION_LARGE 2 +#define ATA_TRANSLATION_RECHS 3 + +#define ATA_DATA_NO 0x00 +#define ATA_DATA_IN 0x01 +#define ATA_DATA_OUT 0x02 + +// --------------------------------------------------------------------------- +// ATA/ATAPI driver : initialization +// --------------------------------------------------------------------------- +void ata_init( ) +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit8u channel, device; + + // Channels info init. + for (channel=0; channelata.channels[channel].iface,ATA_IFACE_NONE); + write_word(ebda_seg,&EbdaData->ata.channels[channel].iobase1,0x0); + write_word(ebda_seg,&EbdaData->ata.channels[channel].iobase2,0x0); + write_byte(ebda_seg,&EbdaData->ata.channels[channel].irq,0); + } + + // Devices info init. + for (device=0; deviceata.devices[device].type,ATA_TYPE_NONE); + write_byte(ebda_seg,&EbdaData->ata.devices[device].device,ATA_DEVICE_NONE); + write_byte(ebda_seg,&EbdaData->ata.devices[device].removable,0); + write_byte(ebda_seg,&EbdaData->ata.devices[device].lock,0); + write_byte(ebda_seg,&EbdaData->ata.devices[device].mode,ATA_MODE_NONE); + write_word(ebda_seg,&EbdaData->ata.devices[device].blksize,0); + write_byte(ebda_seg,&EbdaData->ata.devices[device].translation,ATA_TRANSLATION_NONE); + write_word(ebda_seg,&EbdaData->ata.devices[device].lchs.heads,0); + write_word(ebda_seg,&EbdaData->ata.devices[device].lchs.cylinders,0); + write_word(ebda_seg,&EbdaData->ata.devices[device].lchs.spt,0); + write_word(ebda_seg,&EbdaData->ata.devices[device].pchs.heads,0); + write_word(ebda_seg,&EbdaData->ata.devices[device].pchs.cylinders,0); + write_word(ebda_seg,&EbdaData->ata.devices[device].pchs.spt,0); + + write_dword(ebda_seg,&EbdaData->ata.devices[device].sectors_low,0L); + write_dword(ebda_seg,&EbdaData->ata.devices[device].sectors_high,0L); + } + + // hdidmap and cdidmap init. + for (device=0; deviceata.hdidmap[device],BX_MAX_ATA_DEVICES); + write_byte(ebda_seg,&EbdaData->ata.cdidmap[device],BX_MAX_ATA_DEVICES); + } + + write_byte(ebda_seg,&EbdaData->ata.hdcount,0); + write_byte(ebda_seg,&EbdaData->ata.cdcount,0); +} + +#define TIMEOUT 0 +#define BSY 1 +#define NOT_BSY 2 +#define NOT_BSY_DRQ 3 +#define NOT_BSY_NOT_DRQ 4 +#define NOT_BSY_RDY 5 + +#define IDE_TIMEOUT 32000u //32 seconds max for IDE ops + +int await_ide(); +static int await_ide(when_done,base,timeout) + Bit8u when_done; + Bit16u base; + Bit16u timeout; +{ + Bit32u time=0,last=0; + Bit16u status; + Bit8u result; + status = inb(base + ATA_CB_STAT); // for the times you're supposed to throw one away + for(;;) { + status = inb(base+ATA_CB_STAT); + time++; + if (when_done == BSY) + result = status & ATA_CB_STAT_BSY; + else if (when_done == NOT_BSY) + result = !(status & ATA_CB_STAT_BSY); + else if (when_done == NOT_BSY_DRQ) + result = !(status & ATA_CB_STAT_BSY) && (status & ATA_CB_STAT_DRQ); + else if (when_done == NOT_BSY_NOT_DRQ) + result = !(status & ATA_CB_STAT_BSY) && !(status & ATA_CB_STAT_DRQ); + else if (when_done == NOT_BSY_RDY) + result = !(status & ATA_CB_STAT_BSY) && (status & ATA_CB_STAT_RDY); + else if (when_done == TIMEOUT) + result = 0; + + if (result) return 0; + if (time>>16 != last) // mod 2048 each 16 ms + { + last = time >>16; + BX_DEBUG_ATA("await_ide: (TIMEOUT,BSY,!BSY,!BSY_DRQ,!BSY_!DRQ,!BSY_RDY) %d time= %ld timeout= %d\n",when_done,time>>11, timeout); + } + if (status & ATA_CB_STAT_ERR) + { + BX_DEBUG_ATA("await_ide: ERROR (TIMEOUT,BSY,!BSY,!BSY_DRQ,!BSY_!DRQ,!BSY_RDY) %d time= %ld timeout= %d\n",when_done,time>>11, timeout); + return -1; + } + if ((timeout == 0) || ((time>>11) > timeout)) break; + } + BX_INFO("IDE time out\n"); + return -1; +} + +// --------------------------------------------------------------------------- +// ATA/ATAPI driver : device detection +// --------------------------------------------------------------------------- + +void ata_detect( ) +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit8u hdcount, cdcount, device, type; + Bit8u buffer[0x0200]; + +#if BX_MAX_ATA_INTERFACES > 0 + write_byte(ebda_seg,&EbdaData->ata.channels[0].iface,ATA_IFACE_ISA); + write_word(ebda_seg,&EbdaData->ata.channels[0].iobase1,PORT_ATA1_CMD_BASE); + write_word(ebda_seg,&EbdaData->ata.channels[0].iobase2,0x3f0); + write_byte(ebda_seg,&EbdaData->ata.channels[0].irq,14); +#endif +#if BX_MAX_ATA_INTERFACES > 1 + write_byte(ebda_seg,&EbdaData->ata.channels[1].iface,ATA_IFACE_ISA); + write_word(ebda_seg,&EbdaData->ata.channels[1].iobase1,PORT_ATA2_CMD_BASE); + write_word(ebda_seg,&EbdaData->ata.channels[1].iobase2,0x370); + write_byte(ebda_seg,&EbdaData->ata.channels[1].irq,15); +#endif +#if BX_MAX_ATA_INTERFACES > 2 + write_byte(ebda_seg,&EbdaData->ata.channels[2].iface,ATA_IFACE_ISA); + write_word(ebda_seg,&EbdaData->ata.channels[2].iobase1,0x1e8); + write_word(ebda_seg,&EbdaData->ata.channels[2].iobase2,0x3e0); + write_byte(ebda_seg,&EbdaData->ata.channels[2].irq,12); +#endif +#if BX_MAX_ATA_INTERFACES > 3 + write_byte(ebda_seg,&EbdaData->ata.channels[3].iface,ATA_IFACE_ISA); + write_word(ebda_seg,&EbdaData->ata.channels[3].iobase1,0x168); + write_word(ebda_seg,&EbdaData->ata.channels[3].iobase2,0x360); + write_byte(ebda_seg,&EbdaData->ata.channels[3].irq,11); +#endif +#if BX_MAX_ATA_INTERFACES > 4 +#error Please fill the ATA interface informations +#endif + + // Device detection + hdcount=cdcount=0; + + for(device=0; deviceata.channels[channel].iobase1); + iobase2 =read_word(ebda_seg,&EbdaData->ata.channels[channel].iobase2); + + // Disable interrupts + outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15 | ATA_CB_DC_NIEN); + + // Look for device + outb(iobase1+ATA_CB_DH, slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0); + outb(iobase1+ATA_CB_SC, 0x55); + outb(iobase1+ATA_CB_SN, 0xaa); + outb(iobase1+ATA_CB_SC, 0xaa); + outb(iobase1+ATA_CB_SN, 0x55); + outb(iobase1+ATA_CB_SC, 0x55); + outb(iobase1+ATA_CB_SN, 0xaa); + + // If we found something + sc = inb(iobase1+ATA_CB_SC); + sn = inb(iobase1+ATA_CB_SN); + + if ( (sc == 0x55) && (sn == 0xaa) ) { + write_byte(ebda_seg,&EbdaData->ata.devices[device].type,ATA_TYPE_UNKNOWN); + + // reset the channel + ata_reset(device); + + // check for ATA or ATAPI + outb(iobase1+ATA_CB_DH, slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0); + sc = inb(iobase1+ATA_CB_SC); + sn = inb(iobase1+ATA_CB_SN); + if ((sc==0x01) && (sn==0x01)) { + cl = inb(iobase1+ATA_CB_CL); + ch = inb(iobase1+ATA_CB_CH); + st = inb(iobase1+ATA_CB_STAT); + + if ((cl==0x14) && (ch==0xeb)) { + write_byte(ebda_seg,&EbdaData->ata.devices[device].type,ATA_TYPE_ATAPI); + } else if ((cl==0x00) && (ch==0x00) && (st!=0x00)) { + write_byte(ebda_seg,&EbdaData->ata.devices[device].type,ATA_TYPE_ATA); + } else if ((cl==0xff) && (ch==0xff)) { + write_byte(ebda_seg,&EbdaData->ata.devices[device].type,ATA_TYPE_NONE); + } + } + } + + type=read_byte(ebda_seg,&EbdaData->ata.devices[device].type); + + // Now we send a IDENTIFY command to ATA device + if(type == ATA_TYPE_ATA) { + Bit32u sectors_low, sectors_high; + Bit16u cylinders, heads, spt, blksize; + Bit8u translation, removable, mode; + + //Temporary values to do the transfer + write_byte(ebda_seg,&EbdaData->ata.devices[device].device,ATA_DEVICE_HD); + write_byte(ebda_seg,&EbdaData->ata.devices[device].mode, ATA_MODE_PIO16); + + if (ata_cmd_data_in(device,ATA_CMD_IDENTIFY_DEVICE, 1, 0, 0, 0, 0L, 0L, get_SS(),buffer) !=0 ) + BX_PANIC("ata-detect: Failed to detect ATA device\n"); + + removable = (read_byte(get_SS(),buffer+0) & 0x80) ? 1 : 0; + mode = read_byte(get_SS(),buffer+96) ? ATA_MODE_PIO32 : ATA_MODE_PIO16; + blksize = read_word(get_SS(),buffer+10); + + cylinders = read_word(get_SS(),buffer+(1*2)); // word 1 + heads = read_word(get_SS(),buffer+(3*2)); // word 3 + spt = read_word(get_SS(),buffer+(6*2)); // word 6 + + if (read_word(get_SS(),buffer+(83*2)) & (1 << 10)) { // word 83 - lba48 support + sectors_low = read_dword(get_SS(),buffer+(100*2)); // word 100 and word 101 + sectors_high = read_dword(get_SS(),buffer+(102*2)); // word 102 and word 103 + } else { + sectors_low = read_dword(get_SS(),buffer+(60*2)); // word 60 and word 61 + sectors_high = 0; + } + + write_byte(ebda_seg,&EbdaData->ata.devices[device].device,ATA_DEVICE_HD); + write_byte(ebda_seg,&EbdaData->ata.devices[device].removable, removable); + write_byte(ebda_seg,&EbdaData->ata.devices[device].mode, mode); + write_word(ebda_seg,&EbdaData->ata.devices[device].blksize, blksize); + write_word(ebda_seg,&EbdaData->ata.devices[device].pchs.heads, heads); + write_word(ebda_seg,&EbdaData->ata.devices[device].pchs.cylinders, cylinders); + write_word(ebda_seg,&EbdaData->ata.devices[device].pchs.spt, spt); + write_dword(ebda_seg,&EbdaData->ata.devices[device].sectors_low, sectors_low); + write_dword(ebda_seg,&EbdaData->ata.devices[device].sectors_high, sectors_high); + BX_INFO("ata%d-%d: PCHS=%u/%d/%d translation=", channel, slave,cylinders, heads, spt); + + translation = inb_cmos(0x39 + channel/2); + for (shift=device%4; shift>0; shift--) translation >>= 2; + translation &= 0x03; + + write_byte(ebda_seg,&EbdaData->ata.devices[device].translation, translation); + + switch (translation) { + case ATA_TRANSLATION_NONE: + BX_INFO("none"); + break; + case ATA_TRANSLATION_LBA: + BX_INFO("lba"); + break; + case ATA_TRANSLATION_LARGE: + BX_INFO("large"); + break; + case ATA_TRANSLATION_RECHS: + BX_INFO("r-echs"); + break; + } + + switch (translation) { + case ATA_TRANSLATION_NONE: + break; + case ATA_TRANSLATION_LBA: + spt = 63; + sectors_low /= 63; + heads = sectors_low / 1024; + if (heads>128) heads = 255; + else if (heads>64) heads = 128; + else if (heads>32) heads = 64; + else if (heads>16) heads = 32; + else heads=16; + cylinders = sectors_low / heads; + break; + case ATA_TRANSLATION_RECHS: + // Take care not to overflow + if (heads==16) { + if(cylinders>61439) cylinders=61439; + heads=15; + cylinders = (Bit16u)((Bit32u)(cylinders)*16/15); + } + // then go through the large bitshift process + case ATA_TRANSLATION_LARGE: + while(cylinders > 1024) { + cylinders >>= 1; + heads <<= 1; + + // If we max out the head count + if (heads > 127) break; + } + break; + } + + // clip to 1024 cylinders in lchs + if (cylinders > 1024) cylinders=1024; + BX_INFO(" LCHS=%d/%d/%d\n", cylinders, heads, spt); + + write_word(ebda_seg,&EbdaData->ata.devices[device].lchs.heads, heads); + write_word(ebda_seg,&EbdaData->ata.devices[device].lchs.cylinders, cylinders); + write_word(ebda_seg,&EbdaData->ata.devices[device].lchs.spt, spt); + + // fill hdidmap + write_byte(ebda_seg,&EbdaData->ata.hdidmap[hdcount], device); + hdcount++; + } + + // Now we send a IDENTIFY command to ATAPI device + if(type == ATA_TYPE_ATAPI) { + + Bit8u type, removable, mode; + Bit16u blksize; + + //Temporary values to do the transfer + write_byte(ebda_seg,&EbdaData->ata.devices[device].device,ATA_DEVICE_CDROM); + write_byte(ebda_seg,&EbdaData->ata.devices[device].mode, ATA_MODE_PIO16); + + if (ata_cmd_data_in(device,ATA_CMD_IDENTIFY_DEVICE_PACKET, 1, 0, 0, 0, 0L, 0L, get_SS(),buffer) != 0) + BX_PANIC("ata-detect: Failed to detect ATAPI device\n"); + + type = read_byte(get_SS(),buffer+1) & 0x1f; + removable = (read_byte(get_SS(),buffer+0) & 0x80) ? 1 : 0; + mode = read_byte(get_SS(),buffer+96) ? ATA_MODE_PIO32 : ATA_MODE_PIO16; + blksize = 2048; + + write_byte(ebda_seg,&EbdaData->ata.devices[device].device, type); + write_byte(ebda_seg,&EbdaData->ata.devices[device].removable, removable); + write_byte(ebda_seg,&EbdaData->ata.devices[device].mode, mode); + write_word(ebda_seg,&EbdaData->ata.devices[device].blksize, blksize); + + // fill cdidmap + write_byte(ebda_seg,&EbdaData->ata.cdidmap[cdcount], device); + cdcount++; + } + + { + Bit32u sizeinmb; + Bit16u ataversion; + Bit8u c, i, version, model[41]; + + switch (type) { + case ATA_TYPE_ATA: + sizeinmb = (read_dword(ebda_seg,&EbdaData->ata.devices[device].sectors_high) << 21) + | (read_dword(ebda_seg,&EbdaData->ata.devices[device].sectors_low) >> 11); + case ATA_TYPE_ATAPI: + // Read ATA/ATAPI version + ataversion=((Bit16u)(read_byte(get_SS(),buffer+161))<<8)|read_byte(get_SS(),buffer+160); + for(version=15;version>0;version--) { + if((ataversion&(1<0;i--){ + if(read_byte(get_SS(),model+i)==0x20) + write_byte(get_SS(),model+i,0x00); + else break; + } + if (i>36) { + write_byte(get_SS(),model+36,0x00); + for(i=35;i>32;i--){ + write_byte(get_SS(),model+i,0x2E); + } + } + break; + } + + switch (type) { + case ATA_TYPE_ATA: + printf("ata%d %s: ",channel,slave?" slave":"master"); + i=0; + while(c=read_byte(get_SS(),model+i++)) + printf("%c",c); + if (sizeinmb < (1UL<<16)) + printf(" ATA-%d Hard-Disk (%4u MBytes)\n", version, (Bit16u)sizeinmb); + else + printf(" ATA-%d Hard-Disk (%4u GBytes)\n", version, (Bit16u)(sizeinmb>>10)); + break; + case ATA_TYPE_ATAPI: + printf("ata%d %s: ",channel,slave?" slave":"master"); + i=0; while(c=read_byte(get_SS(),model+i++)) printf("%c",c); + if(read_byte(ebda_seg,&EbdaData->ata.devices[device].device)==ATA_DEVICE_CDROM) + printf(" ATAPI-%d CD-Rom/DVD-Rom\n",version); + else + printf(" ATAPI-%d Device\n",version); + break; + case ATA_TYPE_UNKNOWN: + printf("ata%d %s: Unknown device\n",channel,slave?" slave":"master"); + break; + } + } + } + + // Store the devices counts + write_byte(ebda_seg,&EbdaData->ata.hdcount, hdcount); + write_byte(ebda_seg,&EbdaData->ata.cdcount, cdcount); + write_byte(0x40,0x75, hdcount); + + printf("\n"); + + // FIXME : should use bios=cmos|auto|disable bits + // FIXME : should know about translation bits + // FIXME : move hard_drive_post here + +} + +// --------------------------------------------------------------------------- +// ATA/ATAPI driver : software reset +// --------------------------------------------------------------------------- +// ATA-3 +// 8.2.1 Software reset - Device 0 + +void ata_reset(device) +Bit16u device; +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit16u iobase1, iobase2; + Bit8u channel, slave, sn, sc; + Bit8u type; + Bit16u max; + + channel = device / 2; + slave = device % 2; + + iobase1 = read_word(ebda_seg, &EbdaData->ata.channels[channel].iobase1); + iobase2 = read_word(ebda_seg, &EbdaData->ata.channels[channel].iobase2); + + // Reset + +// 8.2.1 (a) -- set SRST in DC + outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15 | ATA_CB_DC_NIEN | ATA_CB_DC_SRST); + +// 8.2.1 (b) -- wait for BSY + await_ide(BSY, iobase1, 20); + +// 8.2.1 (f) -- clear SRST + outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15 | ATA_CB_DC_NIEN); + + type=read_byte(ebda_seg,&EbdaData->ata.devices[device].type); + if (type != ATA_TYPE_NONE) { + +// 8.2.1 (g) -- check for sc==sn==0x01 + // select device + outb(iobase1+ATA_CB_DH, slave?ATA_CB_DH_DEV1:ATA_CB_DH_DEV0); + sc = inb(iobase1+ATA_CB_SC); + sn = inb(iobase1+ATA_CB_SN); + + if ( (sc==0x01) && (sn==0x01) ) { + if (type == ATA_TYPE_ATA) //ATA + await_ide(NOT_BSY_RDY, iobase1, IDE_TIMEOUT); + else //ATAPI + await_ide(NOT_BSY, iobase1, IDE_TIMEOUT); + } + +// 8.2.1 (h) -- wait for not BSY + await_ide(NOT_BSY, iobase1, IDE_TIMEOUT); + } + + // Enable interrupts + outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15); +} + +// --------------------------------------------------------------------------- +// ATA/ATAPI driver : execute a non data command +// --------------------------------------------------------------------------- + +Bit16u ata_cmd_non_data() +{return 0;} + +// --------------------------------------------------------------------------- +// ATA/ATAPI driver : execute a data-in command +// --------------------------------------------------------------------------- + // returns + // 0 : no error + // 1 : BUSY bit set + // 2 : read error + // 3 : expected DRQ=1 + // 4 : no sectors left to read/verify + // 5 : more sectors to read/verify + // 6 : no sectors left to write + // 7 : more sectors to write +Bit16u ata_cmd_data_in(device, command, count, cylinder, head, sector, lba_low, lba_high, segment, offset) +Bit16u device, command, count, cylinder, head, sector, segment, offset; +Bit32u lba_low, lba_high; +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit16u iobase1, iobase2, blksize; + Bit8u channel, slave; + Bit8u status, current, mode; + + channel = device / 2; + slave = device % 2; + + iobase1 = read_word(ebda_seg, &EbdaData->ata.channels[channel].iobase1); + iobase2 = read_word(ebda_seg, &EbdaData->ata.channels[channel].iobase2); + mode = read_byte(ebda_seg, &EbdaData->ata.devices[device].mode); + blksize = 0x200; // was = read_word(ebda_seg, &EbdaData->ata.devices[device].blksize); + if (mode == ATA_MODE_PIO32) blksize>>=2; + else blksize>>=1; + + // Reset count of transferred data + write_word(ebda_seg, &EbdaData->ata.trsfsectors,0); + write_dword(ebda_seg, &EbdaData->ata.trsfbytes,0L); + current = 0; + + status = inb(iobase1 + ATA_CB_STAT); + if (status & ATA_CB_STAT_BSY) return 1; + + outb(iobase2 + ATA_CB_DC, ATA_CB_DC_HD15 | ATA_CB_DC_NIEN); + + // sector will be 0 only on lba access. Convert to lba-chs + if (sector == 0) { + if ((count >= 1 << 8) || lba_high || (lba_low + count >= 1UL << 28)) { + outb(iobase1 + ATA_CB_FR, 0x00); + outb(iobase1 + ATA_CB_SC, (count >> 8) & 0xff); + outb(iobase1 + ATA_CB_SN, lba_low >> 24); + outb(iobase1 + ATA_CB_CL, lba_high & 0xff); + outb(iobase1 + ATA_CB_CH, lba_high >> 8); + command |= 0x04; + count &= (1UL << 8) - 1; + lba_low &= (1UL << 24) - 1; + } + sector = (Bit16u) (lba_low & 0x000000ffL); + cylinder = (Bit16u) ((lba_low>>8) & 0x0000ffffL); + head = ((Bit16u) ((lba_low>>24) & 0x0000000fL)) | ATA_CB_DH_LBA; + } + + outb(iobase1 + ATA_CB_FR, 0x00); + outb(iobase1 + ATA_CB_SC, count); + outb(iobase1 + ATA_CB_SN, sector); + outb(iobase1 + ATA_CB_CL, cylinder & 0x00ff); + outb(iobase1 + ATA_CB_CH, cylinder >> 8); + outb(iobase1 + ATA_CB_DH, (slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0) | (Bit8u) head ); + outb(iobase1 + ATA_CB_CMD, command); + + await_ide(NOT_BSY_DRQ, iobase1, IDE_TIMEOUT); + status = inb(iobase1 + ATA_CB_STAT); + + if (status & ATA_CB_STAT_ERR) { + BX_DEBUG_ATA("ata_cmd_data_in : read error\n"); + return 2; + } else if ( !(status & ATA_CB_STAT_DRQ) ) { + BX_DEBUG_ATA("ata_cmd_data_in : DRQ not set (status %02x)\n", (unsigned) status); + return 3; + } + + // FIXME : move seg/off translation here + +ASM_START + sti ;; enable higher priority interrupts +ASM_END + + while (1) { + +ASM_START + push bp + mov bp, sp + mov di, _ata_cmd_data_in.offset + 2[bp] + mov ax, _ata_cmd_data_in.segment + 2[bp] + mov cx, _ata_cmd_data_in.blksize + 2[bp] + + ;; adjust if there will be an overrun. 2K max sector size + cmp di, #0xf800 ;; + jbe ata_in_no_adjust + +ata_in_adjust: + sub di, #0x0800 ;; sub 2 kbytes from offset + add ax, #0x0080 ;; add 2 Kbytes to segment + +ata_in_no_adjust: + mov es, ax ;; segment in es + + mov dx, _ata_cmd_data_in.iobase1 + 2[bp] ;; ATA data read port + + mov ah, _ata_cmd_data_in.mode + 2[bp] + cmp ah, #ATA_MODE_PIO32 + je ata_in_32 + +ata_in_16: + rep + insw ;; CX words transferred from port(DX) to ES:[DI] + jmp ata_in_done + +ata_in_32: + rep + insd ;; CX dwords transferred from port(DX) to ES:[DI] + +ata_in_done: + mov _ata_cmd_data_in.offset + 2[bp], di + mov _ata_cmd_data_in.segment + 2[bp], es + pop bp +ASM_END + + current++; + write_word(ebda_seg, &EbdaData->ata.trsfsectors,current); + count--; + await_ide(NOT_BSY, iobase1, IDE_TIMEOUT); + status = inb(iobase1 + ATA_CB_STAT); + if (count == 0) { + if ( (status & (ATA_CB_STAT_BSY | ATA_CB_STAT_RDY | ATA_CB_STAT_DRQ | ATA_CB_STAT_ERR) ) + != ATA_CB_STAT_RDY ) { + BX_DEBUG_ATA("ata_cmd_data_in : no sectors left (status %02x)\n", (unsigned) status); + return 4; + } + break; + } + else { + if ( (status & (ATA_CB_STAT_BSY | ATA_CB_STAT_RDY | ATA_CB_STAT_DRQ | ATA_CB_STAT_ERR) ) + != (ATA_CB_STAT_RDY | ATA_CB_STAT_DRQ) ) { + BX_DEBUG_ATA("ata_cmd_data_in : more sectors left (status %02x)\n", (unsigned) status); + return 5; + } + continue; + } + } + // Enable interrupts + outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15); + return 0; +} + +// --------------------------------------------------------------------------- +// ATA/ATAPI driver : execute a data-out command +// --------------------------------------------------------------------------- + // returns + // 0 : no error + // 1 : BUSY bit set + // 2 : read error + // 3 : expected DRQ=1 + // 4 : no sectors left to read/verify + // 5 : more sectors to read/verify + // 6 : no sectors left to write + // 7 : more sectors to write +Bit16u ata_cmd_data_out(device, command, count, cylinder, head, sector, lba_low, lba_high, segment, offset) +Bit16u device, command, count, cylinder, head, sector, segment, offset; +Bit32u lba_low, lba_high; +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit16u iobase1, iobase2, blksize; + Bit8u channel, slave; + Bit8u status, current, mode; + + channel = device / 2; + slave = device % 2; + + iobase1 = read_word(ebda_seg, &EbdaData->ata.channels[channel].iobase1); + iobase2 = read_word(ebda_seg, &EbdaData->ata.channels[channel].iobase2); + mode = read_byte(ebda_seg, &EbdaData->ata.devices[device].mode); + blksize = 0x200; // was = read_word(ebda_seg, &EbdaData->ata.devices[device].blksize); + if (mode == ATA_MODE_PIO32) blksize>>=2; + else blksize>>=1; + + // Reset count of transferred data + write_word(ebda_seg, &EbdaData->ata.trsfsectors,0); + write_dword(ebda_seg, &EbdaData->ata.trsfbytes,0L); + current = 0; + + status = inb(iobase1 + ATA_CB_STAT); + if (status & ATA_CB_STAT_BSY) return 1; + + outb(iobase2 + ATA_CB_DC, ATA_CB_DC_HD15 | ATA_CB_DC_NIEN); + + // sector will be 0 only on lba access. Convert to lba-chs + if (sector == 0) { + if ((count >= 1 << 8) || lba_high || (lba_low + count >= 1UL << 28)) { + outb(iobase1 + ATA_CB_FR, 0x00); + outb(iobase1 + ATA_CB_SC, (count >> 8) & 0xff); + outb(iobase1 + ATA_CB_SN, lba_low >> 24); + outb(iobase1 + ATA_CB_CL, lba_high & 0xff); + outb(iobase1 + ATA_CB_CH, lba_high >> 8); + command |= 0x04; + count &= (1UL << 8) - 1; + lba_low &= (1UL << 24) - 1; + } + sector = (Bit16u) (lba_low & 0x000000ffL); + cylinder = (Bit16u) ((lba_low>>8) & 0x0000ffffL); + head = ((Bit16u) ((lba_low>>24) & 0x0000000fL)) | ATA_CB_DH_LBA; + } + + outb(iobase1 + ATA_CB_FR, 0x00); + outb(iobase1 + ATA_CB_SC, count); + outb(iobase1 + ATA_CB_SN, sector); + outb(iobase1 + ATA_CB_CL, cylinder & 0x00ff); + outb(iobase1 + ATA_CB_CH, cylinder >> 8); + outb(iobase1 + ATA_CB_DH, (slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0) | (Bit8u) head ); + outb(iobase1 + ATA_CB_CMD, command); + + await_ide(NOT_BSY_DRQ, iobase1, IDE_TIMEOUT); + status = inb(iobase1 + ATA_CB_STAT); + + if (status & ATA_CB_STAT_ERR) { + BX_DEBUG_ATA("ata_cmd_data_out : read error\n"); + return 2; + } else if ( !(status & ATA_CB_STAT_DRQ) ) { + BX_DEBUG_ATA("ata_cmd_data_out : DRQ not set (status %02x)\n", (unsigned) status); + return 3; + } + + // FIXME : move seg/off translation here + +ASM_START + sti ;; enable higher priority interrupts +ASM_END + + while (1) { + +ASM_START + push bp + mov bp, sp + mov si, _ata_cmd_data_out.offset + 2[bp] + mov ax, _ata_cmd_data_out.segment + 2[bp] + mov cx, _ata_cmd_data_out.blksize + 2[bp] + + ;; adjust if there will be an overrun. 2K max sector size + cmp si, #0xf800 ;; + jbe ata_out_no_adjust + +ata_out_adjust: + sub si, #0x0800 ;; sub 2 kbytes from offset + add ax, #0x0080 ;; add 2 Kbytes to segment + +ata_out_no_adjust: + mov es, ax ;; segment in es + + mov dx, _ata_cmd_data_out.iobase1 + 2[bp] ;; ATA data write port + + mov ah, _ata_cmd_data_out.mode + 2[bp] + cmp ah, #ATA_MODE_PIO32 + je ata_out_32 + +ata_out_16: + seg ES + rep + outsw ;; CX words transferred from port(DX) to ES:[SI] + jmp ata_out_done + +ata_out_32: + seg ES + rep + outsd ;; CX dwords transferred from port(DX) to ES:[SI] + +ata_out_done: + mov _ata_cmd_data_out.offset + 2[bp], si + mov _ata_cmd_data_out.segment + 2[bp], es + pop bp +ASM_END + + current++; + write_word(ebda_seg, &EbdaData->ata.trsfsectors,current); + count--; + status = inb(iobase1 + ATA_CB_STAT); + if (count == 0) { + if ( (status & (ATA_CB_STAT_BSY | ATA_CB_STAT_RDY | ATA_CB_STAT_DF | ATA_CB_STAT_DRQ | ATA_CB_STAT_ERR) ) + != ATA_CB_STAT_RDY ) { + BX_DEBUG_ATA("ata_cmd_data_out : no sectors left (status %02x)\n", (unsigned) status); + return 6; + } + break; + } + else { + if ( (status & (ATA_CB_STAT_BSY | ATA_CB_STAT_RDY | ATA_CB_STAT_DRQ | ATA_CB_STAT_ERR) ) + != (ATA_CB_STAT_RDY | ATA_CB_STAT_DRQ) ) { + BX_DEBUG_ATA("ata_cmd_data_out : more sectors left (status %02x)\n", (unsigned) status); + return 7; + } + continue; + } + } + // Enable interrupts + outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15); + return 0; +} + +// --------------------------------------------------------------------------- +// ATA/ATAPI driver : execute a packet command +// --------------------------------------------------------------------------- + // returns + // 0 : no error + // 1 : error in parameters + // 2 : BUSY bit set + // 3 : error + // 4 : not ready +Bit16u ata_cmd_packet(device, cmdlen, cmdseg, cmdoff, header, length, inout, bufseg, bufoff) +Bit8u cmdlen,inout; +Bit16u device,cmdseg, cmdoff, bufseg, bufoff; +Bit16u header; +Bit32u length; +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit16u iobase1, iobase2; + Bit16u lcount, lbefore, lafter, count; + Bit8u channel, slave; + Bit8u status, mode, lmode; + Bit32u total, transfer; + + channel = device / 2; + slave = device % 2; + + // Data out is not supported yet + if (inout == ATA_DATA_OUT) { + BX_INFO("ata_cmd_packet: DATA_OUT not supported yet\n"); + return 1; + } + + // The header length must be even + if (header & 1) { + BX_DEBUG_ATA("ata_cmd_packet : header must be even (%04x)\n",header); + return 1; + } + + iobase1 = read_word(ebda_seg, &EbdaData->ata.channels[channel].iobase1); + iobase2 = read_word(ebda_seg, &EbdaData->ata.channels[channel].iobase2); + mode = read_byte(ebda_seg, &EbdaData->ata.devices[device].mode); + transfer= 0L; + + if (cmdlen < 12) cmdlen=12; + if (cmdlen > 12) cmdlen=16; + cmdlen>>=1; + + // Reset count of transferred data + write_word(ebda_seg, &EbdaData->ata.trsfsectors,0); + write_dword(ebda_seg, &EbdaData->ata.trsfbytes,0L); + + status = inb(iobase1 + ATA_CB_STAT); + if (status & ATA_CB_STAT_BSY) return 2; + + outb(iobase2 + ATA_CB_DC, ATA_CB_DC_HD15 | ATA_CB_DC_NIEN); + outb(iobase1 + ATA_CB_FR, 0x00); + outb(iobase1 + ATA_CB_SC, 0x00); + outb(iobase1 + ATA_CB_SN, 0x00); + outb(iobase1 + ATA_CB_CL, 0xfff0 & 0x00ff); + outb(iobase1 + ATA_CB_CH, 0xfff0 >> 8); + outb(iobase1 + ATA_CB_DH, slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0); + outb(iobase1 + ATA_CB_CMD, ATA_CMD_PACKET); + + // Device should ok to receive command + await_ide(NOT_BSY_DRQ, iobase1, IDE_TIMEOUT); + status = inb(iobase1 + ATA_CB_STAT); + + if (status & ATA_CB_STAT_ERR) { + BX_DEBUG_ATA("ata_cmd_packet : error, status is %02x\n",status); + return 3; + } else if ( !(status & ATA_CB_STAT_DRQ) ) { + BX_DEBUG_ATA("ata_cmd_packet : DRQ not set (status %02x)\n", (unsigned) status); + return 4; + } + + // Normalize address + cmdseg += (cmdoff / 16); + cmdoff %= 16; + + // Send command to device +ASM_START + sti ;; enable higher priority interrupts + + push bp + mov bp, sp + + mov si, _ata_cmd_packet.cmdoff + 2[bp] + mov ax, _ata_cmd_packet.cmdseg + 2[bp] + mov cx, _ata_cmd_packet.cmdlen + 2[bp] + mov es, ax ;; segment in es + + mov dx, _ata_cmd_packet.iobase1 + 2[bp] ;; ATA data write port + + seg ES + rep + outsw ;; CX words transferred from port(DX) to ES:[SI] + + pop bp +ASM_END + + if (inout == ATA_DATA_NO) { + await_ide(NOT_BSY, iobase1, IDE_TIMEOUT); + status = inb(iobase1 + ATA_CB_STAT); + } + else { + Bit16u loops = 0; + Bit8u sc; + + while (1) { + + if (loops == 0) {//first time through + status = inb(iobase2 + ATA_CB_ASTAT); + await_ide(NOT_BSY_DRQ, iobase1, IDE_TIMEOUT); + } + else + await_ide(NOT_BSY, iobase1, IDE_TIMEOUT); + loops++; + + status = inb(iobase1 + ATA_CB_STAT); + sc = inb(iobase1 + ATA_CB_SC); + + // Check if command completed + if(((inb(iobase1 + ATA_CB_SC)&0x7)==0x3) && + ((status & (ATA_CB_STAT_RDY | ATA_CB_STAT_ERR)) == ATA_CB_STAT_RDY)) break; + + if (status & ATA_CB_STAT_ERR) { + BX_DEBUG_ATA("ata_cmd_packet : error (status %02x)\n",status); + return 3; + } + + // Normalize address + bufseg += (bufoff / 16); + bufoff %= 16; + + // Get the byte count + lcount = ((Bit16u)(inb(iobase1 + ATA_CB_CH))<<8)+inb(iobase1 + ATA_CB_CL); + + // adjust to read what we want + if(header>lcount) { + lbefore=lcount; + header-=lcount; + lcount=0; + } + else { + lbefore=header; + header=0; + lcount-=lbefore; + } + + if(lcount>length) { + lafter=lcount-length; + lcount=length; + length=0; + } + else { + lafter=0; + length-=lcount; + } + + // Save byte count + count = lcount; + + BX_DEBUG_ATA("Trying to read %04x bytes (%04x %04x %04x) ",lbefore+lcount+lafter,lbefore,lcount,lafter); + BX_DEBUG_ATA("to 0x%04x:0x%04x\n",bufseg,bufoff); + + // If counts not dividable by 4, use 16bits mode + lmode = mode; + if (lbefore & 0x03) lmode=ATA_MODE_PIO16; + if (lcount & 0x03) lmode=ATA_MODE_PIO16; + if (lafter & 0x03) lmode=ATA_MODE_PIO16; + + // adds an extra byte if count are odd. before is always even + if (lcount & 0x01) { + lcount+=1; + if ((lafter > 0) && (lafter & 0x01)) { + lafter-=1; + } + } + + if (lmode == ATA_MODE_PIO32) { + lcount>>=2; lbefore>>=2; lafter>>=2; + } + else { + lcount>>=1; lbefore>>=1; lafter>>=1; + } + + ; // FIXME bcc bug + +ASM_START + push bp + mov bp, sp + + mov dx, _ata_cmd_packet.iobase1 + 2[bp] ;; ATA data read port + + mov cx, _ata_cmd_packet.lbefore + 2[bp] + jcxz ata_packet_no_before + + mov ah, _ata_cmd_packet.lmode + 2[bp] + cmp ah, #ATA_MODE_PIO32 + je ata_packet_in_before_32 + +ata_packet_in_before_16: + in ax, dx + loop ata_packet_in_before_16 + jmp ata_packet_no_before + +ata_packet_in_before_32: + push eax +ata_packet_in_before_32_loop: + in eax, dx + loop ata_packet_in_before_32_loop + pop eax + +ata_packet_no_before: + mov cx, _ata_cmd_packet.lcount + 2[bp] + jcxz ata_packet_after + + mov di, _ata_cmd_packet.bufoff + 2[bp] + mov ax, _ata_cmd_packet.bufseg + 2[bp] + mov es, ax + + mov ah, _ata_cmd_packet.lmode + 2[bp] + cmp ah, #ATA_MODE_PIO32 + je ata_packet_in_32 + +ata_packet_in_16: + rep + insw ;; CX words transferred to port(DX) to ES:[DI] + jmp ata_packet_after + +ata_packet_in_32: + rep + insd ;; CX dwords transferred to port(DX) to ES:[DI] + +ata_packet_after: + mov cx, _ata_cmd_packet.lafter + 2[bp] + jcxz ata_packet_done + + mov ah, _ata_cmd_packet.lmode + 2[bp] + cmp ah, #ATA_MODE_PIO32 + je ata_packet_in_after_32 + +ata_packet_in_after_16: + in ax, dx + loop ata_packet_in_after_16 + jmp ata_packet_done + +ata_packet_in_after_32: + push eax +ata_packet_in_after_32_loop: + in eax, dx + loop ata_packet_in_after_32_loop + pop eax + +ata_packet_done: + pop bp +ASM_END + + // Compute new buffer address + bufoff += count; + + // Save transferred bytes count + transfer += count; + write_dword(ebda_seg, &EbdaData->ata.trsfbytes,transfer); + } + } + + // Final check, device must be ready + if ( (status & (ATA_CB_STAT_BSY | ATA_CB_STAT_RDY | ATA_CB_STAT_DF | ATA_CB_STAT_DRQ | ATA_CB_STAT_ERR) ) + != ATA_CB_STAT_RDY ) { + BX_DEBUG_ATA("ata_cmd_packet : not ready (status %02x)\n", (unsigned) status); + return 4; + } + + // Enable interrupts + outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15); + return 0; +} + +// --------------------------------------------------------------------------- +// End of ATA/ATAPI Driver +// --------------------------------------------------------------------------- + +// --------------------------------------------------------------------------- +// Start of ATA/ATAPI generic functions +// --------------------------------------------------------------------------- + + Bit16u +atapi_get_sense(device, seg, asc, ascq) + Bit16u device; +{ + Bit8u atacmd[12]; + Bit8u buffer[18]; + Bit8u i; + + memsetb(get_SS(),atacmd,0,12); + + // Request SENSE + atacmd[0]=ATA_CMD_REQUEST_SENSE; + atacmd[4]=sizeof(buffer); + if (ata_cmd_packet(device, 12, get_SS(), atacmd, 0, 18L, ATA_DATA_IN, get_SS(), buffer) != 0) + return 0x0002; + + write_byte(seg,asc,buffer[12]); + write_byte(seg,ascq,buffer[13]); + + return 0; +} + + Bit16u +atapi_is_ready(device) + Bit16u device; +{ + Bit8u packet[12]; + Bit8u buf[8]; + Bit32u block_len; + Bit32u sectors; + Bit32u timeout; //measured in ms + Bit32u time; + Bit8u asc, ascq; + Bit8u in_progress; + Bit16u ebda_seg = read_word(0x0040,0x000E); + if (read_byte(ebda_seg,&EbdaData->ata.devices[device].type) != ATA_TYPE_ATAPI) { + printf("not implemented for non-ATAPI device\n"); + return -1; + } + + BX_DEBUG_ATA("ata_detect_medium: begin\n"); + memsetb(get_SS(),packet, 0, sizeof packet); + packet[0] = 0x25; /* READ CAPACITY */ + + /* Retry READ CAPACITY 50 times unless MEDIUM NOT PRESENT + * is reported by the device. If the device reports "IN PROGRESS", + * 30 seconds is added. */ + timeout = 5000; + time = 0; + in_progress = 0; + while (time < timeout) { + if (ata_cmd_packet(device, sizeof(packet), get_SS(), packet, 0, 8L, ATA_DATA_IN, get_SS(), buf) == 0) + goto ok; + + if (atapi_get_sense(device, get_SS(), &asc, &ascq) == 0) { + if (asc == 0x3a) { /* MEDIUM NOT PRESENT */ + BX_DEBUG_ATA("Device reports MEDIUM NOT PRESENT\n"); + return -1; + } + + if (asc == 0x04 && ascq == 0x01 && !in_progress) { + /* IN PROGRESS OF BECOMING READY */ + printf("Waiting for device to detect medium... "); + /* Allow 30 seconds more */ + timeout = 30000; + in_progress = 1; + } + } + time += 100; + } + BX_DEBUG_ATA("read capacity failed\n"); + return -1; +ok: + + block_len = (Bit32u) buf[4] << 24 + | (Bit32u) buf[5] << 16 + | (Bit32u) buf[6] << 8 + | (Bit32u) buf[7] << 0; + BX_DEBUG_ATA("block_len=%u\n", block_len); + + if (block_len!= 2048 && block_len!= 512) + { + printf("Unsupported sector size %u\n", block_len); + return -1; + } + write_dword(ebda_seg,&EbdaData->ata.devices[device].blksize, block_len); + + sectors = (Bit32u) buf[0] << 24 + | (Bit32u) buf[1] << 16 + | (Bit32u) buf[2] << 8 + | (Bit32u) buf[3] << 0; + + BX_DEBUG_ATA("sectors=%u\n", sectors); + if (block_len == 2048) + sectors <<= 2; /* # of sectors in 512-byte "soft" sector */ + if (sectors != read_dword(ebda_seg,&EbdaData->ata.devices[device].sectors_low)) + printf("%dMB medium detected\n", sectors>>(20-9)); + write_dword(ebda_seg,&EbdaData->ata.devices[device].sectors_low, sectors); + return 0; +} + + Bit16u +atapi_is_cdrom(device) + Bit8u device; +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + + if (device >= BX_MAX_ATA_DEVICES) + return 0; + + if (read_byte(ebda_seg,&EbdaData->ata.devices[device].type) != ATA_TYPE_ATAPI) + return 0; + + if (read_byte(ebda_seg,&EbdaData->ata.devices[device].device) != ATA_DEVICE_CDROM) + return 0; + + return 1; +} + +// --------------------------------------------------------------------------- +// End of ATA/ATAPI generic functions +// --------------------------------------------------------------------------- + +#endif // BX_USE_ATADRV + +#if BX_ELTORITO_BOOT + +// --------------------------------------------------------------------------- +// Start of El-Torito boot functions +// --------------------------------------------------------------------------- + + void +cdemu_init() +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + + // the only important data is this one for now + write_byte(ebda_seg,&EbdaData->cdemu.active,0x00); +} + + Bit8u +cdemu_isactive() +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + + return(read_byte(ebda_seg,&EbdaData->cdemu.active)); +} + + Bit8u +cdemu_emulated_drive() +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + + return(read_byte(ebda_seg,&EbdaData->cdemu.emulated_drive)); +} + +static char isotag[6]="CD001"; +static char eltorito[24]="EL TORITO SPECIFICATION"; +// +// Returns ah: emulated drive, al: error code +// + Bit16u +cdrom_boot() +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit8u atacmd[12], buffer[2048]; + Bit32u lba; + Bit16u boot_segment, nbsectors, i, error; + Bit8u device; + + // Find out the first cdrom + for (device=0; device= BX_MAX_ATA_DEVICES) return 2; + + if(error = atapi_is_ready(device) != 0) + BX_INFO("ata_is_ready returned %d\n",error); + + // Read the Boot Record Volume Descriptor + memsetb(get_SS(),atacmd,0,12); + atacmd[0]=0x28; // READ command + atacmd[7]=(0x01 & 0xff00) >> 8; // Sectors + atacmd[8]=(0x01 & 0x00ff); // Sectors + atacmd[2]=(0x11 & 0xff000000) >> 24; // LBA + atacmd[3]=(0x11 & 0x00ff0000) >> 16; + atacmd[4]=(0x11 & 0x0000ff00) >> 8; + atacmd[5]=(0x11 & 0x000000ff); + if((error = ata_cmd_packet(device, 12, get_SS(), atacmd, 0, 2048L, ATA_DATA_IN, get_SS(), buffer)) != 0) + return 3; + + // Validity checks + if(buffer[0]!=0) return 4; + for(i=0;i<5;i++){ + if(buffer[1+i]!=read_byte(0xf000,&isotag[i])) return 5; + } + for(i=0;i<23;i++) + if(buffer[7+i]!=read_byte(0xf000,&eltorito[i])) return 6; + + // ok, now we calculate the Boot catalog address + lba=buffer[0x4A]*0x1000000+buffer[0x49]*0x10000+buffer[0x48]*0x100+buffer[0x47]; + + // And we read the Boot Catalog + memsetb(get_SS(),atacmd,0,12); + atacmd[0]=0x28; // READ command + atacmd[7]=(0x01 & 0xff00) >> 8; // Sectors + atacmd[8]=(0x01 & 0x00ff); // Sectors + atacmd[2]=(lba & 0xff000000) >> 24; // LBA + atacmd[3]=(lba & 0x00ff0000) >> 16; + atacmd[4]=(lba & 0x0000ff00) >> 8; + atacmd[5]=(lba & 0x000000ff); + if((error = ata_cmd_packet(device, 12, get_SS(), atacmd, 0, 2048L, ATA_DATA_IN, get_SS(), buffer)) != 0) + return 7; + + // Validation entry + if(buffer[0x00]!=0x01)return 8; // Header + if(buffer[0x01]!=0x00)return 9; // Platform + if(buffer[0x1E]!=0x55)return 10; // key 1 + if(buffer[0x1F]!=0xAA)return 10; // key 2 + + // Initial/Default Entry + if(buffer[0x20]!=0x88)return 11; // Bootable + + write_byte(ebda_seg,&EbdaData->cdemu.media,buffer[0x21]); + if(buffer[0x21]==0){ + // FIXME ElTorito Hardcoded. cdrom is hardcoded as device 0xE0. + // Win2000 cd boot needs to know it booted from cd + write_byte(ebda_seg,&EbdaData->cdemu.emulated_drive,0xE0); + } + else if(buffer[0x21]<4) + write_byte(ebda_seg,&EbdaData->cdemu.emulated_drive,0x00); + else + write_byte(ebda_seg,&EbdaData->cdemu.emulated_drive,0x80); + + write_byte(ebda_seg,&EbdaData->cdemu.controller_index,device/2); + write_byte(ebda_seg,&EbdaData->cdemu.device_spec,device%2); + + boot_segment=buffer[0x23]*0x100+buffer[0x22]; + if(boot_segment==0x0000)boot_segment=0x07C0; + + write_word(ebda_seg,&EbdaData->cdemu.load_segment,boot_segment); + write_word(ebda_seg,&EbdaData->cdemu.buffer_segment,0x0000); + + nbsectors=buffer[0x27]*0x100+buffer[0x26]; + write_word(ebda_seg,&EbdaData->cdemu.sector_count,nbsectors); + + lba=buffer[0x2B]*0x1000000+buffer[0x2A]*0x10000+buffer[0x29]*0x100+buffer[0x28]; + write_dword(ebda_seg,&EbdaData->cdemu.ilba,lba); + + // And we read the image in memory + memsetb(get_SS(),atacmd,0,12); + atacmd[0]=0x28; // READ command + atacmd[7]=((1+(nbsectors-1)/4) & 0xff00) >> 8; // Sectors + atacmd[8]=((1+(nbsectors-1)/4) & 0x00ff); // Sectors + atacmd[2]=(lba & 0xff000000) >> 24; // LBA + atacmd[3]=(lba & 0x00ff0000) >> 16; + atacmd[4]=(lba & 0x0000ff00) >> 8; + atacmd[5]=(lba & 0x000000ff); + if((error = ata_cmd_packet(device, 12, get_SS(), atacmd, 0, nbsectors*512L, ATA_DATA_IN, boot_segment,0)) != 0) + return 12; + + // Remember the media type + switch(read_byte(ebda_seg,&EbdaData->cdemu.media)) { + case 0x01: // 1.2M floppy + write_word(ebda_seg,&EbdaData->cdemu.vdevice.spt,15); + write_word(ebda_seg,&EbdaData->cdemu.vdevice.cylinders,80); + write_word(ebda_seg,&EbdaData->cdemu.vdevice.heads,2); + break; + case 0x02: // 1.44M floppy + write_word(ebda_seg,&EbdaData->cdemu.vdevice.spt,18); + write_word(ebda_seg,&EbdaData->cdemu.vdevice.cylinders,80); + write_word(ebda_seg,&EbdaData->cdemu.vdevice.heads,2); + break; + case 0x03: // 2.88M floppy + write_word(ebda_seg,&EbdaData->cdemu.vdevice.spt,36); + write_word(ebda_seg,&EbdaData->cdemu.vdevice.cylinders,80); + write_word(ebda_seg,&EbdaData->cdemu.vdevice.heads,2); + break; + case 0x04: // Harddrive + write_word(ebda_seg,&EbdaData->cdemu.vdevice.spt,read_byte(boot_segment,446+6)&0x3f); + write_word(ebda_seg,&EbdaData->cdemu.vdevice.cylinders, + (read_byte(boot_segment,446+6)<<2) + read_byte(boot_segment,446+7) + 1); + write_word(ebda_seg,&EbdaData->cdemu.vdevice.heads,read_byte(boot_segment,446+5) + 1); + break; + } + + if(read_byte(ebda_seg,&EbdaData->cdemu.media)!=0) { + // Increase bios installed hardware number of devices + if(read_byte(ebda_seg,&EbdaData->cdemu.emulated_drive)==0x00) + write_byte(0x40,0x10,read_byte(0x40,0x10)|0x41); + else + write_byte(ebda_seg, &EbdaData->ata.hdcount, read_byte(ebda_seg, &EbdaData->ata.hdcount) + 1); + } + + // everything is ok, so from now on, the emulation is active + if(read_byte(ebda_seg,&EbdaData->cdemu.media)!=0) + write_byte(ebda_seg,&EbdaData->cdemu.active,0x01); + + // return the boot drive + no error + return (read_byte(ebda_seg,&EbdaData->cdemu.emulated_drive)*0x100)+0; +} + +// --------------------------------------------------------------------------- +// End of El-Torito boot functions +// --------------------------------------------------------------------------- +#endif // BX_ELTORITO_BOOT + +void int14_function(regs, ds, iret_addr) + pusha_regs_t regs; // regs pushed from PUSHA instruction + Bit16u ds; // previous DS:, DS set to 0x0000 by asm wrapper + iret_addr_t iret_addr; // CS,IP,Flags pushed from original INT call +{ + Bit16u addr,timer,val16; + Bit8u counter; + + ASM_START + sti + ASM_END + + addr = read_word(0x0040, (regs.u.r16.dx << 1)); + counter = read_byte(0x0040, 0x007C + regs.u.r16.dx); + if ((regs.u.r16.dx < 4) && (addr > 0)) { + switch (regs.u.r8.ah) { + case 0: + outb(addr+3, inb(addr+3) | 0x80); + if (regs.u.r8.al & 0xE0 == 0) { + outb(addr, 0x17); + outb(addr+1, 0x04); + } else { + val16 = 0x600 >> ((regs.u.r8.al & 0xE0) >> 5); + outb(addr, val16 & 0xFF); + outb(addr+1, val16 >> 8); + } + outb(addr+3, regs.u.r8.al & 0x1F); + regs.u.r8.ah = inb(addr+5); + regs.u.r8.al = inb(addr+6); + ClearCF(iret_addr.flags); + break; + case 1: + timer = read_word(0x0040, 0x006C); + while (((inb(addr+5) & 0x60) != 0x60) && (counter)) { + val16 = read_word(0x0040, 0x006C); + if (val16 != timer) { + timer = val16; + counter--; + } + } + if (counter > 0) { + outb(addr, regs.u.r8.al); + regs.u.r8.ah = inb(addr+5); + } else { + regs.u.r8.ah = 0x80; + } + ClearCF(iret_addr.flags); + break; + case 2: + timer = read_word(0x0040, 0x006C); + while (((inb(addr+5) & 0x01) == 0) && (counter)) { + val16 = read_word(0x0040, 0x006C); + if (val16 != timer) { + timer = val16; + counter--; + } + } + if (counter > 0) { + regs.u.r8.ah = inb(addr+5); + regs.u.r8.al = inb(addr); + } else { + regs.u.r8.ah = 0x80; + } + ClearCF(iret_addr.flags); + break; + case 3: + regs.u.r8.ah = inb(addr+5); + regs.u.r8.al = inb(addr+6); + ClearCF(iret_addr.flags); + break; + default: + SetCF(iret_addr.flags); // Unsupported + } + } else { + SetCF(iret_addr.flags); // Unsupported + } +} + + void +int15_function(regs, ES, DS, FLAGS) + pusha_regs_t regs; // REGS pushed via pusha + Bit16u ES, DS, FLAGS; +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + bx_bool prev_a20_enable; + Bit16u base15_00; + Bit8u base23_16; + Bit16u ss; + Bit16u BX,CX,DX; + + Bit16u bRegister; + Bit8u irqDisable; + +BX_DEBUG_INT15("int15 AX=%04x\n",regs.u.r16.ax); + + switch (regs.u.r8.ah) { + case 0x24: /* A20 Control */ + switch (regs.u.r8.al) { + case 0x00: + set_enable_a20(0); + CLEAR_CF(); + regs.u.r8.ah = 0; + break; + case 0x01: + set_enable_a20(1); + CLEAR_CF(); + regs.u.r8.ah = 0; + break; + case 0x02: + regs.u.r8.al = (inb(PORT_A20) >> 1) & 0x01; + CLEAR_CF(); + regs.u.r8.ah = 0; + break; + case 0x03: + CLEAR_CF(); + regs.u.r8.ah = 0; + regs.u.r16.bx = 3; + break; + default: + BX_INFO("int15: Func 24h, subfunc %02xh, A20 gate control not supported\n", (unsigned) regs.u.r8.al); + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + } + break; + + case 0x41: + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + break; + + case 0x4f: + /* keyboard intercept */ + // nop + SET_CF(); + break; + + case 0x52: // removable media eject + CLEAR_CF(); + regs.u.r8.ah = 0; // "ok ejection may proceed" + break; + + case 0x83: { + if( regs.u.r8.al == 0 ) { + // Set Interval requested. + if( ( read_byte( 0x40, 0xA0 ) & 1 ) == 0 ) { + // Interval not already set. + write_byte( 0x40, 0xA0, 1 ); // Set status byte. + write_word( 0x40, 0x98, ES ); // Byte location, segment + write_word( 0x40, 0x9A, regs.u.r16.bx ); // Byte location, offset + write_word( 0x40, 0x9C, regs.u.r16.dx ); // Low word, delay + write_word( 0x40, 0x9E, regs.u.r16.cx ); // High word, delay. + CLEAR_CF( ); + irqDisable = inb( PORT_PIC2_DATA ); + outb( PORT_PIC2_DATA, irqDisable & 0xFE ); + bRegister = inb_cmos( 0xB ); // Unmask IRQ8 so INT70 will get through. + outb_cmos( 0xB, bRegister | 0x40 ); // Turn on the Periodic Interrupt timer + } else { + // Interval already set. + BX_DEBUG_INT15("int15: Func 83h, failed, already waiting.\n" ); + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + } + } else if( regs.u.r8.al == 1 ) { + // Clear Interval requested + write_byte( 0x40, 0xA0, 0 ); // Clear status byte + CLEAR_CF( ); + bRegister = inb_cmos( 0xB ); + outb_cmos( 0xB, bRegister & ~0x40 ); // Turn off the Periodic Interrupt timer + } else { + BX_DEBUG_INT15("int15: Func 83h, failed.\n" ); + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + regs.u.r8.al--; + } + + break; + } + + case 0x87: + // +++ should probably have descriptor checks + // +++ should have exception handlers + + // turn off interrupts +ASM_START + cli +ASM_END + + prev_a20_enable = set_enable_a20(1); // enable A20 line + + // 128K max of transfer on 386+ ??? + // source == destination ??? + + // ES:SI points to descriptor table + // offset use initially comments + // ============================================== + // 00..07 Unused zeros Null descriptor + // 08..0f GDT zeros filled in by BIOS + // 10..17 source ssssssss source of data + // 18..1f dest dddddddd destination of data + // 20..27 CS zeros filled in by BIOS + // 28..2f SS zeros filled in by BIOS + + //es:si + //eeee0 + //0ssss + //----- + +// check for access rights of source & dest here + + // Initialize GDT descriptor + base15_00 = (ES << 4) + regs.u.r16.si; + base23_16 = ES >> 12; + if (base15_00 < (ES<<4)) + base23_16++; + write_word(ES, regs.u.r16.si+0x08+0, 47); // limit 15:00 = 6 * 8bytes/descriptor + write_word(ES, regs.u.r16.si+0x08+2, base15_00);// base 15:00 + write_byte(ES, regs.u.r16.si+0x08+4, base23_16);// base 23:16 + write_byte(ES, regs.u.r16.si+0x08+5, 0x93); // access + write_word(ES, regs.u.r16.si+0x08+6, 0x0000); // base 31:24/reserved/limit 19:16 + + // Initialize CS descriptor + write_word(ES, regs.u.r16.si+0x20+0, 0xffff);// limit 15:00 = normal 64K limit + write_word(ES, regs.u.r16.si+0x20+2, 0x0000);// base 15:00 + write_byte(ES, regs.u.r16.si+0x20+4, 0x000f);// base 23:16 + write_byte(ES, regs.u.r16.si+0x20+5, 0x9b); // access + write_word(ES, regs.u.r16.si+0x20+6, 0x0000);// base 31:24/reserved/limit 19:16 + + // Initialize SS descriptor + ss = get_SS(); + base15_00 = ss << 4; + base23_16 = ss >> 12; + write_word(ES, regs.u.r16.si+0x28+0, 0xffff); // limit 15:00 = normal 64K limit + write_word(ES, regs.u.r16.si+0x28+2, base15_00);// base 15:00 + write_byte(ES, regs.u.r16.si+0x28+4, base23_16);// base 23:16 + write_byte(ES, regs.u.r16.si+0x28+5, 0x93); // access + write_word(ES, regs.u.r16.si+0x28+6, 0x0000); // base 31:24/reserved/limit 19:16 + + CX = regs.u.r16.cx; +ASM_START + // Compile generates locals offset info relative to SP. + // Get CX (word count) from stack. + mov bx, sp + SEG SS + mov cx, _int15_function.CX [bx] + + // since we need to set SS:SP, save them to the BDA + // for future restore + push eax + xor eax, eax + mov ds, ax + mov 0x0469, ss + mov 0x0467, sp + + SEG ES + lgdt [si + 0x08] + SEG CS + lidt [pmode_IDT_info] + ;; perhaps do something with IDT here + + ;; set PE bit in CR0 + mov eax, cr0 + or al, #0x01 + mov cr0, eax + ;; far jump to flush CPU queue after transition to protected mode + JMP_AP(0x0020, protected_mode) + +protected_mode: + ;; GDT points to valid descriptor table, now load SS, DS, ES + mov ax, #0x28 ;; 101 000 = 5th descriptor in table, TI=GDT, RPL=00 + mov ss, ax + mov ax, #0x10 ;; 010 000 = 2nd descriptor in table, TI=GDT, RPL=00 + mov ds, ax + mov ax, #0x18 ;; 011 000 = 3rd descriptor in table, TI=GDT, RPL=00 + mov es, ax + xor si, si + xor di, di + cld + rep + movsw ;; move CX words from DS:SI to ES:DI + + ;; make sure DS and ES limits are 64KB + mov ax, #0x28 + mov ds, ax + mov es, ax + + ;; reset PG bit in CR0 ??? + mov eax, cr0 + and al, #0xFE + mov cr0, eax + + ;; far jump to flush CPU queue after transition to real mode + JMP_AP(0xf000, real_mode) + +real_mode: + ;; restore IDT to normal real-mode defaults + SEG CS + lidt [rmode_IDT_info] + + // restore SS:SP from the BDA + xor ax, ax + mov ds, ax + mov ss, 0x0469 + mov sp, 0x0467 + pop eax +ASM_END + + set_enable_a20(prev_a20_enable); + + // turn back on interrupts +ASM_START + sti +ASM_END + + regs.u.r8.ah = 0; + CLEAR_CF(); + break; + + + case 0x88: + // Get the amount of extended memory (above 1M) + regs.u.r8.al = inb_cmos(0x30); + regs.u.r8.ah = inb_cmos(0x31); + + // According to Ralf Brown's interrupt the limit should be 15M, + // but real machines mostly return max. 63M. + if(regs.u.r16.ax > 0xffc0) + regs.u.r16.ax = 0xffc0; + + CLEAR_CF(); + break; + + case 0x89: + // Switch to Protected Mode. + // ES:DI points to user-supplied GDT + // BH/BL contains starting interrupt numbers for PIC0/PIC1 + // This subfunction does not return! + +// turn off interrupts +ASM_START + cli +ASM_END + + set_enable_a20(1); // enable A20 line; we're supposed to fail if that fails + + // Initialize CS descriptor for BIOS + write_word(ES, regs.u.r16.si+0x38+0, 0xffff);// limit 15:00 = normal 64K limit + write_word(ES, regs.u.r16.si+0x38+2, 0x0000);// base 15:00 + write_byte(ES, regs.u.r16.si+0x38+4, 0x000f);// base 23:16 (hardcoded to f000:0000) + write_byte(ES, regs.u.r16.si+0x38+5, 0x9b); // access + write_word(ES, regs.u.r16.si+0x38+6, 0x0000);// base 31:24/reserved/limit 19:16 + + BX = regs.u.r16.bx; +ASM_START + // Compiler generates locals offset info relative to SP. + // Get BX (PIC offsets) from stack. + mov bx, sp + SEG SS + mov bx, _int15_function.BX [bx] + + // Program PICs + mov al, #0x11 ; send initialisation commands + out PORT_PIC1_CMD, al + out PORT_PIC2_CMD, al + mov al, bh + out PORT_PIC1_DATA, al + mov al, bl + out PORT_PIC2_DATA, al + mov al, #0x04 + out PORT_PIC1_DATA, al + mov al, #0x02 + out PORT_PIC2_DATA, al + mov al, #0x01 + out PORT_PIC1_DATA, al + out PORT_PIC2_DATA, al + mov al, #0xff ; mask all IRQs, user must re-enable + out PORT_PIC1_DATA, al + out PORT_PIC2_DATA, al + + // Load GDT and IDT from supplied data + SEG ES + lgdt [si + 0x08] + SEG ES + lidt [si + 0x10] + + // set PE bit in CR0 + mov eax, cr0 + or al, #0x01 + mov cr0, eax + // far jump to flush CPU queue after transition to protected mode + JMP_AP(0x0038, protmode_switch) + +protmode_switch: + ;; GDT points to valid descriptor table, now load SS, DS, ES + mov ax, #0x28 + mov ss, ax + mov ax, #0x18 + mov ds, ax + mov ax, #0x20 + mov es, ax + + // unwind the stack - this will break if calling sequence changes! + mov sp,bp + add sp,#4 ; skip return address + popa ; restore regs + pop ax ; skip saved es + pop ax ; skip saved ds + pop ax ; skip saved flags + + // return to caller - note that we do not use IRET because + // we cannot enable interrupts + pop cx ; get return offset + pop ax ; skip return segment + pop ax ; skip flags + mov ax, #0x30 ; ah must be 0 on successful exit + push ax + push cx ; re-create modified ret address on stack + retf + +ASM_END + + break; + + case 0x90: + /* Device busy interrupt. Called by Int 16h when no key available */ + break; + + case 0x91: + /* Interrupt complete. Called by Int 16h when key becomes available */ + break; + + case 0xbf: + BX_INFO("*** int 15h function AH=bf not yet supported!\n"); + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + break; + + case 0xC0: +#if 0 + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + break; +#endif + CLEAR_CF(); + regs.u.r8.ah = 0; + regs.u.r16.bx = BIOS_CONFIG_TABLE; + ES = 0xF000; + break; + + case 0xc1: + ES = ebda_seg; + CLEAR_CF(); + break; + + case 0xd8: + bios_printf(BIOS_PRINTF_DEBUG, "EISA BIOS not present\n"); + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + break; + + default: + BX_INFO("*** int 15h function AX=%04x, BX=%04x not yet supported!\n", + (unsigned) regs.u.r16.ax, (unsigned) regs.u.r16.bx); + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + break; + } +} + +#if BX_USE_PS2_MOUSE + void +int15_function_mouse(regs, ES, DS, FLAGS) + pusha_regs_t regs; // REGS pushed via pusha + Bit16u ES, DS, FLAGS; +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit8u mouse_flags_1, mouse_flags_2; + Bit16u mouse_driver_seg; + Bit16u mouse_driver_offset; + Bit8u comm_byte, prev_command_byte; + Bit8u ret, mouse_data1, mouse_data2, mouse_data3; + +BX_DEBUG_INT15("int15 AX=%04x\n",regs.u.r16.ax); + + switch (regs.u.r8.ah) { + case 0xC2: + // Return Codes status in AH + // ========================= + // 00: success + // 01: invalid subfunction (AL > 7) + // 02: invalid input value (out of allowable range) + // 03: interface error + // 04: resend command received from mouse controller, + // device driver should attempt command again + // 05: cannot enable mouse, since no far call has been installed + // 80/86: mouse service not implemented + + switch (regs.u.r8.al) { + case 0: // Disable/Enable Mouse +BX_DEBUG_INT15("case 0:\n"); + switch (regs.u.r8.bh) { + case 0: // Disable Mouse +BX_DEBUG_INT15("case 0: disable mouse\n"); + inhibit_mouse_int_and_events(); // disable IRQ12 and packets + ret = send_to_mouse_ctrl(0xF5); // disable mouse command + if (ret == 0) { + ret = get_mouse_data(&mouse_data1); + if ( (ret == 0) || (mouse_data1 == 0xFA) ) { + CLEAR_CF(); + regs.u.r8.ah = 0; + return; + } + } + + // error + SET_CF(); + regs.u.r8.ah = ret; + return; + break; + + case 1: // Enable Mouse +BX_DEBUG_INT15("case 1: enable mouse\n"); + mouse_flags_2 = read_byte(ebda_seg, &EbdaData->mouse_flag2); + if ( (mouse_flags_2 & 0x80) == 0 ) { + BX_DEBUG_INT15("INT 15h C2 Enable Mouse, no far call handler\n"); + SET_CF(); // error + regs.u.r8.ah = 5; // no far call installed + return; + } + inhibit_mouse_int_and_events(); // disable IRQ12 and packets + ret = send_to_mouse_ctrl(0xF4); // enable mouse command + if (ret == 0) { + ret = get_mouse_data(&mouse_data1); + if ( (ret == 0) && (mouse_data1 == 0xFA) ) { + enable_mouse_int_and_events(); // turn IRQ12 and packet generation on + CLEAR_CF(); + regs.u.r8.ah = 0; + return; + } + } + SET_CF(); + regs.u.r8.ah = ret; + return; + + default: // invalid subfunction + BX_DEBUG_INT15("INT 15h C2 AL=0, BH=%02x\n", (unsigned) regs.u.r8.bh); + SET_CF(); // error + regs.u.r8.ah = 1; // invalid subfunction + return; + } + break; + + case 1: // Reset Mouse + case 5: // Initialize Mouse +BX_DEBUG_INT15("case 1 or 5:\n"); + if (regs.u.r8.al == 5) { + if (regs.u.r8.bh != 3) { + SET_CF(); + regs.u.r8.ah = 0x02; // invalid input + return; + } + mouse_flags_2 = read_byte(ebda_seg, &EbdaData->mouse_flag2); + mouse_flags_2 = (mouse_flags_2 & 0x00) | regs.u.r8.bh; + mouse_flags_1 = 0x00; + write_byte(ebda_seg, &EbdaData->mouse_flag1, mouse_flags_1); + write_byte(ebda_seg, &EbdaData->mouse_flag2, mouse_flags_2); + } + + inhibit_mouse_int_and_events(); // disable IRQ12 and packets + ret = send_to_mouse_ctrl(0xFF); // reset mouse command + if (ret == 0) { + ret = get_mouse_data(&mouse_data3); + // if no mouse attached, it will return RESEND + if (mouse_data3 == 0xfe) { + SET_CF(); + return; + } + if (mouse_data3 != 0xfa) + BX_PANIC("Mouse reset returned %02x (should be ack)\n", (unsigned)mouse_data3); + if ( ret == 0 ) { + ret = get_mouse_data(&mouse_data1); + if ( ret == 0 ) { + ret = get_mouse_data(&mouse_data2); + if ( ret == 0 ) { + // turn IRQ12 and packet generation on + enable_mouse_int_and_events(); + CLEAR_CF(); + regs.u.r8.ah = 0; + regs.u.r8.bl = mouse_data1; + regs.u.r8.bh = mouse_data2; + return; + } + } + } + } + + // error + SET_CF(); + regs.u.r8.ah = ret; + return; + + case 2: // Set Sample Rate +BX_DEBUG_INT15("case 2:\n"); + switch (regs.u.r8.bh) { + case 0: mouse_data1 = 10; break; // 10 reports/sec + case 1: mouse_data1 = 20; break; // 20 reports/sec + case 2: mouse_data1 = 40; break; // 40 reports/sec + case 3: mouse_data1 = 60; break; // 60 reports/sec + case 4: mouse_data1 = 80; break; // 80 reports/sec + case 5: mouse_data1 = 100; break; // 100 reports/sec (default) + case 6: mouse_data1 = 200; break; // 200 reports/sec + default: mouse_data1 = 0; + } + if (mouse_data1 > 0) { + ret = send_to_mouse_ctrl(0xF3); // set sample rate command + if (ret == 0) { + ret = get_mouse_data(&mouse_data2); + ret = send_to_mouse_ctrl(mouse_data1); + ret = get_mouse_data(&mouse_data2); + CLEAR_CF(); + regs.u.r8.ah = 0; + } else { + // error + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + } + } else { + // error + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + } + break; + + case 3: // Set Resolution +BX_DEBUG_INT15("case 3:\n"); + // BH: + // 0 = 25 dpi, 1 count per millimeter + // 1 = 50 dpi, 2 counts per millimeter + // 2 = 100 dpi, 4 counts per millimeter + // 3 = 200 dpi, 8 counts per millimeter + comm_byte = inhibit_mouse_int_and_events(); // disable IRQ12 and packets + if (regs.u.r8.bh < 4) { + ret = send_to_mouse_ctrl(0xE8); // set resolution command + if (ret == 0) { + ret = get_mouse_data(&mouse_data1); + if (mouse_data1 != 0xfa) + BX_PANIC("Mouse status returned %02x (should be ack)\n", (unsigned)mouse_data1); + ret = send_to_mouse_ctrl(regs.u.r8.bh); + ret = get_mouse_data(&mouse_data1); + if (mouse_data1 != 0xfa) + BX_PANIC("Mouse status returned %02x (should be ack)\n", (unsigned)mouse_data1); + CLEAR_CF(); + regs.u.r8.ah = 0; + } else { + // error + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + } + } else { + // error + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + } + set_kbd_command_byte(comm_byte); // restore IRQ12 and serial enable + break; + + case 4: // Get Device ID +BX_DEBUG_INT15("case 4:\n"); + inhibit_mouse_int_and_events(); // disable IRQ12 and packets + ret = send_to_mouse_ctrl(0xF2); // get mouse ID command + if (ret == 0) { + ret = get_mouse_data(&mouse_data1); + ret = get_mouse_data(&mouse_data2); + CLEAR_CF(); + regs.u.r8.ah = 0; + regs.u.r8.bh = mouse_data2; + } else { + // error + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + } + break; + + case 6: // Return Status & Set Scaling Factor... +BX_DEBUG_INT15("case 6:\n"); + switch (regs.u.r8.bh) { + case 0: // Return Status + comm_byte = inhibit_mouse_int_and_events(); // disable IRQ12 and packets + ret = send_to_mouse_ctrl(0xE9); // get mouse info command + if (ret == 0) { + ret = get_mouse_data(&mouse_data1); + if (mouse_data1 != 0xfa) + BX_PANIC("Mouse status returned %02x (should be ack)\n", (unsigned)mouse_data1); + if (ret == 0) { + ret = get_mouse_data(&mouse_data1); + if (ret == 0) { + ret = get_mouse_data(&mouse_data2); + if (ret == 0) { + ret = get_mouse_data(&mouse_data3); + if (ret == 0) { + CLEAR_CF(); + regs.u.r8.ah = 0; + regs.u.r8.bl = mouse_data1; + regs.u.r8.cl = mouse_data2; + regs.u.r8.dl = mouse_data3; + set_kbd_command_byte(comm_byte); // restore IRQ12 and serial enable + return; + } + } + } + } + } + + // error + SET_CF(); + regs.u.r8.ah = ret; + set_kbd_command_byte(comm_byte); // restore IRQ12 and serial enable + return; + + case 1: // Set Scaling Factor to 1:1 + case 2: // Set Scaling Factor to 2:1 + comm_byte = inhibit_mouse_int_and_events(); // disable IRQ12 and packets + if (regs.u.r8.bh == 1) { + ret = send_to_mouse_ctrl(0xE6); + } else { + ret = send_to_mouse_ctrl(0xE7); + } + if (ret == 0) { + get_mouse_data(&mouse_data1); + ret = (mouse_data1 != 0xFA); + } + if (ret == 0) { + CLEAR_CF(); + regs.u.r8.ah = 0; + } else { + // error + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + } + set_kbd_command_byte(comm_byte); // restore IRQ12 and serial enable + break; + + default: + BX_PANIC("INT 15h C2 AL=6, BH=%02x\n", (unsigned) regs.u.r8.bh); + } + break; + + case 7: // Set Mouse Handler Address +BX_DEBUG_INT15("case 7:\n"); + mouse_driver_seg = ES; + mouse_driver_offset = regs.u.r16.bx; + write_word(ebda_seg, &EbdaData->mouse_driver_offset, mouse_driver_offset); + write_word(ebda_seg, &EbdaData->mouse_driver_seg, mouse_driver_seg); + mouse_flags_2 = read_byte(ebda_seg, &EbdaData->mouse_flag2); + if (mouse_driver_offset == 0 && mouse_driver_seg == 0) { + /* remove handler */ + if ( (mouse_flags_2 & 0x80) != 0 ) { + mouse_flags_2 &= ~0x80; + inhibit_mouse_int_and_events(); // disable IRQ12 and packets + } + } + else { + /* install handler */ + mouse_flags_2 |= 0x80; + } + write_byte(ebda_seg, &EbdaData->mouse_flag2, mouse_flags_2); + CLEAR_CF(); + regs.u.r8.ah = 0; + break; + + default: +BX_DEBUG_INT15("case default:\n"); + regs.u.r8.ah = 1; // invalid function + SET_CF(); + } + break; + + default: + BX_INFO("*** int 15h function AX=%04x, BX=%04x not yet supported!\n", + (unsigned) regs.u.r16.ax, (unsigned) regs.u.r16.bx); + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + break; + } +} +#endif // BX_USE_PS2_MOUSE + + +void set_e820_range(ES, DI, start, end, extra_start, extra_end, type) + Bit16u ES; + Bit16u DI; + Bit32u start; + Bit32u end; + Bit8u extra_start; + Bit8u extra_end; + Bit16u type; +{ + write_word(ES, DI, start); + write_word(ES, DI+2, start >> 16); + write_word(ES, DI+4, extra_start); + write_word(ES, DI+6, 0x00); + + end -= start; + extra_end -= extra_start; + write_word(ES, DI+8, end); + write_word(ES, DI+10, end >> 16); + write_word(ES, DI+12, extra_end); + write_word(ES, DI+14, 0x0000); + + write_word(ES, DI+16, type); + write_word(ES, DI+18, 0x0); +} + + void +int15_function32(regs, ES, DS, FLAGS) + pushad_regs_t regs; // REGS pushed via pushad + Bit16u ES, DS, FLAGS; +{ + Bit32u extended_memory_size=0; // 64bits long + Bit32u extra_lowbits_memory_size=0; + Bit16u CX,DX; + Bit8u extra_highbits_memory_size=0; + +BX_DEBUG_INT15("int15 AX=%04x\n",regs.u.r16.ax); + + switch (regs.u.r8.ah) { + case 0x86: + // Wait for CX:DX microseconds. currently using the + // refresh request port 0x61 bit4, toggling every 15usec + + CX = regs.u.r16.cx; + DX = regs.u.r16.dx; + +ASM_START + sti + + ;; Get the count in eax + mov bx, sp + SEG SS + mov ax, _int15_function32.CX [bx] + shl eax, #16 + SEG SS + mov ax, _int15_function32.DX [bx] + + ;; convert to numbers of 15usec ticks + mov ebx, #15 + xor edx, edx + div eax, ebx + mov ecx, eax + + ;; wait for ecx number of refresh requests + in al, PORT_PS2_CTRLB + and al,#0x10 + mov ah, al + + or ecx, ecx + je int1586_tick_end +int1586_tick: + in al, PORT_PS2_CTRLB + and al,#0x10 + cmp al, ah + je int1586_tick + mov ah, al + dec ecx + jnz int1586_tick +int1586_tick_end: +ASM_END + + break; + + case 0xe8: + switch(regs.u.r8.al) { + case 0x20: // coded by osmaker aka K.J. + if(regs.u.r32.edx == 0x534D4150) + { + extended_memory_size = inb_cmos(0x35); + extended_memory_size <<= 8; + extended_memory_size |= inb_cmos(0x34); + extended_memory_size *= 64; + if(extended_memory_size > 0x2fc000) { + extended_memory_size = 0x2fc000; // everything after this is reserved memory until we get to 0x100000000 + } + extended_memory_size *= 1024; + extended_memory_size += (16L * 1024 * 1024); + + if(extended_memory_size <= (16L * 1024 * 1024)) { + extended_memory_size = inb_cmos(0x31); + extended_memory_size <<= 8; + extended_memory_size |= inb_cmos(0x30); + extended_memory_size *= 1024; + extended_memory_size += (1L * 1024 * 1024); + } + + extra_lowbits_memory_size = inb_cmos(0x5c); + extra_lowbits_memory_size <<= 8; + extra_lowbits_memory_size |= inb_cmos(0x5b); + extra_lowbits_memory_size *= 64; + extra_lowbits_memory_size *= 1024; + extra_highbits_memory_size = inb_cmos(0x5d); + + switch(regs.u.r16.bx) + { + case 0: + set_e820_range(ES, regs.u.r16.di, + 0x0000000L, 0x0009f000L, 0, 0, E820_RAM); + regs.u.r32.ebx = 1; + break; + case 1: + set_e820_range(ES, regs.u.r16.di, + 0x0009f000L, 0x000a0000L, 0, 0, E820_RESERVED); + regs.u.r32.ebx = 2; + break; + case 2: + set_e820_range(ES, regs.u.r16.di, + 0x000e8000L, 0x00100000L, 0, 0, E820_RESERVED); + if (extended_memory_size <= 0x100000) + regs.u.r32.ebx = 6; + else + regs.u.r32.ebx = 3; + break; + case 3: +#if BX_ROMBIOS32 +#ifdef BX_USE_EBDA_TABLES + set_e820_range(ES, regs.u.r16.di, + 0x00100000L, + extended_memory_size - ACPI_DATA_SIZE - MPTABLE_MAX_SIZE, 0, 0, E820_RAM); + regs.u.r32.ebx = 4; +#else + set_e820_range(ES, regs.u.r16.di, + 0x00100000L, + extended_memory_size - ACPI_DATA_SIZE, 0, 0, E820_RAM); + regs.u.r32.ebx = 5; +#endif +#else + set_e820_range(ES, regs.u.r16.di, + 0x00100000L, + extended_memory_size, 0, 0, E820_RAM); + regs.u.r32.ebx = 6; +#endif + break; + case 4: + set_e820_range(ES, regs.u.r16.di, + extended_memory_size - ACPI_DATA_SIZE - MPTABLE_MAX_SIZE, + extended_memory_size - ACPI_DATA_SIZE, 0, 0, E820_RESERVED); + regs.u.r32.ebx = 5; + break; + case 5: + set_e820_range(ES, regs.u.r16.di, + extended_memory_size - ACPI_DATA_SIZE, + extended_memory_size, 0, 0, E820_ACPI); + regs.u.r32.ebx = 6; + break; + case 6: + /* 256KB BIOS area at the end of 4 GB */ + set_e820_range(ES, regs.u.r16.di, + 0xfffc0000L, 0x00000000L, 0, 0, E820_RESERVED); + if (extra_highbits_memory_size || extra_lowbits_memory_size) + regs.u.r32.ebx = 7; + else + regs.u.r32.ebx = 0; + break; + case 7: + /* Mapping of memory above 4 GB */ + set_e820_range(ES, regs.u.r16.di, 0x00000000L, + extra_lowbits_memory_size, 1, extra_highbits_memory_size + + 1, E820_RAM); + regs.u.r32.ebx = 0; + break; + default: /* AX=E820, DX=534D4150, BX unrecognized */ + goto int15_unimplemented; + break; + } + regs.u.r32.eax = 0x534D4150; + regs.u.r32.ecx = 0x14; + CLEAR_CF(); + } else { + // if DX != 0x534D4150) + goto int15_unimplemented; + } + break; + + case 0x01: + // do we have any reason to fail here ? + CLEAR_CF(); + + // my real system sets ax and bx to 0 + // this is confirmed by Ralph Brown list + // but syslinux v1.48 is known to behave + // strangely if ax is set to 0 + // regs.u.r16.ax = 0; + // regs.u.r16.bx = 0; + + // Get the amount of extended memory (above 1M) + regs.u.r8.cl = inb_cmos(0x30); + regs.u.r8.ch = inb_cmos(0x31); + + // limit to 15M + if(regs.u.r16.cx > 0x3c00) + { + regs.u.r16.cx = 0x3c00; + } + + // Get the amount of extended memory above 16M in 64k blocs + regs.u.r8.dl = inb_cmos(0x34); + regs.u.r8.dh = inb_cmos(0x35); + + // Set configured memory equal to extended memory + regs.u.r16.ax = regs.u.r16.cx; + regs.u.r16.bx = regs.u.r16.dx; + break; + default: /* AH=0xE8?? but not implemented */ + goto int15_unimplemented; + } + break; + int15_unimplemented: + // fall into the default + default: + BX_INFO("*** int 15h function AX=%04x, BX=%04x not yet supported!\n", + (unsigned) regs.u.r16.ax, (unsigned) regs.u.r16.bx); + SET_CF(); + regs.u.r8.ah = UNSUPPORTED_FUNCTION; + break; + } +} + + void +int16_function(DI, SI, BP, SP, BX, DX, CX, AX, FLAGS) + Bit16u DI, SI, BP, SP, BX, DX, CX, AX, FLAGS; +{ + Bit8u scan_code, ascii_code, shift_flags, led_flags, count; + Bit16u kbd_code, max; + + BX_DEBUG_INT16("int16: AX=%04x BX=%04x CX=%04x DX=%04x \n", AX, BX, CX, DX); + + shift_flags = read_byte(0x0040, 0x17); + led_flags = read_byte(0x0040, 0x97); + if ((((shift_flags >> 4) & 0x07) ^ (led_flags & 0x07)) != 0) { +ASM_START + cli +ASM_END + outb(PORT_PS2_DATA, 0xed); + while ((inb(PORT_PS2_STATUS) & 0x01) == 0) outb(PORT_DIAG, 0x21); + if ((inb(PORT_PS2_DATA) == 0xfa)) { + led_flags &= 0xf8; + led_flags |= ((shift_flags >> 4) & 0x07); + outb(PORT_PS2_DATA, led_flags & 0x07); + while ((inb(PORT_PS2_STATUS) & 0x01) == 0) outb(PORT_DIAG, 0x21); + inb(PORT_PS2_DATA); + write_byte(0x0040, 0x97, led_flags); + } +ASM_START + sti +ASM_END + } + + switch (GET_AH()) { + case 0x00: /* read keyboard input */ + + if ( !dequeue_key(&scan_code, &ascii_code, 1) ) { + BX_PANIC("KBD: int16h: out of keyboard input\n"); + } + if (scan_code !=0 && ascii_code == 0xF0) ascii_code = 0; + else if (ascii_code == 0xE0) ascii_code = 0; + AX = (scan_code << 8) | ascii_code; + break; + + case 0x01: /* check keyboard status */ + if ( !dequeue_key(&scan_code, &ascii_code, 0) ) { + SET_ZF(); + return; + } + if (scan_code !=0 && ascii_code == 0xF0) ascii_code = 0; + else if (ascii_code == 0xE0) ascii_code = 0; + AX = (scan_code << 8) | ascii_code; + CLEAR_ZF(); + break; + + case 0x02: /* get shift flag status */ + shift_flags = read_byte(0x0040, 0x17); + SET_AL(shift_flags); + break; + + case 0x05: /* store key-stroke into buffer */ + if ( !enqueue_key(GET_CH(), GET_CL()) ) { + SET_AL(1); + } + else { + SET_AL(0); + } + break; + + case 0x09: /* GET KEYBOARD FUNCTIONALITY */ + // bit Bochs Description + // 7 0 reserved + // 6 0 INT 16/AH=20h-22h supported (122-key keyboard support) + // 5 1 INT 16/AH=10h-12h supported (enhanced keyboard support) + // 4 1 INT 16/AH=0Ah supported + // 3 0 INT 16/AX=0306h supported + // 2 0 INT 16/AX=0305h supported + // 1 0 INT 16/AX=0304h supported + // 0 0 INT 16/AX=0300h supported + // + SET_AL(0x30); + break; + + case 0x0A: /* GET KEYBOARD ID */ + count = 2; + kbd_code = 0x0; + outb(PORT_PS2_DATA, 0xf2); + /* Wait for data */ + max=0xffff; + while ( ((inb(PORT_PS2_STATUS) & 0x01) == 0) && (--max>0) ) outb(PORT_DIAG, 0x00); + if (max>0x0) { + if ((inb(PORT_PS2_DATA) == 0xfa)) { + do { + max=0xffff; + while ( ((inb(PORT_PS2_STATUS) & 0x01) == 0) && (--max>0) ) outb(PORT_DIAG, 0x00); + if (max>0x0) { + kbd_code >>= 8; + kbd_code |= (inb(PORT_PS2_DATA) << 8); + } + } while (--count>0); + } + } + BX=kbd_code; + break; + + case 0x10: /* read MF-II keyboard input */ + + if ( !dequeue_key(&scan_code, &ascii_code, 1) ) { + BX_PANIC("KBD: int16h: out of keyboard input\n"); + } + if (scan_code !=0 && ascii_code == 0xF0) ascii_code = 0; + AX = (scan_code << 8) | ascii_code; + break; + + case 0x11: /* check MF-II keyboard status */ + if ( !dequeue_key(&scan_code, &ascii_code, 0) ) { + SET_ZF(); + return; + } + if (scan_code !=0 && ascii_code == 0xF0) ascii_code = 0; + AX = (scan_code << 8) | ascii_code; + CLEAR_ZF(); + break; + + case 0x12: /* get extended keyboard status */ + shift_flags = read_byte(0x0040, 0x17); + SET_AL(shift_flags); + shift_flags = read_byte(0x0040, 0x18) & 0x73; + shift_flags |= read_byte(0x0040, 0x96) & 0x0c; + SET_AH(shift_flags); + BX_DEBUG_INT16("int16: func 12 sending %04x\n",AX); + break; + + case 0x92: /* keyboard capability check called by DOS 5.0+ keyb */ + SET_AH(0x80); // function int16 ah=0x10-0x12 supported + break; + + case 0xA2: /* 122 keys capability check called by DOS 5.0+ keyb */ + // don't change AH : function int16 ah=0x20-0x22 NOT supported + break; + + case 0x6F: + if (GET_AL() == 0x08) + SET_AH(0x02); // unsupported, aka normal keyboard + + default: + BX_INFO("KBD: unsupported int 16h function %02x\n", GET_AH()); + } +} + + unsigned int +dequeue_key(scan_code, ascii_code, incr) + Bit8u *scan_code; + Bit8u *ascii_code; + unsigned int incr; +{ + Bit16u buffer_start, buffer_end, buffer_head, buffer_tail; + Bit16u ss; + Bit8u acode, scode; + + buffer_start = read_word(0x0040, 0x0080); + buffer_end = read_word(0x0040, 0x0082); + + buffer_head = read_word(0x0040, 0x001a); + buffer_tail = read_word(0x0040, 0x001c); + + if (buffer_head != buffer_tail) { + ss = get_SS(); + acode = read_byte(0x0040, buffer_head); + scode = read_byte(0x0040, buffer_head+1); + write_byte(ss, ascii_code, acode); + write_byte(ss, scan_code, scode); + + if (incr) { + buffer_head += 2; + if (buffer_head >= buffer_end) + buffer_head = buffer_start; + write_word(0x0040, 0x001a, buffer_head); + } + return(1); + } + else { + return(0); + } +} + +static char panic_msg_keyb_buffer_full[] = "%s: keyboard input buffer full\n"; + + Bit8u +inhibit_mouse_int_and_events() +{ + Bit8u command_byte, prev_command_byte; + + // Turn off IRQ generation and aux data line + if ( inb(PORT_PS2_STATUS) & 0x02 ) + BX_PANIC(panic_msg_keyb_buffer_full,"inhibmouse"); + outb(PORT_PS2_STATUS, 0x20); // get command byte + while ( (inb(PORT_PS2_STATUS) & 0x01) != 0x01 ); + prev_command_byte = inb(PORT_PS2_DATA); + command_byte = prev_command_byte; + //while ( (inb(PORT_PS2_STATUS) & 0x02) ); + if ( inb(PORT_PS2_STATUS) & 0x02 ) + BX_PANIC(panic_msg_keyb_buffer_full,"inhibmouse"); + command_byte &= 0xfd; // turn off IRQ 12 generation + command_byte |= 0x20; // disable mouse serial clock line + outb(PORT_PS2_STATUS, 0x60); // write command byte + outb(PORT_PS2_DATA, command_byte); + return(prev_command_byte); +} + + void +enable_mouse_int_and_events() +{ + Bit8u command_byte; + + // Turn on IRQ generation and aux data line + if ( inb(PORT_PS2_STATUS) & 0x02 ) + BX_PANIC(panic_msg_keyb_buffer_full,"enabmouse"); + outb(PORT_PS2_STATUS, 0x20); // get command byte + while ( (inb(PORT_PS2_STATUS) & 0x01) != 0x01 ); + command_byte = inb(PORT_PS2_DATA); + //while ( (inb(PORT_PS2_STATUS) & 0x02) ); + if ( inb(PORT_PS2_STATUS) & 0x02 ) + BX_PANIC(panic_msg_keyb_buffer_full,"enabmouse"); + command_byte |= 0x02; // turn on IRQ 12 generation + command_byte &= 0xdf; // enable mouse serial clock line + outb(PORT_PS2_STATUS, 0x60); // write command byte + outb(PORT_PS2_DATA, command_byte); +} + + Bit8u +send_to_mouse_ctrl(sendbyte) + Bit8u sendbyte; +{ + Bit8u response; + + // wait for chance to write to ctrl + if ( inb(PORT_PS2_STATUS) & 0x02 ) + BX_PANIC(panic_msg_keyb_buffer_full,"sendmouse"); + outb(PORT_PS2_STATUS, 0xD4); + outb(PORT_PS2_DATA, sendbyte); + return(0); +} + + + Bit8u +get_mouse_data(data) + Bit8u *data; +{ + Bit8u response; + Bit16u ss; + + while ((inb(PORT_PS2_STATUS) & 0x21) != 0x21) { } + + response = inb(PORT_PS2_DATA); + + ss = get_SS(); + write_byte(ss, data, response); + return(0); +} + + void +set_kbd_command_byte(command_byte) + Bit8u command_byte; +{ + if ( inb(PORT_PS2_STATUS) & 0x02 ) + BX_PANIC(panic_msg_keyb_buffer_full,"setkbdcomm"); + outb(PORT_PS2_STATUS, 0xD4); + + outb(PORT_PS2_STATUS, 0x60); // write command byte + outb(PORT_PS2_DATA, command_byte); +} + + void +int09_function(DI, SI, BP, SP, BX, DX, CX, AX) + Bit16u DI, SI, BP, SP, BX, DX, CX, AX; +{ + Bit8u scancode, asciicode, shift_flags; + Bit8u mf2_flags, mf2_state; + + // + // DS has been set to F000 before call + // + + + scancode = GET_AL(); + + if (scancode == 0) { + BX_INFO("KBD: int09 handler: AL=0\n"); + return; + } + + + shift_flags = read_byte(0x0040, 0x17); + mf2_flags = read_byte(0x0040, 0x18); + mf2_state = read_byte(0x0040, 0x96); + asciicode = 0; + + switch (scancode) { + case 0x3a: /* Caps Lock press */ + shift_flags ^= 0x40; + write_byte(0x0040, 0x17, shift_flags); + mf2_flags |= 0x40; + write_byte(0x0040, 0x18, mf2_flags); + break; + case 0xba: /* Caps Lock release */ + mf2_flags &= ~0x40; + write_byte(0x0040, 0x18, mf2_flags); + break; + + case 0x2a: /* L Shift press */ + shift_flags |= 0x02; + write_byte(0x0040, 0x17, shift_flags); + break; + case 0xaa: /* L Shift release */ + shift_flags &= ~0x02; + write_byte(0x0040, 0x17, shift_flags); + break; + + case 0x36: /* R Shift press */ + shift_flags |= 0x01; + write_byte(0x0040, 0x17, shift_flags); + break; + case 0xb6: /* R Shift release */ + shift_flags &= ~0x01; + write_byte(0x0040, 0x17, shift_flags); + break; + + case 0x1d: /* Ctrl press */ + if ((mf2_state & 0x01) == 0) { + shift_flags |= 0x04; + write_byte(0x0040, 0x17, shift_flags); + if (mf2_state & 0x02) { + mf2_state |= 0x04; + write_byte(0x0040, 0x96, mf2_state); + } else { + mf2_flags |= 0x01; + write_byte(0x0040, 0x18, mf2_flags); + } + } + break; + case 0x9d: /* Ctrl release */ + if ((mf2_state & 0x01) == 0) { + shift_flags &= ~0x04; + write_byte(0x0040, 0x17, shift_flags); + if (mf2_state & 0x02) { + mf2_state &= ~0x04; + write_byte(0x0040, 0x96, mf2_state); + } else { + mf2_flags &= ~0x01; + write_byte(0x0040, 0x18, mf2_flags); + } + } + break; + + case 0x38: /* Alt press */ + shift_flags |= 0x08; + write_byte(0x0040, 0x17, shift_flags); + if (mf2_state & 0x02) { + mf2_state |= 0x08; + write_byte(0x0040, 0x96, mf2_state); + } else { + mf2_flags |= 0x02; + write_byte(0x0040, 0x18, mf2_flags); + } + break; + case 0xb8: /* Alt release */ + shift_flags &= ~0x08; + write_byte(0x0040, 0x17, shift_flags); + if (mf2_state & 0x02) { + mf2_state &= ~0x08; + write_byte(0x0040, 0x96, mf2_state); + } else { + mf2_flags &= ~0x02; + write_byte(0x0040, 0x18, mf2_flags); + } + break; + + case 0x45: /* Num Lock press */ + if ((mf2_state & 0x03) == 0) { + mf2_flags |= 0x20; + write_byte(0x0040, 0x18, mf2_flags); + shift_flags ^= 0x20; + write_byte(0x0040, 0x17, shift_flags); + } + break; + case 0xc5: /* Num Lock release */ + if ((mf2_state & 0x03) == 0) { + mf2_flags &= ~0x20; + write_byte(0x0040, 0x18, mf2_flags); + } + break; + + case 0x46: /* Scroll Lock press */ + mf2_flags |= 0x10; + write_byte(0x0040, 0x18, mf2_flags); + shift_flags ^= 0x10; + write_byte(0x0040, 0x17, shift_flags); + break; + + case 0xc6: /* Scroll Lock release */ + mf2_flags &= ~0x10; + write_byte(0x0040, 0x18, mf2_flags); + break; + + default: + if (scancode & 0x80) { + break; /* toss key releases ... */ + } + if (scancode > MAX_SCAN_CODE) { + BX_INFO("KBD: int09h_handler(): unknown scancode read: 0x%02x!\n", scancode); + return; + } + if (shift_flags & 0x08) { /* ALT */ + asciicode = scan_to_scanascii[scancode].alt; + scancode = scan_to_scanascii[scancode].alt >> 8; + } else if (shift_flags & 0x04) { /* CONTROL */ + asciicode = scan_to_scanascii[scancode].control; + scancode = scan_to_scanascii[scancode].control >> 8; + } else if (((mf2_state & 0x02) > 0) && ((scancode >= 0x47) && (scancode <= 0x53))) { + /* extended keys handling */ + asciicode = 0xe0; + scancode = scan_to_scanascii[scancode].normal >> 8; + } else if (shift_flags & 0x03) { /* LSHIFT + RSHIFT */ + /* check if lock state should be ignored + * because a SHIFT key are pressed */ + + if (shift_flags & scan_to_scanascii[scancode].lock_flags) { + asciicode = scan_to_scanascii[scancode].normal; + scancode = scan_to_scanascii[scancode].normal >> 8; + } else { + asciicode = scan_to_scanascii[scancode].shift; + scancode = scan_to_scanascii[scancode].shift >> 8; + } + } else { + /* check if lock is on */ + if (shift_flags & scan_to_scanascii[scancode].lock_flags) { + asciicode = scan_to_scanascii[scancode].shift; + scancode = scan_to_scanascii[scancode].shift >> 8; + } else { + asciicode = scan_to_scanascii[scancode].normal; + scancode = scan_to_scanascii[scancode].normal >> 8; + } + } + if (scancode==0 && asciicode==0) { + BX_INFO("KBD: int09h_handler(): scancode & asciicode are zero?\n"); + } + enqueue_key(scancode, asciicode); + break; + } + if ((scancode & 0x7f) != 0x1d) { + mf2_state &= ~0x01; + } + mf2_state &= ~0x02; + write_byte(0x0040, 0x96, mf2_state); +} + + unsigned int +enqueue_key(scan_code, ascii_code) + Bit8u scan_code, ascii_code; +{ + Bit16u buffer_start, buffer_end, buffer_head, buffer_tail, temp_tail; + + buffer_start = read_word(0x0040, 0x0080); + buffer_end = read_word(0x0040, 0x0082); + + buffer_head = read_word(0x0040, 0x001A); + buffer_tail = read_word(0x0040, 0x001C); + + temp_tail = buffer_tail; + buffer_tail += 2; + if (buffer_tail >= buffer_end) + buffer_tail = buffer_start; + + if (buffer_tail == buffer_head) { + return(0); + } + + write_byte(0x0040, temp_tail, ascii_code); + write_byte(0x0040, temp_tail+1, scan_code); + write_word(0x0040, 0x001C, buffer_tail); + return(1); +} + + void +int74_function(make_farcall, Z, Y, X, status) + Bit16u make_farcall, Z, Y, X, status; +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit8u in_byte, index, package_count; + Bit8u mouse_flags_1, mouse_flags_2; + +BX_DEBUG_INT74("entering int74_function\n"); + make_farcall = 0; + + in_byte = inb(PORT_PS2_STATUS); + if ((in_byte & 0x21) != 0x21) { + return; + } + + in_byte = inb(PORT_PS2_DATA); +BX_DEBUG_INT74("int74: read byte %02x\n", in_byte); + + mouse_flags_1 = read_byte(ebda_seg, &EbdaData->mouse_flag1); + mouse_flags_2 = read_byte(ebda_seg, &EbdaData->mouse_flag2); + + if ((mouse_flags_2 & 0x80) != 0x80) { + return; + } + + package_count = mouse_flags_2 & 0x07; + index = mouse_flags_1 & 0x07; + write_byte(ebda_seg, &EbdaData->mouse_data[index], in_byte); + + if ( (index+1) >= package_count ) { +BX_DEBUG_INT74("int74_function: make_farcall=1\n"); + status = read_byte(ebda_seg, &EbdaData->mouse_data[0]); + X = read_byte(ebda_seg, &EbdaData->mouse_data[1]); + Y = read_byte(ebda_seg, &EbdaData->mouse_data[2]); + Z = 0; + mouse_flags_1 = 0; + // check if far call handler installed + if (mouse_flags_2 & 0x80) + make_farcall = 1; + } + else { + mouse_flags_1++; + } + write_byte(ebda_seg, &EbdaData->mouse_flag1, mouse_flags_1); +} + +#define SET_DISK_RET_STATUS(status) write_byte(0x0040, 0x0074, status) + +#if BX_USE_ATADRV + + int +int13_edd(DS, SI, device) + Bit16u DS, SI; + Bit8u device; +{ + Bit32u lba_low, lba_high; + Bit16u npc, nph, npspt, size, t13; + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit8u type=read_byte(ebda_seg,&EbdaData->ata.devices[device].type); + + size=read_word(DS,SI+(Bit16u)&Int13DPT->size); + t13 = size == 74; + + // Buffer is too small + if(size < 26) + return 1; + + // EDD 1.x + if(size >= 26) { + Bit16u blksize, infos; + + write_word(DS, SI+(Bit16u)&Int13DPT->size, 26); + + blksize = read_word(ebda_seg, &EbdaData->ata.devices[device].blksize); + + if (type == ATA_TYPE_ATA) + { + npc = read_word(ebda_seg, &EbdaData->ata.devices[device].pchs.cylinders); + nph = read_word(ebda_seg, &EbdaData->ata.devices[device].pchs.heads); + npspt = read_word(ebda_seg, &EbdaData->ata.devices[device].pchs.spt); + lba_low = read_dword(ebda_seg, &EbdaData->ata.devices[device].sectors_low); + lba_high = read_dword(ebda_seg, &EbdaData->ata.devices[device].sectors_high); + + if (lba_high || (lba_low/npspt)/nph > 0x3fff) + { + infos = 0 << 1; // geometry is invalid + npc = 0x3fff; + } + else + { + infos = 1 << 1; // geometry is valid + } + } + + if (type == ATA_TYPE_ATAPI) + { + npc = 0xffffffff; + nph = 0xffffffff; + npspt = 0xffffffff; + lba_low = 0xffffffff; + lba_high = 0xffffffff; + + infos = 1 << 2 /* removable */ | 1 << 4 /* media change */ | + 1 << 5 /* lockable */ | 1 << 6; /* max values */ + } + + write_word(DS, SI+(Bit16u)&Int13DPT->infos, infos); + write_dword(DS, SI+(Bit16u)&Int13DPT->cylinders, (Bit32u)npc); + write_dword(DS, SI+(Bit16u)&Int13DPT->heads, (Bit32u)nph); + write_dword(DS, SI+(Bit16u)&Int13DPT->spt, (Bit32u)npspt); + write_dword(DS, SI+(Bit16u)&Int13DPT->sector_count1, lba_low); + write_dword(DS, SI+(Bit16u)&Int13DPT->sector_count2, lba_high); + write_word(DS, SI+(Bit16u)&Int13DPT->blksize, blksize); + } + + // EDD 2.x + if(size >= 30) { + Bit8u channel, dev, irq, mode, checksum, i, translation; + Bit16u iobase1, iobase2, options; + + write_word(DS, SI+(Bit16u)&Int13DPT->size, 30); + + write_word(DS, SI+(Bit16u)&Int13DPT->dpte_segment, ebda_seg); + write_word(DS, SI+(Bit16u)&Int13DPT->dpte_offset, &EbdaData->ata.dpte); + + // Fill in dpte + channel = device / 2; + iobase1 = read_word(ebda_seg, &EbdaData->ata.channels[channel].iobase1); + iobase2 = read_word(ebda_seg, &EbdaData->ata.channels[channel].iobase2); + irq = read_byte(ebda_seg, &EbdaData->ata.channels[channel].irq); + mode = read_byte(ebda_seg, &EbdaData->ata.devices[device].mode); + translation = read_byte(ebda_seg, &EbdaData->ata.devices[device].translation); + + options = (1<<4); // lba translation + options |= (mode==ATA_MODE_PIO32?1:0)<<7; + + if (type == ATA_TYPE_ATA) + { + options |= (translation==ATA_TRANSLATION_NONE?0:1)<<3; // chs translation + options |= (translation==ATA_TRANSLATION_LBA?1:0)<<9; + options |= (translation==ATA_TRANSLATION_RECHS?3:0)<<9; + } + + if (type == ATA_TYPE_ATAPI) + { + options |= (1<<5); // removable device + options |= (1<<6); // atapi device + } + + write_word(ebda_seg, &EbdaData->ata.dpte.iobase1, iobase1); + write_word(ebda_seg, &EbdaData->ata.dpte.iobase2, iobase2 + ATA_CB_DC); + write_byte(ebda_seg, &EbdaData->ata.dpte.prefix, (0xe | (device % 2))<<4 ); + write_byte(ebda_seg, &EbdaData->ata.dpte.unused, 0xcb ); + write_byte(ebda_seg, &EbdaData->ata.dpte.irq, irq ); + write_byte(ebda_seg, &EbdaData->ata.dpte.blkcount, 1 ); + write_byte(ebda_seg, &EbdaData->ata.dpte.dma, 0 ); + write_byte(ebda_seg, &EbdaData->ata.dpte.pio, 0 ); + write_word(ebda_seg, &EbdaData->ata.dpte.options, options); + write_word(ebda_seg, &EbdaData->ata.dpte.reserved, 0); + write_byte(ebda_seg, &EbdaData->ata.dpte.revision, 0x11); + + checksum=0; + for (i=0; i<15; i++) checksum+=read_byte(ebda_seg, ((Bit8u*)(&EbdaData->ata.dpte)) + i); + checksum = -checksum; + write_byte(ebda_seg, &EbdaData->ata.dpte.checksum, checksum); + } + + // EDD 3.x + if(size >= 66) { + Bit8u channel, iface, checksum, i; + Bit16u iobase1; + + channel = device / 2; + iface = read_byte(ebda_seg, &EbdaData->ata.channels[channel].iface); + iobase1 = read_word(ebda_seg, &EbdaData->ata.channels[channel].iobase1); + + write_word(DS, SI+(Bit16u)&Int13DPT->dpi.t13.key, 0xbedd); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.dpi_length, t13 ? 44 : 36); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.reserved1, 0); + write_word(DS, SI+(Bit16u)&Int13DPT->dpi.t13.reserved2, 0); + + if (iface==ATA_IFACE_ISA) { + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.host_bus[0], 'I'); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.host_bus[1], 'S'); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.host_bus[2], 'A'); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.host_bus[3], ' '); + } + else { + // FIXME PCI + } + + if (type == ATA_TYPE_ATA) { + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[0], 'A'); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[1], 'T'); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[2], 'A'); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[3], ' '); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[4], ' '); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[5], ' '); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[6], ' '); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[7], ' '); + } else if (type == ATA_TYPE_ATAPI) { + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[0], 'A'); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[1], 'T'); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[2], 'A'); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[3], 'P'); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[4], 'I'); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[5], ' '); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[6], ' '); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_type[7], ' '); + } + + if (iface==ATA_IFACE_ISA) { + write_word(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_path[0], iobase1); + write_word(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_path[2], 0); + write_dword(DS, SI+(Bit16u)&Int13DPT->dpi.t13.iface_path[4], 0L); + } + else { + // FIXME PCI + } + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.device_path[0], device%2); + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.device_path[1], 0); + write_word(DS, SI+(Bit16u)&Int13DPT->dpi.t13.device_path[2], 0); + write_dword(DS, SI+(Bit16u)&Int13DPT->dpi.t13.device_path[4], 0L); + if (t13) { + write_dword(DS, SI+(Bit16u)&Int13DPT->dpi.t13.device_path[8], 0L); + write_dword(DS, SI+(Bit16u)&Int13DPT->dpi.t13.device_path[12], 0L); + } + + if (t13) + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.reserved3, 0); + else + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.phoenix.reserved3, 0); + + checksum = 0; + for (i = 30; i < (t13 ? 73 : 65); i++) checksum += read_byte(DS, SI + i); + checksum = -checksum; + if (t13) + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.t13.checksum, checksum); + else + write_byte(DS, SI+(Bit16u)&Int13DPT->dpi.phoenix.checksum, checksum); + } + + return 0; +} + + void +int13_harddisk(EHAX, DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS) + Bit16u EHAX, DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS; +{ + Bit32u lba_low, lba_high; + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit16u cylinder, head, sector; + Bit16u segment, offset; + Bit16u npc, nph, npspt, nlc, nlh, nlspt; + Bit16u size, count; + Bit8u device, status; + + BX_DEBUG_INT13_HD("int13_harddisk: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", AX, BX, CX, DX, ES); + + write_byte(0x0040, 0x008e, 0); // clear completion flag + + // basic check : device has to be defined + if ( (GET_ELDL() < 0x80) || (GET_ELDL() >= 0x80 + BX_MAX_ATA_DEVICES) ) { + BX_INFO("int13_harddisk: function %02x, ELDL out of range %02x\n", GET_AH(), GET_ELDL()); + goto int13_fail; + } + + // Get the ata channel + device=read_byte(ebda_seg,&EbdaData->ata.hdidmap[GET_ELDL()-0x80]); + + // basic check : device has to be valid + if (device >= BX_MAX_ATA_DEVICES) { + BX_INFO("int13_harddisk: function %02x, unmapped device for ELDL=%02x\n", GET_AH(), GET_ELDL()); + goto int13_fail; + } + + switch (GET_AH()) { + + case 0x00: /* disk controller reset */ + ata_reset (device); + goto int13_success; + break; + + case 0x01: /* read disk status */ + status = read_byte(0x0040, 0x0074); + SET_AH(status); + SET_DISK_RET_STATUS(0); + /* set CF if error status read */ + if (status) goto int13_fail_nostatus; + else goto int13_success_noah; + break; + + case 0x02: // read disk sectors + case 0x03: // write disk sectors + case 0x04: // verify disk sectors + + count = GET_AL(); + cylinder = GET_CH(); + cylinder |= ( ((Bit16u) GET_CL()) << 2) & 0x300; + sector = (GET_CL() & 0x3f); + head = GET_DH(); + + segment = ES; + offset = BX; + + if ((count > 128) || (count == 0) || (sector == 0)) { + BX_INFO("int13_harddisk: function %02x, parameter out of range!\n",GET_AH()); + goto int13_fail; + } + + nlc = read_word(ebda_seg, &EbdaData->ata.devices[device].lchs.cylinders); + nlh = read_word(ebda_seg, &EbdaData->ata.devices[device].lchs.heads); + nlspt = read_word(ebda_seg, &EbdaData->ata.devices[device].lchs.spt); + + // sanity check on cyl heads, sec + if( (cylinder >= nlc) || (head >= nlh) || (sector > nlspt) ) { + BX_INFO("int13_harddisk: function %02x, parameters out of range %04x/%04x/%04x!\n", GET_AH(), cylinder, head, sector); + goto int13_fail; + } + + // FIXME verify + if (GET_AH() == 0x04) goto int13_success; + + nph = read_word(ebda_seg, &EbdaData->ata.devices[device].pchs.heads); + npspt = read_word(ebda_seg, &EbdaData->ata.devices[device].pchs.spt); + + // if needed, translate lchs to lba, and execute command + if ( (nph != nlh) || (npspt != nlspt)) { + lba_low = ((((Bit32u)cylinder * (Bit32u)nlh) + (Bit32u)head) * (Bit32u)nlspt) + (Bit32u)sector - 1; + lba_high = 0; + sector = 0; // this forces the command to be lba + } + + if (GET_AH() == 0x02) + status=ata_cmd_data_in(device, ATA_CMD_READ_SECTORS, count, cylinder, head, sector, lba_low, lba_high, segment, offset); + else + status=ata_cmd_data_out(device, ATA_CMD_WRITE_SECTORS, count, cylinder, head, sector, lba_low, lba_high, segment, offset); + + // Set nb of sector transferred + SET_AL(read_word(ebda_seg, &EbdaData->ata.trsfsectors)); + + if (status != 0) { + BX_INFO("int13_harddisk: function %02x, error %02x !\n",GET_AH(),status); + SET_AH(0x0c); + goto int13_fail_noah; + } + + goto int13_success; + break; + + case 0x05: /* format disk track */ + BX_INFO("format disk track called\n"); + goto int13_success; + return; + break; + + case 0x08: /* read disk drive parameters */ + + // Get logical geometry from table + nlc = read_word(ebda_seg, &EbdaData->ata.devices[device].lchs.cylinders); + nlh = read_word(ebda_seg, &EbdaData->ata.devices[device].lchs.heads); + nlspt = read_word(ebda_seg, &EbdaData->ata.devices[device].lchs.spt); + count = read_byte(ebda_seg, &EbdaData->ata.hdcount); + + nlc = nlc - 1; /* 0 based */ + SET_AL(0); + SET_CH(nlc & 0xff); + SET_CL(((nlc >> 2) & 0xc0) | (nlspt & 0x3f)); + SET_DH(nlh - 1); + SET_DL(count); /* FIXME returns 0, 1, or n hard drives */ + + // FIXME should set ES & DI + + goto int13_success; + break; + + case 0x10: /* check drive ready */ + // should look at 40:8E also??? + + // Read the status from controller + status = inb(read_word(ebda_seg, &EbdaData->ata.channels[device/2].iobase1) + ATA_CB_STAT); + if ( (status & (ATA_CB_STAT_BSY | ATA_CB_STAT_RDY)) == ATA_CB_STAT_RDY ) { + goto int13_success; + } + else { + SET_AH(0xAA); + goto int13_fail_noah; + } + break; + + case 0x15: /* read disk drive size */ + + // Get logical geometry from table + nlc = read_word(ebda_seg, &EbdaData->ata.devices[device].lchs.cylinders); + nlh = read_word(ebda_seg, &EbdaData->ata.devices[device].lchs.heads); + nlspt = read_word(ebda_seg, &EbdaData->ata.devices[device].lchs.spt); + + // Compute sector count seen by int13 + lba_low = (Bit32u)(nlc - 1) * (Bit32u)nlh * (Bit32u)nlspt; + CX = lba_low >> 16; + DX = lba_low & 0xffff; + + SET_AH(3); // hard disk accessible + goto int13_success_noah; + break; + + case 0x41: // IBM/MS installation check + BX=0xaa55; // install check + SET_AH(0x30); // EDD 3.0 + CX=0x0007; // ext disk access and edd, removable supported + goto int13_success_noah; + break; + + case 0x42: // IBM/MS extended read + case 0x43: // IBM/MS extended write + case 0x44: // IBM/MS verify + case 0x47: // IBM/MS extended seek + + count=read_word(DS, SI+(Bit16u)&Int13Ext->count); + segment=read_word(DS, SI+(Bit16u)&Int13Ext->segment); + offset=read_word(DS, SI+(Bit16u)&Int13Ext->offset); + + // Get 32 msb lba and check + lba_high=read_dword(DS, SI+(Bit16u)&Int13Ext->lba2); + if (lba_high > read_dword(ebda_seg, &EbdaData->ata.devices[device].sectors_high) ) { + BX_INFO("int13_harddisk: function %02x. LBA out of range\n",GET_AH()); + goto int13_fail; + } + + // Get 32 lsb lba and check + lba_low=read_dword(DS, SI+(Bit16u)&Int13Ext->lba1); + if (lba_high == read_dword(ebda_seg, &EbdaData->ata.devices[device].sectors_high) + && lba_low >= read_dword(ebda_seg, &EbdaData->ata.devices[device].sectors_low) ) { + BX_INFO("int13_harddisk: function %02x. LBA out of range\n",GET_AH()); + goto int13_fail; + } + + // If verify or seek + if (( GET_AH() == 0x44 ) || ( GET_AH() == 0x47 )) + goto int13_success; + + // Execute the command + if (GET_AH() == 0x42) + status=ata_cmd_data_in(device, ATA_CMD_READ_SECTORS, count, 0, 0, 0, lba_low, lba_high, segment, offset); + else + status=ata_cmd_data_out(device, ATA_CMD_WRITE_SECTORS, count, 0, 0, 0, lba_low, lba_high, segment, offset); + + count=read_word(ebda_seg, &EbdaData->ata.trsfsectors); + write_word(DS, SI+(Bit16u)&Int13Ext->count, count); + + if (status != 0) { + BX_INFO("int13_harddisk: function %02x, error %02x !\n",GET_AH(),status); + SET_AH(0x0c); + goto int13_fail_noah; + } + + goto int13_success; + break; + + case 0x45: // IBM/MS lock/unlock drive + case 0x49: // IBM/MS extended media change + goto int13_success; // Always success for HD + break; + + case 0x46: // IBM/MS eject media + SET_AH(0xb2); // Volume Not Removable + goto int13_fail_noah; // Always fail for HD + break; + + case 0x48: // IBM/MS get drive parameters + if (int13_edd(DS, SI, device)) + goto int13_fail; + + goto int13_success; + break; + + case 0x4e: // // IBM/MS set hardware configuration + // DMA, prefetch, PIO maximum not supported + switch (GET_AL()) { + case 0x01: + case 0x03: + case 0x04: + case 0x06: + goto int13_success; + break; + default: + goto int13_fail; + } + break; + + case 0x09: /* initialize drive parameters */ + case 0x0c: /* seek to specified cylinder */ + case 0x0d: /* alternate disk reset */ + case 0x11: /* recalibrate */ + case 0x14: /* controller internal diagnostic */ + BX_INFO("int13_harddisk: function %02xh unimplemented, returns success\n", GET_AH()); + goto int13_success; + break; + + case 0x0a: /* read disk sectors with ECC */ + case 0x0b: /* write disk sectors with ECC */ + case 0x18: // set media type for format + case 0x50: // IBM/MS send packet command + default: + BX_INFO("int13_harddisk: function %02xh unsupported, returns fail\n", GET_AH()); + goto int13_fail; + break; + } + +int13_fail: + SET_AH(0x01); // defaults to invalid function in AH or invalid parameter +int13_fail_noah: + SET_DISK_RET_STATUS(GET_AH()); +int13_fail_nostatus: + SET_CF(); // error occurred + return; + +int13_success: + SET_AH(0x00); // no error +int13_success_noah: + SET_DISK_RET_STATUS(0x00); + CLEAR_CF(); // no error +} + +// --------------------------------------------------------------------------- +// Start of int13 for cdrom +// --------------------------------------------------------------------------- + + void +int13_cdrom(EHBX, DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS) + Bit16u EHBX, DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS; +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit8u device, status, locks; + Bit8u atacmd[12]; + Bit32u lba; + Bit16u count, segment, offset, i, size; + + BX_DEBUG_INT13_CD("int13_cdrom: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", AX, BX, CX, DX, ES); + + SET_DISK_RET_STATUS(0x00); + + /* basic check : device should be 0xE0+ */ + if( (GET_ELDL() < 0xE0) || (GET_ELDL() >= 0xE0+BX_MAX_ATA_DEVICES) ) { + BX_INFO("int13_cdrom: function %02x, ELDL out of range %02x\n", GET_AH(), GET_ELDL()); + goto int13_fail; + } + + // Get the ata channel + device=read_byte(ebda_seg,&EbdaData->ata.cdidmap[GET_ELDL()-0xE0]); + + /* basic check : device has to be valid */ + if (device >= BX_MAX_ATA_DEVICES) { + BX_INFO("int13_cdrom: function %02x, unmapped device for ELDL=%02x\n", GET_AH(), GET_ELDL()); + goto int13_fail; + } + + switch (GET_AH()) { + + // all those functions return SUCCESS + case 0x00: /* disk controller reset */ + case 0x09: /* initialize drive parameters */ + case 0x0c: /* seek to specified cylinder */ + case 0x0d: /* alternate disk reset */ + case 0x10: /* check drive ready */ + case 0x11: /* recalibrate */ + case 0x14: /* controller internal diagnostic */ + case 0x16: /* detect disk change */ + goto int13_success; + break; + + // all those functions return disk write-protected + case 0x03: /* write disk sectors */ + case 0x05: /* format disk track */ + case 0x43: // IBM/MS extended write + SET_AH(0x03); + goto int13_fail_noah; + break; + + case 0x01: /* read disk status */ + status = read_byte(0x0040, 0x0074); + SET_AH(status); + SET_DISK_RET_STATUS(0); + + /* set CF if error status read */ + if (status) goto int13_fail_nostatus; + else goto int13_success_noah; + break; + + case 0x15: /* read disk drive size */ + SET_AH(0x02); + goto int13_fail_noah; + break; + + case 0x41: // IBM/MS installation check + BX=0xaa55; // install check + SET_AH(0x30); // EDD 2.1 + CX=0x0007; // ext disk access, removable and edd + goto int13_success_noah; + break; + + case 0x42: // IBM/MS extended read + case 0x44: // IBM/MS verify sectors + case 0x47: // IBM/MS extended seek + + count=read_word(DS, SI+(Bit16u)&Int13Ext->count); + segment=read_word(DS, SI+(Bit16u)&Int13Ext->segment); + offset=read_word(DS, SI+(Bit16u)&Int13Ext->offset); + + // Can't use 64 bits lba + lba=read_dword(DS, SI+(Bit16u)&Int13Ext->lba2); + if (lba != 0L) { + BX_PANIC("int13_cdrom: function %02x. Can't use 64bits lba\n",GET_AH()); + goto int13_fail; + } + + // Get 32 bits lba + lba=read_dword(DS, SI+(Bit16u)&Int13Ext->lba1); + + // If verify or seek + if ((GET_AH() == 0x44) || (GET_AH() == 0x47)) + goto int13_success; + + memsetb(get_SS(),atacmd,0,12); + atacmd[0]=0x28; // READ command + atacmd[7]=(count & 0xff00) >> 8; // Sectors + atacmd[8]=(count & 0x00ff); // Sectors + atacmd[2]=(lba & 0xff000000) >> 24; // LBA + atacmd[3]=(lba & 0x00ff0000) >> 16; + atacmd[4]=(lba & 0x0000ff00) >> 8; + atacmd[5]=(lba & 0x000000ff); + status = ata_cmd_packet(device, 12, get_SS(), atacmd, 0, count*2048L, ATA_DATA_IN, segment,offset); + + count = (Bit16u)(read_dword(ebda_seg, &EbdaData->ata.trsfbytes) >> 11); + write_word(DS, SI+(Bit16u)&Int13Ext->count, count); + + if (status != 0) { + BX_INFO("int13_cdrom: function %02x, status %02x !\n",GET_AH(),status); + SET_AH(0x0c); + goto int13_fail_noah; + } + + goto int13_success; + break; + + case 0x45: // IBM/MS lock/unlock drive + if (GET_AL() > 2) goto int13_fail; + + locks = read_byte(ebda_seg, &EbdaData->ata.devices[device].lock); + + switch (GET_AL()) { + case 0 : // lock + if (locks == 0xff) { + SET_AH(0xb4); + SET_AL(1); + goto int13_fail_noah; + } + write_byte(ebda_seg, &EbdaData->ata.devices[device].lock, ++locks); + SET_AL(1); + break; + case 1 : // unlock + if (locks == 0x00) { + SET_AH(0xb0); + SET_AL(0); + goto int13_fail_noah; + } + write_byte(ebda_seg, &EbdaData->ata.devices[device].lock, --locks); + SET_AL(locks==0?0:1); + break; + case 2 : // status + SET_AL(locks==0?0:1); + break; + } + + goto int13_success; + break; + + case 0x46: // IBM/MS eject media + locks = read_byte(ebda_seg, &EbdaData->ata.devices[device].lock); + + if (locks != 0) { + SET_AH(0xb1); // media locked + goto int13_fail_noah; + } + // FIXME should handle 0x31 no media in device + // FIXME should handle 0xb5 valid request failed + + // Call removable media eject + ASM_START + push bp + mov bp, sp + + mov ah, #0x52 + int #0x15 + mov _int13_cdrom.status + 2[bp], ah + jnc int13_cdrom_rme_end + mov _int13_cdrom.status, #1 +int13_cdrom_rme_end: + pop bp + ASM_END + + if (status != 0) { + SET_AH(0xb1); // media locked + goto int13_fail_noah; + } + + goto int13_success; + break; + + case 0x48: // IBM/MS get drive parameters + if (int13_edd(DS, SI, device)) + goto int13_fail; + + goto int13_success; + break; + + case 0x49: // IBM/MS extended media change + // always send changed ?? + SET_AH(06); + goto int13_fail_nostatus; + break; + + case 0x4e: // // IBM/MS set hardware configuration + // DMA, prefetch, PIO maximum not supported + switch (GET_AL()) { + case 0x01: + case 0x03: + case 0x04: + case 0x06: + goto int13_success; + break; + default: + goto int13_fail; + } + break; + + // all those functions return unimplemented + case 0x02: /* read sectors */ + case 0x04: /* verify sectors */ + case 0x08: /* read disk drive parameters */ + case 0x0a: /* read disk sectors with ECC */ + case 0x0b: /* write disk sectors with ECC */ + case 0x18: /* set media type for format */ + case 0x50: // ? - send packet command + default: + BX_INFO("int13_cdrom: unsupported AH=%02x\n", GET_AH()); + goto int13_fail; + break; + } + +int13_fail: + SET_AH(0x01); // defaults to invalid function in AH or invalid parameter +int13_fail_noah: + SET_DISK_RET_STATUS(GET_AH()); +int13_fail_nostatus: + SET_CF(); // error occurred + return; + +int13_success: + SET_AH(0x00); // no error +int13_success_noah: + SET_DISK_RET_STATUS(0x00); + CLEAR_CF(); // no error +} + +// --------------------------------------------------------------------------- +// End of int13 for cdrom +// --------------------------------------------------------------------------- + +#if BX_ELTORITO_BOOT +// --------------------------------------------------------------------------- +// Start of int13 for eltorito functions +// --------------------------------------------------------------------------- + + void +int13_eltorito(DS, ES, DI, SI, BP, SP, BX, DX, CX, AX, IP, CS, FLAGS) + Bit16u DS, ES, DI, SI, BP, SP, BX, DX, CX, AX, IP, CS, FLAGS; +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + + BX_DEBUG_INT13_ET("int13_eltorito: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", AX, BX, CX, DX, ES); + // BX_DEBUG_INT13_ET("int13_eltorito: SS=%04x DS=%04x ES=%04x DI=%04x SI=%04x\n",get_SS(), DS, ES, DI, SI); + + switch (GET_AH()) { + + // FIXME ElTorito Various. Should be implemented + case 0x4a: // ElTorito - Initiate disk emu + case 0x4c: // ElTorito - Initiate disk emu and boot + case 0x4d: // ElTorito - Return Boot catalog + BX_PANIC("Int13 eltorito call with AX=%04x. Please report\n",AX); + goto int13_fail; + break; + + case 0x4b: // ElTorito - Terminate disk emu + // FIXME ElTorito Hardcoded + write_byte(DS,SI+0x00,0x13); + write_byte(DS,SI+0x01,read_byte(ebda_seg,&EbdaData->cdemu.media)); + write_byte(DS,SI+0x02,read_byte(ebda_seg,&EbdaData->cdemu.emulated_drive)); + write_byte(DS,SI+0x03,read_byte(ebda_seg,&EbdaData->cdemu.controller_index)); + write_dword(DS,SI+0x04,read_dword(ebda_seg,&EbdaData->cdemu.ilba)); + write_word(DS,SI+0x08,read_word(ebda_seg,&EbdaData->cdemu.device_spec)); + write_word(DS,SI+0x0a,read_word(ebda_seg,&EbdaData->cdemu.buffer_segment)); + write_word(DS,SI+0x0c,read_word(ebda_seg,&EbdaData->cdemu.load_segment)); + write_word(DS,SI+0x0e,read_word(ebda_seg,&EbdaData->cdemu.sector_count)); + write_byte(DS,SI+0x10,read_byte(ebda_seg,&EbdaData->cdemu.vdevice.cylinders)); + write_byte(DS,SI+0x11,read_byte(ebda_seg,&EbdaData->cdemu.vdevice.spt)); + write_byte(DS,SI+0x12,read_byte(ebda_seg,&EbdaData->cdemu.vdevice.heads)); + + // If we have to terminate emulation + if(GET_AL() == 0x00) { + // FIXME ElTorito Various. Should be handled accordingly to spec + write_byte(ebda_seg,&EbdaData->cdemu.active, 0x00); // bye bye + } + + goto int13_success; + break; + + default: + BX_INFO("int13_eltorito: unsupported AH=%02x\n", GET_AH()); + goto int13_fail; + break; + } + +int13_fail: + SET_AH(0x01); // defaults to invalid function in AH or invalid parameter + SET_DISK_RET_STATUS(GET_AH()); + SET_CF(); // error occurred + return; + +int13_success: + SET_AH(0x00); // no error + SET_DISK_RET_STATUS(0x00); + CLEAR_CF(); // no error +} + +// --------------------------------------------------------------------------- +// End of int13 for eltorito functions +// --------------------------------------------------------------------------- + +// --------------------------------------------------------------------------- +// Start of int13 when emulating a device from the cd +// --------------------------------------------------------------------------- + + void +int13_cdemu(DS, ES, DI, SI, BP, SP, BX, DX, CX, AX, IP, CS, FLAGS) + Bit16u DS, ES, DI, SI, BP, SP, BX, DX, CX, AX, IP, CS, FLAGS; +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit8u device, status; + Bit16u vheads, vspt, vcylinders; + Bit16u head, sector, cylinder, nbsectors; + Bit32u vlba, ilba, slba, elba; + Bit16u before, segment, offset; + Bit8u atacmd[12]; + + BX_DEBUG_INT13_ET("int13_cdemu: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", AX, BX, CX, DX, ES); + + /* at this point, we are emulating a floppy/harddisk */ + + // Recompute the device number + device = read_byte(ebda_seg,&EbdaData->cdemu.controller_index) * 2; + device += read_byte(ebda_seg,&EbdaData->cdemu.device_spec); + + SET_DISK_RET_STATUS(0x00); + + /* basic checks : emulation should be active, dl should equal the emulated drive */ + if( (read_byte(ebda_seg,&EbdaData->cdemu.active) ==0) || + (read_byte(ebda_seg,&EbdaData->cdemu.emulated_drive ) != GET_DL())) { + BX_INFO("int13_cdemu: function %02x, emulation not active for DL= %02x\n", GET_AH(), GET_DL()); + goto int13_fail; + } + + switch (GET_AH()) { + + // all those functions return SUCCESS + case 0x00: /* disk controller reset */ + case 0x09: /* initialize drive parameters */ + case 0x0c: /* seek to specified cylinder */ + case 0x0d: /* alternate disk reset */ // FIXME ElTorito Various. should really reset ? + case 0x10: /* check drive ready */ // FIXME ElTorito Various. should check if ready ? + case 0x11: /* recalibrate */ + case 0x14: /* controller internal diagnostic */ + case 0x16: /* detect disk change */ + goto int13_success; + break; + + // all those functions return disk write-protected + case 0x03: /* write disk sectors */ + case 0x05: /* format disk track */ + SET_AH(0x03); + goto int13_fail_noah; + break; + + case 0x01: /* read disk status */ + status=read_byte(0x0040, 0x0074); + SET_AH(status); + SET_DISK_RET_STATUS(0); + + /* set CF if error status read */ + if (status) goto int13_fail_nostatus; + else goto int13_success_noah; + break; + + case 0x02: // read disk sectors + case 0x04: // verify disk sectors + vspt = read_word(ebda_seg,&EbdaData->cdemu.vdevice.spt); + vcylinders = read_word(ebda_seg,&EbdaData->cdemu.vdevice.cylinders); + vheads = read_word(ebda_seg,&EbdaData->cdemu.vdevice.heads); + + ilba = read_dword(ebda_seg,&EbdaData->cdemu.ilba); + + sector = GET_CL() & 0x003f; + cylinder = (GET_CL() & 0x00c0) << 2 | GET_CH(); + head = GET_DH(); + nbsectors = GET_AL(); + segment = ES; + offset = BX; + + // no sector to read ? + if(nbsectors==0) goto int13_success; + + // sanity checks sco openserver needs this! + if ((sector > vspt) + || (cylinder >= vcylinders) + || (head >= vheads)) { + goto int13_fail; + } + + // After controls, verify do nothing + if (GET_AH() == 0x04) goto int13_success; + + segment = ES+(BX / 16); + offset = BX % 16; + + // calculate the virtual lba inside the image + vlba=((((Bit32u)cylinder*(Bit32u)vheads)+(Bit32u)head)*(Bit32u)vspt)+((Bit32u)(sector-1)); + + // In advance so we don't loose the count + SET_AL(nbsectors); + + // start lba on cd + slba = (Bit32u)vlba/4; + before= (Bit16u)vlba%4; + + // end lba on cd + elba = (Bit32u)(vlba+nbsectors-1)/4; + + memsetb(get_SS(),atacmd,0,12); + atacmd[0]=0x28; // READ command + atacmd[7]=((Bit16u)(elba-slba+1) & 0xff00) >> 8; // Sectors + atacmd[8]=((Bit16u)(elba-slba+1) & 0x00ff); // Sectors + atacmd[2]=(ilba+slba & 0xff000000) >> 24; // LBA + atacmd[3]=(ilba+slba & 0x00ff0000) >> 16; + atacmd[4]=(ilba+slba & 0x0000ff00) >> 8; + atacmd[5]=(ilba+slba & 0x000000ff); + if((status = ata_cmd_packet(device, 12, get_SS(), atacmd, before*512, nbsectors*512L, ATA_DATA_IN, segment,offset)) != 0) { + BX_INFO("int13_cdemu: function %02x, error %02x !\n",GET_AH(),status); + SET_AH(0x02); + SET_AL(0); + goto int13_fail_noah; + } + + goto int13_success; + break; + + case 0x08: /* read disk drive parameters */ + vspt=read_word(ebda_seg,&EbdaData->cdemu.vdevice.spt); + vcylinders=read_word(ebda_seg,&EbdaData->cdemu.vdevice.cylinders) - 1; + vheads=read_word(ebda_seg,&EbdaData->cdemu.vdevice.heads) - 1; + + SET_AL(0x00); + SET_BL(0x00); + SET_CH(vcylinders & 0xff); + SET_CL(((vcylinders >> 2) & 0xc0) | (vspt & 0x3f)); + SET_DH(vheads); + SET_DL(0x02); // FIXME ElTorito Various. should send the real count of drives 1 or 2 + // FIXME ElTorito Harddisk. should send the HD count + + switch(read_byte(ebda_seg,&EbdaData->cdemu.media)) { + case 0x01: SET_BL( 0x02 ); break; + case 0x02: SET_BL( 0x04 ); break; + case 0x03: SET_BL( 0x06 ); break; + } + +ASM_START + push bp + mov bp, sp + mov ax, #diskette_param_table2 + mov _int13_cdemu.DI+2[bp], ax + mov _int13_cdemu.ES+2[bp], cs + pop bp +ASM_END + goto int13_success; + break; + + case 0x15: /* read disk drive size */ + // FIXME ElTorito Harddisk. What geometry to send ? + SET_AH(0x03); + goto int13_success_noah; + break; + + // all those functions return unimplemented + case 0x0a: /* read disk sectors with ECC */ + case 0x0b: /* write disk sectors with ECC */ + case 0x18: /* set media type for format */ + case 0x41: // IBM/MS installation check + // FIXME ElTorito Harddisk. Darwin would like to use EDD + case 0x42: // IBM/MS extended read + case 0x43: // IBM/MS extended write + case 0x44: // IBM/MS verify sectors + case 0x45: // IBM/MS lock/unlock drive + case 0x46: // IBM/MS eject media + case 0x47: // IBM/MS extended seek + case 0x48: // IBM/MS get drive parameters + case 0x49: // IBM/MS extended media change + case 0x4e: // ? - set hardware configuration + case 0x50: // ? - send packet command + default: + BX_INFO("int13_cdemu function AH=%02x unsupported, returns fail\n", GET_AH()); + goto int13_fail; + break; + } + +int13_fail: + SET_AH(0x01); // defaults to invalid function in AH or invalid parameter +int13_fail_noah: + SET_DISK_RET_STATUS(GET_AH()); +int13_fail_nostatus: + SET_CF(); // error occurred + return; + +int13_success: + SET_AH(0x00); // no error +int13_success_noah: + SET_DISK_RET_STATUS(0x00); + CLEAR_CF(); // no error +} + +// --------------------------------------------------------------------------- +// End of int13 when emulating a device from the cd +// --------------------------------------------------------------------------- + +#endif // BX_ELTORITO_BOOT + +#else //BX_USE_ATADRV + + void +outLBA(cylinder,hd_heads,head,hd_sectors,sector,dl) + Bit16u cylinder; + Bit16u hd_heads; + Bit16u head; + Bit16u hd_sectors; + Bit16u sector; + Bit16u dl; +{ +ASM_START + push bp + mov bp, sp + push eax + push ebx + push edx + xor eax,eax + mov ax,4[bp] // cylinder + xor ebx,ebx + mov bl,6[bp] // hd_heads + imul ebx + + mov bl,8[bp] // head + add eax,ebx + mov bl,10[bp] // hd_sectors + imul ebx + mov bl,12[bp] // sector + add eax,ebx + + dec eax + mov dx,#0x1f3 + out dx,al + mov dx,#0x1f4 + mov al,ah + out dx,al + shr eax,#16 + mov dx,#0x1f5 + out dx,al + and ah,#0xf + mov bl,14[bp] // dl + and bl,#1 + shl bl,#4 + or ah,bl + or ah,#0xe0 + mov al,ah + mov dx,#0x01f6 + out dx,al + pop edx + pop ebx + pop eax + pop bp +ASM_END +} + + void +int13_harddisk(EHAX, DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS) + Bit16u EHAX, DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS; +{ + Bit8u drive, num_sectors, sector, head, status, mod; + Bit8u drive_map; + Bit8u n_drives; + Bit16u cyl_mod, ax; + Bit16u max_cylinder, cylinder, total_sectors; + Bit16u hd_cylinders; + Bit8u hd_heads, hd_sectors; + Bit16u val16; + Bit8u sector_count; + unsigned int i; + Bit16u tempbx; + Bit16u dpsize; + + Bit16u count, segment, offset; + Bit32u lba; + Bit16u error; + + BX_DEBUG_INT13_HD("int13 harddisk: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", AX, BX, CX, DX, ES); + + write_byte(0x0040, 0x008e, 0); // clear completion flag + + /* at this point, DL is >= 0x80 to be passed from the floppy int13h + handler code */ + /* check how many disks first (cmos reg 0x12), return an error if + drive not present */ + drive_map = inb_cmos(0x12); + drive_map = (((drive_map & 0xf0)==0) ? 0 : 1) | + (((drive_map & 0x0f)==0) ? 0 : 2); + n_drives = (drive_map==0) ? 0 : ((drive_map==3) ? 2 : 1); + + if (!(drive_map & (1<<(GET_ELDL()&0x7f)))) { /* allow 0, 1, or 2 disks */ + SET_AH(0x01); + SET_DISK_RET_STATUS(0x01); + SET_CF(); /* error occurred */ + return; + } + + switch (GET_AH()) { + + case 0x00: /* disk controller reset */ +BX_DEBUG_INT13_HD("int13_f00\n"); + + SET_AH(0); + SET_DISK_RET_STATUS(0); + set_diskette_ret_status(0); + set_diskette_current_cyl(0, 0); /* current cylinder, diskette 1 */ + set_diskette_current_cyl(1, 0); /* current cylinder, diskette 2 */ + CLEAR_CF(); /* successful */ + return; + break; + + case 0x01: /* read disk status */ +BX_DEBUG_INT13_HD("int13_f01\n"); + status = read_byte(0x0040, 0x0074); + SET_AH(status); + SET_DISK_RET_STATUS(0); + /* set CF if error status read */ + if (status) SET_CF(); + else CLEAR_CF(); + return; + break; + + case 0x04: // verify disk sectors + case 0x02: // read disk sectors + drive = GET_ELDL(); + get_hd_geometry(drive, &hd_cylinders, &hd_heads, &hd_sectors); + + num_sectors = GET_AL(); + cylinder = (GET_CL() & 0x00c0) << 2 | GET_CH(); + sector = (GET_CL() & 0x3f); + head = GET_DH(); + + + if (hd_cylinders > 1024) { + if (hd_cylinders <= 2048) { + cylinder <<= 1; + } + else if (hd_cylinders <= 4096) { + cylinder <<= 2; + } + else if (hd_cylinders <= 8192) { + cylinder <<= 3; + } + else { // hd_cylinders <= 16384 + cylinder <<= 4; + } + + ax = head / hd_heads; + cyl_mod = ax & 0xff; + head = ax >> 8; + cylinder |= cyl_mod; + } + + if ( (cylinder >= hd_cylinders) || + (sector > hd_sectors) || + (head >= hd_heads) ) { + SET_AH(1); + SET_DISK_RET_STATUS(1); + SET_CF(); /* error occurred */ + return; + } + + if ( (num_sectors > 128) || (num_sectors == 0) ) + BX_PANIC("int13_harddisk: num_sectors out of range!\n"); + + if (head > 15) + BX_PANIC("hard drive BIOS:(read/verify) head > 15\n"); + + if ( GET_AH() == 0x04 ) { + SET_AH(0); + SET_DISK_RET_STATUS(0); + CLEAR_CF(); + return; + } + + status = inb(PORT_ATA1_CMD_BASE + 7); + if (status & 0x80) { + BX_PANIC("hard drive BIOS:(read/verify) BUSY bit set\n"); + } + outb(PORT_ATA1_CMD_BASE + 2, num_sectors); + /* activate LBA? (tomv) */ + if (hd_heads > 16) { +BX_DEBUG_INT13_HD("CHS: %x %x %x\n", cylinder, head, sector); + outLBA(cylinder,hd_heads,head,hd_sectors,sector,drive); + } + else { + outb(PORT_ATA1_CMD_BASE + 3, sector); + outb(PORT_ATA1_CMD_BASE + 4, cylinder & 0x00ff); + outb(PORT_ATA1_CMD_BASE + 5, cylinder >> 8); + outb(PORT_ATA1_CMD_BASE + 6, 0xa0 | ((drive & 0x01)<<4) | (head & 0x0f)); + } + outb(PORT_ATA1_CMD_BASE + 7, 0x20); + + while (1) { + status = inb(PORT_ATA1_CMD_BASE + 7); + if (!(status & 0x80)) break; + } + + if (status & 0x01) { + BX_PANIC("hard drive BIOS:(read/verify) read error\n"); + } else if (!(status & 0x08)) { + BX_DEBUG_INT13_HD("status was %02x\n", (unsigned) status); + BX_PANIC("hard drive BIOS:(read/verify) expected DRQ=1\n"); + } + + sector_count = 0; + tempbx = BX; + +ASM_START + sti ;; enable higher priority interrupts +ASM_END + + while (1) { +ASM_START + ;; store temp bx in real DI register + push bp + mov bp, sp + mov di, _int13_harddisk.tempbx + 2 [bp] + pop bp + + ;; adjust if there will be an overrun + cmp di, #0xfe00 + jbe i13_f02_no_adjust +i13_f02_adjust: + sub di, #0x0200 ; sub 512 bytes from offset + mov ax, es + add ax, #0x0020 ; add 512 to segment + mov es, ax + +i13_f02_no_adjust: + mov cx, #0x0100 ;; counter (256 words = 512b) + mov dx, #0x01f0 ;; AT data read port + + rep + insw ;; CX words transferred from port(DX) to ES:[DI] + +i13_f02_done: + ;; store real DI register back to temp bx + push bp + mov bp, sp + mov _int13_harddisk.tempbx + 2 [bp], di + pop bp +ASM_END + + sector_count++; + num_sectors--; + if (num_sectors == 0) { + status = inb(PORT_ATA1_CMD_BASE + 7); + if ((status & 0xc9) != 0x40) + BX_PANIC("no sectors left to read/verify, status is %02x\n", (unsigned) status); + break; + } + else { + status = inb(PORT_ATA1_CMD_BASE + 7); + if ((status & 0xc9) != 0x48) + BX_PANIC("more sectors left to read/verify, status is %02x\n", (unsigned) status); + continue; + } + } + + SET_AH(0); + SET_DISK_RET_STATUS(0); + SET_AL(sector_count); + CLEAR_CF(); /* successful */ + return; + break; + + case 0x03: /* write disk sectors */ +BX_DEBUG_INT13_HD("int13_f03\n"); + drive = GET_ELDL (); + get_hd_geometry(drive, &hd_cylinders, &hd_heads, &hd_sectors); + + num_sectors = GET_AL(); + cylinder = GET_CH(); + cylinder |= ( ((Bit16u) GET_CL()) << 2) & 0x300; + sector = (GET_CL() & 0x3f); + head = GET_DH(); + + if (hd_cylinders > 1024) { + if (hd_cylinders <= 2048) { + cylinder <<= 1; + } + else if (hd_cylinders <= 4096) { + cylinder <<= 2; + } + else if (hd_cylinders <= 8192) { + cylinder <<= 3; + } + else { // hd_cylinders <= 16384 + cylinder <<= 4; + } + + ax = head / hd_heads; + cyl_mod = ax & 0xff; + head = ax >> 8; + cylinder |= cyl_mod; + } + + if ( (cylinder >= hd_cylinders) || + (sector > hd_sectors) || + (head >= hd_heads) ) { + SET_AH(1); + SET_DISK_RET_STATUS(1); + SET_CF(); /* error occurred */ + return; + } + + if ( (num_sectors > 128) || (num_sectors == 0) ) + BX_PANIC("int13_harddisk: num_sectors out of range!\n"); + + if (head > 15) + BX_PANIC("hard drive BIOS:(read) head > 15\n"); + + status = inb(PORT_ATA1_CMD_BASE + 7); + if (status & 0x80) { + BX_PANIC("hard drive BIOS:(read) BUSY bit set\n"); + } +// should check for Drive Ready Bit also in status reg + outb(PORT_ATA1_CMD_BASE + 2, num_sectors); + + /* activate LBA? (tomv) */ + if (hd_heads > 16) { +BX_DEBUG_INT13_HD("CHS (write): %x %x %x\n", cylinder, head, sector); + outLBA(cylinder,hd_heads,head,hd_sectors,sector,GET_ELDL()); + } + else { + outb(PORT_ATA1_CMD_BASE + 3, sector); + outb(PORT_ATA1_CMD_BASE + 4, cylinder & 0x00ff); + outb(PORT_ATA1_CMD_BASE + 5, cylinder >> 8); + outb(PORT_ATA1_CMD_BASE + 6, 0xa0 | ((GET_ELDL() & 0x01)<<4) | (head & 0x0f)); + } + outb(PORT_ATA1_CMD_BASE + 7, 0x30); + + // wait for busy bit to turn off after seeking + while (1) { + status = inb(PORT_ATA1_CMD_BASE + 7); + if (!(status & 0x80)) break; + } + + if (!(status & 0x08)) { + BX_DEBUG_INT13_HD("status was %02x\n", (unsigned) status); + BX_PANIC("hard drive BIOS:(write) data-request bit not set\n"); + } + + sector_count = 0; + tempbx = BX; + +ASM_START + sti ;; enable higher priority interrupts +ASM_END + + while (1) { +ASM_START + ;; store temp bx in real SI register + push bp + mov bp, sp + mov si, _int13_harddisk.tempbx + 2 [bp] + pop bp + + ;; adjust if there will be an overrun + cmp si, #0xfe00 + jbe i13_f03_no_adjust +i13_f03_adjust: + sub si, #0x0200 ; sub 512 bytes from offset + mov ax, es + add ax, #0x0020 ; add 512 to segment + mov es, ax + +i13_f03_no_adjust: + mov cx, #0x0100 ;; counter (256 words = 512b) + mov dx, #0x01f0 ;; AT data read port + + seg ES + rep + outsw ;; CX words tranferred from ES:[SI] to port(DX) + + ;; store real SI register back to temp bx + push bp + mov bp, sp + mov _int13_harddisk.tempbx + 2 [bp], si + pop bp +ASM_END + + sector_count++; + num_sectors--; + if (num_sectors == 0) { + status = inb(PORT_ATA1_CMD_BASE + 7); + if ((status & 0xe9) != 0x40) + BX_PANIC("no sectors left to write, status is %02x\n", (unsigned) status); + break; + } + else { + status = inb(PORT_ATA1_CMD_BASE + 7); + if ((status & 0xc9) != 0x48) + BX_PANIC("more sectors left to write, status is %02x\n", (unsigned) status); + continue; + } + } + + SET_AH(0); + SET_DISK_RET_STATUS(0); + SET_AL(sector_count); + CLEAR_CF(); /* successful */ + return; + break; + + case 0x05: /* format disk track */ +BX_DEBUG_INT13_HD("int13_f05\n"); + BX_PANIC("format disk track called\n"); + /* nop */ + SET_AH(0); + SET_DISK_RET_STATUS(0); + CLEAR_CF(); /* successful */ + return; + break; + + case 0x08: /* read disk drive parameters */ +BX_DEBUG_INT13_HD("int13_f08\n"); + + drive = GET_ELDL (); + get_hd_geometry(drive, &hd_cylinders, &hd_heads, &hd_sectors); + + // translate CHS + // + if (hd_cylinders <= 1024) { + // hd_cylinders >>= 0; + // hd_heads <<= 0; + } + else if (hd_cylinders <= 2048) { + hd_cylinders >>= 1; + hd_heads <<= 1; + } + else if (hd_cylinders <= 4096) { + hd_cylinders >>= 2; + hd_heads <<= 2; + } + else if (hd_cylinders <= 8192) { + hd_cylinders >>= 3; + hd_heads <<= 3; + } + else { // hd_cylinders <= 16384 + hd_cylinders >>= 4; + hd_heads <<= 4; + } + + max_cylinder = hd_cylinders - 1; /* 0 based */ + SET_AL(0); + SET_CH(max_cylinder & 0xff); + SET_CL(((max_cylinder >> 2) & 0xc0) | (hd_sectors & 0x3f)); + SET_DH(hd_heads - 1); + SET_DL(n_drives); /* returns 0, 1, or 2 hard drives */ + SET_AH(0); + SET_DISK_RET_STATUS(0); + CLEAR_CF(); /* successful */ + + return; + break; + + case 0x09: /* initialize drive parameters */ +BX_DEBUG_INT13_HD("int13_f09\n"); + SET_AH(0); + SET_DISK_RET_STATUS(0); + CLEAR_CF(); /* successful */ + return; + break; + + case 0x0a: /* read disk sectors with ECC */ +BX_DEBUG_INT13_HD("int13_f0a\n"); + case 0x0b: /* write disk sectors with ECC */ +BX_DEBUG_INT13_HD("int13_f0b\n"); + BX_PANIC("int13h Functions 0Ah & 0Bh not implemented!\n"); + return; + break; + + case 0x0c: /* seek to specified cylinder */ +BX_DEBUG_INT13_HD("int13_f0c\n"); + BX_INFO("int13h function 0ch (seek) not implemented!\n"); + SET_AH(0); + SET_DISK_RET_STATUS(0); + CLEAR_CF(); /* successful */ + return; + break; + + case 0x0d: /* alternate disk reset */ +BX_DEBUG_INT13_HD("int13_f0d\n"); + SET_AH(0); + SET_DISK_RET_STATUS(0); + CLEAR_CF(); /* successful */ + return; + break; + + case 0x10: /* check drive ready */ +BX_DEBUG_INT13_HD("int13_f10\n"); + //SET_AH(0); + //SET_DISK_RET_STATUS(0); + //CLEAR_CF(); /* successful */ + //return; + //break; + + // should look at 40:8E also??? + status = inb(PORT_ATA1_CMD_BASE + 7); + if ((status & 0xc0) == 0x40) { + SET_AH(0); + SET_DISK_RET_STATUS(0); + CLEAR_CF(); // drive ready + return; + } + else { + SET_AH(0xAA); + SET_DISK_RET_STATUS(0xAA); + SET_CF(); // not ready + return; + } + break; + + case 0x11: /* recalibrate */ +BX_DEBUG_INT13_HD("int13_f11\n"); + SET_AH(0); + SET_DISK_RET_STATUS(0); + CLEAR_CF(); /* successful */ + return; + break; + + case 0x14: /* controller internal diagnostic */ +BX_DEBUG_INT13_HD("int13_f14\n"); + SET_AH(0); + SET_DISK_RET_STATUS(0); + CLEAR_CF(); /* successful */ + SET_AL(0); + return; + break; + + case 0x15: /* read disk drive size */ + drive = GET_ELDL(); + get_hd_geometry(drive, &hd_cylinders, &hd_heads, &hd_sectors); +ASM_START + push bp + mov bp, sp + mov al, _int13_harddisk.hd_heads + 2 [bp] + mov ah, _int13_harddisk.hd_sectors + 2 [bp] + mul al, ah ;; ax = heads * sectors + mov bx, _int13_harddisk.hd_cylinders + 2 [bp] + dec bx ;; use (cylinders - 1) ??? + mul ax, bx ;; dx:ax = (cylinders -1) * (heads * sectors) + ;; now we need to move the 32bit result dx:ax to what the + ;; BIOS wants which is cx:dx. + ;; and then into CX:DX on the stack + mov _int13_harddisk.CX + 2 [bp], dx + mov _int13_harddisk.DX + 2 [bp], ax + pop bp +ASM_END + SET_AH(3); // hard disk accessible + SET_DISK_RET_STATUS(0); // ??? should this be 0 + CLEAR_CF(); // successful + return; + break; + + case 0x18: // set media type for format + case 0x41: // IBM/MS + case 0x42: // IBM/MS + case 0x43: // IBM/MS + case 0x44: // IBM/MS + case 0x45: // IBM/MS lock/unlock drive + case 0x46: // IBM/MS eject media + case 0x47: // IBM/MS extended seek + case 0x49: // IBM/MS extended media change + case 0x50: // IBM/MS send packet command + default: + BX_INFO("int13_harddisk: unsupported AH=%02x\n", GET_AH()); + + SET_AH(1); // code=invalid function in AH or invalid parameter + SET_DISK_RET_STATUS(1); + SET_CF(); /* unsuccessful */ + return; + } +} + +static char panic_msg_reg12h[] = "HD%d cmos reg 12h not type F\n"; +static char panic_msg_reg19h[] = "HD%d cmos reg %02xh not user definable type 47\n"; + + void +get_hd_geometry(drive, hd_cylinders, hd_heads, hd_sectors) + Bit8u drive; + Bit16u *hd_cylinders; + Bit8u *hd_heads; + Bit8u *hd_sectors; +{ + Bit8u hd_type; + Bit16u ss; + Bit16u cylinders; + Bit8u iobase; + + ss = get_SS(); + if (drive == 0x80) { + hd_type = inb_cmos(0x12) & 0xf0; + if (hd_type != 0xf0) + BX_INFO(panic_msg_reg12h,0); + hd_type = inb_cmos(0x19); // HD0: extended type + if (hd_type != 47) + BX_INFO(panic_msg_reg19h,0,0x19); + iobase = 0x1b; + } else { + hd_type = inb_cmos(0x12) & 0x0f; + if (hd_type != 0x0f) + BX_INFO(panic_msg_reg12h,1); + hd_type = inb_cmos(0x1a); // HD1: extended type + if (hd_type != 47) + BX_INFO(panic_msg_reg19h,0,0x1a); + iobase = 0x24; + } + + // cylinders + cylinders = inb_cmos(iobase) | (inb_cmos(iobase+1) << 8); + write_word(ss, hd_cylinders, cylinders); + + // heads + write_byte(ss, hd_heads, inb_cmos(iobase+2)); + + // sectors per track + write_byte(ss, hd_sectors, inb_cmos(iobase+8)); +} + +#endif //else BX_USE_ATADRV + +#if BX_SUPPORT_FLOPPY + +////////////////////// +// FLOPPY functions // +////////////////////// + +void floppy_reset_controller() +{ + Bit8u val8; + + // Reset controller + val8 = inb(PORT_FD_DOR); + outb(PORT_FD_DOR, val8 & ~0x04); + outb(PORT_FD_DOR, val8 | 0x04); + + // Wait for controller to come out of reset + do { + val8 = inb(PORT_FD_STATUS); + } while ((val8 & 0xc0) != 0x80); +} + +void floppy_prepare_controller(drive) + Bit16u drive; +{ + Bit8u val8, dor, prev_reset; + + // set 40:3e bit 7 to 0 + val8 = read_byte(0x0040, 0x003e); + val8 &= 0x7f; + write_byte(0x0040, 0x003e, val8); + + // turn on motor of selected drive, DMA & int enabled, normal operation + prev_reset = inb(PORT_FD_DOR) & 0x04; + if (drive) + dor = 0x20; + else + dor = 0x10; + dor |= 0x0c; + dor |= drive; + outb(PORT_FD_DOR, dor); + + // reset the disk motor timeout value of INT 08 + write_byte(0x40,0x40, BX_FLOPPY_ON_CNT); + + // wait for drive readiness + do { + val8 = inb(PORT_FD_STATUS); + } while ( (val8 & 0xc0) != 0x80 ); + + if (prev_reset == 0) { + // turn on interrupts +ASM_START + sti +ASM_END + // wait on 40:3e bit 7 to become 1 + do { + val8 = read_byte(0x0040, 0x003e); + } while ( (val8 & 0x80) == 0 ); + val8 &= 0x7f; +ASM_START + cli +ASM_END + write_byte(0x0040, 0x003e, val8); + } +} + + bx_bool +floppy_media_known(drive) + Bit16u drive; +{ + Bit8u val8; + Bit16u media_state_offset; + + val8 = read_byte(0x0040, 0x003e); // diskette recal status + if (drive) + val8 >>= 1; + val8 &= 0x01; + if (val8 == 0) + return(0); + + media_state_offset = 0x0090; + if (drive) + media_state_offset += 1; + + val8 = read_byte(0x0040, media_state_offset); + val8 = (val8 >> 4) & 0x01; + if (val8 == 0) + return(0); + + // check pass, return KNOWN + return(1); +} + + bx_bool +floppy_media_sense(drive) + Bit16u drive; +{ + bx_bool retval; + Bit16u media_state_offset; + Bit8u drive_type, config_data, media_state; + + if (floppy_drive_recal(drive) == 0) { + return(0); + } + + // for now cheat and get drive type from CMOS, + // assume media is same as drive type + + // ** config_data ** + // Bitfields for diskette media control: + // Bit(s) Description (Table M0028) + // 7-6 last data rate set by controller + // 00=500kbps, 01=300kbps, 10=250kbps, 11=1Mbps + // 5-4 last diskette drive step rate selected + // 00=0Ch, 01=0Dh, 10=0Eh, 11=0Ah + // 3-2 {data rate at start of operation} + // 1-0 reserved + + // ** media_state ** + // Bitfields for diskette drive media state: + // Bit(s) Description (Table M0030) + // 7-6 data rate + // 00=500kbps, 01=300kbps, 10=250kbps, 11=1Mbps + // 5 double stepping required (e.g. 360kB in 1.2MB) + // 4 media type established + // 3 drive capable of supporting 4MB media + // 2-0 on exit from BIOS, contains + // 000 trying 360kB in 360kB + // 001 trying 360kB in 1.2MB + // 010 trying 1.2MB in 1.2MB + // 011 360kB in 360kB established + // 100 360kB in 1.2MB established + // 101 1.2MB in 1.2MB established + // 110 reserved + // 111 all other formats/drives + + drive_type = inb_cmos(0x10); + + if (drive == 0) + drive_type >>= 4; + else + drive_type &= 0x0f; + + if (drive_type == 1) { + // 360K 5.25" drive + config_data = 0x00; // 0000 0000 + media_state = 0x25; // 0010 0101 + retval = 1; + } + else if (drive_type == 2) { + // 1.2 MB 5.25" drive + config_data = 0x00; // 0000 0000 + media_state = 0x25; // 0010 0101 // need double stepping??? (bit 5) + retval = 1; + } + else if (drive_type == 3) { + // 720K 3.5" drive + config_data = 0x00; // 0000 0000 ??? + media_state = 0x17; // 0001 0111 + retval = 1; + } + else if (drive_type == 4) { + // 1.44 MB 3.5" drive + config_data = 0x00; // 0000 0000 + media_state = 0x17; // 0001 0111 + retval = 1; + } + else if (drive_type == 5) { + // 2.88 MB 3.5" drive + config_data = 0xCC; // 1100 1100 + media_state = 0xD7; // 1101 0111 + retval = 1; + } + // Extended floppy size uses special cmos setting + else if (drive_type == 6) { + // 160k 5.25" drive + config_data = 0x00; // 0000 0000 + media_state = 0x27; // 0010 0111 + retval = 1; + } + else if (drive_type == 7) { + // 180k 5.25" drive + config_data = 0x00; // 0000 0000 + media_state = 0x27; // 0010 0111 + retval = 1; + } + else if (drive_type == 8) { + // 320k 5.25" drive + config_data = 0x00; // 0000 0000 + media_state = 0x27; // 0010 0111 + retval = 1; + } + else { + // not recognized + config_data = 0x00; // 0000 0000 + media_state = 0x00; // 0000 0000 + retval = 0; + } + + if (drive == 0) + media_state_offset = 0x90; + else + media_state_offset = 0x91; + write_byte(0x0040, 0x008B, config_data); + write_byte(0x0040, media_state_offset, media_state); + + return(retval); +} + + bx_bool +floppy_drive_recal(drive) + Bit16u drive; +{ + Bit8u val8; + Bit16u curr_cyl_offset; + + floppy_prepare_controller(drive); + + // send Recalibrate command (2 bytes) to controller + outb(PORT_FD_DATA, 0x07); // 07: Recalibrate + outb(PORT_FD_DATA, drive); // 0=drive0, 1=drive1 + + // turn on interrupts +ASM_START + sti +ASM_END + + // wait on 40:3e bit 7 to become 1 + do { + val8 = (read_byte(0x0040, 0x003e) & 0x80); + } while ( val8 == 0 ); + + val8 = 0; // separate asm from while() loop + // turn off interrupts +ASM_START + cli +ASM_END + + // set 40:3e bit 7 to 0, and calibrated bit + val8 = read_byte(0x0040, 0x003e); + val8 &= 0x7f; + if (drive) { + val8 |= 0x02; // Drive 1 calibrated + curr_cyl_offset = 0x0095; + } else { + val8 |= 0x01; // Drive 0 calibrated + curr_cyl_offset = 0x0094; + } + write_byte(0x0040, 0x003e, val8); + write_byte(0x0040, curr_cyl_offset, 0); // current cylinder is 0 + + return(1); +} + + bx_bool +floppy_drive_exists(drive) + Bit16u drive; +{ + Bit8u drive_type; + + // check CMOS to see if drive exists + drive_type = inb_cmos(0x10); + if (drive == 0) + drive_type >>= 4; + else + drive_type &= 0x0f; + if ( drive_type == 0 ) + return(0); + else + return(1); +} + + void +int13_diskette_function(DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS) + Bit16u DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS; +{ + Bit8u drive, num_sectors, track, sector, head, status; + Bit16u base_address, base_count, base_es; + Bit8u page, mode_register, val8, dor; + Bit8u return_status[7]; + Bit8u drive_type, num_floppies, ah; + Bit16u es, last_addr; + + BX_DEBUG_INT13_FL("int13_diskette: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", AX, BX, CX, DX, ES); + + ah = GET_AH(); + + switch ( ah ) { + case 0x00: // diskette controller reset +BX_DEBUG_INT13_FL("floppy f00\n"); + drive = GET_ELDL(); + if (drive > 1) { + SET_AH(1); // invalid param + set_diskette_ret_status(1); + SET_CF(); + return; + } + drive_type = inb_cmos(0x10); + + if (drive == 0) + drive_type >>= 4; + else + drive_type &= 0x0f; + if (drive_type == 0) { + SET_AH(0x80); // drive not responding + set_diskette_ret_status(0x80); + SET_CF(); + return; + } + SET_AH(0); + set_diskette_ret_status(0); + CLEAR_CF(); // successful + set_diskette_current_cyl(drive, 0); // current cylinder + return; + + case 0x01: // Read Diskette Status + CLEAR_CF(); + val8 = read_byte(0x0000, 0x0441); + SET_AH(val8); + if (val8) { + SET_CF(); + } + return; + + case 0x02: // Read Diskette Sectors + case 0x03: // Write Diskette Sectors + case 0x04: // Verify Diskette Sectors + num_sectors = GET_AL(); + track = GET_CH(); + sector = GET_CL(); + head = GET_DH(); + drive = GET_ELDL(); + + if ((drive > 1) || (head > 1) || (sector == 0) || + (num_sectors == 0) || (num_sectors > 72)) { + BX_INFO("int13_diskette: read/write/verify: parameter out of range\n"); + SET_AH(1); + set_diskette_ret_status(1); + SET_AL(0); // no sectors read + SET_CF(); // error occurred + return; + } + + // see if drive exists + if (floppy_drive_exists(drive) == 0) { + SET_AH(0x80); // not responding + set_diskette_ret_status(0x80); + SET_AL(0); // no sectors read + SET_CF(); // error occurred + return; + } + + // see if media in drive, and type is known + if (floppy_media_known(drive) == 0) { + if (floppy_media_sense(drive) == 0) { + SET_AH(0x0C); // Media type not found + set_diskette_ret_status(0x0C); + SET_AL(0); // no sectors read + SET_CF(); // error occurred + return; + } + } + + if (ah == 0x02) { + // Read Diskette Sectors + + //----------------------------------- + // set up DMA controller for transfer + //----------------------------------- + + // es:bx = pointer to where to place information from diskette + // port 04: DMA-1 base and current address, channel 2 + // port 05: DMA-1 base and current count, channel 2 + page = (ES >> 12); // upper 4 bits + base_es = (ES << 4); // lower 16bits contributed by ES + base_address = base_es + BX; // lower 16 bits of address + // contributed by ES:BX + if ( base_address < base_es ) { + // in case of carry, adjust page by 1 + page++; + } + base_count = (num_sectors * 512) - 1; + + // check for 64K boundary overrun + last_addr = base_address + base_count; + if (last_addr < base_address) { + SET_AH(0x09); + set_diskette_ret_status(0x09); + SET_AL(0); // no sectors read + SET_CF(); // error occurred + return; + } + + BX_DEBUG_INT13_FL("masking DMA-1 c2\n"); + outb(PORT_DMA1_MASK_REG, 0x06); + + BX_DEBUG_INT13_FL("clear flip-flop\n"); + outb(PORT_DMA1_CLEAR_FF_REG, 0x00); // clear flip-flop + outb(PORT_DMA_ADDR_2, base_address); + outb(PORT_DMA_ADDR_2, base_address>>8); + BX_DEBUG_INT13_FL("clear flip-flop\n"); + outb(PORT_DMA1_CLEAR_FF_REG, 0x00); // clear flip-flop + outb(PORT_DMA_CNT_2, base_count); + outb(PORT_DMA_CNT_2, base_count>>8); + + // port 0b: DMA-1 Mode Register + mode_register = 0x46; // single mode, increment, autoinit disable, + // transfer type=write, channel 2 + BX_DEBUG_INT13_FL("setting mode register\n"); + outb(PORT_DMA1_MODE_REG, mode_register); + + BX_DEBUG_INT13_FL("setting page register\n"); + // port 81: DMA-1 Page Register, channel 2 + outb(PORT_DMA_PAGE_2, page); + + BX_DEBUG_INT13_FL("unmask chan 2\n"); + outb(PORT_DMA1_MASK_REG, 0x02); // unmask channel 2 + + BX_DEBUG_INT13_FL("unmasking DMA-1 c2\n"); + outb(PORT_DMA1_MASK_REG, 0x02); + + //-------------------------------------- + // set up floppy controller for transfer + //-------------------------------------- + floppy_prepare_controller(drive); + + // send read-normal-data command (9 bytes) to controller + outb(PORT_FD_DATA, 0xe6); // e6: read normal data + outb(PORT_FD_DATA, (head << 2) | drive); // HD DR1 DR2 + outb(PORT_FD_DATA, track); + outb(PORT_FD_DATA, head); + outb(PORT_FD_DATA, sector); + outb(PORT_FD_DATA, 2); // 512 byte sector size + outb(PORT_FD_DATA, sector + num_sectors - 1); // last sector to read on track + outb(PORT_FD_DATA, 0); // Gap length + outb(PORT_FD_DATA, 0xff); // Gap length + + // turn on interrupts + ASM_START + sti + ASM_END + + // wait on 40:3e bit 7 to become 1 + do { + val8 = read_byte(0x0040, 0x0040); + if (val8 == 0) { + floppy_reset_controller(); + SET_AH(0x80); // drive not ready (timeout) + set_diskette_ret_status(0x80); + SET_AL(0); // no sectors read + SET_CF(); // error occurred + return; + } + val8 = (read_byte(0x0040, 0x003e) & 0x80); + } while ( val8 == 0 ); + + val8 = 0; // separate asm from while() loop + // turn off interrupts + ASM_START + cli + ASM_END + + // set 40:3e bit 7 to 0 + val8 = read_byte(0x0040, 0x003e); + val8 &= 0x7f; + write_byte(0x0040, 0x003e, val8); + + // check port 3f4 for accessibility to status bytes + val8 = inb(PORT_FD_STATUS); + if ( (val8 & 0xc0) != 0xc0 ) + BX_PANIC("int13_diskette: ctrl not ready\n"); + + // read 7 return status bytes from controller + // using loop index broken, have to unroll... + return_status[0] = inb(PORT_FD_DATA); + return_status[1] = inb(PORT_FD_DATA); + return_status[2] = inb(PORT_FD_DATA); + return_status[3] = inb(PORT_FD_DATA); + return_status[4] = inb(PORT_FD_DATA); + return_status[5] = inb(PORT_FD_DATA); + return_status[6] = inb(PORT_FD_DATA); + // record in BIOS Data Area + write_byte(0x0040, 0x0042, return_status[0]); + write_byte(0x0040, 0x0043, return_status[1]); + write_byte(0x0040, 0x0044, return_status[2]); + write_byte(0x0040, 0x0045, return_status[3]); + write_byte(0x0040, 0x0046, return_status[4]); + write_byte(0x0040, 0x0047, return_status[5]); + write_byte(0x0040, 0x0048, return_status[6]); + + if ( (return_status[0] & 0xc0) != 0 ) { + SET_AH(0x20); + set_diskette_ret_status(0x20); + SET_AL(0); // no sectors read + SET_CF(); // error occurred + return; + } + + // ??? should track be new val from return_status[3] ? + set_diskette_current_cyl(drive, track); + // AL = number of sectors read (same value as passed) + SET_AH(0x00); // success + CLEAR_CF(); // success + return; + } else if (ah == 0x03) { + // Write Diskette Sectors + + //----------------------------------- + // set up DMA controller for transfer + //----------------------------------- + + // es:bx = pointer to where to place information from diskette + // port 04: DMA-1 base and current address, channel 2 + // port 05: DMA-1 base and current count, channel 2 + page = (ES >> 12); // upper 4 bits + base_es = (ES << 4); // lower 16bits contributed by ES + base_address = base_es + BX; // lower 16 bits of address + // contributed by ES:BX + if ( base_address < base_es ) { + // in case of carry, adjust page by 1 + page++; + } + base_count = (num_sectors * 512) - 1; + + // check for 64K boundary overrun + last_addr = base_address + base_count; + if (last_addr < base_address) { + SET_AH(0x09); + set_diskette_ret_status(0x09); + SET_AL(0); // no sectors read + SET_CF(); // error occurred + return; + } + + BX_DEBUG_INT13_FL("masking DMA-1 c2\n"); + outb(PORT_DMA1_MASK_REG, 0x06); + + outb(PORT_DMA1_CLEAR_FF_REG, 0x00); // clear flip-flop + outb(PORT_DMA_ADDR_2, base_address); + outb(PORT_DMA_ADDR_2, base_address>>8); + outb(PORT_DMA1_CLEAR_FF_REG, 0x00); // clear flip-flop + outb(PORT_DMA_CNT_2, base_count); + outb(PORT_DMA_CNT_2, base_count>>8); + + // port 0b: DMA-1 Mode Register + mode_register = 0x4a; // single mode, increment, autoinit disable, + // transfer type=read, channel 2 + outb(PORT_DMA1_MODE_REG, mode_register); + + // port 81: DMA-1 Page Register, channel 2 + outb(PORT_DMA_PAGE_2, page); + + BX_DEBUG_INT13_FL("unmasking DMA-1 c2\n"); + outb(PORT_DMA1_MASK_REG, 0x02); + + //-------------------------------------- + // set up floppy controller for transfer + //-------------------------------------- + floppy_prepare_controller(drive); + + // send write-normal-data command (9 bytes) to controller + outb(PORT_FD_DATA, 0xc5); // c5: write normal data + outb(PORT_FD_DATA, (head << 2) | drive); // HD DR1 DR2 + outb(PORT_FD_DATA, track); + outb(PORT_FD_DATA, head); + outb(PORT_FD_DATA, sector); + outb(PORT_FD_DATA, 2); // 512 byte sector size + outb(PORT_FD_DATA, sector + num_sectors - 1); // last sector to write on track + outb(PORT_FD_DATA, 0); // Gap length + outb(PORT_FD_DATA, 0xff); // Gap length + + // turn on interrupts + ASM_START + sti + ASM_END + + // wait on 40:3e bit 7 to become 1 + do { + val8 = read_byte(0x0040, 0x0040); + if (val8 == 0) { + floppy_reset_controller(); + SET_AH(0x80); // drive not ready (timeout) + set_diskette_ret_status(0x80); + SET_AL(0); // no sectors written + SET_CF(); // error occurred + return; + } + val8 = (read_byte(0x0040, 0x003e) & 0x80); + } while ( val8 == 0 ); + + val8 = 0; // separate asm from while() loop + // turn off interrupts + ASM_START + cli + ASM_END + + // set 40:3e bit 7 to 0 + val8 = read_byte(0x0040, 0x003e); + val8 &= 0x7f; + write_byte(0x0040, 0x003e, val8); + + // check port 3f4 for accessibility to status bytes + val8 = inb(PORT_FD_STATUS); + if ( (val8 & 0xc0) != 0xc0 ) + BX_PANIC("int13_diskette: ctrl not ready\n"); + + // read 7 return status bytes from controller + // using loop index broken, have to unroll... + return_status[0] = inb(PORT_FD_DATA); + return_status[1] = inb(PORT_FD_DATA); + return_status[2] = inb(PORT_FD_DATA); + return_status[3] = inb(PORT_FD_DATA); + return_status[4] = inb(PORT_FD_DATA); + return_status[5] = inb(PORT_FD_DATA); + return_status[6] = inb(PORT_FD_DATA); + // record in BIOS Data Area + write_byte(0x0040, 0x0042, return_status[0]); + write_byte(0x0040, 0x0043, return_status[1]); + write_byte(0x0040, 0x0044, return_status[2]); + write_byte(0x0040, 0x0045, return_status[3]); + write_byte(0x0040, 0x0046, return_status[4]); + write_byte(0x0040, 0x0047, return_status[5]); + write_byte(0x0040, 0x0048, return_status[6]); + + if ( (return_status[0] & 0xc0) != 0 ) { + if ( (return_status[1] & 0x02) != 0 ) { + // diskette not writable. + // AH=status code=0x03 (tried to write on write-protected disk) + // AL=number of sectors written=0 + AX = 0x0300; + SET_CF(); + return; + } else { + BX_PANIC("int13_diskette_function: read error\n"); + } + } + + // ??? should track be new val from return_status[3] ? + set_diskette_current_cyl(drive, track); + // AL = number of sectors read (same value as passed) + SET_AH(0x00); // success + CLEAR_CF(); // success + return; + } else { // if (ah == 0x04) + // Verify Diskette Sectors + + // ??? should track be new val from return_status[3] ? + set_diskette_current_cyl(drive, track); + // AL = number of sectors verified (same value as passed) + CLEAR_CF(); // success + SET_AH(0x00); // success + return; + } + break; + + case 0x05: // format diskette track +BX_DEBUG_INT13_FL("floppy f05\n"); + + num_sectors = GET_AL(); + track = GET_CH(); + head = GET_DH(); + drive = GET_ELDL(); + + if ((drive > 1) || (head > 1) || (track > 79) || + (num_sectors == 0) || (num_sectors > 18)) { + SET_AH(1); + set_diskette_ret_status(1); + SET_CF(); // error occurred + } + + // see if drive exists + if (floppy_drive_exists(drive) == 0) { + SET_AH(0x80); // drive not responding + set_diskette_ret_status(0x80); + SET_CF(); // error occurred + return; + } + + // see if media in drive, and type is known + if (floppy_media_known(drive) == 0) { + if (floppy_media_sense(drive) == 0) { + SET_AH(0x0C); // Media type not found + set_diskette_ret_status(0x0C); + SET_AL(0); // no sectors read + SET_CF(); // error occurred + return; + } + } + + // set up DMA controller for transfer + page = (ES >> 12); // upper 4 bits + base_es = (ES << 4); // lower 16bits contributed by ES + base_address = base_es + BX; // lower 16 bits of address + // contributed by ES:BX + if ( base_address < base_es ) { + // in case of carry, adjust page by 1 + page++; + } + base_count = (num_sectors * 4) - 1; + + // check for 64K boundary overrun + last_addr = base_address + base_count; + if (last_addr < base_address) { + SET_AH(0x09); + set_diskette_ret_status(0x09); + SET_AL(0); // no sectors read + SET_CF(); // error occurred + return; + } + + outb(PORT_DMA1_MASK_REG, 0x06); + outb(PORT_DMA1_CLEAR_FF_REG, 0x00); // clear flip-flop + outb(PORT_DMA_ADDR_2, base_address); + outb(PORT_DMA_ADDR_2, base_address>>8); + outb(PORT_DMA1_CLEAR_FF_REG, 0x00); // clear flip-flop + outb(PORT_DMA_CNT_2, base_count); + outb(PORT_DMA_CNT_2, base_count>>8); + mode_register = 0x4a; // single mode, increment, autoinit disable, + // transfer type=read, channel 2 + outb(PORT_DMA1_MODE_REG, mode_register); + // port 81: DMA-1 Page Register, channel 2 + outb(PORT_DMA_PAGE_2, page); + outb(PORT_DMA1_MASK_REG, 0x02); + + // set up floppy controller for transfer + floppy_prepare_controller(drive); + + // send format-track command (6 bytes) to controller + outb(PORT_FD_DATA, 0x4d); // 4d: format track + outb(PORT_FD_DATA, (head << 2) | drive); // HD DR1 DR2 + outb(PORT_FD_DATA, 2); // 512 byte sector size + outb(PORT_FD_DATA, num_sectors); // number of sectors per track + outb(PORT_FD_DATA, 0); // Gap length + outb(PORT_FD_DATA, 0xf6); // Fill byte + // turn on interrupts + ASM_START + sti + ASM_END + + // wait on 40:3e bit 7 to become 1 + do { + val8 = read_byte(0x0040, 0x0040); + if (val8 == 0) { + floppy_reset_controller(); + SET_AH(0x80); // drive not ready (timeout) + set_diskette_ret_status(0x80); + SET_CF(); // error occurred + return; + } + val8 = (read_byte(0x0040, 0x003e) & 0x80); + } while ( val8 == 0 ); + + val8 = 0; // separate asm from while() loop + // turn off interrupts + ASM_START + cli + ASM_END + // set 40:3e bit 7 to 0 + val8 = read_byte(0x0040, 0x003e); + val8 &= 0x7f; + write_byte(0x0040, 0x003e, val8); + // check port 3f4 for accessibility to status bytes + val8 = inb(PORT_FD_STATUS); + if ( (val8 & 0xc0) != 0xc0 ) + BX_PANIC("int13_diskette: ctrl not ready\n"); + + // read 7 return status bytes from controller + // using loop index broken, have to unroll... + return_status[0] = inb(PORT_FD_DATA); + return_status[1] = inb(PORT_FD_DATA); + return_status[2] = inb(PORT_FD_DATA); + return_status[3] = inb(PORT_FD_DATA); + return_status[4] = inb(PORT_FD_DATA); + return_status[5] = inb(PORT_FD_DATA); + return_status[6] = inb(PORT_FD_DATA); + // record in BIOS Data Area + write_byte(0x0040, 0x0042, return_status[0]); + write_byte(0x0040, 0x0043, return_status[1]); + write_byte(0x0040, 0x0044, return_status[2]); + write_byte(0x0040, 0x0045, return_status[3]); + write_byte(0x0040, 0x0046, return_status[4]); + write_byte(0x0040, 0x0047, return_status[5]); + write_byte(0x0040, 0x0048, return_status[6]); + + if ( (return_status[0] & 0xc0) != 0 ) { + if ( (return_status[1] & 0x02) != 0 ) { + // diskette not writable. + // AH=status code=0x03 (tried to write on write-protected disk) + // AL=number of sectors written=0 + AX = 0x0300; + SET_CF(); + return; + } else { + BX_PANIC("int13_diskette_function: write error\n"); + } + } + + SET_AH(0); + set_diskette_ret_status(0); + set_diskette_current_cyl(drive, 0); + CLEAR_CF(); // successful + return; + + + case 0x08: // read diskette drive parameters +BX_DEBUG_INT13_FL("floppy f08\n"); + drive = GET_ELDL(); + + if (drive > 1) { + AX = 0; + BX = 0; + CX = 0; + DX = 0; + ES = 0; + DI = 0; + SET_DL(num_floppies); + SET_CF(); + return; + } + + drive_type = inb_cmos(0x10); + num_floppies = 0; + if (drive_type & 0xf0) + num_floppies++; + if (drive_type & 0x0f) + num_floppies++; + + if (drive == 0) + drive_type >>= 4; + else + drive_type &= 0x0f; + + SET_BH(0); + SET_BL(drive_type); + SET_AH(0); + SET_AL(0); + SET_DL(num_floppies); + + switch (drive_type) { + case 0: // none + CX = 0; + SET_DH(0); // max head # + break; + + case 1: // 360KB, 5.25" + CX = 0x2709; // 40 tracks, 9 sectors + SET_DH(1); // max head # + break; + + case 2: // 1.2MB, 5.25" + CX = 0x4f0f; // 80 tracks, 15 sectors + SET_DH(1); // max head # + break; + + case 3: // 720KB, 3.5" + CX = 0x4f09; // 80 tracks, 9 sectors + SET_DH(1); // max head # + break; + + case 4: // 1.44MB, 3.5" + CX = 0x4f12; // 80 tracks, 18 sectors + SET_DH(1); // max head # + break; + + case 5: // 2.88MB, 3.5" + CX = 0x4f24; // 80 tracks, 36 sectors + SET_DH(1); // max head # + break; + + case 6: // 160k, 5.25" + CX = 0x2708; // 40 tracks, 8 sectors + SET_DH(0); // max head # + break; + + case 7: // 180k, 5.25" + CX = 0x2709; // 40 tracks, 9 sectors + SET_DH(0); // max head # + break; + + case 8: // 320k, 5.25" + CX = 0x2708; // 40 tracks, 8 sectors + SET_DH(1); // max head # + break; + + default: // ? + BX_PANIC("floppy: int13: bad floppy type\n"); + } + + /* set es & di to point to 11 byte diskette param table in ROM */ +ASM_START + push bp + mov bp, sp + mov ax, #diskette_param_table2 + mov _int13_diskette_function.DI+2[bp], ax + mov _int13_diskette_function.ES+2[bp], cs + pop bp +ASM_END + CLEAR_CF(); // success + /* disk status not changed upon success */ + return; + + + case 0x15: // read diskette drive type +BX_DEBUG_INT13_FL("floppy f15\n"); + drive = GET_ELDL(); + if (drive > 1) { + SET_AH(0); // only 2 drives supported + // set_diskette_ret_status here ??? + SET_CF(); + return; + } + drive_type = inb_cmos(0x10); + + if (drive == 0) + drive_type >>= 4; + else + drive_type &= 0x0f; + CLEAR_CF(); // successful, not present + if (drive_type==0) { + SET_AH(0); // drive not present + } + else { + SET_AH(1); // drive present, does not support change line + } + + return; + + case 0x16: // get diskette change line status +BX_DEBUG_INT13_FL("floppy f16\n"); + drive = GET_ELDL(); + if (drive > 1) { + SET_AH(0x01); // invalid drive + set_diskette_ret_status(0x01); + SET_CF(); + return; + } + + SET_AH(0x06); // change line not supported + set_diskette_ret_status(0x06); + SET_CF(); + return; + + case 0x17: // set diskette type for format(old) +BX_DEBUG_INT13_FL("floppy f17\n"); + /* not used for 1.44M floppies */ + SET_AH(0x01); // not supported + set_diskette_ret_status(1); /* not supported */ + SET_CF(); + return; + + case 0x18: // set diskette type for format(new) +BX_DEBUG_INT13_FL("floppy f18\n"); + SET_AH(0x01); // do later + set_diskette_ret_status(1); + SET_CF(); + return; + + default: + BX_INFO("int13_diskette: unsupported AH=%02x\n", GET_AH()); + +// if ((ah==0x20) || ((ah>=0x41) && (ah<=0x49)) || (ah==0x4e)) { + SET_AH(0x01); // ??? + set_diskette_ret_status(1); + SET_CF(); + return; +// } + } +} +#else // #if BX_SUPPORT_FLOPPY + void +int13_diskette_function(DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS) + Bit16u DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS; +{ + Bit8u val8; + + switch (GET_AH()) { + + case 0x01: // Read Diskette Status + CLEAR_CF(); + val8 = read_byte(0x0000, 0x0441); + SET_AH(val8); + if (val8) { + SET_CF(); + } + return; + + default: + SET_CF(); + write_byte(0x0000, 0x0441, 0x01); + SET_AH(0x01); + } +} +#endif // #if BX_SUPPORT_FLOPPY + + void +set_diskette_ret_status(value) + Bit8u value; +{ + write_byte(0x0040, 0x0041, value); +} + + void +set_diskette_current_cyl(drive, cyl) + Bit8u drive; + Bit8u cyl; +{ + if (drive > 1) + BX_PANIC("set_diskette_current_cyl(): drive > 1\n"); + write_byte(0x0040, 0x0094+drive, cyl); +} + + void +determine_floppy_media(drive) + Bit16u drive; +{ +#if 0 + Bit8u val8, DOR, ctrl_info; + + ctrl_info = read_byte(0x0040, 0x008F); + if (drive==1) + ctrl_info >>= 4; + else + ctrl_info &= 0x0f; + +#if 0 + if (drive == 0) { + DOR = 0x1c; // DOR: drive0 motor on, DMA&int enabled, normal op, drive select 0 + } + else { + DOR = 0x2d; // DOR: drive1 motor on, DMA&int enabled, normal op, drive select 1 + } +#endif + + if ((ctrl_info & 0x04) != 0x04) { + // Drive not determined means no drive exists, done. + return; + } + +#if 0 + // check Main Status Register for readiness + val8 = inb(PORT_FD_STATUS) & 0x80; // Main Status Register + if (val8 != 0x80) + BX_PANIC("d_f_m: MRQ bit not set\n"); + + // change line + + // existing BDA values + + // turn on drive motor + outb(PORT_FD_DOR, DOR); // Digital Output Register + // +#endif + BX_PANIC("d_f_m: OK so far\n"); +#endif +} + + void +int17_function(regs, ds, iret_addr) + pusha_regs_t regs; // regs pushed from PUSHA instruction + Bit16u ds; // previous DS:, DS set to 0x0000 by asm wrapper + iret_addr_t iret_addr; // CS,IP,Flags pushed from original INT call +{ + Bit16u addr,timeout; + Bit8u val8; + + ASM_START + sti + ASM_END + + addr = read_word(0x0040, (regs.u.r16.dx << 1) + 8); + if ((regs.u.r8.ah < 3) && (regs.u.r16.dx < 3) && (addr > 0)) { + timeout = read_byte(0x0040, 0x0078 + regs.u.r16.dx) << 8; + if (regs.u.r8.ah == 0) { + outb(addr, regs.u.r8.al); + val8 = inb(addr+2); + outb(addr+2, val8 | 0x01); // send strobe + ASM_START + nop + ASM_END + outb(addr+2, val8 & ~0x01); + while (((inb(addr+1) & 0x40) == 0x40) && (timeout)) { + timeout--; + } + } + if (regs.u.r8.ah == 1) { + val8 = inb(addr+2); + outb(addr+2, val8 & ~0x04); // send init + ASM_START + nop + ASM_END + outb(addr+2, val8 | 0x04); + } + val8 = inb(addr+1); + regs.u.r8.ah = (val8 ^ 0x48); + if (!timeout) regs.u.r8.ah |= 0x01; + ClearCF(iret_addr.flags); + } else { + SetCF(iret_addr.flags); // Unsupported + } +} + +void +int19_function(seq_nr) +Bit16u seq_nr; +{ + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit16u bootdev; + Bit8u bootdrv; + Bit8u bootchk; + Bit16u bootseg; + Bit16u bootip; + Bit16u status; + Bit16u bootfirst; + + ipl_entry_t e; + + // if BX_ELTORITO_BOOT is not defined, old behavior + // check bit 5 in CMOS reg 0x2d. load either 0x00 or 0x80 into DL + // in preparation for the initial INT 13h (0=floppy A:, 0x80=C:) + // 0: system boot sequence, first drive C: then A: + // 1: system boot sequence, first drive A: then C: + // else BX_ELTORITO_BOOT is defined + // CMOS regs 0x3D and 0x38 contain the boot sequence: + // CMOS reg 0x3D & 0x0f : 1st boot device + // CMOS reg 0x3D & 0xf0 : 2nd boot device + // CMOS reg 0x38 & 0xf0 : 3rd boot device + // boot device codes: + // 0x00 : not defined + // 0x01 : first floppy + // 0x02 : first harddrive + // 0x03 : first cdrom + // 0x04 - 0x0f : PnP expansion ROMs (e.g. Etherboot) + // else : boot failure + + // Get the boot sequence +#if BX_ELTORITO_BOOT + bootdev = inb_cmos(0x3d); + bootdev |= ((inb_cmos(0x38) & 0xf0) << 4); + bootdev >>= 4 * seq_nr; + bootdev &= 0xf; + + /* Read user selected device */ + bootfirst = read_word(IPL_SEG, IPL_BOOTFIRST_OFFSET); + if (bootfirst != 0xFFFF) { + bootdev = bootfirst; + /* User selected device not set */ + write_word(IPL_SEG, IPL_BOOTFIRST_OFFSET, 0xFFFF); + /* Reset boot sequence */ + write_word(IPL_SEG, IPL_SEQUENCE_OFFSET, 0xFFFF); + } else if (bootdev == 0) BX_PANIC("No bootable device.\n"); + + /* Translate from CMOS runes to an IPL table offset by subtracting 1 */ + bootdev -= 1; +#else + if (seq_nr ==2) BX_PANIC("No more boot devices."); + if (!!(inb_cmos(0x2d) & 0x20) ^ (seq_nr == 1)) + /* Boot from floppy if the bit is set or it's the second boot */ + bootdev = 0x00; + else + bootdev = 0x01; +#endif + + /* Read the boot device from the IPL table */ + if (get_boot_vector(bootdev, &e) == 0) { + BX_INFO("Invalid boot device (0x%x)\n", bootdev); + return; + } + + /* Do the loading, and set up vector as a far pointer to the boot + * address, and bootdrv as the boot drive */ + print_boot_device(&e); + + switch(e.type) { + case IPL_TYPE_FLOPPY: /* FDD */ + case IPL_TYPE_HARDDISK: /* HDD */ + + bootdrv = (e.type == IPL_TYPE_HARDDISK) ? 0x80 : 0x00; + bootseg = 0x07c0; + status = 0; + +ASM_START + push bp + mov bp, sp + push ax + push bx + push cx + push dx + + mov dl, _int19_function.bootdrv + 2[bp] + mov ax, _int19_function.bootseg + 2[bp] + mov es, ax ;; segment + xor bx, bx ;; offset + mov ah, #0x02 ;; function 2, read diskette sector + mov al, #0x01 ;; read 1 sector + mov ch, #0x00 ;; track 0 + mov cl, #0x01 ;; sector 1 + mov dh, #0x00 ;; head 0 + int #0x13 ;; read sector + jnc int19_load_done + mov ax, #0x0001 + mov _int19_function.status + 2[bp], ax + +int19_load_done: + pop dx + pop cx + pop bx + pop ax + pop bp +ASM_END + + if (status != 0) { + print_boot_failure(e.type, 1); + return; + } + + /* Always check the signature on a HDD boot sector; on FDD, only do + * the check if the CMOS doesn't tell us to skip it */ + if ((e.type != IPL_TYPE_FLOPPY) || !((inb_cmos(0x38) & 0x01))) { + if (read_word(bootseg,0x1fe) != 0xaa55) { + print_boot_failure(e.type, 0); + return; + } + } + + /* Canonicalize bootseg:bootip */ + bootip = (bootseg & 0x0fff) << 4; + bootseg &= 0xf000; + break; + +#if BX_ELTORITO_BOOT + case IPL_TYPE_CDROM: /* CD-ROM */ + status = cdrom_boot(); + + // If failure + if ( (status & 0x00ff) !=0 ) { + print_cdromboot_failure(status); + print_boot_failure(e.type, 1); + return; + } + + bootdrv = (Bit8u)(status>>8); + bootseg = read_word(ebda_seg,&EbdaData->cdemu.load_segment); + bootip = 0; + break; +#endif + + case IPL_TYPE_BEV: /* Expansion ROM with a Bootstrap Entry Vector (a far pointer) */ + bootseg = e.vector >> 16; + bootip = e.vector & 0xffff; + break; + + default: return; + } + + /* Debugging info */ + BX_INFO("Booting from %x:%x\n", bootseg, bootip); + + /* Jump to the boot vector */ +ASM_START + mov bp, sp + push cs + push #int18_handler + ;; Build an iret stack frame that will take us to the boot vector. + ;; iret pops ip, then cs, then flags, so push them in the opposite order. + pushf + mov ax, _int19_function.bootseg + 0[bp] + push ax + mov ax, _int19_function.bootip + 0[bp] + push ax + ;; Set the magic number in ax and the boot drive in dl. + mov ax, #0xaa55 + mov dl, _int19_function.bootdrv + 0[bp] + ;; Zero some of the other registers. + xor bx, bx + mov ds, bx + mov es, bx + mov bp, bx + ;; Go! + iret +ASM_END +} + + void +int1a_function(regs, ds, iret_addr) + pusha_regs_t regs; // regs pushed from PUSHA instruction + Bit16u ds; // previous DS:, DS set to 0x0000 by asm wrapper + iret_addr_t iret_addr; // CS,IP,Flags pushed from original INT call +{ + Bit8u val8; + + BX_DEBUG_INT1A("int1a: AX=%04x BX=%04x CX=%04x DX=%04x DS=%04x\n", regs.u.r16.ax, regs.u.r16.bx, regs.u.r16.cx, regs.u.r16.dx, ds); + + ASM_START + sti + ASM_END + + switch (regs.u.r8.ah) { + case 0: // get current clock count + ASM_START + cli + ASM_END + regs.u.r16.cx = BiosData->ticks_high; + regs.u.r16.dx = BiosData->ticks_low; + regs.u.r8.al = BiosData->midnight_flag; + BiosData->midnight_flag = 0; // reset flag + ASM_START + sti + ASM_END + // AH already 0 + ClearCF(iret_addr.flags); // OK + break; + + case 1: // Set Current Clock Count + ASM_START + cli + ASM_END + BiosData->ticks_high = regs.u.r16.cx; + BiosData->ticks_low = regs.u.r16.dx; + BiosData->midnight_flag = 0; // reset flag + ASM_START + sti + ASM_END + regs.u.r8.ah = 0; + ClearCF(iret_addr.flags); // OK + break; + + + case 2: // Read CMOS Time + if (rtc_updating()) { + SetCF(iret_addr.flags); + break; + } + + regs.u.r8.dh = inb_cmos(0x00); // Seconds + regs.u.r8.cl = inb_cmos(0x02); // Minutes + regs.u.r8.ch = inb_cmos(0x04); // Hours + regs.u.r8.dl = inb_cmos(0x0b) & 0x01; // Stat Reg B + regs.u.r8.ah = 0; + regs.u.r8.al = regs.u.r8.ch; + ClearCF(iret_addr.flags); // OK + break; + + case 3: // Set CMOS Time + // Using a debugger, I notice the following masking/setting + // of bits in Status Register B, by setting Reg B to + // a few values and getting its value after INT 1A was called. + // + // try#1 try#2 try#3 + // before 1111 1101 0111 1101 0000 0000 + // after 0110 0010 0110 0010 0000 0010 + // + // Bit4 in try#1 flipped in hardware (forced low) due to bit7=1 + // My assumption: RegB = ((RegB & 01100000b) | 00000010b) + if (rtc_updating()) { + init_rtc(); + // fall through as if an update were not in progress + } + outb_cmos(0x00, regs.u.r8.dh); // Seconds + outb_cmos(0x02, regs.u.r8.cl); // Minutes + outb_cmos(0x04, regs.u.r8.ch); // Hours + // Set Daylight Savings time enabled bit to requested value + val8 = (inb_cmos(0x0b) & 0x60) | 0x02 | (regs.u.r8.dl & 0x01); + // (reg B already selected) + outb_cmos(0x0b, val8); + regs.u.r8.ah = 0; + regs.u.r8.al = val8; // val last written to Reg B + ClearCF(iret_addr.flags); // OK + break; + + case 4: // Read CMOS Date + regs.u.r8.ah = 0; + if (rtc_updating()) { + SetCF(iret_addr.flags); + break; + } + regs.u.r8.cl = inb_cmos(0x09); // Year + regs.u.r8.dh = inb_cmos(0x08); // Month + regs.u.r8.dl = inb_cmos(0x07); // Day of Month + regs.u.r8.ch = inb_cmos(0x32); // Century + regs.u.r8.al = regs.u.r8.ch; + ClearCF(iret_addr.flags); // OK + break; + + case 5: // Set CMOS Date + // Using a debugger, I notice the following masking/setting + // of bits in Status Register B, by setting Reg B to + // a few values and getting its value after INT 1A was called. + // + // try#1 try#2 try#3 try#4 + // before 1111 1101 0111 1101 0000 0010 0000 0000 + // after 0110 1101 0111 1101 0000 0010 0000 0000 + // + // Bit4 in try#1 flipped in hardware (forced low) due to bit7=1 + // My assumption: RegB = (RegB & 01111111b) + if (rtc_updating()) { + init_rtc(); + SetCF(iret_addr.flags); + break; + } + outb_cmos(0x09, regs.u.r8.cl); // Year + outb_cmos(0x08, regs.u.r8.dh); // Month + outb_cmos(0x07, regs.u.r8.dl); // Day of Month + outb_cmos(0x32, regs.u.r8.ch); // Century + val8 = inb_cmos(0x0b) & 0x7f; // clear halt-clock bit + outb_cmos(0x0b, val8); + regs.u.r8.ah = 0; + regs.u.r8.al = val8; // AL = val last written to Reg B + ClearCF(iret_addr.flags); // OK + break; + + case 6: // Set Alarm Time in CMOS + // Using a debugger, I notice the following masking/setting + // of bits in Status Register B, by setting Reg B to + // a few values and getting its value after INT 1A was called. + // + // try#1 try#2 try#3 + // before 1101 1111 0101 1111 0000 0000 + // after 0110 1111 0111 1111 0010 0000 + // + // Bit4 in try#1 flipped in hardware (forced low) due to bit7=1 + // My assumption: RegB = ((RegB & 01111111b) | 00100000b) + val8 = inb_cmos(0x0b); // Get Status Reg B + regs.u.r16.ax = 0; + if (val8 & 0x20) { + // Alarm interrupt enabled already + SetCF(iret_addr.flags); // Error: alarm in use + break; + } + if (rtc_updating()) { + init_rtc(); + // fall through as if an update were not in progress + } + outb_cmos(0x01, regs.u.r8.dh); // Seconds alarm + outb_cmos(0x03, regs.u.r8.cl); // Minutes alarm + outb_cmos(0x05, regs.u.r8.ch); // Hours alarm + outb(PORT_PIC2_DATA, inb(PORT_PIC2_DATA) & 0xfe); // enable IRQ 8 + // enable Status Reg B alarm bit, clear halt clock bit + outb_cmos(0x0b, (val8 & 0x7f) | 0x20); + ClearCF(iret_addr.flags); // OK + break; + + case 7: // Turn off Alarm + // Using a debugger, I notice the following masking/setting + // of bits in Status Register B, by setting Reg B to + // a few values and getting its value after INT 1A was called. + // + // try#1 try#2 try#3 try#4 + // before 1111 1101 0111 1101 0010 0000 0010 0010 + // after 0100 0101 0101 0101 0000 0000 0000 0010 + // + // Bit4 in try#1 flipped in hardware (forced low) due to bit7=1 + // My assumption: RegB = (RegB & 01010111b) + val8 = inb_cmos(0x0b); // Get Status Reg B + // clear clock-halt bit, disable alarm bit + outb_cmos(0x0b, val8 & 0x57); // disable alarm bit + regs.u.r8.ah = 0; + regs.u.r8.al = val8; // val last written to Reg B + ClearCF(iret_addr.flags); // OK + break; +#if BX_PCIBIOS + case 0xb1: + // real mode PCI BIOS functions now handled in assembler code + // this C code handles the error code for information only + if (regs.u.r8.bl == 0xff) { + BX_INFO("PCI BIOS: PCI not present\n"); + } else if (regs.u.r8.bl == 0x81) { + BX_INFO("unsupported PCI BIOS function 0x%02x\n", regs.u.r8.al); + } else if (regs.u.r8.bl == 0x83) { + BX_INFO("bad PCI vendor ID %04x\n", regs.u.r16.dx); + } else if (regs.u.r8.bl == 0x86) { + if (regs.u.r8.al == 0x02) { + BX_INFO("PCI device %04x:%04x not found at index %d\n", regs.u.r16.dx, regs.u.r16.cx, regs.u.r16.si); + } else { + BX_INFO("no PCI device with class code 0x%02x%04x found at index %d\n", regs.u.r8.cl, regs.u.r16.dx, regs.u.r16.si); + } + } + regs.u.r8.ah = regs.u.r8.bl; + SetCF(iret_addr.flags); + break; +#endif + + default: + SetCF(iret_addr.flags); // Unsupported + } +} + + void +int70_function(regs, ds, iret_addr) + pusha_regs_t regs; // regs pushed from PUSHA instruction + Bit16u ds; // previous DS:, DS set to 0x0000 by asm wrapper + iret_addr_t iret_addr; // CS,IP,Flags pushed from original INT call +{ + // INT 70h: IRQ 8 - CMOS RTC interrupt from periodic or alarm modes + Bit8u registerB = 0, registerC = 0; + + // Check which modes are enabled and have occurred. + registerB = inb_cmos( 0xB ); + registerC = inb_cmos( 0xC ); + + if( ( registerB & 0x60 ) != 0 ) { + if( ( registerC & 0x20 ) != 0 ) { + // Handle Alarm Interrupt. +ASM_START + sti + int #0x4a + cli +ASM_END + } + if( ( registerC & 0x40 ) != 0 ) { + // Handle Periodic Interrupt. + + if( read_byte( 0x40, 0xA0 ) != 0 ) { + // Wait Interval (Int 15, AH=83) active. + Bit32u time, toggle; + + time = read_dword( 0x40, 0x9C ); // Time left in microseconds. + if( time < 0x3D1 ) { + // Done waiting. + Bit16u segment, offset; + + segment = read_word( 0x40, 0x98 ); + offset = read_word( 0x40, 0x9A ); + write_byte( 0x40, 0xA0, 0 ); // Turn of status byte. + outb_cmos( 0xB, registerB & 0x37 ); // Clear the Periodic Interrupt. + write_byte(segment, offset, read_byte(segment, offset) | 0x80 ); // Write to specified flag byte. + } else { + // Continue waiting. + time -= 0x3D1; + write_dword( 0x40, 0x9C, time ); + } + } + } + } + +ASM_START + call eoi_both_pics +ASM_END +} + + +ASM_START +;------------------------------------------ +;- INT74h : PS/2 mouse hardware interrupt - +;------------------------------------------ +int74_handler: + sti + pusha + push ds ;; save DS + push #0x00 ;; placeholder for status + push #0x00 ;; placeholder for X + push #0x00 ;; placeholder for Y + push #0x00 ;; placeholder for Z + push #0x00 ;; placeholder for make_far_call boolean + call _int74_function + pop cx ;; remove make_far_call from stack + jcxz int74_done + + ;; make far call to EBDA:0022 + push #0x00 + pop ds + push 0x040E ;; push 0000:040E (opcodes 0xff, 0x36, 0x0E, 0x04) + pop ds + //CALL_EP(0x0022) ;; call far routine (call_Ep DS:0022 :opcodes 0xff, 0x1e, 0x22, 0x00) + call far ptr[0x22] +int74_done: + cli + call eoi_both_pics + add sp, #8 ;; pop status, x, y, z + + pop ds ;; restore DS + popa + iret + + +;; This will perform an IRET, but will retain value of current CF +;; by altering flags on stack. Better than RETF #02. +iret_modify_cf: + jc carry_set + push bp + mov bp, sp + and BYTE [bp + 0x06], #0xfe + pop bp + iret +carry_set: + push bp + mov bp, sp + or BYTE [bp + 0x06], #0x01 + pop bp + iret + + +;---------------------- +;- INT13h (relocated) - +;---------------------- +; +; int13_relocated is a little bit messed up since I played with it +; I have to rewrite it: +; - call a function that detect which function to call +; - make all called C function get the same parameters list +; +int13_relocated: + +#if BX_ELTORITO_BOOT + ;; check for an eltorito function + cmp ah,#0x4a + jb int13_not_eltorito + cmp ah,#0x4d + ja int13_not_eltorito + + pusha + push es + push ds + push ss + pop ds + + push #int13_out + jmp _int13_eltorito ;; ELDX not used + +int13_not_eltorito: + push ax + push bx + push cx + push dx + + ;; check if emulation active + call _cdemu_isactive + cmp al,#0x00 + je int13_cdemu_inactive + + ;; check if access to the emulated drive + call _cdemu_emulated_drive + pop dx + push dx + cmp al,dl ;; int13 on emulated drive + jne int13_nocdemu + + pop dx + pop cx + pop bx + pop ax + + pusha + push es + push ds + push ss + pop ds + + push #int13_out + jmp _int13_cdemu ;; ELDX not used + +int13_nocdemu: + and dl,#0xE0 ;; mask to get device class, including cdroms + cmp al,dl ;; al is 0x00 or 0x80 + jne int13_cdemu_inactive ;; inactive for device class + + pop dx + pop cx + pop bx + pop ax + + push ax + push cx + push dx + push bx + + dec dl ;; real drive is dl - 1 + jmp int13_legacy + +int13_cdemu_inactive: + pop dx + pop cx + pop bx + pop ax + +#endif // BX_ELTORITO_BOOT + +int13_noeltorito: + + push ax + push cx + push dx + push bx + +int13_legacy: + + push dx ;; push eltorito value of dx instead of sp + + push bp + push si + push di + + push es + push ds + push ss + pop ds + + ;; now the 16-bit registers can be restored with: + ;; pop ds; pop es; popa; iret + ;; arguments passed to functions should be + ;; DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS + + test dl, #0x80 + jnz int13_notfloppy + + push #int13_out + jmp _int13_diskette_function + +int13_notfloppy: + +#if BX_USE_ATADRV + + cmp dl, #0xE0 + jb int13_notcdrom + + // ebx is modified: BSD 5.2.1 boot loader problem + // someone should figure out which 32 bit register that actually are used + + shr ebx, #16 + push bx + + call _int13_cdrom + + pop bx + shl ebx, #16 + + jmp int13_out + +int13_notcdrom: + +#endif + +int13_disk: + ;; int13_harddisk modifies high word of EAX + shr eax, #16 + push ax + call _int13_harddisk + pop ax + shl eax, #16 + +int13_out: + pop ds + pop es + popa + iret + +;---------- +;- INT18h - +;---------- +int18_handler: ;; Boot Failure recovery: try the next device. + + ;; Reset SP and SS + mov ax, #0xfffe + mov sp, ax + xor ax, ax + mov ss, ax + + ;; Get the boot sequence number out of the IPL memory + mov bx, #IPL_SEG + mov ds, bx ;; Set segment + mov bx, IPL_SEQUENCE_OFFSET ;; BX is now the sequence number + inc bx ;; ++ + mov IPL_SEQUENCE_OFFSET, bx ;; Write it back + mov ds, ax ;; and reset the segment to zero. + + ;; Carry on in the INT 19h handler, using the new sequence number + push bx + + jmp int19_next_boot + +;---------- +;- INT19h - +;---------- +int19_relocated: ;; Boot function, relocated + + ;; int19 was beginning to be really complex, so now it + ;; just calls a C function that does the work + + push bp + mov bp, sp + + ;; Reset SS and SP + mov ax, #0xfffe + mov sp, ax + xor ax, ax + mov ss, ax + + ;; Start from the first boot device (0, in AX) + mov bx, #IPL_SEG + mov ds, bx ;; Set segment to write to the IPL memory + mov IPL_SEQUENCE_OFFSET, ax ;; Save the sequence number + mov ds, ax ;; and reset the segment. + + push ax + +int19_next_boot: + + ;; Call the C code for the next boot device + call _int19_function + + ;; Boot failed: invoke the boot recovery function + int #0x18 + +;---------- +;- INT1Ch - +;---------- +int1c_handler: ;; User Timer Tick + iret + + +;---------------------- +;- POST: Floppy Drive - +;---------------------- +floppy_drive_post: + xor ax, ax + mov ds, ax + + mov al, #0x00 + mov 0x043e, al ;; drive 0 & 1 uncalibrated, no interrupt has occurred + + mov 0x043f, al ;; diskette motor status: read op, drive0, motors off + + mov 0x0440, al ;; diskette motor timeout counter: not active + mov 0x0441, al ;; diskette controller status return code + + mov 0x0442, al ;; disk & diskette controller status register 0 + mov 0x0443, al ;; diskette controller status register 1 + mov 0x0444, al ;; diskette controller status register 2 + mov 0x0445, al ;; diskette controller cylinder number + mov 0x0446, al ;; diskette controller head number + mov 0x0447, al ;; diskette controller sector number + mov 0x0448, al ;; diskette controller bytes written + + mov 0x048b, al ;; diskette configuration data + + ;; ----------------------------------------------------------------- + ;; (048F) diskette controller information + ;; + mov al, #0x10 ;; get CMOS diskette drive type + out PORT_CMOS_INDEX, AL + in AL, PORT_CMOS_DATA + mov ah, al ;; save byte to AH + +look_drive0: + shr al, #4 ;; look at top 4 bits for drive 0 + jz f0_missing ;; jump if no drive0 + mov bl, #0x07 ;; drive0 determined, multi-rate, has changed line + jmp look_drive1 +f0_missing: + mov bl, #0x00 ;; no drive0 + +look_drive1: + mov al, ah ;; restore from AH + and al, #0x0f ;; look at bottom 4 bits for drive 1 + jz f1_missing ;; jump if no drive1 + or bl, #0x70 ;; drive1 determined, multi-rate, has changed line +f1_missing: + ;; leave high bits in BL zerod + mov 0x048f, bl ;; put new val in BDA (diskette controller information) + ;; ----------------------------------------------------------------- + + mov al, #0x00 + mov 0x0490, al ;; diskette 0 media state + mov 0x0491, al ;; diskette 1 media state + + ;; diskette 0,1 operational starting state + ;; drive type has not been determined, + ;; has no changed detection line + mov 0x0492, al + mov 0x0493, al + + mov 0x0494, al ;; diskette 0 current cylinder + mov 0x0495, al ;; diskette 1 current cylinder + + mov al, #0x02 + out PORT_DMA1_MASK_REG, al ;; clear DMA-1 channel 2 mask bit + + SET_INT_VECTOR(0x1E, #0xF000, #diskette_param_table2) + SET_INT_VECTOR(0x40, #0xF000, #int13_diskette) + SET_INT_VECTOR(0x0E, #0xF000, #int0e_handler) ;; IRQ 6 + + ret + + +;-------------------- +;- POST: HARD DRIVE - +;-------------------- +; relocated here because the primary POST area isnt big enough. +hard_drive_post: + // IRQ 14 = INT 76h + // INT 76h calls INT 15h function ax=9100 + + mov al, #0x0a ; 0000 1010 = reserved, disable IRQ 14 + mov dx, #0x03f6 + out dx, al + + xor ax, ax + mov ds, ax + mov 0x0474, al /* hard disk status of last operation */ + mov 0x0477, al /* hard disk port offset (XT only ???) */ + mov 0x048c, al /* hard disk status register */ + mov 0x048d, al /* hard disk error register */ + mov 0x048e, al /* hard disk task complete flag */ + mov al, #0x01 + mov 0x0475, al /* hard disk number attached */ + mov al, #0xc0 + mov 0x0476, al /* hard disk control byte */ + SET_INT_VECTOR(0x13, #0xF000, #int13_handler) + SET_INT_VECTOR(0x76, #0xF000, #int76_handler) + ;; INT 41h: hard disk 0 configuration pointer + ;; INT 46h: hard disk 1 configuration pointer + SET_INT_VECTOR(0x41, #EBDA_SEG, #0x003D) + SET_INT_VECTOR(0x46, #EBDA_SEG, #0x004D) + + ;; move disk geometry data from CMOS to EBDA disk parameter table(s) + mov al, #0x12 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + and al, #0xf0 + cmp al, #0xf0 + je post_d0_extended + jmp check_for_hd1 +post_d0_extended: + mov al, #0x19 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + cmp al, #47 ;; decimal 47 - user definable + je post_d0_type47 + HALT(__LINE__) +post_d0_type47: + ;; CMOS purpose param table offset + ;; 1b cylinders low 0 + ;; 1c cylinders high 1 + ;; 1d heads 2 + ;; 1e write pre-comp low 5 + ;; 1f write pre-comp high 6 + ;; 20 retries/bad map/heads>8 8 + ;; 21 landing zone low C + ;; 22 landing zone high D + ;; 23 sectors/track E + + mov ax, #EBDA_SEG + mov ds, ax + + ;;; Filling EBDA table for hard disk 0. + mov al, #0x1f + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov ah, al + mov al, #0x1e + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov (0x003d + 0x05), ax ;; write precomp word + + mov al, #0x20 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov (0x003d + 0x08), al ;; drive control byte + + mov al, #0x22 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov ah, al + mov al, #0x21 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov (0x003d + 0x0C), ax ;; landing zone word + + mov al, #0x1c ;; get cylinders word in AX + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA ;; high byte + mov ah, al + mov al, #0x1b + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA ;; low byte + mov bx, ax ;; BX = cylinders + + mov al, #0x1d + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov cl, al ;; CL = heads + + mov al, #0x23 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov dl, al ;; DL = sectors + + cmp bx, #1024 + jnbe hd0_post_logical_chs ;; if cylinders > 1024, use translated style CHS + +hd0_post_physical_chs: + ;; no logical CHS mapping used, just physical CHS + ;; use Standard Fixed Disk Parameter Table (FDPT) + mov (0x003d + 0x00), bx ;; number of physical cylinders + mov (0x003d + 0x02), cl ;; number of physical heads + mov (0x003d + 0x0E), dl ;; number of physical sectors + jmp check_for_hd1 + +hd0_post_logical_chs: + ;; complies with Phoenix style Translated Fixed Disk Parameter Table (FDPT) + mov (0x003d + 0x09), bx ;; number of physical cylinders + mov (0x003d + 0x0b), cl ;; number of physical heads + mov (0x003d + 0x04), dl ;; number of physical sectors + mov (0x003d + 0x0e), dl ;; number of logical sectors (same) + mov al, #0xa0 + mov (0x003d + 0x03), al ;; A0h signature, indicates translated table + + cmp bx, #2048 + jnbe hd0_post_above_2048 + ;; 1024 < c <= 2048 cylinders + shr bx, #0x01 + shl cl, #0x01 + jmp hd0_post_store_logical + +hd0_post_above_2048: + cmp bx, #4096 + jnbe hd0_post_above_4096 + ;; 2048 < c <= 4096 cylinders + shr bx, #0x02 + shl cl, #0x02 + jmp hd0_post_store_logical + +hd0_post_above_4096: + cmp bx, #8192 + jnbe hd0_post_above_8192 + ;; 4096 < c <= 8192 cylinders + shr bx, #0x03 + shl cl, #0x03 + jmp hd0_post_store_logical + +hd0_post_above_8192: + ;; 8192 < c <= 16384 cylinders + shr bx, #0x04 + shl cl, #0x04 + +hd0_post_store_logical: + mov (0x003d + 0x00), bx ;; number of physical cylinders + mov (0x003d + 0x02), cl ;; number of physical heads + ;; checksum + mov cl, #0x0f ;; repeat count + mov si, #0x003d ;; offset to disk0 FDPT + mov al, #0x00 ;; sum +hd0_post_checksum_loop: + add al, [si] + inc si + dec cl + jnz hd0_post_checksum_loop + not al ;; now take 2s complement + inc al + mov [si], al +;;; Done filling EBDA table for hard disk 0. + + +check_for_hd1: + ;; is there really a second hard disk? if not, return now + mov al, #0x12 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + and al, #0x0f + jnz post_d1_exists + ret +post_d1_exists: + ;; check that the hd type is really 0x0f. + cmp al, #0x0f + jz post_d1_extended + HALT(__LINE__) +post_d1_extended: + ;; check that the extended type is 47 - user definable + mov al, #0x1a + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + cmp al, #47 ;; decimal 47 - user definable + je post_d1_type47 + HALT(__LINE__) +post_d1_type47: + ;; Table for disk1. + ;; CMOS purpose param table offset + ;; 0x24 cylinders low 0 + ;; 0x25 cylinders high 1 + ;; 0x26 heads 2 + ;; 0x27 write pre-comp low 5 + ;; 0x28 write pre-comp high 6 + ;; 0x29 heads>8 8 + ;; 0x2a landing zone low C + ;; 0x2b landing zone high D + ;; 0x2c sectors/track E +;;; Fill EBDA table for hard disk 1. + mov ax, #EBDA_SEG + mov ds, ax + mov al, #0x28 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov ah, al + mov al, #0x27 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov (0x004d + 0x05), ax ;; write precomp word + + mov al, #0x29 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov (0x004d + 0x08), al ;; drive control byte + + mov al, #0x2b + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov ah, al + mov al, #0x2a + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov (0x004d + 0x0C), ax ;; landing zone word + + mov al, #0x25 ;; get cylinders word in AX + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA ;; high byte + mov ah, al + mov al, #0x24 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA ;; low byte + mov bx, ax ;; BX = cylinders + + mov al, #0x26 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov cl, al ;; CL = heads + + mov al, #0x2c + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov dl, al ;; DL = sectors + + cmp bx, #1024 + jnbe hd1_post_logical_chs ;; if cylinders > 1024, use translated style CHS + +hd1_post_physical_chs: + ;; no logical CHS mapping used, just physical CHS + ;; use Standard Fixed Disk Parameter Table (FDPT) + mov (0x004d + 0x00), bx ;; number of physical cylinders + mov (0x004d + 0x02), cl ;; number of physical heads + mov (0x004d + 0x0E), dl ;; number of physical sectors + ret + +hd1_post_logical_chs: + ;; complies with Phoenix style Translated Fixed Disk Parameter Table (FDPT) + mov (0x004d + 0x09), bx ;; number of physical cylinders + mov (0x004d + 0x0b), cl ;; number of physical heads + mov (0x004d + 0x04), dl ;; number of physical sectors + mov (0x004d + 0x0e), dl ;; number of logical sectors (same) + mov al, #0xa0 + mov (0x004d + 0x03), al ;; A0h signature, indicates translated table + + cmp bx, #2048 + jnbe hd1_post_above_2048 + ;; 1024 < c <= 2048 cylinders + shr bx, #0x01 + shl cl, #0x01 + jmp hd1_post_store_logical + +hd1_post_above_2048: + cmp bx, #4096 + jnbe hd1_post_above_4096 + ;; 2048 < c <= 4096 cylinders + shr bx, #0x02 + shl cl, #0x02 + jmp hd1_post_store_logical + +hd1_post_above_4096: + cmp bx, #8192 + jnbe hd1_post_above_8192 + ;; 4096 < c <= 8192 cylinders + shr bx, #0x03 + shl cl, #0x03 + jmp hd1_post_store_logical + +hd1_post_above_8192: + ;; 8192 < c <= 16384 cylinders + shr bx, #0x04 + shl cl, #0x04 + +hd1_post_store_logical: + mov (0x004d + 0x00), bx ;; number of physical cylinders + mov (0x004d + 0x02), cl ;; number of physical heads + ;; checksum + mov cl, #0x0f ;; repeat count + mov si, #0x004d ;; offset to disk0 FDPT + mov al, #0x00 ;; sum +hd1_post_checksum_loop: + add al, [si] + inc si + dec cl + jnz hd1_post_checksum_loop + not al ;; now take 2s complement + inc al + mov [si], al +;;; Done filling EBDA table for hard disk 1. + + ret + +;-------------------- +;- POST: EBDA segment +;-------------------- +; relocated here because the primary POST area isnt big enough. +ebda_post: +#if BX_USE_EBDA + mov ax, #EBDA_SEG + mov ds, ax + mov byte ptr [0x0], #EBDA_SIZE +#endif + xor ax, ax ; mov EBDA seg into 40E + mov ds, ax + mov word ptr [0x40E], #EBDA_SEG + ret;; + +;-------------------- +;- POST: EOI + jmp via [0x40:67) +;-------------------- +; relocated here because the primary POST area isnt big enough. +eoi_jmp_post: + mov al, #0x11 ; send initialisation commands + out PORT_PIC1_CMD, al + out PORT_PIC2_CMD, al + mov al, #0x08 + out PORT_PIC1_DATA, al + mov al, #0x70 + out PORT_PIC2_DATA, al + mov al, #0x04 + out PORT_PIC1_DATA, al + mov al, #0x02 + out PORT_PIC2_DATA, al + mov al, #0x01 + out PORT_PIC1_DATA, al + out PORT_PIC2_DATA, al + mov al, #0xb8 + out PORT_PIC1_DATA, AL ;master pic: unmask IRQ 0, 1, 2, 6 +#if BX_USE_PS2_MOUSE + mov al, #0x8f +#else + mov al, #0x9f +#endif + out PORT_PIC2_DATA, AL ;slave pic: unmask IRQ 12, 13, 14 + mov al, #0x20 + out PORT_PIC2_CMD, al ;; slave PIC EOI + mov al, #0x20 + out PORT_PIC1_CMD, al ;; master PIC EOI + +jmp_post_0x467: + xor ax, ax + mov ds, ax + + jmp far ptr [0x467] + +iret_post_0x467: + xor ax, ax + mov ds, ax + + mov sp, [0x467] + mov ss, [0x469] + iret + +retf_post_0x467: + xor ax, ax + mov ds, ax + + mov sp, [0x467] + mov ss, [0x469] + retf + +s3_post: + mov sp, #0xffe +#if BX_ROMBIOS32 + call rombios32_init +#endif + call _s3_resume + mov bl, #0x00 + and ax, ax + jz normal_post + call _s3_resume_panic + +;-------------------- +eoi_both_pics: + mov al, #0x20 + out PORT_PIC2_CMD, al ;; slave PIC EOI +eoi_master_pic: + mov al, #0x20 + out PORT_PIC1_CMD, al ;; master PIC EOI + ret + +;-------------------- +BcdToBin: + ;; in: AL in BCD format + ;; out: AL in binary format, AH will always be 0 + ;; trashes BX + mov bl, al + and bl, #0x0f ;; bl has low digit + shr al, #4 ;; al has high digit + mov bh, #10 + mul al, bh ;; multiply high digit by 10 (result in AX) + add al, bl ;; then add low digit + ret + +;-------------------- +timer_tick_post: + ;; Setup the Timer Ticks Count (0x46C:dword) and + ;; Timer Ticks Roller Flag (0x470:byte) + ;; The Timer Ticks Count needs to be set according to + ;; the current CMOS time, as if ticks have been occurring + ;; at 18.2hz since midnight up to this point. Calculating + ;; this is a little complicated. Here are the factors I gather + ;; regarding this. 14,318,180 hz was the original clock speed, + ;; chosen so it could be divided by either 3 to drive the 5Mhz CPU + ;; at the time, or 4 to drive the CGA video adapter. The div3 + ;; source was divided again by 4 to feed a 1.193Mhz signal to + ;; the timer. With a maximum 16bit timer count, this is again + ;; divided down by 65536 to 18.2hz. + ;; + ;; 14,318,180 Hz clock + ;; /3 = 4,772,726 Hz fed to original 5Mhz CPU + ;; /4 = 1,193,181 Hz fed to timer + ;; /65536 (maximum timer count) = 18.20650736 ticks/second + ;; 1 second = 18.20650736 ticks + ;; 1 minute = 1092.390442 ticks + ;; 1 hour = 65543.42651 ticks + ;; + ;; Given the values in the CMOS clock, one could calculate + ;; the number of ticks by the following: + ;; ticks = (BcdToBin(seconds) * 18.206507) + + ;; (BcdToBin(minutes) * 1092.3904) + ;; (BcdToBin(hours) * 65543.427) + ;; To get a little more accuracy, since Im using integer + ;; arithmetic, I use: + ;; ticks = (BcdToBin(seconds) * 18206507) / 1000000 + + ;; (BcdToBin(minutes) * 10923904) / 10000 + + ;; (BcdToBin(hours) * 65543427) / 1000 + + ;; assuming DS=0000 + + ;; get CMOS seconds + xor eax, eax ;; clear EAX + mov al, #0x00 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA ;; AL has CMOS seconds in BCD + call BcdToBin ;; EAX now has seconds in binary + mov edx, #18206507 + mul eax, edx + mov ebx, #1000000 + xor edx, edx + div eax, ebx + mov ecx, eax ;; ECX will accumulate total ticks + + ;; get CMOS minutes + xor eax, eax ;; clear EAX + mov al, #0x02 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA ;; AL has CMOS minutes in BCD + call BcdToBin ;; EAX now has minutes in binary + mov edx, #10923904 + mul eax, edx + mov ebx, #10000 + xor edx, edx + div eax, ebx + add ecx, eax ;; add to total ticks + + ;; get CMOS hours + xor eax, eax ;; clear EAX + mov al, #0x04 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA ;; AL has CMOS hours in BCD + call BcdToBin ;; EAX now has hours in binary + mov edx, #65543427 + mul eax, edx + mov ebx, #1000 + xor edx, edx + div eax, ebx + add ecx, eax ;; add to total ticks + + mov 0x46C, ecx ;; Timer Ticks Count + xor al, al + mov 0x470, al ;; Timer Ticks Rollover Flag + ret + +;-------------------- +int76_handler: + ;; record completion in BIOS task complete flag + push ax + push ds + mov ax, #0x0040 + mov ds, ax + mov 0x008E, #0xff + call eoi_both_pics + pop ds + pop ax + iret + + +;-------------------- +#if BX_APM + +use32 386 +#define APM_PROT32 +#include "apmbios.S" + +use16 386 +#define APM_PROT16 +#include "apmbios.S" + +#define APM_REAL +#include "apmbios.S" + +#endif + +;-------------------- +#if BX_PCIBIOS +use32 386 +.align 16 +bios32_structure: + db 0x5f, 0x33, 0x32, 0x5f ;; "_32_" signature + dw bios32_entry_point, 0xf ;; 32 bit physical address + db 0 ;; revision level + ;; length in paragraphs and checksum stored in a word to prevent errors + dw (~(((bios32_entry_point >> 8) + (bios32_entry_point & 0xff) + 0x32) \ + & 0xff) << 8) + 0x01 + db 0,0,0,0,0 ;; reserved + +.align 16 +bios32_entry_point: + pushfd + cmp eax, #0x49435024 ;; "$PCI" + jne unknown_service + mov eax, #0x80000000 + mov dx, #0x0cf8 + out dx, eax + mov dx, #0x0cfc + in eax, dx +#ifdef PCI_FIXED_HOST_BRIDGE + cmp eax, #PCI_FIXED_HOST_BRIDGE + jne unknown_service +#else + ;; say ok if a device is present + cmp eax, #0xffffffff + je unknown_service +#endif + mov ebx, #0x000f0000 + mov ecx, #0 + mov edx, #pcibios_protected + xor al, al + jmp bios32_end +unknown_service: + mov al, #0x80 +bios32_end: +#ifdef BX_QEMU + and dword ptr[esp+8],0xfffffffc ;; reset CS.RPL for kqemu +#endif + popfd + retf + +.align 16 +pcibios_protected: + pushfd + cli + push esi + push edi + cmp al, #0x01 ;; installation check + jne pci_pro_f02 + mov bx, #0x0210 + mov cx, #0 + mov edx, #0x20494350 ;; "PCI " + mov al, #0x01 + jmp pci_pro_ok +pci_pro_f02: ;; find pci device + cmp al, #0x02 + jne pci_pro_f03 + shl ecx, #16 + mov cx, dx + xor bx, bx + mov di, #0x00 +pci_pro_devloop: + call pci_pro_select_reg + mov dx, #0x0cfc + in eax, dx + cmp eax, ecx + jne pci_pro_nextdev + cmp si, #0 + je pci_pro_ok + dec si +pci_pro_nextdev: + inc bx + cmp bx, #0x0100 + jne pci_pro_devloop + mov ah, #0x86 + jmp pci_pro_fail +pci_pro_f03: ;; find class code + cmp al, #0x03 + jne pci_pro_f08 + xor bx, bx + mov di, #0x08 +pci_pro_devloop2: + call pci_pro_select_reg + mov dx, #0x0cfc + in eax, dx + shr eax, #8 + cmp eax, ecx + jne pci_pro_nextdev2 + cmp si, #0 + je pci_pro_ok + dec si +pci_pro_nextdev2: + inc bx + cmp bx, #0x0100 + jne pci_pro_devloop2 + mov ah, #0x86 + jmp pci_pro_fail +pci_pro_f08: ;; read configuration byte + cmp al, #0x08 + jne pci_pro_f09 + call pci_pro_select_reg + push edx + mov dx, di + and dx, #0x03 + add dx, #0x0cfc + in al, dx + pop edx + mov cl, al + jmp pci_pro_ok +pci_pro_f09: ;; read configuration word + cmp al, #0x09 + jne pci_pro_f0a + call pci_pro_select_reg + push edx + mov dx, di + and dx, #0x02 + add dx, #0x0cfc + in ax, dx + pop edx + mov cx, ax + jmp pci_pro_ok +pci_pro_f0a: ;; read configuration dword + cmp al, #0x0a + jne pci_pro_f0b + call pci_pro_select_reg + push edx + mov dx, #0x0cfc + in eax, dx + pop edx + mov ecx, eax + jmp pci_pro_ok +pci_pro_f0b: ;; write configuration byte + cmp al, #0x0b + jne pci_pro_f0c + call pci_pro_select_reg + push edx + mov dx, di + and dx, #0x03 + add dx, #0x0cfc + mov al, cl + out dx, al + pop edx + jmp pci_pro_ok +pci_pro_f0c: ;; write configuration word + cmp al, #0x0c + jne pci_pro_f0d + call pci_pro_select_reg + push edx + mov dx, di + and dx, #0x02 + add dx, #0x0cfc + mov ax, cx + out dx, ax + pop edx + jmp pci_pro_ok +pci_pro_f0d: ;; write configuration dword + cmp al, #0x0d + jne pci_pro_unknown + call pci_pro_select_reg + push edx + mov dx, #0x0cfc + mov eax, ecx + out dx, eax + pop edx + jmp pci_pro_ok +pci_pro_unknown: + mov ah, #0x81 +pci_pro_fail: + pop edi + pop esi +#ifdef BX_QEMU + and dword ptr[esp+8],0xfffffffc ;; reset CS.RPL for kqemu +#endif + popfd + stc + retf +pci_pro_ok: + xor ah, ah + pop edi + pop esi +#ifdef BX_QEMU + and dword ptr[esp+8],0xfffffffc ;; reset CS.RPL for kqemu +#endif + popfd + clc + retf + +pci_pro_select_reg: + push edx + mov eax, #0x800000 + mov ax, bx + shl eax, #8 + and di, #0xff + or ax, di + and al, #0xfc + mov dx, #0x0cf8 + out dx, eax + pop edx + ret + +use16 386 + +pcibios_real: + push eax + push dx + mov eax, #0x80000000 + mov dx, #0x0cf8 + out dx, eax + mov dx, #0x0cfc + in eax, dx +#ifdef PCI_FIXED_HOST_BRIDGE + cmp eax, #PCI_FIXED_HOST_BRIDGE + je pci_present +#else + ;; say ok if a device is present + cmp eax, #0xffffffff + jne pci_present +#endif + pop dx + pop eax + mov ah, #0xff + stc + ret +pci_present: + pop dx + pop eax + cmp al, #0x01 ;; installation check + jne pci_real_f02 + mov ax, #0x0001 + mov bx, #0x0210 + mov cx, #0 + mov edx, #0x20494350 ;; "PCI " + mov edi, #0xf0000 + mov di, #pcibios_protected + clc + ret +pci_real_f02: ;; find pci device + push esi + push edi + cmp al, #0x02 + jne pci_real_f03 + shl ecx, #16 + mov cx, dx + xor bx, bx + mov di, #0x00 +pci_real_devloop: + call pci_real_select_reg + mov dx, #0x0cfc + in eax, dx + cmp eax, ecx + jne pci_real_nextdev + cmp si, #0 + je pci_real_ok + dec si +pci_real_nextdev: + inc bx + cmp bx, #0x0100 + jne pci_real_devloop + mov dx, cx + shr ecx, #16 + mov ax, #0x8602 + jmp pci_real_fail +pci_real_f03: ;; find class code + cmp al, #0x03 + jne pci_real_f08 + xor bx, bx + mov di, #0x08 +pci_real_devloop2: + call pci_real_select_reg + mov dx, #0x0cfc + in eax, dx + shr eax, #8 + cmp eax, ecx + jne pci_real_nextdev2 + cmp si, #0 + je pci_real_ok + dec si +pci_real_nextdev2: + inc bx + cmp bx, #0x0100 + jne pci_real_devloop2 + mov dx, cx + shr ecx, #16 + mov ax, #0x8603 + jmp pci_real_fail +pci_real_f08: ;; read configuration byte + cmp al, #0x08 + jne pci_real_f09 + call pci_real_select_reg + push dx + mov dx, di + and dx, #0x03 + add dx, #0x0cfc + in al, dx + pop dx + mov cl, al + jmp pci_real_ok +pci_real_f09: ;; read configuration word + cmp al, #0x09 + jne pci_real_f0a + call pci_real_select_reg + push dx + mov dx, di + and dx, #0x02 + add dx, #0x0cfc + in ax, dx + pop dx + mov cx, ax + jmp pci_real_ok +pci_real_f0a: ;; read configuration dword + cmp al, #0x0a + jne pci_real_f0b + call pci_real_select_reg + push dx + mov dx, #0x0cfc + in eax, dx + pop dx + mov ecx, eax + jmp pci_real_ok +pci_real_f0b: ;; write configuration byte + cmp al, #0x0b + jne pci_real_f0c + call pci_real_select_reg + push dx + mov dx, di + and dx, #0x03 + add dx, #0x0cfc + mov al, cl + out dx, al + pop dx + jmp pci_real_ok +pci_real_f0c: ;; write configuration word + cmp al, #0x0c + jne pci_real_f0d + call pci_real_select_reg + push dx + mov dx, di + and dx, #0x02 + add dx, #0x0cfc + mov ax, cx + out dx, ax + pop dx + jmp pci_real_ok +pci_real_f0d: ;; write configuration dword + cmp al, #0x0d + jne pci_real_f0e + call pci_real_select_reg + push dx + mov dx, #0x0cfc + mov eax, ecx + out dx, eax + pop dx + jmp pci_real_ok +pci_real_f0e: ;; get irq routing options + cmp al, #0x0e + jne pci_real_unknown + SEG ES + cmp word ptr [di], #pci_routing_table_structure_end - pci_routing_table_structure_start + jb pci_real_too_small + SEG ES + mov word ptr [di], #pci_routing_table_structure_end - pci_routing_table_structure_start + pushf + push ds + push es + push cx + push si + push di + cld + mov si, #pci_routing_table_structure_start + push cs + pop ds + SEG ES + mov cx, [di+2] + SEG ES + mov es, [di+4] + mov di, cx + mov cx, #pci_routing_table_structure_end - pci_routing_table_structure_start + rep + movsb + pop di + pop si + pop cx + pop es + pop ds + popf + mov bx, #(1 << 9) | (1 << 11) ;; irq 9 and 11 are used + jmp pci_real_ok +pci_real_too_small: + SEG ES + mov word ptr [di], #pci_routing_table_structure_end - pci_routing_table_structure_start + mov ah, #0x89 + jmp pci_real_fail + +pci_real_unknown: + mov ah, #0x81 +pci_real_fail: + pop edi + pop esi + stc + ret +pci_real_ok: + xor ah, ah + pop edi + pop esi + clc + ret + +pci_real_select_reg: + push dx + mov eax, #0x800000 + mov ax, bx + shl eax, #8 + and di, #0xff + or ax, di + and al, #0xfc + mov dx, #0x0cf8 + out dx, eax + pop dx + ret + +.align 16 +pci_routing_table_structure: + db 0x24, 0x50, 0x49, 0x52 ;; "$PIR" signature + db 0, 1 ;; version + dw 32 + (6 * 16) ;; table size + db 0 ;; PCI interrupt router bus + db 0x08 ;; PCI interrupt router DevFunc + dw 0x0000 ;; PCI exclusive IRQs + dw 0x8086 ;; compatible PCI interrupt router vendor ID + dw 0x122e ;; compatible PCI interrupt router device ID + dw 0,0 ;; Miniport data + db 0,0,0,0,0,0,0,0,0,0,0 ;; reserved + db 0x37 ;; checksum +pci_routing_table_structure_start: + ;; first slot entry PCI-to-ISA (embedded) + db 0 ;; pci bus number + db 0x08 ;; pci device number (bit 7-3) + db 0x60 ;; link value INTA#: pointer into PCI2ISA config space + dw 0xdef8 ;; IRQ bitmap INTA# + db 0x61 ;; link value INTB# + dw 0xdef8 ;; IRQ bitmap INTB# + db 0x62 ;; link value INTC# + dw 0xdef8 ;; IRQ bitmap INTC# + db 0x63 ;; link value INTD# + dw 0xdef8 ;; IRQ bitmap INTD# + db 0 ;; physical slot (0 = embedded) + db 0 ;; reserved + ;; second slot entry: 1st PCI slot + db 0 ;; pci bus number + db 0x10 ;; pci device number (bit 7-3) + db 0x61 ;; link value INTA# + dw 0xdef8 ;; IRQ bitmap INTA# + db 0x62 ;; link value INTB# + dw 0xdef8 ;; IRQ bitmap INTB# + db 0x63 ;; link value INTC# + dw 0xdef8 ;; IRQ bitmap INTC# + db 0x60 ;; link value INTD# + dw 0xdef8 ;; IRQ bitmap INTD# + db 1 ;; physical slot (0 = embedded) + db 0 ;; reserved + ;; third slot entry: 2nd PCI slot + db 0 ;; pci bus number + db 0x18 ;; pci device number (bit 7-3) + db 0x62 ;; link value INTA# + dw 0xdef8 ;; IRQ bitmap INTA# + db 0x63 ;; link value INTB# + dw 0xdef8 ;; IRQ bitmap INTB# + db 0x60 ;; link value INTC# + dw 0xdef8 ;; IRQ bitmap INTC# + db 0x61 ;; link value INTD# + dw 0xdef8 ;; IRQ bitmap INTD# + db 2 ;; physical slot (0 = embedded) + db 0 ;; reserved + ;; 4th slot entry: 3rd PCI slot + db 0 ;; pci bus number + db 0x20 ;; pci device number (bit 7-3) + db 0x63 ;; link value INTA# + dw 0xdef8 ;; IRQ bitmap INTA# + db 0x60 ;; link value INTB# + dw 0xdef8 ;; IRQ bitmap INTB# + db 0x61 ;; link value INTC# + dw 0xdef8 ;; IRQ bitmap INTC# + db 0x62 ;; link value INTD# + dw 0xdef8 ;; IRQ bitmap INTD# + db 3 ;; physical slot (0 = embedded) + db 0 ;; reserved + ;; 5th slot entry: 4rd PCI slot + db 0 ;; pci bus number + db 0x28 ;; pci device number (bit 7-3) + db 0x60 ;; link value INTA# + dw 0xdef8 ;; IRQ bitmap INTA# + db 0x61 ;; link value INTB# + dw 0xdef8 ;; IRQ bitmap INTB# + db 0x62 ;; link value INTC# + dw 0xdef8 ;; IRQ bitmap INTC# + db 0x63 ;; link value INTD# + dw 0xdef8 ;; IRQ bitmap INTD# + db 4 ;; physical slot (0 = embedded) + db 0 ;; reserved + ;; 6th slot entry: 5rd PCI slot + db 0 ;; pci bus number + db 0x30 ;; pci device number (bit 7-3) + db 0x61 ;; link value INTA# + dw 0xdef8 ;; IRQ bitmap INTA# + db 0x62 ;; link value INTB# + dw 0xdef8 ;; IRQ bitmap INTB# + db 0x63 ;; link value INTC# + dw 0xdef8 ;; IRQ bitmap INTC# + db 0x60 ;; link value INTD# + dw 0xdef8 ;; IRQ bitmap INTD# + db 5 ;; physical slot (0 = embedded) + db 0 ;; reserved +pci_routing_table_structure_end: + +#if !BX_ROMBIOS32 +pci_irq_list: + db 11, 10, 9, 5; + +pcibios_init_sel_reg: + push eax + mov eax, #0x800000 + mov ax, bx + shl eax, #8 + and dl, #0xfc + or al, dl + mov dx, #0x0cf8 + out dx, eax + pop eax + ret + +pcibios_init_iomem_bases: + push bp + mov bp, sp + mov eax, #0xc0000000 ;; base for memory init + push eax + mov ax, #0xc000 ;; base for i/o init + push ax + mov ax, #0x0010 ;; start at base address #0 + push ax + mov bx, #0x0008 +pci_init_io_loop1: + mov dl, #0x00 + call pcibios_init_sel_reg + mov dx, #0x0cfc + in ax, dx + cmp ax, #0xffff + jz next_pci_dev + mov dl, #0x04 ;; disable i/o and memory space access + call pcibios_init_sel_reg + mov dx, #0x0cfc + in al, dx + and al, #0xfc + out dx, al +pci_init_io_loop2: + mov dl, [bp-8] + call pcibios_init_sel_reg + mov dx, #0x0cfc + in eax, dx + test al, #0x01 + jnz init_io_base + mov ecx, eax + mov eax, #0xffffffff + out dx, eax + in eax, dx + cmp eax, ecx + je next_pci_base + xor eax, #0xffffffff + mov ecx, eax + mov eax, [bp-4] + out dx, eax + add eax, ecx ;; calculate next free mem base + add eax, #0x01000000 + and eax, #0xff000000 + mov [bp-4], eax + jmp next_pci_base +init_io_base: + mov cx, ax + mov ax, #0xffff + out dx, ax + in ax, dx + cmp ax, cx + je next_pci_base + xor ax, #0xfffe + mov cx, ax + mov ax, [bp-6] + out dx, ax + add ax, cx ;; calculate next free i/o base + add ax, #0x0100 + and ax, #0xff00 + mov [bp-6], ax +next_pci_base: + mov al, [bp-8] + add al, #0x04 + cmp al, #0x28 + je enable_iomem_space + mov byte ptr[bp-8], al + jmp pci_init_io_loop2 +enable_iomem_space: + mov dl, #0x04 ;; enable i/o and memory space access if available + call pcibios_init_sel_reg + mov dx, #0x0cfc + in al, dx + or al, #0x07 + out dx, al +next_pci_dev: + mov byte ptr[bp-8], #0x10 + inc bx + cmp bx, #0x0100 + jne pci_init_io_loop1 + mov sp, bp + pop bp + ret + +pcibios_init_set_elcr: + push ax + push cx + mov dx, #0x04d0 + test al, #0x08 + jz is_master_pic + inc dx + and al, #0x07 +is_master_pic: + mov cl, al + mov bl, #0x01 + shl bl, cl + in al, dx + or al, bl + out dx, al + pop cx + pop ax + ret + +pcibios_init_irqs: + push ds + push bp + mov ax, #0xf000 + mov ds, ax + mov dx, #0x04d0 ;; reset ELCR1 + ELCR2 + mov al, #0x00 + out dx, al + inc dx + out dx, al + mov si, #pci_routing_table_structure + mov bh, [si+8] + mov bl, [si+9] + mov dl, #0x00 + call pcibios_init_sel_reg + mov dx, #0x0cfc + in ax, dx + cmp ax, [si+12] ;; check irq router + jne pci_init_end + mov dl, [si+34] + call pcibios_init_sel_reg + push bx ;; save irq router bus + devfunc + mov dx, #0x0cfc + mov ax, #0x8080 + out dx, ax ;; reset PIRQ route control + add dx, #2 + out dx, ax + mov ax, [si+6] + sub ax, #0x20 + shr ax, #4 + mov cx, ax + add si, #0x20 ;; set pointer to 1st entry + mov bp, sp + mov ax, #pci_irq_list + push ax + xor ax, ax + push ax +pci_init_irq_loop1: + mov bh, [si] + mov bl, [si+1] +pci_init_irq_loop2: + mov dl, #0x00 + call pcibios_init_sel_reg + mov dx, #0x0cfc + in ax, dx + cmp ax, #0xffff + jnz pci_test_int_pin + test bl, #0x07 + jz next_pir_entry + jmp next_pci_func +pci_test_int_pin: + mov dl, #0x3c + call pcibios_init_sel_reg + mov dx, #0x0cfd + in al, dx + and al, #0x07 + jz next_pci_func + dec al ;; determine pirq reg + mov dl, #0x03 + mul al, dl + add al, #0x02 + xor ah, ah + mov bx, ax + mov al, [si+bx] + mov dl, al + mov bx, [bp] + call pcibios_init_sel_reg + mov dx, #0x0cfc + and al, #0x03 + add dl, al + in al, dx + cmp al, #0x80 + jb pirq_found + mov bx, [bp-2] ;; pci irq list pointer + mov al, [bx] + out dx, al + inc bx + mov [bp-2], bx + call pcibios_init_set_elcr +pirq_found: + mov bh, [si] + mov bl, [si+1] + add bl, [bp-3] ;; pci function number + mov dl, #0x3c + call pcibios_init_sel_reg + mov dx, #0x0cfc + out dx, al +next_pci_func: + inc byte ptr[bp-3] + inc bl + test bl, #0x07 + jnz pci_init_irq_loop2 +next_pir_entry: + add si, #0x10 + mov byte ptr[bp-3], #0x00 + loop pci_init_irq_loop1 + mov sp, bp + pop bx +pci_init_end: + pop bp + pop ds + ret +#endif // !BX_ROMBIOS32 +#endif // BX_PCIBIOS + +#if BX_ROMBIOS32 +rombios32_init: + ;; save a20 and enable it + in al, PORT_A20 + push ax + or al, #0x02 + out PORT_A20, al + + ;; save SS:SP to the BDA + xor ax, ax + mov ds, ax + mov 0x0469, ss + mov 0x0467, sp + + SEG CS + lidt [pmode_IDT_info] + SEG CS + lgdt [rombios32_gdt_48] + ;; set PE bit in CR0 + mov eax, cr0 + or al, #0x01 + mov cr0, eax + ;; start protected mode code: ljmpl 0x10:rombios32_init1 + db 0x66, 0xea + dw rombios32_05 + dw 0x000f ;; high 16 bit address + dw 0x0010 + +use32 386 +rombios32_05: + ;; init data segments + mov eax, #0x18 + mov ds, ax + mov es, ax + mov ss, ax + xor eax, eax + mov fs, ax + mov gs, ax + cld + + ;; init the stack pointer to point below EBDA + mov ax, [0x040e] + shl eax, #4 + mov esp, #-0x10 + add esp, eax + + ;; pass pointer to s3_resume_flag and s3_resume_vector to rombios32 + push #0x04b0 + push #0x04b2 + + ;; call rombios32 code + mov eax, #0x000e0000 + call eax + + ;; return to 16 bit protected mode first + db 0xea + dd rombios32_10 + dw 0x20 + +use16 386 +rombios32_10: + ;; restore data segment limits to 0xffff + mov ax, #0x28 + mov ds, ax + mov es, ax + mov ss, ax + mov fs, ax + mov gs, ax + + ;; reset PE bit in CR0 + mov eax, cr0 + and al, #0xFE + mov cr0, eax + + ;; far jump to flush CPU queue after transition to real mode + JMP_AP(0xf000, rombios32_real_mode) + +rombios32_real_mode: + ;; restore IDT to normal real-mode defaults + SEG CS + lidt [rmode_IDT_info] + + xor ax, ax + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + + ;; restore SS:SP from the BDA + mov ss, 0x0469 + xor esp, esp + mov sp, 0x0467 + ;; restore a20 + pop ax + out PORT_A20, al + ret + +rombios32_gdt_48: + dw 0x30 + dw rombios32_gdt + dw 0x000f + +rombios32_gdt: + dw 0, 0, 0, 0 + dw 0, 0, 0, 0 + dw 0xffff, 0, 0x9b00, 0x00cf ; 32 bit flat code segment (0x10) + dw 0xffff, 0, 0x9300, 0x00cf ; 32 bit flat data segment (0x18) + dw 0xffff, 0, 0x9b0f, 0x0000 ; 16 bit code segment base=0xf0000 limit=0xffff + dw 0xffff, 0, 0x9300, 0x0000 ; 16 bit data segment base=0x0 limit=0xffff +#endif // BX_ROMBIOS32 + + +; parallel port detection: base address in DX, index in BX, timeout in CL +detect_parport: + push dx + add dx, #2 + in al, dx + and al, #0xdf ; clear input mode + out dx, al + pop dx + mov al, #0xaa + out dx, al + in al, dx + cmp al, #0xaa + jne no_parport + push bx + shl bx, #1 + mov [bx+0x408], dx ; Parallel I/O address + pop bx + mov [bx+0x478], cl ; Parallel printer timeout + inc bx +no_parport: + ret + +; serial port detection: base address in DX, index in BX, timeout in CL +detect_serial: + push dx + inc dx + mov al, #0x02 + out dx, al + in al, dx + cmp al, #0x02 + jne no_serial + inc dx + in al, dx + cmp al, #0x02 + jne no_serial + dec dx + xor al, al + out dx, al + pop dx + push bx + shl bx, #1 + mov [bx+0x400], dx ; Serial I/O address + pop bx + mov [bx+0x47c], cl ; Serial timeout + inc bx + ret +no_serial: + pop dx + ret + +rom_checksum: + pusha + push ds + + xor ax, ax + xor bx, bx + xor cx, cx + xor dx, dx + + mov ch, [2] + shl cx, #1 + + jnc checksum_loop + jz checksum_loop + xchg dx, cx + dec cx + +checksum_loop: + add al, [bx] + inc bx + loop checksum_loop + + test dx, dx + je checksum_out + + add al, [bx] + mov cx, dx + mov dx, ds + add dh, #0x10 + mov ds, dx + xor dx, dx + xor bx, bx + + jmp checksum_loop + +checksum_out: + and al, #0xff + pop ds + popa + ret + + +.align 16 +#if !BX_PNPBIOS +;; Make sure the pnpbios structure is *not* aligned, so OSes will not see it if +;; they scan. + db 0 +#endif +pnpbios_structure: + .ascii "$PnP" + db 0x10 ;; version + db 0x21 ;; length + dw 0x0 ;; control field + db 0xd1 ;; checksum + dd 0xf0000 ;; event notification flag address + dw pnpbios_real ;; real mode 16 bit offset + dw 0xf000 ;; real mode 16 bit segment + dw pnpbios_prot ;; 16 bit protected mode offset + dd 0xf0000 ;; 16 bit protected mode segment base + dd 0x0 ;; OEM device identifier + dw 0xf000 ;; real mode 16 bit data segment + dd 0xf0000 ;; 16 bit protected mode segment base + +pnpbios_prot: + push ebp + mov ebp, esp + jmp pnpbios_code +pnpbios_real: + push ebp + movzx ebp, sp +pnpbios_code: + mov ax, 8[ebp] + cmp ax, #0x60 ;; Get Version and Installation Check + jnz pnpbios_fail + push ds + push di + mov ds, 12[bp] + mov di, 10[bp] + mov ax, #0x0101 + mov [di], ax + pop di + pop ds + xor ax, ax ;; SUCCESS + jmp pnpbios_exit +pnpbios_fail: + mov ax, #0x82 ;; FUNCTION_NOT_SUPPORTED +pnpbios_exit: + pop ebp + retf + +rom_scan: + ;; Scan for existence of valid expansion ROMS. + ;; Video ROM: from 0xC0000..0xC7FFF in 2k increments + ;; General ROM: from 0xC8000..0xDFFFF in 2k increments + ;; System ROM: only 0xE0000 + ;; + ;; Header: + ;; Offset Value + ;; 0 0x55 + ;; 1 0xAA + ;; 2 ROM length in 512-byte blocks + ;; 3 ROM initialization entry point (FAR CALL) + +rom_scan_loop: + push ax ;; Save AX + mov ds, cx + mov ax, #0x0004 ;; start with increment of 4 (512-byte) blocks = 2k + cmp [0], #0xAA55 ;; look for signature + jne rom_scan_increment + call rom_checksum + jnz rom_scan_increment + mov al, [2] ;; change increment to ROM length in 512-byte blocks + + ;; We want our increment in 512-byte quantities, rounded to + ;; the nearest 2k quantity, since we only scan at 2k intervals. + test al, #0x03 + jz block_count_rounded + and al, #0xfc ;; needs rounding up + add al, #0x04 +block_count_rounded: + + xor bx, bx ;; Restore DS back to 0000: + mov ds, bx + push ax ;; Save AX + push di ;; Save DI + ;; Push addr of ROM entry point + push cx ;; Push seg + push #0x0003 ;; Push offset + + ;; Point ES:DI at "$PnP", which tells the ROM that we are a PnP BIOS. + ;; That should stop it grabbing INT 19h; we will use its BEV instead. + mov ax, #0xf000 + mov es, ax + lea di, pnpbios_structure + + mov bp, sp ;; Call ROM init routine using seg:off on stack + db 0xff ;; call_far ss:[bp+0] + db 0x5e + db 0 + cli ;; In case expansion ROM BIOS turns IF on + add sp, #2 ;; Pop offset value + pop cx ;; Pop seg value (restore CX) + + ;; Look at the ROM's PnP Expansion header. Properly, we're supposed + ;; to init all the ROMs and then go back and build an IPL table of + ;; all the bootable devices, but we can get away with one pass. + mov ds, cx ;; ROM base + mov bx, 0x001a ;; 0x1A is the offset into ROM header that contains... + mov ax, [bx] ;; the offset of PnP expansion header, where... + cmp ax, #0x5024 ;; we look for signature "$PnP" + jne no_bev + mov ax, 2[bx] + cmp ax, #0x506e + jne no_bev + + mov ax, 0x16[bx] ;; 0x16 is the offset of Boot Connection Vector + cmp ax, #0x0000 + je no_bcv + + ;; Option ROM has BCV. Run it now. + push cx ;; Push seg + push ax ;; Push offset + + ;; Point ES:DI at "$PnP", which tells the ROM that we are a PnP BIOS. + mov bx, #0xf000 + mov es, bx + lea di, pnpbios_structure + /* jump to BCV function entry pointer */ + mov bp, sp ;; Call ROM BCV routine using seg:off on stack + db 0xff ;; call_far ss:[bp+0] + db 0x5e + db 0 + cli ;; In case expansion ROM BIOS turns IF on + add sp, #2 ;; Pop offset value + pop cx ;; Pop seg value (restore CX) + jmp no_bev + +no_bcv: + mov ax, 0x1a[bx] ;; 0x1A is also the offset into the expansion header of... + cmp ax, #0x0000 ;; the Bootstrap Entry Vector, or zero if there is none. + je no_bev + + ;; Found a device that thinks it can boot the system. Record its BEV and product name string. + mov di, 0x10[bx] ;; Pointer to the product name string or zero if none + mov bx, #IPL_SEG ;; Go to the segment where the IPL table lives + mov ds, bx + mov bx, IPL_COUNT_OFFSET ;; Read the number of entries so far + cmp bx, #IPL_TABLE_ENTRIES + je no_bev ;; Get out if the table is full + shl bx, #0x4 ;; Turn count into offset (entries are 16 bytes) + mov 0[bx], #IPL_TYPE_BEV ;; This entry is a BEV device + mov 6[bx], cx ;; Build a far pointer from the segment... + mov 4[bx], ax ;; and the offset + cmp di, #0x0000 + je no_prod_str + mov 0xA[bx], cx ;; Build a far pointer from the segment... + mov 8[bx], di ;; and the offset +no_prod_str: + shr bx, #0x4 ;; Turn the offset back into a count + inc bx ;; We have one more entry now + mov IPL_COUNT_OFFSET, bx ;; Remember that. + +no_bev: + pop di ;; Restore DI + pop ax ;; Restore AX +rom_scan_increment: + shl ax, #5 ;; convert 512-bytes blocks to 16-byte increments + ;; because the segment selector is shifted left 4 bits. + add cx, ax + pop ax ;; Restore AX + cmp cx, ax + jbe rom_scan_loop + + xor ax, ax ;; Restore DS back to 0000: + mov ds, ax + ret + +post_init_pic: + mov al, #0x11 ; send initialisation commands + out PORT_PIC1_CMD, al + out PORT_PIC2_CMD, al + mov al, #0x08 + out PORT_PIC1_DATA, al + mov al, #0x70 + out PORT_PIC2_DATA, al + mov al, #0x04 + out PORT_PIC1_DATA, al + mov al, #0x02 + out PORT_PIC2_DATA, al + mov al, #0x01 + out PORT_PIC1_DATA, al + out PORT_PIC2_DATA, al + mov al, #0xb8 + out PORT_PIC1_DATA, AL ;master pic: unmask IRQ 0, 1, 2, 6 +#if BX_USE_PS2_MOUSE + mov al, #0x8f +#else + mov al, #0x9f +#endif + out PORT_PIC2_DATA, AL ;slave pic: unmask IRQ 12, 13, 14 + ret + +post_init_ivt: + ;; set all interrupts to default handler + xor bx, bx ;; offset index + mov cx, #0x0100 ;; counter (256 interrupts) + mov ax, #dummy_iret_handler + mov dx, #0xF000 + +post_default_ints: + mov [bx], ax + add bx, #2 + mov [bx], dx + add bx, #2 + loop post_default_ints + + ;; Printer Services vector + SET_INT_VECTOR(0x17, #0xF000, #int17_handler) + + ;; Bootstrap failure vector + SET_INT_VECTOR(0x18, #0xF000, #int18_handler) + + ;; Bootstrap Loader vector + SET_INT_VECTOR(0x19, #0xF000, #int19_handler) + + ;; User Timer Tick vector + SET_INT_VECTOR(0x1c, #0xF000, #int1c_handler) + + ;; Memory Size Check vector + SET_INT_VECTOR(0x12, #0xF000, #int12_handler) + + ;; Equipment Configuration Check vector + SET_INT_VECTOR(0x11, #0xF000, #int11_handler) + + ;; System Services + SET_INT_VECTOR(0x15, #0xF000, #int15_handler) + + ;; set vectors 0x60 - 0x66h to zero (0:180..0:19b) + xor ax, ax + mov cx, #0x000E ;; 14 words + mov di, #0x0180 + cld + rep + stosw + + ;; set vector 0x79 to zero + ;; this is used by 'guardian angel' protection system + SET_INT_VECTOR(0x79, #0, #0) + + ret + +;; the following area can be used to write dynamically generated tables + .align 16 +bios_table_area_start: + dd 0xaafb4442 + dd bios_table_area_end - bios_table_area_start - 8; + +;-------- +;- POST - +;-------- +.org 0xe05b ; POST Entry Point +post: + + xor ax, ax + + ;; first reset the DMA controllers + out PORT_DMA1_MASTER_CLEAR,al + out PORT_DMA2_MASTER_CLEAR,al + + ;; then initialize the DMA controllers + mov al, #0xC0 + out PORT_DMA2_MODE_REG, al ; cascade mode of channel 4 enabled + mov al, #0x00 + out PORT_DMA2_MASK_REG, al ; unmask channel 4 + + ;; Examine CMOS shutdown status. + mov AL, #0x0f + out PORT_CMOS_INDEX, AL + in AL, PORT_CMOS_DATA + + ;; backup status + mov bl, al + + ;; Reset CMOS shutdown status. + mov AL, #0x0f + out PORT_CMOS_INDEX, AL ; select CMOS register Fh + mov AL, #0x00 + out PORT_CMOS_DATA, AL ; set shutdown action to normal + + ;; Examine CMOS shutdown status. + mov al, bl + + ;; 0x00, 0x0D+ = normal startup + cmp AL, #0x00 + jz normal_post + cmp AL, #0x0d + jae normal_post + + ;; 0x05 = eoi + jmp via [0x40:0x67] jump + cmp al, #0x05 + je eoi_jmp_post + + ;; 0x0A = jmp via [0x40:0x67] jump + cmp al, #0x0a + je jmp_post_0x467 + + ;; 0x0B = iret via [0x40:0x67] + cmp al, #0x0b + je iret_post_0x467 + + ;; 0x0C = retf via [0x40:0x67] + cmp al, #0x0c + je retf_post_0x467 + + ;; Examine CMOS shutdown status. + ;; 0x01,0x02,0x03,0x04,0x06,0x07,0x08,0x09 = Unimplemented shutdown status. + push bx + call _shutdown_status_panic + +#if 0 + HALT(__LINE__) + ; + ;#if 0 + ; 0xb0, 0x20, /* mov al, #0x20 */ + ; 0xe6, 0x20, /* out PORT_PIC1_CMD, al ;send EOI to PIC */ + ;#endif + ; + pop es + pop ds + popa + iret +#endif + +normal_post: + ; case 0: normal startup + + cli + mov ax, #0xfffe + mov sp, ax + xor ax, ax + mov ds, ax + mov ss, ax + + ;; Save shutdown status + mov 0x04b0, bl + + cmp bl, #0xfe + jz s3_post + + ;; zero out BIOS data area (40:00..40:ff) + mov es, ax + mov cx, #0x0080 ;; 128 words + mov di, #0x0400 + cld + rep + stosw + + call _log_bios_start + + call post_init_ivt + + ;; base memory in K 40:13 (word) + mov ax, #BASE_MEM_IN_K + mov 0x0413, ax + + ;; Manufacturing Test 40:12 + ;; zerod out above + + ;; Warm Boot Flag 0040:0072 + ;; value of 1234h = skip memory checks + ;; zerod out above + + ;; EBDA setup + call ebda_post + + ;; PIT setup + SET_INT_VECTOR(0x08, #0xF000, #int08_handler) + ;; int 1C already points at dummy_iret_handler (above) + mov al, #0x34 ; timer0: binary count, 16bit count, mode 2 + out PORT_PIT_MODE, al + mov al, #0x00 ; maximum count of 0000H = 18.2Hz + out PORT_PIT_COUNTER0, al + out PORT_PIT_COUNTER0, al + + ;; Keyboard + SET_INT_VECTOR(0x09, #0xF000, #int09_handler) + SET_INT_VECTOR(0x16, #0xF000, #int16_handler) + + xor ax, ax + mov ds, ax + mov 0x0417, al /* keyboard shift flags, set 1 */ + mov 0x0418, al /* keyboard shift flags, set 2 */ + mov 0x0419, al /* keyboard alt-numpad work area */ + mov 0x0471, al /* keyboard ctrl-break flag */ + mov 0x0497, al /* keyboard status flags 4 */ + mov al, #0x10 + mov 0x0496, al /* keyboard status flags 3 */ + + + /* keyboard head of buffer pointer */ + mov bx, #0x001E + mov 0x041A, bx + + /* keyboard end of buffer pointer */ + mov 0x041C, bx + + /* keyboard pointer to start of buffer */ + mov bx, #0x001E + mov 0x0480, bx + + /* keyboard pointer to end of buffer */ + mov bx, #0x003E + mov 0x0482, bx + + /* init the keyboard */ + call _keyboard_init + + ;; mov CMOS Equipment Byte to BDA Equipment Word + mov ax, 0x0410 + mov al, #0x14 + out PORT_CMOS_INDEX, al + in al, PORT_CMOS_DATA + mov 0x0410, ax + + + ;; Parallel setup + SET_INT_VECTOR(0x0F, #0xF000, #dummy_iret_handler) + xor ax, ax + mov ds, ax + xor bx, bx + mov cl, #0x14 ; timeout value + mov dx, #0x378 ; Parallel I/O address, port 1 + call detect_parport + mov dx, #0x278 ; Parallel I/O address, port 2 + call detect_parport + shl bx, #0x0e + mov ax, 0x410 ; Equipment word bits 14..15 determine # parallel ports + and ax, #0x3fff + or ax, bx ; set number of parallel ports + mov 0x410, ax + + ;; Serial setup + SET_INT_VECTOR(0x0C, #0xF000, #dummy_iret_handler) + SET_INT_VECTOR(0x14, #0xF000, #int14_handler) + xor bx, bx + mov cl, #0x0a ; timeout value + mov dx, #0x03f8 ; Serial I/O address, port 1 + call detect_serial + mov dx, #0x02f8 ; Serial I/O address, port 2 + call detect_serial + mov dx, #0x03e8 ; Serial I/O address, port 3 + call detect_serial + mov dx, #0x02e8 ; Serial I/O address, port 4 + call detect_serial + shl bx, #0x09 + mov ax, 0x410 ; Equipment word bits 9..11 determine # serial ports + and ax, #0xf1ff + or ax, bx ; set number of serial port + mov 0x410, ax + + ;; CMOS RTC + SET_INT_VECTOR(0x1A, #0xF000, #int1a_handler) + SET_INT_VECTOR(0x4A, #0xF000, #dummy_iret_handler) + SET_INT_VECTOR(0x70, #0xF000, #int70_handler) + ;; BIOS DATA AREA 0x4CE ??? + call timer_tick_post + + ;; PS/2 mouse setup + SET_INT_VECTOR(0x74, #0xF000, #int74_handler) + + ;; IRQ13 (FPU exception) setup + SET_INT_VECTOR(0x75, #0xF000, #int75_handler) + + ;; Video setup + SET_INT_VECTOR(0x10, #0xF000, #int10_handler) + + ;; PIC + call post_init_pic + + mov cx, #0xc000 ;; init vga bios + mov ax, #0xc780 + call rom_scan + + call _print_bios_banner + +#if BX_ROMBIOS32 + call rombios32_init +#else +#if BX_PCIBIOS + call pcibios_init_iomem_bases + call pcibios_init_irqs +#endif //BX_PCIBIOS +#endif + + ;; + ;; Floppy setup + ;; + call floppy_drive_post + + ;; + ;; Hard Drive setup + ;; + call hard_drive_post + +#if BX_USE_ATADRV + + ;; + ;; ATA/ATAPI driver setup + ;; + call _ata_init + call _ata_detect + ;; + +#endif // BX_USE_ATADRV + +#if BX_ELTORITO_BOOT + ;; + ;; eltorito floppy/harddisk emulation from cd + ;; + call _cdemu_init + ;; +#endif // BX_ELTORITO_BOOT + + call _init_boot_vectors + + mov cx, #0xc800 ;; init option roms + mov ax, #0xe000 + call rom_scan + +#if BX_ELTORITO_BOOT + call _interactive_bootkey +#endif // BX_ELTORITO_BOOT + + sti ;; enable interrupts + int #0x19 + +.org 0xe2c3 ; NMI Handler Entry Point +nmi: + ;; FIXME the NMI handler should not panic + ;; but iret when called from int75 (fpu exception) + call _nmi_handler_msg + iret + +int75_handler: + out 0xf0, al // clear irq13 + call eoi_both_pics // clear interrupt + int 2 // legacy nmi call + iret + +;------------------------------------------- +;- INT 13h Fixed Disk Services Entry Point - +;------------------------------------------- +.org 0xe3fe ; INT 13h Fixed Disk Services Entry Point +int13_handler: + //JMPL(int13_relocated) + jmp int13_relocated + +.org 0xe401 ; Fixed Disk Parameter Table + +;---------- +;- INT19h - +;---------- +.org 0xe6f2 ; INT 19h Boot Load Service Entry Point +int19_handler: + + jmp int19_relocated +;------------------------------------------- +;- System BIOS Configuration Data Table +;------------------------------------------- +.org BIOS_CONFIG_TABLE +db 0x08 ; Table size (bytes) -Lo +db 0x00 ; Table size (bytes) -Hi +db SYS_MODEL_ID +db SYS_SUBMODEL_ID +db BIOS_REVISION +; Feature byte 1 +; b7: 1=DMA channel 3 used by hard disk +; b6: 1=2 interrupt controllers present +; b5: 1=RTC present +; b4: 1=BIOS calls int 15h/4Fh every key +; b3: 1=wait for extern event supported (Int 15h/41h) +; b2: 1=extended BIOS data area used +; b1: 0=AT or ESDI bus, 1=MicroChannel +; b0: 1=Dual bus (MicroChannel + ISA) +db (0 << 7) | \ + (1 << 6) | \ + (1 << 5) | \ + (BX_CALL_INT15_4F << 4) | \ + (0 << 3) | \ + (BX_USE_EBDA << 2) | \ + (0 << 1) | \ + (0 << 0) +; Feature byte 2 +; b7: 1=32-bit DMA supported +; b6: 1=int16h, function 9 supported +; b5: 1=int15h/C6h (get POS data) supported +; b4: 1=int15h/C7h (get mem map info) supported +; b3: 1=int15h/C8h (en/dis CPU) supported +; b2: 1=non-8042 kb controller +; b1: 1=data streaming supported +; b0: reserved +db (0 << 7) | \ + (1 << 6) | \ + (0 << 5) | \ + (0 << 4) | \ + (0 << 3) | \ + (0 << 2) | \ + (0 << 1) | \ + (0 << 0) +; Feature byte 3 +; b7: not used +; b6: reserved +; b5: reserved +; b4: POST supports ROM-to-RAM enable/disable +; b3: SCSI on system board +; b2: info panel installed +; b1: Initial Machine Load (IML) system - BIOS on disk +; b0: SCSI supported in IML +db 0x00 +; Feature byte 4 +; b7: IBM private +; b6: EEPROM present +; b5-3: ABIOS presence (011 = not supported) +; b2: private +; b1: memory split above 16Mb supported +; b0: POSTEXT directly supported by POST +db 0x00 +; Feature byte 5 (IBM) +; b1: enhanced mouse +; b0: flash EPROM +db 0x00 + + + +.org 0xe729 ; Baud Rate Generator Table + +;---------- +;- INT14h - +;---------- +.org 0xe739 ; INT 14h Serial Communications Service Entry Point +int14_handler: + push ds + pusha + xor ax, ax + mov ds, ax + call _int14_function + popa + pop ds + iret + + +;---------------------------------------- +;- INT 16h Keyboard Service Entry Point - +;---------------------------------------- +.org 0xe82e +int16_handler: + + sti + push ds + pushf + pusha + + cmp ah, #0x00 + je int16_F00 + cmp ah, #0x10 + je int16_F00 + + mov bx, #0xf000 + mov ds, bx + call _int16_function + popa + popf + pop ds + jz int16_zero_set + +int16_zero_clear: + push bp + mov bp, sp + //SEG SS + and BYTE [bp + 0x06], #0xbf + pop bp + iret + +int16_zero_set: + push bp + mov bp, sp + //SEG SS + or BYTE [bp + 0x06], #0x40 + pop bp + iret + +int16_F00: + mov bx, #0x0040 + mov ds, bx + +int16_wait_for_key: + cli + mov bx, 0x001a + cmp bx, 0x001c + jne int16_key_found + sti + nop +#if 0 + /* no key yet, call int 15h, function AX=9002 */ + 0x50, /* push AX */ + 0xb8, 0x02, 0x90, /* mov AX, #0x9002 */ + 0xcd, 0x15, /* int 15h */ + 0x58, /* pop AX */ + 0xeb, 0xea, /* jmp WAIT_FOR_KEY */ +#endif + jmp int16_wait_for_key + +int16_key_found: + mov bx, #0xf000 + mov ds, bx + call _int16_function + popa + popf + pop ds +#if 0 + /* notify int16 complete w/ int 15h, function AX=9102 */ + 0x50, /* push AX */ + 0xb8, 0x02, 0x91, /* mov AX, #0x9102 */ + 0xcd, 0x15, /* int 15h */ + 0x58, /* pop AX */ +#endif + iret + + + +;------------------------------------------------- +;- INT09h : Keyboard Hardware Service Entry Point - +;------------------------------------------------- +.org 0xe987 +int09_handler: + cli + push ax + + mov al, #0xAD ;;disable keyboard + out PORT_PS2_STATUS, al + + mov al, #0x0B + out PORT_PIC1_CMD, al + in al, PORT_PIC1_CMD + and al, #0x02 + jz int09_finish + + in al, PORT_PS2_DATA ;;read key from keyboard controller + sti + push ds + pusha +#ifdef BX_CALL_INT15_4F + mov ah, #0x4f ;; allow for keyboard intercept + stc + int #0x15 + jnc int09_done +#endif + + ;; check for extended key + cmp al, #0xe0 + jne int09_check_pause + xor ax, ax + mov ds, ax + mov al, BYTE [0x496] ;; mf2_state |= 0x02 + or al, #0x02 + mov BYTE [0x496], al + jmp int09_done + +int09_check_pause: ;; check for pause key + cmp al, #0xe1 + jne int09_process_key + xor ax, ax + mov ds, ax + mov al, BYTE [0x496] ;; mf2_state |= 0x01 + or al, #0x01 + mov BYTE [0x496], al + jmp int09_done + +int09_process_key: + mov bx, #0xf000 + mov ds, bx + call _int09_function + +int09_done: + popa + pop ds + cli + call eoi_master_pic + +int09_finish: + mov al, #0xAE ;;enable keyboard + out PORT_PS2_STATUS, al + pop ax + iret + + +;---------------------------------------- +;- INT 13h Diskette Service Entry Point - +;---------------------------------------- +.org 0xec59 +int13_diskette: + jmp int13_noeltorito + +;--------------------------------------------- +;- INT 0Eh Diskette Hardware ISR Entry Point - +;--------------------------------------------- +.org 0xef57 ; INT 0Eh Diskette Hardware ISR Entry Point +int0e_handler: + push ax + push dx + mov dx, #0x03f4 + in al, dx + and al, #0xc0 + cmp al, #0xc0 + je int0e_normal + mov dx, #0x03f5 + mov al, #0x08 ; sense interrupt status + out dx, al +int0e_loop1: + mov dx, #0x03f4 + in al, dx + and al, #0xc0 + cmp al, #0xc0 + jne int0e_loop1 +int0e_loop2: + mov dx, #0x03f5 + in al, dx + mov dx, #0x03f4 + in al, dx + and al, #0xc0 + cmp al, #0xc0 + je int0e_loop2 +int0e_normal: + push ds + xor ax, ax ;; segment 0000 + mov ds, ax + call eoi_master_pic + mov al, 0x043e + or al, #0x80 ;; diskette interrupt has occurred + mov 0x043e, al + pop ds + pop dx + pop ax + iret + + +.org 0xefc7 ; Diskette Controller Parameter Table +diskette_param_table: +;; Since no provisions are made for multiple drive types, most +;; values in this table are ignored. I set parameters for 1.44M +;; floppy here +db 0xAF +db 0x02 ;; head load time 0000001, DMA used +db 0x25 +db 0x02 +db 18 +db 0x1B +db 0xFF +db 0x6C +db 0xF6 +db 0x0F +db 0x08 + + +;---------------------------------------- +;- INT17h : Printer Service Entry Point - +;---------------------------------------- +.org 0xefd2 +int17_handler: + push ds + pusha + xor ax, ax + mov ds, ax + call _int17_function + popa + pop ds + iret + +diskette_param_table2: +;; New diskette parameter table adding 3 parameters from IBM +;; Since no provisions are made for multiple drive types, most +;; values in this table are ignored. I set parameters for 1.44M +;; floppy here +db 0xAF +db 0x02 ;; head load time 0000001, DMA used +db 0x25 +db 0x02 +db 18 +db 0x1B +db 0xFF +db 0x6C +db 0xF6 +db 0x0F +db 0x08 +db 79 ;; maximum track +db 0 ;; data transfer rate +db 4 ;; drive type in cmos + +.org 0xf045 ; INT 10 Functions 0-Fh Entry Point + HALT(__LINE__) + iret + +;---------- +;- INT10h - +;---------- +.org 0xf065 ; INT 10h Video Support Service Entry Point +int10_handler: + ;; dont do anything, since the VGA BIOS handles int10h requests + iret + +.org 0xf0a4 ; MDA/CGA Video Parameter Table (INT 1Dh) + +;---------- +;- INT12h - +;---------- +.org 0xf841 ; INT 12h Memory Size Service Entry Point +; ??? different for Pentium (machine check)? +int12_handler: + push ds + mov ax, #0x0040 + mov ds, ax + mov ax, 0x0013 + pop ds + iret + +;---------- +;- INT11h - +;---------- +.org 0xf84d ; INT 11h Equipment List Service Entry Point +int11_handler: + push ds + mov ax, #0x0040 + mov ds, ax + mov ax, 0x0010 + pop ds + iret + +;---------- +;- INT15h - +;---------- +.org 0xf859 ; INT 15h System Services Entry Point +int15_handler: + pushf +#if BX_APM + cmp ah, #0x53 + je apm_call +#endif + push ds + push es + cmp ah, #0x86 + je int15_handler32 + cmp ah, #0xE8 + je int15_handler32 + pusha +#if BX_USE_PS2_MOUSE + cmp ah, #0xC2 + je int15_handler_mouse +#endif + call _int15_function +int15_handler_mouse_ret: + popa +int15_handler32_ret: + pop es + pop ds + popf + jmp iret_modify_cf +#if BX_APM +apm_call: + jmp _apmreal_entry +#endif + +#if BX_USE_PS2_MOUSE +int15_handler_mouse: + call _int15_function_mouse + jmp int15_handler_mouse_ret +#endif + +int15_handler32: + pushad + call _int15_function32 + popad + jmp int15_handler32_ret + +;; Protected mode IDT descriptor +;; +;; I just make the limit 0, so the machine will shutdown +;; if an exception occurs during protected mode memory +;; transfers. +;; +;; Set base to f0000 to correspond to beginning of BIOS, +;; in case I actually define an IDT later +;; Set limit to 0 + +pmode_IDT_info: +dw 0x0000 ;; limit 15:00 +dw 0x0000 ;; base 15:00 +db 0x0f ;; base 23:16 + +;; Real mode IDT descriptor +;; +;; Set to typical real-mode values. +;; base = 000000 +;; limit = 03ff + +rmode_IDT_info: +dw 0x03ff ;; limit 15:00 +dw 0x0000 ;; base 15:00 +db 0x00 ;; base 23:16 + + +;---------- +;- INT1Ah - +;---------- +.org 0xfe6e ; INT 1Ah Time-of-day Service Entry Point +int1a_handler: +#if BX_PCIBIOS + cmp ah, #0xb1 + jne int1a_normal + call pcibios_real + jc pcibios_error + retf 2 +pcibios_error: + mov bl, ah + mov ah, #0xb1 + push ds + pusha + mov ax, ss ; set readable descriptor to ds, for calling pcibios + mov ds, ax ; on 16bit protected mode. + jmp int1a_callfunction +int1a_normal: +#endif + push ds + pusha + xor ax, ax + mov ds, ax +int1a_callfunction: + call _int1a_function + popa + pop ds + iret + +;; +;; int70h: IRQ8 - CMOS RTC +;; +int70_handler: + push ds + pushad + xor ax, ax + mov ds, ax + call _int70_function + popad + pop ds + iret + +;--------- +;- INT08 - +;--------- +.org 0xfea5 ; INT 08h System Timer ISR Entry Point +int08_handler: + sti + push eax + push ds + xor ax, ax + mov ds, ax + + ;; time to turn off drive(s)? + mov al,0x0440 + or al,al + jz int08_floppy_off + dec al + mov 0x0440,al + jnz int08_floppy_off + ;; turn motor(s) off + push dx + mov dx,#0x03f2 + in al,dx + and al,#0xcf + out dx,al + pop dx +int08_floppy_off: + + mov eax, 0x046c ;; get ticks dword + inc eax + + ;; compare eax to one days worth of timer ticks at 18.2 hz + cmp eax, #0x001800B0 + jb int08_store_ticks + ;; there has been a midnight rollover at this point + xor eax, eax ;; zero out counter + inc BYTE 0x0470 ;; increment rollover flag + +int08_store_ticks: + mov 0x046c, eax ;; store new ticks dword + ;; chain to user timer tick INT #0x1c + //pushf + //;; call_ep [ds:loc] + //CALL_EP( 0x1c << 2 ) + int #0x1c + cli + call eoi_master_pic + pop ds + pop eax + iret + +.org 0xfef3 ; Initial Interrupt Vector Offsets Loaded by POST + + +.org 0xff00 +.ascii BIOS_COPYRIGHT_STRING + +;------------------------------------------------ +;- IRET Instruction for Dummy Interrupt Handler - +;------------------------------------------------ +.org 0xff53 ; IRET Instruction for Dummy Interrupt Handler +dummy_iret_handler: + iret + +.org 0xff54 ; INT 05h Print Screen Service Entry Point + HALT(__LINE__) + iret + +.org 0xfff0 ; Power-up Entry Point + jmp 0xf000:post + +.org 0xfff5 ; ASCII Date ROM was built - 8 characters in MM/DD/YY +.ascii BIOS_BUILD_DATE + +.org 0xfffe ; System Model ID +db SYS_MODEL_ID +db 0x00 ; filler + +.org 0xfa6e ;; Character Font for 320x200 & 640x200 Graphics (lower 128 characters) +ASM_END +/* + * This font comes from the fntcol16.zip package (c) by Joseph Gil + * found at ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip + * This font is public domain + */ +static Bit8u vgafont8[128*8]= +{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e, + 0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e, + 0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, + 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, + 0x38, 0x7c, 0x38, 0xfe, 0xfe, 0x7c, 0x38, 0x7c, + 0x10, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x7c, + 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, + 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, + 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, + 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, + 0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78, + 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, + 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0, + 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0, + 0x99, 0x5a, 0x3c, 0xe7, 0xe7, 0x3c, 0x5a, 0x99, + 0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00, + 0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00, + 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00, + 0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00, + 0x3e, 0x63, 0x38, 0x6c, 0x6c, 0x38, 0xcc, 0x78, + 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00, + 0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff, + 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, + 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, + 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, + 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, + 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x78, 0x78, 0x30, 0x30, 0x00, 0x30, 0x00, + 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, + 0x30, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x30, 0x00, + 0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00, + 0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00, + 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00, + 0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00, + 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, + 0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60, + 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, + 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, + 0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0x7c, 0x00, + 0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x00, + 0x78, 0xcc, 0x0c, 0x38, 0x60, 0xcc, 0xfc, 0x00, + 0x78, 0xcc, 0x0c, 0x38, 0x0c, 0xcc, 0x78, 0x00, + 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00, + 0xfc, 0xc0, 0xf8, 0x0c, 0x0c, 0xcc, 0x78, 0x00, + 0x38, 0x60, 0xc0, 0xf8, 0xcc, 0xcc, 0x78, 0x00, + 0xfc, 0xcc, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00, + 0x78, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0x78, 0x00, + 0x78, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70, 0x00, + 0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00, + 0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x60, + 0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x00, + 0x00, 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00, + 0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00, + 0x78, 0xcc, 0x0c, 0x18, 0x30, 0x00, 0x30, 0x00, + 0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00, + 0x30, 0x78, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0x00, + 0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00, + 0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00, + 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, + 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00, + 0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00, + 0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3e, 0x00, + 0xcc, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0xcc, 0x00, + 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, + 0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00, + 0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00, + 0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, + 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00, + 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00, + 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, + 0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00, + 0x78, 0xcc, 0xcc, 0xcc, 0xdc, 0x78, 0x1c, 0x00, + 0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00, + 0x78, 0xcc, 0xe0, 0x70, 0x1c, 0xcc, 0x78, 0x00, + 0xfc, 0xb4, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xfc, 0x00, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00, + 0xc6, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x00, + 0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00, + 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x30, 0x78, 0x00, + 0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00, + 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00, + 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00, + 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, + 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00, + 0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0xdc, 0x00, + 0x00, 0x00, 0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x00, + 0x1c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, + 0x00, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00, + 0x38, 0x6c, 0x60, 0xf0, 0x60, 0x60, 0xf0, 0x00, + 0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8, + 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00, + 0x30, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00, + 0x0c, 0x00, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, + 0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00, + 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, + 0x00, 0x00, 0xcc, 0xfe, 0xfe, 0xd6, 0xc6, 0x00, + 0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0x00, + 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00, + 0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0, + 0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e, + 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0xf0, 0x00, + 0x00, 0x00, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x00, + 0x10, 0x30, 0x7c, 0x30, 0x30, 0x34, 0x18, 0x00, + 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, + 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00, + 0x00, 0x00, 0xc6, 0xd6, 0xfe, 0xfe, 0x6c, 0x00, + 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00, + 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8, + 0x00, 0x00, 0xfc, 0x98, 0x30, 0x64, 0xfc, 0x00, + 0x1c, 0x30, 0x30, 0xe0, 0x30, 0x30, 0x1c, 0x00, + 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, + 0xe0, 0x30, 0x30, 0x1c, 0x30, 0x30, 0xe0, 0x00, + 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00, +}; + +ASM_START +.org 0xcc00 +bios_table_area_end: +// bcc-generated data will be placed here +ASM_END diff --git a/bochs/bios/rombios.h b/bochs/bios/rombios.h new file mode 100644 index 00000000..1b8e2ba0 --- /dev/null +++ b/bochs/bios/rombios.h @@ -0,0 +1,248 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2006 Volker Ruppert +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +/* define it to include QEMU specific code */ +//#define BX_QEMU + +#ifndef LEGACY +# define BX_ROMBIOS32 1 +#else +# define BX_ROMBIOS32 0 +#endif + +#define DEBUG_ROMBIOS 0 +#define DEBUG_ATA 0 +#define DEBUG_INT13_HD 0 +#define DEBUG_INT13_CD 0 +#define DEBUG_INT13_ET 0 +#define DEBUG_INT13_FL 0 +#define DEBUG_INT15 0 +#define DEBUG_INT16 0 +#define DEBUG_INT1A 0 +#define DEBUG_INT74 0 +#define DEBUG_APM 0 + +#define PANIC_PORT 0x400 +#define PANIC_PORT2 0x401 +#define INFO_PORT 0x402 +#define DEBUG_PORT 0x403 + +#define BIOS_PRINTF_HALT 1 +#define BIOS_PRINTF_SCREEN 2 +#define BIOS_PRINTF_INFO 4 +#define BIOS_PRINTF_DEBUG 8 +#define BIOS_PRINTF_ALL (BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO) +#define BIOS_PRINTF_DEBHALT (BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO | BIOS_PRINTF_HALT) + +#define printf(format, p...) bios_printf(BIOS_PRINTF_SCREEN, format, ##p) + +// Defines the output macros. +// BX_DEBUG goes to INFO port until we can easily choose debug info on a +// per-device basis. Debug info are sent only in debug mode +#if DEBUG_ROMBIOS +# define BX_DEBUG(format, p...) bios_printf(BIOS_PRINTF_INFO, format, ##p) +#else +# define BX_DEBUG(format, p...) +#endif +#define BX_INFO(format, p...) bios_printf(BIOS_PRINTF_INFO, format, ##p) +#define BX_PANIC(format, p...) bios_printf(BIOS_PRINTF_DEBHALT, format, ##p) + +/* put the MP float table and ACPI RSDP in EBDA and the MP and ACPI tables in + high memory. Linux kernels < 2.6.30 might not work with this configuration */ +//#define BX_USE_EBDA_TABLES + +#define ACPI_DATA_SIZE 0x00010000L +#define MPTABLE_MAX_SIZE 0x00002000 +#define PM_IO_BASE 0xb000 +#define SMB_IO_BASE 0xb100 +#define SMP_MSR_ADDR 0x0510 + + // Define the application NAME +#if defined(BX_QEMU) +# define BX_APPNAME "QEMU" +# define BX_APPVENDOR "QEMU" +#else +# define BX_APPNAME "Bochs" +# define BX_APPVENDOR "The Bochs Project" +#endif + +#define E820_RAM 1 +#define E820_RESERVED 2 +#define E820_ACPI 3 +#define E820_NVS 4 +#define E820_UNUSABLE 5 + +#define BX_CPU 3 +#define BX_USE_PS2_MOUSE 1 +#define BX_CALL_INT15_4F 1 +#define BX_USE_EBDA 1 +#define BX_SUPPORT_FLOPPY 1 +#define BX_FLOPPY_ON_CNT 37 /* 2 seconds */ +#define BX_PCIBIOS 1 +#define BX_APM 1 +#define BX_PNPBIOS 1 +/* define it if the (emulated) hardware supports SMM mode */ +#define BX_USE_SMM + +#define BX_USE_ATADRV 1 +#define BX_ELTORITO_BOOT 1 + +#define BX_MAX_ATA_INTERFACES 4 +#define BX_MAX_ATA_DEVICES (BX_MAX_ATA_INTERFACES*2) + +#define BX_VIRTUAL_PORTS 1 /* normal output to Bochs ports */ +#define BX_DEBUG_SERIAL 0 /* output to COM1 */ + + /* model byte 0xFC = AT */ +#define SYS_MODEL_ID 0xFC +#define SYS_SUBMODEL_ID 0x00 +#define BIOS_REVISION 1 +#define BIOS_CONFIG_TABLE 0xe6f5 + +#ifndef BIOS_BUILD_DATE +# define BIOS_BUILD_DATE "06/23/99" +#endif + + // 1K of base memory used for Extended Bios Data Area (EBDA) + // EBDA is used for PS/2 mouse support, and IDE BIOS, etc. +#define EBDA_SEG 0x9FC0 +#define EBDA_SIZE 1 // In KiB +#define BASE_MEM_IN_K (640 - EBDA_SIZE) + +/* IPL_SIZE bytes at 0x9ff00 are used for the IPL boot table. */ +#define IPL_SEG 0x9ff0 +#define IPL_TABLE_OFFSET 0x0000 +#define IPL_TABLE_ENTRIES 8 +#define IPL_COUNT_OFFSET 0x0080 /* u16: number of valid table entries */ +#define IPL_SEQUENCE_OFFSET 0x0082 /* u16: next boot device */ +#define IPL_BOOTFIRST_OFFSET 0x0084 /* u16: user selected device */ +#define IPL_SIZE 0x86 +#define IPL_TYPE_FLOPPY 0x01 +#define IPL_TYPE_HARDDISK 0x02 +#define IPL_TYPE_CDROM 0x03 +#define IPL_TYPE_BEV 0x80 + +/* Ports */ +#define PORT_DMA_ADDR_2 0x0004 +#define PORT_DMA_CNT_2 0x0005 +#define PORT_DMA1_MASK_REG 0x000a +#define PORT_DMA1_MODE_REG 0x000b +#define PORT_DMA1_CLEAR_FF_REG 0x000c +#define PORT_DMA1_MASTER_CLEAR 0x000d +#define PORT_PIC1_CMD 0x0020 +#define PORT_PIC1_DATA 0x0021 +#define PORT_PIT_COUNTER0 0x0040 +#define PORT_PIT_MODE 0x0043 +#define PORT_PS2_DATA 0x0060 +#define PORT_PS2_CTRLB 0x0061 +#define PORT_PS2_STATUS 0x0064 +#define PORT_CMOS_INDEX 0x0070 +#define PORT_CMOS_DATA 0x0071 +#define PORT_DIAG 0x0080 +#define PORT_DMA_PAGE_2 0x0081 +#define PORT_A20 0x0092 +#define PORT_PIC2_CMD 0x00a0 +#define PORT_PIC2_DATA 0x00a1 +#define PORT_DMA2_MASK_REG 0x00d4 +#define PORT_DMA2_MODE_REG 0x00d6 +#define PORT_DMA2_MASTER_CLEAR 0x00da +#define PORT_ATA2_CMD_BASE 0x0170 +#define PORT_ATA1_CMD_BASE 0x01f0 +#define PORT_FD_DOR 0x03f2 +#define PORT_FD_STATUS 0x03f4 +#define PORT_FD_DATA 0x03f5 + +#define CPUID_MSR (1 << 5) +#define CPUID_APIC (1 << 9) +#define CPUID_MTRR (1 << 12) + +#define APIC_BASE ((uint8_t *)0xfee00000) +#define APIC_ICR_LOW 0x300 +#define APIC_SVR 0x0F0 +#define APIC_ID 0x020 +#define APIC_LVT3 0x370 + +#define APIC_ENABLED 0x0100 + +#define AP_BOOT_ADDR 0x9f000 + +#define SMI_CMD_IO_ADDR 0xb2 + +#define BIOS_TMP_STORAGE 0x00030000 /* 64 KB used to copy the BIOS to shadow RAM */ + +#define MSR_MTRRcap 0x000000fe +#define MSR_MTRRfix64K_00000 0x00000250 +#define MSR_MTRRfix16K_80000 0x00000258 +#define MSR_MTRRfix16K_A0000 0x00000259 +#define MSR_MTRRfix4K_C0000 0x00000268 +#define MSR_MTRRfix4K_C8000 0x00000269 +#define MSR_MTRRfix4K_D0000 0x0000026a +#define MSR_MTRRfix4K_D8000 0x0000026b +#define MSR_MTRRfix4K_E0000 0x0000026c +#define MSR_MTRRfix4K_E8000 0x0000026d +#define MSR_MTRRfix4K_F0000 0x0000026e +#define MSR_MTRRfix4K_F8000 0x0000026f +#define MSR_MTRRdefType 0x000002ff + +#define MTRRphysBase_MSR(reg) (0x200 + 2 * (reg)) +#define MTRRphysMask_MSR(reg) (0x200 + 2 * (reg) + 1) + +#define MTRR_MEMTYPE_UC 0 +#define MTRR_MEMTYPE_WC 1 +#define MTRR_MEMTYPE_WT 4 +#define MTRR_MEMTYPE_WP 5 +#define MTRR_MEMTYPE_WB 6 + +#define QEMU_CFG_CTL_PORT 0x510 +#define QEMU_CFG_DATA_PORT 0x511 +#define QEMU_CFG_SIGNATURE 0x00 +#define QEMU_CFG_ID 0x01 +#define QEMU_CFG_UUID 0x02 + +#define PCI_ADDRESS_SPACE_MEM 0x00 +#define PCI_ADDRESS_SPACE_IO 0x01 +#define PCI_ADDRESS_SPACE_MEM_PREFETCH 0x08 + +#define PCI_ROM_SLOT 6 +#define PCI_NUM_REGIONS 7 + +#define PCI_DEVICES_MAX 64 + +#define PCI_VENDOR_ID 0x00 /* 16 bits */ +#define PCI_DEVICE_ID 0x02 /* 16 bits */ +#define PCI_COMMAND 0x04 /* 16 bits */ +#define PCI_COMMAND_IO 0x1 /* Enable response in I/O space */ +#define PCI_COMMAND_MEMORY 0x2 /* Enable response in Memory space */ +#define PCI_CLASS_DEVICE 0x0a /* Device class */ +#define PCI_INTERRUPT_LINE 0x3c /* 8 bits */ +#define PCI_INTERRUPT_PIN 0x3d /* 8 bits */ +#define PCI_MIN_GNT 0x3e /* 8 bits */ +#define PCI_MAX_LAT 0x3f /* 8 bits */ + +#define PCI_VENDOR_ID_INTEL 0x8086 +#define PCI_DEVICE_ID_INTEL_82441 0x1237 +#define PCI_DEVICE_ID_INTEL_82371SB_0 0x7000 +#define PCI_DEVICE_ID_INTEL_82371SB_1 0x7010 +#define PCI_DEVICE_ID_INTEL_82371AB_0 0x7110 +#define PCI_DEVICE_ID_INTEL_82371AB 0x7111 +#define PCI_DEVICE_ID_INTEL_82371AB_3 0x7113 + +#define PCI_VENDOR_ID_IBM 0x1014 +#define PCI_VENDOR_ID_APPLE 0x106b diff --git a/bochs/bios/rombios32.c b/bochs/bios/rombios32.c new file mode 100644 index 00000000..7659e36f --- /dev/null +++ b/bochs/bios/rombios32.c @@ -0,0 +1,2328 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// 32 bit Bochs BIOS init code +// Copyright (C) 2006 Fabrice Bellard +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +#include +#include + +#include "rombios.h" + +typedef signed char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef long long int64_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; + +#define cpuid(index, eax, ebx, ecx, edx) \ + asm volatile ("cpuid" \ + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) \ + : "0" (index)) + +#define wbinvd() asm volatile("wbinvd") + +static inline void outl(int addr, int val) +{ + asm volatile ("outl %1, %w0" : : "d" (addr), "a" (val)); +} + +static inline void outw(int addr, int val) +{ + asm volatile ("outw %w1, %w0" : : "d" (addr), "a" (val)); +} + +static inline void outb(int addr, int val) +{ + asm volatile ("outb %b1, %w0" : : "d" (addr), "a" (val)); +} + +static inline uint32_t inl(int addr) +{ + uint32_t val; + asm volatile ("inl %w1, %0" : "=a" (val) : "d" (addr)); + return val; +} + +static inline uint16_t inw(int addr) +{ + uint16_t val; + asm volatile ("inw %w1, %w0" : "=a" (val) : "d" (addr)); + return val; +} + +static inline uint8_t inb(int addr) +{ + uint8_t val; + asm volatile ("inb %w1, %b0" : "=a" (val) : "d" (addr)); + return val; +} + +static inline void writel(void *addr, uint32_t val) +{ + *(volatile uint32_t *)addr = val; +} + +static inline void writew(void *addr, uint16_t val) +{ + *(volatile uint16_t *)addr = val; +} + +static inline void writeb(void *addr, uint8_t val) +{ + *(volatile uint8_t *)addr = val; +} + +static inline uint32_t readl(const void *addr) +{ + return *(volatile const uint32_t *)addr; +} + +static inline uint16_t readw(const void *addr) +{ + return *(volatile const uint16_t *)addr; +} + +static inline uint8_t readb(const void *addr) +{ + return *(volatile const uint8_t *)addr; +} + +static inline void putch(int c) +{ + outb(INFO_PORT, c); +} + +static uint64_t rdmsr(unsigned index) +{ + unsigned long long ret; + + asm ("rdmsr" : "=A"(ret) : "c"(index)); + return ret; +} + +static void wrmsr(unsigned index, uint64_t val) +{ + asm volatile ("wrmsr" : : "c"(index), "A"(val)); +} + +static inline int isdigit(int c) +{ + return c >= '0' && c <= '9'; +} + +void *memset(void *d1, int val, size_t len) +{ + uint8_t *d = d1; + + while (len--) { + *d++ = val; + } + return d1; +} + +void *memcpy(void *d1, const void *s1, size_t len) +{ + uint8_t *d = d1; + const uint8_t *s = s1; + + while (len--) { + *d++ = *s++; + } + return d1; +} + +void *memmove(void *d1, const void *s1, size_t len) +{ + uint8_t *d = d1; + const uint8_t *s = s1; + + if (d <= s) { + while (len--) { + *d++ = *s++; + } + } else { + d += len; + s += len; + while (len--) { + *--d = *--s; + } + } + return d1; +} + +int memcmp(const void *s1, const void *s2, size_t len) +{ + const int8_t *p1 = s1; + const int8_t *p2 = s2; + + while (len--) { + int r = *p1++ - *p2++; + if(r) + return r; + } + + return 0; +} + +size_t strlen(const char *s) +{ + const char *s1; + for(s1 = s; *s1 != '\0'; s1++); + return s1 - s; +} + +/* from BSD ppp sources */ +int vsnprintf(char *buf, int buflen, const char *fmt, va_list args) +{ + int c, i, n; + int width, prec, fillch; + int base, len, neg; + unsigned long val = 0; + const char *f; + char *str, *buf0; + char num[32]; + static const char hexchars[] = "0123456789abcdef"; + + buf0 = buf; + --buflen; + while (buflen > 0) { + for (f = fmt; *f != '%' && *f != 0; ++f) + ; + if (f > fmt) { + len = f - fmt; + if (len > buflen) + len = buflen; + memcpy(buf, fmt, len); + buf += len; + buflen -= len; + fmt = f; + } + if (*fmt == 0) + break; + c = *++fmt; + width = prec = 0; + fillch = ' '; + if (c == '0') { + fillch = '0'; + c = *++fmt; + } + if (c == '*') { + width = va_arg(args, int); + c = *++fmt; + } else { + while (isdigit(c)) { + width = width * 10 + c - '0'; + c = *++fmt; + } + } + if (c == '.') { + c = *++fmt; + if (c == '*') { + prec = va_arg(args, int); + c = *++fmt; + } else { + while (isdigit(c)) { + prec = prec * 10 + c - '0'; + c = *++fmt; + } + } + } + /* modifiers */ + switch(c) { + case 'l': + c = *++fmt; + break; + default: + break; + } + str = 0; + base = 0; + neg = 0; + ++fmt; + switch (c) { + case 'd': + i = va_arg(args, int); + if (i < 0) { + neg = 1; + val = -i; + } else + val = i; + base = 10; + break; + case 'o': + val = va_arg(args, unsigned int); + base = 8; + break; + case 'x': + case 'X': + val = va_arg(args, unsigned int); + base = 16; + break; + case 'p': + val = (unsigned long) va_arg(args, void *); + base = 16; + neg = 2; + break; + case 's': + str = va_arg(args, char *); + break; + case 'c': + num[0] = va_arg(args, int); + num[1] = 0; + str = num; + break; + default: + *buf++ = '%'; + if (c != '%') + --fmt; /* so %z outputs %z etc. */ + --buflen; + continue; + } + if (base != 0) { + str = num + sizeof(num); + *--str = 0; + while (str > num + neg) { + *--str = hexchars[val % base]; + val = val / base; + if (--prec <= 0 && val == 0) + break; + } + switch (neg) { + case 1: + *--str = '-'; + break; + case 2: + *--str = 'x'; + *--str = '0'; + break; + } + len = num + sizeof(num) - 1 - str; + } else { + len = strlen(str); + if (prec > 0 && len > prec) + len = prec; + } + if (width > 0) { + if (width > buflen) + width = buflen; + if ((n = width - len) > 0) { + buflen -= n; + for (; n > 0; --n) + *buf++ = fillch; + } + } + if (len > buflen) + len = buflen; + memcpy(buf, str, len); + buf += len; + buflen -= len; + } + *buf = 0; + return buf - buf0; +} + +int snprintf(char * buf, size_t size, const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + i = vsnprintf(buf, size, fmt, args); + va_end(args); + return i; +} + +void bios_printf(int flags, const char *fmt, ...) +{ + va_list ap; + char buf[1024]; + const char *s; + + if ((flags & BIOS_PRINTF_DEBHALT) == BIOS_PRINTF_DEBHALT) + outb(PANIC_PORT2, 0x00); + + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + s = buf; + while (*s) + putch(*s++); + va_end(ap); +} + +void delay_ms(int n) +{ + int i, j; + for(i = 0; i < n; i++) { +#ifdef BX_QEMU + volatile int k; + /* approximative ! */ + for(j = 0; j < 1000000; j++) { + k++; + } +#else + { + int r1, r2; + j = 66; + r1 = inb(0x61) & 0x10; + do { + r2 = inb(0x61) & 0x10; + if (r1 != r2) { + j--; + r1 = r2; + } + } while (j > 0); + } +#endif + } +} + +uint16_t smp_cpus; +uint32_t cpuid_signature; +uint32_t cpuid_features; +uint32_t cpuid_ext_features; +unsigned long ram_size; +uint64_t ram_end; +uint8_t bios_uuid[16]; +#ifdef BX_USE_EBDA_TABLES +unsigned long ebda_cur_addr; +#endif +int acpi_enabled; +uint32_t pm_io_base, smb_io_base; +int pm_sci_int; +unsigned long bios_table_cur_addr; +unsigned long bios_table_end_addr; + +void wrmsr_smp(uint32_t index, uint64_t val) +{ + static struct { uint32_t ecx, eax, edx; } *p = (void *)SMP_MSR_ADDR; + + wrmsr(index, val); + p->ecx = index; + p->eax = val; + p->edx = val >> 32; + ++p; + p->ecx = 0; +} + +#ifdef BX_QEMU +int qemu_cfg_port; + +void qemu_cfg_select(int f) +{ + outw(QEMU_CFG_CTL_PORT, f); +} + +int qemu_cfg_port_probe() +{ + char *sig = "QEMU"; + int i; + + qemu_cfg_select(QEMU_CFG_SIGNATURE); + + for (i = 0; i < 4; i++) + if (inb(QEMU_CFG_DATA_PORT) != sig[i]) + return 0; + + return 1; +} + +void qemu_cfg_read(uint8_t *buf, int len) +{ + while (len--) + *(buf++) = inb(QEMU_CFG_DATA_PORT); +} +#endif + +void uuid_probe(void) +{ +#ifdef BX_QEMU + if(qemu_cfg_port) { + qemu_cfg_select(QEMU_CFG_UUID); + qemu_cfg_read(bios_uuid, 16); + return; + } +#endif + memset(bios_uuid, 0, 16); +} + +void cpu_probe(void) +{ + uint32_t eax, ebx, ecx, edx; + cpuid(1, eax, ebx, ecx, edx); + cpuid_signature = eax; + cpuid_features = edx; + cpuid_ext_features = ecx; +} + +static int cmos_readb(int addr) +{ + outb(0x70, addr); + return inb(0x71); +} + +void setup_mtrr(void) +{ + int i, vcnt, fix, wc; + uint32_t mtrr_cap; + union { + uint8_t valb[8]; + uint64_t val; + } u; + + *(uint32_t *)SMP_MSR_ADDR = 0; + + if (!(cpuid_features & CPUID_MTRR)) + return; + + if (!(cpuid_features & CPUID_MSR)) + return; + + mtrr_cap = rdmsr(MSR_MTRRcap); + vcnt = mtrr_cap & 0xff; + fix = mtrr_cap & 0x100; + wc = mtrr_cap & 0x400; + if (!vcnt || !fix) + return; + + u.val = 0; + for (i = 0; i < 8; ++i) + if (ram_size >= 65536 * (i + 1)) + u.valb[i] = 6; + wrmsr_smp(MSR_MTRRfix64K_00000, u.val); + u.val = 0; + for (i = 0; i < 8; ++i) + if (ram_size >= 65536 * 8 + 16384 * (i + 1)) + u.valb[i] = 6; + wrmsr_smp(MSR_MTRRfix16K_80000, u.val); + wrmsr_smp(MSR_MTRRfix16K_A0000, 0); + wrmsr_smp(MSR_MTRRfix4K_C0000, 0); + wrmsr_smp(MSR_MTRRfix4K_C8000, 0); + wrmsr_smp(MSR_MTRRfix4K_D0000, 0); + wrmsr_smp(MSR_MTRRfix4K_D8000, 0); + wrmsr_smp(MSR_MTRRfix4K_E0000, 0); + wrmsr_smp(MSR_MTRRfix4K_E8000, 0); + wrmsr_smp(MSR_MTRRfix4K_F0000, 0); + wrmsr_smp(MSR_MTRRfix4K_F8000, 0); + /* Mark 3-4GB as UC, anything not specified defaults to WB */ + wrmsr_smp(MTRRphysBase_MSR(0), 0xc0000000 | MTRR_MEMTYPE_UC); + /* Make sure no reserved bit set to '1 in MTRRphysMask_MSR */ + wrmsr_smp(MTRRphysMask_MSR(0), (uint32_t)(~(0x40000000 - 1)) | 0x800); + wrmsr_smp(MSR_MTRRdefType, 0xc00 | MTRR_MEMTYPE_WB); +} + +void ram_probe(void) +{ + if (cmos_readb(0x34) | cmos_readb(0x35)) + ram_size = (cmos_readb(0x34) | (cmos_readb(0x35) << 8)) * 65536 + + 16 * 1024 * 1024; + else + ram_size = (cmos_readb(0x30) | (cmos_readb(0x31) << 8)) * 1024 + + 1 * 1024 * 1024; + BX_INFO("ram_size=0x%08lx\n", ram_size); + + if (cmos_readb(0x5b) | cmos_readb(0x5c) | cmos_readb(0x5d)) + ram_end = (((uint64_t)cmos_readb(0x5b) << 16) | + ((uint64_t)cmos_readb(0x5c) << 24) | + ((uint64_t)cmos_readb(0x5d) << 32)) + (1ull << 32); + else + ram_end = ram_size; + BX_INFO("ram_end=%ldMB\n", ram_end >> 20); +#ifdef BX_USE_EBDA_TABLES + ebda_cur_addr = ((*(uint16_t *)(0x40e)) << 4) + 0x386; + BX_INFO("ebda_cur_addr: 0x%08lx\n", ebda_cur_addr); +#endif +} + +/****************************************************/ +/* SMP probe */ + +extern uint8_t smp_ap_boot_code_start; +extern uint8_t smp_ap_boot_code_end; + +/* find the number of CPUs by launching a SIPI to them */ +void smp_probe(void) +{ + uint32_t val, sipi_vector; + + writew(&smp_cpus, 1); + if (cpuid_features & CPUID_APIC) { + + /* enable local APIC */ + val = readl(APIC_BASE + APIC_SVR); + val |= APIC_ENABLED; + writel(APIC_BASE + APIC_SVR, val); + + /* copy AP boot code */ + memcpy((void *)AP_BOOT_ADDR, &smp_ap_boot_code_start, + &smp_ap_boot_code_end - &smp_ap_boot_code_start); + + /* broadcast SIPI */ + writel(APIC_BASE + APIC_ICR_LOW, 0x000C4500); + sipi_vector = AP_BOOT_ADDR >> 12; + writel(APIC_BASE + APIC_ICR_LOW, 0x000C4600 | sipi_vector); + +#ifndef BX_QEMU + delay_ms(10); +#else + while (cmos_readb(0x5f) + 1 != readw(&smp_cpus)) + ; +#endif + } + BX_INFO("Found %d cpu(s)\n", readw(&smp_cpus)); +} + +/****************************************************/ +/* PCI init */ + +typedef struct PCIDevice { + int bus; + int devfn; +} PCIDevice; + +static uint32_t pci_bios_io_addr; +static uint32_t pci_bios_mem_addr; +/* host irqs corresponding to PCI irqs A-D */ +static uint8_t pci_irqs[4] = { 11, 9, 11, 9 }; +static PCIDevice i440_pcidev = {-1, -1}; + +static void pci_config_writel(PCIDevice *d, uint32_t addr, uint32_t val) +{ + outl(0xcf8, 0x80000000 | (d->bus << 16) | (d->devfn << 8) | (addr & 0xfc)); + outl(0xcfc, val); +} + +static void pci_config_writew(PCIDevice *d, uint32_t addr, uint32_t val) +{ + outl(0xcf8, 0x80000000 | (d->bus << 16) | (d->devfn << 8) | (addr & 0xfc)); + outw(0xcfc + (addr & 2), val); +} + +static void pci_config_writeb(PCIDevice *d, uint32_t addr, uint32_t val) +{ + outl(0xcf8, 0x80000000 | (d->bus << 16) | (d->devfn << 8) | (addr & 0xfc)); + outb(0xcfc + (addr & 3), val); +} + +static uint32_t pci_config_readl(PCIDevice *d, uint32_t addr) +{ + outl(0xcf8, 0x80000000 | (d->bus << 16) | (d->devfn << 8) | (addr & 0xfc)); + return inl(0xcfc); +} + +static uint32_t pci_config_readw(PCIDevice *d, uint32_t addr) +{ + outl(0xcf8, 0x80000000 | (d->bus << 16) | (d->devfn << 8) | (addr & 0xfc)); + return inw(0xcfc + (addr & 2)); +} + +static uint32_t pci_config_readb(PCIDevice *d, uint32_t addr) +{ + outl(0xcf8, 0x80000000 | (d->bus << 16) | (d->devfn << 8) | (addr & 0xfc)); + return inb(0xcfc + (addr & 3)); +} + +static void pci_set_io_region_addr(PCIDevice *d, int region_num, uint32_t addr) +{ + uint16_t cmd; + uint32_t ofs, old_addr; + + if ( region_num == PCI_ROM_SLOT ) { + ofs = 0x30; + }else{ + ofs = 0x10 + region_num * 4; + } + + old_addr = pci_config_readl(d, ofs); + + pci_config_writel(d, ofs, addr); + BX_INFO("region %d: 0x%08x\n", region_num, addr); + + /* enable memory mappings */ + cmd = pci_config_readw(d, PCI_COMMAND); + if ( region_num == PCI_ROM_SLOT ) + cmd |= 2; + else if (old_addr & PCI_ADDRESS_SPACE_IO) + cmd |= 1; + else + cmd |= 2; + pci_config_writew(d, PCI_COMMAND, cmd); +} + +/* return the global irq number corresponding to a given device irq + pin. We could also use the bus number to have a more precise + mapping. */ +static int pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num) +{ + int slot_addend; + slot_addend = (pci_dev->devfn >> 3) - 1; + return (irq_num + slot_addend) & 3; +} + +static void find_bios_table_area(void) +{ + unsigned long addr; + for(addr = 0xf0000; addr < 0x100000; addr += 16) { + if (*(uint32_t *)addr == 0xaafb4442) { + bios_table_cur_addr = addr + 8; + bios_table_end_addr = bios_table_cur_addr + *(uint32_t *)(addr + 4); + BX_INFO("bios_table_addr: 0x%08lx end=0x%08lx\n", + bios_table_cur_addr, bios_table_end_addr); + return; + } + } + return; +} + +static void bios_shadow_init(PCIDevice *d) +{ + int v; + + if (bios_table_cur_addr == 0) + return; + + /* remap the BIOS to shadow RAM an keep it read/write while we + are writing tables */ + v = pci_config_readb(d, 0x59); + v &= 0xcf; + pci_config_writeb(d, 0x59, v); + memcpy((void *)BIOS_TMP_STORAGE, (void *)0x000f0000, 0x10000); + v |= 0x30; + pci_config_writeb(d, 0x59, v); + memcpy((void *)0x000f0000, (void *)BIOS_TMP_STORAGE, 0x10000); + + i440_pcidev = *d; +} + +static void bios_lock_shadow_ram(void) +{ + PCIDevice *d = &i440_pcidev; + int v; + + wbinvd(); + v = pci_config_readb(d, 0x59); + v = (v & 0x0f) | (0x10); + pci_config_writeb(d, 0x59, v); +} + +static void pci_bios_init_bridges(PCIDevice *d) +{ + uint16_t vendor_id, device_id; + + vendor_id = pci_config_readw(d, PCI_VENDOR_ID); + device_id = pci_config_readw(d, PCI_DEVICE_ID); + + if (vendor_id == PCI_VENDOR_ID_INTEL && + (device_id == PCI_DEVICE_ID_INTEL_82371SB_0 || + device_id == PCI_DEVICE_ID_INTEL_82371AB_0)) { + int i, irq; + uint8_t elcr[2]; + + /* PIIX3/PIIX4 PCI to ISA bridge */ + + elcr[0] = 0x00; + elcr[1] = 0x00; + for(i = 0; i < 4; i++) { + irq = pci_irqs[i]; + /* set to trigger level */ + elcr[irq >> 3] |= (1 << (irq & 7)); + /* activate irq remapping in PIIX */ + pci_config_writeb(d, 0x60 + i, irq); + } + outb(0x4d0, elcr[0]); + outb(0x4d1, elcr[1]); + BX_INFO("PIIX3/PIIX4 init: elcr=%02x %02x\n", + elcr[0], elcr[1]); + } else if (vendor_id == PCI_VENDOR_ID_INTEL && device_id == PCI_DEVICE_ID_INTEL_82441) { + /* i440 PCI bridge */ + bios_shadow_init(d); + } +} + +extern uint8_t smm_relocation_start, smm_relocation_end; +extern uint8_t smm_code_start, smm_code_end; + +#ifdef BX_USE_SMM +static void smm_init(PCIDevice *d) +{ + uint32_t value; + + /* check if SMM init is already done */ + value = pci_config_readl(d, 0x58); + if ((value & (1 << 25)) == 0) { + + /* enable the SMM memory window */ + pci_config_writeb(&i440_pcidev, 0x72, 0x02 | 0x48); + + /* save original memory content */ + memcpy((void *)0xa8000, (void *)0x38000, 0x8000); + + /* copy the SMM relocation code */ + memcpy((void *)0x38000, &smm_relocation_start, + &smm_relocation_end - &smm_relocation_start); + + /* enable SMI generation when writing to the APMC register */ + pci_config_writel(d, 0x58, value | (1 << 25)); + + /* init APM status port */ + outb(0xb3, 0x01); + + /* raise an SMI interrupt */ + outb(0xb2, 0x00); + + /* wait until SMM code executed */ + while (inb(0xb3) != 0x00); + + /* restore original memory content */ + memcpy((void *)0x38000, (void *)0xa8000, 0x8000); + + /* copy the SMM code */ + memcpy((void *)0xa8000, &smm_code_start, + &smm_code_end - &smm_code_start); + wbinvd(); + + /* close the SMM memory window and enable normal SMM */ + pci_config_writeb(&i440_pcidev, 0x72, 0x02 | 0x08); + } +} +#endif + +static void piix4_pm_enable(PCIDevice *d) +{ + /* PIIX4 Power Management device (for ACPI) */ + pci_config_writel(d, 0x40, PM_IO_BASE | 1); + pci_config_writeb(d, 0x80, 0x01); /* enable PM io space */ + pci_config_writel(d, 0x90, SMB_IO_BASE | 1); + pci_config_writeb(d, 0xd2, 0x09); /* enable SMBus io space */ +#ifdef BX_USE_SMM + smm_init(d); +#endif +} + +static void pci_bios_init_device(PCIDevice *d) +{ + int class; + uint32_t *paddr; + int i, pin, pic_irq, vendor_id, device_id; + + class = pci_config_readw(d, PCI_CLASS_DEVICE); + vendor_id = pci_config_readw(d, PCI_VENDOR_ID); + device_id = pci_config_readw(d, PCI_DEVICE_ID); + BX_INFO("PCI: bus=%d devfn=0x%02x: vendor_id=0x%04x device_id=0x%04x class=0x%04x\n", + d->bus, d->devfn, vendor_id, device_id, class); + switch(class) { + case 0x0101: /* Mass storage controller - IDE interface */ + if (vendor_id == PCI_VENDOR_ID_INTEL && + (device_id == PCI_DEVICE_ID_INTEL_82371SB_1 || + device_id == PCI_DEVICE_ID_INTEL_82371AB)) { + /* PIIX3/PIIX4 IDE */ + pci_config_writew(d, 0x40, 0x8000); // enable IDE0 + pci_config_writew(d, 0x42, 0x8000); // enable IDE1 + goto default_map; + } else { + /* IDE: we map it as in ISA mode */ + pci_set_io_region_addr(d, 0, 0x1f0); + pci_set_io_region_addr(d, 1, 0x3f4); + pci_set_io_region_addr(d, 2, 0x170); + pci_set_io_region_addr(d, 3, 0x374); + } + break; + case 0x0800: /* Generic system peripheral - PIC */ + if (vendor_id == PCI_VENDOR_ID_IBM) { + /* IBM */ + if (device_id == 0x0046 || device_id == 0xFFFF) { + /* MPIC & MPIC2 */ + pci_set_io_region_addr(d, 0, 0x80800000 + 0x00040000); + } + } + break; + case 0xff00: + if (vendor_id == PCI_VENDOR_ID_APPLE && + (device_id == 0x0017 || device_id == 0x0022)) { + /* macio bridge */ + pci_set_io_region_addr(d, 0, 0x80800000); + } + break; + default: + default_map: + /* default memory mappings */ + for(i = 0; i < PCI_NUM_REGIONS; i++) { + int ofs; + uint32_t val, size ; + + if (i == PCI_ROM_SLOT) { + ofs = 0x30; + pci_config_writel(d, ofs, 0xfffffffe); + } else { + ofs = 0x10 + i * 4; + pci_config_writel(d, ofs, 0xffffffff); + } + val = pci_config_readl(d, ofs); + if (val != 0) { + size = (~(val & ~0xf)) + 1; + if (val & PCI_ADDRESS_SPACE_IO) + paddr = &pci_bios_io_addr; + else + paddr = &pci_bios_mem_addr; + *paddr = (*paddr + size - 1) & ~(size - 1); + pci_set_io_region_addr(d, i, *paddr); + *paddr += size; + } + } + break; + } + + /* map the interrupt */ + pin = pci_config_readb(d, PCI_INTERRUPT_PIN); + if (pin != 0) { + pin = pci_slot_get_pirq(d, pin - 1); + pic_irq = pci_irqs[pin]; + pci_config_writeb(d, PCI_INTERRUPT_LINE, pic_irq); + } + + if (vendor_id == PCI_VENDOR_ID_INTEL && device_id == PCI_DEVICE_ID_INTEL_82371AB_3) { + /* PIIX4 Power Management device (for ACPI) */ + pm_io_base = PM_IO_BASE; + smb_io_base = SMB_IO_BASE; + // acpi sci is hardwired to 9 + pci_config_writeb(d, PCI_INTERRUPT_LINE, 9); + pm_sci_int = pci_config_readb(d, PCI_INTERRUPT_LINE); + piix4_pm_enable(d); + acpi_enabled = 1; + } +} + +void pci_for_each_device(void (*init_func)(PCIDevice *d)) +{ + PCIDevice d1, *d = &d1; + int bus, devfn; + uint16_t vendor_id, device_id; + + for(bus = 0; bus < 1; bus++) { + for(devfn = 0; devfn < 256; devfn++) { + d->bus = bus; + d->devfn = devfn; + vendor_id = pci_config_readw(d, PCI_VENDOR_ID); + device_id = pci_config_readw(d, PCI_DEVICE_ID); + if (vendor_id != 0xffff || device_id != 0xffff) { + init_func(d); + } + } + } +} + +void pci_bios_init(void) +{ + pci_bios_io_addr = 0xc000; + pci_bios_mem_addr = 0xc0000000; + + pci_for_each_device(pci_bios_init_bridges); + + pci_for_each_device(pci_bios_init_device); +} + +/****************************************************/ +/* Multi Processor table init */ + +static void putb(uint8_t **pp, int val) +{ + uint8_t *q; + q = *pp; + *q++ = val; + *pp = q; +} + +static void putstr(uint8_t **pp, const char *str) +{ + uint8_t *q; + q = *pp; + while (*str) + *q++ = *str++; + *pp = q; +} + +static void putle16(uint8_t **pp, int val) +{ + uint8_t *q; + q = *pp; + *q++ = val; + *q++ = val >> 8; + *pp = q; +} + +static void putle32(uint8_t **pp, int val) +{ + uint8_t *q; + q = *pp; + *q++ = val; + *q++ = val >> 8; + *q++ = val >> 16; + *q++ = val >> 24; + *pp = q; +} + +static int mpf_checksum(const uint8_t *data, int len) +{ + int sum, i; + sum = 0; + for(i = 0; i < len; i++) + sum += data[i]; + return sum & 0xff; +} + +static unsigned long align(unsigned long addr, unsigned long v) +{ + return (addr + v - 1) & ~(v - 1); +} + +static void mptable_init(void) +{ + uint8_t *mp_config_table, *q, *float_pointer_struct; + int ioapic_id, i, len; + int mp_config_table_size; + +#ifdef BX_USE_EBDA_TABLES + if (ram_size - ACPI_DATA_SIZE - MPTABLE_MAX_SIZE < 0x100000) { + BX_INFO("Not enough memory for MPC table\n"); + return; + } + mp_config_table = (uint8_t *)(ram_size - ACPI_DATA_SIZE - MPTABLE_MAX_SIZE); +#else + bios_table_cur_addr = align(bios_table_cur_addr, 16); + mp_config_table = (uint8_t *)bios_table_cur_addr; +#endif + q = mp_config_table; + putstr(&q, "PCMP"); /* "PCMP signature */ + putle16(&q, 0); /* table length (patched later) */ + putb(&q, 4); /* spec rev */ + putb(&q, 0); /* checksum (patched later) */ +#ifdef BX_QEMU + putstr(&q, "QEMUCPU "); /* OEM id */ +#else + putstr(&q, "BOCHSCPU"); +#endif + putstr(&q, "0.1 "); /* vendor id */ + putle32(&q, 0); /* OEM table ptr */ + putle16(&q, 0); /* OEM table size */ + putle16(&q, smp_cpus + 18); /* entry count */ + putle32(&q, 0xfee00000); /* local APIC addr */ + putle16(&q, 0); /* ext table length */ + putb(&q, 0); /* ext table checksum */ + putb(&q, 0); /* reserved */ + + for(i = 0; i < smp_cpus; i++) { + putb(&q, 0); /* entry type = processor */ + putb(&q, i); /* APIC id */ + putb(&q, 0x11); /* local APIC version number */ + if (i == 0) + putb(&q, 3); /* cpu flags: enabled, bootstrap cpu */ + else + putb(&q, 1); /* cpu flags: enabled */ + if (cpuid_signature) { + putle32(&q, cpuid_signature); + putle32(&q, cpuid_features); + } else { + putb(&q, 0); /* cpu signature */ + putb(&q, 6); + putb(&q, 0); + putb(&q, 0); + putle16(&q, 0x201); /* feature flags */ + putle16(&q, 0); + } + putle16(&q, 0); /* reserved */ + putle16(&q, 0); + putle16(&q, 0); + putle16(&q, 0); + } + + /* isa bus */ + putb(&q, 1); /* entry type = bus */ + putb(&q, 0); /* bus ID */ + putstr(&q, "ISA "); + + /* ioapic */ + ioapic_id = smp_cpus; + putb(&q, 2); /* entry type = I/O APIC */ + putb(&q, ioapic_id); /* apic ID */ + putb(&q, 0x11); /* I/O APIC version number */ + putb(&q, 1); /* enable */ + putle32(&q, 0xfec00000); /* I/O APIC addr */ + + /* irqs */ + for(i = 0; i < 16; i++) { +#ifdef BX_QEMU + /* One entry per ioapic input. Input 2 is covered by + irq0->inti2 override (i == 0). irq 2 is unused */ + if (i == 2) + continue; +#endif + putb(&q, 3); /* entry type = I/O interrupt */ + putb(&q, 0); /* interrupt type = vectored interrupt */ + putb(&q, 0); /* flags: po=0, el=0 */ + putb(&q, 0); + putb(&q, 0); /* source bus ID = ISA */ + putb(&q, i); /* source bus IRQ */ + putb(&q, ioapic_id); /* dest I/O APIC ID */ +#ifdef BX_QEMU + putb(&q, i == 0 ? 2 : i); /* dest I/O APIC interrupt in */ +#else + putb(&q, i); /* dest I/O APIC interrupt in */ +#endif + } + /* patch length */ + len = q - mp_config_table; + mp_config_table[4] = len; + mp_config_table[5] = len >> 8; + + mp_config_table[7] = -mpf_checksum(mp_config_table, q - mp_config_table); + + mp_config_table_size = q - mp_config_table; + +#ifndef BX_USE_EBDA_TABLES + bios_table_cur_addr += mp_config_table_size; +#endif + + /* floating pointer structure */ +#ifdef BX_USE_EBDA_TABLES + ebda_cur_addr = align(ebda_cur_addr, 16); + float_pointer_struct = (uint8_t *)ebda_cur_addr; +#else + bios_table_cur_addr = align(bios_table_cur_addr, 16); + float_pointer_struct = (uint8_t *)bios_table_cur_addr; +#endif + q = float_pointer_struct; + putstr(&q, "_MP_"); + /* pointer to MP config table */ + putle32(&q, (unsigned long)mp_config_table); + + putb(&q, 1); /* length in 16 byte units */ + putb(&q, 4); /* MP spec revision */ + putb(&q, 0); /* checksum (patched later) */ + putb(&q, 0); /* MP feature byte 1 */ + + putb(&q, 0); + putb(&q, 0); + putb(&q, 0); + putb(&q, 0); + float_pointer_struct[10] = + -mpf_checksum(float_pointer_struct, q - float_pointer_struct); +#ifdef BX_USE_EBDA_TABLES + ebda_cur_addr += (q - float_pointer_struct); +#else + bios_table_cur_addr += (q - float_pointer_struct); +#endif + BX_INFO("MP table addr=0x%08lx MPC table addr=0x%08lx size=0x%x\n", + (unsigned long)float_pointer_struct, + (unsigned long)mp_config_table, + mp_config_table_size); +} + +/****************************************************/ +/* ACPI tables init */ + +/* Table structure from Linux kernel (the ACPI tables are under the + BSD license) */ + +/* + * All tables must be byte-packed to match the ACPI specification, since + * the tables are provided by the system BIOS. + */ + +#define ACPI_TABLE_HEADER_DEF /* ACPI common table header */ \ + uint8_t signature [4]; /* ACPI signature (4 ASCII characters) */\ + uint32_t length; /* Length of table, in bytes, including header */\ + uint8_t revision; /* ACPI Specification minor version # */\ + uint8_t checksum; /* To make sum of entire table == 0 */\ + uint8_t oem_id [6]; /* OEM identification */\ + uint8_t oem_table_id [8]; /* OEM table identification */\ + uint32_t oem_revision; /* OEM revision number */\ + uint8_t asl_compiler_id [4]; /* ASL compiler vendor ID */\ + uint32_t asl_compiler_revision; /* ASL compiler revision number */ + + +struct acpi_table_header /* ACPI common table header */ +{ + ACPI_TABLE_HEADER_DEF +} __attribute__((__packed__)); + +struct rsdp_descriptor /* Root System Descriptor Pointer */ +{ + uint8_t signature [8]; /* ACPI signature, contains "RSD PTR " */ + uint8_t checksum; /* To make sum of struct == 0 */ + uint8_t oem_id [6]; /* OEM identification */ + uint8_t revision; /* Must be 0 for 1.0, 2 for 2.0 */ + uint32_t rsdt_physical_address; /* 32-bit physical address of RSDT */ + uint32_t length; /* XSDT Length in bytes including hdr */ + uint64_t xsdt_physical_address; /* 64-bit physical address of XSDT */ + uint8_t extended_checksum; /* Checksum of entire table */ + uint8_t reserved [3]; /* Reserved field must be 0 */ +} __attribute__((__packed__)); + +/* + * ACPI 1.0 Root System Description Table (RSDT) + */ +struct rsdt_descriptor_rev1 +{ + ACPI_TABLE_HEADER_DEF /* ACPI common table header */ +#ifdef BX_QEMU + uint32_t table_offset_entry [4]; /* Array of pointers to other */ +#else + uint32_t table_offset_entry [3]; /* Array of pointers to other */ +#endif + /* ACPI tables */ +} __attribute__((__packed__)); + +/* + * ACPI 1.0 Firmware ACPI Control Structure (FACS) + */ +struct facs_descriptor_rev1 +{ + uint8_t signature[4]; /* ACPI Signature */ + uint32_t length; /* Length of structure, in bytes */ + uint32_t hardware_signature; /* Hardware configuration signature */ + uint32_t firmware_waking_vector; /* ACPI OS waking vector */ + uint32_t global_lock; /* Global Lock */ + uint32_t S4bios_f : 1; /* Indicates if S4BIOS support is present */ + uint32_t reserved1 : 31; /* Must be 0 */ + uint8_t resverved3 [40]; /* Reserved - must be zero */ +} __attribute__((__packed__)); + + +/* + * ACPI 1.0 Fixed ACPI Description Table (FADT) + */ +struct fadt_descriptor_rev1 +{ + ACPI_TABLE_HEADER_DEF /* ACPI common table header */ + uint32_t firmware_ctrl; /* Physical address of FACS */ + uint32_t dsdt; /* Physical address of DSDT */ + uint8_t model; /* System Interrupt Model */ + uint8_t reserved1; /* Reserved */ + uint16_t sci_int; /* System vector of SCI interrupt */ + uint32_t smi_cmd; /* Port address of SMI command port */ + uint8_t acpi_enable; /* Value to write to smi_cmd to enable ACPI */ + uint8_t acpi_disable; /* Value to write to smi_cmd to disable ACPI */ + uint8_t S4bios_req; /* Value to write to SMI CMD to enter S4BIOS state */ + uint8_t reserved2; /* Reserved - must be zero */ + uint32_t pm1a_evt_blk; /* Port address of Power Mgt 1a acpi_event Reg Blk */ + uint32_t pm1b_evt_blk; /* Port address of Power Mgt 1b acpi_event Reg Blk */ + uint32_t pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk */ + uint32_t pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk */ + uint32_t pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk */ + uint32_t pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk */ + uint32_t gpe0_blk; /* Port addr of General Purpose acpi_event 0 Reg Blk */ + uint32_t gpe1_blk; /* Port addr of General Purpose acpi_event 1 Reg Blk */ + uint8_t pm1_evt_len; /* Byte length of ports at pm1_x_evt_blk */ + uint8_t pm1_cnt_len; /* Byte length of ports at pm1_x_cnt_blk */ + uint8_t pm2_cnt_len; /* Byte Length of ports at pm2_cnt_blk */ + uint8_t pm_tmr_len; /* Byte Length of ports at pm_tm_blk */ + uint8_t gpe0_blk_len; /* Byte Length of ports at gpe0_blk */ + uint8_t gpe1_blk_len; /* Byte Length of ports at gpe1_blk */ + uint8_t gpe1_base; /* Offset in gpe model where gpe1 events start */ + uint8_t reserved3; /* Reserved */ + uint16_t plvl2_lat; /* Worst case HW latency to enter/exit C2 state */ + uint16_t plvl3_lat; /* Worst case HW latency to enter/exit C3 state */ + uint16_t flush_size; /* Size of area read to flush caches */ + uint16_t flush_stride; /* Stride used in flushing caches */ + uint8_t duty_offset; /* Bit location of duty cycle field in p_cnt reg */ + uint8_t duty_width; /* Bit width of duty cycle field in p_cnt reg */ + uint8_t day_alrm; /* Index to day-of-month alarm in RTC CMOS RAM */ + uint8_t mon_alrm; /* Index to month-of-year alarm in RTC CMOS RAM */ + uint8_t century; /* Index to century in RTC CMOS RAM */ + uint8_t reserved4; /* Reserved */ + uint8_t reserved4a; /* Reserved */ + uint8_t reserved4b; /* Reserved */ +#if 0 + uint32_t wb_invd : 1; /* The wbinvd instruction works properly */ + uint32_t wb_invd_flush : 1; /* The wbinvd flushes but does not invalidate */ + uint32_t proc_c1 : 1; /* All processors support C1 state */ + uint32_t plvl2_up : 1; /* C2 state works on MP system */ + uint32_t pwr_button : 1; /* Power button is handled as a generic feature */ + uint32_t sleep_button : 1; /* Sleep button is handled as a generic feature, or not present */ + uint32_t fixed_rTC : 1; /* RTC wakeup stat not in fixed register space */ + uint32_t rtcs4 : 1; /* RTC wakeup stat not possible from S4 */ + uint32_t tmr_val_ext : 1; /* The tmr_val width is 32 bits (0 = 24 bits) */ + uint32_t reserved5 : 23; /* Reserved - must be zero */ +#else + uint32_t flags; +#endif +} __attribute__((__packed__)); + +/* + * MADT values and structures + */ + +/* Values for MADT PCATCompat */ + +#define DUAL_PIC 0 +#define MULTIPLE_APIC 1 + + +/* Master MADT */ + +struct multiple_apic_table +{ + ACPI_TABLE_HEADER_DEF /* ACPI common table header */ + uint32_t local_apic_address; /* Physical address of local APIC */ +#if 0 + uint32_t PCATcompat : 1; /* A one indicates system also has dual 8259s */ + uint32_t reserved1 : 31; +#else + uint32_t flags; +#endif +} __attribute__((__packed__)); + + +/* Values for Type in APIC_HEADER_DEF */ + +#define APIC_PROCESSOR 0 +#define APIC_IO 1 +#define APIC_XRUPT_OVERRIDE 2 +#define APIC_NMI 3 +#define APIC_LOCAL_NMI 4 +#define APIC_ADDRESS_OVERRIDE 5 +#define APIC_IO_SAPIC 6 +#define APIC_LOCAL_SAPIC 7 +#define APIC_XRUPT_SOURCE 8 +#define APIC_RESERVED 9 /* 9 and greater are reserved */ + +/* + * MADT sub-structures (Follow MULTIPLE_APIC_DESCRIPTION_TABLE) + */ +#define APIC_HEADER_DEF /* Common APIC sub-structure header */\ + uint8_t type; \ + uint8_t length; + +/* Sub-structures for MADT */ + +struct madt_processor_apic +{ + APIC_HEADER_DEF + uint8_t processor_id; /* ACPI processor id */ + uint8_t local_apic_id; /* Processor's local APIC id */ +#if 0 + uint32_t processor_enabled: 1; /* Processor is usable if set */ + uint32_t reserved2 : 31; /* Reserved, must be zero */ +#else + uint32_t flags; +#endif +} __attribute__((__packed__)); + +#ifdef BX_QEMU +/* + * * ACPI 2.0 Generic Address Space definition. + * */ +struct acpi_20_generic_address { + uint8_t address_space_id; + uint8_t register_bit_width; + uint8_t register_bit_offset; + uint8_t reserved; + uint64_t address; +} __attribute__((__packed__)); + +/* + * * HPET Description Table + * */ +struct acpi_20_hpet { + ACPI_TABLE_HEADER_DEF /* ACPI common table header */ + uint32_t timer_block_id; + struct acpi_20_generic_address addr; + uint8_t hpet_number; + uint16_t min_tick; + uint8_t page_protect; +} __attribute__((__packed__)); +#define ACPI_HPET_ADDRESS 0xFED00000UL +#endif + +struct madt_io_apic +{ + APIC_HEADER_DEF + uint8_t io_apic_id; /* I/O APIC ID */ + uint8_t reserved; /* Reserved - must be zero */ + uint32_t address; /* APIC physical address */ + uint32_t interrupt; /* Global system interrupt where INTI + * lines start */ +} __attribute__((__packed__)); + +#ifdef BX_QEMU +struct madt_int_override +{ + APIC_HEADER_DEF + uint8_t bus; /* Identifies ISA Bus */ + uint8_t source; /* Bus-relative interrupt source */ + uint32_t gsi; /* GSI that source will signal */ + uint16_t flags; /* MPS INTI flags */ +} __attribute__((__packed__)); +#endif + +#include "acpi-dsdt.hex" + +static inline uint16_t cpu_to_le16(uint16_t x) +{ + return x; +} + +static inline uint32_t cpu_to_le32(uint32_t x) +{ + return x; +} + +static int acpi_checksum(const uint8_t *data, int len) +{ + int sum, i; + sum = 0; + for(i = 0; i < len; i++) + sum += data[i]; + return (-sum) & 0xff; +} + +static void acpi_build_table_header(struct acpi_table_header *h, + char *sig, int len, uint8_t rev) +{ + memcpy(h->signature, sig, 4); + h->length = cpu_to_le32(len); + h->revision = rev; +#ifdef BX_QEMU + memcpy(h->oem_id, "QEMU ", 6); + memcpy(h->oem_table_id, "QEMU", 4); +#else + memcpy(h->oem_id, "BOCHS ", 6); + memcpy(h->oem_table_id, "BXPC", 4); +#endif + memcpy(h->oem_table_id + 4, sig, 4); + h->oem_revision = cpu_to_le32(1); +#ifdef BX_QEMU + memcpy(h->asl_compiler_id, "QEMU", 4); +#else + memcpy(h->asl_compiler_id, "BXPC", 4); +#endif + h->asl_compiler_revision = cpu_to_le32(1); + h->checksum = acpi_checksum((void *)h, len); +} + +int acpi_build_processor_ssdt(uint8_t *ssdt) +{ + uint8_t *ssdt_ptr = ssdt; + int i, length; + int acpi_cpus = smp_cpus > 0xff ? 0xff : smp_cpus; + + ssdt_ptr[9] = 0; // checksum; + ssdt_ptr += sizeof(struct acpi_table_header); + + // caluculate the length of processor block and scope block excluding PkgLength + length = 0x0d * acpi_cpus + 4; + + // build processor scope header + *(ssdt_ptr++) = 0x10; // ScopeOp + if (length <= 0x3e) { + /* Handle 1-4 CPUs with one byte encoding */ + *(ssdt_ptr++) = length + 1; + } else { + /* Handle 5-314 CPUs with two byte encoding */ + *(ssdt_ptr++) = 0x40 | ((length + 2) & 0xf); + *(ssdt_ptr++) = (length + 2) >> 4; + } + *(ssdt_ptr++) = '_'; // Name + *(ssdt_ptr++) = 'P'; + *(ssdt_ptr++) = 'R'; + *(ssdt_ptr++) = '_'; + + // build object for each processor + for(i=0;i> 4) < 0xa ? (i >> 4) + '0' : (i >> 4) + 'A' - 0xa; + else + *(ssdt_ptr++) = 'U'; + *(ssdt_ptr++) = (i & 0xf) < 0xa ? (i & 0xf) + '0' : (i & 0xf) + 'A' - 0xa; + *(ssdt_ptr++) = i; + *(ssdt_ptr++) = 0x10; // Processor block address + *(ssdt_ptr++) = 0xb0; + *(ssdt_ptr++) = 0; + *(ssdt_ptr++) = 0; + *(ssdt_ptr++) = 6; // Processor block length + } + + acpi_build_table_header((struct acpi_table_header *)ssdt, + "SSDT", ssdt_ptr - ssdt, 1); + + return ssdt_ptr - ssdt; +} + +/* base_addr must be a multiple of 4KB */ +void acpi_bios_init(void) +{ + struct rsdp_descriptor *rsdp; + struct rsdt_descriptor_rev1 *rsdt; + struct fadt_descriptor_rev1 *fadt; + struct facs_descriptor_rev1 *facs; + struct multiple_apic_table *madt; + uint8_t *dsdt, *ssdt; +#ifdef BX_QEMU + struct acpi_20_hpet *hpet; + uint32_t hpet_addr; +#endif + uint32_t base_addr, rsdt_addr, fadt_addr, addr, facs_addr, dsdt_addr, ssdt_addr; + uint32_t acpi_tables_size, madt_addr, madt_size; + int i; + + if (ram_size - ACPI_DATA_SIZE < 0x100000) { + BX_INFO("Not enough memory for ACPI tables\n"); + return; + } + + /* reserve memory space for tables */ +#ifdef BX_USE_EBDA_TABLES + ebda_cur_addr = align(ebda_cur_addr, 16); + rsdp = (void *)(ebda_cur_addr); + ebda_cur_addr += sizeof(*rsdp); +#else + bios_table_cur_addr = align(bios_table_cur_addr, 16); + rsdp = (void *)(bios_table_cur_addr); + bios_table_cur_addr += sizeof(*rsdp); +#endif + + addr = base_addr = ram_size - ACPI_DATA_SIZE; + rsdt_addr = addr; + rsdt = (void *)(addr); + addr += sizeof(*rsdt); + + fadt_addr = addr; + fadt = (void *)(addr); + addr += sizeof(*fadt); + + /* XXX: FACS should be in RAM */ + addr = (addr + 63) & ~63; /* 64 byte alignment for FACS */ + facs_addr = addr; + facs = (void *)(addr); + addr += sizeof(*facs); + + dsdt_addr = addr; + dsdt = (void *)(addr); + addr += sizeof(AmlCode); + + ssdt_addr = addr; + ssdt = (void *)(addr); + addr += acpi_build_processor_ssdt(ssdt); + + addr = (addr + 7) & ~7; + madt_addr = addr; + madt_size = sizeof(*madt) + + sizeof(struct madt_processor_apic) * smp_cpus + +#ifdef BX_QEMU + sizeof(struct madt_io_apic) + sizeof(struct madt_int_override); +#else + sizeof(struct madt_io_apic); +#endif + madt = (void *)(addr); + addr += madt_size; + +#ifdef BX_QEMU + addr = (addr + 7) & ~7; + hpet_addr = addr; + hpet = (void *)(addr); + addr += sizeof(*hpet); +#endif + + acpi_tables_size = addr - base_addr; + + BX_INFO("ACPI tables: RSDP addr=0x%08lx ACPI DATA addr=0x%08lx size=0x%x\n", + (unsigned long)rsdp, + (unsigned long)rsdt, acpi_tables_size); + + /* RSDP */ + memset(rsdp, 0, sizeof(*rsdp)); + memcpy(rsdp->signature, "RSD PTR ", 8); +#ifdef BX_QEMU + memcpy(rsdp->oem_id, "QEMU ", 6); +#else + memcpy(rsdp->oem_id, "BOCHS ", 6); +#endif + rsdp->rsdt_physical_address = cpu_to_le32(rsdt_addr); + rsdp->checksum = acpi_checksum((void *)rsdp, 20); + + /* RSDT */ + memset(rsdt, 0, sizeof(*rsdt)); + rsdt->table_offset_entry[0] = cpu_to_le32(fadt_addr); + rsdt->table_offset_entry[1] = cpu_to_le32(madt_addr); + rsdt->table_offset_entry[2] = cpu_to_le32(ssdt_addr); +#ifdef BX_QEMU + rsdt->table_offset_entry[3] = cpu_to_le32(hpet_addr); +#endif + acpi_build_table_header((struct acpi_table_header *)rsdt, + "RSDT", sizeof(*rsdt), 1); + + /* FADT */ + memset(fadt, 0, sizeof(*fadt)); + fadt->firmware_ctrl = cpu_to_le32(facs_addr); + fadt->dsdt = cpu_to_le32(dsdt_addr); + fadt->model = 1; + fadt->reserved1 = 0; + fadt->sci_int = cpu_to_le16(pm_sci_int); + fadt->smi_cmd = cpu_to_le32(SMI_CMD_IO_ADDR); + fadt->acpi_enable = 0xf1; + fadt->acpi_disable = 0xf0; + fadt->pm1a_evt_blk = cpu_to_le32(pm_io_base); + fadt->pm1a_cnt_blk = cpu_to_le32(pm_io_base + 0x04); + fadt->pm_tmr_blk = cpu_to_le32(pm_io_base + 0x08); + fadt->pm1_evt_len = 4; + fadt->pm1_cnt_len = 2; + fadt->pm_tmr_len = 4; + fadt->plvl2_lat = cpu_to_le16(0xfff); // C2 state not supported + fadt->plvl3_lat = cpu_to_le16(0xfff); // C3 state not supported + /* WBINVD + PROC_C1 + PWR_BUTTON + SLP_BUTTON + FIX_RTC */ + fadt->flags = cpu_to_le32((1 << 0) | (1 << 2) | (1 << 4) | (1 << 5) | (1 << 6)); + acpi_build_table_header((struct acpi_table_header *)fadt, "FACP", + sizeof(*fadt), 1); + + /* FACS */ + memset(facs, 0, sizeof(*facs)); + memcpy(facs->signature, "FACS", 4); + facs->length = cpu_to_le32(sizeof(*facs)); + BX_INFO("Firmware waking vector %p\n", &facs->firmware_waking_vector); + + /* DSDT */ + memcpy(dsdt, AmlCode, sizeof(AmlCode)); + + /* MADT */ + { + struct madt_processor_apic *apic; + struct madt_io_apic *io_apic; +#ifdef BX_QEMU + struct madt_int_override *int_override; +#endif + + memset(madt, 0, madt_size); + madt->local_apic_address = cpu_to_le32(0xfee00000); + madt->flags = cpu_to_le32(1); + apic = (void *)(madt + 1); + for(i=0;itype = APIC_PROCESSOR; + apic->length = sizeof(*apic); + apic->processor_id = i; + apic->local_apic_id = i; + apic->flags = cpu_to_le32(1); + apic++; + } + io_apic = (void *)apic; + io_apic->type = APIC_IO; + io_apic->length = sizeof(*io_apic); + io_apic->io_apic_id = smp_cpus; + io_apic->address = cpu_to_le32(0xfec00000); + io_apic->interrupt = cpu_to_le32(0); +#ifdef BX_QEMU + io_apic++; + + int_override = (void *)io_apic; + int_override->type = APIC_XRUPT_OVERRIDE; + int_override->length = sizeof(*int_override); + int_override->bus = cpu_to_le32(0); + int_override->source = cpu_to_le32(0); + int_override->gsi = cpu_to_le32(2); + int_override->flags = cpu_to_le32(0); +#endif + + acpi_build_table_header((struct acpi_table_header *)madt, + "APIC", madt_size, 1); + } + +#ifdef BX_QEMU + /* HPET */ + memset(hpet, 0, sizeof(*hpet)); + /* Note timer_block_id value must be kept in sync with value advertised by + * emulated hpet + */ + hpet->timer_block_id = cpu_to_le32(0x8086a201); + hpet->addr.address = cpu_to_le32(ACPI_HPET_ADDRESS); + acpi_build_table_header((struct acpi_table_header *)hpet, + "HPET", sizeof(*hpet), 1); +#endif + +} + +/* SMBIOS entry point -- must be written to a 16-bit aligned address + between 0xf0000 and 0xfffff. + */ +struct smbios_entry_point { + char anchor_string[4]; + uint8_t checksum; + uint8_t length; + uint8_t smbios_major_version; + uint8_t smbios_minor_version; + uint16_t max_structure_size; + uint8_t entry_point_revision; + uint8_t formatted_area[5]; + char intermediate_anchor_string[5]; + uint8_t intermediate_checksum; + uint16_t structure_table_length; + uint32_t structure_table_address; + uint16_t number_of_structures; + uint8_t smbios_bcd_revision; +} __attribute__((__packed__)); + +/* This goes at the beginning of every SMBIOS structure. */ +struct smbios_structure_header { + uint8_t type; + uint8_t length; + uint16_t handle; +} __attribute__((__packed__)); + +/* SMBIOS type 0 - BIOS Information */ +struct smbios_type_0 { + struct smbios_structure_header header; + uint8_t vendor_str; + uint8_t bios_version_str; + uint16_t bios_starting_address_segment; + uint8_t bios_release_date_str; + uint8_t bios_rom_size; + uint8_t bios_characteristics[8]; + uint8_t bios_characteristics_extension_bytes[2]; + uint8_t system_bios_major_release; + uint8_t system_bios_minor_release; + uint8_t embedded_controller_major_release; + uint8_t embedded_controller_minor_release; +} __attribute__((__packed__)); + +/* SMBIOS type 1 - System Information */ +struct smbios_type_1 { + struct smbios_structure_header header; + uint8_t manufacturer_str; + uint8_t product_name_str; + uint8_t version_str; + uint8_t serial_number_str; + uint8_t uuid[16]; + uint8_t wake_up_type; + uint8_t sku_number_str; + uint8_t family_str; +} __attribute__((__packed__)); + +/* SMBIOS type 3 - System Enclosure (v2.3) */ +struct smbios_type_3 { + struct smbios_structure_header header; + uint8_t manufacturer_str; + uint8_t type; + uint8_t version_str; + uint8_t serial_number_str; + uint8_t asset_tag_number_str; + uint8_t boot_up_state; + uint8_t power_supply_state; + uint8_t thermal_state; + uint8_t security_status; + uint32_t oem_defined; + uint8_t height; + uint8_t number_of_power_cords; + uint8_t contained_element_count; + // contained elements follow +} __attribute__((__packed__)); + +/* SMBIOS type 4 - Processor Information (v2.0) */ +struct smbios_type_4 { + struct smbios_structure_header header; + uint8_t socket_designation_str; + uint8_t processor_type; + uint8_t processor_family; + uint8_t processor_manufacturer_str; + uint32_t processor_id[2]; + uint8_t processor_version_str; + uint8_t voltage; + uint16_t external_clock; + uint16_t max_speed; + uint16_t current_speed; + uint8_t status; + uint8_t processor_upgrade; + uint16_t l1_cache_handle; + uint16_t l2_cache_handle; + uint16_t l3_cache_handle; +} __attribute__((__packed__)); + +/* SMBIOS type 16 - Physical Memory Array + * Associated with one type 17 (Memory Device). + */ +struct smbios_type_16 { + struct smbios_structure_header header; + uint8_t location; + uint8_t use; + uint8_t error_correction; + uint32_t maximum_capacity; + uint16_t memory_error_information_handle; + uint16_t number_of_memory_devices; +} __attribute__((__packed__)); + +/* SMBIOS type 17 - Memory Device + * Associated with one type 19 + */ +struct smbios_type_17 { + struct smbios_structure_header header; + uint16_t physical_memory_array_handle; + uint16_t memory_error_information_handle; + uint16_t total_width; + uint16_t data_width; + uint16_t size; + uint8_t form_factor; + uint8_t device_set; + uint8_t device_locator_str; + uint8_t bank_locator_str; + uint8_t memory_type; + uint16_t type_detail; +} __attribute__((__packed__)); + +/* SMBIOS type 19 - Memory Array Mapped Address */ +struct smbios_type_19 { + struct smbios_structure_header header; + uint32_t starting_address; + uint32_t ending_address; + uint16_t memory_array_handle; + uint8_t partition_width; +} __attribute__((__packed__)); + +/* SMBIOS type 20 - Memory Device Mapped Address */ +struct smbios_type_20 { + struct smbios_structure_header header; + uint32_t starting_address; + uint32_t ending_address; + uint16_t memory_device_handle; + uint16_t memory_array_mapped_address_handle; + uint8_t partition_row_position; + uint8_t interleave_position; + uint8_t interleaved_data_depth; +} __attribute__((__packed__)); + +/* SMBIOS type 32 - System Boot Information */ +struct smbios_type_32 { + struct smbios_structure_header header; + uint8_t reserved[6]; + uint8_t boot_status; +} __attribute__((__packed__)); + +/* SMBIOS type 127 -- End-of-table */ +struct smbios_type_127 { + struct smbios_structure_header header; +} __attribute__((__packed__)); + +static void +smbios_entry_point_init(void *start, + uint16_t max_structure_size, + uint16_t structure_table_length, + uint32_t structure_table_address, + uint16_t number_of_structures) +{ + uint8_t sum; + int i; + struct smbios_entry_point *ep = (struct smbios_entry_point *)start; + + memcpy(ep->anchor_string, "_SM_", 4); + ep->length = 0x1f; + ep->smbios_major_version = 2; + ep->smbios_minor_version = 4; + ep->max_structure_size = max_structure_size; + ep->entry_point_revision = 0; + memset(ep->formatted_area, 0, 5); + memcpy(ep->intermediate_anchor_string, "_DMI_", 5); + + ep->structure_table_length = structure_table_length; + ep->structure_table_address = structure_table_address; + ep->number_of_structures = number_of_structures; + ep->smbios_bcd_revision = 0x24; + + ep->checksum = 0; + ep->intermediate_checksum = 0; + + sum = 0; + for (i = 0; i < 0x10; i++) + sum += ((int8_t *)start)[i]; + ep->checksum = -sum; + + sum = 0; + for (i = 0x10; i < ep->length; i++) + sum += ((int8_t *)start)[i]; + ep->intermediate_checksum = -sum; + } + +/* Type 0 -- BIOS Information */ +#define RELEASE_DATE_STR "01/01/2007" +static void * +smbios_type_0_init(void *start) +{ + struct smbios_type_0 *p = (struct smbios_type_0 *)start; + + p->header.type = 0; + p->header.length = sizeof(struct smbios_type_0); + p->header.handle = 0; + + p->vendor_str = 1; + p->bios_version_str = 2; + p->bios_starting_address_segment = 0xe000; + p->bios_release_date_str = 3; + p->bios_rom_size = 1; /* 128 kB */ + + memset(p->bios_characteristics, 0, 8); + p->bios_characteristics[0] |= 1 << 4; /* Bit 4 - ISA is supported */ +#if BX_PCIBIOS + p->bios_characteristics[0] |= 1 << 7; /* Bit 7 - PCI is supported */ +#endif +#if BX_APM + p->bios_characteristics[1] |= 1 << 2; /* Bit 10 - APM is supported */ +#endif + p->bios_characteristics[1] |= 1 << 3; /* Bit 11 - BIOS is Upgradeable (Flash) */ + p->bios_characteristics[1] |= 1 << 4; /* Bit 12 - BIOS shadowing is allowed */ +#if BX_ELTORITO_BOOT && BX_USE_ATADRV + p->bios_characteristics[1] |= 1 << 7; /* Bit 15 - Boot from CD is supported */ + p->bios_characteristics[2] |= 1 << 0; /* Bit 16 - Selectable Boot is supported */ +#endif +#if BX_USE_ATADRV + p->bios_characteristics[2] |= 1 << 3; /* Bit 19 - EDD (Enhanced Disk Drive) Specification is supported */ +#endif +#if BX_SUPPORT_FLOPPY + p->bios_characteristics[2] |= 1 << 6; /* Bit 22 - Int 13h - 5.25" / 360 KB Floppy Services are supported */ + p->bios_characteristics[2] |= 1 << 7; /* Bit 23 - Int 13h - 5.25" / 1.2 MB Floppy Services are supported */ + p->bios_characteristics[3] |= 1 << 0; /* Bit 24 - Int 13h - 3.5" / 720 KB Floppy Services are supported */ + p->bios_characteristics[3] |= 1 << 1; /* Bit 25 - Int 13h - 3.5" / 2.88 MB Floppy Services are supported */ +#endif + p->bios_characteristics[3] |= 1 << 3; /* Bit 27 - Int 9h, 8042 Keyboard services are supported */ + p->bios_characteristics[3] |= 1 << 4; /* Bit 28 - Int 14h, Serial Services are supported */ + p->bios_characteristics[3] |= 1 << 5; /* Bit 29 - Int 17h, Printer Services are supported */ + p->bios_characteristics_extension_bytes[0] = 1; /* Bit 0 - ACPI supported */ + p->bios_characteristics_extension_bytes[1] = 0; + + p->system_bios_major_release = 1; + p->system_bios_minor_release = 0; + p->embedded_controller_major_release = 0xff; + p->embedded_controller_minor_release = 0xff; + + start += sizeof(struct smbios_type_0); + memcpy((char *)start, BX_APPVENDOR, sizeof(BX_APPVENDOR)); + start += sizeof(BX_APPVENDOR); + memcpy((char *)start, BX_APPNAME, sizeof(BX_APPNAME)); + start += sizeof(BX_APPNAME); + memcpy((char *)start, RELEASE_DATE_STR, sizeof(RELEASE_DATE_STR)); + start += sizeof(RELEASE_DATE_STR); + *((uint8_t *)start) = 0; + + return start+1; +} + +/* Type 1 -- System Information */ +static void * +smbios_type_1_init(void *start) +{ + struct smbios_type_1 *p = (struct smbios_type_1 *)start; + p->header.type = 1; + p->header.length = sizeof(struct smbios_type_1); + p->header.handle = 0x100; + + p->manufacturer_str = 0; + p->product_name_str = 0; + p->version_str = 0; + p->serial_number_str = 0; + + memcpy(p->uuid, bios_uuid, 16); + + p->wake_up_type = 0x06; /* power switch */ + p->sku_number_str = 0; + p->family_str = 0; + + start += sizeof(struct smbios_type_1); + *((uint16_t *)start) = 0; + + return start+2; +} + +/* Type 3 -- System Enclosure */ +static void * +smbios_type_3_init(void *start) +{ + struct smbios_type_3 *p = (struct smbios_type_3 *)start; + + p->header.type = 3; + p->header.length = sizeof(struct smbios_type_3); + p->header.handle = 0x300; + + p->manufacturer_str = 0; + p->type = 0x01; /* other */ + p->version_str = 0; + p->serial_number_str = 0; + p->asset_tag_number_str = 0; + p->boot_up_state = 0x03; /* safe */ + p->power_supply_state = 0x03; /* safe */ + p->thermal_state = 0x03; /* safe */ + p->security_status = 0x02; /* unknown */ + p->oem_defined = 0; + p->height = 0; + p->number_of_power_cords = 0; + p->contained_element_count = 0; + + start += sizeof(struct smbios_type_3); + *((uint16_t *)start) = 0; + + return start+2; +} + +/* Type 4 -- Processor Information */ +static void * +smbios_type_4_init(void *start, unsigned int cpu_number) +{ + struct smbios_type_4 *p = (struct smbios_type_4 *)start; + + p->header.type = 4; + p->header.length = sizeof(struct smbios_type_4); + p->header.handle = 0x400 + cpu_number; + + p->socket_designation_str = 1; + p->processor_type = 0x03; /* CPU */ + p->processor_family = 0x01; /* other */ + p->processor_manufacturer_str = 0; + + p->processor_id[0] = cpuid_signature; + p->processor_id[1] = cpuid_features; + + p->processor_version_str = 0; + p->voltage = 0; + p->external_clock = 0; + + p->max_speed = 0; /* unknown */ + p->current_speed = 0; /* unknown */ + + p->status = 0x41; /* socket populated, CPU enabled */ + p->processor_upgrade = 0x01; /* other */ + + p->l1_cache_handle = 0xffff; /* cache information structure not provided */ + p->l2_cache_handle = 0xffff; + p->l3_cache_handle = 0xffff; + + start += sizeof(struct smbios_type_4); + + memcpy((char *)start, "CPU " "\0" "" "\0" "", 7); + ((char *)start)[4] = cpu_number + '0'; + + return start+7; +} + +/* Type 16 -- Physical Memory Array */ +static void * +smbios_type_16_init(void *start, uint32_t memsize, int nr_mem_devs) +{ + struct smbios_type_16 *p = (struct smbios_type_16*)start; + + p->header.type = 16; + p->header.length = sizeof(struct smbios_type_16); + p->header.handle = 0x1000; + + p->location = 0x03; /* system board or motherboard */ + p->use = 0x03; /* system memory */ + p->error_correction = 0x01; /* other */ + p->maximum_capacity = memsize * 1024; + p->memory_error_information_handle = 0xfffe; /* none provided */ + p->number_of_memory_devices = nr_mem_devs; + + start += sizeof(struct smbios_type_16); + *((uint16_t *)start) = 0; + + return start + 2; +} + +/* Type 17 -- Memory Device */ +static void * +smbios_type_17_init(void *start, uint32_t memory_size_mb, int instance) +{ + struct smbios_type_17 *p = (struct smbios_type_17 *)start; + + p->header.type = 17; + p->header.length = sizeof(struct smbios_type_17); + p->header.handle = 0x1100 + instance; + + p->physical_memory_array_handle = 0x1000; + p->memory_error_information_handle = 0xfffe; /* none provided */ + p->total_width = 64; + p->data_width = 64; +/* TODO: should assert in case something is wrong ASSERT((memory_size_mb & ~0x7fff) == 0); */ + p->size = memory_size_mb; + p->form_factor = 0x09; /* DIMM */ + p->device_set = 0; + p->device_locator_str = 1; + p->bank_locator_str = 0; + p->memory_type = 0x07; /* RAM */ + p->type_detail = 0; + + start += sizeof(struct smbios_type_17); + snprintf(start, 8, "DIMM %d", instance); + start += strlen(start) + 1; + *((uint8_t *)start) = 0; + + return start+1; +} + +/* Type 19 -- Memory Array Mapped Address */ +static void * +smbios_type_19_init(void *start, uint32_t memory_size_mb, int instance) +{ + struct smbios_type_19 *p = (struct smbios_type_19 *)start; + + p->header.type = 19; + p->header.length = sizeof(struct smbios_type_19); + p->header.handle = 0x1300 + instance; + + p->starting_address = instance << 24; + p->ending_address = p->starting_address + (memory_size_mb << 10) - 1; + p->memory_array_handle = 0x1000; + p->partition_width = 1; + + start += sizeof(struct smbios_type_19); + *((uint16_t *)start) = 0; + + return start + 2; +} + +/* Type 20 -- Memory Device Mapped Address */ +static void * +smbios_type_20_init(void *start, uint32_t memory_size_mb, int instance) +{ + struct smbios_type_20 *p = (struct smbios_type_20 *)start; + + p->header.type = 20; + p->header.length = sizeof(struct smbios_type_20); + p->header.handle = 0x1400 + instance; + + p->starting_address = instance << 24; + p->ending_address = p->starting_address + (memory_size_mb << 10) - 1; + p->memory_device_handle = 0x1100 + instance; + p->memory_array_mapped_address_handle = 0x1300 + instance; + p->partition_row_position = 1; + p->interleave_position = 0; + p->interleaved_data_depth = 0; + + start += sizeof(struct smbios_type_20); + + *((uint16_t *)start) = 0; + return start+2; +} + +/* Type 32 -- System Boot Information */ +static void * +smbios_type_32_init(void *start) +{ + struct smbios_type_32 *p = (struct smbios_type_32 *)start; + + p->header.type = 32; + p->header.length = sizeof(struct smbios_type_32); + p->header.handle = 0x2000; + memset(p->reserved, 0, 6); + p->boot_status = 0; /* no errors detected */ + + start += sizeof(struct smbios_type_32); + *((uint16_t *)start) = 0; + + return start+2; +} + +/* Type 127 -- End of Table */ +static void * +smbios_type_127_init(void *start) +{ + struct smbios_type_127 *p = (struct smbios_type_127 *)start; + + p->header.type = 127; + p->header.length = sizeof(struct smbios_type_127); + p->header.handle = 0x7f00; + + start += sizeof(struct smbios_type_127); + *((uint16_t *)start) = 0; + + return start + 2; +} + +void smbios_init(void) +{ + unsigned cpu_num, nr_structs = 0, max_struct_size = 0; + char *start, *p, *q; + int memsize = (ram_end == ram_size) ? ram_size / (1024 * 1024) : + (ram_end - (1ull << 32) + ram_size) / (1024 * 1024); + int i, nr_mem_devs; + + bios_table_cur_addr = align(bios_table_cur_addr, 16); + start = (void *)(bios_table_cur_addr); + + p = (char *)start + sizeof(struct smbios_entry_point); + +#define add_struct(fn) do { \ + q = (fn); \ + nr_structs++; \ + if ((q - p) > max_struct_size) \ + max_struct_size = q - p; \ + p = q; \ +} while (0) + + add_struct(smbios_type_0_init(p)); + add_struct(smbios_type_1_init(p)); + add_struct(smbios_type_3_init(p)); + for (cpu_num = 1; cpu_num <= smp_cpus; cpu_num++) + add_struct(smbios_type_4_init(p, cpu_num)); + + /* Each 'memory device' covers up to 16GB of address space. */ + nr_mem_devs = (memsize + 0x3fff) >> 14; + add_struct(smbios_type_16_init(p, memsize, nr_mem_devs)); + for ( i = 0; i < nr_mem_devs; i++ ) + { + uint32_t dev_memsize = ((i == (nr_mem_devs - 1)) + ? (((memsize - 1) & 0x3fff) + 1) : 0x4000); + add_struct(smbios_type_17_init(p, dev_memsize, i)); + add_struct(smbios_type_19_init(p, dev_memsize, i)); + add_struct(smbios_type_20_init(p, dev_memsize, i)); + } + + add_struct(smbios_type_32_init(p)); + add_struct(smbios_type_127_init(p)); + +#undef add_struct + + smbios_entry_point_init( + start, max_struct_size, + (p - (char *)start) - sizeof(struct smbios_entry_point), + (uint32_t)(start + sizeof(struct smbios_entry_point)), + nr_structs); + + bios_table_cur_addr += (p - (char *)start); + + BX_INFO("SMBIOS table addr=0x%08lx\n", (unsigned long)start); +} + +static uint32_t find_resume_vector(void) +{ + unsigned long addr, start, end; + +#ifdef BX_USE_EBDA_TABLES + start = align(ebda_cur_addr, 16); + end = 0xa000 << 4; +#else + if (bios_table_cur_addr == 0) + return 0; + start = align(bios_table_cur_addr, 16); + end = bios_table_end_addr; +#endif + + for (addr = start; addr < end; addr += 16) { + if (!memcmp((void*)addr, "RSD PTR ", 8)) { + struct rsdp_descriptor *rsdp = (void*)addr; + struct rsdt_descriptor_rev1 *rsdt = (void*)rsdp->rsdt_physical_address; + struct fadt_descriptor_rev1 *fadt = (void*)rsdt->table_offset_entry[0]; + struct facs_descriptor_rev1 *facs = (void*)fadt->firmware_ctrl; + return facs->firmware_waking_vector; + } + } + + return 0; +} + +static void find_440fx(PCIDevice *d) +{ + uint16_t vendor_id, device_id; + + vendor_id = pci_config_readw(d, PCI_VENDOR_ID); + device_id = pci_config_readw(d, PCI_DEVICE_ID); + + if (vendor_id == PCI_VENDOR_ID_INTEL && device_id == PCI_DEVICE_ID_INTEL_82441) + i440_pcidev = *d; +} + +static void reinit_piix4_pm(PCIDevice *d) +{ + uint16_t vendor_id, device_id; + + vendor_id = pci_config_readw(d, PCI_VENDOR_ID); + device_id = pci_config_readw(d, PCI_DEVICE_ID); + + if (vendor_id == PCI_VENDOR_ID_INTEL && device_id == PCI_DEVICE_ID_INTEL_82371AB_3) + piix4_pm_enable(d); +} + +void rombios32_init(uint32_t *s3_resume_vector, uint8_t *shutdown_flag) +{ + BX_INFO("Starting rombios32\n"); + BX_INFO("Shutdown flag %x\n", *shutdown_flag); + +#ifdef BX_QEMU + qemu_cfg_port = qemu_cfg_port_probe(); +#endif + + ram_probe(); + + cpu_probe(); + + setup_mtrr(); + + smp_probe(); + + find_bios_table_area(); + + if (*shutdown_flag == 0xfe) { + /* redirect bios read access to RAM */ + pci_for_each_device(find_440fx); + bios_lock_shadow_ram(); /* bios is already copied */ + *s3_resume_vector = find_resume_vector(); + if (!*s3_resume_vector) { + BX_INFO("This is S3 resume but wakeup vector is NULL\n"); + } else { + BX_INFO("S3 resume vector %p\n", *s3_resume_vector); + pci_for_each_device(reinit_piix4_pm); + } + return; + } + + pci_bios_init(); + +#ifndef BX_USE_EBDA_TABLES + if (bios_table_cur_addr != 0 && i440_pcidev.bus != -1) { + + mptable_init(); + + uuid_probe(); + + smbios_init(); + + if (acpi_enabled) + acpi_bios_init(); + + bios_lock_shadow_ram(); + + } +#else + mptable_init(); + + if (bios_table_cur_addr != 0 && i440_pcidev.bus != -1) { + + uuid_probe(); + + smbios_init(); + } + + if (acpi_enabled) + acpi_bios_init(); + + BX_INFO("ebda_cur_addr: 0x%08lx\n", ebda_cur_addr); + if (ebda_cur_addr > 0xA0000) + BX_PANIC("ebda_cur_addr overflow!\n"); +#endif + BX_INFO("bios_table_cur_addr: 0x%08lx\n", bios_table_cur_addr); + if (bios_table_cur_addr > bios_table_end_addr) + BX_PANIC("bios_table_end_addr overflow!\n"); +} diff --git a/bochs/bios/rombios32.ld b/bochs/bios/rombios32.ld new file mode 100644 index 00000000..ff765c8b --- /dev/null +++ b/bochs/bios/rombios32.ld @@ -0,0 +1,17 @@ +OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") +OUTPUT_ARCH(i386) +ENTRY(_start); +SECTIONS +{ + . = 0x000e0000; + .text : { *(.text) } + .rodata : { *(.rodata*) } + _end = . ; + .data 0x700 : AT (_end) { __data_start = .; *(.data); __data_end = .;} + .bss : { __bss_start = .; *(.bss) *(COMMON); __bss_end = .;} + /DISCARD/ : { *(.stab) + *(.stabstr) + *(.comment) + *(.note) + } +} diff --git a/bochs/bios/rombios32start.S b/bochs/bios/rombios32start.S new file mode 100644 index 00000000..65dd0eb3 --- /dev/null +++ b/bochs/bios/rombios32start.S @@ -0,0 +1,119 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// 32 bit Bochs BIOS init code +// Copyright (C) 2006 Fabrice Bellard +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +#include "rombios.h" + +.globl _start +.globl smp_ap_boot_code_start +.globl smp_ap_boot_code_end +.global smm_relocation_start +.global smm_relocation_end +.global smm_code_start +.global smm_code_end + +_start: + /* clear bss section */ + xor %eax, %eax + mov $__bss_start, %edi + mov $__bss_end, %ecx + sub %edi, %ecx + rep stosb + + /* copy data section */ + mov $_end, %esi + mov $__data_start, %edi + mov $__data_end, %ecx + sub %edi, %ecx + rep movsb + + jmp rombios32_init + + .code16 +smp_ap_boot_code_start: + cli + xor %ax, %ax + mov %ax, %ds + + mov $SMP_MSR_ADDR, %ebx +11: + mov 0(%ebx), %ecx + test %ecx, %ecx + jz 12f + mov 4(%ebx), %eax + mov 8(%ebx), %edx + wrmsr + add $12, %ebx + jmp 11b +12: + + lock incw smp_cpus +1: + hlt + jmp 1b +smp_ap_boot_code_end: + +/* code to relocate SMBASE to 0xa0000 */ +smm_relocation_start: + mov $0x38000 + 0x7efc, %ebx + addr32 mov (%ebx), %al /* revision ID to see if x86_64 or x86 */ + cmp $0x64, %al + je 1f + mov $0x38000 + 0x7ef8, %ebx + jmp 2f +1: + mov $0x38000 + 0x7f00, %ebx +2: + movl $0xa0000, %eax + addr32 movl %eax, (%ebx) + /* indicate to the BIOS that the SMM code was executed */ + mov $0x00, %al + movw $0xb3, %dx + outb %al, %dx + rsm +smm_relocation_end: + +/* minimal SMM code to enable or disable ACPI */ +smm_code_start: + movw $0xb2, %dx + inb %dx, %al + cmp $0xf0, %al + jne 1f + + /* ACPI disable */ + mov $PM_IO_BASE + 0x04, %dx /* PMCNTRL */ + inw %dx, %ax + andw $~1, %ax + outw %ax, %dx + + jmp 2f + +1: + cmp $0xf1, %al + jne 2f + + /* ACPI enable */ + mov $PM_IO_BASE + 0x04, %dx /* PMCNTRL */ + inw %dx, %ax + orw $1, %ax + outw %ax, %dx + +2: + rsm +smm_code_end: diff --git a/bochs/bios/usage.cc b/bochs/bios/usage.cc new file mode 100644 index 00000000..a99248a6 --- /dev/null +++ b/bochs/bios/usage.cc @@ -0,0 +1,99 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001 MandrakeSoft S.A. +// +// MandrakeSoft S.A. +// 43, rue d'Aboukir +// 75002 Paris - France +// http://www.linux-mandrake.com/ +// http://www.mandrakesoft.com/ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#include +#include +#include +#include +#include +#include + + +unsigned char bios[65536]; + + int +main(int argc, char *argv[]) +{ + int bios_file; + FILE * org_file; + unsigned org, last_org, offset; + int retval; + unsigned int to_read, index; + double elements, ratio; + + if (argc !=3 ) { + fprintf(stderr, "Usage: usage bios-file org-file\n"); + exit(1); + } + + bios_file = open(argv[1], O_RDONLY); + org_file = fopen(argv[2], "r"); + + if ( (bios_file<0) | (org_file==NULL) ) { + fprintf(stderr, "problems opening files.\n"); + exit(1); + } + + printf("files opened OK\n"); + + to_read = 65536; + index = 0; + while (to_read > 0) { + retval = read(bios_file, &bios[index], to_read); + if (retval <= 0) { + fprintf(stderr, "problem reading bios file\n"); + exit(1); + } + to_read -= retval; + index += retval; + } + printf("bios file read in OK\n"); + + last_org = 0; + + while (1) { + retval = fscanf(org_file, "0x%x\n", &org); + if (retval <= 0) break; + printf("%04x .. %04x ", last_org, org-1); + for (offset=org-1; offset>last_org; offset--) { + if (bios[offset] != 0) break; + } + if (offset > last_org) { + elements = (1.0 + double(offset) - double(last_org)); + } + else { + if (bios[last_org] == 0) + elements = 0.0; + else + elements = 1.0; + } + + ratio = elements / (double(org) - double(last_org)); + ratio *= 100.0; + printf("%6.2lf\n", ratio); + last_org = org; + } +} diff --git a/bochs/bochs.h b/bochs/bochs.h new file mode 100644 index 00000000..72a69d2f --- /dev/null +++ b/bochs/bochs.h @@ -0,0 +1,626 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2010 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA B 02110-1301 USA + +// +// bochs.h is the master header file for all C++ code. It includes all +// the system header files needed by bochs, and also includes all the bochs +// C++ header files. Because bochs.h and the files that it includes has +// structure and class definitions, it cannot be called from C code. +// + +#ifndef BX_BOCHS_H +# define BX_BOCHS_H 1 + +#include "config.h" /* generated by configure script from config.h.in */ + +#include "../core/SAL/bochs/failbochs.hpp" + +#ifndef __QNXNTO__ +extern "C" { +#endif + +#ifdef WIN32 +// In a win32 compile (including cygwin), windows.h is required for several +// files in gui and iodev. It is important to include it here in a header +// file so that WIN32-specific data types can be used in fields of classes. +#include +#endif + +#include +#include +#include +#if defined(__sun__) +#undef EAX +#undef ECX +#undef EDX +#undef EBX +#undef ESP +#undef EBP +#undef ESI +#undef EDI +#undef EIP +#undef CS +#undef DS +#undef ES +#undef SS +#undef FS +#undef GS +#endif +#include +#include + +#ifndef WIN32 +# include +#else +# include +#endif +#include +#if BX_WITH_MACOS +# include +# include +# include +# include +#elif BX_WITH_CARBON +# include +# include +# include /* for MAXPATHLEN */ +# include +# include +#else +# ifndef WIN32 +# include +# endif +# include +# include +#endif +#include +#include +#include +#include +#ifdef macintosh +# define SuperDrive "[fd:]" +#endif + +#ifndef __QNXNTO__ +} +#endif + +#include "osdep.h" /* platform dependent includes and defines */ +#include "bx_debug/debug.h" +#include "bxversion.h" + +#include "gui/siminterface.h" + +// BX_SHARE_PATH should be defined by the makefile. If not, give it +// a value of NULL to avoid compile problems. +#ifndef BX_SHARE_PATH +#define BX_SHARE_PATH NULL +#endif + +// prototypes +int bx_begin_simulation(int argc, char *argv[]); +void bx_stop_simulation(); +char *bx_find_bochsrc(void); +int bx_parse_cmdline(int arg, int argc, char *argv[]); +int bx_read_configuration(const char *rcfile); +int bx_write_configuration(const char *rcfile, int overwrite); +void bx_reset_options(void); +Bit32u crc32(const Bit8u *buf, int len); +// for param-tree testing only +void print_tree(bx_param_c *node, int level = 0); + +// +// some macros to interface the CPU and memory to external environment +// so that these functions can be redirected to the debugger when +// needed. +// + +#define BXRS_PARAM_SPECIAL(parent, name, maxvalue, save_handler, restore_handler) \ +{ \ + bx_param_num_c *param = new bx_param_num_c(parent, #name, "", "", 0, maxvalue, 0); \ + param->set_base(BASE_HEX); \ + param->set_sr_handlers(this, save_handler, restore_handler); \ +} + +#define BXRS_PARAM_SPECIAL64(parent, name, save_handler, restore_handler) \ + BXRS_PARAM_SPECIAL(parent, name, BX_MAX_BIT64U, save_handler, restore_handler) +#define BXRS_PARAM_SPECIAL32(parent, name, save_handler, restore_handler) \ + BXRS_PARAM_SPECIAL(parent, name, BX_MAX_BIT32U, save_handler, restore_handler) +#define BXRS_PARAM_SPECIAL16(parent, name, save_handler, restore_handler) \ + BXRS_PARAM_SPECIAL(parent, name, BX_MAX_BIT16U, save_handler, restore_handler) +#define BXRS_PARAM_SPECIAL8(parent, name, save_handler, restore_handler) \ + BXRS_PARAM_SPECIAL(parent, name, BX_MAX_BIT8U, save_handler, restore_handler) + +#define BXRS_HEX_PARAM_SIMPLE32(parent, name) \ + new bx_shadow_num_c(parent, #name, (Bit32u*)&(name), BASE_HEX) +#define BXRS_HEX_PARAM_SIMPLE64(parent, name) \ + new bx_shadow_num_c(parent, #name, (Bit64u*)&(name), BASE_HEX) + +#define BXRS_HEX_PARAM_SIMPLE(parent, name) \ + new bx_shadow_num_c(parent, #name, &(name), BASE_HEX) +#define BXRS_HEX_PARAM_FIELD(parent, name, field) \ + new bx_shadow_num_c(parent, #name, &(field), BASE_HEX) + +#define BXRS_DEC_PARAM_SIMPLE(parent, name) \ + new bx_shadow_num_c(parent, #name, &(name), BASE_DEC) +#define BXRS_DEC_PARAM_FIELD(parent, name, field) \ + new bx_shadow_num_c(parent, #name, &(field), BASE_DEC) + +#define BXRS_PARAM_BOOL(parent, name, field) \ + new bx_shadow_bool_c(parent, #name, (bx_bool*)(&(field))) + +// =-=-=-=-=-=-=- Normal optimized use -=-=-=-=-=-=-=-=-=-=-=-=-=-= +// some pc_systems functions just redirect to the IO devices so optimize +// by eliminating call here +// +// #define BX_INP(addr, len) bx_pc_system.inp(addr, len) +// #define BX_OUTP(addr, val, len) bx_pc_system.outp(addr, val, len) +#define BX_INP(addr, len) bx_devices.inp(addr, len) +#define BX_OUTP(addr, val, len) bx_devices.outp(addr, val, len) +#define BX_TICK1() bx_pc_system.tick1() +#define BX_TICKN(n) bx_pc_system.tickn(n) +#define BX_INTR bx_pc_system.INTR +#define BX_SET_INTR(b) bx_pc_system.set_INTR(b) +#define BX_CPU_C bx_cpu_c +#define BX_MEM_C bx_mem_c +#define BX_HRQ (bx_pc_system.HRQ) + +#if BX_SUPPORT_SMP +#define BX_CPU(x) (bx_cpu_array[x]) +#else +#define BX_CPU(x) (&bx_cpu) +#endif + +#define BX_MEM(x) (&bx_mem) + +#define BX_SET_ENABLE_A20(enabled) bx_pc_system.set_enable_a20(enabled) +#define BX_GET_ENABLE_A20() bx_pc_system.get_enable_a20() + +#if BX_SUPPORT_A20 +# define A20ADDR(x) ((bx_phy_address)(x) & bx_pc_system.a20_mask) +#else +# define A20ADDR(x) ((bx_phy_address)(x)) +#endif + +#if BX_SUPPORT_SMP +# define BX_TICK1_IF_SINGLE_PROCESSOR() \ + if (BX_SMP_PROCESSORS == 1) BX_TICK1() +# define BX_TICKN_IF_SINGLE_PROCESSOR(n) \ + if (BX_SMP_PROCESSORS == 1) BX_TICKN(n) +#else +# define BX_TICK1_IF_SINGLE_PROCESSOR() BX_TICK1() +# define BX_TICKN_IF_SINGLE_PROCESSOR(n) BX_TICKN(n) +#endif + +// you can't use static member functions on the CPU, if there are going +// to be 2 cpus. Check this early on. +#if BX_SUPPORT_SMP +# if BX_USE_CPU_SMF +# error For SMP simulation, BX_USE_CPU_SMF must be 0. +# endif +#endif + +// +// Ways for the the external environment to report back information +// to the debugger. +// + +#if BX_DEBUGGER +# define BX_DBG_ASYNC_INTR bx_guard.async.irq +# define BX_DBG_ASYNC_DMA bx_guard.async.dma + +# define BX_DBG_DMA_REPORT(addr, len, what, val) \ + if (bx_guard.report.dma) bx_dbg_dma_report(addr, len, what, val) +# define BX_DBG_IAC_REPORT(vector, irq) \ + if (bx_guard.report.irq) bx_dbg_iac_report(vector, irq) +# define BX_DBG_A20_REPORT(val) \ + if (bx_guard.report.a20) bx_dbg_a20_report(val) +# define BX_DBG_IO_REPORT(port, size, op, val) \ + if (bx_guard.report.io) bx_dbg_io_report(port, size, op, val) +# define BX_DBG_LIN_MEMORY_ACCESS(cpu, lin, phy, len, pl, rw, data) \ + bx_dbg_lin_memory_access(cpu, lin, phy, len, pl, rw, data) +# define BX_DBG_PHY_MEMORY_ACCESS(cpu, phy, len, rw, data) \ + bx_dbg_phy_memory_access(cpu, phy, len, rw, data) +#else // #if BX_DEBUGGER +// debugger not compiled in, use empty stubs +# define BX_DBG_ASYNC_INTR 1 +# define BX_DBG_ASYNC_DMA 1 +# define BX_DBG_DMA_REPORT(addr, len, what, val) /* empty */ +# define BX_DBG_IAC_REPORT(vector, irq) /* empty */ +# define BX_DBG_A20_REPORT(val) /* empty */ +# define BX_DBG_IO_REPORT(port, size, op, val) /* empty */ +# define BX_DBG_LIN_MEMORY_ACCESS(cpu, lin, phy, len, pl, rw, data) /* empty */ +# define BX_DBG_PHY_MEMORY_ACCESS(cpu, phy, len, rw, data) /* empty */ +#endif // #if BX_DEBUGGER + +#define MAGIC_LOGNUM 0x12345678 + +typedef class BOCHSAPI logfunctions +{ + char *prefix; +// values of onoff: 0=ignore, 1=report, 2=ask, 3=fatal +#define ACT_IGNORE 0 +#define ACT_REPORT 1 +#define ACT_ASK 2 +#define ACT_FATAL 3 +#define N_ACT 4 + int onoff[N_LOGLEV]; + class iofunctions *logio; + // default log actions for all devices, declared and initialized + // in logio.cc. + BOCHSAPI_CYGONLY static int default_onoff[N_LOGLEV]; +public: + logfunctions(void); + logfunctions(class iofunctions *); + ~logfunctions(void); + + void info(const char *fmt, ...) BX_CPP_AttrPrintf(2, 3); + void error(const char *fmt, ...) BX_CPP_AttrPrintf(2, 3); + void panic(const char *fmt, ...) BX_CPP_AttrPrintf(2, 3); + void pass(const char *fmt, ...) BX_CPP_AttrPrintf(2, 3); + void ldebug(const char *fmt, ...) BX_CPP_AttrPrintf(2, 3); + void fatal (const char *prefix, const char *fmt, va_list ap, int exit_status); + void ask (int level, const char *prefix, const char *fmt, va_list ap); + void put(const char *); + void setio(class iofunctions *); + void setonoff(int loglev, int value) { + assert (loglev >= 0 && loglev < N_LOGLEV); + onoff[loglev] = value; + } + char *getprefix () { return prefix; } + int getonoff(int level) { + assert (level>=0 && level= 0 && loglev < N_LOGLEV); + assert (action >= 0 && action < N_ACT); + default_onoff[loglev] = action; + } + static int get_default_action (int loglev) { + assert (loglev >= 0 && loglev < N_LOGLEV); + return default_onoff[loglev]; + } +} logfunc_t; + +#define BX_LOGPREFIX_SIZE 51 + +class BOCHSAPI iofunctions { + int magic; + char logprefix[BX_LOGPREFIX_SIZE]; + FILE *logfd; + class logfunctions *log; + void init(void); + void flush(void); + +// Log Class types +public: + iofunctions(void); + iofunctions(FILE *); + iofunctions(int); + iofunctions(const char *); + ~iofunctions(void); + + void out(int level, const char *pre, const char *fmt, va_list ap); + + void init_log(const char *fn); + void init_log(int fd); + void init_log(FILE *fs); + void exit_log(); + void set_log_prefix(const char *prefix); + int get_n_logfns() { return n_logfn; } + logfunc_t *get_logfn(int index) { return logfn_list[index]; } + void add_logfn(logfunc_t *fn); + void remove_logfn(logfunc_t *fn); + void set_log_action(int loglevel, int action); + const char *getlevel(int i); + char *getaction(int i); + +protected: + int n_logfn; +#define MAX_LOGFNS 512 + logfunc_t *logfn_list[MAX_LOGFNS]; + const char *logfn; +}; + +typedef class BOCHSAPI iofunctions iofunc_t; + +#define SAFE_GET_IOFUNC() \ + ((io==NULL)? (io=new iofunc_t("/dev/stderr")) : io) +#define SAFE_GET_GENLOG() \ + ((genlog==NULL)? (genlog=new logfunc_t(SAFE_GET_IOFUNC())) : genlog) + +#if BX_NO_LOGGING + +#define BX_INFO(x) +#define BX_DEBUG(x) +#define BX_ERROR(x) +#define BX_PANIC(x) (LOG_THIS panic) x +#define BX_PASS(x) (LOG_THIS pass) x + +#define BX_ASSERT(x) + +#else + +#define BX_INFO(x) (LOG_THIS info) x +#define BX_DEBUG(x) (LOG_THIS ldebug) x +#define BX_ERROR(x) (LOG_THIS error) x +#define BX_PANIC(x) (LOG_THIS panic) x +#define BX_PASS(x) (LOG_THIS pass) x + +#if BX_ASSERT_ENABLE + #define BX_ASSERT(x) do {if (!(x)) BX_PANIC(("failed assertion \"%s\" at %s:%d\n", #x, __FILE__, __LINE__));} while (0) +#else + #define BX_ASSERT(x) +#endif + +#endif + +BOCHSAPI extern iofunc_t *io; +BOCHSAPI extern logfunc_t *genlog; + +#ifndef UNUSED +# define UNUSED(x) ((void)x) +#endif + +#if BX_SUPPORT_X86_64 +#define FMT_ADDRX FMT_ADDRX64 +#else +#define FMT_ADDRX FMT_ADDRX32 +#endif + +#if BX_PHY_ADDRESS_LONG + #define FMT_PHY_ADDRX FMT_ADDRX64 +#else + #define FMT_PHY_ADDRX FMT_ADDRX32 +#endif + +#define FMT_LIN_ADDRX FMT_ADDRX + +#if BX_GDBSTUB +// defines for GDB stub +void bx_gdbstub_init(void); +void bx_gdbstub_break(void); +int bx_gdbstub_check(unsigned int eip); +#define GDBSTUB_STOP_NO_REASON (0xac0) + +#if BX_SUPPORT_SMP +#error GDB stub was written for single processor support. If multiprocessor support is added, then we can remove this check. +// The big problem is knowing which CPU gdb is referring to. In other words, +// what should we put for "n" in BX_CPU(n)->dbg_xlate_linear2phy() and +// BX_CPU(n)->dword.eip, etc. +#endif +#endif + +typedef struct { + bx_bool interrupts; + bx_bool exceptions; + bx_bool debugger; + bx_bool print_timestamps; +#if BX_DEBUGGER + bx_bool magic_break_enabled; +#endif +#if BX_GDBSTUB + bx_bool gdbstub_enabled; +#endif +#if BX_SUPPORT_APIC + bx_bool apic; +#endif +#if BX_DEBUG_LINUX + bx_bool linux_syscall; +#endif + void* record_io; +} bx_debug_t; + +void CDECL bx_signal_handler(int signum); +int bx_atexit(void); +BOCHSAPI extern bx_debug_t bx_dbg; + +// determinted by XAPIC option +BOCHSAPI extern Bit32u apic_id_mask; + +// memory access type (read/write/execute/rw) +#define BX_READ 0 +#define BX_WRITE 1 +#define BX_EXECUTE 2 +#define BX_RW 3 + +// to be used in concatenation with BX_READ/BX_WRITE/BX_EXECUTE/BX_RW +#define BX_PDPTR0_ACCESS 0x010 +#define BX_PDPTR1_ACCESS 0x020 +#define BX_PDPTR2_ACCESS 0x030 +#define BX_PDPTR3_ACCESS 0x040 +#define BX_PTE_ACCESS 0x050 +#define BX_PDE_ACCESS 0x060 +#define BX_PDPTE_ACCESS 0x070 +#define BX_PML4E_ACCESS 0x080 +#define BX_EPT_PTE_ACCESS 0x090 +#define BX_EPT_PDE_ACCESS 0x0a0 +#define BX_EPT_PDPTE_ACCESS 0x0b0 +#define BX_EPT_PML4E_ACCESS 0x0c0 +#define BX_VMCS_ACCESS 0x0d0 +#define BX_VMX_MSR_BITMAP_ACCESS 0x0e0 +#define BX_VMX_IO_BITMAP_ACCESS 0x0f0 +#define BX_VMX_LOAD_MSR_ACCESS 0x100 +#define BX_VMX_STORE_MSR_ACCESS 0x110 +#define BX_VMX_VTPR_ACCESS 0x120 +#define BX_SMRAM_ACCESS 0x130 + +// types of reset +#define BX_RESET_SOFTWARE 10 +#define BX_RESET_HARDWARE 11 + +#include "memory/memory.h" +#include "pc_system.h" +#include "plugin.h" +#include "gui/gui.h" + +/* --- EXTERNS --- */ + +#if BX_GUI_SIGHANDLER +extern bx_bool bx_gui_sighandler; +#endif + +// This value controls how often each I/O device's periodic() method +// gets called. The timer is set up in iodev/devices.cc. +#define BX_IODEV_HANDLER_PERIOD 100 // microseconds +//#define BX_IODEV_HANDLER_PERIOD 10 // microseconds + +#define BX_PATHNAME_LEN 512 + +#define BX_KBD_XT_TYPE 0 +#define BX_KBD_AT_TYPE 1 +#define BX_KBD_MF_TYPE 2 + +#define BX_N_OPTROM_IMAGES 4 +#define BX_N_OPTRAM_IMAGES 4 +#define BX_N_SERIAL_PORTS 4 +#define BX_N_PARALLEL_PORTS 2 +#define BX_N_USB_UHCI_PORTS 2 +#define BX_N_USB_OHCI_PORTS 2 +#define BX_N_USB_HUB_PORTS 8 +#define BX_N_PCI_SLOTS 5 +#define BX_N_USER_PLUGINS 8 + +void bx_center_print(FILE *file, const char *line, unsigned maxwidth); + +#include "instrument.h" + +// These are some convenience macros which abstract out accesses between +// a variable in native byte ordering to/from guest (x86) memory, which is +// always in little endian format. You must deal with alignment (if your +// system cares) and endian rearranging. Don't assume anything. You could +// put some platform specific asm() statements here, to make use of native +// instructions to help perform these operations more efficiently than C++. + + +#ifdef BX_LITTLE_ENDIAN + +#define WriteHostWordToLittleEndian(hostPtr, nativeVar16) \ + *((Bit16u*)(hostPtr)) = (nativeVar16) +#define WriteHostDWordToLittleEndian(hostPtr, nativeVar32) \ + *((Bit32u*)(hostPtr)) = (nativeVar32) +#define WriteHostQWordToLittleEndian(hostPtr, nativeVar64) \ + *((Bit64u*)(hostPtr)) = (nativeVar64) + +#define ReadHostWordFromLittleEndian(hostPtr, nativeVar16) \ + (nativeVar16) = *((Bit16u*)(hostPtr)) +#define ReadHostDWordFromLittleEndian(hostPtr, nativeVar32) \ + (nativeVar32) = *((Bit32u*)(hostPtr)) +#define ReadHostQWordFromLittleEndian(hostPtr, nativeVar64) \ + (nativeVar64) = *((Bit64u*)(hostPtr)) + +#define CopyHostWordLittleEndian(hostAddrDst, hostAddrSrc) \ + (* (Bit16u *)(hostAddrDst)) = (* (Bit16u *)(hostAddrSrc)); +#define CopyHostDWordLittleEndian(hostAddrDst, hostAddrSrc) \ + (* (Bit32u *)(hostAddrDst)) = (* (Bit32u *)(hostAddrSrc)); +#define CopyHostQWordLittleEndian(hostAddrDst, hostAddrSrc) \ + (* (Bit64u *)(hostAddrDst)) = (* (Bit64u *)(hostAddrSrc)); + +#else + +#define WriteHostWordToLittleEndian(hostPtr, nativeVar16) { \ + ((Bit8u *)(hostPtr))[0] = (Bit8u) (nativeVar16); \ + ((Bit8u *)(hostPtr))[1] = (Bit8u) ((nativeVar16)>>8); \ +} +#define WriteHostDWordToLittleEndian(hostPtr, nativeVar32) { \ + ((Bit8u *)(hostPtr))[0] = (Bit8u) (nativeVar32); \ + ((Bit8u *)(hostPtr))[1] = (Bit8u) ((nativeVar32)>>8); \ + ((Bit8u *)(hostPtr))[2] = (Bit8u) ((nativeVar32)>>16); \ + ((Bit8u *)(hostPtr))[3] = (Bit8u) ((nativeVar32)>>24); \ +} +#define WriteHostQWordToLittleEndian(hostPtr, nativeVar64) { \ + ((Bit8u *)(hostPtr))[0] = (Bit8u) (nativeVar64); \ + ((Bit8u *)(hostPtr))[1] = (Bit8u) ((nativeVar64)>>8); \ + ((Bit8u *)(hostPtr))[2] = (Bit8u) ((nativeVar64)>>16); \ + ((Bit8u *)(hostPtr))[3] = (Bit8u) ((nativeVar64)>>24); \ + ((Bit8u *)(hostPtr))[4] = (Bit8u) ((nativeVar64)>>32); \ + ((Bit8u *)(hostPtr))[5] = (Bit8u) ((nativeVar64)>>40); \ + ((Bit8u *)(hostPtr))[6] = (Bit8u) ((nativeVar64)>>48); \ + ((Bit8u *)(hostPtr))[7] = (Bit8u) ((nativeVar64)>>56); \ +} + +#define ReadHostWordFromLittleEndian(hostPtr, nativeVar16) { \ + (nativeVar16) = ((Bit16u) ((Bit8u *)(hostPtr))[0]) | \ + (((Bit16u) ((Bit8u *)(hostPtr))[1])<<8) ; \ +} +#define ReadHostDWordFromLittleEndian(hostPtr, nativeVar32) { \ + (nativeVar32) = ((Bit32u) ((Bit8u *)(hostPtr))[0]) | \ + (((Bit32u) ((Bit8u *)(hostPtr))[1])<<8) | \ + (((Bit32u) ((Bit8u *)(hostPtr))[2])<<16) | \ + (((Bit32u) ((Bit8u *)(hostPtr))[3])<<24); \ +} +#define ReadHostQWordFromLittleEndian(hostPtr, nativeVar64) { \ + (nativeVar64) = ((Bit64u) ((Bit8u *)(hostPtr))[0]) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[1])<<8) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[2])<<16) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[3])<<24) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[4])<<32) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[5])<<40) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[6])<<48) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[7])<<56); \ +} + +#define CopyHostWordLittleEndian(hostAddrDst, hostAddrSrc) { \ + ((Bit8u *)(hostAddrDst))[0] = ((Bit8u *)(hostAddrSrc))[0]; \ + ((Bit8u *)(hostAddrDst))[1] = ((Bit8u *)(hostAddrSrc))[1]; \ +} +#define CopyHostDWordLittleEndian(hostAddrDst, hostAddrSrc) { \ + ((Bit8u *)(hostAddrDst))[0] = ((Bit8u *)(hostAddrSrc))[0]; \ + ((Bit8u *)(hostAddrDst))[1] = ((Bit8u *)(hostAddrSrc))[1]; \ + ((Bit8u *)(hostAddrDst))[2] = ((Bit8u *)(hostAddrSrc))[2]; \ + ((Bit8u *)(hostAddrDst))[3] = ((Bit8u *)(hostAddrSrc))[3]; \ +} +#define CopyHostQWordLittleEndian(hostAddrDst, hostAddrSrc) { \ + ((Bit8u *)(hostAddrDst))[0] = ((Bit8u *)(hostAddrSrc))[0]; \ + ((Bit8u *)(hostAddrDst))[1] = ((Bit8u *)(hostAddrSrc))[1]; \ + ((Bit8u *)(hostAddrDst))[2] = ((Bit8u *)(hostAddrSrc))[2]; \ + ((Bit8u *)(hostAddrDst))[3] = ((Bit8u *)(hostAddrSrc))[3]; \ + ((Bit8u *)(hostAddrDst))[4] = ((Bit8u *)(hostAddrSrc))[4]; \ + ((Bit8u *)(hostAddrDst))[5] = ((Bit8u *)(hostAddrSrc))[5]; \ + ((Bit8u *)(hostAddrDst))[6] = ((Bit8u *)(hostAddrSrc))[6]; \ + ((Bit8u *)(hostAddrDst))[7] = ((Bit8u *)(hostAddrSrc))[7]; \ +} + +#endif + +BX_CPP_INLINE Bit32u bx_bswap32(Bit32u val32) +{ + Bit32u b0 = val32 & 0xff; val32 >>= 8; + Bit32u b1 = val32 & 0xff; val32 >>= 8; + Bit32u b2 = val32 & 0xff; val32 >>= 8; + Bit32u b3 = val32; + return (b0<<24) | (b1<<16) | (b2<<8) | b3; +} + +BX_CPP_INLINE Bit64u bx_bswap64(Bit64u val64) +{ + Bit64u b0 = val64 & 0xff; val64 >>= 8; + Bit64u b1 = val64 & 0xff; val64 >>= 8; + Bit64u b2 = val64 & 0xff; val64 >>= 8; + Bit64u b3 = val64 & 0xff; val64 >>= 8; + Bit64u b4 = val64 & 0xff; val64 >>= 8; + Bit64u b5 = val64 & 0xff; val64 >>= 8; + Bit64u b6 = val64 & 0xff; val64 >>= 8; + Bit64u b7 = val64; + return (b0<<56) | (b1<<48) | (b2<<40) | (b3<<32) | (b4<<24) | (b5<<16) | (b6<<8) | b7; +} + +#endif /* BX_BOCHS_H */ diff --git a/bochs/bochsrc-multiple-ne2k b/bochs/bochsrc-multiple-ne2k new file mode 100644 index 00000000..a7526f05 --- /dev/null +++ b/bochs/bochsrc-multiple-ne2k @@ -0,0 +1,57 @@ +# configuration file generated by Bochs +plugin_ctrl: unmapped=1, biosdev=1, speaker=1, extfpuirq=1, pci_ide=1, acpi=1, ioapic=1 +config_interface: textconfig +display_library: x +memory: host=32, guest=32 +romimage: file="/usr/share/bochs/BIOS-bochs-latest" +vgaromimage: file="/usr/share/bochs/VGABIOS-lgpl-latest" +boot: cdrom +floppy_bootsig_check: disabled=0 +floppya: type=1_44, 1_44="a.img", status=inserted, write_protected=0 +# no floppyb +ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 +ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15 +ata2: enabled=0 +ata3: enabled=0 +ata0-slave: type=cdrom, path=fli4l.iso, status=inserted +parport1: enabled=1, file="" +parport2: enabled=0 +com1: enabled=1, mode=null, dev="" +com2: enabled=0 +com3: enabled=0 +com4: enabled=0 +usb_uhci: enabled=0 +usb_ohci: enabled=0 +i440fxsupport: enabled=1 +vga_update_interval: 50000 +vga: extension=vbe +cpu: count=1, ips=4000000, reset_on_triple_fault=1, ignore_bad_msrs=1 +cpuid: cpuid_limit_winnt=0, mmx=1, sse=sse2, xapic=1, sep=1, aes=0, xsave=0, movbe=0 +cpuid: stepping=3, vendor_string="GenuineIntel", brand_string=" Intel(R) Pentium(R) 4 CPU " +print_timestamps: enabled=0 +# no gdb stub +port_e9_hack: enabled=0 +text_snapshot_check: enabled=0 +private_colormap: enabled=0 +clock: sync=none, time0=local +# no cmosimage +ne2k: card=0, enabled=1, ioaddr=0x320, irq=10, mac=fe:fd:00:00:00:02, ethmod=tuntap, ethdev=/dev/net/tun:tap0, script=none +ne2k: card=1, enabled=0, ioaddr=0x320, irq=7, mac=fe:fd:00:00:00:01, ethmod=null, ethdev=xl0, script=none +ne2k: card=2, enabled=0 +ne2k: card=3, enabled=0 +pnic: enabled=0 +sb16: enabled=0 +# no loader +log: - +logprefix: %t%e%d +panic: action=ask +error: action=report +info: action=report +debug: action=ignore +pass: action=fatal +keyboard_type: mf +keyboard_serial_delay: 250 +keyboard_paste_delay: 100000 +keyboard_mapping: enabled=0, map= +user_shortcut: keys=none +mouse: enabled=0, type=ps2, toggle=ctrl+mbutton diff --git a/bochs/build/batch-build.perl b/bochs/build/batch-build.perl new file mode 100755 index 00000000..7d66e021 --- /dev/null +++ b/bochs/build/batch-build.perl @@ -0,0 +1,320 @@ +#!/usr/bin/perl +##################################################################### +# $Id$ +##################################################################### +# +# Batch build tool for multiple configurations +# +# switches: +# - show output vs. send it all to nohup. --nohup +# - serial or parallel. --parallel +# +# no args: serial, display output +# --nohup: serial, output to nohup.out. (Need summary.) +# --nohup --parallel: parallel, output to nohup.out +# --parallel: parallel, spawn xterm for each +# + +sub usage { + print <$name/build.sh"); + print BUILD <$name/xterm-init.sh"); + print XTI <!l298X~IyJjOAJeSJn_&v&0MrGl}dXnd>H8yF`VwYNZ5mP%y+E*3d{ss73`Ss4uUl8W9<&W5vtL8h*0sBIfI z6Qol=>|tPm#en&>P^@GMb^swks#DM9S?+$biubN}=a0OBv3LdRHgJ6|XC9)wY^E#} zDIQ>hH_iXr=6|y zs7ySo3k;KjA`Dn86Z~ibbyN)^o|i#B$N{sTUk~- z1Z(1*sMQQj<|QJqCQ*y#$_Ne-(`HC8Rf*6JD2mF#FkteU9MuQJRq8~6HZ>}_6RM=2b!jmR{4w9 z<3q%pY%gP+Lwn@(0!m+9`2jOdc}18hPM>c1}G%b+ym1{G}SL{87rui`E=p1G*>T-lG)&iyi7xFFF=o=h+w7H;GIy0vUwlGP z5ewSV0+UqECtgA-UJ@N{U3ia|A9&#H3^l7o_6d^TJizRiEF`adFoK5(9eo5ih zpS`cXwNfB_sHUcuW+l2%r$r7YsTay|#))?8A}P}=Z;}%iGb$)SXB8tM<8s0^wBCRR z;XV!X7JZvvKgYE&3qJRcgJ^Q58j%*(kLh$Q+v4bw;Dp-F>mAR{p>}Z zTL8#nb;Y>vm4Ld!qigz9=p(h~bo#|;GJj>Iv_6p8V56j(PI`?4yPT+_bFqkkqv!|U zCDAyFO)CC1#Hh=iLP@*T{&&4kr|A?)3ztApK3gKrB2kZ9eEwzt+m#s*D_}AIz4M+LLV(@p+z-K)G4Kx*(QzaHj%rd z$kE$No_d3_OId{ZlKI{!bNhwQ8JF(tesUhGK7p)nT2i?fd(9_J_3%af>rpq3#pp2j z2H)~`&)B2cOO7`qDo#pclV{*tJ{{Mmk79vqxvn@d2Uwq<8mS0_50G!N4cyC+yT@Qb z^SbnIf{erqf;d%#O&qTdry>-}E9e@eTWQYA5BEN%eQZrZAHS1r^@c&Nr%#q|B%urGpEN z_G>yH_`F7p%+4Tam=GmP>j(r2kC16Y`^jmCI3)C#K z<7n}M^ueHbqe5Aw(d*GIy{<)MMyi9jUsMg5`7U4|E|c&!PG~1d8~xDsS9&gP((~Du zbPWmDA7imT&@csF<-(frlFX&mID_?OfWzv*30xCKb2%Y1cI(C+Ti zfw@i6SVk|&p8Q0>Vx{IL>e(t{`wp3Vgw0Ld-%(fOCH=X2h2$L`g%>yx&xezGB^O~g z-^4!(%eB9~T1-scWvQp51)gv8?KBE%iJ#N+_7CYfAJ9I$Oqj8={!n7OBQR_xdE0oo z5Khf{lK*x{bppHK_K`*Z4@-&FmsNKA3^9*#^$XI5$l=M)Ex%2?cgRTfeEFCzw%R&K zz_ekD*1bu3QiPorMN#r_R~?+!^s5Yfsz}*)yjwK)ZT+TPzlSDYWnnOvk2``KdcY~c zW8}(nU_Imrl<=a|$%fx}e{55GvDDicEc9hT8kP6z(VUOvs`_xuE2b{+W{#PB+QZ=f z&=G$MnxdpNyt+!RS8gkcgMFrMmUGSH_QBbiz*- zDlo!-ITqyph0R8Y zo7{;OHIy3eaxQ* zwoBQC3?wwD{2sim9$;N?4$Y1st_>|_r^orx@E#xynj(|R?Qy1qbApB-f`j6NnTo_S z9gtZ7E}?}w{a^B218s>O>+b@hIrUjpn8;nWXf8@Tow~@l^k4dXio?+ejN2i=L%NtB`@QE@J`}t6R?f{Y91OzUiurphd)w)k9}OWvgvbwVDi_g&RMfPt0?x{cuIC z#qn7sT_MEs_B+&BC2Z4!R(nNCSbckZ|M=cW|H$62Z>>6V#4?;WyG=E$B7mpg`!SGy zYktxSegV;jo!^_X(3*%@Yp)$JIRV&USXhN&|BujwelpmO@XzTV^@Xrw literal 0 HcmV?d00001 diff --git a/bochs/build/debian/README.Debian b/bochs/build/debian/README.Debian new file mode 100644 index 00000000..2bf9280c --- /dev/null +++ b/bochs/build/debian/README.Debian @@ -0,0 +1,17 @@ +bochs for Debian +---------------- + +I've tried to keep the install the same as the default, everything goes in +/usr/local/bochs. Binary symlinks in /usr/local/bin. Yes this is less than +ideal. I intend to fix this as soon as I have time. + +Some gotchas.... + +I still have problems with the vga font on occasion. It is included in the +package and mkfontdir is run, but I still needed to restart X in order to +get bochs to run the first time. + + + + + -- Rob Lemley , Mon, 17 Sep 2001 14:40:30 -0700 diff --git a/bochs/build/debian/changelog b/bochs/build/debian/changelog new file mode 100644 index 00000000..a7fadbf5 --- /dev/null +++ b/bochs/build/debian/changelog @@ -0,0 +1,65 @@ +bochs (1.3-1) unstable; urgency=low + + * Update for 1.3 + + -- Rob Lemley Mon, 10 Dec 2001 15:16:18 -0800 + +bochs (1.3pre1-1) unstable; urgency=low + + * Update for 1.3pre1 + + -- Rob Lemley Wed, 28 Nov 2001 16:47:25 -0800 + +bochs (1.2.1cvs20011128-1) unstable; urgency=low + + * Update from cvs + * Package now installs in /usr like a good package should + + -- Rob Lemley Wed, 28 Nov 2001 16:39:35 -0800 + +bochs (1.2.1cvs20010917-1) unstable; urgency=low + + * Added files to docs + * Run mkfontdir after installation to update the font + * Added some documentation RE common errors to the README.Debian file + + -- Rob Lemley Mon, 17 Sep 2001 16:09:50 -0700 + +bochs (1.2.1-2) unstable; urgency=low + + * Added bochs-dlx stuff. This may be separated out into its own + package at some point + + -- Rob Lemley Tue, 12 Jun 2001 19:47:05 -0700 + +bochs (1.2.1-1) unstable; urgency=low + + * New upstream release. + + -- Rob Lemley Tue, 12 Jun 2001 17:57:51 -0700 + +bochs (1.2-3) unstable; urgency=low + + * Moved debian dir to build dir + * Fixed rules file to work with potato + + -- Rob Lemley Mon, 11 Jun 2001 21:33:06 -0700 + +bochs (1.2-2) unstable; urgency=low + + * Backed out changes to Makefile.in to keep in sync with upstream + * Modified rules to install temp files in proper place for package build + * Added hack to rules file to put symlinks in right places + + -- Rob Lemley Mon, 11 Jun 2001 09:48:21 -0700 + +bochs (1.2-1) unstable; urgency=low + + * Initial Release. + * Adjusted Makefike.in to fix $DESTDIR problems + + -- Rob Lemley Tue, 5 Jun 2001 21:08:30 -0700 + +Local variables: +mode: debian-changelog +End: diff --git a/bochs/build/debian/conffiles.ex b/bochs/build/debian/conffiles.ex new file mode 100644 index 00000000..e423055b --- /dev/null +++ b/bochs/build/debian/conffiles.ex @@ -0,0 +1,7 @@ +# +# If you want to use this conffile, remove all comments and put files that +# you want dpkg to process here using their absolute pathnames. +# See section 9.1 of the packaging manual. +# +# for example: +# /etc/bochs/bochs.conf diff --git a/bochs/build/debian/control b/bochs/build/debian/control new file mode 100644 index 00000000..15188e19 --- /dev/null +++ b/bochs/build/debian/control @@ -0,0 +1,17 @@ +Source: bochs +Section: unknown +Priority: optional +Maintainer: Rob Lemley +Build-Depends: debhelper (>> 3.0.0) +Standards-Version: 3.5.2 + +Package: bochs +Architecture: any +Depends: ${shlibs:Depends} +Description: IA-32 Emulator Project + Bochs is a highly portable open source IA-32 (x86) PC emulator written in C++, + that runs on most popular platforms. It includes emulation of the Intel x86 + CPU, common I/O devices, and a custom BIOS. Currently, bochs can be compiled + to emulate a 386, 486 or Pentium CPU. Bochs is capable of running most + Operating Systems inside the emulation including Linux, Windows 95, DOS, + and recently Windows NT 4. diff --git a/bochs/build/debian/copyright b/bochs/build/debian/copyright new file mode 100644 index 00000000..b2eae880 --- /dev/null +++ b/bochs/build/debian/copyright @@ -0,0 +1,10 @@ +This package was debianized by Rob Lemley on +Tue, 5 Jun 2001 21:08:30 -0700. + +It was downloaded from http://bochs.sourceforge.net + +Upstream Author(s): + +Copyright: + + diff --git a/bochs/build/debian/cron.d.ex b/bochs/build/debian/cron.d.ex new file mode 100644 index 00000000..a2b15665 --- /dev/null +++ b/bochs/build/debian/cron.d.ex @@ -0,0 +1,4 @@ +# +# Regular cron jobs for the bochs package +# +0 4 * * * root bochs_maintenance diff --git a/bochs/build/debian/dirs b/bochs/build/debian/dirs new file mode 100644 index 00000000..e69de29b diff --git a/bochs/build/debian/docs b/bochs/build/debian/docs new file mode 100644 index 00000000..a3867b1b --- /dev/null +++ b/bochs/build/debian/docs @@ -0,0 +1,6 @@ +README +TESTFORM.txt +macintosh.txt +win32.txt +COPYING +CHANGES diff --git a/bochs/build/debian/emacsen-install.ex b/bochs/build/debian/emacsen-install.ex new file mode 100644 index 00000000..2f45077e --- /dev/null +++ b/bochs/build/debian/emacsen-install.ex @@ -0,0 +1,45 @@ +#! /bin/sh -e +# /usr/lib/emacsen-common/packages/install/bochs + +# Written by Jim Van Zandt , borrowing heavily +# from the install scripts for gettext by Santiago Vila +# and octave by Dirk Eddelbuettel . + +FLAVOR=$1 +PACKAGE=bochs + +if [ ${FLAVOR} = emacs ]; then exit 0; fi + +echo install/${PACKAGE}: Handling install for emacsen flavor ${FLAVOR} + +#FLAVORTEST=`echo $FLAVOR | cut -c-6` +#if [ ${FLAVORTEST} = xemacs ] ; then +# SITEFLAG="-no-site-file" +#else +# SITEFLAG="--no-site-file" +#fi +FLAGS="${SITEFLAG} -q -batch -l path.el -f batch-byte-compile" + +ELDIR=/usr/share/emacs/site-lisp/${PACKAGE} +ELCDIR=/usr/share/${FLAVOR}/site-lisp/${PACKAGE} + +# Install-info-altdir does not actually exist. +# Maybe somebody will write it. +if test -x /usr/sbin/install-info-altdir; then + echo install/${PACKAGE}: install Info links for ${FLAVOR} + install-info-altdir --quiet --section "" "" --dirname=${FLAVOR} /usr/info/${PACKAGE}.info.gz +fi + +install -m 755 -d ${ELCDIR} +cd ${ELDIR} +FILES=`echo *.el` +cp ${FILES} ${ELCDIR} +cd ${ELCDIR} + +cat << EOF > path.el +(setq load-path (cons "." load-path) byte-compile-warnings nil) +EOF +${FLAVOR} ${FLAGS} ${FILES} +rm -f *.el path.el + +exit 0 diff --git a/bochs/build/debian/emacsen-remove.ex b/bochs/build/debian/emacsen-remove.ex new file mode 100644 index 00000000..c5adf3d2 --- /dev/null +++ b/bochs/build/debian/emacsen-remove.ex @@ -0,0 +1,15 @@ +#!/bin/sh -e +# /usr/lib/emacsen-common/packages/remove/bochs + +FLAVOR=$1 +PACKAGE=bochs + +if [ ${FLAVOR} != emacs ]; then + if test -x /usr/sbin/install-info-altdir; then + echo remove/${PACKAGE}: removing Info links for ${FLAVOR} + install-info-altdir --quiet --remove --dirname=${FLAVOR} /usr/info/bochs.info.gz + fi + + echo remove/${PACKAGE}: purging byte-compiled files for ${FLAVOR} + rm -rf /usr/share/${FLAVOR}/site-lisp/${PACKAGE} +fi diff --git a/bochs/build/debian/emacsen-startup.ex b/bochs/build/debian/emacsen-startup.ex new file mode 100644 index 00000000..c4f40c8d --- /dev/null +++ b/bochs/build/debian/emacsen-startup.ex @@ -0,0 +1,18 @@ +;; -*-emacs-lisp-*- +;; +;; Emacs startup file for the Debian GNU/Linux bochs package +;; +;; Originally contributed by Nils Naumann +;; Modified by Dirk Eddelbuettel +;; Adapted for dh-make by Jim Van Zandt + +;; The bochs package follows the Debian/GNU Linux 'emacsen' policy and +;; byte-compiles its elisp files for each 'emacs flavor' (emacs19, +;; xemacs19, emacs20, xemacs20...). The compiled code is then +;; installed in a subdirectory of the respective site-lisp directory. +;; We have to add this to the load-path: +(setq load-path (cons (concat "/usr/share/" + (symbol-name flavor) + "/site-lisp/bochs") load-path)) + + diff --git a/bochs/build/debian/ex.doc-base.package b/bochs/build/debian/ex.doc-base.package new file mode 100644 index 00000000..57418f4c --- /dev/null +++ b/bochs/build/debian/ex.doc-base.package @@ -0,0 +1,22 @@ +Document: bochs +Title: Debian bochs Manual +Author: +Abstract: This manual describes what bochs is + and how it can be used to + manage online manuals on Debian systems. +Section: unknown + +Format: debiandoc-sgml +Files: /usr/share/doc/bochs/bochs.sgml.gz + +Format: postscript +Files: /usr/share/doc/bochs/bochs.ps.gz + +Format: text +Files: /usr/share/doc/bochs/bochs.text.gz + +Format: HTML +Index: /usr/share/doc/bochs/html/index.html +Files: /usr/share/doc/bochs/html/*.html + + diff --git a/bochs/build/debian/init.d.ex b/bochs/build/debian/init.d.ex new file mode 100644 index 00000000..c07ac82a --- /dev/null +++ b/bochs/build/debian/init.d.ex @@ -0,0 +1,70 @@ +#! /bin/sh +# +# skeleton example file to build /etc/init.d/ scripts. +# This file should be used to construct scripts for /etc/init.d. +# +# Written by Miquel van Smoorenburg . +# Modified for Debian GNU/Linux +# by Ian Murdock . +# +# Version: @(#)skeleton 1.8 03-Mar-1998 miquels@cistron.nl +# +# This file was automatically customized by dh-make on Tue, 5 Jun 2001 21:08:30 -0700 + +PATH=/sbin:/bin:/usr/sbin:/usr/bin +DAEMON=/usr/sbin/bochs +NAME=bochs +DESC=bochs + +test -f $DAEMON || exit 0 + +set -e + +case "$1" in + start) + echo -n "Starting $DESC: " + start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ + --exec $DAEMON + echo "$NAME." + ;; + stop) + echo -n "Stopping $DESC: " + start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ + --exec $DAEMON + echo "$NAME." + ;; + #reload) + # + # If the daemon can reload its config files on the fly + # for example by sending it SIGHUP, do it here. + # + # If the daemon responds to changes in its config file + # directly anyway, make this a do-nothing entry. + # + # echo "Reloading $DESC configuration files." + # start-stop-daemon --stop --signal 1 --quiet --pidfile \ + # /var/run/$NAME.pid --exec $DAEMON + #;; + restart|force-reload) + # + # If the "reload" option is implemented, move the "force-reload" + # option to the "reload" entry above. If not, "force-reload" is + # just the same as "restart". + # + echo -n "Restarting $DESC: " + start-stop-daemon --stop --quiet --pidfile \ + /var/run/$NAME.pid --exec $DAEMON + sleep 1 + start-stop-daemon --start --quiet --pidfile \ + /var/run/$NAME.pid --exec $DAEMON + echo "$NAME." + ;; + *) + N=/etc/init.d/$NAME + # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 + echo "Usage: $N {start|stop|restart|force-reload}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/bochs/build/debian/manpage.1.ex b/bochs/build/debian/manpage.1.ex new file mode 100644 index 00000000..9e58cafb --- /dev/null +++ b/bochs/build/debian/manpage.1.ex @@ -0,0 +1,60 @@ +.\" Hey, EMACS: -*- nroff -*- +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH BOCHS SECTION "June 5, 2001" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +bochs \- program to do something +.SH SYNOPSIS +.B bochs +.RI [ options ] " files" ... +.br +.B bar +.RI [ options ] " files" ... +.SH DESCRIPTION +This manual page documents briefly the +.B bochs +and +.B bar +commands. +This manual page was written for the Debian GNU/Linux distribution +because the original program does not have a manual page. +Instead, it has documentation in the GNU Info format; see below. +.PP +.\" TeX users may be more comfortable with the \fB\fP and +.\" \fI\fP escape sequences to invode bold face and italics, +.\" respectively. +\fBbochs\fP is a program that... +.SH OPTIONS +These programs follow the usual GNU command line syntax, with long +options starting with two dashes (`-'). +A summary of options is included below. +For a complete description, see the Info files. +.TP +.B \-h, \-\-help +Show summary of options. +.TP +.B \-v, \-\-version +Show version of program. +.SH SEE ALSO +.BR bar (1), +.BR baz (1). +.br +The programs are documented fully by +.IR "The Rise and Fall of a Fooish Bar" , +available via the Info system. +.SH AUTHOR +This manual page was written by Rob Lemley , +for the Debian GNU/Linux system (but may be used by others). diff --git a/bochs/build/debian/manpage.sgml.ex b/bochs/build/debian/manpage.sgml.ex new file mode 100644 index 00000000..d22983ef --- /dev/null +++ b/bochs/build/debian/manpage.sgml.ex @@ -0,0 +1,143 @@ + manpage.1'. You may view + the manual page with: `docbook-to-man manpage.sgml | nroff -man | + less'. A typical entry in a Makefile or Makefile.am is: + +manpage.1: manpage.sgml + docbook-to-man $< > $@ + --> + + + FIRSTNAME"> + SURNAME"> + + June 5, 2001"> + + SECTION"> + rjlemley@calypsoblue.org"> + + BOCHS"> + + + Debian GNU/Linux"> + GNU"> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2001 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + program to do something + + + + &dhpackage; + + + + + + + + DESCRIPTION + + This manual page documents briefly the + &dhpackage; and bar + commands. + + This manual page was written for the &debian; distribution + because the original program does not have a manual page. + Instead, it has documentation in the &gnu; + Info format; see below. + + &dhpackage; is a program that... + + + + OPTIONS + + These programs follow the usual GNU command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. For a complete description, see the + Info files. + + + + + + + + Show summary of options. + + + + + + + + Show version of program. + + + + + + SEE ALSO + + bar (1), baz (1). + + The programs are documented fully by The Rise and + Fall of a Fooish Bar available via the + Info system. + + + AUTHOR + + This manual page was written by &dhusername; &dhemail; for + the &debian; system (but may be used by others). Permission is + granted to copy, distribute and/or modify this document under + the terms of the GNU Free Documentation + License, Version 1.1 or any later version published by the Free + Software Foundation; with no Invariant Sections, no Front-Cover + Texts and no Back-Cover Texts. + + +
+ + diff --git a/bochs/build/debian/menu.ex b/bochs/build/debian/menu.ex new file mode 100644 index 00000000..8a50db74 --- /dev/null +++ b/bochs/build/debian/menu.ex @@ -0,0 +1,2 @@ +?package(bochs):needs=X11|text|vc|wm section=Apps/see-menu-manual\ + title="bochs" command="/usr/bin/bochs" diff --git a/bochs/build/debian/postinst b/bochs/build/debian/postinst new file mode 100644 index 00000000..2f0c295c --- /dev/null +++ b/bochs/build/debian/postinst @@ -0,0 +1,48 @@ +#! /bin/sh +# postinst script for bochs +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see /usr/share/doc/packaging-manual/ +# +# quoting from the policy: +# Any necessary prompting should almost always be confined to the +# post-installation script, and should be protected with a conditional +# so that unnecessary prompting doesn't happen if a package's +# installation fails and the `postinst' is called with `abort-upgrade', +# `abort-remove' or `abort-deconfigure'. + +case "$1" in + configure) + mkfontdir /usr/lib/X11/fonts/misc + + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 + + diff --git a/bochs/build/debian/postinst.ex b/bochs/build/debian/postinst.ex new file mode 100644 index 00000000..1d1134f9 --- /dev/null +++ b/bochs/build/debian/postinst.ex @@ -0,0 +1,47 @@ +#! /bin/sh +# postinst script for bochs +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see /usr/share/doc/packaging-manual/ +# +# quoting from the policy: +# Any necessary prompting should almost always be confined to the +# post-installation script, and should be protected with a conditional +# so that unnecessary prompting doesn't happen if a package's +# installation fails and the `postinst' is called with `abort-upgrade', +# `abort-remove' or `abort-deconfigure'. + +case "$1" in + configure) + + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 + + diff --git a/bochs/build/debian/postrm.ex b/bochs/build/debian/postrm.ex new file mode 100644 index 00000000..41c0aa61 --- /dev/null +++ b/bochs/build/debian/postrm.ex @@ -0,0 +1,36 @@ +#! /bin/sh +# postrm script for bochs +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `purge' +# * `upgrade' +# * `failed-upgrade' +# * `abort-install' +# * `abort-install' +# * `abort-upgrade' +# * `disappear' overwrit>r> +# for details, see /usr/share/doc/packaging-manual/ + +case "$1" in + purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + + + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 0 + +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + + diff --git a/bochs/build/debian/preinst.ex b/bochs/build/debian/preinst.ex new file mode 100644 index 00000000..9b013229 --- /dev/null +++ b/bochs/build/debian/preinst.ex @@ -0,0 +1,42 @@ +#! /bin/sh +# preinst script for bochs +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `install' +# * `install' +# * `upgrade' +# * `abort-upgrade' +# +# For details see /usr/share/doc/packaging-manual/ + +case "$1" in + install|upgrade) +# if [ "$1" = "upgrade" ] +# then +# start-stop-daemon --stop --quiet --oknodo \ +# --pidfile /var/run/bochs.pid \ +# --exec /usr/sbin/bochs 2>/dev/null || true +# fi + ;; + + abort-upgrade) + ;; + + *) + echo "preinst called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 + + diff --git a/bochs/build/debian/prerm.ex b/bochs/build/debian/prerm.ex new file mode 100644 index 00000000..0b32b482 --- /dev/null +++ b/bochs/build/debian/prerm.ex @@ -0,0 +1,37 @@ +#! /bin/sh +# prerm script for bochs +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `upgrade' +# * `failed-upgrade' +# * `remove' `in-favour' +# * `deconfigure' `in-favour' +# `removing' +# +# for details, see /usr/share/doc/packaging-manual/ + +case "$1" in + remove|upgrade|deconfigure) +# install-info --quiet --remove /usr/info/bochs.info.gz + ;; + failed-upgrade) + ;; + *) + echo "prerm called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 + + diff --git a/bochs/build/debian/rules b/bochs/build/debian/rules new file mode 100755 index 00000000..41350732 --- /dev/null +++ b/bochs/build/debian/rules @@ -0,0 +1,90 @@ +#!/usr/bin/make -f +# Sample debian/rules that uses debhelper. +# GNU copyright 1997 to 1999 by Joey Hess. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# This is the debhelper compatability version to use. +export DH_COMPAT=2 + +configure: configure-stamp +configure-stamp: + ln -snf build/debian debian + dh_testdir + # Add here commands to configure the package. + pwd + export CONFIGURE_ARGS="--prefix=/usr"; ./.conf.linux + + touch configure-stamp + +build: configure-stamp build-stamp +build-stamp: + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #/usr/bin/docbook-to-man debian/bochs.sgml > bochs.1 + + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + -$(MAKE) dist-clean + + dh_clean + + rm -f debian + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/bochs. + $(MAKE) unpack_dlx # with normal prefix so that dlxlinux + # bochsrc.txt file gets right pathnames + $(MAKE) install install_dlx prefix=$(CURDIR)/debian/bochs/usr + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot +# dh_installdebconf + dh_installdocs + dh_installexamples + dh_installmenu +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_installinit + dh_installcron + dh_installmanpages + dh_installinfo +# dh_undocumented + dh_installchangelogs CHANGES + dh_link + dh_strip + dh_compress + dh_fixperms +# dh_makeshlibs + dh_installdeb +# dh_perl + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/bochs/build/debian/watch.ex b/bochs/build/debian/watch.ex new file mode 100644 index 00000000..b3e039f5 --- /dev/null +++ b/bochs/build/debian/watch.ex @@ -0,0 +1,5 @@ +# Example watch control file for uscan +# Rename this file to "watch" and then you can run the "uscan" command +# to check for upstream updates and more. +# Site Directory Pattern Version Script +sunsite.unc.edu /pub/Linux/Incoming bochs-(.*)\.tar\.gz debian uupdate diff --git a/bochs/build/linux/README.linux-binary b/bochs/build/linux/README.linux-binary new file mode 100644 index 00000000..e69de29b diff --git a/bochs/build/linux/bochs-dlx.in b/bochs/build/linux/bochs-dlx.in new file mode 100755 index 00000000..2f3a4dde --- /dev/null +++ b/bochs/build/linux/bochs-dlx.in @@ -0,0 +1,118 @@ +#!/bin/sh +BOCHS=@prefix@/bin/bochs +DLXINST=@prefix@/share/bochs/dlxlinux +GZIP=@GZIP@ +if [ ! -z $1 ]; then + DLXPATH=$1 +else + DLXPATH=$HOME/.bochsdlx +fi +CONFFILE=$HOME/.bochsdlx/bochsconf + +makedlxdir() { + echo + echo --------------------------------------------------------------- + echo To run the DLX Linux demo, I need to create a directory called + echo $DLXPATH, and copy some configuration files + echo and a 10 megabyte disk image into the directory. + echo --------------------------------------------------------------- + ok='unknown' + while test $ok = 'unknown'; do + echo Is that okay? [y/n] + read j + case $j in + y*) ok=1 ;; + n*) ok=0 ;; + esac + done + if test $ok != 1; then + echo Aborting + exit 1 + fi + #echo DEBUG: Creating $HOME/.bochsdlx/bochsrc + echo DLXPATH=$DLXPATH > $CONFFILE + . $CONFFILE + for file in bochsrc.txt readme.txt testform.txt; do + if [ ! -f $DLXPATH/$file ]; then + echo Copying $DLXINST/$file '->' $DLXPATH/. + cp $DLXINST/$file $DLXPATH/. + else + echo "ERROR: $file already exists in $DLXPATH. Remove it to replace." + fi; + done + if [ ! -f $DLXPATH/hd10meg.img ]; then + echo Uncompressing $DLXINST/hd10meg.img.gz '->' $DLXPATH/hd10meg.img + $GZIP -dc $DLXINST/hd10meg.img.gz > $DLXPATH/hd10meg.img + else + echo "ERROR: hd10meg.img already exists in $DLXPATH. Remove it to replace." + fi +} + +echo --------------------------------------------------------------- +echo " DLX Linux Demo, for Bochs x86 Emulator" +echo --------------------------------------------------------------- + +echo -n "Checking for bochs binary..." +if test ! -x $BOCHS; then + echo FAILED + echo ERROR: I could not find bochs in $BOCHS + exit 1 +fi +echo ok +echo -n "Checking for DLX linux directory..." +if test ! -d $DLXINST; then + echo FAILED + echo ERROR: I could not find the DLX linux directory. + exit 1 +fi +echo ok +echo -n "Checking for $GZIP..." +$GZIP < /dev/null > /dev/null +if test $? = 0; then + echo ok +else + echo not found + echo ERROR: without $GZIP in your PATH, I cannot continue. + exit 1 +fi +echo -n "Checking for $HOME/.bochsdlx directory..." +if test -d "$HOME/.bochsdlx"; then + echo "ok" + if test -f "$CONFFILE"; then + . $CONFFILE + else + makedlxdir + fi +else + #echo DEBUG: Creating $HOME/.bochsdlx + mkdir -p $HOME/.bochsdlx + mkdir -p $DLXPATH + makedlxdir +fi +echo Entering $DLXPATH +cd $DLXPATH + +# Now that we're in the DLXPATH, make sure that bochsrc.txt & hd10meg.img exist +if test ! -f bochsrc.txt; then + echo ERROR: bochsrc.txt not found + exit 1 +fi +if test ! -f hd10meg.img; then + echo ERROR: hd10meg.img not found + exit 1 +fi + +echo Running bochs + +# ok now try it +$BOCHS -q + +echo +echo --------------------------------------------------------------- +echo The DLX Linux demo is over. If you want to free up the disk +echo space in your account, remove the .bochsdlx directory from +echo your home directory. Example: +echo " rm -rf ~/.bochsdlx" +echo Please be careful with rm -rf because it can make a mess. +echo --------------------------------------------------------------- +exit 0 diff --git a/bochs/build/macos/CWPro3_project.sit b/bochs/build/macos/CWPro3_project.sit new file mode 100644 index 0000000000000000000000000000000000000000..b10adc6f89039843e66c4b876bed9049e309ef04 GIT binary patch literal 1255450 zcmeFXWl$yEvNi|}4GlEz?(WdIySux)yKfqIcc*c8cN(|GH_&L~uyObO^?U9&6EhQW ze@w)Um^l%rems@=WY$`lxw0yvs+O9JIw=G+1Ue0#tGtQFCpriS2rM`>5|Xc`-Zl;< zRu&}UChjJG$^YlE;rf4LKK+-L*ZIHM@PE$WzXt?F7nR&n7nMBwzbuf`Yyahu_h0(I z6kUEqM1=o6ACtSegEy0ngO!Dw`+s@<7qVvjU$uY9SP&4|SAV6yX9x&&aS?SfEg6ab zb3SVb2uLCb$X>6%Mob8ZtOKDzf~bEyAt2KHQ6auG&3pIh{5(Wq!I0i@5JwmEq}$qSoW@3WB6t@yxee004EtQG-W zOVl^VJYH|v87udOaZTUu0Ps7ms`ui~ro)aH$C&Gz`LVYKK0;}1%r)@TDKBc2=W=WJ4zdYI~0h3h=heHsZ4JPyk_PI`KN z*(Ia<K4+~x_hvxhcUY(7uCi>ycD>YrUXLHJ@}2wJzw;Fg#4y0h4t%D7 zm35qe()v_KD2&8k(`VnQFHM1Vixw3>giaXvcql#=;V4aU*ste@ba{L>$M$h()nq5t zCCR=#QL&Xay~I9~N2m$tBzag4oN3qj0oZTX1T$_E)q~@m>X!m%+Y?R$ch+ZKj9gpu zS}UGBOR&tI+O%WNpFESW%$^?z7)P(q5p`pa*0-%$gPgWkOiiE49+yr1`Us0hko@(k zM&kYbIN-L(weZ8_V0?!Xbj9t$UHjEFu>s+m?eE!XvDX&*?PJ_Sq+r?UU{tgP&vRdHu zu1he`uAxgX-aggZfxMkxHX`D0c1|?i?q%chWm~XlB;ff$g0bx8d`$Q1f*}xi)M5~R zCkUhlCEt(pn%6d`>qOKD0SQ3~95cRF=Z%Njb~UU(EW7B|VLa3G2Fq1yZRWFtvzW7p zvyd9Q2h|6WhyJCiX*9>eTAcYWHgMYPnkf%eD~k`l|u46Aj~Q zeAnodzMvg(TU{%n_S{NmmA}0NTZ7+S^h0>h`e3)zJ zQY$Z=I$9;7!Tao~(2exAk7*gseTJKgR$ylfZ56QC*0cdd!K<`drBwHqWUFqcE%k$y z?V9{xf<8uG&Rkcyru^N3UDxuQPWgR3Awh1pA9x^smL|s008rJZuuP9h|9Vr}P`Sm{ zUSg%4HzCmI6z15e=Nb{O#519g6h-wpudB52}tknKTQjBd> z4Y8`ZZ0nmgr5Yp9eaolyXO*ZAzgj~=$g^8&ttFh>G({#DDp zGycJ+FPB5x5qCl-LL)2x!uEfm(*0j%a*ORRtn&XKQcK?OqHP+M3|PgkRr)32cZI}4 zpt?p(37BS4JNcuSX^!kfsHzrRA@`59OZ2ayqWT~4g^%&CSw2PPB_Y`}>z>$xS8pM3 zsaBWbU23!P?-)zH|A<*w8F$1Mc!~>wyyI`H2&;apdaHcek2Nkpv{$lM96xAKRO_g& zDPc2pgQHGHjTDg4kHU}2PvJuEOzq6=%;qo3oZ+7}pB0~Bo<*JIot2)EpNX9z*91N! zYzXmTzdil(NA4rsPP}ZAXtxDv^siJr#aAY5`2}uuzQg1}Ui{+fIr@0ce+Kl>Urzho z#CKZy)W7BT5MNIE-6Fcyg4GB&-)|DPymvdq%loe0p2D~?kGr2O#)b#aww52S6jQR> z6`)f9XO}$~o(N5ZCGl)N`4v{v?`mlhk4KdH;|V#>7d|t7H|L#9^*rw0uAUEhqaS)D$o`Tg+5ILC1uc6ecgmCC)pE3` z$DC%{x7kM`3JywM*YX00#C_m{id>0QWyXiHPS zN_9qz0ksr+&eXF0490V<)t$LQYJ_LM&*=&*MaYJ*dcB-M-(Kw6v*=RVq&i(ckBKF@ z(YObq{7Q9}5%C;$92XUJFX|19DGV{^rKjVIJJBrXm`?g4Wds7TF*(%MFr z^XcuAm%bn#$)OZoQFr~I0Jt`}<7i8EH@}-c%Fp=hX=JOrn!#7<0w9bd56}q3uGg;f zY$j7}G?wa;30|pd#3+uSK^K47l1 z7W3;p6vGLE7QLEEukIFs1{biToRR*3Z8;Yj53iKj#gAQogFbk)NmbAVZ-p(|sTC7CIgPLS7uh-k@&1 zM8Yy=D2*)}JxsRyN9Ae47n0|~$^dv9U$b3L9%p7tR8I^bP{{HWV_+5W4Q_}zXC0nB zhJ;{zCIy(D-vu0z+t+;)QrL3X`k{7YdQa}Ih>h|a^#sx;nIO(;d!#OZBQTtwW(e)S zUz-H_NILz{T;~`NP~T!3saHhV@}Yq4o4KXYKN0aC^yKWDpAcT<4nL#s-!s z-yJ*@6=2(ODKu+yFu!Ya>HqxkN65YE?<`{wX!@&< zR^Vo+N2jMDzdPiNF)zd`B0{?HyOrLaUwD1hyf*?!RLyVT?y-8J{r!2B8jgVIk0$!WQ>@WlorK_`sbJ&59R;IO~S3Rfz$C zr<^LX=LD|<6a?1X1kP(Qe-K?p7z-1JM>wsC&k+VjHO5Zc~r$J-EiJl^;*xcOX{ zNARt~2;+CZt@Go?KjyrZrvki<-p8k27_Tu2UQ}!6eqQpKr|a3r<1fM+xp@2eT4>8YTwhjz(Qukp2x(7LN{aZWGC+V&e$GE&YwMaU1n=u1qMl_ zGJo|_EqOg@r6?Z3VIxI&Jl7lbj0Jk`WN+|&ntom&9TRANM%H}v3zWMlHS6kTXn9d| z{(S;QgJimyivAEl-T0dX>fqnV45-0Jes66l+inTJAoF@|gVVi^x;Qk{#^5 zZ}MJX-RPN3LgL3&7RTn?&3ip=z%Sy9q>a~rgR_3}ja6_;ZLr?kZY(&d_GZfOZM4=k zL3bl)p!UWHmxANujWc9F&#wlfqs-f47uW0d zu|}K4UHfj;Y((C_zj#>~(KVO%Kl}mQzuZLKG4HDk^B1HNRSbDhfpUnwA8<5t!^1+cpzf7(|I*xi`_vn%HQqUO=Kmm1^<^lRM8 zxfiT?wCE)Uz3UJUya)pyO#)CrAv(lAU;1jwn*>wuzX2l}1#|CFYZA-@gn*A$0T`f@ zngq*$uOKrW;;|QRAhL15ClGFppZ2Wz=2Tb0Jp-^=r(oO{3DjAmWcn@)yw#qy>ivE% z3Vg3ovh0n#hX9S#D47J%fhcQ~%-%_W<;?&V5W9B4#0zOnMw4L7JsWUJr{1_X`JN6~ zty3`LiwJ71nKcPu0(sQTn)T-2!vOJh3TA!LK_b8$9ixF4Q6P3>U*pnwTh@6bRc^LGlMl4Sq~sJsC{ z2P$vu3%_5~5em6y*Aa@jZ`KitxOdYrntI^{t~3LPKu660NRW{EyC{&^^xYH~IQ&9c zV>J0+^2MwM zoPEFD@Sz7Jwt9yH29CX?)Ci5dEY=7Oy}$qqEZ%v51y=8$fm}@=en2Dh0CW&@;|Ck4 zzTtxoRNwdk3pBENM+9!0zcT{2Ed$s=mkl3Gpv%S&K@f4n2PufS@q-lK&*9&D1^&C}VZnS)+k;@F53j5K5HR7}7kIn;6Nn7OTP`41TF<3I498vK9M2lYFDKZyOmgJEzcV~sb# z+uv_#nE!$QU)I2Yy>Kw&3{{MBX0n?%CGOiF`r(iK`5*BoZ2viGOc zFWI9bV(O%Qv$awq>Sa~eM#Lp%RteU3dIUVyv){9rod@2sj?(0kZYmq|%#`-_US7Ja z|866(!3hp>H{xBakN_3gcVGL`*$SS{_$q1thL!D1axG4kvykn2DpM=A zWvt&j@2tKJ^B0INa9nZU?y4x62!XYf)uEKx!HcQRnygf5tMhTVUq0zu{_SepnfOaR zhC_&g;lXOK*pcQg1A&*SM~;t${UThF13zwmcDcJh5!Rpy@XcuHQOA(%ec4||0g%EF z5-{&=riwgtWXM@7ubhrY{MGAVn4139qjx1&-l0LC(NbOGwWiH9OD~&dN}2j{vtZsK zUH*i_1XZu4s^0HD66T`Yz9O~0zRHp+l~2&GWTBw4d@@JfN1}_Fr%Fvl`KU72*Y+X( zbk{P>j2}%CgNivnh4uiRE>eWY+Lwda&ZwobUZp-m&W`@Za4$~pepi0?rTUa@bez_^@;PhLRsc`Z7#C-06Q)M~D*OGu zYQZ1NF9$!iYC>M1xWzUdscgldu&Tg-5u2l#Z0wdWvg%phM4_0w&c@^3(yx1lF4SUK zzhXe-0EdxCrnE@ajDoI0Xn<>N8+*l^q1<^bl9MTW>9*glqo%K|qo+!lXcl9imWQvZ z`hrQhHD4>C?EIP&*j??Ju=^8$7^=tBwHB9rY9nSN)+fmEceL%Vm&<<0gihO+_Z;2* zPQ!*g1f`0t6`I6Lt+R-|_Q;t0M7D0vMHST~?&_Lz zrWp?;rw)QOKBG|`rN-Dcgm`|tvAFt`!+tO6AYE%#db7f%UZh%=tyM2P&P`wBRh2s{ zDNB)Z3PSv79S zKU#uucF|b*k`wyr{FCbA1GYNV`@zpxviBn$u}BXm!2+h=2&0FWT-Lg*sSszXjeE6o zA&vUVl1ggx^_mgn#w4EJePua<%<5>OuQFBv&kDMvL0wW}YBy~HVZk@~+=?I3_UbBj zLt@9>i-FIB-fO2x zYTX)I$u|(=dgie~z%PRSLy5CGgv3vMCvWcR$3RTw#Yb9+oX>iV>_TYf_!YAixSVc;kecp7gw#}o;a7I{FN;OrwjiwzzBPxw-x^*Q*MQCm41k*su zBq$7K2<20d9<}g@!{o8PCfs-I_i(pz70jfvhQ{O3eB*R#fD9-+XdU5`S zzG{Gpp?v%BWs9}LWF5Bx(OzU^H5EK?May0tkFHAImI+HI&^ldp@?$;RqB=Unwl9=Y z9B_b@sk>agc<)$WB+3vT^Po=mx!RwF?S{gY{Fq)7Ms^SWdp@qhp&W>wC!&OXA)s=4 z)Y{p+1kK|8#*)()K(1C1HrCn=x{H*4_epy^0!E2(VsKzXPFUdAei^1H43c4EL!I(B zY@t=<>#Xq_uyIi8ATtq9ke~2PaM#Fys4N=HVyw#6(15B~ zt9pR@)G|m*pOR&ZNqUn3B^a)jTp5(i%KU69{j8e`*Juil#aM=h}hSoaF32_Xt!W>w;ZCPuMj&Y!)xw?|{9-3h42F9nTf z44C`$rOB!eUxbnS&RWC;aNuoKDKCBDyu9S{w_ue3wmW?du+)$YiyeKLRH3Il z2~A2ym84r<){C#wf%Uu)ozKm1u|$=DK!?67%TBas@)Av8#3!xnREdH{cf3L<&N_q= z6;P(KW9KMXd#82M&(ya3P##WU7f+Au2g&2=+`7MSxS2?O)yd!l$v#FVvdQ`>Ay6Gqdsm^g02ehPA>@m+!l%0-l`S7 zWuc}0(ug$&ls{qI zr|;dPiaJ(wikTzljM5-RW$K}TQ$I(^<~EY1Q`_vN`pvIgvt*_F5-Grk!Hf~1Vat3N zV?)>}O^BKqvuZc65neN%QXE(v%&TuIlLVs0!@XAHHi$96%{y_dG8&`e+VAAS?p>gSN$w_M4FQw zS3Y+3*nX#B!zQwgqq-KEp{i8MOESd91TNFP2gpJY)1-pRVaA7ZA&re_q*ZL23O1EB z+M$^ofW1vs5zZc!VMCNDHQB&%tbodoN}BE@S5#=kbu-7>m}99w6F=}xv_S|2lruQ| z0xSE|SByW}gk!gvTUtNZ4))j|Qj6S6`VqZ%DkGRo!yx;SsgA9R|4jIc>%wwhF)H zS83}AQV_WesME?DvF|8IK~ElqO~MLY9Sc?>V;{*?z3L8$t^xwL2i$>}2z_E_e=f4B zM?@CXpb=0;04|1`CdPDV9LJX@s^t%lonNJwzt^D= zYLu2D(1$Q(_TXsrBo>rO=&0&5Lc{Q2jO*I)m;lM_Jh+qeG!TogcqS<0dWo z;Vs&BKv<@Z7BA7^MPI!>L&m_m$EDzT?s{7#=KmNJ;Y%>x4avD&#!j<54nYXg=a=9A zJqc~B&*HyH{HJ8!dOGdTp{#&WRh2||$TC@Rrkh@1`vgp;leM9bo4Q9K9oz5xZxPU6 zULef&hM@(?CE}S`NgBgwOh4A<1LHH@;^0A16VlR@!rQ9MEV8TiA;_qT$*O-mBWfUU z&+2`ZF$a)hV1>==zP;;yVl>453d^Xl#-9ctPjfQlOkP{U*pA8Qz=%hR_#*-Xvv?x8 z>F4WW!{GZfS_Bc-`NqOc+@1;lrdAd|cQu9NVio^q!Dst{`())(C#kgc!oK>9uay#I zd86O@hU8hXvWLl|i5e+z9dF*XLDKRueeCrN--L@#X3Wcn;cuZi;#f$v^$1Lxq%WT)`W1oAN~q@h2$cq@=$_o_Sc1Kq-MpTypfOg4uUiE4s4hxQhmzsm3r&R_?lx2IwJm? zzOr4!eM%O4wwE;QGkPb@Gyx%6R?c;apL_ZkA^EB6C8w%^avH*f{=KP6w{aw)C6X_n zHiZ+v|18CC-qI3+3}53ZO`TCcMO?hUE!#cZ3QCexfUSMQ6%BVPFHSb=Ut8x08iG2g zsIGAke?XwGErtB>7-q5@ItSdd2qoJ7`8U)bDsYUsO;H zAw8xMnB)`Z;j@ep`EC^+BPuiXCMQnS&Uu0+p{}8O;1l99NXGT0Rv|_e68pWHLrIfH2iGh zuZv{anlmA^q%lJFuXU<(cs|ALKB%O~2$N*iN}D^vI4aOiB;MO~8Tnrv%I;;D1h_huiN56~A=<`Os=ELD zTJ>2(kOd(TCPe~#Nxnf z!^+v#T+-eNkJ6P)2({|YkO!7lgL5*os5{KoZ#&4$3%6&3!EdxmI12ap-c0dTBPrxE zBO`pto?_YHCB`}>q={aW=>ceJlT(~y@@Cnb8(*s9szpCo@q1Or2d7WEmI)jBxZ1<# z$@_y5HHJn_@IQ^wR3tLXM_z;R^|rg4quoN0+}H9*kNJK(Sp)%Iv9-U&r%N|`VMpvPUS((1Bq@Yf@cbj*oMYTV z*!dx_pp?Ox7>WOw zp2Gf2b|D)$k&+TGNm7&21E*#b&*nMT>oO2L5BbO}d5r?E=q{57itX(xY764|-XwGP zLBG@;pH>|D`w@eO9(rqujr2A$dROt09&RV-G;xAM&yvfx?hM(0?$?{%{xmyzm~B34 z7rZSlAjmo5Yu=QH;9(fKf_SP2J>WoPc-kjPd}J3zfAG&{5@Z$uO!->v3RlS}Ka2zO z1S*g_HNSb#IGui)Pvkw=vy6h)iNIPk?=_dtVr3Kt)guWbCq_65eQ{Yi#tA~Wh!fw? z=@ScO0^t4gGp09&cNDAw2i zu1B?EToCSlJ6l%3mC%9@v8uXiu;xCy19w7@B~NJF9J%q5(qNDKvSO(N6=joK-xB|! zTfL9f4iWQ-ECnBhJ5nl>5fMg|NIl>u^g3B3z;{X?qqVz~3W6z> zSv_#t0Ft4tOex|PMrwm7$hqHT>#WNd@32459siM=x_hV z_=+4455+#>QvB_8-=Dm?xq0T|o1IqF(44}FLw4&#@8^%wplz+0SVg$>!Qm|;xE?7U zrarX0o!<+XjtxxXp2}~}c}(gq$wl!p|6$L(nXm==`SUUfNPM z8T1HCm<8eB5%|yQZPtDjd)%iOW=q49H1fL@V!V-kz=ae$lB!hi7l$=xUY++X^u!TF zWaT&fy~$607Fj$XuV9UF9*XN5*N9#sSbiS=mGrCIrUp}3o1L_8>jeT|d0d&uPu5zcizWlD3RyZAKA`aTZAXCkYd^)3v~#L|!=ku8dS zmfP3Lhb9;1=g#`QRQkZFBGP^YJ5PcOn&Du}jf%-~C`{Ca7WuAQ3U2bL#>(K>`MsOY z_>G@Yn#4K}G~?B#ds{uHgk{uy5bEhP23=5_9KlfwZ#qo-L3a36UODH6Ue_}jACVm> zc&f)*zd|dw-;;u*o9iUN$1B*6t0Zo}>7T0Y$<(kAdfyYBnVYBKDJX>IQTRkH^U|L>O#hg~N*_Tb*;# zf+qD;`2%7?SBIC0{i?M04PGa8I;QEMm;ga2j%~k$(d%__etlm}L#%bgU|}wqgB)K3 zbWdA_7em>(H0s+XzP!4LW6eekYl{zObvH)wG$t zItLxZQYo~4n?l>`$SLuHer}*k7Sp#0Vmgo^K=bu<0`tOgbG;zyiBMm}xv`9;f9&kRGdg8y!9pB2$|%wfIb)8pk1w~dYVigkYiX)Ym9 zPzr0T=F1kpZW{lB9QR#-BgvSXxHj zHOPj8$oX}u+QoPF0sBmzpK9~^Oz>z6kqqFrujm}YoR7D5uvRH%u=XM)T%fz>fvEWk zgYZ~VUIycmGK|D#r7gu@bVnEZG3E3r+FA4na{+b-Bq9W}@B(GL8!9+&t380k>q^Uf zYlgY%e5?J0F;U5@+{DKanaK`FXB$(fL04W>B4N*D))kA@IbK9FkdZ z)UI;t{IYM84hsx*d2%L;dd^ZymT7O;w2UjYfK{;skNe=hYOj2M4zrcR&^5%%Xq1-e z5IP)zwl}9P57OKJ= z-mTZdjaKk>;h}6X&{N~7pM`4^#K8cMBh$d;uES%}3eHXIv#lSvh~gV*a}-zk#Sm-c zB%I$on9VHhcO!C{e_!&0mO?(~!AZ&`o)5=soX+2gBVT8o_N70X4id~1F8H$eic)XJb_y%b9hFYOS$xX1Tq1ln7A&zcK*+9N zk{$d6-xyxOWb8CO8|MIyaFfuxjSySyuM!`67U=$V8+ zlIX~ObVbCSwtc<|eQgX;#r(uPlCIUF%A~40jX9W}MmXVE=uj47sj*>EMHWk#s<7h2 zgMH*ps~ULwT48>eP8YX&V9|$YA+wXCha#m_^1ajNWAq!EQ~`#id;MN^6N@FLl}L|1 zj{oG#(v}GBuV3_dW;hvwZuYv~I=SNN<<$-RcnDox0juiS*4Hs~K7cc>;2 zTfC3#vIg{G!VOWIaD;n7sfdp>M!Q9rG&6ESxy_0U>F;O6NTtC)WRz&(jAlK`69Z#9 zWmmtBvn7hgjAx5uypUcs3t^OZi4g3%pQCu)9!<7Nd14N)Msiemx1IRi#J)g+G6E*| zi*L{H*nPQRz8~Rx#h8t5P&$~2=^x_c`KZ(hsU^!sHR2qk!}Y$$%|L`5Cuwe@>r$u; z_rl*krt3G9huc%%M0lqyi(S}BnCWjfEf_3M!Zkb>iU9#_73&@AqLfFgJm|@}$*a~E z&7&&hxK~(yO8)uXlxs0{_Pj+R3Wqdaj1eyv^D!rL=irva6? zJFP4}yFzOTy5q9;VU}KTP(4WMVvx&Q{@!Od ziOu8fVa-STWgkI5%(hA|epgsxV&pMv&0#Ksv_bI1Dm8I}dNwr7PKbs>E(bG(LC_=> zPR{bR7Ta=!pj6KzBW$@Rcz`9yDBfBG2Jw`6GPkxPbyvNW>)R#b;$%;ZXF`|fdjL{O zgGzw`d=%RjH=wRu7>S^j^m!A@Q!~@KcY66u{hic$WE=n@Ps$ z?GcmaKCGYcIc;leTrjc4ZAX+0$1NWtX~v}@vJ;3bjq+F2=4id28 z6YCK!3#s?w#%~o_OVVY;a`rkhnW2v>!!Qnq9|#LqDu=;*kAeax+_^wT0+aKM@Tc|1 zu$~K()S*Rm^??(1kvM3B+XHm`eO+4R<^o;-QrElA_m<;wUk0gBrEAt+*lh(yKHx_O zD?D9dcJqXB841k#QLJiVfk~IITYP;#-2C_#^yAzL| z&=*1#COBgGsd&nVM*X;M?*l?h8NvptJR5>!w@+d5$aW75y^q#DuBrjrXEfs~!<2e! zbb!}FJyh1QBKvcCXav;YG}Z74|0DB<*xiH4FXnd;vKP^F5ZU@Tw?lK=Kj0Q+;qvM| z@uGty4D23K3?BTT*h+xvccA_1vF~A z8maRNbs?wnAH#SBP2Uc~#7!h9pQ=PC5z&Tn{z)87dpGY_a7bZlGt+WZXS`2O8Z4vt zQZau23iJyLCr#oK=l(&apF>S=`@ zyl?b|)|x#_(xk$cTsn$E;m7rhVX5^DcBKd{uW|I@*l?)hT{iI?9}>nSWTJ&-kLPG3 z^YQNX>aTjb%A`C;-(YPnbWFnD*-;u%;e;zra~;H);8|2(%JDU`$|X2tI@``Vd}J%l zWc=p%lcutDlfBBp)$7qrT)yM0i^$iSWiInBLNZE-h3VRy(|Xp_xI+d6DO3F6HAdUX zhE^0*H1^HTU-`K06?zNHLi7pU%{rT*A%bDcbty?YdHmMneUmh_Ut!V44;IHGUz!@+&xSIJXy1gxxjRA-(eV?I-|MbN zDrDBw?9`qs5>wi>Z*aD@Fi=_8wd7;P%nzh53{~ff*o^!}m#_2rRQbS^W-qrbalgrk zZiaF~^rQs1pnan&jfH+yBCdArSf)QQ{4p_GTUKq3{|QV>h)aR^(?9>EV9%$XB5C18~wFQ6~Bk&SFOfCoi3Y4 z(=-AS2tD;5YzrigS2*tPz4+oA9Q9>LhPAx=wjPNKLCut$HgtE3$4?i7xqrbGX8w=x z-q>q+2urLzGjGCaY}V{RNz*`!TF8Cw^D--TJ-2W&?P&f&TjVd`Rm(f@SN&5`-LP;+?Oqjs`zJPyKIrvlSS2*0l_#7?{0 z#2XN;jg0o!bvzx7Sw{q4k%|jmvt;$4MsGlWVDRyM2%4Hx2UhwwZb`b=)#C?== z5_rTV#wc+jbwbAv>`F&4K{cbjAc|1b&6LR7Zx&g#GU?CrWu1m5RFY< z4Bmndj^YA~l>Ou5GSoiA^ZIYgcJbwr5Rv-e(?X`j>xgq`-qt}~@8D)yXs`0sSdujW zH-xAVTqR5Ze%(clOO*SClcQzn*wD{O%WdK;ogdz1>b(2W3)Xx9@p9=63|B%`eev)= zOwY#7RH3V_=spOa&pDva7-bpih&$UMG3uHdNo`;>QhnOV?2a&9YSrN!v}j2QuoS zn=ztg5-y$3SEd*T&!4eV-ZYza<^d=@=+yY}LN_fa=ylTt3*K>+&SHd7KA3;lN$Z*5 z%e_B;^&JuOn?l=4fb*k8#CRS3`3lq~3@G$LaQ!uHc6R^#i8cPNG~Po+HBqynKtwf_ zy;uIWh(45F?Bi>l{B{MmpXO0>!tc;&%8wiTjjuGdNwvHuH;2rUrS0|#S1wN}b|p>N z2qY>sC^^0hs!wi{1FbF)e!I=g?LUPNr30Wum^D?$*5Vt=zb=0wr6?Hk_Hz~Fq8Nv5 zHP3r-9o^GnRu)9c|14R7(eJ)@GKzeKu$ridlp{Y+yjW;|dI_b%2!VFccHNLbPiy>mxg`A7mIR zQVYqOE2XV_F^H14CP(}oyv!4wV9rO>V9CelXu6H0I5$Qdu-)tsA8O4FgEp4^_ zf(%h1;a-LEeAXt>4+7WNAH8!4(;rH&;*|vp8AVe81B9?DC^+cVWl@KlF*O=azcK76 z*+AmE)1p`k!6@V-$=3{gPvIuZw6HW~c%!Let>reQ^Sy=n_zb2CAj|a9!H}~o;he?O zGkAw>%TY!q4;@sR2wJ=YcxpkXyf-p5m8SZ|B2U2h3y$hUTei@mwP?)<*sk3%;R-m<9 zH)D7*;ox+6Oemq3Tp0=*oGVbDJz#PKDqs@y4ZIX`N8Qy3C^g}B8CTTo!NoX*4PYh4 z^{W7LIAfmzqsDw7I%M_#EGj6@j#9Zr38;wo02|0JS;okD%Q})3fh~N)y{5(dU6mAq z)}!PiKgKIZlxh%a7WtZI61Cls9)qoj<=y8>dde zuLXC(oieTh4rh)8;#*+@WzA#7qr1Q(!V(oK?%>NCW^ z?w`cf2sv5@SXZ*v3fojbZ@5d-A*Td~RZJ0|l*#bu&}vl@iS06Ed}$`I5yX@llHIlJ zKln1;mLb+a5U1-#32mRuUhibBu2zw|?y5_XwRq*gGZKEWfF??oU{$}#uqEq+RwhXc#!O_o$%bya++d@HKNsOU zxSMQbA#D)N=%w%s>`=RlafB3|6;a;?BIW0j4t#+N+j`N?@r|#2%XZVBpu$eUq(U3I zu1048E)z z++PAaIh1nQRC&9lo=cVp*|I+HPz?j9F=I3#!q@X3xP*i0Icv+NaXiEiTppk*hK@!f7EF6QGl@F3=qRY^*bDd|>1?A>8 zmx$k3$%-@5l~=zY=*HJrb7svo)mwU5u~0G)9`Ac9OeDD)HjsvvB)*-bzr{Yfa*h4L zj}m0MH;yUE9H;`wu-ih}!!wS4k+m$?m>~w;IEX;xZ%M3xr4X z{```tlyKdYR9J#9#_g8(kcoMPBLoa((qp%1Ez|ODTn|gOMc<0MBrwC~WDQqlS+k4R z;@GU)#VV^KiidWoTpqF?fef5Y@zOm0(e{<#M^>n0w)%B|M}6wym4vCT8;IR6RDJbZ z&j`7~GM1ktYyFM@2_^9<`w#|7@W#l5WTN#m#EMgAP%U%TRt-uqNrBeFw3@!nwc_@C z{)3DiZ?d&L>}7?J3#*{(xm6^mlFasDqI+Xn=5F##=MM_-j8#gdTJkxhb7C|(Hw8NS ze9GWS-kA3t~ZM8v6teGlfY#rfC6q+ zfx!=B1#zsCMg+AXpqLN3$&9k_N&>|YMXI-Bp!c}a3kKmbBcqC%);F*Q zHHmSA+=I6bzr?5E(S<3(bW7+nIzJhYDU%;GY%EtA#rl5uLSPsz4(^kLC}eSmb*iZn z!?gO+QPs|T)Tgw-Q8QnOCQ8AdKrozIqxytYXy#w;o~FRLb@mI@?T6i z29)^3_J_+D`Fd=fDKhg7#>+d^Q*|M&!$v@NcMH7s}{YZ=0YfE=i=4qkcP1;;Ilk#ATa*Ym~4v{c&yCJHaD| z&$1|?Y~e_nBNdyc|64v?R(~)xhNhzS5q-(+P@Ajrra^;!LO^RdWvE0~%*^rGIK=K# z<&2ssZGn-86O&N>L}vkdbDDJO!1P-QoM=z$nl=6@E2<+=oYfkQ{CSk9GWSq(m9q8= zT9ChdO>q@E2Oln}c}If4m;c4rTL;AvZ0*BI2#}y5xVr>*Umzj4Yj6ne1b26Lcelk| z7J|FO;%#>d(P8+q^72-yXSO2yWg&)`Ch=&<4D^#+isrb%RL{I{e*g?MLny*BihR}>wBMGHDsQDis)JhE^oEY zHFAu+X)?OpqDrkpo>DT6)cvmU|Bk~46qI)?v!acMzM4KGRCq*o9&Nh(`KY=Rm%v8Dh4Oq+?d_$ zWpW(V4`Y5)4OiNkFwixLiY6f?|B;S~?B(qoG2U&B{%5Kve(z`AkbK$(8S@Fty;{Ri z_1zBvM*5B1_hw33Od2qj(Pifv$7>@S-4zxY;N4lZ+VVZiziPvZxbLR_3g-{QQoyXX7~DK851o=T}Hzy7X_&o;%q*oBtW z;cCeU80+WNoa6?qdfH!>QXAGwUa*kS>;}`N>f77?$Y=hs@+=+L~S(P+UTD{CS9o#=216wIVtl||_@8qnS zb^Sr%4)9n=4w2K`b}OK=9SPFrH5`ptns3%1-{~Zz%4`xMT@>|7s%aa!6CcoBo3CV8E2_JY}nvh9%SBm9nO>9yqba==1Mc@A>42$G_p^8_Cc+-FZ z9T~z$sot)6Bm$ZFyZI$XpMP=a;i-}NmfvmbnXwQX?HO`Na#;Dva*G-}sRCJC5^+j1 z{;(top<(%Rvm_dREKVF86&aDfnp!7L$nX?C}{@w4Q?`S{E1K!265pX2Fqq-L4 zIu2!9pupfkj`f|C;TmLx z%ixPm8hNmv%PKTJIfrR)?}~s@h!z9~K=yf3`-vz@fhnUH{#EjMVH?YHk18*DdLjC8 zzXh`8<-Z+t^ZGQJ_eik`sdB?3{42TJ$dM3t)x<81wRL8&vZDh-s43x_suPVesS~WO zpPVf;@U!cKa&!#Y6i92{2}X)$5Pe}UtsgW!zxg1|9!ft@$j7NWl!f7iB?&9Y!9Y$g2qV4vPJ^XCT*-c-&g!tl9mvFxoop=+ZoY4}!DsDJEir^NZs z`<3k+HiD@iUSf6EQQ-irEYg0`l?(z}wBFF~NgpM_nXz=HS<5E!!Pq$q4I4di*%QiXrr|J4dBqhJrm>-E5R3B8AsOrO-^kuC7+R8W%v-{f@$Lmqo=elmEaaX;6u(hET6_+~gl5?j< zPurm$jzO_Y+oKQij$o7ZTlZ013$#r+TV`=mp}yPzx(-YJ$ZuPYhDuelZ~kV^g0N|} za2!bxB|Ri>-)fhXC9dAZN>i;u8aQr;^P^}7{_uK7e<{nI6i(tP)mNaw_#SlnV7o5? zwm*_unI%V7G_Ip4;%_+|vL8_*`~lY!?QFbIpXF#wE-jh3pB6dMl`8iXY~~T!Q{>|C zgLW%8%`Q?vthkB9c94a}y(%WeRCMIH0OS|pjDD1k2~^hw?F`8W$VM@I`4!H`s5C6`Jb#qn;*5NRGrr8NRTb!jcl$!UR;F_nd^ zk@sc@Gt}tTH~-YzNl(5QS~?gizAEG+u#aSaq_0`tru*{ux~0(zD0v#Jn0!Mu{yxk- ziAtjota@XAx#aj|B(nGgt1wX}JyY;A<&2vKVQ4QoISoNy_rb9|=68c6zP z3HDhZI z44!DvI0HuWS?80w!%QM)9e|piCN+A;zg5gB?w=v2lzndQT+Rlfi$(2sB-T&ixu`q- zS^oFiN;`>v)4gwdfbRGc0O77@70K74DvXUD%^1Z8a_=n*kY=a_E8T(;2iB&><-i38vwn z?%lj+GrDkS?TVJ8Zd9l;$CH>xt)aD~t!k&Ys<}tW6uX6cxG8xnsUOv9xt7v+m~zib z5ynXrev=JI3639;D~bs2JXRKH!C_^X?e2$h_eD<6Se+yb4IwOz8Ie&VIsoqSJRa?K z>>}Y`13r^?$g?f}{Wp(vAopFpZ8))JqLtkK+4SPIxPk~y?B;i1dHh8BySxX}Tn-j7 z1HsO^u8`-4?li(x>!PB!<%lt^n_dtgD7bX4JYYGx-n%Q)-)vLUu>Z$zm$wjr`yhl zEDtmabMtd_MRWaYbTjH>X@xtNly_G+JoOOD#rUJDlTCGc42ut8(g92aLKHYgXkjW< z21y@wPAn9`aiHbX!D>40=fDMJhTb{h>bHfy}HAaeEX)hoYCgQvOhT^&T2bmAKDlMP9A%QB7} zpno^+M?DAz@~;ZOg&+J4;!QP+aEUf{bgDWMJxw-aU`YLFuQ5zz=Y%OC$y?}g zXnhI}bDVxMstRt%@TZ=-F`_mY#J!i%;io??Z~2)~rU&QViw;M1(YmQcvzGqZAOnT_VwX+{ZnZCerr1!8JS=`&-aS zU?w}p%da+TrlO59@^a>~RD}tdUM9V_A9m)J8niIHOqZO)-eB@OOCyIm-C(@RVcEvn zpW3_1r+q*bK9Ut|0BTXX1FUkm#b&<;kk^kcuX+D|%=%~RZa}MGm%*)V1*<)?U{m+b z>kJxin7^mx@WHTcgQ8|%<1`fS>r^x)`J8j_Z-KrVcDf>{dWazi)74F{9gm zAk_6s`C@MVVHa3>l$1}MIf=N><(L#5l4n!Qm4@D;a~l2YVut&$p@$&$&oWN?3csNF zj`Jb`kjXCn<&&^liI^&O35JMtZVK{2*9t}CQ6%5)Pgy=6?W`z<2LeeAYd==;2@)x) z>Q5Zh+wUWCJu*l``slv$l!?qjFx+=`gwezi@ui1!i?*|7&E>u>Ow<eZFiq*>hkbi_EJpV$Wyae??3+seGcW%=C5EnM|n= z{+t?W@J_!I;%C_ETe(lr7bF^_E;(ikx*FUPA zyz>1?<6hbJXo$#*;h1NQBgS8ak|i%6KsnH<1nL--2#lyezZCwuUfJV$$QMXqR)Kxy zcAAdiEv#$ik&)o-xVrw~eSIQIHk8GPFfu`p{u)?oZ=K#!K5Zl3xwxAOtU{vS&Eb$5 zV!WM=lqSdN@NT2NDRqaho-^=cgYF}y6fph@3T6{f)(ZIqm6lMb^SHxIls+>RpB5ak zL6(JmXUM5u_M8bz^m872kp9=)4(ssiW9@>(24r;D)AX~QO(R`M2YMa(IxDsoy25J~ zhJv<^wPQFT*h|m(Tcp-py&PQdBJ#ItzjNk!b$@(?3+%B?%Gu4zP3_;W>7q!5wo5to zk}vQe2;m^xnIoKvODzB(Ujfp>^vf@pqYHg1*vR^6H#pRA*fO+Hg`IrJsZ!?Dfg^in zzS7^XZ){Q&MWWwhrAN*3bsO`LzR(e{EgS;+r8^Ipe{O->Y`Lj|DD$XHwZ`+8rKvO4 znF5-`OQ$++7zcW00u#JV&7YuwY8&pyBQmPScx`JsRgYZXoDto2#28!&uKV(z2QQN* z?a(NRjg013f9Tn)t{K|R{MBSnqjlt96;_>`nd)JYUZ=ZNaNnUzCNfc3g@&|ttb#d* zej+_mKlVxr9O#o0^Rv-=#^0%Xy<645`^7 zL*JFC*@*ip;RT(K)(3+>8>a}!Hrp~Cf@PBl;8 zmt_t9=9VYWIw{oVlZ#>$A#{AsWZnIi>0J=peL4e(o9)2>RqyJ3dLv>wZbeh?e&u5c{e0(v?x|J3bJf2 zhYaDMP?VHUyI@^L<^7Z_1a`O8;QhDC`8SB{pX`X?x7|@6qoKdm%PW?-7uOXg@7c1J zkXq(MduYt!6eqqkOA@wU%H>}wZ(gWm>{lsWhy4_F_-c4 zOZ%Vp^y9AV6P{5r^S-6a1>9!zIh$YW9UCV;_$ScAnFg5&gwx_19msMR$Mz6K$J6P} zxT3~9^kHq*VbD|YNMQ$xuq4_HmQAdDzrAbZe4#?so9D#YtGgd+DZJUCV-mwVwl=TL zgwNqee2y!33|9F0dX3>5QHMcDVikib?Oj6L)oRTk`!@}awy5}Tv<;blSA_!7-j zY}%(V3NL4^w>C*Zc#a*8yJGhYQ<M zq#1gXYEJ+sEJs9OjX)Do4QUE!`^qPM=*c!Um<7qrC?7$Er}C+e%qJUm;&Pm=Z6jf4 zt1(A4XTu7Z!pG92!Ly*rs%Vec{WpD|Ta{8Lx6zXBlYr!X*n`m$K;L%0g@EB2ygYR& zB;e!IpX9JCU{v#G!CQs3#n5ns7k-ByTQ<^YiS4U@?m5R^vA<#btq$RZp_RLjV4^d3 z6Ty*TQasoyhHrlBmuxnT#85u>P{@*pYOSWRfMI@Ky%3QA&DSf03E>RHWJyN&IwnobR13?TZs&O88iEKbP-GV{L{MM57ukt9s_>w_l zSA&@56>948Jz=|$OOlkGkIo6<-koNGLYg5dXdz(ftTbskGjpDP zWMgQb{Ts^eWJ|)>XjjHkXisY_REo)n7RY}>t?tOU!V6&*i`u_?O4%?weuzOkIYmfraiJx`v&v zHAAqvntCA>GeOBOZZ?~Z1Rsk>oF!sNO1tH;&2TKqm`wL}qKyX?*{0GEdm9A}f3qBT z*YdgQjWOVKk+t&z_4KM)ulKxSpi&*(odJ4Am_5bYg1u%{V}5=-{gb4=UcU7GNq^_G zr=}+DFPvtEe#DyA{9x0j4AfXb=atrHB|!kq={w@uqC{Ow3QCXr;4K*cW-T0 zBH|8Mht0Q93-2wM(*BmfzK^}O89`ndYO`qu!|PXG>QJ;iskuE-azYiY-RxCOTYB=F z>`l9RM)PcP2i0&0wYT>iMockejf@FuFD_ zH1K|mJnZlEFPi}OhbsSk=}<0XHK(Pgf#=NRfKx3-IX>&_LwdK0dw)IunSmw2Tv$4-r(soeNE^JtXe<9%)LsjZyjZ8b$h zH~5hisutr}$C+40YJJ7-Dj+$D-x?4)!8KH}2~ zRQ2`tGOVcN4RAk3voiQ{oCPF4Hxe(~^`%W}x4J;}0Zub`)k><1-!z?IUwB5G@8L5J8qroDVPF%7SH<8DTL zUE(Q69a=}-13>*qryBy?dl4M&)F1;#{MCY(CclVW1lFjscZMmKtjBEElhZ)+u!Wx? zs3Z)ho6YZjDxA%+fe&?@;5U7IDUl)stX^h0g> zExqRmqVl7@@c~tv7!!5pv%esqb7dHPprrx~Ggt^Ast$E6uacC=x|nM|OFj$7W+jk2 zBtV77P+ZE&aTas9jtNgrGt2}QOJ1l7y10pJN#r0Qe3458Ell~2nD+K{v45%U1v*`s zG`qOy+B8S4N7?@DrM%2L0vg62w+M*B52l^CwgS6Hca-?*)f<_(`r?=3S<$)MY1ahB zBz)7}`zcZTtkJ64tql*z(Pd8DQ9rO>bDIV(N9rI*S)XBr;g-rPtek6lTM}`PFJ?Sj z4m<*V!`vw!Gnz`Pm|^o9Sy#*)R4o*NJJIu%yX7MUCKFUUc> z6NtQsrl-{{+T2vnqIi~)T+FCq2r;7++EWT4QnPbj9Li{y4C1*|>toJZP}7U(Rtiv? zI^zyYNM(juqCF?>^v{zc(Y`YpNOz)8Z=FKybDI3?GG)DTQh--ak(@f18TuLenD(jf z74Hg(q5mclCGjUa^on(%Wc>2&-F~pA*K?&1$`{mL30=?9R=^0cr@E82K;VHnoIpT5$0(Nv9j{gy>{F1Wp2<|Qx z-HCI0c$X@4WNm@q&FyQ_?v!J(CKzyzYqO*9IY8;=jmd$pb20jsLG&L>=g@##B{rd2 z#O;+=A(MXyYW{YMAy*2O3VBQWx!=nh@e@s}n-u!RRwv0^;#$UU3Vre5hQF_KTiN4JJas6wlq z)n}>WqkANbLAWO%&5J${eeh%5MlSR{5Z&0D6pUCWlm;aSUW|Fr zpNMKI7kScj6aW_+HvSS&QjI)#fxn;`qdIGW|7DCkd;sIt zcZER*fGoeC6~X96-rr8fG=#ID`@kB5=TG1_S_|rvN)6!%XrZQX2-HYZI0i~u>mztV zTkAt{LR;s$j1pKPk}R=sy}_`5!k^nm!PY{~+a~HpaH`9S~%m({9nM+7ciM+Q#`)$ft}CHgle27(_rEObF~Vg0qre;LWfyr8k`x zbSfZ_W3ckVCEODm%yxK9N`A198NY3PaG3C(SwpF&lf6YGoStkaBrSxr3Nl>u=b3i; z@okmWu|3x7RHQxE=b&GB>n@x(E*Al7WYf~RM>*OJKs%4U-ENJ5J5HNTPl|*la=T6D zlhreO&0=({4&vOZw(`a$n?D`{GwolmIQq6JP}@9LD&` z2HE=TViE&TB5~{8q8BRmkm3$a#D{ty16j?@*eeb z!!DMOb6v%PetLGbH8<`Cb_H?SqA)!~u@kF|R}G0|zfN7i?Z|E!gM0gc2WHE_zP4pt zBbs#;9zO0SM@VxgTFAl3lH$mot;?3r$S^GeEP!TyMHb$pjw14lJ>KiXM3zrEBavvu zzFk_njeS`rse19#))&U$(gAHPZ=(sop-0T42+|m9LZr)r-6xO+qtR#P45q}eziE-q z@~nL$vZxt!Xif&wkOc6M1ag13`q*qRS%hWgp?r<2 z=HV;g+wrH$>re35B-a?) z*&eN?mAdJuHkeU(Xki}eo=d&WwmOPGht+TAKzudu>I$b7z{p^3nIlUb!Y=))ntjO)R(-0lNw--*iw@cOtLeM1h|Z8wS24@-bDxOtx*-wukRPh z>T2Txy$|UO8nnIp)mFM_V$m6qc5v}Tom=uP6g|$YduX$NXZ43tH|0a2HF9V~U}ueb z*T!FCFZnMseJ)MPAJpYUWNrp$Nva*Tn?P`>u=SF<)R9W;_VFET0b z_xU|!TSctvOTbr{b;nSs>rd_{UqgQYYTwe^FmcTit3(?Ywz2cI6E;uHzFD7s) zzfo2X?x{qN2H#EJ+pT2}QkSqpD^ucYy>!xIb-69vjD1M})Hg^ye9bn6_LUyNoq(%! zTk2(Evd*u5{@N(8i}1ht03~rDzs>t`m87-p+N$_Wmy>%Dz^z79Q@K`QBa_RPq`k~l zeM!0fl$8OnR9T#*mWe$%7J7i3n=$D=0MGYzWm2n8_1dq}iglOm+gehv&D!@g&V9rU zUq~M951(>f^;Wt#F48Z?Q5~HRwVejXazJB#xoa$4@A++?5m>Cc{TXKoKRyeq*!iu@ z4>3!pbeN7tS5G(qT^7f5e^1Vx%clN}i%w3j&N6*IxvhXO|7t?zh9sZK(K1SVvWvOu zayOiR!`>;W4qr>Co-1`QbD=Ic61?cWjo%O>UG>53g5NMH0Lhp%1-RaqPr4obl-F`y zllY$a=wtW@{^UHD-Q3{$dsBF&tNmBM=cViz&jv$o_zTsAU&efHgHXJsVb%-!F|#lj ze1;n=Sa<%QI&TsmeagH#n$MgfI`7dQd4z1?BEN*DNZ0PE|bRLeCI>fIn-egv$J(ONCc%HQlBVK2rAL-j>%(O9mU~ z(UMe8E_E&0YAb!`?Uf)+eg&Vq!46zF>0&uMrGLyFJpu-lkL;eQrR!WB&pWYGLQa?a z4d{AaFQ=~VrHj_?+dgyJ%-#<-VyU$B+WKBFr$-RCZF;I?tk7BhwS23}AfDgxO#`N` z_U7%`0shdW<(DKtcP3<=`%zAy1B82+TLL?8fpsancK?4DsfTYDju*zjTxyg;tci_Q zm7Ebarmy0s=TaxqLbf00JlwpTf^n10Cx#IVvJc?m*JrO)-B&iR#(88zkrwb+=-E!W zo(5&xA#66Wt9mxaQPM_fEiq0=1FF#Uc}Rj^$d-f;c(M3}Wajt`5;=Nu^b6qA?(t-q$sV8m z_Ei<=(qgV&B%cI5d+Bf3zOZbdU8r;uZ!&bRe|YZJn)2Tu#qnn3@Z5|PCf}Xkf7G;N zt}+vTnP8XI?a=n_YYwKhao5_hEXLLGNJ7iLELiqze!1EHGb!LSX~KW_oBt5_2My%| zPygYUzd6OWp7-nM3i_1-%^RNLc~1p#OIG3E4o-#wzN_T`79c+kflHnkK8!lg*nPFn z#=>%stnZUfAL}o)(_6DQ+>ty+Qmr=wu_ULnv+2j?HoWi1n<%NsP+XEnq1Ccdyq%g_ zHzn1VWnG$Rap$5AD^1E{<&ikloc5X(sVZs=Lr1R?XF@=z>jsynXBjM4uhFF84$`KO zyKyx`S=zGZF@BSBMl0KWXMjH{f;(5-sk_eR8w?E$-E_1`^e!>`%Ao$qnwhkJ9DhTpSAyz3NtlUU@;#oY2x1asBL#2N*i% z#na#AWfFly%kwC^w>?beJ_8R++G@z6AX!zEn*rh!x@4pf%I!w%doQ8v(q_%v$7c5} zkq4rar(u`ev1f0o%*~|^a1;K8;iM^x8_werEN8Q8hzAmn$NO6*R+V-Iu81U@zorcp zTbrnotssnasK>Nv|I791@>JwB}aV3NJc?> z?%V=G>#QIk@d{I&y3aChj~x&9t-Lzc&1^R<$oTAYGA4sVE%Z}3pih6K)~pB+`k~3)?CLB-^Oe`Gae9q~uU1OKnPVK_^*n@lBX?7Y*fZ>{wrSV4%jN+5d% zEaR3s(i|(evJonTjyk{%r9BQ2g-S}m14sni0nJJ9FAEt+Cue_Mo@K2T_o7_RpiNdR zR^mX=+DW`8!j#+fnbz?aadL*LQ@TpAW_S-X*L~YFb~!u|$o?WXbs+>& zP5GO9j+R{PR&f6Et;6%GX86gf)}&@@o%j8>&9g+8L9uYP2%h8yO;k^-&CRAM@$=F4 zzvH#?y)84HRD;n{hi^>xhUnRkpMC8R(({~RkN5#TnCg@7S6(k~LE;sLHq$QVtELEZ zdf_Y%+~Ou*vT-twZl{DB#sX$U_y&4Or;&fVsq#oGh$#=>PPtAVr9Yb{c91epy65m7 z+DORTP53ykG^VU24v!;B1%$O;=ZZfX|l<}m_l=-)WNV}#i+Hh zbf}X8;oGKcXmB~Cw$t`by3wCu*gv20Evko>qBCuHtiy0tb%)=lZh|guz$g5rEm;6N z0?-A4fae4EdW$pn6d@QfXpZLMAI92?&)IYN;iB~`_rktncWFkX6FWri&>|+Zcmr|z zLLogR1G!HY;jIn&A;2`P+Bj`%ZbdCR zK(Q%ZX@CHJstd`s?dpxN{QKv3>Dtq@R)F`_egz5uY^{Z&6Wsf?K#Bk^FasNPlbl2- zXA`(j#}ZJ`;kjHdR>}g<+PlQnKhTQ}fDX|bt5`0K3h>rLv>i=Sh`uWT#mw%JbJ zb4b68rB8iPvfgcCZJ5|Dn!=-S`qW_<;knr5Xi@2_2xj_-Y@F4co}M$WzubvBM1CzM zdL$iMeKJ|<7Qf?y&=x)W=Dj91k!}#2OPJ!6I1rpFKl!$xpUnuJTs{a(nLUf~S~+UY z`U+j%i6X&g2h}a@YAQ^>t~-N6U9y6&_+R3v*D89Ay3}md?qfauA;L>V8!Kj{L{DiVW1bZ8XMl7DWvg@zuXTkcvS8{Q@lTwU` zzQwkz@E27U{EXd27bEq4BsW+16rk!W(F?gf8yA2J^yW(Xo^IB-tb4g>4<(6~uX|5LChwbiQZo_H``LM6( zq+@6gw@(M(;$klPvJM7l=CMCG)?r=JRpcqhjd7Jv&z|%QdATUO-eSmhdY)R5yV`B? zoUoqsE_sQ~^Xe7JZ(v!*hg4osHNL+KIm2H;3$~htR*!U>-GcK_*Xk#3 zTrU;s6qEOW{m^9|FJTOAz&-RZ=v8SGhf9+FU59-o4{S$c>y41mG1fspNC<=t9jL<-TZ4VwTrNqr&)pL z;~eHXPlTzji=rc_rY8Be7wKgrW^#e$974ohI9BYywVhLJ@n;#1`hE)5zwLfU0= zf-YdY{4h+J%x8Pp(!4QtVZ##O<-7Ul;?@0ha+TRxv(IH=<#Q#p9)29-+UI$>rZD=5 z7OS?{Jcg<32#as=_&!u)iK;ao<@UOdEX?P<0a}#Lbu~Hx9MJh)Yp6Zeeb_Q;+Sd47 z>I!a9l52)$sRJTY3X5xQtTyG%-)506VYezQbq_uvT{Uws{F2PwNyOtxE!XPCLzLT_ z7T7r7@57wWD~@}Gho^af_1N>}U!IoHkXg9%c9WC7SG^V+JDTnmC&K%#`eKV{aMcaa z)iuMlcIm3*Z67S(KM1XzyVT)^Hk#nu@m{2Ju3nGb$4NQKN2KUx|8y*6P8$e?ig(yn zziQ)1E^66N?=bN_>yzsu!}6+=H(fkRoLy!!PCz@3KWawo{$;|fx(8Ao(tUgipz=!H z>fbwNS@i7{54mB*euN>7m3Vw%A5F}Eg}GT+$S+?=O#Qx3WX7ycn@Q7Q`A<@)4HmsaQj`SaKRe|JFtWQRGJG6 zH$TF%2U}7hs{|V;Bw7&TOG5TfdC^>(%=;wMx^ER&Yl!!>`h2lhpn8E}H@=fM_M>+h z2$ar|mtJM54mwnY=(Q1+%LctUMTlT^dC`pyT(UQyu(9hC)1n-}RZo&|9 zj|}f=ksElgz=M32T|!PYVyoy*6(3r2{D(oX=SgdcQtE@unKw`4vGV5J1}s`#_qg@E zjb#yVJln5DbDKVJ8i-@K@}loZ@tEhG)>@KplD1IA&rx?94&yL$MBqfl^fXp9E148B z$2qV$yLO1~9s6zgjLi=(PHH#lM!G3NO;h~~f_VT23oN&qiH6p8w7{ZGNS)w2Ts`&A zZT_9F^v&p`d-E5xt#HgTO<@0|(8IX(z1?9Ks{GZ<*j)@7pDBao7~q=U&a&uTz#}%n z>RovbzZztKPA@0gko!^_QyHhT9y5p!6G$^0%TMhuLd0%2YI0XIeH&z-C+)oRB^Ww; zw&=3&2RC!@xsGhievGx9j6=GYU1*$&Iwqqw%HKql?f((2y3jP%zKMk9-$ZsDC$bNT z;!{D*u8Zk2m|bVG=E1Jn_<(<_lR@0>i|K3J+vMe=5cld_sb zYoQyIW{Q|ZfWXHq{CRwdsjV(A1n03Cj#if3?@UfNDCc8lie|+BgDw6K-ufRb=l(yq zhU9xbOvp@Pi z=pJO^|FsXmDtvnu3M7gCpQei;2>x2?R9>p_e>F~LvU?!F_BkMS`2W>>GyFe&9)JGV zy($0y+_(5Y2MFGpImoF{68^V&LYvd$f7Hc!m94&+dm_0Zi21KS3C|GxA5TXp3Da+- zppLGJ*QcC{%7C$zk%x>`Tw^BKnDI7>3BTee+=nTOYGgg zb=(YGX8n(%uF$9M|HKP3pqcn@JO(-cEia_eum1ZS_tg02kWdy|&mL92rDcNw%84JtnENc+Bm(AEu-s%7X;e zpUq+}dG<2u^s}Y0-9WWgg4`v$*5!WM= zUoGlyOU4Sjmf(;9%)XJjeWop?ny5I>?)*60jpTUAN{!5OHP$P0XHw+~tH9{$a7`5g z|0Day{F0mnrSkPPwX8aLR=F|YrC=4goBNC0<3Rc+u~yBh%&EtTdM_FNZ2?cs-oe#W@g&xiq=TS7CYiQ}WhHt6 z;+D$O=*#A0XMEM)CN!+mTF%AbykY5Teq~SU79Q+Ewv<$VX_CTJhNNch!7`k1N28+N z%Tc2jp-ynxs$j$U_lZSAg5@K6Al{1cTL3H{j*<7Z{%G2VJUL*MRdP*FvQbH zg%3!tKKaI*qROyab-lwhNQ&<<=QbtyHzS>@_0Vn3ZMtD7^EOhRPftjp{^p~R$^3Yb zXk*AZ`?g!vHhQ)}i%G~wE;Zx#veWp$=+FFtO>8~q{><##k=tjqUL&5q*SB6X2j0uM znXvs;9+uJetw$`LR;F$<&h<|DlA$|}e}@6BTlHLv=hUnGY<&}N7hcm- zV5!`#oS2aiQ>QNQ2?PWYCq)jgtj<`Xu{0HezF7W|Fru1Yh#7>vH99ltaTLhT<8p## zGX{PTn$NBxEzm!+&Y1&y2KqTbqEEN`y2-!F`%yb0R?{wq%U^ zQ^8yBjp1;KD{9uAeo>Pw$)$gg4r*NOwupW_D;ZaC&L#0-sp@&JaxuGT$rR%{`^)g*7RHSCFdw|{h=vt0z1>I)05Yw`orY6>`v~wB>EM7QjuLcve z+ov9XKk@E3)tx5pI0qAW7t7cU1813`XjLx(D0>AeXtC=9o?6be9bw9qXf7>}0qi8d!%&clTD3`Z#r2*HugZObC$ z+Xh5m%JMV;^NiuDj1>`1z+CR_fUn$2PfnkL&b+ckHq=ysxIR@pS1y4#e<}-%2{cpu zM41fY;oXEs9sxx=N`W}}Rq5`1wD~Ucpb30Q2W$#UmpGLWSF$Fx^XXF&QanDmZ&j26 zWs_k(EG=dg<1JA59MjV+sYfb)bk3$Q?7A9L(|qCF&D*(8i5*uqzD;YocP=6Y*CQ!a ze=;}swO25(2{tas)`K;X1P=|Ck03mUJX+3<%xum?K8`Q^kgI~AD^M-6K-c!>WUH zJ}y;Bx~~lhsO)YFeZ@?4xkuG)VRhKy>0<7{>yCF!kNad8FF@4Cb1s}>cd9dV8J&IX z)|KyxTvNwvdyCx^za1e#P(dd;fwq@BI>sqbri2Q6XZgDi@OdPLQs6Ig)yq(7>qvLc zIs<_cmT~5F+$Jr{+NsFb&Ef2_%e~_m0io9=KpA1(U?#Eby~#7Tz~4a1Qi>UiJ<~lE zb?b(}48qTO%kR7J`LLy=XOT0Bw-_#|IR)Y(f~prc-jfiP_jbFV2FI;a@U>2$(ZN&l zP)5#`ubt*)aC`mQD~`(Y4@!#nWVK5p1}^*WVg4>RMTDX!{Az$ZqMjYfAl?!=N}E8V zSM93_Ly3<+{}JuzhIkVn-zDbka)+`P7S*}ktvGIjkQ z!)zsw&c4%AyhbMR4Jz8=m-SF%e^ZIs3~d2O5K)(vvcoQ#xAK%jWV9wPZ;4w>!8IRX zh#H6J*FqXPUZREgR7Ah6-CPkm9`sY9{ml(g&GM-FVTnUdVHn$zsd*W)qt?`Hariy# zu?y>Mr{db2aE+ZU>(rU%O4VhpQJOUW>rGBELCIMUKqfYsg4O7VU9OPZsN6KtQ*vr{ zmy^qhpFuyr)ep5w8)U+azbeO4XP4$;6|7+ErT&I!N&80i2lA-7O*V0=~30PYq8JS zqYQb}*GAJH*WDHRtNm0Vbc~pD5_oaJS-qXbGZD2vmcbH)!MOAq*ycF^7*K1Mc{0A8 zO`@tC?2V3a&y5)+h&800$e8#%u#uy-p|oLjVeYG2@vW2<`O~4ssTJL%sUx>g$x;zU z>&{k`kDgZ*YS!ou1OL?Si8x`(Ua^<)K9=wfr75#u$DX4MHqSgK)&Z$0n3z_`suvfX4q;k7beZjU5`Z!2^AO;T z)a~H8)y&kshs&5kB$ z)=<$=n*Y~bV+GZD{d3nl=zB90ey@P}k*K^*x5d~XgC{Dwe4utNAK}!W|G+2wp7xbK zgUxH*ZZ!Wo22<`GZ3;4O%Sj<<=LBsnq%f_F$9m8!+P_Y~VE%jAklZ0{)s)<20xz=K1uCz#7o`8C$|~aiDKFWx zDxWwaAnGj*zcoj`Cye@mN9go~2J ztQ*U*qn`FQ_T3Cl6HrHH)tHjmDayB@pIK45d~ydGQ{>XxI|U^-51=#0%@MJ) z`}D8>y6@djTMk+AkvDJ}JZR{b>&m4a2Irj7uH{ZeJMxV{k_ZiImDn^qr{^$o4*&e6DT<9f0)= zLx$E$f^Seh!I%bZ9G>e@L zPfhx*Xa1#47qa*KR1k6koqc$y;2--UC10(%41^!5XM(c2gPL zL~+WYLq8PKDoUs}7Pj;xS1S}$dG)~0536P4ohzL@ka*vqd5YsD_}j!DTAA5MS0vR}U6@HqSx ziki^&CKzRX5{<-jeMiF@Zr%EETr0@+vip_-b>W;cHVxALMmfHUYMe*An#2F z0La_-A~6CuWj63|ZXQw@dncX)f6vZoEDOB1y4LJpCiI(x1k1_eW|dD7~lC*I$^^X8rf_>XyW z+ayANEnhtM3J38!9JUQOROoU?wtA(spdL>3oRhhvb#j58D<289&_F}FpW=2qPne{F zS>Eezk#$tx%}JikYjcmA!=vi;JtBg_(;hRQ_Mj<>-IG{{*2hFj>;j z1i@c{s<@cy7Y%6%7?@T%nYmUvS?hn*Fvb6kVUJ*77H9v(+JxuwCDYN-nwRTqi^%$9_RsLywlxjaQ|)$2|XMh zy|uXinqz@diFNAJH^C^!_oYsKYFv~!W(N_?c75l9>1U*)hVXKn(zf4e z4&EMzV)yl(z1MyFqdk9F_|g*#h}z}h3ZWMM`nZscn8@Av=zg|IL%=@f9=T0DLVfh z$gnU~o^sj$HIQN7iu_xS(GCXYf%0E$2S9v?a+7R3wa}+nqF4%c1Mr7e50i+ZPzyCO zY^6v|B36LvU1k&a>=MaDg>HAbgoJ%8NFh#p$&^cetV`b-@e%k@Fy7*up2mjTtcvP!@2H3dKN{mDCMW*^uc)>(R@Lr-tn3 zP>1~%+Ex?MW5{Z!r@kiz3@l%6*ZXxZ}Pa9NKLHU;{X);WTg%_inF zpe}PB{U)M-8SS`5YGI>G8O$5ncg02)bwk_5-Hp{vnya*+iqMYKj`3Mkf*`iAvE*?%v2Y!E)>S5aw7V@#x!#0j%LDxV`|Agd zz*BpEbtlEw>Y7=8&{4c%%|YPlp07X}96$uPt1m`*C5;Kt=``4>jx%!DW~0T_eh1X) zxw~y=-0xXO;<;ry=Q@_5K+L$qOgYctb9GemrG5-9<8BGl`%><*mi4*FiLV>5>DwRT zI(hVb2M+PZ)I;Uzb5``{yeHtsfBFCn%&t<#JZdoaqF?hs0kQ^?_g9`%JaHT>IjoVb zA`c3Z>n`EncAvpyn0P!%VY*=K*a@`cET|q<8D5jAd@oTrN$^v`HR>RAc(X8S6leq{ zYeiq_|Fu#*%725-OOj|<1*5}P)6sx@x3Zl)KmQ&{XjVsCT`R=@&o71BJRm(EYa>8t zcuVm-@OlIv+k*L*Nd5ZzxoWqNQEaWDEw*(98wO`u;FdCGWRKbf4A6@#mJJj_7Rv?l z9zhNUvxJ$2_DD++-&yT^sy=t&TQ-uz#~dP(ti%t^8s5_E`^i|&9IE$6?4)OKlgJtg zU0>IVNC@2^5R4r*9||T8!$oh)=p*S9G0Q}E7ezY5yrU$OchM|#2d+%PTt_EvGP(}C&hj(4!kw?v$aAstJ*!zY-uML1qe&@9b{K{X z$FdicxIP{gLBQ+Gim&v>Idv4{;f)b(+^Amudcx(C-^Vx})g7wQ-tyYF;f=~Rz7b3N%@N0U)u6e!y`M@98o?iaDJ~TSQyVDggXzQnY;bs%}7?|Q5-6erh zQQN$*Xk5fm-P72->=A3BTe?nK)Gj0~fw@X9RvM0O`%4j~!uZ0U#A#iU-%9axwpQ98 zvbyVL!kIq|x4E}*<)`lU4Rto}5gD20-!o)cu2=@6WqE=w=Aq{=muA%N#Rp*#io=q< zQzydqtSlzM=K`5#D=x#s!-u~?E#KdO{mr+{5l1hl0%{X%G9LEzD7YIU5&{8uEy z^Zwk2QLu51vd*Mqz4w*Cy?kN?2>A&f2l)@b^4y)*`p1#$T%Ll?4gKi_?{?ajHu_%m z?^c#-(rREK0px-&NFX2(5BK~@`;K(UU?|qE;@r+R0(=Y7?A694a5MA`At$|~bGP+m zk`e-DEcu6#liu6|{d34|uBw1F4K>7DxzMHJO=H7||L3&?l-Bktd7}cLrmgZv`O(Fgn-4Xn(j;zEamx-w{uapSP)6CN>0u}&EH1jnZ zfxWT+z8k5Bu*AQN+5CpCqPepdu^6hDwA= z96s5b1_}PCbH2}D6t@o->D?Z0Hc%Qq&J}$qa?a`YeQFrJ+7jwKMb@Qv%<6V~vxxFP zz+Ce`+CKCbS=~l&now5ho(A)wmAu{XfzQVEMc8hOT`2B$c+&+f^wgM7M(;?r5da^H z%O}6d7r65m#5#z*8A2hWFLl`C|5qZv3DZe}vijaJw!7_36>=uyMO?S&8wheclVeTy zmp4c#WHgRHx`p4|Bd=0B#{C5s&`WnH0s-)6*v(R#E`k2=uhjtud~d>&RT1Ecpb?7uSCIVf^aKmTv>4t%Vm)6~~s98$-}K zOFv>(*}X*wAfFAjMLz1>3ZOie-v>i=~R4=hgUl z4vuNH`Oqm0Ex}Hjq=}K)_vx@$eR!6gLbv{1tG&rH7(cr=R%iBnUx}Uuh_dwKe3NXF z`+Pw6iEN#jr@qjFv1U(GCu6-;PYVQ`Ybzi8t>eS@UWJe*qN@XTd?onUPkiCBQKM)G z3on42R}sry`C40-?bX}KRe~35mh=HH&GXWfou*FU{74dAB!?g!>{F7v*C*$2m^;g# zsuWyDe7)!>L#^`TvX+xjM$MOnCNcDQIK*`3BC_QNO@(f|XbFM!9rldak}4clJm#N5 z63=MYscA9#xiIS>7BrR8Wsa9Y>MwDj zAB3Dg!w)WvKkT~d)(%=!#OZIX^yK!u?Rc5;C5RJW`_+fX_m=A|4y3=jnaZi7J0$D3 z;0=ywazb-^S~%~`Q8okm^PrV>OqY1N4${a#3)3XPXHM^TZOUDp(9zGP@4Tn7Gw%Bs zO{(J`F&j^Z+s$FN@|qg=lsrVf`2FhVx$#EuHWiIr*{dlK!r*Y=$~>8z46|C=tIwR9 z(&$Ld^p+!CV13ewoMSZqGb^lr-qIG%{h20vbo0`*oxsP{706s|rc`KvLpXsyf|!l- z6+g;_M-GO}EPt|vHk$Sl(Y~d9sk%BwMu|QZE8Z2cCiD(YOhKk&`&}ohu3qI^Y1HX} zqyk8i98!30(|`hq9I^^0uTCY40^iRB=4o0fTR7ffe7)3wjAt3k;b&_{oOiB=8R#jv z{Tya}rUy79z)kOHEt+}#sJxgGm9xCqes%DFB8PiNaV-@kkK(;L^t4)nt9Xxocql zUEHA*Z`a5XNbEj{c-N{9aNVYB!6FL(?sLbtMr^CFv{2Q##W&jKrv zNYmb$a>Cu0gz@%sHe{mY~(>Tq?ztE(=zCc?!}@jBoY zOEh-^FlwtC@3>3j)$kBlCwyho?!tk`Hs6^KJQ8G|e693+gr9d5v{G<=WJZFFfLK4Q z?1bL{!74Ebj7Ykv&dh2RB~Y$D%hN54!5Qbv9$x)4bU$$zeo#P zmxP(V=3oUfeokrR)YX1Ga?w`}OGcAy~x^OTb-$*e9Ez$w3P(^LC@aqas*ciTqsNJbk z=ZNoxVA#7isaGEiqd(z1T}Dco08ah{5P=A#J-Bp^Iq22If4ZBQ4(XE~c-q>n%8Zu`Bd%)2mZuXiUYN z_XW?aXT^CbWV%Qh_+}Te(W~nC+FCQ7^+~!(&ZMS{^H@y4b^V&2dYiv+Z;{tX2W+KA zcB%Q((SH(CUgT|6jMCM~MS=9^`PN)dPqh5NN~%3+u%ja1D$lCuj&*RCixCGO+;(cj zLX9@iuO}NexN0lAJRoi&P?se9wFE4sc+i-x#zL1|d(dqBjgiirnv#wru`2MWUd1jw zHfDfJFOXvg9TDcH6N^9xwu77z_d0i(MeYYF1K&xz&^ZPMCd<@gDd&j?@(608u zjgA*j^OQbWd%g3KA@p*;U@_JipAa#cs5GKj&Xhe*m#XIq{PAxmI$foQ1>N<*m~PpI zCIVG8oe>tAtJ;D&w)a{V4-D=(DyM!Yry@m5V0qSwz-kv^FStU4^775*mTXW#&f77~ zwbyS7Ua1CUk~}9VU%-_mmv666`fEjx*AB%2h4133PeO^rK@~fqeY;fVNSaquZEc@YGLgfs zFgn~b!WDcX?^#XaNYvuPyTrKF9b-9+mwb&-)TNFnOYOGXid zT|%MKJQCI%iMl@Knu)rRJ&$tED9Y4XyW7O=3*-a8iL%otey8^Fc??*3xZ_sIA{KpP zun3=w-8R$I_xCb1rRU&I`o@y2MMh-xu-%uBO5e*EXEBtc>(4#+XnZgx3qmhQkV!~O z98h3?c^R?Nj@*jDk@rDhlH?4PVVGn6F;~sf@-X+p(&D+oP-@=IQz_)vtHvVPR%J0k zj*w45X;y_^ubc0R^YC5XHEBXx@tsSr???Jp*{k&9Y6Kk+=tgpWHb;CAJ2iB$R$_ zL5;COjgdf&8Rd;~k^N&V6s3HYjiHn)^B-fO{}{6bLXBa z;s!@axy;rWPV?Ql^32FIl_nRGQ2D+Y;sy;8#L?mb4&z!b+vL`14)cb&vE*xyEJ>ksACEM~gkCM%jI^_B%7h|SyDLuI z)eM94@05uj1s%FUy2AUlzdv#iifVeM^73H5;jRrIl(xPaxBaq+~dR z|B}-C?$Ft`Kw0?)L`!6JP;Y&wOk?K4(0SDK^6i=d^~rFU{uT%QB=}uQSteBx7Ai$~O2IEI zAtauh{5-6yR~rWDf?Sy=Dw9rv9baEI(++QxV`z#vd7JTEupCRsV0=_*9x1zQf3Nr` z_?-fCPHr9+i1F!(YG*iUyUaD=Zs*(9ymQ%6a3*nzg3=Vy7xl~(LrrKK`}g4aeHE)8 z+nF$YH`9C`$?$!DG(CKi{)nJAgGB6KMRa}=jP1dC&h#pnDusYZuNV5Ecs&4=gums}{X0Kj6kJ$$pyRaXyyyPq8^75x)pK<2@;5t{ z((iN1W(Sa|2cX3PZ!n_796WaML=A87O_||vck{Uq-XNNi%9B+ra8D(GIB2Bj0v zz-t4sXJy{cXDaKQbI@O;uhy|rRFtyNOlk+=PNe3tieoc&G+`m$V>2sO+d9NCLo#*L zRyR^WX!HlF(~k0=K8!!b7`*n1M$JkLYFmhA*{d-!AEQlWBflpE7P2M2v&Zh=a93nU z4;?sSr`Z1x{E#ttG7+x>O@%l%ntZyZWP30DyZ)s`hOaBL!|K$rZTxW@G>)N~k}cX#fk7hO z|2PV&@s|72A0a7VJwogy#$LGZP!Xnw=>CI5QzzC?3FK4lPIYR*;t>=hQ~Tq2)Yot) zpO4@Uwi=~QFd@s(06wFc!TQ86da7AQxCNW(x7dMu7P8A#2wk^3+)NXS)#i8UHX_L9 z8Uw@?;n*9VU*|!mMvrH2RyeD8yt<}14FP+X^RTqtAHF5#+b1=lyYW5xCyT5i_lZdM!_}LatL&m4BBuZksxxm)PK>q~xLX8wtT3%m zr6{DM&Yu<87H!RRSy(L08>8(ca@2+{?eliWMMvJ%Ey+99m|3AtZyw(4#@P~CA> zn~+oXXCnwsT#7|4UsIkx!hO=2UKM;jF*c+`7jzaZ$VAGRk2Qx<4CV zs!g$pP8f&u%yiJOEjiFRl-8u|XN5nMNmHp}D{_!Xe$aGmf6{LfsW<$H_X1lntv

et8F4`GR)*NFMCa6yt8LRM4EYyeWnE# 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

7nSYWg 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∑dmEz%Dwfhh6s^kCa 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 S=1;Yt#%CIkT1Ts;a{mL0V6kTa literal 0 HcmV?d00001 diff --git a/bochs/build/macos/bochs.rsrc b/bochs/build/macos/bochs.rsrc new file mode 100644 index 00000000..5c0924fd --- /dev/null +++ b/bochs/build/macos/bochs.rsrc @@ -0,0 +1,300 @@ +(This file must be converted with BinHex 4.0) + +:#Q*[BfKc,R*cFQ-!FR0bBe*6483!!!!!!!!!!$GVKP!!!!!!!3!!!$ES!!!ek!! +!!)-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!TLEf0SFbjbFh*M45j +SER4cUQ&dEh+UFAKcG#"&H'0P!J"bFh*M8P0&4!%!rrrrr`!!!!!!!!!!!!!!!!! +!!!!!!,3U'bJ!!!!!!!!kIJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!%!!!$rrrrr3!!!!J!#!!%k6@&M6e-J8h9`F'pbG$T +0B@0)C@&NCA*c1J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!9!#!!%3%9!M%!!3%!!3!!!!!!!)!!!!!b2$)m!!!!!!#[!&S!%3,r$!$ +rrrrr!!!!!!!!!!!!@J!!!+m!!!!!!!!!(i!!J!#!!!!H!!%!#J!!!!!!V`"DJJ! +!!$&b!!!!!3!!!!!!!!!!!!!!!!!!!!%!!!!!!!!!!!!!!!!!!%!!!!!!!!!!!!! +!!!!!!!!!3!!!!!!!V`"D!!!$!!!!!!!!!!KHCfPQ)!!!!!!!!!!!!!!!!'&`F'` +!!!!!!!!%!!"D!+m!5!!!!%J!!!!!+-m!!30(58B!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!J!!!!!!!#!!!$rJ!!#!J)#!J+!!!i1+bX#!S!!&"3m2!)#J!" +lHfPT"!5!!(4dCQB3%)!!YE@QTJd0J!#eY3`-#`Z!!1EQhYjfGS!!NT)0$3S+J!$ +Ki4iH$`q!!-6%V+`5%S!!JB%0$3S+J!"kHJm2$!b!!0IA(am4%B!!`F'TU4NCJ!$ +cml+bUUU!!1RTjZE8e)!!GA80$3S+J!$Gh6`m+bZ!!,Hh)5%A&i!!(Ki#!TUDJ!$ +0cE@e'aZ!!,DfQjX'"S!!H(KZELJSJ!$VkqMSfYU!!&YE$3d,#i!!6Nik1V+bJ!# +3!*!!2$`+#S!!6Nif0UDQJ!#KS5)L%4'!!0hGFR*YEB!!bXUbXLSUJ!$ZlYE@DQU +!!"iH'KS#!S!!mr2`m0VDJ!"fGQjZ1MU!!1(Kc-`P*B!!0MBH(U1MJ!!N*!B'!`1 +!!)U+HRSq2S!!4%3l1`3%J!#'KLFR(4f!!"NC&KB$!i!![lqNT!B'J!"$3c`m%K+ +!!1VUeYE@eS!!%K)5%JS+J!$LiXE'3N+!!2[lp[EDfS!!D'KGA4`FJ!"-6#!J#`Z +!!0rIdY*LBS!!(4dH(JB'J!#m[*LB4ND!!)k1I(`2$i!!LiYjH33%J!$)b+bX"JD +!!,qrTkFc-i!!JS+#JS'"J!$@eKSD$3f!!2Ihm[,@eS!!&48`-!B'J!$HhXV+EQk +!!!i1$Ji,#i!!PjH1MX2$J!$@eV1c$3f!!,@eEQjVDi!!q[Vkq[VkJ!$3d,5d"JD +!!0E@YlF5%S!!JS*eGEZlJ!$QjYVDEQk!!0VDfYVCfB!!Q*L%K!B'J!$kqZ$JhYk +!!+UUUDQTUB!!TUD9P438J!#2Mi'"+bZ!!"`F2cm%")!!2cmm2$FhJ!$5dVDf-M+ +!!'PT@eX'"S!!pI@q[VUkJ!$1cKJB$3f!!*qIRTkEQi!!&KB$!`)#J!#ZVQeYD@Q +!!12MK)4qIS!!Rjm4%3`-J!$QjVkq%K+!!'*L@eXX,)!!5dY&45NTJ!"483N*"3@ +!!#BQ)5%#!S!!-c-D'U+LJ!"mI#JS'KU!!(amE'bfYS!!eG@m[!X,J!#[Vkq[V+b +!!++LPTBq2S!!hpqhYl1cJ!$dp0rIfpZ!!!S+#JS)#)!!b-JB'!`-J!"fGQ*LAPk +!!0E@UUURTi!!eYDkZJB'J!!Z,LSU&"5!!0lHEQi+#S!!RTk)L!B'J!$Nj0rI[,b +!!-c-bXV-c)!!m[,@eYE@J!!R*cBf#JU!!0lHcXk#JS!!aF9qIRPjJ!$2ce"34dH +!!-R*a-5bXS!!EfpLBPjHJ!$fpXV+YVD!!&YE6Nj'4S!!XE'TUGcFJ!"ZEKmI'4Q +!!*UDLSSM)i!!-c-b-M!`J!$DfS+#%K+!!2[ljqIQjS!!`-#'KSD'J!#9PBQ*ZlZ +!!1,LfYU#JS!!HRTD@PTDJ!$kq[EfeYD!!%P*#3N'"S!!KiGlHlZlJ!"GA9PC06@ +!!0lH`m1r[i!!TUCQCQ*LJ!#1MSU+8P+!!1(KZVS0$B!!9&4*538&J!$LiY$3%K+ +!!&*58P*58S!!hYlHhYhGJ!"LBQ*LB'#!!,DfVUl'aS!!r[lqr[lqJ!"E@dG(VUk +!!1,L-M)Q*S!!`X+TUDQTJ!$YlH$JhYk!!0A9Q*L9PB!!cmr1cY$3J!$amI$`lqq +!!!B'"JB&"B!!lZl@eYE@J!"eGA4dFR+!!-$!&aF0$B!!Rjp99948J!$YlH[VeYD +!!-[,`-!0$B!!)L)J)!S+J!!U+LSU+5Q!!0E@eYE@eS!!4dG&484%J!$Nj1,LeYD +!!"B@-M)#!S!!iq1q[J`-J!$DfVkq"JD!!"XE'KSB')!!R*b)L"38J!!Q*Miq%K+ +!!+UU&"30$B!!P*58P*16J!$mr2EfhYk!!++LLSS'"S!!4NB[,kDQJ!#cXk+L$`q +!!,Li3%!k1S!!fGPIAeC@J!#`X"89$3f!!1$J,LiG(B!!cFfq[X("J!$0cCZEQCQ +!!$Xl"38&"B!!hYl-c"B@J!$PjGIAeG@!!#dY,Li#!S!!2Mib-M)bJ!"58NY,4dH +!!&PC6Ni9&B!!CQC58UkZJ!"A9eC@9PD!!+kZTkI'aS!!Sk13!*!!MSk!!2cmm2$ +Vki!!,LiZ,LdYJ!!Q*KB@!J+!!$Bf8P)U+S!!CQC99E5dJ!#YVCqIXE'!!%Y,5dY ++5S!!p26Sk1EQJ!$%a-6%b-L!!1cXMSk+LS!!jH916N0$J!"SD"SD%a1!!)+#%a- +0$B!!`F'q[Y$3J!!J)#!J(Kk!!-R*VUi0$B!!m[,DfYE@J!$Sk1MSjqH!!&pIAPj +FA)!!XV*58Nj1J!$)b#3N'KU!!$Xl,Li*#B!!q[VDfYE@J!#+LK-6$!b!!+UUQCN +R*i!!+#J5%JS+J!#DQMdp-M+!!)1$L)L!J)!!iZ,LiZ,LJ!#!J(amHRU!!#`X+bX +)#)!!DfX2$``-J!$HhYA9dp1!!*qI&aF0$B!!%K)5%K)5J!$TkFA&#JU!!"B@&KB +5%S!!B'"58J8&J!$fp[EfprH!!,'aPjF-$)!!Ji0bFK%4J!$bmZlZeYD!!0VDeYE +@eS!![,blZlbmJ!"UDQTUD@Q!!,Li&KB1$S!!p[ECfGE@J!#bXTD@"JD!!*16&"3 +-$)!!`F'fYU5NJ!$ZlYVDeYD!!)k1MSk0MB!!1$Ji1$FhJ!#5NSU+!J+!!1RTRCf +@PS!!+bXK)4SDJ!$TkGMB%K+!!*kH,bmK)B!!JS*QCQCQJ!#RTif0#`Z!!0VD-M) +Q*S!!,5dR*`)#4dP'1$PK@J#[!1F!!!)#!JiV!K3m!RYT"(4Q%,@Q$E8-#qEHGT) +0#Z%H$m5X%S%0#RS2$0FI%F'T'I1bUZRQe(80#Ydm+lFK&ai#QXfe'lDE"RKZ+1[ +SfPX0#dikXT!!2!T10UDK)K(GFQh+XLVZeQSH'J,cm0TfEMVKc#8f(U-N"J1+HMj +%1`5'*adC&J1rT!C$2",UeYB5%JVLaN,lpYTSA4a-)![IdQ)G(JDmQ%D1I!q,H36 +)V!DrTc1#JS(@'JhhmYB9-!EHbQi1$JZAMX2@X`feEQ[kq[V3Y!E@Ya+#GE[QfQl +DfYQBK!Eki0kUUDQQP452J5XF2`3r2$I5YM*T@`Ee[VV1'!fIRTX@!`+ZE@RMK(k +I%3cQ[K*L@ba,45P4#38Q)3)c'U*m+"TmE,E9[!Z[VkbLPMlIYl2dhpX+#JM)'!a +fBPl@UUI@ZJBZ+K6HEJUHL!ENhlc-bXcbeYBR0JVHcS,&IRR28%I*a,*[BPlfbVC +E6NDaUGaZ(aQDLL-c-M$DJK,ljqE!KSD9LE[LfS*k@PVkpYC*#3D(HlYG@6AH`lq +QCQ+1LP,KZJe853ALd"*58P,HhYeLBQ#fVXEqr[jE4klL-LE#UDRYi0l9Q*A2cY$ +am1m'"JAZeYCeG(,!&`fI996YkpE,`!dL)!SU+LR@eYC(486NiYB@-J,M[JcD[JB +E'KLFL"3Q2K+U&!f8P*2mpYkLLJC',kDcSJqi3$VCAeD`&3hJ,Kh0[X(0QjNl"3A +Hc"EPep8Y,J)q-M*55dGC6K9Q8UjA9PDZTmDMN!#1r2$V,LiY*KB#0P)UCP@dVCq +a5dY+p1MQa-6)l)k+j8j$D"S6JK-0`El3)#!HbDi0mYV@k1MRAejFXP*1b#3D1bi +*qYV@LK--UTNR+")+QMdbJiL!iZ,LJ(ak,#X)D`m-hYA6RaF0%K)5kF8+&KB5B&) +&p[EhXCF-Jh)4mZl@fYE@[,ZmDQTTZ"B1pYR@XTB'Na3-`EDNlYV@MSk01$JhNSS +#kCf@+b%DkGJ5RLmKJQCQTid,fM)Q,5F#,!!!!!"D!+m!3!Mq!#-*(%L`S-'$#"- +UA-L3!1'`KT%`14*&%BR&LaBGBGaSND,(Mb"$L[4i594*NU)FB8)BkL($)48GbG5 +)4'6(N5G,RM4CNq+PQMp0#[8CG1G1EbaG-U3i8k-SLp-`SCZ+EXL3!%KA%rBXk@J +)9A45V4B8KJf10%dYdZCLpr(5Y+3%!3aF!XfE0fKL0ShbpJD9-TP)N!$9kiQNhLK +4!+L*SXE('bUN[qSY3G@Z(DV"@)FX!4$C'lC$!#JG'[BY'+m@QNB&UdGC&"pUPeJ +0QrBi8Q5",38#f-hlPm!KBP$a4X9+)P"4ShMc(S9%*99-5&C'FV668F(0[1#8a9C +@'ZT$GS,qD8VQ*eNC12$5`p0H*MdF1#fUZ0aGF*Sh4mL8!cKFX*(qhD,i4`8QhA! +fa#8!AM)-!+J-B`i!M84#"@H4f!2!-!X#8%mNQ`"JcbDD-EJ&JdKYjKY"Z3f%L6G +2hIG44c9&*a!51Y&S(3`i`S#"4GjJ-J3%+&%N`L#$f$F0"26NJKjhCF&4L8qjN!$ +&R4)XIS513D&NiJd'kr$!JbH9d%4B48raj#@14+E*3jTU%VRQ)'[bd*-M4'+5c** +-DXHGGZqYpek6D@QA(RIZ`@&#&fYk!PLCBilN%6R$f"2+$h9GSX`cbPcLSd#BC!, +!$d0-`p-d@GQQhc"HjY*#,QLK"NHVrQN0#NpCkQN#4a@CB25L4cf"9")58b%c5LL +SN!$cJaQmCC)*0)p`kLNjBN@53!)ll,"+"!XJ8-@fZcecL5hLS+HR"qr-JJ8$$2b +j(UhBT'F#!$@a`dk[[*DC%dAHM2*%+1D3!!2!PGiJ`iHPj,bK6#JkX2,I0Cm3!%! +'G'#&K$Z(*%$,P394L`!$UlaM`#VR-S!)V@LTDUX*QB688c[$)-XE1BqX8)3KZi5 +JJMNZZ1#T+iSS8Xl23!1G44C4r'#)2R2-XX1dddjK`"3lR'&!"!Bd$I88UcJ6MM0 +#,)RHH[3NQ@3PPG#$Ud9Lm+(I$qV!SXBT(m3`E$l'rZ##h5kiR-RqAe'KX`k0Pea +5$akm2*%*-4PNXmS8Cqb3!1dCN!#Id3!RjElc$LH3!&rp$J,CB,%i*eAXPSNCHSa +M$6-Qr3$!*BjimLB2pEL`QcQM32-$16LEdqrG,N$M-J"[6&-93N0iNb%jhV46ccI +8&+2+0GLq-d8#$8bq#J)4B*[ppPc)X!XLqi`McbTRd()(R&jf%B)RkhJ#`85"Xr) +l!1B38)%D#Ub`!Jj%R2+f'J!NJMT8aaXcf1-5"f#%2KE)3(e8J!RT5-FplT'%IU" +!1@E3`[e1i6m!rSm!RYT0YZMJ*5$j"!#)mK)2eX&#&VTM0fEB3a"`B)&ie0!#k4K +!#%))J%aF``,qr8Y(&,V!3aGd3ADmqF%23QJ'2#MJE4dF!4*rd!88T+*fd)"'i(B +L#RDiJ45HB"m,Na'#&,V*6D436KXkk$m1HY#0DP"%%HCBK#!8)BjZG1-DGN11*lC +4MN')"Ji%L3-l!K#1S0M0$m3KaKCf5BASid%A%1@Q1-(TM&p5"MAm*ETr$#!D(-a +M'dICaM$d`e1C)!!849N%#bb#KhaSacVBG%Ed4I+5Ah)$4AEcNhXKJ452E"-N[65 +N5#*K#BrJBE*S%),rp1B0N!#N*5eI0iMfkG)S60P8*&*8%,"iJeifF4d(+(",&FE +*R)-B%LPm3K&*8)#BFCTPqhV&49'3!!*M#rlK*N3)!TCT81!9(QN("54aLB(U""! +8!))M"NT28I`c+1jmKNq3!1"1CHb6*D'iU%BhbY'0kP-K&@P18`#6NHC`"*aP%NQ +0KK)5R3bPRR"jb90%kT5RG18jB+&+Y!UbPC4NCLT5S3T#[(%[S331+3IjD%*LFT1 +CHS0895Q93QMN%@pi4DJ%'3+6X1%GY@K#("-9#P+aT*4)b%8J5cM4,eMKL%IXjK% +JH8CbpY-1Q3!J2hc)&'Xmj)dP)+-NJV%1@Ld%!$5N*aM#XF1VNV-,e34M&+UUaB, +-83Gal(8BYFK&,Z5M'mlmJV"['-*Z50S4i9(&2rTKK6ImXk(0f!-k#4VqE54-0&X +)+3%E`9L2fS,K"rmX)4,H!!!dd1%(5J"J&m)iKR"ria86P*8JGU%*Vf)d%&&J!K0 +#3B*!6!+6S@#&+$84`CT%8"*2&*-8iQJ"2B3aN!"T)1'TM[!$NkiLN@Ni`US&#FA +U6()5GNKhTLQeL&[!BK*([+j,-1""MJD4B$Cj*)bZ)e)b@U!R26'T81YaMc6#C"( +T#)5iYc8"+0+%!@q3!-)Lm`S`QAlLKNIq)"4mX)Fpq-!($)8L&2Q!"LTd4iiH+p% +-CP#Q-hI$(8hBkX,[XG@Xm[5UY+4&%e8!a3V[dbK`p[3M,ai'0#!e%DY+05+H#S8 +M-M8m2b6J$2,3([j[KL%198QM$0)i#b+baBeDU#9XU+'(HR14T,24kmrJ2)R`a,# +[PS4L&1j`Kii"`)GR@130MqJ8!-K"%&P-kaeBQ-!F$S%%GRLJ!6YJaM,Q))YCD)d +,h,$'&*aQ!!C%S"0EABq63aG5AmAS1+*3aL0q)#NPiZdE3q!N+N"J#P0FS!NqZ!& +[@2!*GhcM#r*B@J0QX3X!#'&D(3+!1`BLM'RY3"l1B%!+UT''flBV6dmf9+j%X3N +9+#F6+'K#'2))`#D-)J3jbpQaP"-&RbNL#%()3Y$+)A"3-'%4ah9!')V!M@`XS'1 +Vb-BihJ&UDf&"(J`)4`4Z`D"Z(#)AKdL$,IiXBBXd())Y*J'!P$e"#TV-4!c8q-% +6KS'+BZ&-"ITZd)0i+4@&k(Fh*L$%1+l9J3l-BJ*,SaE6V%@eMh(#!*EE3DXMm#j +bZ!-*IZ#'2$M"$$Ke!3!88CYb@"#0YkR$"6A(QGh`"SfGm`BD9%K*Mi!+J3ALiK2 +kq-30&Z%%!3LJ&$d)3!"k%!FC4#!$A6!($3LiQa#S)`b("'!4&R%02N,!R*)-J5- +GbB00S!)DS9"(2hS"L[QKJ!NEI1-T`J"j043K&IB3XMh1iAEHG+%*'b5PreD!F0i +JJa3*IX!NaN'(L8cA$5iBF649q-*2T@,H(36J$'XBMhLN)aj*L-)L"[l3MqTlhiD +$r-GZ90#2&AcI"ZIS`V&8F)d"H0m#+iJ'%3Ml!aD6!J+EEq%+*6RL5pU5"rP43#c +3"[fMHSF85U-%4DX%3(XdDAk%J!VB3853!!kp`%1K3!@2K(RPC%jIK`3YjL@iC%P +[iRpHFJQE`(LlJ3Tl3!3,q%D'`"Xhi%Bii$!&Y!QB)%eXmMVRY%)3F"a&N3NCK3l +fp9)XP4)3-#3m8%b4"),$*),Sj!P8j4&(1%h5e$ipH#mRS4)ap4,V8#86G3P!3!& +'B",+3!'qm$F8S!&HJP$(-!ML8!*H!!3N%BB8F!`mi5&%8d!k@-SC2i3PIeK" ++e9&CK3lIe"Eq,"8i4$%8lq9KK*K8'I@)NML*([9FP(L*Q*KIPRJ33c!4'$&5)N9 +6STJ4BX)4!2CR43%82YK,21&65E@*"h&VJ&'+!1BS,S@)4%J54F91['K8V,1&#Y& +GS[J4Q@%9Al&6"3%r&9%39S'-"8&849K9`*J3-"'+d[9832898q'-!f&mA)%91,@ +0J6J%PD"CZ(J*Bk@*%"%6*08LaaL)XAJ89l@0"S&NUh+2ZF"1*C'1+&*@Cc9E*l* +G2h%4pq80bS!+hp!Fhi!+-C)5MNJ3p0)9AS%+[c80G4&VVk)UU+%*Z8J4`2L2D58 +3[q"AMm!+*LP40E%*F#88e,!*#1)4'Q,q$dX`NfrJ9a5"$0dJ@-U`)3,a$EaJ'YT +K'Sq9&MpT'#8"GK44$e3JNdY!"Fp`&B0B%#Y#@M5P%5IaAZk&P+eSA3-4N3Ha9B6 +5C+JaPNEQC%p@PQDj@I-"NK55(`PT%Bp`'IF9&CL3!"pX44MHd!f03"FHSJaU!`f +X!&LMB"e[F"ZEJ3IF)3LmB3HDX*!!(P)29Z&jM"B-l8)*MA!-`S%%b3!2R'9@rpK +HDV-%(E%*I!#CTH*E[q%4U,NCMB!1#!*fVfNGY%9Ee@B(P*!!(-F3#DYT@qe#(l3 +e%%1`$E!S%94@Lalj'e%"&'ma"$8"%kjT%YpP9,dS#ZcM*L@K#8U3!"@KrM+%hQ" +Zf!#2rAJ3pZ886986AE&G)+&GN8!4%Y'+NI#F3b%#5NKP)V!1kQ8VF&!'3i"GTH@ +G`Z#*%q%)q)3ES5#%3q&IZN)QM1)MJ$-RYR4,DU+-&"&'mZN*da!VjdBSA#80,$) +0hZN(SZ)6$iN9fl"I[c)6RFBS,8@GF3)$P94,1*JQ[H)*J`!@CA"Nfj'MHr)HAl- +ZVr)R66)Sf(!SVq-*90C8Zd)4T!##lU"%j2"jS*G&0BF+0h-h5k3X@0T$@DSI93! +)KG)Z2*TN6bB05aD@6()SF0+&dS9bMN)4AV31jK!T0,G%30CMmc0NH-SES@"ZVk* +NB,NR6NB2K1)HrL+f*Y0`BQeU,leS$U%J+DM`#jIL,BiJ2#VL+BpK+CNLS&La$"1 +!"9bJTqT&TR&@-TSP$AZL(Ri#$r5J#DYD"@DJ%68e%[4b&1L3!!N0-JVfJ+XheRD +08DN-)LU#j@fVX!!4J!Aki@4+BKE5F!8HJ`A1d!Q`SQITGM+jFK'b@QXe!KD2B!m +k0Jam!!fld3Lr!+lK#QD64K",GchCJJ!)3+cX5U`,%!l0S!G5!!ri%$@cX$%-3!C +Jk4j3PM)TT6)*kK(SJ!5-35bSm"04)5UMB!i%-5$2`Nq6m'fd`&i#S35d3![Bm"Z +BF+mEJ`@@-`A[-+`-X!#RUJQXmKkK8jkik2k$2-%+YG-[2IB@b2!,$'*@BV!Ehk! +`Ze%!Ra!$,+!054!1fB!2da!+6d!0c*!!!(IJ$T[`9`2KEHJbYHK5$Arb(V%#$e# +QPEAQ+rA`FiV%V5T!$[S'!+cJ$YF3")T35)SJF%"c$J!!#cjE!q13!(40B`!'m(6 +9X!f#F!Gh)!@6`$46i!c1N!!#,E"NJi)HUeSbmD'90&)2XDFI8H!f(%3%-I!%qH! +#1(FhZp%2E3Y`!aFdLX!%FI!*Bj!!!hhJE9M!#3RJ0!M!#8[c$Z2!!-i!XZ'@2FF +J,[#K@CU&"00J*%J!)0R''pUJ"T!!4frqS`@6BU9VTabK)"RYm!Bqm!)c9%JirS! +$+k!#NkX,94!1A0!-qc!"(5!2i4!1$#"aib!qf4"ZYmX&fm)!l$S,eM#r%e#rG0! +#J3-J!+C*qJ'%MUSlqBBhHE-E5p!McIJE!m'c!,!05Y1kll!!dFBd%X`dCj!!03r +h$N[$#3M`"C@R(hKJG*1`*NF8JT@d$Ym!$8q`C3*X0bi$$6`N#U5L%1fJ(293$cT +3$jH!#%3l$V#EG0@#"3X`"3K30Gjf"YMcDPFK$(mJ2Pb(2Pp(%FU!$%K83#PFFf3 +E`$RcH6bd"+6`Zk9b94*""Hlf+8l3Gi)RH$e3#M,`F*b!"4(3$&[`$I93EEDR$NP +!!-d%!#D3!!,i-%Y,f!Aq+Y"bE-%+,U`F,Y!2DT!!"$['1rVf!bZJ"MP!@-Va#kb +$#G0`!!f8b303aJ)3H)*A#J&J$Vq6#5kJ!+dAH3"N!mRL$ZB%*!#JHCXR!K2K$ZD +!JMd8Ea9!ErrM389`F2p"!!d8"Yjh!PX`aQr("!F)4`"%!'1maa0J$Cdk"r@%)&h +!3Rl32Zf6$1[J9TR3"8R`IIe`$FT%$L0`J'rd2d63")NdC$p3[20QcQkd!ZZX5+L +3!!rXS#Mma5YZi!KZ)%BK)'9,Z%,E$%1TJ-id4(diP!6&l%aQ!!lFphhLP`RrB!2 +B&`AJS$-T5%5li3,YehdfY!9"pJ1mZ-m3d%L1"!ST42j0F-*$6!"(#3K)f2YphfF +"1("((Y5!,J!,Te"(qL26haGrLK"+6k")e*Pr,)4jr+I5AT*'[*%%NDI-,Jf"SK5 +"$8J1$U"l#4KpTd!%ED!,bN%0R)I8Ip`&*#L#Jh!*he"l2l!)b-a'8Th9F!3,""3 ++#S#!@Dd'&R""cc5#CEf"+J3"Q4!#,fT*Z14rJm!1-+Y-S+!1r32A(64[Hi"+MaG ++DM#"jr!l,X!+ILa01KM3kl$222'DfH8'4mL%KVf$NE319*!!)FT"$Vd`"JG)"1! +!3leJ!bLJ6+1`T$(D*[mh6kc)+e%a+I"cLlr5cq+eJ@U#6Qk#"0r!"jcd(jQ!$+, +q54'AapFiH%kHi!CFG*8BJ)cFj"8V%SA6L346L$jJ3!&)i0Flb)4!SSLL8!Kl5-* +[`N)3S%[k@"'!k(1`#*a'LK-Q-9#!i!YJJ!6Qp!aJi!Z!!)*%XJj!)!N16K%$03M +eJ1!Xj!PLi1"'J%fN-+,k[9&#f#[ZP"-KlJ9Hi)%3i%qq-!KH8!)pq"(ZC"&Z%)C +!J!6Yi!9LU+3$UP&4Z8rHN!#'`!!)ib5(Pf!%!`8%Vj!!8#8"$"33K`d1"%UqNTG +!iQ!SKX"3!K6`&SrB%KLbj9cHj9jZBcGQD--3jQ'H4E8XC2pK"ZB!$@0qBfhqjA! +HjffZjA*HjhCqjhLHjhFHLIkCf1GpML&q(ZLB11ElC)JSPDL)RZL+AK'8LK#%hK! +KHP)PC9+5,ZNVkP++Q1Qh'#3QJH8'mHJ-%5-S1P+M6ZQ9IQX+bL[Be*&2FC@+k1K +m(ScX#+ZQ1&eYZZPF*0km@%qiH*bI(ZXJCBhrPDJeXZVL6GbYRZb*1*fZq1[V')V +@qL,h9C!!aFP19(AXiMf`bMkG1I',"`(U#c&6T&84aTK6laL,eJkFAY'-i1Q&ZmL +2!`(Z)#AZd[9Hf@MZ3B83e1%4eM'2fTMM!Q&mc!l[!L([5dA[YfCDjRiPi$NM3h& +6rhl!`%N@IDS*E(%[""m*"Sm3iUiVphAZSIi49RA[ApEq#VH&(UfLNEdS@-lH%#& +9RNL`lJe[%$d&mF2666ZDmQJ"9Vr0mJ9"k$Blb5&CA5T+N!"[%)$)S!c0iF8*iBd +T!Gj,B#(3m&Z4J'5`BQ4JeBZA!1Ya-4Fb4L'Ai&EQS&Vhi3MIm!KL-JS*#3"Za3I +DaCHE-&XeYKp2Ea8!S*1HJ9J!B!I5m&LUSKVe`!IQm!JX`b$Y-&[J'[F&(q[r+!B +RXTI)B!r)J!aMIa'M-"JH83r)J"K8CEE3m!ZI0C+(J4cei21ce5'8B"VFm9K$f3) +rf3fMMj3P34HJE`mR!ZiJqIK8m!hfS!bk*P%8m3cQX!N8X3RQS!b)m3f,-3ScE&' +5rZ&A*A(jkKPF'e)*['!(8K!DC,!,TB%+Y9!,jP!2`B!-Uc)-LP%2`c$$aj!!#cZ +E#j8!HLpK(iH)kQhKZlplpemBmed*AJBa"'AD,J!"$`iF6CTDj$T)lf#,&Z*DD#+ +)N!"KVPa93N@+Y%5MaMFB-8jcY)4929'1[%hcKZ55U#AeA)kXYd58+#51N!#S&18 +4TkK,5$aLK!#-%MDL4!Fb,%K3fN##5CP#T'H`iX9)!!"Sl!B03,e)MUa5BrA)UKK +(2@dL!d$0CEeZ5aaK3KFh,LDINC!!c14Ceq-5!,b+BK2i80SS!-(L$SQVT)a!10L +82#B+6jT&M&BpeJ2`UbS!QcG[L[lbKQl)k&m!h&'K-P,CY%B!S#eT$8#($J#SH&V +eb9FchdEB[[80CJi!T@qS!0MMfVV4-H2"i2%phQLd%K08V9j(Y535*UZG26Y#2(T +)kde,8(Gl*UUdGYe$N!"BRBNlBqEj[p!GXQ2FDV!KkqFh3NF*E+`D3J`!'[N*R@f +X!q#R50$aKTADC)+1UjrmLf5)DAJUM3T(*2aP#&'X@XNUC5,CK$iUk,-+MKCfZ5U +5dX5S$)"$I+020`IcSDS4"$dD`L5EPRKNP&&NZL6"EdC""TP'IQRbNRT'@@f*8HT +"4a3MmGTNP%HH'@868ZCT4)G,RU''Pfm1q@@6VYaTK"9dK+(q"!eHkTN')f8DXG# +M8+Kb-"*[[((%1laQmXJE6$"aC+DkH(*[3d64@FR45`BC4)4+24%"dd&QJN-*MaK +G&)PTLK)')h43`L63B3$pDBK"EF,V,NFp%Q8D5A[#D#CdbTSTb5&@X[85%6SGa*1 +52&PR(BS3+Q1)l@KbK*eTr#JUVN)a!DR9Rei0p0H82M[88@pj`SYA%5qCTPLIGXA +V@%aj3)*34a##!al'bX$Nd&1,fR#PPEb4pPZU9V@e8(*YY662VLbGD3JH-)@KiSS +p*HA3P85Bq#4-+XPPUEq8)+L5ZkB4N!!S*C*"pa*(!SdNP"mBaN[KFXZp"#j[dN@ +#"ajJr["jBTrRpE4B6cJpPZ1Si2QV+-Cbm8-*TZ&4BZH"#rBS3"-!Z,NN3fYPZ&j +-,JjDQ+!(%ATLY09@9K42"d(RBhUB0UTTICR#'ak$@T!!KM%PX#9UkjNFQDCC3Mf +MkHC+13jkk+'*4[YYYKheCT!!)6!TBk#k0fHXXEq1JXKcE2)0(*5dHE#h8CVZqQ` +R4hlQB4fe@r%%Jf551AYYb*1GUA)Bd%Q'RXC%&hed[*QDU2LQ63"PE4iJ)-AQa-' +qC+9+JJk&4clXXBH2lBF"rdraSB('((0F-#166+jMRre3M0IFU)NB)MfbcJGL2ZK +TSZmXFA)eCJF%H0!+FS5#Hkq#"LVqb''1(ra!IHf$B!6Cpi1LK+jiG-ZA3+3b%'N +XT3TGQ0Jk["'pcl#$(@#MLF!U*3Tb$--HS5"(*NE4L%Hi`afr'!AhZRFGlM%TKcU +d"cRD&`SH##0i#XQAjc4B%,i"aRljqL$D-%!+*,#$GDZV9E#db"0c'"#'9(V'-j6 +a$(D0DRhQS)XbaTJcMj6'I4"J#$hN1"'*N!"1Ai!C(N%8`Mbd3H"V+,696J6@3Mk +8$aPUc"8k()51p8%$#BMd&MiQm3i%4#!#9E$+--4"MdU8SB04q8-R1L%1K$J&$Kd +X#"1VS!))M*!!C[qMQFCbp32bN3-D2@K%0eK"KACi5e@0G-3Ek[ibK%RXi"d,L!! +#YQB9FdJ%)4f8KLcH-BYX-#!0$%R)Xjj&MbUB3@%R,"FXY9LTZ+#L%FL`ac!55)i +&aK!DhQ)N!-LK)@P*)3%*f!%@NVQ+pQN#AdR8e`6HB3!%-)!E5q'J31iQ$40N`S3 +R2+%i(A8c6!aK5D%`KaPLZ$jbE#m8d-M%LH**MTrF%jpB3+BP-a!"3Yb##bm04c1 +q8"4m'"-,P9b!%jd''(Jdp&"KZf,A5K)hC(b8'Sd3MPA)BBBIm-%P6e"'2(p3dRZ +H!3(bQ-8ik"!,!`b8%fIJ""DF%9-`B%-@8jM#1eEKM!JmB+F$-3JQ*bV1QK3VABY +baa-qL[k+4kL`(G"i`XZfd`fTrZ3"*hf(,%5cUQ8N3!+A1)NST#Q2"@#"%fMPa#` +@`)!&+"%1%QN"*Q2CZYA4LLH9`J3`H$%-9)"8N6q4%#D@G!P@)'&p2jK'UfB3L6X +dB"Aiq)N(%[!!"rNK!Cc)"J)'qSjhB)%"$)K&C&cd%(d*EU,AGG3V9`)-C2""J6m +`Jb+lJ4PS9+8G+G,"LUbLJ"X!J!#I`!8!j%&FNBbL'JR!aa"5Jl9l6Q%"#d!!&UV +jAd[`G'm(dB4FKGS6BXAb%ShJ!cPqi!)AQ1-CN8JI!-b"$J$m"J$GF-Ik!&!!4Rc +L#EhB`#Si-B%rJ*FAY%K!-13*$Ij[H-5Ncm@a-kT4[m"!C(30EGh#jRSA-@a#L'C +i!LSD51%IN!$M$IU*JL)88BiJP-2+","+-@#KM4`ii`chE%!$*V!0@54J%Y3!`!p +1&!PKA1'H1h"'R0-`0IXaCRj9b)6r`LQ+0fa#+pI*a$#fX!Y8R'r#CJ$!!)+3!!9 +&-$S,9SDdP9h`!fh8S4Ucf)&*m@N!!qc!d`-p`cXimHB%M#21h"J)h4M$40$+pBT +hBB9q!,d*)UK"$A[B3LK8S13*Vfm&@3M#P#-GD8@S!392B-3mZ$'&rVjM"ja'3#@ +aB&*Q*q!-cRLZ(LL433h5Jb+f@a4Fe)HAGSa#a0Fj4kh9F!TErX1#&fXS0*0GB*9 +rp+-F`!lfX+fX#&1JJ!PGH%)1JX!'@R"#ZCTqacLbm3jVF%+Yf&j!"[)"LBJF*"I +IdG9YZ+D-F`0J#d`S3KMB[@k5Af!BjTXdK4(0[K$Ni!@-aX'8(feP0B5!#IGST#Z +qd)%*C#-FiC!!4`0fd)!TF')9@$!e!b+`J'9@33El'%I81c#,$X5#$*8#3*lEdA% +!'+)#)fIh+G+KK5G-HX)6R[4eH'(&rBRM$@m3KabJ%'`,J%)&LdK"CI2jhfa-S!2 +MN!!(YTmE$JBi)a[M-)!qR5'$E"cqXLZH3!SQ-!&VH#!qA%YKV0YRKM8BiJN[6'! +$PmaNUlMq)j'ML83V4)!"4iJ$'Mq`LJVdJ1Q`VQ)"q-bdTKX!jKe-i3c-hX%CN!! +HL`fXr$TiQ$SG4#'#,S4!GBGLa6#Z%iTGK+,3+L#(#N32MAaN'!#V%3h-(L4%UmK +M&9DYj'8pM8p0plk5#$J$3CdpK8VHBS*iX-)ihL%"Y)'L#j&6QmG4KP"iJRaJS*4 +$1`S$UHYJ&p36[bGSRaM3KJe!"-26[fScU4h!+I9E[fHcT'C`Kb4""dX`[`CBKSN +"K8a`"0QCPiRaK0,)Ke&!"3ScK`8k(d6,K!8NNGc#QN#C"[DK!T%BL8Z`JRfD!Nr +E[Gj,*J2`2GmcJ*4L!(%B!MLS"X$MrS3'Z!1e!38!8!QA8BC(N!#eV,-(!k3`XbY +$@i+pXG#9eiU99I''8,!+D&#'ELL'!,$$!)L$If!!HAJ(SU-kCrL#I8J",UL#+VL +&3K5a+XJ!&GX"CS#(aaQ%,C`*0lU1(eL%G###Mc+(3T1`-R5""')I9(J'8q("aCU +')rJ%"8L#HlJ"F!J!!4#!(VM$!#L&(JL(E"LVI`!&'RJ#mV1+De#!8f!h($L(V!1 +!*jJ(5)c%2"-&+NJUUmL%IcL(D&#$'fJR&b!(*J1[FcJ"imZNGM!9Z-#%!f!%I6" +(IF!&A'#%!R!#@#b&1bb&Ij!!!4UJJAN$Y"KB0f%-1hDc!4(l!3MqN!#F6!L"Sk' +Ldl)(pXQ%,DJe*JJ"-mL`,X!"NE-eEIL(pN%&XcL#FMc(Ff3%@,L(GT6&(NL&44J +L)K!jNG0(NUY)UkJ#1r!8(QL85`#!%'L@QLa)83Lap[Q(%b!jNY[(-&#$-)#&Jfb +I40M)Fr`%#iL(TBb(!HL#pZ'&&E#eUG6(8eJ"AEL1$$!r,+J'6e!GV#1'QK6,GF! +!Gb!I9&J$&HJiFaJ")YM(I!3l0B#&81Li+)#&6h#!H(!&!S"$K!`"!UJ!@aXj`95 +$0X$+6*U(+j!!!0mDKc[S`PS"J,!FbfEa"(Ii!A2J!aZ)"`Y)JNAB3N$6!QT-5EL +8b&0SJM#%S2jSY)'hl%PE8iIf-BHH@3G23)*+N!#&UjX*+h)%8S!!&3!KRaR,bP5 +U*&L"cGa-TAa+pM%(EDJeB34+08J(&2"'#FS("f"0GLZ!&'5I")+'8"!&FC!!TCT +`"!LB6@B*JIpc(Z!86J!`Je4J0b*B!D9F5J[SKh2SJR0c!A"!!A[-ZQZ)JMD)Ke4 +)6Q+iJ3'i"KA!$J*BJ3T)KF2-K#jB"(ASKhlB!QKJTa9D(9)J"@C*KTS8JI1-R"C +%'hH`L[BmK@+cY5,!!3Z3!-qP[)&&X-G-!)8)C8UQY)#+I0!NB%SE1)GVi%qV))C +&d-cja!(#5,-'fmh*V%NHm$qed4fI-G*-B2i#X!Xl05J#&Bh2'Zf('Th2&5##)P# +$0E#+(l#!)-K5TP5(+$J(!R!&TP`"('K1#%`c8H"0CQ'@b43Drh[*Y&N(pQN$`Da +5Z,65))J'(&L"q$a8(!"6`Jc6-CA+NBZ'q&4+q6c8)1M*8pL#%K@&XHc3f'NF6!' +&jRR5LB%!2mh(5a9'3,8e&)h,5a96HF)"4P8$&,e53"djBK3a9##&XI68!2382A8 +FY5R9kqL#'fK1@eA9UEa84K@j`h3""@K0`5bfYm5"'d$3%[d&0`$1aR&5*ie%ddN +Eb&Q#0-`k-d!"#cM9G+9+4Ke-B9a*&eL"`@4A@b1#'`L"kb#(6A!%S2i*eYha9Kj +3!G24(3#-R(9SKfriXc%pKhL9ef9Yc9-)JhjBZ9j39PNP!KZi9[CN"8rJeR!083# +-RB`"J1Cj(+&"Qdia@3J3!h1Va#jBf(Pp@*(EJj@,!ANGaL4)6UYSK*lT@)rYeYM +abQ"*-diK'T-Pf0bj")4Y(e")"EH8eDTm6DYSJX%NJL6ic%bUJr6NeS%03"l`K)* +NX"(K'L4`!fC"fD*eRSr&P$F`8[E*"h@!9VJm"5*J!@JF!#+i@(,9-#V3fSlP@Tr +a"$G!Ph3"$H%)fjNS@aiifl2TeVFC"!KJKEj%5"8)K4K3J(6Jc`N,aBeY`ClY9q# +%!)K"PlG3*2kkh)QI+P['-GU29FC"@)G,-%X*fMal%!-khG1J8GeJ"GUl%*KDbDe +[HDH8N!#Pl1,0GAM*cRAFaPd(CG!"2[$'8+!#`JA)YH%BP-hGhGfL&%+#LR)9UKJ +#6`!*a6Q8$89Hb6RHmhe*fL`AJ&6F6-%8i`A1f46F&GU*DHK""`'A0JcDF@UCC9% +EAk!!52cAj"d%$'#B5j!!"!SJi*-0h0-Lh*,`*I',K2b&QF[*Q2kYRX&e"!V`KFC +&Ak)4SF'p"!U3!!6dABI3a4PcZ9m*TQ!*hJj*'5H9@!)+S)"A5'![3!*-13B+m!) +!jS#e33)[U'&*N!#%5jKKAr!#$K$LGR#$'IECJJ5@K-&9&"H'Q4DQiJG4ha35"51 +J!#!)PJ4'!M#JJ(E!&"(Ji%%3BbVJhCRJiN)iQMUJ!'-3"@2SBJf1i#Xf'$`1&-4 +)#35QJ-&pK6mQBEa3"K*H"`i'PJa1i"3#JLjHLAB)C%R`K"A@Bib`iNS'%Jl1'$m +'"P&i"5r!#bm!C8mHia8Di5KHL88@"5!JR$bJJ$c!j#U'P9M'#&HQi4,`K@F3AP% +!!b&q"8")&b!)C"*Z"f#3!)416Z9#8"3Ji!!++!&BTQAmRH9S&Mr%!)Rr'GbZ%4Y ++TQEm$3J!1`!!"`#Z!(i!"`!"!!%!!`!$!!3!!!!0!!`!%!"D!&S!b`$,!#J!8J! +!(P&eD@0V9'PYCDSJCA3JG@iJC)jMEfe`FQ9cFf9eFJ!!+!"A!!8I4dP')(0[ER3 +JFQ9aG@Pc)("[GA)JGQPcG@&XDA0PFJ!S!&`!(!aMCA4dC5"TE@&RC5i!!!!!r`! +!!&[8T5562q8b-!!%!!!!!!!!!!#k*S3PZLD%*3!!!!!!!!!!!!!!!!!!!!!)Bf* +[G'KKEAN!!!!+BQpMD(-ZFR0bB`!!!!!8,5"cCA3JGQ9bFfP[EL"dEb!b,M!!!!! +$,!!,!!!!!!$0!FB!i3)!"!*25`!!!!!!'3!'!%X"fBL"9'KTFb"cEfCdGf&bC5" +TFb"bC@aPBA0PC#"eEQ4PFL"dD'8J4dj9)%a(8%`Z$8C[FL"YEh*P)'PZCQpbE@& +dD@pZ,#"bC@&N)(4SC5"QD@aP)#G$6e"C58j(*b"TEQ0XG@4PC#"TEL"dD'8JBQp +MD(-JC'PcG(*TBR9dD@pZ,L!J!!!!!!!!V3!'!0%"ZSK@6@&M6e-JF'pbG#"LH5" +%BACTC#"#BA4dCA*SB@dX)&4TE5"6C@jPBf&X,#"$D(*TFh4[F'KP)%*[G'KKEAN +JB@jN)%4KEQPPE#"(D@e`C@aPGQPMD#i!!!!!!0)!"J$e!EL)E94SC5"#Ef0SFb" +dC@&Y)'Pc)'a[EfYTEQFJCQpb)'%JE@&TER4KD@jPFL"QEh)J3QpMD(-JEfiJ6@& +M6e-Z)!e*CL"jEh8JG'KTEQXJH@pe)'0KEL"SC@a`,#"`E'9KFf8JBfpZG'&MG#" +eFbi!!!!!!!!&!!B!&J(1L"G#Ef0SFb!b,M%Z-5!JCQpb)%eKBdp6$3!!!!!!!%m +!"J#$!Fq)XP0[GA*MC5"MEf4P)'C[FL"#Ef0SFb"TFb"KGQ&TE'&LE'8JCR*[E5" +dD'8J3QpMD(-JD'pYC5"`B@GP)'&d)!eSG(4`1Lm[BQpMD(-ZFfpeFQ0PCQpbCf8 +ZEQ9d,L"8D'8JC'pMG@ePER4KG'P[EL"TFb"[EQaTEQ8JBA3JD(4dF$S[,f*[BfK +c,R0[GA*MC@C[FQGP,QjPG#pNEf-[C'pMBQp[DbpTEQ4PH#jSG'eX)#i!!!!!!)B +!"J#R!Fb)C8PQ)(P[G5"hEh9XC#"XD@YP)'0[ER4bD@*eG'8JG'mJG'KP)%*[BfK +c)("bEfTPBh3X)("XC@&cC5"UEfPZ)'PZ)#"dD'8JBQpMD(-YC'9fC@a[F'9bFb" +YB@PXD@jR)'aTFh3Z!!!!!!!!%!'j!,m#%d!#!)!!!!!!!"!"Z3#r!K0!!J#!!!! +!!!!3!EN![`)63!)!J!!!!!!!%!'j!,m#%d!#!)!!!!!!!"!"Z3#r!K0!!J#!!!! +"!!!!0ZJ!!$AS!!!!Je028P3(fJ#!!"`!EJ!$4%P86!!!!#*%6%p(!!!!,P"*3e3 +!!!!kBfYTC!!!!%B!J2rr!!!bZ!3[T"3!J!!!!!!!!!3[SH3!J2rr!!!!'33[Sp` +!J!!'!!!b@33[T%J&3@*[GA318(*[DQ9MG'pb)%4KG'%aNJ: diff --git a/bochs/build/macos/bochsico.bmp b/bochs/build/macos/bochsico.bmp new file mode 100644 index 0000000000000000000000000000000000000000..08e4c38f4ee2d26126a6e6ed285a657442991535 GIT binary patch literal 3032 zcma);T}+#06vy9}cF#*`QwzjWz)}R;jgl;^^5F*|DBI%Ah$b48Wx7V=#|()H-iXG` z#E)r$!ZsMNk<4+yGDWbAihNuxnF=NnqQX5l5CRu)!37`se|F&X+1n5L=bZof zoztgppZ57Pi+1h7sK$H@cQI}sZe85bLZ)!N!xN~)`?OD`!c)%yCn zVHgMP#9lWyH`B^bDXOopCt~rd=f%__u2=z08yFZ!nSDr*P}$kpL}tGAtLt2-wYBvS zN}}-e^fbX8V}Ge|!g?>p%=uH6;gqoQX_jLOF#5WawDGCuqd@uTzN#;>9)BKm$2y;0F~SK5R3pz$6Hiv9^K zkG%eY{@CM>Uc4%+{50b~|6W>r^fq`;(you|-V!atBCjK&;Kj4HJNH3wy#0~$%8*_f zge`}zTbka5zVw|Bu{xyx@qfh4X}s}3?+_B94_4RM-5$x|VPvA5uIsd!C%+#-MECgv z;rC&r;v)rH(Hk|2kR-IT~#g@uLiWMpJ;iGqRx(o|o)#WEPB6Z7Q9{9NNp%qORXPiDPrg$VvGaR-dusD!Z*6U5Wo1E` z-*G!0LY{a&lWAiwboY~|xw%;_(ca$9N*H)V6P7@T{ioh|i&BoaeaW914EvP%Aa%K1 zP+BY&l7-s7pv0=GDyEtG$0o>HhM|(l)}Povm$-kTnUq98C=e{?Dw5e1q0lQ=`b{ZV z63XFlY;SKfe`aQe{QjE{9VyV~=jT(X;=~D%Vdv!JV1BA+Facc1ze%&RvrJYEr_)KO z_(b7+ghDjueRIR4(d-Tib#`{DOp}dAm)?7BZmx-7Of7gk`=_+`<#Vwpeikhj!13`d zFE5*b$(FIRtL<|}0fGmZju+VOzG2J9-%{K3o!Z^qP59&|tg^PYM!A^nc02tArSzqx kB@V&Z+1UXheX?3^V`C%l;JoVS=ukr=BO`ncr+{nP|FRw}Bme*a literal 0 HcmV?d00001 diff --git a/bochs/build/macos/macos_defines.h b/bochs/build/macos/macos_defines.h new file mode 100644 index 00000000..aac525d3 --- /dev/null +++ b/bochs/build/macos/macos_defines.h @@ -0,0 +1,12 @@ +#define NO_ASSEMBLER +#define USE_WITH_CPU_SIM +#define PARANOID + +#define fileno(A) 0 +#ifdef __cplusplus +#include +inline long read(int fd, void *buf, std::size_t nbytes); +long read(int fd, void *buf, std::size_t nbytes) {return read(fd, (char*)buf, nbytes);} +inline long write(int fd, const void *buf, std::size_t nbytes); +long write(int fd, const void *buf, std::size_t nbytes) {return write(fd, (const char*)buf, nbytes);} +#endif diff --git a/bochs/build/macosx/Info.plist.in b/bochs/build/macosx/Info.plist.in new file mode 100644 index 00000000..e61b78b9 --- /dev/null +++ b/bochs/build/macosx/Info.plist.in @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + bochs + CFBundleGetInfoString + @VERSION@ Carbon + CFBundleIconFile + bochs-icn + CFBundleIdentifier + net.sourceforge.bochs.bochs + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Bochs Carbon @VERSION@ + CFBundlePackageType + APPL + CFBundleShortVersionString + Bochs Carbon (@VERSION@) + CFBundleSignature + BOCHS + CFBundleVersion + @VERSION@ + CSResourcesFileMapped + + + diff --git a/bochs/build/macosx/README.macosx-binary b/bochs/build/macosx/README.macosx-binary new file mode 100644 index 00000000..e69de29b diff --git a/bochs/build/macosx/bochs-icn.icns b/bochs/build/macosx/bochs-icn.icns new file mode 100644 index 0000000000000000000000000000000000000000..bc97695903f2f66959db605e0cfaf4f163a57a16 GIT binary patch literal 57092 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 H>W=@v4Wy+k literal 0 HcmV?d00001 diff --git a/bochs/build/macosx/bochs.applescript b/bochs/build/macosx/bochs.applescript new file mode 100644 index 00000000..de469fcd --- /dev/null +++ b/bochs/build/macosx/bochs.applescript @@ -0,0 +1,70 @@ +property bochs_path : "Contents/MacOS/bochs" +property bochs_app : "" + +on run + tell application "Finder" to get container of (path to me) as string + set script_path to POSIX path of result + + -- Locate bochs + set bochs_alias to findBochs() + + -- Tell Terminal to run bochs from the command line + --Use the script's directory as the current directory + tell application "Terminal" + activate + do script "cd '" & script_path & "';exec '" & (POSIX path of bochs_app) & bochs_path&"'" + -- Wait for Terminal to change the name first, then change it to ours + delay 1 + set AppleScript's text item delimiters to "/" + set the text_item_list to every text item of the script_path + set AppleScript's text item delimiters to "" + + + set next_to_last to ((count of text_item_list) - 1) + set the folder_name to item next_to_last of text_item_list + set name of front window to "Running bochs in ../" & folder_name & "/" + end tell +end run + +-- Taken from examples at http://www.applescriptsourcebook.com/tips/findlibrary.html +to Hunt for itemName at folderList + --Returns path to itemName as string, or empty string if not found + repeat with aFolder in folderList + try + if class of aFolder is constant then + return alias ((path to aFolder as string) & itemName) as string + else if folder of (info for alias aFolder) then + return alias (aFolder & itemName) as string + end if + on error number -43 --item not there, go to next folder + end try + end repeat + return "" --return empty string if item not found +end Hunt + +on findBochs() + try + if bochs_app is "" then error number -43 + return alias bochs_app + on error number -43 + -- bochs_app no good, go hunting + try + tell application "Finder" to get container of (path to me) as string + set this_dir_alias to alias result + tell application "Finder" to get container of (this_dir_alias) as string + set one_up_dir_alias to alias result + set TheUsualPlaces to {this_dir_alias as string, one_up_dir_alias as string} + Hunt for "bochs.app" at TheUsualPlaces + set result_alias to result + if result_alias is "" then error number -43 + set bochs_app to result_alias as string + return result_alias + on error number -43 + --Give up seeking, Ask the user + choose application with prompt "Please locate Bochs:" as alias + set result_alias to result + set bochs_app to result_alias as string + return result_alias + end try + end try +end findBochs \ No newline at end of file diff --git a/bochs/build/macosx/bochs.r b/bochs/build/macosx/bochs.r new file mode 100755 index 00000000..9072489b --- /dev/null +++ b/bochs/build/macosx/bochs.r @@ -0,0 +1,1365 @@ +data 'BNDL' (128) { + $"426F 6368 0000 0001 4652 4546 0000 0000" /* Boch....FREF.... */ + $"0080 4943 4E23 0000 0000 0080" /* .ICN#..... */ +}; + +data 'Boch' (0, "Owner resource") { + $"00" /* . */ +}; + +data 'FREF' (128) { + $"4150 504C 0000 00" /* APPL... */ +}; + +data 'icl4' (128) { + $"0000 0000 0000 000F F000 00FF FF00 0000" /* ............. */ + $"0000 0000 0000 00FC CF0F FFFC CF00 0000" /* ........... */ + $"0000 0000 0000 0FCC BBFC DF1F 3F00 0000" /* .......̻.?... */ + $"0000 0000 0000 FCCB BFCD F1DF FF00 0000" /* ......˿... */ + $"0000 0000 000F CCCF FCDF 1DFF DDF0 0000" /* ......... */ + $"0000 0000 00FC CFFF CDF1 DFFD DDCF 0000" /* ....... */ + $"0000 0000 0FCC FFFC DF1D FFFD DCCC F000" /* ....... */ + $"0000 0000 FCCF FFFD F1DF FFFD CCCC CFFF" /* .... */ + $"0000 000F CCFF FFFF 1FFF FFCC CCCC DFFF" /* ..... */ + $"0000 00FC CFFF FFF1 FCCC CCCC CCCC DFFF" /* ... */ + $"0000 0FCC FFFC CFFD FFFD DDDC CCCC DFFF" /* ... */ + $"0000 FCCF FFCC CFFF FFFF FFDD DDCC DFFF" /* .. */ + $"000F CCFF FCFF FFCC FFF9 99FF FFDD DFFF" /* .. */ + $"00FC CFFF CCFF FFCC FFF0 0000 FFFF FFFF" /* ... */ + $"0FCC CFFC FFCF FFCF FFF0 0000 0F99 FFFF" /* .... */ + $"FCCC FFCC FFFC FCFF FFFF FFF0 0FFF FBBF" /* . */ + $"FCCC FFCC FFFF CFFF F00F FFF0 0FFF BBBF" /* .. */ + $"0FCC CFFF FFFC FFFF F00F FFF0 0FFB BBF0" /* ... */ + $"00FC CFFF CCCF F000 FFF0 0FF0 0FFB BF00" /* ..... */ + $"000F CCFF CCFF 0000 FFF0 0FFF FFBB F000" /* ...... */ + $"0000 FCCF FFF0 0FFF FFFF FFFF FBBF 0000" /* ..... */ + $"0000 0FCC FFF0 0FFF F00F FFFF BBFD DDDD" /* ..... */ + $"0000 00FC CFF0 0FFF F00F FFFB BFEE EEED" /* ..... */ + $"0000 000F CCFF 00FF F00F FFBB FEEE EEE0" /* ...... */ + $"0000 0000 FCCF F000 00FF FBBF AAEE EE00" /* ....... */ + $"0000 0000 0FCC FF00 0FFF BBFA AEEE E000" /* ........ */ + $"0000 0000 00FC CFFF FFF8 8FAA EEE0 0000" /* ....... */ + $"0000 0000 000F CCCF FB88 FAEE E000 0000" /* ......... */ + $"0000 0000 0000 FCCB B88F EEE0 0000 0000" /* ......˸.... */ + $"0000 0000 0000 0FCC BBFE EE00 0000 0000" /* .......̻..... */ + $"0000 0000 0000 00FC CFEE 0000 0000 0000" /* ............. */ + $"0000 0000 0000 000F FE00 0000 0000 0000" /* ............... */ +}; + +data 'icl8' (128) { + $"0000 0000 0000 0000 0000 0000 0000 00FF" /* ............... */ + $"FF00 0000 0000 FFFF FFFF 0000 0000 0000" /* ........... */ + $"0000 0000 0000 0000 0000 0000 0000 FF2C" /* .............., */ + $"2CFF 00FF FFFF FF13 13FF 0000 0000 0000" /* ,......... */ + $"0000 0000 0000 0000 0000 0000 00FF 2C2C" /* .............,, */ + $"3434 FF08 33FF 05FF D8FF 0000 0000 0000" /* 44.3....... */ + $"0000 0000 0000 0000 0000 0000 FF2C 2C34" /* ............,,4 */ + $"34FF 0833 FF05 33FF FFFF 0000 0000 0000" /* 4.3.3...... */ + $"0000 0000 0000 0000 0000 00FF 2C2C 2CFF" /* ...........,,, */ + $"FF08 33FF 0533 FFFF 3333 FF00 0000 0000" /* .3.333..... */ + $"0000 0000 0000 0000 0000 FF2C 2CFF FFFF" /* ..........,, */ + $"0833 FF05 33FF FF33 3333 08FF 0000 0000" /* .3.3333..... */ + $"0000 0000 0000 0000 00FF 2C2C FFFF FF08" /* .........,,. */ + $"33FF 0533 FFFF FF33 3308 0808 FF00 0000" /* 3.333...... */ + $"0000 0000 0000 0000 FF2C 2CFF FFFF FF33" /* ........,,3 */ + $"FF05 33FF FFFF FF33 0808 0808 08FF FFFF" /* .33..... */ + $"0000 0000 0000 00FF 2C2C FFFF FFFF FFFF" /* .......,, */ + $"05FF FFFF FFFF 0808 0808 0808 33FF FFFF" /* .......3 */ + $"0000 0000 0000 FF2C 2CFF FFFF FFFF FF05" /* ......,,. */ + $"FF08 0808 0808 0808 0808 0808 33FF FFFF" /* ...........3 */ + $"0000 0000 00FF 2C2C FFFF FF2A 2AFF FF33" /* .....,,**3 */ + $"FFFF FF33 3333 3308 0808 0808 33FF FFFF" /* 3333.....3 */ + $"0000 0000 FF2C 2CFF FFFF 2A2A 2AFF FFFF" /* ....,,*** */ + $"FFFF FFFF FFFF 3333 3333 0808 33FF FFFF" /* 3333..3 */ + $"0000 00FF 2C2C FFFF FF2A FFFF FFFF 2A2A" /* ...,,*** */ + $"FFFF FFE8 E8E8 FFFF FFFF 3333 33FF FFFF" /* 333 */ + $"0000 FF2C 2CFF FFFF 2A2A FFFF FFFF 2A2A" /* ..,,**** */ + $"FFFF FF00 0000 0000 FFFF FFFF FFFF FFFF" /* ..... */ + $"00FF 2C2C 2CFF FF2A FFFF 2AFF FFFF 2AFF" /* .,,,*** */ + $"FFFF FF00 0000 0000 00FF E8E8 FFFF FFFF" /* ...... */ + $"FF2C 2C2C FFFF 2A2A FFFF FF2A FF2A FFFF" /* ,,,**** */ + $"FFFF FFFF FFFF FF00 00FF FFFF FF34 34FF" /* ..44 */ + $"FF2C 2C2C FFFF 2A2A FFFF FFFF 2AFF FFFF" /* ,,,*** */ + $"FF00 00FF FFFF FF00 00FF FFFF 3434 34FF" /* ....444 */ + $"00FF 2C2C 2CFF FFFF FFFF FF2A FFFF FFFF" /* .,,,* */ + $"FF00 00FF FFFF FF00 00FF FF34 3434 FF00" /* ....444. */ + $"0000 FF2C 2CFF FFFF 2A2A 2AFF FF00 0000" /* ..,,***... */ + $"FFFF FF00 00FF FF00 00FF FF34 34FF 0000" /* ....44.. */ + $"0000 00FF 2C2C FFFF 2A2A FFFF 0000 0000" /* ...,,**.... */ + $"FFFF FF00 00FF FFFF FFFF 3434 FF00 0000" /* ..44... */ + $"0000 0000 FF2C 2CFF FFFF FF00 00FF FFFF" /* ....,,.. */ + $"FFFF FFFF FFFF FFFF FF34 34FF 0000 0000" /* 44.... */ + $"0000 0000 00FF 2C2C FFFF FF00 00FF FFFF" /* .....,,.. */ + $"FF00 00FF FFFF FFFF 3434 FFFA FAFA FAFA" /* ..44 */ + $"0000 0000 0000 FF2C 2CFF FF00 00FF FFFF" /* ......,,.. */ + $"FF00 00FF FFFF FF34 34FF FBFB FBFB FBFA" /* ..44 */ + $"0000 0000 0000 00FF 2C2C FFFF 0000 FFFF" /* .......,,.. */ + $"FF00 00FF FFFF 3434 FFFB FBFB FBFB FB00" /* ..44. */ + $"0000 0000 0000 0000 FF2C 2CFF FF00 0000" /* ........,,... */ + $"0000 FFFF FF34 34FF FDFD FCFC FCFB 0000" /* ..44.. */ + $"0000 0000 0000 0000 00FF 2C2C FFFF 0000" /* .........,,.. */ + $"00FF FFFF 3434 FFFD FDFC FCFB FB00 0000" /* .44... */ + $"0000 0000 0000 0000 0000 FF2C 2CFF FFFF" /* ..........,, */ + $"FFFF FFE1 E1FF FDFD FCFB FB00 0000 0000" /* ..... */ + $"0000 0000 0000 0000 0000 00FF 2C2C 2CFF" /* ...........,,, */ + $"FF34 E1E1 FFFD FCFB FB00 0000 0000 0000" /* 4....... */ + $"0000 0000 0000 0000 0000 0000 FF2C 2C34" /* ............,,4 */ + $"34E1 E1FF FCFB FB00 0000 0000 0000 0000" /* 4......... */ + $"0000 0000 0000 0000 0000 0000 00FF 2C2C" /* .............,, */ + $"3434 FFFB FBFB 0000 0000 0000 0000 0000" /* 44.......... */ + $"0000 0000 0000 0000 0000 0000 0000 FF2C" /* .............., */ + $"2CFF FBFB 0000 0000 0000 0000 0000 0000" /* ,............ */ + $"0000 0000 0000 0000 0000 0000 0000 00FF" /* ............... */ + $"FFFB 0000 0000 0000 0000 0000 0000 0000" /* .............. */ +}; + +data 'icl8' (129) { + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"FF00 0000 0000 0000 0000 0000 0000 0000" /* ............... */ + $"0000 0000 0000 0000 0000 0000 0000 00FF" /* ............... */ + $"FF00 2B2B 2B2B 2B2B 2B2B 2B2B 2B2B 2B2B" /* .++++++++++++++ */ + $"2B2B 2B2B 2B2B 2B2B 2B2B 2B2B 2B2B F9FF" /* ++++++++++++++ */ + $"FF00 2B2B 2B2B 2B2B 2B2B 2B2B 2B2B 2B2B" /* .++++++++++++++ */ + $"2B2B 2B2B 2B2B 2B2B 2B2B 2B2B 2BF9 F9FF" /* +++++++++++++ */ + $"FF00 2B2B 2B00 0000 0000 0000 0000 0000" /* .+++........... */ + $"0000 0000 0000 0000 0000 0000 F9F9 F9FF" /* ............ */ + $"FF00 2B2B 00FF FFFF FFFF FFFF 2A2A FFFF" /* .++.** */ + $"FFFF FFFF FFFF FFFF FFFF FFFF 00F9 F9FF" /* . */ + $"FF00 2B2B 00FF FFFF FFFF FF2A 2A2A FFFF" /* .++.*** */ + $"FFFF FFFF FFFF FFFF FFFF FFFF 00F9 F9FF" /* . */ + $"FF00 2B2B 00FF FFFF FFFF 2AFF FFFF FF2A" /* .++.** */ + $"2AFF FFFF FFFF FFFF FFFF FFFF 00F9 F9FF" /* *. */ + $"FF00 2B2B 00FF FFFF FF2A 2AFF FFFF FF2A" /* .++.*** */ + $"2AFF FFFF 0000 0000 00FF FFFF 00F9 F9FF" /* *...... */ + $"FF00 2B2B 00FF FFFF 2AFF FF2A FFFF FF2A" /* .++.*** */ + $"FFFF FFFF 0000 0000 0000 FFFF 00F9 F9FF" /* ....... */ + $"FF00 2B2B 00FF FF2A 2AFF FFFF 2AFF 2AFF" /* .++.**** */ + $"FFFF FFFF FFFF FFFF 0000 FFFF 00F9 F9FF" /* ... */ + $"FF00 2B2B 00FF FF2A 2AFF FFFF FF2A FFFF" /* .++.*** */ + $"FFFF 0000 FFFF FFFF 0000 FFFF 00F9 F9FF" /* ..... */ + $"FF00 2B2B 00FF FFFF FFFF FFFF 2AFF FFFF" /* .++.* */ + $"FFFF 0000 FFFF FFFF 0000 FFFF 00F9 F9FF" /* ..... */ + $"FF00 2B2B 00FF FFFF FF2A 2A2A FFFF 0000" /* .++.***.. */ + $"00FF FFFF 0000 FFFF 0000 FFFF 00F9 F9FF" /* ...... */ + $"FF00 2B2B 00FF FFFF FF2A 2AFF FF00 0000" /* .++.**... */ + $"00FF FFFF 0000 FFFF FFFF FFFF 00F9 F9FF" /* .... */ + $"FF00 2B2B 00FF FFFF FFFF FFFF 0000 FFFF" /* .++... */ + $"FFFF FFFF FFFF FFFF FFFF FFFF 00F9 F9FF" /* . */ + $"FF00 2B2B 00FF FFFF FFFF FFFF 0000 FFFF" /* .++... */ + $"FFFF 0000 FFFF FFFF FFFF FFFF 00F9 F9FF" /* ... */ + $"FF00 2B2B 00FF FFFF FFFF FFFF 0000 FFFF" /* .++... */ + $"FFFF 0000 FFFF FFFF FFFF FFFF 00F9 F9FF" /* ... */ + $"FF00 2B2B 00FF FFFF FFFF FFFF FF00 00FF" /* .++... */ + $"FFFF 0000 FFFF FFFF FFFF FFFF 00F9 F9FF" /* ... */ + $"FF00 2B2B 00FF FFFF FFFF FFFF FFFF 0000" /* .++... */ + $"0000 00FF FFFF FFFF FFFF FFFF 00F9 F9FF" /* .... */ + $"FF00 2B2B 00FF FFFF FFFF FFFF FFFF FF00" /* .++.. */ + $"0000 FFFF FFFF FFFF FFFF FFFF 00F9 F9FF" /* ... */ + $"FF00 2B2B F900 0000 0000 0000 0000 0000" /* .++........... */ + $"0000 0000 0000 0000 0000 0000 00F9 F9FF" /* ............. */ + $"FF00 F9F9 F9E3 E3E3 E3E3 E3F9 F9F9 F9F9" /* . */ + $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9FF" /* */ + $"FFF9 F9F9 F9E3 E3E3 E3E3 E3F9 F9F9 F9F9" /* */ + $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9FF" /* */ + $"FF00 0000 0000 0000 0000 0000 0000 0000" /* ............... */ + $"0000 0000 0000 0000 0000 0000 0000 00FF" /* ............... */ + $"FF00 2B2B 2B2B 2B2B 2B2B 2B2B 2B2B 0000" /* .++++++++++++.. */ + $"00FF 2B2B 2B2B 2B2B 2B2B 2B2B 2B2B 2BFF" /* .+++++++++++++ */ + $"FF00 2BFC F9F9 F9F9 F9F9 F9F9 F9F9 002B" /* .+.+ */ + $"2BFF FFF9 F9F9 F9F9 F9F9 F9F9 2B2B 2BFF" /* ++++ */ + $"FF00 2BFC 2B2B 2B2B 2B2B 2B2B 2B2B 002B" /* .+++++++++++.+ */ + $"2BFF F92B 2B2B 2B2B 2B2B 2B2B 002B 2BFF" /* ++++++++++.++ */ + $"FF00 2B2B 0000 0000 0000 0000 0000 002B" /* .++...........+ */ + $"2BFF 2B00 0000 0000 0000 0000 2B2B 2BFF" /* ++.........+++ */ + $"FF00 2B2B 2B2B 2B2B 2B2B 2B2B 2B2B FFFF" /* .++++++++++++ */ + $"FFFF 2B2B 2B2B 2B2B 2B2B 2B2B 2B2B 2BFF" /* +++++++++++++ */ + $"FF00 2B2B 2B2B 2B2B 2B2B 2B2B 2B2B 2B2B" /* .++++++++++++++ */ + $"2B2B 2B2B 2B2B 2B2B 2B2B 2B2B 2B2B 2BFF" /* +++++++++++++++ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ +}; + +data 'ICN#' (128) { + $"0001 83C0 0002 5E40 0004 25C0 0008 49C0" /* ....^@..%..I */ + $"0011 9320 0027 2610 004E 4E08 009E 9E07" /* .. .'&..NN... */ + $"013F 7C07 027E 8007 04E6 E007 09C7 FC07" /* .?|..~.... */ + $"13BC FFC7 273C E0FF 46DD E07F 8CEB FE79" /* .'֣֣ */ + $"003F A3D6 A3D6 A3D6 0040 0000 0000 0000" /* .?֣֣.@...... */ + $"0041 0000 0000 0000 0042 0000 0000 0000" /* .A.......B...... */ + $"0043 0000 0000 0000 0044 0000 0000 0000" /* .C.......D...... */ + $"0045 0000 0000 0000 0046 0000 0000 0000" /* .E.......F...... */ + $"0047 0000 0000 0000 0048 0000 0000 0000" /* .G.......H...... */ + $"0049 0000 0000 0000 004A 0000 0000 0000" /* .I.......J...... */ + $"004B 0000 0000 0000 004C 0000 0000 0000" /* .K.......L...... */ + $"004D 0000 0000 0000 004E 0000 0000 0000" /* .M.......N...... */ + $"004F 0000 0000 0000 0050 0000 0000 0000" /* .O.......P...... */ + $"0051 0000 0000 0000 0052 0000 0000 0000" /* .Q.......R...... */ + $"0053 0000 0000 0000 0054 0000 0000 0000" /* .S.......T...... */ + $"0055 0000 0000 0000 0056 0000 0000 0000" /* .U.......V...... */ + $"0057 0000 0000 0000 0058 0000 0000 0000" /* .W.......X...... */ + $"0059 0000 0000 0000 005A 0000 0000 0000" /* .Y.......Z...... */ + $"005B 0000 0000 0000 005C 0000 0000 0000" /* .[.......\...... */ + $"005D 0000 0000 0000 005E 0000 0000 0000" /* .].......^...... */ + $"005F 0000 0000 0000 0060 0000 0000 0000" /* ._.......`...... */ + $"0061 0000 0000 0000 0062 0000 0000 0000" /* .a.......b...... */ + $"0063 0000 0000 0000 0064 0000 0000 0000" /* .c.......d...... */ + $"0065 0000 0000 0000 0066 0000 0000 0000" /* .e.......f...... */ + $"0067 0000 0000 0000 0068 0000 0000 0000" /* .g.......h...... */ + $"0069 0000 0000 0000 006A 0000 0000 0000" /* .i.......j...... */ + $"006B 0000 0000 0000 006C 0000 0000 0000" /* .k.......l...... */ + $"006D 0000 0000 0000 006E 0000 0000 0000" /* .m.......n...... */ + $"006F 0000 0000 0000 0070 0000 0000 0000" /* .o.......p...... */ + $"0071 0000 0000 0000 0072 0000 0000 0000" /* .q.......r...... */ + $"0073 0000 0000 0000 0074 0000 0000 0000" /* .s.......t...... */ + $"0075 0000 0000 0000 0076 0000 0000 0000" /* .u.......v...... */ + $"0077 0000 0000 0000 0078 0000 0000 0000" /* .w.......x...... */ + $"0079 0000 0000 0000 007A 0000 0000 0000" /* .y.......z...... */ + $"007B 0000 0000 0000 007C 0000 0000 0000" /* .{.......|...... */ + $"007D 0000 0000 0000 007E 0000 0000 0000" /* .}.......~...... */ + $"007F 0000 0000 0000 0080 0000 0000 0000" /* ............... */ + $"0081 0000 0000 0000 0082 0000 0000 0000" /* .............. */ + $"0083 0000 0000 0000 0084 0000 0000 0000" /* .............. */ + $"0085 0000 0000 0000 0086 0000 0000 0000" /* .............. */ + $"0087 0000 0000 0000 0088 0000 0000 0000" /* .............. */ + $"0089 0000 0000 0000 008A 0000 0000 0000" /* .............. */ + $"008B 0000 0000 0000 008C 0000 0000 0000" /* .............. */ + $"008D 0000 0000 0000 008E 0000 0000 0000" /* .............. */ + $"008F 0000 0000 0000 0090 0000 0000 0000" /* .............. */ + $"0091 0000 0000 0000 0092 0000 0000 0000" /* .............. */ + $"0093 0000 0000 0000 0094 0000 0000 0000" /* .............. */ + $"0095 0000 0000 0000 0096 0000 0000 0000" /* .............. */ + $"0097 0000 0000 0000 0098 0000 0000 0000" /* .............. */ + $"0099 0000 0000 0000 009A 0000 0000 0000" /* .............. */ + $"009B 0000 0000 0000 009C 0000 0000 0000" /* .............. */ + $"009D 0000 0000 0000 009E 0000 0000 0000" /* .............. */ + $"009F 0000 0000 0000 00A0 0000 0000 0000" /* .............. */ + $"00A1 0000 0000 0000 00A2 0000 0000 0000" /* .............. */ + $"00A3 0000 0000 0000 00A4 0000 0000 0000" /* .............. */ + $"00A5 0000 0000 0000 00A6 0000 0000 0000" /* .............. */ + $"00A7 0000 0000 0000 00A8 0000 0000 0000" /* .............. */ + $"00A9 0000 0000 0000 00AA 0000 0000 0000" /* .............. */ + $"00AB 0000 0000 0000 00AC 0000 0000 0000" /* .............. */ + $"00AD 0000 0000 0000 00AE 0000 0000 0000" /* .............. */ + $"00AF 0000 0000 0000 00B0 0000 0000 0000" /* .............. */ + $"00B1 0000 0000 0000 00B2 0000 0000 0000" /* .............. */ + $"00B3 0000 0000 0000 00B4 0000 0000 0000" /* .............. */ + $"00B5 0000 0000 0000 00B6 0000 0000 0000" /* .............. */ + $"00B7 0000 0000 0000 00B8 0000 0000 0000" /* .............. */ + $"00B9 0000 0000 0000 00BA 0000 0000 0000" /* .............. */ + $"00BB 0000 0000 0000 00BC 0000 0000 0000" /* .............. */ + $"00BD 0000 0000 0000 00BE 0000 0000 0000" /* .............. */ + $"00BF 0000 0000 0000 00C0 0000 0000 0000" /* .............. */ + $"00C1 0000 0000 0000 00C2 0000 0000 0000" /* .............. */ + $"00C3 0000 0000 0000 00C4 0000 0000 0000" /* .............. */ + $"00C5 0000 0000 0000 00C6 0000 0000 0000" /* .............. */ + $"00C7 0000 0000 0000 00C8 0000 0000 0000" /* .............. */ + $"00C9 0000 0000 0000 00CA 0000 0000 0000" /* .............. */ + $"00CB 0000 0000 0000 00CC 0000 0000 0000" /* .............. */ + $"00CD 0000 0000 0000 00CE 0000 0000 0000" /* .............. */ + $"00CF 0000 0000 0000 00D0 0000 0000 0000" /* .............. */ + $"00D1 0000 0000 0000 00D2 0000 0000 0000" /* .............. */ + $"00D3 0000 0000 0000 00D4 0000 0000 0000" /* .............. */ + $"00D5 0000 0000 0000 00D6 0000 0000 0000" /* .............. */ + $"00D7 0000 0000 0000 00D8 0000 0000 0000" /* .............. */ + $"00D9 0000 0000 0000 00DA 0000 0000 0000" /* .............. */ + $"00DB 0000 0000 0000 00DC 0000 0000 0000" /* .............. */ + $"00DD 0000 0000 0000 00DE 0000 0000 0000" /* .............. */ + $"00DF 0000 0000 0000 00E0 0000 0000 0000" /* .............. */ + $"00E1 0000 0000 0000 00E2 0000 0000 0000" /* .............. */ + $"00E3 0000 0000 0000 00E4 0000 0000 0000" /* .............. */ + $"00E5 0000 0000 0000 00E6 0000 0000 0000" /* .............. */ + $"00E7 0000 0000 0000 00E8 0000 0000 0000" /* .............. */ + $"00E9 0000 0000 0000 00EA 0000 0000 0000" /* .............. */ + $"00EB 0000 0000 0000 00EC 0000 0000 0000" /* .............. */ + $"00ED 0000 0000 0000 00EE 0000 0000 0000" /* .............. */ + $"00EF 0000 0000 0000 00F0 0000 0000 0000" /* .............. */ + $"00F1 0000 0000 0000 00F2 0000 0000 0000" /* .............. */ + $"00F3 0000 0000 0000 00F4 0000 0000 0000" /* .............. */ + $"00F5 0000 0000 0000 00F6 0000 0000 0000" /* .............. */ + $"00F7 0000 0000 0000 00F8 0000 0000 0000" /* .............. */ + $"00F9 0000 0000 0000 00FA 0000 0000 0000" /* .............. */ + $"00FB 0000 0000 0000 00FC 0000 0000 0000" /* .............. */ + $"00FD 0000 0000 0000 00FE 0000 0000 0000" /* .............. */ + $"00FF 0000 0000 0000" /* ....... */ +}; + +data 'DLOG' (128, "About") { + $"0028 0028 0154 0209 0001 0100 0100 0000" /* .(.(.T......... */ + $"0000 0080 00" /* .... */ +}; + +data 'DITL' (128) { + $"0003 0000 0000 010B 0199 011F 01D3 0402" /* .............. */ + $"4F4B 0000 0000 0003 000C 0064 01D2 88DC" /* OK.........d.҈ */ + $"424F 4348 5320 6973 2043 6F70 7972 6967" /* BOCHS is Copyrig */ + $"6874 2031 3939 342D 3139 3939 2062 7920" /* ht 1994-1999 by */ + $"4B65 7669 6E20 502E 204C 6177 746F 6E2E" /* Kevin P. Lawton. */ + $"0D0D 424F 4348 5320 6973 2063 6F6D 6D65" /* ..BOCHS is comme */ + $"7263 6961 6C20 736F 6674 7761 7265 2E0D" /* rcial software.. */ + $"0D46 6F72 206D 6F72 6520 696E 666F 726D" /* .For more inform */ + $"6174 696F 6E2C 2072 6561 6420 7468 6520" /* ation, read the */ + $"6669 6C65 2027 4C49 4345 4E53 4527 2069" /* file 'LICENSE' i */ + $"6E63 6C75 6465 6420 696E 2074 6865 2062" /* ncluded in the b */ + $"6F63 6873 2064 6973 7472 6962 7574 696F" /* ochs distributio */ + $"6E2E 2020 4966 2079 6F75 2064 6F6E 2774" /* n. If you don't */ + $"2068 6176 6520 6163 6365 7373 2074 6F20" /* have access to */ + $"7468 6973 2066 696C 652C 206F 7220 6861" /* this file, or ha */ + $"7665 2071 7565 7374 696F 6E73 0000 0000" /* ve questions.... */ + $"0062 000C 00DA 01D3 88B9 7265 6761 7264" /* .b....ӈregard */ + $"696E 6720 7468 6520 6C69 6365 6E73 696E" /* ing the licensin */ + $"6720 706F 6C69 6379 2C20 7468 6520 6175" /* g policy, the au */ + $"7468 6F72 206D 6179 2062 6520 636F 6E74" /* thor may be cont */ + $"6163 7465 6420 7669 613A 0D0D 5553 204D" /* acted via:..US M */ + $"6169 6C3A 2020 4B65 7669 6E20 4C61 7774" /* ail: Kevin Lawt */ + $"6F6E 0D20 2020 2020 2020 2020 2020 2020" /* on. */ + $"2020 3532 3820 4C65 7869 6E67 746F 6E20" /* 528 Lexington */ + $"5374 2E0D 2020 2020 2020 2020 2020 2020" /* St.. */ + $"2020 2057 616C 7468 616D 2C20 4D41 2030" /* Waltham, MA 0 */ + $"3231 3534 0D0D 454D 6169 6C3A 2020 2020" /* 2154..EMail: */ + $"626F 6368 7340 776F 726C 642E 7374 642E" /* bochs@world.std. */ + $"636F 6D61 0000 0000 00DB 000C 0102 01D5" /* coma.......... */ + $"8863 4D61 6342 6F63 6873 2070 6F72 7420" /* cMacBochs port */ + $"6279 2044 6176 6964 2042 6174 7465 7268" /* by David Batterh */ + $"616D 203C 6472 6261 7474 6572 4070 726F" /* am */ + $"200D 7769 7468 2063 6F6E 7472 6962 7574" /* .with contribut */ + $"696F 6E73 2066 726F 6D20 5469 6D20 5365" /* ions from Tim Se */ + $"6E65 6361 6C00" /* necal. */ +}; + +data 'DITL' (200) { + $"0001 0000 0000 006B 0129 007F 0163 0404" /* .......k.)...c.. */ + $"5175 6974 0000 0000 000C 0053 0060 0163" /* Quit.......S.`.c */ + $"8892 5468 6520 426F 6368 7320 5043 2065" /* The Bochs PC e */ + $"6D75 6C61 746F 7220 6861 7320 6861 6C74" /* mulator has halt */ + $"6564 2E0D 0D49 6620 796F 7520 6469 646E" /* ed...If you didn */ + $"2774 2065 7870 6563 7420 7468 6973 2074" /* 't expect this t */ + $"6F20 6861 7070 656E 2C20 636F 6E73 756C" /* o happen, consul */ + $"7420 796F 7572 206C 6F67 2066 696C 6520" /* t your log file */ + $"2874 7970 6963 616C 6C79 2022 626F 6368" /* (typically "boch */ + $"732E 6F75 7422 2920 746F 2066 696E 6420" /* s.out") to find */ + $"6F75 7420 7768 6174 2077 656E 7420 7772" /* out what went wr */ + $"6F6E 672E" /* ong. */ +}; + +data 'cicn' (128) { + $"0000 0000 8010 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0004 0001 0004 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 0000 0000 3DFF FFF8 7FFF FFFC 7FFF" /* ......=.. */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 3FFF" /* ...? */ + $"FFFC 0000 0000 3DFF FFF8 4220 0104 4220" /* ....=B ..B */ + $"0106 4220 F106 4A20 F15E 4E20 F176 4A20" /* ..B .J ^N vJ */ + $"F15E 4A20 F106 4220 F106 4220 0106 4220" /* ^J .B .B ..B */ + $"0106 421F FF06 4000 0006 4000 0006 41FF" /* ..B..@...@...A */ + $"FFC6 4200 0006 4200 0006 4200 0006 4200" /* B...B...B...B. */ + $"8006 4200 8006 4201 4006 4201 4006 4202" /* .B..B.@.B.@.B. */ + $"2006 4202 2006 4207 F006 4204 1006 5A04" /* .B. .B..B...Z. */ + $"101E 5A00 001E 4200 0006 7FFF FFDE 3FFF" /* ..Z...B....? */ + $"FFFC 0000 0000 0000 0005 0000 FFFF FFFF" /* .......... */ + $"FFFF 0001 CCCC CCCC FFFF 0002 6666 6666" /* ....ffff */ + $"CCCC 0003 BBBB BBBB BBBB 0004 5555 5555" /* ....UUUU */ + $"5555 000F 0000 0000 0000 0000 0000 0000" /* UU.............. */ + $"0000 0000 0000 0000 0000 00FF FF0F FFFF" /* ............ */ + $"FFFF FFFF FFFF FFFF F000 0F00 0041 11F0" /* ....A. */ + $"0000 0000 001F 0000 1F00 0F01 1143 3320" /* .............C3 */ + $"1010 1111 1114 0113 32F0 0F01 1143 3320" /* ........2...C3 */ + $"0100 4444 0114 0133 32F0 0F01 2143 3320" /* ..DD...32..!C3 */ + $"1010 4222 0114 0F1F F4F0 0F03 2243 3320" /* ..B"......"C3 */ + $"0110 4222 0114 0FFF 1FF0 0F01 2343 3320" /* ..B"......#C3 */ + $"1110 4222 0114 0F1F F2F0 0F01 2343 3320" /* ..B"......#C3 */ + $"1110 4222 0114 0333 32F0 0F01 3343 3320" /* ..B"...32..3C3 */ + $"1110 4222 0114 0333 32F0 0F01 3343 3320" /* ..B"...32..3C3 */ + $"1110 0000 0114 0333 32F0 0F01 3343 3320" /* .......32..3C3 */ + $"1111 1111 1114 0333 32F0 0F01 3343 3334" /* .......32..3C34 */ + $"4444 4444 4444 0333 32F0 0F01 3330 0000" /* DDDDDD.32..30.. */ + $"0000 0000 0000 0333 32F0 0F01 3333 3333" /* .......32..3333 */ + $"3333 3333 3333 3333 32F0 0F01 3334 4444" /* 333333332..34DD */ + $"4444 4444 4444 4433 32F0 0F01 3343 3333" /* DDDDDDD32..3C33 */ + $"3333 3333 3333 3303 32F0 0F01 3343 3333" /* 3333333.2..3C33 */ + $"3333 3333 3333 3303 32F0 0F01 3343 3333" /* 3333333.2..3C33 */ + $"3333 3333 3333 3303 32F0 0F01 3343 3333" /* 3333333.2..3C33 */ + $"3333 F333 3333 3303 32F0 0F01 3343 3333" /* 333333.2..3C33 */ + $"3333 F333 3333 3303 32F0 0F01 3343 3333" /* 333333.2..3C33 */ + $"333F 3F33 3333 3303 32F0 0F01 3343 3333" /* 3??3333.2..3C33 */ + $"333F 3F33 3333 3303 32F0 0F01 3343 3333" /* 3??3333.2..3C33 */ + $"33F3 33F3 3333 3303 32F0 0F01 3343 3333" /* 33333.2..3C33 */ + $"33F3 33F3 3333 3303 32F0 0F01 3343 3333" /* 33333.2..3C33 */ + $"3FFF FFFF 3333 3303 32F0 0F01 3343 3333" /* ?333.2..3C33 */ + $"3F33 333F 3333 3303 32F0 0F02 2343 3333" /* ?33?333.2..#C33 */ + $"3F33 333F 3333 3302 22F0 0F0F F043 3333" /* ?33?333."..C33 */ + $"3333 3333 3333 330F F2F0 0F00 0043 3333" /* 3333333....C33 */ + $"3333 3333 3333 3303 32F0 0F22 2242 2222" /* 3333333.2.""B"" */ + $"2222 2222 2222 2212 22F0 00FF FFFF FFFF" /* """"""".". */ + $"FFFF FFFF FFFF FFFF FF00" /* . */ +}; + +data 'cicn' (129) { + $"0000 0000 8010 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0004 0001 0004 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 0000 0000 3DFF FFF8 7FFF FFFC 7FFF" /* ......=.. */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE FFFF FFFF FFFF FFFF FFFF" /* . */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFFF 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 3FFF" /* ...? */ + $"FFFC 0000 0000 3DFF FFF8 427F FF04 43FF" /* ....=B..C */ + $"FF86 43F0 FFC6 4FE0 F3FE 4F20 F1F6 5E20" /* COO ^ */ + $"F3FE 7E20 F7BE 7A20 FF1E 7A20 1F1E 7220" /* ~ z .z ..r */ + $"3D0E 721F FF0E E000 F007 E001 E007 E1FF" /* =.r...... */ + $"FFC7 E207 8007 E20F 0007 E21E 0007 E23C" /* ........< */ + $"8007 7278 800E 72F1 400E 7BE1 401E 7BC2" /* .rx.r@.{@.{ */ + $"201E 7F82 203E 5F07 F07E 4F04 10F6 5FC4" /* .. >_.~O.._ */ + $"13FE 5BF0 0FDE 43FF FF86 7FFF FFDE 3FFF" /* .[.C.? */ + $"FFFC 0000 0000 0000 0006 0000 FFFF FFFF" /* .......... */ + $"FFFF 0001 CCCC CCCC FFFF 0002 6666 6666" /* ....ffff */ + $"CCCC 0003 BBBB BBBB BBBB 0004 5555 5555" /* ....UUUU */ + $"5555 0005 DDDD 0000 0000 000F 0000 0000" /* UU............ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 00FF FF0F FFFF 5555 5555 FFFF FFFF" /* ....UUUU */ + $"F000 0F00 0041 1555 5555 5555 555F 0000" /* ....A.UUUUUU_.. */ + $"1F00 0F01 1145 5555 5555 5555 5555 5113" /* .....EUUUUUUUUQ. */ + $"32F0 0F01 1155 5555 0100 4444 5555 5533" /* 2...UUU..DDUUU3 */ + $"32F0 0F01 2555 5520 1010 4222 0155 555F" /* 2..%UU ..B".UU_ */ + $"F4F0 0F03 5555 3320 0110 4222 0115 5555" /* ..UU3 ..B"..UU */ + $"1FF0 0F05 5553 3320 1110 4222 0155 5555" /* ...US3 ..B".UUU */ + $"52F0 0F55 5543 3320 1110 4222 0555 5355" /* R.UUC3 ..B".USU */ + $"55F0 0F55 5343 3320 1110 4222 5555 0335" /* U.USC3 ..B"UU.5 */ + $"55F0 0555 5343 3320 1110 0005 5554 0335" /* U.USC3 ....UT.5 */ + $"5550 0555 3343 3320 1111 1155 5514 0333" /* UP.U3C3 ...UU..3 */ + $"5550 0555 3343 3334 4444 4555 5444 0333" /* UP.U3C34DDEUTD.3 */ + $"5550 5551 3330 0000 0000 5555 0000 0333" /* UPUQ30....UU...3 */ + $"3555 5551 3333 3333 3335 5553 3333 3333" /* 5UUQ333335US3333 */ + $"3555 5551 3334 4444 4455 5544 4444 4433" /* 5UUQ34DDDUUDDDD3 */ + $"3555 5551 3343 3333 3555 5333 3333 3303" /* 5UUQ3C335US3333. */ + $"3555 5551 3343 3333 5555 3333 3333 3303" /* 5UUQ3C33UU33333. */ + $"3555 5551 3343 3335 5553 3333 3333 3303" /* 5UUQ3C35US33333. */ + $"3555 5551 3343 3355 5533 F333 3333 3303" /* 5UUQ3C3UU33333. */ + $"3555 0555 3343 3555 5333 F333 3333 3303" /* 5U.U3C5US33333. */ + $"5550 0555 3343 5555 333F 3F33 3333 3303" /* UP.U3CUU3??3333. */ + $"5550 0555 5345 5553 333F 3F33 3333 3305" /* UP.USEUS3??3333. */ + $"5550 0F55 5355 5533 33F3 33F3 3333 3305" /* UP.USUU333333. */ + $"55F0 0F55 5555 5333 33F3 33F3 3333 3355" /* U.UUUS333333U */ + $"55F0 0F05 5555 3333 3FFF FFFF 3333 3555" /* U..UU33?335U */ + $"52F0 0F01 5555 3333 3F33 333F 3333 5555" /* R..UU33?33?33UU */ + $"32F0 0F02 2555 5533 3F33 333F 3355 5552" /* 2..%UU3?33?3UUR */ + $"22F0 0F0F F055 5555 3333 3333 5555 550F" /* "..UUU3333UUU. */ + $"F2F0 0F00 0045 5555 5555 5555 5555 5303" /* ...EUUUUUUUUS. */ + $"32F0 0F22 2242 2555 5555 5555 5552 2212" /* 2.""B%UUUUUUR". */ + $"22F0 00FF FFFF FFFF 5555 5555 FFFF FFFF" /* ".UUUU */ + $"FF00" /* . */ +}; + +data 'cicn' (131) { + $"0000 0000 8010 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0004 0001 0004 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 0000 0000 3DFF FFF8 7FFF FFFC 7FFF" /* ......=.. */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE FFFF FFFF FFFF FFFF FFFF" /* . */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFFF 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 3FFF" /* ...? */ + $"FFFC 0000 0000 3DFF FFF8 427F FF04 43FF" /* ....=B..C */ + $"FF86 43F0 FFC6 4FE0 F3FE 4F20 F1F6 5E20" /* COO ^ */ + $"F3FE 7E20 F7BE 7A20 FF1E 7A20 1F1E 7220" /* ~ z .z ..r */ + $"3D0E 721F FF0E E000 F007 E001 E007 E1FF" /* =.r...... */ + $"FFC7 E207 8007 E20F 0007 E21E 0007 E23F" /* ........? */ + $"E007 727C 100E 72F4 100E 7BE7 E01E 7BC4" /* .r|..r..{.{ */ + $"101E 7F84 103E 5F04 107E 4F04 10F6 5FC7" /* ....>_..~O.._ */ + $"E3FE 5BF0 0FDE 43FF FF86 7FFF FFDE 3FFF" /* [.C.? */ + $"FFFC 0000 0000 0000 0006 0000 FFFF FFFF" /* .......... */ + $"FFFF 0001 CCCC CCCC FFFF 0002 6666 6666" /* ....ffff */ + $"CCCC 0003 BBBB BBBB BBBB 0004 5555 5555" /* ....UUUU */ + $"5555 0005 DDDD 0000 0000 000F 0000 0000" /* UU............ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 00FF FF0F FFFF 5555 5555 FFFF FFFF" /* ....UUUU */ + $"F000 0F00 0041 1555 5555 5555 555F 0000" /* ....A.UUUUUU_.. */ + $"1F00 0F01 1145 5555 5555 5555 5555 5113" /* .....EUUUUUUUUQ. */ + $"32F0 0F01 1155 5555 0100 4444 5555 5533" /* 2...UUU..DDUUU3 */ + $"32F0 0F01 2555 5520 1010 4222 0155 555F" /* 2..%UU ..B".UU_ */ + $"F4F0 0F03 5555 3320 0110 4222 0115 5555" /* ..UU3 ..B"..UU */ + $"1FF0 0F05 5553 3320 1110 4222 0155 5555" /* ...US3 ..B".UUU */ + $"52F0 0F55 5543 3320 1110 4222 0555 5355" /* R.UUC3 ..B".USU */ + $"55F0 0F55 5343 3320 1110 4222 5555 0335" /* U.USC3 ..B"UU.5 */ + $"55F0 0555 5343 3320 1110 0005 5554 0335" /* U.USC3 ....UT.5 */ + $"5550 0555 3343 3320 1111 1155 5514 0333" /* UP.U3C3 ...UU..3 */ + $"5550 0555 3343 3334 4444 4555 5444 0333" /* UP.U3C34DDEUTD.3 */ + $"5550 5551 3330 0000 0000 5555 0000 0333" /* UPUQ30....UU...3 */ + $"3555 5551 3333 3333 3335 5553 3333 3333" /* 5UUQ333335US3333 */ + $"3555 5551 3334 4444 4455 5544 4444 4433" /* 5UUQ34DDDUUDDDD3 */ + $"3555 5551 3343 3333 3555 5333 3333 3303" /* 5UUQ3C335US3333. */ + $"3555 5551 3343 3333 5555 3333 3333 3303" /* 5UUQ3C33UU33333. */ + $"3555 5551 3343 3335 5553 3333 3333 3303" /* 5UUQ3C35US33333. */ + $"3555 5551 3343 3355 55FF FFF3 3333 3303" /* 5UUQ3C3UU333. */ + $"3555 0555 3343 3555 5F33 333F 3333 3303" /* 5U.U3C5U_33?333. */ + $"5550 0555 3343 5555 3F33 333F 3333 3303" /* UP.U3CUU?33?333. */ + $"5550 0555 5345 5553 3FFF FFF3 3333 3305" /* UP.USEUS?333. */ + $"5550 0F55 5355 5533 3F33 333F 3333 3305" /* UP.USUU3?33?333. */ + $"55F0 0F55 5555 5333 3F33 333F 3333 3355" /* U.UUUS3?33?333U */ + $"55F0 0F05 5555 3333 3F33 333F 3333 3555" /* U..UU33?33?335U */ + $"52F0 0F01 5555 3333 3F33 333F 3333 5555" /* R..UU33?33?33UU */ + $"32F0 0F02 2555 5533 3FFF FFF3 3355 5552" /* 2..%UU3?3UUR */ + $"22F0 0F0F F055 5555 3333 3333 5555 550F" /* "..UUU3333UUU. */ + $"F2F0 0F00 0045 5555 5555 5555 5555 5303" /* ...EUUUUUUUUS. */ + $"32F0 0F22 2242 2555 5555 5555 5552 2212" /* 2.""B%UUUUUUR". */ + $"22F0 00FF FFFF FFFF 5555 5555 FFFF FFFF" /* ".UUUU */ + $"FF00" /* . */ +}; + +data 'cicn' (130) { + $"0000 0000 8010 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0004 0001 0004 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 0000 0000 3DFF FFF8 7FFF FFFC 7FFF" /* ......=.. */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF" /* .... */ + $"FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE 3FFF" /* ...? */ + $"FFFC 0000 0000 3DFF FFF8 4220 0104 4220" /* ....=B ..B */ + $"0106 4220 F106 4A20 F15E 4E20 F176 4A20" /* ..B .J ^N vJ */ + $"F15E 4A20 F106 4220 F106 4220 0106 4220" /* ^J .B .B ..B */ + $"0106 421F FF06 4000 0006 4000 0006 41FF" /* ..B..@...@...A */ + $"FFC6 4200 0006 4200 0006 4200 0006 4207" /* B...B...B...B. */ + $"E006 4204 1006 4204 1006 4207 E006 4204" /* .B...B...B..B. */ + $"1006 4204 1006 4204 1006 4204 1006 5A07" /* ..B...B...B...Z. */ + $"E01E 5A00 001E 4200 0006 7FFF FFDE 3FFF" /* .Z...B....? */ + $"FFFC 0000 0000 0000 0005 0000 FFFF FFFF" /* .......... */ + $"FFFF 0001 CCCC CCCC FFFF 0002 6666 6666" /* ....ffff */ + $"CCCC 0003 BBBB BBBB BBBB 0004 5555 5555" /* ....UUUU */ + $"5555 000F 0000 0000 0000 0000 0000 0000" /* UU.............. */ + $"0000 0000 0000 0000 0000 00FF FF0F FFFF" /* ............ */ + $"FFFF FFFF FFFF FFFF F000 0F00 0041 11F0" /* ....A. */ + $"0000 0000 001F 0000 1F00 0F01 1143 3320" /* .............C3 */ + $"1010 1111 1114 0113 32F0 0F01 1143 3320" /* ........2...C3 */ + $"0100 4444 0114 0133 32F0 0F01 2143 3320" /* ..DD...32..!C3 */ + $"1010 4222 0114 0F1F F4F0 0F03 2243 3320" /* ..B"......"C3 */ + $"0110 4222 0114 0FFF 1FF0 0F01 2343 3320" /* ..B"......#C3 */ + $"1110 4222 0114 0F1F F2F0 0F01 2343 3320" /* ..B"......#C3 */ + $"1110 4222 0114 0333 32F0 0F01 3343 3320" /* ..B"...32..3C3 */ + $"1110 4222 0114 0333 32F0 0F01 3343 3320" /* ..B"...32..3C3 */ + $"1110 0000 0114 0333 32F0 0F01 3343 3320" /* .......32..3C3 */ + $"1111 1111 1114 0333 32F0 0F01 3343 3334" /* .......32..3C34 */ + $"4444 4444 4444 0333 32F0 0F01 3330 0000" /* DDDDDD.32..30.. */ + $"0000 0000 0000 0333 32F0 0F01 3333 3333" /* .......32..3333 */ + $"3333 3333 3333 3333 32F0 0F01 3334 4444" /* 333333332..34DD */ + $"4444 4444 4444 4433 32F0 0F01 3343 3333" /* DDDDDDD32..3C33 */ + $"3333 3333 3333 3303 32F0 0F01 3343 3333" /* 3333333.2..3C33 */ + $"3333 3333 3333 3303 32F0 0F01 3343 3333" /* 3333333.2..3C33 */ + $"3333 3333 3333 3303 32F0 0F01 3343 3333" /* 3333333.2..3C33 */ + $"3FFF FFF3 3333 3303 32F0 0F01 3343 3333" /* ?333.2..3C33 */ + $"3F33 333F 3333 3303 32F0 0F01 3343 3333" /* ?33?333.2..3C33 */ + $"3F33 333F 3333 3303 32F0 0F01 3343 3333" /* ?33?333.2..3C33 */ + $"3FFF FFF3 3333 3303 32F0 0F01 3343 3333" /* ?333.2..3C33 */ + $"3F33 333F 3333 3303 32F0 0F01 3343 3333" /* ?33?333.2..3C33 */ + $"3F33 333F 3333 3303 32F0 0F01 3343 3333" /* ?33?333.2..3C33 */ + $"3F33 333F 3333 3303 32F0 0F01 3343 3333" /* ?33?333.2..3C33 */ + $"3F33 333F 3333 3303 32F0 0F02 2343 3333" /* ?33?333.2..#C33 */ + $"3FFF FFF3 3333 3302 22F0 0F0F F043 3333" /* ?333."..C33 */ + $"3333 3333 3333 330F F2F0 0F00 0043 3333" /* 3333333....C33 */ + $"3333 3333 3333 3303 32F0 0F22 2242 2222" /* 3333333.2.""B"" */ + $"2222 2222 2222 2212 22F0 00FF FFFF FFFF" /* """"""".". */ + $"FFFF FFFF FFFF FFFF FF00" /* . */ +}; + +data 'cicn' (134) { + $"0000 0000 8010 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0004 0001 0004 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 0000 0000 0000 7C00 0003 FF00 0007" /* ........|...... */ + $"8380 0006 01C0 000F 00E0 007F E070 00FF" /* ........p. */ + $"F030 00FF F030 00FF F018 01FF F818 01FF" /* 0.0..... */ + $"F818 01FF F80C 03FF FC0C 03FF FC0C 03FF" /* ........ */ + $"FC04 03FF FC04 07FF FE00 07FF FE00 07FF" /* ........ */ + $"FE00 07FF FE00 07FF FE00 07FF FE00 07FF" /* ........ */ + $"FE00 07FF FE00 07FF FE00 03FF FE00 03FF" /* ........ */ + $"FC00 01FF FC00 01FF F800 00FF F000 003F" /* ........? */ + $"C000 0000 0000 0000 7C00 0003 FF00 0007" /* .......|...... */ + $"8380 0006 01C0 000F 00E0 007F E070 0080" /* ........p. */ + $"1030 0080 1030 0080 1018 0100 0818 0100" /* .0..0......... */ + $"0818 0100 080C 0200 040C 03FF FC0C 0200" /* .............. */ + $"0404 0200 0404 0400 0200 0500 0200 0500" /* ................ */ + $"0200 0500 0200 0500 0200 0500 0200 0500" /* ................ */ + $"0200 0500 0200 0480 0200 0280 0200 0242" /* .............B */ + $"0400 0146 0400 0106 0800 00C0 3000 003F" /* ...F.......0..? */ + $"C000 0000 0000 0000 0005 0000 FFFF FFFF" /* ........... */ + $"FFFF 0001 BBBB BBBB BBBB 0002 8888 8888" /* .... */ + $"8888 0003 DDDD DDDD DDDD 0004 EEEE EEEE" /* .... */ + $"EEEE 000F 0000 0000 0000 0000 0000 0000" /* .............. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0222 2200 0000 0000 0000 0000 0000" /* ...""........... */ + $"0022 2222 2222 0000 0000 0000 0000 0000" /* .""""".......... */ + $"0222 2000 0022 2000 0000 0000 0000 0000" /* ." .." ......... */ + $"0220 0000 0002 2200 0000 0000 0000 0000" /* . ...."......... */ + $"2222 0000 0000 2220 0000 0000 0000 0FFF" /* ""...." ....... */ + $"FFFF FFF0 0000 0222 0000 0000 0000 F211" /* ..."....... */ + $"1111 110F 0000 0022 0000 0000 0000 F211" /* ......."....... */ + $"1111 110F 0000 0022 0000 0000 0000 F211" /* ......."....... */ + $"4111 110F 0000 0002 2000 0000 000F 2314" /* A....... .....#. */ + $"4111 1110 F000 0002 2000 0000 000F 2314" /* A...... .....#. */ + $"1111 1110 F000 0002 2000 0000 000F 2344" /* ....... .....#D */ + $"1111 1110 F000 0000 2200 0000 00F2 1311" /* ......."...... */ + $"1111 1111 0F00 0000 2200 0000 00F2 2222" /* ........"...."" */ + $"2222 2222 2F00 0000 2200 0000 00F2 1311" /* """"/..."...... */ + $"1111 1111 0F00 0000 0200 0000 00F2 1311" /* ............... */ + $"1111 1111 0F00 0000 0200 0000 0F21 1311" /* .............!.. */ + $"1111 1111 10F0 0000 0000 0000 0F21 1311" /* ............!.. */ + $"1111 1111 10F0 0000 0000 0000 0F21 1311" /* ............!.. */ + $"1111 1111 10F0 0000 0000 0000 0F21 1311" /* ............!.. */ + $"1111 1111 10F0 0000 0000 0000 0F21 1311" /* ............!.. */ + $"1111 1111 10F0 0000 0000 0000 0F21 1311" /* ............!.. */ + $"1111 1111 10F0 0000 0000 0000 0F21 1311" /* ............!.. */ + $"1111 1111 10F0 0000 0000 0000 0F21 1311" /* ............!.. */ + $"1111 1111 10F0 0000 0000 0000 0F21 1131" /* ............!.1 */ + $"1111 1111 10F0 0000 0000 0000 00F1 1133" /* .............3 */ + $"1121 1111 10F0 0000 0000 0000 00F2 1113" /* .!............ */ + $"3221 1111 0F00 0000 0000 0000 000F 2111" /* 2!............!. */ + $"1221 1111 0F00 0000 0000 0000 000F 2211" /* .!............". */ + $"1111 1100 F000 0000 0000 0000 0000 FF22" /* ............." */ + $"2110 00FF 0000 0000 0000 0000 0000 00FF" /* !............. */ + $"FFFF FF00 0000 0000 0000" /* ....... */ +}; + +data 'cicn' (135) { + $"0000 0000 8010 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0004 0001 0004 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 0000 0000 000F FC00 007F FF00 01FF" /* ............. */ + $"FF80 03F6 0FC0 07CF 03E0 0F7F E1F0 1EFF" /* ....... */ + $"F3F8 3CFF F7BC 38FF FF1C 79FF FE1E 71FF" /* <8.y.q */ + $"FC1E 71FF F80E E3FF FC0F E3FF FC0F E3FF" /* .q... */ + $"FC07 E3FF FC07 E7FF FE07 E7FF FE07 E7FF" /* .... */ + $"FE07 77FF FE0E 77FF FE0E 7FFF FE1E 3FFF" /* .w.w...? */ + $"FE1C 3FFF FE3C 1FFF FE78 0FFF FEF0 07FF" /* .?<.x.. */ + $"FFE0 03FF FFC0 01FF FF80 00FF FE00 003F" /* .....? */ + $"F000 0000 0000 000F FC00 007F FF00 01FF" /* ............ */ + $"FF80 03F6 0FC0 07CF 03E0 0F7F E1F0 1E80" /* ....... */ + $"13F8 3C80 17BC 3880 1F1C 7900 1E1E 7100" /* .<.8..y...q. */ + $"3C1E 7100 780E E200 F40F E3FF FC0F E203" /* <.q.x..... */ + $"C407 E207 8407 E40F 0207 E51E 0207 E53C" /* .........< */ + $"0207 7578 020E 75F0 020E 7DE0 021E 3FC0" /* ..ux..u..}..? */ + $"021C 3F80 023C 1F80 0278 0F80 02F0 07C2" /* ..?.<..x... */ + $"07E0 03F6 0FC0 01FF FF80 00FF FE00 003F" /* .......? */ + $"F000 0000 0000 0000 0006 0000 FFFF FFFF" /* ........... */ + $"FFFF 0001 BBBB BBBB BBBB 0002 8888 8888" /* .... */ + $"8888 0003 DDDD DDDD DDDD 0004 EEEE EEEE" /* .... */ + $"EEEE 0005 DDDD 0000 0000 000F 0000 0000" /* ............ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 5555 5555 2200 0000" /* ........UUUU"... */ + $"0000 0000 0000 0555 5555 5555 5552 0000" /* .......UUUUUUR.. */ + $"0000 0000 0005 5555 5555 5555 5555 5000" /* ......UUUUUUUUP. */ + $"0000 0000 0055 5555 0220 0000 5555 5500" /* .....UUU. ..UUU. */ + $"0000 0000 0555 5500 2222 0000 0055 5550" /* .....UU.""...UUP */ + $"0000 0000 5555 0FFF FFFF FFF0 0005 5555" /* ....UU...UU */ + $"0000 0005 5550 F211 1111 110F 0055 5555" /* ....UP......UUU */ + $"5000 0055 5500 F211 1111 110F 0555 5055" /* P..UU.......UPU */ + $"5500 0055 5000 F211 4111 110F 5555 0005" /* U..UP..A...UU.. */ + $"5500 0555 500F 2314 4111 1115 5550 0005" /* U..UP.#.A...UP.. */ + $"5550 0555 000F 2314 1111 1155 5500 0002" /* UP.U..#....UU... */ + $"5550 0555 000F 2344 1111 1555 5000 0000" /* UP.U..#D...UP... */ + $"5550 5550 00F2 1311 1111 5555 0F00 0000" /* UPUP.....UU.... */ + $"2555 5550 00F2 2222 2225 5552 2F00 0000" /* %UUP."""%UR/... */ + $"2555 5550 00F2 1311 1155 5511 0F00 0000" /* %UUP....UU..... */ + $"0555 5550 00F2 1311 1555 5111 0F00 0000" /* .UUP....UQ..... */ + $"0555 5550 0F21 1311 5555 1111 10F0 0000" /* .UUP.!..UU..... */ + $"0555 5550 0F21 1315 5551 1111 10F0 0000" /* .UUP.!..UQ..... */ + $"0555 5550 0F21 1355 5511 1111 10F0 0000" /* .UUP.!.UU...... */ + $"0555 0555 0F21 1555 5111 1111 10F0 0000" /* .U.U.!.UQ...... */ + $"5550 0555 0F21 5555 1111 1111 10F0 0000" /* UP.U.!UU....... */ + $"5550 0555 5F25 5551 1111 1111 10F0 0005" /* UP.U_%UQ....... */ + $"5550 0055 5F55 5511 1111 1111 10F0 0005" /* UP.U_UU........ */ + $"5500 0055 5555 5311 1111 1111 10F0 0055" /* U..UUUS.......U */ + $"5500 0005 5555 1131 1111 1111 10F0 0555" /* U...UU.1......U */ + $"5000 0000 5555 1133 1121 1111 10F0 5555" /* P...UU.3.!...UU */ + $"0000 0000 0555 5513 3221 1111 0F55 5550" /* .....UU.2!...UUP */ + $"0000 0000 0055 5555 1221 1111 5555 5500" /* .....UUU.!..UUU. */ + $"0000 0000 0005 5555 5555 5555 5555 5000" /* ......UUUUUUUUP. */ + $"0000 0000 0000 F555 5555 5555 5550 0000" /* ......UUUUUUP.. */ + $"0000 0000 0000 00FF 5555 5555 0000 0000" /* .......UUUU.... */ + $"0000" /* .. */ +}; + +data 'cicn' (138) { + $"0000 0000 8010 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0004 0001 0004 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 000F F000 001F F800 3EFF F800 7FFF" /* ........>.. */ + $"FFF4 7FFF FFFE FFFF FFFF FFFF FFFF FFFF" /* . */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFFF FFFF FFFF FFFF FFFF 7FFF FFFE 00FF" /* .. */ + $"FF00 00FF FF00 007F FE00 003F FC00 001F" /* .......?... */ + $"F800 0007 E000 0000 0000 0000 0000 0000" /* .............. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 000F F000 0010 0800 3EF0 0800 5FE0" /* .........>.._ */ + $"07F4 42E0 050A C5C0 0307 FF77 EEFD 809F" /* .B...w */ + $"F901 80B8 1D01 FFA7 E5FF FF58 1AFF FFA0" /* ...X. */ + $"05FF FFA0 05FF FF40 02FF FF40 02FF FF40" /* ..@.@.@ */ + $"02FF FF40 02FF FF40 02FF 7F40 02FE 00A0" /* .@.@..@.. */ + $"0500 00A0 0500 0058 1A00 0027 E400 0018" /* ......X...'... */ + $"1800 0007 E000 0000 0000 0000 0000 0000" /* ............... */ + $"0000 0000 0000 0000 0004 0000 FFFF FFFF" /* ............ */ + $"FFFF 0001 8888 8888 8888 0002 EEEE EEEE" /* .... */ + $"EEEE 0003 CCCC CCCC CCCC 000F 0000 0000" /* ........ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 FFFF FFFF 0000 0000" /* ............ */ + $"0000 0000 0000 000F 0000 0000 F000 0000" /* ............... */ + $"0000 00FF FFF0 FFFF 3300 0000 F000 0000" /* ...3...... */ + $"0000 0F0F FFFF FFF3 3333 3330 0FFF FFFF" /* ....3330. */ + $"0F00 0F00 00F2 FFF3 3333 3333 0F2F 0000" /* .....3333./.. */ + $"F0F0 FF00 0F2F FF33 3333 3333 00FF 0000" /* ../33333... */ + $"2FFF FFFF FFFF 2FFF 3FFF FFF2 FFF0 FFFF" /* //? */ + $"FF3F F333 3333 F00F FFFF FFFF F00F 3333" /* ?333..33 */ + $"333F F333 3333 F2FF F000 002F FF0F 3333" /* 3?333../.33 */ + $"333F FFFF FFFF F0F0 0FFF FFF0 0F0F FFFF" /* 3?... */ + $"FFFF FFFF FFFF 2F0F F000 000F F0F2 FFFF" /* /.... */ + $"FFFF FFFF FFFF F0F0 0000 0000 0F0F FFFF" /* ...... */ + $"FFFF FFFF FFFF F0F0 0033 3000 0F0F FFFF" /* .30... */ + $"FFFF FFFF FFFF 0F10 0333 3330 00F0 FFFF" /* ...330. */ + $"FFFF FFFF FFFF 0F13 3333 3333 00F0 FFFF" /* ..3333. */ + $"FFFF FFFF FFFF 0F13 3333 3333 00F0 FFFF" /* ..3333. */ + $"FFFF FFFF FFFF 0F11 3333 3333 00F0 FFFF" /* ..3333. */ + $"FFFF FFFF FFFF 0F11 3333 3333 30F0 FFFF" /* ..33330 */ + $"FFFF 0FFF FFFF 0F11 1333 3333 31F0 FFFF" /* ....3331 */ + $"FFF0 0000 0000 F0F1 1133 3333 1F0F 0000" /* .....333.... */ + $"0000 0000 0000 F0F1 1111 3311 1F0F 0000" /* ........3..... */ + $"0000 0000 0000 0F0F F111 111F F0F0 0000" /* ............. */ + $"0000 0000 0000 00F0 0FFF FFF0 0F00 0000" /* ............ */ + $"0000 0000 0000 000F F000 000F F000 0000" /* .............. */ + $"0000 0000 0000 0000 0FFF FFF0 0000 0000" /* ............. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000" /* .. */ +}; + +data 'cicn' (137) { + $"0000 0000 8008 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0002 0001 0002 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 0000 0000 0000 0000 000F F000 003F" /* ..............? */ + $"FC00 00FF FF00 01FF FF80 03FF FFC0 07FF" /* ...... */ + $"FFE0 0FFF FFF0 0FFF FFF0 1FFF FFF8 1FFF" /* .... */ + $"FFF8 3FFF FFFC 3FFF FFFC 3FFF FFFC 3FFF" /* ???? */ + $"FFFC 3FFF FFFC 3FFF FFFC 3FFF FFFC 3FFF" /* ???? */ + $"FFFC 1FFF FFF8 1FFF FFF8 0FFF FFF0 0FFF" /* .... */ + $"FFF0 07FF FFE0 03FF FFC0 01FF FF80 00FF" /* .... */ + $"FF00 003F FC00 000F F000 0000 0000 0000" /* ..?.......... */ + $"0000 0000 0000 0000 0000 000F F000 003F" /* ..............? */ + $"FC00 00F8 1F00 01C0 0380 0380 01C0 0700" /* .......... */ + $"70E0 0E00 F070 0C01 F030 1803 F018 1807" /* p..p..0..... */ + $"7018 380E 701C 301C 700C 3038 700C 3070" /* p.8.p.0.p.08p.0p */ + $"700C 3070 700C 3038 700C 301C 700C 380E" /* p.0pp.08p.0.p.8. */ + $"701C 1807 7018 1803 F018 0C01 F030 0E00" /* p...p......0.. */ + $"F070 0700 70E0 0380 01C0 01C0 0380 00F8" /* p..p..... */ + $"1F00 003F FC00 000F F000 0000 0000 0000" /* ...?.......... */ + $"0000 0000 0000 0000 0002 0000 FFFF FFFF" /* ............ */ + $"FFFF 0001 5555 5555 5555 0002 CCCC CCCC" /* ..UUUUUU.. */ + $"CCCC 0000 0000 0000 0000 0000 0000 0000" /* .............. */ + $"0000 0000 0055 5500 0000 0000 0555 5550" /* .....UU......UUP */ + $"0000 0000 556A A955 0000 0001 5AAA AAA5" /* ....UjU....Z */ + $"4000 0005 6AAA AAA9 5000 0015 AAAA AAAA" /* @...jP... */ + $"5400 0056 AAAA 55AA 9500 005A AAA9 552A" /* T..VU..ZU* */ + $"A500 016A AAA5 552A A940 016A AA95 952A" /* ..jU*@.j* */ + $"A940 056A AA56 952A A950 05AA A95A 952A" /* @.jV*P.Z* */ + $"AA50 05AA A56A 952A AA50 05AA 952A 952A" /* P.j*P.** */ + $"AA50 05AA 952A 952A AA50 05AA A54A 952A" /* P.**P.J* */ + $"AA50 05AA A952 952A AA50 056A AA54 952A" /* P.R*P.jT* */ + $"A950 016A AA95 152A A940 016A AAA5 552A" /* P.j.*@.jU* */ + $"A940 005A AAA9 552A A500 0056 AAAA 552A" /* @.ZU*..VU* */ + $"9500 0015 AAAA 802A 5400 0005 6AAA AAA9" /* ...*T...j */ + $"5000 0001 5AAA AAA5 4000 0000 556A A955" /* P...Z@...UjU */ + $"0000 0000 0555 5550 0000 0000 0055 5500" /* .....UUP.....UU. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000" /* .. */ +}; + +data 'cicn' (136) { + $"0000 0000 8008 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0002 0001 0002 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 0000 0000 0000 0000 000F F000 003F" /* ..............? */ + $"FC00 00FF FF00 01FF FF80 03FF FFC0 07FF" /* ...... */ + $"FFE0 0FFF FFF0 0FFF FFF0 1FFF FFF8 1FFF" /* .... */ + $"FFF8 3FFF FFFC 3FFF FFFC 3FFF FFFC 3FFF" /* ???? */ + $"FFFC 3FFF FFFC 3FFF FFFC 3FFF FFFC 3FFF" /* ???? */ + $"FFFC 1FFF FFF8 1FFF FFF8 0FFF FFF0 0FFF" /* .... */ + $"FFF0 07FF FFE0 03FF FFC0 01FF FF80 00FF" /* .... */ + $"FF00 003F FC00 000F F000 0000 0000 0000" /* ..?.......... */ + $"0000 0000 0000 0000 0000 000F F000 003F" /* ..............? */ + $"FC00 00F8 1F00 01C0 0380 0380 01C0 0700" /* .......... */ + $"00E0 0E03 C070 0C03 C030 1803 C018 1803" /* ...p..0..... */ + $"C018 3803 C01C 3003 C00C 3003 C00C 3003" /* .8..0..0..0. */ + $"C00C 3003 C00C 3003 C00C 3003 C00C 3803" /* .0..0..0..8. */ + $"C01C 1803 C018 1803 C018 0C03 C030 0E03" /* .........0.. */ + $"C070 0700 00E0 0380 01C0 01C0 0380 00F8" /* p........ */ + $"1F00 003F FC00 000F F000 0000 0000 0000" /* ...?.......... */ + $"0000 0000 0000 0000 0002 0000 FFFF FFFF" /* ............ */ + $"FFFF 0001 5555 5555 5555 0002 CCCC CCCC" /* ..UUUUUU.. */ + $"CCCC 0000 0000 0000 0000 0000 0000 0000" /* .............. */ + $"0000 0000 0055 5500 0000 0000 0555 5550" /* .....UU......UUP */ + $"0000 0000 556A A955 0000 0001 5AAA AAA5" /* ....UjU....Z */ + $"4000 0005 6AAA AAA9 5000 0015 AAAA AAAA" /* @...jP... */ + $"5400 0056 AAA5 5AAA 9500 005A AAA5 52AA" /* T..VZ..ZR */ + $"A500 016A AAA5 52AA A940 016A AAA5 52AA" /* ..jR@.jR */ + $"A940 056A AAA5 52AA A950 05AA AAA5 52AA" /* @.jRP.R */ + $"AA50 05AA AAA5 52AA AA50 05AA AAA5 52AA" /* P.RP.R */ + $"AA50 05AA AAA5 52AA AA50 05AA AAA5 52AA" /* P.RP.R */ + $"AA50 05AA AAA5 52AA AA50 056A AAA5 52AA" /* P.RP.jR */ + $"A950 016A AAA5 52AA A940 016A AAA5 52AA" /* P.jR@.jR */ + $"A940 005A AAA5 52AA A500 0056 AAA5 52AA" /* @.ZR..VR */ + $"9500 0015 AAA8 02AA 5400 0005 6AAA AAA9" /* ....T...j */ + $"5000 0001 5AAA AAA5 4000 0000 556A A955" /* P...Z@...UjU */ + $"0000 0000 0555 5550 0000 0000 0055 5500" /* .....UUP.....UU. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000" /* .. */ +}; + +data 'cicn' (139) { + $"0000 0000 8010 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0004 0001 0004 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 FFF0 0000 FFF8 0000 FFF8 0000 FFF8" /* ........ */ + $"0000 FFF8 0000 FFF8 0000 FFF8 0000 FFF8" /* ........ */ + $"0000 FFF8 0000 FFF8 0000 FFF8 0000 FFF8" /* ........ */ + $"0000 FFF8 0000 FFF8 0000 FFF8 0000 FFF8" /* ........ */ + $"0000 0000 01F0 0000 01F0 0000 1FFF 0600" /* ............. */ + $"1FFF 0600 1FFF 0600 1FFF 0604 1FFF 0706" /* ............ */ + $"1FFF 03FF 1FFF 01FF 1FFF 0006 1FFF 0004" /* .......... */ + $"1FFF 0000 1FFF 0000 1FFF 0000 1FFF 0000" /* ............ */ + $"1FFF FFF0 0000 8078 0000 8058 0000 8078" /* ...x..X..x */ + $"0000 8008 0000 8008 0000 8008 0000 8008" /* ............ */ + $"0000 8008 0000 8008 0000 8008 0000 8008" /* ............ */ + $"0000 8008 0000 8008 0000 8008 0000 FFF8" /* ........... */ + $"0000 0000 01F0 0000 0150 0000 1E0F 0600" /* ........P...... */ + $"13FD 0600 1099 0600 110D 0604 1207 0706" /* .............. */ + $"140D 03FF 1219 01FF 1131 0006 10E1 0004" /* .......1..... */ + $"1041 0000 1001 0000 1001 0000 1001 0000" /* .A.............. */ + $"1FFF 0000 0000 0000 0004 0000 FFFF FFFF" /* ........... */ + $"FFFF 0001 5555 5555 5555 0002 CCCC CCCC" /* ..UUUUUU.. */ + $"CCCC 0003 DDDD 0000 0000 000F 0000 0000" /* ............ */ + $"0000 FFFF FFFF FFF1 0000 0000 0000 0000" /* .......... */ + $"0000 F000 0000 0FFF 1000 0000 0000 0000" /* .............. */ + $"0000 F000 0000 0F2F F000 0000 0000 0000" /* ....../....... */ + $"0000 F000 0000 0FFF F000 0000 0000 0000" /* ............. */ + $"0000 F000 0000 0022 F000 0000 0000 0000" /* ......"....... */ + $"0000 F000 0000 0002 F000 0000 0000 0000" /* .............. */ + $"0000 F000 0000 0002 F000 0000 0000 0000" /* .............. */ + $"0000 F000 0000 0002 F000 0000 0000 0000" /* .............. */ + $"0000 F000 0000 0002 F000 0000 0000 0000" /* .............. */ + $"0000 F000 0000 0002 F000 0000 0000 0000" /* .............. */ + $"0000 F000 0000 0002 F000 0000 0000 0000" /* .............. */ + $"0000 F000 0000 0002 F000 0000 0000 0000" /* .............. */ + $"0000 F000 0000 0002 F000 0000 0000 0000" /* .............. */ + $"0000 F000 0000 0002 F000 0000 0000 0000" /* .............. */ + $"0000 F000 0000 0002 F000 0000 0000 0000" /* .............. */ + $"0000 FFFF FFFF FFFF F000 0000 0000 0000" /* ......... */ + $"0000 0000 0000 0000 0000 0000 000F 111F" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0001 0F21" /* ...............! */ + $"0000 0000 0000 0000 0000 000F 1112 0002" /* ................ */ + $"F11F 0000 0330 0000 0000 0001 00FF FFFF" /* ....0....... */ + $"F10F 0000 0330 0000 0000 0001 0222 100F" /* ....0.......".. */ + $"122F 0000 0330 0000 0000 0001 0221 0002" /* ./...0.......!.. */ + $"F12F 0000 0330 0000 0300 0001 0210 0000" /* /...0.......... */ + $"2F1F 0000 0333 0000 0330 0001 0100 0002" /* /....3...0...... */ + $"F12F 0000 0033 3333 3333 0001 0210 002F" /* /...33333...../ */ + $"122F 0000 0003 3333 3333 0001 0221 02F1" /* ./....3333...!. */ + $"222F 0000 0000 0000 0330 0001 0222 1F12" /* "/.......0...".. */ + $"222F 0000 0000 0000 0300 0001 0222 2122" /* "/..........."!" */ + $"222F 0000 0000 0000 0000 0001 0222 2222" /* "/...........""" */ + $"222F 0000 0000 0000 0000 0001 0222 2222" /* "/...........""" */ + $"222F 0000 0000 0000 0000 0001 0222 2222" /* "/...........""" */ + $"222F 0000 0000 0000 0000 000F FFFF FFFF" /* "/.......... */ + $"FFFF" /* */ +}; + +data 'cicn' (140) { + $"0000 0000 8010 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0004 0001 0004 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 0007 C000 0007 C000 0007 C000 001F" /* ............. */ + $"F000 1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF" /* ..... */ + $"FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF" /* .... */ + $"FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF" /* .... */ + $"FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF" /* .... */ + $"FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF" /* .... */ + $"FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF" /* .... */ + $"FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF" /* .... */ + $"FFF0 0007 C000 0004 4000 0005 4000 0018" /* .....@...@... */ + $"3000 1FE0 0FF0 1040 0C10 107F FE30 103C" /* 0....@....0.< */ + $"1E30 1008 0C30 1010 0630 1020 0330 1040" /* .0...0...0. .0.@ */ + $"01B0 1080 00F0 1100 01B0 1200 0330 1100" /* .........0.. */ + $"0630 1080 0C30 1040 1830 1020 3030 1010" /* .0..0.@.0. 00.. */ + $"6030 1008 C030 1005 8030 1003 0030 1000" /* `0..0..0...0.. */ + $"0030 1000 0030 1000 0030 1000 0030 1000" /* .0...0...0...0.. */ + $"0030 1000 0030 1000 0030 17FF FFF0 1FFF" /* .0...0...0.. */ + $"FFF0 0000 0000 0000 0004 0000 FFFF FFFF" /* .......... */ + $"FFFF 0001 5555 5555 5555 0002 CCCC CCCC" /* ..UUUUUU.. */ + $"CCCC 0003 1111 1111 1111 000F 0000 0000" /* .............. */ + $"0000 0000 0000 0000 0311 1300 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0102 0100 0000 0000" /* ................ */ + $"0000 0000 0000 0000 010F 2100 0000 0000" /* ..........!..... */ + $"0000 0000 0000 0001 1222 2211 0000 0000" /* .........""..... */ + $"0000 0003 1111 1110 0000 0002 3111 1113" /* ............1... */ + $"0000 0001 0000 0122 2222 2222 1322 0023" /* .......""""".".# */ + $"0000 0001 0222 2133 3333 3333 3312 2213" /* ....."!333333.". */ + $"0000 0001 0222 2211 1100 0003 1112 2213" /* ....."".......". */ + $"0000 0001 0222 2222 1000 0002 3122 2213" /* ....."""....1"". */ + $"0000 0001 0222 2221 0000 0000 2312 2213" /* .....""!....#.". */ + $"0000 0001 0222 2210 0000 0000 0231 2213" /* .....""......1". */ + $"0000 0001 0222 2100 0000 0000 0023 1213" /* ....."!......#.. */ + $"0000 0001 0222 1000 0000 0000 0002 3113" /* ....."........1. */ + $"0000 0001 0221 0000 0000 0000 0023 1213" /* .....!.......#.. */ + $"0000 0001 0210 0000 0000 0000 0231 2213" /* .............1". */ + $"0000 0001 0221 0000 0000 0000 2312 2213" /* .....!......#.". */ + $"0000 0001 0222 1000 0000 0002 3122 2213" /* ....."......1"". */ + $"0000 0001 0222 2100 0000 0023 1222 2213" /* ....."!....#."". */ + $"0000 0001 0222 2210 0000 0231 2222 2213" /* .....""....1""". */ + $"0000 0001 0222 2221 0000 2312 2222 2213" /* .....""!..#.""". */ + $"0000 0001 0222 2222 1002 3122 2222 2213" /* ....."""..1"""". */ + $"0000 0001 0222 2222 2123 1222 2222 2213" /* ....."""!#."""". */ + $"0000 0001 0222 2222 2231 2222 2222 2213" /* .....""""1""""". */ + $"0000 0001 0222 2222 2222 2222 2222 2213" /* ....."""""""""". */ + $"0000 0001 0222 2222 2222 2222 2222 2213" /* ....."""""""""". */ + $"0000 0001 0222 2222 2222 2222 2222 2213" /* ....."""""""""". */ + $"0000 0001 0222 2222 2222 2222 2222 2213" /* ....."""""""""". */ + $"0000 0001 0222 2222 2222 2222 2222 2213" /* ....."""""""""". */ + $"0000 0001 0222 2222 2222 2222 2222 2213" /* ....."""""""""". */ + $"0000 0001 0222 2222 2222 2222 2222 2213" /* ....."""""""""". */ + $"0000 0001 2111 1111 1111 1111 1111 1113" /* ....!........... */ + $"0000 0003 3333 3333 3333 3333 3333 3333" /* ....333333333333 */ + $"0000" /* .. */ +}; + +data 'cicn' (141) { + $"0000 0000 8008 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0002 0001 0002 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 1FFF FE00 1FFF FF00 1FFF FF80 1FFF" /* ........ */ + $"FFC0 1FFF FFE0 1FFF FFF0 1FFF FFF0 1FFF" /* .... */ + $"FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF" /* .... */ + $"FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF" /* .... */ + $"FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF" /* .... */ + $"FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF" /* .... */ + $"FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF" /* .... */ + $"FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF" /* .... */ + $"FFF0 1FFF FE00 1000 0700 1000 0580 1000" /* ........... */ + $"04C0 1000 0460 1000 0430 1000 07F0 1000" /* ....`...0..... */ + $"03F0 1000 0010 1000 0010 10C0 0010 11E0" /* ............. */ + $"0010 13D0 0010 13D7 6E10 1120 0010 10C0" /* ......n.. ... */ + $"0010 1000 0010 1000 0010 10C0 0010 1120" /* .............. */ + $"0010 1210 0010 1217 6E10 1120 0010 10C0" /* ........n.. ... */ + $"0010 1000 0010 1000 0010 1000 0010 1000" /* ................ */ + $"0010 1000 0010 1000 0010 1000 0010 1FFF" /* ............... */ + $"FFF0 0000 0000 0000 0003 0000 FFFF FFFF" /* .......... */ + $"FFFF 0001 5555 5555 5555 0002 CCCC CCCC" /* ..UUUUUU.. */ + $"CCCC 0003 0000 0000 0000 03FF FFFF FFF4" /* ......... */ + $"0000 0300 0000 003D 0000 0300 0000 003B" /* .......=.......; */ + $"4000 0300 0000 0032 D000 0300 0000 0030" /* @......2......0 */ + $"B400 0300 0000 0032 AD00 0300 0000 003F" /* ......2......? */ + $"FF00 0300 0000 0005 5700 0300 0000 000A" /* .......W...... */ + $"AB00 0300 0000 0000 0B00 0302 F800 0000" /* .............. */ + $"0B00 030B 5E00 0000 0B00 030D F900 0000" /* ....^.......... */ + $"0B00 0305 F93F 3C7C 0B00 030B AE0A 8A2A" /* ....?<|....Š* */ + $"0B00 0302 5800 0000 0B00 0300 0000 0000" /* ....X........... */ + $"0B00 0300 0000 0000 0B00 0302 5800 0000" /* ............X... */ + $"0B00 0309 0600 0000 0B00 0304 2900 0000" /* ...........)... */ + $"0B00 0304 A93F 3CFC 0B00 0309 A60A 8A2A" /* ....?<...ƦŠ* */ + $"0B00 0302 7800 0000 0B00 0300 0000 0000" /* ....x........... */ + $"0B00 0300 0000 0000 0B00 0300 0000 0000" /* ................ */ + $"0B00 0300 0000 0000 0B00 0300 0000 0000" /* ................ */ + $"0B00 0300 0000 0000 0B00 032A AAAA AAAA" /* ...........* */ + $"AB00 03FF FFFF FFFF FF00" /* ... */ +}; + +data 'cicn' (132) { + $"0000 0000 8020 0000 0000 0020 0020 0000" /* .... ..... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0008 0001 0008 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 0000 0000 007F FC00 01FF FF00 03FF" /* ............ */ + $"FF80 07FF FFC0 0FFF FFE0 1FFF FFF0 3FFF" /* ...? */ + $"FFF8 7FFF FFFC 7FFF FFFC 7FFF FFFC FFFF" /* ... */ + $"FFFE FFFF FFFE FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFFF FFFE 7FFF FFFE FFFF FFFF FFFF FFFF" /* . */ + $"FFFF FFFF FFFF FFFF FFFE 7FFF FFFE 7FFF" /* .. */ + $"FFFC 7FFF FFFC 3FFF FFF8 1FFF FFF0 0FFF" /* .?.. */ + $"FFE0 07FF FFC0 03FF FF80 01FF FF00 007F" /* ...... */ + $"FC00 0000 0000 007F FC00 01F0 3F00 03C0" /* .........?.. */ + $"0780 0740 03C0 0E00 0560 1C20 0230 3A00" /* ..@....`. .0:. */ + $"0458 7510 08BC 6A80 111C 7548 227C E08F" /* .Xu..j..uH"| */ + $"C4FE F55F FBEE FFFC 57FF DDFB BF7F FFD7" /* _W. */ + $"DBFF EFF6 5FEF FFB6 D7FF FDFB BF77 FFD4" /* _w */ + $"7FFF EFBF F55F FE47 E2AE 7C8A 055E 7110" /* ._G|.^q. */ + $"42AC 7A24 015C 3440 20B8 1888 0078 0D40" /* Bz$.\4@ ..x.@ */ + $"10F0 0790 01FC 03C0 07FE 01F8 1FFF 007F" /* ......... */ + $"FFFF 0000 0000 0000 0012 0000 FFFF FFFF" /* .......... */ + $"FFFF 0001 CCCC CCCC CCCC 0002 FFFF FFFF" /* .... */ + $"CCCC 0003 FFFF CCCC FFFF 0004 CCCC FFFF" /* .... */ + $"FFFF 0005 CCCC CCCC FFFF 0006 9999 FFFF" /* .... */ + $"FFFF 0007 9999 9999 CCCC 0008 6666 6666" /* ....ffff */ + $"9999 0009 EEEE EEEE EEEE 000A DDDD DDDD" /* .. */ + $"DDDD 000B BBBB BBBB BBBB 000C AAAA AAAA" /* .... */ + $"AAAA 000D 8888 8888 8888 000E 5555 5555" /* ....UUUU */ + $"5555 000F 4444 4444 4444 0010 2222 2222" /* UU..DDDDDD.."""" */ + $"2222 0011 1111 1111 1111 00FF 0000 0000" /* ""............. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0010 1010 100F" /* ................ */ + $"0F0F 0F0F 1010 1010 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0010 100F 0F0D 0C0B" /* ................ */ + $"0101 010B 0C0D 1110 1010 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 100F 0F0C 010A 090A" /* ............. */ + $"0A0A 0A0A 0A01 0B0B 1110 1000 0000 0000" /* ........... */ + $"0000 0000 0000 0010 0F0D 0B09 0000 090A" /* ............. */ + $"0A0A 0A0A 010A 0A0A 010C 1110 0000 0000" /* ......... */ + $"0000 0000 0000 100F 0B02 0A00 0000 0009" /* .............. */ + $"0A0A 0A01 0A0A 0A0A 090A 0B11 1000 0000" /* ....... */ + $"0000 0000 0010 0F0A 0209 0200 0000 0009" /* ............. */ + $"0A0A 0A0A 010A 0A09 0A00 0A0B 1110 0000" /* ....... */ + $"0000 0000 100F 0B02 0A02 0902 0000 0000" /* .............. */ + $"090A 0A01 0A0A 090A 000A 000A 0B11 1000" /* ....... */ + $"0000 0010 0F0D 040A 020A 0209 0200 0000" /* ............. */ + $"090A 0A0A 010A 0A09 0A00 0A00 0A0C 1110" /* ...... */ + $"0000 0010 0F0B 0604 0A02 0A02 0902 0000" /* ............. */ + $"090A 0A01 0A0A 090A 000A 000A 0901 1110" /* ...... */ + $"0000 000F 0D0A 0406 0406 020A 0209 0200" /* ............. */ + $"000A 010A 0A09 0A00 0A09 0A09 0A0A 0C11" /* ..... */ + $"0000 100F 0C04 0A04 0604 0602 0902 010D" /* .............. */ + $"0D0D 0D0C 090A 000A 090A 090A 0A05 0B11" /* ........ */ + $"1000 100F 0B05 040A 0406 0406 0201 0B0B" /* ............... */ + $"0B0B 0B0B 0B01 0A09 0A0A 050A 0505 0111" /* ........... */ + $"1000 0F0D 0505 0505 0A0A 0A06 010B 0B0B" /* ............. */ + $"0B0B 0B0A 000B 090A 0A05 0A05 0305 030D" /* ........... */ + $"1110 0F07 0505 0505 0505 0A0A 0C0B 0B0B" /* .............. */ + $"0E0E 0E00 0A0B 0C0A 0503 0503 0503 0507" /* .............. */ + $"1110 0F07 0505 0505 0505 0505 0D0B 0B0E" /* ................ */ + $"0F0F 0F0D 0B0B 0D05 0305 0305 0305 0507" /* ................ */ + $"1110 0F07 0505 0505 0503 0503 0D0B 0B0E" /* ................ */ + $"0F00 000D 0B0B 0D03 0503 0505 0505 0507" /* ................ */ + $"1110 0F07 0305 0305 0305 0305 0D0B 010E" /* ................ */ + $"0F00 0F0D 0B0B 0D05 0505 0505 0505 0507" /* ................ */ + $"1110 0F07 0503 0503 0505 050A 0C0B 0A00" /* .............. */ + $"0D0D 0D0B 0B0B 0C0A 0A05 0505 0505 050D" /* .............. */ + $"1110 0F0D 0505 0505 0A05 0A0A 090A 000A" /* .......... */ + $"0B0B 0B0B 0B0B 0106 040A 0A0A 0505 0508" /* ............. */ + $"1110 100F 0B05 0A0A 050A 0A09 0A01 0B0B" /* .......... */ + $"0B0B 0B0B 0B01 0A02 0604 0604 0A04 0B11" /* .............. */ + $"1010 100F 0C0A 050A 090A 090A 000A 0C0D" /* ......... */ + $"0D0D 0D0C 0909 020A 020A 0406 040A 0C11" /* ........... */ + $"1000 000F 0D0A 0A09 0A09 0A00 0A09 0A01" /* ....... */ + $"0B01 0A09 0002 0902 0A02 0A04 0604 0D11" /* ........... */ + $"1000 0010 0F01 090A 000A 000A 090A 0A01" /* ......... */ + $"010B 0A09 0000 0009 020A 040A 040A 1110" /* .......... */ + $"0000 0010 0F0B 0A00 0A00 0A09 0A0A 0101" /* .......... */ + $"0B01 0A09 0000 0002 0902 0A04 0A0D 1110" /* ........... */ + $"0000 0000 100F 0B0A 000A 000A 090A 0101" /* ........... */ + $"010B 0A0A 0900 0000 0209 020A 0D11 1000" /* ........... */ + $"0000 0000 0010 0F0B 0A00 0A09 0A01 0101" /* ............ */ + $"0B01 0A0A 0900 0000 0002 0A0D 1110 1000" /* ............ */ + $"0000 0000 0000 100F 0B0A 090A 0A01 0101" /* ............ */ + $"010B 010A 0900 0000 000A 0D11 1010 0000" /* ............. */ + $"0000 0000 0000 0010 0F0B 010A 0101 0101" /* ............... */ + $"0B01 010A 0900 0000 0A0D 1110 1010 1010" /* ............. */ + $"0000 0000 0000 0000 100F 0F0D 0B01 0101" /* ................ */ + $"010B 010A 0909 0C0D 11FF 1010 1010 1010" /* ............ */ + $"1000 0000 0000 0000 0010 100F 0F0D 0C0B" /* ................ */ + $"0101 0B0C 0D10 FF11 1010 1010 1010 1010" /* ............... */ + $"1010 0000 0000 0000 0000 0010 1010 1010" /* ................ */ + $"1010 FFFF FF10 1010 1010 1010 1010 1010" /* ............. */ + $"1010" /* .. */ +}; + +data 'cicn' (133) { + $"0000 0000 8010 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0004 0001 0004 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 0000 0000 007F FC00 01FF FF00 03FF" /* ............ */ + $"FF80 07FF FFC0 0FFF FFE0 1FFF FFF0 3FFF" /* ...? */ + $"FFF8 7FFF FFFC 7FFF FFFC 7FFF FFFC FFFF" /* ... */ + $"FFFE FFFF FFFE FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFFF FFFE 7FFF FFFE FFFF FFFF FFFF FFFF" /* . */ + $"FFFF FFFF FFFF FFFF FFFE 7FFF FFFE 7FFF" /* .. */ + $"FFFC 7FFF FFFC 3FFF FFF8 1FFF FFF0 0FFF" /* .?.. */ + $"FFE0 07FF FFC0 03FF FF80 01FF FF00 007F" /* ...... */ + $"FC00 0000 0000 007F FC00 01FF FF00 03FF" /* ........... */ + $"FF80 07F0 0FC0 0F80 03E0 1E20 03F0 3E00" /* ..... .>. */ + $"07F8 7D10 0FBC 7A80 1F1C 7548 3E7C E08F" /* .}..z..uH>| */ + $"FCFE F55F FBEE FFFC F7FF FDFB FF7F FFD7" /* _. */ + $"DBFF EFF7 DFEF FFBF D7FF FDFF BF77 FFFC" /* w */ + $"7FFF EFFF F55F FEF7 E2AE 7DEA 055E 73D0" /* ._}.^s */ + $"42BC 7FA4 017C 3F40 20F8 1E88 00F8 0FC0" /* B..|?@ ... */ + $"13F0 07F0 1FFC 03FF FFFE 01FF FFFF 007F" /* ....... */ + $"FFFF 0000 0000 0000 000F 0000 FFFF FFFF" /* .......... */ + $"FFFF 0001 CCCC CCCC CCCC 0002 FFFF FFFF" /* .... */ + $"CCCC 0003 FFFF CCCC FFFF 0004 CCCC FFFF" /* .... */ + $"FFFF 0005 CCCC CCCC FFFF 0006 9999 FFFF" /* .... */ + $"FFFF 0007 EEEE EEEE EEEE 0008 DDDD DDDD" /* .... */ + $"DDDD 0009 BBBB BBBB BBBB 000A AAAA AAAA" /* .ƻ.ª */ + $"AAAA 000B 8888 8888 8888 000C 5555 5555" /* ....UUUU */ + $"5555 000D 4444 4444 4444 000E 2222 2222" /* UU..DDDDDD.."""" */ + $"2222 000F DDDD 0000 0000 0000 0000 0000" /* ""............ */ + $"0000 0000 0000 0000 0000 0000 0000 0EEE" /* ............... */ + $"FFFF FFFF EE00 0000 0000 0000 000E EFFF" /* ......... */ + $"FFFF FFFF FFFE 0000 0000 0000 00EF FFFF" /* ....... */ + $"FFFF FFFF FFFF F000 0000 0000 0EFF FFFF" /* ...... */ + $"7888 8818 FFFF FF00 0000 0000 EFFF FF00" /* x....... */ + $"0788 8188 88FF FFF0 0000 000E FFFF 2000" /* ..... . */ + $"0788 8818 878F FFFF 0000 00EF FFF2 7200" /* .....r. */ + $"0078 8188 78FF FFFF F000 0EFF FF28 2720" /* .xx..(' */ + $"0078 8818 8FFF F0FF FF00 0EFF F482 8272" /* .x...r */ + $"0078 8188 FFFF 087F FF00 0FFF F646 2827" /* .x....F(' */ + $"2008 188F FFF7 878F FFF0 EFFF 8464 6272" /* ..dbr */ + $"1BBB BAFF FF78 7885 FFF0 EFFF 4846 4621" /* .xxHFF! */ + $"9999 9FFF F788 5855 FFF0 FFF5 5588 8619" /* XUU. */ + $"9999 FFFF 7885 8535 3FFF FFF5 5555 88A9" /* x5?UU */ + $"99CF FFF9 A853 5353 5FFF FFF5 5555 55B9" /* SSS_UUU */ + $"9CFF FF99 B535 3535 5FFF FFF5 5553 53B9" /* 555_USS */ + $"9FFF FB99 B353 5555 5FFF FFF5 3535 35B9" /* SUU_555 */ + $"FFFF DB99 B555 5555 5FFF FFF3 5355 58AF" /* ۙUUU_SUX */ + $"FFFB B999 A885 5555 5FFF FFF5 5585 88FF" /* UU_U */ + $"FF99 9999 1648 8855 5FFF EFFF 8858 8FFF" /* .HU_X */ + $"F999 9991 8264 6484 FFFE EFFF 5878 FFFF" /* ddXx */ + $"ABBB BA77 2828 4648 FFF0 0FFF F78F FFF7" /* w((FH. */ + $"8191 8702 7282 846F FFF0 0EFF F8FF FF78" /* .ro.x */ + $"8119 8700 0728 484F FF00 0EFF FFFF F788" /* ...(HO.. */ + $"1191 8700 0272 84FF FF00 00EF FFFF 0878" /* ...r...x */ + $"1119 8870 0027 2FFF F000 000E FFFF 8781" /* ..p.'/... */ + $"1191 8870 0002 FFFF E000 0000 EFFF FF81" /* .p..... */ + $"1119 1870 00FF FFFE 0000 0000 0EFF FFFF" /* ...p...... */ + $"1191 1870 FFFF FFEE EE00 0000 00EF FFFF" /* ..p.... */ + $"FFFF FFFF FFFF FEEE EEE0 0000 000E EFFF" /* .... */ + $"FFFF FFFF FFFE EEEE EEEE 0000 0000 0EEE" /* ..... */ + $"FFFF FFFF EEEE EEEE EEEE" /* */ +}; + +data 'cicn' (142) { + $"0000 0000 8010 0000 0000 0020 0020 0000" /* .......... . .. */ + $"0000 0000 0000 0048 0000 0048 0000 0000" /* .......H...H.... */ + $"0004 0001 0004 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0004 0000 0000 0020 0020" /* ............. . */ + $"0000 0000 0004 0000 0000 0020 0020 0000" /* ........... . .. */ + $"0000 0000 0000 211E 79E0 2120 4110 2120" /* ......!.y! A.! */ + $"4110 211C 79E0 2102 4180 2102 4160 1E3C" /* A.!.y!.A!.A`.< */ + $"7910 0000 0000 0000 0000 0000 0004 0000" /* y............... */ + $"0038 0000 0040 0000 0080 0000 0100 0000" /* .8...@......... */ + $"0100 7FFF FFFC 7FFF FFFC 7FFF FFFC 7FFF" /* ...... */ + $"FFFC 7FFF FFFC 7FFF FFFC 7FFF FFFC 7FFF" /* .... */ + $"FFFC 7FFF FFFC 7FFF FFFC 7FFF FFFC 7FFF" /* .... */ + $"FFFC 7FFF FFFC 7FFF FFFC 0000 0000 0000" /* ........ */ + $"0000 0000 0000 211E 79E0 2120 4110 2120" /* ......!.y! A.! */ + $"4110 211C 79E0 2102 4180 2102 4160 1E3C" /* A.!.y!.A!.A`.< */ + $"7910 0000 0000 0000 0000 0000 0004 0000" /* y............... */ + $"0038 0000 0040 0000 0080 0000 0100 0000" /* .8...@......... */ + $"0100 7FFF FFFC 4000 0004 5555 5454 4000" /* ...@...UUTT@. */ + $"0004 4000 0004 5555 5554 4AAA 88A4 5555" /* ..@...UUUTJUU */ + $"5554 4AAA 80A4 5555 4154 4AAA 88A4 55FD" /* UTJUUATJU */ + $"5554 4000 0004 7FFF FFFC 0000 0000 0000" /* UT@.......... */ + $"0000 0000 0000 0000 0004 0000 FFFF FFFF" /* ............ */ + $"FFFF 0001 FFFF FFFF CCCC 0002 7777 7777" /* ....wwww */ + $"7777 0003 8888 8888 8888 000F 0000 0000" /* ww........ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 00F0 000F 000F FFF0 0FFF F00F FFF0" /* ......... */ + $"0000 00F0 000F 00F0 0000 0F00 000F 000F" /* .............. */ + $"0000 00F0 000F 00F0 0000 0F00 000F 000F" /* .............. */ + $"0000 00F0 000F 000F FF00 0FFF F00F FFF0" /* .......... */ + $"0000 00F0 000F 0000 00F0 0F00 000F F000" /* ............. */ + $"0000 00F0 000F 0000 00F0 0F00 000F 0FF0" /* ............. */ + $"0000 000F FFF0 00FF FF00 0FFF F00F 000F" /* .......... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0200 0000 0000 0000 0000 0000 0000 0022" /* ..............." */ + $"2000 0000 0000 0000 0000 0000 0000 0200" /* ............... */ + $"0000 0000 0000 0000 0000 0000 0000 2000" /* .............. . */ + $"0000 0000 0000 0000 0000 0000 0002 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0002 0000" /* ................ */ + $"0000 0333 3333 3333 3333 3333 3333 3333" /* ...3333333333333 */ + $"3300 0300 0000 0000 0000 0000 0000 0000" /* 3............... */ + $"0300 030F 1F1F 1F1F 1F1F 1F1F 1F11 1F1F" /* ................ */ + $"1300 0301 1111 1111 1111 1111 1111 1111" /* ................ */ + $"1300 0301 1111 1111 1111 1111 1111 1111" /* ................ */ + $"1300 030F 1F1F 1F1F 1F1F 1F1F 1F1F 1F1F" /* ................ */ + $"1300 0301 F1F1 F1F1 F1F1 F111 F111 F1F1" /* ...... */ + $"1300 030F 1F1F 1F1F 1F1F 1F1F 1F1F 1F1F" /* ................ */ + $"1300 0301 F1F1 F1F1 F1F1 F111 1111 F1F1" /* ....... */ + $"1300 030F 1F1F 1F1F 1F1F 1F11 111F 1F1F" /* ................ */ + $"1300 0301 F1F1 F1F1 F1F1 F111 F111 F1F1" /* ...... */ + $"1300 030F 1F1F FFFF FF1F 1F1F 1F1F 1F1F" /* ............. */ + $"1300 0301 1111 1111 1111 1111 1111 1111" /* ................ */ + $"1300 0333 3333 3333 3333 3333 3333 3333" /* ...3333333333333 */ + $"3300 0000 0000 0000 0000 0000 0000 0000" /* 3............... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000" /* .. */ +}; + +data 'ALRT' (200, "Quit") { + $"0042 006A 00D0 01DC 00C8 4444 300A" /* .B.j...DD0 */ +}; + diff --git a/bochs/build/macosx/diskimage.pl b/bochs/build/macosx/diskimage.pl new file mode 100755 index 00000000..b8485756 --- /dev/null +++ b/bochs/build/macosx/diskimage.pl @@ -0,0 +1,117 @@ +#!/usr/bin/perl + +# +# +# Copyright (C) 1991-2002 and beyond by Bungie Studios, Inc. +# and the "Aleph One" developers. +# +# This program 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. +# +# 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. +# +# This license is contained in the file "COPYING", +# which is included with this source code; it is available online at +# http://www.gnu.org/licenses/gpl.html +# +# + +my $fullfolderPath = shift(@ARGV); +die "err: No folder specified" unless defined($fullfolderPath) && length($fullfolderPath); + +$fullfolderPath =~ s{/$}{}; +$fullfolderPath =~ m{([^/]+)$}; + +local $folderName = $1; +local $folderSize = undef; +local $imageName = "'$fullfolderPath.dmg'"; +local $imageSectors = undef; +local $imageTemp = "'$fullfolderPath-tmp.dmg'"; + +local $mount_point = "bochs-image-mount"; + +die "err: $folderName is not a directory\n" if(!-d $fullfolderPath); + +# Know a better way to get the first value from du? +($folderSize) = split(m/ /, `du -s "$fullfolderPath"`); +die "err: du failed with $?\n" if($?); + +# Inflate $folderSize for disk image overhead. Minimum 5 MB disk +local $fiveMBImage=20*(2048); +# BBD: I had to raise this to 20meg or the ditto command would run +# out of disk space. Apparently the technique of measuring the +# amount of space required is not working right. + +$imageSectors = $folderSize + int($folderSize * 0.15); +if($imageSectors < $fiveMBImage) +{ + $imageSectors = $fiveMBImage; +} +print "Minimum sectors = $fiveMBImage\n"; +print "Folder sectors = $folderSize\n"; +print "Image sectors = $imageSectors\n"; + +# Create image, overwriting prior version +`hdiutil create -ov -sectors $imageSectors $imageTemp`; +die "err: hdiutil create failed with $?\n" if($?); + +# Initialize the image +local $hdid_info=`hdid -nomount $imageTemp`; +die "err: hdid -nomount failed with $?\n" if($?); + +$hdid_info =~ s/( |\t|\n)+/~!/g; +local (@hdid_info) = split(m/~!/, $hdid_info); + +local ($disk_dev, $hfs_dev); + +$disk_dev = $hdid_info[0]; +$hfs_dev = $hdid_info[4]; +$mount_dev = $hdid_info[4]; + +$disk_dev =~ s{/dev/}{}; +$hfs_dev =~ s/disk/rdisk/; + +`newfs_hfs -v "$folderName" $hfs_dev`; +if($?) +{ + local $err = $?; + `hdiutil eject $disk_dev`; + die "err: newfs_hfs failed with $err\n"; +} + +# Fill the image + +`mkdir $mount_point`; +`/sbin/mount -t hfs $mount_dev $mount_point`; +if($?) +{ + local $err = $?; + `hdiutil eject $disk_dev`; + die "err: mount failed with $err\n"; +} + +`ditto -rsrcFork "$fullfolderPath" $mount_point`; +if($?) +{ + local $err = $?; + `umount $mount_dev`; + `hdiutil eject $disk_dev`; + `rmdir $mount_point`; + die "err: ditto failed with $err\n"; +} +`umount $mount_dev`; +`hdiutil eject $disk_dev`; +`rmdir $mount_point`; + +# Create the compressed image +`hdiutil convert $imageTemp -format UDCO -o $imageName`; +die "err: hdiutil convert failed with $?\n" if($?); + +`rm $imageTemp`; + +print "$imageName is your new diskimage\n"; diff --git a/bochs/build/macosx/make-dmg.sh b/bochs/build/macosx/make-dmg.sh new file mode 100755 index 00000000..8ba5ef9a --- /dev/null +++ b/bochs/build/macosx/make-dmg.sh @@ -0,0 +1,99 @@ +#!/bin/sh +# +# $Id$ +# +# Make a DMG of Bochs. This script must be run from the main source +# directory, e.g. "./build/macosx/make-dmg.sh". If you haven't run +# configure yet, it runs .conf.macosx for you. Then it creates a +# temporary directory _dmg_top and does a make install into that +# directory, and builds a disk image. At the end it cleans up the +# temporary directory. +# + +VERSION=@VERSION@ # substituted in with configure script +VERSION=2.0.pre4 +BUILDROOT=./_dmg_top +INSTALL_PREFIX=$BUILDROOT/Bochs-${VERSION} +DMG=./Bochs-${VERSION}.dmg + +# test if we're in the right directory. if not, bomb. +echo '-- Is the script run from the right directory?' +if test -f main.cc -a -f bochs.h; then + echo yes +else + echo no + echo ERROR: Run it from the top of the Bochs source tree, where bochs.h is found. + exit 10 +fi + +# test if configure has been run already. if not, run .conf.macosx. +configured=0 +echo '-- Has configure been run already?' +if test -f config.h -a -f Makefile; then + echo yes +else + echo no. I will run .conf.macosx now. + /bin/sh -x .conf.macosx + conf_retcode=$? + configured=1 + if test "$conf_retcode" != 0; then + echo ERROR: configure failed. Correct errors in .conf.macosx and try again. + exit 20 + fi +fi + +# remove any leftovers from previous image creation. +echo "-- Removing leftovers from previous runs" +rm -rf ${BUILDROOT} ${BUILDROOT}.dmg ${DMG} + +# make new buildroot directory +echo "-- Making ${BUILDROOT} directory" +mkdir ${BUILDROOT} && mkdir ${INSTALL_PREFIX} +if test $? != 0; then + echo ERROR: mkdir ${BUILDROOT} or mkdir ${INSTALL_PREFIX} failed + exit 30 +fi + +# run make and then make install into it +echo "-- Running make" +make +if test $? != 0; then + echo ERROR: make failed + exit 40 +fi + +echo "-- Running make install with prefix=${INSTALL_PREFIX}" +make install prefix=${INSTALL_PREFIX} +if test $? != 0; then + echo ERROR: make install with prefix=${INSTALL_PREFIX} failed + exit 50 +fi + +# create new disk image +echo "-- Making a disk image with root at ${BUILDROOT}, using diskimage.pl" +./build/macosx/diskimage.pl ${BUILDROOT} +if test $? != 0; then + echo ERROR: diskimage.pl script failed + exit 60 +fi + +if test ! -f ${BUILDROOT}.dmg; then + echo ERROR: diskimage.pl succeeded but I cannot find the image ${BUILDROOT}.dmg. + exit 70 +fi + +# rename to the right thing +echo "-- Renaming the output disk image to ${DMG}" +mv ${BUILDROOT}.dmg ${DMG} +if test $? != 0; then + echo ERROR: rename failed + exit 80 +fi + +echo "-- Done! The final disk image is " +ls -l ${DMG} + +echo "-- Cleaning up the temporary files in ${BUILDROOT}" +rm -rf ${BUILDROOT} + +exit 0 diff --git a/bochs/build/macosx/pbdevelopment.plist b/bochs/build/macosx/pbdevelopment.plist new file mode 100644 index 00000000..c42c04ab --- /dev/null +++ b/bochs/build/macosx/pbdevelopment.plist @@ -0,0 +1,8 @@ + + + + + PBXProjectSourcePath + /Users/bryce/bochs/bochs/bochs.pbproj + + diff --git a/bochs/build/macosx/script.data b/bochs/build/macosx/script.data new file mode 100755 index 0000000000000000000000000000000000000000..d07649a6788e877876d1ed742279bc4692e47a9e GIT binary patch literal 13780 zcmeHOe{56N6+VtlJ+pE2uYUmhf@M`N?-x9kd16*8`JZP{gOQ8+0T1^ z0f#x{g&$Qb(#lmqz{F^nXarKUp{<&>c0W=HRhxviPGgg{^$(^>)3j0vsiR`FYxbS@ zt{o>hZl|$-rgzEVe(&Dzo^$TG=h?~e^M~);`85$OgK#T@R1qz%M1K( zRp@PBZK6eN(rJi*v?(MV4tz%seK;R!$HV&nXMosN)oZS-NBkXro>wD{_Y$jGV?io&*O1!aC z?KNa$xN*B7$CU%RF_>!HsvF84#n`V#l~hAtZoKg;ijh+FM5?iE4g-qO*v3XkRqL&b zowNyvZRC7`KaRPECmP_F+KYK7xdzZLhj3m+?y*l$X*W*ZX$b6iUqs(j%CCymj|OOs z^=ug}^H+o^cCqcBJ_?fO{60TfSPW%rd;#k)QQOf+mcG(@=QmZ>4_^N2hcnzpkB&YN zx;gVNvM+BgeQMfMeft&O+s)=a&kY|IqJn1yUtHPxL-QgtXws z{%8>Phuw^Qgg@K$p#)xVkbeu9fdjJ~D13hu|2d6qU52o&JCJ*}_uYF+-zKy3u=?>E z`?thI zH`dF)E3n=xki8}J?opychH4HMSDl-Ml8@2Yt_fkgk3qCjcI{W2t$LzQ?H@8q+>Fj^ z{Tw1x=NsD$LD(kaIj_eD8$OGFkL6#(FrRDuzFP%4zh|r_YW^i|4}RZS4C#gxHvT=4 z<-x+ixwx6v)Xa`GG34JVRzl!cGwbH{{QJ&j2)}gI;fK%3ZEghI2)Ge&Bj85Bjer{g zHv(=1+z7Z4a3k=47Jg`KfOL?i0g z)Ajg^9Gtx^m~RQAfQ4(}LtUn#`+LBR;qQ`v-BznePzf` z9{B0E@K-w9$yStij!wRvwjR#w3mmK}AldprkD=~ zLp2n}SUYUC=kh6R=Lw~GY-}y(H2Ey}nSno;>ns@OGtP+djXcge*amWnb#~x7kVPH| z%=uJ@9IJ-^4>F(ihnQ1C?Ym}X5GPM=e=98L5&6fuSy!dFuFhRshp1!D+2gu{%ATJS z8^mLw*yQeUtZ8xX3GYu~#}9w_Y{CWh!V@^B9`bFeLtcc(_+FxFUSp|VeqH#zz$WlZ z3)yc8+OI`^&M$tA$;#9o!u@&KLr;#k~RRxzEj{xE{j?qDEZm8%jh|1>^Fd zBE=L<9#&#Z8qyR=O{k_SYwAJ8kfO4tF`aq_l;EIZBor-}8cHU0!wmN6M$p7?Y&apu z)o4&t6JP|@R4}2N!K9(2l!O^H^`J4701@L!L+{6DRSoyUU+j&~V`QLga`PZxdnd<^ zdv1(8mf+M2PJIbZrQlR9 z%%K|&hi;VMTos(FB{)-pGgX2!E;!>QIGW&S%;7wlZT#7I(^0$&j1#R-60N(Dr5(X6 zow}Z-G03S%mJWxrbbKO9>#c10%DOC_1U??g(y>VP)7p4;&A}@Z^v3iA1@=KsPf$%} zR(~N{cct*k#cl-L2)Ge&Bj85Bjer{gHv(=1+z7Z4a3kPGz>UEFE&`XR3FWeNSJ1B! zeNgl$pV{N>q7RF{RrDxf+4CDk-z0jJ9r%{|`1vo;@LaRNKH%j7R{{r7 zCIbgQc2Z1Mm-xc@*N^wgBz6jhP z@Dy;jz?XqdfnNqbDg5*UpA+Lh2LApM@_4xJ0sOj+Q3nBja|xAsxNZVG158dWq%7dz zz&?~IKjUx?hkEPoNz=s6p@e2+<$>UdTj2aB^@0{^d*Ma}+;A6~x3mA6a zmb>Hlsf(`u+IsfW*~HR5}&l_<*FO@rb9XNCS!-Q}DfrsBA`gG^!-|5opPf z)fA{jhw)7i*(^ONsWDVf@dPPUXnJ%|k~JCSTSG}|7>emqT!uLmTGhT`6maF3IsCbT}>tVC`j6!R1)nrG`ez literal 0 HcmV?d00001 diff --git a/bochs/build/macosx/script.r b/bochs/build/macosx/script.r new file mode 100644 index 00000000..97288b47 --- /dev/null +++ b/bochs/build/macosx/script.r @@ -0,0 +1,2712 @@ +data 'scsz' (0) { + $"4000 0000 0000 0000 0000 0000 0000 0000" /* @............... */ + $"0000 0000 0000 0000 0000" /* .......... */ +}; + +data 'icns' (150) { + $"6963 6E73 0000 9D63 4943 4E23 0000 0108" /* icns..cICN#.... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 F000 0000 F000" /* .............. */ + $"0003 F800 0003 F000 000F F000 001F E000" /* ............ */ + $"002F F000 003F F800 00FF FC00 00FF FE00" /* ./..?..... */ + $"00FF FF00 007F FF80 00BF FF80 003F FF80" /* ......? */ + $"001F FF00 003F FF00 01FF FF80 03FF FFF0" /* ....?... */ + $"1FFF FFFC 3FFF FFFE 1FFF FFF8 07FF FFF4" /* .?.. */ + $"03FF FFE0 00FF FF80 007F FE40 001F FD00" /* ....@... */ + $"000F F000 0003 D000 0001 A000 0000 0000" /* ............. */ + $"696C 3332 0000 0739 AD00 040D 282F 1803" /* il32...9...(/.. */ + $"9700 0615 69AF C7A4 3902 9500 0715 6EC8" /* ...iǤ9....n */ + $"DEEB F58E 0D94 0008 156E C9DB EEF0 E9A0" /* ....n */ + $"1693 0009 166E C9DB EFF2 E6D1 7B0E 9200" /* ...n{.. */ + $"0A15 6EC9 DBEF F1E8 CC9B 3102 9100 0A15" /* .n̛1... */ + $"6EC9 DBEF F1E9 C8B7 610A 9100 0C15 6DCC" /* nȷa‘...m */ + $"DAEF F2E9 CAB3 BEA2 3D05 8F00 0E11 579C" /* ʳ=....W */ + $"BFF4 F1E9 CAB4 BCC1 CDA9 3F05 8D00 100A" /* ʴͩ?... */ + $"4B76 5A69 BDEF C9B4 BCC3 C7C8 D6B2 4206" /* KvZiɴֲB. */ + $"8C00 111E 787D 7479 89C8 B4BC C3C7 CBD1" /* ...x}tyȴ */ + $"D2E0 BA45 068B 0012 2385 9489 879C B4BC" /* E...# */ + $"C3C7 CCD1 D6DB DDEB C144 048A 0012 1677" /* D....w */ + $"AB9F 9AB2 BDC2 C7CC D1D6 DBE0 E6E6 F0A1" /* */ + $"1B8A 0012 0335 94B6 B1BD C2C7 CBD1 D6DB" /* ....5 */ + $"E0E5 E9EC DBAF 298B 0011 053B 9DBF C1C7" /* ۯ)...; */ + $"CCD1 D6DB E0E5 E9ED E1C6 921E 8C00 101E" /* ƒ.... */ + $"8AC6 C5CB D1D6 DAE0 E6E9 EDE6 C9AB 4E07" /* ɫN. */ + $"8A00 130C 4188 BEC8 CFD3 D5DB E0E5 E9EE" /* ...A */ + $"E9CE B598 3609 0187 0016 0A2E 71B3 CCC7" /* ε6....q */ + $"C0BB D3DD DEE6 E9ED ECD5 B3B6 CEA9 6F2E" /* ճΩo. */ + $"0A83 007F 020F 3975 B2D5 CEC3 BDB7 B2B4" /* ƒ....9uý */ + $"DBEB E7ED EEDA B9AF CFD1 D5D6 B275 390F" /* ڹֲu9. */ + $"0200 0008 3A84 BEDA D7CF CBBD B0AB ACAC" /* ....:˽ */ + $"8BCB F6EE DFC0 A9B3 BBC5 CFD0 D7DA BD83" /* ڽ */ + $"3A08 0017 84DA D6D0 D5D4 D0C5 B8AB A591" /* :...Ÿ */ + $"7075 D3E9 C5AB 9A98 A2B9 CDD4 D4D0 D4D6" /* puū */ + $"8317 0005 2770 C1DC D3D5 D4D1 CABF A896" /* ...'pʿ */ + $"8575 79C2 B38D 8694 AAC2 D0D4 D3D8 BC6E" /* uy³ؼn */ + $"2705 0000 1C01 0F44 96D7 D8D4 D5D3 D0B6" /* '......Dж */ + $"B49A 8470 938F 7995 B1C5 D0D3 D7D1 9242" /* pyђB */ + $"0F01 8200 1804 2166 BADD D4D5 D1C6 DDC8" /* .....!f */ + $"9A77 7579 9AB8 CBD2 D4DA B563 2004 8500" /* wuyڵc .. */ + $"1601 0C3B 8DD6 DCCE B6D9 EFB1 747E A9C5" /* ...;ζt~ */ + $"D2D5 DBCF 883A 0C01 8800 1203 1B5D B6DF" /* ψ:......] */ + $"BD9B 9F8E 92B9 D0D7 DADF AF5A 1A03 8C00" /* ߯Z... */ + $"0E09 3385 D1D1 B6BF D0D9 DCE4 D281 3209" /* .3Ѷҁ2 */ + $"8F00 0C02 1656 B2EE E3E0 E5E9 AE54 1602" /* ....VT.. */ + $"9200 0807 2F84 E0F6 D77F 2E07 9500 0602" /* .../...... */ + $"1453 9351 1402 9800 0206 1106 8B00 AD00" /* .SQ......... */ + $"040D 272E 1803 9700 0615 66AA C19F 3702" /* ..'......f7. */ + $"9500 0715 6BC3 D7E4 F28A 0D94 0008 156B" /* ...k....k */ + $"C3D4 E7E9 E29B 1593 0009 156B C3D4 E8EB" /* ...k */ + $"E0CB 770D 9200 0A15 6BC3 D5E8 EAE2 C696" /* w...kƖ */ + $"2F02 9100 0A15 6BC3 D4E8 EAE2 C2B2 5E09" /* /...k²^ */ + $"9100 0C14 6AC5 D3E8 EBE3 C4AE B89C 3B05" /* ...jĮ;. */ + $"8F00 0E11 5497 BAED EAE3 C4AF B7BB C7A4" /* ...TįǤ */ + $"3D05 8D00 100A 4A73 5865 B7E8 C3AF B6BD" /* =...JsXeï */ + $"C2C3 CFAD 4005 8C00 111D 7479 7175 85C2" /* ϭ@....tyqu */ + $"AFB6 BDC2 C6CB CCDA B543 068B 0012 2282" /* ڵC..." */ + $"9085 8398 AFB6 BDC2 C6CB D0D5 D6E4 BC42" /* B */ + $"048A 0012 1674 A69A 96AD B8BC C2C6 CBD0" /* ....t */ + $"D5D9 DFDF EA9C 1B8A 0012 0333 90B1 ACB8" /* ....3 */ + $"BCC1 C6CB CFD5 D9DE E3E6 D4AA 288B 0011" /* Ԫ(.. */ + $"0539 98B9 BBC2 C6CB D0D5 D9DF E3E6 DAC1" /* .9 */ + $"8D1D 8C00 101E 88C2 C0C5 CBCF D4DA DFE2" /* .... */ + $"E6DF C3A6 4C07 8A00 130C 4188 BEC8 CBCC" /* æL....A */ + $"CFD5 DADE E2E7 E2C8 B096 3609 0187 0016" /* Ȱ6... */ + $"0A2E 71B3 CCC7 C1BC CFD7 D8DF E3E6 E5CF" /* .q */ + $"ADB3 CFA9 6F2E 0A83 007F 020F 3975 B2D5" /* ϩo.ƒ....9u */ + $"CEC3 BDB7 B2B4 D7E4 E1E6 E8D4 B4AB CFD1" /* ýԴ */ + $"D5D6 B275 390F 0200 0008 3A84 BEDA D7CF" /* ֲu9.....: */ + $"CBBD B0AB ACAC 8AC6 EFE7 D9BB A5B3 BBC5" /* ˽ٻ */ + $"CFD0 D7DA BD83 3A08 0017 84DA D6D0 D5D4" /* ڽ:... */ + $"D0C5 B8AB A590 6C71 CDE2 BFA6 9999 A2B9" /* Ÿlq⿦ */ + $"CDD4 D4D0 D4D6 8317 0005 2770 C1DC D3D5" /* փ...'p */ + $"D4D1 CABF A791 8171 76BD AE8B 8794 AAC2" /* ʿqv */ + $"D0D4 D3D8 BC6E 2705 0000 1C01 0F44 96D7" /* ؼn'......D */ + $"D8D4 D5D3 D0B3 AF95 806D 8F8C 7995 B1C5" /* гmy */ + $"D0D3 D7D1 9242 0F01 8200 1804 2166 BADD" /* ђB.....!f */ + $"D4D5 D1C3 D7C2 9574 7279 9AB8 CBD2 D4DA" /* •try */ + $"B563 2004 8500 1601 0C3B 8DD6 DCCE B6D4" /* c .....;ζ */ + $"E8AB 717E A8C5 D2D5 DBCF 883A 0C01 8800" /* q~ψ:... */ + $"1203 1B5D B6DF BD9A 9D8C 92B9 D0D7 DADF" /* ...]߽ */ + $"AF5A 1A03 8C00 0E09 3385 D1D1 B7C0 D0D9" /* Z....3ѷ */ + $"DCE4 D281 3209 8F00 0C02 1656 B2EE E3E0" /* ҁ2Ə....V */ + $"E5E9 AE54 1602 9200 0807 2F84 E0F6 D77F" /* T...../. */ + $"2E07 9500 0602 1453 9351 1402 9800 0206" /* ......SQ..... */ + $"1106 8B00 AD00 040D 272E 1803 9700 0615" /* ......'...... */ + $"67AC C4A1 3802 9500 0715 6CC5 DAE7 F38C" /* gġ8....l */ + $"0D94 0008 156C C6D7 EAEC E59D 1593 0009" /* ....l.. */ + $"156C C5D7 EBEE E2CD 790E 9200 0A15 6CC6" /* .ly...l */ + $"D7EB EDE4 C998 3002 9100 0A15 6CC5 D7EB" /* ɘ0...l */ + $"EDE5 C5B4 600A 9100 0C15 6BC8 D6EB EEE5" /* Ŵ`‘...k */ + $"C7B0 BB9F 3C05 8F00 0E11 5699 BCF0 EDE5" /* ǰ<....V */ + $"C7B1 B9BE CAA7 3E05 8D00 100A 4B74 5967" /* DZʧ>...KtYg */ + $"BAEB C6B1 B9C0 C4C6 D2AF 4105 8C00 111D" /* ƱүA.... */ + $"767A 7277 86C4 B1B9 BFC4 C9CD CFDD B744" /* vzrwıݷD */ + $"068B 0012 2383 9187 859A B1B9 BFC4 C9CD" /* ...# */ + $"D2D8 D9E7 BE43 048A 0012 1676 A89C 98AF" /* C....v */ + $"BABF C3C9 CDD2 D8DC E2E2 ED9E 1B8A 0012" /* ... */ + $"0334 91B3 AEBA BFC4 C9CD D2D8 DCE1 E6E9" /* .4 */ + $"D7AC 288B 0011 053A 9BBC BEC4 C9CD D2D7" /* ׬(...: */ + $"DCE2 E6E9 DDC3 8F1E 8C00 101E 89C4 C2C8" /* Ï.... */ + $"CDD2 D7DC E2E5 E9E2 C5A8 4D07 8A00 130C" /* ŨM.... */ + $"4188 BEC7 CDCE D1D7 DCE1 E5EA E5CB B297" /* A˲ */ + $"3609 0187 0016 0A2E 71B3 CCC7 C1BC D1DA" /* 6....q */ + $"DBE2 E5E9 E8D2 AFB4 CFA9 6F2E 0A83 007C" /* үϩo.ƒ.| */ + $"020F 3975 B2D5 CEC3 BDB7 B2B4 D8E7 E3E9" /* ..9uý */ + $"EAD7 B6AD CED1 D5D6 B275 390F 0200 0008" /* ׶ֲu9..... */ + $"3A84 BEDA D7CF CBBD B0AB ACAC 8AC8 F2EA" /* :˽ */ + $"DBBD A6B3 BBC5 CFD0 D7DA BD83 3A00 0017" /* ۽ڽ:... */ + $"84DA D6D0 D5D4 D0C5 B8AB A591 6E73 D0E5" /* Ÿns */ + $"C2A8 9A99 A2B9 CDD4 D4D0 D4D6 8300 0005" /* ¨փ... */ + $"2770 C1DC D3D5 D4D1 CABF A893 8373 78BF" /* 'pʿsx */ + $"B08C 8794 AAC2 D0D4 D3D8 BC6E 2780 001C" /* ؼn'.. */ + $"010F 4496 D7D8 D4D5 D3D0 B5B1 9781 6F90" /* ..Dеo */ + $"8D79 95B1 C5D0 D3D7 D192 420F 0182 0018" /* yђB.... */ + $"0421 66BA DDD4 D5D1 C4D9 C497 7574 799A" /* .!fėuty */ + $"B8CB D2D4 DAB5 6320 0485 0016 010C 3B8D" /* ڵc .....; */ + $"D6DC CEB6 D6EB AE72 7EA9 C5D2 D5DB CF88" /* ζr~ψ */ + $"3A0C 0188 0012 031B 5DB6 DFBD 9A9E 8D92" /* :......]߽ */ + $"B9D0 D7DA DFAF 5A1A 038C 000E 0933 85D1" /* ߯Z....3 */ + $"D1B6 BFD0 D9DC E4D2 8132 098F 000C 0216" /* Ѷҁ2Ə.... */ + $"56B2 EEE3 E0E5 E9AE 5416 0292 0008 072F" /* VT...../ */ + $"84E0 F6D7 7F2E 0795 0006 0214 5393 5114" /* .......SQ. */ + $"0298 0002 0611 068B 006C 386D 6B00 0004" /* .......l8mk... */ + $"0800 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"000A 272E 1101 0000 0000 0000 0000 0000" /* .'............. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"1473 CCD8 9324 0100 0000 0000 0000 0000" /* .sؓ$.......... */ + $"0000 0000 0000 0000 0000 0000 0000 0014" /* ................ */ + $"7CF3 FFFF F97B 0800 0000 0000 0000 0000" /* |{.......... */ + $"0000 0000 0000 0000 0000 0000 0000 147E" /* ...............~ */ + $"F4FF FFFF FEA5 1000 0000 0000 0000 0000" /* .......... */ + $"0000 0000 0000 0000 0000 0000 0014 7DF4" /* ..............} */ + $"FFFF FFFF FA7F 0800 0000 0000 0000 0000" /* ........... */ + $"0000 0000 0000 0000 0000 0000 157D F3FF" /* .............} */ + $"FFFF FFFD B029 0100 0000 0000 0000 0000" /* ).......... */ + $"0000 0000 0000 0000 0000 0014 7DF4 FFFF" /* ............} */ + $"FFFF FFED 5D06 0000 0000 0000 0000 0000" /* ]........... */ + $"0000 0000 0000 0000 0000 147D F4FF FFFF" /* ...........} */ + $"FFFF FFFE C23A 0400 0000 0000 0000 0000" /* :.......... */ + $"0000 0000 0000 0000 0014 7EF4 FFFF FFFF" /* ..........~ */ + $"FFFF FFFF FEC2 3A04 0000 0000 0000 0000" /* :......... */ + $"0000 0000 0000 0000 0A73 F3FF FFFF FFFF" /* ........s */ + $"FFFF FFFF FFFE C33A 0400 0000 0000 0000" /* :........ */ + $"0000 0000 0000 0000 27CD FFFF FFFF FFFF" /* ........' */ + $"FFFF FFFF FFFF FEC1 3904 0000 0000 0000" /* 9....... */ + $"0000 0000 0000 0000 2ED9 FFFF FFFF FFFF" /* ......... */ + $"FFFF FFFF FFFF FFFE C037 0200 0000 0000" /* 7...... */ + $"0000 0000 0000 0000 1297 FCFF FFFF FFFF" /* ......... */ + $"FFFF FFFF FFFF FFFF FDA3 1700 0000 0000" /* ...... */ + $"0000 0000 0000 0000 012B ADFD FFFF FFFF" /* .........+ */ + $"FFFF FFFF FFFF FFFF FFD9 2F00 0000 0000" /* /..... */ + $"0000 0000 0000 0000 0002 2BAD FDFF FFFF" /* ..........+ */ + $"FFFF FFFF FFFF FFFF FFBA 1F00 0000 0000" /* ...... */ + $"0000 0000 0000 0000 0000 0646 D5FF FFFF" /* ...........F */ + $"FFFF FFFF FFFF FFFF E554 0500 0000 0000" /* T...... */ + $"0000 0000 0000 0000 0622 61B8 FBFF FFFF" /* ........."a */ + $"FFFF FFFF FFFF FFFE B02D 0601 0000 0000" /* -...... */ + $"0000 0000 0000 0829 6DBC F3FF FFFF FFFF" /* .......)m */ + $"FFFF FFFF FFFF FFFF F9BB 6E29 0800 0000" /* n).... */ + $"0000 0001 0B31 7AC8 F6FF FFFF FFFF FFFF" /* .....1z */ + $"FFFF FFFF FFFF FFFF FFFF F6C8 7A31 0B01" /* z1.. */ + $"0000 0737 86D2 F9FF FFFF FFFF FFFF FFFF" /* ...7 */ + $"FFFF FFFF FFFF FFFF FFFF FFFF F9D2 8637" /* ҆7 */ + $"0700 1CA8 F9FF FFFF FFFF FFFF FFFF FFFF" /* ... */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF F9A9" /* */ + $"1C00 0C51 B8F7 FFFF FFFF FFFF FFFF FFFF" /* ...Q */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFF7 B851" /* Q */ + $"0C00 0109 2E80 DEFE FFFF FFFF FFFF FFFF" /* .... */ + $"FFFF FFFF FFFF FFFF FFFF FFFE DE80 2E09" /* ހ. */ + $"0100 0000 0314 4EAE F4FF FFFF FFFF FFFF" /* ......N */ + $"FFFF FFFF FFFF FFFF FFFF F4AE 4E14 0300" /* N... */ + $"0000 0000 0001 0727 76D6 FDFF FFFF FFFF" /* .......'v */ + $"FFFF FFFF FFFF FFFF FDD6 7627 0701 0000" /* v'.... */ + $"0000 0000 0000 0002 1145 A2F0 FFFF FFFF" /* .........E */ + $"FFFF FFFF FFFF FFF0 A245 1102 0000 0000" /* E...... */ + $"0000 0000 0000 0000 0006 226C CEFC FFFF" /* .........."l */ + $"FFFF FFFF FFFC CE6C 2206 0000 0000 0000" /* l"....... */ + $"0000 0000 0000 0000 0000 020E 3E98 EBFF" /* ............> */ + $"FFFF FFFF EB97 3D0E 0200 0000 0000 0000" /* =......... */ + $"0000 0000 0000 0000 0000 0000 051D 62C4" /* ..............b */ + $"FAFF FAC4 621D 0500 0000 0000 0000 0000" /* b........... */ + $"0000 0000 0000 0000 0000 0000 0001 0C36" /* ...............6 */ + $"8FCF 8F36 0C01 0000 0000 0000 0000 0000" /* Ϗ6............ */ + $"0000 0000 0000 0000 0000 0000 0000 0004" /* ................ */ + $"1838 1804 0000 0000 0000 0000 0000 0000" /* .8.............. */ + $"0069 6373 2300 0000 4800 0000 0000 0000" /* .ics#...H....... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 4001 E001" /* ............@.. */ + $"C007 C007 F00F F007 F807 F00F F83F FE3F" /* ......?? */ + $"FE1F F803 E805 D000 8069 7333 3200 0002" /* ....is32... */ + $"6584 0003 010F 1E09 8900 0412 6295 4703" /* e.....Ɖ...bG. */ + $"8700 0512 6CDA F37E 0986 0006 126C DCEF" /* ...l~Ɔ...l */ + $"C349 0385 0007 0F60 DCF0 CBB4 550A 8400" /* I....`˴U„. */ + $"0906 417C BAD2 B5CA C057 0B83 000A 0B64" /* .A|ҵW...d */ + $"8E96 BDC7 CFDC D154 0582 000A 0440 9FBB" /* T...@ */ + $"C7D1 DBE3 EF88 0D82 000A 0325 8FCC CDDA" /* ...% */ + $"E5EC C960 0880 003E 0418 4A92 C1C0 DFE7" /* `..>..J */ + $"EFD2 BE95 4A18 0408 3E95 C9D1 B3A7 A1E7" /* ҾJ...>ѳ */ + $"E1AB B6D5 C994 3D07 3899 D9D2 C5AD 7894" /* ᫶ɔ=.8ŭx */ + $"AD88 AACF D797 3700 031E 68BE DEC8 C476" /* ח7...hv */ + $"81B2 DBBA 661E 0380 000A 0A3A 8FC9 B69A" /* ۺf...:ɶ */ + $"CDDA 8E39 0A83 0008 0219 5EB7 EDBE 6019" /* ڎ9ƒ....^`. */ + $"0286 0004 0837 7535 0882 0084 0003 010F" /* ....7u5...... */ + $"1D09 8900 0412 5F90 4503 8700 0512 69D4" /* .Ɖ..._E....i */ + $"F07B 0886 0006 1269 D6E8 BD47 0385 0007" /* {....iG... */ + $"0E5D D6E9 C5AF 5209 8400 0905 3F79 B4CC" /* .]ůRƄ..?y */ + $"B0C4 BB55 0A83 000A 0B61 8A92 B8C1 C9D5" /* ĻUƒ..a */ + $"CB51 0582 000A 043E 9BB6 C1CB D4DC E884" /* Q...> */ + $"0D82 000A 0325 8DC7 C7D4 DEE5 C35D 0880" /* ...%]. */ + $"003E 0418 4A92 C1BF D9E0 E8CB BB95 4A18" /* .>..J˻J. */ + $"0408 3E95 C9D1 B3A7 9EE0 DBA7 B7D5 C994" /* ..>ѳۧɔ */ + $"3D07 3899 D9D2 C6AC 7490 A888 AACF D797" /* =.8Ƭtח */ + $"3700 031E 68BE DFC5 BE72 80B2 DBBA 661E" /* 7...hžrۺf. */ + $"0380 000A 0A3A 8FC8 B399 CDDA 8E39 0A83" /* ..:ȳڎ9ƒ */ + $"0008 0219 5EB7 EDBE 6019 0286 0004 0837" /* ....^`.....7 */ + $"7535 0882 0084 0003 010F 1E09 8900 0412" /* u5.......Ɖ... */ + $"6092 4603 8700 0512 6BD7 F27C 0986 0006" /* `F....k|Ɔ.. */ + $"126B D8EB C048 0385 0007 0F5F D9EC C8B1" /* .kH...._ȱ */ + $"530A 8400 0906 407A B6CE B2C7 BD56 0A83" /* S„..@zβǽVƒ */ + $"000A 0B62 8C94 BAC4 CCD8 CE52 0582 000A" /* ..bR.. */ + $"043F 9DB8 C4CD D7DF EB86 0D82 000A 0325" /* .?...% */ + $"8ECA CAD6 E1E8 C55E 0880 003D 0418 4A92" /* ^..=..J */ + $"C1C0 DCE3 EBCE BC96 4A18 0008 3E95 C9D1" /* μJ...> */ + $"B3A7 9FE3 DDA9 B6D5 C994 0807 3899 D9D2" /* ݩɔ..8 */ + $"C5AC 7692 AA88 AACF D797 0700 031E 68BE" /* Ŭvח....h */ + $"DEC6 C174 81B2 DBBA 661E 8100 0A0A 3A8F" /* tۺf..: */ + $"C8B4 99CD DA8E 390A 8300 0802 195E B7ED" /* ȴڎ9ƒ....^ */ + $"BE60 1902 8600 0408 3775 3508 8200 7338" /* `.....7u5..s8 */ + $"6D6B 0000 0108 0000 0000 0000 0001 0F1D" /* mk.............. */ + $"0700 0000 0000 0000 0000 0000 0014 6F9E" /* ..............o */ + $"4002 0000 0000 0000 0000 0000 147E F3FC" /* @............~ */ + $"8307 0000 0000 0000 0000 0014 7EF4 FFE6" /* ...........~ */ + $"4E02 0000 0000 0000 0000 147E F4FF FFEA" /* N..........~ */ + $"5F09 0000 0000 0000 0008 70F3 FFFF FFFF" /* _........p */ + $"E15A 0900 0000 0000 000F 9FFE FFFF FFFF" /* Z....... */ + $"FFE1 5304 0000 0000 0004 4BDB FFFF FFFF" /* S.......K */ + $"FFFE 9E0F 0000 0000 0002 1A8A F9FF FFFF" /* ........ */ + $"FFF6 7208 0000 0003 174F 9FED FFFF FFFF" /* r......O */ + $"FFFC BC4F 1703 0A46 A9EB FEFF FFFF FFFF" /* O..F */ + $"FFFF FEEB A947 0B53 CCFD FFFF FFFF FFFF" /* G.S */ + $"FFFF FFFD CC53 0008 3898 EEFF FFFF FFFF" /* S..8 */ + $"FFFF EE98 3808 0000 0216 5FC5 FBFF FFFF" /* 8....._ */ + $"FBC5 5F16 0200 0000 0000 0630 8DE9 FDE9" /* _........0 */ + $"8D30 0600 0000 0000 0000 0001 1255 B155" /* 0...........UU */ + $"1201 0000 0000 6974 3332 0000 4D55 0000" /* ......it32..MU.. */ + $"0000 FF00 FF00 FF00 FF00 FF00 FF00 B400" /* ......... */ + $"07C1 C1C3 C6CC D3DA E2F3 000B C1BC BABE" /* ... */ + $"C5CB D1D7 DDE4 EAF1 F000 0ECA B7B9 C0C5" /* ..ʷ */ + $"CCD3 D7DD E5EA EEF0 F1F2 ED00 0BCA B6B9" /* ..ʶ */ + $"BFC7 CBD2 D8DD E4EA EE80 F001 F1F2 EB00" /* .. */ + $"0BCF B7B9 BEC5 CBD1 D7DD E4E9 EE82 F000" /* .Ϸ. */ + $"F1EA 000B CAB7 B9C0 C5CC D2D7 DDE4 EAEE" /* ..ʷ */ + $"83F0 01F1 F1E8 000B CAB5 B9C0 C6CC D2D8" /* ...ʵ */ + $"DDE4 EAEE 84F0 01EF EBE7 000B CFB7 B9BE" /* ...Ϸ */ + $"C5CB D0D7 DDE3 E9EE 85F0 02EA E3E3 E500" /* .. */ + $"0BCA B7B9 C0C5 CCD2 D7DE E5EA EE84 F004" /* .ʷ. */ + $"EFEA E2DA D8E4 000B C9B5 B9C0 C6CC D2D8" /* ..ɵ */ + $"DDE5 EAEE 84F0 05EF EAE3 DAD3 D0E3 000B" /* ... */ + $"CEB6 B9BE C5CB D0D7 DDE3 EAEE 84F0 06EF" /* ζ. */ + $"EAE3 DBD3 CBC6 E200 0BCA B7B9 C0C5 CCD2" /* ..ʷ */ + $"D7DE E5E9 EE84 F007 EFEA E1DA D3CB C3C1" /* . */ + $"E100 0BC9 B5B9 C0C6 CCD2 D8DD E5EA EE84" /* ..ɵ */ + $"F008 EFEA E3DA D3CC C4BC C0E0 000B CEB6" /* .ļ..ζ */ + $"B9BF C5CB D1D7 DDE3 EAEE 84F0 09EF EAE3" /* */ + $"DBD3 CCC6 BCB6 BFDF 000B CDB8 B9BF C6CC" /* Ƽ..͸ */ + $"D1D7 DDE4 E9EE 84F0 0AEF EAE3 DBD3 CBC4" /* */ + $"BEB4 B6BE DE00 0BC9 B6B9 BFC5 CCD3 D8DD" /* ..ɶ */ + $"E4EA EE84 F00A EFEA E3DA D3CB C3BC B5AF" /* ü */ + $"B8DE 000B CEB6 B9BF C5CB D2D8 DDE3 EAEE" /* ..ζ */ + $"84F0 0AEF EAE3 DBD3 CCC5 BCB5 ACB6 DE00" /* ż. */ + $"0BCD B8B9 BFC6 CCD1 D7DE E4E9 EE84 F00B" /* .͸. */ + $"EFEA E3DB D3CB C4BD B4AC B6C8 DD00 0BC9" /* Ľ.. */ + $"B6B9 BFC5 CCD3 D7DD E5EA EE84 F00B EFEA" /* . */ + $"E3DA D3CB C3BC B4AB B8D1 DD00 0BCA B5B9" /* ü..ʵ */ + $"BFC5 CBD2 D8DD E4EA EE84 F00B EFEA E3DB" /* . */ + $"D3CC C5BC B5AC B9D1 DD00 0BCD B7B9 BFC6" /* ż..ͷ */ + $"CCD1 D7DE E4E9 EE84 F00B EFE9 E2DB D3CB" /* . */ + $"C4BD B4AC B7D3 DD00 0BC9 B6BA C0C5 CCD3" /* Ľ..ɶ */ + $"D7DD E5EA EE84 F00B EFEA E2DA D3CB C3BC" /* .ü */ + $"B4AC B8D1 DD00 0BCA B5B9 C0C7 CBD2 D8DD" /* ..ʵ */ + $"E4EA EE84 F00B EFEA E3DA D3CC C5BC B5AE" /* .ż */ + $"B2C5 DD00 0BCF B7B9 BEC5 CBD1 D7DD E4E9" /* ..Ϸ */ + $"EE85 F00C EAE3 DBD3 CBC5 BDB5 ADB0 BCBC" /* .Ž */ + $"C3DB 000B CAB7 B9C0 C5CC D2D7 DDE4 EAEE" /* ..ʷ */ + $"84F0 0FEF EAE2 DAD3 CBC4 BDB5 ADB1 BABC" /* .Ľ */ + $"BCBE C6D9 000B C9B5 B9C0 C6CC D2D8 DDE4" /* ..ɵ */ + $"EAEE 84F0 11EF EAE3 DAD3 CCC4 BCB5 AEB2" /* .ļ */ + $"BCBC BDBE BFC1 C8D7 000B CEB6 B9BE C5CB" /* ..ζ */ + $"D0D7 DDE3 E9EE 85F0 12EA E3DB D3CC C5BD" /* .Ž */ + $"B5AD B0BC BBBC BEBF C0C2 C4CA D500 0BCA" /* .. */ + $"B7B9 C0C5 CCD2 D7DE E5EA EE84 F015 EFEA" /* . */ + $"E2DA D3CB C4BD B4AD B2BB BCBC BEBF C1C2" /* Ľ */ + $"C4C4 C6CC D300 0BC9 B5B9 C0C6 CCD2 D8DD" /* ..ɵ */ + $"E5EA EE84 F017 EFEA E3DA D3CC C4BC B5AC" /* .ļ */ + $"B3BC BCBD BEC0 C1C2 C4C5 C6C7 C8CE D100" /* . */ + $"0BCE B7BC C3C9 CED2 D7DD E3EA EE84 F00A" /* .η */ + $"EFEA E3DB D3CC C5BD B5AD B280 BC06 BEBF" /* Ž. */ + $"C0C2 C4C5 C680 C801 CBD0 CF00 0BCE BAB4" /* ƀ...κ */ + $"ADAA B6C8 D8E4 E6E9 EE84 F014 EFEA E1DA" /* . */ + $"D3CB C4BD B4AD B2BB BCBD BEBF C1C2 C4C5" /* Ľ */ + $"C680 C803 CACB CDD2 CD00 0BCC A183 6B63" /* ƀ...̡kc */ + $"6164 6A83 B6E8 F484 F01D EFEA E3DA D3CC" /* adj. */ + $"C4BC B5AD B2BC BCBD BEC0 C1C2 C4C5 C6C8" /* ļ */ + $"C8C9 CACC CDCD D0D5 CB00 0EC9 8A6B 6261" /* ..Ɋkba */ + $"6061 6263 6263 84CE F6F1 81F0 1FEF EAE3" /* `abcbc. */ + $"DBD3 CCC6 BDB5 ADB2 BCBC BDBE BFC1 C2C4" /* ƽ */ + $"C5C7 C8C8 C9CB CCCD CECF D0D2 D6C9 0034" /* .4 */ + $"B288 6E6B 6662 6263 6567 6969 6771 C0F5" /* nkfbbcegiigq */ + $"F1F0 F0EF EAE3 DBD3 CBC4 BEB5 ADB0 BBBB" /* ľ */ + $"BCBE BFC1 C2C3 C5C6 C8C8 C9CA CCCC CECF" /* */ + $"D1D2 D3D5 D8C7 001D A67D 7774 6E67 6464" /* ..}wtngdd */ + $"6568 6A6B 6D71 7072 BFF6 F0EF EAE3 DAD3" /* ehjkmqpr */ + $"CBC3 BCB5 ADB2 80BC 15BE BFC1 C2C4 C5C6" /* ü. */ + $"C7C8 C9CA CBCD CECF D1D2 D3D5 D6D7 DAC5" /* */ + $"0038 B282 7D7C 7771 6B67 6768 6B6C 6E71" /* .8}|wqkgghklnq */ + $"7476 757E DAF4 EAE3 DBD3 CCC5 BCB5 ADB2" /* tvu~ż */ + $"BCBC BDBE BFC1 C2C4 C5C7 C8C8 C9CA CCCD" /* */ + $"CECF D1D2 D3D5 D6D7 D8D9 DDC4 0039 947C" /* .9| */ + $"8180 7B75 6E6A 696B 6D6F 7175 7779 7B77" /* {unjikmoquwy{w */ + $"9DEA E3DB D3CB C4BD B4AD B0BB BBBC BEBF" /* Ľ */ + $"C0C2 C4C5 C6C8 C8C9 CACC CDCE CFD1 D2D3" /* */ + $"D4D6 D7D8 D9DA DCE0 C200 1CB5 8582 8585" /* .. */ + $"817A 736F 6E6E 7174 7679 7B7D 7E7F 80C6" /* zsonnqtvy{}~. */ + $"DFD3 CBC3 BCB4 ACB2 80BC 1BBE BFC1 C2C4" /* ü. */ + $"C5C6 C7C8 C9CA CBCD CECF D1D2 D3D5 D6D7" /* */ + $"D8D9 DBDC DDDF E3C1 003C A481 8688 8985" /* .< */ + $"7F79 7471 7275 787A 7C7E 7F81 8483 AED8" /* .ytqruxz|~. */ + $"CDC5 BCB5 AEB2 BCBC BDBE BFC1 C2C4 C5C7" /* ż */ + $"C8C8 C9CA CCCD CED0 D1D2 D3D5 D6D7 D8D9" /* */ + $"DBDC DDDF E0E2 E5C0 003D 9A82 898B 8B89" /* .= */ + $"857E 7876 7678 7A7D 7F81 8184 888A A8CD" /* ~xvvxz}. */ + $"C6BD B5AD B0BC BBBC BEBF C0C2 C4C5 C6C8" /* ƽ */ + $"C8C9 CACC CCCE CFD0 D2D3 D5D6 D7D8 D9DA" /* */ + $"DCDD DEE0 E2E2 E4E7 BF00 088B 888C 8D8F" /* .. */ + $"8F8C 857F 807C 177F 8183 8485 888D 93A7" /* .|.. */ + $"C4BD B5AD B1BA BCBC BEBF C1C2 C4C5 C680" /* Ľƀ */ + $"C817 CACC CDCE CFD1 D2D3 D5D6 D7D8 D9DB" /* . */ + $"DCDD DFE0 E2E3 E4E5 E6E9 BE00 3F8B 8C8E" /* .? */ + $"9193 9492 8D87 8482 8283 8486 8789 8D94" /* */ + $"9BAB BCB5 AEB2 BCBC BDBE BFC1 C2C4 C5C7" /* */ + $"C8C8 C9CA CCCD CED0 D1D2 D4D5 D6D8 D8D9" /* */ + $"DBDC DEDF E0E2 E3E4 E6E7 E7E8 EABD 000A" /* . */ + $"9B8B 9093 9696 9794 908B 8780 8632 8789" /* 2 */ + $"8C92 9AA2 B1B6 ADB0 BCBB BCBE BFC0 C2C4" /* */ + $"C5C6 C8C8 C9CB CCCC CECF D0D2 D3D4 D6D7" /* */ + $"D8D9 DADC DDDE E0E2 E2E4 E6E7 E8E8 E9EA" /* */ + $"ECBC 0020 AE8E 9396 989A 9D9C 9994 8F8B" /* . */ + $"898A 8B8D 9299 A2A9 B3AE B1BA BCBC BEBF" /* */ + $"C1C2 C4C5 C680 C816 CACC CDCE CFD1 D2D3" /* ƀ. */ + $"D5D6 D7D8 D9DB DCDD DFE0 E2E3 E4E5 E780" /* */ + $"E803 EAEB ECE9 BB00 42C2 9696 999B 9FA1" /* ..B– */ + $"A2A0 9C96 908E 8D8F 9398 A0A9 B1B3 B1BC" /* */ + $"BCBD BEC0 C1C2 C4C5 C7C8 C8C9 CACC CDCE" /* */ + $"D0D1 D2D4 D5D6 D8D8 D9DB DCDE DFE0 E2E3" /* */ + $"E4E6 E7E8 E8E9 EAEC ECEB E7E5 BA00 43CC" /* .C */ + $"A295 9B9E A2A5 A6A6 A29B 9592 9194 979D" /* */ + $"A7AE B5B4 BABB BCBE BFC0 C2C4 C5C6 C8C8" /* */ + $"C9CB CCCC CECF D0D2 D3D4 D6D7 D8D9 DADC" /* */ + $"DDDE E0E2 E3E4 E6E7 E8E8 E9EA EBEC EBE9" /* */ + $"E2DD DCBA 001C C29A 9EA2 A5A8 AAAA A7A3" /* ܺ..š */ + $"9D99 9799 9EA5 ADB4 BBB9 BBBC BEBF C1C2" /* */ + $"C4C5 C680 C816 CACC CDCE D0D1 D2D3 D5D6" /* ƀ. */ + $"D7D8 D9DB DCDD DFE0 E2E3 E4E5 E780 E800" /* . */ + $"EA80 EC04 E9E4 DDD6 D3BB 0003 BAA0 A5A9" /* .ӻ.. */ + $"81AC 30A8 A4A0 9E9F A5AB B2BC BCBB BDBE" /* 0 */ + $"C0C1 C2C4 C5C6 C8C8 C9CA CCCD CED0 D1D2" /* */ + $"D4D5 D6D8 D8D9 DBDC DEDF E0E2 E3E4 E6E7" /* */ + $"E8E8 E9EA 80EC 06E9 E5DF D8D0 CAAC BA00" /* .ʬ. */ + $"42D5 B3A5 ABAC ADAE AEAC AAA6 A4A6 ABB0" /* Bճ */ + $"B8BB BABD BEBF C1C2 C4C5 C7C8 C8C9 CBCC" /* */ + $"CDCE CFD1 D2D3 D5D6 D7D8 D9DB DCDD DFE0" /* */ + $"E2E3 E4E6 E7E8 E8E9 EAEB ECED EBE6 E0DB" /* */ + $"D3CB C5AC BB00 41C6 B7AB ADAE AFAF B0AE" /* Ŭ.AƷ */ + $"ACAC ADB1 B5B8 BABC BEBF C1C2 C3C5 C6C8" /* */ + $"C8C9 CACC CCCE CFD1 D2D3 D5D6 D7D8 D9DB" /* */ + $"DCDD DFE0 E1E3 E4E5 E7E8 E8E9 EAEB ECED" /* */ + $"EBE7 E1DB D4CC C6BF ACBC 0004 CFBD ACAF" /* ƿ..Ͻ */ + $"B082 B236 B4B6 B8BA BDBE BFC0 C2C4 C5C6" /* 6 */ + $"C7C8 C9CA CBCD CECF D1D2 D3D5 D6D7 D8D9" /* */ + $"DBDC DDDF E0E2 E3E4 E5E6 E8E8 E9EA EBEC" /* */ + $"EDEC E8E2 DBD4 CDC7 BFB9 ACBD 003F D7BF" /* ǿ.?׿ */ + $"AEB1 B3B4 B5B6 B6B7 B9BB BDBE BFC1 C2C4" /* */ + $"C5C7 C8C8 C9CB CCCD CECF D1D2 D3D5 D6D7" /* */ + $"D8D9 DBDC DDDF E0E2 E3E4 E6E7 E8E8 E9EA" /* */ + $"EBEC EDED E9E4 DED6 CFC9 C2BA B4AC BE00" /* º. */ + $"3ED6 C0B1 B4B5 B7B7 B8B9 BABC BEBF C1C2" /* > */ + $"C3C5 C6C8 C8C9 CACC CCCE CFD1 D2D3 D4D6" /* */ + $"D7D8 D9DB DCDD DFE0 E2E3 E4E5 E7E8 E8E9" /* */ + $"EAEB ECED EDEA E5DF D7CF CAC3 BBB4 ADAC" /* û */ + $"BF00 3DD7 C2B3 B7B8 B9BA BBBD BEBF C1C2" /* .=³ */ + $"C4C5 C6C7 C8C9 CACB CDCE CFD1 D2D3 D5D6" /* */ + $"D7D8 D9DB DCDD DFE0 E2E3 E4E5 E6E8 E8E9" /* */ + $"EAEB ECED EEEA E6DF D9D1 C9C3 BDB5 ADA7" /* ý */ + $"ACC0 003C D8C4 B6B8 BABB BDBE BFC1 C2C4" /* .<Ķ */ + $"C5C7 C8C8 C9CA CCCD CECF D1D2 D3D5 D6D7" /* */ + $"D8D9 DBDC DDDF E0E2 E3E4 E6E7 E8E8 E9EA" /* */ + $"ECEC EDEE EBE7 E2DA D3CC C5BE B8AF A8A3" /* ž */ + $"ACC1 003A D8C6 B8BB BCBE BFC0 C2C4 C5C6" /* .:Ƹ */ + $"C8C8 C9CA CCCD CECF D1D2 D3D4 D6D7 D8D9" /* */ + $"DBDC DDDF E0E2 E3E4 E5E7 E8E8 E9EA EBEC" /* */ + $"EDEE ECE7 E3DB D3CD C6BE B8B1 A9A1 A5C3" /* ƾ */ + $"0039 DAC8 BDBF BFC1 C2C4 C5C6 C7C8 C9CA" /* .9Ƚ */ + $"CBCD CECF D1D2 D3D5 D6D7 D8D9 DBDC DDDF" /* */ + $"E0E2 E3E4 E5E6 E8E8 E9EA EBEC EDEE EDE9" /* */ + $"E3DD D5CD C7C0 B8B1 ABA2 A3C5 C400 37DB" /* .7 */ + $"CCC2 C1C2 C4C5 C7C8 C8C9 CACC CDCE D0D1" /* */ + $"D2D3 D5D6 D7D8 D9DB DCDE DFE0 E2E3 E4E6" /* */ + $"E7E8 E8E9 EAEC ECED EEEE EAE5 DED7 D0C8" /* */ + $"C3BB B3AC A59D CBC5 0036 FDE1 CEC8 C4C5" /* û.6 */ + $"C6C8 C8C9 CACC CCCE CFD0 D2D3 D5D6 D7D8" /* */ + $"D9DA DCDD DEE0 E2E2 E4E6 E7E8 E8E9 EAEB" /* */ + $"ECED EEEE EBE7 E0D8 D1CA C2BC B5AD A79C" /* ¼ */ + $"BEC4 0007 FDFD FFBF BED0 CDC6 80C8 16CA" /* ..ƀ. */ + $"CCCD CECF D1D2 D3D5 D6D7 D8D9 DBDC DDDF" /* */ + $"E0E2 E3E4 E5E7 80E8 12EA ECEC EDEE EEEB" /* . */ + $"E7E1 D9D1 CAC4 BCB5 AEA7 9DB2 C400 38FD" /* ļ.8 */ + $"AAAA BCC5 C9C8 D2D2 C9C9 CACC CDCE D0D1" /* */ + $"D2D4 D5D6 D8D8 D9DB DCDE DFE0 E2E3 E4E6" /* */ + $"E7E8 E8E9 EBEC ECED EEEE EDE8 E2DA D4CB" /* */ + $"C6BE B6B0 A99F A9E6 C200 39FD 7F7F BEC6" /* ƾ.9.. */ + $"CAC9 C9C8 C7D3 D5CB CCCC CECF D0D2 D3D4" /* */ + $"D6D7 D8D9 DADC DDDE E0E2 E3E4 E6E7 E8E8" /* */ + $"E9EA EBEC EDEE EEED EAE2 DBD5 CDC6 C1B9" /* */ + $"B1AB A2A1 DDC1 0023 FD7F 7FC4 C8CB CACA" /* .#.. */ + $"C9C9 C8C7 C5D4 D8CE CECF D1D2 D3D5 D6D7" /* */ + $"D8D9 DBDC DDDF E0E2 E3E4 E5E7 80E8 13EA" /* . */ + $"ECEC EDEE EFED EAE4 DCD5 CFC8 C0BA B2AA" /* */ + $"A3A0 C8C0 003D FD7F 7FC8 CACC CCCB CBCA" /* .=.. */ + $"C9C8 C7C5 C4C2 D5DC D0D1 D2D4 D5D6 D8D8" /* */ + $"D9DB DCDE DFE0 E2E3 E4E6 E7E8 E8E9 EBEC" /* */ + $"ECED EEEF EFEB E6DE D7CE CAC2 BBB4 ACA5" /* » */ + $"9BCB CBC6 BE00 3B7F 8EC8 CBCD CDCC CBCA" /* ƾ.;. */ + $"CAC8 C7C7 C5C4 C1C0 BED6 E0D3 D3D4 D6D7" /* */ + $"D8D9 DADC DDDE E0E2 E3E4 E6E7 E8E8 E9EA" /* */ + $"EBEC EDEE EFEF ECE6 DFD9 D0CA C4BC B4AE" /* ļ */ + $"A89C C280 CE02 CCC8 80BA 0001 AACC 80CE" /* €.Ȁ..̀ */ + $"1FCD CDCC CCCB CAC8 C7C6 C4C2 C0BE BCBA" /* . */ + $"D6E2 D5D6 D7D8 D9DB DCDD DFE0 E2E3 E4E5" /* */ + $"E780 E813 EAEC ECED EEEF EFED E8E0 D9D2" /* . */ + $"CBC4 BEB6 AEA8 9FBE 83D0 02CE CBAB B600" /* ľ.˫. */ + $"02B8 CBCF 80CE 36CD CCCC CBCA C9C7 C6C4" /* .π6 */ + $"C2C1 BFBC BBB9 B7B5 DCE6 D8D8 D9DB DCDE" /* */ + $"DFE0 E2E3 E4E6 E7E8 E8E9 EAEC ECED EEEF" /* */ + $"EFED E9E3 DBD3 CCC5 BEB8 B0A9 A0AD 80CF" /* ž */ + $"80D0 81CF 01CB B8B2 0003 C1CD D0D0 80CF" /* Ё.˸..Ѐ */ + $"27CE CCCB CAC9 C8C6 C4C3 C1BF BDBB BBB8" /* ' */ + $"B7B5 B4B3 D9EC D9DB DCDD DFE0 E2E3 E4E6" /* */ + $"E7E8 E8E9 EAEB ECED EE80 EF0D E9E4 DDD5" /* . */ + $"CEC8 C0B9 B3AB A39D CFCF 86D0 03D1 D1CD" /* φ. */ + $"C1AE 0004 C7D0 D3D2 D280 D137 CFCE CDCC" /* ..Ҁ7 */ + $"CBC9 C7C6 C4C2 C0BE BCBA B9B7 B6B4 B3B4" /* */ + $"B4CC EFDC DDDF E0E1 E3E4 E5E7 E8E8 E9EA" /* */ + $"EBEC EDEE EEEF EFEB E4DD D7CE C8C2 BAB2" /* º */ + $"ACA5 9DCD 81D0 85D2 80D3 01D0 C7AA 0001" /* ́ЅҀ.Ǫ.. */ + $"C8D2 80D4 3ED3 D3D2 D1D0 CFCE CDCB CAC8" /* Ҁ> */ + $"C5C3 C2C0 BEBC BBB9 B8B6 B5B4 B4B3 B2B2" /* */ + $"CAF3 DFE0 E2E3 E4E5 E6E8 E8E9 EAEB ECED" /* */ + $"EEEE F0EF EBE6 DDD7 D0C9 C2BB B3AC A69D" /* » */ + $"CBCF D0D0 81D1 00D2 83D3 81D4 01D2 C8A6" /* Ё.҃Ӂ.Ȧ */ + $"0001 CED3 82D5 16D4 D3D3 D2D1 CECD CBC9" /* ..ӂ. */ + $"C6C4 C2C0 BDBC BBB9 B8B6 B5B4 B4B5 82B4" /* */ + $"28CC F4E1 E3E4 E6E7 E8E8 E9EA ECEC EDEE" /* ( */ + $"EFF0 F0EC E7E1 D8D2 CBC4 BDB6 AEA7 9DB9" /* Ľ */ + $"CDCE CFCF D0D0 D1D1 D2D3 82D4 83D5 01D3" /* ӂԃ. */ + $"CEA1 0002 9FCE D384 D411 D3D2 D1D0 CFCE" /* Ρ..ӄ. */ + $"CBC8 C5C3 C0BC BAB7 B7B5 B4B3 82B1 01B2" /* . */ + $"B280 B12A B2CB F4E4 E5E7 E8E8 E9EA EBEC" /* * */ + $"EDEE EEEF F0EE E8E1 DAD2 CBC5 BEB6 AFA9" /* ž */ + $"A0AA C8C8 C9CA CACC CDCE D0D0 D1D2 D281" /* ҁ */ + $"D384 D402 D3CE 9F9C 0002 B8D0 D485 D548" /* ӄ.Ο..ԅH */ + $"D4D4 D3D2 D1CF CDCA C7C4 C1BC BAB7 B5B3" /* */ + $"B2B2 B1B0 B1B1 B0B0 B1B0 B1B1 B0B1 B0D2" /* */ + $"F4E7 E8E8 E9EA EBEC EDEE EEEF F0EE E9E2" /* */ + $"DBD3 CBC6 BFB7 AFA9 A1A4 C1C1 C3C6 C6C7" /* ƿ */ + $"C9CA CCCE D0D1 D1D3 D380 D486 D502 D4D0" /* ӀԆ. */ + $"B898 0001 C3D1 88D5 47D4 D3D2 D2D1 CECB" /* ..шG */ + $"C9C5 C2BD BAB7 B4B2 B0AF ADAD ACAD ADAF" /* ½ */ + $"AEB0 AFAE AEAC B097 7ED1 EFE8 E9EA ECEC" /* ~ */ + $"EDEE EEF0 F0EF EAE4 DCD6 CEC7 C1BA B2AA" /* */ + $"A49F BEBA BDBD BFC1 C3C4 C7C8 CACD D0D0" /* */ + $"D180 D300 D489 D501 D1C3 9400 01C7 D18A" /* р.ԉ.Ô..ъ */ + $"D515 D4D3 D2D2 D1CE CBC9 C5C0 BDB9 B5B2" /* . */ + $"B0AE ADAC ABAA ACAB 80AA 0FAB AAAB ADA5" /* . */ + $"7372 75C6 EFEB EBEC EDEE EE80 F01F EBE6" /* sru. */ + $"DED6 CFC9 C2BB B4AC A69C B7B2 B3B5 B7B8" /* » */ + $"BABC BEC3 C4C7 CBCD D0D1 D2D3 D3D4 8BD5" /* ԋ */ + $"01D1 C790 0002 CCD3 D78C D614 D5D4 D3D2" /* .ǐ..׌. */ + $"CFCD CBC7 C1BF BAB7 B3B1 AFAD ACAB ABAA" /* */ + $"AB80 AA32 ABA9 ABA1 7578 706E 75C5 F3EC" /* 2uxpnu */ + $"EDEE EEEF F0F0 ECE6 DFD8 CFCA C3BB B4AD" /* û */ + $"A69D B0AB ADAE AEAF B2B5 B8BB BEC3 C6C9" /* */ + $"CCD0 D2D3 D4D4 D58D D601 D3CC 8C00 03CD" /* Ս.̌.. */ + $"D1D3 D38C D516 D4D4 D3D2 D1CF CDCA C7C3" /* ӌ. */ + $"BFBA B8B3 B0AE ACAA A9A8 A7A6 A680 A531" /* 1 */ + $"A6A4 797C 7171 7270 78CA F4EE EEEF F0F0" /* y|qqrpx */ + $"EDE7 E0D9 D2CA C4BD B5AE A89E A9A6 A3A5" /* Ľ */ + $"A5A6 A8A9 AAAF B5B8 BDC1 C6C9 CED0 D2D3" /* */ + $"D3D4 8AD5 06D4 D4D3 D3D4 D2CD 8900 05B3" /* Ԋ.͉.. */ + $"D3D6 D4D3 D38B D525 D4D4 D3D2 D1D0 CECB" /* Ӌ% */ + $"C9C5 C1BE BAB6 B4B1 AEAB A9A7 A6A3 A3A4" /* */ + $"A4A1 A47D 8074 7272 7373 7078 CAF5 80F0" /* }trrsspx */ + $"22EE E9E2 DBD3 CCC5 BEB7 AFA9 A2A5 A29E" /* "ž */ + $"9D9C 9EA0 A0A1 A6AB AEB4 BBBF C5C9 CCD0" /* */ + $"D2D3 D3D4 89D5 08D4 D3D1 D0D1 D3D4 D1B3" /* ԉ.ѳ */ + $"8800 0A78 93C1 D8D7 D5D4 D4D5 D7D7 87D6" /* .xׇ */ + $"15D5 D4D4 D3D2 D1CF CCC9 C6C2 BFBD B9B6" /* .¿ */ + $"B3AE ADAB A8A6 A480 A331 8187 7B76 7474" /* 1{vtt */ + $"7373 7470 75C8 F8F1 EEE9 E3DC D4CD C6BF" /* sstpuƿ */ + $"B8B0 A9A2 A2A0 9B9B 9898 999A 9DA0 A3AA" /* */ + $"AFB4 BBC0 C5CA CDD1 D3D3 D4D5 88D6 09D5" /* Ո */ + $"D3D1 CFCE D0D3 BF93 7888 000C 6B89 8BA5" /* ӿx..k */ + $"D1D7 D6D3 D3D4 D6D6 D785 D61F D5D5 D4D4" /* ׅ. */ + $"D2D2 D1CE CCCA C7C3 C1BE BAB7 B3B0 ACAB" /* */ + $"A7A5 A5A3 8793 867C 7A78 7676 8074 2770" /* |zxvvt'p */ + $"78CC F6EA E3DD D5CE C8C1 B9B3 ABA4 AC90" /* x */ + $"9795 9493 9495 9799 9CA1 A6AD B4BA C0C5" /* */ + $"CBCD D2D2 D3D4 D586 D60B D5D4 D2CF CDCC" /* Ն. */ + $"CECB A38B 896B 8900 0B28 7889 8DBB D7D6" /* ˣk..(x */ + $"D4D2 D2D4 D686 D549 D4D4 D3D3 D1D1 CFCE" /* ֆI */ + $"CCCA C7C3 C1BE BBB7 B3AE ACA9 A6A4 918E" /* */ + $"9488 817D 7B79 7776 7574 7471 7BCA EADE" /* }{ywvuttq{ */ + $"D8D0 C8C3 BCB3 ACA6 AA8E 8F90 908D 8E8F" /* ü */ + $"9194 979C 9FA6 AEB5 BBC0 C6CA CFD1 D1D3" /* */ + $"D3D4 84D5 0CD4 D3D2 CFCD CBCC CEB6 8D89" /* Ԅ.ζ */ + $"7828 8C00 0651 8387 9CCF D8D5 80D2 01D4" /* x(..QՀ. */ + $"D685 D547 D4D3 D2D2 D1D1 D0CE CDCB C8C6" /* օG */ + $"C3C0 BCB9 B4B0 AEA9 9C8D 9E94 8E87 827F" /* . */ + $"7C7A 7876 7575 7470 78C8 DCD1 CAC2 BCB5" /* |zxvuutpx¼ */ + $"ADA7 A88B 8A89 8A88 898A 8D90 959B 9EA3" /* */ + $"ABB0 B7BD C3C8 CCCF D1D2 D3D4 84D5 0BD4" /* Ԅ. */ + $"D3D0 CECC CBCD C79B 8783 518F 000D 166F" /* ǛQ...o */ + $"8689 B4D6 D6D3 D1D1 D4D5 D6D6 84D5 45D3" /* քE */ + $"D3D2 D2D1 D0D0 CECC CAC7 C4C1 BEBA B5B2" /* */ + $"AE8B A89E 9A94 8C87 837F 7D7B 7977 7673" /* .}{ywvs */ + $"7470 8FD2 CCC4 BDB6 AFA7 A59A 8685 8687" /* tpĽ */ + $"8889 8B8E 9298 9FA3 ABB0 B7BC C2C6 CACE" /* */ + $"D0D1 D2D3 D482 D50C D4D3 D1CF CCCB CCCD" /* Ԃ. */ + $"AF89 866F 1692 000C 447E 8495 CADA D7D5" /* o...D~ */ + $"D2D3 D5D8 D784 D643 D5D4 D4D3 D2D2 D1D1" /* ׄC */ + $"CFCC CAC6 C3C2 BDB7 A8A5 A2A3 A19B 928C" /* ½ */ + $"8783 807D 7B79 7674 7576 73AE CBBF B8B1" /* }{yvtuvs˿ */ + $"A9A3 AC7D 8283 8489 888C 8F94 999E A5AD" /* } */ + $"B2B8 BDC3 C6CA CFD1 D2D3 D3D5 82D6 0BD5" /* Ղ. */ + $"D3D1 CFCD CDCE C394 847E 4495 000D 0E66" /* Ô~D...f */ + $"8285 AFD8 D9D6 D2D2 D3D6 D7D7 84D6 40D4" /* ׄ@ */ + $"D4D3 D3D2 D2D0 CFCD CAC9 C5C3 BF9A ACA6" /* ÿ */ + $"AAA9 A298 918C 8784 817D 7976 7576 7670" /* }yvuvvp */ + $"87C1 BAB1 ABA4 A978 7E7F 8182 8889 8D93" /* x~. */ + $"99A1 A7AD B2B9 BEC3 C7CB CFD0 D2D2 D3D5" /* */ + $"81D6 0CD5 D4D2 D0CD CCCD CDAA 8582 660E" /* .ͪf. */ + $"9800 0C39 7881 8EC7 DBD8 D4D1 D2D4 D6D7" /* ..9x */ + $"85D6 19D4 D4D3 D3D2 D1D0 CFCD C9C6 C2A6" /* .¦ */ + $"A8AD B2B1 ABA1 9991 8C88 847F 7B80 7820" /* .{x */ + $"7671 70AD B5AB A6A8 7179 7A7C 7F84 898E" /* vqpqyz|. */ + $"959B A2A7 B0B4 B9BE C4C8 CBCF D0D1 D2D3" /* */ + $"D581 D60B D5D3 D1CE CDCD CFBE 8D81 7839" /* Ձ.Ͼx9 */ + $"9B00 0C08 607F 81A8 D8DB D6D2 D1D2 D4D7" /* ...`. */ + $"85D6 3BD5 D4D4 D3D3 D2D0 D0CE C9C0 AFAE" /* ; */ + $"B4BA B9B3 AAA0 9891 8C87 817D 7C7B 7874" /* }|{xt */ + $"6F6B 9BB1 A6A8 8276 767A 7D83 888E 969A" /* okvvz} */ + $"A2A9 B1B7 BCC2 C4C9 CDCF D1D1 D3D3 D580" /* Հ */ + $"D60C D5D4 D2CF CDCC CECC A481 7F60 089E" /* .̤.`. */ + $"000D 2D74 808B C1DC D9D4 D1D1 D3D6 D7D7" /* ..-t */ + $"84D6 00D4 80D3 43D2 D1CF CBBF ACB5 B9C0" /* .ԀC˿ */ + $"C1BD B6AB A197 918A 8582 807C 7772 6D66" /* |wrmf */ + $"8DAC A593 6D72 777C 8087 8C94 9BA4 ACB3" /* mrw| */ + $"B9BE C2C7 CACD CFD1 D2D3 D3D5 D6D6 D5D4" /* */ + $"D3D1 CECC CDCF B989 8074 2DA2 000C 587E" /* Ϲt-..X~ */ + $"80A1 D6DD D9D4 D1D2 D5D8 D884 D700 D680" /* ؄.ր */ + $"D42E D3D1 CDC2 AFBC C1C7 CBC9 C3B9 ADA1" /* .¯ù */ + $"9790 8B89 857D 7770 6B65 8AA9 9E66 7074" /* }wpkefpt */ + $"7B80 868E 989F A6AF B4BC C1C5 C9CD D0D2" /* { */ + $"D280 D40E D6D7 D7D6 D5D3 D0CE CECF CB9D" /* Ҁ.˝ */ + $"807E 58A5 000C 246E 7F86 BEDE DAD6 D1D0" /* ~X..$n. */ + $"D2D5 D784 D642 D5D4 D2D2 D1CD C8BD C0C7" /* ׄBȽ */ + $"CED2 D4D0 C6B9 AA9F 9892 8D86 7D76 716B" /* ƹ}vqk */ + $"6791 AA61 6B70 7980 868E 98A1 A8AF B5BD" /* gakpy */ + $"C0C5 CACC CFD1 D1D3 D3D4 D6D6 D5D4 D3D0" /* */ + $"CECC CDCF B486 7F6E 24A8 000A 4D7A 7D9A" /* ϴ.n$.Mz} */ + $"D4DD D8D3 CFD0 D380 D781 D640 D5D4 D2D1" /* Ӏׁ@ */ + $"D0CB C6C3 C6CD D5D9 DDDB D4C7 B6AA A29A" /* Ƕ */ + $"9187 7D76 716A 6AA3 6769 6E79 8388 929B" /* }vqjjginy */ + $"A2AA B0B9 BFC2 C8CA CECF D1D2 D3D3 D4D6" /* */ + $"D6D5 D4D1 CFCD CDCE C697 7D7A 4DAB 0050" /* Ɨ}zM.P */ + $"1A69 7D81 B7E0 DBD7 D1D0 D2D6 D8D7 D8D7" /* .i} */ + $"D6D5 D5D4 D1CF CBC5 C2CD D4DC E2E5 E6E0" /* */ + $"D5C6 BAB0 A194 897E 7670 6782 7468 7079" /* ƺ~vpgthpy */ + $"848C 949E A5AF B5BD C1C5 CACD CFD2 D2D4" /* */ + $"D4D6 D6D7 D6D5 D4D1 CFCE CFD1 AE80 7D69" /* Ѯ}i */ + $"1AAE 004C 4676 7C93 D2E0 DAD5 D2D0 D3D7" /* ..LFv| */ + $"D9D9 D7D5 D4D4 D0CE C8C1 B9D3 DBE2 E8EB" /* */ + $"EBE6 DFD5 CABB A897 8A7F 766F 6E7C 6670" /* ʻ.von|fp */ + $"7985 8E97 A0AA B2B8 BDC2 C7CA CED0 D2D3" /* y */ + $"D4D4 D6D7 D7D6 D4D2 D0CE CED0 C690 7C76" /* Ɛ|v */ + $"46B1 004A 0E62 7B7D B0E1 DFDA D3D1 D3D6" /* F.J.b{} */ + $"D9D8 D7D5 D4D0 CEC8 C0B6 A7E3 E9EC EFED" /* */ + $"EBE7 E0D4 C3AE 9C8E 8076 6F80 6470 7D87" /* îvodp} */ + $"919A A5AE B6BA C1C6 CACD D0D3 D3D5 D5D7" /* */ + $"D7D8 D7D6 D4D2 D0CF D0D0 A87D 7B62 0EB4" /* Ш}{b. */ + $"0046 3972 7A8C CFE3 DED9 D3D2 D4D6 D7D7" /* .F9rz */ + $"D6D1 CDC8 BFB6 AA9B FCF0 EFEF EEEB E4D8" /* ȿ */ + $"C7B2 A192 8379 7763 727F 8A95 A1AA B1B9" /* Dzywcr. */ + $"C0C4 C9CE D0D3 D3D5 D6D6 D8D9 D8D8 D6D4" /* */ + $"D2D0 D1D3 C18A 7A72 39B7 0044 085A 7979" /* zr9.D.Zyy */ + $"A9E0 E3DE D7D4 D3D4 D6D4 D3CE C8C0 B7A9" /* */ + $"9E92 FDF4 F0F0 EDE1 D4C5 B2A2 9588 7D60" /* Ų}` */ + $"7784 8E9A A3AD B7BC C2C7 CCCF D3D4 D6D6" /* w */ + $"D7D8 D9DA D9D8 D6D4 D2D1 D3D0 A279 795A" /* ТyyZ */ + $"08BA 0040 2F6F 7987 C9E8 E1DC D5D4 D3D3" /* ..@/oy */ + $"D2CF CBC3 B7AD 9F94 96CF FDF6 EADC CDC0" /* ÷ */ + $"B1A7 976F 687D 8993 9DA7 B2B8 BFC7 CACE" /* oh} */ + $"D2D5 D5D7 D8D8 DADB DADA D8D6 D4D3 D3D5" /* */ + $"BD85 796F 2FBE 003C 5476 78A2 E2E4 DFD7" /* yo/. */ + $"8B8B 8882 7B78 787A 7B7D 7E80 8184 898F" /* {xxz{}~ */ + $"A2BF B8B0 A8AC B5B7 B7B9 B9BB BCBE BFC0" /* */ + $"C2C3 C4C4 C5C7 C8C9 CBCC CDCF CFD1 D2D3" /* */ + $"D5D6 D7D9 DADA DCDD DEDF E3BE 0018 8687" /* .. */ + $"8B8C 8F8F 8E89 8380 7E7E 7F80 8183 8489" /* ~~. */ + $"8F97 A6B7 B0A9 AD80 B723 B9BA BBBC BEBF" /* # */ + $"C0C2 C3C4 C4C6 C7C8 CACB CCCE CFD0 D0D2" /* */ + $"D3D5 D6D8 D9DA DBDC DDDF E0E0 E2E4 BD00" /* . */ + $"0A96 878C 8F91 9392 908B 8783 8082 3284" /* –2 */ + $"8588 8E96 9EAB B1A8 ABB7 B6B7 B9B9 BABC" /* */ + $"BEBF C0C2 C3C4 C4C5 C6C8 C9CA CCCD CFCF" /* */ + $"D0D1 D3D4 D6D7 D9D9 DADB DDDF DFE0 E2E3" /* */ + $"E4E5 BC00 41A8 8A8F 9194 9698 9795 8F8B" /* .A */ + $"8785 8687 898E 959E A4AD A9AC B5B7 B7B9" /* */ + $"B9BB BCBE BFC0 C2C3 C4C4 C5C7 C8C9 CBCC" /* */ + $"CDCF CFD1 D2D3 D5D6 D7D9 D9DA DCDD DEE0" /* */ + $"E1E2 E3E3 E5E5 E2BB 0015 BC91 9194 979A" /* .. */ + $"9D9D 9C97 918C 8A8A 8B8F 949C A3AB ADAC" /* */ + $"80B7 29B9 BABB BCBE BFC0 C2C3 C4C4 C6C7" /* ) */ + $"C8CA CBCC CECF CFD1 D2D3 D5D6 D8D9 DADB" /* */ + $"DCDD DFE0 E1E2 E3E4 E5E5 E4E0 DEBA 0043" /* ޺.C */ + $"C69D 9197 999E A0A1 A19D 9791 8E8D 8F93" /* Ɲ */ + $"99A1 A8AF AFB6 B6B7 B9B9 BABC BEBF C0C2" /* */ + $"C3C4 C4C5 C6C8 C9CA CCCD CFCF D0D2 D3D4" /* */ + $"D6D7 D9D9 DADC DDDF DFE0 E2E3 E4E4 E5E5" /* */ + $"E1DC D7D5 BA00 3ABC 9699 9EA1 A3A5 A5A2" /* պ.: */ + $"9D98 9493 9599 9FA7 AFB6 B4B6 B7B9 B9BB" /* */ + $"BCBE BFC0 C2C3 C4C4 C5C7 C8CA CBCC CDCF" /* */ + $"CFD1 D2D4 D5D6 D7D9 D9DA DCDD DEE0 E1E2" /* */ + $"E3E4 80E5 04E2 DDD6 D0CC BB00 03B4 9BA1" /* .̻.. */ + $"A481 A73A A39F 9B99 9A9F A6AD B7B7 B6B8" /* : */ + $"B9B9 BBBC BEBF C0C2 C3C4 C4C5 C7C8 CACB" /* */ + $"CCCE CFCF D1D2 D3D5 D6D8 D9DA DBDC DDDF" /* */ + $"E0E1 E2E3 E4E4 E5E5 E3DE D9D2 CAC4 A7BA" /* ħ */ + $"0042 CEAE A1A6 A7A8 A9A9 A7A5 A2A0 A0A5" /* .Bή */ + $"ABB2 B6B5 B8B9 B9BB BCBE BFC0 C2C3 C4C4" /* */ + $"C5C7 C8C9 CBCC CDCF D0D0 D2D3 D5D6 D7D9" /* */ + $"D9DA DCDD DFDF E1E2 E3E4 E4E5 E6E4 DFDA" /* */ + $"D4CD C5BF A7BB 0041 C0B1 A6A8 A9AA ABAB" /* ſ.A */ + $"A9A8 A6A7 ABAF B3B5 B7B9 B9BA BCBD BFC0" /* */ + $"C1C3 C4C4 C5C6 C8C9 CBCC CDCF CFD0 D2D3" /* */ + $"D5D6 D7D8 D9DA DCDD DEE0 E1E2 E3E4 E4E5" /* */ + $"E6E4 E0DA D5CE C6C0 BAA7 BC00 04C8 B8A7" /* ..ȸ */ + $"AAAB 82AD 36AE B1B3 B5B8 B9B9 BBBC BEBF" /* 6 */ + $"C0C2 C3C4 C4C5 C7C8 C9CB CCCD CFCF D0D2" /* */ + $"D3D5 D6D7 D8D9 DADC DDDE DFE1 E2E3 E4E4" /* */ + $"E5E6 E5E1 DCD5 CFC7 C0BA B3A7 BD00 3FCF" /* .? */ + $"B8A9 ACAE AEAF AFB1 B2B4 B6B8 B9BA BBBC" /* */ + $"BEBF C0C2 C3C4 C4C5 C7C8 C9CB CCCD CFD0" /* */ + $"D0D2 D3D5 D6D7 D9DA DBDC DDDF E0E1 E2E3" /* */ + $"E4E4 E5E6 E6E2 DED7 D0C9 C3BC B5AE A7BE" /* ü */ + $"003E CFBA ACAF AFB1 B2B3 B4B5 B7B9 B9BA" /* .>Ϻ */ + $"BCBD BFC0 C1C3 C4C4 C5C6 C8C9 CBCC CDCF" /* */ + $"CFD0 D2D3 D5D6 D7D8 D9DA DCDD DEE0 E1E2" /* */ + $"E3E4 E4E5 E6E6 E3DE D8D1 C9C3 BDB6 AFA8" /* ý */ + $"A7BF 003D D0BC AEB0 B2B4 B5B6 B8B9 BABB" /* .=м */ + $"BCBE BFC0 C2C3 C4C4 C5C7 C8C9 CBCC CDCF" /* */ + $"CFD0 D2D3 D5D6 D7D8 D9DA DCDD DEDF E1E2" /* */ + $"E3E4 E4E5 E6E7 E3DF D9D2 CBC3 BDB7 AFA8" /* ý */ + $"A2A7 C000 3CD1 BDB0 B3B5 B6B8 B9BA BBBC" /* .<ѽ */ + $"BEBF C0C2 C3C4 C4C5 C7C8 C9CB CCCD CFD0" /* */ + $"D0D2 D3D5 D6D7 D9DA DBDC DDDF E0E1 E2E3" /* */ + $"E4E4 E5E6 E7E5 E1DB D4CD C6BF B9B2 AAA4" /* ƿ */ + $"9EA7 C100 3AD1 C0B3 B6B7 B9B9 BABC BEBF" /* .: */ + $"C0C1 C3C4 C4C5 C7C8 C9CB CCCD CFCF D0D2" /* */ + $"D3D5 D6D7 D8D9 DADC DDDE E0E1 E2E3 E4E4" /* */ + $"E5E6 E7E5 E1DC D5CD C7C0 B9B3 ACA4 9D9F" /* */ + $"C300 39D3 C2B8 BABA BBBC BEBF C0C2 C3C4" /* .9¸ */ + $"C4C5 C7C8 C9CB CCCD CFCF D0D2 D3D5 D6D7" /* */ + $"D8D9 DADC DDDE DFE1 E2E3 E4E4 E5E6 E7E6" /* */ + $"E2DC D6CE C7C1 BBB3 ACA6 9D9E BFC4 0037" /* .7 */ + $"D4C5 BEBB BCBE BFC0 C2C3 C4C4 C6C7 C8CA" /* ž */ + $"CBCC CDCF CFD0 D2D3 D5D6 D8D9 DADB DCDD" /* */ + $"DFE0 E1E2 E3E4 E4E5 E6E7 E7E3 DED7 D0CA" /* */ + $"C2BD B5AE A7A0 98C5 C500 36FD DBC9 C4BE" /* ½.6ľ */ + $"BFC0 C2C3 C4C4 C5C6 C8C9 CACC CDCF CFD0" /* */ + $"D1D3 D4D6 D7D9 D9DA DBDD DFDF E0E2 E3E4" /* */ + $"E4E5 E6E7 E6E4 E0D9 D1CB C4BD B7B0 A8A2" /* Ľ */ + $"97B8 C400 37FD FDFF BFBD CAC8 C1C2 C3C4" /* .7 */ + $"C4C5 C7C8 C9CB CCCD CFCF D1D2 D3D5 D6D7" /* */ + $"D9D9 DADC DDDE E0E1 E2E3 E4E4 E5E6 E7E7" /* */ + $"E4E0 DAD3 CBC5 BEB7 B1A9 A298 AEC4 0008" /* ž.. */ + $"FDAA AABC C5C9 C8CE CD80 C42C C6C7 C8CA" /* ̀, */ + $"CBCC CECF D0D0 D2D3 D5D6 D8D9 DADB DCDD" /* */ + $"DFE0 E1E2 E3E4 E4E5 E6E7 E7E6 E1DB D5CD" /* */ + $"C5C0 B9B2 ABA4 9AA3 E0C2 0029 FD7F 7FBE" /* .).. */ + $"C6CA C9C9 C8C7 D0D1 C6C5 C6C8 C9CA CCCD" /* */ + $"CFCF D0D1 D3D4 D6D7 D9D9 DADC DDDF DFE0" /* */ + $"E2E3 E4E4 E5E6 80E7 0CE3 DCD5 CFC7 C0BB" /* . */ + $"B3AB A69D 9DD6 C100 3AFD 7F7F C4C8 CBCA" /* .:.. */ + $"CAC9 C9C8 C7C5 D1D3 C8C8 C9CB CCCD CFCF" /* */ + $"D1D2 D3D5 D6D7 D9D9 DADC DDDE E0E1 E2E3" /* */ + $"E4E4 E5E6 E7E8 E6E3 DED6 CFC9 C2BB B4AD" /* » */ + $"A59E 9CC3 C000 3DFD 7F7F C8CA CCCC CBCB" /* .=.. */ + $"CAC9 C8C7 C5C4 C2D2 D8CA CBCC CECF CFD1" /* */ + $"D2D3 D5D6 D8D9 DADB DCDD DFE0 E1E2 E3E4" /* */ + $"E4E5 E6E7 E8E8 E4DF D8D0 C9C4 BDB5 AFA7" /* Ľ */ + $"A096 C9CB C6BE 003B 7F8E C8CB CDCD CCCB" /* ƾ.;. */ + $"CACA C8C7 C7C5 C4C1 C0BE D2DC CECD CFCF" /* */ + $"D0D2 D3D4 D6D7 D9D9 DADC DDDF DFE0 E2E3" /* */ + $"E4E4 E5E6 E7E8 E8E5 E0D9 D2CB C4BE B7AF" /* ľ */ + $"A9A3 98BF 80CE 02CC C880 BA00 01AA CC80" /* .Ȁ..̀ */ + $"CE36 CDCD CCCC CBCA C8C7 C6C4 C2C0 BEBC" /* 6 */ + $"BAD4 DED0 D0D1 D2D4 D5D6 D7D9 D9DA DCDD" /* */ + $"DEE0 E1E2 E3E4 E4E5 E6E7 E8E8 E6E1 D9D3" /* */ + $"CCC5 BEB8 B1A9 A39A BA83 D002 CECB ABB6" /* ž.˫ */ + $"0002 B8CB CF80 CE36 CDCC CCCB CAC9 C7C6" /* ..π6 */ + $"C4C2 C1BF BCBB B9B7 B5D9 E2D1 D2D3 D5D6" /* */ + $"D8D9 DADB DCDD DFE0 E1E2 E3E4 E4E5 E6E7" /* */ + $"E8E8 E7E2 DCD4 CDC7 C0B9 B2AB A49C AA80" /* */ + $"CF80 D081 CF01 CBB8 B200 03C1 CDD0 D080" /* πЁ.˸..Ѐ */ + $"CF27 CECC CBCA C9C8 C6C4 C3C1 BFBD BBBB" /* ' */ + $"B8B7 B5B4 B3D6 E8D3 D5D6 D7D9 D9DA DCDD" /* */ + $"DFDF E1E2 E3E4 E4E5 E6E7 80E8 0DE3 DDD7" /* . */ + $"CFC8 C2BA B4AD A69E 98CF CF86 D003 D1D1" /* ºφ. */ + $"CDC1 AE00 04C7 D0D3 D2D2 80D1 37CF CECD" /* ..Ҁ7 */ + $"CCCB C9C7 C6C4 C2C0 BEBC BAB9 B7B6 B4B3" /* */ + $"B4B4 CBEB D6D7 D8D9 DADC DDDE E0E1 E2E3" /* */ + $"E4E4 E5E6 E7E7 E8E8 E4DD D7D1 C9C2 BCB5" /* ¼ */ + $"ADA7 A098 CB81 D085 D280 D301 D0C7 AA00" /* ˁЅҀ.Ǫ. */ + $"01C8 D280 D43E D3D3 D2D1 D0CF CECD CBCA" /* .Ҁ> */ + $"C8C5 C3C2 C0BE BCBB B9B8 B6B5 B4B4 B3B2" /* */ + $"B2C9 EED8 D9DA DCDD DEDF E1E2 E3E4 E4E5" /* */ + $"E6E7 E7E9 E8E5 DFD7 D1CA C3BC B6AE A7A1" /* ü */ + $"99C9 CFD0 D081 D100 D283 D381 D401 D2C8" /* Ё.҃Ӂ. */ + $"A600 01CE D382 D516 D4D3 D3D2 D1CE CDCB" /* ..ӂ. */ + $"C9C6 C4C2 C0BD BCBB B9B8 B6B5 B4B4 B582" /* */ + $"B428 CBF0 DBDC DDDF E0E1 E2E3 E4E4 E5E6" /* ( */ + $"E7E8 E9E9 E6E1 DAD2 CBC5 BEB7 B1A9 A298" /* ž */ + $"B6CD CECF CFD0 D0D1 D1D2 D382 D483 D501" /* ӂԃ. */ + $"D3CE A100 029F CED3 84D4 11D3 D2D1 D0CF" /* Ρ..ӄ. */ + $"CECB C8C5 C3C0 BCBA B7B7 B5B4 B382 B101" /* . */ + $"B2B2 80B1 2AB2 CBEE DDDE E0E1 E2E3 E4E4" /* * */ + $"E5E6 E7E7 E8E9 E7E1 DBD4 CCC5 C0B8 B1AA" /* */ + $"A49B A7C7 C8C9 CACA CCCD CED0 D0D1 D2D2" /* */ + $"81D3 84D4 02D3 CE9F 9C00 02B8 D0D4 85D5" /* ӄ.Ο..ԅ */ + $"48D4 D4D3 D2D1 CFCD CAC7 C4C1 BCBA B7B5" /* H */ + $"B3B2 B2B1 B0B1 B1B0 B0B1 B0B1 B1B0 B1B0" /* */ + $"CFF0 E0E1 E2E3 E4E4 E5E6 E7E7 E8E9 E7E2" /* */ + $"DBD5 CEC5 C0BA B2AB A59C 9FC1 C1C3 C6C6" /* */ + $"C7C9 CACC CED0 D1D1 D3D3 80D4 86D5 02D4" /* ӀԆ. */ + $"D0B8 9800 01C3 D188 D547 D4D3 D2D2 D1CE" /* и..шG */ + $"CBC9 C5C2 BDBA B7B4 B2B0 AFAD ADAC ADAD" /* ½ */ + $"AFAE B0AF AEAE ACB0 977B CCE8 E2E3 E4E4" /* { */ + $"E5E6 E7E7 E9E9 E8E3 DDD6 CFC8 C1BB B5AD" /* */ + $"A69F 9ABD BABD BDBF C1C3 C4C7 C8CA CDD0" /* */ + $"D0D1 80D3 00D4 89D5 01D1 C394 0001 C7D1" /* р.ԉ.Ô.. */ + $"8AD5 15D4 D3D2 D2D1 CECB C9C5 C0BD B9B5" /* . */ + $"B2B0 AEAD ACAB AAAC AB80 AA0F ABAA ABAD" /* . */ + $"A572 6F72 C1E9 E4E4 E5E6 E7E7 80E9 1FE4" /* ror. */ + $"DFD8 D0CA C3BC B5AF A7A1 97B5 B2B3 B5B7" /* ü */ + $"B8BA BCBE C3C4 C7CB CDD0 D1D2 D3D3 D48B" /* ԋ */ + $"D501 D1C7 9000 02CC D3D7 8CD6 14D5 D4D3" /* .ǐ..׌. */ + $"D2CF CDCB C7C1 BFBA B7B3 B1AF ADAC ABAB" /* */ + $"AAAB 80AA 32AB A9AB A173 756D 6B71 C0EB" /* 2sumkq */ + $"E5E6 E7E7 E8E9 E9E5 DFD9 D2CA C4BD B6AF" /* Ľ */ + $"A9A1 98AD ABAD AEAE AFB2 B5B8 BBBE C3C6" /* */ + $"C9CC D0D2 D3D4 D4D5 8DD6 01D3 CC8C 0003" /* Ս.̌.. */ + $"CDD1 D3D3 8CD5 16D4 D4D3 D2D1 CFCD CAC7" /* ӌ. */ + $"C3BF BAB8 B3B0 AEAC AAA9 A8A7 A6A6 80A5" /* ÿ */ + $"31A6 A477 796D 6E6F 6D75 C4ED E7E7 E8E9" /* 1wymnomu */ + $"E9E6 E1DA D3CC C4BF B8B0 AAA3 99A5 A5A3" /* Ŀ */ + $"A5A5 A6A8 A9AA AFB5 B8BD C1C6 C9CE D0D2" /* */ + $"D3D3 D48A D506 D4D4 D3D3 D4D2 CD89 0005" /* Ԋ.͉.. */ + $"B3D3 D6D4 D3D3 8BD5 25D4 D4D3 D2D1 D0CE" /* Ӌ% */ + $"CBC9 C5C1 BEBA B6B4 B1AE ABA9 A7A6 A3A3" /* */ + $"A4A4 A1A4 7C7C 706E 6F70 706D 74C5 EE80" /* ||pnoppmt */ + $"E922 E7E2 DBD4 CDC6 BFB9 B2AA A49D A1A1" /* "ƿ */ + $"9E9D 9C9E A0A0 A1A6 ABAE B4BB BFC5 C9CC" /* */ + $"D0D2 D3D3 D489 D508 D4D3 D1D0 D1D3 D4D1" /* ԉ. */ + $"B388 000A 7893 C1D8 D7D5 D4D4 D5D7 D787" /* .xׇ */ + $"D615 D5D4 D4D3 D2D1 CFCC C9C6 C2BF BDB9" /* .¿ */ + $"B6B3 AEAD ABA8 A6A4 80A3 0380 8477 7380" /* .ws */ + $"712A 7070 6C72 C2F1 E9E7 E2DC D5CE C7C0" /* q*pplr */ + $"BAB3 ABA4 9D9D A09B 9B98 9899 9A9D A0A3" /* */ + $"AAAF B4BB C0C5 CACD D1D3 D3D4 D588 D609" /* Ո */ + $"D5D3 D1CF CED0 D3BF 9378 8800 0C6B 898B" /* ӿx..k */ + $"A5D1 D7D6 D3D3 D4D6 D6D7 85D6 4AD5 D5D4" /* ׅJ */ + $"D4D2 D2D1 CECC CAC7 C3C1 BEBA B7B3 B0AC" /* */ + $"ABA7 A5A5 A386 8F82 7976 7473 7271 7071" /* yvtsrqpq */ + $"6D75 C6EF E4DD D8D0 C8C2 BBB3 ADA6 9FA7" /* mu» */ + $"8F97 9594 9394 9597 999C A1A6 ADB4 BAC0" /* */ + $"C5CB CDD2 D2D3 D4D5 86D6 0BD5 D4D2 CFCD" /* Ն. */ + $"CCCE CBA3 8B89 6B89 000B 2878 898D BBD7" /* ˣk..(x */ + $"D6D4 D2D2 D4D6 86D5 1FD4 D4D3 D3D1 D1CF" /* ֆ. */ + $"CECC CAC7 C3C1 BEBB B7B3 AEAC A9A6 A491" /* */ + $"8B8F 847C 7977 7574 7280 7126 6D77 C5E3" /* |ywutrq&mw */ + $"D8D1 CAC2 BDB6 AEA7 A1A4 8C8F 9090 8D8E" /* ½ */ + $"8F91 9497 9C9F A6AE B5BB C0C6 CACF D1D1" /* */ + $"D3D3 D484 D50C D4D3 D2CF CDCB CCCE B68D" /* Ԅ.ζ */ + $"8978 288C 0006 5183 879C CFD8 D580 D201" /* x(..QՀ. */ + $"D4D6 85D5 47D4 D3D2 D2D1 D1D0 CECD CBC8" /* օG */ + $"C6C3 C0BC B9B4 B0AE A99C 8A9A 9089 827F" /* . */ + $"7B78 7675 7372 7271 6D75 C2D6 CAC4 BDB7" /* {xvusrrqmuĽ */ + $"B0A8 A2A3 898A 898A 8889 8A8D 9095 9B9E" /* */ + $"A3AB B0B7 BDC3 C8CC CFD1 D2D3 D484 D50B" /* Ԅ. */ + $"D4D3 D0CE CCCB CDC7 9B87 8351 8F00 0D16" /* ǛQ... */ + $"6F86 89B4 D6D6 D3D1 D1D4 D5D6 D684 D545" /* oքE */ + $"D3D3 D2D2 D1D0 D0CE CCCA C7C4 C1BE BAB5" /* */ + $"B2AE 8AA3 9896 9088 837F 7C7A 7875 7473" /* .|zxuts */ + $"7071 6D8B CCC6 BFB8 B1AA A2A0 9786 8586" /* pqmƿ */ + $"8788 898B 8E92 989F A3AB B0B7 BCC2 C6CA" /* */ + $"CED0 D1D2 D3D4 82D5 0CD4 D3D1 CFCC CBCC" /* Ԃ. */ + $"CDAF 8986 6F16 9200 0C44 7E84 95CA DAD7" /* ͯo...D~ */ + $"D5D2 D3D5 D8D7 84D6 43D5 D4D4 D3D2 D2D1" /* ׄC */ + $"D1CF CCCA C6C3 C2BD B7A8 A09D 9E9C 958E" /* ½ */ + $"8883 7F7D 7A78 7573 7172 7370 AAC5 BAB2" /* .}zxusqrspź */ + $"ACA5 9EA8 7C82 8384 8988 8C8F 9499 9EA5" /* | */ + $"ADB2 B8BD C3C6 CACF D1D2 D3D3 D582 D60B" /* Ղ. */ + $"D5D3 D1CF CDCD CEC3 9484 7E44 9500 0D0E" /* Ô~D... */ + $"6682 85AF D8D9 D6D2 D2D3 D6D7 D784 D640" /* fׄ@ */ + $"D4D4 D3D3 D2D2 D0CF CDCA C9C5 C3BF 99A6" /* ÿ */ + $"A1A5 A49D 948C 8783 807D 7975 7372 7373" /* }yusrss */ + $"6D83 BBB4 ACA6 A0A4 777E 7F81 8288 898D" /* mw~. */ + $"9399 A1A7 ADB2 B9BE C3C7 CBCF D0D2 D2D3" /* */ + $"D581 D60C D5D4 D2D0 CDCC CDCD AA85 8266" /* Ձ.ͪf */ + $"0E98 000C 3978 818E C7DB D8D4 D1D2 D4D6" /* ...9x */ + $"D785 D63D D4D4 D3D3 D2D1 D0CF CDC9 C6C2" /* ׅ= */ + $"A2A3 A8AD ACA6 9C94 8D88 8480 7B77 7574" /* {wut */ + $"7472 6D6C A7B0 A6A1 A470 797A 7C7F 8489" /* trmlpyz|. */ + $"8E95 9BA2 A7B0 B4B9 BEC4 C8CB CFD0 D1D2" /* */ + $"D3D5 81D6 0BD5 D3D1 CECD CDCF BE8D 8178" /* Ձ.Ͼx */ + $"399B 000C 0860 7F81 A8D8 DBD6 D2D1 D2D4" /* 9...`. */ + $"D785 D63B D5D4 D4D3 D3D2 D0D0 CEC9 C0AB" /* ׅ; */ + $"A9AE B5B4 AEA4 9C93 8D88 837D 7A78 7774" /* }zxwt */ + $"716C 6897 ACA1 A380 7676 7A7D 8388 8E96" /* qlhvvz} */ + $"9AA2 A9B1 B7BC C2C4 C9CD CFD1 D1D3 D3D5" /* */ + $"80D6 0CD5 D4D2 CFCD CCCE CCA4 817F 6008" /* .̤.`. */ + $"9E00 0D2D 7480 8BC1 DCD9 D4D1 D1D3 D6D7" /* ..-t */ + $"D784 D600 D480 D343 D2D1 CFCB BFA7 B0B5" /* ׄ.ԀC˿ */ + $"BBBC B9B0 A69C 938D 8781 7E7C 7873 6F6A" /* ~|xsoj */ + $"6389 A7A0 8F6D 7277 7C80 878C 949B A4AC" /* cmrw| */ + $"B3B9 BEC2 C7CA CDCF D1D2 D3D3 D5D6 D6D5" /* */ + $"D4D3 D1CE CCCD CFB9 8980 742D A200 0C58" /* Ϲt-..X */ + $"7E80 A1D6 DDD9 D4D1 D2D5 D8D8 84D7 00D6" /* ~؄. */ + $"80D4 2ED3 D1CD C2AA B7BC C1C5 C3BD B4A8" /* .ªý */ + $"9C93 8C87 8481 7A73 6D68 6286 A499 6670" /* zsmhbfp */ + $"747B 8086 8E98 9FA6 AFB4 BCC1 C5C9 CDD0" /* t{ */ + $"D2D2 80D4 0ED6 D7D7 D6D5 D3D0 CECE CFCB" /* Ҁ. */ + $"9D80 7E58 A500 0C24 6E7F 86BE DEDA D6D1" /* ~X..$n. */ + $"D0D2 D5D7 84D6 42D5 D4D2 D2D1 CDC8 B9BA" /* ׄBȹ */ + $"C1C8 CCCD C9C1 B4A5 9A93 8E89 827A 736D" /* zsm */ + $"6864 8DA6 616B 7079 8086 8E98 A1A8 AFB5" /* hdakpy */ + $"BDC0 C5CA CCCF D1D1 D3D3 D4D6 D6D5 D4D3" /* */ + $"D0CE CCCD CFB4 867F 6E24 A800 0A4D 7A7D" /* ϴ.n$.Mz} */ + $"9AD4 DDD8 D3CF D0D3 80D7 81D6 40D5 D4D2" /* Ӏׁ@ */ + $"D1D0 CBC6 BFC0 C7CF D3D7 D5CD C1B1 A69D" /* ƿ */ + $"958D 837A 726E 6766 9E66 696E 7983 8892" /* zrngffiny */ + $"9BA2 AAB0 B9BF C2C8 CACE CFD1 D2D3 D3D4" /* */ + $"D6D6 D5D4 D1CF CDCD CEC6 977D 7A4D AB00" /* Ɨ}zM. */ + $"501A 697D 81B7 E0DB D7D1 D0D2 D6D8 D7D8" /* P.i} */ + $"D7D6 D5D5 D4D1 CFCB C5C0 C7CE D5DC DFDF" /* */ + $"DACE C0B5 AA9D 9085 7A72 6D64 7E73 6870" /* zrmd~shp */ + $"7984 8C94 9EA5 AFB5 BDC1 C5CA CDCF D2D2" /* y */ + $"D4D4 D6D6 D7D6 D5D4 D1CF CECF D1AE 807D" /* Ѯ} */ + $"691A AE00 4C46 767C 93D2 E0DA D5D2 D0D3" /* i..LFv| */ + $"D7D9 D9D7 D5D4 D4D0 CEC8 C1B9 CED5 DBE1" /* */ + $"E4E4 E0D9 CEC4 B6A3 9386 7B73 6B6A 7866" /* Ķ{skjxf */ + $"7079 858E 97A0 AAB2 B8BD C2C7 CACE D0D2" /* py */ + $"D3D4 D4D6 D7D7 D6D4 D2D0 CECE D0C6 907C" /* Ɛ| */ + $"7646 B100 4A0E 627B 7DB0 E1DF DAD3 D1D3" /* vF.J.b{} */ + $"D6D9 D8D7 D5D4 D0CE C8C0 B6A5 DDE2 E6E8" /* */ + $"E6E4 E0D9 CEBD A897 8A7D 736C 7C64 707D" /* ν}sl|dp} */ + $"8791 9AA5 AEB6 BAC1 C6CA CDD0 D3D3 D5D5" /* */ + $"D7D7 D8D7 D6D4 D2D0 CFD0 D0A8 7D7B 620E" /* Ш}{b. */ + $"B400 4639 727A 8CCF E3DE D9D3 D2D4 D6D7" /* .F9rz */ + $"D7D6 D1CD C8BF B6AA 99F5 E9E8 E8E7 E4DE" /* ȿ */ + $"D2C1 AD9C 8E7F 7674 6272 7F8A 95A1 AAB1" /* .vtbr. */ + $"B9C0 C4C9 CED0 D3D3 D5D6 D6D8 D9D8 D8D6" /* */ + $"D4D2 D0D1 D3C1 8A7A 7239 B700 4408 5A79" /* zr9.D.Zy */ + $"79A9 E0E3 DED7 D4D3 D4D6 D4D3 CEC8 C0B7" /* y */ + $"A99E 90F6 EDE9 E9E6 DBCE BFAD 9D90 8479" /* οy */ + $"5F77 848E 9AA3 ADB7 BCC2 C7CC CFD3 D4D6" /* _w */ + $"D6D7 D8D9 DAD9 D8D6 D4D2 D1D3 D0A2 7979" /* Тyy */ + $"5A08 BA00 402F 6F79 87C9 E8E1 DCD5 D4D3" /* Z..@/oy */ + $"D3D2 CFCB C3B7 AD9F 9494 CAF6 EFE3 D5C7" /* ÷ */ + $"BBAC A293 6D68 7D89 939D A7B2 B8BF C7CA" /* mh} */ + $"CED2 D5D5 D7D8 D8DA DBDA DAD8 D6D4 D3D3" /* */ + $"D5BD 8579 6F2F BE00 3C54 7678 A2E2 E4DF" /* սyo/. */ + $"8986 8A8B 8C8D 8983 7D7A 7A7B 7D7F 8081" /* }zz{}. */ + $"8385 8A90 A4C1 BAB2 AAAF B8B9 B9BB BCBE" /* */ + $"BFC1 C1C2 C4C5 C6C7 C9CA CBCC CDCD CFD1" /* */ + $"D2D4 D5D6 D8D9 D9DA DCDE DFE0 E1E2 E5BE" /* */ + $"003F 8889 8D8E 9091 908B 8581 807F 8182" /* .?. */ + $"8384 878B 9298 A8B9 B2AB AFB9 B9BA BBBC" /* */ + $"BEC0 C1C1 C2C4 C5C6 C8C9 CACB CDCD CECF" /* */ + $"D1D2 D3D5 D6D8 D9D9 DBDC DEDF E0E2 E3E3" /* */ + $"E5E7 BD00 0A98 898E 9093 9494 918D 8985" /* .˜ */ + $"8084 3285 878A 9097 9FAE B3AA AEB9 B8B9" /* 2 */ + $"BBBC BDBF C1C1 C2C4 C5C6 C8C8 C9CB CCCD" /* */ + $"CECF D0D2 D3D4 D6D8 D9D9 DADC DEDE E0E2" /* */ + $"E2E3 E5E6 E6E8 BC00 41AA 8C91 9395 979A" /* .A */ + $"9995 918C 8887 8788 8B8F 96A0 A7B0 ACAF" /* */ + $"B8B9 B9BB BCBE BFC1 C1C2 C4C5 C6C7 C9CA" /* */ + $"CBCC CDCD CFD1 D2D4 D5D6 D8D9 D9DA DCDE" /* */ + $"DFE0 E1E3 E4E5 E6E6 E7E8 E6BB 0042 C093" /* .B */ + $"9396 989C 9F9F 9D99 938E 8B8B 8D91 959D" /* */ + $"A6AE B0AF B9B9 BABB BDBE C0C1 C1C2 C4C5" /* */ + $"C6C8 C9CA CBCD CDCE CFD1 D2D4 D5D6 D8D9" /* */ + $"D9DA DCDE DFE0 E2E3 E4E5 E6E6 E8E8 E7E3" /* */ + $"E1BA 0043 C9A0 9398 9CA0 A2A3 A39F 9893" /* .Cɠ */ + $"908F 9195 9AA4 ABB1 B1B7 B8B9 BBBC BDBF" /* */ + $"C1C1 C2C4 C5C6 C8C8 C9CB CCCD CECF D0D2" /* */ + $"D3D5 D6D8 D9D9 DADC DEDF E0E2 E2E3 E5E6" /* */ + $"E6E7 E8E7 E5DF DAD9 BA00 42BF 989C A0A3" /* ٺ.B */ + $"A5A7 A7A4 A099 9695 969B A2AA B1B8 B6B8" /* */ + $"B9BB BCBE BFC1 C1C2 C4C5 C6C7 C9CA CBCC" /* */ + $"CDCD CFD1 D2D4 D5D7 D8D9 D9DA DCDE DFE0" /* */ + $"E1E3 E4E5 E6E6 E7E8 E8E5 E0D9 D2D0 BB00" /* л. */ + $"03B7 9DA2 A681 A930 A5A1 9D9B 9DA3 A8AF" /* .0 */ + $"B9B9 B8BA BBBD BEBF C1C1 C2C4 C5C6 C8C9" /* */ + $"CACB CDCD CECF D1D2 D4D5 D6D8 D9D9 DADC" /* */ + $"DEDF E0E2 E3E4 E5E6 E680 E806 E6E1 DBD4" /* . */ + $"CDC7 AABA 0042 D2B0 A3A8 A9AA ABAB A9A6" /* Ǫ.BҰ */ + $"A3A1 A3A8 ADB4 B8B7 BABB BCBE C0C1 C1C2" /* */ + $"C4C5 C6C8 C9CA CBCC CDCE CFD1 D2D3 D5D6" /* */ + $"D8D9 D9DB DCDE DFE0 E2E2 E4E5 E6E7 E7E8" /* */ + $"E9E7 E2DC D7CF C8C1 AABB 0041 C3B3 A8AA" /* .Aó */ + $"ABAC ADAD ABAA A9AA ADB1 B5B7 B9BB BCBE" /* */ + $"BFC1 C1C2 C3C5 C6C7 C9C9 CBCC CDCD CFD1" /* */ + $"D2D3 D5D6 D8D9 D9DA DCDD DFE0 E1E3 E4E5" /* */ + $"E6E6 E7E8 E9E7 E3DD D7D1 C9C2 BCAA BC00" /* ¼. */ + $"04CB BAA9 ACAD 82AF 12B0 B3B5 B7BA BBBC" /* .˺. */ + $"BDBF C0C1 C2C4 C5C6 C7C8 CACB 80CD 20CF" /* ˀ */ + $"D1D2 D4D5 D6D8 D9D9 DADC DEDF E0E1 E2E4" /* */ + $"E5E6 E6E7 E8E9 E8E4 DED8 D1CA C3BC B6AA" /* ü */ + $"BD00 3FD2 BBAB AEB0 B1B2 B2B3 B4B6 B8BA" /* .?һ */ + $"BBBC BEC0 C1C1 C2C4 C5C6 C8C9 CACB CCCD" /* */ + $"CECF D1D2 D3D5 D6D8 D9D9 DBDC DEDF E0E2" /* */ + $"E3E4 E5E6 E7E7 E8E9 E9E5 E1DA D3CC C5BF" /* ſ */ + $"B7B0 AABE 003E D2BD AEB1 B2B3 B4B5 B6B7" /* .>ҽ */ + $"B9BB BCBE BFC1 C1C2 C3C5 C6C7 C9C9 CBCC" /* */ + $"CDCD CFD0 D2D4 D5D6 D8D9 D9DA DCDE DFE0" /* */ + $"E1E3 E4E5 E6E6 E7E8 E9E9 E6E1 DBD4 CCC6" /* */ + $"C0B8 B1AA AABF 0016 D3BF B0B3 B4B6 B7B8" /* ..ӿ */ + $"BABB BCBE BFC0 C1C2 C4C5 C6C7 C8CA CB80" /* ˀ */ + $"CD23 CFD1 D2D4 D5D6 D8D9 D9DA DCDE DFE0" /* # */ + $"E1E2 E4E5 E6E6 E7E8 E9EA E6E2 DBD5 CDC6" /* */ + $"C0BA B1AA A5AA C000 3CD5 C1B2 B5B7 B8BA" /* .< */ + $"BBBC BEC0 C1C1 C2C4 C5C6 C8C9 CACB CCCD" /* */ + $"CECF D1D2 D3D5 D6D8 D9D9 DBDC DEDF E0E2" /* */ + $"E3E4 E5E6 E6E8 E8E9 EAE7 E4DE D6D0 C9C2" /* */ + $"BBB5 ACA6 A0AA C100 3AD5 C2B5 B8B9 BBBC" /* .:µ */ + $"BDBF C1C1 C2C3 C5C6 C7C9 CACB CCCD CDCF" /* */ + $"D0D2 D4D5 D6D8 D9D9 DADC DEDF E0E1 E3E4" /* */ + $"E5E6 E6E7 E8E9 EAE8 E3DF D7D0 C9C3 BBB5" /* û */ + $"AEA7 9FA2 C300 10D7 C5BA BCBC BEBF C1C1" /* ..ź */ + $"C2C4 C5C6 C7C8 CACB 80CD 25CF D1D2 D4D5" /* ˀ% */ + $"D6D8 D9D9 DADC DEDF E0E1 E2E4 E5E6 E6E7" /* */ + $"E8E9 EAE9 E5DF D9D1 C9C4 BDB5 AEA8 9FA0" /* Ľ */ + $"C2C4 0037 D8C9 C0BE C0C1 C1C2 C4C5 C6C8" /* .7 */ + $"C9CA CBCD CDCE CFD1 D2D3 D5D6 D8D9 D9DB" /* */ + $"DCDE DFE0 E2E3 E4E5 E6E6 E8E8 E9EA EAE6" /* */ + $"E1DA D4CC C5BF B8B0 A9A2 9AC7 C500 36FD" /* ſ.6 */ + $"DECC C7C2 C1C2 C4C5 C6C7 C8C9 CBCC CDCE" /* */ + $"CFD1 D2D3 D4D6 D8D9 D9DA DCDE DEE0 E2E2" /* */ + $"E3E5 E6E6 E7E8 E9EA EAE7 E3DC D4CD C7BF" /* ǿ */ + $"BAB2 AAA5 99BB C400 37FD FDFF BFBD CCC9" /* .7 */ + $"C2C4 C5C6 C7C9 CACB CCCD CDCF D1D2 D4D5" /* */ + $"D6D8 D9D9 DADC DEDF E0E1 E3E4 E5E6 E6E7" /* */ + $"E8E9 EAEA E7E3 DDD6 CDC8 C1B9 B2AB A49A" /* */ + $"B0C4 0038 FDAA AABC C5C9 C8D0 CEC6 C6C8" /* .8 */ + $"C9CA CBCD CDCE CFD1 D2D3 D5D6 D8D9 D9DA" /* */ + $"DCDE DFE0 E2E3 E4E5 E6E6 E8E8 E9EA EAE9" /* */ + $"E4DE D8D0 C8C3 BBB4 ADA6 9CA6 E4C2 000B" /* û.. */ + $"FD7F 7FBE C6CA C9C9 C8C7 D1D2 80C9 1ACB" /* ..Ҁ. */ + $"CCCD CECF D0D2 D3D4 D6D8 D9D9 DADC DEDF" /* */ + $"E0E2 E2E3 E5E6 E6E7 E8E9 80EA 0CE6 DFD8" /* . */ + $"D1CA C3BD B5AE A89F 9EDA C100 3AFD 7F7F" /* ý.:.. */ + $"C4C8 CBCA CAC9 C9C8 C7C5 D2D5 CBCB CCCD" /* */ + $"CDCF D1D2 D4D5 D6D8 D9D9 DADC DEDF E0E1" /* */ + $"E3E4 E5E6 E6E7 E8E9 EAEB E9E6 E0D8 D2CB" /* */ + $"C4BD B7AF A8A0 9EC5 C000 3DFD 7F7F C8CA" /* Ľ.=.. */ + $"CCCC CBCB CAC9 C8C7 C5C4 C2D5 DACD CDCE" /* */ + $"CFD1 D2D4 D5D6 D8D9 D9DA DCDE DFE0 E2E3" /* */ + $"E4E5 E6E6 E8E8 E9EA EBEB E7E1 DAD3 CCC6" /* */ + $"BFB7 B1A9 A298 CACB C6BE 003B 7F8E C8CB" /* ƾ.;. */ + $"CDCD CCCB CACA C8C7 C7C5 C4C1 C0BE D5DD" /* */ + $"D0CF D0D2 D3D5 D6D8 D9D9 DADC DEDF E0E2" /* */ + $"E2E3 E5E6 E6E7 E8E9 EAEB EBE8 E2DC D5CD" /* */ + $"C6C1 B9B1 ABA5 99C0 80CE 02CC C880 BA00" /* .Ȁ. */ + $"01AA CC80 CE36 CDCD CCCC CBCA C8C7 C6C4" /* .̀6 */ + $"C2C0 BEBC BAD5 DFD1 D2D4 D5D7 D8D9 D9DA" /* */ + $"DCDE DFE0 E1E3 E4E5 E6E6 E7E8 E9EA EBEB" /* */ + $"E9E3 DCD6 CFC7 C0BB B3AB A59C BC83 D002" /* . */ + $"CECB ABB6 0002 B8CB CF80 CE36 CDCC CCCB" /* ˫..π6 */ + $"CAC9 C7C6 C4C2 C1BF BCBB B9B7 B5DA E3D4" /* */ + $"D5D6 D8D9 D9DA DCDE DFE0 E2E3 E4E5 E6E6" /* */ + $"E8E8 E9EA EBEB E9E5 DFD7 D0C9 C2BB B5AD" /* » */ + $"A69D AB80 CF80 D081 CF01 CBB8 B200 03C1" /* πЁ.˸.. */ + $"CDD0 D080 CF38 CECC CBCA C9C8 C6C4 C3C1" /* Ѐ8 */ + $"BFBD BBBB B8B7 B5B4 B3D8 EBD6 D8D9 D9DB" /* */ + $"DCDE DFE0 E2E2 E4E5 E6E7 E7E8 E9EA EBEB" /* */ + $"EAE6 E0DA D1CA C4BD B6AF A8A0 9ACF CF86" /* Ľφ */ + $"D003 D1D1 CDC1 AE00 04C7 D0D3 D2D2 80D1" /* ...Ҁ */ + $"37CF CECD CCCB C9C7 C6C4 C2C0 BEBC BAB9" /* 7 */ + $"B7B6 B4B3 B4B4 CBED D9D9 DADC DDDF E0E1" /* */ + $"E3E4 E5E6 E6E7 E8E9 EAEA EBEB E7E0 DAD3" /* */ + $"CBC5 BFB7 AFA9 A29A CC81 D085 D280 D301" /* ſ́ЅҀ. */ + $"D0C7 AA00 01C8 D280 D43E D3D3 D2D1 D0CF" /* Ǫ..Ҁ> */ + $"CECD CBCA C8C5 C3C2 C0BE BCBB B9B8 B6B5" /* */ + $"B4B4 B3B2 B2C9 F0DA DCDE DFE0 E1E2 E4E5" /* */ + $"E6E6 E7E8 E9EA EAEC EBE8 E2DA D3CC C5BF" /* ſ */ + $"B8B0 A9A3 9ACA CFD0 D081 D100 D283 D381" /* Ё.҃Ӂ */ + $"D401 D2C8 A600 01CE D382 D516 D4D3 D3D2" /* .Ȧ..ӂ. */ + $"D1CE CDCB C9C6 C4C2 C0BD BCBB B9B8 B6B5" /* */ + $"B4B4 B582 B428 CBF2 DDDF E0E2 E3E4 E5E6" /* ( */ + $"E6E8 E8E9 EAEB ECEC E8E4 DDD5 CFC8 C1B9" /* */ + $"B3AB A59A B7CD CECF CFD0 D0D1 D1D2 D382" /* ӂ */ + $"D483 D501 D3CE A100 029F CED3 84D4 11D3" /* ԃ.Ρ..ӄ. */ + $"D2D1 D0CF CECB C8C5 C3C0 BCBA B7B7 B5B4" /* */ + $"B382 B101 B2B2 80B1 2AB2 CBF0 E0E1 E3E4" /* .* */ + $"E5E6 E6E7 E8E9 EAEA EBEC EAE3 DED6 CEC8" /* */ + $"C2BB B3AD A69D A7C8 C8C9 CACA CCCD CED0" /* » */ + $"D0D1 D2D2 81D3 84D4 02D3 CE9F 9C00 02B8" /* ҁӄ.Ο.. */ + $"D0D4 85D5 48D4 D4D3 D2D1 CFCD CAC7 C4C1" /* ԅH */ + $"BCBA B7B5 B3B2 B2B1 B0B1 B1B0 B0B1 B0B1" /* */ + $"B1B0 B1B0 D1F2 E3E4 E5E6 E6E7 E8E9 EAEA" /* */ + $"EBEC EAE5 DED7 D0C8 C2BC B4AD A79E A1C1" /* ¼ */ + $"C1C3 C6C6 C7C9 CACC CED0 D1D1 D3D3 80D4" /* Ӏ */ + $"86D5 02D4 D0B8 9800 01C3 D188 D547 D4D3" /* .и..шG */ + $"D2D2 D1CE CBC9 C5C2 BDBA B7B4 B2B0 AFAD" /* ½ */ + $"ADAC ADAD AFAE B0AF AEAE ACB0 977C CFEB" /* | */ + $"E5E6 E6E8 E8E9 EAEA ECEC EBE6 E0D9 D2CB" /* */ + $"C3BD B7AF A8A1 9CBD BABD BDBF C1C3 C4C7" /* ý */ + $"C8CA CDD0 D0D1 80D3 00D4 89D5 01D1 C394" /* р.ԉ.Ô */ + $"0001 C7D1 8AD5 15D4 D3D2 D2D1 CECB C9C5" /* ..ъ. */ + $"C0BD B9B5 B2B0 AEAD ACAB AAAC AB80 AA0F" /* . */ + $"ABAA ABAD A573 7073 C4EC E7E7 E8E9 EAEA" /* sps */ + $"80EC 1FE7 E2DA D3CC C6BE B8B1 A9A3 99B6" /* .ƾ */ + $"B2B3 B5B7 B8BA BCBE C3C4 C7CB CDD0 D1D2" /* */ + $"D3D3 D48B D501 D1C7 9000 02CC D3D7 8CD6" /* ԋ.ǐ..׌ */ + $"14D5 D4D3 D2CF CDCB C7C1 BFBA B7B3 B1AF" /* . */ + $"ADAC ABAB AAAB 80AA 32AB A9AB A174 766F" /* 2tvo */ + $"6D73 C2EF E8E9 EAEA EBEC ECE8 E2DC D4CD" /* ms */ + $"C6C0 B8B1 ABA4 9AAE ABAD AEAE AFB2 B5B8" /* */ + $"BBBE C3C6 C9CC D0D2 D3D4 D4D5 8DD6 01D3" /* Ս. */ + $"CC8C 0003 CDD1 D3D3 8CD5 16D4 D4D3 D2D1" /* ̌..ӌ. */ + $"CFCD CAC7 C3BF BAB8 B3B0 AEAC AAA9 A8A7" /* ÿ */ + $"A6A6 80A5 31A6 A478 7A6F 6F71 6E76 C7F0" /* 1xzooqnv */ + $"EAEA EBEC ECE9 E3DC D6CF C7C1 BAB2 ABA5" /* */ + $"9BA7 A6A3 A5A5 A6A8 A9AA AFB5 B8BD C1C6" /* */ + $"C9CE D0D2 D3D3 D48A D506 D4D4 D3D3 D4D2" /* Ԋ. */ + $"CD89 0005 B3D3 D6D4 D3D3 8BD5 25D4 D4D3" /* ͉..Ӌ% */ + $"D2D1 D0CE CBC9 C5C1 BEBA B6B4 B1AE ABA9" /* */ + $"A7A6 A3A3 A4A4 A1A4 7C7E 7270 7071 726E" /* |~rppqrn */ + $"76C7 F180 EC22 EAE5 DED6 D0C9 C2BB B4AD" /* v"» */ + $"A69F A2A2 9E9D 9C9E A0A0 A1A6 ABAE B4BB" /* */ + $"BFC5 C9CC D0D2 D3D3 D489 D508 D4D3 D1D0" /* ԉ. */ + $"D1D3 D4D1 B388 000A 7893 C1D8 D7D5 D4D4" /* ѳ.x */ + $"D5D7 D787 D615 D5D4 D4D3 D2D1 CFCC C9C6" /* ׇ. */ + $"C2BF BDB9 B6B3 AEAD ABA8 A6A4 80A3 0381" /* ¿. */ + $"8578 7480 722A 7172 6E73 C5F4 EDEA E5DF" /* xtr*qrns */ + $"D8D0 CAC3 BCB5 ADA7 9F9F A09B 9B98 9899" /* ü */ + $"9A9D A0A3 AAAF B4BB C0C5 CACD D1D3 D3D4" /* */ + $"D588 D609 D5D3 D1CF CED0 D3BF 9378 8800" /* Ոӿx. */ + $"0C6B 898B A5D1 D7D6 D3D3 D4D6 D6D7 85D6" /* .kׅ */ + $"4AD5 D5D4 D4D2 D2D1 CECC CAC7 C3C1 BEBA" /* J */ + $"B7B3 B0AC ABA7 A5A5 A387 9084 7B77 7675" /* {wvu */ + $"7473 7272 6E76 C8F2 E6E0 DAD2 CBC4 BEB6" /* tsrrnvľ */ + $"B0A8 A1A9 9097 9594 9394 9597 999C A1A6" /* */ + $"ADB4 BAC0 C5CB CDD2 D2D3 D4D5 86D6 0BD5" /* Ն. */ + $"D4D2 CFCD CCCE CBA3 8B89 6B89 000B 2878" /* ˣk..(x */ + $"898D BBD7 D6D4 D2D2 D4D6 86D5 1FD4 D4D3" /* ֆ. */ + $"D3D1 D1CF CECC CAC7 C3C1 BEBB B7B3 AEAC" /* */ + $"A9A6 A491 8D91 867E 7B79 7775 7480 7326" /* ~{ywuts& */ + $"6F78 C8E6 DBD5 CDC5 C0B9 B0AA A3A6 8D8F" /* ox */ + $"9090 8D8E 8F91 9497 9C9F A6AE B5BB C0C6" /* */ + $"CACF D1D1 D3D3 D484 D50C D4D3 D2CF CDCB" /* Ԅ. */ + $"CCCE B68D 8978 288C 0006 5183 879C CFD8" /* ζx(..Q */ + $"D580 D201 D4D6 85D5 47D4 D3D2 D2D1 D1D0" /* Հ.օG */ + $"CECD CBC8 C6C3 C0BC B9B4 B0AE A99C 8C9B" /* */ + $"928B 8480 7D7A 7876 7574 7373 6F77 C4D9" /* }zxvutssow */ + $"CEC7 BFB9 B2AA A4A5 8A8A 898A 8889 8A8D" /* ǿ */ + $"9095 9B9E A3AB B0B7 BDC3 C8CC CFD1 D2D3" /* */ + $"D484 D50B D4D3 D0CE CCCB CDC7 9B87 8351" /* Ԅ.ǛQ */ + $"8F00 0D16 6F86 89B4 D6D6 D3D1 D1D4 D5D6" /* ...o */ + $"D684 D545 D3D3 D2D2 D1D0 D0CE CCCA C7C4" /* քE */ + $"C1BE BAB5 B2AE 8AA5 9B98 918A 8580 7D7B" /* }{ */ + $"7977 7574 7372 6F8D CFC9 C1BA B3AC A5A2" /* ywutsro */ + $"9886 8586 8788 898B 8E92 989F A3AB B0B7" /* */ + $"BCC2 C6CA CED0 D1D2 D3D4 82D5 0CD4 D3D1" /* Ԃ. */ + $"CFCC CBCC CDAF 8986 6F16 9200 0C44 7E84" /* ͯo...D~ */ + $"95CA DAD7 D5D2 D3D5 D8D7 84D6 43D5 D4D4" /* ׄC */ + $"D3D2 D2D1 D1CF CCCA C6C3 C2BD B7A8 A29F" /* ½ */ + $"A09E 988F 8984 817E 7B79 7774 7373 7472" /* ~{ywtsstr */ + $"ABC7 BCB5 AEA7 A0AA 7D82 8384 8988 8C8F" /* Ǽ} */ + $"9499 9EA5 ADB2 B8BD C3C6 CACF D1D2 D3D3" /* */ + $"D582 D60B D5D3 D1CF CDCD CEC3 9484 7E44" /* Ղ.Ô~D */ + $"9500 0D0E 6682 85AF D8D9 D6D2 D2D3 D6D7" /* ...f */ + $"D784 D640 D4D4 D3D3 D2D2 D0CF CDCA C9C5" /* ׄ@ */ + $"C3BF 99A8 A3A7 A69F 958E 8985 827E 7A77" /* ÿ~zw */ + $"7473 7475 6E84 BEB7 AEA8 A2A6 777E 7F81" /* tstunw~. */ + $"8288 898D 9399 A1A7 ADB2 B9BE C3C7 CBCF" /* */ + $"D0D2 D2D3 D581 D60C D5D4 D2D0 CDCC CDCD" /* Ձ. */ + $"AA85 8266 0E98 000C 3978 818E C7DB D8D4" /* f...9x */ + $"D1D2 D4D6 D785 D619 D4D4 D3D3 D2D1 D0CF" /* ׅ. */ + $"CDC9 C6C2 A3A5 AAB0 AEA8 9E96 8F8A 8682" /* £ */ + $"7D79 8076 2074 6F6E AAB2 A8A3 A571 797A" /* }yv tonqyz */ + $"7C7F 8489 8E95 9BA2 A7B0 B4B9 BEC4 C8CB" /* |. */ + $"CFD0 D1D2 D3D5 81D6 0BD5 D3D1 CECD CDCF" /* Ձ. */ + $"BE8D 8178 399B 000C 0860 7F81 A8D8 DBD6" /* x9...`. */ + $"D2D1 D2D4 D785 D63B D5D4 D4D3 D3D2 D0D0" /* ׅ; */ + $"CEC9 C0AD ABB1 B6B6 B1A7 9E95 8F89 857F" /* . */ + $"7B7A 7876 736D 6999 AFA3 A581 7676 7A7D" /* {zxvsmivvz} */ + $"8388 8E96 9AA2 A9B1 B7BC C2C4 C9CD CFD1" /* */ + $"D1D3 D3D5 80D6 0CD5 D4D2 CFCD CCCE CCA4" /* Հ.̤ */ + $"817F 6008 9E00 0D2D 7480 8BC1 DCD9 D4D1" /* .`...-t */ + $"D1D3 D6D7 D784 D600 D480 D343 D2D1 CFCB" /* ׄ.ԀC */ + $"BFA9 B2B7 BDBE BBB2 A89E 958F 8883 807E" /* ~ */ + $"7A76 706B 648B A9A2 906D 7277 7C80 878C" /* zvpkdmrw| */ + $"949B A4AC B3B9 BEC2 C7CA CDCF D1D2 D3D3" /* */ + $"D5D6 D6D5 D4D3 D1CE CCCD CFB9 8980 742D" /* Ϲt- */ + $"A200 0C58 7E80 A1D6 DDD9 D4D1 D2D5 D8D8" /* ..X~ */ + $"84D7 00D6 80D4 2ED3 D1CD C2AC B9BE C3C8" /* .ր.¬ */ + $"C6C0 B6AA 9E95 8E89 8682 7C74 6F6A 6387" /* |tojc */ + $"A69B 6670 747B 8086 8E98 9FA6 AFB4 BCC1" /* fpt{ */ + $"C5C9 CDD0 D2D2 80D4 0ED6 D7D7 D6D5 D3D0" /* Ҁ. */ + $"CECE CFCB 9D80 7E58 A500 0C24 6E7F 86BE" /* ˝~X..$n. */ + $"DEDA D6D1 D0D2 D5D7 84D6 42D5 D4D2 D2D1" /* ׄB */ + $"CDC8 BBBD C4CA CFD1 CCC3 B6A7 9C95 908B" /* Ȼö */ + $"847C 746F 6A65 8FA7 616B 7079 8086 8E98" /* |tojeakpy */ + $"A1A8 AFB5 BDC0 C5CA CCCF D1D1 D3D3 D4D6" /* */ + $"D6D5 D4D3 D0CE CCCD CFB4 867F 6E24 A800" /* ϴ.n$. */ + $"0A4D 7A7D 9AD4 DDD8 D3CF D0D3 80D7 81D6" /* Mz}Ӏׁ */ + $"40D5 D4D2 D1D0 CBC6 C1C2 CAD1 D6D9 D8D0" /* @ */ + $"C3B3 A89F 978F 857B 746F 6868 A067 696E" /* ó{tohhgin */ + $"7983 8892 9BA2 AAB0 B9BF C2C8 CACE CFD1" /* y */ + $"D2D3 D3D4 D6D6 D5D4 D1CF CDCD CEC6 977D" /* Ɨ} */ + $"7A4D AB00 501A 697D 81B7 E0DB D7D1 D0D2" /* zM.P.i} */ + $"D6D8 D7D8 D7D6 D5D5 D4D1 CFCB C5C1 C9D0" /* */ + $"D8DE E1E2 DDD1 C3B7 AD9F 9186 7B74 6E65" /* ÷{tne */ + $"8074 6870 7984 8C94 9EA5 AFB5 BDC1 C5CA" /* thpy */ + $"CDCF D2D2 D4D4 D6D6 D7D6 D5D4 D1CF CECF" /* */ + $"D1AE 807D 691A AE00 4C46 767C 93D2 E0DA" /* Ѯ}i..LFv| */ + $"D5D2 D0D3 D7D9 D9D7 D5D4 D4D0 CEC8 C1B9" /* */ + $"D0D7 DEE4 E7E7 E3DB D1C6 B8A5 9588 7C74" /* Ƹ|t */ + $"6D6B 7A66 7079 858E 97A0 AAB2 B8BD C2C7" /* mkzfpy */ + $"CACE D0D2 D3D4 D4D6 D7D7 D6D4 D2D0 CECE" /* */ + $"D0C6 907C 7646 B100 4A0E 627B 7DB0 E1DF" /* Ɛ|vF.J.b{} */ + $"DAD3 D1D3 D6D9 D8D7 D5D4 D0CE C8C0 B6A6" /* */ + $"DFE5 E8EB E9E7 E3DC D1C0 AB99 8C7F 756D" /* .um */ + $"7D64 707D 8791 9AA5 AEB6 BAC1 C6CA CDD0" /* }dp} */ + $"D3D3 D5D5 D7D7 D8D7 D6D4 D2D0 CFD0 D0A8" /* Ш */ + $"7D7B 620E B400 4639 727A 8CCF E3DE D9D3" /* }{b..F9rz */ + $"D2D4 D6D7 D7D6 D1CD C8BF B6AA 9AF8 ECEB" /* ȿ */ + $"EBEA E7E1 D4C3 AF9E 9080 7776 6372 7F8A" /* ïwvcr. */ + $"95A1 AAB1 B9C0 C4C9 CED0 D3D3 D5D6 D6D8" /* */ + $"D9D8 D8D6 D4D2 D0D1 D3C1 8A7A 7239 B700" /* zr9. */ + $"4408 5A79 79A9 E0E3 DED7 D4D3 D4D6 D4D3" /* D.Zyy */ + $"CEC8 C0B7 A99E 91FA F0EC ECE9 DDD1 C1AF" /* */ + $"A092 857B 6077 848E 9AA3 ADB7 BCC2 C7CC" /* {`w */ + $"CFD3 D4D6 D6D7 D8D9 DAD9 D8D6 D4D2 D1D3" /* */ + $"D0A2 7979 5A08 BA00 402F 6F79 87C9 E8E1" /* ТyyZ..@/oy */ + $"DCD5 D4D3 D3D2 CFCB C3B7 AD9F 9495 CCF9" /* ÷ */ + $"F2E6 D8C9 BDAE A495 6E68 7D89 939D A7B2" /* ɽnh} */ + $"B8BF C7CA CED2 D5D5 D7D8 D8DA DBDA DAD8" /* */ + $"D6D4 D3D3 D5BD 8579 6F2F BE00 3C54 7678" /* սyo/.K */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"F79E 4B3E 2E1E 1108 0401 0000 0000 0000" /* K>............ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0102" /* ................ */ + $"050C 1625 3544 65CE FFFF FFFF FFFF FFFF" /* ...%5De */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFCE" /* */ + $"6544 3525 160C 0502 0100 0000 0000 0000" /* eD5%............ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0103 0810 1D2C 3C4A 92F3 FFFF FFFF FFFF" /* .....,L */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFFF FAA2 4B3E 2F1F 1209 0401 0000 0000" /* K>/........ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0102 050C" /* ................ */ + $"1725 3546 66D1 FFFF FFFF FFFF FFFF FFFF" /* .%5Ff */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* */ + $"FFD1 6545 3525 170C 0502 0100 0000 0000" /* eE5%.......... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0103" /* ................ */ + $"0810 1D2D 3D4A 92F6 FFFF FFFF FFFF FFFF" /* ...-=J */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFF6" /* */ + $"924A 3D2D 1D10 0803 0100 0000 0000 0000" /* J=-............ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0205 0B16 2434 435F C5FF FFFF FFFF FFFF" /* ....$4C_ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF C55F" /* _ */ + $"4334 2416 0B05 0200 0000 0000 0000 0000" /* C4$............. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0001 0307 0F1B 2B3B 4988 EEFF FFFF FFFF" /* ......+;I */ + $"FFFF FFFF FFFF FFFF FFFF FFFF EE88 493B" /* I; */ + $"2B1B 0F07 0301 0000 0000 0000 0000 0000" /* +............... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0001 040A 1422 3241 58BB FFFF FFFF" /* ......"2AX */ + $"FFFF FFFF FFFF FFFF FFFF FFBB 5841 3222" /* XA2" */ + $"140A 0401 0000 0000 0000 0000 0000 0000" /* ............... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0103 060E 1A29 3947 7EE7 FFFF" /* .........)9G~ */ + $"FFFF FFFF FFFF FFFF FFE7 7E47 3929 1A0E" /* ~G9).. */ + $"0603 0100 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0104 0913 2031 4052 AEFC" /* ......... 1@R */ + $"FFFF FFFF FFFF FFFC AE52 4031 2013 0904" /* R@1 .. */ + $"0100 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0001 0306 0D19 2838 4670" /* ............(8Fp */ + $"E1FF FFFF FFFF E170 4638 2819 0D06 0301" /* pF8(..... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0001 0409 121F 2F3E" /* ............./> */ + $"4FA2 FAFF FAA2 4F3E 2F1F 1209 0401 0000" /* OO>/...... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0102 060C 1726" /* ...............& */ + $"3645 69D3 6945 3626 170C 0602 0100 0000" /* 6EiiE6&........ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0103 0811" /* ................ */ + $"1E2D 3A40 3A2D 1E11 0803 0100 0000 0000" /* .-:@:-.......... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0205" /* ................ */ + $"0C15 2026 2015 0C05 0200 0000 0000 0000" /* .. & ........... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0001" /* ................ */ + $"0307 0C0F 0C07 0301 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0001 0304 0301 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 00" /* ... */ +}; + +data 'plst' (0) { + $"3C3F 786D 6C20 7665 7273 696F 6E3D 2231" /* ....CFBund */ + $"6C65 4465 7665 6C6F 706D 656E 7452 6567" /* leDevelopmentReg */ + $"696F 6E3C 2F6B 6579 3E0D 093C 7374 7269" /* ion.English.CFBund */ + $"6C65 4963 6F6E 4669 6C65 3C2F 6B65 793E" /* leIconFile */ + $"0D09 3C73 7472 696E 673E 3135 303C 2F73" /* .150.CFB */ + $"756E 646C 6549 6E66 6F44 6963 7469 6F6E" /* undleInfoDiction */ + $"6172 7956 6572 7369 6F6E 3C2F 6B65 793E" /* aryVersion */ + $"0D09 3C73 7472 696E 673E 362E 303C 2F73" /* .6.0.CFB */ + $"756E 646C 6550 6163 6B61 6765 5479 7065" /* undlePackageType */ + $"3C2F 6B65 793E 0D09 3C73 7472 696E 673E" /* . */ + $"4150 504C 3C2F 7374 7269 6E67 3E0D 093C" /* APPL.< */ + $"6B65 793E 4346 4275 6E64 6C65 5369 676E" /* key>CFBundleSign */ + $"6174 7572 653C 2F6B 6579 3E0D 093C 7374" /* ature.aplt.LSPrefe */ + $"7273 4361 7262 6F6E 3C2F 6B65 793E 0D09" /* rsCarbon. */ + $"3C74 7275 652F 3E0D 3C2F 6469 6374 3E0D" /* .. */ + $"3C2F 706C 6973 743E 0D" /* . */ +}; + +data 'scpt' (128) { + $"4661 7364 5541 5320 312E 3130 312E 3130" /* FasdUAS 1.101.10 */ + $"0E00 0000 040F FFFF 0001 0002 0003 01FF" /* ............. */ + $"FF00 000D 0001 0002 6C00 0100 0000 00FF" /* .......l...... */ + $"FE00 0401 FFFE 0000 0C00 0400 2000 1A20" /* ......... .. */ + $"4E75 6C6C 2053 6372 6970 742C 206E 6565" /* Null Script, nee */ + $"6420 7468 6520 6170 7000 0200 000E 0002" /* d the app....... */ + $"0000 0F10 0003 0002 FFFD 0005 01FF FD00" /* ............ */ + $"0010 0005 0000 6173 6372 0001 000C FADE" /* ......ascr.... */ + $"DEAD" /* ޭ */ +}; + +data 'spsh' (0) { + $"0000" /* .. */ +}; + +data 'CODE' (0, purgeable) { + $"0000 0028 0000 0000 0000 0008 0000 0020" /* ...(........... */ + $"0064 3F3C 0001 A9F0" /* .d?<.. */ +}; + +data 'CODE' (1, locked, preload) { + $"0000 0001 4E56 FFF8 2F03 7600 2F03 303C" /* ....NV/.v./.0< */ + $"A1AD A746 261F 2D48 FFF8 2F03 303C A89F" /* F&.-H/.0< */ + $"A746 261F 202E FFF8 B1C0 6720 2F03 203C" /* F&. .g /. < */ + $"6370 6E74 41EE FFFC 2248 A1AD 2288 261F" /* cpntA"H"&. */ + $"4A40 6608 4AAE FFFC 6702 7601 1003 262E" /* J@f.Jg.v...&. */ + $"FFF4 4E5E 4E75 8F47 6F74 436F 6D70 6F6E" /* N^NuGotCompon */ + $"656E 744D 6772 0000 4E56 0000 2F0C 4EBA" /* entMgr..NV../.N */ + $"FF94 4A00 672A 598F 2F3C 6170 6C74 2F3C" /* J.g*Y/ So, is there a better way, in RPM 3, to populate %files? +> Because I know +> 'buildroot' and it has nothing to do with %files. + +I found this bit of code in a .spec file to build a %files list on the fly +and have been using it ever since. I've always thought RPM should be able +to provide a default %files list in the event one isn't present in the .spec +file. + +-- +John Ross Hunt +bigboote@mediaone.net + + + +%define pkg_name foo + +%install +rm -rf $RPM_BUILD_ROOT +make install DESTDIR=$RPM_BUILD_ROOT + +cd $RPM_BUILD_ROOT +find . -type d | sed '1,2d;s,^\.,\%attr(-\,root\,root) \%dir ,' > \ + $RPM_BUILD_DIR/file.list.%{pkg_name} + +find . -type f | sed -e 's,^\.,\%attr(-\,root\,root) ,' \ + -e '/\/etc\//s|^|%config|' >> \ + $RPM_BUILD_DIR/file.list.%{pkg_name} + +find . -type l | sed 's,^\.,\%attr(-\,root\,root) ,' >> \ + $RPM_BUILD_DIR/file.list.%{pkg_name} + +%clean +rm -rf $RPM_BUILD_ROOT $RPM_BUILD_DIR/file.list.%{pkg_name} + +%files -f ../file.list.%{pkg_name} +%doc README TODO example +----------------------------------------------------------------- diff --git a/bochs/build/redhat/bochs.rpmspec.template b/bochs/build/redhat/bochs.rpmspec.template new file mode 100644 index 00000000..f48ec8d7 --- /dev/null +++ b/bochs/build/redhat/bochs.rpmspec.template @@ -0,0 +1,81 @@ +Summary: Bochs Project x86 PC Emulator +Name: bochs +Version: @SEDVERSION@ +Release: 1 +License: LGPL +Group: Applications/Emulators +URL:http://bochs.sourceforge.net +Packager:Volker Ruppert +Source:bochs-@SEDVERSION@.tar.gz +BuildRoot: /var/tmp/%{name}-buildroot + +%description +Bochs is a highly portable open source IA-32 (x86) PC emulator written +in C++, that runs on most popular platforms. It includes emulation of +the Intel x86 CPU, common I/O devices, and a custom BIOS. Currently, +Bochs can be compiled to emulate a 386, 486, Pentium, Pentium Pro or +AMD64 CPU, including optional MMX, SSEx and 3DNow! instructions. +Bochs is capable of running most Operating Systems inside the emulation +including Linux, DOS, Windows 9X/NT/2000/XP or Windows 7. + +%define pkg_name bochs + +%prep + rm -rf $RPM_BUILD_DIR/bochs-@SEDVERSION@ + tar xzvf $RPM_SOURCE_DIR/bochs-@SEDVERSION@.tar.gz + if test "/" != $RPM_BUILD_ROOT; then + rm -rf $RPM_BUILD_ROOT + fi +%build + cd $RPM_BUILD_DIR/bochs-@SEDVERSION@ + CONFIGURE_ARGS="--prefix=/usr --mandir=$RPM_BUILD_ROOT/%{_mandir}" + export CONFIGURE_ARGS + sh .conf.linux + make + make unpack_dlx # must use prefix=/usr since this step sets up + # the paths in dlx bochsrc file. +%install + pwd + cd $RPM_BUILD_DIR/bochs-@SEDVERSION@ + for i in "" usr usr/bin usr/lib usr/share usr/share/doc %{_mandir}; do + if ! test -d $RPM_BUILD_ROOT/$i; then mkdir $RPM_BUILD_ROOT/$i; fi + done + make install install_dlx prefix=$RPM_BUILD_ROOT/usr + # Build list of plugins on the fly (if any). This allows the + # spec file to support RPM building with or without plugins. + cd $RPM_BUILD_ROOT + find ./usr/lib -type d | sed '1,2d;s,^\.,\%attr(-\,root\,root) \%dir ,' > \ + $RPM_BUILD_DIR/file.list.%{pkg_name} + find ./usr/lib -type f | sed -e 's,^\.,\%attr(-\,root\,root) ,' \ + -e '/\/etc\//s|^|%config|' >> \ + $RPM_BUILD_DIR/file.list.%{pkg_name} + find ./usr/lib -type l | sed 's,^\.,\%attr(-\,root\,root) ,' >> \ + $RPM_BUILD_DIR/file.list.%{pkg_name} + # We could use the same technique to produce the complete file list, + # with only one very minor problem: it lists directories that are + # used by other programs, so when you remove the package you get + # errors like + # error: cannot remove /usr/share/doc - directory not empty + +%files -f file.list.%{pkg_name} +%defattr(-, root, root) + /usr/bin/bochs + /usr/bin/bochs-dlx + /usr/bin/bxcommit + /usr/bin/bximage + /usr/share/bochs/* + /usr/share/doc/* + %{_mandir}/* + +%clean + rm -rf $RPM_BUILD_DIR/bochs-@SEDVERSION@ + rm -rf $RPM_BUILD_DIR/file.list.%{pkg_name} + if test "/" != $RPM_BUILD_ROOT; then + rm -rf $RPM_BUILD_ROOT + fi +%preun + # clean up the bochsout.txt that is always produced if you + # run bochs-dlx. + rm -rf /usr/share/bochs/dlxlinux/bochsout.txt +%postun + rmdir /usr/share/bochs > /dev/null 2>&1 diff --git a/bochs/build/redhat/make-rpm b/bochs/build/redhat/make-rpm new file mode 100755 index 00000000..d281be7b --- /dev/null +++ b/bochs/build/redhat/make-rpm @@ -0,0 +1,100 @@ +#!/bin/bash -x +######################################################################### +# $Id$ +######################################################################### +# build/redhat/make-rpm +# +# This script creates an RPM from the bochs directory. You must run +# it as root from the top of the source directory (where the configure +# scripts are). Then just run: +# ./build/redhat/make-rpm +# +######################################################################### + +CAT=cat +RM=rm +CP=cp +MV=mv +MKDIR=mkdir +GREP=grep +ECHO=echo +RPM=rpm +RPMBUILD=/usr/bin/rpmbuild +SED=sed +TAR=tar +RPMSRCPATH=_rpm_top +SOURCES=${RPMSRCPATH}/SOURCES +SPECS=${RPMSRCPATH}/SPECS +RPMSPEC="build/redhat/bochs.rpmspec.template" +TMPDIR=/tmp + +echo Reading version from configure.in script. +VERSION='unknown' +eval `${GREP} '^VERSION="' configure.in` +if test $? != 0 -o "$VERSION" = unknown; then + echo Could not get version number from configure.in script. + echo Exiting. + exit 1 +fi + +# clean up previous rpm builds +${RM} -rf *.rpm ${RPMSRCPATH} +if test -f Makefile; then + make dist-clean +fi + +# make a TAR.GZ of the entire source directory, exactly as it is. The +# tar is placed in $SOURCES/bochs-$VERSION.tar.gz. Because the current +# directory could be named nearly anything, I copy all the contents into +# $SOURCES/bochs-$VERSION and then build a tar in $SOURCES. + +${RM} -rf ${TMPDIR}/bochs-${VERSION} +test $? = 0 || exit 1 +${MKDIR} ${TMPDIR}/bochs-${VERSION} +test $? = 0 || exit 1 +${TAR} cf - * .??* | (cd ${TMPDIR}/bochs-${VERSION} && tar xf -) +test $? = 0 || exit 1 +(cd ${TMPDIR}; tar czf bochs-${VERSION}.tar.gz --exclude=CVS bochs-${VERSION}) +test $? = 0 || exit 1 +${RM} -rf ${TMPDIR}/bochs-${VERSION} +test $? = 0 || exit 1 + +# create RPM build area +rm -rf ${RPMSRCPATH} +mkdir ${RPMSRCPATH} ${RPMSRCPATH}/SOURCES ${RPMSRCPATH}/SPECS ${RPMSRCPATH}/BUILD ${RPMSRCPATH}/RPMS ${RPMSRCPATH}/SRPMS +test $? = 0 || exit 1 # test that mkdir succeeded + +# copy source into sources +${MV} ${TMPDIR}/bochs-${VERSION}.tar.gz ${SOURCES} +test $? = 0 || exit 1 + +# copy the spec into SPECS. The template is in $RPMSPEC, and we use +# SED to substitute in the version number. +${RM} -f ${SPECS}/bochs.spec +test $? = 0 || exit 1 +${CAT} ${RPMSPEC} | ${SED} "s/@SEDVERSION@/${VERSION}/g" > ${SPECS}/bochs.spec +test $? = 0 || exit 1 + +# finally, start the rpm build. +if [ -x ${RPMBUILD} ] +then + ${RPMBUILD} -ba --define "_topdir `pwd`/${RPMSRCPATH}" ${SPECS}/bochs.spec +else + ${RPM} -ba --define "_topdir `pwd`/${RPMSRCPATH}" ${SPECS}/bochs.spec +fi + +# test status +if test $? = 0; then + echo RPM build succeeded +else + echo RPM build failed. + exit 1 +fi + +# copy all rpms out into main directory +ALLRPMS=`find ${RPMSRCPATH} -name '*.rpm'` +if test "$ALLRPMS" != ""; then + echo Moving .rpm files into the main directory. + mv ${ALLRPMS} . + ls -l *.rpm +fi diff --git a/bochs/build/win32/README.win32-binary b/bochs/build/win32/README.win32-binary new file mode 100644 index 00000000..e69de29b diff --git a/bochs/build/win32/bochs.win32.manifest b/bochs/build/win32/bochs.win32.manifest new file mode 100755 index 00000000..c0a09c97 --- /dev/null +++ b/bochs/build/win32/bochs.win32.manifest @@ -0,0 +1,22 @@ + + + +Quartus + + + + + + diff --git a/bochs/build/win32/bochs.win64.manifest b/bochs/build/win32/bochs.win64.manifest new file mode 100755 index 00000000..58fb3e66 --- /dev/null +++ b/bochs/build/win32/bochs.win64.manifest @@ -0,0 +1,22 @@ + + + +Quartus + + + + + + diff --git a/bochs/build/win32/cc2cpp b/bochs/build/win32/cc2cpp new file mode 100755 index 00000000..8cc1fa22 --- /dev/null +++ b/bochs/build/win32/cc2cpp @@ -0,0 +1,6 @@ +#!/bin/sh + +list=`find . -name '*.cc' | sed 's/\.cc$//'` +for i in $list; do + mv ${i}.cc ${i}.cpp +done diff --git a/bochs/build/win32/cpp2cc b/bochs/build/win32/cpp2cc new file mode 100755 index 00000000..f63e7ea9 --- /dev/null +++ b/bochs/build/win32/cpp2cc @@ -0,0 +1,6 @@ +#!/bin/sh + +list=`find . -name '*.cpp' | sed 's/\.cpp$//'` +for i in $list; do + mv ${i}.cpp ${i}.cc +done diff --git a/bochs/build/win32/diffcc2cpp b/bochs/build/win32/diffcc2cpp new file mode 100755 index 00000000..165ab40f --- /dev/null +++ b/bochs/build/win32/diffcc2cpp @@ -0,0 +1,6 @@ +#!/bin/sh + +list=`find . -name '*.cpp' | sed 's/\.cpp$//'` +for i in $list; do + diff -u ${i}.cc ${i}.cpp +done diff --git a/bochs/build/win32/nsis/Makefile.in b/bochs/build/win32/nsis/Makefile.in new file mode 100644 index 00000000..efa3404d --- /dev/null +++ b/bochs/build/win32/nsis/Makefile.in @@ -0,0 +1,30 @@ +# To build an NSIS installer, get NSIS version 2.0a7 from +# http://sourceforge.net/projects/nsis +# Fix the MAKENSIS variable so that you have the correct path. +# Unzip the windows binary release into a subdirectory of this +# directory, for example "2.0.pre2". Make sure the VERSION +# variable has the same name as the directory, and in bochs.nsi +# the VER_MAJOR, VER_MINOR, and VER_REV values should also match. +# +# Type make, and it should build an installer called Bochs-${VERSION}.exe + +MAKENSIS='c:/Program Files/NSIS/makensis' + +VERSION=@VERSION@ +TARGET=Bochs-${VERSION}.exe +DLXDIR=bochs-${VERSION}/dlxlinux + +all: ${TARGET} + +fixups:: + if test -f ${DLXDIR}/bochsrc.txt; then mv ${DLXDIR}/bochsrc.txt ${DLXDIR}/bochsrc.bxrc; fi + rm -f ${DLXDIR}/*.bat + +${TARGET}: fixups bochs.nsi + rm -rf ${TARGET} + ${MAKENSIS} bochs.nsi + test -f ${TARGET} + ls -l ${TARGET} + +clean:: + rm -rf ${TARGET} diff --git a/bochs/build/win32/nsis/bochs.ico b/bochs/build/win32/nsis/bochs.ico new file mode 100644 index 0000000000000000000000000000000000000000..53b9b54824e25695411596fa543993674e391cff GIT binary patch literal 766 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 XlQi&rF<#&tCo@_RKsNUPI|Bm%?;RM5 literal 0 HcmV?d00001 diff --git a/bochs/build/win32/nsis/logo.ico b/bochs/build/win32/nsis/logo.ico new file mode 100755 index 0000000000000000000000000000000000000000..34e66cd67216330e4c786c250b6e5ef76b934560 GIT binary patch literal 174246 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

Uza?+~#Cynj@$&E`^RNc02N#7VXN7KU)SMmE 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 literal 0 HcmV?d00001 diff --git a/bochs/build/win32/vs2008ex-workspace.zip b/bochs/build/win32/vs2008ex-workspace.zip new file mode 100644 index 0000000000000000000000000000000000000000..81faaa718be19438f7c5b2f0146c959dfce34490 GIT binary patch literal 19190 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 TH!B-R5ibx1Ff%Yra0l@KCASMR literal 0 HcmV?d00001 diff --git a/bochs/bx_debug/Makefile.in b/bochs/bx_debug/Makefile.in new file mode 100644 index 00000000..6befd8cc --- /dev/null +++ b/bochs/bx_debug/Makefile.in @@ -0,0 +1,141 @@ +# Copyright (C) 2001 The Bochs Project +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + + +@SUFFIX_LINE@ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_builddir = .. +top_srcdir = @top_srcdir@ + +SHELL = /bin/sh + +@SET_MAKE@ + +CC = @CC@ +CFLAGS = @CFLAGS@ @GUI_CFLAGS@ +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ @GUI_CXXFLAGS@ + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +RANLIB = @RANLIB@ + +# Definitely use flex. Use flex version >= 2.5.4 +# Flex version 2.5.2 was reported not to work +LEX = flex +YACC = yacc + + +# =========================================================== +# end of configurable options +# =========================================================== + + +BX_OBJS = \ + dbg_main.o \ + symbols.o \ + linux.o \ + +BX_PARSER_OBJS = \ + parser.o \ + lexer.o + +BX_INCLUDES = debug.h + +BX_INCDIRS = -I.. -I$(srcdir)/.. -I../@INSTRUMENT_DIR@ -I$(srcdir)/../@INSTRUMENT_DIR@ -I. -I$(srcdir)/. + +all: libdebug.a + +.@CPP_SUFFIX@.o: + $(CXX) @DASH@c $(BX_INCDIRS) $(CXXFLAGS) @CXXFP@$< @OFP@$@ + + +.c.o: + $(CC) @DASH@c $(BX_INCDIRS) $(CFLAGS) @CFP@$< @OFP@$@ + + + +libdebug.a: $(BX_OBJS) $(BX_PARSER_OBJS) + @RMCOMMAND@ libdebug.a + @MAKELIB@ $(BX_OBJS) $(BX_PARSER_OBJS) + $(RANLIB) libdebug.a + +$(BX_OBJS): $(BX_INCLUDES) + + +clean: + @RMCOMMAND@ *.o + @RMCOMMAND@ libdebug.a + +dist-clean: clean + @RMCOMMAND@ Makefile + +parse-clean: + @RMCOMMAND@ -f lexer.c + @RMCOMMAND@ -f parser.c + @RMCOMMAND@ -f parser.h + +dbg_main.o: debug.h +sim2.o: debug.h + +parser.c: parser.y + @/bin/rm -f y.tab.c parser.c + @/bin/rm -f y.tab.h parser.h + $(YACC) -p bx -d $< + @/bin/mv -f y.tab.c parser.c + @/bin/mv -f y.tab.h parser.h + @echo '#endif /* if BX_DEBUGGER */' >> parser.c + @echo '/* The #endif is appended by the makefile after running yacc. */' >> parser.c + +lexer.c: lexer.l + $(LEX) -Pbx -t $< > lexer.c + +########################################### +# dependencies generated by +# gcc -MM -I. -I.. -I../instrument/stubs *.c *.cc | sed 's/\.cc/.@CPP_SUFFIX@/g' +########################################### +lexer.o: lexer.c debug.h ../config.h ../osdep.h +parser.o: parser.c debug.h ../config.h ../osdep.h +dbg_main.o: dbg_main.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h ../cpu/cpu.h \ + ../cpu/model_specific.h ../cpu/crregs.h ../cpu/descriptor.h \ + ../cpu/instr.h ../cpu/ia_opcodes.h ../cpu/lazy_flags.h ../cpu/icache.h \ + ../cpu/apic.h ../cpu/i387.h ../fpu/softfloat.h ../fpu/tag_w.h \ + ../fpu/status_w.h ../fpu/control_w.h ../cpu/xmm.h ../iodev/iodev.h +linux.o: linux.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../cpu/cpu.h ../cpu/model_specific.h ../cpu/crregs.h \ + ../cpu/descriptor.h ../cpu/instr.h ../cpu/ia_opcodes.h \ + ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \ + ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \ + ../cpu/xmm.h +symbols.o: symbols.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../cpu/cpu.h ../cpu/model_specific.h \ + ../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h ../cpu/ia_opcodes.h \ + ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \ + ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \ + ../cpu/xmm.h diff --git a/bochs/bx_debug/dbg_main.cc b/bochs/bx_debug/dbg_main.cc new file mode 100644 index 00000000..0104c33b --- /dev/null +++ b/bochs/bx_debug/dbg_main.cc @@ -0,0 +1,3884 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +extern "C" { +#include +} + +#include "bochs.h" +#include "param_names.h" +#include "cpu/cpu.h" +#include "iodev/iodev.h" + +#if BX_DEBUGGER + +#include "disasm/disasm.h" + +#define LOG_THIS genlog-> + +#if HAVE_LIBREADLINE +extern "C" { +#include +#include +#if HAVE_READLINE_HISTORY_H +#include +#endif +} +#endif + +// default CPU in the debugger. For commands like "dump_cpu" it will +// use the default instead of always dumping all cpus. +unsigned dbg_cpu = 0; +bx_list_c *dbg_cpu_list = 0; + +extern const char* cpu_mode_string(unsigned cpu_mode); +extern void bx_sr_after_restore_state(void); + +void bx_dbg_print_descriptor(Bit32u lo, Bit32u hi); +void bx_dbg_print_descriptor64(Bit32u lo1, Bit32u hi1, Bit32u lo2, Bit32u hi2); + +static bx_param_bool_c *sim_running = NULL; + +static char tmp_buf[512]; +static char tmp_buf_prev[512]; +static char *tmp_buf_ptr; +static char *argv0 = NULL; + +static FILE *debugger_log = NULL; + +static struct { + // some fields used for single CPU debugger + bx_bool auto_disassemble; + unsigned disassemble_size; + char default_display_format; + char default_unit_size; + bx_address default_addr; + unsigned next_bpoint_id; + unsigned next_wpoint_id; +} bx_debugger; + +typedef struct { + FILE *fp; + char fname[BX_MAX_PATH]; + unsigned lineno; +} bx_infile_stack_entry_t; + +bx_infile_stack_entry_t bx_infile_stack[BX_INFILE_DEPTH]; +int bx_infile_stack_index = 0; + +static int bx_nest_infile(char *path); + +void CDECL bx_debug_ctrlc_handler(int signum); + +static void bx_unnest_infile(void); +static void bx_get_command(void); +static void bx_dbg_print_guard_results(); +static void bx_dbg_breakpoint_changed(void); + +bx_guard_t bx_guard; + +// DMA stuff +void bx_dbg_post_dma_reports(void); +#define BX_BATCH_DMA_BUFSIZE 512 + +static struct { + unsigned this_many; // batch this many max before posting events + unsigned Qsize; // this many have been batched + struct { + bx_phy_address addr; // address of DMA op + unsigned len; // number of bytes in op + unsigned what; // BX_READ or BX_WRITE + Bit32u val; // value of DMA op + Bit64u time; // system time at this dma op + } Q[BX_BATCH_DMA_BUFSIZE]; +} bx_dbg_batch_dma; + +// some buffers for disassembly +static disassembler bx_disassemble; +static Bit8u bx_disasm_ibuf[32]; +static char bx_disasm_tbuf[512]; + +static bx_bool watchpoint_continue = 0; +unsigned num_write_watchpoints = 0; +unsigned num_read_watchpoints = 0; +bx_watchpoint write_watchpoint[BX_DBG_MAX_WATCHPONTS]; +bx_watchpoint read_watchpoint[BX_DBG_MAX_WATCHPONTS]; + +#define DBG_PRINTF_BUFFER_LEN 1024 + +void dbg_printf(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + char buf[DBG_PRINTF_BUFFER_LEN+1]; + vsnprintf(buf, DBG_PRINTF_BUFFER_LEN, fmt, ap); + va_end(ap); + if (debugger_log != NULL) { + fprintf(debugger_log,"%s", buf); + fflush(debugger_log); + } + SIM->debug_puts(buf); // send to debugger, which will free buf when done. +} + +void bx_dbg_init_infile(void) +{ + bx_infile_stack_index = 0; + bx_infile_stack[0].fp = stdin; + bx_infile_stack[0].lineno = 0; +} + +int bx_dbg_set_rcfile(const char *rcfile) +{ + strncpy(bx_infile_stack[0].fname, rcfile, BX_MAX_PATH); + bx_infile_stack[0].fname[BX_MAX_PATH-1] = 0; + BX_INFO(("debugger using rc file '%s'.", rcfile)); + return bx_nest_infile((char*)rcfile); +} + +int bx_dbg_main(void) +{ + setbuf(stdout, NULL); + setbuf(stderr, NULL); + + bx_dbg_batch_dma.this_many = 1; + bx_dbg_batch_dma.Qsize = 0; + + memset(&bx_guard, 0, sizeof(bx_guard)); + bx_guard.async.irq = 1; + bx_guard.async.dma = 1; + + memset(&bx_debugger, 0, sizeof(bx_debugger)); + bx_debugger.auto_disassemble = 1; + bx_debugger.disassemble_size = 0; + bx_debugger.default_display_format = 'x'; + bx_debugger.default_unit_size = 'w'; + bx_debugger.default_addr = 0; + bx_debugger.next_bpoint_id = 1; + bx_debugger.next_wpoint_id = 1; + + dbg_cpu_list = (bx_list_c*) SIM->get_param("cpu0", SIM->get_bochs_root()); + const char *debugger_log_filename = SIM->get_param_string(BXPN_DEBUGGER_LOG_FILENAME)->getptr(); + + // Open debugger log file if needed + if (strlen(debugger_log_filename) > 0 && (strcmp(debugger_log_filename, "-") != 0)) + { + debugger_log = fopen(debugger_log_filename, "w"); + if (!debugger_log) { + BX_PANIC(("Can not open debugger log file '%s'", debugger_log_filename)); + } + else { + BX_INFO(("Using debugger log file %s", debugger_log_filename)); + } + } + + memset(bx_disasm_ibuf, 0, sizeof(bx_disasm_ibuf)); + + // create a boolean parameter that will tell if the simulation is + // running (continue command) or waiting for user response. This affects + // some parts of the GUI. + if (sim_running == NULL) { + bx_list_c *base = (bx_list_c*) SIM->get_param("general"); + sim_running = new bx_param_bool_c(base, + "debug_running", + "Simulation is running", "", 0); + } else { + sim_running->set(0); + } + // setup Ctrl-C handler + if (!SIM->has_debug_gui()) { + signal(SIGINT, bx_debug_ctrlc_handler); + BX_INFO(("set SIGINT handler to bx_debug_ctrlc_handler")); + } + + // Print disassembly of the first instruction... you wouldn't think it + // would have to be so hard. First initialize guard_found, since it is used + // in the disassembly code to decide what instruction to print. + for (int i=0; iguard_found.cs = BX_CPU(i)->sregs[BX_SEG_REG_CS].selector.value; + BX_CPU(i)->guard_found.eip = BX_CPU(i)->get_instruction_pointer(); + BX_CPU(i)->guard_found.laddr = + BX_CPU(i)->get_laddr(BX_SEG_REG_CS, BX_CPU(i)->guard_found.eip); + // 00 - 16 bit, 01 - 32 bit, 10 - 64-bit, 11 - illegal + if (BX_CPU(i)->sregs[BX_SEG_REG_CS].cache.u.segment.d_b) + BX_CPU(i)->guard_found.code_32_64 |= 0x1; + if (BX_CPU(i)->get_cpu_mode() == BX_MODE_LONG_64) + BX_CPU(i)->guard_found.code_32_64 |= 0x2; + } + // finally, call the usual function to print the disassembly + dbg_printf("Next at t=" FMT_LL "d\n", bx_pc_system.time_ticks()); + bx_dbg_disassemble_current(-1, 0); // all cpus, don't print time + + bx_dbg_user_input_loop(); + + if(debugger_log != NULL) + fclose(debugger_log); + + bx_dbg_exit(0); + return(0); // keep compiler happy +} + +void bx_dbg_interpret_line(char *cmd) +{ + bx_add_lex_input(cmd); + bxparse(); +} + +void bx_dbg_user_input_loop(void) +{ + int reti; + unsigned include_cmd_len = strlen(BX_INCLUDE_CMD); + + while(1) { + SIM->refresh_ci(); + SIM->set_display_mode(DISP_MODE_CONFIG); + bx_get_command(); +reparse: + if ((*tmp_buf_ptr == '\n') || (*tmp_buf_ptr == 0)) + { + if ((*tmp_buf_prev != '\n') && (*tmp_buf_prev != 0)) { + strncpy(tmp_buf, tmp_buf_prev, sizeof(tmp_buf_prev)); + goto reparse; + } + } + else if ((strncmp(tmp_buf_ptr, BX_INCLUDE_CMD, include_cmd_len) == 0) && + (tmp_buf_ptr[include_cmd_len] == ' ' || + tmp_buf_ptr[include_cmd_len] == '\t')) + { + char *ptr = tmp_buf_ptr + include_cmd_len + 1; + while(*ptr==' ' || *ptr=='\t') + ptr++; + + int len = strlen(ptr); + if (len == 0) { + dbg_printf("%s: no filename given to 'source' command.\n", argv0); + if (bx_infile_stack_index > 0) { + dbg_printf("%s: ERROR in source file causes exit.\n", argv0); + bx_dbg_exit(1); + } + continue; + } + ptr[len-1] = 0; // get rid of newline + reti = bx_nest_infile(ptr); + if (reti==0 && bx_infile_stack_index > 0) { + dbg_printf("%s: ERROR in source file causes exit.\n", argv0); + bx_dbg_exit(1); + } + } + else { + // Give a chance to the command line extensions, to + // consume the command. If they return 0, then + // we need to process the command. A return of 1 + // means, the extensions have handled the command + if (bx_dbg_extensions(tmp_buf_ptr)==0) { + // process command here + bx_add_lex_input(tmp_buf_ptr); + bxparse(); + } + } + } +} + +void bx_get_command(void) +{ + char *charptr_ret; + + bx_infile_stack[bx_infile_stack_index].lineno++; + + char prompt[256]; + if (bx_infile_stack_index == 0) { + sprintf(prompt, " ", bx_infile_stack[bx_infile_stack_index].lineno); + } + if (SIM->has_debug_gui() && bx_infile_stack_index == 0) { + // wait for wxWidgets to send another debugger command + charptr_ret = SIM->debug_get_next_command(); + if (charptr_ret) { + strncpy(tmp_buf, charptr_ret, sizeof(tmp_buf)); + strcat(tmp_buf, "\n"); + // The returned string was allocated in wxmain.cc by "new char[]". + // Free it with delete[]. + delete [] charptr_ret; + charptr_ret = &tmp_buf[0]; + } else { + // if debug_get_next_command returned NULL, probably the GUI is + // shutting down + } + } +#if HAVE_LIBREADLINE + else if (bx_infile_stack_index == 0) { + charptr_ret = readline(prompt); + // beware, returns NULL on end of file + if (charptr_ret && strlen(charptr_ret) > 0) { + add_history(charptr_ret); + strcpy(tmp_buf, charptr_ret); + strcat(tmp_buf, "\n"); + free(charptr_ret); + charptr_ret = &tmp_buf[0]; + } + } else { + charptr_ret = fgets(tmp_buf, sizeof(tmp_buf), bx_infile_stack[bx_infile_stack_index].fp); + } +#else /* !HAVE_LIBREADLINE */ + else { + if (bx_infile_stack_index == 0) + dbg_printf("%s", prompt); + strncpy(tmp_buf_prev, tmp_buf, sizeof(tmp_buf)); + charptr_ret = fgets(tmp_buf, sizeof(tmp_buf), bx_infile_stack[bx_infile_stack_index].fp); + } +#endif + if (charptr_ret == NULL) { + // see if error was due to EOF condition + if (feof(bx_infile_stack[bx_infile_stack_index].fp)) { + if (bx_infile_stack_index > 0) { + // nested level of include files, pop back to previous one + bx_unnest_infile(); + } + else { + // not nested, sitting at stdin prompt, user wants out + bx_dbg_quit_command(); + BX_PANIC(("bx_dbg_quit_command should not return, but it did")); + } + + // call recursively + bx_get_command(); + return; + } + + // error was not EOF, see if it was from a Ctrl-C + if (bx_guard.interrupt_requested) { + tmp_buf[0] = '\n'; + tmp_buf[1] = 0; + tmp_buf_ptr = &tmp_buf[0]; + bx_guard.interrupt_requested = 0; + return; + } + + dbg_printf("fgets() returned ERROR.\n"); + dbg_printf("intr request was %u\n", bx_guard.interrupt_requested); + bx_dbg_exit(1); + } + tmp_buf_ptr = &tmp_buf[0]; + + if (debugger_log != NULL) { + fprintf(debugger_log, "%s", tmp_buf); + fflush(debugger_log); + } + + // look for first non-whitespace character + while (((*tmp_buf_ptr == ' ') || (*tmp_buf_ptr == '\t')) && + (*tmp_buf_ptr != '\n') && (*tmp_buf_ptr != 0)) + { + tmp_buf_ptr++; + } +} + +int bx_nest_infile(char *path) +{ + FILE *tmp_fp; + + tmp_fp = fopen(path, "r"); + if (!tmp_fp) { + dbg_printf("%s: can not open file '%s' for reading.\n", argv0, path); + return(0); + } + + if ((bx_infile_stack_index+1) >= BX_INFILE_DEPTH) { + dbg_printf("%s: source files nested too deeply\n", argv0); + return(0); + } + + bx_infile_stack_index++; + bx_infile_stack[bx_infile_stack_index].fp = tmp_fp; + strncpy(bx_infile_stack[bx_infile_stack_index].fname, path, BX_MAX_PATH); + bx_infile_stack[bx_infile_stack_index].fname[BX_MAX_PATH-1] = 0; + bx_infile_stack[bx_infile_stack_index].lineno = 0; + return(1); +} + +void bx_unnest_infile(void) +{ + if (bx_infile_stack_index <= 0) { + dbg_printf("%s: ERROR: unnest_infile(): nesting level = 0\n", argv0); + bx_dbg_exit(1); + } + + fclose(bx_infile_stack[bx_infile_stack_index].fp); + bx_infile_stack_index--; +} + +int bxwrap(void) +{ + dbg_printf("%s: ERROR: bxwrap() called\n", argv0); + bx_dbg_exit(1); + return(0); // keep compiler quiet +} + +#ifdef WIN32 +char* bxtext; +#endif + +void bxerror(char *s) +{ + dbg_printf("%s:%d: %s at '%s'\n", bx_infile_stack[bx_infile_stack_index].fname, + bx_infile_stack[bx_infile_stack_index].lineno, s, bxtext); + + if (bx_infile_stack_index > 0) { + dbg_printf("%s: ERROR in source file causes exit\n", argv0); + bx_dbg_exit(1); + } +} + +void CDECL bx_debug_ctrlc_handler(int signum) +{ + UNUSED(signum); + if (SIM->has_debug_gui()) { + // in a multithreaded environment, a signal such as SIGINT can be sent to all + // threads. This function is only intended to handle signals in the + // simulator thread. It will simply return if called from any other thread. + // Otherwise the BX_PANIC() below can be called in multiple threads at + // once, leading to multiple threads trying to display a dialog box, + // leading to GUI deadlock. + if (!SIM->is_sim_thread()) { + BX_INFO(("bx_signal_handler: ignored sig %d because it wasn't called from the simulator thread", signum)); + return; + } + } + BX_INFO(("Ctrl-C detected in signal handler.")); + + signal(SIGINT, bx_debug_ctrlc_handler); + bx_debug_break(); +} + +void bx_debug_break() +{ + bx_guard.interrupt_requested = 1; +} + +void bx_dbg_exception(unsigned cpu, Bit8u vector, Bit16u error_code) +{ + static const char *exception[] = { + "(#DE) divide by zero", + "(#DB) debug break", + "(#NMI)", + "(#BP) breakpoint match", + "(#OF) overflow", + "(#BR) boundary check", + "(#UD) undefined opcode", + "(#NM) device not available", + "(#DF) double fault", + "(#CO) coprocessor overrun", + "(#TS) invalid TSS", + "(#NP) segment not present", + "(#SS) stack fault", + "(#GP) general protection fault", + "(#PF) page fault", + "(#RESERVED)", + "(#MF) floating point error", + "(#AC) alignment check", + "(#MC) machine check", + "(#XF) SIMD floating point exception", + }; + + if (BX_CPU(dbg_cpu)->trace || bx_dbg.exceptions) + { + if (vector <= BX_XM_EXCEPTION) { + dbg_printf("CPU %d: Exception 0x%02x - %s occured (error_code=0x%04x)\n", + cpu, vector, exception[vector], error_code); + } + else { + dbg_printf("CPU %d: Exception 0x%02x occured (error_code=0x%04x)\n", + cpu, vector, error_code); + } + } +} + +void bx_dbg_interrupt(unsigned cpu, Bit8u vector, Bit16u error_code) +{ + if (BX_CPU(dbg_cpu)->trace || bx_dbg.interrupts) + { + dbg_printf("CPU %d: Interrupt 0x%02x occured (error_code=0x%04x)\n", + cpu, vector, error_code); + } +} + +void bx_dbg_halt(unsigned cpu) +{ + if (BX_CPU(dbg_cpu)->trace) + { + dbg_printf("CPU %d: HALTED\n", cpu); + } +} + +void bx_dbg_watchpoint_continue(bx_bool watch_continue) +{ + watchpoint_continue = watch_continue; + if (watchpoint_continue) { + dbg_printf("Will stop on watch points\n"); + } + else { + dbg_printf("Will not stop on watch points (they will still be logged)\n"); + } +} + +void bx_dbg_check_memory_watchpoints(unsigned cpu, bx_phy_address phy, unsigned len, unsigned rw) +{ + bx_phy_address phy_end = phy + len - 1; + + if (rw & 1) { + // Check for physical write watch points + for (unsigned i = 0; i < num_write_watchpoints; i++) { + bx_phy_address watch_end = write_watchpoint[i].addr + write_watchpoint[i].len - 1; + if (watch_end < phy || phy_end < write_watchpoint[i].addr) continue; + BX_CPU(cpu)->watchpoint = phy; + BX_CPU(cpu)->break_point = BREAK_POINT_WRITE; + break; + } + } + else { + // Check for physical read watch points + for (unsigned i = 0; i < num_read_watchpoints; i++) { + bx_phy_address watch_end = read_watchpoint[i].addr + read_watchpoint[i].len - 1; + if (watch_end < phy || phy_end < read_watchpoint[i].addr) continue; + BX_CPU(cpu)->watchpoint = phy; + BX_CPU(cpu)->break_point = BREAK_POINT_READ; + break; + } + } +} + +void bx_dbg_lin_memory_access(unsigned cpu, bx_address lin, bx_phy_address phy, unsigned len, unsigned pl, unsigned rw, Bit8u *data) +{ + bx_dbg_check_memory_watchpoints(cpu, phy, len, rw); + + if (! BX_CPU(cpu)->trace_mem) + return; + + bx_bool write = rw & 1; + + dbg_printf("[CPU%d %s]: LIN 0x" FMT_ADDRX " PHY 0x" FMT_PHY_ADDRX " (len=%d, pl=%d)", + cpu, + (write) ? "WR" : "RD", + lin, phy, + len, pl); + + if (len == 1) { + Bit8u val8 = *data; + dbg_printf(": 0x%02X", (unsigned) val8); + } + else if (len == 2) { + Bit16u val16 = *((Bit16u*) data); + dbg_printf(": 0x%04X", (unsigned) val16); + } + else if (len == 4) { + Bit32u val32 = *((Bit32u*) data); + dbg_printf(": 0x%08X", (unsigned) val32); + } + else if (len == 8) { + Bit64u data64 = * (Bit64u*)(data); + dbg_printf(": 0x%08X 0x%08X", GET32H(data64), GET32L(data64)); + } +#if BX_CPU_LEVEL >= 6 + else if (len == 16) { + const BxPackedXmmRegister *xmmdata = (const BxPackedXmmRegister*)(data); + dbg_printf(": 0x%08X 0x%08X 0x%08X 0x%08X", + xmmdata->xmm32u(3), xmmdata->xmm32u(2), xmmdata->xmm32u(1), xmmdata->xmm32u(0)); + } +#endif + + dbg_printf("\n"); +} + +void bx_dbg_phy_memory_access(unsigned cpu, bx_phy_address phy, unsigned len, unsigned rw, Bit8u *data) +{ + bx_dbg_check_memory_watchpoints(cpu, phy, len, rw); + + if (! BX_CPU(cpu)->trace_mem) + return; + + unsigned access = rw >> 4; + + static const char *access_string[] = { + "", + "PDPTR0", + "PDPTR1", + "PDPTR2", + "PDPTR3", + "PTE", + "PDE", + "PDPTE", + "PML4E", + "EPT PTE", + "EPT PDE", + "EPT PDPTE", + "EPT PML4E", + "VMCS", + "VMX MSR BITMAP", + "VMX I/O BITMAP", + "VMX LDMSR", + "VMX STMSR", + "VMX VTPR", + "SMRAM" + }; + + bx_bool write = rw & 1; + + dbg_printf("[CPU%d %s]: PHY 0x" FMT_PHY_ADDRX " (len=%d)", + cpu, + (write) ? "WR" : "RD", + phy, + len); + + if (len == 1) { + Bit8u val8 = *data; + dbg_printf(": 0x%02X", (unsigned) val8); + } + else if (len == 2) { + Bit16u val16 = *((Bit16u*) data); + dbg_printf(": 0x%04X", (unsigned) val16); + } + else if (len == 4) { + Bit32u val32 = *((Bit32u*) data); + dbg_printf(": 0x%08X", (unsigned) val32); + } + else if (len == 8) { + Bit64u data64 = * (Bit64u*)(data); + dbg_printf(": 0x%08X 0x%08X", GET32H(data64), GET32L(data64)); + } +#if BX_CPU_LEVEL >= 6 + else if (len == 16) { + const BxPackedXmmRegister *xmmdata = (const BxPackedXmmRegister*)(data); + dbg_printf(": 0x%08X 0x%08X 0x%08X 0x%08X", + xmmdata->xmm32u(3), xmmdata->xmm32u(2), xmmdata->xmm32u(1), xmmdata->xmm32u(0)); + } +#endif + + if (access != 0) + dbg_printf("\t; %s\n", access_string[access]); + else + dbg_printf("\n"); +} + +void bx_dbg_exit(int code) +{ + BX_DEBUG(("dbg: before exit")); + for (int cpu=0; cpu < BX_SMP_PROCESSORS; cpu++) { + if (BX_CPU(cpu)) BX_CPU(cpu)->atexit(); + } + + bx_atexit(); + BX_EXIT(code); +} + +// +// functions for browsing of cpu state +// + +void bx_dbg_print_sse_state(void) +{ +#if BX_CPU_LEVEL >= 6 + Bit32u isa_extensions_bitmask = SIM->get_param_num("isa_extensions_bitmask", dbg_cpu_list)->get(); + + if ((isa_extensions_bitmask & BX_CPU_SSE) != 0) { + Bit32u mxcsr = SIM->get_param_num("SSE.mxcsr", dbg_cpu_list)->get(); + dbg_printf("MXCSR: 0x%08x: %s %s RC:%d %s %s %s %s %s %s %s %s %s %s %s %s %s\n", mxcsr, + (mxcsr & (1<<17)) ? "ULE" : "ule", + (mxcsr & (1<<15)) ? "FUZ" : "fuz", + (mxcsr >> 13) & 3, + (mxcsr & (1<<12)) ? "PM" : "pm", + (mxcsr & (1<<11)) ? "UM" : "um", + (mxcsr & (1<<10)) ? "OM" : "om", + (mxcsr & (1<<9)) ? "ZM" : "zm", + (mxcsr & (1<<8)) ? "DM" : "dm", + (mxcsr & (1<<7)) ? "IM" : "im", + (mxcsr & (1<<6)) ? "DAZ" : "daz", + (mxcsr & (1<<5)) ? "PE" : "pe", + (mxcsr & (1<<4)) ? "UE" : "ue", + (mxcsr & (1<<3)) ? "OE" : "oe", + (mxcsr & (1<<2)) ? "ZE" : "ze", + (mxcsr & (1<<1)) ? "DE" : "de", + (mxcsr & (1<<0)) ? "IE" : "ie"); + + char param_name[20]; + for(unsigned i=0;iget_param_num(param_name, dbg_cpu_list)->get64(); + sprintf(param_name, "SSE.xmm%02d_0", i); + Bit64u lo = SIM->get_param_num(param_name, dbg_cpu_list)->get64(); + dbg_printf("XMM[%02u]: %08x:%08x:%08x:%08x\n", i, + GET32H(hi), GET32L(hi), GET32H(lo), GET32L(lo)); + } + } + else +#endif + { + dbg_printf("The CPU doesn't support SSE state !\n"); + } +} + +void bx_dbg_print_mmx_state(void) +{ +#if BX_CPU_LEVEL >= 5 + Bit32u isa_extensions_bitmask = SIM->get_param_num("isa_extensions_bitmask", dbg_cpu_list)->get(); + + if ((isa_extensions_bitmask & BX_CPU_MMX) != 0) { + char param_name[20]; + for(unsigned i=0;i<8;i++) { + sprintf(param_name, "FPU.st%d.fraction", i); + Bit64u mmreg = SIM->get_param_num(param_name, dbg_cpu_list)->get64(); + dbg_printf("MM[%d]: %08x:%08x\n", i, GET32H(mmreg), GET32L(mmreg)); + } + } + else +#endif + { + dbg_printf("The CPU doesn't support MMX state !\n"); + } +} + +void bx_dbg_print_fpu_state(void) +{ +#if BX_SUPPORT_FPU + BX_CPU(dbg_cpu)->print_state_FPU(); +#else + dbg_printf("The CPU doesn't support FPU state !\n"); +#endif +} + +void bx_dbg_info_flags(void) +{ + dbg_printf("%s %s %s %s %s %s %s IOPL=%1u %s %s %s %s %s %s %s %s %s\n", + BX_CPU(dbg_cpu)->get_ID() ? "ID" : "id", + BX_CPU(dbg_cpu)->get_VIP() ? "VIP" : "vip", + BX_CPU(dbg_cpu)->get_VIF() ? "VIF" : "vif", + BX_CPU(dbg_cpu)->get_AC() ? "AC" : "ac", + BX_CPU(dbg_cpu)->get_VM() ? "VM" : "vm", + BX_CPU(dbg_cpu)->get_RF() ? "RF" : "rf", + BX_CPU(dbg_cpu)->get_NT() ? "NT" : "nt", + BX_CPU(dbg_cpu)->get_IOPL(), + BX_CPU(dbg_cpu)->get_OF() ? "OF" : "of", + BX_CPU(dbg_cpu)->get_DF() ? "DF" : "df", + BX_CPU(dbg_cpu)->get_IF() ? "IF" : "if", + BX_CPU(dbg_cpu)->get_TF() ? "TF" : "tf", + BX_CPU(dbg_cpu)->get_SF() ? "SF" : "sf", + BX_CPU(dbg_cpu)->get_ZF() ? "ZF" : "zf", + BX_CPU(dbg_cpu)->get_AF() ? "AF" : "af", + BX_CPU(dbg_cpu)->get_PF() ? "PF" : "pf", + BX_CPU(dbg_cpu)->get_CF() ? "CF" : "cf"); +} + +void bx_dbg_info_debug_regs_command(void) +{ + bx_address dr0 = SIM->get_param_num("DR0", dbg_cpu_list)->get(); + bx_address dr1 = SIM->get_param_num("DR1", dbg_cpu_list)->get(); + bx_address dr2 = SIM->get_param_num("DR2", dbg_cpu_list)->get(); + bx_address dr3 = SIM->get_param_num("DR3", dbg_cpu_list)->get(); + Bit32u dr6 = SIM->get_param_num("DR6", dbg_cpu_list)->get(); + Bit32u dr7 = SIM->get_param_num("DR7", dbg_cpu_list)->get(); + + dbg_printf("DR0=0x" FMT_ADDRX "\n", dr0); + dbg_printf("DR1=0x" FMT_ADDRX "\n", dr1); + dbg_printf("DR2=0x" FMT_ADDRX "\n", dr2); + dbg_printf("DR3=0x" FMT_ADDRX "\n", dr3); + + static const char *dr_ln[4] = { "Byte", "Word", "QWord", "Dword" }; + static const char *dr_rw[4] = { "Code", "DataW", "I/O", "DataRW" }; + + dbg_printf("DR6=0x%08x: %s %s %s %s %s %s %s\n", dr6, + (dr6 & (1<<15)) ? "BT" : "bt", + (dr6 & (1<<14)) ? "BS" : "bs", + (dr6 & (1<<13)) ? "BD" : "bd", + (dr6 & (1<<3)) ? "B3" : "b3", + (dr6 & (1<<2)) ? "B2" : "b2", + (dr6 & (1<<1)) ? "B1" : "b1", + (dr6 & (1<<0)) ? "B0" : "b0"); + + dbg_printf("DR7=0x%08x: DR3=%s-%s DR2=%s-%s DR1=%s-%s DR0=%s-%s %s | %s %s | %s %s %s %s %s %s %s %s\n", dr7, + dr_rw[(dr7 >> 28) & 3], dr_ln[(dr7 >> 30) & 3], + dr_rw[(dr7 >> 24) & 3], dr_ln[(dr7 >> 26) & 3], + dr_rw[(dr7 >> 20) & 3], dr_ln[(dr7 >> 22) & 3], + dr_rw[(dr7 >> 16) & 3], dr_ln[(dr7 >> 18) & 3], + (dr7 & (1<<13)) ? "GD" : "gd", + (dr7 & (1<<9)) ? "GE" : "ge", + (dr7 & (1<<8)) ? "LE" : "le", + (dr7 & (1<<7)) ? "G3" : "g3", + (dr7 & (1<<6)) ? "L3" : "l3", + (dr7 & (1<<5)) ? "G2" : "g2", + (dr7 & (1<<4)) ? "L2" : "l2", + (dr7 & (1<<3)) ? "G1" : "g1", + (dr7 & (1<<2)) ? "L1" : "l1", + (dr7 & (1<<1)) ? "G0" : "g0", + (dr7 & (1<<0)) ? "L0" : "l0"); +} + +void bx_dbg_info_control_regs_command(void) +{ + Bit32u cr0 = SIM->get_param_num("CR0", dbg_cpu_list)->get(); + bx_address cr2 = (bx_address) SIM->get_param_num("CR2", dbg_cpu_list)->get64(); + bx_phy_address cr3 = (bx_phy_address) SIM->get_param_num("CR3", dbg_cpu_list)->get64(); + dbg_printf("CR0=0x%08x: %s %s %s %s %s %s %s %s %s %s %s\n", cr0, + (cr0 & (1<<31)) ? "PG" : "pg", + (cr0 & (1<<30)) ? "CD" : "cd", + (cr0 & (1<<29)) ? "NW" : "nw", + (cr0 & (1<<18)) ? "AC" : "ac", + (cr0 & (1<<16)) ? "WP" : "wp", + (cr0 & (1<<5)) ? "NE" : "ne", + (cr0 & (1<<4)) ? "ET" : "et", + (cr0 & (1<<3)) ? "TS" : "ts", + (cr0 & (1<<2)) ? "EM" : "em", + (cr0 & (1<<1)) ? "MP" : "mp", + (cr0 & (1<<0)) ? "PE" : "pe"); + dbg_printf("CR2=page fault laddr=0x" FMT_ADDRX "\n", cr2); + dbg_printf("CR3=0x" FMT_PHY_ADDRX "\n", cr3); + dbg_printf(" PCD=page-level cache disable=%d\n", (cr3>>4) & 1); + dbg_printf(" PWT=page-level write-through=%d\n", (cr3>>3) & 1); +#if BX_CPU_LEVEL >= 4 + Bit32u cr4 = SIM->get_param_num("CR4", dbg_cpu_list)->get(); + dbg_printf("CR4=0x%08x: %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s\n", cr4, + (cr4 & (1<<18)) ? "OSXSAVE" : "osxsave", + (cr4 & (1<<17)) ? "PCID" : "pcid", + (cr4 & (1<<16)) ? "FSGSBASE" : "fsgsbase", + (cr4 & (1<<14)) ? "SMX" : "smx", + (cr4 & (1<<13)) ? "VMX" : "vmx", + (cr4 & (1<<10)) ? "OSXMMEXCPT" : "osxmmexcpt", + (cr4 & (1<<9)) ? "OSFXSR" : "osfxsr", + (cr4 & (1<<8)) ? "PCE" : "pce", + (cr4 & (1<<7)) ? "PGE" : "pge", + (cr4 & (1<<6)) ? "MCE" : "mce", + (cr4 & (1<<5)) ? "PAE" : "pae", + (cr4 & (1<<4)) ? "PSE" : "pse", + (cr4 & (1<<3)) ? "DE" : "de", + (cr4 & (1<<2)) ? "TSD" : "tsd", + (cr4 & (1<<1)) ? "PVI" : "pvi", + (cr4 & (1<<0)) ? "VME" : "vme"); +#endif +#if BX_SUPPORT_X86_64 + Bit32u efer = SIM->get_param_num("MSR.EFER", dbg_cpu_list)->get(); + dbg_printf("EFER=0x%08x: %s %s %s %s %s\n", efer, + (efer & (1<<14)) ? "FFXSR" : "ffxsr", + (efer & (1<<11)) ? "NXE" : "nxe", + (efer & (1<<10)) ? "LMA" : "lma", + (efer & (1<<8)) ? "LME" : "lme", + (efer & (1<<0)) ? "SCE" : "sce"); +#endif +} + +void bx_dbg_info_segment_regs_command(void) +{ + static const char *segname[] = { "es", "cs", "ss", "ds", "fs", "gs" }; + + bx_dbg_sreg_t sreg; + bx_dbg_global_sreg_t global_sreg; + + for(int s=0;s<6;s++) { + BX_CPU(dbg_cpu)->dbg_get_sreg(&sreg, s); + dbg_printf("%s:0x%04x, dh=0x%08x, dl=0x%08x, valid=%u\n", segname[s], + (unsigned) sreg.sel, (unsigned) sreg.des_h, + (unsigned) sreg.des_l, (unsigned) sreg.valid); + if (sreg.valid) { + dbg_printf("\t"); + bx_dbg_print_descriptor(sreg.des_l, sreg.des_h); + } + } + + BX_CPU(dbg_cpu)->dbg_get_ldtr(&sreg); + dbg_printf("ldtr:0x%04x, dh=0x%08x, dl=0x%08x, valid=%u\n", + (unsigned) sreg.sel, (unsigned) sreg.des_h, + (unsigned) sreg.des_l, (unsigned) sreg.valid); + + BX_CPU(dbg_cpu)->dbg_get_tr(&sreg); + dbg_printf("tr:0x%04x, dh=0x%08x, dl=0x%08x, valid=%u\n", + (unsigned) sreg.sel, (unsigned) sreg.des_h, + (unsigned) sreg.des_l, (unsigned) sreg.valid); + + BX_CPU(dbg_cpu)->dbg_get_gdtr(&global_sreg); + dbg_printf("gdtr:base=0x"FMT_ADDRX", limit=0x%x\n", + global_sreg.base, (unsigned) global_sreg.limit); + + BX_CPU(dbg_cpu)->dbg_get_idtr(&global_sreg); + dbg_printf("idtr:base=0x"FMT_ADDRX", limit=0x%x\n", + global_sreg.base, (unsigned) global_sreg.limit); +} + +void bx_dbg_info_registers_command(int which_regs_mask) +{ + bx_address reg; + + if (which_regs_mask & BX_INFO_GENERAL_PURPOSE_REGS) { +#if BX_SUPPORT_SMP + dbg_printf("CPU%d:\n", BX_CPU(dbg_cpu)->bx_cpuid); +#endif +#if BX_SUPPORT_X86_64 == 0 + reg = BX_CPU(dbg_cpu)->get_reg32(BX_32BIT_REG_EAX); + dbg_printf("eax: 0x%08x %d\n", (unsigned) reg, (int) reg); + reg = BX_CPU(dbg_cpu)->get_reg32(BX_32BIT_REG_ECX); + dbg_printf("ecx: 0x%08x %d\n", (unsigned) reg, (int) reg); + reg = BX_CPU(dbg_cpu)->get_reg32(BX_32BIT_REG_EDX); + dbg_printf("edx: 0x%08x %d\n", (unsigned) reg, (int) reg); + reg = BX_CPU(dbg_cpu)->get_reg32(BX_32BIT_REG_EBX); + dbg_printf("ebx: 0x%08x %d\n", (unsigned) reg, (int) reg); + reg = BX_CPU(dbg_cpu)->get_reg32(BX_32BIT_REG_ESP); + dbg_printf("esp: 0x%08x %d\n", (unsigned) reg, (int) reg); + reg = BX_CPU(dbg_cpu)->get_reg32(BX_32BIT_REG_EBP); + dbg_printf("ebp: 0x%08x %d\n", (unsigned) reg, (int) reg); + reg = BX_CPU(dbg_cpu)->get_reg32(BX_32BIT_REG_ESI); + dbg_printf("esi: 0x%08x %d\n", (unsigned) reg, (int) reg); + reg = BX_CPU(dbg_cpu)->get_reg32(BX_32BIT_REG_EDI); + dbg_printf("edi: 0x%08x %d\n", (unsigned) reg, (int) reg); + reg = bx_dbg_get_eip(); + dbg_printf("eip: 0x%08x\n", (unsigned) reg); +#else + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_RAX); + dbg_printf("rax: 0x%08x:%08x ", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_RCX); + dbg_printf("rcx: 0x%08x:%08x\n", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_RDX); + dbg_printf("rdx: 0x%08x:%08x ", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_RBX); + dbg_printf("rbx: 0x%08x:%08x\n", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_RSP); + dbg_printf("rsp: 0x%08x:%08x ", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_RBP); + dbg_printf("rbp: 0x%08x:%08x\n", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_RSI); + dbg_printf("rsi: 0x%08x:%08x ", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_RDI); + dbg_printf("rdi: 0x%08x:%08x\n", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_R8); + dbg_printf("r8 : 0x%08x:%08x ", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_R9); + dbg_printf("r9 : 0x%08x:%08x\n", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_R10); + dbg_printf("r10: 0x%08x:%08x ", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_R11); + dbg_printf("r11: 0x%08x:%08x\n", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_R12); + dbg_printf("r12: 0x%08x:%08x ", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_R13); + dbg_printf("r13: 0x%08x:%08x\n", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_R14); + dbg_printf("r14: 0x%08x:%08x ", GET32H(reg), GET32L(reg)); + reg = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_R15); + dbg_printf("r15: 0x%08x:%08x\n", GET32H(reg), GET32L(reg)); + reg = bx_dbg_get_instruction_pointer(); + dbg_printf("rip: 0x%08x:%08x\n", GET32H(reg), GET32L(reg)); +#endif + reg = BX_CPU(dbg_cpu)->read_eflags(); + dbg_printf("eflags 0x%08x: ", (unsigned) reg); + bx_dbg_info_flags(); + } + +#if BX_SUPPORT_FPU + if (which_regs_mask & BX_INFO_FPU_REGS) { + bx_dbg_print_fpu_state(); + } +#endif + + if (which_regs_mask & BX_INFO_MMX_REGS) { + bx_dbg_print_mmx_state(); + } + + if (which_regs_mask & BX_INFO_SSE_REGS) { + bx_dbg_print_sse_state(); + } +} + +// +// commands invoked from parser +// + +void bx_dbg_quit_command(void) +{ + BX_INFO(("dbg: Quit")); + bx_dbg_exit(0); +} + +void bx_dbg_trace_command(bx_bool enable) +{ + BX_CPU(dbg_cpu)->trace = enable; + dbg_printf("Tracing %s for CPU%d\n", enable ? "enabled" : "disabled", + BX_CPU(dbg_cpu)->which_cpu()); +} + +void bx_dbg_trace_reg_command(bx_bool enable) +{ + BX_CPU(dbg_cpu)->trace_reg = enable; + dbg_printf("Register-Tracing %s for CPU%d\n", enable ? "enabled" : "disabled", + BX_CPU(dbg_cpu)->which_cpu()); +} + +void bx_dbg_trace_mem_command(bx_bool enable) +{ + BX_CPU(dbg_cpu)->trace_mem = enable; + dbg_printf("Memory-Tracing %s for CPU%d\n", enable ? "enabled" : "disabled", + BX_CPU(dbg_cpu)->which_cpu()); +} + +void bx_dbg_ptime_command(void) +{ + dbg_printf("ptime: " FMT_LL "d\n", bx_pc_system.time_ticks()); +} + +int timebp_timer = -1; +Bit64u timebp_queue[MAX_CONCURRENT_BPS]; +int timebp_queue_size = 0; + +void bx_dbg_timebp_command(bx_bool absolute, Bit64u time) +{ + Bit64u abs_time = (absolute) ? time : time + bx_pc_system.time_ticks(); + + if (abs_time < bx_pc_system.time_ticks()) { + dbg_printf("Request for time break point in the past. I can't let you do that.\n"); + return; + } + + if (timebp_queue_size == MAX_CONCURRENT_BPS) { + dbg_printf("Too many time break points\n"); + return; + } + + Bit64u diff = (absolute) ? time - bx_pc_system.time_ticks() : time; + + if (timebp_timer >= 0) { + if (timebp_queue_size == 0 || abs_time < timebp_queue[0]) { + /* first in queue */ + for (int i = timebp_queue_size; i >= 0; i--) + timebp_queue[i+1] = timebp_queue[i]; + timebp_queue[0] = abs_time; + timebp_queue_size++; + bx_pc_system.activate_timer_ticks(timebp_timer, diff, 1); + } else { + /* not first, insert at suitable place */ + for (int i = 1; i < timebp_queue_size; i++) { + if (timebp_queue[i] == abs_time) { + dbg_printf("Time breakpoint not inserted (duplicate)\n"); + return; + } else if (abs_time < timebp_queue[i]) { + for (int j = timebp_queue_size; j >= i; j--) + timebp_queue[j+1] = timebp_queue[j]; + timebp_queue[i] = abs_time; + goto inserted; + } + } + /* last */ + timebp_queue[timebp_queue_size] = abs_time; +inserted: + timebp_queue_size++; + } + } else { + timebp_queue_size = 1; + timebp_queue[0] = abs_time; + timebp_timer = bx_pc_system.register_timer_ticks(&bx_pc_system, bx_pc_system_c::timebp_handler, diff, 0, 1, "debug.timebp"); + } + + dbg_printf("Time breakpoint inserted. Delta = " FMT_LL "u\n", diff); +} + +Bit32u conv_4xBit8u_to_Bit32u(const Bit8u* buf) +{ + Bit32u ret = 0; + for (int i = 0; i < 4; i++) { + ret |= (buf[i] << (8 * i)); + } + return ret; +} + +Bit16u conv_2xBit8u_to_Bit16u(const Bit8u* buf) +{ + Bit16u ret = 0; + for (int i = 0; i < 2; i++) { + ret |= (buf[i] << (8 * i)); + } + return ret; +} + +void bx_dbg_record_command(char* path_quoted) +{ + // skip beginning double quote + if (path_quoted[0] == '"') + path_quoted++; + + // null out ending quote + int len = strlen(path_quoted); + if (path_quoted[len - 1] == '"') + path_quoted[len - 1] = '\0'; + + bx_dbg.record_io = fopen(path_quoted, "w"); + if (bx_dbg.record_io) + dbg_printf("IO record file '%s' opened\n", path_quoted); + else + dbg_printf("Error opening '%s' for writing\n", path_quoted); +} + +static FILE* playback_file = 0; + +struct playback_entry_t +{ + char command[100]; + Bit32u argument; + + void trigger(); +}; + +static playback_entry_t playback_entry; +static Bit64u last_playback_time = 0; +static int playback_timer_index = -1; + +void playback_function(void* this_ptr) +{ + ((playback_entry_t*)this_ptr)->trigger(); +} + +static void enter_playback_entry() +{ + static const int playback_buf_size = 100; + char playback_buf[playback_buf_size]; + if (!fgets(playback_buf, playback_buf_size, playback_file)) + return; + + Bit64u time; + if (sscanf(playback_buf, "%s " FMT_LL "d %x", playback_entry.command, &time, &playback_entry.argument) != 3) { + dbg_printf("Parse error in playback string '%s'\n", playback_buf); + return; + } + + Bit64u diff = time - last_playback_time; + last_playback_time = time; + + if (time < last_playback_time) { + BX_PANIC(("Negative diff in playback")); + } else if (diff == 0) { + playback_entry.trigger(); + } else { + if (playback_timer_index >= 0) + bx_pc_system.activate_timer_ticks(playback_timer_index, diff, 0); + else + playback_timer_index = bx_pc_system.register_timer_ticks(&playback_entry, playback_function, diff, 0, 1, "debug.playback"); + } +} + +void playback_entry_t::trigger() +{ + if (!strcmp("gen_scancode", command)) { + DEV_kbd_gen_scancode(argument); + } else { + dbg_printf("Unknown playback command '%s'\n", command); + return; + } + enter_playback_entry(); +} + +void bx_dbg_playback_command(char* path_quoted) +{ + // skip beginning double quote + if (path_quoted[0] == '"') + path_quoted++; + + // null out ending quote + int len = strlen(path_quoted); + if (path_quoted[len - 1] == '"') + path_quoted[len - 1] = '\0'; + + playback_file = fopen(path_quoted, "r"); + if (playback_file) { + dbg_printf("Playback from '%s'\n", path_quoted); + last_playback_time = 0; + dbg_printf("playback times relative from " FMT_LL "d\n", + bx_pc_system.time_ticks()); + enter_playback_entry(); + } else { + dbg_printf("Error opening '%s' for reading\n", path_quoted); + } +} + +// toggles mode switch breakpoint +void bx_dbg_modebp_command() +{ + BX_CPU(dbg_cpu)->mode_break = !BX_CPU(dbg_cpu)->mode_break; + dbg_printf("mode switch break %s\n", + BX_CPU(dbg_cpu)->mode_break ? "enabled" : "disabled"); +} + +bx_bool bx_dbg_read_linear(unsigned which_cpu, bx_address laddr, unsigned len, Bit8u *buf) +{ + unsigned remainsInPage; + bx_phy_address paddr; + unsigned read_len; + bx_bool paddr_valid; + +next_page: + remainsInPage = 0x1000 - PAGE_OFFSET(laddr); + read_len = (remainsInPage < len) ? remainsInPage : len; + + paddr_valid = BX_CPU(which_cpu)->dbg_xlate_linear2phy(laddr, &paddr); + if (paddr_valid) { + if (! BX_MEM(0)->dbg_fetch_mem(BX_CPU(which_cpu), paddr, read_len, buf)) { + dbg_printf("bx_dbg_read_linear: physical memory read error (phy=0x" FMT_PHY_ADDRX ", lin=0x" FMT_ADDRX ")\n", paddr, laddr); + return 0; + } + } + else { + dbg_printf("bx_dbg_read_linear: physical address not available for linear 0x" FMT_ADDRX "\n", laddr); + return 0; + } + + /* check for access across multiple pages */ + if (remainsInPage < len) + { + laddr += read_len; + len -= read_len; + buf += read_len; + goto next_page; + } + + return 1; +} + +// where +// stack trace: ebp -> old ebp +// return eip at ebp + 4 +void bx_dbg_where_command() +{ + if (!BX_CPU(dbg_cpu)->protected_mode()) { + dbg_printf("'where' only supported in protected mode\n"); + return; + } + if (BX_CPU(dbg_cpu)->get_segment_base(BX_SEG_REG_SS) != 0) { + dbg_printf("non-zero stack base\n"); + return; + } + Bit32u bp = BX_CPU(dbg_cpu)->get_reg32(BX_32BIT_REG_EBP); + bx_address ip = BX_CPU(dbg_cpu)->get_instruction_pointer(); + dbg_printf("(%d) 0x%08x\n", dbg_cpu, ip); + for (int i = 1; i < 50; i++) { + // Up + bx_phy_address paddr; + Bit8u buf[4]; + + // bp = [bp]; + bx_bool paddr_valid = BX_CPU(dbg_cpu)->dbg_xlate_linear2phy(bp, &paddr); + if (paddr_valid) { + if (BX_MEM(0)->dbg_fetch_mem(BX_CPU(dbg_cpu), paddr, 4, buf)) { + bp = conv_4xBit8u_to_Bit32u(buf); + } else { + dbg_printf("(%d) Physical memory read error (BP)\n", i); + break; + } + } else { + dbg_printf("(%d) Could not translate linear address (BP)\n", i); + break; + } + + // ip = [bp + 4]; + paddr_valid = BX_CPU(dbg_cpu)->dbg_xlate_linear2phy(bp + 4, &paddr); + if (paddr_valid) { + if (BX_MEM(0)->dbg_fetch_mem(BX_CPU(dbg_cpu), paddr, 4, buf)) { + ip = conv_4xBit8u_to_Bit32u(buf); + } else { + dbg_printf("(%d) Physical memory read error (IP)\n", i); + break; + } + } else { + dbg_printf("(%d) Could not translate linear address (IP)\n", i); + break; + } + + // Print + dbg_printf("(%d) 0x%08x\n", i, ip); + } +} + +void bx_dbg_print_string_command(bx_address start_addr) +{ + dbg_printf("0x%08x: ", start_addr); + for (int i = 0; ; i++) { + Bit8u buf = 0; + if (! bx_dbg_read_linear(dbg_cpu, start_addr+i, 1, &buf)) break; + if (buf == 0) break; + if (isgraph(buf) || buf == 0x20) + dbg_printf("%c", buf); + else + dbg_printf("\\%d", buf); + } + dbg_printf("\n"); +} + +static void dbg_print_guard_found(unsigned cpu_mode, Bit32u cs, bx_address eip, bx_address laddr) +{ +#if BX_SUPPORT_X86_64 + if (cpu_mode == BX_MODE_LONG_64) { + dbg_printf("0x%04x:" FMT_ADDRX " (0x" FMT_ADDRX ")", cs, eip, laddr); + return; + } +#endif + + if (cpu_mode >= BX_MODE_IA32_PROTECTED) + dbg_printf("%04x:%08x (0x%08x)", cs, (unsigned) eip, (unsigned) laddr); + else // real or v8086 mode + dbg_printf("%04x:%04x (0x%08x)", cs, (unsigned) eip, (unsigned) laddr); +} + +void bx_dbg_xlate_address(bx_lin_address laddr) +{ + bx_phy_address paddr; + laddr &= BX_CONST64(0xfffffffffffff000); + + bx_bool paddr_valid = BX_CPU(dbg_cpu)->dbg_xlate_linear2phy(laddr, &paddr, 1); + if (paddr_valid) { + dbg_printf("linear page 0x" FMT_ADDRX " maps to physical page 0x" FMT_PHY_ADDRX "\n", laddr, paddr); + } + else { + dbg_printf("physical address not available for linear 0x" FMT_ADDRX "\n", laddr); + } +} + +unsigned dbg_show_mask = 0; + +#define BX_DBG_SHOW_CALLRET (Flag_call|Flag_ret) +#define BX_DBG_SHOW_SOFTINT (Flag_softint) +#define BX_DBG_SHOW_EXTINT (Flag_intsig) +#define BX_DBG_SHOW_IRET (Flag_iret) +#define BX_DBG_SHOW_INT (Flag_softint|Flag_iret|Flag_intsig) +#define BX_DBG_SHOW_MODE (Flag_mode) + +void bx_dbg_show_command(const char* arg) +{ + if(arg) { + if (!strcmp(arg, "mode")) { + if (dbg_show_mask & BX_DBG_SHOW_MODE) { + dbg_show_mask &= ~BX_DBG_SHOW_MODE; + dbg_printf("show mode switch: OFF\n"); + } else { + dbg_show_mask |= BX_DBG_SHOW_MODE; + dbg_printf("show mode switch: ON\n"); + } + } else if (!strcmp(arg, "int")) { + if (dbg_show_mask & BX_DBG_SHOW_INT) { + dbg_show_mask &= ~BX_DBG_SHOW_INT; + dbg_printf("show interrupts tracing (extint/softint/iret): OFF\n"); + } else { + dbg_show_mask |= BX_DBG_SHOW_INT; + dbg_printf("show interrupts tracing (extint/softint/iret): ON\n"); + } + } else if (!strcmp(arg, "extint")) { + if (dbg_show_mask & BX_DBG_SHOW_EXTINT) { + dbg_show_mask &= ~BX_DBG_SHOW_EXTINT; + dbg_printf("show external interrupts: OFF\n"); + } else { + dbg_show_mask |= BX_DBG_SHOW_EXTINT; + dbg_printf("show external interrupts: ON\n"); + } + } else if (!strcmp(arg, "softint")) { + if (dbg_show_mask & BX_DBG_SHOW_SOFTINT) { + dbg_show_mask &= ~BX_DBG_SHOW_SOFTINT; + dbg_printf("show software interrupts: OFF\n"); + } else { + dbg_show_mask |= BX_DBG_SHOW_SOFTINT; + dbg_printf("show software interrupts: ON\n"); + } + } else if (!strcmp(arg, "iret")) { + if (dbg_show_mask & BX_DBG_SHOW_IRET) { + dbg_show_mask &= ~BX_DBG_SHOW_IRET; + dbg_printf("show iret: OFF\n"); + } else { + dbg_show_mask |= BX_DBG_SHOW_IRET; + dbg_printf("show iret: ON\n"); + } + } else if(!strcmp(arg,"call")) { + if (dbg_show_mask & BX_DBG_SHOW_CALLRET) { + dbg_show_mask &= ~BX_DBG_SHOW_CALLRET; + dbg_printf("show calls/returns: OFF\n"); + } else { + dbg_show_mask |= BX_DBG_SHOW_CALLRET; + dbg_printf("show calls/returns: ON\n"); + } + } else if(!strcmp(arg,"off")) { + dbg_show_mask = 0x0; + dbg_printf("Disable all show flags\n"); + } else if(!strcmp(arg,"dbg-all")) { + bx_dbg.interrupts = 1; + bx_dbg.exceptions = 1; + bx_dbg.debugger = 1; + /* bx_dbg.record_io = 1; this is a pointer .. somewhere */ + dbg_printf("Turned ON all bx_dbg flags\n"); + return; + } else if(!strcmp(arg,"dbg-none")) { + bx_dbg.interrupts = 0; + bx_dbg.exceptions = 0; + bx_dbg.debugger = 0; + /* bx_dbg.record_io = 0; this is a pointer .. somewhere */ + dbg_printf("Turned OFF all bx_dbg flags\n"); + return; + } else if(!strcmp(arg,"vga")){ + DEV_vga_refresh(); + return; + } else { + dbg_printf("Unrecognized arg: %s (only 'mode', 'int', 'softint', 'extint', 'iret', 'call', 'off', 'dbg-all' and 'dbg-none' are valid)\n", arg); + return; + } + } + + if (dbg_show_mask) { + dbg_printf("show mask is:"); + if (dbg_show_mask & BX_DBG_SHOW_CALLRET) + dbg_printf(" call"); + if (dbg_show_mask & BX_DBG_SHOW_SOFTINT) + dbg_printf(" softint"); + if (dbg_show_mask & BX_DBG_SHOW_EXTINT) + dbg_printf(" extint"); + if (dbg_show_mask & BX_DBG_SHOW_IRET) + dbg_printf(" iret"); + if (dbg_show_mask & BX_DBG_SHOW_MODE) + dbg_printf(" mode"); + dbg_printf("\n"); + } + else { + dbg_printf("show mask is: 0\n"); + } +} + +void bx_dbg_show_param_command(const char *param) +{ + dbg_printf("show param name: <%s>\n", param); + bx_param_c *node = SIM->get_param(param, SIM->get_bochs_root()); + if (node) { + print_tree(node, 0); + } + else { + node = SIM->get_param(param, dbg_cpu_list); + if (node) + print_tree(node, 0); + else + dbg_printf("can't find param <%s> in global or default CPU tree\n", param); + } +} + +// return non zero to cause a stop +int bx_dbg_show_symbolic(void) +{ + static unsigned last_cpu_mode = 0; + static bx_address last_cr3 = 0; + + /* modes & address spaces */ + if (dbg_show_mask & BX_DBG_SHOW_MODE) { + if(BX_CPU(dbg_cpu)->get_cpu_mode() != last_cpu_mode) { + dbg_printf (FMT_TICK ": switched from '%s' to '%s'\n", + bx_pc_system.time_ticks(), + cpu_mode_string(last_cpu_mode), + cpu_mode_string(BX_CPU(dbg_cpu)->get_cpu_mode())); + } + + if(last_cr3 != BX_CPU(dbg_cpu)->cr3) + dbg_printf(FMT_TICK ": address space switched. CR3: 0x" FMT_PHY_ADDRX "\n", + bx_pc_system.time_ticks(), BX_CPU(dbg_cpu)->cr3); + } + + /* interrupts */ + if (dbg_show_mask & BX_DBG_SHOW_SOFTINT) { + if(BX_CPU(dbg_cpu)->show_flag & Flag_softint) { + dbg_printf(FMT_TICK ": softint ", bx_pc_system.time_ticks()); + dbg_print_guard_found(BX_CPU(dbg_cpu)->get_cpu_mode(), + BX_CPU(dbg_cpu)->guard_found.cs, BX_CPU(dbg_cpu)->guard_found.eip, + BX_CPU(dbg_cpu)->guard_found.laddr); + dbg_printf("\n"); + } + } + + if (dbg_show_mask & BX_DBG_SHOW_EXTINT) { + if((BX_CPU(dbg_cpu)->show_flag & Flag_intsig) && !(BX_CPU(dbg_cpu)->show_flag & Flag_softint)) { + dbg_printf(FMT_TICK ": exception (not softint) ", bx_pc_system.time_ticks()); + dbg_print_guard_found(BX_CPU(dbg_cpu)->get_cpu_mode(), + BX_CPU(dbg_cpu)->guard_found.cs, BX_CPU(dbg_cpu)->guard_found.eip, + BX_CPU(dbg_cpu)->guard_found.laddr); + dbg_printf("\n"); + } + } + + if (dbg_show_mask & BX_DBG_SHOW_IRET) { + if(BX_CPU(dbg_cpu)->show_flag & Flag_iret) { + dbg_printf(FMT_TICK ": iret ", bx_pc_system.time_ticks()); + dbg_print_guard_found(BX_CPU(dbg_cpu)->get_cpu_mode(), + BX_CPU(dbg_cpu)->guard_found.cs, BX_CPU(dbg_cpu)->guard_found.eip, + BX_CPU(dbg_cpu)->guard_found.laddr); + dbg_printf("\n"); + } + } + + /* calls */ + if (dbg_show_mask & BX_DBG_SHOW_CALLRET) + { + if(BX_CPU(dbg_cpu)->show_flag & Flag_call) { + bx_phy_address phy = 0; + bx_bool valid = BX_CPU(dbg_cpu)->dbg_xlate_linear2phy(BX_CPU(dbg_cpu)->guard_found.laddr, &phy); + dbg_printf(FMT_TICK ": call ", bx_pc_system.time_ticks()); + dbg_print_guard_found(BX_CPU(dbg_cpu)->get_cpu_mode(), + BX_CPU(dbg_cpu)->guard_found.cs, BX_CPU(dbg_cpu)->guard_found.eip, + BX_CPU(dbg_cpu)->guard_found.laddr); + if (!valid) dbg_printf(" phys not valid"); + else { + dbg_printf(" (phy: 0x" FMT_PHY_ADDRX ") %s", phy, + bx_dbg_symbolic_address(BX_CPU(dbg_cpu)->cr3 >> 12, + BX_CPU(dbg_cpu)->guard_found.eip, + BX_CPU(dbg_cpu)->guard_found.laddr - BX_CPU(dbg_cpu)->guard_found.eip)); + } + dbg_printf("\n"); + } + } + + last_cr3 = BX_CPU(dbg_cpu)->cr3; + last_cpu_mode = BX_CPU(dbg_cpu)->get_cpu_mode(); + BX_CPU(dbg_cpu)->show_flag = 0; + + return 0; +} + +void bx_dbg_print_stack_command(unsigned nwords) +{ + bx_address linear_sp; + unsigned len; + +#if BX_SUPPORT_X86_64 + if (BX_CPU(dbg_cpu)->get_cpu_mode() == BX_MODE_LONG_64) { + linear_sp = BX_CPU(dbg_cpu)->get_reg64(BX_64BIT_REG_RSP); + len = 8; + } + else +#endif + { + if (BX_CPU(dbg_cpu)->sregs[BX_SEG_REG_SS].cache.u.segment.d_b) { + linear_sp = BX_CPU(dbg_cpu)->get_reg32(BX_32BIT_REG_ESP); + len = 4; + } + else { + linear_sp = BX_CPU(dbg_cpu)->get_reg16(BX_16BIT_REG_SP); + len = 2; + } + + linear_sp = BX_CPU(dbg_cpu)->get_laddr(BX_SEG_REG_SS, linear_sp); + } + + Bit8u buf[8]; + + dbg_printf("Stack address size %d\n", len); + + for (unsigned i = 0; i < nwords; i++) { + if (! bx_dbg_read_linear(dbg_cpu, linear_sp, len, buf)) break; +#if BX_SUPPORT_X86_64 + if (len == 8) { + dbg_printf(" | STACK 0x%08x%08x [0x%08x:0x%08x]\n", + GET32H(linear_sp), GET32L(linear_sp), + (unsigned) conv_4xBit8u_to_Bit32u(buf+4), + (unsigned) conv_4xBit8u_to_Bit32u(buf)); + } + else +#endif + { + if (len == 4) { + dbg_printf(" | STACK 0x%08x [0x%08x]\n", + (unsigned) linear_sp, (unsigned) conv_4xBit8u_to_Bit32u(buf)); + } + else { + dbg_printf(" | STACK 0x%04x [0x%04x]\n", + (unsigned) linear_sp, (unsigned) conv_2xBit8u_to_Bit16u(buf)); + } + } + + linear_sp += len; + } +} + +void bx_dbg_print_watchpoints(void) +{ unsigned i; + Bit8u buf[2]; + + // print watch point info + for (i = 0; i < num_read_watchpoints; i++) { + if (BX_MEM(0)->dbg_fetch_mem(BX_CPU(dbg_cpu), read_watchpoint[i].addr, 2, buf)) + dbg_printf("rd 0x"FMT_PHY_ADDRX" len=%d\t\t(%04x)\n", + read_watchpoint[i].addr, read_watchpoint[i].len, (int)buf[0] | ((int)buf[1] << 8)); + else + dbg_printf("rd 0x"FMT_PHY_ADDRX" len=%d\t\t(read error)\n", + read_watchpoint[i].addr, read_watchpoint[i].len); + } + for (i = 0; i < num_write_watchpoints; i++) { + if (BX_MEM(0)->dbg_fetch_mem(BX_CPU(dbg_cpu), write_watchpoint[i].addr, 2, buf)) + dbg_printf("wr 0x"FMT_PHY_ADDRX" len=%d\t\t(%04x)\n", + write_watchpoint[i].addr, write_watchpoint[i].len, (int)buf[0] | ((int)buf[1] << 8)); + else + dbg_printf("rd 0x"FMT_PHY_ADDRX" len=%d\t\t(read error)\n", + write_watchpoint[i].addr, write_watchpoint[i].len); + } +} + +void bx_dbg_watch(int type, bx_phy_address address, Bit32u len) +{ + if (type == BX_READ) { + if (num_read_watchpoints == BX_DBG_MAX_WATCHPONTS) { + dbg_printf("Too many read watchpoints (%d)\n", BX_DBG_MAX_WATCHPONTS); + return; + } + read_watchpoint[num_read_watchpoints].addr = address; + read_watchpoint[num_read_watchpoints].len = len; + num_read_watchpoints++; + dbg_printf("read watchpoint at 0x" FMT_PHY_ADDRX " len=%d inserted\n", address, len); + } + else if (type == BX_WRITE) { + if (num_write_watchpoints == BX_DBG_MAX_WATCHPONTS) { + dbg_printf("Too many write watchpoints (%d)\n", BX_DBG_MAX_WATCHPONTS); + return; + } + write_watchpoint[num_write_watchpoints].addr = address; + write_watchpoint[num_write_watchpoints].len = len; + num_write_watchpoints++; + dbg_printf("write watchpoint at 0x" FMT_PHY_ADDRX " len=%d inserted\n", address, len); + } + else { + dbg_printf("bx_dbg_watch: broken watchpoint type"); + } +} + +void bx_dbg_unwatch_all() +{ + num_read_watchpoints = num_write_watchpoints = 0; + dbg_printf("All watchpoints removed\n"); +} + +void bx_dbg_unwatch(bx_phy_address address) +{ unsigned i; + for (i=0; iguard_found.guard_found = 0; + BX_CPU(cpu)->guard_found.icount = 0; + BX_CPU(cpu)->guard_found.time_tick = bx_pc_system.time_ticks(); + } + + // update gui (disable continue command, enable stop command, etc.) + sim_running->set(1); + SIM->refresh_ci(); + + // use simulation mode while executing instructions. When the prompt + // is printed, we will return to config mode. + SIM->set_display_mode(DISP_MODE_SIM); + + bx_guard.interrupt_requested = 0; + int stop = 0; + int which = -1; + while (!stop && !bx_guard.interrupt_requested) { + // the quantum is an arbitrary number of cycles to run in each + // processor. In SMP mode, when this limit is reached, the + // cpu_loop exits so that another processor can be simulated + // for a few cycles. With a single processor, the quantum + // setting should have no effect, although a low setting does + // lead to poor performance because cpu_loop is returning and + // getting called again, over and over. + +#define BX_DBG_DEFAULT_ICOUNT_QUANTUM 5 + + Bit32u quantum = (BX_SMP_PROCESSORS>1) ? BX_DBG_DEFAULT_ICOUNT_QUANTUM : 0; + Bit32u max_executed = 0; + for (cpu=0; cpu < BX_SMP_PROCESSORS; cpu++) { + Bit64u cpu_icount = BX_CPU(cpu)->guard_found.icount; + BX_CPU(cpu)->cpu_loop(quantum); + Bit32u executed = BX_CPU(cpu)->guard_found.icount - cpu_icount; + if (executed > max_executed) max_executed = executed; + // set stop flag if a guard found other than icount or halted + unsigned found = BX_CPU(cpu)->guard_found.guard_found; + stop_reason_t reason = (stop_reason_t) BX_CPU(cpu)->stop_reason; + if (found || (reason != STOP_NO_REASON && reason != STOP_CPU_HALTED)) { + stop = 1; + which = cpu; + } + // even if stop==1, finish cycling through all processors. + // "which" remembers which cpu set the stop flag. If multiple + // cpus set stop, too bad. + } + +#if BX_SUPPORT_SMP + // increment time tick only after all processors have had their chance. + if (BX_SMP_PROCESSORS > 1) { + // potential deadlock if all processors are halted. Then + // max_executed will be 0, tick will be incremented by zero, and + // there will never be a timed event to wake them up. To avoid this, + // always tick by a minimum of 1. + if (max_executed < 1) max_executed=1; + + BX_TICKN(max_executed); + } +#endif + } + + sim_running->set(0); + SIM->refresh_ci(); + + // (mch) hack + DEV_vga_refresh(); + + BX_INSTR_DEBUG_PROMPT(); + bx_dbg_print_guard_results(); + + if (watchpoint_continue && (BX_CPU(which)->stop_reason == STOP_READ_WATCH_POINT || + BX_CPU(which)->stop_reason == STOP_WRITE_WATCH_POINT)) + goto one_more; +} + +void bx_dbg_stepN_command(int cpu, Bit32u count) +{ + if (cpu != -1 && cpu >= BX_SMP_PROCESSORS) { + dbg_printf("Error: stepN: unknown cpu=%d\n", cpu); + return; + } + + if (count == 0) { + dbg_printf("Error: stepN: count=0\n"); + return; + } + + // use simulation mode while executing instructions. When the prompt + // is printed, we will return to config mode. + SIM->set_display_mode(DISP_MODE_SIM); + + // reset guard counters for all CPUs + for (unsigned n=0; n < BX_SMP_PROCESSORS; n++) { + BX_CPU(n)->guard_found.icount = 0; + BX_CPU(n)->guard_found.time_tick = bx_pc_system.time_ticks(); + } + + if (cpu >= 0 || BX_SUPPORT_SMP==0) { + bx_guard.interrupt_requested = 0; + BX_CPU(cpu)->guard_found.guard_found = 0; + BX_CPU(cpu)->cpu_loop(count); + } +#if BX_SUPPORT_SMP + else { + int stop = 0; + // for now, step each CPU one instruction at a time + for (unsigned cycle=0; !stop && cycle < count; cycle++) { + for (unsigned ncpu=0; ncpu < BX_SMP_PROCESSORS; ncpu++) { + bx_guard.interrupt_requested = 0; + BX_CPU(ncpu)->guard_found.guard_found = 0; + BX_CPU(ncpu)->cpu_loop(1); + // set stop flag if a guard found other than icount or halted + unsigned found = BX_CPU(ncpu)->guard_found.guard_found; + stop_reason_t reason = (stop_reason_t) BX_CPU(ncpu)->stop_reason; + if (found || (reason != STOP_NO_REASON && reason != STOP_CPU_HALTED)) + stop = 1; + } + + // when (BX_SMP_PROCESSORS == 1) ticks are handled inside the cpu loop + if (BX_SMP_PROCESSORS > 1) BX_TICK1(); + } + } +#endif + + BX_INSTR_DEBUG_PROMPT(); + bx_dbg_print_guard_results(); +} + +void bx_dbg_disassemble_current(int which_cpu, int print_time) +{ + bx_phy_address phy; + + if (which_cpu < 0) { + // iterate over all of them. + for (int i=0; idbg_xlate_linear2phy(BX_CPU(which_cpu)->guard_found.laddr, &phy); + if (! phy_valid) { + dbg_printf("(%u).[" FMT_LL "d] ??? (physical address not available)\n", which_cpu, bx_pc_system.time_ticks()); + return; + } + + if (bx_dbg_read_linear(which_cpu, BX_CPU(which_cpu)->guard_found.laddr, 16, bx_disasm_ibuf)) + { + unsigned ilen = bx_disassemble.disasm(IS_CODE_32(BX_CPU(which_cpu)->guard_found.code_32_64), + IS_CODE_64(BX_CPU(which_cpu)->guard_found.code_32_64), + BX_CPU(which_cpu)->get_segment_base(BX_SEG_REG_CS), + BX_CPU(which_cpu)->guard_found.eip, bx_disasm_ibuf, bx_disasm_tbuf); + + // Note: it would be nice to display only the modified registers here, the easy + // way out I have thought of would be to keep a prev_eax, prev_ebx, etc copies + // in each cpu description (see cpu/cpu.h) and update/compare those "prev" values + // from here. (eks) + if(BX_CPU(which_cpu)->trace_reg) + bx_dbg_info_registers_command(BX_INFO_GENERAL_PURPOSE_REGS); + + if (print_time) + dbg_printf("(%u).[" FMT_LL "d] ", which_cpu, bx_pc_system.time_ticks()); + else + dbg_printf("(%u) ", which_cpu); + + if (BX_CPU(which_cpu)->protected_mode()) { + dbg_printf("[0x"FMT_PHY_ADDRX"] %04x:" FMT_ADDRX " (%s): ", + phy, BX_CPU(which_cpu)->guard_found.cs, + BX_CPU(which_cpu)->guard_found.eip, + bx_dbg_symbolic_address(BX_CPU(which_cpu)->cr3 >> 12, + BX_CPU(which_cpu)->guard_found.eip, + BX_CPU(which_cpu)->get_segment_base(BX_SEG_REG_CS))); + } + else { // Real & V86 mode + dbg_printf("[0x"FMT_PHY_ADDRX"] %04x:%04x (%s): ", + phy, BX_CPU(which_cpu)->guard_found.cs, + (unsigned) BX_CPU(which_cpu)->guard_found.eip, + bx_dbg_symbolic_address_16bit(BX_CPU(which_cpu)->guard_found.eip, + BX_CPU(which_cpu)->sregs[BX_SEG_REG_CS].selector.value)); + } + dbg_printf("%-25s ; ", bx_disasm_tbuf); + for (unsigned j=0; jguard_found.guard_found; + if (! found) { /* ... */ } +#if (BX_DBG_MAX_VIR_BPOINTS > 0) + else if (found & BX_DBG_GUARD_IADDR_VIR) { + i = BX_CPU(cpu)->guard_found.iaddr_index; + dbg_printf("(%u) Breakpoint %u, in "); + dbg_print_guard_found(BX_CPU(dbg_cpu)->get_cpu_mode(), + BX_CPU(cpu)->guard_found.cs, BX_CPU(cpu)->guard_found.eip, + BX_CPU(cpu)->guard_found.laddr); + dbg_printf("\n"); + } +#endif +#if (BX_DBG_MAX_LIN_BPOINTS > 0) + else if (found & BX_DBG_GUARD_IADDR_LIN) { + i = BX_CPU(cpu)->guard_found.iaddr_index; + if (bx_guard.iaddr.lin[i].bpoint_id != 0) + dbg_printf("(%u) Breakpoint %u, 0x" FMT_ADDRX " in ?? ()\n", + cpu, + bx_guard.iaddr.lin[i].bpoint_id, + BX_CPU(cpu)->guard_found.laddr); + } +#endif +#if (BX_DBG_MAX_PHY_BPOINTS > 0) + else if (found & BX_DBG_GUARD_IADDR_PHY) { + i = BX_CPU(cpu)->guard_found.iaddr_index; + dbg_printf("(%u) Breakpoint %u, 0x" FMT_ADDRX " in ?? ()\n", + cpu, + bx_guard.iaddr.phy[i].bpoint_id, + BX_CPU(cpu)->guard_found.laddr); + } +#endif + switch(BX_CPU(cpu)->stop_reason) { + case STOP_NO_REASON: + case STOP_CPU_HALTED: + break; + case STOP_TIME_BREAK_POINT: + dbg_printf("(%u) Caught time breakpoint\n", cpu); + break; + case STOP_READ_WATCH_POINT: + dbg_printf("(%u) Caught read watch point at 0x" FMT_PHY_ADDRX "\n", cpu, BX_CPU(cpu)->watchpoint); + break; + case STOP_WRITE_WATCH_POINT: + dbg_printf("(%u) Caught write watch point at 0x" FMT_PHY_ADDRX "\n", cpu, BX_CPU(cpu)->watchpoint); + break; + case STOP_MAGIC_BREAK_POINT: + dbg_printf("(%u) Magic breakpoint\n", cpu); + break; + case STOP_MODE_BREAK_POINT: + dbg_printf("(%u) Caught mode switch breakpoint switching to '%s'\n", + cpu, cpu_mode_string(BX_CPU(cpu)->get_cpu_mode())); + break; + default: + dbg_printf("Error: (%u) print_guard_results: guard_found ? (stop reason %u)\n", + cpu, BX_CPU(cpu)->stop_reason); + } + + if (bx_debugger.auto_disassemble) { + if (cpu==0) { + // print this only once + dbg_printf("Next at t=" FMT_LL "d\n", bx_pc_system.time_ticks()); + } + bx_dbg_disassemble_current(cpu, 0); // one cpu, don't print time + } + } +#if 0 + // print the TSC value for every CPU + for (cpu=0; cputsc); + } +#endif +} + +void bx_dbg_breakpoint_changed(void) +{ +#if (BX_DBG_MAX_VIR_BPOINTS > 0) + if (bx_guard.iaddr.num_virtual) + bx_guard.guard_for |= BX_DBG_GUARD_IADDR_VIR; + else + bx_guard.guard_for &= ~BX_DBG_GUARD_IADDR_VIR; +#endif + +#if (BX_DBG_MAX_LIN_BPOINTS > 0) + if (bx_guard.iaddr.num_linear) + bx_guard.guard_for |= BX_DBG_GUARD_IADDR_LIN; + else + bx_guard.guard_for &= ~BX_DBG_GUARD_IADDR_LIN; +#endif + +#if (BX_DBG_MAX_PHY_BPOINTS > 0) + if (bx_guard.iaddr.num_physical) + bx_guard.guard_for |= BX_DBG_GUARD_IADDR_PHY; + else + bx_guard.guard_for &= ~BX_DBG_GUARD_IADDR_PHY; +#endif +} + +void bx_dbg_en_dis_breakpoint_command(unsigned handle, bx_bool enable) +{ +#if (BX_DBG_MAX_VIR_BPOINTS > 0) + if (bx_dbg_en_dis_vbreak(handle, enable)) + goto done; +#endif + +#if (BX_DBG_MAX_LIN_BPOINTS > 0) + if (bx_dbg_en_dis_lbreak(handle, enable)) + goto done; +#endif + +#if (BX_DBG_MAX_PHY_BPOINTS > 0) + if (bx_dbg_en_dis_pbreak(handle, enable)) + goto done; +#endif + + dbg_printf("Error: breakpoint %u not found.\n", handle); + return; + +done: + bx_dbg_breakpoint_changed(); +} + +bx_bool bx_dbg_en_dis_pbreak(unsigned handle, bx_bool enable) +{ +#if (BX_DBG_MAX_PHY_BPOINTS > 0) + // see if breakpoint is a physical breakpoint + for (unsigned i=0; i 0) + // see if breakpoint is a linear breakpoint + for (unsigned i=0; i 0) + // see if breakpoint is a virtual breakpoint + for (unsigned i=0; i 0) + if (bx_dbg_del_vbreak(handle)) + goto done; +#endif + +#if (BX_DBG_MAX_LIN_BPOINTS > 0) + if (bx_dbg_del_lbreak(handle)) + goto done; +#endif + +#if (BX_DBG_MAX_PHY_BPOINTS > 0) + if (bx_dbg_del_pbreak(handle)) + goto done; +#endif + + dbg_printf("Error: breakpoint %u not found.\n", handle); + return; + +done: + bx_dbg_breakpoint_changed(); +} + +bx_bool bx_dbg_del_pbreak(unsigned handle) +{ +#if (BX_DBG_MAX_PHY_BPOINTS > 0) + // see if breakpoint is a physical breakpoint + for (unsigned i=0; i 0) + // see if breakpoint is a linear breakpoint + for (unsigned i=0; i 0) + // see if breakpoint is a virtual breakpoint + for (unsigned i=0; i 0) + if (bk != bkRegular) { + dbg_printf("Error: vbreak of this kind not implemented yet.\n"); + return -1; + } + + if (bx_guard.iaddr.num_virtual >= BX_DBG_MAX_VIR_BPOINTS) { + dbg_printf("Error: no more virtual breakpoint slots left.\n"); + dbg_printf("Error: see BX_DBG_MAX_VIR_BPOINTS.\n"); + return -1; + } + + bx_guard.iaddr.vir[bx_guard.iaddr.num_virtual].cs = cs; + bx_guard.iaddr.vir[bx_guard.iaddr.num_virtual].eip = eip; + bx_guard.iaddr.vir[bx_guard.iaddr.num_virtual].bpoint_id = bx_debugger.next_bpoint_id++; + int BpId = (int)bx_guard.iaddr.vir[bx_guard.iaddr.num_virtual].bpoint_id; + bx_guard.iaddr.vir[bx_guard.iaddr.num_virtual].enabled=1; + bx_guard.iaddr.num_virtual++; + bx_guard.guard_for |= BX_DBG_GUARD_IADDR_VIR; + return BpId; + +#else + dbg_printf("Error: virtual breakpoint support not compiled in.\n"); + dbg_printf("Error: make sure BX_DBG_MAX_VIR_BPOINTS > 0\n"); + return -1; +#endif +} + +int bx_dbg_lbreakpoint_command(BreakpointKind bk, bx_address laddress) +{ +#if (BX_DBG_MAX_LIN_BPOINTS > 0) + if (bk == bkAtIP) { + dbg_printf("Error: lbreak of this kind not implemented yet.\n"); + return -1; + } + + if (bx_guard.iaddr.num_linear >= BX_DBG_MAX_LIN_BPOINTS) { + dbg_printf("Error: no more linear breakpoint slots left.\n"); + dbg_printf("Error: see BX_DBG_MAX_LIN_BPOINTS.\n"); + return -1; + } + + bx_guard.iaddr.lin[bx_guard.iaddr.num_linear].addr = laddress; + int BpId = (bk == bkStepOver) ? 0 : bx_debugger.next_bpoint_id++; + bx_guard.iaddr.lin[bx_guard.iaddr.num_linear].bpoint_id = BpId; + bx_guard.iaddr.lin[bx_guard.iaddr.num_linear].enabled=1; + bx_guard.iaddr.num_linear++; + bx_guard.guard_for |= BX_DBG_GUARD_IADDR_LIN; + return BpId; + +#else + dbg_printf("Error: linear breakpoint support not compiled in.\n"); + dbg_printf("Error: make sure BX_DBG_MAX_LIN_BPOINTS > 0\n"); + return -1; +#endif +} + +int bx_dbg_pbreakpoint_command(BreakpointKind bk, bx_phy_address paddress) +{ +#if (BX_DBG_MAX_PHY_BPOINTS > 0) + if (bk != bkRegular) { + dbg_printf("Error: pbreak of this kind not implemented yet.\n"); + return -1; + } + + if (bx_guard.iaddr.num_physical >= BX_DBG_MAX_PHY_BPOINTS) { + dbg_printf("Error: no more physical breakpoint slots left.\n"); + dbg_printf("Error: see BX_DBG_MAX_PHY_BPOINTS.\n"); + return -1; + } + + bx_guard.iaddr.phy[bx_guard.iaddr.num_physical].addr = paddress; + bx_guard.iaddr.phy[bx_guard.iaddr.num_physical].bpoint_id = bx_debugger.next_bpoint_id++; + int BpId = (int)bx_guard.iaddr.phy[bx_guard.iaddr.num_physical].bpoint_id; + bx_guard.iaddr.phy[bx_guard.iaddr.num_physical].enabled=1; + bx_guard.iaddr.num_physical++; + bx_guard.guard_for |= BX_DBG_GUARD_IADDR_PHY; + return BpId; +#else + dbg_printf("Error: physical breakpoint support not compiled in.\n"); + dbg_printf("Error: make sure BX_DBG_MAX_PHY_BPOINTS > 0\n"); + return -1; +#endif +} + +void bx_dbg_info_bpoints_command(void) +{ + unsigned i; +// Num Type Disp Enb Address What +// 1 breakpoint keep y 0x00010664 in main at temp.c:7 + + dbg_printf("Num Type Disp Enb Address\n"); +#if (BX_DBG_MAX_VIR_BPOINTS > 0) + for (i=0; i 0) + for (i=0; i 0) + for (i=0; idbg_take_dma(); + } + + bx_dbg_batch_dma.this_many = 1; // reset to normal + bx_dbg_post_dma_reports(); // print reports and flush + if (bx_guard.report.dma) + dbg_printf("done\n"); + } + else if (! strcmp(what, "irq")) { + BX_CPU(0)->dbg_take_irq(); + + if (bx_guard.report.irq) + dbg_printf("done\n"); + } + else { + dbg_printf("Error: Take '%s' not understood.\n", what); + } +} + +static void bx_print_char(Bit8u ch) +{ + if (ch < 10) + dbg_printf(" \\%d ", ch); + else if (isprint(ch)) + dbg_printf(" %c ", ch); + else + dbg_printf(" \\x%02X", ch); +} + +void dbg_printf_binary(const char *format, Bit32u data, int bits) +{ + int len = 0; + char num[33]; + + for (unsigned b = 1 << (bits - 1); b; b >>= 1) + num [len++] = (data & b) ? '1' : '0'; + num[len] = 0; + dbg_printf(format, num); +} + +void bx_dbg_examine_command(const char *command, const char *format, bx_bool format_passed, + bx_address addr, bx_bool addr_passed) +{ + unsigned repeat_count, i; + char ch, display_format, unit_size; + bx_bool iteration, memory_dump = false; + unsigned data_size; + Bit8u data8; + Bit16u data16; + Bit32u data32; + unsigned columns, per_line, offset; + bx_bool is_linear; + Bit8u databuf[8]; + + dbg_printf("[bochs]:\n"); + + // If command was the extended "xp" command, meaning eXamine Physical memory, + // then flag memory address as physical, rather than linear. + if (strcmp(command, "xp") == 0) { + is_linear = 0; + } + else { + is_linear = 1; + } + + if (addr_passed==0) + addr = bx_debugger.default_addr; + + if (format_passed==0) { + display_format = bx_debugger.default_display_format; + unit_size = bx_debugger.default_unit_size; + repeat_count = 1; + } + else { + if (format==NULL) { + dbg_printf("dbg_examine: format NULL\n"); + bx_dbg_exit(1); + } + + if (strlen(format) < 2) { + dbg_printf("dbg_examine: invalid format passed.\n"); + bx_dbg_exit(1); + } + + if (format[0] != '/') { + dbg_printf("dbg_examine: '/' is not first char of format.\n"); + bx_dbg_exit(1); + } + + format++; + repeat_count = 0; + ch = *format; + iteration = 0; + + while (ch>='0' && ch<='9') { + iteration = 1; + repeat_count = 10*repeat_count + (ch-'0'); + format++; + ch = *format; + } + + if (iteration==0) { + // if no count given, use default + repeat_count = 1; + } + else if (repeat_count==0) { + // count give, but zero is an error + dbg_printf("dbg_examine: repeat count given but is zero.\n"); + return; + } + + // set up the default display format and unit size parameters + display_format = bx_debugger.default_display_format; + unit_size = bx_debugger.default_unit_size; + + for (i = 0; format[i]; i++) { + switch (ch = format[i]) { + case 'x': // hex + case 'd': // signed decimal + case 'u': // unsigned decimal + case 'o': // octal + case 't': // binary + case 'c': // chars + case 's': // null terminated string + case 'i': // machine instruction + display_format = ch; + break; + + case 'b': // bytes + case 'h': // halfwords (two bytes) + case 'w': // words (4 bytes) + case 'g': // giant words (8 bytes) + unit_size = ch; + break; + + case 'm': // memory dump + memory_dump = true; + break; + + default: + dbg_printf("dbg_examine: invalid format passed. \'%c\'\n", ch); + bx_dbg_exit(1); + break; + } + } + } + + if ((display_format == 'i') || (display_format == 's')) { + dbg_printf("error: dbg_examine: 'i' and 's' formats not supported.\n"); + return; + } + + if (unit_size == 'g') { + dbg_printf("error: dbg_examine: 'g' (8-byte) unit size not supported.\n"); + return; + } + + if (format_passed) { + // store current options as default + bx_debugger.default_display_format = display_format; + bx_debugger.default_unit_size = unit_size; + } + + data_size = 0; + per_line = 0; + offset = 0; + + if (memory_dump) { + if (display_format == 'c') { + // Display character dump in lines of 64 characters + unit_size = 'b'; + data_size = 1; + per_line = 64; + } + else + switch (unit_size) { + case 'b': data_size = 1; per_line = 16; break; + case 'h': data_size = 2; per_line = 8; break; + case 'w': data_size = 4; per_line = 4; break; + //case 'g': data_size = 8; per_line = 2; break; + } + // binary format is quite large + if (display_format == 't') + per_line /= 4; + } + else { + switch (unit_size) { + case 'b': data_size = 1; per_line = 8; break; + case 'h': data_size = 2; per_line = 8; break; + case 'w': data_size = 4; per_line = 4; break; + //case 'g': data_size = 8; per_line = 2; break; + } + } + + columns = per_line + 1; // set current number columns past limit + + for (i=1; i<=repeat_count; i++) { + if (columns > per_line) { + // if not 1st run, need a newline from last line + if (i!=1) + dbg_printf("\n"); + if (memory_dump) + dbg_printf("0x" FMT_ADDRX ":", addr); + else + dbg_printf("0x" FMT_ADDRX " :", addr, offset); + columns = 1; + } + + /* Put a space in the middle of dump, for readability */ + if ((columns - 1) == per_line / 2 + && memory_dump && display_format != 'c') + dbg_printf(" "); + + if (is_linear) { + if (! bx_dbg_read_linear(dbg_cpu, addr, data_size, databuf)) return; + } + else { + // address is already physical address + BX_MEM(0)->dbg_fetch_mem(BX_CPU(dbg_cpu), (bx_phy_address) addr, data_size, databuf); + } + + //FIXME HanishKVC The char display for data to be properly integrated + // so that repeat_count, columns, etc. can be set or used properly. + // Also for data_size of 2 and 4 how to display the individual + // characters i.e in which order to be decided. + switch (data_size) { + case 1: + data8 = databuf[0]; + if (memory_dump) + switch (display_format) { + case 'd': dbg_printf("%03d ", data8); break; + case 'u': dbg_printf("%03u ", data8); break; + case 'o': dbg_printf("%03o ", data8); break; + case 't': dbg_printf_binary("%s ", data8, 8); break; + case 'c': dbg_printf("%c", isprint(data8) ? data8 : '.'); break; + default : dbg_printf("%02X ", data8); break; + } + else + switch (display_format) { + case 'x': dbg_printf("\t0x%02x", (unsigned) data8); break; + case 'd': dbg_printf("\t%d", (int) (Bit8s) data8); break; + case 'u': dbg_printf("\t%u", (unsigned) data8); break; + case 'o': dbg_printf("\t%o", (unsigned) data8); break; + case 't': dbg_printf_binary("\t%s", data8, 8); break; + case 'c': bx_print_char(data8); break; + } + break; + + case 2: + ReadHostWordFromLittleEndian(databuf, data16); + + if (memory_dump) + switch (display_format) { + case 'd': dbg_printf("%05d ", data16); break; + case 'u': dbg_printf("%05u ", data16); break; + case 'o': dbg_printf("%06o ", data16); break; + case 't': dbg_printf_binary("%s ", data16, 16); break; + default : dbg_printf("%04X ", data16); break; + } + else + switch (display_format) { + case 'x': dbg_printf("\t0x%04x", (unsigned) data16); break; + case 'd': dbg_printf("\t%d", (int) (Bit16s) data16); break; + case 'u': dbg_printf("\t%u", (unsigned) data16); break; + case 'o': dbg_printf("\t%o", (unsigned) data16); break; + case 't': dbg_printf_binary("\t%s", data16, 16); break; + case 'c': + bx_print_char(data16>>8); + bx_print_char(data16 & 0xff); + break; + } + break; + + case 4: + ReadHostDWordFromLittleEndian(databuf, data32); + + if (memory_dump) + switch (display_format) { + case 'd': dbg_printf("%10d ", data32); break; + case 'u': dbg_printf("%10u ", data32); break; + case 'o': dbg_printf("%12o ", data32); break; + case 't': dbg_printf_binary("%s ", data32, 32); break; + default : dbg_printf("%08X ", data32); break; + } + else + switch (display_format) { + case 'x': dbg_printf("\t0x%08x", (unsigned) data32); break; + case 'd': dbg_printf("\t%d", (int) (Bit32s) data32); break; + case 'u': dbg_printf("\t%u", (unsigned) data32); break; + case 'o': dbg_printf("\t%o", (unsigned) data32); break; + case 't': dbg_printf_binary("\t%s", data32, 32); break; + case 'c': + bx_print_char(0xff & (data32>>24)); + bx_print_char(0xff & (data32>>16)); + bx_print_char(0xff & (data32>> 8)); + bx_print_char(0xff & (data32>> 0)); + break; + } + break; + } + + addr += data_size; + bx_debugger.default_addr = addr; + columns++; + offset += data_size; + } + dbg_printf("\n"); +} + +Bit32u bx_dbg_lin_indirect(bx_address addr) +{ + Bit8u databuf[4]; + Bit32u result; + + if (! bx_dbg_read_linear(dbg_cpu, addr, 4, databuf)) { + /* bx_dbg_read_linear already printed an error message if it failed */ + return 0; + } + + ReadHostDWordFromLittleEndian(databuf, result); + return result; +} + +Bit32u bx_dbg_phy_indirect(bx_phy_address paddr) +{ + Bit8u databuf[4]; + Bit32u result; + + if (! BX_MEM(0)->dbg_fetch_mem(BX_CPU(dbg_cpu), paddr, 4, databuf)) { + /* dbg_fetch_mem already printed an error message if it failed */ + return 0; + } + + ReadHostDWordFromLittleEndian(databuf, result); + return result; +} + +void bx_dbg_setpmem_command(bx_phy_address paddr, unsigned len, Bit32u val) +{ + Bit8u buf[4]; + + switch (len) { + case 1: + buf[0] = (Bit8u) val; + break; + case 2: + buf[0] = val & 0xff; val >>= 8; + buf[1] = val & 0xff; + break; + case 4: + buf[0] = val & 0xff; val >>= 8; + buf[1] = val & 0xff; val >>= 8; + buf[2] = val & 0xff; val >>= 8; + buf[3] = val & 0xff; + break; + default: + dbg_printf("Error: setpmem: bad length value = %u\n", len); + return; + } + + if (! BX_MEM(0)->dbg_set_mem(paddr, len, buf)) { + dbg_printf("Error: setpmem: could not set memory, out of physical bounds?\n"); + } +} + +void bx_dbg_set_symbol_command(const char *symbol, Bit32u val) +{ + bx_bool is_OK = false; + symbol++; // get past '$' + + if (!strcmp(symbol, "eip")) { + is_OK = BX_CPU(dbg_cpu)->dbg_set_reg(BX_DBG_REG_EIP, val); + } + else if (!strcmp(symbol, "eflags")) { + is_OK = BX_CPU(dbg_cpu)->dbg_set_reg(BX_DBG_REG_EFLAGS, val); + } + else if (!strcmp(symbol, "cpu")) { + if (val >= BX_SMP_PROCESSORS) { + dbg_printf("invalid cpu id number %d\n", val); + return; + } + char cpu_param_name[10]; + sprintf(cpu_param_name, "cpu%d", val); + dbg_cpu_list = (bx_list_c*) SIM->get_param(cpu_param_name, SIM->get_bochs_root()); + dbg_cpu = val; + return; + } + else if (!strcmp(symbol, "synchronous_dma")) { + bx_guard.async.dma = !val; + return; + } + else if (!strcmp(symbol, "synchronous_irq")) { + bx_guard.async.irq = !val; + return; + } + else if (!strcmp(symbol, "event_reports")) { + bx_guard.report.irq = val; + bx_guard.report.a20 = val; + bx_guard.report.io = val; + bx_guard.report.dma = val; + return; + } + else if (!strcmp(symbol, "auto_disassemble")) { + bx_dbg_set_auto_disassemble(val != 0); + return; + } + else { + dbg_printf("Error: set: unrecognized symbol.\n"); + return; + } + + if (!is_OK) { + dbg_printf("Error: could not set register '%s'.\n", symbol); + } +} + +void bx_dbg_query_command(const char *what) +{ + unsigned pending; + + if (! strcmp(what, "pending")) { + pending = BX_CPU(0)->dbg_query_pending(); + + if (pending & BX_DBG_PENDING_DMA) + dbg_printf("pending DMA\n"); + + if (pending & BX_DBG_PENDING_IRQ) + dbg_printf("pending IRQ\n"); + + if (!pending) + dbg_printf("pending none\n"); + + dbg_printf("done\n"); + } + else { + dbg_printf("Error: Query '%s' not understood.\n", what); + } +} + +void bx_dbg_restore_command(const char *param_name, const char *restore_path) +{ + const char *path = (restore_path == NULL) ? "." : restore_path; + dbg_printf("restoring param (%s) state from file (%s/%s)\n", + param_name, path, param_name); + if (! SIM->restore_bochs_param(SIM->get_bochs_root(), path, param_name)) { + dbg_printf("Error: error occured during restore\n"); + } + else { + bx_sr_after_restore_state(); + } +} + +void bx_dbg_disassemble_current(const char *format) +{ + Bit64u addr = bx_dbg_get_laddr(bx_dbg_get_selector_value(BX_DBG_SREG_CS), + BX_CPU(dbg_cpu)->get_instruction_pointer()); + bx_dbg_disassemble_command(format, addr, addr); +} + +void bx_dbg_disassemble_command(const char *format, Bit64u from, Bit64u to) +{ + int numlines = INT_MAX; + + if (from > to) { + Bit64u temp = from; + from = to; + to = temp; + } + + if (format) { + // format always begins with '/' (checked in lexer) + // so we won't bother checking it here second time. + numlines = atoi(format + 1); + if (to == from) + to = BX_MAX_BIT64U; // Disassemble just X lines + } + + unsigned dis_size = bx_debugger.disassemble_size; + if (dis_size == 0) { + dis_size = 16; // until otherwise proven + if (BX_CPU(dbg_cpu)->sregs[BX_SEG_REG_CS].cache.u.segment.d_b) + dis_size = 32; + if (BX_CPU(dbg_cpu)->get_cpu_mode() == BX_MODE_LONG_64) + dis_size = 64; + } + + do { + numlines--; + + if (! bx_dbg_read_linear(dbg_cpu, from, 16, bx_disasm_ibuf)) break; + + unsigned ilen = bx_disassemble.disasm(dis_size==32, dis_size==64, + (bx_address)(-1), (bx_address)(-1), bx_disasm_ibuf, bx_disasm_tbuf); + + const char *Sym=bx_dbg_disasm_symbolic_address((Bit32u)from, 0); + + dbg_printf("%08x: ", (unsigned) from); + dbg_printf("(%20s): ", Sym?Sym:""); + dbg_printf("%-25s ; ", bx_disasm_tbuf); + + for (unsigned j=0; j 0); +} + +void bx_dbg_instrument_command(const char *comm) +{ +#if BX_INSTRUMENTATION + dbg_printf("Command '%s' passed to instrumentation module\n", comm); + BX_INSTR_DEBUG_CMD(comm); +#else + UNUSED(comm); + dbg_printf("Error: instrumentation not enabled.\n"); +#endif +} + +void bx_dbg_doit_command(unsigned n) +{ + // generic command to add temporary hacks to + // for debugging purposes + bx_dbg.interrupts = n; + bx_dbg.exceptions = n; +} + +void bx_dbg_crc_command(bx_phy_address addr1, bx_phy_address addr2) +{ + Bit32u crc1; + + if (addr1 >= addr2) { + dbg_printf("Error: crc32: invalid range\n"); + return; + } + + if (!BX_MEM(0)->dbg_crc32(addr1, addr2, &crc1)) { + dbg_printf("Error: could not crc32 memory\n"); + return; + } + dbg_printf("0x%lx\n", crc1); +} + +void bx_dbg_print_descriptor(Bit32u lo, Bit32u hi) +{ + Bit32u base = ((lo >> 16) & 0xffff) + | ((hi << 16) & 0xff0000) + | (hi & 0xff000000); + Bit32u limit = (hi & 0x000f0000) | (lo & 0xffff); + Bit32u segment = (lo >> 16) & 0xffff; + Bit32u offset = (lo & 0xffff) | (hi & 0xffff0000); + unsigned type = (hi >> 8) & 0xf; + unsigned dpl = (hi >> 13) & 0x3; + unsigned s = (hi >> 12) & 0x1; + unsigned d_b = (hi >> 22) & 0x1; + unsigned g = (hi >> 23) & 0x1; + + // 32-bit trap gate, target=0010:c0108ec4, DPL=0, present=1 + // code segment, base=0000:00cfffff, length=0xffff + if (s) { + // either a code or a data segment. bit 11 (type file MSB) then says + // 0=data segment, 1=code seg + if (type&8) { + dbg_printf("Code segment, base=0x%08x, limit=0x%08x, %s%s%s, %d-bit\n", + base, g ? (limit * 4096 + 4095) : limit, + (type&2)? "Execute/Read" : "Execute-Only", + (type&4)? ", Conforming" : "", + (type&1)? ", Accessed" : "", + d_b ? 32 : 16); + } else { + dbg_printf("Data segment, base=0x%08x, limit=0x%08x, %s%s%s\n", + base, g ? (limit * 4096 + 4095) : limit, + (type&2)? "Read/Write" : "Read-Only", + (type&4)? ", Expand-down" : "", + (type&1)? ", Accessed" : ""); + } + } else { + // types from IA32-devel-guide-3, page 3-15. + static const char *undef = "???"; + static const char *type_names[16] = { + undef, + "16-Bit TSS (available)", + "LDT", + "16-Bit TSS (Busy)", + "16-Bit Call Gate", + "Task Gate", + "16-Bit Interrupt Gate", + "16-Bit Trap Gate", + undef, + "32-Bit TSS (Available)", + undef, + "32-Bit TSS (Busy)", + "32-Bit Call Gate", + undef, + "32-Bit Interrupt Gate", + "32-Bit Trap Gate" + }; + dbg_printf("%s ", type_names[type]); + // only print more if type is valid + if (type_names[type] == undef) { + dbg_printf("descriptor hi=0x%08x, lo=0x%08x", hi, lo); + } else { + // for call gates, print segment:offset and parameter count p.4-15 + // for task gate, only present,dpl,TSS segment selector exist. p.5-13 + // for interrupt gate, segment:offset,p,dpl + // for trap gate, segment:offset,p,dpl + // for TSS, base address and segment limit + switch (type) { + case BX_SYS_SEGMENT_AVAIL_286_TSS: + case BX_SYS_SEGMENT_BUSY_286_TSS: + case BX_SYS_SEGMENT_AVAIL_386_TSS: + case BX_SYS_SEGMENT_BUSY_386_TSS: + dbg_printf("at 0x%08x, length 0x%05x", base, limit); + break; + case BX_SYS_SEGMENT_LDT: + // it's an LDT. not much to print. + break; + default: + // task, int, trap, or call gate. + dbg_printf("target=0x%04x:0x%08x, DPL=%d", segment, offset, dpl); + break; + } + } + dbg_printf("\n"); + } +} + +#if BX_SUPPORT_X86_64 +void bx_dbg_print_descriptor64(Bit32u lo1, Bit32u hi1, Bit32u lo2, Bit32u hi2) +{ + Bit32u segment = (lo1 >> 16) & 0xffff; + Bit64u offset = (lo1 & 0xffff) | (hi1 & 0xffff0000) | ((Bit64u)(lo2) << 32); + unsigned type = (hi1 >> 8) & 0xf; + unsigned dpl = (hi1 >> 13) & 0x3; + unsigned s = (hi1 >> 12) & 0x1; + + if (s) { + dbg_printf("bx_dbg_print_descriptor64: only system entries displayed in 64bit mode\n"); + } + else { + static const char *undef = "???"; + static const char *type_names[16] = { + undef, + undef, + "LDT", + undef, + undef, + undef, + undef, + undef, + undef, + "64-Bit TSS (Available)", + undef, + "64-Bit TSS (Busy)", + "64-Bit Call Gate", + undef, + "64-Bit Interrupt Gate", + "64-Bit Trap Gate" + }; + dbg_printf("%s ", type_names[type]); + // only print more if type is valid + if (type_names[type] == undef) { + dbg_printf("\ndescriptor dword2 hi=0x%08x, lo=0x%08x", hi2, lo2); + dbg_printf("\n dword1 hi=0x%08x, lo=0x%08x", hi1, lo1); + } else { + // for call gates, print segment:offset and parameter count p.4-15 + // for task gate, only present,dpl,TSS segment selector exist. p.5-13 + // for interrupt gate, segment:offset,p,dpl + // for trap gate, segment:offset,p,dpl + // for TSS, base address and segment limit + switch (type) { + case BX_SYS_SEGMENT_AVAIL_286_TSS: + case BX_SYS_SEGMENT_BUSY_286_TSS: + case BX_SYS_SEGMENT_AVAIL_386_TSS: + case BX_SYS_SEGMENT_BUSY_386_TSS: + // don't print nothing about 64-bit TSS + break; + case BX_SYS_SEGMENT_LDT: + // it's an LDT. not much to print. + break; + default: + // task, int, trap, or call gate. + dbg_printf("target=0x%04x:"FMT_ADDRX", DPL=%d", segment, offset, dpl); + break; + } + } + dbg_printf("\n"); + } +} +#endif + +void bx_dbg_info_idt_command(unsigned from, unsigned to) +{ + bx_dbg_global_sreg_t idtr; + BX_CPU(dbg_cpu)->dbg_get_idtr(&idtr); + bx_bool all = 0; + + if (to == (unsigned) EMPTY_ARG) { + to = from; + if(from == (unsigned) EMPTY_ARG) { from = 0; to = 255; all = 1; } + } + if (from > 255 || to > 255) { + dbg_printf("IDT entry should be [0-255], 'info idt' command malformed\n"); + return; + } + if (from > to) { + unsigned temp = from; + from = to; + to = temp; + } + +#if BX_SUPPORT_X86_64 + if (BX_CPU(dbg_cpu)->long_mode()) { + dbg_printf("Interrupt Descriptor Table (base=0x" FMT_ADDRX ", limit=%d):\n", idtr.base, idtr.limit); + for (unsigned n = from; n<=to; n++) { + Bit8u entry[16]; + if (16*n + 15 > idtr.limit) break; + if (bx_dbg_read_linear(dbg_cpu, idtr.base + 16*n, 16, entry)) { + dbg_printf("IDT[0x%02x]=", n); + + Bit32u lo1 = (entry[3] << 24) | (entry[2] << 16) | (entry[1] << 8) | (entry[0]); + Bit32u hi1 = (entry[7] << 24) | (entry[6] << 16) | (entry[5] << 8) | (entry[4]); + Bit32u lo2 = (entry[11] << 24) | (entry[10] << 16) | (entry[9] << 8) | (entry[8]); + Bit32u hi2 = (entry[15] << 24) | (entry[14] << 16) | (entry[13] << 8) | (entry[12]); + + bx_dbg_print_descriptor64(lo1, hi1, lo2, hi2); + } + else { + dbg_printf("error: IDTR+16*%d points to invalid linear address 0x" FMT_ADDRX "\n", n, idtr.base); + } + } + } + else +#endif + { + dbg_printf("Interrupt Descriptor Table (base=0x" FMT_ADDRX ", limit=%d):\n", idtr.base, idtr.limit); + for (unsigned n = from; n<=to; n++) { + Bit8u entry[8]; + if (8*n + 7 > idtr.limit) break; + if (bx_dbg_read_linear(dbg_cpu, idtr.base + 8*n, 8, entry)) { + dbg_printf("IDT[0x%02x]=", n); + + Bit32u lo = (entry[3] << 24) | (entry[2] << 16) | (entry[1] << 8) | (entry[0]); + Bit32u hi = (entry[7] << 24) | (entry[6] << 16) | (entry[5] << 8) | (entry[4]); + + bx_dbg_print_descriptor(lo, hi); + } + else { + dbg_printf("error: IDTR+8*%d points to invalid linear address 0x" FMT_ADDRX "\n", n, idtr.base); + } + } + } + + if (all) + dbg_printf("You can list individual entries with 'info idt [NUM]' or groups with 'info idt [NUM] [NUM]'\n"); +} + +void bx_dbg_info_gdt_command(unsigned from, unsigned to) +{ + bx_dbg_global_sreg_t gdtr; + BX_CPU(dbg_cpu)->dbg_get_gdtr(&gdtr); + bx_bool all = 0; + + if (to == (unsigned) EMPTY_ARG) { + to = from; + if(from == (unsigned) EMPTY_ARG) { from = 0; to = 0xffff; all = 1; } + } + if (from > 0xffff || to > 0xffff) { + dbg_printf("GDT entry should be [0-65535], 'info gdt' command malformed\n"); + return; + } + if (from > to) { + unsigned temp = from; + from = to; + to = temp; + } + + dbg_printf("Global Descriptor Table (base=0x" FMT_ADDRX ", limit=%d):\n", gdtr.base, gdtr.limit); + for (unsigned n = from; n<=to; n++) { + Bit8u entry[8]; + if (8*n + 7 > gdtr.limit) break; + if (bx_dbg_read_linear(dbg_cpu, gdtr.base + 8*n, 8, entry)) { + dbg_printf("GDT[0x%02x]=", n); + + Bit32u lo = (entry[3] << 24) | (entry[2] << 16) | (entry[1] << 8) | (entry[0]); + Bit32u hi = (entry[7] << 24) | (entry[6] << 16) | (entry[5] << 8) | (entry[4]); + + bx_dbg_print_descriptor(lo, hi); + } + else { + dbg_printf("error: GDTR+8*%d points to invalid linear address 0x" FMT_ADDRX "\n", + n, gdtr.base); + } + } + if (all) + dbg_printf("You can list individual entries with 'info gdt [NUM]' or groups with 'info gdt [NUM] [NUM]'\n"); +} + +void bx_dbg_info_ldt_command(unsigned from, unsigned to) +{ + bx_address ldtr_base = SIM->get_param_num("LDTR.base", dbg_cpu_list)->get64(); + Bit32u ldtr_limit = SIM->get_param_num("LDTR.limit_scaled", dbg_cpu_list)->get(); + + bx_bool all = 0; + + if (to == (unsigned) EMPTY_ARG) { + to = from; + if(from == (unsigned) EMPTY_ARG) { from = 0; to = 0xffff; all = 1; } + } + if (from > 0xffff || to > 0xffff) { + dbg_printf("LDT entry should be [0-65535], 'info ldt' command malformed\n"); + return; + } + if (from > to) { + unsigned temp = from; + from = to; + to = temp; + } + + dbg_printf("Local Descriptor Table (base=0x" FMT_ADDRX ", limit=%d):\n", ldtr_base, ldtr_limit); + for (unsigned n = from; n<=to; n++) { + Bit8u entry[8]; + if (8*n + 7 > ldtr_limit) break; + if (bx_dbg_read_linear(dbg_cpu, ldtr_base + 8*n, 8, entry)) { + dbg_printf("LDT[0x%02x]=", n); + + Bit32u lo = (entry[3] << 24) | (entry[2] << 16) | (entry[1] << 8) | (entry[0]); + Bit32u hi = (entry[7] << 24) | (entry[6] << 16) | (entry[5] << 8) | (entry[4]); + + bx_dbg_print_descriptor(lo, hi); + } + else { + dbg_printf("error: LDTR+8*%d points to invalid linear address 0x" FMT_ADDRX "\n", + n, ldtr_base); + } + } + if (all) + dbg_printf("You can list individual entries with 'info ldt [NUM]' or groups with 'info ldt [NUM] [NUM]'\n"); +} + +/*form RB list*/ +static const char* bx_dbg_ivt_desc(int intnum) +{ + const char* ret; + switch (intnum) { + case 0x00: ret = "DIVIDE ERROR" ; break; + case 0x01: ret = "SINGLE STEP" ; break; + case 0x02: ret = "NON-MASKABLE INTERRUPT" ; break; + case 0x03: ret = "BREAKPOINT" ; break; + case 0x04: ret = "INT0 DETECTED OVERFLOW" ; break; + case 0x05: ret = "BOUND RANGE EXCEED" ; break; + case 0x06: ret = "INVALID OPCODE" ; break; + case 0x07: ret = "PROCESSOR EXTENSION NOT AVAILABLE" ; break; + case 0x08: ret = "IRQ0 - SYSTEM TIMER" ; break; + case 0x09: ret = "IRQ1 - KEYBOARD DATA READY" ; break; + case 0x0a: ret = "IRQ2 - LPT2" ; break; + case 0x0b: ret = "IRQ3 - COM2" ; break; + case 0x0c: ret = "IRQ4 - COM1" ; break; + case 0x0d: ret = "IRQ5 - FIXED DISK" ; break; + case 0x0e: ret = "IRQ6 - DISKETTE CONTROLLER" ; break; + case 0x0f: ret = "IRQ7 - PARALLEL PRINTER" ; break; + case 0x10: ret = "VIDEO" ; break; + case 0x11: ret = "GET EQUIPMENT LIST" ; break; + case 0x12: ret = "GET MEMORY SIZE" ; break; + case 0x13: ret = "DISK" ; break; + case 0x14: ret = "SERIAL" ; break; + case 0x15: ret = "SYSTEM" ; break; + case 0x16: ret = "KEYBOARD" ; break; + case 0x17: ret = "PRINTER" ; break; + case 0x18: ret = "CASETTE BASIC" ; break; + case 0x19: ret = "BOOTSTRAP LOADER" ; break; + case 0x1a: ret = "TIME" ; break; + case 0x1b: ret = "KEYBOARD - CONTROL-BREAK HANDLER" ; break; + case 0x1c: ret = "TIME - SYSTEM TIMER TICK" ; break; + case 0x1d: ret = "SYSTEM DATA - VIDEO PARAMETER TABLES"; break; + case 0x1e: ret = "SYSTEM DATA - DISKETTE PARAMETERS" ; break; + case 0x1f: ret = "SYSTEM DATA - 8x8 GRAPHICS FONT" ; break; + case 0x70: ret = "IRQ8 - CMOS REAL-TIME CLOCK" ; break; + case 0x71: ret = "IRQ9 - REDIRECTED TO INT 0A BY BIOS" ; break; + case 0x72: ret = "IRQ10 - RESERVED" ; break; + case 0x73: ret = "IRQ11 - RESERVED" ; break; + case 0x74: ret = "IRQ12 - POINTING DEVICE" ; break; + case 0x75: ret = "IRQ13 - MATH COPROCESSOR EXCEPTION" ; break; + case 0x76: ret = "IRQ14 - HARD DISK CONTROLLER OPERATION COMPLETE"; break; + case 0x77: ret = "IRQ15 - SECONDARY IDE CONTROLLER OPERATION COMPLETE"; break; + default : ret = "" ; break; + } + return ret; +} + +void bx_dbg_info_ivt_command(unsigned from, unsigned to) +{ + unsigned char buff[4]; + unsigned seg, off; + bx_bool all = 0; + bx_dbg_global_sreg_t idtr; + + BX_CPU(dbg_cpu)->dbg_get_idtr(&idtr); + + if (! BX_CPU(dbg_cpu)->protected_mode()) + { + if (to == (unsigned) EMPTY_ARG) { + to = from; + if(from == (unsigned) EMPTY_ARG) { from = 0; to = 255; all = 1; } + } + if (from > 255 || to > 255) { + dbg_printf("IVT entry should be [0-255], 'info ivt' command malformed\n"); + return; + } + if (from > to) { + unsigned temp = from; + from = to; + to = temp; + } + + for (unsigned i = from; i <= to; i++) + { + bx_dbg_read_linear(dbg_cpu, idtr.base + i*4, 4, buff); + seg = ((Bit32u) buff[3] << 8) | buff[2]; + off = ((Bit32u) buff[1] << 8) | buff[0]; + bx_dbg_read_linear(dbg_cpu, (seg << 4) + off, 1, buff); + dbg_printf("INT# %02x > %04X:%04X (0x%08x) %s%s\n", i, seg, off, + (unsigned) ((seg << 4) + off), bx_dbg_ivt_desc(i), + (buff[0] == 0xcf) ? " ; dummy iret" : ""); + } + if (all) dbg_printf("You can list individual entries with 'info ivt [NUM]' or groups with 'info ivt [NUM] [NUM]'\n"); + } + else + dbg_printf("cpu in protected mode, use info idt\n"); +} + +static void bx_dbg_print_tss(Bit8u *tss, int len) +{ + if (len<104) { + dbg_printf("Invalid tss length (limit must be greater then 103)\n"); + return; + } + + dbg_printf("ss:esp(0): 0x%04x:0x%08x\n", + *(Bit16u*)(tss+8), *(Bit32u*)(tss+4)); + dbg_printf("ss:esp(1): 0x%04x:0x%08x\n", + *(Bit16u*)(tss+0x10), *(Bit32u*)(tss+0xc)); + dbg_printf("ss:esp(2): 0x%04x:0x%08x\n", + *(Bit16u*)(tss+0x18), *(Bit32u*)(tss+0x14)); + dbg_printf("cr3: 0x%08x\n", *(Bit32u*)(tss+0x1c)); + dbg_printf("eip: 0x%08x\n", *(Bit32u*)(tss+0x20)); + dbg_printf("eflags: 0x%08x\n", *(Bit32u*)(tss+0x24)); + + dbg_printf("cs: 0x%04x ds: 0x%04x ss: 0x%04x\n", + *(Bit16u*)(tss+76), *(Bit16u*)(tss+84), *(Bit16u*)(tss+80)); + dbg_printf("es: 0x%04x fs: 0x%04x gs: 0x%04x\n", + *(Bit16u*)(tss+72), *(Bit16u*)(tss+88), *(Bit16u*)(tss+92)); + + dbg_printf("eax: 0x%08x ebx: 0x%08x ecx: 0x%08x edx: 0x%08x\n", + *(Bit32u*)(tss+0x28), *(Bit32u*)(tss+0x34), *(Bit32u*)(tss+0x2c), *(Bit32u*)(tss+0x30)); + dbg_printf("esi: 0x%08x edi: 0x%08x ebp: 0x%08x esp: 0x%08x\n", + *(Bit32u*)(tss+0x40), *(Bit32u*)(tss+0x44), *(Bit32u*)(tss+0x3c), *(Bit32u*)(tss+0x38)); + + dbg_printf("ldt: 0x%04x\n", *(Bit16u*)(tss+0x60)); + dbg_printf("i/o map: 0x%04x\n", *(Bit16u*)(tss+0x66)); +} + +void bx_dbg_info_tss_command(void) +{ + bx_dbg_sreg_t tr; + BX_CPU(dbg_cpu)->dbg_get_tr(&tr); + + bx_address base = (tr.des_l>>16) | + ((tr.des_h<<16)&0x00ff0000) | (tr.des_h & 0xff000000); +#if BX_SUPPORT_X86_64 + base |= (Bit64u)(tr.dword3) << 32; +#endif + Bit32u len = (tr.des_l & 0xffff) + 1; + + dbg_printf("tr:s=0x%x, base=0x" FMT_ADDRX ", valid=%u\n", + (unsigned) tr.sel, base, (unsigned) tr.valid); + + bx_phy_address paddr = 0; + if (BX_CPU(dbg_cpu)->dbg_xlate_linear2phy(base, &paddr)) { + bx_dbg_print_tss(BX_MEM(0)->get_vector(paddr), len); + } + else { + dbg_printf("bx_dbg_info_tss_command: failed to get physical address for TSS.BASE !"); + } +} + +/* + * this function implements the info ne2k commands in the debugger + * info ne2k - shows all registers + * info ne2k page N - shows all registers in a page + * info ne2k page N reg M - shows just one register + */ +void bx_dbg_info_ne2k(int page, int reg) +{ +#if BX_SUPPORT_NE2K + DEV_ne2k_print_info(stderr, page, reg, 0); +#else + dbg_printf("NE2000 support is not compiled in\n"); +#endif +} + +/* + * this implements the info pic command in the debugger. + * info pic - shows pic registers + */ +void bx_dbg_info_pic() +{ + DEV_pic_debug_dump(); +} + +/* + * this implements the info vga command in the debugger. + * info vga - shows vga registers + */ +void bx_dbg_info_vga() +{ + DEV_vga_debug_dump(); +} + +/* + * this implements the info pci command in the debugger. + * info pci - shows i440fx state + */ +void bx_dbg_info_pci() +{ +#if BX_SUPPORT_PCI + if (SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get()) { + DEV_pci_debug_dump(); + } + else { + dbg_printf("PCI support is disabled in .bochsrc\n"); + } +#else + dbg_printf("PCI support is not compiled in\n"); +#endif +} + +// +// Reports from various events +// + +void bx_dbg_iac_report(unsigned vector, unsigned irq) +{ + if (bx_guard.report.irq) { + dbg_printf("event at t=" FMT_LL "d IRQ irq=%u vec=%x\n", + bx_pc_system.time_ticks(), irq, vector); + } +} + +void bx_dbg_a20_report(unsigned val) +{ + if (bx_guard.report.a20) { + dbg_printf("event at t=" FMT_LL "d A20 val=%u\n", + bx_pc_system.time_ticks(), val); + } +} + +void bx_dbg_io_report(Bit32u port, unsigned size, unsigned op, Bit32u val) +{ + if (bx_guard.report.io) { + dbg_printf("event at t=" FMT_LL "d IO addr=0x%x size=%u op=%s val=0x%x\n", + bx_pc_system.time_ticks(), + port, + size, + (op==BX_READ) ? "read" : "write", + (unsigned) val); + } +} + +void bx_dbg_dma_report(bx_phy_address addr, unsigned len, unsigned what, Bit32u val) +{ + if (bx_dbg_batch_dma.this_many == 0) { + dbg_printf("%s: DMA batch this_many=0.\n", argv0); + bx_dbg_exit(1); + } + + // if Q is full, post events (and flush) + if (bx_dbg_batch_dma.Qsize >= bx_dbg_batch_dma.this_many) { + dbg_printf("%s: DMA batch Q was not flushed.\n", argv0); + bx_dbg_exit(1); + } + + // if Q already has MAX elements in it + if (bx_dbg_batch_dma.Qsize >= BX_BATCH_DMA_BUFSIZE) { + dbg_printf("%s: DMA batch buffer overrun.\n", argv0); + bx_dbg_exit(1); + } + + bx_dbg_batch_dma.Qsize++; + bx_dbg_batch_dma.Q[bx_dbg_batch_dma.Qsize-1].addr = addr; + bx_dbg_batch_dma.Q[bx_dbg_batch_dma.Qsize-1].len = len; + bx_dbg_batch_dma.Q[bx_dbg_batch_dma.Qsize-1].what = what; + bx_dbg_batch_dma.Q[bx_dbg_batch_dma.Qsize-1].val = val; + bx_dbg_batch_dma.Q[bx_dbg_batch_dma.Qsize-1].time = bx_pc_system.time_ticks(); + + // if Q is full, post events (and flush) + if (bx_dbg_batch_dma.Qsize >= bx_dbg_batch_dma.this_many) + bx_dbg_post_dma_reports(); +} + +void bx_dbg_post_dma_reports(void) +{ + unsigned i; + unsigned addr, len, what, val; + unsigned last_addr, last_len, last_what; + unsigned print_header; + unsigned first_iteration; + + if (bx_guard.report.dma) { + if (bx_dbg_batch_dma.Qsize == 0) return; // nothing batched to print + + // compress output so all contiguous DMA ops of the same type and size + // are printed on the same line + last_addr = bx_dbg_batch_dma.Q[0].addr; + last_len = bx_dbg_batch_dma.Q[0].len; + last_what = bx_dbg_batch_dma.Q[0].what; + first_iteration = 1; + + for (i=0; icr0.get_PG()) { + printf("paging off\n"); + return; + } + + printf("cr3: 0x"FMT_PHY_ADDRX"\n", BX_CPU(dbg_cpu)->cr3); + + lin = 0; + phy = 0; + + start_lin = 1; + start_phy = 2; + while(1) { + valid = BX_CPU(dbg_cpu)->dbg_xlate_linear2phy(lin, &phy); + if(valid) { + if((lin - start_lin) != (phy - start_phy)) { + if(start_lin != 1) + dbg_printf("0x%08x-0x%08x -> 0x"FMT_PHY_ADDRX"-0x"FMT_PHY_ADDRX"\n", + start_lin, lin - 1, start_phy, start_phy + (lin-1-start_lin)); + start_lin = lin; + start_phy = phy; + } + } else { + if(start_lin != 1) + dbg_printf("0x%08x-0x%08x -> 0x"FMT_PHY_ADDRX"-0x"FMT_PHY_ADDRX"\n", + start_lin, lin - 1, start_phy, start_phy + (lin-1-start_lin)); + start_lin = 1; + start_phy = 2; + } + + if(lin == 0xfffff000) break; + lin += 0x1000; + } + if(start_lin != 1) + dbg_printf("0x%08x-0x%08x -> 0x"FMT_PHY_ADDRX"-0x"FMT_PHY_ADDRX"\n", + start_lin, 0xffffffff, start_phy, start_phy + (0xffffffff-start_lin)); +} + +void bx_dbg_print_help(void) +{ + dbg_printf("h|help - show list of debugger commands\n"); + dbg_printf("h|help command - show short command description\n"); + dbg_printf("-*- Debugger control -*-\n"); + dbg_printf(" help, q|quit|exit, set, instrument, show, trace, trace-reg,\n"); + dbg_printf(" trace-mem, u|disasm, record, playback, ldsym, slist\n"); + dbg_printf("-*- Execution control -*-\n"); + dbg_printf(" c|cont|continue, s|step, p|n|next, modebp\n"); + dbg_printf("-*- Breakpoint management -*-\n"); + dbg_printf(" vb|vbreak, lb|lbreak, pb|pbreak|b|break, sb, sba, blist,\n"); + dbg_printf(" bpe, bpd, d|del|delete, watch, unwatch\n"); + dbg_printf("-*- CPU and memory contents -*-\n"); + dbg_printf(" x, xp, setpmem, crc, info,\n"); + dbg_printf(" r|reg|regs|registers, fp|fpu, mmx, sse, sreg, dreg, creg,\n"); + dbg_printf(" page, set, ptime, print-stack, ?|calc\n"); + dbg_printf("-*- Working with bochs param tree -*-\n"); + dbg_printf(" show \"param\", restore\n"); +} + +void bx_dbg_calc_command(Bit64u value) +{ + dbg_printf("0x" FMT_LL "x " FMT_LL "d\n", value, value); +} + +Bit8u bx_dbg_get_reg8l_value(unsigned reg) +{ + if (reg < BX_GENERAL_REGISTERS) + return BX_CPU(dbg_cpu)->get_reg8l(reg); + + dbg_printf("Unknown 8BL register [%d] !!!\n", reg); + return 0; +} + +Bit8u bx_dbg_get_reg8h_value(unsigned reg) +{ + if (reg < BX_GENERAL_REGISTERS) + return BX_CPU(dbg_cpu)->get_reg8h(reg); + + dbg_printf("Unknown 8BH register [%d] !!!\n", reg); + return 0; +} + +Bit16u bx_dbg_get_reg16_value(unsigned reg) +{ + if (reg < BX_GENERAL_REGISTERS) + return BX_CPU(dbg_cpu)->get_reg16(reg); + + dbg_printf("Unknown 16B register [%d] !!!\n", reg); + return 0; +} + +Bit32u bx_dbg_get_reg32_value(unsigned reg) +{ + if (reg < BX_GENERAL_REGISTERS) + return BX_CPU(dbg_cpu)->get_reg32(reg); + + dbg_printf("Unknown 32B register [%d] !!!\n", reg); + return 0; +} + +Bit64u bx_dbg_get_reg64_value(unsigned reg) +{ +#if BX_SUPPORT_X86_64 + if (reg < BX_GENERAL_REGISTERS) + return BX_CPU(dbg_cpu)->get_reg64(reg); +#endif + + dbg_printf("Unknown 64B register [%d] !!!\n", reg); + return 0; +} + +void bx_dbg_set_reg8l_value(unsigned reg, Bit8u value) +{ + if (reg < BX_GENERAL_REGISTERS) + BX_CPU(dbg_cpu)->set_reg8l(reg, value); + else + dbg_printf("Unknown 8BL register [%d] !!!\n", reg); +} + +void bx_dbg_set_reg8h_value(unsigned reg, Bit8u value) +{ + if (reg < BX_GENERAL_REGISTERS) + BX_CPU(dbg_cpu)->set_reg8h(reg, value); + else + dbg_printf("Unknown 8BH register [%d] !!!\n", reg); +} + +void bx_dbg_set_reg16_value(unsigned reg, Bit16u value) +{ + if (reg < BX_GENERAL_REGISTERS) + BX_CPU(dbg_cpu)->set_reg16(reg, value); + else + dbg_printf("Unknown 16B register [%d] !!!\n", reg); +} + +void bx_dbg_set_reg32_value(unsigned reg, Bit32u value) +{ + if (reg < BX_GENERAL_REGISTERS) + BX_CPU(dbg_cpu)->set_reg32(reg, value); + else + dbg_printf("Unknown 32B register [%d] !!!\n", reg); +} + +void bx_dbg_set_reg64_value(unsigned reg, Bit64u value) +{ +#if BX_SUPPORT_X86_64 + if (reg < BX_GENERAL_REGISTERS) + BX_CPU(dbg_cpu)->set_reg64(reg, value); + else +#endif + dbg_printf("Unknown 64B register [%d] !!!\n", reg); +} + +Bit16u bx_dbg_get_selector_value(unsigned int seg_no) +{ + bx_dbg_sreg_t sreg; + + if (seg_no > 5) { + dbg_printf("Error: seg_no out of bounds\n"); + return 0; + } + BX_CPU(dbg_cpu)->dbg_get_sreg(&sreg, seg_no); + if (!sreg.valid) { + dbg_printf("Error: segment valid bit cleared\n"); + return 0; + } + return sreg.sel; +} + +Bit16u bx_dbg_get_ip(void) +{ + return BX_CPU(dbg_cpu)->get_ip(); +} + +Bit32u bx_dbg_get_eip(void) +{ + return BX_CPU(dbg_cpu)->get_eip(); +} + +bx_address bx_dbg_get_instruction_pointer(void) +{ + return BX_CPU(dbg_cpu)->get_instruction_pointer(); +} + +bx_bool bx_dbg_read_pmode_descriptor(Bit16u sel, bx_descriptor_t *descriptor) +{ + bx_selector_t selector; + Bit32u dword1, dword2; + bx_address desc_base; + + /* if selector is NULL, error */ + if ((sel & 0xfffc) == 0) { + dbg_printf("bx_dbg_read_pmode_descriptor: Dereferencing a NULL selector!\n"); + return 0; + } + + /* parse fields in selector */ + parse_selector(sel, &selector); + + if (selector.ti) { + // LDT + if (((Bit32u)selector.index*8 + 7) > BX_CPU(dbg_cpu)->ldtr.cache.u.segment.limit_scaled) { + dbg_printf("bx_dbg_read_pmode_descriptor: selector (0x%04x) > LDT size limit\n", selector.index*8); + return 0; + } + desc_base = BX_CPU(dbg_cpu)->ldtr.cache.u.segment.base; + } + else { + // GDT + if (((Bit32u)selector.index*8 + 7) > BX_CPU(dbg_cpu)->gdtr.limit) { + dbg_printf("bx_dbg_read_pmode_descriptor: selector (0x%04x) > GDT size limit\n", selector.index*8); + return 0; + } + desc_base = BX_CPU(dbg_cpu)->gdtr.base; + } + + if (! bx_dbg_read_linear(dbg_cpu, desc_base + selector.index * 8, 4, (Bit8u*) &dword1)) { + dbg_printf("bx_dbg_read_pmode_descriptor: cannot read selector 0x%04x (index=0x%04x)\n", sel, selector.index); + return 0; + } + if (! bx_dbg_read_linear(dbg_cpu, desc_base + selector.index * 8 + 4, 4, (Bit8u*) &dword2)) { + dbg_printf("bx_dbg_read_pmode_descriptor: cannot read selector 0x%04x (index=0x%04x)\n", sel, selector.index); + return 0; + } + + memset (descriptor, 0, sizeof (descriptor)); + parse_descriptor(dword1, dword2, descriptor); + + if (!descriptor->segment) { + dbg_printf("bx_dbg_read_pmode_descriptor: selector 0x%04x points to a system descriptor and is not supported!\n", sel); + return 0; + } + + /* #NP(selector) if descriptor is not present */ + if (descriptor->p==0) { + dbg_printf("bx_dbg_read_pmode_descriptor: descriptor 0x%04x not present!\n", sel); + return 0; + } + + return 1; +} + +void bx_dbg_load_segreg(unsigned seg_no, unsigned value) +{ + bx_segment_reg_t sreg; + + if (seg_no > 6) { + dbg_printf("bx_dbg_load_segreg: unknown segment register !"); + return; + } + + if (value > 0xffff) { + dbg_printf("bx_dbg_load_segreg: segment selector out of limits !"); + return; + } + + unsigned cpu_mode = BX_CPU(dbg_cpu)->get_cpu_mode(); + if (cpu_mode == BX_MODE_LONG_64) { + dbg_printf("bx_dbg_load_segreg: not supported in long64 mode !"); + return; + } + + if (! BX_CPU(dbg_cpu)->protected_mode()) { + parse_selector(value, &sreg.selector); + + sreg.cache.valid = SegValidCache; + sreg.cache.p = 1; + sreg.cache.dpl = (cpu_mode == BX_MODE_IA32_V8086); + sreg.cache.segment = 1; + sreg.cache.type = BX_DATA_READ_WRITE_ACCESSED; + + sreg.cache.u.segment.base = sreg.selector.value << 4; + sreg.cache.u.segment.limit_scaled = 0xffff; + sreg.cache.u.segment.g = 0; + sreg.cache.u.segment.d_b = 0; + sreg.cache.u.segment.avl = 0; + sreg.selector.rpl = (cpu_mode == BX_MODE_IA32_V8086); + + BX_CPU(dbg_cpu)->dbg_set_sreg(seg_no, &sreg); + } + else { + parse_selector(value, &sreg.selector); + if (bx_dbg_read_pmode_descriptor(value, &sreg.cache)) { + BX_CPU(dbg_cpu)->dbg_set_sreg(seg_no, &sreg); + } + } +} + +bx_address bx_dbg_get_laddr(Bit16u sel, bx_address ofs) +{ + bx_address laddr; + + if (BX_CPU(dbg_cpu)->protected_mode()) { + bx_descriptor_t descriptor; + Bit32u lowaddr, highaddr; + + if (! bx_dbg_read_pmode_descriptor(sel, &descriptor)) + return 0; + + // expand-down + if (IS_DATA_SEGMENT(descriptor.type) && IS_DATA_SEGMENT_EXPAND_DOWN(descriptor.type)) { + lowaddr = descriptor.u.segment.limit_scaled; + highaddr = descriptor.u.segment.g ? 0xffffffff : 0xffff; + } + else { + lowaddr = 0; + highaddr = descriptor.u.segment.limit_scaled; + } + + if (ofs < lowaddr || ofs > highaddr) { + dbg_printf("WARNING: Offset %08X is out of selector %04x limit (%08x...%08x)!\n", + ofs, sel, lowaddr, highaddr); + } + + laddr = descriptor.u.segment.base + ofs; + } + else { + laddr = sel * 16 + ofs; + } + + return laddr; +} + +void bx_dbg_step_over_command() +{ + bx_address laddr = BX_CPU(dbg_cpu)->guard_found.laddr; + + if (! bx_dbg_read_linear(dbg_cpu, laddr, 16, bx_disasm_ibuf)) + { + return; + } + + x86_insn insn = bx_disassemble.decode(IS_CODE_32(BX_CPU(dbg_cpu)->guard_found.code_32_64), + IS_CODE_64(BX_CPU(dbg_cpu)->guard_found.code_32_64), + BX_CPU(dbg_cpu)->get_segment_base(BX_SEG_REG_CS), + BX_CPU(dbg_cpu)->guard_found.eip, bx_disasm_ibuf, bx_disasm_tbuf); + + unsigned b1 = insn.b1; + + switch(b1) { + // Jcc short + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + + // Jcc near + case 0x180: + case 0x181: + case 0x182: + case 0x183: + case 0x184: + case 0x185: + case 0x186: + case 0x187: + case 0x188: + case 0x189: + case 0x18A: + case 0x18B: + case 0x18C: + case 0x18D: + case 0x18E: + case 0x18F: + + // jcxz + case 0xE3: + + // retn n + case 0xC2: + // retn + case 0xC3: + // retf n + case 0xCA: + // retf + case 0xCB: + // iret + case 0xCF: + + // jmp near + case 0xE9: + // jmp far + case 0xEA: + // jmp short + case 0xEB: + bx_dbg_stepN_command(dbg_cpu, 1); + return; + // jmp absolute indirect + case 0xFF: + switch (insn.nnn) { + // near + case 4: + // far + case 5: + bx_dbg_stepN_command(dbg_cpu, 1); + return; + } + } + + // calls, ints, loops and so on + int BpId = bx_dbg_lbreakpoint_command(bkStepOver, laddr + insn.ilen); + if (BpId == -1) { + dbg_printf("bx_dbg_step_over_command:: Failed to set lbreakpoint !\n"); + return; + } + + bx_dbg_continue_command(); + + if (bx_dbg_del_lbreak(BpId)) + bx_dbg_breakpoint_changed(); +} + +#endif /* if BX_DEBUGGER */ diff --git a/bochs/bx_debug/debug.h b/bochs/bx_debug/debug.h new file mode 100644 index 00000000..7a5770c8 --- /dev/null +++ b/bochs/bx_debug/debug.h @@ -0,0 +1,507 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +// if including from C parser, need basic types etc +#include "config.h" +#include "osdep.h" + +#define BX_DBG_NO_HANDLE 1000 + +Bit32u crc32(const Bit8u *buf, int len); + +#if BX_DEBUGGER + +// some strict C declarations needed by the parser/lexer +#ifdef __cplusplus +extern "C" { +#endif + +extern Bit32u dbg_cpu; + +void dbg_printf (const char *fmt, ...); + +typedef enum { + BX_DBG_SREG_ES, + BX_DBG_SREG_CS, + BX_DBG_SREG_SS, + BX_DBG_SREG_DS, + BX_DBG_SREG_FS, + BX_DBG_SREG_GS +} SRegs; + +#if BX_SUPPORT_X86_64 +# define BX_DBG_GEN_REGISTERS 16 +#else +# define BX_DBG_GEN_REGISTERS 8 +#endif + +typedef enum { + BX_DBG_REG8H_AH, + BX_DBG_REG8H_CH, + BX_DBG_REG8H_DH, + BX_DBG_REG8H_BH, +} Regs8H; + +#if BX_SUPPORT_X86_64 + +typedef enum { + BX_DBG_REG8L_AL, + BX_DBG_REG8L_CL, + BX_DBG_REG8L_DL, + BX_DBG_REG8L_BL, + BX_DBG_REG8L_SPL, + BX_DBG_REG8L_BPL, + BX_DBG_REG8L_SIL, + BX_DBG_REG8L_DIL, + BX_DBG_REG8L_R8, + BX_DBG_REG8L_R9, + BX_DBG_REG8L_R10, + BX_DBG_REG8L_R11, + BX_DBG_REG8L_R12, + BX_DBG_REG8L_R13, + BX_DBG_REG8L_R14, + BX_DBG_REG8L_R15 +} Regs8L; + +typedef enum { + BX_DBG_REG16_AX, + BX_DBG_REG16_CX, + BX_DBG_REG16_DX, + BX_DBG_REG16_BX, + BX_DBG_REG16_SP, + BX_DBG_REG16_BP, + BX_DBG_REG16_SI, + BX_DBG_REG16_DI, + BX_DBG_REG16_R8, + BX_DBG_REG16_R9, + BX_DBG_REG16_R10, + BX_DBG_REG16_R11, + BX_DBG_REG16_R12, + BX_DBG_REG16_R13, + BX_DBG_REG16_R14, + BX_DBG_REG16_R15 +} Regs16; + +typedef enum { + BX_DBG_REG32_EAX, + BX_DBG_REG32_ECX, + BX_DBG_REG32_EDX, + BX_DBG_REG32_EBX, + BX_DBG_REG32_ESP, + BX_DBG_REG32_EBP, + BX_DBG_REG32_ESI, + BX_DBG_REG32_EDI, + BX_DBG_REG32_R8, + BX_DBG_REG32_R9, + BX_DBG_REG32_R10, + BX_DBG_REG32_R11, + BX_DBG_REG32_R12, + BX_DBG_REG32_R13, + BX_DBG_REG32_R14, + BX_DBG_REG32_R15 +} Regs32; + +typedef enum { + BX_DBG_REG64_RAX, + BX_DBG_REG64_RCX, + BX_DBG_REG64_RDX, + BX_DBG_REG64_RBX, + BX_DBG_REG64_RSP, + BX_DBG_REG64_RBP, + BX_DBG_REG64_RSI, + BX_DBG_REG64_RDI, + BX_DBG_REG64_R8, + BX_DBG_REG64_R9, + BX_DBG_REG64_R10, + BX_DBG_REG64_R11, + BX_DBG_REG64_R12, + BX_DBG_REG64_R13, + BX_DBG_REG64_R14, + BX_DBG_REG64_R15 +} Regs64; + +#else + +typedef enum { + BX_DBG_REG8L_AL, + BX_DBG_REG8L_CL, + BX_DBG_REG8L_DL, + BX_DBG_REG8L_BL +} Regs8L; + +typedef enum { + BX_DBG_REG16_AX, + BX_DBG_REG16_CX, + BX_DBG_REG16_DX, + BX_DBG_REG16_BX, + BX_DBG_REG16_SP, + BX_DBG_REG16_BP, + BX_DBG_REG16_SI, + BX_DBG_REG16_DI +} Regs16; + +typedef enum { + BX_DBG_REG32_EAX, + BX_DBG_REG32_ECX, + BX_DBG_REG32_EDX, + BX_DBG_REG32_EBX, + BX_DBG_REG32_ESP, + BX_DBG_REG32_EBP, + BX_DBG_REG32_ESI, + BX_DBG_REG32_EDI +} Regs32; + +#endif + +typedef enum +{ + bkRegular, + bkAtIP, + bkStepOver +} BreakpointKind; + +typedef enum _show_flags { + Flag_call = 0x1, + Flag_ret = 0x2, + Flag_softint = 0x4, + Flag_iret = 0x8, + Flag_intsig = 0x10, + Flag_mode = 0x20 +} show_flags_t; + +// Flex defs +extern int bxlex(void); +extern char *bxtext; // Using the pointer option rather than array +extern int bxwrap(void); +void bx_add_lex_input(char *buf); + +// Yacc defs +extern int bxparse(void); +extern void bxerror(char *s); + +#define EMPTY_ARG (-1) + +bx_bool bx_dbg_read_linear(unsigned which_cpu, bx_address laddr, unsigned len, Bit8u *buf); +Bit16u bx_dbg_get_selector_value(unsigned int seg_no); +Bit16u bx_dbg_get_ip (void); +Bit32u bx_dbg_get_eip(void); +bx_address bx_dbg_get_instruction_pointer(void); +Bit8u bx_dbg_get_reg8l_value(unsigned reg); +Bit8u bx_dbg_get_reg8h_value(unsigned reg); +Bit16u bx_dbg_get_reg16_value(unsigned reg); +Bit32u bx_dbg_get_reg32_value(unsigned reg); +Bit64u bx_dbg_get_reg64_value(unsigned reg); +void bx_dbg_set_reg8l_value(unsigned reg, Bit8u value); +void bx_dbg_set_reg8h_value(unsigned reg, Bit8u value); +void bx_dbg_set_reg16_value(unsigned reg, Bit16u value); +void bx_dbg_set_reg32_value(unsigned reg, Bit32u value); +void bx_dbg_set_reg64_value(unsigned reg, Bit64u value); +void bx_dbg_load_segreg(unsigned reg, unsigned value); +bx_address bx_dbg_get_laddr(Bit16u sel, bx_address ofs); +void bx_dbg_step_over_command(void); +void bx_dbg_trace_command(bx_bool enable); +void bx_dbg_trace_reg_command(bx_bool enable); +void bx_dbg_trace_mem_command(bx_bool enable); +void bx_dbg_ptime_command(void); +void bx_dbg_timebp_command(bx_bool absolute, Bit64u time); +#define MAX_CONCURRENT_BPS 5 +extern int timebp_timer; +extern Bit64u timebp_queue[MAX_CONCURRENT_BPS]; +extern int timebp_queue_size; +void bx_dbg_record_command(char*); +void bx_dbg_playback_command(char*); +void bx_dbg_modebp_command(void); +void bx_dbg_where_command(void); +void bx_dbg_print_string_command(bx_address addr); +void bx_dbg_xlate_address(bx_lin_address address); +void bx_dbg_show_command(const char*); +void bx_dbg_print_stack_command(unsigned nwords); +void bx_dbg_print_watchpoints(void); +void bx_dbg_watchpoint_continue(bx_bool watch_continue); +void bx_dbg_watch(int type, bx_phy_address address, Bit32u len); +void bx_dbg_unwatch_all(void); +void bx_dbg_unwatch(bx_phy_address handle); +void bx_dbg_continue_command(void); +void bx_dbg_stepN_command(int cpu, Bit32u count); +void bx_dbg_set_auto_disassemble(bx_bool enable); +void bx_dbg_disassemble_switch_mode(void); +void bx_dbg_disassemble_hex_mode_switch(int mode); +void bx_dbg_set_disassemble_size(unsigned size); +void bx_dbg_del_breakpoint_command(unsigned handle); +void bx_dbg_en_dis_breakpoint_command(unsigned handle, bx_bool enable); +bx_bool bx_dbg_en_dis_pbreak(unsigned handle, bx_bool enable); +bx_bool bx_dbg_en_dis_lbreak(unsigned handle, bx_bool enable); +bx_bool bx_dbg_en_dis_vbreak(unsigned handle, bx_bool enable); +bx_bool bx_dbg_del_pbreak(unsigned handle); +bx_bool bx_dbg_del_lbreak(unsigned handle); +bx_bool bx_dbg_del_vbreak(unsigned handle); +int bx_dbg_vbreakpoint_command(BreakpointKind bk, Bit32u cs, bx_address eip); +int bx_dbg_lbreakpoint_command(BreakpointKind bk, bx_address laddress); +int bx_dbg_pbreakpoint_command(BreakpointKind bk, bx_phy_address paddress); +void bx_dbg_info_bpoints_command(void); +void bx_dbg_quit_command(void); +#define BX_INFO_GENERAL_PURPOSE_REGS 1 /* bitmasks - choices for bx_dbg_info_registers_command */ +#define BX_INFO_FPU_REGS 2 +#define BX_INFO_MMX_REGS 4 +#define BX_INFO_SSE_REGS 8 +void bx_dbg_info_registers_command(int); +void bx_dbg_info_ivt_command(unsigned from, unsigned to); +void bx_dbg_info_idt_command(unsigned from, unsigned to); +void bx_dbg_info_gdt_command(unsigned from, unsigned to); +void bx_dbg_info_ldt_command(unsigned from, unsigned to); +void bx_dbg_info_tss_command(void); +void bx_dbg_info_debug_regs_command(void); +void bx_dbg_info_control_regs_command(void); +void bx_dbg_info_segment_regs_command(void); +void bx_dbg_info_flags(void); +void bx_dbg_info_linux_command(void); +void bx_dbg_examine_command(const char *command, const char *format, bx_bool format_passed, + bx_address addr, bx_bool addr_passed); +Bit32u bx_dbg_lin_indirect(bx_address addr); +Bit32u bx_dbg_phy_indirect(bx_phy_address addr); +void bx_dbg_setpmem_command(bx_phy_address addr, unsigned len, Bit32u val); +void bx_dbg_query_command(const char *); +void bx_dbg_take_command(const char *, unsigned n); +void bx_dbg_disassemble_current(const char *); +void bx_dbg_disassemble_command(const char *, Bit64u from, Bit64u to); +void bx_dbg_instrument_command(const char *); +void bx_dbg_doit_command(unsigned); +void bx_dbg_crc_command(bx_phy_address addr1, bx_phy_address addr2); +void bx_dbg_linux_syscall(unsigned which_cpu); +void bx_dbg_info_ne2k(int page, int reg); +void bx_dbg_info_pic(void); +void bx_dbg_info_vga(void); +void bx_dbg_info_pci(void); +void bx_dbg_print_help(void); +void bx_dbg_calc_command(Bit64u value); +void bx_dbg_dump_table(void); + +// callbacks from CPU +void bx_dbg_exception(unsigned cpu, Bit8u vector, Bit16u error_code); +void bx_dbg_interrupt(unsigned cpu, Bit8u vector, Bit16u error_code); +void bx_dbg_halt(unsigned cpu); + +// memory trace callbacks from CPU, len=1,2,4 or 8 +void bx_dbg_lin_memory_access(unsigned cpu, bx_address lin, bx_phy_address phy, unsigned len, unsigned pl, unsigned rw, Bit8u *data); +void bx_dbg_phy_memory_access(unsigned cpu, bx_phy_address phy, unsigned len, unsigned rw, Bit8u *data); + +// check memory access for watchpoints +void bx_dbg_check_memory_watchpoints(unsigned cpu, bx_phy_address phy, unsigned len, unsigned rw); + +// commands that work with Bochs param tree +void bx_dbg_restore_command(const char *param_name, const char *path); +void bx_dbg_show_param_command(const char *param); + +int bx_dbg_show_symbolic(void); +void bx_dbg_set_symbol_command(const char *symbol, Bit32u val); +const char* bx_dbg_symbolic_address(Bit32u context, Bit32u eip, Bit32u base); +const char* bx_dbg_symbolic_address_16bit(Bit32u eip, Bit32u cs); +int bx_dbg_symbol_command(const char* filename, bx_bool global, Bit32u offset); +void bx_dbg_info_symbols_command(const char *Symbol); +int bx_dbg_lbreakpoint_symbol_command(const char *Symbol); +Bit32u bx_dbg_get_symbol_value(const char *Symbol); +const char* bx_dbg_disasm_symbolic_address(Bit32u eip, Bit32u base); + +#ifdef __cplusplus +} +#endif + +// the rest for C++ +#ifdef __cplusplus + +typedef enum { + STOP_NO_REASON = 0, + STOP_TIME_BREAK_POINT, + STOP_READ_WATCH_POINT, + STOP_WRITE_WATCH_POINT, + STOP_MAGIC_BREAK_POINT, + STOP_MODE_BREAK_POINT, + STOP_CPU_HALTED +} stop_reason_t; + +typedef enum { + BREAK_POINT_MAGIC, BREAK_POINT_READ, BREAK_POINT_WRITE, BREAK_POINT_TIME +} break_point_t; + +#define BX_DBG_REG_EIP 10 +#define BX_DBG_REG_EFLAGS 11 +#define BX_DBG_REG_CS 20 +#define BX_DBG_REG_SS 21 +#define BX_DBG_REG_DS 22 +#define BX_DBG_REG_ES 23 +#define BX_DBG_REG_FS 24 +#define BX_DBG_REG_GS 25 +#define BX_DBG_REG_CR0 30 +#define BX_DBG_REG_CR2 32 +#define BX_DBG_REG_CR3 33 +#define BX_DBG_REG_CR4 34 + +#define BX_DBG_PENDING_DMA 1 +#define BX_DBG_PENDING_IRQ 2 + +void bx_debug_break(void); + +void bx_dbg_exit(int code); +#if BX_DBG_EXTENSIONS + int bx_dbg_extensions(char *command); +#else +#define bx_dbg_extensions(command) 0 +#endif + +// +// code for guards... +// + +#define BX_DBG_GUARD_IADDR_VIR 0x0001 +#define BX_DBG_GUARD_IADDR_LIN 0x0002 +#define BX_DBG_GUARD_IADDR_PHY 0x0004 +#define BX_DBG_GUARD_IADDR_ALL (BX_DBG_GUARD_IADDR_VIR | \ + BX_DBG_GUARD_IADDR_LIN | \ + BX_DBG_GUARD_IADDR_PHY) + +#define BX_DBG_GUARD_CTRL_C 0x0100 + +typedef struct { + unsigned guard_for; + + // instruction address breakpoints + struct { +#if (BX_DBG_MAX_VIR_BPOINTS > 0) + unsigned num_virtual; + struct { + Bit32u cs; // only use 16 bits + bx_address eip; + unsigned bpoint_id; + bx_bool enabled; + } vir[BX_DBG_MAX_VIR_BPOINTS]; +#endif + +#if (BX_DBG_MAX_LIN_BPOINTS > 0) + unsigned num_linear; + struct { + bx_address addr; + unsigned bpoint_id; + bx_bool enabled; + } lin[BX_DBG_MAX_LIN_BPOINTS]; +#endif + +#if (BX_DBG_MAX_PHY_BPOINTS > 0) + unsigned num_physical; + struct { + bx_phy_address addr; + unsigned bpoint_id; + bx_bool enabled; + } phy[BX_DBG_MAX_PHY_BPOINTS]; +#endif + } iaddr; + + // user typed Ctrl-C, requesting simulator stop at next convient spot + volatile bx_bool interrupt_requested; + + // booleans to control whether simulator should report events + // to debug controller + struct { + bx_bool irq; + bx_bool a20; + bx_bool io; + bx_bool dma; + } report; + + struct { + bx_bool irq; // should process IRQs asynchronously + bx_bool dma; // should process DMAs asynchronously + } async; + +#define BX_DBG_ASYNC_PENDING_A20 0x01 +#define BX_DBG_ASYNC_PENDING_RESET 0x02 +#define BX_DBG_ASYNC_PENDING_NMI 0x04 + + // Asynchronous changes which are pending. These are Q'd by + // the debugger, as the master simulator is notified of a pending + // async change. At the simulator's next point, where it checks for + // such events, it notifies the debugger with acknowlegement. This + // field contains a logically or'd list of all events which should + // be checked, and ack'd. + struct { + unsigned which; // logical OR of above constants + bx_bool a20; + bx_bool reset; + bx_bool nmi; + } async_changes_pending; +} bx_guard_t; + +// working information for each simulator to update when a guard +// is reached (found) +typedef struct bx_guard_found_t { + unsigned guard_found; + unsigned iaddr_index; + Bit64u icount; // number of completed instructions from last breakpoint hit + Bit32u cs; // cs:eip and linear addr of instruction at guard point + bx_address eip; + bx_address laddr; + // 00 - 16 bit, 01 - 32 bit, 10 - 64-bit, 11 - illegal + unsigned code_32_64; // CS seg size at guard point + bx_bool ctrl_c; // simulator stopped due to Ctrl-C request + Bit64u time_tick; // time tick when guard reached +} bx_guard_found_t; + +struct bx_watchpoint { + bx_phy_address addr; + Bit32u len; +}; + +extern unsigned num_write_watchpoints; +extern unsigned num_read_watchpoints; +extern bx_watchpoint write_watchpoint[BX_DBG_MAX_WATCHPONTS]; +extern bx_watchpoint read_watchpoint[BX_DBG_MAX_WATCHPONTS]; +extern bx_guard_t bx_guard; + +#define IS_CODE_32(code_32_64) ((code_32_64 & 1) != 0) +#define IS_CODE_64(code_32_64) ((code_32_64 & 2) != 0) + +void bx_dbg_init_infile(void); +int bx_dbg_set_rcfile(const char *rcfile); +int bx_dbg_main(void); +void bx_dbg_user_input_loop(void); +void bx_dbg_interpret_line(char *cmd); + +typedef struct { + Bit16u sel; + Bit32u des_l, des_h, valid; +#if BX_SUPPORT_X86_64 + Bit32u dword3; +#endif +} bx_dbg_sreg_t; + +typedef struct { + bx_address base; + Bit16u limit; +} bx_dbg_global_sreg_t; + +void bx_dbg_dma_report(bx_phy_address addr, unsigned len, unsigned what, Bit32u val); +void bx_dbg_iac_report(unsigned vector, unsigned irq); +void bx_dbg_a20_report(unsigned val); +void bx_dbg_io_report(Bit32u port, unsigned size, unsigned op, Bit32u val); +void bx_dbg_disassemble_current(int which_cpu, int print_time); + +#endif // #ifdef __cplusplus + +#endif // #if BX_DEBUGGER diff --git a/bochs/bx_debug/lexer.c b/bochs/bx_debug/lexer.c new file mode 100644 index 00000000..a4934c19 --- /dev/null +++ b/bochs/bx_debug/lexer.c @@ -0,0 +1,3482 @@ + +#line 3 "" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define yy_create_buffer bx_create_buffer +#define yy_delete_buffer bx_delete_buffer +#define yy_flex_debug bx_flex_debug +#define yy_init_buffer bx_init_buffer +#define yy_flush_buffer bx_flush_buffer +#define yy_load_buffer_state bx_load_buffer_state +#define yy_switch_to_buffer bx_switch_to_buffer +#define yyin bxin +#define yyleng bxleng +#define yylex bxlex +#define yylineno bxlineno +#define yyout bxout +#define yyrestart bxrestart +#define yytext bxtext +#define yywrap bxwrap +#define yyalloc bxalloc +#define yyrealloc bxrealloc +#define yyfree bxfree + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE bxrestart(bxin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +extern int bxleng; + +extern FILE *bxin, *bxout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up bxtext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up bxtext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via bxrestart()), so that the user can continue scanning by + * just pointing bxin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when bxtext is formed. */ +static char yy_hold_char; +static int yy_n_chars; /* number of characters read into yy_ch_buf */ +int bxleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow bxwrap()'s to do buffer switches + * instead of setting up a fresh bxin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void bxrestart (FILE *input_file ); +void bx_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE bx_create_buffer (FILE *file,int size ); +void bx_delete_buffer (YY_BUFFER_STATE b ); +void bx_flush_buffer (YY_BUFFER_STATE b ); +void bxpush_buffer_state (YY_BUFFER_STATE new_buffer ); +void bxpop_buffer_state (void ); + +static void bxensure_buffer_stack (void ); +static void bx_load_buffer_state (void ); +static void bx_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER bx_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE bx_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE bx_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE bx_scan_bytes (yyconst char *bytes,int len ); + +void *bxalloc (yy_size_t ); +void *bxrealloc (void *,yy_size_t ); +void bxfree (void * ); + +#define yy_new_buffer bx_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + bxensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + bx_create_buffer(bxin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + bxensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + bx_create_buffer(bxin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +typedef unsigned char YY_CHAR; + +FILE *bxin = (FILE *) 0, *bxout = (FILE *) 0; + +typedef int yy_state_type; + +extern int bxlineno; + +int bxlineno = 1; + +extern char *bxtext; +#define yytext_ptr bxtext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up bxtext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + bxleng = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 203 +#define YY_END_OF_BUFFER 204 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[444] = + { 0, + 0, 0, 0, 0, 0, 0, 204, 201, 1, 199, + 186, 201, 200, 201, 183, 201, 188, 189, 179, 177, + 178, 180, 194, 194, 198, 201, 201, 172, 187, 197, + 185, 195, 18, 6, 43, 195, 195, 195, 171, 195, + 195, 195, 195, 12, 195, 13, 48, 26, 10, 195, + 59, 195, 80, 49, 184, 202, 1, 202, 198, 202, + 1, 0, 191, 0, 200, 196, 0, 190, 0, 195, + 193, 194, 0, 182, 181, 197, 195, 109, 93, 113, + 110, 94, 119, 195, 114, 195, 111, 95, 195, 195, + 21, 164, 115, 195, 112, 118, 96, 195, 195, 23, + + 167, 116, 195, 195, 195, 195, 195, 195, 165, 195, + 195, 29, 168, 195, 195, 169, 195, 195, 195, 161, + 195, 195, 16, 195, 195, 195, 195, 195, 195, 3, + 195, 18, 195, 195, 195, 195, 195, 195, 195, 197, + 153, 154, 195, 195, 195, 195, 195, 195, 195, 71, + 195, 195, 117, 195, 120, 195, 166, 195, 195, 195, + 195, 195, 195, 195, 15, 195, 195, 195, 195, 195, + 50, 174, 175, 176, 196, 192, 92, 195, 45, 44, + 100, 195, 195, 195, 33, 5, 195, 42, 98, 195, + 56, 195, 195, 129, 135, 130, 131, 134, 132, 195, + + 162, 133, 136, 195, 195, 29, 36, 195, 195, 61, + 34, 195, 195, 57, 35, 195, 195, 37, 195, 32, + 195, 197, 195, 4, 195, 195, 91, 195, 58, 195, + 195, 195, 195, 195, 155, 156, 157, 158, 159, 160, + 101, 137, 121, 102, 138, 122, 145, 152, 146, 147, + 150, 148, 195, 195, 27, 195, 163, 149, 151, 72, + 2, 195, 97, 195, 195, 99, 195, 30, 195, 195, + 195, 195, 39, 195, 195, 38, 195, 195, 90, 195, + 195, 195, 31, 195, 195, 173, 7, 22, 195, 195, + 64, 24, 195, 47, 195, 195, 171, 20, 195, 195, + + 195, 195, 195, 197, 88, 11, 89, 195, 195, 195, + 195, 195, 195, 46, 103, 139, 123, 104, 140, 124, + 105, 141, 125, 106, 142, 126, 107, 143, 127, 108, + 144, 128, 79, 195, 195, 27, 195, 195, 81, 69, + 195, 25, 9, 63, 195, 195, 55, 195, 195, 195, + 195, 195, 195, 14, 17, 195, 195, 195, 195, 170, + 195, 195, 195, 82, 40, 195, 197, 195, 195, 195, + 195, 70, 53, 195, 195, 195, 195, 84, 195, 195, + 65, 195, 195, 77, 86, 80, 195, 41, 60, 85, + 195, 16, 75, 19, 195, 195, 195, 73, 195, 195, + + 195, 195, 195, 195, 195, 15, 195, 195, 54, 195, + 195, 195, 51, 52, 195, 83, 195, 195, 78, 8, + 195, 74, 195, 195, 195, 195, 195, 195, 195, 195, + 28, 195, 67, 66, 62, 195, 195, 195, 76, 195, + 68, 87, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 5, 6, 7, 1, 8, 9, 10, + 11, 12, 13, 1, 14, 1, 15, 16, 17, 18, + 19, 20, 21, 22, 22, 23, 24, 1, 25, 26, + 1, 27, 28, 29, 30, 30, 30, 30, 30, 30, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 1, 32, 1, 33, 31, 1, 34, 35, 36, 37, + + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 1, 60, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[61] = + { 0, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 1, 1, 1, 1, 1, 5, + 6, 1, 1, 7, 8, 8, 8, 7, 7, 9, + 9, 9, 10, 10, 10, 9, 10, 9, 10, 10, + 10, 9, 9, 9, 10, 9, 11, 10, 10, 1 + } ; + +static yyconst flex_int16_t yy_base[458] = + { 0, + 0, 0, 59, 61, 63, 65, 218, 2459, 210, 2459, + 2459, 64, 0, 0, 2459, 61, 2459, 2459, 2459, 2459, + 0, 2459, 48, 0, 2459, 185, 179, 2459, 2459, 0, + 2459, 92, 136, 83, 156, 180, 40, 127, 185, 198, + 199, 217, 214, 92, 234, 256, 261, 302, 325, 301, + 114, 349, 346, 229, 2459, 2459, 201, 389, 2459, 0, + 198, 68, 2459, 0, 0, 0, 66, 2459, 0, 0, + 79, 0, 0, 2459, 2459, 0, 387, 406, 407, 420, + 421, 434, 443, 448, 457, 462, 471, 476, 296, 487, + 507, 324, 500, 512, 519, 526, 539, 540, 553, 562, + + 567, 576, 581, 590, 595, 608, 613, 622, 627, 640, + 649, 654, 668, 669, 682, 683, 696, 697, 710, 715, + 724, 735, 738, 749, 756, 763, 772, 781, 790, 795, + 808, 809, 822, 825, 841, 848, 863, 864, 879, 311, + 64, 90, 882, 891, 896, 909, 923, 920, 937, 43, + 381, 248, 947, 955, 259, 962, 975, 982, 983, 992, + 652, 868, 997, 1005, 1012, 1019, 1020, 1040, 1041, 1048, + 1051, 0, 0, 0, 0, 0, 1061, 1062, 1070, 1071, + 1081, 1084, 1091, 1092, 1101, 1106, 1114, 1121, 1128, 1129, + 1136, 1143, 1150, 1151, 1158, 1165, 1172, 1173, 1180, 1187, + + 1194, 1195, 1202, 1209, 1216, 1217, 1224, 1231, 1238, 1239, + 1246, 1259, 1260, 1268, 1269, 1288, 1283, 1291, 1296, 1311, + 1318, 126, 1319, 1326, 1339, 1346, 1347, 1356, 1361, 1366, + 1369, 1383, 1386, 1391, 136, 153, 154, 364, 494, 564, + 0, 0, 0, 0, 0, 0, 1394, 1405, 1413, 1414, + 1422, 1427, 1435, 1442, 1449, 1452, 1459, 1462, 1472, 1473, + 1481, 1482, 1492, 1501, 1506, 1509, 1514, 1523, 1528, 1533, + 1536, 1556, 1547, 1564, 1561, 1569, 1578, 1586, 1583, 1591, + 1600, 1605, 1608, 1613, 1627, 1628, 1636, 1641, 1649, 1656, + 1663, 1664, 1671, 1678, 1685, 1686, 1693, 1700, 1707, 1708, + + 1715, 1728, 1735, 183, 0, 1738, 1743, 1748, 1757, 1767, + 1758, 1778, 1781, 1786, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1789, 1800, 1808, 1809, 1819, 1822, 1829, 1830, + 1839, 1844, 1849, 1854, 1859, 1864, 1869, 1879, 1874, 1884, + 1889, 1899, 1904, 1909, 1912, 1919, 1929, 1934, 1939, 1942, + 1953, 1956, 1963, 1966, 1977, 1985, 180, 1980, 1999, 2002, + 2009, 2016, 2019, 2026, 2033, 2036, 2041, 2055, 2056, 2064, + 2085, 2077, 2078, 2092, 2099, 2100, 2107, 2114, 2122, 2129, + 2136, 2137, 2144, 2151, 2158, 2159, 143, 2166, 2179, 2186, + + 2187, 2194, 2201, 36, 2208, 2211, 2216, 2221, 2230, 2231, + 133, 2238, 2245, 2252, 137, 2259, 144, 142, 2260, 2267, + 2274, 2282, 70, 2289, 127, 128, 122, 2296, 112, 103, + 2299, 107, 0, 0, 2304, 94, 79, 81, 0, 78, + 0, 0, 2459, 2356, 2367, 2378, 2385, 2396, 2405, 2413, + 103, 2421, 2430, 90, 2438, 2446, 2447 + } ; + +static yyconst flex_int16_t yy_def[458] = + { 0, + 443, 1, 444, 444, 444, 444, 443, 443, 443, 443, + 443, 445, 446, 447, 443, 448, 443, 443, 443, 443, + 449, 443, 450, 451, 443, 443, 443, 443, 443, 452, + 443, 453, 453, 33, 33, 33, 33, 33, 33, 33, + 33, 40, 40, 40, 40, 33, 33, 36, 33, 33, + 40, 40, 33, 33, 443, 443, 443, 443, 443, 454, + 443, 445, 443, 445, 446, 455, 448, 443, 448, 449, + 450, 451, 456, 443, 443, 452, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 40, 40, + 40, 40, 40, 33, 33, 33, 33, 33, 33, 33, + + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 40, 33, 40, 33, 33, 33, + 33, 33, 33, 40, 40, 40, 40, 40, 40, 452, + 452, 452, 33, 33, 33, 33, 33, 33, 33, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 58, 457, 454, 455, 456, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 452, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 452, 452, 452, 452, 452, 452, + 452, 452, 452, 452, 452, 452, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + + 147, 147, 147, 452, 452, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 452, 452, 452, 452, 452, 452, + 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + 452, 452, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 452, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 449, 147, 147, 147, + + 147, 147, 147, 449, 147, 147, 147, 147, 147, 147, + 449, 147, 147, 147, 449, 147, 449, 449, 147, 147, + 147, 147, 449, 147, 449, 449, 449, 147, 449, 449, + 147, 449, 449, 449, 147, 449, 449, 449, 449, 449, + 449, 449, 0, 443, 443, 443, 443, 443, 443, 443, + 443, 443, 443, 443, 443, 443, 443 + } ; + +static yyconst flex_int16_t yy_nxt[2520] = + { 0, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 24, 24, 24, + 24, 24, 24, 24, 25, 26, 27, 28, 29, 30, + 30, 8, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 41, 41, 55, + 57, 10, 57, 10, 57, 10, 57, 10, 63, 68, + 72, 72, 63, 58, 68, 58, 260, 60, 77, 60, + 77, 417, 77, 59, 111, 59, 418, 59, 112, 59, + 77, 113, 69, 174, 77, 64, 77, 69, 241, 64, + + 242, 72, 72, 429, 73, 70, 72, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 86, 442, 441, 243, + 430, 76, 76, 87, 244, 440, 245, 88, 77, 128, + 89, 90, 78, 91, 92, 443, 79, 439, 77, 93, + 77, 304, 77, 438, 437, 246, 77, 436, 80, 70, + 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 164, 434, 77, 114, 77, 76, 76, 77, 77, 305, + 315, 115, 316, 433, 432, 77, 81, 77, 116, 427, + 82, 426, 425, 77, 83, 423, 84, 318, 321, 319, + 322, 317, 85, 94, 411, 305, 95, 96, 367, 61, + + 97, 98, 61, 99, 77, 75, 100, 101, 320, 323, + 74, 61, 102, 103, 104, 105, 106, 443, 107, 443, + 77, 108, 117, 443, 77, 77, 443, 443, 77, 77, + 77, 109, 443, 77, 118, 77, 110, 443, 77, 77, + 443, 77, 77, 77, 119, 443, 120, 77, 121, 77, + 77, 123, 122, 124, 77, 77, 443, 443, 125, 126, + 77, 127, 77, 77, 77, 77, 443, 77, 77, 77, + 77, 77, 129, 77, 170, 443, 443, 171, 443, 77, + 130, 77, 77, 77, 77, 77, 443, 77, 77, 131, + 132, 133, 77, 134, 77, 262, 77, 135, 77, 77, + + 136, 77, 443, 266, 77, 77, 137, 443, 138, 77, + 77, 77, 77, 443, 139, 443, 443, 77, 140, 443, + 443, 443, 443, 443, 141, 142, 235, 236, 237, 238, + 239, 240, 77, 443, 161, 143, 144, 145, 146, 147, + 77, 77, 184, 148, 77, 77, 77, 443, 443, 77, + 77, 162, 163, 149, 443, 443, 443, 77, 77, 150, + 77, 443, 151, 443, 443, 152, 153, 443, 443, 154, + 77, 443, 77, 155, 77, 156, 157, 158, 77, 167, + 159, 77, 160, 165, 443, 77, 168, 443, 166, 443, + 77, 443, 443, 443, 77, 77, 169, 77, 324, 77, + + 325, 443, 77, 77, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 443, 77, 443, 77, 443, 443, 326, + 77, 443, 443, 173, 173, 173, 443, 77, 173, 173, + 173, 77, 77, 261, 173, 77, 173, 77, 443, 443, + 173, 173, 173, 77, 173, 173, 77, 77, 443, 443, + 77, 177, 443, 443, 77, 77, 77, 77, 443, 443, + 77, 77, 77, 77, 77, 77, 443, 443, 77, 77, + 77, 77, 443, 443, 77, 178, 77, 77, 77, 179, + 180, 443, 77, 77, 77, 182, 443, 181, 77, 443, + 77, 77, 77, 77, 443, 443, 77, 77, 77, 77, + + 443, 77, 77, 443, 77, 77, 183, 77, 443, 443, + 77, 77, 77, 77, 443, 77, 77, 443, 77, 77, + 77, 77, 443, 77, 77, 443, 77, 77, 327, 443, + 328, 443, 77, 77, 443, 77, 77, 77, 443, 443, + 185, 77, 186, 77, 187, 443, 77, 443, 77, 329, + 77, 443, 77, 77, 77, 77, 188, 77, 443, 77, + 77, 77, 77, 77, 443, 443, 77, 77, 77, 77, + 189, 443, 443, 191, 77, 77, 77, 190, 443, 77, + 77, 443, 77, 77, 77, 443, 443, 77, 77, 77, + 77, 443, 443, 77, 192, 77, 77, 77, 330, 193, + + 331, 77, 77, 77, 443, 443, 77, 77, 443, 77, + 77, 77, 77, 443, 443, 77, 77, 77, 77, 332, + 77, 77, 443, 77, 77, 77, 77, 443, 443, 77, + 77, 77, 77, 443, 77, 77, 443, 194, 195, 77, + 77, 443, 443, 77, 443, 77, 196, 443, 77, 198, + 443, 197, 77, 77, 443, 443, 77, 200, 77, 443, + 443, 77, 77, 77, 199, 443, 77, 77, 202, 77, + 201, 77, 77, 443, 443, 203, 443, 77, 77, 443, + 77, 204, 205, 77, 77, 77, 273, 77, 77, 77, + 77, 77, 443, 77, 77, 274, 77, 77, 77, 77, + + 443, 443, 77, 77, 77, 77, 443, 206, 77, 77, + 77, 443, 77, 77, 443, 443, 77, 77, 77, 77, + 443, 207, 77, 77, 77, 77, 77, 77, 443, 208, + 77, 77, 77, 77, 443, 443, 77, 77, 77, 77, + 209, 77, 443, 443, 77, 77, 77, 77, 212, 211, + 77, 443, 210, 77, 77, 77, 443, 443, 77, 77, + 77, 213, 443, 77, 77, 77, 77, 443, 77, 443, + 443, 77, 77, 214, 77, 77, 443, 443, 77, 77, + 77, 443, 77, 77, 443, 77, 77, 215, 216, 77, + 443, 77, 77, 77, 77, 443, 443, 77, 222, 77, + + 217, 218, 219, 77, 77, 77, 77, 77, 221, 443, + 77, 77, 443, 77, 443, 443, 443, 443, 77, 220, + 77, 77, 77, 443, 443, 77, 77, 443, 224, 77, + 77, 77, 443, 443, 77, 77, 443, 223, 77, 77, + 77, 443, 443, 77, 443, 77, 77, 225, 77, 77, + 443, 77, 77, 77, 443, 443, 77, 77, 77, 226, + 443, 77, 77, 227, 77, 77, 77, 443, 443, 443, + 77, 228, 77, 77, 443, 77, 229, 77, 77, 77, + 443, 230, 443, 443, 77, 443, 443, 77, 443, 77, + 443, 77, 443, 443, 77, 77, 77, 443, 77, 77, + + 77, 275, 77, 77, 231, 232, 443, 77, 443, 77, + 77, 77, 77, 77, 77, 77, 233, 77, 77, 77, + 234, 443, 77, 443, 443, 77, 77, 77, 443, 77, + 77, 77, 77, 77, 443, 77, 77, 443, 247, 248, + 77, 77, 443, 443, 77, 443, 77, 249, 443, 77, + 251, 443, 250, 77, 443, 443, 253, 77, 254, 77, + 77, 443, 255, 77, 77, 252, 443, 77, 257, 443, + 77, 77, 443, 77, 256, 443, 77, 77, 258, 77, + 77, 77, 77, 443, 443, 259, 77, 77, 77, 443, + 77, 263, 443, 77, 77, 77, 265, 77, 77, 267, + + 443, 77, 443, 443, 443, 264, 77, 443, 77, 443, + 77, 443, 268, 77, 77, 77, 77, 77, 77, 269, + 443, 77, 77, 443, 271, 77, 77, 77, 443, 270, + 77, 77, 77, 77, 77, 443, 77, 272, 77, 443, + 77, 443, 443, 77, 77, 77, 443, 77, 276, 443, + 443, 77, 279, 77, 77, 77, 77, 443, 77, 77, + 277, 443, 278, 77, 443, 443, 443, 443, 443, 443, + 77, 77, 280, 77, 77, 77, 77, 281, 443, 77, + 77, 77, 282, 77, 77, 443, 77, 77, 443, 443, + 77, 77, 77, 283, 77, 77, 77, 77, 443, 77, + + 77, 77, 77, 77, 77, 77, 77, 443, 443, 77, + 77, 443, 77, 284, 77, 443, 77, 285, 443, 77, + 77, 77, 77, 77, 77, 77, 286, 77, 443, 443, + 77, 77, 77, 443, 77, 77, 77, 443, 443, 77, + 77, 77, 77, 77, 287, 77, 443, 77, 443, 77, + 443, 443, 77, 288, 77, 443, 77, 77, 289, 443, + 77, 77, 290, 77, 77, 77, 443, 77, 77, 77, + 443, 77, 77, 443, 443, 77, 77, 443, 77, 77, + 77, 443, 77, 77, 77, 77, 77, 77, 443, 292, + 77, 77, 443, 77, 77, 291, 443, 77, 77, 443, + + 77, 77, 77, 443, 77, 77, 77, 77, 77, 77, + 443, 77, 77, 77, 443, 77, 77, 443, 443, 77, + 293, 443, 77, 77, 77, 443, 77, 77, 77, 77, + 77, 77, 443, 77, 77, 77, 443, 77, 77, 443, + 443, 77, 77, 443, 77, 77, 77, 443, 77, 77, + 77, 77, 77, 77, 443, 295, 77, 77, 443, 77, + 77, 294, 443, 77, 77, 296, 77, 77, 77, 443, + 77, 77, 77, 77, 77, 77, 443, 77, 77, 77, + 443, 77, 77, 443, 443, 77, 297, 443, 443, 77, + 77, 443, 77, 77, 77, 77, 443, 77, 77, 77, + + 443, 77, 77, 77, 77, 443, 298, 77, 77, 443, + 77, 77, 299, 443, 443, 443, 77, 443, 77, 77, + 77, 77, 77, 77, 77, 300, 77, 77, 443, 77, + 77, 77, 443, 443, 77, 77, 443, 443, 443, 77, + 301, 443, 77, 443, 77, 443, 77, 77, 443, 302, + 77, 77, 77, 77, 77, 303, 443, 77, 77, 77, + 443, 77, 77, 443, 443, 77, 443, 443, 443, 77, + 77, 306, 77, 443, 77, 443, 307, 77, 77, 77, + 77, 77, 77, 308, 443, 77, 77, 443, 443, 77, + 77, 77, 309, 443, 77, 77, 77, 77, 77, 77, + + 77, 77, 77, 443, 77, 77, 443, 77, 77, 443, + 443, 443, 77, 443, 443, 311, 77, 77, 77, 77, + 77, 77, 77, 310, 77, 77, 77, 77, 312, 77, + 77, 443, 443, 77, 77, 443, 313, 77, 77, 443, + 77, 443, 77, 314, 77, 77, 77, 77, 77, 77, + 443, 443, 77, 77, 443, 77, 77, 77, 443, 443, + 77, 77, 77, 443, 77, 77, 77, 443, 77, 443, + 77, 333, 443, 77, 77, 77, 443, 77, 77, 443, + 443, 77, 77, 443, 77, 77, 77, 77, 77, 334, + 335, 77, 77, 77, 77, 77, 443, 77, 77, 443, + + 336, 77, 443, 77, 337, 77, 77, 77, 77, 443, + 77, 77, 77, 77, 77, 77, 77, 77, 443, 443, + 77, 77, 443, 77, 77, 77, 443, 77, 443, 338, + 443, 77, 77, 77, 77, 443, 77, 339, 340, 77, + 77, 77, 77, 77, 77, 77, 443, 77, 77, 77, + 443, 443, 77, 342, 443, 443, 77, 341, 77, 443, + 77, 77, 77, 77, 443, 77, 77, 77, 77, 77, + 443, 77, 77, 443, 77, 77, 343, 443, 443, 77, + 77, 344, 77, 443, 77, 443, 77, 77, 345, 77, + 346, 77, 443, 443, 77, 77, 348, 77, 77, 77, + + 77, 347, 77, 77, 77, 443, 443, 77, 77, 443, + 443, 349, 77, 77, 443, 77, 77, 77, 77, 77, + 77, 77, 77, 350, 77, 77, 351, 443, 443, 77, + 77, 443, 443, 77, 77, 77, 443, 77, 77, 77, + 77, 77, 77, 77, 77, 443, 77, 77, 77, 443, + 352, 77, 77, 443, 443, 443, 77, 353, 443, 77, + 77, 77, 77, 77, 77, 354, 77, 77, 443, 77, + 355, 77, 443, 443, 77, 77, 77, 356, 77, 77, + 77, 443, 77, 443, 77, 443, 443, 77, 77, 77, + 443, 77, 77, 443, 443, 77, 77, 77, 77, 77, + + 77, 357, 77, 77, 77, 443, 77, 358, 443, 443, + 359, 77, 443, 77, 77, 77, 443, 77, 77, 361, + 77, 77, 77, 443, 77, 77, 77, 443, 77, 77, + 443, 443, 77, 77, 443, 77, 360, 77, 443, 77, + 77, 363, 77, 77, 77, 443, 77, 77, 77, 443, + 77, 77, 443, 443, 77, 443, 443, 362, 77, 77, + 364, 77, 443, 77, 443, 443, 77, 77, 77, 366, + 77, 77, 443, 77, 77, 443, 77, 77, 77, 77, + 443, 368, 77, 77, 365, 443, 77, 77, 443, 77, + 77, 77, 77, 77, 77, 443, 77, 77, 369, 77, + + 77, 370, 77, 443, 443, 443, 77, 443, 77, 77, + 371, 77, 443, 77, 77, 372, 77, 77, 77, 77, + 77, 77, 77, 443, 77, 77, 443, 443, 77, 77, + 443, 443, 77, 77, 443, 77, 443, 77, 373, 77, + 77, 77, 77, 77, 77, 443, 443, 77, 77, 443, + 374, 77, 77, 443, 77, 77, 443, 77, 77, 375, + 77, 77, 77, 77, 77, 77, 376, 377, 77, 77, + 77, 443, 77, 77, 77, 443, 443, 77, 77, 77, + 77, 77, 77, 77, 77, 443, 443, 77, 77, 77, + 77, 378, 77, 77, 379, 77, 443, 77, 77, 77, + + 77, 443, 77, 77, 77, 77, 443, 77, 77, 77, + 77, 380, 77, 77, 77, 77, 381, 383, 77, 77, + 77, 443, 77, 77, 77, 77, 382, 443, 77, 384, + 77, 443, 77, 443, 77, 77, 385, 77, 77, 77, + 77, 386, 77, 77, 77, 77, 443, 77, 77, 443, + 77, 77, 77, 443, 77, 77, 443, 443, 77, 443, + 77, 443, 77, 77, 77, 387, 388, 77, 77, 77, + 77, 443, 77, 77, 77, 77, 443, 77, 77, 389, + 77, 77, 443, 443, 443, 77, 77, 443, 77, 77, + 360, 77, 77, 77, 443, 77, 77, 390, 77, 77, + + 443, 77, 77, 443, 77, 77, 392, 77, 443, 391, + 77, 443, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 443, 397, 394, 77, 443, 443, 443, 77, 443, + 443, 77, 77, 393, 77, 396, 77, 77, 77, 443, + 443, 77, 77, 443, 77, 395, 443, 443, 77, 77, + 77, 77, 77, 77, 77, 77, 443, 443, 77, 77, + 77, 77, 398, 443, 443, 77, 77, 77, 77, 77, + 77, 77, 77, 443, 77, 77, 77, 77, 401, 443, + 77, 443, 443, 443, 77, 399, 400, 77, 77, 77, + 77, 77, 77, 443, 77, 77, 402, 77, 404, 77, + + 443, 443, 443, 77, 443, 443, 77, 77, 403, 443, + 77, 77, 405, 77, 443, 77, 77, 77, 77, 443, + 77, 406, 443, 443, 77, 77, 443, 77, 77, 77, + 443, 77, 77, 77, 77, 77, 77, 443, 77, 77, + 77, 443, 77, 77, 443, 443, 77, 77, 443, 77, + 77, 77, 443, 77, 443, 77, 443, 77, 77, 443, + 407, 77, 77, 443, 77, 77, 443, 443, 77, 77, + 77, 77, 77, 77, 443, 77, 77, 77, 443, 77, + 77, 408, 443, 77, 77, 443, 77, 77, 77, 443, + 77, 77, 77, 77, 410, 77, 443, 409, 77, 77, + + 443, 77, 77, 443, 443, 77, 443, 415, 443, 77, + 77, 443, 77, 443, 77, 443, 412, 77, 77, 77, + 77, 77, 77, 413, 443, 77, 77, 77, 443, 77, + 77, 443, 414, 77, 77, 443, 77, 77, 77, 443, + 77, 77, 443, 77, 77, 77, 77, 77, 419, 77, + 77, 77, 416, 420, 77, 77, 77, 443, 421, 77, + 77, 443, 77, 77, 77, 77, 77, 77, 443, 77, + 77, 77, 77, 77, 422, 443, 443, 77, 77, 443, + 77, 77, 77, 443, 77, 77, 443, 77, 424, 77, + 443, 77, 77, 77, 77, 77, 77, 443, 77, 77, + + 77, 443, 77, 77, 443, 443, 77, 77, 443, 77, + 77, 77, 443, 77, 443, 77, 443, 77, 77, 443, + 428, 77, 77, 443, 77, 77, 443, 443, 77, 77, + 443, 77, 77, 77, 77, 77, 443, 77, 77, 77, + 431, 443, 443, 77, 443, 443, 443, 77, 435, 443, + 77, 443, 443, 443, 443, 77, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 62, 443, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 65, 443, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, + 66, 66, 66, 66, 66, 66, 67, 443, 67, 67, + + 67, 67, 67, 67, 67, 67, 67, 70, 443, 443, + 443, 70, 70, 70, 70, 70, 71, 443, 443, 443, + 443, 443, 443, 71, 76, 76, 76, 76, 76, 76, + 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 175, 175, 175, 175, 175, 175, 175, 175, 176, + 176, 443, 176, 176, 173, 173, 443, 173, 7, 443, + 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, + 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, + 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, + 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, + + 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, + 443, 443, 443, 443, 443, 443, 443, 443, 443 + } ; + +static yyconst flex_int16_t yy_chk[2520] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 3, 4, 4, 5, 5, 6, 6, 12, 16, + 23, 23, 62, 3, 67, 4, 150, 5, 150, 6, + 37, 404, 150, 3, 37, 4, 404, 5, 37, 6, + 37, 37, 16, 454, 150, 12, 37, 67, 141, 62, + + 141, 71, 71, 423, 23, 32, 451, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 34, 440, 438, 141, + 423, 32, 32, 34, 142, 437, 142, 34, 44, 44, + 34, 34, 32, 34, 34, 71, 32, 436, 44, 34, + 44, 222, 44, 432, 430, 142, 44, 429, 32, 33, + 51, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 51, 427, 51, 38, 51, 33, 33, 38, 51, 222, + 235, 38, 235, 426, 425, 38, 33, 38, 38, 418, + 33, 417, 415, 38, 33, 411, 33, 236, 237, 236, + 237, 235, 33, 35, 397, 367, 35, 35, 304, 61, + + 35, 35, 57, 35, 35, 27, 35, 35, 236, 237, + 26, 9, 35, 36, 36, 36, 36, 7, 36, 0, + 36, 36, 39, 0, 36, 39, 0, 0, 36, 39, + 36, 36, 0, 39, 40, 39, 36, 0, 40, 41, + 0, 39, 40, 41, 40, 0, 40, 41, 40, 41, + 43, 42, 40, 42, 40, 41, 0, 0, 42, 43, + 43, 43, 43, 42, 43, 42, 0, 42, 43, 54, + 45, 42, 45, 54, 54, 0, 0, 54, 0, 54, + 45, 152, 45, 152, 45, 54, 0, 152, 45, 46, + 46, 46, 155, 46, 155, 152, 46, 46, 155, 152, + + 46, 47, 0, 155, 46, 47, 46, 0, 46, 47, + 155, 47, 46, 0, 47, 0, 0, 47, 48, 0, + 0, 0, 0, 0, 48, 48, 140, 140, 140, 140, + 140, 140, 89, 0, 50, 48, 48, 48, 48, 48, + 48, 50, 89, 48, 89, 50, 89, 0, 0, 50, + 89, 50, 50, 48, 0, 0, 0, 50, 48, 49, + 92, 0, 49, 0, 0, 49, 49, 0, 0, 49, + 92, 0, 92, 49, 92, 49, 49, 49, 92, 53, + 49, 49, 49, 52, 0, 52, 53, 0, 52, 0, + 53, 0, 0, 0, 53, 52, 53, 52, 238, 52, + + 238, 0, 53, 52, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 0, 151, 0, 151, 0, 0, 238, + 151, 0, 0, 58, 58, 58, 0, 77, 58, 58, + 58, 77, 151, 151, 58, 77, 58, 77, 0, 0, + 58, 58, 58, 77, 58, 58, 78, 79, 0, 0, + 78, 79, 0, 0, 78, 79, 78, 79, 0, 0, + 80, 81, 78, 79, 80, 81, 0, 0, 80, 81, + 80, 81, 0, 0, 82, 82, 80, 81, 82, 83, + 83, 0, 82, 83, 82, 84, 0, 83, 84, 0, + 82, 83, 84, 83, 0, 0, 84, 85, 84, 83, + + 0, 85, 86, 0, 84, 85, 86, 85, 0, 0, + 86, 87, 86, 85, 0, 87, 88, 0, 86, 87, + 88, 87, 0, 90, 88, 0, 88, 87, 239, 0, + 239, 0, 88, 90, 0, 90, 93, 90, 0, 0, + 90, 90, 91, 91, 91, 0, 93, 0, 93, 239, + 93, 0, 94, 91, 93, 91, 94, 91, 0, 95, + 94, 91, 94, 95, 0, 0, 96, 95, 94, 95, + 96, 0, 0, 98, 96, 95, 96, 96, 0, 97, + 98, 0, 96, 97, 98, 0, 0, 97, 98, 97, + 98, 0, 0, 99, 99, 97, 98, 99, 240, 100, + + 240, 99, 100, 99, 0, 0, 100, 101, 0, 99, + 100, 101, 100, 0, 0, 101, 102, 101, 100, 240, + 102, 103, 0, 101, 102, 103, 102, 0, 0, 103, + 104, 103, 102, 0, 104, 105, 0, 103, 104, 105, + 104, 0, 0, 105, 0, 105, 104, 0, 106, 106, + 0, 105, 106, 107, 0, 0, 106, 107, 106, 0, + 0, 107, 108, 107, 106, 0, 108, 109, 109, 107, + 108, 109, 108, 0, 0, 109, 0, 109, 108, 0, + 110, 110, 111, 109, 110, 161, 161, 161, 110, 111, + 110, 161, 0, 111, 112, 161, 110, 111, 112, 111, + + 0, 0, 112, 161, 112, 111, 0, 112, 113, 114, + 112, 0, 113, 114, 0, 0, 113, 114, 113, 114, + 0, 114, 115, 116, 113, 114, 115, 116, 0, 115, + 115, 116, 115, 116, 0, 0, 117, 118, 115, 116, + 117, 118, 0, 0, 117, 118, 117, 118, 119, 118, + 119, 0, 117, 118, 119, 120, 0, 0, 119, 120, + 119, 119, 0, 120, 121, 120, 119, 0, 121, 0, + 0, 120, 121, 121, 121, 122, 0, 0, 123, 122, + 121, 0, 123, 122, 0, 122, 123, 122, 123, 124, + 0, 122, 125, 124, 123, 0, 0, 124, 128, 124, + + 124, 124, 125, 126, 125, 124, 125, 126, 127, 0, + 125, 126, 0, 126, 0, 0, 0, 0, 127, 126, + 127, 128, 127, 0, 0, 128, 127, 0, 129, 128, + 129, 128, 0, 0, 129, 130, 0, 128, 129, 130, + 129, 0, 0, 130, 0, 130, 129, 131, 131, 132, + 0, 130, 131, 132, 0, 0, 131, 132, 131, 132, + 0, 134, 133, 133, 131, 132, 133, 0, 0, 0, + 133, 134, 133, 134, 0, 134, 135, 135, 133, 134, + 0, 136, 0, 0, 136, 0, 0, 135, 0, 135, + 0, 135, 0, 0, 136, 135, 136, 0, 136, 137, + + 138, 162, 136, 162, 137, 138, 0, 162, 0, 137, + 138, 137, 138, 137, 138, 139, 139, 137, 138, 162, + 139, 0, 143, 0, 0, 139, 143, 139, 0, 139, + 143, 144, 143, 139, 0, 144, 145, 0, 143, 144, + 145, 144, 0, 0, 145, 0, 145, 144, 0, 146, + 146, 0, 145, 146, 0, 0, 147, 146, 147, 146, + 148, 0, 147, 147, 148, 146, 0, 147, 148, 0, + 148, 147, 0, 147, 147, 0, 148, 149, 149, 147, + 153, 149, 153, 0, 0, 149, 153, 149, 154, 0, + 154, 153, 0, 149, 154, 156, 154, 156, 153, 156, + + 0, 156, 0, 0, 0, 153, 154, 0, 157, 0, + 157, 0, 157, 156, 157, 158, 159, 158, 159, 158, + 0, 158, 159, 0, 159, 160, 157, 160, 0, 158, + 163, 160, 163, 158, 159, 0, 163, 160, 164, 0, + 164, 0, 0, 160, 164, 165, 0, 165, 163, 0, + 0, 165, 166, 167, 166, 167, 164, 0, 166, 167, + 164, 0, 165, 165, 0, 0, 0, 0, 0, 0, + 166, 167, 167, 168, 169, 168, 169, 168, 0, 168, + 169, 170, 169, 170, 171, 0, 171, 170, 0, 0, + 171, 168, 169, 170, 177, 178, 177, 178, 0, 170, + + 177, 178, 171, 179, 180, 179, 180, 0, 0, 179, + 180, 0, 177, 178, 181, 0, 181, 182, 0, 182, + 181, 179, 180, 182, 183, 184, 183, 184, 0, 0, + 183, 184, 181, 0, 185, 182, 185, 0, 0, 186, + 185, 186, 183, 184, 184, 186, 0, 187, 0, 187, + 0, 0, 185, 187, 188, 0, 188, 186, 188, 0, + 188, 189, 190, 189, 190, 187, 0, 189, 190, 191, + 0, 191, 188, 0, 0, 191, 192, 0, 192, 189, + 190, 0, 192, 193, 194, 193, 194, 191, 0, 193, + 194, 195, 0, 195, 192, 192, 0, 195, 196, 0, + + 196, 193, 194, 0, 196, 197, 198, 197, 198, 195, + 0, 197, 198, 199, 0, 199, 196, 0, 0, 199, + 200, 0, 200, 197, 198, 0, 200, 201, 202, 201, + 202, 199, 0, 201, 202, 203, 0, 203, 200, 0, + 0, 203, 204, 0, 204, 201, 202, 0, 204, 205, + 206, 205, 206, 203, 0, 205, 206, 207, 0, 207, + 204, 204, 0, 207, 208, 208, 208, 205, 206, 0, + 208, 209, 210, 209, 210, 207, 0, 209, 210, 211, + 0, 211, 208, 0, 0, 211, 209, 0, 0, 209, + 210, 0, 212, 213, 212, 213, 0, 211, 212, 213, + + 0, 214, 215, 214, 215, 0, 212, 214, 215, 0, + 212, 213, 213, 0, 0, 0, 217, 0, 217, 214, + 215, 216, 217, 216, 218, 216, 218, 216, 0, 219, + 218, 219, 0, 0, 217, 219, 0, 0, 0, 216, + 217, 0, 218, 0, 220, 0, 220, 219, 0, 219, + 220, 221, 223, 221, 223, 221, 0, 221, 223, 224, + 0, 224, 220, 0, 0, 224, 0, 0, 0, 221, + 223, 223, 225, 0, 225, 0, 225, 224, 225, 226, + 227, 226, 227, 226, 0, 226, 227, 0, 0, 228, + 225, 228, 228, 0, 229, 228, 229, 226, 227, 230, + + 229, 230, 231, 0, 231, 230, 0, 228, 231, 0, + 0, 0, 229, 0, 0, 231, 232, 230, 232, 233, + 231, 233, 232, 230, 234, 233, 234, 247, 232, 247, + 234, 0, 0, 247, 232, 0, 233, 233, 248, 0, + 248, 0, 234, 234, 248, 247, 249, 250, 249, 250, + 0, 0, 249, 250, 0, 251, 248, 251, 0, 0, + 252, 251, 252, 0, 249, 250, 252, 0, 253, 0, + 253, 253, 0, 251, 253, 254, 0, 254, 252, 0, + 0, 254, 255, 0, 255, 256, 253, 256, 255, 254, + 255, 256, 257, 254, 257, 258, 0, 258, 257, 0, + + 255, 258, 0, 256, 256, 259, 260, 259, 260, 0, + 257, 259, 260, 258, 261, 262, 261, 262, 0, 0, + 261, 262, 0, 259, 260, 263, 0, 263, 0, 261, + 0, 263, 261, 262, 264, 0, 264, 262, 264, 265, + 264, 265, 266, 263, 266, 265, 0, 267, 266, 267, + 0, 0, 264, 267, 0, 0, 268, 265, 268, 0, + 266, 269, 268, 269, 0, 267, 270, 269, 270, 271, + 0, 271, 270, 0, 268, 271, 269, 0, 0, 269, + 273, 270, 273, 0, 270, 0, 273, 271, 271, 272, + 272, 272, 0, 0, 275, 272, 275, 274, 273, 274, + + 275, 274, 276, 274, 276, 0, 0, 272, 276, 0, + 0, 277, 275, 277, 0, 274, 279, 277, 279, 278, + 276, 278, 279, 278, 280, 278, 280, 0, 0, 277, + 280, 0, 0, 281, 279, 281, 0, 278, 282, 281, + 282, 283, 280, 283, 282, 0, 284, 283, 284, 0, + 281, 281, 284, 0, 0, 0, 282, 282, 0, 283, + 285, 286, 285, 286, 284, 284, 285, 286, 0, 287, + 285, 287, 0, 0, 288, 287, 288, 287, 285, 286, + 288, 0, 289, 0, 289, 0, 0, 287, 289, 290, + 0, 290, 288, 0, 0, 290, 291, 292, 291, 292, + + 289, 289, 291, 292, 293, 0, 293, 290, 0, 0, + 293, 294, 0, 294, 291, 292, 0, 294, 295, 296, + 295, 296, 293, 0, 295, 296, 297, 0, 297, 294, + 0, 0, 297, 298, 0, 298, 295, 296, 0, 298, + 299, 300, 299, 300, 297, 0, 299, 300, 301, 0, + 301, 298, 0, 0, 301, 0, 0, 299, 299, 300, + 301, 302, 0, 302, 0, 0, 301, 302, 303, 303, + 303, 306, 0, 306, 303, 0, 307, 306, 307, 302, + 0, 308, 307, 308, 302, 0, 303, 308, 0, 306, + 309, 311, 309, 311, 307, 0, 309, 311, 309, 308, + + 310, 310, 310, 0, 0, 0, 310, 0, 309, 311, + 311, 312, 0, 312, 313, 312, 313, 312, 310, 314, + 313, 314, 333, 0, 333, 314, 0, 0, 333, 312, + 0, 0, 313, 334, 0, 334, 0, 314, 313, 334, + 333, 335, 336, 335, 336, 0, 0, 335, 336, 0, + 334, 334, 337, 0, 337, 338, 0, 338, 337, 335, + 336, 338, 339, 340, 339, 340, 337, 338, 339, 340, + 337, 0, 341, 338, 341, 0, 0, 342, 341, 342, + 339, 340, 343, 342, 343, 0, 0, 344, 343, 344, + 341, 341, 345, 344, 345, 342, 0, 346, 345, 346, + + 343, 0, 347, 346, 347, 344, 0, 349, 347, 349, + 345, 346, 348, 349, 348, 346, 348, 350, 348, 350, + 347, 0, 351, 350, 351, 349, 349, 0, 351, 351, + 348, 0, 352, 0, 352, 350, 352, 353, 352, 353, + 351, 353, 354, 353, 354, 355, 0, 355, 354, 0, + 352, 355, 356, 0, 356, 353, 0, 0, 356, 0, + 354, 0, 357, 355, 357, 356, 357, 358, 357, 358, + 356, 0, 359, 358, 359, 360, 0, 360, 359, 358, + 357, 360, 0, 0, 0, 358, 361, 0, 361, 362, + 359, 362, 361, 360, 0, 362, 363, 361, 363, 364, + + 0, 364, 363, 0, 361, 364, 363, 362, 0, 362, + 365, 0, 365, 368, 363, 368, 365, 364, 366, 368, + 366, 0, 371, 368, 366, 0, 0, 0, 365, 0, + 0, 368, 369, 366, 369, 370, 366, 370, 369, 0, + 0, 370, 371, 0, 371, 369, 0, 0, 371, 372, + 369, 372, 373, 370, 373, 372, 0, 0, 373, 374, + 371, 374, 374, 0, 0, 374, 375, 372, 375, 376, + 373, 376, 375, 0, 377, 376, 377, 374, 377, 0, + 377, 0, 0, 0, 375, 375, 376, 376, 378, 379, + 378, 379, 377, 0, 378, 379, 379, 380, 381, 380, + + 0, 0, 0, 380, 0, 0, 378, 379, 380, 0, + 382, 383, 382, 383, 0, 380, 382, 383, 381, 0, + 381, 383, 0, 0, 381, 384, 0, 384, 382, 383, + 0, 384, 385, 386, 385, 386, 381, 0, 385, 386, + 387, 0, 387, 384, 0, 0, 387, 388, 0, 388, + 385, 386, 0, 388, 0, 389, 0, 389, 387, 0, + 387, 389, 390, 0, 390, 388, 0, 0, 390, 391, + 392, 391, 392, 389, 0, 391, 392, 393, 0, 393, + 390, 391, 0, 393, 394, 0, 394, 391, 392, 0, + 394, 395, 396, 395, 396, 393, 0, 395, 396, 398, + + 0, 398, 394, 0, 0, 398, 0, 402, 0, 395, + 396, 0, 399, 0, 399, 0, 399, 398, 399, 400, + 401, 400, 401, 400, 0, 400, 401, 402, 0, 402, + 399, 0, 401, 402, 403, 0, 403, 400, 401, 0, + 403, 405, 0, 405, 406, 402, 406, 405, 405, 407, + 406, 407, 403, 407, 408, 407, 408, 0, 408, 405, + 408, 0, 406, 409, 410, 409, 410, 407, 0, 409, + 410, 412, 408, 412, 410, 0, 0, 412, 413, 0, + 413, 409, 410, 0, 413, 414, 0, 414, 412, 412, + 0, 414, 416, 419, 416, 419, 413, 0, 416, 419, + + 420, 0, 420, 414, 0, 0, 420, 421, 0, 421, + 416, 419, 0, 421, 0, 422, 0, 422, 420, 0, + 421, 422, 424, 0, 424, 421, 0, 0, 424, 428, + 0, 428, 431, 422, 431, 428, 0, 435, 431, 435, + 424, 0, 0, 435, 0, 0, 0, 428, 428, 0, + 431, 0, 0, 0, 0, 435, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 444, 444, 445, 0, 445, + 445, 445, 445, 445, 445, 445, 445, 445, 446, 0, + 446, 446, 446, 446, 446, 446, 446, 446, 446, 447, + 447, 447, 447, 447, 447, 447, 448, 0, 448, 448, + + 448, 448, 448, 448, 448, 448, 448, 449, 0, 0, + 0, 449, 449, 449, 449, 449, 450, 0, 0, 0, + 0, 0, 0, 450, 452, 452, 452, 452, 452, 452, + 452, 452, 453, 453, 453, 453, 453, 453, 453, 453, + 453, 455, 455, 455, 455, 455, 455, 455, 455, 456, + 456, 0, 456, 456, 457, 457, 0, 457, 443, 443, + 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, + 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, + 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, + 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, + + 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, + 443, 443, 443, 443, 443, 443, 443, 443, 443 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int bx_flex_debug; +int bx_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *bxtext; +#line 1 "lexer.l" +#line 2 "lexer.l" +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#include +#include + +#ifdef WIN32 + #include + #define YY_NO_UNISTD_H +#endif + +#include "debug.h" +#if BX_DEBUGGER + +#include "parser.h" + +int bx_yyinput(char *buf, int max_size); +#undef YY_INPUT +#define YY_INPUT(buf, ret, max_size) (ret = bx_yyinput(buf, max_size)) + +static char *lex_input_ptr = NULL; +static unsigned lex_input_size = 0; + +#if BX_SUPPORT_X86_64 + #define LONG_MODE_8BL_REG(reg) \ + { bxlval.uval = reg; return(BX_TOKEN_8BL_REG); } + #define LONG_MODE_16B_REG(reg) \ + { bxlval.uval = reg; return(BX_TOKEN_16B_REG); } + #define LONG_MODE_32B_REG(reg) \ + { bxlval.uval = reg; return(BX_TOKEN_32B_REG); } + #define LONG_MODE_64B_REG(reg) \ + { bxlval.uval = reg; return(BX_TOKEN_64B_REG); } +#else + #define LONG_MODE_8BL_REG(reg) \ + { bxlval.sval = strdup(bxtext); return(BX_TOKEN_GENERIC); } + #define LONG_MODE_16B_REG(reg) \ + { bxlval.sval = strdup(bxtext); return(BX_TOKEN_GENERIC); } + #define LONG_MODE_32B_REG(reg) \ + { bxlval.sval = strdup(bxtext); return(BX_TOKEN_GENERIC); } + #define LONG_MODE_64B_REG(reg) \ + { bxlval.sval = strdup(bxtext); return(BX_TOKEN_GENERIC); } +#endif + + + +#line 1218 "" + +#define INITIAL 0 +#define EXAMINE 1 +#define DISASM 2 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int bxlex_destroy (void ); + +int bxget_debug (void ); + +void bxset_debug (int debug_flag ); + +YY_EXTRA_TYPE bxget_extra (void ); + +void bxset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *bxget_in (void ); + +void bxset_in (FILE * in_str ); + +FILE *bxget_out (void ); + +void bxset_out (FILE * out_str ); + +int bxget_leng (void ); + +char *bxget_text (void ); + +int bxget_lineno (void ); + +void bxset_lineno (int line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int bxwrap (void ); +#else +extern int bxwrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO fwrite( bxtext, bxleng, 1, bxout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + int n; \ + for ( n = 0; n < max_size && \ + (c = getc( bxin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( bxin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, bxin))==0 && ferror(bxin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(bxin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int bxlex (void); + +#define YY_DECL int bxlex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after bxtext and bxleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 51 "lexer.l" + +#line 1404 "" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! bxin ) + bxin = stdin; + + if ( ! bxout ) + bxout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + bxensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + bx_create_buffer(bxin,YY_BUF_SIZE ); + } + + bx_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of bxtext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 444 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 2459 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 52 "lexer.l" +; // eat up whitespace + YY_BREAK +case 2: +YY_RULE_SETUP +#line 53 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_SET); } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 54 "lexer.l" +{ bxlval.bval = 1; return(BX_TOKEN_ON); } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 55 "lexer.l" +{ bxlval.bval = 0; return(BX_TOKEN_OFF); } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 56 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_CRC); } + YY_BREAK +case 6: +#line 58 "lexer.l" +case 7: +#line 59 "lexer.l" +case 8: +YY_RULE_SETUP +#line 59 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_CONTINUE); } + YY_BREAK +case 9: +#line 61 "lexer.l" +case 10: +YY_RULE_SETUP +#line 61 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_STEPN); } + YY_BREAK +case 11: +#line 63 "lexer.l" +case 12: +#line 64 "lexer.l" +case 13: +YY_RULE_SETUP +#line 64 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_STEP_OVER); } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 65 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_LIST_BREAK); } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 66 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_VBREAKPOINT); } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 67 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_LBREAKPOINT); } + YY_BREAK +case 17: +#line 69 "lexer.l" +case 18: +#line 70 "lexer.l" +case 19: +YY_RULE_SETUP +#line 70 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_PBREAKPOINT); } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 71 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_INFO); } + YY_BREAK +case 21: +#line 73 "lexer.l" +case 22: +YY_RULE_SETUP +#line 73 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_CONTROL_REGS); } + YY_BREAK +case 23: +#line 75 "lexer.l" +case 24: +YY_RULE_SETUP +#line 75 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_DEBUG_REGS); } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 76 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_SEGMENT_REGS); } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 77 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_R); } + YY_BREAK +case 27: +#line 79 "lexer.l" +case 28: +YY_RULE_SETUP +#line 79 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_REGS); } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 80 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_FPU); } + YY_BREAK +case 30: +#line 82 "lexer.l" +case 31: +YY_RULE_SETUP +#line 82 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_SSE); } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 83 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_MMX); } + YY_BREAK +case 33: +YY_RULE_SETUP +#line 84 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_CPU); } + YY_BREAK +case 34: +YY_RULE_SETUP +#line 85 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_IDT); } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 86 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_IVT); } + YY_BREAK +case 36: +YY_RULE_SETUP +#line 87 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_GDT); } + YY_BREAK +case 37: +YY_RULE_SETUP +#line 88 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_LDT); } + YY_BREAK +case 38: +YY_RULE_SETUP +#line 89 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_TSS); } + YY_BREAK +case 39: +YY_RULE_SETUP +#line 90 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_TAB); } + YY_BREAK +case 40: +YY_RULE_SETUP +#line 91 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_LINUX); } + YY_BREAK +case 41: +#line 93 "lexer.l" +case 42: +#line 94 "lexer.l" +case 43: +YY_RULE_SETUP +#line 94 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_DEL_BREAKPOINT); } + YY_BREAK +case 44: +YY_RULE_SETUP +#line 95 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_ENABLE_BREAKPOINT); } + YY_BREAK +case 45: +YY_RULE_SETUP +#line 96 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_DISABLE_BREAKPOINT); } + YY_BREAK +case 46: +#line 98 "lexer.l" +case 47: +#line 99 "lexer.l" +case 48: +YY_RULE_SETUP +#line 99 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_QUIT); } + YY_BREAK +case 49: +#line 101 "lexer.l" +case 50: +YY_RULE_SETUP +#line 101 "lexer.l" +{ BEGIN(EXAMINE); bxlval.sval = strdup(bxtext); return(BX_TOKEN_EXAMINE); } + YY_BREAK +case 51: +YY_RULE_SETUP +#line 102 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_RESTORE); } + YY_BREAK +case 52: +YY_RULE_SETUP +#line 103 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_SETPMEM); } + YY_BREAK +case 53: +YY_RULE_SETUP +#line 104 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_QUERY); } + YY_BREAK +case 54: +YY_RULE_SETUP +#line 105 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_PENDING); } + YY_BREAK +case 55: +YY_RULE_SETUP +#line 106 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_TAKE); } + YY_BREAK +case 56: +YY_RULE_SETUP +#line 107 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_DMA); } + YY_BREAK +case 57: +YY_RULE_SETUP +#line 108 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_IRQ); } + YY_BREAK +case 58: +YY_RULE_SETUP +#line 109 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_PIC); } + YY_BREAK +case 59: +#line 111 "lexer.l" +case 60: +YY_RULE_SETUP +#line 111 "lexer.l" +{ BEGIN(DISASM); bxlval.sval = strdup(bxtext); return(BX_TOKEN_DISASM); } + YY_BREAK +case 61: +YY_RULE_SETUP +#line 112 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_HEX); } + YY_BREAK +case 62: +YY_RULE_SETUP +#line 113 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_INSTRUMENT); } + YY_BREAK +case 63: +YY_RULE_SETUP +#line 114 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_STOP); } + YY_BREAK +case 64: +YY_RULE_SETUP +#line 115 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_DOIT); } + YY_BREAK +case 65: +YY_RULE_SETUP +#line 116 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_TRACE); } + YY_BREAK +case 66: +YY_RULE_SETUP +#line 117 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_TRACEREG); } + YY_BREAK +case 67: +YY_RULE_SETUP +#line 118 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_TRACEMEM); } + YY_BREAK +case 68: +YY_RULE_SETUP +#line 119 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_SWITCH_MODE); } + YY_BREAK +case 69: +YY_RULE_SETUP +#line 120 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_SIZE); } + YY_BREAK +case 70: +YY_RULE_SETUP +#line 121 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_PTIME); } + YY_BREAK +case 71: +YY_RULE_SETUP +#line 122 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_TIMEBP); } + YY_BREAK +case 72: +YY_RULE_SETUP +#line 123 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_TIMEBP_ABSOLUTE); } + YY_BREAK +case 73: +YY_RULE_SETUP +#line 124 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_RECORD); } + YY_BREAK +case 74: +YY_RULE_SETUP +#line 125 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_PLAYBACK); } + YY_BREAK +case 75: +YY_RULE_SETUP +#line 126 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_MODEBP); } + YY_BREAK +case 76: +YY_RULE_SETUP +#line 127 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_PRINT_STACK); } + YY_BREAK +case 77: +YY_RULE_SETUP +#line 128 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_WATCH); } + YY_BREAK +case 78: +YY_RULE_SETUP +#line 129 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_UNWATCH); } + YY_BREAK +case 79: +YY_RULE_SETUP +#line 130 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_READ); } + YY_BREAK +case 80: +YY_RULE_SETUP +#line 131 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_WRITE); } + YY_BREAK +case 81: +YY_RULE_SETUP +#line 132 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_SHOW); } + YY_BREAK +case 82: +YY_RULE_SETUP +#line 133 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_LOAD_SYMBOLS); } + YY_BREAK +case 83: +YY_RULE_SETUP +#line 134 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_SYMBOLS); } + YY_BREAK +case 84: +YY_RULE_SETUP +#line 135 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_LIST_SYMBOLS); } + YY_BREAK +case 85: +YY_RULE_SETUP +#line 136 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_GLOBAL); } + YY_BREAK +case 86: +YY_RULE_SETUP +#line 137 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_WHERE); } + YY_BREAK +case 87: +YY_RULE_SETUP +#line 138 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_PRINT_STRING); } + YY_BREAK +case 88: +YY_RULE_SETUP +#line 139 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_NE2000); } + YY_BREAK +case 89: +YY_RULE_SETUP +#line 140 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_PAGE); } + YY_BREAK +case 90: +YY_RULE_SETUP +#line 141 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_VGA); } + YY_BREAK +case 91: +YY_RULE_SETUP +#line 142 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_PCI); } + YY_BREAK +case 92: +YY_RULE_SETUP +#line 143 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_ALL); } + YY_BREAK +case 93: +YY_RULE_SETUP +#line 144 "lexer.l" +{ bxlval.uval = BX_DBG_REG8L_AL; return(BX_TOKEN_8BL_REG);} + YY_BREAK +case 94: +YY_RULE_SETUP +#line 145 "lexer.l" +{ bxlval.uval = BX_DBG_REG8L_BL; return(BX_TOKEN_8BL_REG);} + YY_BREAK +case 95: +YY_RULE_SETUP +#line 146 "lexer.l" +{ bxlval.uval = BX_DBG_REG8L_CL; return(BX_TOKEN_8BL_REG);} + YY_BREAK +case 96: +YY_RULE_SETUP +#line 147 "lexer.l" +{ bxlval.uval = BX_DBG_REG8L_DL; return(BX_TOKEN_8BL_REG);} + YY_BREAK +case 97: +YY_RULE_SETUP +#line 148 "lexer.l" +{ LONG_MODE_8BL_REG(BX_DBG_REG8L_SIL); } + YY_BREAK +case 98: +YY_RULE_SETUP +#line 149 "lexer.l" +{ LONG_MODE_8BL_REG(BX_DBG_REG8L_DIL); } + YY_BREAK +case 99: +YY_RULE_SETUP +#line 150 "lexer.l" +{ LONG_MODE_8BL_REG(BX_DBG_REG8L_SPL); } + YY_BREAK +case 100: +YY_RULE_SETUP +#line 151 "lexer.l" +{ LONG_MODE_8BL_REG(BX_DBG_REG8L_BPL); } + YY_BREAK +case 101: +YY_RULE_SETUP +#line 152 "lexer.l" +{ LONG_MODE_8BL_REG(BX_DBG_REG8L_R8); } + YY_BREAK +case 102: +YY_RULE_SETUP +#line 153 "lexer.l" +{ LONG_MODE_8BL_REG(BX_DBG_REG8L_R9); } + YY_BREAK +case 103: +YY_RULE_SETUP +#line 154 "lexer.l" +{ LONG_MODE_8BL_REG(BX_DBG_REG8L_R10); } + YY_BREAK +case 104: +YY_RULE_SETUP +#line 155 "lexer.l" +{ LONG_MODE_8BL_REG(BX_DBG_REG8L_R11); } + YY_BREAK +case 105: +YY_RULE_SETUP +#line 156 "lexer.l" +{ LONG_MODE_8BL_REG(BX_DBG_REG8L_R12); } + YY_BREAK +case 106: +YY_RULE_SETUP +#line 157 "lexer.l" +{ LONG_MODE_8BL_REG(BX_DBG_REG8L_R13); } + YY_BREAK +case 107: +YY_RULE_SETUP +#line 158 "lexer.l" +{ LONG_MODE_8BL_REG(BX_DBG_REG8L_R14); } + YY_BREAK +case 108: +YY_RULE_SETUP +#line 159 "lexer.l" +{ LONG_MODE_8BL_REG(BX_DBG_REG8L_R15); } + YY_BREAK +case 109: +YY_RULE_SETUP +#line 160 "lexer.l" +{ bxlval.uval = BX_DBG_REG8H_AH; return(BX_TOKEN_8BH_REG);} + YY_BREAK +case 110: +YY_RULE_SETUP +#line 161 "lexer.l" +{ bxlval.uval = BX_DBG_REG8H_BH; return(BX_TOKEN_8BH_REG);} + YY_BREAK +case 111: +YY_RULE_SETUP +#line 162 "lexer.l" +{ bxlval.uval = BX_DBG_REG8H_CH; return(BX_TOKEN_8BH_REG);} + YY_BREAK +case 112: +YY_RULE_SETUP +#line 163 "lexer.l" +{ bxlval.uval = BX_DBG_REG8H_DH; return(BX_TOKEN_8BH_REG);} + YY_BREAK +case 113: +YY_RULE_SETUP +#line 164 "lexer.l" +{ bxlval.uval = BX_DBG_REG16_AX; return(BX_TOKEN_16B_REG);} + YY_BREAK +case 114: +YY_RULE_SETUP +#line 165 "lexer.l" +{ bxlval.uval = BX_DBG_REG16_BX; return(BX_TOKEN_16B_REG);} + YY_BREAK +case 115: +YY_RULE_SETUP +#line 166 "lexer.l" +{ bxlval.uval = BX_DBG_REG16_CX; return(BX_TOKEN_16B_REG);} + YY_BREAK +case 116: +YY_RULE_SETUP +#line 167 "lexer.l" +{ bxlval.uval = BX_DBG_REG16_DX; return(BX_TOKEN_16B_REG);} + YY_BREAK +case 117: +YY_RULE_SETUP +#line 168 "lexer.l" +{ bxlval.uval = BX_DBG_REG16_SI; return(BX_TOKEN_16B_REG);} + YY_BREAK +case 118: +YY_RULE_SETUP +#line 169 "lexer.l" +{ bxlval.uval = BX_DBG_REG16_DI; return(BX_TOKEN_16B_REG);} + YY_BREAK +case 119: +YY_RULE_SETUP +#line 170 "lexer.l" +{ bxlval.uval = BX_DBG_REG16_BP; return(BX_TOKEN_16B_REG);} + YY_BREAK +case 120: +YY_RULE_SETUP +#line 171 "lexer.l" +{ bxlval.uval = BX_DBG_REG16_SP; return(BX_TOKEN_16B_REG);} + YY_BREAK +case 121: +YY_RULE_SETUP +#line 172 "lexer.l" +{ LONG_MODE_16B_REG(BX_DBG_REG16_R8); } + YY_BREAK +case 122: +YY_RULE_SETUP +#line 173 "lexer.l" +{ LONG_MODE_16B_REG(BX_DBG_REG16_R9); } + YY_BREAK +case 123: +YY_RULE_SETUP +#line 174 "lexer.l" +{ LONG_MODE_16B_REG(BX_DBG_REG16_R10); } + YY_BREAK +case 124: +YY_RULE_SETUP +#line 175 "lexer.l" +{ LONG_MODE_16B_REG(BX_DBG_REG16_R11); } + YY_BREAK +case 125: +YY_RULE_SETUP +#line 176 "lexer.l" +{ LONG_MODE_16B_REG(BX_DBG_REG16_R12); } + YY_BREAK +case 126: +YY_RULE_SETUP +#line 177 "lexer.l" +{ LONG_MODE_16B_REG(BX_DBG_REG16_R13); } + YY_BREAK +case 127: +YY_RULE_SETUP +#line 178 "lexer.l" +{ LONG_MODE_16B_REG(BX_DBG_REG16_R14); } + YY_BREAK +case 128: +YY_RULE_SETUP +#line 179 "lexer.l" +{ LONG_MODE_16B_REG(BX_DBG_REG16_R15); } + YY_BREAK +case 129: +YY_RULE_SETUP +#line 180 "lexer.l" +{ bxlval.uval = BX_DBG_REG32_EAX; return(BX_TOKEN_32B_REG);} + YY_BREAK +case 130: +YY_RULE_SETUP +#line 181 "lexer.l" +{ bxlval.uval = BX_DBG_REG32_EBX; return(BX_TOKEN_32B_REG);} + YY_BREAK +case 131: +YY_RULE_SETUP +#line 182 "lexer.l" +{ bxlval.uval = BX_DBG_REG32_ECX; return(BX_TOKEN_32B_REG);} + YY_BREAK +case 132: +YY_RULE_SETUP +#line 183 "lexer.l" +{ bxlval.uval = BX_DBG_REG32_EDX; return(BX_TOKEN_32B_REG);} + YY_BREAK +case 133: +YY_RULE_SETUP +#line 184 "lexer.l" +{ bxlval.uval = BX_DBG_REG32_ESI; return(BX_TOKEN_32B_REG);} + YY_BREAK +case 134: +YY_RULE_SETUP +#line 185 "lexer.l" +{ bxlval.uval = BX_DBG_REG32_EDI; return(BX_TOKEN_32B_REG);} + YY_BREAK +case 135: +YY_RULE_SETUP +#line 186 "lexer.l" +{ bxlval.uval = BX_DBG_REG32_EBP; return(BX_TOKEN_32B_REG);} + YY_BREAK +case 136: +YY_RULE_SETUP +#line 187 "lexer.l" +{ bxlval.uval = BX_DBG_REG32_ESP; return(BX_TOKEN_32B_REG);} + YY_BREAK +case 137: +YY_RULE_SETUP +#line 188 "lexer.l" +{ LONG_MODE_32B_REG(BX_DBG_REG32_R8); } + YY_BREAK +case 138: +YY_RULE_SETUP +#line 189 "lexer.l" +{ LONG_MODE_32B_REG(BX_DBG_REG32_R9); } + YY_BREAK +case 139: +YY_RULE_SETUP +#line 190 "lexer.l" +{ LONG_MODE_32B_REG(BX_DBG_REG32_R10); } + YY_BREAK +case 140: +YY_RULE_SETUP +#line 191 "lexer.l" +{ LONG_MODE_32B_REG(BX_DBG_REG32_R11); } + YY_BREAK +case 141: +YY_RULE_SETUP +#line 192 "lexer.l" +{ LONG_MODE_32B_REG(BX_DBG_REG32_R12); } + YY_BREAK +case 142: +YY_RULE_SETUP +#line 193 "lexer.l" +{ LONG_MODE_32B_REG(BX_DBG_REG32_R13); } + YY_BREAK +case 143: +YY_RULE_SETUP +#line 194 "lexer.l" +{ LONG_MODE_32B_REG(BX_DBG_REG32_R14); } + YY_BREAK +case 144: +YY_RULE_SETUP +#line 195 "lexer.l" +{ LONG_MODE_32B_REG(BX_DBG_REG32_R15); } + YY_BREAK +case 145: +YY_RULE_SETUP +#line 196 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_RAX); } + YY_BREAK +case 146: +YY_RULE_SETUP +#line 197 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_RBX); } + YY_BREAK +case 147: +YY_RULE_SETUP +#line 198 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_RCX); } + YY_BREAK +case 148: +YY_RULE_SETUP +#line 199 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_RDX); } + YY_BREAK +case 149: +YY_RULE_SETUP +#line 200 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_RSI); } + YY_BREAK +case 150: +YY_RULE_SETUP +#line 201 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_RDI); } + YY_BREAK +case 151: +YY_RULE_SETUP +#line 202 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_RSP); } + YY_BREAK +case 152: +YY_RULE_SETUP +#line 203 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_RBP); } + YY_BREAK +case 153: +YY_RULE_SETUP +#line 204 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_R8); } + YY_BREAK +case 154: +YY_RULE_SETUP +#line 205 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_R9); } + YY_BREAK +case 155: +YY_RULE_SETUP +#line 206 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_R10); } + YY_BREAK +case 156: +YY_RULE_SETUP +#line 207 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_R11); } + YY_BREAK +case 157: +YY_RULE_SETUP +#line 208 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_R12); } + YY_BREAK +case 158: +YY_RULE_SETUP +#line 209 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_R13); } + YY_BREAK +case 159: +YY_RULE_SETUP +#line 210 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_R14); } + YY_BREAK +case 160: +YY_RULE_SETUP +#line 211 "lexer.l" +{ LONG_MODE_64B_REG(BX_DBG_REG64_R15); } + YY_BREAK +case 161: +YY_RULE_SETUP +#line 212 "lexer.l" +{ return(BX_TOKEN_REG_IP); } + YY_BREAK +case 162: +YY_RULE_SETUP +#line 213 "lexer.l" +{ return(BX_TOKEN_REG_EIP);} + YY_BREAK +case 163: +YY_RULE_SETUP +#line 214 "lexer.l" +{ return(BX_TOKEN_REG_RIP);} + YY_BREAK +case 164: +YY_RULE_SETUP +#line 215 "lexer.l" +{ bxlval.uval = BX_DBG_SREG_CS; return(BX_TOKEN_CS); } + YY_BREAK +case 165: +YY_RULE_SETUP +#line 216 "lexer.l" +{ bxlval.uval = BX_DBG_SREG_ES; return(BX_TOKEN_ES); } + YY_BREAK +case 166: +YY_RULE_SETUP +#line 217 "lexer.l" +{ bxlval.uval = BX_DBG_SREG_SS; return(BX_TOKEN_SS); } + YY_BREAK +case 167: +YY_RULE_SETUP +#line 218 "lexer.l" +{ bxlval.uval = BX_DBG_SREG_DS; return(BX_TOKEN_DS); } + YY_BREAK +case 168: +YY_RULE_SETUP +#line 219 "lexer.l" +{ bxlval.uval = BX_DBG_SREG_FS; return(BX_TOKEN_FS); } + YY_BREAK +case 169: +YY_RULE_SETUP +#line 220 "lexer.l" +{ bxlval.uval = BX_DBG_SREG_GS; return(BX_TOKEN_GS); } + YY_BREAK +case 170: +YY_RULE_SETUP +#line 221 "lexer.l" +{ bxlval.uval = 0; return (BX_TOKEN_FLAGS); } + YY_BREAK +case 171: +YY_RULE_SETUP +#line 222 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_HELP); } + YY_BREAK +case 172: +#line 224 "lexer.l" +case 173: +YY_RULE_SETUP +#line 224 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_CALC); } + YY_BREAK +case 174: +YY_RULE_SETUP +#line 225 "lexer.l" +{ BEGIN(INITIAL); bxlval.sval = strdup(bxtext); return(BX_TOKEN_XFORMAT); } + YY_BREAK +case 175: +YY_RULE_SETUP +#line 226 "lexer.l" +{ BEGIN(INITIAL); bxlval.sval = strdup(bxtext); return(BX_TOKEN_XFORMAT); } + YY_BREAK +case 176: +YY_RULE_SETUP +#line 227 "lexer.l" +{ BEGIN(INITIAL); bxlval.sval = strdup(bxtext); return(BX_TOKEN_DISFORMAT); } + YY_BREAK +case 177: +YY_RULE_SETUP +#line 228 "lexer.l" +{ return ('+'); } + YY_BREAK +case 178: +YY_RULE_SETUP +#line 229 "lexer.l" +{ return ('-'); } + YY_BREAK +case 179: +YY_RULE_SETUP +#line 230 "lexer.l" +{ return ('*'); } + YY_BREAK +case 180: +YY_RULE_SETUP +#line 231 "lexer.l" +{ return ('/'); } + YY_BREAK +case 181: +YY_RULE_SETUP +#line 232 "lexer.l" +{ return (BX_TOKEN_RSHIFT); } + YY_BREAK +case 182: +YY_RULE_SETUP +#line 233 "lexer.l" +{ return (BX_TOKEN_LSHIFT); } + YY_BREAK +case 183: +YY_RULE_SETUP +#line 234 "lexer.l" +{ return ('&'); } + YY_BREAK +case 184: +YY_RULE_SETUP +#line 235 "lexer.l" +{ return ('|'); } + YY_BREAK +case 185: +YY_RULE_SETUP +#line 236 "lexer.l" +{ return ('^'); } + YY_BREAK +case 186: +YY_RULE_SETUP +#line 237 "lexer.l" +{ return ('!'); } + YY_BREAK +case 187: +YY_RULE_SETUP +#line 238 "lexer.l" +{ return ('@'); } + YY_BREAK +case 188: +YY_RULE_SETUP +#line 239 "lexer.l" +{ return ('('); } + YY_BREAK +case 189: +YY_RULE_SETUP +#line 240 "lexer.l" +{ return (')'); } + YY_BREAK +case 190: +#line 242 "lexer.l" +case 191: +YY_RULE_SETUP +#line 242 "lexer.l" +{ bxlval.sval = strdup(bxtext+1); bxlval.sval[strlen(bxlval.sval)-1] = 0; return(BX_TOKEN_STRING); } + YY_BREAK +case 192: +YY_RULE_SETUP +#line 243 "lexer.l" +{ bxlval.uval = strtoull(bxtext, NULL, 16); return(BX_TOKEN_NUMERIC); } + YY_BREAK +case 193: +YY_RULE_SETUP +#line 244 "lexer.l" +{ bxlval.uval = strtoull(bxtext, NULL, 8); return(BX_TOKEN_NUMERIC); } + YY_BREAK +case 194: +YY_RULE_SETUP +#line 245 "lexer.l" +{ bxlval.uval = strtoull(bxtext, NULL, 10); return(BX_TOKEN_NUMERIC); } + YY_BREAK +case 195: +YY_RULE_SETUP +#line 246 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_COMMAND); } + YY_BREAK +case 196: +YY_RULE_SETUP +#line 247 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_SYMBOLNAME); } + YY_BREAK +case 197: +YY_RULE_SETUP +#line 248 "lexer.l" +{ bxlval.sval = strdup(bxtext); return(BX_TOKEN_GENERIC); } + YY_BREAK +case 198: +YY_RULE_SETUP +#line 249 "lexer.l" +{ return ('\n'); } + YY_BREAK +case 199: +/* rule 199 can match eol */ +YY_RULE_SETUP +#line 250 "lexer.l" +{ return ('\n'); } + YY_BREAK +case 200: +YY_RULE_SETUP +#line 251 "lexer.l" +; // eat up comments '//' + YY_BREAK +case 201: +YY_RULE_SETUP +#line 252 "lexer.l" +{ return(bxtext[0]); } + YY_BREAK +case 202: +YY_RULE_SETUP +#line 253 "lexer.l" +{ BEGIN(INITIAL); unput(*bxtext); } + YY_BREAK +case 203: +YY_RULE_SETUP +#line 254 "lexer.l" +ECHO; + YY_BREAK +#line 2446 "" +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(EXAMINE): +case YY_STATE_EOF(DISASM): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed bxin at a new source and called + * bxlex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = bxin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( bxwrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * bxtext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of bxlex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + bxrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + bxrestart(bxin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) bxrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 444 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + register int yy_is_jam; + register char *yy_cp = (yy_c_buf_p); + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 444 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 443); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up bxtext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register int number_to_move = (yy_n_chars) + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + bxrestart(bxin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( bxwrap( ) ) + return EOF; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve bxtext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void bxrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + bxensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + bx_create_buffer(bxin,YY_BUF_SIZE ); + } + + bx_init_buffer(YY_CURRENT_BUFFER,input_file ); + bx_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void bx_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * bxpop_buffer_state(); + * bxpush_buffer_state(new_buffer); + */ + bxensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + bx_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (bxwrap()) processing, but the only time this flag + * is looked at is after bxwrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void bx_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + bxin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE bx_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) bxalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in bx_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) bxalloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in bx_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + bx_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with bx_create_buffer() + * + */ + void bx_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + bxfree((void *) b->yy_ch_buf ); + + bxfree((void *) b ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a bxrestart() or at EOF. + */ + static void bx_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + bx_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then bx_init_buffer was _probably_ + * called from bxrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void bx_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + bx_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void bxpush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + bxensure_buffer_stack(); + + /* This block is copied from bx_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from bx_switch_to_buffer. */ + bx_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void bxpop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + bx_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + bx_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void bxensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)bxalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in bxensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)bxrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in bxensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE bx_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) bxalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in bx_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + bx_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to bxlex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * bx_scan_bytes() instead. + */ +YY_BUFFER_STATE bx_scan_string (yyconst char * yystr ) +{ + + return bx_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to bxlex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE bx_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) bxalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in bx_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = bx_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in bx_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up bxtext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + bxtext[bxleng] = (yy_hold_char); \ + (yy_c_buf_p) = bxtext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + bxleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int bxget_lineno (void) +{ + + return bxlineno; +} + +/** Get the input stream. + * + */ +FILE *bxget_in (void) +{ + return bxin; +} + +/** Get the output stream. + * + */ +FILE *bxget_out (void) +{ + return bxout; +} + +/** Get the length of the current token. + * + */ +int bxget_leng (void) +{ + return bxleng; +} + +/** Get the current token. + * + */ + +char *bxget_text (void) +{ + return bxtext; +} + +/** Set the current line number. + * @param line_number + * + */ +void bxset_lineno (int line_number ) +{ + + bxlineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see bx_switch_to_buffer + */ +void bxset_in (FILE * in_str ) +{ + bxin = in_str ; +} + +void bxset_out (FILE * out_str ) +{ + bxout = out_str ; +} + +int bxget_debug (void) +{ + return bx_flex_debug; +} + +void bxset_debug (int bdebug ) +{ + bx_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from bxlex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + bxin = stdin; + bxout = stdout; +#else + bxin = (FILE *) 0; + bxout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * bxlex_init() + */ + return 0; +} + +/* bxlex_destroy is for both reentrant and non-reentrant scanners. */ +int bxlex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + bx_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + bxpop_buffer_state(); + } + + /* Destroy the stack itself. */ + bxfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * bxlex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *bxalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *bxrealloc (void * ptr, yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void bxfree (void * ptr ) +{ + free( (char *) ptr ); /* see bxrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 254 "lexer.l" + + + + int +bx_yyinput(char *buf, int max_size) +{ + int len; + + if (lex_input_size == 0) { + fprintf(stderr, "lex: no characters in string input buffer.\n"); + exit(1); + } + + len = strlen(lex_input_ptr) + 1; + if (len > max_size) + len = max_size; + + memcpy(buf, lex_input_ptr, len); + + return(len); +} + + void +bx_add_lex_input(char *buf) +{ + lex_input_ptr = buf; + lex_input_size = strlen(buf); + + // Since we're parsing from strings, flush out + // all current buffer state, so the next read + // requests from yyinput + + bx_flush_buffer( YY_CURRENT_BUFFER ); +} + +#endif /* if BX_DEBUGGER */ + diff --git a/bochs/bx_debug/lexer.l b/bochs/bx_debug/lexer.l new file mode 100644 index 00000000..ba69aca6 --- /dev/null +++ b/bochs/bx_debug/lexer.l @@ -0,0 +1,288 @@ +%{ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#include +#include + +#ifdef WIN32 + #include + #define YY_NO_UNISTD_H +#endif + +#include "debug.h" +#if BX_DEBUGGER + +#include "parser.h" + +int bx_yyinput(char *buf, int max_size); +#undef YY_INPUT +#define YY_INPUT(buf, ret, max_size) (ret = bx_yyinput(buf, max_size)) + +static char *lex_input_ptr = NULL; +static unsigned lex_input_size = 0; + +#if BX_SUPPORT_X86_64 + #define LONG_MODE_8BL_REG(reg) \ + { bxlval.uval = reg; return(BX_TOKEN_8BL_REG); } + #define LONG_MODE_16B_REG(reg) \ + { bxlval.uval = reg; return(BX_TOKEN_16B_REG); } + #define LONG_MODE_32B_REG(reg) \ + { bxlval.uval = reg; return(BX_TOKEN_32B_REG); } + #define LONG_MODE_64B_REG(reg) \ + { bxlval.uval = reg; return(BX_TOKEN_64B_REG); } +#else + #define LONG_MODE_8BL_REG(reg) \ + { bxlval.sval = strdup(bxtext); return(BX_TOKEN_GENERIC); } + #define LONG_MODE_16B_REG(reg) \ + { bxlval.sval = strdup(bxtext); return(BX_TOKEN_GENERIC); } + #define LONG_MODE_32B_REG(reg) \ + { bxlval.sval = strdup(bxtext); return(BX_TOKEN_GENERIC); } + #define LONG_MODE_64B_REG(reg) \ + { bxlval.sval = strdup(bxtext); return(BX_TOKEN_GENERIC); } +#endif + +%} + +%x EXAMINE +%x DISASM + +%% +<*>[ \t]+ ; // eat up whitespace +set { bxlval.sval = strdup(bxtext); return(BX_TOKEN_SET); } +on { bxlval.bval = 1; return(BX_TOKEN_ON); } +off { bxlval.bval = 0; return(BX_TOKEN_OFF); } +crc { bxlval.sval = strdup(bxtext); return(BX_TOKEN_CRC); } +c | +cont | +continue { bxlval.sval = strdup(bxtext); return(BX_TOKEN_CONTINUE); } +step | +s { bxlval.sval = strdup(bxtext); return(BX_TOKEN_STEPN); } +next | +n | +p { bxlval.sval = strdup(bxtext); return(BX_TOKEN_STEP_OVER); } +blist { bxlval.sval = strdup(bxtext); return(BX_TOKEN_LIST_BREAK); } +vb|vbreak { bxlval.sval = strdup(bxtext); return(BX_TOKEN_VBREAKPOINT); } +lb|lbreak { bxlval.sval = strdup(bxtext); return(BX_TOKEN_LBREAKPOINT); } +break | +b|pb | +pbreak { bxlval.sval = strdup(bxtext); return(BX_TOKEN_PBREAKPOINT); } +info { bxlval.sval = strdup(bxtext); return(BX_TOKEN_INFO); } +cr | +creg { bxlval.sval = strdup(bxtext); return(BX_TOKEN_CONTROL_REGS); } +dr | +dreg { bxlval.sval = strdup(bxtext); return(BX_TOKEN_DEBUG_REGS); } +sreg { bxlval.sval = strdup(bxtext); return(BX_TOKEN_SEGMENT_REGS); } +r { bxlval.sval = strdup(bxtext); return(BX_TOKEN_R); } +reg|regs | +registers { bxlval.sval = strdup(bxtext); return(BX_TOKEN_REGS); } +fp|fpu { bxlval.sval = strdup(bxtext); return(BX_TOKEN_FPU); } +sse | +xmm { bxlval.sval = strdup(bxtext); return(BX_TOKEN_SSE); } +mmx { bxlval.sval = strdup(bxtext); return(BX_TOKEN_MMX); } +cpu { bxlval.sval = strdup(bxtext); return(BX_TOKEN_CPU); } +idt { bxlval.sval = strdup(bxtext); return(BX_TOKEN_IDT); } +ivt { bxlval.sval = strdup(bxtext); return(BX_TOKEN_IVT); } +gdt { bxlval.sval = strdup(bxtext); return(BX_TOKEN_GDT); } +ldt { bxlval.sval = strdup(bxtext); return(BX_TOKEN_LDT); } +tss { bxlval.sval = strdup(bxtext); return(BX_TOKEN_TSS); } +tab { bxlval.sval = strdup(bxtext); return(BX_TOKEN_TAB); } +linux { bxlval.sval = strdup(bxtext); return(BX_TOKEN_LINUX); } +delete | +del | +d { bxlval.sval = strdup(bxtext); return(BX_TOKEN_DEL_BREAKPOINT); } +bpe { bxlval.sval = strdup(bxtext); return(BX_TOKEN_ENABLE_BREAKPOINT); } +bpd { bxlval.sval = strdup(bxtext); return(BX_TOKEN_DISABLE_BREAKPOINT); } +quit | +exit | +q { bxlval.sval = strdup(bxtext); return(BX_TOKEN_QUIT); } +x | +xp { BEGIN(EXAMINE); bxlval.sval = strdup(bxtext); return(BX_TOKEN_EXAMINE); } +restore { bxlval.sval = strdup(bxtext); return(BX_TOKEN_RESTORE); } +setpmem { bxlval.sval = strdup(bxtext); return(BX_TOKEN_SETPMEM); } +query { bxlval.sval = strdup(bxtext); return(BX_TOKEN_QUERY); } +pending { bxlval.sval = strdup(bxtext); return(BX_TOKEN_PENDING); } +take { bxlval.sval = strdup(bxtext); return(BX_TOKEN_TAKE); } +dma { bxlval.sval = strdup(bxtext); return(BX_TOKEN_DMA); } +irq { bxlval.sval = strdup(bxtext); return(BX_TOKEN_IRQ); } +pic { bxlval.sval = strdup(bxtext); return(BX_TOKEN_PIC); } +u | +disasm { BEGIN(DISASM); bxlval.sval = strdup(bxtext); return(BX_TOKEN_DISASM); } +hex { bxlval.sval = strdup(bxtext); return(BX_TOKEN_HEX); } +instrument { bxlval.sval = strdup(bxtext); return(BX_TOKEN_INSTRUMENT); } +stop { bxlval.sval = strdup(bxtext); return(BX_TOKEN_STOP); } +doit { bxlval.sval = strdup(bxtext); return(BX_TOKEN_DOIT); } +trace { bxlval.sval = strdup(bxtext); return(BX_TOKEN_TRACE); } +trace-reg { bxlval.sval = strdup(bxtext); return(BX_TOKEN_TRACEREG); } +trace-mem { bxlval.sval = strdup(bxtext); return(BX_TOKEN_TRACEMEM); } +switch-mode { bxlval.sval = strdup(bxtext); return(BX_TOKEN_SWITCH_MODE); } +size { bxlval.sval = strdup(bxtext); return(BX_TOKEN_SIZE); } +ptime { bxlval.sval = strdup(bxtext); return(BX_TOKEN_PTIME); } +sb { bxlval.sval = strdup(bxtext); return(BX_TOKEN_TIMEBP); } +sba { bxlval.sval = strdup(bxtext); return(BX_TOKEN_TIMEBP_ABSOLUTE); } +record { bxlval.sval = strdup(bxtext); return(BX_TOKEN_RECORD); } +playback { bxlval.sval = strdup(bxtext); return(BX_TOKEN_PLAYBACK); } +modebp { bxlval.sval = strdup(bxtext); return(BX_TOKEN_MODEBP); } +print-stack { bxlval.sval = strdup(bxtext); return(BX_TOKEN_PRINT_STACK); } +watch { bxlval.sval = strdup(bxtext); return(BX_TOKEN_WATCH); } +unwatch { bxlval.sval = strdup(bxtext); return(BX_TOKEN_UNWATCH); } +read { bxlval.sval = strdup(bxtext); return(BX_TOKEN_READ); } +w|write { bxlval.sval = strdup(bxtext); return(BX_TOKEN_WRITE); } +show { bxlval.sval = strdup(bxtext); return(BX_TOKEN_SHOW); } +ldsym { bxlval.sval = strdup(bxtext); return(BX_TOKEN_LOAD_SYMBOLS); } +symbols { bxlval.sval = strdup(bxtext); return(BX_TOKEN_SYMBOLS); } +slist { bxlval.sval = strdup(bxtext); return(BX_TOKEN_LIST_SYMBOLS); } +global { bxlval.sval = strdup(bxtext); return(BX_TOKEN_GLOBAL); } +where { bxlval.sval = strdup(bxtext); return(BX_TOKEN_WHERE); } +print-string { bxlval.sval = strdup(bxtext); return(BX_TOKEN_PRINT_STRING); } +ne2k|ne2000 { bxlval.sval = strdup(bxtext); return(BX_TOKEN_NE2000); } +page { bxlval.sval = strdup(bxtext); return(BX_TOKEN_PAGE); } +vga { bxlval.sval = strdup(bxtext); return(BX_TOKEN_VGA); } +pci { bxlval.sval = strdup(bxtext); return(BX_TOKEN_PCI); } +all { bxlval.sval = strdup(bxtext); return(BX_TOKEN_ALL); } +al { bxlval.uval = BX_DBG_REG8L_AL; return(BX_TOKEN_8BL_REG);} +bl { bxlval.uval = BX_DBG_REG8L_BL; return(BX_TOKEN_8BL_REG);} +cl { bxlval.uval = BX_DBG_REG8L_CL; return(BX_TOKEN_8BL_REG);} +dl { bxlval.uval = BX_DBG_REG8L_DL; return(BX_TOKEN_8BL_REG);} +sil { LONG_MODE_8BL_REG(BX_DBG_REG8L_SIL); } +dil { LONG_MODE_8BL_REG(BX_DBG_REG8L_DIL); } +spl { LONG_MODE_8BL_REG(BX_DBG_REG8L_SPL); } +bpl { LONG_MODE_8BL_REG(BX_DBG_REG8L_BPL); } +r8b { LONG_MODE_8BL_REG(BX_DBG_REG8L_R8); } +r9b { LONG_MODE_8BL_REG(BX_DBG_REG8L_R9); } +r10b { LONG_MODE_8BL_REG(BX_DBG_REG8L_R10); } +r11b { LONG_MODE_8BL_REG(BX_DBG_REG8L_R11); } +r12b { LONG_MODE_8BL_REG(BX_DBG_REG8L_R12); } +r13b { LONG_MODE_8BL_REG(BX_DBG_REG8L_R13); } +r14b { LONG_MODE_8BL_REG(BX_DBG_REG8L_R14); } +r15b { LONG_MODE_8BL_REG(BX_DBG_REG8L_R15); } +ah { bxlval.uval = BX_DBG_REG8H_AH; return(BX_TOKEN_8BH_REG);} +bh { bxlval.uval = BX_DBG_REG8H_BH; return(BX_TOKEN_8BH_REG);} +ch { bxlval.uval = BX_DBG_REG8H_CH; return(BX_TOKEN_8BH_REG);} +dh { bxlval.uval = BX_DBG_REG8H_DH; return(BX_TOKEN_8BH_REG);} +ax { bxlval.uval = BX_DBG_REG16_AX; return(BX_TOKEN_16B_REG);} +bx { bxlval.uval = BX_DBG_REG16_BX; return(BX_TOKEN_16B_REG);} +cx { bxlval.uval = BX_DBG_REG16_CX; return(BX_TOKEN_16B_REG);} +dx { bxlval.uval = BX_DBG_REG16_DX; return(BX_TOKEN_16B_REG);} +si { bxlval.uval = BX_DBG_REG16_SI; return(BX_TOKEN_16B_REG);} +di { bxlval.uval = BX_DBG_REG16_DI; return(BX_TOKEN_16B_REG);} +bp { bxlval.uval = BX_DBG_REG16_BP; return(BX_TOKEN_16B_REG);} +sp { bxlval.uval = BX_DBG_REG16_SP; return(BX_TOKEN_16B_REG);} +r8w { LONG_MODE_16B_REG(BX_DBG_REG16_R8); } +r9w { LONG_MODE_16B_REG(BX_DBG_REG16_R9); } +r10w { LONG_MODE_16B_REG(BX_DBG_REG16_R10); } +r11w { LONG_MODE_16B_REG(BX_DBG_REG16_R11); } +r12w { LONG_MODE_16B_REG(BX_DBG_REG16_R12); } +r13w { LONG_MODE_16B_REG(BX_DBG_REG16_R13); } +r14w { LONG_MODE_16B_REG(BX_DBG_REG16_R14); } +r15w { LONG_MODE_16B_REG(BX_DBG_REG16_R15); } +eax { bxlval.uval = BX_DBG_REG32_EAX; return(BX_TOKEN_32B_REG);} +ebx { bxlval.uval = BX_DBG_REG32_EBX; return(BX_TOKEN_32B_REG);} +ecx { bxlval.uval = BX_DBG_REG32_ECX; return(BX_TOKEN_32B_REG);} +edx { bxlval.uval = BX_DBG_REG32_EDX; return(BX_TOKEN_32B_REG);} +esi { bxlval.uval = BX_DBG_REG32_ESI; return(BX_TOKEN_32B_REG);} +edi { bxlval.uval = BX_DBG_REG32_EDI; return(BX_TOKEN_32B_REG);} +ebp { bxlval.uval = BX_DBG_REG32_EBP; return(BX_TOKEN_32B_REG);} +esp { bxlval.uval = BX_DBG_REG32_ESP; return(BX_TOKEN_32B_REG);} +r8d { LONG_MODE_32B_REG(BX_DBG_REG32_R8); } +r9d { LONG_MODE_32B_REG(BX_DBG_REG32_R9); } +r10d { LONG_MODE_32B_REG(BX_DBG_REG32_R10); } +r11d { LONG_MODE_32B_REG(BX_DBG_REG32_R11); } +r12d { LONG_MODE_32B_REG(BX_DBG_REG32_R12); } +r13d { LONG_MODE_32B_REG(BX_DBG_REG32_R13); } +r14d { LONG_MODE_32B_REG(BX_DBG_REG32_R14); } +r15d { LONG_MODE_32B_REG(BX_DBG_REG32_R15); } +rax { LONG_MODE_64B_REG(BX_DBG_REG64_RAX); } +rbx { LONG_MODE_64B_REG(BX_DBG_REG64_RBX); } +rcx { LONG_MODE_64B_REG(BX_DBG_REG64_RCX); } +rdx { LONG_MODE_64B_REG(BX_DBG_REG64_RDX); } +rsi { LONG_MODE_64B_REG(BX_DBG_REG64_RSI); } +rdi { LONG_MODE_64B_REG(BX_DBG_REG64_RDI); } +rsp { LONG_MODE_64B_REG(BX_DBG_REG64_RSP); } +rbp { LONG_MODE_64B_REG(BX_DBG_REG64_RBP); } +r8 { LONG_MODE_64B_REG(BX_DBG_REG64_R8); } +r9 { LONG_MODE_64B_REG(BX_DBG_REG64_R9); } +r10 { LONG_MODE_64B_REG(BX_DBG_REG64_R10); } +r11 { LONG_MODE_64B_REG(BX_DBG_REG64_R11); } +r12 { LONG_MODE_64B_REG(BX_DBG_REG64_R12); } +r13 { LONG_MODE_64B_REG(BX_DBG_REG64_R13); } +r14 { LONG_MODE_64B_REG(BX_DBG_REG64_R14); } +r15 { LONG_MODE_64B_REG(BX_DBG_REG64_R15); } +ip { return(BX_TOKEN_REG_IP); } +eip { return(BX_TOKEN_REG_EIP);} +rip { return(BX_TOKEN_REG_RIP);} +cs { bxlval.uval = BX_DBG_SREG_CS; return(BX_TOKEN_CS); } +es { bxlval.uval = BX_DBG_SREG_ES; return(BX_TOKEN_ES); } +ss { bxlval.uval = BX_DBG_SREG_SS; return(BX_TOKEN_SS); } +ds { bxlval.uval = BX_DBG_SREG_DS; return(BX_TOKEN_DS); } +fs { bxlval.uval = BX_DBG_SREG_FS; return(BX_TOKEN_FS); } +gs { bxlval.uval = BX_DBG_SREG_GS; return(BX_TOKEN_GS); } +flags|eflags { bxlval.uval = 0; return (BX_TOKEN_FLAGS); } +h|help { bxlval.sval = strdup(bxtext); return(BX_TOKEN_HELP); } +\? | +calc { bxlval.sval = strdup(bxtext); return(BX_TOKEN_CALC); } +\/[0-9]+ { BEGIN(INITIAL); bxlval.sval = strdup(bxtext); return(BX_TOKEN_XFORMAT); } +\/[0-9]*[mxduotcsibhwg]+ { BEGIN(INITIAL); bxlval.sval = strdup(bxtext); return(BX_TOKEN_XFORMAT); } +\/[0-9]+ { BEGIN(INITIAL); bxlval.sval = strdup(bxtext); return(BX_TOKEN_DISFORMAT); } +"+" { return ('+'); } +"-" { return ('-'); } +"*" { return ('*'); } +"/" { return ('/'); } +">>" { return (BX_TOKEN_RSHIFT); } +"<<" { return (BX_TOKEN_LSHIFT); } +"&" { return ('&'); } +"|" { return ('|'); } +"^" { return ('^'); } +"!" { return ('!'); } +"@" { return ('@'); } +"(" { return ('('); } +")" { return (')'); } +\'([^\\\'\n]|(\\.))*\' | /* throw away leading and trailing \" */ +\"([^\\\"\n]|(\\.))*\" { bxlval.sval = strdup(bxtext+1); bxlval.sval[strlen(bxlval.sval)-1] = 0; return(BX_TOKEN_STRING); } +0x[0-9a-fA-F]+ { bxlval.uval = strtoull(bxtext, NULL, 16); return(BX_TOKEN_NUMERIC); } +0[0-7]+ { bxlval.uval = strtoull(bxtext, NULL, 8); return(BX_TOKEN_NUMERIC); } +[0-9]+ { bxlval.uval = strtoull(bxtext, NULL, 10); return(BX_TOKEN_NUMERIC); } +[a-z-]+ { bxlval.sval = strdup(bxtext); return(BX_TOKEN_COMMAND); } +$[a-zA-Z_][a-zA-Z0-9_]* { bxlval.sval = strdup(bxtext); return(BX_TOKEN_SYMBOLNAME); } +[A-Za-z_][A-Za-z0-9_]* { bxlval.sval = strdup(bxtext); return(BX_TOKEN_GENERIC); } +<*>";" { return ('\n'); } +<*>\n { return ('\n'); } +[#][^\n]* ; // eat up comments '//' +. { return(bxtext[0]); } +. { BEGIN(INITIAL); unput(*bxtext); } +%% + + int +bx_yyinput(char *buf, int max_size) +{ + int len; + + if (lex_input_size == 0) { + fprintf(stderr, "lex: no characters in string input buffer.\n"); + exit(1); + } + + len = strlen(lex_input_ptr) + 1; + if (len > max_size) + len = max_size; + + memcpy(buf, lex_input_ptr, len); + + return(len); +} + + void +bx_add_lex_input(char *buf) +{ + lex_input_ptr = buf; + lex_input_size = strlen(buf); + + // Since we're parsing from strings, flush out + // all current buffer state, so the next read + // requests from yyinput + + bx_flush_buffer( YY_CURRENT_BUFFER ); +} + +#endif /* if BX_DEBUGGER */ diff --git a/bochs/bx_debug/linux.cc b/bochs/bx_debug/linux.cc new file mode 100644 index 00000000..9bb860a4 --- /dev/null +++ b/bochs/bx_debug/linux.cc @@ -0,0 +1,92 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +#include + +#include "bochs.h" +#include "cpu/cpu.h" + +#if BX_DEBUGGER + +#define LOG_THIS genlog-> + +// for Linux segment numbers +// these numbers are from +#define KERNEL_CS 0x10 +#define USER_CS 0x18 + +void bx_dbg_info_linux_command(void) +{ + BX_INFO (("Info linux")); + bx_dbg_sreg_t cs; + BX_CPU(dbg_cpu)->dbg_get_sreg(&cs, BX_DBG_SREG_CS); + int cpu_mode = BX_CPU(dbg_cpu)->get_cpu_mode(); + + int mode; + if (cpu_mode >= BX_MODE_IA32_PROTECTED) { + // protected mode + if (cs.sel == KERNEL_CS) { + mode = 'k'; + fprintf (stderr, "Processor mode: kernel\n"); + } else if (cs.sel == USER_CS) { + fprintf (stderr, "Processor mode: user\n"); + mode = 'u'; + } else { + mode = '?'; + fprintf (stderr, "Processor mode: ??? protected=1 but unrecognized CS\n"); + } + } else { + mode = 'r'; + fprintf (stderr, "Processor mode: real-address mode, maybe during boot sequence\n"); + } + if (mode != 'u') return; + /* user mode, look through registers and memory to find our process ID */ +} + +class syscall_names_t { +#define MAX_SYSCALLS 200 + const char *syscall_names_linux[MAX_SYSCALLS]; +public: + syscall_names_t() { init (); } + void init(); + const char *get_name(int num); +}; + +void syscall_names_t::init() +{ + for (int i=0; i". */ + +#if (N_SYSCALLS > MAX_SYSCALLS) +#error MAX_SYSCALLS must exceed N_SYSCALLS from syscalls-linux.h +#endif +} + +const char *syscall_names_t::get_name(int n) +{ + if (n < 0 || n > N_SYSCALLS) return 0; + return syscall_names_linux[n]; +} + +syscall_names_t syscall_names; + +void bx_dbg_linux_syscall(unsigned which_cpu) +{ + Bit32u eax = BX_CPU(which_cpu)->get_reg32(BX_32BIT_REG_EAX); + const char *name = syscall_names.get_name(eax); + if (name) + fprintf (stderr, "linux system call %s (#%d)\n", name, eax); + else + fprintf (stderr, "system call (#%d) is out of range\n", eax); +} + +#endif /* if BX_DEBUGGER */ diff --git a/bochs/bx_debug/make-syscalls-linux.pl b/bochs/bx_debug/make-syscalls-linux.pl new file mode 100755 index 00000000..2ffc63ac --- /dev/null +++ b/bochs/bx_debug/make-syscalls-linux.pl @@ -0,0 +1,34 @@ +#!/usr/bin/perl +# +# tested with linux 2.2.14 +# reads , outputs syscalls-linux.h + +$date = `date`; +print < syscalls-linux.h +// +EOF + +$max = 0; +while () { + $line = $_; + next unless /#define __NR_[a-z]/; + s/.*NR_//; + undef $number; + ($name, $number) = split (/[\s]+/); + if ((length $number) < 1) { + die "bad line: $line"; + } + if ($number > $max) { $max = $number; } + print "DEF_SYSCALL($number, \"$name\")\n"; +} + +print "#define N_SYSCALLS $max\n"; diff --git a/bochs/bx_debug/parser.c b/bochs/bx_debug/parser.c new file mode 100644 index 00000000..ad883c22 --- /dev/null +++ b/bochs/bx_debug/parser.c @@ -0,0 +1,4029 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program 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, 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. + + 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., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + +/* Substitute the variable and function names. */ +#define yyparse bxparse +#define yylex bxlex +#define yyerror bxerror +#define yylval bxlval +#define yychar bxchar +#define yydebug bxdebug +#define yynerrs bxnerrs + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + BX_TOKEN_8BH_REG = 258, + BX_TOKEN_8BL_REG = 259, + BX_TOKEN_16B_REG = 260, + BX_TOKEN_32B_REG = 261, + BX_TOKEN_64B_REG = 262, + BX_TOKEN_CS = 263, + BX_TOKEN_ES = 264, + BX_TOKEN_SS = 265, + BX_TOKEN_DS = 266, + BX_TOKEN_FS = 267, + BX_TOKEN_GS = 268, + BX_TOKEN_FLAGS = 269, + BX_TOKEN_ON = 270, + BX_TOKEN_OFF = 271, + BX_TOKEN_CONTINUE = 272, + BX_TOKEN_STEPN = 273, + BX_TOKEN_STEP_OVER = 274, + BX_TOKEN_NEXT_STEP = 275, + BX_TOKEN_SET = 276, + BX_TOKEN_DEBUGGER = 277, + BX_TOKEN_LIST_BREAK = 278, + BX_TOKEN_VBREAKPOINT = 279, + BX_TOKEN_LBREAKPOINT = 280, + BX_TOKEN_PBREAKPOINT = 281, + BX_TOKEN_DEL_BREAKPOINT = 282, + BX_TOKEN_ENABLE_BREAKPOINT = 283, + BX_TOKEN_DISABLE_BREAKPOINT = 284, + BX_TOKEN_INFO = 285, + BX_TOKEN_QUIT = 286, + BX_TOKEN_R = 287, + BX_TOKEN_REGS = 288, + BX_TOKEN_CPU = 289, + BX_TOKEN_FPU = 290, + BX_TOKEN_SSE = 291, + BX_TOKEN_MMX = 292, + BX_TOKEN_IDT = 293, + BX_TOKEN_IVT = 294, + BX_TOKEN_GDT = 295, + BX_TOKEN_LDT = 296, + BX_TOKEN_TSS = 297, + BX_TOKEN_TAB = 298, + BX_TOKEN_ALL = 299, + BX_TOKEN_LINUX = 300, + BX_TOKEN_DEBUG_REGS = 301, + BX_TOKEN_CONTROL_REGS = 302, + BX_TOKEN_SEGMENT_REGS = 303, + BX_TOKEN_EXAMINE = 304, + BX_TOKEN_XFORMAT = 305, + BX_TOKEN_DISFORMAT = 306, + BX_TOKEN_RESTORE = 307, + BX_TOKEN_SETPMEM = 308, + BX_TOKEN_SYMBOLNAME = 309, + BX_TOKEN_QUERY = 310, + BX_TOKEN_PENDING = 311, + BX_TOKEN_TAKE = 312, + BX_TOKEN_DMA = 313, + BX_TOKEN_IRQ = 314, + BX_TOKEN_HEX = 315, + BX_TOKEN_DISASM = 316, + BX_TOKEN_INSTRUMENT = 317, + BX_TOKEN_STRING = 318, + BX_TOKEN_STOP = 319, + BX_TOKEN_DOIT = 320, + BX_TOKEN_CRC = 321, + BX_TOKEN_TRACE = 322, + BX_TOKEN_TRACEREG = 323, + BX_TOKEN_TRACEMEM = 324, + BX_TOKEN_SWITCH_MODE = 325, + BX_TOKEN_SIZE = 326, + BX_TOKEN_PTIME = 327, + BX_TOKEN_TIMEBP_ABSOLUTE = 328, + BX_TOKEN_TIMEBP = 329, + BX_TOKEN_RECORD = 330, + BX_TOKEN_PLAYBACK = 331, + BX_TOKEN_MODEBP = 332, + BX_TOKEN_PRINT_STACK = 333, + BX_TOKEN_WATCH = 334, + BX_TOKEN_UNWATCH = 335, + BX_TOKEN_READ = 336, + BX_TOKEN_WRITE = 337, + BX_TOKEN_SHOW = 338, + BX_TOKEN_LOAD_SYMBOLS = 339, + BX_TOKEN_SYMBOLS = 340, + BX_TOKEN_LIST_SYMBOLS = 341, + BX_TOKEN_GLOBAL = 342, + BX_TOKEN_WHERE = 343, + BX_TOKEN_PRINT_STRING = 344, + BX_TOKEN_NUMERIC = 345, + BX_TOKEN_NE2000 = 346, + BX_TOKEN_PIC = 347, + BX_TOKEN_PAGE = 348, + BX_TOKEN_HELP = 349, + BX_TOKEN_CALC = 350, + BX_TOKEN_VGA = 351, + BX_TOKEN_PCI = 352, + BX_TOKEN_COMMAND = 353, + BX_TOKEN_GENERIC = 354, + BX_TOKEN_RSHIFT = 355, + BX_TOKEN_LSHIFT = 356, + BX_TOKEN_REG_IP = 357, + BX_TOKEN_REG_EIP = 358, + BX_TOKEN_REG_RIP = 359, + INDIRECT = 360, + NEG = 361, + NOT = 362 + }; +#endif +/* Tokens. */ +#define BX_TOKEN_8BH_REG 258 +#define BX_TOKEN_8BL_REG 259 +#define BX_TOKEN_16B_REG 260 +#define BX_TOKEN_32B_REG 261 +#define BX_TOKEN_64B_REG 262 +#define BX_TOKEN_CS 263 +#define BX_TOKEN_ES 264 +#define BX_TOKEN_SS 265 +#define BX_TOKEN_DS 266 +#define BX_TOKEN_FS 267 +#define BX_TOKEN_GS 268 +#define BX_TOKEN_FLAGS 269 +#define BX_TOKEN_ON 270 +#define BX_TOKEN_OFF 271 +#define BX_TOKEN_CONTINUE 272 +#define BX_TOKEN_STEPN 273 +#define BX_TOKEN_STEP_OVER 274 +#define BX_TOKEN_NEXT_STEP 275 +#define BX_TOKEN_SET 276 +#define BX_TOKEN_DEBUGGER 277 +#define BX_TOKEN_LIST_BREAK 278 +#define BX_TOKEN_VBREAKPOINT 279 +#define BX_TOKEN_LBREAKPOINT 280 +#define BX_TOKEN_PBREAKPOINT 281 +#define BX_TOKEN_DEL_BREAKPOINT 282 +#define BX_TOKEN_ENABLE_BREAKPOINT 283 +#define BX_TOKEN_DISABLE_BREAKPOINT 284 +#define BX_TOKEN_INFO 285 +#define BX_TOKEN_QUIT 286 +#define BX_TOKEN_R 287 +#define BX_TOKEN_REGS 288 +#define BX_TOKEN_CPU 289 +#define BX_TOKEN_FPU 290 +#define BX_TOKEN_SSE 291 +#define BX_TOKEN_MMX 292 +#define BX_TOKEN_IDT 293 +#define BX_TOKEN_IVT 294 +#define BX_TOKEN_GDT 295 +#define BX_TOKEN_LDT 296 +#define BX_TOKEN_TSS 297 +#define BX_TOKEN_TAB 298 +#define BX_TOKEN_ALL 299 +#define BX_TOKEN_LINUX 300 +#define BX_TOKEN_DEBUG_REGS 301 +#define BX_TOKEN_CONTROL_REGS 302 +#define BX_TOKEN_SEGMENT_REGS 303 +#define BX_TOKEN_EXAMINE 304 +#define BX_TOKEN_XFORMAT 305 +#define BX_TOKEN_DISFORMAT 306 +#define BX_TOKEN_RESTORE 307 +#define BX_TOKEN_SETPMEM 308 +#define BX_TOKEN_SYMBOLNAME 309 +#define BX_TOKEN_QUERY 310 +#define BX_TOKEN_PENDING 311 +#define BX_TOKEN_TAKE 312 +#define BX_TOKEN_DMA 313 +#define BX_TOKEN_IRQ 314 +#define BX_TOKEN_HEX 315 +#define BX_TOKEN_DISASM 316 +#define BX_TOKEN_INSTRUMENT 317 +#define BX_TOKEN_STRING 318 +#define BX_TOKEN_STOP 319 +#define BX_TOKEN_DOIT 320 +#define BX_TOKEN_CRC 321 +#define BX_TOKEN_TRACE 322 +#define BX_TOKEN_TRACEREG 323 +#define BX_TOKEN_TRACEMEM 324 +#define BX_TOKEN_SWITCH_MODE 325 +#define BX_TOKEN_SIZE 326 +#define BX_TOKEN_PTIME 327 +#define BX_TOKEN_TIMEBP_ABSOLUTE 328 +#define BX_TOKEN_TIMEBP 329 +#define BX_TOKEN_RECORD 330 +#define BX_TOKEN_PLAYBACK 331 +#define BX_TOKEN_MODEBP 332 +#define BX_TOKEN_PRINT_STACK 333 +#define BX_TOKEN_WATCH 334 +#define BX_TOKEN_UNWATCH 335 +#define BX_TOKEN_READ 336 +#define BX_TOKEN_WRITE 337 +#define BX_TOKEN_SHOW 338 +#define BX_TOKEN_LOAD_SYMBOLS 339 +#define BX_TOKEN_SYMBOLS 340 +#define BX_TOKEN_LIST_SYMBOLS 341 +#define BX_TOKEN_GLOBAL 342 +#define BX_TOKEN_WHERE 343 +#define BX_TOKEN_PRINT_STRING 344 +#define BX_TOKEN_NUMERIC 345 +#define BX_TOKEN_NE2000 346 +#define BX_TOKEN_PIC 347 +#define BX_TOKEN_PAGE 348 +#define BX_TOKEN_HELP 349 +#define BX_TOKEN_CALC 350 +#define BX_TOKEN_VGA 351 +#define BX_TOKEN_PCI 352 +#define BX_TOKEN_COMMAND 353 +#define BX_TOKEN_GENERIC 354 +#define BX_TOKEN_RSHIFT 355 +#define BX_TOKEN_LSHIFT 356 +#define BX_TOKEN_REG_IP 357 +#define BX_TOKEN_REG_EIP 358 +#define BX_TOKEN_REG_RIP 359 +#define INDIRECT 360 +#define NEG 361 +#define NOT 362 + + + + +/* Copy the first part of user declarations. */ +#line 5 "parser.y" + +#include +#include +#include "debug.h" + +#if BX_DEBUGGER + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 13 "parser.y" +{ + char *sval; + Bit64u uval; + bx_bool bval; +} +/* Line 187 of yacc.c. */ +#line 332 "y.tab.c" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 345 "y.tab.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 278 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 1493 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 122 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 54 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 266 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 517 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 362 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 115, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 118, 2, 2, 2, 2, 111, 2, + 119, 120, 109, 105, 2, 106, 2, 110, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 117, 2, + 2, 116, 2, 2, 121, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 108, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 107, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 112, 113, 114 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint16 yyprhs[] = +{ + 0, 0, 3, 6, 8, 10, 12, 14, 16, 18, + 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, + 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, + 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, + 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, + 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, + 119, 121, 125, 129, 133, 137, 140, 144, 148, 151, + 155, 158, 162, 166, 170, 173, 177, 181, 185, 188, + 193, 198, 203, 209, 215, 221, 224, 228, 232, 237, + 242, 248, 251, 255, 258, 261, 265, 270, 275, 278, + 283, 289, 295, 301, 307, 313, 319, 325, 328, 334, + 337, 341, 345, 348, 352, 357, 360, 363, 367, 371, + 375, 381, 387, 393, 399, 403, 407, 411, 415, 419, + 424, 428, 434, 442, 446, 450, 454, 455, 457, 460, + 463, 466, 469, 472, 475, 478, 482, 486, 490, 493, + 498, 502, 506, 509, 514, 520, 524, 528, 533, 537, + 540, 544, 549, 553, 558, 564, 568, 573, 579, 583, + 587, 591, 596, 600, 604, 608, 612, 616, 620, 624, + 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, + 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, + 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, + 748, 752, 756, 760, 764, 768, 772, 775, 779, 781, + 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, + 805, 809, 813, 817, 821, 825, 829, 833, 837, 840, + 843, 847, 849, 851, 853, 855, 857, 859, 861, 863, + 865, 867, 869, 873, 877, 881, 885, 889, 893, 897, + 901, 905, 909, 912, 915, 918, 921 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int16 yyrhs[] = +{ + 123, 0, -1, 123, 124, -1, 124, -1, 143, -1, + 144, -1, 145, -1, 146, -1, 147, -1, 150, -1, + 152, -1, 153, -1, 154, -1, 155, -1, 156, -1, + 158, -1, 157, -1, 148, -1, 149, -1, 159, -1, + 160, -1, 161, -1, 162, -1, 163, -1, 164, -1, + 165, -1, 166, -1, 167, -1, 168, -1, 169, -1, + 170, -1, 171, -1, 135, -1, 136, -1, 137, -1, + 134, -1, 128, -1, 129, -1, 130, -1, 131, -1, + 138, -1, 139, -1, 133, -1, 132, -1, 140, -1, + 141, -1, 142, -1, 172, -1, 173, -1, -1, 115, + -1, 15, -1, 16, -1, 32, -1, 33, -1, 8, + -1, 9, -1, 10, -1, 11, -1, 12, -1, 13, + -1, 74, 90, 115, -1, 73, 90, 115, -1, 75, + 63, 115, -1, 76, 63, 115, -1, 77, 115, -1, + 83, 98, 115, -1, 83, 63, 115, -1, 83, 115, + -1, 93, 175, 115, -1, 72, 115, -1, 67, 125, + 115, -1, 68, 125, 115, -1, 69, 125, 115, -1, + 78, 115, -1, 78, 90, 115, -1, 79, 64, 115, + -1, 79, 17, 115, -1, 79, 115, -1, 79, 32, + 175, 115, -1, 79, 81, 175, 115, -1, 79, 82, + 175, 115, -1, 79, 32, 175, 175, 115, -1, 79, + 81, 175, 175, 115, -1, 79, 82, 175, 175, 115, + -1, 80, 115, -1, 80, 175, 115, -1, 84, 63, + 115, -1, 84, 63, 90, 115, -1, 84, 87, 63, + 115, -1, 84, 87, 63, 90, 115, -1, 88, 115, + -1, 89, 90, 115, -1, 17, 115, -1, 18, 115, + -1, 18, 90, 115, -1, 18, 44, 90, 115, -1, + 18, 90, 90, 115, -1, 19, 115, -1, 21, 61, + 125, 115, -1, 21, 54, 116, 90, 115, -1, 21, + 4, 116, 175, 115, -1, 21, 3, 116, 175, 115, + -1, 21, 5, 116, 175, 115, -1, 21, 6, 116, + 175, 115, -1, 21, 7, 116, 175, 115, -1, 21, + 127, 116, 175, 115, -1, 24, 115, -1, 24, 174, + 117, 174, 115, -1, 25, 115, -1, 25, 175, 115, + -1, 25, 63, 115, -1, 26, 115, -1, 26, 175, + 115, -1, 26, 109, 175, 115, -1, 23, 115, -1, + 86, 115, -1, 86, 63, 115, -1, 30, 26, 115, + -1, 30, 34, 115, -1, 30, 38, 151, 151, 115, + -1, 30, 39, 151, 151, 115, -1, 30, 40, 151, + 151, 115, -1, 30, 41, 151, 151, 115, -1, 30, + 43, 115, -1, 30, 42, 115, -1, 30, 14, 115, + -1, 30, 45, 115, -1, 30, 85, 115, -1, 30, + 85, 63, 115, -1, 30, 91, 115, -1, 30, 91, + 93, 90, 115, -1, 30, 91, 93, 90, 126, 90, + 115, -1, 30, 92, 115, -1, 30, 96, 115, -1, + 30, 97, 115, -1, -1, 90, -1, 126, 115, -1, + 35, 115, -1, 37, 115, -1, 36, 115, -1, 48, + 115, -1, 47, 115, -1, 46, 115, -1, 27, 90, + 115, -1, 28, 90, 115, -1, 29, 90, 115, -1, + 31, 115, -1, 49, 50, 175, 115, -1, 49, 50, + 115, -1, 49, 175, 115, -1, 49, 115, -1, 52, + 63, 63, 115, -1, 53, 90, 90, 90, 115, -1, + 55, 56, 115, -1, 57, 58, 115, -1, 57, 58, + 90, 115, -1, 57, 59, 115, -1, 61, 115, -1, + 61, 175, 115, -1, 61, 175, 175, 115, -1, 61, + 51, 115, -1, 61, 51, 175, 115, -1, 61, 51, + 175, 175, 115, -1, 61, 70, 115, -1, 61, 60, + 125, 115, -1, 61, 71, 116, 90, 115, -1, 62, + 64, 115, -1, 62, 98, 115, -1, 65, 90, 115, + -1, 66, 90, 90, 115, -1, 94, 31, 115, -1, + 94, 17, 115, -1, 94, 18, 115, -1, 94, 19, + 115, -1, 94, 24, 115, -1, 94, 25, 115, -1, + 94, 26, 115, -1, 94, 27, 115, -1, 94, 28, + 115, -1, 94, 29, 115, -1, 94, 23, 115, -1, + 94, 77, 115, -1, 94, 66, 115, -1, 94, 67, + 115, -1, 94, 68, 115, -1, 94, 69, 115, -1, + 94, 52, 115, -1, 94, 72, 115, -1, 94, 74, + 115, -1, 94, 73, 115, -1, 94, 78, 115, -1, + 94, 75, 115, -1, 94, 76, 115, -1, 94, 84, + 115, -1, 94, 86, 115, -1, 94, 126, 115, -1, + 94, 35, 115, -1, 94, 37, 115, -1, 94, 36, + 115, -1, 94, 48, 115, -1, 94, 47, 115, -1, + 94, 46, 115, -1, 94, 53, 115, -1, 94, 61, + 115, -1, 94, 79, 115, -1, 94, 80, 115, -1, + 94, 49, 115, -1, 94, 62, 115, -1, 94, 21, + 115, -1, 94, 93, 115, -1, 94, 30, 115, -1, + 94, 83, 115, -1, 94, 95, 115, -1, 94, 94, + 115, -1, 94, 115, -1, 95, 175, 115, -1, 90, + -1, 63, -1, 4, -1, 3, -1, 5, -1, 6, + -1, 7, -1, 127, -1, 102, -1, 103, -1, 104, + -1, 174, 105, 174, -1, 174, 106, 174, -1, 174, + 109, 174, -1, 174, 110, 174, -1, 174, 100, 174, + -1, 174, 101, 174, -1, 174, 107, 174, -1, 174, + 108, 174, -1, 174, 111, 174, -1, 118, 174, -1, + 106, 174, -1, 119, 174, 120, -1, 90, -1, 63, + -1, 4, -1, 3, -1, 5, -1, 6, -1, 7, + -1, 127, -1, 102, -1, 103, -1, 104, -1, 175, + 117, 175, -1, 175, 105, 175, -1, 175, 106, 175, + -1, 175, 109, 175, -1, 175, 110, 175, -1, 175, + 100, 175, -1, 175, 101, 175, -1, 175, 107, 175, + -1, 175, 108, 175, -1, 175, 111, 175, -1, 118, + 175, -1, 106, 175, -1, 109, 175, -1, 121, 175, + -1, 119, 175, 120, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 139, 139, 140, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 196, 197, 202, 203, 208, 209, 210, 211, 212, + 213, 218, 223, 231, 239, 247, 255, 260, 265, 273, + 281, 289, 297, 305, 313, 318, 326, 331, 336, 341, + 346, 351, 356, 361, 366, 371, 376, 384, 389, 394, + 399, 407, 415, 423, 431, 436, 441, 446, 454, 462, + 467, 472, 476, 480, 484, 488, 492, 499, 504, 509, + 514, 519, 524, 529, 534, 542, 550, 555, 563, 568, + 573, 578, 583, 588, 593, 598, 603, 608, 613, 618, + 623, 628, 633, 638, 643, 648, 656, 657, 660, 668, + 676, 684, 692, 700, 708, 716, 724, 731, 739, 747, + 752, 757, 762, 770, 778, 786, 794, 799, 804, 812, + 817, 822, 827, 832, 837, 842, 847, 852, 860, 865, + 873, 881, 889, 894, 899, 906, 911, 916, 921, 926, + 931, 936, 941, 946, 951, 956, 962, 968, 974, 982, + 987, 992, 997, 1002, 1007, 1012, 1017, 1022, 1027, 1032, + 1037, 1042, 1047, 1052, 1057, 1062, 1072, 1083, 1089, 1102, + 1107, 1117, 1122, 1138, 1150, 1160, 1165, 1173, 1191, 1192, + 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, + 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, + 1213, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, + 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, + 1238, 1239, 1240, 1241, 1242, 1243, 1244 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "BX_TOKEN_8BH_REG", "BX_TOKEN_8BL_REG", + "BX_TOKEN_16B_REG", "BX_TOKEN_32B_REG", "BX_TOKEN_64B_REG", + "BX_TOKEN_CS", "BX_TOKEN_ES", "BX_TOKEN_SS", "BX_TOKEN_DS", + "BX_TOKEN_FS", "BX_TOKEN_GS", "BX_TOKEN_FLAGS", "BX_TOKEN_ON", + "BX_TOKEN_OFF", "BX_TOKEN_CONTINUE", "BX_TOKEN_STEPN", + "BX_TOKEN_STEP_OVER", "BX_TOKEN_NEXT_STEP", "BX_TOKEN_SET", + "BX_TOKEN_DEBUGGER", "BX_TOKEN_LIST_BREAK", "BX_TOKEN_VBREAKPOINT", + "BX_TOKEN_LBREAKPOINT", "BX_TOKEN_PBREAKPOINT", + "BX_TOKEN_DEL_BREAKPOINT", "BX_TOKEN_ENABLE_BREAKPOINT", + "BX_TOKEN_DISABLE_BREAKPOINT", "BX_TOKEN_INFO", "BX_TOKEN_QUIT", + "BX_TOKEN_R", "BX_TOKEN_REGS", "BX_TOKEN_CPU", "BX_TOKEN_FPU", + "BX_TOKEN_SSE", "BX_TOKEN_MMX", "BX_TOKEN_IDT", "BX_TOKEN_IVT", + "BX_TOKEN_GDT", "BX_TOKEN_LDT", "BX_TOKEN_TSS", "BX_TOKEN_TAB", + "BX_TOKEN_ALL", "BX_TOKEN_LINUX", "BX_TOKEN_DEBUG_REGS", + "BX_TOKEN_CONTROL_REGS", "BX_TOKEN_SEGMENT_REGS", "BX_TOKEN_EXAMINE", + "BX_TOKEN_XFORMAT", "BX_TOKEN_DISFORMAT", "BX_TOKEN_RESTORE", + "BX_TOKEN_SETPMEM", "BX_TOKEN_SYMBOLNAME", "BX_TOKEN_QUERY", + "BX_TOKEN_PENDING", "BX_TOKEN_TAKE", "BX_TOKEN_DMA", "BX_TOKEN_IRQ", + "BX_TOKEN_HEX", "BX_TOKEN_DISASM", "BX_TOKEN_INSTRUMENT", + "BX_TOKEN_STRING", "BX_TOKEN_STOP", "BX_TOKEN_DOIT", "BX_TOKEN_CRC", + "BX_TOKEN_TRACE", "BX_TOKEN_TRACEREG", "BX_TOKEN_TRACEMEM", + "BX_TOKEN_SWITCH_MODE", "BX_TOKEN_SIZE", "BX_TOKEN_PTIME", + "BX_TOKEN_TIMEBP_ABSOLUTE", "BX_TOKEN_TIMEBP", "BX_TOKEN_RECORD", + "BX_TOKEN_PLAYBACK", "BX_TOKEN_MODEBP", "BX_TOKEN_PRINT_STACK", + "BX_TOKEN_WATCH", "BX_TOKEN_UNWATCH", "BX_TOKEN_READ", "BX_TOKEN_WRITE", + "BX_TOKEN_SHOW", "BX_TOKEN_LOAD_SYMBOLS", "BX_TOKEN_SYMBOLS", + "BX_TOKEN_LIST_SYMBOLS", "BX_TOKEN_GLOBAL", "BX_TOKEN_WHERE", + "BX_TOKEN_PRINT_STRING", "BX_TOKEN_NUMERIC", "BX_TOKEN_NE2000", + "BX_TOKEN_PIC", "BX_TOKEN_PAGE", "BX_TOKEN_HELP", "BX_TOKEN_CALC", + "BX_TOKEN_VGA", "BX_TOKEN_PCI", "BX_TOKEN_COMMAND", "BX_TOKEN_GENERIC", + "BX_TOKEN_RSHIFT", "BX_TOKEN_LSHIFT", "BX_TOKEN_REG_IP", + "BX_TOKEN_REG_EIP", "BX_TOKEN_REG_RIP", "'+'", "'-'", "'|'", "'^'", + "'*'", "'/'", "'&'", "INDIRECT", "NEG", "NOT", "'\\n'", "'='", "':'", + "'!'", "'('", "')'", "'@'", "$accept", "commands", "command", + "BX_TOKEN_TOGGLE_ON_OFF", "BX_TOKEN_REGISTERS", "BX_TOKEN_SEGREG", + "timebp_command", "record_command", "playback_command", "modebp_command", + "show_command", "page_command", "ptime_command", "trace_command", + "trace_reg_command", "trace_mem_command", "print_stack_command", + "watch_point_command", "symbol_command", "where_command", + "print_string_command", "continue_command", "stepN_command", + "step_over_command", "set_command", "breakpoint_command", + "blist_command", "slist_command", "info_command", "optional_numeric", + "regs_command", "fpu_regs_command", "mmx_regs_command", + "sse_regs_command", "segment_regs_command", "control_regs_command", + "debug_regs_command", "delete_command", "bpe_command", "bpd_command", + "quit_command", "examine_command", "restore_command", "setpmem_command", + "query_command", "take_command", "disassemble_command", + "instrument_command", "doit_command", "crc_command", "help_command", + "calc_command", "vexpression", "expression", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 43, 45, 124, 94, 42, + 47, 38, 360, 361, 362, 10, 61, 58, 33, 40, + 41, 64 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 122, 123, 123, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 125, 125, 126, 126, 127, 127, 127, 127, 127, + 127, 128, 128, 129, 130, 131, 132, 132, 132, 133, + 134, 135, 136, 137, 138, 138, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, + 140, 141, 142, 143, 144, 144, 144, 144, 145, 146, + 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, + 147, 147, 147, 147, 147, 148, 149, 149, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 151, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 163, 163, 163, 164, 165, 166, 167, 167, 167, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, + 170, 171, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 173, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 3, 3, 3, 2, 3, 3, 2, 3, + 2, 3, 3, 3, 2, 3, 3, 3, 2, 4, + 4, 4, 5, 5, 5, 2, 3, 3, 4, 4, + 5, 2, 3, 2, 2, 3, 4, 4, 2, 4, + 5, 5, 5, 5, 5, 5, 5, 2, 5, 2, + 3, 3, 2, 3, 4, 2, 2, 3, 3, 3, + 5, 5, 5, 5, 3, 3, 3, 3, 3, 4, + 3, 5, 7, 3, 3, 3, 0, 1, 2, 2, + 2, 2, 2, 2, 2, 3, 3, 3, 2, 4, + 3, 3, 2, 4, 5, 3, 3, 4, 3, 2, + 3, 4, 3, 4, 5, 3, 4, 5, 3, 3, + 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 2, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 2, 2, 2, 2, 3 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint16 yydefact[] = +{ + 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 53, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 50, 0, 3, 0, 36, 37, 38, 39, 43, + 42, 35, 32, 33, 34, 40, 41, 44, 45, 46, + 4, 5, 6, 7, 8, 17, 18, 9, 10, 11, + 12, 13, 14, 16, 15, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 47, 48, + 93, 0, 0, 94, 98, 0, 0, 0, 0, 0, + 55, 56, 57, 58, 59, 60, 0, 0, 0, 115, + 221, 220, 222, 223, 224, 219, 218, 226, 227, 228, + 0, 107, 0, 0, 225, 0, 244, 243, 245, 246, + 247, 242, 241, 249, 250, 251, 0, 0, 109, 0, + 0, 0, 248, 0, 242, 0, 112, 0, 0, 0, + 0, 0, 0, 0, 136, 136, 136, 136, 0, 0, + 0, 0, 0, 0, 0, 0, 148, 139, 141, 140, + 144, 143, 142, 0, 152, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, + 0, 51, 52, 0, 0, 0, 70, 0, 0, 0, + 0, 65, 0, 74, 0, 0, 0, 0, 0, 78, + 85, 0, 0, 0, 68, 0, 0, 0, 116, 91, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 216, 0, 0, 1, 2, + 138, 0, 0, 95, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 238, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 111, 263, 264, 262, 0, + 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 110, 0, 264, 113, 145, 146, 147, 126, 118, 119, + 137, 136, 136, 136, 136, 125, 124, 127, 0, 128, + 0, 130, 133, 134, 135, 150, 0, 151, 0, 0, + 155, 0, 156, 158, 162, 0, 0, 165, 0, 0, + 0, 160, 0, 168, 169, 170, 0, 71, 72, 73, + 62, 61, 63, 64, 75, 77, 0, 76, 0, 0, + 86, 67, 66, 0, 87, 0, 117, 92, 69, 173, + 174, 175, 210, 182, 176, 177, 178, 179, 180, 181, + 212, 172, 198, 200, 199, 203, 202, 201, 208, 188, + 204, 205, 209, 184, 185, 186, 187, 189, 191, 190, + 193, 194, 183, 192, 206, 207, 213, 195, 196, 211, + 215, 214, 197, 217, 96, 97, 0, 0, 0, 0, + 0, 0, 99, 0, 240, 233, 234, 229, 230, 235, + 236, 231, 232, 237, 0, 266, 257, 258, 253, 254, + 259, 260, 255, 256, 261, 252, 114, 0, 0, 0, + 0, 129, 0, 149, 153, 0, 157, 163, 0, 166, + 0, 254, 255, 161, 171, 79, 0, 80, 0, 81, + 0, 88, 0, 89, 102, 101, 103, 104, 105, 100, + 106, 108, 120, 121, 122, 123, 131, 0, 154, 164, + 167, 82, 83, 84, 90, 0, 132 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 52, 53, 203, 54, 152, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 331, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 135, 153 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -161 +static const yytype_int16 yypact[] = +{ + 1101, -84, -34, -77, 538, -73, 854, 575, 646, -26, + -20, -17, 1253, -71, -161, -161, -69, -41, -40, -39, + -38, -35, 527, 3, -8, 34, -25, 505, -43, 1, + 2, 21, 21, 21, -13, 13, 14, 48, 49, 11, + -76, -14, 694, -50, -47, -46, 12, 24, 843, 1182, + 843, -161, 1020, -161, 17, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, 39, -68, -161, -161, 18, 19, 20, 22, 25, + -161, -161, -161, -161, -161, -161, 29, 21, 30, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + 915, -161, 915, 915, -161, 563, -161, -161, -161, -161, + -161, 32, -161, -161, -161, -161, 843, 843, -161, 843, + 843, 843, -161, 301, -161, 843, -161, 452, 45, 46, + 47, 50, 51, 52, 43, 43, 43, 43, 62, 66, + 67, -44, -70, 68, 70, 72, -161, -161, -161, -161, + -161, -161, -161, 714, -161, 874, 74, 73, 85, -66, + 86, 782, 21, 88, 89, -161, 112, 91, 92, 109, + 98, -161, -161, 110, 111, 113, -161, 117, 119, 120, + 122, -161, 123, -161, 124, 843, 125, 843, 843, -161, + -161, 887, 126, 127, -161, -64, 101, 128, -161, -161, + 129, 1199, 130, 143, 144, 145, 147, 151, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 167, 168, 170, + 171, 172, 173, 174, 175, 176, 177, 188, 198, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 223, 224, 225, 226, -161, 227, 1212, -161, -161, + -161, 228, 229, -161, 843, 843, 843, 843, 843, 114, + 230, 843, -161, -161, -48, 915, 915, 915, 915, 915, + 915, 915, 915, 915, 915, -161, 232, 232, 232, -22, + 232, 843, 843, 843, 843, 843, 843, 843, 843, 843, + -161, 843, -85, -161, -161, -161, -161, -161, -161, -161, + -161, 43, 43, 43, 43, -161, -161, -161, 231, -161, + 257, -161, -161, -161, -161, -161, 1225, -161, 235, 261, + -161, 239, -161, -161, -161, 146, 240, -161, 266, 843, + 843, -161, 1246, -161, -161, -161, 253, -161, -161, -161, + -161, -161, -161, -161, -161, -161, 324, -161, 354, 386, + -161, -161, -161, 255, -161, -61, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, 1259, 1272, 1285, 1298, + 1311, 260, -161, 1324, -161, -161, -161, -1, -1, -1, + -1, -161, -161, -161, 273, -161, 232, 232, -4, -4, + -4, -4, 232, 232, 232, 634, -161, 262, 270, 271, + 285, -161, -21, -161, -161, 288, -161, -161, 1337, -161, + 289, 69, 232, -161, -161, -161, 1350, -161, 1363, -161, + 1376, -161, 290, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, 286, -161, -161, + -161, -161, -161, -161, -161, 298, -161 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -161, -161, 363, -24, -49, -2, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -160, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -105, -7 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -264 +static const yytype_int16 yytable[] = +{ + 276, 157, 118, 214, 134, 332, 333, 334, 204, 205, + 101, 14, 15, 222, 212, 185, 225, 227, 215, 338, + 196, 197, 282, 340, 351, 292, 383, 293, 294, 492, + 466, 100, 321, 189, 190, 221, 201, 202, 104, 213, + 226, 231, 119, 277, 176, 341, 177, 283, 223, 352, + 216, 384, 295, 296, 493, 198, 102, 297, 298, 299, + 300, 301, 302, 303, 158, 224, 186, 217, 218, 228, + 159, 339, 444, 160, 178, 179, 180, 181, 311, 312, + 182, 103, 187, 313, 314, 315, 316, 317, 318, 319, + 188, 199, 200, 290, 506, 321, 311, 312, 455, 295, + 296, 219, 206, 207, 208, 317, 318, 319, 301, 302, + 303, 209, 210, 321, 230, 136, 137, 138, 139, 140, + 110, 111, 112, 113, 114, 115, 211, 229, 134, 281, + 134, 134, 280, 330, 284, 285, 286, 348, 287, 306, + 307, 288, 308, 309, 310, 289, 291, 305, 322, 136, + 137, 138, 139, 140, 110, 111, 112, 113, 114, 115, + 324, 325, 326, 349, 385, 327, 328, 329, 356, -263, + -263, 467, 468, 469, 470, 154, 346, 335, -263, -263, + -263, 336, 337, 342, 355, 343, 321, 344, 366, 362, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 350, 353, 142, 357, 441, 358, 363, 364, 376, 154, + 378, 379, 311, 312, 143, 144, 145, 313, 359, 315, + 316, 360, 318, 319, 365, 367, 368, 361, 369, 321, + 149, 150, 370, 151, 371, 372, 142, 373, 374, 375, + 377, 381, 382, 386, 387, 389, 311, 312, 143, 144, + 145, 313, 359, 315, 316, 360, 318, 319, 390, 391, + 392, 477, 393, 321, 149, 150, 394, 151, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 436, 437, 438, + 439, 440, 404, 405, 443, 406, 407, 408, 409, 410, + 411, 412, 413, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 414, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 415, 465, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 136, 137, 138, + 139, 140, 110, 111, 112, 113, 114, 115, 428, 429, + 430, 431, 432, 434, 435, 442, 471, 472, 478, 321, + 474, 475, 481, 482, 476, 479, 480, 136, 137, 138, + 139, 140, 110, 111, 112, 113, 114, 115, 484, 486, + 491, 488, 490, 295, 296, 499, 515, 502, 297, 298, + 299, 300, 301, 302, 303, 503, 504, 154, 501, 136, + 137, 138, 139, 140, 110, 111, 112, 113, 114, 115, + 505, 311, 312, 508, 510, 514, 313, 314, 315, 316, + 317, 318, 319, 516, 142, 279, 320, 154, 321, 0, + 0, 0, 0, 507, 311, 312, 143, 144, 145, 313, + 359, 315, 316, 360, 318, 319, 0, 0, 0, 485, + 0, 321, 149, 150, 142, 151, 0, 0, 0, 154, + 0, 0, 0, 0, 311, 312, 143, 144, 145, 313, + 359, 315, 316, 360, 318, 319, 0, 0, 0, 487, + 0, 321, 149, 150, 0, 151, 142, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 311, 312, 143, 144, + 145, 313, 359, 315, 316, 360, 318, 319, 0, 0, + 0, 489, 0, 321, 149, 150, 0, 151, 136, 137, + 138, 139, 140, 110, 111, 112, 113, 114, 115, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 136, 137, 138, 139, 140, 110, 111, 112, 113, 114, + 115, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 311, 312, 0, 0, 191, 313, 314, 315, + 316, 317, 318, 319, 0, 192, 0, 323, 154, 321, + 0, 0, 0, 0, 0, 193, 194, 183, 136, 137, + 138, 139, 140, 110, 111, 112, 113, 114, 115, 0, + 154, 0, 116, 0, 0, 142, 0, 0, 0, 117, + 0, 0, 0, 0, 0, 0, 0, 143, 144, 145, + 0, 146, 0, 0, 147, 0, 0, 142, 0, 0, + 195, 0, 0, 149, 150, 0, 151, 0, 0, 143, + 144, 145, 0, 146, 0, 0, 147, 0, 141, 0, + 0, 0, 184, 0, 0, 149, 150, 0, 151, 136, + 137, 138, 139, 140, 110, 111, 112, 113, 114, 115, + 0, 0, 0, 295, 296, 142, 0, 0, 297, 298, + 299, 300, 301, 302, 303, 0, 0, 143, 144, 145, + 304, 146, 0, 0, 147, 0, 0, 0, 0, 0, + 148, 0, 0, 149, 150, 0, 151, 136, 137, 138, + 139, 140, 110, 111, 112, 113, 114, 115, 0, 154, + 0, 0, 0, 0, 0, 0, 0, 136, 137, 138, + 139, 140, 110, 111, 112, 113, 114, 115, 0, 0, + 0, 0, 0, 0, 311, 312, 142, 0, 0, 313, + 314, 315, 316, 317, 318, 319, 0, 0, 143, 144, + 145, 321, 146, 0, 0, 155, 0, 154, 0, 0, + 0, 156, 0, 0, 149, 150, 0, 151, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, + 0, 0, 0, 0, 142, 136, 137, 138, 139, 140, + 110, 111, 112, 113, 114, 115, 143, 144, 145, 0, + 146, 0, 0, 147, 142, 0, 0, 0, 0, 220, + 0, 0, 149, 150, 0, 151, 143, 144, 145, 0, + 146, 0, 0, 147, 0, 0, 0, 0, 0, 345, + 0, 0, 149, 150, 0, 151, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 154, 136, 137, 138, 139, + 140, 110, 111, 112, 113, 114, 115, 120, 121, 122, + 123, 124, 110, 111, 112, 113, 114, 115, 0, 0, + 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 143, 144, 145, 0, 146, 0, + 0, 147, 0, 0, 0, 0, 0, 354, 0, 0, + 149, 150, 0, 151, 0, 0, 154, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 125, 120, 121, + 122, 123, 124, 110, 111, 112, 113, 114, 115, 0, + 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 143, 144, 145, 0, 146, + 0, 0, 147, 0, 0, 0, 127, 128, 129, 0, + 130, 149, 150, 0, 151, 0, 0, 0, 0, 131, + 0, 0, 132, 133, 311, 312, 0, 0, 125, 313, + 314, 315, 316, 317, 318, 319, 0, 311, 312, 347, + 0, 321, 313, 314, 315, 316, 317, 318, 319, 0, + 0, 0, 380, 0, 321, 126, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 127, 128, 129, + 278, 130, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 132, 133, 0, 0, 1, 2, 3, + 0, 4, 0, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 0, 16, 17, 18, 0, 0, + 0, 0, 0, 0, 0, 0, 19, 20, 21, 22, + 0, 0, 23, 24, 0, 25, 0, 26, 0, 0, + 0, 27, 28, 0, 0, 29, 30, 31, 32, 33, + 0, 0, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 0, 0, 43, 44, 0, 45, 0, 46, 47, + 0, 0, 0, 48, 49, 50, 0, 0, 1, 2, + 3, 0, 4, 0, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 51, 16, 17, 18, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, + 22, 0, 0, 23, 24, 0, 25, 0, 26, 0, + 0, 0, 27, 28, 0, 0, 29, 30, 31, 32, + 33, 0, 0, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 0, 0, 43, 44, 0, 45, 0, 46, + 47, 0, 0, 0, 48, 49, 50, 0, 0, 232, + 233, 234, 0, 235, 0, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 14, 15, 51, 245, 246, 247, + 0, 0, 0, 0, 0, 0, 0, 0, 248, 249, + 250, 251, 0, 0, 252, 253, 0, 0, 0, 0, + 0, 0, 0, 254, 255, 0, 0, 0, 256, 257, + 258, 259, 0, 0, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 0, 0, 269, 270, 161, 271, 0, + 0, 0, 0, 0, 0, 272, 273, 274, 0, 162, + 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, + 0, 164, 165, 166, 167, 168, 169, 275, 170, 311, + 312, 0, 0, 0, 313, 314, 315, 316, 317, 318, + 319, 0, 311, 312, 388, 0, 321, 313, 314, 315, + 316, 317, 318, 319, 0, 311, 312, 433, 0, 321, + 313, 314, 315, 316, 317, 318, 319, 0, 171, 0, + 473, 0, 321, 0, 172, 173, 311, 312, 0, 174, + 175, 313, 314, 315, 316, 317, 318, 319, 0, 311, + 312, 483, 0, 321, 313, 314, 315, 316, 317, 318, + 319, 0, 311, 312, 494, 0, 321, 313, 314, 315, + 316, 317, 318, 319, 0, 311, 312, 495, 0, 321, + 313, 314, 315, 316, 317, 318, 319, 0, 311, 312, + 496, 0, 321, 313, 314, 315, 316, 317, 318, 319, + 0, 311, 312, 497, 0, 321, 313, 314, 315, 316, + 317, 318, 319, 0, 311, 312, 498, 0, 321, 313, + 314, 315, 316, 317, 318, 319, 0, 311, 312, 500, + 0, 321, 313, 314, 315, 316, 317, 318, 319, 0, + 311, 312, 509, 0, 321, 313, 314, 315, 316, 317, + 318, 319, 0, 311, 312, 511, 0, 321, 313, 314, + 315, 316, 317, 318, 319, 0, 311, 312, 512, 0, + 321, 313, 314, 315, 316, 317, 318, 319, 0, 0, + 0, 513, 0, 321 +}; + +static const yytype_int16 yycheck[] = +{ + 49, 8, 4, 17, 6, 165, 166, 167, 32, 33, + 44, 32, 33, 63, 90, 22, 63, 63, 32, 63, + 27, 64, 90, 93, 90, 130, 90, 132, 133, 90, + 115, 115, 117, 58, 59, 42, 15, 16, 115, 115, + 87, 48, 115, 50, 115, 115, 115, 115, 98, 115, + 64, 115, 100, 101, 115, 98, 90, 105, 106, 107, + 108, 109, 110, 111, 90, 115, 63, 81, 82, 115, + 90, 115, 120, 90, 115, 115, 115, 115, 100, 101, + 115, 115, 90, 105, 106, 107, 108, 109, 110, 111, + 56, 90, 90, 117, 115, 117, 100, 101, 120, 100, + 101, 115, 115, 90, 90, 109, 110, 111, 109, 110, + 111, 63, 63, 117, 90, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 115, 115, 130, 90, + 132, 133, 115, 90, 116, 116, 116, 63, 116, 146, + 147, 116, 149, 150, 151, 116, 116, 115, 155, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 115, 115, 115, 90, 63, 115, 115, 115, 192, 100, + 101, 331, 332, 333, 334, 63, 183, 115, 109, 110, + 111, 115, 115, 115, 191, 115, 117, 115, 90, 196, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 115, 115, 90, 115, 90, 116, 115, 115, 215, 63, + 217, 218, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 115, 115, 115, 115, 115, 117, + 118, 119, 115, 121, 115, 115, 90, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 115, 115, + 115, 115, 115, 117, 118, 119, 115, 121, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 284, 285, 286, + 287, 288, 115, 115, 291, 115, 115, 115, 115, 115, + 115, 115, 115, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 115, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 115, 321, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 90, 355, 117, + 115, 90, 359, 360, 115, 115, 90, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 115, 376, + 115, 378, 379, 100, 101, 115, 90, 115, 105, 106, + 107, 108, 109, 110, 111, 115, 115, 63, 115, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 115, 100, 101, 115, 115, 115, 105, 106, 107, 108, + 109, 110, 111, 115, 90, 52, 115, 63, 117, -1, + -1, -1, -1, 472, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, -1, -1, -1, 115, + -1, 117, 118, 119, 90, 121, -1, -1, -1, 63, + -1, -1, -1, -1, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, -1, -1, -1, 115, + -1, 117, 118, 119, -1, 121, 90, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, -1, -1, + -1, 115, -1, 117, 118, 119, -1, 121, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 100, 101, -1, -1, 51, 105, 106, 107, + 108, 109, 110, 111, -1, 60, -1, 115, 63, 117, + -1, -1, -1, -1, -1, 70, 71, 50, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, -1, + 63, -1, 54, -1, -1, 90, -1, -1, -1, 61, + -1, -1, -1, -1, -1, -1, -1, 102, 103, 104, + -1, 106, -1, -1, 109, -1, -1, 90, -1, -1, + 115, -1, -1, 118, 119, -1, 121, -1, -1, 102, + 103, 104, -1, 106, -1, -1, 109, -1, 63, -1, + -1, -1, 115, -1, -1, 118, 119, -1, 121, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + -1, -1, -1, 100, 101, 90, -1, -1, 105, 106, + 107, 108, 109, 110, 111, -1, -1, 102, 103, 104, + 117, 106, -1, -1, 109, -1, -1, -1, -1, -1, + 115, -1, -1, 118, 119, -1, 121, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, -1, 63, + -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, -1, -1, + -1, -1, -1, -1, 100, 101, 90, -1, -1, 105, + 106, 107, 108, 109, 110, 111, -1, -1, 102, 103, + 104, 117, 106, -1, -1, 109, -1, 63, -1, -1, + -1, 115, -1, -1, 118, 119, -1, 121, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, + -1, -1, -1, -1, 90, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 102, 103, 104, -1, + 106, -1, -1, 109, 90, -1, -1, -1, -1, 115, + -1, -1, 118, 119, -1, 121, 102, 103, 104, -1, + 106, -1, -1, 109, -1, -1, -1, -1, -1, 115, + -1, -1, 118, 119, -1, 121, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 63, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, -1, -1, + -1, -1, 90, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 102, 103, 104, -1, 106, -1, + -1, 109, -1, -1, -1, -1, -1, 115, -1, -1, + 118, 119, -1, 121, -1, -1, 63, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 63, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, -1, + -1, -1, -1, 90, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 102, 103, 104, -1, 106, + -1, -1, 109, -1, -1, -1, 102, 103, 104, -1, + 106, 118, 119, -1, 121, -1, -1, -1, -1, 115, + -1, -1, 118, 119, 100, 101, -1, -1, 63, 105, + 106, 107, 108, 109, 110, 111, -1, 100, 101, 115, + -1, 117, 105, 106, 107, 108, 109, 110, 111, -1, + -1, -1, 115, -1, 117, 90, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 102, 103, 104, + 0, 106, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 118, 119, -1, -1, 17, 18, 19, + -1, 21, -1, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, -1, 35, 36, 37, -1, -1, + -1, -1, -1, -1, -1, -1, 46, 47, 48, 49, + -1, -1, 52, 53, -1, 55, -1, 57, -1, -1, + -1, 61, 62, -1, -1, 65, 66, 67, 68, 69, + -1, -1, 72, 73, 74, 75, 76, 77, 78, 79, + 80, -1, -1, 83, 84, -1, 86, -1, 88, 89, + -1, -1, -1, 93, 94, 95, -1, -1, 17, 18, + 19, -1, 21, -1, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 115, 35, 36, 37, -1, + -1, -1, -1, -1, -1, -1, -1, 46, 47, 48, + 49, -1, -1, 52, 53, -1, 55, -1, 57, -1, + -1, -1, 61, 62, -1, -1, 65, 66, 67, 68, + 69, -1, -1, 72, 73, 74, 75, 76, 77, 78, + 79, 80, -1, -1, 83, 84, -1, 86, -1, 88, + 89, -1, -1, -1, 93, 94, 95, -1, -1, 17, + 18, 19, -1, 21, -1, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 115, 35, 36, 37, + -1, -1, -1, -1, -1, -1, -1, -1, 46, 47, + 48, 49, -1, -1, 52, 53, -1, -1, -1, -1, + -1, -1, -1, 61, 62, -1, -1, -1, 66, 67, + 68, 69, -1, -1, 72, 73, 74, 75, 76, 77, + 78, 79, 80, -1, -1, 83, 84, 14, 86, -1, + -1, -1, -1, -1, -1, 93, 94, 95, -1, 26, + -1, -1, -1, -1, -1, -1, -1, 34, -1, -1, + -1, 38, 39, 40, 41, 42, 43, 115, 45, 100, + 101, -1, -1, -1, 105, 106, 107, 108, 109, 110, + 111, -1, 100, 101, 115, -1, 117, 105, 106, 107, + 108, 109, 110, 111, -1, 100, 101, 115, -1, 117, + 105, 106, 107, 108, 109, 110, 111, -1, 85, -1, + 115, -1, 117, -1, 91, 92, 100, 101, -1, 96, + 97, 105, 106, 107, 108, 109, 110, 111, -1, 100, + 101, 115, -1, 117, 105, 106, 107, 108, 109, 110, + 111, -1, 100, 101, 115, -1, 117, 105, 106, 107, + 108, 109, 110, 111, -1, 100, 101, 115, -1, 117, + 105, 106, 107, 108, 109, 110, 111, -1, 100, 101, + 115, -1, 117, 105, 106, 107, 108, 109, 110, 111, + -1, 100, 101, 115, -1, 117, 105, 106, 107, 108, + 109, 110, 111, -1, 100, 101, 115, -1, 117, 105, + 106, 107, 108, 109, 110, 111, -1, 100, 101, 115, + -1, 117, 105, 106, 107, 108, 109, 110, 111, -1, + 100, 101, 115, -1, 117, 105, 106, 107, 108, 109, + 110, 111, -1, 100, 101, 115, -1, 117, 105, 106, + 107, 108, 109, 110, 111, -1, 100, 101, 115, -1, + 117, 105, 106, 107, 108, 109, 110, 111, -1, -1, + -1, 115, -1, 117 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 17, 18, 19, 21, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 35, 36, 37, 46, + 47, 48, 49, 52, 53, 55, 57, 61, 62, 65, + 66, 67, 68, 69, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 83, 84, 86, 88, 89, 93, 94, + 95, 115, 123, 124, 126, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 115, 44, 90, 115, 115, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 54, 61, 127, 115, + 3, 4, 5, 6, 7, 63, 90, 102, 103, 104, + 106, 115, 118, 119, 127, 174, 3, 4, 5, 6, + 7, 63, 90, 102, 103, 104, 106, 109, 115, 118, + 119, 121, 127, 175, 63, 109, 115, 175, 90, 90, + 90, 14, 26, 34, 38, 39, 40, 41, 42, 43, + 45, 85, 91, 92, 96, 97, 115, 115, 115, 115, + 115, 115, 115, 50, 115, 175, 63, 90, 56, 58, + 59, 51, 60, 70, 71, 115, 175, 64, 98, 90, + 90, 15, 16, 125, 125, 125, 115, 90, 90, 63, + 63, 115, 90, 115, 17, 32, 64, 81, 82, 115, + 115, 175, 63, 98, 115, 63, 87, 63, 115, 115, + 90, 175, 17, 18, 19, 21, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 35, 36, 37, 46, 47, + 48, 49, 52, 53, 61, 62, 66, 67, 68, 69, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, + 84, 86, 93, 94, 95, 115, 126, 175, 0, 124, + 115, 90, 90, 115, 116, 116, 116, 116, 116, 116, + 125, 116, 174, 174, 174, 100, 101, 105, 106, 107, + 108, 109, 110, 111, 117, 115, 175, 175, 175, 175, + 175, 100, 101, 105, 106, 107, 108, 109, 110, 111, + 115, 117, 175, 115, 115, 115, 115, 115, 115, 115, + 90, 151, 151, 151, 151, 115, 115, 115, 63, 115, + 93, 115, 115, 115, 115, 115, 175, 115, 63, 90, + 115, 90, 115, 115, 115, 175, 125, 115, 116, 106, + 109, 115, 175, 115, 115, 115, 90, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 175, 115, 175, 175, + 115, 115, 115, 90, 115, 63, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 175, 175, 175, 175, + 175, 90, 115, 175, 120, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 120, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 115, 151, 151, 151, + 151, 115, 90, 115, 115, 90, 115, 115, 175, 115, + 90, 175, 175, 115, 115, 115, 175, 115, 175, 115, + 175, 115, 90, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 126, 115, 115, + 115, 115, 115, 115, 115, 90, 115 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 50: +#line 191 "parser.y" + { + } + break; + + case 52: +#line 198 "parser.y" + { (yyval.bval)=(yyvsp[(1) - (1)].bval); } + break; + + case 54: +#line 204 "parser.y" + { (yyval.sval)=(yyvsp[(1) - (1)].sval); } + break; + + case 60: +#line 214 "parser.y" + { (yyval.uval)=(yyvsp[(1) - (1)].uval); } + break; + + case 61: +#line 219 "parser.y" + { + bx_dbg_timebp_command(0, (yyvsp[(2) - (3)].uval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 62: +#line 224 "parser.y" + { + bx_dbg_timebp_command(1, (yyvsp[(2) - (3)].uval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 63: +#line 232 "parser.y" + { + bx_dbg_record_command((yyvsp[(2) - (3)].sval)); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 64: +#line 240 "parser.y" + { + bx_dbg_playback_command((yyvsp[(2) - (3)].sval)); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 65: +#line 248 "parser.y" + { + bx_dbg_modebp_command(); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 66: +#line 256 "parser.y" + { + bx_dbg_show_command((yyvsp[(2) - (3)].sval)); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 67: +#line 261 "parser.y" + { + bx_dbg_show_param_command((yyvsp[(2) - (3)].sval)); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 68: +#line 266 "parser.y" + { + bx_dbg_show_command(0); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 69: +#line 274 "parser.y" + { + bx_dbg_xlate_address((yyvsp[(2) - (3)].uval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 70: +#line 282 "parser.y" + { + bx_dbg_ptime_command(); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 71: +#line 290 "parser.y" + { + bx_dbg_trace_command((yyvsp[(2) - (3)].bval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 72: +#line 298 "parser.y" + { + bx_dbg_trace_reg_command((yyvsp[(2) - (3)].bval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 73: +#line 306 "parser.y" + { + bx_dbg_trace_mem_command((yyvsp[(2) - (3)].bval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 74: +#line 314 "parser.y" + { + bx_dbg_print_stack_command(16); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 75: +#line 319 "parser.y" + { + bx_dbg_print_stack_command((yyvsp[(2) - (3)].uval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 76: +#line 327 "parser.y" + { + bx_dbg_watchpoint_continue(0); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 77: +#line 332 "parser.y" + { + bx_dbg_watchpoint_continue(1); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 78: +#line 337 "parser.y" + { + bx_dbg_print_watchpoints(); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 79: +#line 342 "parser.y" + { + bx_dbg_watch(0, (yyvsp[(3) - (4)].uval), 1); /* BX_READ */ + free((yyvsp[(1) - (4)].sval)); free((yyvsp[(2) - (4)].sval)); + } + break; + + case 80: +#line 347 "parser.y" + { + bx_dbg_watch(0, (yyvsp[(3) - (4)].uval), 1); /* BX_READ */ + free((yyvsp[(1) - (4)].sval)); free((yyvsp[(2) - (4)].sval)); + } + break; + + case 81: +#line 352 "parser.y" + { + bx_dbg_watch(1, (yyvsp[(3) - (4)].uval), 1); /* BX_WRITE */ + free((yyvsp[(1) - (4)].sval)); free((yyvsp[(2) - (4)].sval)); + } + break; + + case 82: +#line 357 "parser.y" + { + bx_dbg_watch(0, (yyvsp[(3) - (5)].uval), (yyvsp[(4) - (5)].uval)); /* BX_READ */ + free((yyvsp[(1) - (5)].sval)); free((yyvsp[(2) - (5)].sval)); + } + break; + + case 83: +#line 362 "parser.y" + { + bx_dbg_watch(0, (yyvsp[(3) - (5)].uval), (yyvsp[(4) - (5)].uval)); /* BX_READ */ + free((yyvsp[(1) - (5)].sval)); free((yyvsp[(2) - (5)].sval)); + } + break; + + case 84: +#line 367 "parser.y" + { + bx_dbg_watch(1, (yyvsp[(3) - (5)].uval), (yyvsp[(4) - (5)].uval)); /* BX_WRITE */ + free((yyvsp[(1) - (5)].sval)); free((yyvsp[(2) - (5)].sval)); + } + break; + + case 85: +#line 372 "parser.y" + { + bx_dbg_unwatch_all(); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 86: +#line 377 "parser.y" + { + bx_dbg_unwatch((yyvsp[(2) - (3)].uval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 87: +#line 385 "parser.y" + { + bx_dbg_symbol_command((yyvsp[(2) - (3)].sval), 0, 0); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 88: +#line 390 "parser.y" + { + bx_dbg_symbol_command((yyvsp[(2) - (4)].sval), 0, (yyvsp[(3) - (4)].uval)); + free((yyvsp[(1) - (4)].sval)); free((yyvsp[(2) - (4)].sval)); + } + break; + + case 89: +#line 395 "parser.y" + { + bx_dbg_symbol_command((yyvsp[(3) - (4)].sval), 1, 0); + free((yyvsp[(1) - (4)].sval)); free((yyvsp[(2) - (4)].sval)); free((yyvsp[(3) - (4)].sval)); + } + break; + + case 90: +#line 400 "parser.y" + { + bx_dbg_symbol_command((yyvsp[(3) - (5)].sval), 1, (yyvsp[(4) - (5)].uval)); + free((yyvsp[(1) - (5)].sval)); free((yyvsp[(2) - (5)].sval)); free((yyvsp[(3) - (5)].sval)); + } + break; + + case 91: +#line 408 "parser.y" + { + bx_dbg_where_command(); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 92: +#line 416 "parser.y" + { + bx_dbg_print_string_command((yyvsp[(2) - (3)].uval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 93: +#line 424 "parser.y" + { + bx_dbg_continue_command(); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 94: +#line 432 "parser.y" + { + bx_dbg_stepN_command(dbg_cpu, 1); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 95: +#line 437 "parser.y" + { + bx_dbg_stepN_command(dbg_cpu, (yyvsp[(2) - (3)].uval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 96: +#line 442 "parser.y" + { + bx_dbg_stepN_command(-1, (yyvsp[(3) - (4)].uval)); + free((yyvsp[(1) - (4)].sval)); free((yyvsp[(2) - (4)].sval)); + } + break; + + case 97: +#line 447 "parser.y" + { + bx_dbg_stepN_command((yyvsp[(2) - (4)].uval), (yyvsp[(3) - (4)].uval)); + free((yyvsp[(1) - (4)].sval)); + } + break; + + case 98: +#line 455 "parser.y" + { + bx_dbg_step_over_command(); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 99: +#line 463 "parser.y" + { + bx_dbg_set_auto_disassemble((yyvsp[(3) - (4)].bval)); + free((yyvsp[(1) - (4)].sval)); free((yyvsp[(2) - (4)].sval)); + } + break; + + case 100: +#line 468 "parser.y" + { + bx_dbg_set_symbol_command((yyvsp[(2) - (5)].sval), (yyvsp[(4) - (5)].uval)); + free((yyvsp[(1) - (5)].sval)); free((yyvsp[(2) - (5)].sval)); + } + break; + + case 101: +#line 473 "parser.y" + { + bx_dbg_set_reg8l_value((yyvsp[(2) - (5)].uval), (yyvsp[(4) - (5)].uval)); + } + break; + + case 102: +#line 477 "parser.y" + { + bx_dbg_set_reg8h_value((yyvsp[(2) - (5)].uval), (yyvsp[(4) - (5)].uval)); + } + break; + + case 103: +#line 481 "parser.y" + { + bx_dbg_set_reg16_value((yyvsp[(2) - (5)].uval), (yyvsp[(4) - (5)].uval)); + } + break; + + case 104: +#line 485 "parser.y" + { + bx_dbg_set_reg32_value((yyvsp[(2) - (5)].uval), (yyvsp[(4) - (5)].uval)); + } + break; + + case 105: +#line 489 "parser.y" + { + bx_dbg_set_reg64_value((yyvsp[(2) - (5)].uval), (yyvsp[(4) - (5)].uval)); + } + break; + + case 106: +#line 493 "parser.y" + { + bx_dbg_load_segreg((yyvsp[(2) - (5)].uval), (yyvsp[(4) - (5)].uval)); + } + break; + + case 107: +#line 500 "parser.y" + { + bx_dbg_vbreakpoint_command(bkAtIP, 0, 0); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 108: +#line 505 "parser.y" + { + bx_dbg_vbreakpoint_command(bkRegular, (yyvsp[(2) - (5)].uval), (yyvsp[(4) - (5)].uval)); + free((yyvsp[(1) - (5)].sval)); + } + break; + + case 109: +#line 510 "parser.y" + { + bx_dbg_lbreakpoint_command(bkAtIP, 0); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 110: +#line 515 "parser.y" + { + bx_dbg_lbreakpoint_command(bkRegular, (yyvsp[(2) - (3)].uval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 111: +#line 520 "parser.y" + { + bx_dbg_lbreakpoint_symbol_command((yyvsp[(2) - (3)].sval)); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 112: +#line 525 "parser.y" + { + bx_dbg_pbreakpoint_command(bkAtIP, 0); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 113: +#line 530 "parser.y" + { + bx_dbg_pbreakpoint_command(bkRegular, (yyvsp[(2) - (3)].uval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 114: +#line 535 "parser.y" + { + bx_dbg_pbreakpoint_command(bkRegular, (yyvsp[(3) - (4)].uval)); + free((yyvsp[(1) - (4)].sval)); + } + break; + + case 115: +#line 543 "parser.y" + { + bx_dbg_info_bpoints_command(); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 116: +#line 551 "parser.y" + { + bx_dbg_info_symbols_command(0); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 117: +#line 556 "parser.y" + { + bx_dbg_info_symbols_command((yyvsp[(2) - (3)].sval)); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 118: +#line 564 "parser.y" + { + bx_dbg_info_bpoints_command(); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 119: +#line 569 "parser.y" + { + bx_dbg_info_registers_command(BX_INFO_GENERAL_PURPOSE_REGS | BX_INFO_FPU_REGS | BX_INFO_SSE_REGS); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 120: +#line 574 "parser.y" + { + bx_dbg_info_idt_command((yyvsp[(3) - (5)].uval), (yyvsp[(4) - (5)].uval)); + free((yyvsp[(1) - (5)].sval)); free((yyvsp[(2) - (5)].sval)); + } + break; + + case 121: +#line 579 "parser.y" + { + bx_dbg_info_ivt_command((yyvsp[(3) - (5)].uval), (yyvsp[(4) - (5)].uval)); + free((yyvsp[(1) - (5)].sval)); free((yyvsp[(2) - (5)].sval)); + } + break; + + case 122: +#line 584 "parser.y" + { + bx_dbg_info_gdt_command((yyvsp[(3) - (5)].uval), (yyvsp[(4) - (5)].uval)); + free((yyvsp[(1) - (5)].sval)); free((yyvsp[(2) - (5)].sval)); + } + break; + + case 123: +#line 589 "parser.y" + { + bx_dbg_info_ldt_command((yyvsp[(3) - (5)].uval), (yyvsp[(4) - (5)].uval)); + free((yyvsp[(1) - (5)].sval)); free((yyvsp[(2) - (5)].sval)); + } + break; + + case 124: +#line 594 "parser.y" + { + bx_dbg_dump_table(); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 125: +#line 599 "parser.y" + { + bx_dbg_info_tss_command(); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 126: +#line 604 "parser.y" + { + bx_dbg_info_flags(); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 127: +#line 609 "parser.y" + { + bx_dbg_info_linux_command(); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 128: +#line 614 "parser.y" + { + bx_dbg_info_symbols_command(0); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 129: +#line 619 "parser.y" + { + bx_dbg_info_symbols_command((yyvsp[(3) - (4)].sval)); + free((yyvsp[(1) - (4)].sval)); free((yyvsp[(2) - (4)].sval)); free((yyvsp[(3) - (4)].sval)); + } + break; + + case 130: +#line 624 "parser.y" + { + bx_dbg_info_ne2k(-1, -1); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 131: +#line 629 "parser.y" + { + free((yyvsp[(1) - (5)].sval)); free((yyvsp[(2) - (5)].sval)); free((yyvsp[(3) - (5)].sval)); + bx_dbg_info_ne2k((yyvsp[(4) - (5)].uval), -1); + } + break; + + case 132: +#line 634 "parser.y" + { + free((yyvsp[(1) - (7)].sval)); free((yyvsp[(2) - (7)].sval)); free((yyvsp[(3) - (7)].sval)); free((yyvsp[(5) - (7)].sval)); + bx_dbg_info_ne2k((yyvsp[(4) - (7)].uval), (yyvsp[(6) - (7)].uval)); + } + break; + + case 133: +#line 639 "parser.y" + { + bx_dbg_info_pic(); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 134: +#line 644 "parser.y" + { + bx_dbg_info_vga(); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 135: +#line 649 "parser.y" + { + bx_dbg_info_pci(); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 136: +#line 656 "parser.y" + { (yyval.uval) = EMPTY_ARG; } + break; + + case 138: +#line 661 "parser.y" + { + bx_dbg_info_registers_command(BX_INFO_GENERAL_PURPOSE_REGS); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 139: +#line 669 "parser.y" + { + bx_dbg_info_registers_command(BX_INFO_FPU_REGS); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 140: +#line 677 "parser.y" + { + bx_dbg_info_registers_command(BX_INFO_MMX_REGS); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 141: +#line 685 "parser.y" + { + bx_dbg_info_registers_command(BX_INFO_SSE_REGS); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 142: +#line 693 "parser.y" + { + bx_dbg_info_segment_regs_command(); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 143: +#line 701 "parser.y" + { + bx_dbg_info_control_regs_command(); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 144: +#line 709 "parser.y" + { + bx_dbg_info_debug_regs_command(); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 145: +#line 717 "parser.y" + { + bx_dbg_del_breakpoint_command((yyvsp[(2) - (3)].uval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 146: +#line 725 "parser.y" + { + bx_dbg_en_dis_breakpoint_command((yyvsp[(2) - (3)].uval), 1); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 147: +#line 732 "parser.y" + { + bx_dbg_en_dis_breakpoint_command((yyvsp[(2) - (3)].uval), 0); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 148: +#line 740 "parser.y" + { + bx_dbg_quit_command(); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 149: +#line 748 "parser.y" + { + bx_dbg_examine_command((yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval),1, (yyvsp[(3) - (4)].uval), 1); + free((yyvsp[(1) - (4)].sval)); free((yyvsp[(2) - (4)].sval)); + } + break; + + case 150: +#line 753 "parser.y" + { + bx_dbg_examine_command((yyvsp[(1) - (3)].sval), (yyvsp[(2) - (3)].sval),1, 0, 0); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 151: +#line 758 "parser.y" + { + bx_dbg_examine_command((yyvsp[(1) - (3)].sval), NULL,0, (yyvsp[(2) - (3)].uval), 1); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 152: +#line 763 "parser.y" + { + bx_dbg_examine_command((yyvsp[(1) - (2)].sval), NULL,0, 0, 0); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 153: +#line 771 "parser.y" + { + bx_dbg_restore_command((yyvsp[(2) - (4)].sval), (yyvsp[(3) - (4)].sval)); + free((yyvsp[(1) - (4)].sval)); free((yyvsp[(2) - (4)].sval)); free((yyvsp[(3) - (4)].sval)); + } + break; + + case 154: +#line 779 "parser.y" + { + bx_dbg_setpmem_command((yyvsp[(2) - (5)].uval), (yyvsp[(3) - (5)].uval), (yyvsp[(4) - (5)].uval)); + free((yyvsp[(1) - (5)].sval)); + } + break; + + case 155: +#line 787 "parser.y" + { + bx_dbg_query_command((yyvsp[(2) - (3)].sval)); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 156: +#line 795 "parser.y" + { + bx_dbg_take_command((yyvsp[(2) - (3)].sval), 1); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 157: +#line 800 "parser.y" + { + bx_dbg_take_command((yyvsp[(2) - (4)].sval), (yyvsp[(3) - (4)].uval)); + free((yyvsp[(1) - (4)].sval)); free((yyvsp[(2) - (4)].sval)); + } + break; + + case 158: +#line 805 "parser.y" + { + bx_dbg_take_command((yyvsp[(2) - (3)].sval), 1); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 159: +#line 813 "parser.y" + { + bx_dbg_disassemble_current(NULL); + free((yyvsp[(1) - (2)].sval)); + } + break; + + case 160: +#line 818 "parser.y" + { + bx_dbg_disassemble_command(NULL, (yyvsp[(2) - (3)].uval), (yyvsp[(2) - (3)].uval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 161: +#line 823 "parser.y" + { + bx_dbg_disassemble_command(NULL, (yyvsp[(2) - (4)].uval), (yyvsp[(3) - (4)].uval)); + free((yyvsp[(1) - (4)].sval)); + } + break; + + case 162: +#line 828 "parser.y" + { + bx_dbg_disassemble_current((yyvsp[(2) - (3)].sval)); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 163: +#line 833 "parser.y" + { + bx_dbg_disassemble_command((yyvsp[(2) - (4)].sval), (yyvsp[(3) - (4)].uval), (yyvsp[(3) - (4)].uval)); + free((yyvsp[(1) - (4)].sval)); free((yyvsp[(2) - (4)].sval)); + } + break; + + case 164: +#line 838 "parser.y" + { + bx_dbg_disassemble_command((yyvsp[(2) - (5)].sval), (yyvsp[(3) - (5)].uval), (yyvsp[(4) - (5)].uval)); + free((yyvsp[(1) - (5)].sval)); free((yyvsp[(2) - (5)].sval)); + } + break; + + case 165: +#line 843 "parser.y" + { + bx_dbg_disassemble_switch_mode(); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 166: +#line 848 "parser.y" + { + bx_dbg_disassemble_hex_mode_switch((yyvsp[(3) - (4)].bval)); + free((yyvsp[(1) - (4)].sval)); free((yyvsp[(2) - (4)].sval)); + } + break; + + case 167: +#line 853 "parser.y" + { + bx_dbg_set_disassemble_size((yyvsp[(4) - (5)].uval)); + free((yyvsp[(1) - (5)].sval)); free((yyvsp[(2) - (5)].sval)); + } + break; + + case 168: +#line 861 "parser.y" + { + bx_dbg_instrument_command((yyvsp[(2) - (3)].sval)); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 169: +#line 866 "parser.y" + { + bx_dbg_instrument_command((yyvsp[(2) - (3)].sval)); + free((yyvsp[(1) - (3)].sval)); free((yyvsp[(2) - (3)].sval)); + } + break; + + case 170: +#line 874 "parser.y" + { + bx_dbg_doit_command((yyvsp[(2) - (3)].uval)); + free((yyvsp[(1) - (3)].sval)); + } + break; + + case 171: +#line 882 "parser.y" + { + bx_dbg_crc_command((yyvsp[(2) - (4)].uval), (yyvsp[(3) - (4)].uval)); + free((yyvsp[(1) - (4)].sval)); + } + break; + + case 172: +#line 890 "parser.y" + { + dbg_printf("q|quit|exit - quit debugger and emulator execution\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 173: +#line 895 "parser.y" + { + dbg_printf("c|cont|continue - continue executing\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 174: +#line 900 "parser.y" + { + dbg_printf("s|step [count] - execute #count instructions on current processor (default is one instruction)\n"); + dbg_printf("s|step [cpu] - execute #count instructions on processor #cpu\n"); + dbg_printf("s|step all - execute #count instructions on all the processors\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 175: +#line 907 "parser.y" + { + dbg_printf("n|next|p - execute instruction stepping over subroutines\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 176: +#line 912 "parser.y" + { + dbg_printf("vb|vbreak - set a virtual address instruction breakpoint\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 177: +#line 917 "parser.y" + { + dbg_printf("lb|lbreak - set a linear address instruction breakpoint\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 178: +#line 922 "parser.y" + { + dbg_printf("p|pb|break|pbreak - set a physical address instruction breakpoint\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 179: +#line 927 "parser.y" + { + dbg_printf("d|del|delete - delete a breakpoint\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 180: +#line 932 "parser.y" + { + dbg_printf("bpe - enable a breakpoint\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 181: +#line 937 "parser.y" + { + dbg_printf("bpd - disable a breakpoint\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 182: +#line 942 "parser.y" + { + dbg_printf("blist - list all breakpoints (same as 'info break')\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 183: +#line 947 "parser.y" + { + dbg_printf("modebp - toggles mode switch breakpoint\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 184: +#line 952 "parser.y" + { + dbg_printf("crc - show CRC32 for physical memory range addr1..addr2\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 185: +#line 957 "parser.y" + { + dbg_printf("trace on - print disassembly for every executed instruction\n"); + dbg_printf("trace off - disable instruction tracing\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 186: +#line 963 "parser.y" + { + dbg_printf("trace-reg on - print all registers before every executed instruction\n"); + dbg_printf("trace-reg off - disable registers state tracing\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 187: +#line 969 "parser.y" + { + dbg_printf("trace-mem on - print all memory accesses occured during instruction execution\n"); + dbg_printf("trace-mem off - disable memory accesses tracing\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 188: +#line 975 "parser.y" + { + dbg_printf("restore [path] - restore bochs root param from the file\n"); + dbg_printf("for example:\n"); + dbg_printf("restore \"cpu0\" - restore CPU #0 from file \"cpu0\" in current directory\n"); + dbg_printf("restore \"cpu0\" \"/save\" - restore CPU #0 from file \"cpu0\" located in directory \"/save\"\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 189: +#line 983 "parser.y" + { + dbg_printf("ptime - print current time (number of ticks since start of simulation)\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 190: +#line 988 "parser.y" + { + dbg_printf("sb - insert a time breakpoint delta instructions into the future\n"); + free((yyvsp[(1) - (3)].sval));free((yyvsp[(2) - (3)].sval)); + } + break; + + case 191: +#line 993 "parser.y" + { + dbg_printf("sba

Setting up CVS write access + +If you are an official SourceForge developer, then you can use CVS with write +access. The CVS contains the most recent copy of the source code, and with +write access you can upload any changes you make to the CVS server for others +to use. A few extra steps are required the first time you use CVS write +access. + + +
Install ssh and cvs + +First you need to install both cvs (Concurrent Version System) and ssh (Secure +Shell). These are already installed on many UNIX systems and also Cygwin +(win32 platform). If not, you can install binaries or compile cvs and ssh +yourself. The links below should help you get going. + + + CVS software and instructions are available at www.cvshome.org. + A free version of secure shell called OpenSSH is at www.openssh.org. + OpenSSH requires a library called OpenSSL from www.openssl.org. Be sure to install OpenSSL before trying to compile OpenSSH. + +
+ +
ssh to cvs.sf.net + +Next, you need to use secure shell to connect to cvs.sf.net. This step is a +little strange, because you can't actually log in and get a shell prompt. All +that will happen, when you get the username and password right, is that it +will create a home directory on that machine for you. That's it! If you try +it again, it will say "This is a restricted Shell Account. You cannot execute +anything here." At this point, you've succeeded and you never have to do +this step again, ever. + + + ssh sfusername@bochs.cvs.sf.net + + + + +Replace sfusername with your Source Forge username, +of course. The first time, you will probably get a message like + +The authenticity of host 'cvs.sf.net' can't be established. +Are you sure you want to continue? + +Just type yes. When it asks for a password, be sure to type your source +forge password. If you have trouble logging in, be sure to use your SOURCE +FORGE username and password in the ssh line, which isn't necessarily the same +as your local username and password. Add the "-v" option to ssh to see more +information about what is failing. If you have ssh version 2, it is possible +that you might need to add "-1" to the ssh command to force it to use the +version 1 protocol.
+ +
Set CVS_RSH environment variable to ssh + +Every time you connect to the Source Forge CVS server (including cvs update, +stat, commit, etc.), you must set the CVS_RSH environment variable to ssh. So +just take the time now to add one of these lines to your .bashrc/.cshrc, so +that the CVS_RSH setting will be there every time you log in. + + + + export CVS_RSH=ssh (bash syntax) + setenv CVS_RSH ssh (csh syntax) + +
+ +
cvs checkout + +Finally, you should be able to do the checkout! If you already have a Bochs +subdirectory directory, move it out of the way because the checkout will +overwrite it. + + + + export CVSROOT=":ext:sfusername@bochs.cvs.sourceforge.net:/cvsroot/bochs" + cvs -z3 checkout bochs + sfusername@bochs.cvs.sourceforge.net's password: <--type your password + + + +In the CVSROOT variable, replace sfusername with your SF username. There's +no need to add CVSROOT to your rc files because CVS will remember it +after the checkout. The -z3 (optional) just adds some compression to make +the checkout go faster. Once all the files have been downloaded, you will +have a Bochs directory which is checked out with write access! + +
+ +
+ +
Using CVS write access + +
Checking in files + +Once you have a Bochs directory with cvs write access, you can compile the +files, edit them, test them, etc. See the documentation section, "Tracking +the source code with CVS" for more info on CVS, in the User Manual. +(FIXME: add cross reference) But what's new and different is that you can now +do cvs commits. When a file is all fixed and ready to share with the rest of +the world, you run a commit command to upload your version to the server. +First, it's good to do a cvs update to make sure nobody else has changed it +since you downloaded it last. + + + + $ cvs update file.cc + sfusername@bochs.cvs.sf.net's password: <--type your password + $ cvs commit file.cc + sfusername@bochs.cvs.sf.net's password: <--type your password + [editor opens. type log message, save, and exit.] + + + +When CVS starts an editor, The default is usually vi. If you want a different +editor, set the EDITOR environment variable to the name of your preferred +editor. When you're done, just save the file and quit the editor. Unless +there's some problem, you will see a message that says what the new revision +number for the file is, and then "done". If while you're editing the log +message, you decide that you don't want to commit after all, don't save the +file. Quit the editor, and when it asks where the log message went, tell it +to abort. + + + +Here is an example of a successful checkin: + + + $ cvs commit misc.txt + sfusername@bochs.cvs.sf.net's password: <--type your password + [edit log msg] + Checking in misc.txt; + /cvsroot/bochs/bochs/doc/docbook/misc.txt,v <-- misc.txt + new revision: 1.6; previous revision: 1.5 + done + + +And here is an aborted one: + + + $ cvs commit misc.txt + sfusername@bochs.cvs.sf.net's password: <--type your password + [quit editor without saving] + Log message unchanged or not specified + a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs + Action: a + cvs [commit aborted]: aborted by user + + + +
+ +
+ +
SourceForge bug, feature, and patch trackers + + &FIXME; + +
+ +
Ideas for other sections + + +Ideas: +- how to browse code with cvsweb +- how to find an identifier, variable, or specific text in the code +- how to make patches with CVS + + +
+ + + +About the code + +
Overview + +The initial versions of some sections in this chapter are based on a document +written by Peter "Firefly" Lund. It was added and updated in January 2006. + + +The Bochs virtual PC consists of many pieces of hardware. At a bare minimum +there are always a CPU, a PIT (Programmable Interval Timer), a PIC +(Programmable Interrupt Controller), a DMA controller, some memory (this +includes both RAM and BIOS ROMs), a video card (usually VGA), a keyboard port +(also handles the mouse), an RTC with battery backed NVRAM, and some extra +motherboard circuitry. + + +There might also be a NE2K ethernet card, a PCI controller, a Sound Blaster 16, +an IDE controller (+ harddisks/CDROM), a SCSI controller (+ harddisks), a +floppy controller, an APIC .. + + +There may also be more than one CPU. + + +Most of these pieces of hardware have their own C++ class - and if Bochs is +configured to have more than one piece of a type of hardware, each will have +its own object. + + +The pieces of hardware communicates over a couple of buses with each other - +some of the things that the buses carry are reads and writes in memory space, +reads and writes in I/O space, interrupt requests, interrupt acknowledges, DMA +requests, DMA acknowledges, and NMI request/acknowledge. How that is simulated +is explained later.&FIXME; + + +Other important pieces of the puzzle are: the options object (reads/writes +configuration files, can be written to and queried while Bochs is running) and +the GUI object. There are many different but compatible implementations of the +GUI object, depending on whether you compile for X (Unix/Linux), Win32, +Macintosh (two versions: one for Mac OS X and one for older OS's), BeOS, Amiga, +etc. + + +And then there is the supporting cast: debugger, config menu, panic handler, +disassembler, tracer, instrumentation. + +
+ +
Directory Structure + + +Directory structure + + + +Location +Meaning + + + +biosSystem and VGA BIOS images, system BIOS sources and makefile +buildadditional stuff required for building Bochs on different platforms +bx_debugthe builtin Bochs debugger +cputhe cpu emulation sources +disasmthe disassembler for the Bochs debugger +doc/docbookthe Bochs documentation in DocBook format +doc/manBochs manual pages +docs-htmlold Bochs documentation in HTML (will be replaced by DocBook) +dynamicempty directory (reserved for dynamic translation code) +fontthe default VGA font used by most of the display libraries +fputhe fpu emulation sources +guidisplay libraries (guis), the simulator interface and text mode config interface +gui/bitmapsbitmaps for the headerbar +gui/keymapskeymaps for the keyboard mapping feature +hosthost specific drivers (currently only used by the pcidev kernel module for Linux) +instrumentdirectory tree for the instrumentation feature +iodevstandard PC devices, PCI devices, lowlevel networking and sound drivers +memorymemory management and ROM loader +miscuseful utilities (e.g. bximage, bxcommit, niclist) +misc/sb16tool to control the SB16 emulation from the guest side +patchespending patches +plex86plex86 directory structure (possibly outdated) + + +
+
+
+ +
Emulator Objects +
Weird macros and other mysteries + +Bochs has many macros with inscrutable names. One might even go as far as to +say that Bochs is macro infested. +Some of them are gross speed hacks, to cover up the slow speed that C++ causes. +Others paper over differences between the simulated PC configurations. +Many of the macros exhibit the same problem as C++ does: too much stuff happens +behind the programmer's back. More explicitness would be a big win. + +
+
Static methods hack + +C++ methods have an invisible parameter called the this pointer - otherwise the +method wouldn't know which object to operate on. In many cases in Bochs, there +will only ever be one object - so this flexibility is unnecessary. There is a +hack that can be enabled by #defining BX_USE_CPU_SMF to 1 in config.h + that makes most methods static, which means they have a "special +relationship" with the class they are declared in but apart from that are +normal C functions with no hidden parameters. Of course they still need access +to the internals of an object, so the single object of their class has a globally +visible name that these functions use. It is all hidden with macros. + + +Declaration of a class, from iodev/pic.h: + + +... +#if BX_USE_PIC_SMF +# define BX_PIC_SMF static +# define BX_PIC_THIS thePic-> +#else +# define BX_PIC_SMF +# define BX_PIC_THIS this-> +#endif +... +class bx_pic_c : public bx_pic_stub_c { + +public: + bx_pic_c(void); + ~bx_pic_c(void); +... + BX_PIC_SMF void service_master_pic(void); + BX_PIC_SMF void service_slave_pic(void); + BX_PIC_SMF void clear_highest_interrupt(bx_pic_t *pic); + }; + + +And iodev/pic.cc: + + +... +#define LOG_THIS thePic-> +... +bx_pic_c *thePic = NULL; +... +void bx_pic_c::service_master_pic(void) +{ + Bit8u unmasked_requests; + int irq; + Bit8u isr, max_irq; + Bit8u highest_priority = BX_PIC_THIS s.master_pic.lowest_priority + 1; + if(highest_priority > 7) + highest_priority = 0; + + if (BX_PIC_THIS s.master_pic.INT) { /* last interrupt still not acknowleged */ + return; + } + + if (BX_PIC_THIS s.master_pic.special_mask) { + /* all priorities may be enabled. check all IRR bits except ones + * which have corresponding ISR bits set + */ + max_irq = highest_priority; + } + else { /* normal mode */ + /* Find the highest priority IRQ that is enabled due to current ISR */ + isr = BX_PIC_THIS s.master_pic.isr; +... +} +... + + +Ugly, isn't it? If we use static methods, methods prefixed with BX_PIC_SMF are +declared static and references to fields inside the object, which are prefixed +with BX_PIC_THIS, will use the globally visible object, thePic->. If we don't +use static methods, BX_PIC_SMF evaluates to nothing and BX_PIC_THIS becomes this->. +Making it evaluate to nothing would be a lot cleaner, but then the scoping rules +would change slightly between the two Bochs configurations, which would be a load +of bugs just waiting to happen. Some classes use BX_SMF, others have their own +version of the macro, like BX_PIC_SMF above. + +
+
CPU und memory objects in UP/SMP configurations + +The CPU class is a special case of the above: if Bochs is simulating a uni- +processor machine then there is obviously only one bx_cpu_c object and the +static methods trick can be used. If, on the other hand, Bochs is simulating an +smp machine then we can't use the trick. The same seems to be true for memory: +for some reason, we have a memory object for each CPU object. This might become +relevant for NUMA machines, but they are not all that common -- and even the +existing IA-32 NUMA machines bend over backwards to hide that fact: it should +only be visible in slightly worse timing for non-local memory and non-local +peripherals. Other than that, the memory map and device map presented to each +CPU will be identical. + + +In a UP configuration, the CPU object is declared as bx_cpu. In an SMP +configuration it will be an array of pointers to CPU objects (bx_cpu_array[]). +For memory that would be bx_mem and bx_mem_array[], respectively. +Each CPU object contains a pointer to its associated memory object. +Access of a CPU object often goes through the BX_CPU(x) macro, which either +ignores the parameter and evaluates to &bx_cpu, or evaluates to bx_cpu_array +[n], so the result will always be a pointer. The same goes for BX_MEM(x). +If static methods are used then BX_CPU_THIS_PTR evaluates to BX_CPU(0)->. Ugly, +isn't it? + +
+
The configuration parameter tree + +Starting with version 1.3, the Bochs configuration parameters are stored in parameter +objects. These objects have get/set methods with min/max checks and it is possible +to define parameter handlers to perform side effects and to override settings. +Each parameter type has it's own object type with specific features (numeric, +boolean, enum, string and file name). A special object type containing a list of +parameters is designed for building and managing configuration menus or dialogs +automatically. In the original implementation the parameters could be accessed +only with their unique id from a static list or a special structure containing +pointers to all parameters. + + +Starting with version 2.3, the Bochs parameter object handling has been rewritten +to a parameter tree. There is now a root list containing child lists, and these +lists can contain lists or parameters and so on. The parameters are now accessed +by a name build from all the list names in the path and finally the parameter +name separated by periods. + +Bit32u megs = SIM->get_param_num("memory.standard.ram.size")->get(); + + + +The example above shows how to get the memory size in megabytes from the simulator +interface. In the root list (".") there is child list named "memory" containing +a child list "standard". It's child list "ram" contains the numeric parameter type +"size". The SIM->get_param_num() methods returns the object pointer and the get() +method returns the parameter value. + + +The table below shows all parameter types used by the Bochs configuration interface. + +Parameter types + + + +Type +Description + + + + +bx_object_c +Base class for all the other parameter types. It contains the unique parameter id and the object type value. + + +bx_param_c +Generic parameter class. It contains the name, label, description and the input/output formats. + + +bx_param_num_c +Numerical (decimal/hex) config settings are stored in this parameter type. + + +bx_param_bool_c +This parameter type is based on bx_param_num_c, but it is designed for boolean values. A dependency +list can be defined to enable/disable other parameters depending on the value change. + + +bx_param_enum_c +Based on bx_param_num_c this parameter type contains a list of valid values. + + +bx_param_string_c +Configuration strings are stored in this type of parameter. + + +bx_param_filename_c +Based on bx_param_string_c this parameter type is used for file names. + + +bx_list_c +Contains a list of pointers to parameters (bx_param_*_c and bx_list_c). +In the config interface it is used for menus/dialogs. + + + +
+
+
+
The save/restore feature + +The save/restore feature is based on an extension to the parameter tree concept. +A subtree (list) called "bochs" appears in the root of the parameter tree +and some new "shadow" parameter types store pointers to values instead of the values +itself. All the hardware objects have register_state() methods to register pointers +to the device registers and switches that need to be saved. The simulator interface +saves the registered data in text format to the specified folder (usually one file +per item in the save/restore list). Large binary arrays are registered with a +special parameter type, so they are saved as separate files. + + +The table below shows the additional parameter types for save/restore. + +Save/restore parameter types + + + +Type +Description + + + + +bx_shadow_num_c +Based on bx_param_num_c this type stores a pointer to a numerical variable. + + +bx_shadow_bool_c +This parameter type stores a pointer to a boolean variable. + + +bx_shadow_data_c +This special parameter type stores pointer size of a binary array. + + + +
+It is also possible to use the bx_param_num_c object with parameter save/restore +handlers. With this special way several device settings can be save to and restored +from one single parameter. +
+ +All devices can uses these two save/restore specific methods: + +register_state() is called after the device init() to register the device members for save/restore +after_restore_state() is an optional method to do things directly after restore + + +
+
+ +
Configure Scripting + + &FIXME; + configure script, makefiles, header files + +
+ +
Log Functions + + &FIXME; + log functions: what is a panic, what is an error, etc. + +
+ +
timers + + &FIXME; + +
+ +
Bochs's CMOS map + +In addition to the default CMOS RAM layout, the Bochs BIOS uses some additional +registers for harddisk parameters and the boot sequence. The following table +shows all CMOS registers and their meaning. + + + +Legend: +S - set by the emulator (Bochs) +Q - set by the emulator (Qemu) +B - set by the bios +U - unused by the bios + +LOC NOTES MEANING +0x00 S rtc seconds +0x01 B second alarm +0x02 S rtc minutes +0x03 B minute alarm +0x04 S rtc hours +0x05 B hour alarm + +0x06 S,U day of week +0x07 S,B date of month +0x08 S,B month +0x09 S,B year + +0x0a S,B status register A +0x0b S,B status register B +0x0c S status register C +0x0d S status register D + +0x0f S shutdown status + values: + 0x00: normal startup + 0x09: normal + 0x0d+: normal + 0x05: eoi ? + else: unimpl + +0x10 S fd drive type (2 nibbles: high=fd0, low=fd1) + values: + 1: 360K 5.25" + 2: 1.2MB 5.25" + 3: 720K 3.5" + 4: 1.44MB 3.5" + 5: 2.88MB 3.5" + +!0x11 configuration bits!! + +0x12 S how many disks first (hd type) + +!0x13 advanced configuration bits!! + +0x14 S,U equipment byte (?) + bits where what + 7-6 floppy.cc + 5-4 vga.cc 0 = vga + 2 keyboard.cc 1 = enabled + 0 floppy.cc + +0x15 S,U base memory - low +0x16 S,U base memory - high + +0x17 S,U extended memory in k - low +0x18 S,U extended memory in k - high + +0x19 S hd0: extended type +0x1a S hd1: extended type + +0x1b S,U hd0:cylinders - low +0x1c S,U hd0:cylinders - high +0x1d S,U hd0:heads +0x1e S,U hd0:write pre-comp - low +0x1f S,U hd0:write pre-comp - high +0x20 S,U hd0:retries/bad_map/heads>8 +0x21 S,U hd0:landing zone - low +0x22 S,U hd0:landing zone - high +0x23 S,U hd0:sectors per track + +0x24 S,U hd1:cylinders - low +0x25 S,U hd1:cylinders - high +0x26 S,U hd1:heads +0x27 S,U hd1:write pre-comp - low +0x28 S,U hd1:write pre-comp - high +0x29 S,U hd1:retries/bad_map/heads>8 +0x2a S,U hd1:landing zone - low +0x2b S,U hd1:landing zone - high +0x2c S,U hd1:sectors per track + +0x2d S boot from (bit5: 0:hd, 1:fd) + +0x2e S,U standard cmos checksum (0x10->0x2d) - high +0x2f S,U standard cmos checksum (0x10->0x2d) - low + +0x30 S extended memory in k - low +0x31 S extended memory in k - high + +0x32 S rtc century + +0x34 S extended memory in 64k - low +0x35 S extended memory in 64k - high + +0x37 S ps/2 rtc century (copy of 0x32, needed for winxp) + +0x38 S eltorito boot sequence + boot signature check + bits + 0 floppy boot signature check (1: disabled, 0: enabled) + 7-4 boot drive #3 (0: unused, 1: fd, 2: hd, 3:cd, else: fd) + +0x39 S ata translation policy - ata0 + ata1 + bits + 1-0 ata0-master (0: none, 1: LBA, 2: LARGE, 3: R-ECHS) + 3-2 ata0-slave + 5-4 ata1-master + 7-6 ata1-slave + +0x3a S ata translation policy - ata2 + ata3 (see above) + +0x3d S eltorito boot sequence (see above) + bits + 3-0 boot drive #1 + 7-4 boot drive #2 +0x5b Q extra memory above 4GB +0x5f Q number of processors + + +
+ +
+ +Sound Blaster 16 Emulation + + A little more up-to-date version of the user related part of this section is + available in the user guide. + + +Sound Blaster 16 (SB16) emulation for Bochs was written and donated by +Josef Drexler, who has a +web page on the topic. + The entire set of his SB16 patches have been integrated into +Bochs, however, so you can find everything you need here. + + + +SB16 Emulation has been tested with several soundcards and versions of Linux. Please give +Josef feedback on +whether is does or doesn't work on your combination of software and hardware. + + +
How well does it work? + +Right now, MPU401 emulation is next to perfect. It supports UART +and SBMIDI mode, because the SB16's MPU401 ports can't do anything else as well. + + + +The digital audio basically works, but the emulation is too slow for fluent +output unless the application doesn't do much in the background (or the +foreground, really). The sound tends to looping or crackle on slower +computer, but the emulation appears to be correct. Even a MOD +player works, although only for lower sampling speeds. + + +Also, the MIDI data running through the MPU401 ports can be written +into a SMF, that is the standard midi file. The wave output +can be written into a VOC file, which has a format defined by +Creative Labs. This file format can be converted to WAV by +sox for example. + +
+ +
Output to a sound card + + +Output is supported on Linux and Windows 95 at the moment. +On Linux, the output goes to any file or device. If you have a +wavetable synthesizer, midi can go to /dev/midi00, otherwise you may need +a midi interpreter. For example, the midid program from the +DosEmu project would work. Wave output should go to /dev/dsp. +These devices are assumed to be OSS devices, if they're not +some of the ioctl's might fail. +On Windows, midi and output goes to the midi mapper and the wave mapper, +respectively. A future version might have selectable output devices. + +
+ +
Installation on Linux + + +Prerequisites: + + + +A wavetable synthesizer on /dev/midi00 and a working /dev/dsp if you want real time music and sound, otherwise output to midi and wave files is also possible. +Optionally, you can use a software midi interpreter, such as the midid program from the DosEmu project instead of /dev/midi00. + +
+ +
Configuring Bochs + + +There are a few values in config.h that are relevant to the sound functions. +Edit config.h after running configure, but before compiling. + + + +BX_USE_SB16_SMF should be 1 unless you intend to have several sound cards +running at the same time. + + + +BX_SOUND_OUTPUT_C is the name of the class used for output. The default is +to have no output functions, so you need to change this if you want any sound. +The following are supported at the moment: + + + + bx_sound_linux_c for output to /dev/dsp and /dev/midi00 on Linux + (and maybe other OSes that use the OSS driver) + bx_sound_windows_c for output to the midi and wave mapper of + Windows 3.1 and higher. + bx_sound_output_c for no output at all. + + + +Setup the SB16 emulation in your .bochsrc, according to instructions +in that file. + +
+ +
Runtime configuration + + +The source for the SB16CTRL program that is used to modify +the runtime behaviour of the SB16 emulator is included in +misc/sb16. You can compile it or download the +executable. + + + +See the section "Sound Blaster 16 Emulation" in the user documentation for +information about the commands of SB16CTRL. + +
+ +
Features planned for the future + +Ports to more OS's, but I can't do this myself +Finishing the OPL3 FM emulation by translating the music to midi data + +
+ +
+Description of the sound output classes + + +This file is intended for programmers who would like to port the sound +output routines to their platform. It gives a short outline what services +have to be provided. + + +You should also have a look at the exisiting files, SOUNDLNX.CC +for Linux and SOUNDWIN.CC for Windows and their respective +header files to get an idea about how these things really work. + +
+ +
Files + + +The main include file is bochs.h. It has all definitions +for the system-independent functions that the SB16 emulation uses, which +are defined in sb16.h. + + + +Additionally, every output driver will have an include file, which +should be included at the end of sb16.h to allow the emulator +to use that driver. + + + +To actually make the emulator use any specific driver, +BX_SOUND_OUTPUT_C has to be set to the name of the respective +output class. + + + +Note that if your class contains any system-specific statements, +include-files and so on, you should enclose both the include-file and +the CC-file in an #if defined (OS-define) construct. +Also don't forget to add your file to the object list in +iodev/Makefile and iodev/Makefile.in. + +
+ +
Classes + + +The following classes are involved with the SB16 emulation: + + + +bx_sb16_c is the class containing the emulator itself, that +is the part acting on port accesses by the application, handling the +DMA transfers and so on. It also prepares the data for the output +classes. + + + +bx_sound_output_c is the base output class. It has all +the methods used by the emulator, but only as stubs and does not +actually produce any output. These methods are then called by +the emulator whenever output is necessary. + + + +bx_sound_OS_c is derived from +bx_sound_output_c. It contains the code to generate +output for the OS operating system. +It is necessary to override all +the methods defined in the base class, unless virtual functions +are used. Note that this should remain an option, so try to +override all methods, even if only as stubs. They should be +declared virtual if and only if BX_USE_SOUND_VIRTUAL +is defined, just as in the examples. +The constructor should call the inherited constructor +as usual, even though the current constructor does not do +anything yet. + + +
+ + +
Methods + +The following are the methods that the output class has to override. +All but constructor and destructor have to return either +BX_SOUND_OUTPUT_OK (0) if the function was successful, +or BX_SOUND_OUTPUT_ERR (1) if not. If any of the initialization +functions fail, output to that device is disabled until the emulator is restarted. + +
+ +
bx_sound_OS_c(bx_sb16_c*sb16) + + +The emulator instantiates the class at the initialization of Bochs. + + + +Description of the parameter: + + + + +sb16 is a pointer to the emulator class. +This pointer can then be used to access for example the writelog function to generate +sound-related log messages. Apart from that, no access to the emulator +should be necessary. + + + +The constructor should not allocate the output devices. +This shouldn't be done until the actual output occurs; in either +initmidioutput() or initwaveoutput(). +Otherwise it would be impossible to have two copies of Bochs running +concurrently (if anybody ever wants to do this). + + +
+ +
~bx_sound_OS_c() + + +The instance is destroyed just before Bochs ends. + +
+ +
int openmidioutput(char *device) + + + +openmidioutput() is called when the first midi output starts. +It is only called if the midi output mode is 1 (midimode 1). It should +prepare the given MIDI hardware for receiving midi commands. + + + +openmidioutput() will always be called before openwaveoutput(), +and closemidioutput()will always be called before closewaveoutput(), but not in all cases will both functions be called. + + +
+ +
+Description of the parameters: + + + + +device is a system-dependent variable. +It contains the value of the MIDI=device configuration option. + + + +Note that only one midi output device will be used at any one time. +device +may not have the same value throughout one session, but it will be closed +before it is changed. + + +
+ +
int midiready() + + +midiready() is called whenever the applications asks if the +midi queue can accept more data. + + + +Return values: + + + + +BX_SOUND_OUTPUT_OK if the midi output device is ready. + + + +BX_SOUND_OUTPUT_ERR if it isn't ready. + + + + +Note: midiready() will be called a few times +before the device is opened. If this is the case, it should +always report that it is ready, otherwise the application (not Bochs) +will hang. + +
+ +
int sendmidicommand(int delta, int command, int length, Bit8u data[]) + + +sendmidicommand()is called whenever a complete midi command has +been written to the emulator. It should then send the given midi command to the midi hardware. +It will only be called after the midi output has been opened. Note that +if at all possible it should not wait for the completion of the command +and instead indicate that the device is not ready during the execution +of the command. This is to avoid delays in the program while it is +generating midi output. + + + +Description of the parameters: + + + + +delta is the number of delta ticks that +have passed since the last command has been issued. It is always zero for +the first command. There are 24 delta ticks per quarter, and 120 quarters +per minute, thus 48 delta ticks per second. + + + +command is the midi command byte (sometimes +called status byte), in the usual range of 0x80..0xff. For more information +please see the midi standard specification. + + + +length is the number of data bytes that +are contained in the data structure. This does not include the status +byte which is not replicated in the data array. It can only be greater +than 3 for SysEx messages (commands 0xF0 and 0xF7) + + + +data[] is the array of these data bytes, +in the order they have in the standard MIDI specification. +Note, it might be NULL if length==0. + + +
+ + +
int closemidioutput() + + +closemidioutput() is called before shutting down Bochs or +when the +emulator gets the stop_output command through the emulator port. +After this, no more output will be necessary until openmidioutput() +is called again, but midiready() might still be called. It should do the following: + + + + +Wait for all remaining messages to be completed + + +Reset and close the midi output device + + +
+ + +
int openwaveoutput(char *device) + + +openwaveoutput() is called when the first wave output occurs, +and only if the selected wavemode is 1. It should do the following: + + + + +Open the given device, and prepare it for wave output + + + +or + + + +Store the device name so that the device can be opened in startplayback(). + + + + +openmidioutput() will always be called before openwaveoutput(), +and closemidioutput()will always be called before closewaveoutput(), but not in all cases will both functions be called. + + + +openwaveoutput() will typically be called once, whereas +startplayback() is called for every new DMA transfer to the SB16 emulation. If feasible, +it could be useful to open and/or lock the output device in +startplayback() as opposed to openwaveoutput() +to ensure that it can be used by other applications while Bochs doesn't +need it. + + + +However, many older applications don't use the auto-init DMA +mode, which means that they start a new DMA transfer for every single +block of output, which means usually for every 2048 bytes or so. +Unfortunately there is no way of knowing whether the application will +restart an expired DMA transfer soon, so that in these cases the +startwaveplayback function will be called very often, and it +isn't a good idea to have it reopen the device every time. + + +The buffer when writing to the device should not be overly large. +Usually about four buffers of 4096 bytes produce best results. Smaller +buffers could mean too much overhead, while larger buffers contribute +to the fact that the actual output will always be late when the application +tries to synchronize it with for example graphics. + + +The parameters are the following: + + + +device is the wave device selected by +the user. It is strictly system-dependent. The value is that of the +WAVE=device +configuration option. + + + + +Note that only one wave output device will be used at any one time. +device may not have the same value throughout one session, but it will be closed +before it is changed. + +
+ +
+int startwaveplayback(int frequency, int bits, int stereo, int format) + + +This function is called whenever the application starts a new DMA transfer. It should do the following: + + + + +Open the wave output device, unless openwaveoutput() did that +already + + + +Prepare the device for data and set the device parameters to those given +in the function call + + + + +The parameters are the following: + + + + +frequency is the desired frequency of the +output. Because of the capabities of the SB16, it can have any value between +5000 and 44,100. + + + +bits is either 8 or 16, denoting the resolution +of one sample. + + + +stereo is either 1 for stereo output, or 0 for mono output. + + + +format is a bit-coded value (see below). + + + + + +format bits + + + +Bit number +Meaning + + + + 0 (LSB) 0: unsigned data + 1: signed data + 1..6 Type of codec (see below) + 7 0: no reference byte + 1: with reference byte + 8..x reserved (0) + + +
+ + +codecs + + + +Value +Meaning + + + + 0 PCM (raw data) + 1 reserved + 2 2-bit ADPCM (Creative Labs format) + 3 2.4-bit (3-bit) ADPCM (Creative Labs format) + 4 4-bit ADPCM (Creative Labs format) + + +
+
+ +Other codecs are not supported by the SB hardware. In fact, most applications will +translate their data into raw data, so that in most cases the codec will be zero. + + +The number of bytes per sample can be calculated from this as (bits / 8) * (stereo + 1). + +
+ + +
+int waveready() + + +This is called whenever the emulator has another output buffer ready +and would like to pass it to the output class. This happens every +BX_SOUND_OUTPUT_WAVEPACKETSIZE bytes, or whenever a DMA transfer +is done or aborted. + + + +It should return whether the output device is ready for another buffer +of BX_SOUND_OUTPUT_WAVEPACKETSIZE bytes. +If BX_SOUND_OUTPUT_ERR +is returned, the emulator waits about 1/(frequency * bytes per sample) seconds +and then asks again. The DMA transfer is stalled during that time, but +the application keeps running, until the output device becomes ready. + + + +As opposed to midiready(), waveready() will not be +called unless the device is open. + +
+ +
+int sendwavepacket(int length, Bit8u data[]) + + +This function is called whenever a data packet of at most BX_SB16_WAVEPACKETSIZE +is ready at the SB16 emulator. It should then do the following: + + + + +Send this wave packet to the wave hardware + + + + +This function has to be synchronous, meaning that it has +to return immediately, and not wait until the output is done. Also, +this function might be called before the previous output is done. If your +hardware can't append the new output to the old one, you will have to implement +this yourself, or the output will be very chunky, with as much silence +between the blocks as the blocks take to play. This is not what you want. +Instead, waveready() should return BX_SOUND_OUTPUT_ERR +until the device accepts another block of data. + + + +Parameters: + + + + +length is the number of data bytes in +the data stream. It will never be larger than BX_SB16_WAVEPACKETSIZE. + + + +data is the array of data bytes. + + + + +The order of bytes in the data stream is the same as that in the Wave file format: + + +wave output types + + + +Output type +Sequence of data bytes + + + + 8 bit mono Sample 1; Sample 2; Sample 3; etc. + 8 bit stereo Sample 1, Channel 0; Sample 1, Channel 1; Sample 2, Channel 0; Sample 2, Channel 1; etc. + 16 bit mono Sample 1, LSB; Sample 1, MSB; Sample 2, LSB; Sample 2, MSB; etc. + 16 bit stereo Sample 1, LSB, Channel 0; Sample 1, MSB, Channel 0; Sample 1, LSB, Channel 1; Sample 1, MSB, Channel 1; etc. + + +
+
+ + +Typically 8 bit data will be unsigned with values from 0 to 255, and +16 bit data will be signed with values from -32768 to 32767, although the +SB16 is not limited to this. For further information on the codecs and +the use of reference bytes please refer to the Creative Labs Sound Blaster +Programmer's Manual, which can be downloaded from the Creative Labs web +site. + +
+ +
int stopwaveplayback() + + +This function is called at the end of a DMA transfer. It should do the following: + + + + +Close the output device if it was opened by startwaveplayback(). +and it's not going to be opened soon. Which is almost impossible to tell. + + +
+ +
int closewaveoutput() + + +This function is called just before Bochs exits. It should do the following: + + + + + Close the output device, if this hasn't been done by stopwaveplayback(). + + + + +Typically, stopwaveplayback() will be called several times, whenever +a DMA transfer is done, where closewaveoutput() will only be called +once. However, in the future it might be possible that openwaveoutput() +is called again, for example if the user chose to switch devices while +Bochs was running. This is not supported at the moment, but might be in +the future. + +
+ +
+ +
Harddisk Images based on redologs + +This section describes how the three new disk images "undoable", "growing", and "volatile" are +implemented in Bochs 2.1. It also applies to the write support the "vvfat" disk +image mode in Bochs 2.4.6. + + + +undoable -> flat file, plus growing, commitable, rollbackable redolog file + + +growing -> growing files, all previously unwritten sectors go to the end of file + + +volatile -> flat file, plus hidden growing redolog + + +vvfat -> virtual VFAT disk created from directory, plus hidden growing redolog + + + + + + +
+ + Description + + +The idea behind volatile and undoable disk images +is to have a flat file, associated with one redolog file. +In case of vvfat, a directory is associated with the redolog file. + + +Reading a sector is done from the redolog file if it contains +the sector, or from the flat file / vvfat directory otherwise. + + +Sectors written go to the redolog, +so flat files are opened in read only mode in this configuration. + + +The redolog is designed in a way so it starts as a small file +and grows with every new sectors written to it. Previously written +sectors are done in place. Redolog files can not shrink. + + +The redolog is a growing file that can be created on the fly. + + +Now, it turns out that if you only use a redolog without any +flat file, you get a "growing" disk image. + + +So "undoable", "volatile", "growing" and "vvfat" harddisk images classes +are implemented on top of a redolog class. + +
+ +
+ + How redologs works ? + + + +At the start of a redolog file, there is a header, so Bochs can check whether +a file is consistent. +This header could also be checked when we implement +automatic type and size detection. + + +The generic part of the header contains values like type of image, and +spec version number. + + +The header also has a specific part. +For redologs, the number +of entries of the catalog, the extent, bitmap and disk size are stored. + + + +In a redolog, the disk image is divided in a number of equal size "extents". +Each extent is a collection of successive 512-bytes sectors of the disk image, +preceeded by a n*512bytes bitmap. + + + +the n*512bytes bitmap defines the presence (data has been written to it) +of a specific sector in the extent, one bit for each sector. +Therefore with a 512bytes bitmap, each extent can hold up to 4k blocks + + + +Typically the catalog can have 256k entries. +With a 256k entries catalog and 512bytes bitmaps, the redolog can hold up to 512GiB + + + + +All data is stored on images as little-endian values + + +
+ + Header + + +At the start of a redolog file, there is a header. This header is designed +to be reusable by other disk image types. + + +The header length is 512 bytes. It contains : + +Generic header description + + + +Start position in bytes +Length in bytes +Data type +Description +Possible values + + + + 0 32 string magical value Bochs Virtual HD Image + 32 16 string type of file Redolog + 48 16 string subtype of file Undoable, Volatile, Growing + 64 4 Bit32u version of used specification 0x00010000 + 68 4 Bit32u header size 512 + + +
+ +Redolog specific header description + + + +Start position in bytes +Length in bytes +Data type +Description + + + + 72 4 Bit32u number of entries in the catalog + 76 4 Bit32u bitmap size in bytes + 80 4 Bit32u extent size in bytes + 84 8 Bit64u disk size in bytes + + +
+
+
+
+ + Catalog + + +Immediately following the header, there is a catalog containing +the position number (in extents) where each extent is located in the file. + + +Each position is a Bit32u entity. + + +
+
+ + Extent + + + &FIXME; + +
+
+ +
+Parameters + + +The following tables shows what parameters are used when creating redologs or creating "growing" images : + + + How number of entries in the catalog and number of blocks by extents are computed + + + + +Catalog entries Catalog size(KiB) Bitmap size (B) Extent size (KiB) Disk Max Size + + + + + +512 2 1 4 2MiB + + +512 2 2 8 4MiB + + +1k 4 2 8 8MiB + + +1k 4 4 16 16MiB + + +2k 8 4 16 32MiB + + +2k 8 8 32 64MiB + + +4k 16 8 32 128MiB + + +4k 16 16 64 256MiB + + +8k 32 16 64 512MiB + + +8k 32 32 128 1GiB + + +16k 64 32 128 2GiB + + +16k 64 64 256 4GiB + + +32k 128 64 256 8GiB + + +32k 128 128 512 16GiB + + +64k 256 128 512 32GiB + + +64k 256 256 1024 64GiB + + +128k 512 256 1024 128GiB + + +128k 512 512 2048 256GiB + + +256k 1024 512 2048 512GiB + + +256k 1024 1024 4096 1TiB + + +512k 2048 1024 4096 2TiB + + +512k 2048 2048 8192 4TiB + + +1024k 4096 2048 8192 8TiB + + +1024k 4096 4096 16384 16TiB + + +2048k 8192 4096 16384 32TiB + + + +
+
+ +
+ +
+ + Redolog class description + + +The class redolog_t(); implements the necessary +methods to create, open, close, read and write data to a redolog. +Managment of header catalog and sector bitmaps is done internally +by the class. + +
+ + Constants + + + +#define STANDARD_HEADER_MAGIC "Bochs Virtual HD Image" +#define STANDARD_HEADER_VERSION (0x00010000) +#define STANDARD_HEADER_SIZE (512) + +These constants are used in the generic part of the header. + + + + +#define REDOLOG_TYPE "Redolog" +#define REDOLOG_SUBTYPE_UNDOABLE "Undoable" +#define REDOLOG_SUBTYPE_VOLATILE "Volatile" +#define REDOLOG_SUBTYPE_GROWING "Growing" + +These constants are used in the specific part of the header. + + + + +#define REDOLOG_PAGE_NOT_ALLOCATED (0xffffffff) + +This constant is used in the catalog for an unwritten extent. + + +
+ +
Methods + +redolog_t(); instanciates a new redolog. + + +int make_header (const char* type, Bit64u size); creates a header +structure in memory, and sets its type and parameters based on the +disk image size. Returns 0. + + +int create (const char* filename, const char* type, Bit64u size); +creates a new empty redolog file, with header and catalog, named filename +of type type for a size bytes image. +Returns 0 for OK or -1 if a problem occured. + + +int create (int filedes, const char* type, Bit64u size); +creates a new empty redolog file, with header and catalog, in a previously +opened file described by filedes, of type type +for a size bytes image. +Returns 0 for OK or -1 if a problem occured. + + +int open (const char* filename, const char* type, Bit64u size); +opens a redolog file named filename, and checks +for consistency of header values against a type and +size. +Returns 0 for OK or -1 if a problem occured. + + +void close (); +closes a redolog file. + + +off_t lseek (off_t offset, int whence); +seeks at logical data offset offset in a redolog. +offset must be a multiple of 512. +Only SEEK_SET is supported for whence. +Returns -1 if a problem occured, or the current logical offset in +the redolog. + + +ssize_t read (void* buf, size_t count); +reads count bytes of data of the redolog, from current logical offset, +and copies it into buf. +count must be 512. +Returns the number of bytes read, that can be 0 if the data +has not previously be written to the redolog. + + +ssize_t write (const void* buf, size_t count); +writes count bytes of data from buf +to the redolog, at current logical offset. +count must be 512. +Returns the number of bytes written. + + +
+ +
+ +
+ + Disk image classes description + + +"volatile" and "undoable" disk images are easily implemented +by instanciating a default_image_t object (flat image) +and a redolog_t object (redolog). + + +"growing" disk images only instanciates a redolog_t object. + + +Classe names are undoable_image_t, volatile_image_t +and growing_image_t. + + +When using these disk images, the underlying data structure and layout +is completely +hidden to the caller. Then, all offset and size values are "logical" values, +as if the disk was a flat file. + +
+ + Constants + + + +#define UNDOABLE_REDOLOG_EXTENSION ".redolog" +#define UNDOABLE_REDOLOG_EXTENSION_LENGTH (strlen(UNDOABLE_REDOLOG_EXTENSION)) +#define VOLATILE_REDOLOG_EXTENSION ".XXXXXX" +#define VOLATILE_REDOLOG_EXTENSION_LENGTH (strlen(VOLATILE_REDOLOG_EXTENSION)) + +These constants are used when building redolog file names + +
+ +
+ + undoable_image_t methods + + + +undoable_image_t(Bit64u size, const char* redolog_name); + +instanciates a new undoable_image_t +object. This disk image logical length is size bytes and +the redolog filename is redolog_name. + + + + +int open (const char* pathname); + +opens the flat disk image pathname, +as an undoable disk image. The associated redolog will +be named pathname with a +UNDOABLE_REDOLOG_EXTENSION +suffix, unless set in the constructor. +Returns 0 for OK or -1 if a problem occured. + + + + +void close (); + +closes the flat image and its redolog. + + + + +off_t lseek (off_t offset, int whence); + +seeks at logical data position offset in +the undoable disk image. +Only SEEK_SET is supported for whence. +Returns -1 if a problem occured, or the current logical +offset in the undoable disk image. + + + + +ssize_t read (void* buf, size_t count); + +reads count bytes of data +from the undoable disk image, from current logical offset, +and copies it into buf. +count must be 512. +Returns the number of bytes read. +Data will be read from the redolog if it has +been previously written or from the flat image +otherwise. + + + + +ssize_t write (const void* buf, size_t count); + +writes count bytes of data from buf +to the undoable disk image, at current logical offset. +count must be 512. +Returns the number of bytes written. +Data will always be written to the redolog. + +
+ +
+ + volatile_image_t methods + + + +volatile_image_t(Bit64u size, const char* redolog_name); + +instanciates a new volatile_image_t +object. This disk image logical length is size bytes and +the redolog filename is redolog_name plus a +random suffix. + + + + +int open (const char* pathname); + +opens the flat disk image pathname, +as a volatile disk image. The associated redolog will +be named pathname with a +random suffix, unless set in the constructor. +Returns 0 for OK or -1 if a problem occured. + + + + +void close (); + +closes the flat image and its redolog. +The redolog is deleted/lost after close is called. + + + + +off_t lseek (off_t offset, int whence); + +seeks at logical data position offset in +the volatile disk image. +Only SEEK_SET is supported for whence. +Returns -1 if a problem occured, or the current logical offset in +the volatile disk image. + + + + +ssize_t read (void* buf, size_t count); + +reads count bytes of data +from the volatile disk image, from current logical offset, +and copies it into buf. +count must be 512. +Returns the number of bytes read. +Data will be read from the redolog if it has +been previously written or from the flat image +otherwise. + + + + +ssize_t write (const void* buf, size_t count); + +writes count bytes of data from buf +to the volatile disk image, at current logical offset. +count must be 512. +Returns the number of bytes written. +Data will always be written to the redolog. + +
+ +
+ + growing_image_t methods + + + +growing_image_t(Bit64u size); + +instanciates a new growing_image_t +object. This disk image logical length is size bytes. + + + + +int open (const char* pathname); + +opens the growing disk image pathname, +Returns 0 for OK or -1 if a problem occured. + + + + +void close (); + +closes the growing disk image. + + + + +off_t lseek (off_t offset, int whence); + +seeks at logical data position offset in +the growable disk image. +Only SEEK_SET is supported for whence. +Returns -1 if a problem occured, or the current logical offset in +the grwoing image. + + + + +ssize_t read (void* buf, size_t count); + +reads count bytes of data +from the growing disk image, from current logical offset, +and copies it into buf. +count must be 512. +Returns the number of bytes read. +The buffer will be filled with null bytes if data +has not been previously written to the growing image. + + + + +ssize_t write (const void* buf, size_t count); + +writes count bytes of data from buf +to the growing disk image, at current logical offset. +count must be 512. +Returns the number of bytes written. + +
+ +
+ +
+ +
How to add keymapping in a GUI client + +Christophe Bothamy, wrote the keymapping code for Bochs, provided these +instructions to help developers to add keymapping to a GUI. + + + +Bochs creates a bx_keymap_c object named bx_keymap. +This object allows you to : + - load the configuration specified keymap file + - get the translated BX_KEY_* from your GUI key + +You have to provide a translation function from string to your Bit32u key +constant. Casting will be necessary if your key constants are not Bit32u typed. +The function must be "static Bit32u (*)(const char *)" typed, and must return +BX_KEYMAP_UNKNOWN if it can not translate the parameter string. + +What you have to do is : + - call once "void loadKeymap(Bit32u (*)(const char*))", + providing your translation function, to load the keymap + - call "Bit32u getBXKey(Bit32u)" that returns the BX_KEY_* + constant, for each key you want to map. + +The file gui/x.cc implements this architecture, so you can refer to it +as an example. + + +
+ +
+ +Debugger +
compile with debugger support + + &FIXME; + +
+
get started in debugger + + &FIXME; + +
+
command reference + + &FIXME; + +
+
techniques + + &FIXME; + +
+
I/O Interface to Bochs Debugger + +This device was added by Dave Poirier (eks@void-core.2y.net). + + +Compiling Bochs with iodebug support + +./configure --enable-iodebug +make + +Other optional fields may be added to the ./configure line, see Bochs documentation for all the information. + + + + +Using the I/O Interface to the debugger + +port range: 0x8A00 - 0x8A01 + +Port 0x8A00 servers as command register. You can use it to enable the i/o interface, +change which data register is active, etc. + +Port 0x8A01 is used as data register for the memory monitoring. + + +
Commands supported by port 0x8A00 + + + +0x8A00 + + Used to enable the device. Any I/O to the debug module before this command is sent + is sent will simply be ignored. + + +0x8A01 + + Selects register 0: Memory monitoring range start address (inclusive) + + +0x8A02 + + Selects register 1: Memory monitoring range end address (exclusive) + + +0x8A80 + + Enable address range memory monitoring as indicated by register 0 and 1 and + clears both registers + + +0x8AE0 - Return to Debugger Prompt + + If the debugger is enabled (via --enable-debugger), sending 0x8AE0 to port 0x8A00 + after the device has been enabled will return the Bochs to the debugger prompt. + Basically the same as doing CTRL+C. + + +0x8AE2 - Instruction Trace Disable + + If the debugger is enabled (via --enable-debugger), sending 0x8AE2 to port 0x8A00 + after the device has been enabled will disable instruction tracing + + +0x8AE3 - Instruction Trace Enable + + If the debugger is enabled (via --enable-debugger), sending 0x8AE3 to port 0x8A00 + after the device has been enabled will enable instruction tracing + + +0x8AE4 - Register Trace Disable + + If the debugger is enabled (via --enable-debugger), sending 0x8AE4 to port 0x8A00 + after the device has been enabled will disable register tracing. + + +0x8AE5 - Register Trace Enable + + If the debugger is enabled (via --enable-debugger), sending 0x8AE5 to port 0x8A00 + after the device has been enabled will enable register tracing. This currently + output the value of all the registers for each instruction traced. + Note: instruction tracing must be enabled to view the register tracing + + +0x8AFF + + Disable the I/O interface to the debugger and the memory monitoring functions. + +all accesses must be done using word +reading this register will return 0x8A00 if currently activated, otherwise 0 + +
+
Access to port 0x8A01 (write-only) + +All accesses to this port must be done using words. Writing to this port will shift +to the left by 16 the current value of the register and add the provided value to it. + +Sample: + +reg0 = 0x01234567 + +out port: 0x8A01 data: 0xABCD + +reg0 = 0x4567ABCD + + +
+
Sample + +Enable memory monitoring on first page of text screen (0xb8000-0xb8fa0): +add in bochrc file: optromimage1: file="asmio.rom", address=0xd0000 + +/* + * Make asmio ROM file: + * gcc -c asmio.S + * objcopy -O binary asmio.o asmio.rom + */ + .text + .global start + .code16 + +/* ROM Header */ + .byte 0x55 + .byte 0xAA + .byte 1 /* 512 bytes long */ + +start: +/* Monitor memory access on first page of text screen */ + mov $0x8A00,%dx /* Enable iodebug (0x8A00->0x8A00) */ + mov %dx,%ax + out %ax,%dx + mov $0x8A01,%ax /* Select register 0 start addr (0x8A01->0x8A00) */ + out %ax,%dx + mov $0x8A01,%dx /* Write start addr 0xB8000 (high word first) */ + mov $0xB,%ax + out %ax,%dx + mov $0x8000,%ax /* Write start addr (low word) */ + out %ax,%dx + + mov $0x8A02,%ax /* Select register 1 end addr (0x8A02->0x8A00) */ + mov $0x8A00,%dx + out %ax,%dx + mov $0x8A01,%dx /* Write end addr 0xB8FA0 (high word first) */ + mov $0xB,%ax + out %ax,%dx + mov $0x8FA0,%ax /* Write end addr (low word) */ + out %ax,%dx + + mov $0x8A00,%dx /* Enable addr range memory monitoring (0x8A80->0x8A00) */ + mov $0x8A80,%ax + out %ax,%dx + + mov $0x8A00,%dx /* Return to Bochs Debugger Prompt (0x8AE0->0x8A00) */ + mov $0x8AE0,%ax + out %ax,%dx + lret + + .byte 0x6b /* Checksum (code dependent!, update it as needed) */ + .align 512 /* NOP follow */ + + +
+
+
+ +Coding +
Coding guidelines + + +Don't make use of any external C++ classes. +They are not offered on all platforms and this would make Bochs non-portable. +There is use of such classes in the optional debugger. I plan on removing this use. + +Don't use fancy C++ features. +Bochs is incredibly performance sensitive, and will be increasingly so as +more speed enhancements are added. There's a time and place for most everything +and this is not it. Some advanced features create overhead in the generated code +that you don't see. They also convolute the code, and sometimes occlude that is +really going on. + +Don't use templates +Don't use virtual functions if not strictly required +Don't use C++ exceptions +Don't use overloading of any kind + +Use soft tabs. +At least when you submit code, convert all hard tabs to spaces. +There is no uniform way to handle tabs properly. +Please do compile with all warnings turned on. +It's really difficult to spot interesting warnings when a compile is littered +with non-interesting ones. +Don't use signed ints where unsigned will do. +Make sure that contributed code / patches are LGPL compatible. + + +
+
patches: + + &FIXME; + how to make, where to submit, what happens then? + +
+
Building a Bochs release +
Preparing source files and CVS + +Update version number and strings in configure.in. + +VERSION="2.4" +VER_STRING="2.4" +REL_STRING="Build from CVS snapshot on June 7, 2009" + +In the README file you have to update version number and date. Add some +information about new features if necessary. + +Bochs x86 Pentium+ Emulator +Updated: Sat May 3 07:34:00 CEST 2009 +Version: 2.4 + +Check date, update/sumup info in CHANGES. Run autoconf to regenerate configure and check them in. +Create a CVS tag to mark which revision of each file was used in the release. +For prereleases I make a normal CVS tag like this: + + cvs tag REL_2_4_pre1 + +But for a real release, I make a CVS branch tag AND a normal tag. + + cvs tag REL_2_4_BASE + cvs tag -b REL_2_4 + +The base tag marks where the branch split off of the main trunk. +This is very useful in maintaining the branch since you can do diffs +against it. + + cvs diff -r REL_2_4_BASE -r HEAD + cvs diff -r REL_2_4_BASE -r REL_2_4 + cvs upd -j REL_2_4_BASE -j HEAD file + etc. + +The release and all bugfix releases after it are on the REL_2_4 branch. +When the release is actually finalized, you can do this: + + cvs tag REL_2_4_FINAL + +Now you can start building packages based on the created release tag. + +
+ +
Building the release on win32 + +These instructions require cygwin and MSVC++. + + +In Cygwin: + + sh .conf.win32-vcpp # runs configure + make win32_snap # unzip workspace, make a win32 source ZIP + +Copy the source ZIP to a windows machine, if necessary. + + +Open up Visual C++ and load the workspace file Bochs.dsw. Check +the Build:Set Active Project Configuration is set the way you want it. +For releases I use "Win32 Release". + + +To create "bochsdbg.exe" with Bochs debugger support, manually change two +lines in config.h to turn on the debugger. + +#define BX_DEBUGGER 1 +#define BX_DISASM 1 + +VC++ will rebuild Bochs with debugger and overwrite bochs.exe. To avoid +trashing the non-debug version, move it out of the way while the debugger +version is being built. Then rename the debugger version to bochsdbg.exe. + +cd obj-release +mv bochs.exe bochs-normal.exe +(build again with BX_DEBUGGER=1 this time) +mv bochs.exe bochsdbg.exe +mv bochs-normal.exe bochs.exe + + + +To get the docbook installed, you need to do something like this: + + make dl_docbook + copy up to date doc files + +Then you can do + +cd doc/docbook; touch */*.html + +Do make install_win32 into /tmp or someplace: + +make install_win32 prefix=/tmp/bochs-2.4 + +This copies all the files into /tmp/bochs-2.4 and then creates a +binary ZIP at /tmp/bochs-2.4.zip. Rename that bochs-2.4.win32-bin.zip. + + +Now make the NSIS installer package (the current script is known to work with NSIS 2.44) + +cd build/win32/nsis + +Unzip the binary ZIP file into bochs-$VERSION (must match Makefile) and +then run make. + +unzip ~/bochs-2.4.zip +make + +That gives an installer called Bochs-2.4.exe. Test and upload it. + +
+
Building the release on Linux + +Do a clean checkout using anonymous cvs, so that the source tarball +will be all set up for anonymous cvs. First I'll create a clean +directory called "clean-anon". + +cvs -d:pserver:anonymous@bochs.cvs.sourceforge.net:/cvsroot/bochs login +cvs -z3 -d:pserver:anonymous@bochs.cvs.sourceforge.net:/cvsroot/bochs \ + checkout -d clean-anon bochs + +Start with clean-anon which tracks the CVS head. Change its sticky tag +so that it sticks to the release tag. + +cp -a clean-anon bochs-2.4 +cd bochs-2.4 +cvs upd -P -r REL_2_4_FINAL +cd .. +tar czvf bochs-2.4.tar.gz --exclude CVS --exclude .cvsignore bochs-2.4 + +The source TAR file bochs-2.4.tar.gz is ready to upload. + + +The RPM will be building using the configuration in .conf.linux with +a few parameters from build/redhat/make-rpm. Make any last minute changes +to .conf.linux. Any changes will go into the source RPM. The DLX Linux demo package +will be downloaded to the Bochs root directory if it is not already present there. + +./build/redhat/make-rpm | tee ../build.txt + +This produces two rpm files in the current directory. Test and upload. + +
+
Creating a file release and uploading files on SF + +When you are ready with creating release packages you have to upload them using +the SF file manager feature. Create a subdirectory with the version number in +the bochs directory. Point the download destination to the +new directory and start uploading packages. The top of the CHANGES +file should be used as the release notes. After setting up the file properties the +new release is ready for download. + +
+ +
+ +
+ +Webmastering + +
Bochs project webspace + +The Bochs project webspace is stored under the SF directory /home/project-web/bochs. +It can be accessed from the SF shell using SSH or with the commands sftp, +scp and rsync. Some parts of the directory +structure must be updated from the local CVS repository, others from Bochs CVS +(modules bochs and sfsite). +The online documentation, disk images and screenshots must be uploaded manually. + +Directory structure + + + +Location +Meaning +Update + + + +cgi-binCGI scripts for the website +htdocsroot directory of the website +htdocs/cvs-snapshotlink to current snapshot +htdocs/doc/docbookBochs online documentation +htdocs/docs-htmlold Bochs documentation +htdocs/guestosdisk images directly stored on the Bochs website +htdocs/screenshotscreenshots of Bochs running several guest operating systems +htdocs/techspectechnical specifications of several hardware components +lxrBochs source browser +sfsite-cvsrootlocal CVS repository +sitebinshell scripts (e.g. for snapshot generation) +sitemanwebsite manual pages +snapshotCVS snapshot storage area +tmptemp directory for shell scripts + + +
+
+
+ +
Updating the Bochs website content + +The main HTML content of the Bochs website (except online documentation) is stored +in the sfsite module of the Bochs CVS repository. Unlike +other SF projects you don't need to upload these files to the Bochs project webspace. +Running a simple CVS update on the SF shell is enough after the files have been +updated in the repository. Please see Setting +up CVS write access for general instructions. The only difference is the +module name sfsite instead of bochs. +The example below shows how to start the SF shell with SSH and to update the +HTML files. + +ssh -t vruppert,bochs@shell.sourceforge.net create +vruppert,bochs@shell.sourceforge.net's password: + +Requesting a new shell for "vruppert" and waiting for it to start. +queued... starting... + +This is an interactive shell created for user vruppert,bochs. +Use the "timeleft" command to see how much time remains before shutdown. +Use the "shutdown" command to destroy the shell before the time limit. +For path information and login help, type "sf-help". + +[vruppert@shell-24002 ~]$ cd /home/project-web/bochs/htdocs/ +[vruppert@shell-24002 htdocs]$ cvs update +cvs update: Updating . +U index.html +cvs update: Updating images +cvs update: Updating includes +cvs update: Updating networking +cvs update: Updating testing-forms +cvs update: Updating docs-html +[vruppert@shell-24002 htdocs]$ shutdown +Requesting that your shell be shut down. +This request will be processed soon. +[vruppert@shell-24002 htdocs]$ +Broadcast message from root (Sat Nov 15 08:36:01 2008): + +The system is going down for system halt NOW! +Connection to shell-24002 closed by remote host. +Connection to shell-24002 closed. +Connection to shell.sourceforge.net closed. + + +
+ +
Updating the CVS snapshot + +The CVS snapshot + +The CVS snapshot link can be found on the bottom of the page +getcurrent.html. + +can be updated with SF shell access using SSH. There is a script +called update-snapshots.sh that can do all the required steps +(checking out CVS, packing the source tree into one archive, updating the website +link). See previous section how to create a shell. + +cd /home/project-web/bochs/sitebin/ +./update-snapshots.sh + + +
+ +
Updating the online documentation + +To update the online documentation, a file called bochsdoc.tar.gz +must be generated with the make. This file must be uploaded +to the location of the online documentation on SF using scp. + +cd doc/docbook +make bochsdoc.tar.gz +scp bochsdoc.tar.gz vruppert,bochs@web.sf.net:htdocs/doc/docbook + +After a successful upload, the HTML files must be unpacked from the SF shell. +See section Updating the Bochs website content +how to create a shell. + +cd /home/project-web/bochs/htdocs/doc/docbook +tar xvzf bochsdoc.tar.gz + +The updated files can be accessed from the sidebar of the Bochs website. + +
+ +
other content + + &FIXME; sources, tmp + +
+ +
available tools + + &FIXME; sources, tmp + +
+ +
+ diff --git a/bochs/doc/docbook/documentation/documentation.dbk b/bochs/doc/docbook/documentation/documentation.dbk new file mode 100644 index 00000000..92660f5f --- /dev/null +++ b/bochs/doc/docbook/documentation/documentation.dbk @@ -0,0 +1,506 @@ + + + + +%bochsdefs; + +]> + + + + Bochs Documentation Manual + + BryceDenney + MichaelCalabrese + + +Layout of Bochs Documentation + + +The Bochs documentation is divided into three major divisions: + + + + The User's Guide introduces the Bochs Emulator, and covers installation and use. + + + + + Developer's Guide: Describes the internals of the Bochs Emulator for developers. + + + + + Documentation Guide: Describes how the documentation is organized, and how to render it, and how to add to it. This section is in the documentation guide. + + + + + + +In docbook terminology, each of the three divisions is a book. Inside each +book are a series of chapters. A chapter may be divided into sections, and +each section is divided into more sections. Eventually we will add fancy +things like a table of contents, index, and glossary, when we learn how. + + + + +Docbook Basics + +Some of the most commonly used docbook patterns are described here +for quick reference. For all the details (sometimes more than you +wanted), try &docbookTDG; by Norman Walsh and Leonard Muellner, which O'Reilly +& Associates has generously placed on their web site. In this section, +many of the SGML tags are linked to the page of Walsh's book that describes +that tag in detail. + + +
Small Tutorial + + +Docbook files are text files containing SGML. If you have ever looked +at HTML, then a docbook file will look familiar. Not the same, but familiar. +The easiest way of getting familiar with the docbook format is by looking at +examples such as the Bochs documentation itself. When you compare the source +code to the rendered documentation on the web site, it will be pretty obvious +what all the codes are doing. HTML is very forgiving about breaking the syntax +rules, such as not putting </h1> at then end of an <h1> section. +SGML is picky; if you forget that kind of thing in SGML, it will insist that +you fix it. + + + +Every paragraph must begin with the <para> tag and end with the +corresponding end tag, </para>. + +<para> +This is a paragraph. +</para> + + + + +A chapter looks like this: + +<chapter> + <title>title of the chapter</title> + text of the chapter +</chapter> + +The text of the chapter must contain at least one complete <para> tag, +and it can include <section>s. + + + +A section looks like this: + +<section> + <title>title of the section</title> + text of the section +</section> + +The text of the section must contain at least one complete <para> tag, +and it can include other <section>s. + + + +To make a link to any URL, use the syntax: + +<ulink url="URL">text of the hyperlink</ulink> + + +However, if you like to link to another target inside the same document, +for example to a section, use something like that: + +<section id="unique identifier"> + All stuff that is needed here... +</section> +... +<link linkend="unique identifier to link to">text of hyperlink</link> + + + + +To include a picture in the text, use the <graphic> tag. In SGML, this +graphic tag has no closing tag. + +<graphic format="fmt" fileref="filename"> + +The fmt can be one of many formats including GIF, +JPG, PNG, PS, and EPS. The filename should be on the local disk. If there is +a pathname, it should be relative to the source file or it won't be found on +anyone's system other than yours. + + + +There are over 300 tags defined in the latest version of docbook, so +we won't try to list them all here. Once you get the idea, you can +either find examples in the rest of the documentation that do what you +need, or look at Walsh and Muellner's +DocBook: The Definitive Guide +for more details. + + +
+ +
References and Other Tutorials + + +Docbook was created more than 10 years ago, but since 1999, Docbook has been +under the guidance of the DocBook Technical Committee at OASIS. The +OASIS website +distributes the official DocBook DTDs, and has pages on Docbook history, +samples, tools, and runs a few docbook mailing lists. + + + +Since the Linux Documentation Project uses docbook, they have written some +good tutorial material. In particular the LDP Author Guide, by Jorge Godoy +is very good. + + + +O'Reilly & Associates publishes a book called DocBook: The Definitive +Guide by Norman Walsh and Leonard Muellner. You can buy it or read it +online. Norman Walsh knows what he's talking about, since he is the chair of +the DocBook Technical Committee. This is good for reference, since it has a +complete list of tags and their grammar. + + + +DocBook +HOWTO, also by Jorge Godoy + + + +An article on lwn.net called Exploring SGML Docbook +focuses mostly on installation of tools from scratch: openjade, Norman Walsh's +DSSSL stylesheets, and jade2tex. If you can get the tools from RPMs or +whatever package your OS uses, use that instead. + + +
+ +
+ +Conventions + +Put a &FIXME; near things that need to be fixed up. A &FIXME; causes +the under construction symbol to appear, like this &FIXME;. + + + +A &NEEDHELP; indicates, that you need someone's help in order to document +something, you don't know for sure. This is mostly the case if you need inside +information from a developer. The symbol looks like this: &NEEDHELP;. + + + +Don't get confused because &FIXME; looks the same as &NEEDHELP; - +this is just for the moment. When you like to use one of them, think of what +it should mean, instead of how it looks like: Take &FIXME; if you have +great ideas of what to document, but have no time or no knowledge about it, or +just noticed something wrong or outdated. &NEEDHELP; instead should be used +to request help on something (see above). + + + +This is just a first try to clearify the difference between +&NEEDHELP; and &FIXME;. + + + +To maintain a consistent spelling, some "problem words" are mentioned here, +along with a hint on how to spell them. + + list of problem words + + + + Bochs + Bochs is written with a leading capital letter. + + + bochsrc + + This is what the Bochs configuration file should be refered as. It is a good + compromise between what is common on Unix and what is possible on Windows + (file names starting with a dot aren't easy to create). Remember to use + <filename>bochsrc</filename>. + + + + CD-ROM + This abbreviation is written in all capital letters, with a hyphen in between. + + + Unix + + Unix is written using a leading capital letter, followed by all lower-case letters. + See the Unix entry in Wikipedia. + + + + +
+
+ + +&FIXME; SGML docbook...lower case elements...indentation...remarks...master document/include files + +
+ +Reading and Writing + + +The DocBook source code -- user.dbk, for example -- is a plain text file that +can be directly edited and saved with any text editor such as emacs or vi. + + + + +If you just want to read the documentation, you should not +need to read and understand this section, and render the docs yourself. The +&bochswebsite; has all this information in readable form already. + + + + +To render DocBook source code into the nice readable form the end-user will +require, several tools are needed. These tools allow the .dbk file to be +rendered into such formats as HTML, PDF, and PostScript. This section +describes the tools you need and the steps you take to render the Bochs +documentation. + + + + +The rendering process is one-way. That is, the DocBook source files will be +downloaded from CVS, edited, and uploaded to CVS as .dbk files. Along the +way, it will probably be necessary to render them into HTML, but only to +check one's work or to post them as part of a web page. (I hope I'm not the +only person to spend nine minutes trying to figure out how to 'compile' HTML +into DocBook format.) + + + + +Jade and DSSSL + +Here is what the Linux Documentation Project says about jade: + +
+ + LDP author's guide + + + Jade is the front-end processor for SGML and XML. It uses the DSSSL and + DocBook DTD to perform the verification and rendering from SGML and XML into + the target format. + +
+
+ + +What does all this mean? +For purposes of Bochs documentation, jade reads the docbook source file and +writes out a HTML/PDF/PS file. Bochs documentation is in SGML format, though +apparantly jade can handle XML Docbooks as well. DSSSL stands for +Document Style Semantics and Specification Language, and it +tells jade how to translate the docbook tags into the target format. DSSSL +files are written in the Scheme programming language, which is a variant of +LISP. Learn more about DSSSL at Jim Clark's DSSSL page. +The DocBook DTD is the formal description of what elements and attributes can +be used in a docbook. + + + +Installation + + +The easiest way to get jade working in Linux is to install packages. The +recent RedHat, Suse, and Mandrake Linux distributions all include +openjade and SGML tools. If you can get the right packages installed, +you may save yourself a few hours of compiling and configuring from scratch. +For plex86, which also uses docbook, Kevin Lawton listed the packages that +he installed on Mandrake to get jade working: + + + jadetex-3.5-2mdk + openjade-1.3-10mdk + docbook-dtd31-sgml-1.0-3mdk + docbook-utils-0.6-1mdk + docbook-style-dsssl-1.62-4mdk + docbook-dtd412-xml-1.0-3mdk + sgml-common-0.2-4mdk + xml-common-0.1-3mdk + + +Under Debian, the following packages seem to be a bare minimum to install +DocBook and get it to render Bochs documentation into reader-friendly formats: + + + jade + docbook + docbook-dsssl + + +It's worth mentioning that, at the time of this writing, at least some of +the above-mentioned packages were in the testing or unstable branches of +Debian. + + + +Under FreeBSD, just install the following ports: + + + textproc/jade + textproc/dsssl-docbook-modular + textproc/docbook-410 + + +&NEEDHELP; The generated HTML output doesn't look exactly the same as the Bochs +documentation on the web, so it seems as if some kind of configuration is still +needed. + + + +Hopefully, the required packages on other Linux distributions have +similar names. If you have jade working, please tell a documentation +writer the package names that you used so that we can include it in the docs. +&NEEDHELP; + + + +If you cannot get jade to work using packages, you need to find and install +three things: the DocBook DTD version 4.1 from &OASIS;, the program +jade +(or openjade), and the +Docbook DSSSL +stylesheets for the formats that you want to render to. The whole +process is described in &docbookTDG; in Appendix III section A. If you want +to render to PostScript or Adobe PDF, you also need to install TeX and +and some associated tools. It is a nontrivial process. + + + + +Just use the packages. + + + + +For now, building the Bochs documentation also depends on some scripts called +docbook2html, docbook2pdf, and docbook2ps. These come from the docbook-tools +project at http://sources.redhat.com/docbook-tools. + + + + + +Using jade with docbook2x scripts + + +Check to see if you have the docbook2ps, docbook2pdf, and docbook2html +scripts. If so, you can probably use the Bochs Makefile. Just do + + cd $BOCHS/doc/docbook + make + +It should render three docbook books, one in user, one in development, and one +in and documentation. If there are no errors, look for the user guide +in $BOCHS/doc/docbook/user/user.pdf, +$BOCHS/doc/docbook/users/user.ps, and +$BOCHS/doc/docbook/users/book1.html. The HTML is broken +into lots of little chunks that link to each other, but book1.html is the first +one. + + + + +Using jade directly + +If you don't have docbook2format scripts, you +can also run jade manually. The command is long, so you may want to make +your own script or edit your copy of the makefile. These commands assume that +you installed Norman Walsh's DSSSL stylesheets in $DSSSL. +To render the user's guide into HTML, type: + + cd $BOCHS/doc/docbook/user + jade -t sgml -d $DSSSL/html/docbook.dsl user.dbk + +Or, if you want to render the developer's guide into TeX format, + + cd $BOCHS/doc/docbook/developer + jade -t tex -d $DSSSL/print/docbook.dsl developer.dbk + +Or, if you want to render the documentation guide into Rich Text Format, + + cd $BOCHS/doc/docbook/documentation + jade -t rtf -d $DSSSL/print/docbook.dsl documentation.dbk + +I believe that the HTML stylesheet must have "-t sgml" but the print +stylesheet in the second example can have "-t rtf" for Rich Text Format, +"-t tex" for TeX, or "-t mif" for MIF. + + + +Bochs has the convention of calling the docbook files +name.dbk, but any file name would work. Some +other people call them NAME.sgm for SGML. + + + +
+ + Nsgmls + + +The Bochs documentation is written in SGML docbook style, so any tool which can +check SGML syntax can be used to check the docbook. The DTD (data type +description) for docbook tells exactly which elements can be used and where. +It says which attributes are required and which are optional, and how elements +should be nested. The term "validate" has a specific meaning in SGML. When +you validate a SGML document, it means that you read the DTD and then check +that the document conforms to all the rules of the DTD. + + + +A program called nsgmls, written by James Clark jjc@jclark.com, +can validate an SGML document such as our docbook. Although nsgmls can do many +other things, this command will validate the docbook against the DTD which +defines the syntax: + + nsgmls + -s + filename + + + + +Nsgmls is part of SP, a "free object-oriented toolkit for SGML parsing and +entity management" by James Clark jjc@jclark.com. SP can be +found at +http://www.jclark.com/sp. +There is a complete man page for nsgmls +here. + + + + +
+ +
diff --git a/bochs/doc/docbook/fixtitles.pl b/bochs/doc/docbook/fixtitles.pl new file mode 100755 index 00000000..343159da --- /dev/null +++ b/bochs/doc/docbook/fixtitles.pl @@ -0,0 +1,54 @@ +#!/bin/sh +exec perl -x $0 $*; echo "Could not exec perl!"; exit 1 +# The line above allows perl to be anywhere, as long as it's in your +# PATH environment variable. + +#!perl +# +# fix-titles.pl +# $Id$ +# +# The HTML stylesheet likes to print html has the ends of tags on a different +# line, like this: +# FreeBSD +# +# Glimpse, which is indexing our website, finds this very confusing and +# it cannot pick out the title from this mess. This script takes a list +# of HTML files on the command line and attempts to make the tag +# look more normal so that glimpse can understand it. +# +# WARNING: This is a hack. It's made to work on docbook generated html, but +# may do strange things on anything else. + +use strict; + +foreach my $file (@ARGV) { + print "Fixing $file\n"; + rename $file, "$file.orig"; + open (IN, "$file.orig") || die "open $file.orig"; + open (OUT, ">$file") || die "open $file for writing"; + while (<IN>) { + if (/^<HTML$/) { + print OUT "<HTML>\n"; + } elsif (/^><HEAD$/) { + print OUT "<HEAD>\n"; + } elsif (/^><TITLE$/) { + print OUT "<TITLE>"; + } elsif (/^>(.*)<\/TITLE$/) { + print OUT "$1\n"; + # next line has one extra >, so read it and remove it. + $_ = ; + s/^>//; + print OUT; + } else { + print OUT; + } + } + close IN; + close OUT; + unlink "$file.orig"; +} diff --git a/bochs/doc/docbook/images/dlxlinux-in-linux.png b/bochs/doc/docbook/images/dlxlinux-in-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..4897b4651fb6a1855c6cc4836451d9dda0b902fb GIT binary patch literal 8464 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 Q{MJCCfzXB*DO-mAA1kon-T(jq literal 0 HcmV?d00001 diff --git a/bochs/doc/docbook/images/headerbar.png b/bochs/doc/docbook/images/headerbar.png new file mode 100644 index 0000000000000000000000000000000000000000..43f9050ef759a255b428ab205507755955fdcc1f GIT binary patch literal 2230 zcmX|B3pCX07T@zX6HO?C%pi1#A$m&Vj%2)MbcDuCL*`_9GV-Y7m?Q@?y-ma+FSTEqRpQNvi+oNcXS1*4^LQ``c@Od+*=x+uvGWPFM)rh-^s) z0HYv|KNkRz;rdbpjgHq3N}$G8|v zLQp9bK0QNhS_m`-$iyRnn1%zEO+dRLMhgTDfJ6%*d^>}%lz?G{C`zmxYL3$wArc%4 zAfg$@jUWj?3YG2=an%e&7XwlYM;N1qE3oWZwA&MgVnAa75(a>nK7+`W0GJj~;TsFY zw-KhWBormIfRg4z#B?|xWDbCQwzVy;E3kK%m#Kt-fdWlPilGt+7yyblfL<@3@-Yl6 zkfPwe3#v(=o8>TOU{}!IA&^Lzc(L*@1l|D5aJB$^@D->dAkyzX1o^{e90g$%Ky^ip z4)ciy?sq8!(<6 zh5gpx-44y)Yl+!Dus#T;Hvb=2hm*!}3w?kH4&QJ01bi}K4jX^~Fw(LslSW#Bfe8xB zw{R$mj%bkJ@vSRZa;!=s!GZy0Cjfy8J29Rq3ei{u!K(_s&jhE0iw=0R8^aG2uvGx^ z*~|Ok8uA@W64(X^hYoxS9wH#PS&qQ0&!_}(908e)z?pbh*s%g6CIDHc0!@9BgpC0K zO$QhUNGjw>XPI|4LleyulhvcZjtwVRWEUoPE2LRFgc^IQBvc0$=nN>8K*b7mC=o4& zSPfW6AQ^n5>6m6*%1L7IrDC8Ww$~w%2AB*V5CY)<*@e(egkqp*;I#x;IGq{zq67{G zeEjJwRS?8j}(5leqv~(0&3TiXrx1Kzy$Sxe$_&*{S|d))xHNLBhs{n#X>G1I(^B=DEB~3%J^uqg zty-_Q|m}No;wB<I+-9#I#Rzl>Kzf=Jd!ag8)lG_mi{jsBup9iN(o}%CRj|eZeC{_EZ|#3{--icS@K9-P2^iy<$suLVmsla=v(@nE0^aIo2w5U&?`Kzoe^LJ*IC?NP!&H2bb zUp#k-J-6DVvLyB+>rwvL(53w1liV|>B_&rW0*Y=bm}GItPjx+*wrsM9Jo3$)MO4^K zzOynf&$wVb9lbr(`-sP@U~a$zpLfIgG8N^iAZOTF7f3o1`-09{oz%Zho!D@Cv)jT0 zX8Su~TYctUi`%hEIN*huTV6m~K}DhqtWBs+5T?|*4@(V8UiSWM@NeMb+H z$2{lr!^#xTm47X8+&E;{s=6Q|rZhDASu+A#Pj*zr8r%G^zoV(Oz0P5Ed9vF0vhuO7 zD`&XZh@{suGl#s)IJa$H3Vot#pZk8|m_k{yguiQ&5dh{Eu-Nhh#3Y@HtW$btb1` z`;O!Oq-*hWmue|(M@`}*T~ja0A~GYS4ljS6Rzz#IX`LhbAI{tJQhLn&>Y}>f9mj=J zGP3ar{o9x61|H}{)6J!SrxqV^ufCpH%-TQT~D^G*>htvNHT|{L_ZI`zy^; zR$j7;Pw2B>@>^O%<@h2!wc;2O&1Hq9b=?+E_TRcC?(M4$^Hmob$RGRK%^eGi6vvp6 z)Sjj6fK7K>HmPeDS=WW;y!JjP)o;`}EoPp(u}_|}iARr7+4A2%9y8w&xWv?Hb6sk} zshP7W>CF3ML$+-uzcwy+Y+Q9)<~Q}FwxNenvP~_%^trTPAg{?&_h_h~DWmy8;OO)B Y^HK)=VsxVVsM&8gC?LeY&Q~P+FHOs*{r~^~ literal 0 HcmV?d00001 diff --git a/bochs/doc/docbook/images/undercon.png b/bochs/doc/docbook/images/undercon.png new file mode 100644 index 0000000000000000000000000000000000000000..d2be179dfee6a4b223a9b83585af4b92d9df3a01 GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^8bGYZ!VDx`ZXMABQU(D&A+A8W0gM~KR0ELL00IXN z9QY3u|IhFrOaW;i3ka&^Hy#0sbCv}81%m~E1VgZYg%D7XG0EHAgb%GI=37tO>gc(^X)&Yzu^q*+ zKdyc|c8fv2BJ#(3UO~Z%gNnz(HXdD@)E({G$rr8VB{OkaSE!UV!z(w(l`Aea1vwTn zoN-#&w8(W)$U*6~e9O7+o%k#l&FamcG4JQfMMi!z7`dKpVtuH7d1;E?iV5poa=e07 z)_)gRq`gO(CAX_8?a;@##Vgu4K5;ExaZNDovqswFOrxeFfB5t*j{Yrt6 + + +'> +'> + +Bochs web site'> +bochs.sourceforge.net'> +bochs-developers mailing list'> +$BOCHS'> +Makefile'> + + +DocBook: The Definitive Guide'> +OASIS'> + diff --git a/bochs/doc/docbook/index.html b/bochs/doc/docbook/index.html new file mode 100644 index 00000000..6257992d --- /dev/null +++ b/bochs/doc/docbook/index.html @@ -0,0 +1,42 @@ + + + +Bochs Documentation + + + + + +

Bochs Documentation

+

+ +The documentation is divided into three parts: +

+ + diff --git a/bochs/doc/docbook/misc.txt b/bochs/doc/docbook/misc.txt new file mode 100644 index 00000000..5e5e1c78 --- /dev/null +++ b/bochs/doc/docbook/misc.txt @@ -0,0 +1,426 @@ +$Id$ + +This is a temporary place to paste in stuff that should go into the docs one +day. When it is transferred into docbook, let's remove it from misc.txt. + +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +Date: Thu, 15 Nov 2001 13:31:34 -0800 +From: David Christy +To: bryce@tlw.com +Subject: usefull info for mounting + + +I didn't see this in the doc's so I thought you might like a +short description of how to mount a disk image file into +loopback filesystem for maintenance purposes. + +-------------------------------------------- + +1) First run + +fdisk -l + +... and it should print out a partition table (with a few +complaints requesting the drive geometry, and I don't know +if older versions require a block device) In fact fdisk will +even work to modify partitions in an image, but you must +specify the drive geometry that's in the bocsrc first. + +2) Whatever it says the starting partition is, subtract 1 +and multiply by 512 + +3) Type + +mount -o loop,offset= +/mount/dir + +or if it's just a floppy image, just + +mount -o loop floppy.img /mount/dir + +--------------------------------------------------- + +I would recommend putting -o ro for read only access if +bochs is in use. For unusual filesystems you may need to +add a -t flag to the mount command to specify the +filesystem type. + +see man mount, losetup, and fdisk for more info + + + +BOCHS Rocks!!! + + + +-------------macintosh.txt----------------- +BBD Mon Nov 25 08:23:28 EST 2002 +This file has been in our main directory for years and years, and has not +been updated since nobody has tried to compile for MacOS pre-10 in a long +time. I didn't want to leave it sitting there since it is so incredibly +obsolete. I think it would be good to put it into the documentation +with proper warnings about the fact that it hasn't been updated in 4 years +and may need significant hacking to make it work again. +------------------ + +Changes by Bryce Denney 4/5/2001: +I moved the contents of macutils.h into osdep.h, and macutils.c +into osdep.cc. There are functions missing on other platforms too, +so I wanted to bring them all into the same place. + +The original macintosh.txt follows. + +STATUS OF THE MAC PORT: +----------------------- + +23 Dec 1998 + +Contents: + + Status + How to Set up MacBochs + Problems + Other Issues + New Files + Changed Files + + +Status +------ + +This is an experimental Macintosh port of Bochs. The Mac port compiles fine +under CodeWarrior Pro R1 (CW12) and is capable of booting Win95 in command- +line mode and running DOS programs. A CodeWarrior project ("Bochs.proj") is +included (you may need to edit the type and creator information with ResEdit +in order for CodeWarrior to recognise it as a project file). + +NOTE: MacBochs is very much a "work in progress", and much of the code is +incomplete. This preliminary version is being made available mainly to +interested developers who may want to contribute to the development of +MacBochs by contributing some code or testing it on their own Macs. + +If anyone can test with some "clean" Windows installer disks, it would be +useful. I've been testing MacBochs with my SoftWindows HD image and disk +images derived from it, and I'm not sure if the various SoftWindows-specific +drivers are interfering. + +23 Dec 98 - updated MacBochs to bochs-981222. The new version seems +noticeably faster. Finished implementing the Bochs headerbar. Added support +for ejecting floppy disks from within Bochs (click the Drive A: icon on the +headerbar or press Cmd-E). + +17 Dec 98 - added real floppy disk support. Also optimized the graphics +screen drawing a bit more. Keyboard support still broken and in need of a +major overhaul. Does anyone have experience with KCHR resources and +KeyTranslate()? + + +How to Set up MacBochs +---------------------- + +This is a very brief, step-by-step guide on setting up MacBochs. More +detailed documentation will be available later. + +- Step 1. Compile the version of Bochs you want to use (PPC, 68k or FAT) or +obtain a pre-compiled binary. There is a CodeWarrior project included with +the source distribution. + +- Step 2. Create a hard disk image. +Bochs ALWAYS needs a hard disk image available to it, otherwise it won't +boot. To create a hard disk image on the Mac, you need to use a recent +version of DiskCopy. + +First, create an untitled, empty folder anywhere on your Mac hard disk. Then, +launch DiskCopy and choose to create a folder image of that folder. + +DO NOT ENTER THE DISK SIZE IN MEGABYTES. In the file "install.html" in the +"docs-html" folder you will find a table of disk sizes and geometries. Make a +note of the number of total SECTORS required for your desired hard disk size, +as well as the cylinders, heads and sectors per track (spt). + +In DiskCopy, you need to choose "Custom..." from the menu of image sizes, and +choose to enter the size in "blocks" (on the Mac, a block is pretty much the +same as a sector). Then enter the number of total sectors you need. + +Make sure the image is "Read/Write", not "Read Only", and make sure you have +entered the correct cyl=, heads= and spt= settings in your bochsrc file. Your +image file should now be accessible to Bochs. + +You'll eventually need to use a utility like "fdisk" to make the image +readable. + +- Step 3. Obtain a bootable PC floppy or floppy image. +You'll need to install an operating system in order to do anything useful +with Bochs. If you have installer floppies for a PC operating system (eg. +Windows or MS-DOS) you can use those. Otherwise you can download disk images +for FreeDOS or one of the many variants of Linux. + +MacBochs now supports real PC floppy disks. To use the Mac floppy drive +instead of a disk image, use the special filename "[fd:]" in the appropriate +line of your bochsrc. + +- Step 4. Set up your bochsrc file. +You set up your Bochs preferences by editing the "bochsrc" file. You'll need +to set up your bochsrc to work with your floppy and hard disk images, as well +as telling Bochs how many megs of PC RAM you want. + +Problems +-------- + +There are some so far unresolved problems in the "macintosh.cc" GUI file: + +- Keyboard support is VERY rudimentary; ie. it only supports alphanumerics +and a couple of special keys like Enter. The keyboard-related code is full of +holes and I'm going to completely rehash it. + +- Mouse support hasn't been tested, but probably isn't fully working either. + + +Other Issues +------------ + +- The Mac port uses a ready-made config file (configmac.h), like the Win32 +port used to. Macs are pretty homogeneous, so the settings should be +appropriate for most machines. + +- The Mac port has an extra source file: "macutils.c" (with header file +"macutils.h"), which is used for Mac floppy drive support, among other +things. + +- Like the Win32 port, the Mac port expects the "bochsrc" file to be in the +same directory as the Bochs application. + +- Be sure to use Mac pathname conventions when editing the bochsrc file (ie +':' instead of '/' or '\'). + + +New files +--------- + +The following are new, Mac-specific files: + +gui/macintosh.cc +configmac.h +macutils.h +macutils.c +Bochs.proj + + +Changed Files +------------- + +The following files from the main bochs distribution have been modified to +compile properly on the Mac: + +bochs.h +main.cc +memory/memory.cc +memory/misc_mem.cc +iodev/floppy.cc +iodev/harddrv.cc + +The changes are just conditional compilations which won't affect other +platforms (search for "#ifdef macintosh" and "#ifndef macintosh" if you want +to see what the changes are). These changes will need to be integrated into +the main distribution if the MacOS port is going to go ahead seriously. + +-- David Batterham or + +--------------------win32.txt---------------------- +BBD Mon Nov 25 08:27:24 EST 2002 +The win32 build instructions are out of date too. The --with-win32-vcpp +has been deprecated since at least March 2002. More current instructions +are already in the docs, so this info may not be of much use. + +Building Bochs for Win32 +------------------------ + +This has only been tested with MS Visual C++ 6.0. + +The normal build process on a unix system is to run configure to build all the +makefiles and config.h, and then run make to compile Bochs. Configure takes a +large number of command line arguments, for example to disable floating point +or to enable sound blaster emulation. Configure works beautifully on unix +systems to help make the code portable, however it cannot run on Windows. +(Maybe, if you have cygwin.) Therefore, you need to either 1) run configure +on a unix box and copy the makefiles and config.h, or 2) download the +makefiles which are distributed in a separate ZIP file. + +If you want to run configure yourself, consider using the shell script +".conf.win32-vcpp" since it has been tested. Look at it to make sure +the options make sense for you. You can always run configure by hand too, +just be sure to include the option --with-win32-vcpp so that it creates +makefiles for win32. Copy config.h, Makefile, and the Makefiles in all +subdirectories over to your windows box into the same directory as the Bochs +source. + +If you download the makefiles in a ZIP, just extract them into the +same directory as the Bochs source. The config.h and top level Makefile +should end up in the same directory as Bochs.h. + +Once the makefiles are installed, building Bochs is easy. Start up an MSDOS +window, run the .BAT file that sets up the environment variables +(C:\vc98\bin\vcvars32.bat on my system), and then run NMAKE in the Bochs +source directory. You will get lots of compile warnings, but hopefully no +fatal errors! At the end, you should see Bochs.exe in the source directory. + + + + + + +Wed Dec 11 13:56:20 EST 2002 +this text came from build/linux/DOC-linux.html. +Originally it was an intro to Bochs for Linux users. I converted it all to +docbook. I moved most of the info from DOC-linux.html into different +sections of the user guide, and the rest I put here in misc.txt. Maybe these +paragraphs will be useful in some kind of introduction to something, or maybe +not. + +
Quick Start for Linux users + + + +This file is an introduction to Bochs for Linux users. It assumes that you +have just installed a Bochs binary distribution, and now you want to see what +Bochs can do! + + +
How can I try out Bochs in 10 minutes or less? + +This RPM package includes a sample disk image containing DLX Linux, which you +can boot within Bochs. To start up DLX linux, just type "bochs-dlx" in an +xterm. The first time it runs, it creates a disk image in a directory +called $HOME/.bochsdlx. Then it creates a Bochs Display +window and prints some log messages into the xterm. The display window is the +most interesting, but if something goes wrong the log messages should give an +idea of what has happened. + + +Meanwhile, the Bochs display screen should look like a PC booting...and in +fact it is! Bochs begins simulating a PC from the time the power turns on. +You will see the VGA BIOS message, and it begins loading Linux from the disk +image. The disk image is just a big file that Bochs uses as if it were a +real hard drive. After a while, you see Linux boot messages and eventually a +login prompt. You are now running DLX Linux in a window! + + +Bochs simulates every instruction of an x86 CPU, so it is very memory- and +compute-intensive. The speed of your real CPU will make a big difference in +how fast the DLX Linux image boots. On a 1GHz Pentium, the sample Linux +image takes about 10 seconds to boot. + + + +In this brief introduction you saw how Bochs can boot and run an x86 operating +system in a window. It doesn't have to be Linux, of course! Various people +have been able to install and run DOS, Windows 3.1, Windows 95/98/ME/NT/XP, +Linux, FreeBSD, NetBSD, OpenBSD, and probably others that we've never even +heard of. In fact Bochs is used by many operating system developers to test +out their software in a controlled environment without having to reboot their +development machine. + + + +If you are learning about Bochs for the first time, you might want to +download a few other prebuilt disk images of other operating systems from the +Bochs website. They range from very small (1.44 meg floppy disk images) to +hundreds of megabytes. Most disk images on the web site come with a +working configuration file (often called bochsrc.txt) so they should work +without much effort. This will give you an idea of what Bochs can do, +and how it might be useful to you. + + +
+ +------------------------------------------ +Windows 3.1 install hints + +Date: Fri, 13 Dec 2002 09:56:48 -0700 +From: Ben Lunt +To: bochs-devel + +I was playing with bochs a bit last night and successfully +got windows 3.1 installed on a c.img file and run with +almost no errors. + +I first started with three original DOS 5.0 720k images, +FDISKed, FORMATed, and then install. + +Then changed to seven 1_44m disks and installed Win16. +Each time either OS asked for a new disk, I simply +copied the expected image to a.img and continued. + + +------------------------------------------ +WinNT4 guest network problems + +From: Jeremy Wilkins +To: bochs-developers@lists.sourceforge.net +Subject: [Bochs-developers] Odd network errors with NT4 Guest OS + +I'm having trouble transferring files over the network to the guest OS +(NT4 SP1). If I'm using SMB then the it errors out early on with a +session cancelled. The file is 36Mb (SP6). I've tried with various file +sizes, 3Meg files work, 5 meg files do not. + +I've also tried shuffling the files over http with similar problems, +small files are fine (can browse websites) but large files just error out. + +The system is a 1Ghz Windows XP SP1 box with bochs 2.02, guest OS is +allocated 64Mb of RAM and running Windows NT4 SP1. + +Any clues, anyone experiencing similar problems? + +-- + +From: didier +To: Jeremy Wilkins +Cc: bochs-developers@lists.sourceforge.net +Subject: Re: [Bochs-developers] Odd network errors with NT4 Guest OS + +Did you try with a big IPS? start the guest clock applet and try to get +a more or less accurate time, with 1 Ghz should be in the 50 000 000 range. +IIRC NT timeout and abort before it send the whole packet. + +-- + +From: Jeremy Wilkins +To: didier , bochs-developers@lists.sourceforge.net +Subject: Re: [Bochs-developers] Odd network errors with NT4 Guest OS + +Thanks, 60 000 000 seems to have done the trick (I can copy sp6 across +anyway). My original guess of 4000000 IPS was probably a bit low :) + +thanks again + +------------------------------------------ +TAP under FreeBSD + +Date: Fri, 14 Feb 2003 02:12:38 +0100 +From: Ronald Klop +To: bochs-developers at lists.sourceforge.net + +I've made eth_tap.cc working under FreeBSD 4.7, because the fbsd network driver +didn't work for me. +It's not a very clean patch, but the changes are minimal. + +Some notes: +- I found that some of the includes aren't used at all (on FreeBSD). +- The socket which is created before /dev/tap0 is opened doesn't work, because +tap0 is created after opening the device. +- Maybe the eth_tap device can use a configure script like the eth_tuntap +device, because the device must be configured after opening. +- The padding of the ethernet frame with 2 bytes isn't needed in FreeBSD. +- I didn't do any work to check for this in configure, because I don't know how +configure works and don't have the time work it out now. +- the guest os must set (maybe this can be documented somewhere): +kldload if_tap (if tap is not compiled in the kernel) +ifconfig tap0 inet 10.0.1.1 netmask 255.255.255.0 +sysctl net.inet.ip.forwarding=1 +sysctl net.link.ether.inet.proxyall=1 + + diff --git a/bochs/doc/docbook/outline.txt b/bochs/doc/docbook/outline.txt new file mode 100644 index 00000000..68b7e5e5 --- /dev/null +++ b/bochs/doc/docbook/outline.txt @@ -0,0 +1,164 @@ +--- Bryce Denney wrote: +> Hi Michael, +> +> I added some flesh to the skeleton. I tried to keep things in approximately +> the order that brand new user might need the information. It goes through +> the process of: +> +> 1. Is this thing worth looking at? +> 2. Ok, but will I be able to do X,Y,Z? +> 3. Fine, I'll download it. What should I download +> and how do you install? +> 4. Let's see something work soon, right now, or I'm +> going to erase the +> whole thing. (Dlxlinux) +> 5. Now how do you change the settings, try a +> different disk image, make a +> disk, etc. Who do I ask for help? +> +> If they get to #5, they are a bochs user. And +> eventually... +> +> 6. Hey, I added USB support to talk to my scanner, +> anybody want to try it? +> +> + + +Here's the outline that the docbooks are organized by, basically. + +Title Pages +Contents +Bochs Users Guide + Introduction to Bochs + What is Bochs? + portable x86 emulator, etc. + Who uses Bochs? + run more than one operating system without rebooting + OS developers use Bochs to system software without endangering + their development machine or rebooting. + students use Bochs to learn about how PC hardware works + hardware designers use bochs to help test new hardware + Will it work for me? + platforms supported (brief list) + speed issues. if speed is top priority, maybe look elsewhere + Licensing + FAQ + Installation + How to get it + pointer to SF web site + most stable version: latest release. binaries and source available + latest version + by using CVS software + by downloading CVS snapshot + Installing a Binary + For Windows, unzip into some directory. Look for DOC-win32.html + for more instructions. Quick start: find dlxlinux/start.bat and + double click + For Unix, rpm -i bochs-.rpm. + Look for /usr/local/bochs/latest/DOC-linux.html, man pages for + bochs. Quick start: run bochs-dlx (in /usr/local/bin) + Compiling from source + Unix + Run configure to make the Makefiles + List of configure arguments + Option of using .conf.* scripts + What to report if configure fails: Tar up config.* and send to + bochs-testing@tlw.com + Make + What to try if make fails: turn off configure options, + look at SF bugs and patches section to see if it's a known + problem, try to fix it yourself, if using CVS version try + a release source file instead, fix it yourself + Make install, what it installs and where + /usr/local/bochs/$VERSION/* + /usr/local/bin/bochs (and bximage) + /usr/man/man1/bochs*.1 (and bximage.1) + make install_dlx option + How to build an RPM in Linux + Instructions for win32 VC++ + Getting the makefiles + Download them from web site in a zip, install them on top + of the source directory + Run configure on a unix box, copy the Makefiles and config.h + to your windows machine + RUN CONFIGURE IN BOCHS! This would be awesome. + Cygwin? + Building it with NMAKE + Installation? Maybe download an existing windows binary package + and drop in your new binary. There is no make install, though + this may be added some day. + Instructions for cygwin? + I have no idea. + Setup + What does Bochs need? + bochsrc, BIOS, VGABIOS, VGA font, disk images. + table of bochsrc options and what they do + BIOS/VGABIOS, what do they do? + VGA font, how to install it + disk images + where to find one pre-made + make a blank one with bximage + grab one from a real hard disk + Using Bochs + Resources for users + bochs-developers mailing list, archive + testing status page: tells what has been tried and who got it working + SourceForge + look for bug reports + how to report problems, make feature requests + Common problems and what to do about them + What's a panic? How to report it to bug tracker, how to make + it non-fatal. + Mouse behavior, enabling and disabling + Keyboard mapping problems + [...] + Tips and Techniques + Mount disk image in loopback + Using two hard disks + [...] + Guest operating systems + Notes for different OSes + Linux + What disk images are available. + Installing from scratch. + What works + Known problems + OpenBSD + FreeBSD + FreeDOS + DOS + Windows * + [...] +Bochs Developers Guide + Resources for developers + All the resources for users + CVS + how to browse on web interface + anonymous CVS (read only) + write access CVS (must be officially a developer) + how to make a patch using CVS + SourceForge bug, feature, and patch trackers + About the code + cpu directory does this, iodev does that, gui does that + configure script, makefiles, header files + log functions: what is a panic, what is an error, etc. + objects that do all the work (cpu, mem) + timers + Debugger + compile with debugger support + get started in debugger + command reference + techniques + Coding + coding conventions + patches: how to make, where to submit, what +happens then? + life cycle of a CVS release +Documentation + Layout + Docbook Basics + Conventions + Rendering +Glossary +Index diff --git a/bochs/doc/docbook/user/user.dbk b/bochs/doc/docbook/user/user.dbk new file mode 100644 index 00000000..c16b7b7a --- /dev/null +++ b/bochs/doc/docbook/user/user.dbk @@ -0,0 +1,8771 @@ + + + + +%bochsdefs; + +]> + + + + Bochs User Manual + + KevinLawton + BryceDenney + N. DavidGuarneri + VolkerRuppert + ChristopheBothamy + MichaelCalabrese + StanislavShwartsman + + + + +Introduction to Bochs +
What is Bochs? + +Bochs is a program that simulates a complete Intel x86 computer. It +can be configured to act like a 386, 486, Pentium, Pentium II, +Pentium III, Pentium 4 or even like x86-64 CPU, including optional MMX, SSEx +and 3DNow! instructions. +Bochs interprets every instruction from power-up to reboot, and has +device models for all of the standard PC peripherals: keyboard, mouse, +VGA card/monitor, disks, timer chips, network card, etc. Because Bochs +simulates the whole PC environment, the software running in the simulation +"believes" it is running on a real machine. This approach allows Bochs +to run a wide variety of software with no modification, include most popular +x86 operating systems: Windows 95/98/NT/2000/XP and Vista, all Linux flavors, +all BSD flavors, and more. + + + +Bochs is written in the C++ programming language, and is designed to run +on many different host platforms + +Since Bochs can run on one kind of machine and simulate another machine, we +have to be clear in our terminology to avoid confusion. The host platform is +the machine that runs the Bochs software. The guest platform is the operating +system and applications that Bochs is simulating. + +, including x86, PPC, Alpha, Sun, and MIPS. No matter what the +host platform is, Bochs still simulates x86 hardware. In other words, it +does not depend on the native instructions of the host machine at all. +This is both a strength and a weakness, and it's the major difference between +Bochs and many other x86 emulation software such as plex86, VMware, etc. +Because Bochs uses software simulation for every single x86 instruction, it +can simulate a Windows application on an Alpha or Sun workstation. However, +the downside of Bochs' approach is simulation performance. To model the +processor accurately, Bochs must run many instructions for every simulated x86 +instruction, and this makes the simulated machine many times slower than +the physical machine. Commercial PC emulators (VMware, Connectix, etc.) can +achieve much high emulation speed using a technique called +virtualization + +Virtualization takes advantage of simulating x86 instructions on an +x86 machine, allowing large portions of the simulation to take place +at native hardware speed. Whenever the simulated machine talks to the +hardware or enters certain privileged modes (such as in kernel code), +the simulator typically takes control and simulates that code in +software at much slower speed, just like Bochs does. + +, but they are neither portable to non-x86 platforms nor open +source. The Plex86 project is +working toward an open-source x86 simulator with virtualization. + + + +To do anything interesting in the simulated machine, Bochs needs to interact +with the operating system on the host platform (the host OS). When you press a +key in the Bochs display window, a key event goes into the device model for the +keyboard. When the simulated machine needs to read from the simulated hard +disk, Bochs reads from a disk image file on the host machine. When the +simulated machine sends a network packet to the local network, Bochs uses the +host platform's network card to send the packet out into the real world. These +interactions between Bochs and the host operating system can be complicated, +and in some cases they are host platform specific. Sending a network packet in +FreeBSD requires different code than sending the packet in Windows XP, for +example. For this reason, certain features are supported on some host +platforms and not others. On GNU/Linux, Bochs can simulate a network card that +communicates with the world, but on BeOS the simulated network card may not +work because the communication code between the device model and the BeOS +operating system has not been written. + + + + + +Bochs was written by Kevin Lawton starting in 1994. It began as a +commercial product, which you could buy with source code for ... +&NEEDHELP; + +We need a Bochs historian to help out here. For background, it would be +interesting to know how much Bochs used to cost and what it was used for. I +thought I saw an interview out there somewhere where Kevin says why he started +it and some more background information. + + Finally, in March 2000, MandrakeSoft (now called +Mandriva) bought Bochs +and made it open source under the GNU LGPL. + + +In March 2001, Kevin helped a few developers to move all Bochs activities from +bochs.com to a new site at bochs.sourceforge.net. Since then the Bochs project +has settled into its new home, and around release times has even hit #1 most +active project of the week at SourceForge. + +
+ +
Who uses Bochs? + It is hard to estimate how many people have tried Bochs or use it on a +regular basis, but a few statistics give an indication. The bochs-developers mailing list, which is the +primary source of news on bugs and releases, has over 400 subscribers. The +latest version has been downloaded over 150,000 times from SourceForge, not +counting any mirror website or CVS users. + + + +Bochs has many possible uses, and different people use it for different +things. Many people use it to run applications in a second operating system +without needing two different computers or dual-booting. Running +Windows software on a non-x86 workstation or on an x86 Unix box are common +uses. Also, because every hardware instruction and every line of simulator +code is accessible, Bochs is used extensively for debugging new operating +systems. If you were writing boot code for your home-brewed +x86 operating system and it didn't work right, booting it in Bochs could +give you great visibility into what is really going on. The Bochs +debugger lets you simulate quickly or slowly, pausing whenever you want +to look at the contents of memory or the CPU registers. Or, if you +wanted to study which parts of a program take the most time, you could use +Bochs to measure how often certain pieces of the code were executed. + + + +Bochs has been used as a teaching tool in Operating Systems classes, in which +students used and modified it to learn how the PC hardware works. As a final +project the students had to add a new peripheral device, so they had to learn +all about I/O ports, interrupts, and device drivers. In industry, it is used +to support legacy applications on modern hardware, and as a reference model +when testing new x86-compatible hardware. + + + +There may be as many uses of Bochs as there are users. Do you want to run +your old DOS games? Or learn how to program under GNU/Linux, without leaving your +Windows desktop? Or reverse engineer your printer driver? You decide. + + +
+ + +
Is Bochs right for me? + +Bochs is very useful for some applications, and not well suited to others. +This section tries to answer the question, "Is Bochs right for me?" + + +Bochs may or may not be right for you, depending on what it is you want to do. +Perhaps all you want to do is run one or two applications native to Microsoft Windows +on GNU/Linux, or vice-versa. Perhaps your biggest concern is speed and performance. +Maybe you don't mind tweaking a few files here and there when you want another application +to work in that setting. +In cases where the objective is to simulate x86 hardware on an x86, Plex86, Wine, and +VMware might be your best options. + + +On the other hand, perhaps you have a vital application running on an older operating +system that only runs well on old hardware. You are concerned that the life cycle of +this hardware is coming to an end, and your backup and restoration hardware and tools +no longer suffice for the amount of data that you have. You need to transfer backup +disk images over a network, and want to use modern procedures for hardware maintenance. +Perhaps the application is important enough to run on a larger computer, such as a +64-bit machine, or even a mainframe. Bochs would be an excellent option in such a scenario. + + + +Perhaps your objective is to debug software or hardware drivers. Bochs offers a controlled +environment that can better assist you in determining cause and effect relationships. +You can take snapshots that show you what is going on behind the scenes. +You can isolate the line that caused that crash. You can have multiple +images and compare them under a microscope. +In these situation, Bochs could save you time and resources. + + + +Information Technology changes faster than any other field. +It is very easy to forget transitional software that came and went. +But history is important to all fields, and to build on the future, +it is important to understand the past. Computer programmers, however, +do not have the same advantage as an architect, who can, for example, +take a trip to Greece and touch a pillar. Much of the history of Computer +Science is left on corroding floppies and malfunctioning hardware. +Bochs gives you the benefit of having one or more complete environments +where you can understand firsthand the behavior of operating systems and +programs. This cannot be achieved with an "emulator" such as Wine. + + +
+ +
Will it work for me? + + +Whether Bochs works for you depends on your host hardware, host operating +system, guest operating system, guest software, and your ability to work in +a command-line environment using documentation. There is no wizard to help +you through the setup process. You do not get a recovery or installation +disk to assist you in the process of installing a guest operating system. +Bochs only provides you with the "virtual hardware", and it is up to you to do the rest. + + +Bochs will run on Windows, GNU/Linux, FreeBSD, OpenBSD, or BeOS. +If you are running on x86 hardware, you have a range of choices. +Check the installation section for your host platform to see what options +Bochs supports on your platform. If the most important factor is speed, +you may want to try a virtualization product instead of Bochs (VMware, VirtualBox, plex86). + + + +If you are using a non-x86 machine, then Bochs is one of the few choices for +running x86 software. Bochs has been known to work on Solaris (Sparc), +GNU/Linux (PowerPC/Alpha), MacOS (PowerPC), IRIX (MIPS), BeOS (PowerPC), Digital +Unix (Alpha), and AIX (PowerPC). + + + +You can also find more detailed testing information on the testing +status page on the &bochswebsite;. + + + +
+ +
Bochs License + +Bochs is copyrighted by MandrakeSoft S.A. + +Mandriva has a web site at +http://mandriva.com + + +and distributed under the +GNU Lesser General Public License + +Complete text of the GNU LGPL is included with the source code in a file +called COPYING, and is also here. + +. The following text appears at the +top of every source code file in the Bochs distribution: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + + + +
+ +
Third Party Software Licensing and Temporary Files + + +Before you install or use any Operating System, BIOS, or other software package +within the Bochs PC emulation environment, make sure you are and will be in +compliance with all the software licenses pertaining to the software you wish +to install. It is completely your responsibility to provide licenses and records +on all software that you install and/or use. It is also completely your responsibility to +maintain total compliance with all Software Licenses involved. + + + +In the process of installing Software within the Bochs PC emulation environment, +it may be helpful or necessary to copy or convert files from the original distribution +format to a second format to facilitate the installation. You should delete +the intermediate files after installation, making certain that only the +original distribution files remain. + + + +
+ +
Features + +The following table shows the features of Bochs and which platforms they +currently work with. + +Bochs Features + + + + Feature + Supported? + Description + + + + + configure script + Yes + Bochs uses GNU autoconf to configure Makefiles and headers. + Autoconf helps Bochs to compile on a wide variety of platforms. + + + + 386,486,Pentium Emulation + Yes + Bochs can be configured to emulate one of several families of Intel hardware. Some Pentium features are incomplete, such as SMM (System Management Mode). + + + P6 and later CPU Emulation + Yes + Bochs can be configured to emulate any P6 family processor including optional MMX and SSE instructions. + + + + Pentium 4 Emulation + Incomplete + A few Pentium 4 features are incomplete, such as an on-chip APIC extensions (XAPIC) for SMP simulation. + + + + x86-64 Extensions Emulation + Yes + Bochs can be configured to emulate x86-64 with many recent Intel or AMD extensions. + + + Command Line Debugger + Yes + Powerful command line debugger (optional) that lets you stop + execution and examine registers and memory, set breakpoints, etc. + + + + GUI Debugger + Yes + Chourdakis Michael and Bruce Ewing contributed very powerful GUI frontend for Bochs internal debugger. + GUI debugger frontend is supported for Win32 and GTK hosts. + + + + Floating Point + Yes + Uses software floating point engine based on SoftFloat floating point emulation library. + + + + Enhanced BIOS + Yes + Implements ElTorito, EDD v3.0, basic APM feature, PCIBIOS features + and the PCI interrupt routing table. The latest version of the Bochs BIOS + has a 32-bit init for ACPI, SMM and SMP. + + + + VGA + Yes + VGA color graphics emulation in a window. + + + + VBE (VESA) Support + Yes + Currently resolutions up to 2560x1600x32bpp are supported. + You must compile Bochs with VBE enabled and use the LGPL'd VGABIOS. + For more information see . + + + + Cirrus Logic video card + Yes + Cirrus Logic CL-GD5430 ISA or CL-GD5446 PCI video card support. + For more information see . + + + Floppy disk + Yes + Supports floppy disk images on all platforms: 2.88M 3.5", 1.44M 3.5", 1.2M 5.25", + 720K 3.5" and 360K 5.25". On Unix and Windows 9x/NT/2000/XP, Bochs can access the + physical floppy drive. It is also possible to use a local directory as VFAT media + (1.44M only). + + + + Multiple ATA channels + Yes + Emulates up to 4 ATA channels. Up to 8 ATA/ATAPI emulated devices can be attached, + two per ATA channel. + So you can have eight hard disks or seven hard disks and a CD-ROM or four hard + disks and four CD-ROMs, or one hard disk and seven CD-ROMs, etc... + + + + Hard disk + Yes + Emulates ATA-6/IDE hard drives via image files. Physical + hard disk access is supported on some architecture, but NOT recommended, primarily for safety reasons. + Hard disks up to 127GB are supported, on any platform that support large files access. + It is also possible to use a local directory as VFAT drive. + + + + CD-ROM + Yes + Emulates ATAPI-4/IDE CD-ROM. The CD-ROMs can read from an ISO disk image + on any platform. On Windows (9x/ME/NT/2000/XP), Linux, SunOS, FreeBSD, + NetBSD, OpenBSD, Amiga/MorphOS, MacOSX and BeOS, Bochs can read from the + physical CD-ROM drive. Starting with version 1.4, Bochs is even able to boot from + a bootable CD or bootable ISO image. + + + + Keyboard + Yes + Emulates a PS/2 keyboard with North American key mappings. Optional keyboard layout + remapping files are provided to support localized keyboard in X11 (Belgian, Danish, French, + German, Italian, Russian, Slovenian, Spanish, Swedish, U.K.). + + + + Mouse + Yes + Emulates a serial, PS/2 or USB mouse with 3 buttons + optional mouse + wheel support. + + + + Sound Blaster + Yes + Emulates a Sound Blaster 16 card (ISA, no plug&play). On Windows, Linux, FreeBSD, MacOS 9 and + MacOSX, the output can be sent to the host computer's sound system, see + for details. + + + + Network card + Yes + Emulates an NE2000 compatible network card. On Windows NT/2000, + Linux, FreeBSD, and NetBSD, Bochs will forward packets to and from the + operating system so that the guest OS can talk on the physical network. + Unfortunately, on some platforms the guest OS can talk to any machine on + the network BUT NOT the host machine. On Windows and on systems that + allow the TAP or TUN/TAP interface, there is no such limitation. Often + the host machine may be configured so the guest OS has access to the + internet. On MacOSX, you may download the TUN driver from: + + + + + Parallel Port + Yes + Parallel port emulation was added by Volker Ruppert for Bochs 1.3. + Data that is sent to the parallel port by the guest OS can be saved into a + file or sent directly into the parallel port device (Unix only). + + + + Serial Port + Yes + The serial port (16550A UART emulation) is usable, on GNU/Linux, + NetBSD, OpenBSD, FreeBSD and MacOSX as host and guest. On other OSes the + emulation is present, but the connection to hard- or software of the host is + not implemented yet. Up to 4 ports are available. + + + + Gameport + Yes + Emulates a standard PC gameport. The connection to a real joystick is + currently supported on Linux and win32 only. + + + + PCI + Yes + Emulates most of the i440FX PCI chipset. The Host-to-PCI bridge + (PMC/DBX), the PCI-to-ISA bridge and the PCI IDE controller (PIIX3) are + available. For PCI cards there are 5 PCI slots supported. + + + + USB + incomplete + Two types of host controllers (UHCI and OHCI) and the devices 'mouse', + 'tablet', 'keypad', 'disk', 'cdrom', 'hub' and 'printer'. are available. + Plugging in and removing devices at runtime is possible. Access to real + hardware is not implemented yet. + + + + Plugins + Yes + Compiling gui and devices as plugins is supported on Linux, MacOS X, + Solaris, Cygwin and MinGW/MSYS. + + + PIC + Yes + Master and slave programmable interrupt controller. + + + + CMOS functions + Yes + Real time clock (RTC) and CMOS RAM are available + + + Dynamic Translation/Virtualization + No + Because Bochs is designed to be portable, it does not attempt + to do any dynamic code translation or virtualization. See + for details. + + + + Simulate a Multiprocessor + Yes + Bochs can be configured to simulate up to 8 processors. This + feature is still experimental, but it can boot several Linux or Windows guests + with SMP support. Please note that this does NOT mean that Bochs can run + faster on a physical SMP machine. + + + + Take advantage of your SMP box + No + At present, Bochs does not use threads or parallel processing, so it + will not run any faster on multiprocessor hardware. + + + + Copy and Paste + Yes + Depending on the host platform, the text-mode screen text can be + exported to the clipboard. Text in the clipboard can also be pasted, through + Bochs, to the guest OS, as simulated keystrokes. + + + + +
+
+ +
Supported Platforms + +The following table shows the supported platforms with a small description and +the available display libraries on these platforms. The display library is the +code that displays the Bochs VGA screen and handles keyboard and mouse events. + +Supported platforms + + + + Platform + Description + Display Libraries + + + + + + Unix/X11 + + X windows has always been well supported because it was + Kevin Lawton's main development platform. Bryce Denney maintains + the Unix/X11 platform now. Most features and fixes (not all) are + tried first in Unix and then ported to the others; see + for compile instructions. + + x, sdl, wx, term, rfb + + + + Win32 + + This port was done by David Ross and is now maintained by + Don Becker. You can compile with Microsoft Visual C++, + see for compile instructions, + or Cygwin, see . + + win32, sdl, wx, rfb + + + + BeOS + + Kevin Lawton wrote this port, originally to R3/PPC using + CodeWarrior. It now works on R4/x86 with egcs. Simon Huet picked up + maintaining/reworking the BeOS GUI port. In September 2001, Bernd Korz + of Yellow Tab, Inc. + (www.yellowtab.com), took + over the BeOS/Zeta port, and is working on raw CD-ROM and raw floppy + support. For compiling, see . + + beos, sdl + + + + MacOS X + + Emmanuel Mailliard ported the Macintosh code to MacOS X with Carbon API. + Jeremy Parsons (Br'fin) has been maintaining the MacOS X port since + March 2002; see for compile instructions. + + carbon, x, rfb, sdl + + + + PowerPC-Macintosh + + David Batterham + ported Bochs to the Mac. He compiled with CodeWarrior Pro R1 (CW12) + but has not had time to maintain the Mac port since early 2000. + If you have Mac development tools and want to contribute, contact + the &devlist;; see for + compile instructions. + + macos + + + + Amiga/MorphOS + + This port is written and maintained by Nicholai Benalal, see + for compile instructions. + + amigaos + + + + OS/2 + + Nick Behnken used PE2LX to translate David Ross' Win32 + port to an OS/2 program. This hasn't been updated for a long time, + and Nick Behnken's page seems to be inactive. + Also, Craig Ballantyne ported Bochs to OS/2, but his web page has + disappeared and his port has not been updated since March 2000. + If you want to bring the OS/2 port up to date, contact the &devlist;. + + ??? + + + + +
+
+ +
FAQ + + + + Is Bochs Open Source? + + + + Yes! Bochs is released under the GNU LGPL, + much thanks to MandrakeSoft (now called Mandriva). + + + + + + + How do you pronounce "Bochs"? + + + + Phonetically the same as the English word "box". It's just a play on the word "box", since techies like to call their machines a "Linux box", "Windows box", ... Bochs emulates a box inside a box. + + + + + + + Who is the author of Bochs? + + + + Kevin Lawton is the primary author of Bochs. There have been bug fixes, + enhancements, and code contributions from some few hundred people, so + it is not possible to list them all. Recently, Kevin has been working + on a PC virtualization project called plex86. In Fall 2002, he + made contributed some major CPU speedups and helped with integration + and debugging of the x86-64 emulation code. + + + + + + + Who maintains Bochs now? + + + With Kevin's help, in April 2001, the members of the bochs-developers + mailing list set up a new official Bochs site hosted by Source Forge. The admins on this + project are Greg Alexander, Don Becker, Christophe Bothamy, Bryce + Denney, Volker Ruppert and Stanislav Shwartsman. + + + + + + Tell me about performance when running Bochs. + + + Because Bochs emulates every x86 instruction and all the devices in a PC + system, it does not reach high emulation speeds. Users who have an x86 + processor and want the highest emulation speeds may want to consider PC + virtualization software such as plex86 or VirtualBox (free software). + Another related project is QEMU. + + + + + + Does Bochs use a disk partition to install the OS? + + + No. It uses a disk image file, which is simply a large file, like any other file, on your platform's disk. + + + + + + Why can't I use Bochs with my current WinXP installation? + + + Think about this. If you had two different PC's, they would require different + hardware drivers. So you may not be able to safely move a disk drive with WinXP + on it, from one to the other. Bochs is no different. It emulates a certain set + of hardware devices, and requires each OS be configured for those devices. + + + + + + Is there a developer's email list for Bochs? + + + Yes. For instructions on joining, refer to + . + + + + + + Is there an IRC channel for Bochs? + + + Yes. You will usually find Bochs developers and users on IRC at irc.freenode.net:6667, channel #bochs. + + + + + + Do you know of any snapshots of Bochs running Windows? + + + Yes! Look for "Screen Shots" on &bochs-sf-net; or on other Bochs sites. + + + + + + Does Bochs support a CD-ROM? + + + Yes, a CD-ROM is supported in Linux, Windows, BeOS, and most BSDs. The + CD-ROM drivers for Bochs allow the guest operating system to access the + host operating system's CD-ROM data directly. + + + + + + Does Bochs support a sound device? + + + Yes, there is Sound Blaster emulation support for most common operation systems, + see for details. + + + + + + Does Bochs support a network card? + + + Yes. Bochs contains a model of an NE2000 compatible network card. + Networking is not supported on all platforms. See + for details. + + + + + + What applications are known to run inside of Bochs? + + + Well, lot's of different OS's run inside of Bochs, so + thousands. I'm assuming you are asking about Windows programs. + To give you a few, the following ones from the Winstone'98 tests + worked: Access 97, CorelDRAW! 7, Excel 97, Lotus 1-2-3 97, Word 97, + PowerPoint 97, Quattro Pro 7, WordPerfect 7. + + + Also, I've compiled an entire OS kernel inside Bochs before. Not +to mention, running DOOM, though at then-pathetic speeds. + + + + + + I am new to Bochs, how do I start? + + + You should read first. Next, you can check + if there specific instructions on how to install your (guest) OS inside of Bochs. + + + + + + +
+ +
+ + +Release Notes + + +The change log is stored in the Bochs source code in a file called +CHANGES. Click here +to see the latest version of the CHANGES file. + + +The link above is provided by Source Forge and might change one day. If it +stops working, you can download the current source code with CVS and read +the CHANGES file there. + + + + + + + + +Installation + +
Downloading Bochs + + +You can download Bochs from our web site at &bochs-sf-net;. First, you +need to choose what version to get: a recent release or a development +version. If you trying to get things working for the first time, a release +version is recommended since it has been tested the most. The development +versions (sometimes called snapshots) may have some newer bug fixes and new +features, but have not been tested as much as the releases. + + + +Second, you can choose to compile Bochs from source code or install a binary +(if one is available for your platform). Binary packages will be quicker to +install, and most include a small demo of a guest operating system called DLX +Linux to get you started. However, some features can only be enabled if you +compile Bochs yourself, for example the Bochs debugger. For multiuser systems, +you will probably need system administrator privileges (root) to install a +binary package. If you decide to get a binary, download it to your hard disk, +uncompress it, then go to the section called Installing a Binary for more information. + + + +If you are going to compile Bochs yourself, you need the gzipped tarball +containing the source code, called +bochs-version.tar.gz. For +Windows and Mac, the prebuilt Makefiles are separate, so also get +the Makefiles for your platform. To unpack a compressed TAR file + +A TAR file is a single file that contains many files packed inside. Bochs +TAR files are compressed with a program called gzip, and another program +called gunzip is used to uncompress them. + + on a Unix machine + +On Windows, look for software called WinZip to unpack the TAR. + + +, type + + gunzip -c bochs-version.tar.gz | tar -xvf - + +This creates a directory called +bochs-version full of +files. This directory will be referred to as &bochsdir;. Go into +&bochsdir; and you are ready to compile. Instructions for compiling +Bochs are in the section, Compiling Bochs. + + + +Alternatively, you can also obtain the sources for any Bochs version using CVS. +See the CVS instructions for details. + +
+ +
Tracking the source code with CVS + +CVS, or Concurrent Version System, is a software development tool that helps +to keep track of the different revisions of each file. It is used by many +open source (and commercial) projects to allow multiple developers to share +their changes to the source code. The Bochs source code and documentation +are available using CVS + +You can download CVS software and documentation from +www.cvshome.org. + +. + + +
Checking out Bochs + +When you have CVS installed, the first step is to do a login and checkout. The +initial checkout command is long and ugly, but usually you only have to do it +once. The example below shows the CVS checkout process in Unix. On the +Windows platform, you can download a CVS client from cvshome.com, or +use CVS within Cygwin + +Cygwin is an open source Unix-like environment for Windows platforms, +available at www.cygwin.com. + +. + +
Checking out Bochs in CVS + + user$ cvs -d:pserver:anonymous@bochs.cvs.sourceforge.net:/cvsroot/bochs login + (Logging in to anonymous@bochs.cvs.sourceforge.net) + CVS password: (there is no password, just press Enter) + user$ cvs -z3 -d:pserver:anonymous@bochs.cvs.sourceforge.net:/cvsroot/bochs checkout bochs + cvs server: Updating bochs + U bochs/.bochsrc + U bochs/.conf.beos-x86-R4 + U bochs/.conf.macos + . + . (This might take a few minutes, depending on your network connection.) + . + U bochs/patches/patch.seg-limit-real + user$ cd bochs + user$ ls + Bochs.proj.hqx bxversion.h fpu/ osdep.cc + CHANGES config.h.in gui/ osdep.h + COPYING configure* install-x11-fonts* patches/ + CVS/ configure.in instrument/ pc_system.cc + Makefile.in cpu/ iodev/ pc_system.h + README bx_debug/ load32bitOShack.cc state_file.cc + TESTFORM.txt disasm/ logio.cc state_file.h + bios/ doc/ macintosh.txt win32.txt + bochs.h docs-html/ main.cc + bochs.rsrc.hqx dynamic/ memory/ + build/ font/ misc/ + user$ _ + +
+
+ + + This is just an example output of a checkout of an older version of Bochs. + You most likely will see more/other files. + + + + +If you have write access to the Bochs CVS tree, the checkout +command is different for you. See the Developers Guide + +See the Developers Guide +and/or look at CVS repository information, +section "Developer CVS Access via SSH", for instructions. + + for details. + + + + + +If you use remote CVS for other projects, you might have already set +the environment variable CVS_RSH in your configuration +files. For the CVS checkout to work as shown above, the +CVS_RSH variable should either be empty or set to +rsh. + + + + +The CVS checkout process (above) gives you a directory called bochs that +contains the very latest source code. I will refer to this directory +as &bochsdir;. In each subdirectory directory there's also a +directory called "CVS" which tells the cvs software where the code was checked +out, what version you have, and where to go for future updates. + +
+ +
Getting the Latest Version + +Most developers use CVS to always give them the latest source code. The minute +that any developer checks in a change, they are available to everyone else +through CVS. You just have to type cvs update -d -A in the +&bochsdir; directory, and CVS will retrieve any files and directories that have +been changed since you did a checkout. If you update regularly, each update +takes a short time because it downloads only the files that changed. The +-d option tells cvs to download new directories that +have been checked in, not just files. The -A option means +to get the most recent version of each file, as opposed to a release version. +See Getting a release version +Both -d and -A can be omitted in many +cases, once you are familiar with the process. + + +The cvs update -A -d command tells you if any new files have +been downloaded from the server, and it also tells you if you have modified any +of the CVS-controlled files. As it checks through the source directories, it +will list files that have changed, with a single letter before the name that +tells the status of that file. The most common status letters are listed +below. + + +Status letters in a CVS update + + + + Letter + Meaning + Description + + + + + ? + unknown + + This file is in your bochs directory, but CVS does not know anything + about it. For example, when you compile Bochs, any files created + during the build process appear as ?. + + + + U + update + + cvs downloaded a new version of this file because it changed on the + server, usually because someone else did a checkin. + + + + P + patch + + This does the same as U, but instead of sending the whole file + (update), only a diff/patch is sent, thus, less bandwidth is used. + + + + M + modified + + You have changed this file on your disk, so it no longer matches the + version on the server. This is not a problem; it's just for your + information. If you want, you can discard your changes and + get a fresh copy by deleting the file and running cvs update again. + + + + C + conflict + + You have changed this file on your disk, but this change conflicts with + a change that was checked in. Conflicts occur when two people change + the same line of code in different ways. You need to edit the + conflicting file(s) and clean it up by hand. Or, sometimes it's + easiest to discard your own edits and download a fresh copy, by + deleting the conflicting file and running cvs update again. + + + + +
+
+ + +If you have been using cvs update with "sticky tags" to +retrieve other versions, as described later, cvs will remember which version +you were looking at. In this case, a cvs update will keep +your sources consistent with that version. If you want to get back to looking +at the latest code again, be sure to use the -A option to +clears the sticky tags. + +
+ +
Getting a Release Version + +Once you have a CVS checkout, you can also use the update command to +get the Bochs source code for any release since March 2000. The command +is cvs update -d -r tagname. +The tag tells which release you want, and it can be one of the following: + + +CVS Release Tags + + + + Bochs version + Release tag for CVS + + + + + 2.4.1 + REL_2_4_1_FINAL + + + 2.4 + REL_2_4_FINAL + + + 2.3.7 + REL_2_3_7_FINAL + + + 2.3.6 + REL_2_3_6_FINAL + + + 2.3.5 + REL_2_3_5_FINAL + + + 2.3 + REL_2_3_FINAL + + + 2.2.6 (intermediate2) + REL_2_2_6_FINAL + + + 2.2.5 (intermediate1) + REL_2_2_5_FINAL + + + 2.2.1 (bugfix1) + REL_2_2_1_FINAL + + + 2.2 + REL_2_2_FINAL + + + 2.1.1 (bugfix1) + REL_2_1_1_FINAL + + + 2.1 + REL_2_1_FINAL + + + 2.0.2 (bugfix2) + REL_2_0_2_FINAL + + + 2.0.1 (bugfix1) + REL_2_0_1_FINAL + + + 2.0 + REL_2_0_FINAL + + + 1.4.1 (bugfix1) + REL_1_4_1_FINAL + + + 1.4 + REL_1_4_FINAL + + + 1.3 + REL_1_3_FINAL + + + 1.2.1 (bugfix1) + REL_1_2_1_FINAL + + + 1.2 + REL_1_2_FINAL + + + 1.1.2 (bugfix3) + REL_1_1_2_BASE + + + 1.1.1 (bugfix2) + REL_1_1_1_BASE + + + 1.1 (bugfix1) + REL_1_1_BASE + + + +
+ + + +To get a complete list of allowed tags, type cvs stat -v README. Many of the tags are not generally useful. + + + +Once you have done an update with -r tagname, you have made a "sticky tag." The stickiness refers to the fact +that CVS remembers which tag you have used most recently. The tag is stored +in the CVS subdirectory, so it stays around even if you log off and +return later. After creating a sticky tag, any future cvs updates will +try to keep your directory in sync with the version you chose. In other +words, when developers check in changes you will not +see them because your directory is "stuck" looking at an old version. +To clear the sticky tag, use cvs update -A. +
+ + +A variation on the sticky tag concept is a sticky date + +According to some sources, this is when you eat dinner with someone, and +accidentally spill a drink on him/her. + +. If some feature was working at some time in the past, but +is no longer working, you can ask CVS to give you the sources from any +date. cvs update -D 2001-06-14 will download the +Bochs source as they were on June 14, 2001. Again, use -A +to clear the sticky date and track the current sources. + +
+ +
More about CVS + +Entire books have been written on CVS, so there's no sense in duplicating +it all here in the Bochs documentation. Some sources of additional +information are listed below. + + +The cvshome.com +site has tons of CVS FAQs and documentation, including the official CVS +manual by Per Cederqvist. + +Another CVS FAQ is available at University of Utah. + + + +
+ + +
+ + +
Installing a Binary + + +This section is divided up by platform, since installing a binary package +is different on different platforms. + + +
Windows + +The Bochs binaries for Windows are distributed in an EXE installer package. +The Bochs installer can be started like any other Windows program and it brings +up the installation wizard. Here you can select the destination folder and the +installation options. The wizard installs the files and creates the registry +keys, start menu and desktop links. + + +Previous releases of Bochs were distributed as ZIP packages, too. These packages +contained the same set of files as the installer package from the same version. + + +If you are new to Bochs you should try out the DLX Linux demo distributed with +Bochs. The installation wizard has created a link on the desktop if you decided +to install the demo. If you doubleclick the icon two windows will appear: +one is the Bochs Display window, and the other is text window that is used for +the runtime configuration and for log messages if no logfile is specified. + + +You can find more information on the DLX Linux demo in the next section below the +DLX Linux screenshot. + + +Files in Bochs directory (Windows version) + + File Description + + + +BIOS-bochs-latest default ROM BIOS image for Bochs +BIOS-bochs-legacy ROM BIOS image without 32-bit init code +bochs.exe the main Bochs executable +bochs.ico the Bochs icon (used for links in start menu and on the desktop) +bochsdbg.exe the main Bochs executable with debugger enabled +bochsrc-sample.txt sample Bochs configuration file +bxcommit.exe tool for committing redologs to flat disk images +bximage.exe tool for making new disk images +CHANGES.txt what has changed between versions +COPYING.txt copy of the LGPL license +README.txt the read-me file from the source distribution. +TODO.txt the TODO file from the source distribution. +niclist.exe tool to find out the network interface name +penguin.ico the Linux logo (used for the DLX link in start menu) +sb16ctrl.exe tool to control sb16 in Bochs +sb16ctrl.txt examples of sb16ctrl commands +VGABIOS-elpin-2.40 VGA BIOS image for Bochs +VGABIOS-elpin-LICENSE.txt license for VGA BIOS +VGABIOS-lgpl-latest LGPL'd VGA BIOS image for Bochs +VGABIOS-lgpl-latest-debug LGPL'd VGA BIOS image for Bochs with debug output to the logfile +VGABIOS-lgpl-latest-cirrus LGPL'd VGA BIOS image for Bochs with the Cirrus extension enabled +VGABIOS-lgpl-latest-cirrus-debug LGPL'd VGA BIOS image for Bochs with the Cirrus extension enabled and debug output to the logfile +VGABIOS-lgpl-README.txt readme for the LGPL'd VGA BIOS +uninstall.exe uninstall program for Bochs (created by the installation wizard) +dlxlinux\ directory containing DLX linux sample disk image and configuration files +dlxlinux\readme.txt description of DLX linux +dlxlinux\bochsrc.txt Bochs configuration file for DLX +dlxlinux/hd10meg.img disk image file (10 meg) +dlxlinux\start.bat Run this BAT file to try out DLX Linux inside Bochs! +dlxlinux\testform.txt Form for reporting success or failure + + doc\index.html + a local copy of all Bochs documentation (online copy) + +keymaps\*.map keymap tables (on Windows used for the paste feature only) + + +
+ +
+ +
+Linux RPM + +RPM stands for "RedHat Package Manager." An RPM is a compressed file +containing files to be installed on your system. Many Linux distributions, +not just RedHat ones, can install files from an RPM. First, download the +Bochs RPM for your architecture to your computer. For example, if you have an +Intel-compatible computer, be sure to get the RPM that says "for Linux x86 +distributions" or "i386". Once you have the package on your local disk, you +should become the root user and install it as follows + +Many distributions have their own RPM installer program, often graphical, and +they should work ok. It is helpful to be able to see the text output from +RPM, so if you use a fancy RPM installer, be sure to find the text output and +check that it looks correct. + +: + +
Installing an RPM in Linux + + user$ su + Password: + root# ls -l bochs-1.2.1.i386.rpm + -rw-rw-r-- 1 user user 1877515 Sep 14 09:02 bochs-1.2.1.i386.rpm + root# rpm -i bochs-1.2.1.i386.rpm + Looking for fonts to install... /usr/local/bochs/latest/ + Looking for X11 Font Path... /usr/lib/X11/fonts + Installing vga.pcf... ok (it was already there) + Running mkfontdir... + Done installing Bochs fonts for X11. + root# exit + user$ _ + +
+
+ + +All RPM installations are done as the root user because they require +permission to update system files and directories. If you do not have root +access you need to compile Bochs in your home directory. + + + +RPM installation can fail for a few reasons. It will fail if you already +have a Bochs package installed. In this case, try upgrading the old package +to the new package with rpm --upgrade NAME.i386.rpm. +Another potential problem is missing RPM dependencies. If you are getting +errors about missing files or RPMs, then first you should try to +install the RPMs that provide the missing pieces. If that cannot be done, +download the source RPM and build a new binary RPM that is appropriate +for your platform. The command is rpmbuild --rebuild +NAME.src.rpm. As a last resort, you can run rpm with the +--nodeps option to ignore dependencies and install it +anyway, but if it is missing important pieces it may not run properly. + + + +The Bochs RPM installs four new commands and associated manual pages: bochs, +bochs-dlx, bximage and bxcommit. First, let's try out the DLX Linux demo by typing +bochs-dlx. + + + user$ bochs-dlx + --------------------------------------------------------------- + DLX Linux Demo, for Bochs x86 Emulator + --------------------------------------------------------------- + Checking for bochs binary...ok + Checking for DLX linux directory...ok + Checking for /bin/gzip...ok + Checking for /usr/users/bryce/.bochsdlx directory... + --------------------------------------------------------------- + To run the DLX Linux demo, I need to create a directory called + /usr/users/bryce/.bochsdlx, and copy some configuration files + and a 10 megabyte disk image into the directory. + --------------------------------------------------------------- + Is that okay? [y/n] + y + Copying /usr/share/bochs/dlxlinux/bochsrc.txt -> /usr/users/bryce/.bochsdlx/. + Copying /usr/share/bochs/dlxlinux/README -> /usr/users/bryce/.bochsdlx/. + Copying /usr/share/bochs/dlxlinux/testform.txt -> /usr/users/bryce/.bochsdlx/. + Uncompressing /usr/share/bochs/dlxlinux/hd10meg.img.gz -> /usr/users/bryce/.bochsdlx/hd10meg.img + Entering /usr/users/bryce/.bochsdlx + Running bochs + ======================================================================== + Bochs x86 Emulator 2.0.pre3 + Build from CVS snapshot on December 4, 2002 + ======================================================================== + + +Then you get a new X11 window containing the VGA display of the simulated +machine. First you see the VGA BIOS screen, then Linux uncompresses and +boots, and you get a login prompt. Type "root" and ENTER to log in to +DLX linux. +
+Screenshot of Bochs running DLX Linux + +
+
+ + +Booting is complete when you see "dlx login:" and a cursor. At this login +prompt, type "root". On UNIX systems, root is the system admin user. +There is no password for root on this sample disk image, so it lets you log +in without typing any password. Now you should see a UNIX prompt, and you +can begin to type UNIX commands. + + + + Welcome to DLX V1.0 (C) 1995-96 Erich Boehm + (C) 1995 Hannes Boehm + + dlx login: root + Linux 1.3.89. + dlx:~# pwd + /root + dlx:~# cd / + dlx:~# ls + bin/ etc/ lost+found/ root/ usr/ + boot/ fd/ mnt/ sbin/ var/ + dev/ lib/ proc/ tmp/ zip/ + dlx:/# df + Filesystem 1024-blocks Used Available Capacity Mounted on + /dev/hda1 10060 2736 6005 29% / + dlx:/# _ + + + +When you get tired of playing with DLX Linux, just type "reboot" in the Bochs +window to shut down the DLX Linux operating system, and when it starts +to reboot again press the "Power" button at the top of the Bochs display +to end the application. + + + + +Here is a list of the files that are installed by the RPM, and a brief +description of each one. + + +Files in RPM package + + File Description + + + +/usr/share/doc/bochs/CHANGES what has changed between versions +/usr/share/doc/bochs/COPYING copy of the LGPL license +/usr/share/doc/bochs/README the read-me file from the source distribution. +/usr/share/doc/bochs/TODO the TODO file from the source distribution. +/usr/bin/bochs the main Bochs executable +/usr/bin/bximage tool for making new disk images +/usr/bin/bxcommit tool for committing redologs to flat disk images +/usr/lib/bochs/plugins/* device and gui plugins for Bochs (plugin version only) +/usr/share/doc/bochs/bochsrc-sample.txt sample Bochs configuration file +/usr/share/man/man1/* man pages for bochs, bochs-dlx, bximage and bxcommit +/usr/share/man/man5/* man page for bochsrc +/usr/share/doc/bochs/index.html a local copy of all Bochs documentation ( Online copy ) +/usr/share/bochs/BIOS-bochs-latest default ROM BIOS image for Bochs +/usr/share/bochs/BIOS-bochs-legacy ROM BIOS image without 32-bit init code +/usr/share/bochs/VGABIOS-elpin-2.40 VGA BIOS image for Bochs +/usr/share/bochs/VGABIOS-elpin-LICENSE license for VGA BIOS +/usr/share/bochs/VGABIOS-lgpl-latest LGPL'd VGA BIOS image for Bochs +/usr/share/bochs/VGABIOS-lgpl-latest-debug LGPL'd VGA BIOS image for Bochs with debug output to the logfile +/usr/share/bochs/VGABIOS-lgpl-latest-cirrus LGPL'd VGA BIOS image for Bochs with the Cirrus extension enabled +/usr/share/bochs/VGABIOS-lgpl-latest-cirrus-debug LGPL'd VGA BIOS image for Bochs with the Cirrus extension enabled and debug output to the logfile +/usr/share/bochs/VGABIOS-lgpl-README readme for the LGPL'd VGA BIOS +/usr/bin/bochs-dlx run this script to try out DLX Linux inside Bochs! +/usr/share/bochs/dlxlinux/ directory containing DLX linux sample disk image and configuration files +/usr/share/bochs/dlxlinux/readme.txt description of DLX linux +/usr/share/bochs/keymaps/*.map keymap tables for X11 and SDL + + +
+ + +
+ +
+MacOS X DMG + +This was contributed by Aard Vark in January 2003 + + +The MacOS X binary distribution is a mountable disk +image (.dmg file). Once you've downloaded the binary +distribution file, just double click +on it to automatically unpack the archive and mount +the volume on the desktop. An icon will appear +exactly as if you'd inserted a CD-ROM +or removable storage device, and a finder window +containing the volume should automatically open. +It is likely to have an odd name +such as _dmg_top, but don't worry about that. + + +Copy the Bochs-2.0 (or whatever version) folder from +the disk image onto your hard disk. Either Home or +Applications would be sensible places to put it. +Because the disk image is mounted read only, you +can't run the included dlxlinux guest OS until +you've copied it to the hard disk. + + +Once you've installed the binaries, it's probably a +good idea to drag the _dmg_top volume to trash to +unmount it, so you don't get confused and try to +run bochs from there. Then open +the bochs folder from wherever you installed it. + + +The MacOS X version of bochs requires a terminal +window to run. If you just double click on the Bochs +icon, you'll get an error message telling you to +double click on "bochs.scpt" to start +Bochs in a new terminal window. You'll need to +configure Bochs before you will get very far with +the bochs.scpt in the top folder, +so to try out bochs open the dlxlinux folder and +double click on the bochs.scpt icon inside. + + +This will open a new terminal window which will +contain the Bochs startup messages, and a +configuration menu. The default option is +[5], which starts the simulation, so press enter to +do so. You will then get a new window containing +the VGA display of the simulated +machine. The new window will probably appear behind +the current terminal window, so either click on the +bochs icon in the dock or the simulation window to +bring it to the front. If you're quick +enough you'll then see the VGA BIOS screen, then +Linux uncompresses and boots, and you get a login +prompt. Type "root" and ENTER to log in to DLX Linux. + + +Once you've finished playing with DLX Linux, just +type "reboot" in the Bochs window to shut down the +DLX Linux operating system, and +when it starts to reboot again press the "Power" +button in the "MacBochs Hardware Controls" window +(it's the circle containing a vertical bar at the +far right - have a look at the Linux screenshots, +since the Mac version doesn't seem to have +descriptions or tool-tips). + + +
+ +
+ +
Compiling Bochs + +
Standard Compile + +Bochs is written in C++, so you need a C++ compiler on your system. Most +platforms have been tested with GNU gcc/g++, but other compilers are known +to work too. By now, you should have unpacked your source TAR file or checked +out Bochs from CVS. If not, you can return to Downloading Bochs for details. The top level +directory of the source code will be referred to as &bochsdir;. (&bochsdir; +contains the files bochs.h and +main.cc and subdirectories cpu and +bios.) + + + +The standard compile process has three basic steps: +configure, make, and make +install. Each step is described in a separate section below. The +standard compile process is used on all Unix machines, MacOS X, BeOS, and +Cygwin (win32). There are separate instructions for compiling for Win32 with Microsoft VC++. + + +
Configure + + +There is a script called configure which tests your +machine, C/C++ compiler and libraries to discover what settings should work on +your system. If you run configure with no arguments after +it, defaults will be used for all settings. To change the settings, you can +run configure with options that override the +defaults. You can get a list of valid configure options by typing +configure --help. One useful configure option is +--prefix=directory, which sets the directory in +which Bochs will be installed. All the possible configure options are +documented in a later section. + + + + + +Among other things, the configure script tries to detect your platform +and which compile options to use. If you want to control this, set these +environment variables before running configure: CC, +CXX, CFLAGS, +CXXFLAGS. Here is an example that sets the environment +variables, using bash/ksh + +The syntax for bash and ksh is given. In csh and variants, use the syntax +setenv VARIABLE +value to change environment variables. +Do not use an equal sign for csh! + + +syntax: + + export CC=egcs + export CXX="$CC" + export CFLAGS="-Wall -O2 -m486 -fomit-frame-pointer -pipe" + export CXXFLAGS="$CFLAGS" + + + + +Once the configure script knows what options are selected, +it creates a Makefile in every source code directory, and creates +$BOCHS/config.h with all the option values written +as preprocessor #defines. Now the sources are ready to compile. + + +
Configure Shortcut Scripts + +In the Bochs source directory, you will see a series of scripts called +.conf.platform. +These scripts run the configure script for you, with a set of +options that are appropriate for that platform. It is not necessary to +use the shortcut scripts; they are simply there to show you an example that +the developers have used. Some of these scripts have been used to build official +binary packages. + + + +If a shortcut script is "almost right" for you, just edit it and then run it! +If you run a shortcut script, you don't need to run configure manually. + + + +Run a shortcut script using Bourne shell, like this: + + sh .conf.win32-vcpp + + +These .conf.platform have +been tested in recent Bochs versions: + + .conf.linux + .conf.sparc + .conf.macos + .conf.macosx + .conf.win32-vcpp + .conf.win32-cygwin + .conf.beos + + + +
+ +
+ + +
Make + +The make command compiles Bochs. Make is a program +used by many software projects that reads the &Makefile; in each source +directory and follows the instructions that it finds there. A &Makefile; tells +which files depend on which other files, what commands to use to compile and +link the code, and more. After you have finished the configure step, just type +make to build the source code. + + + +The reason that make is so popular is that it is smart about when to compile +and when not to compile. If you run make once, it compiles every file. But +when you run it again, it checks to see if any source files have been modified; +if not, there's nothing to do! For example, the &Makefile; says that +main.o depends on main.cc. Knowing +this, it will only compile main.cc if it is newer than +main.o. + + + +Of course, make can only do the right thing if the &Makefile; lists all the +dependencies correctly, so human error can sometimes lead make astray. +If make refuses to build something that you think it should, or you +are getting strange compile errors, try doing make all-clean +and then make again. All-clean means to clean up +the compiled files in every subdirectory, while make clean +means to clean up just the current directory + + +This is different from the terminology of some other projects, and it may cause +confusion. Sometimes "clean" implies that all subdirectories are affected. + +. However, it's important to note that make +all-clean leaves the configuration intact. You do not have +to run configure again. + + + +If you're really in the mood for cleaning, make dist-clean +erases all the configuration information too. In theory, after a dist-clean +your directory should look much like when you first untarred it or checked it +out. There's usually some extra stuff lying around, but the &Makefile; tries +at least to erase any files that it created. + + +
+ +
Make Install + +Once the program has been built, the next step is typically to run +make install to copy the executables, documentation, and +other required files into a public place so that all users can use it. +By default the files are copied to some directories in /usr/local. The following +tables shows the directories and their contents. + +&FIXME; + make install_dlx option + + +Installed files + + + + bin + binary executables (bochs, bxcommit, bximage) + + + lib/bochs/plugins + plugins (if present) + + + man/man1 + manpages for installed binaries + + + man/man5 + manpage for the config file (bochsrc) + + + share/bochs + BIOS images, VGABIOS images, keymaps + + + share/doc/bochs + HTML docs, license, readme, changes, bochsrc sample + + + +
+
+ +
+ +
Configure Options + +This section describes the configure options for Bochs. Perhaps the most +important option is , since it gives you a list of all +the other options. The configure script will detect your platform and choose +the default GUI for your platform. If the default choice is not what you +want, use the options to override the default. The +options in the first table tell which GUI library is the default for each +platform. Starting in version 2.0, you can use multiple + options at once to compile with multiple +display libraries, and then choose between them at runtime with the +display_library option +in the configuration file. Or, you can +let the configure script detect which libraries are on your system +and use them all, by configuring with --with-all-libs. + + + +The concept of platform detection and default GUIs was added in Bochs 1.4. +In Bochs 1.3 and before, the X11 GUI was always the default. + + + + +Defaults by Platform + + + + Platform + Default GUI + Extra compile flags + + + + + win32, Cygwin or MinGW/MSYS + --with-win32 + If using nmake method, compile using cl /nologo /MT /W3 /EHs-c- /DNDEBUG /DWIN32 /D_WINDOWS /D_CRT_SECURE_NO_WARNINGS. + If using Visual C++ workspace, see the workspace file for compile settings. + See Compiling on Win32 with Microsoft VC++ for instructions. + + + + MacOS X or Darwin + --with-carbon + -fpascal-strings -fno-common -arch ppc -Wno-four-char-constants -Wno-unknown-pragmas -Dmacintosh + + + + MacOS 9 or before + --with-macos + none + + + + BeOS + --with-beos + none + + + + AmigaOS + --with-amigaos + none + + + + any other platform + --with-x11 + none + + + + +
+ +Configure Options to Select the Display Library (optional) + + + + Option + Comments + + + + + --with-x11 + Use X windows user interface. On many operating systems, + Bochs will use X windows by default. + + + + --with-win32 + Use the native Win32 GUI. This is the default on win32 platforms. + + + + --with-carbon + Compile for MacOS X with the Carbon GUI. See the + .conf.macosx file for the correct MacOS X compile options. + + + + --with-amigaos + Compile for Amiga MorphOS. This code is written by Nicholai + Benalal. + + + + --with-rfb + + Enable support for the RFB protocol to talk to AT&T's + VNC Viewer. + Refer to for details. + + + + --with-sdl + Enable support for the SDL GUI interface; see . + + + --with-beos + Use BeOS GUI. The configure script will run natively + on BeOS; use this option when doing so. + + + --with-term + Use text-only gui with curses library. Almost certainly + won't work right with the debugger or the control panel. + + + + --with-macos + Use Macintosh/CodeWarrior environment. This is for running + configure on a platform which supports running configure, so that + you may then transfer the configured code over to the + real compile environment. + + + + --with-wx + + Enable support for wxWidgets configuration and display interface; + see . + + + + --with-svga + Use SVGALIB library for Linux. This allows a full-screen + text and graphics display without X windows. The SVGALIB port + was written by Igor Popik. + + + + --with-nogui + No native GUI; just use blank stubs. This is if you don't + care about having video output, but are just running tests. + + + + --with-all-libs + + Automatically detect which libraries are installed on your system + and enable them. This option is still experimental; it might + enable libraries that are not usable and cause the compile to fail. + If you have trouble, just list the --with-* options for the specific + display libraries that you want. + + + + +
+ + +The remaining options can generally be used with any GUI. For each option +such as --enable-cdrom, you can also write --disable-cdrom to explicitly +turn it off. + + + +&NEEDHELP; Link CPU link to the proper row, not to the beginning of the whole table, as it is now. + + +Configure Options + + + + Option + Default + Comments + + + + + --enable-cpu-level={} + 6 + + Select which CPU level to emulate. Choices are 3,4,5,6 which mean to + target 386, 486, Pentium, or Pentium Pro and later emulation. + + + + --enable-smp + no + + Compile in support for SMP simulation. This allows you to boot Linux and + maybe other OSes in SMP mode, and bochs will simulate all the different + CPUs and communication between them. Do not expect this option to speed + up your simulation! On the contrary, it has to spend extra time simulating + the different CPUs (even if they're mostly idle) and the communication + between them. Use it to try out an SMP OS if you don't have an SMP machine, + or to debug SMP OS drivers. Refer to for more details + on SMP in Bochs. + + + + --enable-fpu + yes + If you want to compile Bochs to make use of the FPU emulator + written by Stanislav Shwartsman, use this option. + + + + --enable-x86-64 + no + + Add support for x86-64 instruction set, written by Peter Tattam and Stanislav Shwartsman. + + + + --enable-vmx + no + Intel Virtualization Extensions (VMX) support + + + --enable-x86-debugger + no + X86 debugger support. If the software you run in bochs + needs to use the x86 hardware debugging facilities such as + DR0..DR7, instruction and data breakpoints etc., then you + should use this option. Otherwise don't use it, as it + will slow down the emulation. + + + --enable-monitor-mwait + no + MONITOR/MWAIT instructions support (still experimental) + + + --enable-misaligned-sse + no + support for AMD's misaligned SSE extension + + + --enable-configurable-msrs + no + support for user configurations of emulated MSR registers + (see example in msrs.def) + + + --enable-long-phy-address + no + support for guest physical address larger than 32 bit + + + --enable-cdrom + yes + + Enable use of a real CDROM. The cdrom emulation is always present, and + emulates a drive without media by default. You can use this option to + compile in support for accessing the media in your workstation's cdrom + drive. The supported platforms are Linux, Solaris, FreeBSD, OpenBSD, and Windows. + For other platforms, a small amount of code specific to your platform + must be written. The module iodev/cdrom.cc is the place to add more + support. For the most part, you need to figure out the right set of + ioctl() calls. + + + + --enable-sb16={} + no + + Enable Sound Blaster emulation. + The dummy option means to support an SB16, but don't + use an output device. By default (without a parameter) the lowlevel sound interface is autodetected. + See section Sound Blaster 16 Emulation + for supported platforms and more info. This option also enables the standard PC gameport which is a + part of the SB16. If you don't want to use it, you might use + . + + + + --enable-gameport + no + + Enables the standard PC gameport. This option is only necessary if you want to + have a gameport, but no SB16 (see above). The connection to a real joystick is + currently supported on Linux and win32 only. + + + + --enable-idle-hack + no + + Enables Roland Mainz's experimental idle code, which is intended to + keep Bochs from always using 100% of CPU time. When Bochs is waiting + around for an interrupt, the idle code uses a select() loop and some + X11 tricks to wait until user input arrives. This is designed to + keep Bochs responsive while still yielding to other processes when + Bochs is idle. It only works with X11 or term GUI. + + + + --enable-ne2000 + no + Enable NE2000 network card support. This requires a + low-level component to be written for each OS. The NE2000 + option is only supported on FreeBSD, OpenBSD, Linux, and Windows + 9x/NT/2K/XP. When enabled and configured, the NE2000 device model can + talk to any computer on the network EXCEPT FOR the local host. + Exception: Under most circumstances, Bochs can talk to the local host + on Windows, and in the ethertap interface for Linux. + + + + --enable-pnic + no + Enable PCI pseudo NIC (network card) support. + + + --enable-vbe + no + Use VGA BIOS Extensions (VBE) by Jeroen Janssen, see + for more information. + + + + --enable-clgd54xx + no + Enable Cirrus Logic GD54xx (CL-GD5430 ISA or CL-GD5446 PCI) video + card support. For more information see . + + + + --enable-plugins + no + + Plugins are shared libraries that can be loaded on demand. Example: the + serial device is implemented as a plugin. In Unix, the serial plugin is + called libbx_serial.so. When Bochs reads its configuration file, if the + serial device is enabled it loads libbx_serial.so. See the Features + section for supported platforms. + + + + --enable-repeat-speedups + no + support repeated I/O and memory copy speedups + + + --enable-trace-cache + no + support instruction trace cache for faster execution + + + --enable-host-specific-asms + yes + support for running native x86 instructions on an x86 machine + + + --enable-fast-function-calls + no + support for fast function calls (gcc on x86 only) + + + --enable-all-optimizations + no + + Turn on the enables for all speed optimizations that the + developers believe are safe to use: + --enable-trace-cache, + --enable-repeat-speedups, + --enable-host-specific-asms, + --enable-fast-function-calls. + + + + --enable-debugger + no + + Compile in support for Bochs internal command-line debugger. This has + nothing to do with x86 hardware debug support. It is a more powerful + and non-intrusive native debugger. Enabling this will of course slow + down the emulation. You only need this option if you know you need it. + After you have run ./configure, you may want to edit + config.h to customize the debugger further; + see for more information. + + + + --enable-readline + detected by configure + + Compile the debugger with the GNU readline library, which gives + command line editing and history. + + + + --enable-disasm + yes + Compile in support for built-in disassembler. Bochs has + a built-in disassembler, which is useful if you either + run the built-in debugger (--enable-debugger), or want + disassembly of the current instruction when there is a + panic in bochs. + + + --enable-cpp + no + + Use .cpp as C++ suffix. Renames all the .cc files to .cpp for use with + compilers which want that, like older MS C++ compilers. Don't use this + option unless you know you need it. + + + + --enable-docbook + detected + + Build the docbook documentation in doc/docbook. The configure + script will enable this option automatically if you have a program + called docbook2html installed. + + + + --enable-iodebug + yes if debugger is on + + Dave Poirier has written an experimental interface to the debugger + using I/O ports, so that software running in the guest OS can access + features of the debugger. You only want this option if you are + developing guest OS code for use in Bochs. In other words, most people + don't. Also, it should only be used with --enable-debugger. See the + + developer documentation for details. + + + + --enable-compressed-hd + no + + Add support for compressed disk (not implemented yet). + zlib must be installed on your system, as it will be dynamically linked to Bochs. + + + + --enable-pci + no + Enable limited i440FX PCI support. This is still incomplete, but usable. + + + + --enable-pcidev + no + + Enable PCI host device mapping support. This requires --enable-pci + to be set as well as Linux 2.4 or 2.6 as host. + + + + --enable-usb + no + + Enable i440FX PCI USB support (UHCI). The host controller with 2-port + root hub and 6 USB device types are available. + + + + --enable-usb-ohci + no + + Enable experimental USB OHCI support. The host controller with 2-port + root hub is available (USB device types: same as UHCI). + + + + --enable-instrumentation= + no + + Compile in support for instrumentation. This allows you to collect + instrumentation data from bochs as it executes code. You have to create + your own instrumentation library and define the instrumentation macros + (hooks in bochs) to either call your library functions or not, depending + upon whether you want to collect each piece of data. [Kevin wrote: I + broke some of the hooks when I recoded the fetch/decode loop.] + + + + --enable-xpm + yes + + Enables the check for the XPM library. This option is only valid if the + x display library is enabled (). + + + + --enable-show-ips + no + + Enables logging of measured IPS, see the ips parameter + of the cpu option. + + + + +
+ +
+ + + + +
Transcript of Successful Compilation + + + user$ ls -l bochs-1.2.1.tar.gz + -rw-rw-r-- 1 user user 887993 Sep 15 23:24 bochs-1.2.1.tar.gz + user$ gunzip -c bochs-1.2.1.tar.gz | tar -xvf - + bochs-1.2.1/ + bochs-1.2.1/bios/ + bochs-1.2.1/bios/BIOS-bochs-2-processors + bochs-1.2.1/bios/Makefile.in + . + . + . + bochs-1.2.1/patches/NOTES + bochs-1.2.1/patches/patch.4meg-pages + bochs-1.2.1/patches/patch.goswin-changes + user$ cd bochs-1.2.1 + user$ ./configure --enable-cdrom + creating cache ./config.cache + checking for gcc... gcc + checking whether the C compiler (gcc ) works... yes + checking whether the C compiler (gcc ) is a cross-compiler... no + checking whether we are using GNU C... yes + checking whether gcc accepts -g... yes + . + . + . + creating misc/Makefile + creating dynamic/Makefile + creating fpu/Makefile + creating config.h + user$ make + cd iodev && \ + make CC="gcc" CXX="c++" CFLAGS="-g -O2 " CXXFLAGS="-g -O2 " LDFLAGS="" LIBS="" X_LIBS="-L/usr/X11R6/lib" X_PRE_LIBS="-lSM -lICE" prefix="/usr/local" exec_prefix="/usr/local" bindir="/usr/local/bin" infodir="" libiodev.a + make[1]: Entering directory `/tmp/bochs-1.2.1/iodev' + c++ -c -g -O2 -I.. -I../instrument/stubs devices.cc -o devices.o + c++ -c -g -O2 -I.. -I../instrument/stubs pic.cc -o pic.o + c++ -c -g -O2 -I.. -I../instrument/stubs pit.cc -o pit.o + c++ -c -g -O2 -I.. -I../instrument/stubs unmapped.cc -o unmapped.o + c++ -c -g -O2 -I.. -I../instrument/stubs cmos.cc -o cmos.o + . + . + . + echo done + done + c++ -o bochs -g -O2 main.o load32bitOShack.o state_file.o pc_system.o osdep.o \ + iodev/libiodev.a \ + cpu/libcpu.a memory/libmemory.a gui/libgui.a \ + fpu/libfpu.a \ + -L/usr/X11R6/lib -lSM -lICE -lX11 + gcc -c -g -O2 -I. -Iinstrument/stubs misc/bximage.c -o misc/bximage.o + c++ -o bximage -g -O2 misc/bximage.o + user$ su + root# make install + cd iodev && \ + make CC="gcc" CXX="c++" CFLAGS="-g -O2 " CXXFLAGS="-g -O2 " LDFLAGS="" LIBS="" X_LIBS="-L/usr/X11R6/lib" X_PRE_LIBS="-lSM -lICE" prefix="/usr/local" exec_prefix="/usr/local" bindir="/usr/local/bin" infodir="" libiodev.a + make[1]: Entering directory `/tmp/bochs-1.2.1/iodev' + . + . + . + /usr/local/bochs/1.2.1/install-x11-fonts + Looking for fonts to install... font/ + Looking for X11 Font Path... /usr/lib/X11/fonts + Installing vga.pcf... ok (it was already there) + Running mkfontdir... + Done installing Bochs fonts for X11. + root# exit + user$ _ + + +
+ + +
Compiling on Win32 with Microsoft VC++ + +The standard compile uses the configure script, but the Windows platform +cannot run the configure script natively. +The current solution to this problem is that the Bochs +configure script must be run on a different platform that does support +shell scripts, with options that cause it to configure for a Win32 +platform instead of the native one. Many people have access to a UNIX +machine that could run the configure script, or you can use Cygwin or +MinGW/MSYS to run the configure script. + + +Because Bochs depends so much on the configure script, if you are doing +much win32 Bochs development, you should consider downloading Cygwin or +MinGW/MSYS so that you can run the configure step natively. + +. + + + +Download the Bochs sources on a machine that can run shell scripts. +Edit the configure shortcut script .conf.win32-vcpp +if you want to adjust the configure options. Then type these commands +in the Bochs source directory: + + sh .conf.win32-vcpp + make win32_snap + +These commands will run the configure step, produce VC++ makefiles and +workspace files, and pack it all into a .zip file in the directory above the +source directory + +If the source directory is /home/joe/bochs-win32, the +resulting .zip file is in /home/joe/bochs-win32-msvc-src.zip. + +. The .zip file is all ready to transfer to the target Windows +machine to be unzipped and compiled. Or, if you run the sh/make steps in +Cygwin, you are already on the target machine so you don't need the .zip +file. + + + +When you have the Win32 sources transferred to a Windows machine with VC++, +find the workspace file called bochs.sln in the folder +"vs2008" and load it in VC++. Choose Project:Set Active Project +and be sure that "bochs" is selected. Then choose Build:Build bochs.exe. +This will build all the required libraries (iodev, cpu, etc.) and the auxiliary +programs bximage.exe, bxcommit.exe +and niclist.exe. + + + +Using workspaces is easy and intuitive, but there is one caveat. The workspaces +come directly out of a ZIP file in build/win32/vs2008ex-workspace.zip, +and they are not controlled by the configure script. When you compile with certain +configure options (e.g. --with-sdl) you need to link with additional libraries. +For now you must add them to the VC++ workspace by hand. In version 2.0, we have improved +the situation considerably by adding #if...#endif around every optional file +and including nearly every Bochs source file in the workspace. This solves the +problem of having to manually add source files to the workspace when you turn +on configure options such as --enable-debugger. The problem of adding +link libraries remains unresolved. + + + + +To compile with the Bochs debugger enabled, add "--enable-debugger" to the +configure line in .conf.win32-vcpp before running it. +No modifications to the workspace are necessary. + + + +An alternative way to compile is to run nmake.exe in an +MS-DOS window. Instead of using the workspace files, nmake uses the Bochs +makefiles that are generated by configure. The workspace file was new in +version 1.3; before that, nmake was the only way to compile Bochs in VC++. +Starting with version 1.4, the workspace is used to build the release +binaries. + + + +The make install for Win32 is presently broken. In the +future, a make install that runs in Cygwin may be provided. + + +
+ +
Compiling on Win32 with Cygwin +Cygwin is a free Unix-like environment for Windows written by +Steve Chamberlain and now maintained by RedHat, Inc. You can download +it from www.cygwin.com. Because +Cygwin supports the configure script and uses GNU gcc/g++, you can use the +standard compile process. The configure script should automatically detect +Cygwin and add "-mno-cygwin -DWIN32" to the compiler options. You should +get a working Bochs if you just type: + + configure + make + + +Optionally, you can use the configure shortcut script for Cygwin, +.conf.win32-cygwin, instead of running configure +directly. If this script is close to what you need, just edit the script and +then run it. To use the configure shortcut script and compile in Cygwin, the +commands are + + sh .conf.win32-cygwin + make + +To find out the options which are known to work in Cygwin, open the file +.conf.win32-cygwin in any text editor/viewer and have +a look at the end of that file. + +
+ +
Compiling on MacOS 9 with CodeWarrior + + It is possible that this hasn't been tried since 1999. In theory, you + run sh .conf.macos on a Unix box to build the + makefiles and headers, copy the whole thing over to a Mac, and then + use CodeWarrior to compile. Since it hasn't been tested in so long, + it is quite likely that some work is needed to bring the Mac port up + to date. + + + If you are interested and have the required MacOS development tools, please + let us know by contacting the &devlist;. Someone requests a MacOS port + almost once a month, but none of the developers know how to help them. + +
+ +
Compiling on MacOS X + +The port to MacOS X with Carbon API by Emmanuel Mailliard is quite new, and the +configure and makefile support was added by Bryce Denney. You will need +the compiler and libraries from the development tools CD. Bochs should +configure and compile with the Carbon GUI if you simply type: + + configure + make + +Optionally, you can use the configure shortcut script for MacOS X, +.conf.macosx, instead of running configure directly. +If this script is close to what you need, just edit the script and then +run it. To use the configure shortcut script and compile, the commands +are + + sh .conf.macosx + make + + +MacOS X has a special format for an application bundle, which looks like a +directory that contains the required resource files and binaries. The Makefile +currently creates this application bundle "by hand" using mkdir and copy, which +is surely the wrong way to do it. Bryce doesn't know the official way to +create an application from a Makefile, so this hack will remain until a real +Mac developer helps to clean it up. + + + +On MacOS X the default GUI is the Carbon interface, but you can also try other +Bochs GUIs. Use for X windows, + for VNC/RFB, or for SDL. + +
+ +
Compiling on BeOS + + Kevin Lawton ported Bochs to BeOS. Bernd Korz has taken over the port. + Since Bochs 1.4, you can use the same compile and install process as on + Unix, that is, configure will detect the BeOS platform and assume you + want the BeOS GUI. + + configure + make + + Optionally, you can use the configure shortcut script for BeOS, + .conf.beos, which uses the SDL GUI by default. + +
+ +
Compiling on Amiga/MorphOS + + Nicholai Benalal created this port to MorphOS running on Amiga. It should + compile with: + + configure + make + + If the platform is not detected properly, you might need to use + as a configure option. Optionally, you + can use the configure shortcut script, .conf.amigaos. + +
+ +
Compiling with the RFB interface + + The RFB code was written by Don Becker x-odus@iname.com, + who has a Bochs-RFB web page on his site, + http://www.psyon.org/bochs-rfb/. + + + This interface allows you to view the Bochs display with + AT&T's VNC Viewer. + The protocol used between a VNC server and a VNC viewer is called RFB. + Because the RFB code in Bochs is written with portable network socket + and POSIX thread code, it can be compiled on many platforms and has + been tested in Linux and Win32. No additional libraries are required. + To try it, type: + + configure --with-rfb + make + + RFB currently uses this setup: + + port range 5900 to 5949 (using the first one available) + no authentification + 30 seconds waiting for client + 8 bpp (BGR233) supported only + desktop size 720x480 (for text mode and standard VGA) + + +
+ +
Compiling with the SDL interface + + Dave Poirier has written an SDL interface for Bochs. Simple DirectMedia + Layer, or SDL, is a cross-platform multimedia library distributed from + libsdl.org. SDL is available + for many platforms including Win32, Linux, BSD, IRIX, MacOS, MacOS X, BeOS, + and AmigaOS. + + + To compile Bochs with SDL, you must first install the SDL library + from libsdl.org. You + can either get the source code and compile it yourself, or install + the development libraries for your platform (already compiled). + Then, go into the Bochs directory and type: + + configure --with-sdl + make + + + + If you are on FreeBSD and have SDL installed using the ports collection, Bochs + won't be able to find the library automatically, as the SDL config script is + called sdl11-config in that case (even for version 1.2). + The easiest way to make Bochs find it, is to create a symlink to that script + called sdl-config inside a directory which is in the path. + For example: + + ln -s /usr/local/bin/sdl11-config ~/bin/sdl-config + + + +To compile in Microsoft VC++, you have to configure on a different system. +Here's the procedure: + +- On a machine that can run shell scripts, such as Cygwin, run + configure --target=pentium-windows --with-sdl + make win32_snap +- Copy the resulting ZIP file to your Windows box and unzip it. +- Load up workspace called bochs.dsw in VC++ 6.0 +- Double click "gui files" +- Remove gui/win32.cpp from the project, and add gui/sdl.cpp instead. +- Edit the settings of "gui files". Under C/C++ tab, category=preprocessor, + additional include directories, add the directory where SDL/SDL.h can be + found. +- Edit the settings of the "bochs files" project. Under the Link tab, + category=General, add SDL.lib to object/library modules list. Then in + category=Input, add the path of SDL.lib to additional library path. Click + ok. +- Select Build:Build Bochs.exe + + +
+ +
+Compiling with the wxWidgets interface + + wxWidgets is a cross-platform C++ user interface library which + you can download for free at wxwidgets.org. + The wxWidgets port of Bochs provides both a graphical configuration interface for + editing bochsrc options (see + config_interface option) and a + display (see display_library option). + It was written by Bryce Denney, Don Becker, Dave Poirier, and Volker Ruppert. + + configure --with-wx + make + + + + If you want Bochs to use a wxWidgets installation not in your path (but installed + somewhere else), you need to set the WX_CONFIG environment variable to the + proper wx-config script, before running configure (example for csh): + + setenv WX_CONFIG '/home/compile/wx/bin/wx-config' + + +
+ +
Building an RPM on Linux + +RPM stands for "RedHat Package Manager." An RPM is a compressed file +containing files to be installed on your system. Bochs +has a special shell script called make-rpm that helps +to build an RPM of Bochs. Start with a clean source directory. Edit +.conf.linux first if you want to adjust the configure options. +Then, type: + + + ./build/redhat/make-rpm | tee /tmp/build.txt + + +When this command completes, you should have a source RPM and a binary RPM of +Bochs in the current directory. The tee part of the +command (optional) saves a transcript of the build process into /tmp/build.txt, +which is very useful if anything goes wrong. Instructions for installing an +RPM are here. + + + +In the past, you had to build rpms as root, but as of version 2.0 you can build +them as a normal user. + + +
+ + + +
Compile Problems + +&FIXME; + + + +what if configure fails? +- tar up config.* and send to bochs-developers +- report the problem with a source forge bug report. + +what if make fails? +- try make dist-clean, and run configure and make again +- use configure options to disable options. For example, if errors in +fpu/fpu.cc, you could try --disable-fpu. +- search for the error on the Bochs website (bug reports, patches) +- if familiar with C++, many minor problems can be corrected +- move to more stable code. if it's CVS, see if a release version will + compile. Report problem to bochs-developers. +- report the problem with a source forge bug report. + + + +
+
+
+ + + +Setup +
What does Bochs need? + +These are the minimum requirements for running an OS inside of Bochs: + + + +the Bochs executable + + + + +the BIOS image (usually called BIOS-bochs-latest) + + + + +the VGA BIOS image (e.g. VGABIOS-lgpl-latest or VGABIOS-elpin-2.40) + + + + +at least one bootable media, either as disk image (floppy, hard disk or CD-ROM) or physical disk (floppy or CD-ROM) + + + + + + +Both VGA BIOS versions as well as the ROM BIOS are part of Bochs. No separate download is necessary. + + + +If you want to use the Cirrus SVGA adapter instead of VGA + Bochs VBE, you should +have a look at . + + + +In that case you have to pass the configuration options on the command +line or to use the configuration interface to set up Bochs for the simulation. +Running Bochs is easier if you use a configuration file (we call it +bochsrc). See for all supported options. + + + +The easiest way to setup Bochs for the first time is to use the example configuration +file called bochsrc-sample.txt. Locate that file (location depends +on the (host) OS and on the installation facility used) and copy it to a location where +Bochs looks for that file, see . + + + +The next step is to change the configuration so that it fits your needs: You most +likely want to setup a hard disk (see and +), and install some OS on it using either +a set of floppy disks (see ) or a CD-ROM +(see again) as installation media. +Make sure you boot the emulation from the media you want, using the right setting +as boot option. + + + +If your keyboard output inside of Bochs is wrong, you may also need a keymap file +to remap your keyboard layout to the U.S. layout. A set of keymap files for the +X window system and SDL (Linux port) is distributed with Bochs. If your +keyboard layout is not supported yet, you can create your own one by following the +instructions given in . + + + +A collection of disk images of different operating systems can be found at +. Some disk +images are the size of a floppy disk (1 meg compressed) and others are gigantic +(160 meg compressed). If you want to create a disk image yourself, please see +. + + + &FIXME; This should be completed + + + - BIOS/VGABIOS, what do they do? + + +
+ + +
+bochsrc + +Bochs uses a configuration file called bochsrc to know +where to look for disk images, how the Bochs emulation layer should work, etc. +When you first start up Bochs, it looks around for its configuration file +(see ), and parses it. +Here are a few lines from a sample file: + + ata0-master: type=disk, path="30M.sample", cylinders=615, heads=6, spt=17 + boot: disk + +The format is very strict, so be sure to put the right number of spaces and +use lowercase letters. As you can see, most lines have a keyword telling what +is being configured, followed by a colon, followed by a few +variable=value pairs, separated by +commas. For very simple options, sometimes just a single value is needed. +The source and binary distributions come with a sample +bochsrc, so you can just copy the sample file and edit the +settings you need to change. + + + +The syntax used for bochsrc can also be used as command line arguments for Bochs. +If you have any spaces in your command line arguments, they should be enclosed +in single quotes, for example: + + bochs 'boot:floppy' 'floppya: 1_44=a.img, status=inserted' + +For other arguments, see section Command line arguments. + + + +Starting with version 1.3, you can use environment variables in +the bochsrc file, for example: + + floppya: 1_44="$IMAGES/bootdisk.img", status=inserted + boot: floppy + +Starting with version 2.0, two environment variables have a built-in +default value which is set at compile time. $BXSHARE points to the +"share" directory which is typically /usr/local/share/bochs on UNIX +machines. See the $(sharedir) variable in the Makefile for the exact +value. $BXSHARE is used by disk images to locate the directory where +the BIOS images and keymaps can be found. If $BXSHARE is not defined, Bochs +will supply the default value. Also, $LTDL_LIBRARY_PATH points to a list of +directories (separated by colons if more than one) to search in for Bochs +plugins. A compile-time default is provided if this variable is not defined +by the user. On Win32 and MacOSX, the default for the share directory is +determined by a platform-specific specific algorithm. On Win32, we use the +registry to see what directory Bochs and its support files were installed in. +On MacOSX, the share directory is the directory where the application is +located. + + + +Starting with version 2.0, you can can use #include in the bochsrc to read the +configuration from other files. Now it is possible to put platform or +installation defaults in a global config file (e.g. location of rom images). +Put this on top of your config file if the global configuration is stored in /etc: + + #include /etc/bochsrc + + + + +The section below lists all the supported bochsrc options. + + +
megs + +Examples: + + megs: 32 + megs: 128 + +Set the number of megabytes of physical memory you want to emulate. The default +is 32MB; most OS's won't need more than that. The maximum amount of memory +supported is 2048MB. + + + +Due to limitations in the host OS, Bochs fails to allocated even 1024MB on most systems. + +
+ +
cpu + +Example: + + cpu: count=2, ips=10000000 + +This defines the parameters of the cpu inside Bochs: + +count + +Set the number of processors:cores per processor:threads per core when Bochs +is compiled for SMP emulation. Bochs currently supports up to 8 processors. +If Bochs is compiled without SMP support, it won't accept values different from 1. +For more information on SMP see . + +quantum + +Maximum amount of instructions allowed to execute by processor before +returning control to another cpu. This option exists only in Bochs +binary compiled with SMP support. + +reset_on_triple_fault + +Reset the CPU when triple fault occur (highly recommended) rather than PANIC. +Remember that if you are trying to continue after triple fault the simulation +will be completely bogus ! + +msrs + +Define path to user CPU Model Specific Registers (MSRs) specification. +See example in msrs.def. + +ignore_bad_msrs + +Ignore MSR references that Bochs does not understand; print a warning message +instead of generating #GP exception. This option is enabled by default but +will not be avaiable if configurable MSRs are enabled. + +ips + +Emulated Instructions Per Second. This is the number of IPS that Bochs is +capable of running on your machine. You can recompile Bochs with + option enabled, to find your workstation's capability. +Measured IPS value will then be logged into your log file +or in the status bar (if supported by the gui). + + + +IPS is used to calibrate many time-dependent events within the Bochs +simulation. For example, changing IPS affects the frequency of VGA updates, +the duration of time before a key starts to autorepeat, and the measurement +of BogoMips and other benchmarks. The table below lists some typical +IPS settings for different machinesIPS measurements depend on +OS and compiler configuration in addition to processor clock +speed.. + + +Example IPS Settings + + + + Bochs + Speed + Machine/Compiler + Typical IPS + + + +2.3.73.2GhzIntel Core 2 Q9770 with WinXP/g++ 3.4 50 to 55 MIPS +2.3.72.6GhzIntel Core 2 Duo with WinXP/g++ 3.4 38 to 43 MIPS +2.2.62.6GhzIntel Core 2 Duo with WinXP/g++ 3.4 21 to 25 MIPS +2.2.62.1GhzAthlon XP with Linux 2.6/g++ 3.4 12 to 15 MIPS +2.0.11.6GhzIntel P4 with Win2000/g++ 3.3 5 to 7 MIPS + + +
+
+ +
cpuid + +Example: + + cpuid: mmx=1, sep=1, sse=sse4_2, xapic=1, aes=1, movbe=1, xsave=1, cpuid_limit_winnt=0 + +This defines features and functionality supported by Bochs emulated CPU: + +mmx + +Select MMX instruction set support. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 5. + +sep + +Select SYSENTER/SYSEXIT instruction set support. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. + +sse + +Select SSE instruction set support. +Any of NONE/SSE/SSE2/SSE3/SSSE3/SSE4_1/SSE4_2 could be selected. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. + +xapic + +Select XAPIC extensions support. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. + +aes + +Select AES instruction set support. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. + +movbe + +Select MOVBE Intel(R) Atom instruction support. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. + +xsave + +Select XSAVE extensions support. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. + +1g_pages + +Enable 1G page size support in long mode. +This option exists only if Bochs compiled with x86-64 support. + +pcid + +Enable Process-Context Identifiers (PCID) support in long mode. +This option exists only if Bochs compiled with x86-64 support. + +mwait + +Select MONITOR/MWAIT instructions support. +This option exists only if Bochs compiled with --enable-monitor-mwait. + +mwait_is_nop + +When this option is enabled MWAIT will not put the CPU into a sleep state. +This option exists only if Bochs compiled with --enable-monitor-mwait. + +stepping + +Set stepping information returned by CPUID. Default stepping value is 3. + +vendor_string + +Set the CPUID vendor string returned by CPUID(0x0). This should be a +twelve-character ASCII string. + +brand_string + +Set the CPUID brand string returned by CPUID(0x80000002 .. 0x80000004]). This should be +at most a forty-eight-character ASCII string. + +cpuid_limit_winnt + +Determine whether to limit maximum CPUID function to 3. This mode is required +to workaround WinNT installation and boot issues. + +
+ +
romimage + +Examples: + + romimage: file=bios/BIOS-bochs-latest, address=0xe0000 + romimage: file=$BXSHARE/BIOS-bochs-legacy, address=0xf0000 + romimage: file=mybios.bin, address=0xfff80000 + romimage: file=mybios.bin + +The ROM BIOS controls what the PC does when it first powers on. Normally, you +can use a precompiled BIOS in the source or binary distribution called +BIOS-bochs-latest. The default ROM BIOS is usually loaded +starting at address 0xe0000, and it is exactly 128k long. The legacy version of +the Bochs BIOS is usually loaded starting at address 0xf0000, and it is exactly +64k long. +You can also use the environment variable $BXSHARE to specify the location of the BIOS. +The usage of external large BIOS images (up to 512k) at memory top is +now supported, but we still recommend to use the BIOS distributed with Bochs. +The start address is optional, since it can be calculated from image size. + +
+ +
optromimage1, optromimage2, optromimage3 or optromimage4 + +Example: + + optromimage1: file=optionalrom.bin, address=0xd0000 + + +This enables Bochs to load up to 4 optional ROM images. + + +Be sure to use a +read-only area, typically between C8000 and EFFFF. These optional +ROM images should not overwrite the rombios (located at +F0000-FFFFF) and the videobios (located at C0000-C7FFF). + + +Those ROM images will be initialized by the BIOS if they contain +the right signature (0x55AA). + + +It can also be a convenient way to upload some arbitrary code/data +in the simulation, that can be retrieved by the boot loader + +
+ +
vgaromimage + +Examples: + + vgaromimage: file=bios/VGABIOS-elpin-2.40 + vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest + vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest-cirrus + +This tells Bochs what VGA ROM BIOS to load (at 0xC0000). + +A VGA BIOS from Elpin Systems, Inc. as well as a free LGPL'd VGA BIOS +are provided in the source and binary distributions. + + Please check with the vga option to decide + what VGA BIOS to use. + +
+ +
+vga + +Examples: + + vga: extension=cirrus + vga: extension=vbe + +Here you can specify the display extension to be used. With the value +'none' you can use standard VGA with no extension. Other supported +values are 'vbe' for Bochs VBE (needs VGABIOS-lgpl-latest as +VGA BIOS, see vgaromimage option) +and 'cirrus' for Cirrus SVGA support (needs +VGABIOS-lgpl-latest-cirrus as VGA BIOS). + +
+ +
floppya/floppyb + +Examples: + +2.88M 3.5" media: + floppya: 2_88=a:, status=inserted +1.44M 3.5" media (write protected): + floppya: 1_44=floppya.img, status=inserted, write_protected=1 +1.2M 5.25" media: + floppyb: 1_2=/dev/fd0, status=inserted +720K 3.5" media: + floppya: 720k=/usr/local/bochs/images/win95.img, status=inserted +auto-detect floppy media type: + floppya: image=floppy.img, status=inserted +use directory as VFAT media: + floppya: 1_44=vvfat:path, status=inserted +1.44M 3.5" floppy drive, no media: + floppya: type=1_44 + +Floppya is the first drive, and floppyb is the second drive. If you're booting +from a floppy, floppya should point to a bootable disk. To read from a disk +image, write the name of the image file. In many operating systems Bochs can +read directly from a raw floppy drive. For raw disk access, use the device +name (Unix systems) or the drive letter and a colon (Windows systems). + + +Following floppy media types are supported: 2_88, 1_44, 1_2, 720k, 360k, 320k, 180k, +160k, as well as "image" to let Bochs auto-detect the type of floppy media (does only +work with images, not with raw floppy drives). In that case the size must match +one of the supported types. + + +You can set the initial status of the media to ejected +or inserted. Usually you will want to use +inserted. + + +The parameter 'type' can be used to enable the floppy drive without media +and status specified. Usually the drive type is set up based on the media type. + + +The optional parameter 'write_protected' can be used to control the media +write protect switch. By default it is turned off. + +
+ +
ata0, ata1, ata2, ata3 + +Examples: + +ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 +ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15 +ata2: enabled=1, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11 +ata3: enabled=1, ioaddr1=0x168, ioaddr2=0x360, irq=9 + + +These options enables up to 4 ata channels. For each channel +the two base io addresses and the irq must be specified. +ata0 and ata1 are enabled by default, with the values shown above. + + +
+ +
ata0-master, ata0-slave, ata1-*, ata2-*, ata3-* + +Examples: + +ata0-master: type=disk, path=10M.img, mode=flat, cylinders=306, heads=4, spt=17, translation=none +ata1-master: type=disk, path=2GB.cow, mode=vmware3, cylinders=5242, heads=16, spt=50, translation=echs +ata1-slave: type=disk, path=3GB.img, mode=sparse, cylinders=6541, heads=16, spt=63, translation=auto +ata2-master: type=disk, path=7GB.img, mode=undoable, cylinders=14563, heads=16, spt=63, translation=lba +ata2-slave: type=cdrom, path=iso.sample, status=inserted + + + + + +This defines the type and characteristics of all attached ata devices: + +ata devices configuration options + + + +Option +Comments +Possible values + + + + type type of attached device [disk | cdrom] + path path of the image + + mode + image type, only valid for disks + [flat | concat | external | dll | sparse | vmware3 | vmware4 | undoable | growing | volatile | vvfat ] + + cylinders only valid for disks + heads only valid for disks + spt only valid for disks + status only valid for cdroms [inserted | ejected] + biosdetect type of biosdetection [none | auto], only for disks on ata0 [cmos] + translation type of translation done by the BIOS (legacy int13), only for disks [none | lba | large | rechs | auto] + model string returned by identify device ATA command + journal optional filename of the redolog for undoable, volatile and vvfat disks + + +
+
+ + + You have to tell the type of the attached device. For Bochs 2.0 or later, it can be + disk or cdrom. + + + +You have to point the "path" at a hard disk image file, cdrom iso file, +or physical cdrom device. +To create a hard disk image, try running bximage (see +). It will help you choose the size and +then suggest a line that works with it. + + + +In Unix it is possible to use a raw device as a Bochs hard disk, +but we don't recommend it for safety reasons. In Windows, there is no easy way. + + + +Disk geometry autodetection works with images created by bximage if CHS is set +to 0/0/0 (cylinders are calculated using heads=16 and spt=63). For other hard +disk images and modes the cylinders, heads, and spt are mandatory. In all cases +the disk size reported from the image must be exactly C*H*S*512. Flat hard disk +images from other projects might store additional information at the end of the +file that makes this check fail. Only in this case it is safe to select "continue" +when Bochs panics. + + + +The disk translation scheme +(implemented in legacy int13 BIOS functions, and used by +older operating systems like MS-DOS), can be defined as: + + +none : no translation, for disks up to 528MB (1032192 sectors) + + +large : a standard bitshift algorithm, for disks up to 4.2GB (8257536 sectors) + + +rechs : a revised bitshift algorithm, using a 15 heads fake physical geometry, for disks up to 7.9GB (15482880 sectors). (don't use this unless you understand what you're doing) + + +lba : a standard lba-assisted algorithm, for disks up to 8.4GB (16450560 sectors) + + +auto : autoselection of best translation scheme. (it should be changed if system does not boot) + + +Please see for a discussion on translation scheme. + + + +The mode option defines how the disk image is handled. Disks can be defined as: + + +flat : one file flat layout + + +concat : multiple files layout + + +external : developer's specific, through a C++ class + + +dll : developer's specific, through a DLL + + +sparse : stackable, commitable, rollbackable + + +vmware3 : vmware version 3 disk support + + +vmware4 : vmware version 4 disk support + + +undoable : flat file with commitable redolog + + +growing : growing file + + +volatile : flat file with volatile redolog + + +vvfat: local directory appears as VFAT disk (with volatile redolog / optional commit) + + +Please see for a discussion on disk modes. + + + +Default values are: + + mode=flat, biosdetect=auto, translation=auto, model="Generic 1234" + + + + + The biosdetect option has currently no effect on the BIOS. + + + + Make sure the proper ata option is enabled when + using a device on that ata channel. + +
+ +
boot + +Examples: + + boot: floppy + boot: cdrom, disk + boot: network, disk + boot: cdrom, floppy, disk + +This defines the boot sequence. You can specify up to 3 boot drives, +which can be 'floppy', 'disk', 'cdrom' or 'network' (boot ROM). +Legacy 'a' and 'c' are also supported. + +
+ +
floppy_bootsig_check + +Example: + + floppy_bootsig_check: disabled=1 + +This disables the 0xaa55 signature check on boot floppies +The check is enabled by default. + +
+ +
config_interface + +The configuration interface is a series of menus or dialog boxes that +allows you to edit all the settings that control Bochs' behavior. +Depending on the platform there are up to 3 choices of configuration +interface: a text mode version called "textconfig" and two graphical versions +called "win32config" and "wx". The text mode version uses stdin/stdout and +is always compiled in, unless Bochs is compiled for wx only. The choice +"win32config" is only available on win32 and it is the default there. +The choice "wx" is only available when Bochs is compiled with wxWidgets support, +see . If you do not write a config_interface line, +Bochs will choose a default for you (usually textconfig). + + + +wxWidgets provides both a configuration interface and a display library. +So if you use the "wx" configuration interface, you must also use +the "wx" display library, see +display_library option. + + + +Examples: + + config_interface: textconfig + config_interface: win32config + config_interface: wx + + +
+ +
display_library + +The display library is the code that displays the Bochs VGA screen. Bochs +has a selection of about 10 different display library implementations for +different platforms. If you run configure with multiple --with-* options, +the display_library option lets you choose which one you want to run with. +If you do not use a display_library line, Bochs will choose a default for +you. + + + +wxWidgets provides both a configuration interface and a display library. +So if you use the "wx" display library, you must also use +the "wx" configuration interface, see +config_interface option. + + + +Examples: + + display_library: x + display_library: sdl + +Some display libraries now support specific option to control their +behaviour. See the examples below for currently supported options. + + display_library: rfb, options="timeout=60" # time to wait for client + display_library: sdl, options="fullscreen" # startup in fullscreen mode + display_library: win32, options="gui_debug" # use win32 debugger gui frontend + display_library: x, options="hideIPS" # disable IPS output in status bar + display_library: x, options="gui_debug" # use GTK debugger gui frontend + + + + +display_library values + + + + Option + Description + + + + + x + use X windows interface, cross platform + + + win32 + use native win32 libraries + + + carbon + use Carbon library (for MacOS X) + + + beos + use native BeOS libraries + + + macintosh + use MacOS pre-10 + + + amigaos + use native AmigaOS libraries + + + sdl + use SDL library, cross platform, + details in + + + svga + use SVGALIB library for Linux, allows graphics without X windows + + + term + text only, uses curses/ncurses library, cross platform + + + rfb + provides an interface to AT&T's VNC viewer, cross platform, + details in + + + wx + use wxWidgets library, cross platform, + details in + + + nogui + no display at all + + + +
+
+ +
log + +Examples: + + log: bochsout.txt + log: - + log: /dev/tty (Unix only) + log: /dev/null (Unix only) + log: nul (win32 only) + +Give the path of the log file you'd like Bochs debug and misc. verbiage to be +to be written to. If you don't use this option or set the filename to '-' +the output is written to the console. If you really don't want it, +make it "/dev/null" (Unix) or "nul" (win32). :^( + +
+ +
logprefix + +Examples: + + logprefix: %t-%e-@%i-%d + logprefix: %i%e%d + +This handles the format of the string prepended to each log line. +You may use those special tokens : + + %t : 11 decimal digits timer tick + %i : 8 hexadecimal digits of current cpu eip (ignored in SMP configuration) + %e : 1 character event type ('i'nfo, 'd'ebug, 'p'anic, 'e'rror) + %d : 5 characters string of the device, between brackets + + + +Default is %t%e%d + +
+ +
debug/info/error/panic + +Examples: + + debug: action=ignore + info: action=report + error: action=report + panic: action=ask + + +During simulation, Bochs encounters certain events that the user might want to +know about. These events are divided into four levels of importance: debug, +info, error, and panic. Debug messages are usually only useful when writing +Bochs code or when trying to locate a problem. There may be thousands of debug +messages per second, so be careful before turning them on. Info messages tell +about interesting events that don't happen that frequently. Bochs produces an +"error" message when it finds a condition that really shouldn't happen, but +doesn't endanger the simulation. An example of an error might be if the +emulated software produces an illegal disk command. Panic messages mean that +Bochs cannot simulate correctly and should probably shut down. +A panic can be a configuration problem (like a misspelled bochsrc line) or an +emulation problem (like an unsupported video mode). + + + + +The debug, info, error, and panic lines in the bochsrc control what Bochs will +do when it encounters each type of event. The allowed actions are: fatal +(terminate bochs), ask (ask the user what to do), report (print information to +the console or log file), or ignore (do nothing). The recommended settings are +listed in the sample above. + + + + +The safest action for panics is "fatal" or "ask". If you are getting lots of +panics and get tired of telling it to continue each time, you can try +action=report instead. If you allow Bochs to continue after a panic, don't +be surprised if you get strange behavior or crashes after a panic occurs. +Please report panic messages to the bochs-developers mailing list unless it is +just a configuration problem like "could not find hard drive image." + + +
+ +
debugger_log + +Examples: + + debugger_log: debugger.out + debugger_log: /dev/null (Unix only) + debugger_log: - + +Give the path of the log file you'd like Bochs to log debugger output. +If you really don't want it, make it '/dev/null', or '-'. + +
+ +
+com[1-4] + +Examples: + + com1: enabled=1, mode=null + com1: enabled=1, mode=mouse + com1: enabled=1, mode=term, dev=/dev/ttyp9 + com2: enabled=1, mode=file, dev=serial.out + com3: enabled=1, mode=raw, dev=com1 + com3: enabled=1, mode=socket-client, dev=localhost:8888 + com3: enabled=1, mode=socket-server, dev=localhost:8888 + com4: enabled=1, mode=pipe-client, dev=\\.\pipe\mypipe + com4: enabled=1, mode=pipe-server, dev=\\.\pipe\mypipe + + This defines a serial port (UART type 16550A). + + + When using the mode 'term', you can specify a device to use as com1. + This can be a real serial line, or a pty. To use a pty (under X/Unix), + create two windows (xterms, usually). One of them will run Bochs, and + the other will act as com1. Find out the tty of the com1 window using + the `tty' command, and use that as the `dev' parameter. Then do + `sleep 1000000' in the com1 window to keep the shell from messing with + things, and run Bochs in the other window. Serial I/O to com1 (port 0x3f8) + will all go to the other window. + + + When using socket* and pipe* (win32 only) modes Bochs becomes either + socket/named pipe client or server. In client mode it connects to an already + running server (if connection fails Bochs treats com port as not connected). + In server mode it opens socket/named pipe and waits until a client application + connects to it before starting simulation. This mode is useful for remote + debugging (e.g. with gdb's "target remote host:port" command or windbg's command + line option -k com:pipe,port=\\.\pipe\pipename). + + Note: 'socket' is a shorthand for 'socket-client', 'pipe' for 'pipe-client'. + Socket modes use simple TCP communication, pipe modes use duplex byte mode pipes. + + + Other serial modes are 'null' (no input/output), 'file' (output to a file + specified as the 'dev' parameter), 'raw' (use the real serial port - under + construction for win32), 'mouse' (standard serial mouse - requires + mouse option setting 'type=serial' + or 'type=serial_wheel'). + +
+ +
+parport[1-2] + +Examples: + + parport1: enabled=1, file="parport.out" + parport2: enabled=1, file="/dev/lp0" + parport1: enabled=0 + +This defines a parallel (printer) port. When turned on and an output file is +defined, the emulated printer port sends characters printed by the guest OS +into the output file. On some platforms, a device filename can be used to +send the data to the real parallel port (e.g. "/dev/lp0" on Linux, "lpt1" on +win32 platforms). + +
+ +
sb16 + +Example: + + sb16: midimode=1, midi=/dev/midi00, wavemode=1, wave=/dev/dsp, + loglevel=2, log=sb16.log, dmatimer=600000 + + +The example is wrapped onto several lines for formatting reasons, but it +should all be on one line in the actual bochsrc file. + + +This defines the Sound Blaster 16 emulation, see +for more information. It can have several of the following properties. All properties +are in the usual "property=value" format. + + + + midi: The filename is where the midi data is sent to. This + can be a device or just a file if you want to record the midi data. + On a Windows host this parameter is ignored when using output to the sound + device. On a Linux host with ALSA present and this parameter starting with + "alsa:", the default sequencer device will be used with the given client + and port parameters instead of an OSS device. + + + + midimode: + + 0 = No data should be output. + 1 = output to device (system dependent - midi denotes the device driver). + 2 = SMF file output, including headers. + 3 = Output the midi data stream to the file (no midi headers and no + delta times, just command and data bytes). + + + + + wave: This is the device/file where wave output is stored. + On a Windows host this parameter is ignored when using output to the sound + device. On a Linux host with ALSA present and this parameter set to "alsa", + the default PCM output device will be used instead of an OSS device. + + + + wavemode: + + 0 = no data + 1 = output to device (system dependent - wave denotes the device driver). + 2 = VOC file output, including headers. + 3 = Output the raw wave stream to the file. + + + + + log: The file to write the sb16 emulator messages to. + + + + loglevel: + + 0 = No log. + 1 = Resource changes, midi program and bank changes. + 2 = Severe errors. + 3 = All errors. + 4 = All errors plus all port accesses. + 5 = All errors and port accesses plus a lot of extra information. + + It is possible to change the loglevel at runtime. + + + + dmatimer: Microseconds per second for a DMA cycle. Make it smaller to fix + non-continuous sound. 750000 is usually a good value. This needs a reasonably + correct setting for the ips parameter of the + cpu option. It is possible to adjust the + dmatimer value at runtime. + + + +
+ +
vga_update_interval + +Examples: + + vga_update_interval: 50000 # default + vga_update_interval: 250000 + +Video memory is scanned for updates and screen updated every so many virtual +microseconds. Keep in mind that you must tweak the ips +parameter of the cpu option to be as close +to the number of emulated instructions-per-second your workstation can do, +for this to be accurate. + +
+ +
keyboard_serial_delay + +Example: + + keyboard_serial_delay: 250 # default + +Approximate time in microseconds that it takes one character to be +transferred from the keyboard to controller over the serial path. + +
+ +
keyboard_paste_delay + +Example: + + keyboard_paste_delay: 100000 # default + +Approximate time in microseconds between attempts to paste +characters to the keyboard controller. This leaves time for the +guest os to deal with the flow of characters. The ideal setting +depends on how your operating system processes characters. The +default of 100000 usec (.1 seconds) was chosen because it works +consistently in Windows. + +
+ +
clock + +This defines the parameters of the clock inside Bochs: + +sync + +This defines the method how to synchronize the Bochs internal time +with realtime. With the value 'none' the Bochs time relies on the IPS +value and no host time synchronization is used. The 'slowdown' method +sacrifices performance to preserve reproducibility while allowing host +time correlation. The 'realtime' method sacrifices reproducibility to +preserve performance and host-time correlation. +It is possible to enable both synchronization methods. + +time0 + +Specifies the start (boot) time of the virtual machine. Use a time +value as returned by the time(2) system call. If no time0 value is +set or if time0 equal to 1 (special case) or if time0 equal 'local', +the simulation will be started at the current local host time. +If time0 equal to 2 (special case) or if time0 equal 'utc', +the simulation will be started at the current utc time. + + + +Syntax: + clock: sync=[none|slowdown|realtime|both], time0=[timeValue|local|utc] + +Examples: + clock: sync=none, time0=local # Now (localtime) + clock: sync=slowdown, time0=315529200 # Tue Jan 1 00:00:00 1980 + clock: sync=none, time0=631148400 # Mon Jan 1 00:00:00 1990 + clock: sync=realtime, time0=938581955 # Wed Sep 29 07:12:35 1999 + clock: sync=realtime, time0=946681200 # Sat Jan 1 00:00:00 2000 + clock: sync=none, time0=1 # Now (localtime) + clock: sync=none, time0=utc # Now (utc/gmt) + +Default value are sync=none, time0=local + + + +
+ +
+mouse + +Examples: + + mouse: enabled=1 + mouse: type=imps2, enabled=1 + mouse: type=serial, enabled=1 + mouse: enabled=0, toggle=ctrl+f10 + +This defines parameters for the emulated mouse type, the initial status +of the mouse capture and the runtime method to toggle it. + +type + +With the mouse type option you can select the type of mouse to emulate. +The default value is 'ps2'. The other choices are 'imps2' (wheel mouse +on PS/2), 'serial', 'serial_wheel' and 'serial_msys' (one com port requires +setting 'mode=mouse', see com option). +To connect a mouse to an USB port, see the usb_uhci +or 'usb_ohci' option (requires PCI and USB support). + +enabled + +The Bochs gui creates mouse "events" unless the 'enabled' option is +set to 0. The hardware emulation itself is not disabled by this. +Unless you have a particular reason for enabling the mouse by default, +it is recommended that you leave it off. You can also toggle the +mouse usage at runtime (see headerbar +and the 'toggle' option below). + +toggle + +The default method to toggle the mouse capture at runtime is to press the +CTRL key and the middle mouse button ('ctrl+mbutton'). This option allows +to change the method to 'ctrl+f10' (like DOSBox) or 'ctrl+alt' (like QEMU) +or 'f12' (replaces win32 'legacyF12' option). + +
+ +
private_colormap + +Example: + + private_colormap: enabled=1 + +Requests that the GUI creates and uses its own non-shared colormap. This +colormap will be used when in the Bochs window. If not enabled, a shared +colormap scheme may be used. Once again, enabled=1 +turns on this feature and 0 turns it off. + +
+ +
i440fxsupport + +Examples: + + i440fxsupport: enabled=1 # default if compiled with PCI support + i440fxsupport: enabled=1, slot1=pcivga, slot2=ne2k + +This option controls the presence of the i440FX PCI chipset. You can also +specify the devices connected to PCI slots. Up to 5 slots are available. +These devices are currently supported: ne2k, pcivga, pcidev, pcipnic and +usb_ohci. If Bochs is compiled with Cirrus SVGA support you'll have the +additional choice 'cirrus'. + +
+ +
pcidev + +Example: + + pcidev: vendor=0xbabe, device=0x2bad + +Enables the mapping of a host PCI hardware device within the virtual PCI +subsystem of the Bochs x86 emulator. The arguments +vendor and device +should contain the PCI vendor ID respectively the PCI +device ID of the host PCI device you want to map within Bochs. + + + +The PCI device mapping is still in a very early stage of development and thus it is very experimental. +This feature requires Linux as a host operating system. + + + +Besides the pcidev config line you will need to load +a pcidev kernel module within your Linux host OS. This kernel module is +located in the bochs/host/linux/pcidev/ directory. + +
+ +
usb_uhci + +Examples: + + usb_uhci: enabled=1, port1=mouse, port2=disk:usbstick.img + usb_uhci: enabled=1, port1=hub:7, port2=disk:growing:usbdisk.img + usb_uhci: enabled=1, port2=disk:undoable:usbdisk.img, options1=journal:redo.log + usb_uhci: enabled=1, port1=printer:printdata.bin, port2=cdrom:image.iso + +This option controls the presence of the USB root hub which is a part of the +i440FX PCI chipset. + + +With the portX option you can connect devices +to the hub (currently supported: 'mouse', 'tablet', 'keypad', 'disk', 'cdrom', +'hub' and 'printer'). + + +The optionsX parameter can be used to assign specific +options to the device connected to the corresponding USB port. Currently this +feature is only used to set the speed reported by device and by the 'disk' +device to specify an alternative redolog file of some image modes. + + +If you connect the mouse or tablet to one of the ports, Bochs forwards the +mouse movement data to the USB device instead of the selected mouse type. +When connecting the keypad to one of the ports, Bochs forwards the input of +the numeric keypad to the USB device instead of the PS/2 keyboard. + + +To connect a 'flat' mode image as an USB hardisk you can use the 'disk' device +with the path to the image separated with a colon. To use other disk image modes +similar to ATA disks the syntax 'disk:mode:filename' must be used (see above). + + +To emulate an USB cdrom you can use the 'cdrom' device name and the path to +an ISO image or raw device name also separated with a colon. An option to +insert/eject media is available in the runtime configuration. + + +The device name 'hub' connects an external hub with max. 8 ports (default: 4) +to the root hub. To specify the number of ports you have to add the value +separated with a colon. Connecting devices to the external hub ports is only +available in the runtime configuration. + + +The device 'printer' emulates the HP Deskjet 920C printer. The PCL data is +sent to a file specified in bochsrc.txt. The current code appends the PCL +code to the file if the file already existed. It would probably be nice to +overwrite the file instead, asking user first. + + +PCI support must be enabled. + +
+ +
usb_ohci + +Example: + + usb_ohci: enabled=1 + +This option controls the presence of the USB OHCI host controller with a +2-port hub. The portX option accepts the same device types with the same +syntax as the UHCI controller (see the usb_uhci option). +The OHCI HC must be assigned to a PCI slot. + +
+ +
+gdbstub + +Example: + + gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0 + +Default: + + gdbstub: enabled=0 + +This enables the GDB stub. See . + +
+ +
ne2k + +The ne2k line configures an emulated NE2000-compatible Ethernet adapter, +which allows the guest machine to communicate on the network. To disable +the NE2000 just comment out the ne2k line. + + +Examples: + +ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:00, ethmod=fbsd, ethdev=xl0 +ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:00, ethmod=fbsd, ethdev=en0 #macosx +ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:00, ethmod=linux, ethdev=eth0 +ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:01, ethmod=win32, ethdev=MYCARD +ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:01, ethmod=vde, ethdev="/tmp/vde.ctl" +ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:01, ethmod=vnet, ethdev="c:/temp" +ne2k: ioaddr=0x300, irq=9, mac=fe:fd:00:00:00:01, ethmod=tap, ethdev=tap0 +ne2k: ioaddr=0x300, irq=9, mac=fe:fd:00:00:00:01, ethmod=tuntap, ethdev=/dev/net/tun0, script=./tunconfig + +ioaddr, irq: You probably won't need to change ioaddr and irq, unless there +are IRQ conflicts. These parameters are ignored if the NE2000 is assigned to +a PCI slot. + +mac: The MAC address MUST NOT match the address of any machine on the net. +Also, the first byte must be an even number (bit 0 set means a multicast +address), and you cannot use ff:ff:ff:ff:ff:ff because that's the broadcast +address. For the ethertap module, you must use fe:fd:00:00:00:01. There may +be other restrictions too. To be safe, just use the b0:c4... address. + +ethmod: The ethmod value defines which low level OS specific module to be +used to access physical ethernet interface. You can also specify a network +simulator or a module with no input/output ("null"). See the table below for +currently supported values. + +ethdev: The ethdev value is the name of the network interface on your host +platform. On UNIX machines, you can get the name by running ifconfig. On +Windows machines, you must run niclist to get the name of the ethdev. +Niclist source code is in misc/niclist.c and it is included in Windows +binary releases. + +script: The script value is optional, and is the name of a script that +is executed after bochs initialize the network interface. You can use +this script to configure this network interface, or enable masquerading. +This is mainly useful for the tun/tap devices that only exist during +Bochs execution. The network interface name is supplied to the script +as first parameter + + + + +The following table shows the available ethernet modules with description, +whether the "ethdev" and "script" parameters are used or not and the Bochs +version where this module was added. + +Ethernet modules + + + + Module + Description + ethdev + script + Bochs version + + + + + arpback + ARP simulator - disabled by default. + + No + No + 1.3 + + + fbsd + FreeBSD / OpenBSD packetmover. + + Yes + No + 1.0 + + + linux + Linux packetmover - 'root' privileges required, + no connection to the host machine. + + Yes + No + 1.3 + + + null + Null packetmover. All packets are discarded, but logged to a + few files. + + No + No + 1.0 + + + tap + TAP packetmover. + + Yes + Yes + 1.4 + + + tuntap + TUN/TAP packetmover - see + Configuring and using a tuntap network interface. + + Yes + Yes + 2.0 + + + vde + Virtual Distributed Ethernet packetmover. + + Yes + Yes + 2.2 + + + vnet + ARP, ping (ICMP-echo), DHCP and read/write TFTP simulation. The virtual + host uses 192.168.10.1. DHCP assigns 192.168.10.2 to the guest. The TFTP server + uses the ethdev value for the root directory and doesn't overwrite files. + + Yes, for TFTP + No + 2.2 + + + win32 + Win32 packetmover - WinPCap driver required. + + Yes + No + 1.3 + + + +
+
+ +
pnic + +Example: + + pnic: enabled=1, mac=b0:c4:20:00:00:00, ethmod=vnet + +To support the Bochs/Etherboot pseudo-NIC, Bochs must be compiled with the +--enable-pnic configure option. It accepts the same syntax (for mac, ethmod, +ethdev, script) and supports the same networking modules as the NE2000 adapter. +In addition to this, it must be assigned to a PCI slot. + +
+ +
keyboard_mapping + +Examples: + + keyboard_mapping: enabled=0, map= + keyboard_mapping: enabled=1, map=gui/keymaps/x11-pc-de.map + +This enables a remap of a physical localized keyboard to a +virtualized U.S. keyboard, as the PC architecture expects. +If enabled, the keymap file must be specified. Keyboard mapping is +available for X windows, SDL (Linux port) and wxWidgets (GTK port). +For SDL you have to use keymaps designed for SDL, the wxWidgets GUI +uses the keymaps for X windows. + +
+ +
keyboard_type + +Examples: + + keyboard_type: xt + keyboard_type: at + keyboard_type: mf + +Type of keyboard returned by a "identify keyboard" command to the +keyboard controller. It must be one of "xt", "at" or "mf". +Defaults to "mf". It should be ok for almost everybody. A known +exception is French macs, that do have a "at"-like keyboard. + +
+ +
user_shortcut + +Examples: + + user_shortcut: keys=ctrl-alt-del + user_shortcut: keys=ctrl-alt-esc + +This defines the keyboard shortcut to be sent when you press the "user" button +in the headerbar. The shortcut string is a +combination of maximum 3 key names (listed below) separated with a '-' character. + + +Valid key names: + + +"alt", "bksl", "bksp", "ctrl", "del", "down", "end", "enter", "esc", +"f1", ... "f12", "home", "ins", "left", "menu", "minus", "pgdwn", "pgup", "plus", +"right", "shift", "space", "tab", "up", "win", "print" and "power". + +
+ +
cmosimage + +Example: + + cmosimage: file=cmos.img, rtc_init=time0 + +This defines image file that can be loaded into the CMOS RAM at startup. +The rtc_init parameter controls whether initialize the RTC with values stored +in the image. By default the time0 argument given to the +clock option is used. With 'rtc_init=image' +the image is the source for the initial time. + +
+ +
plugin_ctrl + +Example: + + plugin_ctrl: biosdev=0, speaker=0 + +Controls the presence of optional plugins without a separate option. +By default all existing plugins are enabled. These plugins are currently +supported: 'acpi', 'biosdev', 'extfpuirq', 'gameport', 'iodebug', +'pci_ide', 'speaker' and 'unmapped'. + +
+ +
user_plugin + +Example: + + user_plugin: name=testdev + +Load user-defined plugin. This option is available only if Bochs is +compiled with plugin support. Maximum 8 different plugins are supported. +See the example in the Bochs sources how to write a plugin device. + +
+ +
magic_break + +Example: + + magic_break: enabled=1 + +This enables the "magic breakpoint" feature when using the debugger. +The useless cpu instruction XCHG BX, BX causes Bochs to enter the +debugger mode. This might be useful for software development. + +
+ +
port_e9_hack + +Example: + + port_e9_hack: enabled=1 + +The 0xE9 port doesn't exists in normal ISA architecture. However, we +define a convention here, to display on the console of the system running +Bochs anything that is written to it. The idea is to provide debug output +very early when writing BIOS or OS code for example, without having to +bother with setting up a serial port or etc. Reading from port 0xE9 will +will return 0xe9 to let you know if the feature is available. Leave +this 0 unless you have a reason to use it. + +
+ +
debug_symbols + +Example: + + debug_symbols: file=mysymbols.sym + debug_symbols: file=mysymbols.sym, offset=0x1000 + +This loads symbols from the specified file for use in Bochs' internal debugger. +Symbols are loaded into global context. This is equivalent to issuing ldsym +debugger command at start up. + +
+ +
+ +
+ +Sound Blaster 16 Emulation + + +This section is a detailed description for configuring Sound Blaster 16 from +source. If you have a binary and all you want to know is what to put in your +bochsrc file, see sb16 option. + + + +The original version of the Sound Blaster 16 (SB16) emulation for Bochs was +written and donated by Josef Drexler. The entire set of his SB16 patches have +been integrated into Bochs, however, so you can find everything you need here. + + +
How well does it work? + +Right now, MPU401 emulation is next to perfect. It supports UART +and SBMIDI mode, because the SB16's MPU401 ports can't do anything else as well. + + + +The digital audio basically works, but the emulation is too slow for fluent +output unless the application doesn't do much in the background (or the +foreground, really). The sound tends to looping or crackle on slower +computer, but the emulation appears to be correct. Even a MOD +player works, although only for lower sampling speeds. + + +Also, the MIDI data running through the MPU401 ports can be written +into a SMF, that is the standard midi file. The wave output +can be written into a VOC file, which has a format defined by +Creative Labs. This file format can be converted to WAV by +sox for example. + +
+ +
Output to a sound card + + +Output is supported on Windows, Linux, FreeBSD, MacOS 9 and MacOSX at the moment. + + +On Linux, the output goes to any file or device. If you have a wavetable synthesizer, +midi can go to /dev/midi00, otherwise you may need +a midi interpreter. For example, the midid program from the DosEmu project would work. +Wave output should go to /dev/dsp. These devices +are assumed to be OSS devices, if they're not some of the ioctl's might fail. +If ALSA is present on Linux and the wave device is set to alsa, +Bochs uses it's default PCM output device instead of an OSS device. + + +On Windows, midi and (wave) output go to the midi mapper and the wave mapper, +respectively. A future version might have selectable output devices. + +
+ +
Installation on Linux + +
Prerequisites + + +A wavetable synthesizer on /dev/midi00 +and a working /dev/dsp if you want real +time music and sound, otherwise output to midi and wave files is also possible. +Optionally, you can use a software midi interpreter, such as the midid program +from the DosEmu project instead of /dev/midi00. + +
+ +
Configuring Bochs + + +You need to configure Bochs using the +option. +There are a few values in config.h that are relevant to the sound functions. +Edit config.h after running configure, but before compiling. + + + +BX_USE_SB16_SMF should be 1 unless you intend to have several sound cards +running at the same time. + + + +BX_SOUND_OUTPUT_C is the name of the class used for output. The default is +to have no output functions, so you need to change this if you want any sound. +The following are supported at the moment: + + + + bx_sound_linux_c for output to /dev/dsp and /dev/midi00 on Linux, + FreeBSD and maybe other OSes that use the OSS driver. + bx_sound_windows_c for output to the midi and wave mapper of + Windows 3.1 and higher. + bx_sound_output_c for no output at all. + + + +Setup the SB16 emulation in your bochsrc, according to instructions +in that file (see sb16 option). + +
+ +
Runtime configuration + + +The source for the SB16CTRL program that is used to modify +the runtime behavior of the SB16 emulation is included in +misc/sb16/. It is a C +program that can be run from inside the emulation. + + + +It currently supports the following commands: + + +Supported options for <command>sb16ctl</command> + + + + Option + Description + + + + + + + Show the selected emulator info string, + e.g. sb16ctrl -i 3 to show how many patch translations are active. + + + + + + Load a translation into the translation table. The numbers are: + "OldBankMSB,OldBankLSB,OldProgram,NewBankMSB,NewBankLSB,NewProgram". + All values can be 0..127 or 255. 255 for "Old" values means match + any and for "New" values means don't change, + e.g. sb16ctrl -t 255,255,0,255,255,32 + to change patch 0 (Piano) to patch 32 (Acoustic Bass). + + + + + + Reset the patch translation table e.g. sb16ctrl -r. + + + + + + Upload the given numbers to the midi output device. Note + that it should be a complete midi message, and also that it is + subject to patch translation, + e.g. sb16ctrl -m 0x80,64,0 + to send a note-off message to channel 0. + + + + + + Read in a file and execute the commands in it. These have + the same format as the above commands, except that they don't have + the dash "-" in front of them. + Comment lines are supported and start with a hash sign "#". + + + + + + Show a brief summary of the commands. + + + + +
+ + +All numbers can be valid parameters to the strtol() function, so hex and +octal notation is fine. They have to be delimited by either commas "," or +slashes "/", spaces are not allowed. + + + +The command line can have any number of commands. However, if none are given, +"-f -" is assumed, which means commands are taken from stdin. + +
+
+ +
Features planned for the future + +Port it to more OS's. +Finish the OPL3 FM emulation by translating the music to midi data. + +
+ +
+Description of the sound output classes + +You can find a description of the sound output classes and more details on +Sound Blaster 16 emulation in the +developer documentation. + +
+
+ +
How to write your own keymap table + +Christophe Bothamy wrote the keymapping code for Bochs, and provided this +documentation for how to create new keymaps. Keymapping was first +implemented for X windows only, so there are many references to X-specific +values in this section. In Bochs 2.0 keymapping is also available for SDL +(Linux port) and wxWidgets (wxGTK port). + + + The standard US Keyboard looks like this: + + ------------------------------------------- + Top row Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 + ------------------------------------------- + 2nd row ` 1 2 3 4 5 6 7 8 9 0 - = \ Back + ------------------------------------------- + 3rd row Tab Q W E R T Y U I O P [ ] Enter + ------------------------------------------- + 4rd row Caps A S D F G H J K L ; ' + ------------------------------------------- + 5rd row lShift l\ Z X C V B N M , . / rShift + ------------------------------------------- + 6rd row lCtrl lAlt Space rAlt rCtrl + ------------------------------------------- + + + +Each key of the US keyboard maps to a Bochs constant named +BX_KEY_symbol. You can find the current list of +BX_KEY_symbol in +the BX_KEY table, below. Please note that +there is only one BX_KEY_symbol for each physical +key. + + + +Now, for each key of the US keyboard, look at which symbols you can type on your +real keyboard. Each symbol maps to a X-windows +XK_symbol constant. In +X11/keysymdef.h, you will find the list of all possible +XK_symbol on your system. Alternatively, you can +use a small utility called "xev" that prints out the symbol names of a pressed +key. Note that the symbol name given by xev does not contain the XK_ prefix. +Don't forget to add a line for every symbol you can type on each key. For the +key BX_KEY_A, you can type both lowercase 'a' and uppercase 'A', so you would +need two different entries. + + + +You can then create your own map file. Keymap files are found in the +"gui/keymaps" directory in the source code, or in the "keymaps" directory in +binary releases. Look at the existing keymap file as an example, and create a +file containing one line for each symbol. The first column tells what key or +combination of keys can be used to produce a given symbol. The second column +is the ASCII equivalent for that symbol, or a special keyword (none, space, +return, tab, backslash, or apostrophe). The third column is the X windows +keysym for that symbol. + + + + +For example : + +BX_KEY_0 '0' XK_0 +BX_KEY_1 '1' XK_1 +BX_KEY_2 '2' XK_2 +BX_KEY_0+BX_KEY_SHIFT_L ')' XK_parenright +BX_KEY_1+BX_KEY_SHIFT_L '!' XK_exclam +BX_KEY_2+BX_KEY_SHIFT_L '@' XK_at +BX_KEY_A 'a' XK_a +BX_KEY_B 'b' XK_b +BX_KEY_A+BX_KEY_SHIFT_L 'A' XK_A +BX_KEY_B+BX_KEY_SHIFT_L 'B' XK_B +BX_KEY_TAB tab XK_Tab +BX_KEY_ENTER return XK_Return +BX_KEY_F1 none XK_F1 +BX_KEY_F2 none XK_F2 +BX_KEY_F3 none XK_F3 + + + + +Now that there are several keymap files in the Bochs distribution, it is +easiest to copy an existing keymap and follow the examples you see. When it +works, be sure to send it to the mailing list or post it on Source Forge so +that we can include it in the next release. You may need to look up some of +your country specific X11 symbols in X11/keysymdef.h. + + +BX_KEY constants + + + + BX_KEY constant + Keyboard Symbol + + + + +BX_KEY_CTRL_L left Ctrl +BX_KEY_SHIFT_L left Shift +BX_KEY_F1 F1 +BX_KEY_F2 F2 +BX_KEY_F3 F3 +BX_KEY_F4 F4 +BX_KEY_F5 F5 +BX_KEY_F6 F6 +BX_KEY_F7 F7 +BX_KEY_F8 F8 +BX_KEY_F9 F9 +BX_KEY_F10 F10 +BX_KEY_F11 F11 +BX_KEY_F12 F12 +BX_KEY_CTRL_R right Ctrl +BX_KEY_SHIFT_R right Shift +BX_KEY_CAPS_LOCK CapsLock +BX_KEY_NUM_LOCK NumLock +BX_KEY_ALT_L left Alt +BX_KEY_ALT_R right Alt +BX_KEY_A A +BX_KEY_B B +BX_KEY_C C +BX_KEY_D D +BX_KEY_E E +BX_KEY_F F +BX_KEY_G G +BX_KEY_H H +BX_KEY_I I +BX_KEY_J J +BX_KEY_K K +BX_KEY_L L +BX_KEY_M M +BX_KEY_N N +BX_KEY_O O +BX_KEY_P P +BX_KEY_Q Q +BX_KEY_R R +BX_KEY_S S +BX_KEY_T T +BX_KEY_U U +BX_KEY_V V +BX_KEY_W W +BX_KEY_X X +BX_KEY_Y Y +BX_KEY_Z Z +BX_KEY_0 0 +BX_KEY_1 1 +BX_KEY_2 2 +BX_KEY_3 3 +BX_KEY_4 4 +BX_KEY_5 5 +BX_KEY_6 6 +BX_KEY_7 7 +BX_KEY_8 8 +BX_KEY_9 9 +BX_KEY_ESC Esc +BX_KEY_SPACE SpaceBar +BX_KEY_SINGLE_QUOTE ' +BX_KEY_COMMA , +BX_KEY_PERIOD . +BX_KEY_SLASH / +BX_KEY_SEMICOLON ; +BX_KEY_EQUALS = +BX_KEY_LEFT_BRACKET [ +BX_KEY_BACKSLASH \ +BX_KEY_RIGHT_BRACKET ] +BX_KEY_MINUS - +BX_KEY_GRAVE ` +BX_KEY_BACKSPACE BackSpace +BX_KEY_ENTER Enter +BX_KEY_TAB Tab +BX_KEY_LEFT_BACKSLASH left \ +BX_KEY_PRINT PrintScreen +BX_KEY_SCRL_LOCK ScrollLock +BX_KEY_PAUSE Pause +BX_KEY_INSERT Ins +BX_KEY_DELETE Del +BX_KEY_HOME Home +BX_KEY_END End +BX_KEY_PAGE_UP PageUo +BX_KEY_PAGE_DOWN PageDown +BX_KEY_KP_ADD Numeric Keypad + +BX_KEY_KP_SUBTRACT Numeric Keypad - +BX_KEY_KP_END Numeric Keypad 1 +BX_KEY_KP_DOWN Numeric Keypad 2 +BX_KEY_KP_PAGE_DOWN Numeric Keypad 3 +BX_KEY_KP_LEFT Numeric Keypad 4 +BX_KEY_KP_5 Numeric Keypad 5 +BX_KEY_KP_RIGHT Numeric Keypad 6 +BX_KEY_KP_HOME Numeric Keypad 7 +BX_KEY_KP_UP Numeric Keypad 8 +BX_KEY_KP_PAGE_UP Numeric Keypad 9 +BX_KEY_KP_INSERT Numeric Keypad 0 +BX_KEY_KP_DELETE Numeric Keypad . +BX_KEY_KP_ENTER Numeric Keypad Enter +BX_KEY_KP_MULTIPLY Numeric Keypad * +BX_KEY_KP_DIVIDE Numeric Keypad / +BX_KEY_UP UpArrow +BX_KEY_DOWN DownArrow +BX_KEY_LEFT LeftArrow +BX_KEY_RIGHT RightArrow +BX_KEY_WIN_L Left Windows +BX_KEY_WIN_R Right Windows +BX_KEY_MENU Menu +BX_KEY_ALT_SYSREQ Alt-Sysreq +BX_KEY_CTRL_BREAK Ctrl-Break +BX_KEY_INT_BACK Internet - back +BX_KEY_INT_FORWARD Internet - forward +BX_KEY_INT_STOP Internet - stop +BX_KEY_INT_MAIL Internet - mail +BX_KEY_INT_SEARCH Internet - search +BX_KEY_INT_FAVInternet - favorites +BX_KEY_INT_HOME Internet - home +BX_KEY_POWER_MYCOMP Powerkeys - my computer +BX_KEY_POWER_CALC Powerkeys - calculator +BX_KEY_POWER_SLEEP Powerkeys - sleep +BX_KEY_POWER_POWER Powerkeys - power +BX_KEY_POWER_WAKE Powerkeys - wake + + + +
+
+ +
+ +Using Bochs + +&FIXME; + +- using plugins? +- Resources for users +testing status page: tells what has been tried and who got it working +search on bochs web site +SourceForge + - look for bug reports + - how to report problems (present as FIXME request in chapter 6 as well) + - How to make feature requests? + + + +
Command line arguments + +The following table shows the arguments that can be used on the command line. +For other arguments, see section bochsrc. + +command line arguments + + + +Argument +Description + + + + + -q + quick start (skip configuration interface) + + + -f filename + specify configuration file + + + -log filename + specify Bochs log file + + + -dbglog filename + specify Bochs internal debugger log file + + + -n + don't try to load a configuration file + + + -r path + specify path for restoring state (if save/restore support is compiled in) + + + --help + display help message and exit + + + +
+
+ +These arguments are handled directly after starting Bochs. The next step is to load +a default or specified configuration file (unless disabled with -n). Then the rest +of the command line (bochsrc options) is parsed. This is done after reading the +configuration file so that the command line arguments can override the settings +from the file. + +
+ +
Search order for the configuration file + +If no configuration file is specified on the command line and config file loading +is not disabled, Bochs searches for a default configuration file. This is the search order: + + + +.bochsrc in the current directory + + + + +bochsrc in the current directory + + + + +bochsrc.txt in the current directory + + + + +(win32 only) bochsrc.bxrc in the current directory + + + + +(Unix only) .bochsrc in the user's home directory + + + + +(Unix only) bochsrc in the /etc directory + + + + +
+
The configuration interface 'textconfig' + +The configuration interface 'textconfig' is the text mode version of the Bochs +configuration system. It is a series of menus (using stdin/stdout) that allows +you to edit all the settings that control Bochs' behavior. If you do not write +a config_interface line, Bochs will choose it as the default for you (unless Bochs +is compiled for Win32 or wxWidgets only). + + +It consists of these three parts: + +the start menu +the headerbar buttons +the runtime configuration + + +
The start menu + +If you start Bochs without the quickstart argument (-q), the Bochs configuration +main menu appears: + +------------------------------ +Bochs Configuration: Main Menu +------------------------------ + +This is the Bochs Configuration Interface, where you can describe the +machine that you want to simulate. Bochs has already searched for a +configuration file (typically called bochsrc.txt) and loaded it if it +could be found. When you are satisfied with the configuration, go +ahead and start the simulation. + +You can also start bochs with the -q option to skip these menus. + +1. Restore factory default configuration +2. Read options from... +3. Edit options +4. Save options to... +5. Restore the Bochs state from... +6. Begin simulation +7. Quit now + +Please choose one: [5] + + + +Here you can load, edit and save the configuration and finally start the simulation. +It is possible to start Bochs without a config file and to edit all the settings using +the item "Edit options". Don't forget to save the configuration if you want to use this +setup for another Bochs session. + +
+ +
The Bochs headerbar + + + + +The headerbar appears on top of the Bochs simulation window. Here you can control the +behavoiur of Bochs at runtime if you click on one of these buttons: + + +floppy buttons + + Here you can toggle the status of the floppy media (inserted/ejected). Bochs for + win32 presents you a small dialog box for changing the floppy image. You can + setup floppy drives using floppya/floppyb option. + + + +cdrom button + + Here you can toggle the status of the cdrom media (inserted/ejected). CD-ROM drives + can be set up using ata(0-3)-master/-slave option. + On some platforms this button brings a up a small dialog box for changing the + CD-ROM image. + + + +mouse button + + Here you can enable the creation of mouse events by the host. Once mouse + events are captured, you cannot reach the button anymore, in order to disable + capturing again. By default you can enable and disable the mouse capture pressing + the CTRL key and the third (middle) mouse button. See the mouse option + parameter 'toggle' for other methods to toggle the mouse capture. + +&FIXME; Support for 2 button mouse to toggle the capture mode not yet complete. + Some display libraries still don't support changing the mouse capture at runtime, + but it is already supported on RFB, SDL, Win32, wxWidgets and X11. + + +user button + + Press this button if you want to send the keyboard shortcut defined with the + user_shortcut option to the guest. + Depending on the used display_library option, + it may even be possible to edit the shortcut before sending it. + + + +copy button +The text mode screen text can be exported to the clipboard after pressing this +button. The button has no effect in graphics mode. + + +paste button +Text in the clipboard can also be pasted, through Bochs, to the +guest OS, as simulated keystrokes. Keyboard mapping must be enabled to make this +feature work. + + +snapshot button +Press this button if you want to save a snapshot of the text mode screen. +Bochs for win32 presents you a "Save as..." dialog box. All other platforms are +using the fixed filename "snapshot.txt". + +config button +This button stops the Bochs simulation and starts the runtime configuration. +(see below). + + +reset button +Press this button to trigger a hardware reset. + + +suspend button +Press this button to save current simulation state to a disk. The simulation +could be restored back using bochs -r command. For more details read +"Save and restore simulation" section of the user manual. + + +power button +This button stops the simulation and quits bochs. + + + + +Some of this features may not be implemented or work different on your host platform. + +
+
The runtime configuration + +If you want to change certain settings at runtime, you have to press the "config" button in +the headerbar. The simulation stops and the runtime menu appears on the console window / xterm. + +--------------------- +Bochs Runtime Options +--------------------- +1. Floppy disk 0: /dev/fd0, size=1.44M, inserted +2. Floppy disk 1: floppyb.img, size=1.44M, inserted +3. 1st CDROM: (master on ata1) /dev/cdrom, ejected +4. 2nd CDROM: (slave on ata1) /dev/cdrecorder, ejected +5. 3rd CDROM: (not present) +6. 4th CDROM: (not present) +7. (not implemented) +8. Log options for all devices +9. Log options for individual devices +10. Instruction tracing: off (doesn't exist yet) +11. USB runtime options +12. Misc runtime options +13. Continue simulation +14. Quit now + +Please choose one: [15] + + + +In the runtime configuration you can change the floppy/cdrom image or device, +change the log options or adjust some other settings. If you have trouble with +a specific device, you can change the log options for this device only to get +more information (e.g. report debug messages). This cannot be done in the configuration +file yet. + +
+
+
Save and restore simulation + +Starting with version 2.3, Bochs has limited save/restore support. The state of +cpu(s), memory and all devices can be saved now. When running Bochs with there +will be a button in the header bar called "Suspend". Depending on config interface +and gui there will be a prompt where you can enter a path or a gui folder +selection dialog box. It is possible to save the state at any time, but we +recommend to do it when the simulation is idle. After pressing OK/Enter, Bochs +will save a set of files into the selected folder. The state of hard disk images +is not handled yet, so Bochs will ask you if you want to continue after saving +state. We don't recommend to continue unless you are running a read-only guest +system (e.g. Live-CD). + + +To restore the saved simulation state you can select the restore function in the +text mode start menu or specify the restore path at the command line: + +bochs -r /path/to/save-restore-data + + + +Then Bochs will start up using the saved configuration and log options, restores +the state of the hardware and begins the simulation. In the restore mode Bochs +will ignore bochsrc options from the command line and does not load a normal +config file. + +
+
+ + + Common problems and what to do about them (Troubleshooting) + + &FIXME; + + How to report a panic to the bug tracker? + Keyboard mapping problems + [...] + + + +
+ Bochs panics! What can I do? + + Bochs does a very good job in emulating an x86 compatible computer, however, + it does not (yet) include a full (100%) emulation of every possible instruction, + (BIOS) function call or (hardware) device. Thus, in case something unusual + happens, either a not-so-common call to some (BIOS) function or device by + some software running inside of it, Bochs has two possibilities to react: + If the command doesn't look important (mainly happens only to non-implemented + functions in the BIOS), a notice is logged to the log file + and the emulation continues. If, however, the command looks important, Bochs + panics, because the software being emulated might depend on the successful + execution of the given instruction or behavior of the device. + + + A panic does not always mean that the software won't run inside of Bochs, + as the software might just be probing the computer for the presence of some + instruction/device, and in case it is not found, it simply won't be used at + all, by the software. + + + You can tell Bochs what to do in case of a panic, by re-configuring the + panic option. If + you change the action to "ask", Bochs reports what has happened and asks + you what to do. The appearance of the "ask" feature depends on the display + library used and the platform. Some display libraries don't support it at all. + + + Some of the device names reported in the panic message are abbreviations, + since the length of the names is limited to 5 characters. This small list + may help you finding out the name of the device that caused the panic. + + Device prefixes + + + + Prefix + Description + + + + + CLVGA + Cirrus SVGA + + + EFIRQ + External FPU IRQ + + + IOAP + I/O APIC + + + KMAP + Keyboard mapping + + + P2I + PCI-to-ISA bridge + + + PIDE + PCI IDE controller + + + PLGIN + Plugin interface + + + STIME + Slowdown timer + + + UNMP + Unmapped I/O handler + + + VTIME + Virtual timer + + + +
+
+ +
+ Mouse behavior, enabling and disabling + + Refer to for information on how to enable or + disable the mouse inside of Bochs at run-time. + + + &FIXME; Mouse behavior + +
+ +
+ Text-mode is broken in some ancient DOS program + + + If you are using a program written for DOS which seems to use the text-mode but + doesn't display the text properly, you can try the other VGA BIOS, either + VGABIOS-lgpl-latest or VGABIOS-elpin-2.40, + see the vgaromimage option. + + + + &NEEDHELP; Maybe it is a bug in the LGPL VGA BIOS, but for now, it seems to work. + +
+
+ + +Mailing Lists + +The Bochs community uses three mailing lists to communicate, called +bochs-developers, bochs-cvs and bochs-announce. + + +
bochs-developers mailing list + +Bochs-developers is the forum for all Bochs discussions and questions. On +average, subscribers get between five and ten messages per day. There are +about 350 subscribers. If this sounds like too much email, maybe the bochs-announce list is more appropriate for +you. Anyone may join the list, unless they abuse it of course. + + +To subscribe, go to the Bochs-Developers Info Page and type your email +address and a password into the web form and click +Subscribe. In a few minutes you will get a confirmation +email. Follow the directions in the email to complete the subscription +process. To unsubscribe, go to the same +page and type your email address in the blank at the bottom and click +on Edit Options. Then type your password and click +Unsubscribe. + + +Once you have subscribed, you can write to +bochs-developers@lists.sourceforge.net to send a message to +everyone on the list. While it's possible to post without being a subscriber, +it's not recommended. If you aren't a subscriber, you might miss the response +to your question. + + +Archive of bochs-developers messages + +
+ +
bochs-announce mailing list + +Bochs-announce is a moderated, low-traffic list which carries only periodic +announcements of Bochs releases and important events. If you have a very +important and truly relevant Bochs announcement, you can try posting it to +bochs-announce, but the moderator will have to approve it before it will +go out. On average, bochs-announce subscribers get one or two messages +per month. There are about 75 subscribers. Anyone may join the list. + + + +To subscribe, go to the Bochs-Announce Info Page and type your email +address and a password into the web form and click Subscribe. +In a few minutes you will get a confirmation email. Follow the directions in +the email to complete the subscription process. To unsubscribe, go to the +same +page and type your email address in the blank at the bottom and click +on Edit Options. Then type your password and click +Unsubscribe. + + + +There is no need to subscribe to both lists, because all bochs-announce +messages are forwarded to the developers list. If you subscribe to both, you +will get 2 copies of every announcement. + + + +Archive of bochs-announce messages + + +
+ +
bochs-cvs mailing list + +This is the cvs commit mailinglist (a unified diff email will be sent +whenever someone does a checkin in the bochs cvs repository). + + + +Archive of bochs-cvs messages + + +
+ +
Mailing List Etiquette + + +Here are a few guidelines for use of the Bochs mailing lists: + + + + +Please check the documentation before asking questions, but on this list you +are very UNLIKELY to get flamed and insulted for being a Bochs beginner. +Sending commercial promotions to the list probably will get you some angry +responses though. + + + +If you are having difficulty finding what you are looking for, try doing a search on Google. If you are searching for Bochs options, for example, you can use this syntax in the Google search box: + +configuration options site:bochs.sourceforge.net + +For best results, be sure not to put a space between "site:" and "bochs.sourceforge.net". Be sure to look at more than the first item on the search results. + + + + +If you still cannot find what you are looking for, be sure you are prepared when you post your question, and post in the right forum. Be sure you include important details, such as the operating system and version of your host, and what it is you are trying to do. If you are getting errors or something is not working, summarize what you checked and what you changed. This will help isolate the problem. + + + + + +Bochs is for everyone. If you are an experienced Bochs user or developer and are helping someone else, be considerate of the other person's feelings. We share a common interest, and we need to encourage each other and be supportive. + + + + +Also, keep in mind that messages are limited to 40K, so if you want to share a +large screen shot or disk image, put it on a web or FTP site and tell people +how to find it. Patches are usually small enough that they aren't a problem, +especially if compressed. + + + +Distribution of copyrighted material, or even offers to distribute copyrighted +material WILL NOT be tolerated. The Bochs Project does not distribute +any software (disk images) in violation of the license agreement, and users who +do so will be warned first and then blocked from the list if it happens again. +As an open source project, we rely on donated services from Source Forge and +other groups, and we can't afford to put them or ourselves at risk of legal +action. + + + +It is possible to subscribe and unsubscribe by email. If you do this, you must +write to bochs-announce-request or bochs-developers-request. Don't forget the +"-request" part or your subscribe message will go to 300+ people. + + + +
+
+ +Tips and Techniques + +
How to make a simple disk image + +This was contributed by Greg Alexander in October 2001. + + +What you need: + + + +An executable version of Bochs. See Downloading Bochs and Compiling Bochs. + + +The bximage program, included with Bochs. + + +A FreeDOS boot disk, or a boot disk from another OS capable of +producing DOS partitions (e.g. a Linux install disk). + + +(Optional) mtools, a program for manipulating DOS disks/images. + + + + + +
+Create a flat image + + + +Option 1: Using the Unix dd utility: + + + +You will need to know the geometry of the disk you want to +create. You have to compute the disk sector count: + + +Sectors = Cylinders * Heads * SectorsPerTrack + + + + +Use the dd command to create your file: + + +dd if=/dev/zero of=teaching.img bs=512 count=sectors + +(replace "sectors" with the number you computed at the +previous step). + + + +When you'll update your configuration file, please +fill in the same cylinders, heads and sector per +track values. + + + + +Option 2: Run bximage to create a disk image file. +You will be greeted with the following prompt: + + +======================================================================== + bximage + Disk Image Creation Tool for Bochs +======================================================================== + +Do you want to create a floppy disk image or a hard disk image? +Please type hd or fd. [hd] + + + + + +Since we are creating a hard disk image, accept the default of hd by +pressing Enter or typing 'hd' and pressing +Enter. Next, bximage will ask for the type of +hd to create: + + +What kind of image should I create? +Please type flat, sparse or growing. [flat] + + + + + +We want to create a simple flat image, so accept the default +by pressing Enter. Then, bximage will ask +for the size of the disk image you want to create, in Megabytes: + + +Enter the hard disk size in megabytes, between 1 and 32255 +[10] + + + + + +Enter the size of the hard disk you want to create, and press +Enter. +Bochs will give you some information about the image it is creating, and +ask you for a filename to use for the file it is creating. I told it to +use the default of 10 megabytes, and was given the following information +along with the prompt for a filename: + + +[10] 10 + +I will create a hard disk image with + cyl=20 + heads=16 + sectors per track=63 + total sectors=20160 + total size=9.84 megabytes + +What should I name the image? +[c.img] + + + + + +At this point, type in the filename you want to use for the image. The +default of "c.img" is appropriate if this will be your only hard disk +image. After you have typed in the name of the filename you want to +use, press Enter. Bximage will tell you it is writing the disk and +will display a status bar as you wait. When it is finished, it will +give you a final status report and tell you a line that should be added +to your bochsrc when you want to use this disk image. I named my +10 Megabyte image "teaching.img" and the output of bximage looked like +this: + + +[c.img] teaching.img + +Writing: [..........] Done. + +I wrote 10321920 bytes to teaching.img. + + + + +The following line should appear in your bochsrc: + + ata0-master: type=disk, path="teaching.img", mode=flat, cylinders=20, heads=16, spt=63 + + + + + +At this point, a file called "teaching.img" was created in my current +directory and is ready to be used as an image file for a Bochs session. + + + + +You may want to name your image teaching_20-16-63.img +so that you always know the values to use for CHS. + + +
+ +
+ +Partition and format your image file + + + +Option 1: Using FreeDOS (Advantage: Creates a MBR on the partition.) + + + +First, you need to edit the bochsrc file that Bochs uses for +configuration information (see ). Open bochsrc +with a text editor. Remove all lines in the file which start with "ata0-master:". Add the "ata0-master:" +line that was displayed when you ran bximage to bochsrc at the +same place where you removed the old "ata0-master:" lines from. + + + +Also, you need to download or create a FreeDOS (or DOS, or Windows, or +Linux) disk image. Modify the "floppya:" line in your bochsrc to point +at the downloaded FreeDOS floppy image and change its status to "status=inserted". + + + +Save and close your bochsrc. Now run Bochs (see ). + + + +Use the standard FreeDOS commands fdisk and +format to format your hard +drive image. You must make the image bootable to be able to boot +without a floppy disk. However, creating a bootable disk image is best +done with a boot disk from the OS you intend to install on the image. + + + + +Option 2: Using mtools (Disadvantage: Cannot create bootable images +without a MBR image.) + + + +Use a text editor to add the following line to the file ~/.mtoolsrc: + + + + +drive c: file="path/filename.img" partition=1 + + + + +Save and close .mtoolsrc. Next, execute the following commands to +create a partition table for the drive image: + + + + +mpartition -I -s spt -t cyl -h heads c: +mpartition -cpv -s spt -t cyl -h heads c: + + + +For example, for my 10 meg drive, I used: + +mpartition -I -s 63 -t 20 -h 16 c: +mpartition -cpv -s 63 -t 20 -h 16 c: + + + + + +Next, format the partition you just created using the mformat command: + + +mformat c: + + + + + +And you now have a formatted disk image containing a single DOS +partition. + + +The mpartition command doesn't handle images larger than 1024 cylinders properly. +The partition size reported by fdisk is okay, but mformat reports only 504 MB +(tested with mtools 3.9.9). + +
+
+ +
Use mtools to manipulate disk images + +Mtools is a set of programs that can read, write, and format DOS disk images. +There are links to the Mtools main page and a Win32 port of Mtools on the +Bochs Links page, +under Resources. + + +The mtools web site has a detailed manual. If anyone wants to write +instructions specific to Bochs, we can add it right here. + +
+ +
Bochs GNU/Linux DiskTools + +&FIXME; +Bochs tools are external tools developed by ..., and useful to copy +to / from guest partition from a GNU/Linux host. + +
+ +
Win32 only: Tools to manipulate disk images + +
Winimage + +Someone on the bochs-developers list mentioned that they use a program +called WinImage, from www.winimage.com +to read and write disk images (floppy and hard disk). Winimage is a +commercial product with a 30-day trial. + + +If anyone wants to write a tutorial, send mail to &devlist; and volunteer. + +
+ +
DiskExplorer + +This section was contributed by Luca Cassioli and Stanislav Shwartsman + + +I eventually found what all of you were looking for for a long time: a +freeware, graphical, win32 compatible HardDisk image editor! It can +handle a large variety of formats, but the one you need is VMWARE +2.0 PLAIN DISK: you can import/export to/from Bochs images COMPLETE +DIRECTORIES! + + +You can find it at + +http://hp.vector.co.jp/authors/VA013937/editdisk/index_e.html + +
+ +
Ben Lunt's MTOOLs for Bochs and Win32 and/or DOS + +Ben Lunt wrote a set of utilities for Dos/Win32 to manipulate flat disk images. + + +You can find it at + +http://www.frontiernet.net/~fys/mtools.htm + + +These utilities includes : + + + BOCHSRC.EXE "Bochs Resource" + A utility to create/modify a Bochs resource file. + + + MKDOSFS.EXE "Make DOS FS" + A utility to create a FAT disk image of specified size. + + + MCOPYF.EXE "Copy From" + A utility to copy an existing file from a FAT disk image to the current + directory. + + + MDEL.EXE "Delete file" + A utility to delete an existing file from a FAT disk image. + + + MDIREX.EXE "Directory Extended" + A utility to view a FAT disk images directory and FAT contents. + + + MGETIMG.EXE "Get Disk Image" + A utility to create a disk image from a floppy (multiple formats). + + + MBOOTCD.EXE "Create a CDROM Image with boot options" + Create a CDROM image capable of booting with only a ROOT and a single file. + + + MGETCD.EXE "Get Disk Image of Physical CD" + A utility to create a disk image from a CD. + + + MCDINFO.EXE "Get CD Info" + A utility to the info from a CD. Not much yet, but a little. + + + + +
+ +
+ +
X Windows: Color allocation problems + +One common problem in X windows is that the screen colors can be abnormal +if other X programs have already allocated all the colors. If the colors +don't look right, try quitting colorful applications such as Netscape, +clearing any complex images in the background, etc. so that Bochs has a +chance to allocate the colors it needs. + + +If Bochs continues to have problems, or you want Bochs to have perfect +colors without having to quit any other application, you can try turning +on the private_colormap option +in the configuration file. Using a private +colormap causes the Bochs window to have its own set of 256 colors to work +with. When the cursor is over the Bochs display, Bochs will look correct +and other parts of the screen may change to very strange colors. When the +cursor goes to any other window, the other windows will look correct +and Bochs will have strange colors. A better solution, if your hardware +can support it, is to run your X server with 24-bit or 32-bit color. + +
+ +
Screen saver turns on too quickly + + +One thing you may notice is that the screen saver turns on (screen goes +blank) very quickly after you have stopped typing. The reason is that Bochs +simulates everything as fast as it can. If the CPU is very busy (running +instructions nonstop), simulated time goes by slowly. If the CPU is idle (just +waiting for you to type, for example), simulated time speeds up dramatically. +In any case, if the screen saver blanks out the screen, just press a key (try +shift or control) to restore the screen. + + + +There are two strategies to fix this problem. One is to increase the +ips parameter of the cpu option +in your configuration file. This will cause the simulation time +to pass more slowly. The other strategy is to enable the experimental +realtime PIT, which tries to keep Bochs in sync with real time. See the bochsrc +option clock. + + +
+ + +
Mounting a disk image using the loop device + + +This section describes how to access a floppy or hard disk image within Linux +using the loop device. Why would you want to do this? Let's say you have made +a small Linux disk image for Bochs, and you want to install some more software +on it. You have already downloaded the software onto your real system, so now +you want to transfer it to the Bochs disk image. A fast way to transfer +the files is to mount the disk image using the loop device. + + +
...on Linux + + +This section was contributed by Volker Ruppert. + +Today I have made some tests with the loop device, because I want to exchange +files with the bochs disk images. This is what I found out: + +1. Using Floppy images is easy, because there is no partition table: + + losetup /dev/loop0 /usr/local/bochs/dlxlinux/floppya.img + + Now you can use the image like a real floppy: + + - format : mkfs.minix /dev/loop0 + - filesystem check : fsck.minix /dev/loop0 + - mount : mount /dev/loop0 -o loop /mnt/floppy + + Before you want to restart bochs you must do this: + + losetup -d /dev/loop0 + + Don't forget to umount before. + +2. If you want access to a hard disk image, you have to calculate the size of + the first cylinder. This value is the offset argument for losetup. + + offset = bytes per sector * sectors per cylinder + + The command for dlxlinux image looks like this: + + losetup /dev/loop0 /usr/local/bochs/dlxlinux/hd10meg.img -o 8704 + + For images created by bximage you must use the value 32256. + +3. The hard disk image access doesn't work if the image contains more than + one partition. + +4. I have made this tests with Linux and I don't know how + this could be done with other operating systems. + + + +
+ +
...on FreeBSD + + +This section was contributed by Alexander Schuch. + + +The following example mounts a Windows 95 hard disk image called Windows 95 B (2031-16-63) +into the FreeBSD file system. It is specific to FreeBSD 5.x; for +hints on how to do the same task on FreeBSD 4.x, or for more information in +general, check the proper section of the FreeBSD handbook: +Network, Memory, and File-Backed File Systems. +You can use the same procedure for mounting floppy disk images. + + + + +# mdconfig -a -t vnode -f "Windows 95 B (2031-16-63)" +md0 + +mdconfig returns the device, your file now is accessable from. + +# mount -t msdosfs /dev/md0s1 /mnt + +If you already have other md devices configured, you need to substitute md0s1 +with, for example, md6s1. + + + +Once you are done working with the image, unmount the md device and detach it. + +# umount /mnt +# mdconfig -d -u 0 + +And again, if there are other md devices configured, use the proper device +number. In case you forgot the number, just ask mdconfig, like: + +# mdconfig -l +md7 +# mdconfig -d -u 7 + + + +
+ +
+ +
Simulating a Symmetric Multiprocessor (SMP) Machine + +Bochs can now simulate an SMP machine when you use "--enable-smp" in the +configure command. SMP support was added by Bryce Denney, who +was very interested in watching a multiprocessor operating system work +at a low level. It should also be helpful to operating system developers +who are writing SMP drivers, or just for users who want to test drive +an SMP machine to see what it looks like. + + +Starting with Bochs 2.2.6 you can set up the number of processors in the +bochsrc. See how to +set up the number of processors. + + +It is important to understand that configuring bochs for 4 processors will NOT +make your single-threaded applications run faster in general! On the contrary, +it has to spend time simulating idle processors as well as the ones doing your +task. The point is to simulate an SMP system, not to speed up a uniprocessor +application. + + + +What was required to make SMP work in Bochs? + + + local APIC on each processor with timer + + one I/O APIC model + + implement RDTSC (read time stamp counter) + + a data structure called the Intel Multiprocessor Configuration +must be present in BIOS memory space. An SMP-aware operating system probes BIOS +memory to find the structure, which contains information about how many +processors, their IDs, interrupt sources, etc. Starting with Bochs 2.2.5 these +structures are dynamically created by Bochs. + + ACPI support is required to boot SMP system in most of modern +operating systems. For example WinXP 64 bit require ACPI support even for +single processor configuration. Still not supported by Bochs. (FIXME) + + + + + +What needs to be done to improve SMP support? + + + +debugger support is still limited. For example, you can set breakpoints, +but you can't specify which processor you want to set the breakpoint for. + + + +test on any possible SMP operating systems. Currently success reported for +Knoppix 4.0.2, WinNT 4.0 and WinXP SMP. + + + +several parts of the APIC model which weren't needed before are not +implemented yet. + + + +A number of people have suggested using threads to simulate each CPU in +a different thread. Then on a real SMP machine, the threads can execute +in parallel. This is a great idea, but it's not done at present. + + + +
+ +
Setting Up Networking in DLX Linux + +All Bochs binaries come with a working version of DLX Linux. This section +describes how to configure networking in Bochs and enable it within +DLX Linux. First you must add a ne2k line in your bochsrc +file. Then, when you boot the DLX Linux image, you need to type some Linux +commands to set up an IP address, a network route, and a name server. + + + +When you have an ne2k line in your bochsrc file, Bochs +will emulate a network card called an NE2000. Below are some examples of valid +ne2k lines for various operating systems. Choose the +one that's closest to what you need, add it to your bochsrc file, and +edit the values if necessary. + + # sample for Mac OS X + ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:00, ethmod=fbsd, ethdev=en0 + # sample for FreeBSD + ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:00, ethmod=fbsd, ethdev=xl0 + # sample for Linux + ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:00, ethmod=linux, ethdev=eth0 + # sample for Windows + ne2k: ioaddr=0x300, irq=9, mac=00:c4:3B:00:C3:00, ethmod=win32, ethdev=NE2000 + +You see the pattern. Usually you won't need to change the I/O address, IRQ +number, or MAC address. The ethmod value depends on your +host operating system, and it must be either null, +fbsd (for FreeBSD or OpenBSD), linux, +or win32. The ethdev setting is the +name of the network interface on your system, and is also OS-dependent. On +UNIX systems you can get the name of the network interface by running +ifconfig. (Don't choose the loopback interface.) On +Windows systems, the correct ethdev setting is not always obvious, so we +provide a utility called niclist to list the names of +network interfaces to use. When you run niclist, it will +suggest an ne2k line which is a very good first try. + + + +Next, if you are on a UNIX machine you will need to become the root user. +Since bochs is sending and receiving raw network packets, you need to be root +to use the network device. To allow normal users to do this would be a +security problem. + + + +Now run Bochs to boot DLX Linux. Press enter a few times to accept the default +configuration choices. This tells Bochs read the configuration file and then +begin. DLX Linux should boot in the Bochs window, and you should see +that Linux detects the NE2000 card. Eventually it gets to a login prompt. + + ne.c:v1.10 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov) + NE*000 ethercard probe at 0x300: b0 c4 20 00 00 00 + eth0: NE2000 found at 0x300, using IRQ 9. + + + + +At the login prompt, type "root" to log in as root. Then type the ifconfig and +route commands to set up networking. The exact IP numbers in the example won't +work for you; you must choose an IP configuration that is legal on your +network. + + + dlx login: root + Linux 1.3.89. + dlx:~# ifconfig eth0 192.168.0.99 # set bochs IP address + dlx:~# route add -net 192.168.0.0 # first 3 numbers match IP + dlx:~# route add default gw 192.168.0.1 # your gateway to the net + dlx:~# _ + + + + + +The bochs IP address must be an unused IP address on your +network. If you duplicate someone else's IP address, your network will +become very confused. + + + + +Finally, the network is ready and you can test it out with ping, telnet, or ftp +to various machines by their numerical IP address. Keep in mind that for all +UNIX host platforms, Bochs networking cannot talk to the host machine. That +means the host machine can't be the gateway either. You need another physical +machine on the network that bochs can talk to. On Win32 this restriction does +not apply. + + + + +When you have a working network configuration, you can make DLX Linux recreate +the same settings the next time you boot. Just add the ifconfig and route +commands to the end of /etc/rc.d/rc.inet1. I won't try to describe how +to use the vi editor in this limited amount of space... + + + + + + +To configure a name +server, set up /etc/resolv.conf with the IP address of +your name server as shown. + + dlx:~# echo 'nameserver 192.168.0.1' > /etc/resolv.conf + + +
+ +
Configuring and using a tuntap network interface + +If you use linux (optionally FreeBSD and Solaris, not tested), +you may want to access the network through a tuntap interface. The main +advantage of this interface, is that the guest has access to the host. The guest can even +have access to the whole network if the host routes or masquerades the guest requests. +No extra IP address is needed, all can be done using private IP addresses. + + + +You'll find here instructions to set up Linux/Bochs to provide network access to the guest OS +through a tuntap interface and private IP network. We're going to see howto : + + enable the tuntap interface in the Linux Kernel + configure Bochs to use the tuntap interface + set up the private network between the host and the guest + set up the host to masquerade the guest network accesses + + +
+ Tuntap description + +From the +tuntap.txt file in the Linux kernel tree : + + TUN/TAP provides packet reception and transmission for user space programs. + It can be viewed as a simple Point-to-Point or Ethernet device, which + instead of receiving packets from a physical media, receives them from + user space program and instead of sending packets via physical media + writes them to the user space program. + + When a program opens /dev/net/tun, driver creates and registers corresponding + net device tunX or tapX. After a program closed above devices, driver will + automatically delete tunXX or tapXX device and all routes corresponding to it. + + +
+ +
+ Set up the linux Kernel + <footnote><para>much of the information of the following section is taken from + <ulink url="http://maconlinux.org/lists/mol-general/August01/0056.html"> + this email from Samuel Rydh of the Mac-On-Linux list</ulink></para></footnote> + +First make sure the tuntap module is included in the kernel : + + + if you use a recent distribution, chances are that the needed modules are already build + Make sure that "Kernel module loader" - module auto-loading support is enabled in your kernel. + Add following line to the /etc/modules.conf: alias char-major-10-200 tun + Run: depmod -a The driver will be automatically loaded when application access /dev/net/tun. + + + Otherwise, recompile the kernel, including the configuration option + CONFIG_TUN (Network device support -> Universal TUN/TAP device driver support) + + + + + +Make sure there is a /dev/net/tun device. +(Can be created with 'mkdir /dev/net ; mknod /dev/net/tun c 10 200'). + + + + +In the same way, to use masquerading, you need a kernel with the following options : + + CONFIG_IP_NF_CONNTRACK (Connection tracking) + CONFIG_IP_NF_IPTABLES (IP tables support) + CONFIG_IP_NF_NAT (Full NAT) + + + +Some of the other options in this group is probably also needed, +(but the default setting should be OK). + + + +
+ +
+ Configure Bochs to use the tuntap interface + Make sure Bochs has ne2000 support. If you have to recompile Bochs, + --enable-ne2000 when running ./configure + (see ) + + edit your .bochsrc configuration file and add something like : + ne2k: ioaddr=0x300, irq=9, mac=fe:fd:00:00:00:01, + ethmod=tuntap, ethdev=/dev/net/tun0, script=/path/to/tunconfig + + + + Since the tuntap interface cannot be configured until a process opens it, + Bochs may run a script file for you. In this case + /path/to/tunconfig should be changed to match + the actual place where you'll create this script. + +
+ +
+Set up the private network between the host and the guest + + We'll set up a private network between the host and the guest with the following parameters: + + Host IP : 192.168.1.1 + Guest IP : 192.168.1.2 + + If your parameters are different, adapt the rest of the section to suit your needs. + + + Create the /path/to/tunconfig script : + + #!/bin/bash + /sbin/ifconfig ${1##/*/} 192.168.1.1 + + The script get the interface name as the first parameter. Linux + will forward incoming packets between interfaces. + + + Make it executable :chmod 755 /path/to/tunconfig + + + Run Bochs, install the guest OS, and set the following network parameters in the guest OS: + + IP: 192.168.1.2 + netmask: 255.255.255.0 + gateway: 192.168.1.1 + nameserver: whatever is used in linux + + + + Bochs must be started by root (at least for now - the + script won't have root privileges otherwise). + + + You may also have to edit /etc/hosts.allow in the host OS and add : + + ALL: 192.168.1.2 + + Don't forget to set up the route on the guest. + + + At this point, you should be able to ping/telnet/ftp/ssh the guest from the host + and vice-versa. + +
+ +
+Set up the host to masquerade the guest network accesses + + We are going to set up standard masquerading configuration. Edit + the /path/to/tunconfig script ans add : + + /sbin/iptables -D POSTROUTING -t nat -s 192.168.1.0/24 -d ! 192.168.1.0/24 -j MASQUERADE >& /dev/null + /sbin/iptables -t nat -s 192.168.1.0/24 -d ! 192.168.1.0/24 -A POSTROUTING -j MASQUERADE + echo 1 > /proc/sys/net/ipv4/ip_forward + + + + The configuration assumes the default policy is + ACCEPT (can be examined by doing '/sbin/iptables -L') + + + The iptables package must be installed. + And voila... The host should forward the packets of the guest to the rest of your network. + You could even have acces to the internet... + &FIXME; add nice screenshot + + + You may need to load other modules if you want to use other fancy protocols (ftp,etc...) + + + +
+
+ +
+Using Bochs internal debugger + + +Note, if you are looking for a graphical front-end for the +bochs debugger, you may want to check out +BFE. This is a +package written by a Bochs user which can interface with +the text based Bochs debugger. No linking is necessary. +It's not part of Bochs, but you may find it useful. + + + +You can now conditionally compile in a GDB like command line debugger, that +allows you to set breakpoints, step through instructions, and other +useful functions. If there isn't a command for something you believe +is generally useful for the debugger, let me know and I'll implement +it if possible. + + + +To use the debugger, you must configure Bochs with the + and flags. +For example: + + ./configure --enable-debugger --enable-disasm + + + + +You must use flex version 2.5.4 or greater. I have heard that +version 2.5.2 will not work. + + + +When you first start up Bochs, you will see the command line prompt + + + bochs:1> + + +From here, you may use the following commands: + + +
+Execution Control + + + c continue executing + cont + continue + + s [count] execute count instructions, default is 1 + step [count] + + s [cpu] [count] for SMP simulation, execute count instructions on cpu, default is 1 + step [cpu] [count] + + s all [count] for SMP simulation, execute count instructions on all cpus + step all [count] + + Ctrl-C stop execution, and return to command line prompt + Ctrl-D if at empty line on command line, exit + + q quit debugger and execution + quit + exit + + +
+ +
+BreakPoints + + + NOTE: The format of 'seg', 'off', and 'addr' in these descriptions, + are as follows. I don't have any way to set the current radix. + + hexidecimal: 0xcdef0123 + decimal: 123456789 + octal: 01234567 + + vbreak seg:off Set a virtual address instruction breakpoint + vb seg:off + + lbreak addr Set a linear address instruction breakpoint + lb addr + + pbreak [*] addr Set a physical address instruction breakpoint + pb [*] addr (the '*' is optional for GDB compatibility) + break [*] addr + b [*] addr + + info break Display state of all current breakpoints + bpe n Enable a breakpoint + bpd n Disable a breakpoint + delete n Delete a breakpoint + del n + d n + + + +
+ +
+Memory WatchPoints + + + + watch read addr Insert a read watch point at physical address addr + watch r addr Insert a read watch point at physical address addr + + watch write addr Insert a write watch point at physical address addr + watch w addr Insert a write watch point at physical address addr + + watch Display state of current memory watchpoints + + watch stop Stop simulation when a watchpoint is encountered (default) + watch continue Do not stop simulation when a watchpoint is encountered + + unwatch addr Remove watchpoint to specific physical address + unwatch Remove all watch points + + trace-mem on/off Enable/Disable memory access tracing + + + +
+ +
+Manipulating Memory + + + x /nuf addr Examine memory at linear address addr + xp /nuf addr Examine memory at physical address addr + n Count of how many units to display + u Unit size; one of + b Individual bytes + h Halfwords (2 bytes) + w Words (4 bytes) + g Giant words (8 bytes) + NOTE: these are *not* typical Intel nomenclature sizes, + but they are consistent with GDB convention. + f Printing format. one of + x Print in hexadecimal + d Print in decimal + u Print in unsigned decimal + o Print in octal + t Print in binary + + n, f, and u are optional parameters. u and f default to the last values + you used, or to w(words) and x(hex) if none have been supplied. + n currently defaults to 1. If none of these optional parameters are + used, no slash should be typed. addr is also optional. If you don't + specify it, it will be the value the next address (as if you had + specified n+1 in the last x command). + + setpmem addr datasize val Set physical memory location of size + datasize to value val. + + crc addr1 addr2 Show CRC32 for physical memory range addr1..addr2 + + + +
+ +
+Info commands + + + r|reg|regs|registers List of CPU integer registers and their contents + fp|fpu List of all FPU registers and their contents + mmx List of all MMX registers and their contents + sse List of all SSE registers and their contents + sreg Show segment registers and their contents + dreg Show debug registers and their contents + creg Show control registers and their contents + + info cpu List of all CPU registers and their contents + info eflags Show decoded EFLAGS register + info break Information about current breakpoint status + info tab Show paging address translation + + +
+ +
+Manipulating CPU Registers + + + set reg = expr Change a CPU register to value of expression. + Currently only general purpose registers are supported, + you may not change: + eflags, eip, cs, ss, ds, es, fs, gs. + + Examples: set eax = 2+2/2 + set esi = 2*eax+ebx + + registers List of CPU registers and their contents + regs + reg + r + + +
+ +
+Disassembly commands + + + disassemble start end Disassemble instructions in given linear address + range, inclusive of start, exclusive of end. + Use "set $disassemble_size =" to tell + debugger desired segment size. Use a value for + end of less than start (or zero) if you only + want the first instruction disassembled. + + disassemble switch-mode Switch between Intel and AT&T disassebly styles + for debugger disassembler. + + disassemble size = n Tell debugger what segment size to use when + the "disassemble" command is used. Use values + of 0, 16 or 32 for n. Value of 0 means + "use segment size specified by current CS + segment". Default is 0. + + set $auto_disassemble = n Cause debugger to disassemble current instruction + every time execution stops if n=1. Default is 0. + Segment size of current CPU context is used for + disassembly, so the "disassemble size" variable is + ignored. + + set disassemble on The same as 'set $auto_disassemble = 1' + set disassemble off The same as 'set $auto_disassemble = 0' + + +
+ +
+Instruction tracing + + + trace on Disassemble every executed instruction. Note + that instructions which caused exceptions are + not really executed, and therefore not traced. + + trace off Disable instruction tracing. + + +
+ +
+Instrumentation + + +To use instrumentation features in bochs, you must compile in support for it. +You should build a custom instrumentation library in a separate directory in +the "instrument/" directory. To tell configure which instrumentation library +you want to use, use the "--enable-instrumentation" option. + +The default library consists of a set of stubs, and the following are +equivalent: + + + ./configure [...] --enable-instrumentation + ./configure [...] --enable-instrumentation="instrument/stubs" + + +You could make a separate directory with your custom library, +for example "instrument/myinstrument", copy the contents of +the "instrument/stubs" directory to it, then customize it. Use: + + + ./configure [...] --enable-instrumentation="instrument/myinstrument" + + +
+ +
+Instrumentation commands + + + instrument [command] calls BX_INSTR_DEBUG_CMD instrumentation callback with [command] + + +
+ +
+Other Commands + + +ptime + +Print the current time (number of ticks since start of simulation). + +sb delta + +Insert a time break point "delta" instructions into the future ("delta" is a 64-bit integer followed by "L", for example 1000L). + +sba time + +Insert a time break point at "time" ("time" is a 64-bit integer followed by "L", for example 1000L). + +record filename + +Record console input to file filename. The file consists of +zero or more lines of the form "%s %d %x", where the first word is the +event type, the second is a time stamp and the third is event specific +data. + +playback filename + +Playback console input from file filename. Additional input can +be given directly in the console window. Events in the file will be +played back at times relative to the time when the playback command +was executed. + +print-stack [num words] + +Print the num words top 16-bit words on the stack. Num +words defaults to 16. Only works reliably in protected mode when +the base address of the stack segment is zero. + +modebp + +Toggles CPU mode switch breakpoint. + +ldsym [global] filename [offset] + +Load symbols from file filename. If the global keyword is +added, then the the symbols will be visible in all contexts for which +symbols have not been loaded. Offset (default is 0) is added to +every symbol entry. The symbols are loaded in the current (executing) +context. + + + +The symbol file consists of zero or more lines of the format "%x %s". + +show [string] + + + Toggles show symbolic info (calls to begin with). + show - shows current show mode + show mode - show, when processor switch mode + show int - show, when interrupt is happens + show call - show, when call is happens + show ret - show, when iret is happens + show off - toggles off symbolic info + show dbg-all - turn on all show flags + show dbg-none - turn off all show flags + + +
+ +
+ +Related links + + +&FIXME; add links + + Cosimulation + Instrumentation + + +
+
+ +
+Using Bochs and the remote GDB stub + +This section covers how you can use Bochs with a remote GDB stub to debug your kernel. + + +
+Configuring Bochs + +The GDB stub is not active in standard Bochs binary package. So you must recompile Bochs. +Download the Bochs source package, unpack it and run the configure script +with the --enable-gdb-stub argument. + + + $ ./configure --enable-gdb-stub + + +After that, just run make and you should have a Bochs binary that contain a GDB stub in your directory. + +
+ +
+Running Bochs + +Enable the gdbstub option in bochsrc, then just start Bochs as normal. Bochs will stop and wait for GDB to connect to the stub. + +
+ +
+Running GDB + +Bochs GDB stub waits for a connection on TCP port 1234. Just start GDB like this: + + + $ gdb YOUR-KERNEL + . + . + . + (gdb) target remote localhost:1234 + Remote debugging using localhost:1234 + 0x0000fff0 in ?? () + (gdb) + + +You are now connected to the remote GDB stub in Bochs. You are now able to set breakpoints. +Use the continue (c) command to continue the simulation. + +Hitting ^C works. Example: + + + Program received signal 0, Signal 0. + syscall_testsuite_result (aux=0x1f11fe4) at ../rtmk/syscalls.c:33 + 33 { + (gdb) + + +
+ +
+ +
Using the serial port + + This section describes what is possible to do with Bochs serial port emulation. + These examples use dlxlinux disk image + (downloaded from + + http://bochs.sourceforge.net/guestos/dlxlinux3.tar.gz + ) running as guest, on a debian x86 linux 2.4.19 host. + + + For the examples to work in dlxlinux, after you login as root, you will need to + kill the running gpm, as it grabs the serial port. + +Welcome to DLX V1.0 (C) 1995-96 Erich Boehm + (C) 1995 Hannes Boehm + + +dlx login: root +Linux 1.3.89. +dlx:~# ps | grep gpm + 30 S0 S 0:00 /usr/bin/gpm -t bare + 40 1 S 0:00 grep gpm +dlx:~# kill -9 30 +dlx:~# + + + +
Logging serial port output to a file + + The first example shows how to log information sent to the serial port + on the guest system into a file on the host system. + + + Update the com1: section of your configuration file: + +com1: enabled=1, mode=file, dev=serial.txt + + After you've launch dlxlinux, everything sent to the serial port will be + logged to serial.txt : + +dlx:~# echo "logging to the serial port" > /dev/cua0 + + +host$ cat serial.txt +logging to the serial port +host$ + + +
+
Interactivity : connecting to a virtual terminal + + The second example shows how to connect to the guest OS, using a + virtual terminal on the host OS. + + + First, you need to find an unused virtual terminal. Typically, + X uses vt7; vt8 and up are unused. On my system, I can + switch from X to vt9 by pressing ctrl-alt-f9 : this virtual + terminal is not used, the screen is all black. Pressing alt-f7 + switches back to X. + + + Once you found an unused vt, update the com1: section of your + configuration file: + +com1: enabled=1, mode=term, dev=/dev/tty9 + + The number must be set according to the terminal you want to use (here 9). + + + Now, launch dlxlinux. After you log in as root and kill gpm, + enter the following command: + +dlx:~# /sbin/agetty 38400 cua0 + + If you switch to vt9, you can see dlx welcome banner, and the login prompt: + +Welcome to DLX V1.0 (C) 1995-96 Erich Boehm + (C) 1995 Hannes Boehm + + +dlx login: + + Note that dlxlinux is configured so you can not login as root from a + serial port. If you want to login, you have to create a new user first. + + + Also, if you plan to use this feature, the best would be to deactivate + gpm in /etc/rc.d/rc.local, and add a agetty line in /etc/inittab, + for example: + +T0:1234:respawn:/bin/agetty 38400 cua0 + + +
+
Interactivity : connecting to a pseudo terminal + + The third example is very similar to the second one, except that we + connect to the guest OS with kermit as client, and we the connection + is done through a pseudo terminal. + + + This example uses /dev/ptyp0 and /dev/ttyp0 as pseudo terminal pair. + We will tie Bochs to the controlling terminal, whereas kermit will + use the slave terminal. + + + Update the com1: section of your configuration file: + +com1: enabled=1, mode=term, dev=/dev/ptyp0 + + and lauch dlxlinux. After you log in as root, enter the command: + +dlx:~# /sbin/agetty 38400 cua0 + + Then in the host OS, launch kermit : + +host$ kermit -l /dev/ttyp0 +C-Kermit 7.0.196, 1 Jan 2000, for Linux + Copyright (C) 1985, 2000, + Trustees of Columbia University in the City of New York. +Type ? or HELP for help. +(/tmp/) C-Kermit>connect +Connecting to /dev/ttyp0, speed 0. +The escape character is Ctrl-\ (ASCII 28, FS) +Type the escape character followed by C to get back, +or followed by ? to see other options. +---------------------------------------------------- + +Welcome to DLX V1.0 (C) 1995-96 Erich Boehm + (C) 1995 Hannes Boehm + + +dlx login: + + The same comments as for example 2 apply here. + +
+
+ +
+BIOS Tips +
+ Booting from CD-ROMs + +A bootable CD-ROM has a special layout that is detected by the +BIOS boot loader code, and executed if it conforms the specifications. +This layout is called "El Torito Bootable CD-ROM Format Specification" +and has been published by Phoenix and IBM. A copy of this spec is on +Bochs tech specs page. + + +El Torito specifies 3 ways to have a bootable CD: + + +floppy emulation boot: A standard floppy image is burnt on the CD. +In this case the BIOS has to redirect all first floppy accesses to this +image and the real floppy drive becomes the second one. + + +a "no emulation" boot: In this case the BIOS is instructed to load an +arbitrary number of sectors straight into memory, and execute it. + + +hard disk emulation: A hard disk image is burnt on the CD. The +BIOS has to redirect all hard disk accesses to that image. The real hard disks +are still available, with BIOS numbers 81h and up. + + + +In Bochs 2.0, hard disk emulation is not implemented in the BIOS. +There are also subtilities about multiple boot-images CD-ROMs, that are +not handled by Bochs. + + + +However, our BIOS may be more strict than real PC BIOSes, I don't know. +But I would definitely be interested to know of any CD that can boot +on real hardware, but does not in Bochs. + + + +When failing to boot from CD-ROM, the BIOS outputs +the reason of the failure as +an error code, in the log file, and on the screen. + + + +Here is a summary of what can happen when booting from the CD. + + +CD Boot error codes + + + + + Error code + Reason + + + + 0x01 no atapi device found + 0x02 no atapi cdrom found + 0x03 can not read cd - BRVD + 0x04 cd is not eltorito (BRVD) + 0x05 cd is not eltorito (ISO TAG) + 0x06 cd is not eltorito (ELTORITO TAG) + 0x07 can not read cd - boot catalog + 0x08 boot catalog : bad header + 0x09 boot catalog : bad platform + 0x0A boot catalog : bad signature + 0x0B boot catalog : bootable flag not set + 0x0C can not read cd - boot image + + +
+ + + +0x01 no atapi device found +0x02 no atapi cdrom found + + +For the first two errors, an ata-*: type=cdrom is probably missing +from the configuration file. This is what you get if no cdrom has +been defined in Bochs conf file. + + + + +0x03 can not read cd - BRVD + + +For this error, the cdrom support has not been compiled in Bochs, +or Bochs could not open the file or device. This is what you get if +Bochs is not able to read the cd. + + + + +0x04 cd is not eltorito (BRVD) +0x05 cd is not eltorito (ISO TAG) +0x06 cd is not eltorito (ELTORITO TAG) + + +For these errors, the data has been read from the cd, but +the cd does not conform to the El Torito specification. This +is what you get if the cd is not bootable. + + + + +0x08 boot catalog : bad header +0x09 boot catalog : bad platform +0x0A boot catalog : bad signature +0x0B boot catalog : bootable flag not set + + +now the cd is eltorito, but the boot catalog is corrupted, or +the cd was made to boot on a ppc system. This should not happen +for a x86 bootable cd. + + + + +0x07 can not read cd - boot catalog +0x0C can not read cd - boot image + +here, specific part of the cd could not be read. This should +definitely not happen. + +
+ +
+ Disk translation + +Since the beginning of the PC era, disks have grown in size by a factor of 10000. Due to +differences between the ATA specification and BIOSes implementations, when disks reached +critical sizes, it +became necessary to translate the CHS geometry (cylinders, heads, sectors per track) +between the BIOS (int 13h) and the ATA interface. Please refer to the +ATA-FAQ +and +Hale Landis' document +for a complete discussion of the problem. + + +Unfortunately, there has never been any standard on the translation algorithms. + + +Bochs implements 4 well-known algorithms, selectable in the configuration file +in the "ataX-xxxx: ..., translation='algorithm'" section. + + +Disk translation algorithms + + + + Algorithm + Maximum disk size + Maximum logical and physical geometry (CHS) + Description + + + + + none + 528MB (1032192 sectors) + + LCHS:1024/16/63 + PCHS:1024/16/63 + + + no translation is done. The CHS received at the int13h interface + is sent as is to the ATA interface. + + + + large + 4.2GB (8257536 sectors) + + LCHS:1024/128/63 + PCHS:8192/16/63 + + + a standard bitshift algorithm (named Extended-CHS) + is used to translate the CHS between + the int13h interface + and the ATA interface. The translation is achieved by + multiplying/dividing the cylinder/head count by a power of 2 + (2, 4 or 8). + (a factor of 16 could not be used because the + head count would become 256, and MS-DOS thought this was 0) + Note that the number of sectors per track is not changed, so + a lower spt value will lead to a lower maximum disk size. + + + + echs + + + synonym for large + + + rechs + 7.9GB (15482880 sectors) + + LCHS:1024/240/63 + PCHS:15360/16/63 + + + a revised bitshift algorithm (called Revised Extended-CHS) + is used to translate the CHS between + the int13h interface + and the ATA interface. First the number of physical heads is forced to + 15, and the number of cylinders is adjusted accordingly. + Then, as in the simple extended CHS algorithm, the translation + is achieved by + multiplying/dividing the cylinder/head count by a power of 2 + (2, 4, 8 or 16). + The head count being forced to 15, it can safely be multiplied by 16 + without crashing dos. + Note that the number of sectors per track is not changed, so + a lower spt value will lead to a lower maximum disk size. + + + + lba + 8.4GB (16450560 sectors) + + LCHS:1024/255/63 + PCHS:16320/16/63 + + + a LBA-assisted algorithm + is used to translate the CHS between + the int13h interface + and the ATA interface. The translation is achieved by + first computing the physical size of the disk (LBA=C*H*S). + Then the sectors per track is forced to 63, and the head count + to 255. Then the cylinder count is computed (C=LBA/(63*255)) + Note that the number of sectors per track is forced to 63 + in the logical geometry, regardless of the actual geometry + reported by the disk. + Also note that the LBA-assisted algorithm has nothing to do with + LBA access at the ATA interface. + + + + auto + + + the best suited algorithm between none, large and lba is used + + + +
+ + +Setting a specific CHS translation should be done if you use a disk dump +of an actual disk, or use a real disk as a block device. You need to +know which geometry was used to format the disk, and which translation +was used. You must not set the translation to 'auto'. + + + + +rechs translation should only be useful for Compaq users who wants to +use a disk as a block device. Please report if you know any other +system that use such translation. + + + + +If you plan to create a new disk image (for example with bximage), +format it and install an OS on it, select the "auto" translation +for an automatic selection +of the best algorithm based on the disk image size. Be warned that an image created +with the "auto" translation might not be readable with previous versions of Bochs. +Upward compatibility will be maintained. + + + + +This translation applies only to int13h BIOS disk accesses. Older OSes (e.g. MS-DOS) +tend to use them a lot. On modern OSes, disk accesses through BIOS int13h are +limited to boot loaders. +The usual rules and tricks of the installed OS still apply (ie 1024 cylinders boot limit). + + + +
+
+ +
How to enter special key combination + +Your window manager may trap the key combination you want to enter +in Bochs guest OS, for example controlaltdelete. Here is a work-around: + + +Press and hold controlalt, +move your mouse cursor outside of the Bochs window. Release them, move +the cursor back in the Bochs window and press delete. + + +This should work for any key combination. + + +If you need one key combination frequently, set it up as user key combination +in your configuration file. This key combination is sent to the guest OS +when you press the user button in the headerbar. +Depending on the used display_library option, +it may even be possible to edit the shortcut before sending it. + +
+ +
+ Notes about VESA usage + + + Since Bochs 1.4 it is possible to use VESA graphics. There are some limitations in + the current implementation, but in general it should work ok (we have run several test + programs, the XFree86 VESA display driver, etc.) + + + + In order to use VESA VBE, you need to compile Bochs using the + option and enable it in your bochsrc by setting the + vga option to vbe. + Finally, you need to use the + LGPL'd VGABIOS + as vgaromimage option for + applications to correctly detect VESA support. + + + + The VGABIOS is already included in the Bochs release, so no separate download is necessary. + + + + To take advantage of the VBE, you must tell Bochs to use the LGPL'd VGA BIOS + version 0.4c or higher. A current version of the VGA BIOS will work. + + + +Current limitations: + + 4bpp modes support is incomplete (8, 15, 16, 24 and 32bpp should work) + banked mode is very slow (if you can, just use Linear Frame Buffering instead!) + only 320x200, 640x400, 640x480, 800x600, 1024x768 are currently supported + + + + +Interesting Facts: + + You need a display driver capable of using the VESA BIOS for this to work + (a recent XFree86 will do, Windows 9x/NT/2K/XP probably will not work 'out of the box'. + Currently the VBE2 extension should be supported ok + + + +
Instructions to setup Bochs VBE in Windows Guest OS +This was contributed by Martin Bochnig in February 2004. + +Instructions for Win95/98: +========================== +I can only confirm that SciTech finally made a VBE driver +for Windows. It works out of the box, at least with win95 +as guest OS, provided you use Bochs 2.1 with the LGPL +vgabios. + +Here is how I did it : +- install win95 with the vga driver. +- download sdd 7 beta from +- download pmhelp.vxd from +- copy pmhelp.vxd to the win95 system directory +- install sdd7 + +800x600 and 1024x768 in 16 and 24 bpp modes here. +I did not try 32bpp. + + +This was contributed by Stanislav Shwartsman in September 2004. + +Instructions for Win2000/XP: +============================ + +Bochs VBE Display Drivers for Windows NT/2000 + + +
+
+ +
+ Notes about Cirrus SVGA usage + + + Since Bochs 2.2 it is possible to use Cirrus SVGA graphics. The Cirrus device + supports both ISA and PCI depending on the bochsrc settings. + If PCI is disabled or the Cirrus card is not assigned to a PCI slot, it appears + as a CL-GD5430 ISA with 2MB VRAM. If you assign the Cirrus card to a PCI slot, + it appears as a CL-GD5446 PCI with 4MB VRAM. + + + In order to use Cirrus SVGA, you need to compile Bochs using the + option and enable it in your bochsrc by setting the + vga option to cirrus. + Finally, you need to use the Cirrus version of the + LGPL'd VGABIOS + as vgaromimage option for + applications to correctly detect Cirrus support. + + + # Enable CL-GD5446 PCI + vga: extension=cirrus + vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest-cirrus + i440fxsupport: enabled=1, slot1=cirrus + + + + The VGABIOS is already included in the Bochs release, so no separate download is necessary. + +
+ +
Disk Image Modes + +Bochs can handle independent disk image format for each +disk present on the ata interfaces. + +The disk image type is selected in the configuration file +by the "mode" option of the ataX-xxx directives. +Example: + + +ata0-master: type=disk, mode=flat, path=10M.sample, cylinders=306, heads=4, spt=17 + + + + + +If unspecified, the default "mode" is flat. + + + + +Supported Disk Modes + + + + Name + Description + Features + + + + flat one file, flat layout + + accessible with mtools or winimage-like tools + + + concat multiple files, concatenated + + mappable to contained partitions + + + external accessed through an external C++ class + + developer specific, needs a C++ class at compile time + + + dll accessed through a DLL + + developer specific, windows only + + + sparse up to 10 layers stackable files + + commitable, rollbackable, growing + + + vmware3 vmware3 disk support + + vmware version 3 compatibility + + + vmware4 vmware4 disk support + + vmware version 4 compatibility + + + undoable flat file with a commitable redolog + + commitable, rollbackable + + + growing one growing file + growing + + + volatile flat file with a volatile redolog + + always rollbacked + + + vvfat local directory appears as VFAT disk (with volatile redolog) + + optional commit or rollback + + + + +
+
+ + + +
flat + + +
description + +In flat mode, all sectors of the harddisk are stored in one flat file, +in lba order. + +
+
image creation + +Flat disk images can be created with the bximage utility +(see for more information). + +
+
path + +The "path" option of the ataX-xxx directive in the configuration file +must point to the flat image file. + +
+
external tools + +Flat images content can be accessed from the host by the +following tools : + + mtools (see ) + mount with a loopback (see ) + Winimage / DiskExplorer (see ) + Bochs Tools (see ) + + +
+
typical use + +Flat mode is Bochs default harddisk layout. This is also +the layout of disk images provided on Bochs websites. + +
+
limitations + +On some host OSes, Bochs flat disk images are limited to 2GiB. + +
+
+ + +
concat + + +
description + +In concat mode, all sectors of the harddisk are stored in several flat files, +in lba order. + +
+
image creation + +Disk images for the usage in 'concat' mode can be created with the bximage +utility (see for more information). + +
+
path + +The "path" option of the ataX-xxx directive in the configuration file +must point to the first file (e.g. win95-1). The lower layer files names are +found by adding 1 to the last character (e.g. win95-2, win95-3, etc.). + +
+
external tools + +If every single file contains a complete partition, they can be accessed +with same tools as the 'flat' mode images. + +
+
typical use + +If the partition sizes and file sizes are set up correctly, this allows you to +store each partition in a separate file, which is very convenient if you want +to operate on a single partition (e.g. mount with loopback, create file system, +fsck, etc.). + +
+
limitations + +On some host OSes, there is a limit of 2GiB per file. + +
+
+ +
external/dll + + +
description + +This mode is only useful for developers and needs an additional C++ class +compiled in, or an additional DLL linked to Bochs. + +
+
+ +
sparse + + +
description + + Sparse disk support has been added by JustinSB. Sparse disk features are: + + + + Large hard drive can be created, and only used space will be stored + in the file. In practice, on Unix, this is not a large gain as it is + done anyway. + + + + + Multiple sparse drive images can be mounted on top of each other. + Writes go to the top image. This allows several similar configurations + to share a master "base" file, and also allows file system rollback or + no-write options. Up to 10 disk images can be layered on top of each other. + + + + +
+
image creation + +Sparse disk images must be created with the bximage utility +(see for more information). +Be sure to enter "sparse" when selecting the image type. + +
+
path + +The "path" option of the ataX-xxx directive in the configuration file +must point to the top layered file. The lower layer files names are found by +substracting 1 from the last character (must be a digit) + +
+
external tools + +No external tool support Sparse disk images yet. + +
+
typical use +
+ Space Saving + + Create a sparse disk image using bximage. Set size to eg 10GB. + Only allocated space will be stored, + so your drive image should be only about as large as the files stored on it. + +
+ +
+ Disk Rollback + + + + + Create a sparse disk image called "c.img.0". Point .bochsrc at "c.img.0". + In bochs, install your favorite OS. Switch off bochs. + + + + + Create a sparse disk image (of the same size) + and name it "c.img.1". Point .bochsrc at "c.img.1" + "c.img.0" is visible, but all writes go to "c.img.1". + After using bochs, you can simply delete + "c.img.1" to undo changes and go back to a clean OS install. + + + + +
+ +
+ Disk Optional Commit + + + + + Create a sparse disk image called "c.img.0". Point .bochsrc at "c.img.0". + In bochs, install your favorite OS. Switch off bochs. + + + + + Create a sparse disk image (of the same size) and name it "c.img.1". + Point .bochsrc at "c.img.1" + "c.img.0" is visible, but all writes go to "c.img.1". + After using bochs, if you want to keep the + changes, use the (currently non-existent) merge utility + to make a single unified drive image. + + + + + Alternatively simply create a new partition on top called "c.img.2". + + + + +
+ +
+ Common Base + + + + Create a sparse disk image called "base.img". Point .bochsrc at "base.img". + In bochs, install your favorite OS. Switch off bochs. + + + + + Create a sparse disk image (of the same size) and name it "www.img.1". + Make "wwww.img.0" a symlink to + "base.img". Point .bochsrc at "www.img.1". Using bochs, install a webserver. + + + + + Create a symlink to "base.img" called "db.img.0". + Create a sparse disk image (of the same size) + and name it "db.img.1". Point .bochsrc at "db.img.1". + Using bochs, install a database server. + + + + + + Now both a database server and webserver can be + run in separate virtual machines, but they share the common OS image, + saving drive space. + +
+ +
+
limitations + + There is a need for supporting utilities (yet unwritten) : + + + to merge two sparse disk images into a single image + + + to defragment a sparse disk image and remove unused space + + + +
+
+ +
vmware3/vmware4 + + +
description + +Sharvil Nanavati has added vmware3/4 disk image support into Bochs +for Net Integration Technologies, Inc. +You should be able to use disk images created by vmware version 3 and 4. + +
+
image creation + +Create such disk image with vmware version 3 or 4. + +
+
path + +The "path" option of the ataX-xxx directive in the configuration file +must point to the vmware3/4 disk image. + +
+
external tools + +&FIXME; give a look at vmware3/4 tools : disk image creation, etc. + +
+
typical use + +If you want to use an existing vmware3/4 disk image. + +
+
limitations + +Only vmware versions 3 and 4 disk image files are supported. + +
+
+ +
undoable + + +
description + + Undoable disks are commitable/rollbackable disk images. + An undoable disk is based on a read-only flat image + (see ), associated with + a growing redolog, that contains all changes (writes) + made to the flat image content. + + + This redolog is dynamically created at runtime, if it does not + previously exists. + + + All writes go to the redolog, reads are done from the + redolog if previously written, or from the flat file + otherwise. + + + If unspecified with the "journal" option of the ataX-xxx directive, + the redolog file name is created by adding a ".redolog" + suffix to the flat image name. + + + File size of the redolog can grow up to the total disk + size plus a small overhead due to internal data management + (about 3% for a 32MiB disk, + less than 0.5% for a 2GiB disk). + + + After a run, the redolog will still be present, so the changes + are still visible the next time you run Bochs with this disk image. + + + After a run, the redolog can be committed (merged) + to the flat image with the bxcommit utility. + + + After a run, the redolog can be rollbacked (discarded) + by simply deleting the redolog file. + + + + In this mode, the flat file is always open in read-only mode, + so it can safely be stored on a read-only medium (for example on a cdrom). + + +
+
image creation + +The flat disk images must be created with the bximage utility +(see for more information). + The growing redolog is created automatically if needed. + +
+
path + + The "path" option of the ataX-xxx directive in the configuration file + must be the flat image name. The redolog name can be set with the "journal" + option of the same directive. + If not set, the redolog name is created by adding the + ".redolog" suffix to the flat image name. + +
+
external tools + + See for tools + to access the flat disk image content. + + + + The up-to-date content can only be seen after you commit the redolog + to the flat file with the bxcommit utility. + + +
+
typical use + +&FIXME; to be completed + +
Commit + +&FIXME; to be completed + +
+
Rollback + +&FIXME; to be completed + +
+
Common Base + +&FIXME; to be completed + +
+
Harddisk Image on a Read-Only Medium + +&FIXME; to be completed + +
+
+
limitations + +&FIXME; to be completed + +
+
+ +
growing + + +
description + + Growing disk images start as a small files, and + grow whenever new data is written to them. + + + Once a sector is + written in the growing file, subsequent writes to the same + sector will happen in place. + + + File size of Growing disk images can go up to the total disk + size plus a small overhead due to internal data management. + (about 3% for a 32MiB disk, + less than 0.5% for a 2GiB disk). + +
+
image creation + +Growing disk images must be created with the bximage utility +(see for more information). +Be sure to enter "growing" when selecting the image type. + +
+
path + + The "path" option of the ataX-xxx directive in the configuration file + must be the growing image name. + +
+
external tools + +No external tool support Growing disk images yet. + +
+
typical use + +Growing disk images can be used whenever you want to maximize disk space. +However, please note that Bochs will not check if enough disk space is available +before writing new data. If no disk space is available, a panic will occur. + +
+
limitations + +&FIXME; to be completed + +
+
+ +
volatile + + +
description + + Volatile disks are always-rollbacked disk images. + An volatile disk is based on a read-only flat image + (see ), associated with + a growing temporary redolog, that contains all changes (writes) + made to the flat image content. All data written to + the disk image are lost at the end of the Bochs + session. + + + The redolog is dynamically created at runtime, when + Bochs starts, and is deleted when Bochs closes (win32) + or just after it has been created (Unix). + + + All writes go to the redolog, reads are done from the + redolog if previously written, or from the flat file + otherwise. + + + If unspecified with the "journal" option of the ataX-xxx directive, + the redolog file name is created by adding a ".redolog" + suffix to the flat image name. + + + File size of the redolog can grow up to the total disk + size plus a small overhead due to internal data management + (about 3% for a 32MiB disk, + less than 0.5% for a 2GiB disk). + + + After a run, the redolog is not any more present, so the changes + are discarded. + + + + In this mode, the flat file is always open in read-only mode, + so it can safely be stored on a read-only medium (for example on a cdrom). + + +
+
image creation + +The flat disk images must be created with the bximage utility +(see for more information). + The growing redolog is created automatically. + +
+
path + + The "path" option of the ataX-xxx directive in the configuration file + must be the flat image name. The redolog name can be set with the "journal" + option of the same directive. + If not set, the redolog name is created by adding the + ".redolog" suffix to the flat image name. + A random suffix is also appended to the redolog name. + +
+
external tools + + See for tools + to access the flat disk image content. + +
+
typical use + +&FIXME; can be completed + +
Repeatable simulations + +&FIXME; to be completed + +
+
Multiple Bochs instances + +&FIXME; to be completed + +
+
Harddisk Image on a Read-Only Medium + +&FIXME; to be completed + +
+
+
limitations + +&FIXME; to be completed + +
+
+ +
vvfat + + +
description + + The "vvfat" disk image mode is mostly a port of Qemu's "virtual VFAT" block + driver (written by Johannes E. Schindelin). It supports the read-only part + of this implementation plus some additions. The structures of the + virtual disk are created from the contents of the specified local directory + when Bochs is starting. All writes to this virtual disk go to a volatile + redolog and when closing Bochs, the user can decide whether or not to commit + the changes. If "No" is seclected, all changes will be lost when Bochs quits + and the files of the local directory are not modified. Otherwise the changes + of files and directories are committed. WARNING: Don't use important data without + backup in the "vvfat" directory when using this "optional commit" feature. + + + In addition to Qemu's "vvfat" implementation the Bochs one supports configurable + disk geometry, FAT32 and reading MBR and/or boot sector from file. When using + the autodetection feature, the CHS values 1024/16/63 (Qemu defaults) are used. + To use an MBR image file from a real disk it must be named vvfat_mbr.bin + and placed in the specified directory. Bochs uses the geometry and file system + type from this file and doesn't show it on the virtual disk. The same applies + to a boot sector image file, but it must be named vvfat_boot.bin. + Using both image file is also possible if they match (grabbed from the same disk). + + + FAT32 is enabled for disk with minimum 2 GB size, or if MBR / boot sector image + enable this filesystem. When using "vvfat" for a floppy, FAT12 is used (1.44M + media only). In all other cases FAT16 is used. Long filename support + is always present. + + + Special FAT file attributes are stored in a special file named vvfat_attr.cfg. + When using the "optional commit" feature, modified attributes are saved to this file. + The "optional commit" also supports setting the file modification date and time. + +
+
image creation + + Not necessary. The directory must exist before running Bochs. + +
+
path + + The "path" option of the ataX-xxx directive in the configuration file + must point to an existing local directory. The redolog name can be set + with the "journal" option of the same directive. If not set, the redolog + name is created by adding the filename "vvfat.dir.redolog" to the path. + A random suffix is also appended to the redolog name. + +
+
external tools + + You can use your favourite file manager to copy file to the directory you'd + like to use. The directory should not be modified while Bochs is running. + +
+
typical use + + Accessing files of the host hard drive is only possible with vvfat. + +
+
limitations + + There is no runtime write support present yet. All changes are written to + the volatile redolog and they can only be committed on Bochs exit. + + + When using the MBR from image file only the first partition is used and it + must be of type FAT16 or FAT32. FAT12 can be used for the floppy only. + An extended partition or other file system types are not supported. + +
+
+ + + + + +
+ +
Using the bximage tool + +Bximage is an easy to use console based tool for creating disk images, +particularly for use with Bochs. It is completely interactive if no command +line arguments are used. It can be switched to a non-interactive mode if all +required parameters are given in the command line. + + +When you run bximage without one of the following options, +it will appear in interactive mode and ask for all +required parameters to create an image. + +-fd Create a floppy image. +-hd Create a hard disk image. +-mode=... Image mode (for hard disks only - see the bochsrc sample for + supported options). +-size=... Image size in megabytes (e.g. 1.44 for floppy image, 10 for hard + disk image). +-q Quiet mode (don't prompt for user input). Without this option bximage + uses the command line parameters as defaults for the interactive mode. + If this option is given and one of the required parameters is missing, + bximage will fall back to interactive mode. +--help Print a summary of the command line options for bximage and exit. + +The filename parameter specifies the name of the image to be created. + + + +For an example of the usage, refer to . + +
+ +
Using the bxcommit tool + +This tool can commit redologs into flat images. + + +For now, only "undoable" redologs to flat image commits are supported. + +Sparse disk image commits may be added in the future. + + +This tool is completely interactive, and does not need any command line parameter. +Bxcommit asks for the flat image name, the redolog name, and whether to remove +to redolog file after it commits it. + + +Session example : + +$ ./bxcommit +======================================================================== + bxcommit + Undoable Disk Image Commit Tool for Bochs +======================================================================== + +What is the flat image name? +[c.img] myfile.img + +What is the redolog name? +[myfile.img.redolog] toapply.redolog + +Shall I remove the redolog afterwards? +[yes] + + +
+ +
+ + + +Guest operating systems + +In the past several tweaks were necessary to install a guest OS inside of Bochs. +Nowadays it's almost the same as installing it on a real machine. There are only +a few Bochs specific issues you should know about. Note that we cannot give you +a full installation guide if you don't know how to install an OS in the real +world. The following remarks apply to all guest OS installations. Some specific +issues are reported in the next sections. + + +First of all you need the installation media or image (floppy/CD/DVD). +For platforms that don't support raw device access it might be necessary to +create an image from the media. You must read the message regarding software +licenses in before you install or use a commercial +guest operating system in Bochs. + +Then you need to create a hard drive image with bximage. For the +required size see the documentation of the OS you'd like to install. See + how to create the image. + +Finally you have to create configuration for your guest OS. You can +edit the sample configuration distributed with Bochs or use the configuration +interface to adjust the settings. Check the documentation of your guest OS for +the required memory size, cpu speed and supported hardware. + + +Now you should be able to run Bochs and start the installation process. Depending +on the host cpu speed and the size of the guest OS it can take a few minutes or +even some hours. + + + +What disk images are available. +What works +Known problems + + + +
+ Knoppix + + + Contributed by Alexander Schuch. + + +
+ Getting Knoppix + + + Knoppix is a live CD (700M) or live DVD (3.2G) based on Debian GNU/Linux, with lots of + ready-to-run programs (web browser, office suite, a few games, and more), using + KDE as desktop environment. It can be booted directly from CD, without + any installation needed. You can download it from knoppix.org. + +
+ +
+ Preparing Bochs + + + As Knoppix runs completely from CD/DVD, you don't need to setup a hard disk. You just need to set up + the location of the downloaded ISO image in your bochsrc, and make Bochs boot + from it. Because Knoppix contains a graphical user interface, and has no other storage space but + the emulated RAM, it needs at least 128MB of it, see + megs option. Furthermore, you need to enable VBE support in + Bochs (see ). + +
+ +
+ Using Knoppix + + + There is nothing more to do! Just start Bochs and wait for Knoppix to load... + + + + You are logged in as normal user, if you want to become super user, just su. + There is no password needed (empty password). + +
+
+ +
+ + FreeBSD 5.2.1 + + + Contributed by Alexander Schuch. + + + + This section describes how to install FreeBSD 5.2.1 (miniinst) inside of Bochs, using an ISO image. + + +
+ Getting FreeBSD + + + As 5.2.1-RELEASE-i386-miniinst.iso (240M) is no longer available from + the FreeBSD FTP server, you might want to ask a (file) search engine of your choice + for a download location. Once you downloaded the file, you should check its integrity + using the provided MD5 checksum from the + FreeBSD 5.2.1 release announcement. + +
+ +
+ Preparing Bochs + + + Create a new hard disk image using bximage (see + ) with a size of at least 350M, as the standard + installation uses 280M on its own. + + + + Next, you need to setup your bochsrc so that Bochs knows about your + (still empty) hard disk, as well as about your ISO image. Make Bochs boot from CD-ROM and + start the emulation. + +
+ +
+ Installing FreeBSD + + + This is just a very short step-by-step installation guide for FreeBSD in Bochs. It + doesn't explain what you do nor why you do it, it just tells you how to do it. + For in-deepth information refer to the FreeBSD handbook: + Installing FreeBSD. + + + + FreeBSD boots up and shows a nice (text-mode) boot option screen. Just press + return there, that is, use the default option. After loading the + kernel and needed device drivers, select 'Standard' in the installation menu. + + + + A fdisk like partition program is loaded next, where you just press A + to use the entire disk, followed by Q to finish the selection. The next + dialog asks for the boot manager you want to use. Select 'Standard' and continue. + + + + In the Disklabel Editor, you have to setup the layout of your partition. If your (virtual) + hard disk is large enough, you can press A for auto-layout. However, you + need to make sure that the /usr partition is at least + 250M large, or you will end up with a 'disk full' error message during installation. If + this is not the case, select one partition after another and press D to + delete it again. After you deleted all partitions, create two new ones. The first one will + be a swap partition; press C, enter '32M' as size and select 'Swap' from + the dialog. Press C again, and accept the remaining capacity for your + filesystem partition. Choose 'FS' as partition type and enter '/' (slash) as mount point. + Your partition layout is complete now; press Q to leave the editor. + + + This 'all-in-one' partition layout is not recommended for a FreeBSD installation on a + real box; use 'auto-layout' or something comparable to that there. + + + + + You now can choose what set of programs/files (distribution) you want to install. Take + 'User' (option 8), and select 'No' when asked to install the ports collection. You are + back in the distribution selection, where you select the first item, called 'Exit'. + Choose to install from 'CD/DVD' and answer the 'Are you sure?' dialog with 'yes'. + + + + Now, while FreeBSD installs, it is a very good time to take a look at the + FreeBSD documentation, especially + the FreeBSD handbook + and the FreeBSD FAQ. + +
+ +
+ Post-installation configuration + + + All files are installed on your (virtual) hard disk now, and FreeBSD is ready for getting set + up. As this is a very basic FreeBSD installation, you just answer 'no' to nearly all questions, + but the one about your mouse: Answer 'yes' for PS/2 mouse, and choose 'Exit' at mouse configuration. + The miniinst FreeBSD ISO image contains nearly no binary packages, so don't browse the package + collection. Then, when asked to create a new user account, answer 'yes' and create a new user + called 'bochs' (or whatever you like). You might want to use /bin/csh + or /bin/tcsh as shell rather than /bin/sh. Next, + you are asked for the super user (root) password. The installation is finished now, there is + no need to visit the general configuration menu again - answer 'no' to that question. FreeBSD + will then reboot. Shutdown Bochs, as soon as the (virtual) computer boots. + +
+ +
+ Using FreeBSD + + + Open your bochsrc and change the boot sequence, so that Bochs will boot + from hard disk, rather than from CD-ROM from now on. Start Bochs again and watch the FreeBSD + boot process. + + + + Your keyboard might use the wrong keymap, so login (into FreeBSD) as super user and use + /stand/sysinstall to start the FreeBSD configuration program. Choose + 'keymap' and select the keymap you want to use. + + + + You have successfully installed FreeBSD now. You might want to shutdown FreeBSD using + shutdown -h now, quit Bochs, and create a backup of your hard disk + image, before you start playing around. + +
+
+ +
DOS +You must read the message regarding software licenses in + before you install or use MS-DOS, OS/2, DR-DOS, or any other DOS as a guest operating system in Bochs. +
Accessing your CDROM + +To access your CDROM in DOS, you must download an IDE CDROM driver. +Bochs emulates a very generic CDROM drive, and several drivers are known to +work. Others don't. This section describes how to set up your +config.sys and autoexec.bat to enable +the CDROM. + + + +The drivers that have been reported to work are +OAKCDROM.SYS that comes with several versions of Windows +and SBIDE.SYS version 1.21 from Creative +Labs + +To get it, go to Creative Labs web +site, click on Support, then click Download Files. You get to a screen +where you must select the operating system and the product for which you want +the driver. Choose DOS as the operating system, and "CD-ROM: 4x and above" as +the product. There are several choices, but you want +sbide121.exe from April 15, 1997. Version 2.0 does not +work. The download file is a self-extracting ZIP file, so on +DOS or Windows you just run it; on other platforms you can try using +the unzip command. The driver is called SBIDE.SYS. + and OAKCDROM.SYS that comes with several versions of Windows. +Copy the driver to your boot disk, and then set up the startup files as follows. + + +config.sys: + device=himem.sys + device=oakcdrom.sys /D:CD001 + -or- + device=sbide.sys /D:CD001 /P:1f0,14,3f6 + +autoexec.bat: + mscdex.exe /M:10 /D:CD001 + + + +If the files mentioned in config.sys and +autoexec.bat are not in the root directory, give the full +pathname, like c:\windows\himem.sys. + + +
+
SB16 driver for DOS + +To use the SB16 device in DOS you need to load a driver for it. The file +SBBASIC.EXE contains a self-extracting archive with all required file. +After unpacking it to C:\SB16 you can execute INSTALL.EXE +to install the driver. The file DISK.ID should contain the version +string SDR-31STD-1-US (Revision 1). + +
+
Bootdisks of early DOS versions + +On the Web there are bootdisks available for most of the DOS versions ever released, +but some of them have been reported to fail in Bochs. The bootdisk for MS-DOS 1.25 +contains a boot sector of a newer DOS version, so it would fail on real hardware, +too. The floppy image for MS-DOS 2.11 has a boot sector that tries to boot from +hard disk instead of the floppy. + +
+
+ +
+ Windows NT 4.0 + +You must read the message regarding software licenses in + before you install Windows NT 4.0 as a guest operating system in Bochs. + + +Here are the known issues about installing and running Windows NT4.0 : + + + + +If you want to use the LGPL'd VGABIOS to install Windows NT 4.0 you'll need +version 0.4c or higher. With older versions you'll get a black screen after +first reboot. + + + + +to log in you must press ctrl-alt-del, and it is likely that the window manager +will trap this key combination. You can either use the trick described in + or define a user short-cut +(callable through the user short-cut gui button) +in you configuration file, for example: + +user_shortcut: keys=ctrl-alt-del + + + + + +For installing and using Windows NT it is necessary to limit the maximum CPUID +to 3. In the configuration file you need to add a line like this: + +cpuid: cpuid_limit_winnt=1 + + + + +
+ +
+ Windows 2000 +You must read the message regarding software licenses in + before you install Windows 2000 as a guest operating system in Bochs. + + + +
+
+Windows 2000 Server +You must read the message regarding software licenses in + before you install Windows 2000 Server as a guest operating system in Bochs. +
+ +
+ Windows XP +You must read the message regarding software licenses in + before you install Windows XP as a guest operating system in Bochs. + + Windows XP has been reported to install from the CDROM, and run inside Bochs. + The only known issue is to set the IPS to, at least, a value of 10000000. + +
+ + +
+SCO OpenServer 5.0.5 + +Contributed by Carl Sopchak + + + +You must read the message regarding software licenses in + before you install SCO OpenServer 5.0.5 as a guest operating system in Bochs. + + + +Back in April and May of 2002, I did some work on Bochs +in order to get it to install and boot SCO's OpenServer 5.0.5 (OSR5). +Since that time, I have had several e-mails asking about this error message +or that. The newsgroup posts done at the time had all of the information that I knew, +so I pointed people there. (I had not used Bochs since...) +In February of 2003, I got another such e-mail. +Since the sender indicated they were willing to pay me to get this going for them, +I agreed to spend a few hours on it (for free, which is not common :-}). Subsequently, +I decided to document this once and for all. (I did not charge anyone anything, this time...) + + + +Note: These steps were originally used with Bochs 1.4.1 (or thereabouts, +since I was using CVS heavily at the time). It is possible (likely) that later versions of Bochs +are more tolerant/bug free, and this install may be abbreviated. However, I have not tried +to streamline it at all. + + + +These steps were performed and confirmed using Bochs version 2.0.2, and SCO OpenServer version 5.0.5. +The host OS was Red Hat Linux 8.0. + + + +First, I downloaded the tarball, and extracted the source tree. I decided to use the tarball +instead of the RPM so that I knew what options were compiled in, etc. + +linux-$ tar -xzvf bochs-2.0.2.tar.gz + + + + +Next, I configured and compiled Bochs... + +linux-$ cd bochs-2.0.2 +linux-$ ./configure --enable-cdrom --enable-ne2000 --enable-host-specific-asms +linux-$ make + +The --enable-host-specific-asms should only be used if the host OS is an Intel x86 based OS. + + + +I then created my disk image: + +linux-$ ./bximage +======================================================================== + bximage + Disk Image Creation Tool for Bochs +======================================================================== + +Do you want to create a floppy disk image or a hard disk image? +Please type hd or fd. [hd] hd + +What kind of image should I create? +Please type flat, sparse or growing. [flat] + +Enter the hard disk size in megabytes, between 1 and 32255 +[10] 2048 + +I will create a hard disk image with + cyl=4161 + heads=16 + sectors per track=63 + total sectors=4194288 + total size=2047.99 megabytes + +What should I name the image? +[c.img] hd0.img + +Writing: [] Done. + +I wrote 2147475456 bytes to hd0.img. + +The following line should appear in your .bochsrc: + ata0-master: type=disk, path="hd0.img", cylinders=4161, heads=16, spt=63 + + + + +I then created my .bochsrc file. I did this via the interactive portion of Bochs, with the +end result as follows: + +floppya: 1_44="/dev/fd0", status=inserted +floppyb: 1_44="b.img", status=inserted +ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 +ata0-master: type=disk, path="hd0.img", cylinders=4161, heads=16, spt=63, translation=auto, biosdetect=auto, model="Generic 1234" +ata0-slave: type=cdrom, path="/dev/cdrom", status=inserted, biosdetect=auto, model="Generic 1234" +ata1: enabled=0 +ata2: enabled=0 +ata3: enabled=0 +romimage: file=bios/BIOS-bochs-latest +vgaromimage: file=bios/VGABIOS-lgpl-latest +megs: 64 +parport1: enabled=1, file="lp.pipe" +com1: enabled=0 +# no sb16 +boot: cdrom +floppy_bootsig_check: disabled=0 +vga_update_interval: 300000 +keyboard_serial_delay: 250 +keyboard_paste_delay: 100000 +cpu: ips=3000000 +clock: sync=realtime, time0=0 +text_snapshot_check: 0 +mouse: enabled=0 +private_colormap: enabled=0 +i440fxsupport: enabled=0 +# no ne2k +# no loader +log: osr5.log +logprefix: %t-%e-%i%d +debugger_log: - +panic: action=ask +error: action=report +info: action=report +debug: action=ignore +pass: action=fatal +keyboard_mapping: enabled=0, map= +keyboard_type: mf +user_shortcut: keys=none +config_interface: textconfig +display_library: x + +Some important things to note are that you want to boot from the cdrom, and you do NOT want the ne2000 +card configured initially. (We'll add that later...) + + + +At this point, Bochs is ready to roll! Insert the OSR5 install CD into the drive, and start Bochs. +You should soon see the SCO "boot:" prompt: + +SCO OpenServer(TM) Release 5 + +boot +: defbootstr disable=fdi,dptr + + +Note the disable= parameter that you need. These two SCO drivers cause the install to fail, so they +need to be disabled for the install boot. You will not need this once OSR5 is installed. + + + +During the install of OSR5, there are two default configuration answers that need to be changed. +For the hard disk setup, you should turn bad tracking off, since it's unnecessary on an emulated disk. +(It won't hurt to do it, it will just take a VERY long time!) +For the network setup, change the network card to Deferred. You can change other settings, if you so +desire. However, I would do the initial install with as little configured as you can get away with, then +add whatever else is needed (one step at a time) after the initial install completes. + + + +Let the install copy the files. Go get lunch. Take a nap. Go have dinner... +This can take a LONG time. On my Pentium 4 1.7GHz system, this +step took just over eight hours! (BTW, it was MUCH longer in version 1.4.1. Great job, guys!) + + + +After the install finishes, you will need to change the following lines in .bochsrc file: + +ne2k: ioaddr=0x300, irq=10, mac=b0:c4:20:00:00:00, ethmod=linux, ethdev=eth0 +boot: disk + +Obviously, if you're not using Linux, the ethmode and ethdev values on the ne2k line will be different. +Also, since Bochs uses "raw" network card access, you'll have to "setuid root" on the Bochs executable: + +linux-$ chown root bochs +linux-$ chmod u+s bochs + +(If there is a way to give a "normal user" CAP_NET_RAW capability, that would be an alternative. +I don't know how to do that...) +Restart Bochs. Now, you can just press Enter at the OSR5 boot: prompt, because the offending +drivers have been linked out of the kernel. + + + +Before you configure the network card, I'd strongly suggest getting the latest "nat" driver from SCO. +Version 5.0.5b of this driver, according to the SCO web site, "correct[s] possible system lockup +under high load due to internal buffer overflow." The driver can be found +here. +To get the Disk Image file into SCO, I downloaded the VOL.000.000 file to my linux box, +and used tar to get it on to a floppy: + +linux-$ tar -cvf /dev/fd0 VOL.000.000 + +I then used tar within OSR5 to move it from the floppy to the /tmp directory: + +osr5-# cd /tmp +osr5-# tar -xvf /dev/fd0135ds18 + +You can then use 'custom' to install the driver from the image file. +You will then want to use 'scoadmin network' to configure the network card. Choose +the Novell NE2000 card, and set the parameters to match the ne2k: line in the .bochsrc file. +DO NOT have OSR5 look for the card, as Bochs may likely crash. (It did in version 1.4.1.) + + + +You can also configure a printer, if you want. Using the spoolpipe utility that I wrote +(which can be found in Bochs' misc directory), you can print from OSR5 through the parallel +port, and you'll hardly notice +that the printing is going through an extra layer of operating system! +(You could also set up a printer using network printing, if the printer is not on the host machine...) + + + +Obviously, dont forget to apply the release supplements and other patches that are considered +"must haves" for OSR5: rs505a, oss600a, oss497b (others?). + + + +That's about as far as I have got. I played around with OSR5 within Bochs a bit, but I +can by no means say that I did any kind of real testing, let alone exhaustive testing. + + + +And of course, YMMV! :-) + + +
+ +
+ + +
diff --git a/bochs/doc/man/bochs-dlx.1 b/bochs/doc/man/bochs-dlx.1 new file mode 100644 index 00000000..c9fb1cfd --- /dev/null +++ b/bochs/doc/man/bochs-dlx.1 @@ -0,0 +1,54 @@ +.\"Document Author: Timothy R. Butler - tbutler@uninetsolutions.com" +.TH bochs-dlx 1 "29 Dec 2005" "bochs-dlx" "The Bochs Project" +.\"SKIP_SECTION" +.SH NAME +bochs-dlx \- Runs DLX-Linux under the Bochs x86 Emulator +.\"SKIP_SECTION" +.SH USAGE +.B bochs-dlx +.LP +No command line arguments are accepted. If you require +adjustments to the normal runtime parameters, edit +/usr/local/share/bochs/dlxlinux/bochsrc.txt or run bochs(1) +directly. +.\"SKIP_SECTION" +.SH DESCRIPTION +.LP +Bochs-dlx +is a shell script that runs a sample 10Mbyte disk image +of DLX Linux inside Bochs. Bochs-dlx is simple by design +so that it is possible to try out Bochs without learning +how to configure it first. +.\"SKIP_SECTION" +.SH LICENSE +This program is distributed under the terms of the GNU +Lesser General Public License as published by the Free +Software Foundation. See the COPYING file located in +/usr/local/share/doc/bochs/ for details on the license and +the lack of warranty. +.\"SKIP_SECTION" +.SH AVAILABILITY +The latest version of this program can be found at: + http://bochs.sourceforge.net/getcurrent.html +.\"SKIP_SECTION" +.SH SEE ALSO +bochs(1), bochsrc(5), bximage(1), bxcommit(1) +.PP +.nf +The Bochs IA-32 Emulator site on the World Wide Web: + http://bochs.sourceforge.net + +Online Bochs Documentation + http://bochs.sourceforge.net/doc/docbook +.fi +.\"SKIP_SECTION" +.SH BUGS +Please report all bugs to the bug tracker on our web +site. Just go to http://bochs.sourceforge.net, and click +"Bug Reports" on the sidebar under "Features." +.PP +Provide a detailed description of the bug, the version of +the program you are running, the operating system you are +running the program on and the operating system you +are running in the emulator. + diff --git a/bochs/doc/man/bochs.1 b/bochs/doc/man/bochs.1 new file mode 100644 index 00000000..4e516f9b --- /dev/null +++ b/bochs/doc/man/bochs.1 @@ -0,0 +1,96 @@ +.\"Document Author: Timothy R. Butler - tbutler@uninetsolutions.com" +.TH bochs 1 "29 Dec 2005" "bochs @version@" "The Bochs Project" +.\"SKIP_SECTION" +.SH NAME +bochs \- Portable x86 Emulator. +.\"SKIP_SECTION" +.SH SYNOPSIS +.B bochs +.RI \|[ bochs_options \|] +.RI \|[ bochsrc_options \|] +.\"SKIP_SECTION" +.SH DESCRIPTION +.LP +Bochs is a portable Intel Architecture 32 (x86) emulator +that runs on most popular operating systems. Inside the +emulator, it can run many operating systems including +Linux and Microsoft(R) Windows(R). +.\".\"DONT_SPLIT" +.SH OPTIONS +.LP +When you run bochs without one of the following options, it +will search for a configuration file called .bochsrc in +the current directory and your home directory and display +the start menu. +.TP +.BI \-q +With this option the start menu will be skipped after loading +the configuration file. +.TP +.BI \-f\ configfile +This option specifies the name of the configuration file. +.TP +.BI \-qf\ configfile +When you run bochs with this option, it will skip the start +menu and use the specified configuration file. +.TP +.BI \-n +With this option bochs doesn't load a configuration file. +In that case the setup for the emulation must be done with +bochsrc options on the command line or in the start menu. +.TP +.BI \-h,\ --help +Print a summary of the command line options for bochs and exit. +.LP +You can override the settings from the configuration file +with command line arguments, using the same syntax as the +bochsrc file. If you have any spaces in your command line +arguments, they should be enclosed in single quotes. +For information on Bochs command line and configuration +file arguments, see the man page +.B bochsrc(5). + +Example: + bochs -q 'boot:a' 'floppya: 1_44=a.img, status=inserted' + +.\"SKIP_SECTION" +.SH LICENSE +This program is distributed under the terms of the GNU +Lesser General Public License as published by the Free +Software Foundation. See the COPYING file located in +/usr/local/share/doc/bochs/ for details on the license and +the lack of warranty. +.\"SKIP_SECTION" +.SH AVAILABILITY +The latest version of this program can be found at: + http://bochs.sourceforge.net/getcurrent.html +.\"SKIP_SECTION" +.SH SEE ALSO +bochsrc(5), bochs-dlx(1), bximage(1), bxcommit(1) +.PP +.nf +The Bochs IA-32 Emulator site on the World Wide Web: + http://bochs.sourceforge.net + +Online Bochs Documentation + http://bochs.sourceforge.net/doc/docbook +.fi +.\"SKIP_SECTION" +.SH AUTHORS +The Bochs emulator was created by Kevin Lawton +(kevin@mandrakesoft.com), and is currently maintained +by the members of the Bochs x86 Emulator Project. You +can see a current roster of members at: + + http://bochs.sourceforge.net/getinvolved.html +.\"SKIP_SECTION" +.SH BUGS +Please report all bugs to the bug tracker on our web +site. Just go to http://bochs.sourceforge.net, and click +"Bug Reports" on the sidebar under "Feedback". +.PP +Provide a detailed description of the bug, the version of +the program you are running, the operating system you are +running the program on and the operating system you +are running in the emulator. + diff --git a/bochs/doc/man/bochsrc.5 b/bochs/doc/man/bochsrc.5 new file mode 100644 index 00000000..36fee809 --- /dev/null +++ b/bochs/doc/man/bochsrc.5 @@ -0,0 +1,1032 @@ +.\"Document Author: Timothy R. Butler - tbutler@uninetsolutions.com" +.TH bochsrc 5 "20 Feb 2011" "bochsrc" "The Bochs Project" +.\"SKIP_SECTION" +.SH NAME +bochsrc \- Configuration file for Bochs. +.\"SKIP_SECTION" +.SH DESCRIPTION +.LP +Bochsrc is the configuration file that specifies +where Bochs should look for disk images, how the Bochs +emulation layer should work, etc. The syntax used +for bochsrc can also be used as command line arguments +for Bochs. The .bochsrc file should be placed either in +the current directory before running Bochs or in your +home directory. + +Starting with Bochs 1.3, you can use environment variables in +the bochsrc file, for example: + + floppya: 1_44="$IMAGES/bootdisk.img", status=inserted + +Starting with version 2.0, two environment variables have a built-in +default value which is set at compile time. $BXSHARE points to the +"share" directory which is typically /usr/local/share/bochs on UNIX +machines. See the $(sharedir) variable in the Makefile for the exact +value. $BXSHARE is used by disk images to locate the directory where +the BIOS images and keymaps can be found. If $BXSHARE is not defined, Bochs +will supply the default value. Also, $LTDL_LIBRARY_PATH points to a list of +directories (separated by colons if more than one) to search in for Bochs +plugins. A compile-time default is provided if this variable is not defined +by the user. +.\".\"DONT_SPLIT" +.SH OPTIONS + +.TP +.I "#include" +This option includes another configuration file. It is +possible to put installation defaults in a global config +file (e.g. location of rom images). + +Example: + #include /etc/bochsrc + +.TP +.I "config_interface:" +The configuration interface is a series of menus or dialog boxes that +allows you to change all the settings that control Bochs's behavior. +Depending on the platform there are up to 3 choices of configuration +interface: a text mode version called "textconfig" and two graphical versions +called "win32config" and "wx". The text mode version uses stdin/stdout and +is always compiled in, unless Bochs is compiled for wx only. The choice +"win32config" is only available on win32 and it is the default there. +The choice "wx" is only available when you use "--with-wx" on the configure +command. If you do not write a config_interface line, Bochs will +choose a default for you. + +.B NOTE: +if you use the "wx" configuration interface, you must also use +the "wx" display library. + +Example: + config_interface: textconfig + +.TP +.I "display_library:" +The display library is the code that displays the Bochs VGA screen. Bochs +has a selection of about 10 different display library implementations for +different platforms. If you run configure with multiple --with-* options, +the display_library command lets you choose which one you want to run with. +If you do not write a display_library line, Bochs will choose a default for +you. + +The choices are: + x X windows interface, cross platform + win32 native win32 libraries + carbon Carbon library (for MacOS X) + beos native BeOS libraries + macintosh MacOS pre-10 + amigaos native AmigaOS libraries + sdl SDL library, cross platform + term text only, uses curses/ncurses library, cross platform + rfb provides an interface to AT&T's VNC viewer, cross platform + wx wxWidgets library, cross platform + nogui no display at all + +Some display libraries now support specific option to control their +behaviour. See the examples below for currently supported options. + +.B NOTE: +if you use the "wx" configuration interface, you must also use +the "wx" display library. + +Examples: + display_library: x + display_library: rfb, options="timeout=60" # time to wait for client + display_library: sdl, options="fullscreen" # startup in fullscreen mode + display_library: x, options="hideIPS" # disable IPS output in status bar + display_library: x, options="gui_debug" # use GTK debugger gui + + +.TP +.I "romimage:" +The ROM BIOS controls what the PC does when it first powers on. Normally, you +can use a precompiled BIOS in the source or binary distribution called +.B BIOS-bochs-latest. +The default ROM BIOS is usually loaded starting at address 0xe0000, and it is +exactly 128k long. The legacy version of the Bochs BIOS is usually loaded starting +at address 0xf0000, and it is exactly 64k long. +You can also use the environment variable $BXSHARE to specify the location of the BIOS. +The usage of external large BIOS images (up to 512k) at memory top is +now supported, but we still recommend to use the BIOS distributed with Bochs. +The start address is optional, since it can be calculated from image size. + +Examples: + romimage: file=bios/BIOS-bochs-latest + romimage: file=$BXSHARE/BIOS-bochs-legacy + romimage: file=mybios.bin, address=0xfff80000 + romimage: file=mybios.bin + +.TP +.I "cpu:" +This defines cpu-related parameters inside Bochs: + +count: + +Set the number of processors:cores per processor:threads per core when +Bochs is compiled for SMP emulation. Bochs currently supports up to +8 processors. If Bochs is compiled without SMP support, it won't accept +values different from 1. + +quantum: + +Maximum amount of instructions allowed to execute by processor before +returning control to another cpu. This option exists only in Bochs +binary compiled with SMP support. + +reset_on_triple_fault: + +Reset the CPU when triple fault occur (highly recommended) rather than +PANIC. Remember that if you trying to continue after triple fault the +simulation will be completely bogus ! + +msrs: + +Define path to user CPU Model Specific Registers (MSRs) specification. +See example in msrs.def. + +ignore_bad_msrs: + +Ignore MSR references that Bochs does not understand; print a warning +message instead of generating #GP exception. This option is enabled +by default but will not be avaiable if configurable MSRs are enabled. + +ips: + +Emulated Instructions Per Second. This is the +number of IPS that Bochs is capable of running +on your machine. You can recompile Bochs with +--enable-show-ips option enabled, to find your +workstation's capability. Measured IPS value +will then be logged into your log file or status +bar (if supported by the gui). + +IPS is used to calibrate many time-dependent +events within the bochs simulation. For +example, changing IPS affects the frequency of +VGA updates, the duration of time before a key +starts to autorepeat, and the measurement of +BogoMips and other benchmarks. + +Example Specifications[1] + Bochs Machine/Compiler Mips + ------------------------------------------------------------------- + 2.3.7 3.2Ghz Intel Core 2 Q9770 with WinXP/g++ 3.4 50 to 55 Mips + 2.3.7 2.6Ghz Intel Core 2 Duo with WinXP/g++ 3.4 38 to 43 Mips + 2.2.6 2.6Ghz Intel Core 2 Duo with WinXP/g++ 3.4 21 to 25 Mips + 2.2.6 2.1Ghz Athlon XP with Linux 2.6/g++ 3.4 12 to 15 Mips + 2.0.1 1.6Ghz Intel P4 with Win2000/g++ 3.3 5 to 7 Mips + + [1] IPS measurements depend on OS and compiler +configuration in addition to processor clock +speed. + +Example: + cpu: count=2, ips=10000000, msrs="msrs.def" + +.TP +.I "cpuid:" +This defines features and functionality supported by Bochs emulated CPU: + +mmx: + +Select MMX instruction set support. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 5. + +sep: + +Select SYSENTER/SYSEXIT instruction set support. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. + +sse: + +Select SSE instruction set support. +Any of NONE/SSE/SSE2/SSE3/SSSE3/SSE4_1/SSE4_2 could be selected. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. + +xapic: + +Select XAPIC extensions support. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. + +aes: + +Select AES instruction set support. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. + +movbe: + +Select MOVBE Intel(R) Atom instruction support. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. + +xsave: + +Select XSAVE extensions support. +This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. + +1g_pages: + +Enable 1G page size support in long mode. +This option exists only if Bochs compiled with x86-64 support. + +pcid: + +Enable Process-Context Identifiers (PCID) support in long mode. +This option exists only if Bochs compiled with x86-64 support. + +mwait: + +Select MONITOR/MWAIT instructions support. +This option exists only if Bochs compiled with --enable-monitor-mwait. + +mwait_is_nop: + +When this option is enabled MWAIT will not put the CPU into a sleep state. +This option exists only if Bochs compiled with --enable-monitor-mwait. + +stepping: + +Set stepping information returned by CPUID. Default stepping value is 3. + +vendor_string: + +Set the CPUID vendor string returned by CPUID(0x0). This should be a +twelve-character ASCII string. + +brand_string: + +Set the CPUID vendor string returned by CPUID(0x80000002 .. 0x80000004). +This should be at most a forty-eight-character ASCII string. + +cpuid_limit_winnt: + +Determine whether to limit maximum CPUID function to 3. This mode is +required to workaround WinNT installation and boot issues. + +Example: + cpuid: mmx=1, sep=1, sse=sse4_2, xapic=1, aes=1, movbe=1, xsave=1, cpuid_limit_winnt=0 + +.TP +.I "megs:" +Set the number of Megabytes of physical memory you want to emulate. +The default is 32MB, most OS's won't need more than that. +The maximum amount of memory supported is 2048Mb. + +Example: + megs: 32 + +.TP +.I "optromimage1: \fP, \fIoptromimage2: \fP, \fIoptromimage3: \fPor \fIoptromimage4:" +You may now load up to 4 optional ROM images. Be sure to use a +read-only area, typically between C8000 and EFFFF. These optional +ROM images should not overwrite the rombios (located at +F0000-FFFFF) and the videobios (located at C0000-C7FFF). +Those ROM images will be initialized by the bios if they contain +the right signature (0x55AA). +It can also be a convenient way to upload some arbitrary code/data +in the simulation, that can be retrieved by the boot loader + +Example: + optromimage1: file=optionalrom.bin, address=0xd0000 + +.TP +.I "vgaromimage:" +You also need to load a VGA ROM BIOS into 0xC0000. + +Examples: + vgaromimage: file=bios/VGABIOS-elpin-2.40 + vgaromimage: file=bios/VGABIOS-lgpl-latest + vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest + +.TP +.I "vga:" +Here you can specify the display extension to be used. With the value 'none' +you can use standard VGA with no extension. Other supported values are 'vbe' +for Bochs VBE and 'cirrus' for Cirrus SVGA support. + +Examples: + vga: extension=cirrus + vga: extension=vbe + +.TP +.I "floppya: \fPor \fIfloppyb:" + +Point this to the pathname of a floppy image +file or device. Floppya is the first drive, +and floppyb is the second drive. If you're +booting from a floppy, floppya should point to +a bootable disk. + +You can set the initial status of the media to +\&'ejected' or 'inserted'. Usually you will want +to use 'inserted'. + +The parameter 'type' can be used to enable the floppy drive without media +and status specified. Usually the drive type is set up based on the media type. + +The optional parameter 'write_protected' can be used to control the media +write protect switch. By default it is turned off. + +Example: + +2.88M 3.5" media: + floppya: 2_88=path, status=ejected + +1.44M 3.5" media (write protected): + floppya: 1_44=path, status=inserted, write_protected=1 + +1.2M 5.25" media: + floppyb: 1_2=path, status=ejected + +720K 3.5" media: + floppya: 720k=path, status=inserted + +360K 5.25" media: + floppya: 360k=path, status=inserted + +Autodetect floppy media type: + floppya: image=path, status=inserted + +Use directory as 1.44M VFAT media: + floppya: 1_44=vvfat:path, status=inserted + +1.44M 3.5" floppy drive, no media: + floppya: type=1_44 + +.TP +.I "ata0: \fP, \fIata1: \fP, \fIata2: \fPor \fIata3:" + +These options enables up to 4 ata channels. For each channel +the two base io addresses and the irq must be specified. +ata0 and ata1 are enabled by default, with the values shown below. + +Examples: + ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 + ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15 + ata2: enabled=1, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11 + ata3: enabled=1, ioaddr1=0x168, ioaddr2=0x360, irq=9 + +.TP +.I "ata\fR[\fB0-3\fR]\fI-master: \fPor \fIata\fR[\fB0-3\fR]\fI-slave:" + +This defines the type and characteristics of all attached ata devices: + type= type of attached device [disk|cdrom] + path= path of the image + mode= image mode [flat|concat|external|dll|sparse|vmware3|undoable|growing|volatile], only valid for disks + cylinders= only valid for disks + heads= only valid for disks + spt= only valid for disks + status= only valid for cdroms [inserted|ejected] + biosdetect= type of biosdetection [none|auto], only for disks on ata0 [cmos] + translation=type of translation of the bios, only for disks [none|lba|large|rechs|auto] + model= string returned by identify device command + journal= optional filename of the redolog for undoable, volatile and vvfat disks + +Point this at a hard disk image file, cdrom iso file, +or a physical cdrom device. +To create a hard disk image, try running bximage. +It will help you choose the size and then suggest a line that +works with it. + +In UNIX it is possible to use a raw device as a Bochs hard disk, +but WE DON'T RECOMMEND IT. + +The path is mandatory for hard disks. Disk geometry autodetection works with +images created by bximage if CHS is set to 0/0/0 (cylinders are calculated +using heads=16 and spt=63). For other hard disk images and modes the +cylinders, heads, and spt are mandatory. In all cases the disk size reported +from the image must be exactly C*H*S*512. + +The mode option defines how the disk image is handled. Disks can be defined as: + - flat : one file flat layout + - concat : multiple files layout + - external : developer's specific, through a C++ class + - dll : developer's specific, through a DLL + - sparse : stackable, commitable, rollbackable + - vmware3 : vmware3 disk support + - undoable : flat file with commitable redolog + - growing : growing file + - volatile : flat file with volatile redolog + - vvfat: local directory appears as read-only VFAT disk (with volatile redolog) + +The disk translation scheme (implemented in legacy int13 bios functions, and used by +older operating systems like MS-DOS), can be defined as: + - none : no translation, for disks up to 528MB (1032192 sectors) + - large : a standard bitshift algorithm, for disks up to 4.2GB (8257536 sectors) + - rechs : a revised bitshift algorithm, using a 15 heads fake physical geometry, for disks up to 7.9GB (15482880 sectors). (don't use this unless you understand what you're doing) + - lba : a standard lba-assisted algorithm, for disks up to 8.4GB (16450560 sectors) + - auto : autoselection of best translation scheme. (it should be changed if system does not boot) + +Default values are: + mode=flat, biosdetect=auto, translation=auto, model="Generic 1234" + +The biosdetect option has currently no effect on the bios + +Examples: + ata0-master: type=disk, path=10M.sample, cylinders=306, heads=4, spt=17 + ata0-slave: type=disk, path=20M.sample, cylinders=615, heads=4, spt=17 + ata1-master: type=disk, path=30M.sample, cylinders=615, heads=6, spt=17 + ata1-slave: type=disk, path=46M.sample, cylinders=940, heads=6, spt=17 + ata2-master: type=disk, path=62M.sample, cylinders=940, heads=8, spt=17 + ata2-slave: type=disk, path=112M.sample, cylinders=900, heads=15, spt=17 + ata3-master: type=disk, path=483M.sample, cylinders=1024, heads=15, spt=63 + ata3-slave: type=cdrom, path=iso.sample, status=inserted + +.TP +.I "com1: \fP, \fIcom2: \fP, \fIcom3: \fPor \fIcom4:" +This defines a serial port (UART type 16550A). In the 'term' you can specify +a device to use as com1. This can be a real serial line, or a pty. To use +a pty (under X/Unix), create two windows (xterms, usually). One of them will +run bochs, and the other will act as com1. Find out the tty the com1 window +using the `tty' command, and use that as the `dev' parameter. Then do +`sleep 1000000' in the com1 window to keep the shell from messing with things, +and run bochs in the other window. Serial I/O to com1 (port 0x3f8) will all +go to the other window. + +Other serial modes are 'null' (no input/output), 'file' (output to a file +specified as the 'dev' parameter), 'raw' (use the real serial port - under +construction for win32) and 'mouse' (standard serial mouse - requires +mouse option setting 'type=serial' or 'type=serial_wheel') + +Examples: + com1: enabled=1, mode=term, dev=/dev/ttyp7 + com2: enabled=1, mode=file, dev=serial.out + com1: enabled=1, mode=mouse + +.TP +.I "parport1: \fPor \fIparport2:" +This defines a parallel (printer) port. When turned on and an output file is +defined the emulated printer port sends characters printed by the guest +OS into the output file. On some platforms a device filename can be used to +send the data to the real parallel port (e.g. "/dev/lp0" on Linux). + +Examples: + parport1: enabled=1, file=parport.out + parport2: enabled=1, file="/dev/lp0" + parport1: enabled=0 + +.TP +.I "boot:" +This defines the boot sequence. Now you can specify up to 3 boot drives, +which can be 'floppy', 'disk', 'cdrom' or 'network' (boot ROM). +Legacy 'a' and 'c' are also supported. + +Example: + boot: cdrom, floppy, disk + +.TP +.I "floppy_bootsig_check:" +This disables the 0xaa55 signature check on boot floppies +The check is enabled by default. + +Example: + floppy_bootsig_check: disabled=1 + +.TP +.I "log:" +Give the path of the log file you'd like Bochs +debug and misc. verbiage to be written to. If +you really don't want it, make it /dev/null. + +Example: + log: bochs.out + log: /dev/tty (unix only) + log: /dev/null (unix only) + +.TP +.I "logprefix:" +This handles the format of the string prepended to each log line : +You may use those special tokens : + %t : 11 decimal digits timer tick + %i : 8 hexadecimal digits of cpu0 current eip + %e : 1 character event type ('i'nfo, 'd'ebug, 'p'anic, 'e'rror) + %d : 5 characters string of the device, between brackets + +Default : %t%e%d + +Examples: + logprefix: %t-%e-@%i-%d + logprefix: %i%e%d + +.TP +.I "panic:" +If Bochs reaches a condition where it cannot +emulate correctly, it does a panic. This can +be a configuration problem (like a misspelled +bochsrc line) or an emulation problem (like an +unsupported video mode). The "panic" setting +in bochsrc tells Bochs how to respond to a +panic. You can set this to fatal (terminate +the session), report (print information to +the console), or ignore (do nothing). + +The safest setting is action=fatal. If you are +getting panics, you can try action=report +instead. If you allow Bochs to continue after +a panic, don't be surprised if you get strange +behavior or crashes if a panic occurs. Please +report panic messages unless it is just a +configuration problem like "could not find +hard drive image." + +Example: + panic: action=fatal + + +.TP +.I "error:" +Bochs produces an error message when it finds +a condition that really shouldn't happen, but +doesn't endanger the simulation. An example of +an error might be if the emulated software +produces an illegal disk command. + +The "error" setting tells Bochs how to respond +to an error condition. You can set this to +fatal (terminate the session), report (print +information to the console), or ignore (do +nothing). + +Example: + error: action=report + +.TP +.I "info:" +This setting tells Bochs what to do when an +event occurs that generates informational +messages. You can set this to fatal (that +would not be very smart though), report (print +information to the console), or ignore (do +nothing). For general usage, the "report" +option is probably a good choice. + +Example: + info: action=report + +.TP +.I "debug:" +This setting tells Bochs what to do with +messages intended to assist in debugging. You +can set this to fatal (but you shouldn't), +report (print information to the console), or +ignore (do nothing). You should generally set +this to ignore, unless you are trying to +diagnose a particular problem. + +.B NOTE: +When action=report, Bochs may spit out +thousands of debug messages per second, which +can impact performance and fill up your disk. + +Example: + debug: action=ignore + +.TP +.I "debugger_log:" +Give the path of the log file you'd like Bochs to log debugger output. +If you really don't want it, make it '/dev/null', or '-'. + +Example: + log: debugger.out + log: /dev/null (unix only) + log: - + +.TP +.I "sb16:" +This defines the SB16 sound emulation. It can +have several of the following properties. All +properties are in this format: + sb16: property=value + + +.B PROPERTIES FOR sb16: + +midi: + +The filename is where the midi data is sent. +This can be a device or just a file if you +want to record the midi data. + +midimode: + + 0 = No data should be output. + 1 = output to device (system dependent - midi + denotes the device driver). + 2 = SMF file output, including headers. + 3 = Output the midi data stream to the file + (no midi headers and no delta times, just + command and data bytes). + +wave: + +This is the device/file where wave output is +stored. + +wavemode: + + 0 = no data + 1 = output to device (system dependent - wave + denotes the device driver). + 2 = VOC file output, including headers. + 3 = Output the raw wave stream to the file. + +log: + +The file to write the sb16 emulator messages to. + +loglevel: + + 0 = No log. + 1 = Resource changes, midi program and bank changes. + 2 = Severe errors. + 3 = All errors. + 4 = All errors plus all port accesses. + 5 = All errors and port accesses plus a lot + of extra information. + +It is possible to change the loglevel at runtime. + +dmatimer: + +Microseconds per second for a DMA cycle. Make it smaller +to fix non-continuous sound. 750000 is usually a good +value. This needs a reasonably correct setting for +the IPS parameter of the CPU option. It is possible to +adjust the dmatimer at runtime. + +Example for output to OSS: + sb16: midimode=1, midi=/dev/midi00, + wavemode=1, wave=/dev/dsp, loglevel=2, + log=sb16.log, dmatimer=600000 + +Example for output to ALSA: + sb16: midimode=1, midi=alsa:128:0, + wavemode=1, wave=alsa, + log=sb16.log, dmatimer=600000 + +.B NOTE: +The examples are wrapped onto three lines for +formatting reasons, but it should all be on +one line in the actual bochsrc file. + +.TP +.I "vga_update_interval:" +Video memory is scanned for updates and screen updated +every so many virtual seconds. The default value is +50000, about 20Hz. Keep in mind that you must tweak +the 'cpu: ips=N' directive to be as close to the number of +emulated instructions-per-second your workstation can +do, for this to be accurate. + +Example: + vga_update_interval: 250000 + + +.TP +.I "keyboard_serial_delay:" +Approximate time in microseconds that it takes +one character to be transfered from the +keyboard to controller over the serial path. + +Example: + keyboard_serial_delay: 200 + +.TP +.I "keyboard_paste_delay:" +Approximate time in microseconds between attempts to paste +characters to the keyboard controller. This leaves time for the +guest os to deal with the flow of characters. The ideal setting +depends on how your operating system processes characters. The +default of 100000 usec (.1 seconds) was chosen because it works +consistently in Windows. + +If your OS is losing characters during a paste, increase the paste +delay until it stops losing characters. + +Example: + keyboard_paste_delay: 100000 + +.TP +.I "clock:" +This defines the parameters of the clock inside Bochs. + +sync + +This defines the method how to synchronize the Bochs internal time +with realtime. With the value 'none' the Bochs time relies on the IPS +value and no host time synchronization is used. The 'slowdown' method +sacrifices performance to preserve reproducibility while allowing host +time correlation. The 'realtime' method sacrifices reproducibility to +preserve performance and host-time correlation. +It is possible to enable both synchronization methods. + +time0 + +Specifies the start (boot) time of the virtual machine. Use a time +value as returned by the time(2) system call. If no time0 value is +set or if time0 equal to 1 (special case) or if time0 equal 'local', +the simulation will be started at the current local host time. +If time0 equal to 2 (special case) or if time0 equal 'utc', +the simulation will be started at the current utc time. + +Syntax: + clock: sync=[none|slowdown|realtime|both], time0=[timeValue|local|utc] + +Default value are sync=none, time0=local + +Example: + clock: sync=realtime, time0=938581955 # Wed Sep 29 07:12:35 1999 + +.TP +.I "mouse:" +This defines parameters for the emulated mouse type, the initial status +of the mouse capture and the runtime method to toggle it. + +type + +With the mouse type option you can select the type of mouse to emulate. +The default value is 'ps2'. The other choices are 'imps2' (wheel mouse +on PS/2), 'serial', 'serial_wheel' and 'serial_msys' (one com port requires +setting 'mode=mouse'). To connect a mouse to an USB port, see the 'usb_uhci' +or 'usb_ohci' option (requires PCI and USB support). + +enabled + +The Bochs gui creates mouse "events" unless the 'enabled' option is +set to 0. The hardware emulation itself is not disabled by this. +Unless you have a particular reason for enabling the mouse by default, +it is recommended that you leave it off. You can also toggle the mouse +usage at runtime (RFB, SDL, Win32, wxWidgets and X11 - see below). + +toggle + +The default method to toggle the mouse capture at runtime is to press the +CTRL key and the middle mouse button ('ctrl+mbutton'). This option allows +to change the method to 'ctrl+f10' (like DOSBox), 'ctrl+alt' (like QEMU) +or 'f12' (replaces win32 'legacyF12' option). + +Examples: + mouse: enabled=1 + mouse: type=imps2, enabled=1 + mouse: type=serial, enabled=1 + mouse: enabled=0, toggle=ctrl+f10 + +.TP +.I "private_colormap:" +Requests that the GUI create and use it's own +non-shared colormap. This colormap will be +used when in the bochs window. If not enabled, +a shared colormap scheme may be used. Once +again, enabled=1 turns on this feature and 0 +turns it off. + +Example: + private_colormap: enabled=1 + +.TP +.I "i440fxsupport:" +This option controls the presence of the i440FX PCI chipset. You can +also specify the devices connected to PCI slots. Up to 5 slots are +available now. These devices are currently supported: ne2k, pcivga, +pcidev, pcipnic and usb_ohci. If Bochs is compiled with Cirrus SVGA +support you'll have the additional choice 'cirrus'. + +Example: + i440fxsupport: enabled=1, slot1=pcivga, slot2=ne2k + +.TP +.I "pcidev:" +Enables the mapping of a host PCI hardware device within the PCI subsystem of +the Bochs x86 emulator. This feature requires Linux as a host OS. + +Example: + pcidev: vendor=0x1234, device=0x5678 + +The vendor and device arguments should contain the vendor ID respectively the +device ID of the PCI device you want to map within Bochs. +.B The PCI mapping is still very experimental. + +.TP +.I "ne2k:" +Defines the characteristics of an attached ne2000 isa card : + ioaddr=IOADDR, + irq=IRQ, + mac=MACADDR, + ethmod=MODULE, + ethdev=DEVICE, + script=SCRIPT + +.B PROPERTIES FOR ne2k: + +ioaddr, irq: +You probably won't need to change ioaddr and irq, unless there are IRQ conflicts. +These parameters are ignored if the NE2000 is assigned to a PCI slot. + +mac: +The MAC address MUST NOT match the address of any machine on the net. +Also, the first byte must be an even number (bit 0 set means a multicast +address), and you cannot use ff:ff:ff:ff:ff:ff because that's the broadcast +address. For the ethertap module, you must use fe:fd:00:00:00:01. There may +be other restrictions too. To be safe, just use the b0:c4... address. + +ethmod: +The ethmod value defines which low level OS specific module to be used +to access physical ethernet interface. Current implemented values include + - fbsd : ethernet on freebsd and openbsd + - linux : ethernet on linux + - win32 : ethernet on win32 + - tap : ethernet through a linux tap interface + - tuntap : ethernet through a linux tuntap interface + +If you don't want to make connections to any physical networks, +you can use the following 'ethmod's to simulate a virtual network. + - null : All packets are discarded, but logged to a few files + - arpback: ARP is simulated (disabled by default) + - vde : Virtual Distributed Ethernet + - vnet : ARP, ICMP-echo(ping), DHCP and TFTP are simulated + The virtual host uses 192.168.10.1 + DHCP assigns 192.168.10.2 to the guest + The TFTP server use ethdev for the root directory and doesn't + overwrite files + +ethdev: +The ethdev value is the name of the network interface on your host +platform. On UNIX machines, you can get the name by running ifconfig. On +Windows machines, you must run niclist to get the name of the ethdev. +Niclist source code is in misc/niclist.c and it is included in Windows +binary releases. + +script: +The script value is optional, and is the name of a script that +is executed after bochs initialize the network interface. You can use +this script to configure this network interface, or enable masquerading. +This is mainly useful for the tun/tap devices that only exist during +Bochs execution. The network interface name is supplied to the script +as first parameter + +Examples: + ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:00, ethmod=fbsd, ethdev=xlo + ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:00, ethmod=linux, ethdev=eth0 + ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:01, ethmod=win32, ethdev=MYCARD + ne2k: ioaddr=0x300, irq=9, mac=fe:fd:00:00:00:01, ethmod=tap, ethdev=tap0 + ne2k: ioaddr=0x300, irq=9, mac=fe:fd:00:00:00:01, ethmod=tuntap, ethdev=/dev/net/tun0, script=./tunconfig + ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:01, ethmod=vde, ethdev="/tmp/vde.ctl" + ne2k: ioaddr=0x300, irq=9, mac=b0:c4:20:00:00:01, ethmod=vnet, ethdev="c:/temp" + +.TP +.I "pnic:" +To support the Bochs/Etherboot pseudo-NIC, Bochs must be compiled with the +--enable-pnic configure option. It accepts the same syntax (for mac, ethmod, +ethdev, script) and supports the same networking modules as the NE2000 adapter. +In addition to this, it must be assigned to a PCI slot. + +Example: + pnic: enabled=1, mac=b0:c4:20:00:00:00, ethmod=vnet + +.TP +.I "keyboard_mapping:" +This enables a remap of a physical localized keyboard to a +virtualized us keyboard, as the PC architecture expects. +If enabled, the keymap file must be specified. + + Examples: + keyboard_mapping: enabled=1, map=gui/keymaps/x11-pc-de.map + +.TP +.I "keyboard_type:" +Type of emulated keyboard sent back to the OS +to a "keyboard identify" command. It must be +one of "xt", "at" or "mf". + +Example: + keyboard_type: mf + +.TP +.I "user_shortcut:" +This defines the keyboard shortcut to be sent when you press the "user" +button in the header bar. The shortcut string is a combination of maximum +3 key names (listed below) separated with a '-' character. + +Valid key names: + +"alt", "bksl", "bksp", "ctrl", "del", "down", "end", "enter", "esc", +"f1", ... "f12", "home", "ins", "left", "menu", "minus", "pgdwn", "pgup", "plus", +"right", "shift", "space", "tab", "up", "win", "print" and "power". + +Example: + user_shortcut: keys=ctrl-alt-del + +.TP +.I "cmosimage:" +This defines image file that can be loaded into the CMOS RAM at startup. +The rtc_init parameter controls whether initialize the RTC with values stored +in the image. By default the time0 argument given to the clock option is used. +With 'rtc_init=image' the image is the source for the initial time. + +Example: + cmosimage: file=cmos.img, rtc_init=time0 + +.TP +.I "usb_uhci:" +This option controls the presence of the USB root hub which is a part +of the i440FX PCI chipset. With the portX option you can connect devices +to the hub (currently supported: 'mouse', 'tablet', 'keypad', 'disk', 'cdrom', +'hub' and 'printer'). + +The optionsX parameter can be used to assign specific options to the device +connected to the corresponding USB port. Currently this feature is only used +to set the speed reported by device and by the 'disk' device to specify +an alternative redolog file of some image modes. + +If you connect the mouse or tablet to one of the ports, Bochs forwards the +mouse movement data to the USB device instead of the selected mouse type. +When connecting the keypad to one of the ports, Bochs forwards the input of +the numeric keypad to the USB device instead of the PS/2 keyboard. + +To connect a 'flat' mode image as an USB hardisk you can use the 'disk' device +with the path to the image separated with a colon. To use other disk image modes +similar to ATA disks the syntax 'disk:mode:filename' must be used (see below). + +To emulate an USB cdrom you can use the 'cdrom' device name and the path to +an ISO image or raw device name also separated with a colon. An option to +insert/eject media is available in the runtime configuration. + +The device 'printer' emulates the HP Deskjet 920C printer. The PCL data is +sent to a file specified in bochsrc.txt. The current code appends the PCL +code to the file if the file already existed. It would probably be nice to +overwrite the file instead, asking user first. + +Example: + usb_uhci: enabled=1, port1=mouse, port2=disk:usbstick.img + usb_uhci: enabled=1, port1=hub:7, port2=disk:growing:usbdisk.img + usb_uhci: enabled=1, port1=printer:printdata.bin, port2=cdrom:image.iso + +.TP +.I "usb_ohci:" +This option controls the presence of the USB OHCI host controller with a +2-port hub. The portX option accepts the same device types with the same +syntax as the UHCI controller (see above). The OHCI HC must be assigned to +a PCI slot. + +Example: + usb_ohci: enabled=1 + +.TP +.I "plugin_ctrl:" +Controls the presence of optional plugins without a separate option. +By default all existing plugins are enabled. These plugins are currently +supported: 'acpi', 'biosdev', 'extfpuirq', 'gameport', 'iodebug', 'pci_ide', 'speaker' and 'unmapped'. + +Example: + plugin_ctrl: biosdev=0, speaker=0 + +.TP +.I "user_plugin:" +Load user-defined plugin. This option is available only if Bochs is +compiled with plugin support. Maximum 8 different plugins are supported. +See the example in the Bochs sources how to write a plugin device. + +Example: + user_plugin: name=testdev + +.\"SKIP_SECTION" +.SH LICENSE +This program is distributed under the terms of the GNU +Lesser General Public License as published by the Free +Software Foundation. See the COPYING file located in +/usr/share/doc/bochs/ for details on the license and +the lack of warranty. +.\"SKIP_SECTION" +.SH AVAILABILITY +The latest version of this program can be found at: + http://bochs.sourceforge.net/getcurrent.html +.\"SKIP_SECTION" +.SH SEE ALSO +bochs(1), bochs-dlx(1), bximage(1), bxcommit(1) +.PP +.nf +The Bochs IA-32 Emulator site on the World Wide Web: + http://bochs.sourceforge.net + +Online Bochs Documentation + http://bochs.sourceforge.net/doc/docbook +.fi +.\"SKIP_SECTION" +.SH AUTHORS +The Bochs emulator was created by Kevin Lawton +(kevin@mandrakesoft.com), and is currently maintained +by the members of the Bochs x86 Emulator Project. You +can see a current roster of members at: + http://bochs.sourceforge.net/getinvolved.html +.\"SKIP_SECTION" +.SH BUGS +Please report all bugs to the bug tracker on our web +site. Just go to http://bochs.sourceforge.net, and click +"Bug Reports" on the sidebar under "Feedback". +.PP +Provide a detailed description of the bug, the version of +the program you are running, the operating system you are +running the program on and the operating system you +are running in the emulator. + + diff --git a/bochs/doc/man/bxcommit.1 b/bochs/doc/man/bxcommit.1 new file mode 100644 index 00000000..f7263759 --- /dev/null +++ b/bochs/doc/man/bxcommit.1 @@ -0,0 +1,53 @@ +.\"Document Author: Christophe Bothamy - cbothamy@free.fr" +.TH bximage 1 "29 Dec 2005" "bximage" "The Bochs Project" +.\"SKIP_SECTION" +.SH NAME +bxcommit \- Interactive Tool to Commit Redologs into flat Disk Images for Bochs +.\"SKIP_SECTION" +.SH USAGE +.B bxcommit +.\"SKIP_SECTION" +.SH DESCRIPTION +.LP +Bxcommit is an easy to use console based tool for committing +redologs into flat +disk images, particularly for use with Bochs. It is +completely interactive, so no command line arguments are +needed to use bxcommit. +.\"SKIP_SECTION" +.SH LICENSE +This program is distributed under the terms of the GNU +Lesser General Public License as published by the Free +Software Foundation. See the COPYING file located in +/usr/local/share/doc/bochs/ for details on the license and +the lack of warranty. +.\"SKIP_SECTION" +.SH AVAILABILITY +The latest version of this program can be found at: + http://bochs.sourceforge.net/getcurrent.html +.\"SKIP_SECTION" +.SH SEE ALSO +bochs(1), bochsrc(5), bochs-dlx(1), bximage(1) +.PP +.nf +The Bochs IA-32 Emulator site on the World Wide Web: + http://bochs.sourceforge.net + +Online Bochs Documentation + http://bochs.sourceforge.net/doc/docbook +.fi +.\"SKIP_SECTION" +.SH AUTHORS +Bximage was written by Christophe Bothamy, +based on Bochs bximage tool source code. +.\"SKIP_SECTION" +.SH BUGS +Please report all bugs to the bug tracker on our web +site. Just go to http://bochs.sourceforge.net, and click +"Bug Reports" on the sidebar under "Feedback." +.PP +Provide a detailed description of the bug, the version of +the program you are running, the operating system you are +running the program on and the operating system you +are running in the emulator. + diff --git a/bochs/doc/man/bximage.1 b/bochs/doc/man/bximage.1 new file mode 100644 index 00000000..93f23965 --- /dev/null +++ b/bochs/doc/man/bximage.1 @@ -0,0 +1,91 @@ +.\"Document Author: Timothy R. Butler - tbutler@uninetsolutions.com" +.TH bximage 1 "29 Dec 2005" "bximage" "The Bochs Project" +.\"SKIP_SECTION" +.SH NAME +bximage \- Interactive Disk Image Creator for Bochs +.\"SKIP_SECTION" +.SH SYNOPSIS +.B bximage +.RI \|[ options \|] +.RI \|[ filename \|] +.\"SKIP_SECTION" +.SH DESCRIPTION +.LP +Bximage is an easy to use console based tool for creating +disk images, particularly for use with Bochs. It is +completely interactive if no command line arguments are +used. It can be switched to a non-interactive mode if all +required parameters are given in the command line. +.\".\"DONT_SPLIT" +.SH OPTIONS +.LP +When you run bximage without one of the following options, +it will appear in interactive mode and ask for all +required parameters to create an image. +.TP +.BI \-fd +Create a floppy image. +.TP +.BI \-hd +Create a hard disk image. +.TP +.BI \-mode=... +Image mode (for hard disks only - see the +.I bochsrc +sample for supported options). +.TP +.BI \-size=... +Image size in megabytes (e.g. 1.44 for floppy image, 10 +for hard disk image). +.TP +.BI \-q +Quiet mode (don't prompt for user input). Without this +option bximage uses the command line parameters as +defaults for the interactive mode. If this option is +given and one of the required parameters is missing, +bximage will fall back to interactive mode. +.TP +.BI \--help +Print a summary of the command line options for +bximage and exit. +.LP +The +.I filename +parameter specifies the name of the image to be created. +.\"SKIP_SECTION" +.SH LICENSE +This program is distributed under the terms of the GNU +Lesser General Public License as published by the Free +Software Foundation. See the COPYING file located in +/usr/local/share/doc/bochs/ for details on the license and +the lack of warranty. +.\"SKIP_SECTION" +.SH AVAILABILITY +The latest version of this program can be found at: + http://bochs.sourceforge.net/getcurrent.html +.\"SKIP_SECTION" +.SH SEE ALSO +bochs(1), bochsrc(5), bochs-dlx(1), bxcommit(1) +.PP +.nf +The Bochs IA-32 Emulator site on the World Wide Web: + http://bochs.sourceforge.net + +Online Bochs Documentation + http://bochs.sourceforge.net/doc/docbook +.fi +.\"SKIP_SECTION" +.SH AUTHORS +Bximage was written by Bryce Denney, based on several +similar tools from the bochs-developers list. +.\"SKIP_SECTION" +.SH BUGS +Please report all bugs to the bug tracker on our web +site. Just go to http://bochs.sourceforge.net, and click +"Bug Reports" on the sidebar under "Feedback." +.PP +Provide a detailed description of the bug, the version of +the program you are running, the operating system you are +running the program on and the operating system you +are running in the emulator. + diff --git a/bochs/docs-html/00README b/bochs/docs-html/00README new file mode 100644 index 00000000..95e96f2f --- /dev/null +++ b/bochs/docs-html/00README @@ -0,0 +1,5 @@ +In the past this folder contained the Bochs documentation. After converting +everything to the docbook format, it can be used as a temporary storage for +new stuff before adding it to the official docs. + +-Volker Ruppert diff --git a/bochs/docs-html/biossums.txt b/bochs/docs-html/biossums.txt new file mode 100644 index 00000000..cf114ba8 --- /dev/null +++ b/bochs/docs-html/biossums.txt @@ -0,0 +1,118 @@ +biossums + + +Intention + +Writing a bios for a pc-compatible includes the task of embedding various +checksums. At least there is the overall bios checksum stored in the very +last byte of the program. Depending on the number and types of services the +bios provides there are others, e.g. + +-- a checksum for the pci bios extensions, +-- a checksum for the plug and play bios extensions, +-- checksums for multiprocessor bios extensions. + +All these checksums have one common point: using the usual assembler directives +they are hard (if not impossible) to compute at compile time. You can either +compute them by hand --- a tedious, error-prone, task, where in addition you +often have to make unreliable assumptions about the memory layout of the +entire bios. Or you patch them directly into your compiled bios-image. Apart +from computing the checksums this is what biossums does for you. + + + +Checksums + +With the exception of the overall bios checksum, in a modern pc-bios checksums +are not used to ensure data integrity. Instead they are used in conjunction +with certain signatures to securely identify the entry points or the addresses +of important data of some bios-extensions. Because these services are often +invoked from x86 protected mode the original method via interrupts is not +applicable. Scanning (even only parts) of the bios for (short) signatures and +solely relying on this is insecure though, cause the found signature might not +refer to the sought service but rather be some obscure machine code resembling +the signature by accident. + +Since signatures are usually part of a larger header or table the above +mentioned problem is being circumvented by checksumming over this header and +comparing the result to a checksum stored next to the signature. In practice the +checksum is often part of the header, chosen in a way that the contents of the +header add up to zero. + + + +Usage + +biossums is very simple and straightforward. The only (and mandatory) argument +is the file-name of the bios-image. The file is being read, patched and written. +So if you want to keep your original file for reference, use biossums on a copy +of your bios-image. + +For now, biossums can only rely on signatures to find the locations of the +accompanying checksums. Therefore biossums refuses to set any checksums if it +finds more than one signature of the same type. + + + +Example output + +Run upon a Bochs bios configured for 2 CPUs (ver. 1.29) biossums displays: + +PCI-Bios header at: 0x9480 +Current checksum: 0xA9 +Calculated checksum: 0xA9 + + +MP header at: 0xD0F0 +Current checksum: 0xC1 +Calculated checksum: 0xC1 + + +PCMP header at: 0xD000 +Current checksum: 0x65 +Calculated checksum: 0x65 + + +Bios checksum at: 0xFFFF +Current checksum: 0x00 +Calculated checksum: 0x24 Setting checksum. + + +If we patch in a second "_32_" signature at offset 0x9760 and reset the PCMP +checksum to 0x00 we get: + +PCI-Bios header at: 0x9480 +Current checksum: 0xA9 +Calculated checksum: 0xA9 + +PCI-Bios header at: 0x9760 +Current checksum: 0x00 +Calculated checksum: 0x00 Multiple PCI headers! No checksum set. + + +MP header at: 0xD0F0 +Current checksum: 0xC1 +Calculated checksum: 0xC1 + + +PCMP header at: 0xD000 +Current checksum: 0x00 +Calculated checksum: 0x65 Setting checksum. + + +Bios checksum at: 0xFFFF +Current checksum: 0x00 +Calculated checksum: 0x01 Setting checksum. + + + +Possible enhancements + +Although biossums takes care of all checksums being used by the bios of the +Bochs project (as of version 2.02) there are more to cover, e.g. the checksums +for "Plug and Play" bios extension. + +In addition it was planned to provide further information to biossums via map-/ +symbol-files to verify the locations of checksums apart from scanning for +signatures. For now this seems not to be necessary; in practice no double +signatures have been observed yet. diff --git a/bochs/docs-html/cosimulation.html b/bochs/docs-html/cosimulation.html new file mode 100644 index 00000000..8c8ee950 --- /dev/null +++ b/bochs/docs-html/cosimulation.html @@ -0,0 +1,606 @@ + + + + + + + Cosimulating: Using Bochs debugger to drive 2 simulators + + + + +

Welcome to the Bochs x86 PC Emulation Software Home Page!

+ +

Cosimulating: using Bochs debugger to drive 2 simulators

+ +
+

What is Cosimulation?

+ +Under Construction +I'll add a discussion of cosimulation here soon. + +
+

Cosimulation Programmatic Interface

+Under Construction +This documentation is not yet complete, and this interface is +subject to change. + +
+
+

Callback Structure:

+ +

Upon startup, the cosimulation controller (debugger) will initialize each +simulator (or emulator) by calling an init routine. There are 2 +macro's in config.h (generated from config.h.in), which determine +the names of the initialization routines, one for each simulator. +These macro's are BX_SIM1_INIT and BX_SIM2_INIT. The first one +likely can be kept as is. You will need to edit the second +one, to be a routine in the second simulator which will receive +a few parameters, and fill in a callback structure. This is the +only routine in each simulator environment which is needed directly, +as the callback routines which are filled in, are used subsequently. +It should be of the type: + +

+  void some_name_here(bx_dbg_callback_t *, int argc, char *argv[]);
+
+ +The argc and argv parameters are as you might expect. +They consist of any simulator specific command line options passed to +the bochs executable at program invocation time. Since there can be +more than one simulator, command line options are delimited by +-sim1 and -sim2 as in: + +
+  Usage: bochs [-rc path] [-sim1 ... ] [-sim2 ...]
+
+ +The first parameter is the address of a callback structure, whose type +bx_dbg_callback_t is defined in bx_debug/debug.h. Most fields +are function pointers, though some are not. Below, is a description +of each field in the callback structure. + +

+

+  typedef struct {
+    bx_bool (*setphymem)(Bit32u addr, unsigned len, Bit8u *buf);
+    bx_bool (*getphymem)(Bit32u addr, unsigned len, Bit8u *buf);
+    void    (*xlate_linear2phy)(Bit32u linear, Bit32u *phy, bx_bool *valid);
+    bx_bool (*set_reg)(unsigned reg, Bit32u val);
+    Bit32u  (*get_reg)(unsigned reg);
+    bx_bool (*set_cpu)(bx_dbg_cpu_t *cpu);
+    bx_bool (*get_cpu)(bx_dbg_cpu_t *cpu);
+    unsigned       dirty_page_tbl_size;
+    unsigned char *dirty_page_tbl;
+    void    (*atexit)(void);
+    unsigned (*query_pending)(void);
+    void     (*execute)(void);
+    void     (*take_irq)(void);
+    void     (*take_dma)(void);
+    void     (*reset_cpu)(unsigned source);
+    void     (*init_mem)(int size_in_bytes);
+    void     (*load_ROM)(const char *path, Bit32u romaddress);
+
+    void     (*set_A20)(unsigned val);
+    void     (*set_NMI)(unsigned val);
+    void     (*set_RESET)(unsigned val);
+    void     (*set_INTR)(unsigned val);
+    void     (*force_interrupt)(unsigned vector);
+
+  #if BX_INSTRUMENTATION
+    void    (*instr_start)(void);
+    void    (*instr_stop)(void);
+    void    (*instr_reset)(void);
+    void    (*instr_print)(void);
+  #endif
+  #if BX_USE_LOADER
+    void    (*loader)(char *path);
+  #endif
+    } bx_dbg_callback_t;
+
+ +

bx_bool (*setphymem)(Bit32u addr, unsigned len, Bit8u *buf); +

Set (write to) physical memory of simulator at address addr from the +len bytes in buf. The bytes in buf should be copied to the simulator's +physical memory byte-at-a-time with no concern for endian-ness. Return 1 +if the write is OK, 0 if an error occurs. + +

bx_bool (*getphymem)(Bit32u addr, unsigned len, Bit8u *buf); +

Get (read from) physical memory of simulator at address addr to the +len bytes in buf. The bytes in buf should be copied from the simulator's +physical memory byte-at-a-time with no concern for endian-ness. Return 1 +if the read is OK, 0 if an error occurs. + +

void (*xlate_linear2phy)(Bit32u linear, Bit32u *phy, bx_bool *valid); +

Translate a linear to a physical address, without generating an exception +or updating the paging tables. The debugger passes the simulator the +linear address. The simulator is expected to set phy to +the corresponding physical address if available, and update valid, +which should be set to 1 if the physical address was available, and 0 +if not. It is possible, the address is not in the paging tables, and +thus not available. + +

bx_bool (*set_reg)(unsigned reg, Bit32u val); +

Set a specific CPU register as determined by reg in the +simulator to val. The value of reg will be one of the +defines, such as BX_DBG_REG_EAX defined in bx_debug/debug.h. The +segment registers can only be set by this method in real mode. This +function should return a 1 if the operation is successful, and 0 if not. + +

Bit32u (*get_reg)(unsigned reg); +

Return the value of a specific CPU register in the simulator as +determined by reg, whose value is of the same range +as those passed into set_reg() + +

bx_bool (*set_cpu)(bx_dbg_cpu_t *cpu); +

Set all the registers in the CPU simulator to those in the structure +cpu. The bx_dbg_cpu_t structure is defined in bx_debug/debug.h. + +

bx_bool (*get_cpu)(bx_dbg_cpu_t *cpu); +

Get values for all the registers in the CPU simulator, and place them in +the structure cpu. The bx_dbg_cpu_t structure is defined in bx_debug/debug.h. + +

unsigned dirty_page_tbl_size; +
unsigned char *dirty_page_tbl; +

To keep track of what areas of memory have been written to, and allow +the debugger to efficiently compare regions of memory in each simulator, +each simulator should provide a dirty page table. It is expected that +each byte in the array represents one 4K page of physical memory. A value +of 1 represents that the page has been written to, since the last time it +was cleared by the debugger, and a value of 0 represents that no write +has occurred within that physical page. +

You should fill in the field dirty_page_tbl with a pointer +to an array of bytes. And dirty_page_tbl_size should be set +to the size of the array in bytes. If possible, make the array big +enough to span the largest amount of physical memory you might request. +I chose to not make this size dynamic with the user's requested memory size, +to eliminate an extra access via a pointer. + +

void (*atexit)(void); +

Called when the debugger needs to terminate execution. This function +should close files and do all necessary shutdown of the simulator. +NOTE: Do not call exit() directly from +the simulator, but instead call bx_dbg_exit(). As there may be multiple +simulators, bx_dbg_exit() will handle invoking the atexit callback in +each simulator first, and then it will call exit(). + +

void (*execute)(void); +

The debugger calls execute() in either slave or master simulator, +commanding either to execute instructions until a guard is reached, in which +case control should be returned back to the debugger. + +

void (*reset_cpu)(unsigned source); +

This function is called once by the debugger to initialize the simulator's +CPU upon program startup. Source will be either +BX_RESET_HARDWARE or BX_RESET_SOFTWARE. + +

void (*init_mem)(int size_in_bytes); +

This function is called once by the debugger to initialize the simulator's +memory upon program startup. Size_in_bytes denotes +the size of physical memory the user has requested, so that both simulators +can use the same physical memory size. This would be an appropriate +time to allocate memory for the simulator. + +

void (*load_ROM)(const char *path, Bit32u romaddress); +

Commands the simulator to load a ROM image stored in the filename +path into physical memory at address romaddress. + +

void (*set_A20)(unsigned val); +

This function is called by the cosim controller to command either master +or slave simulator to change it's A20 setting. If the value of val passed +is 1, then the A20 address line is passed through and used. This will give +normal addressing of the entire 32bit address space. If the value is 0, +then A20 is masked out, and addressing at the 1Meg boundary will wrap, modeling +8086 addressing. +

The cosim controller also commands the bx_pc_system class to +maintain the same A20 state as passed in this function, so you may alternatively +use values directly from that class, rather than keep your own A20 state. +If so, set the value of set_A20 to NULL, and use the following +members from bx_pc_system. In this case, set_A20 won't be +called. +

    +
  • bx_pc_system.enable_a20: Same value as passed to set_A20. +
  • bx_pc_system.a20_mask: Logical AND this with a physical address to obtain the +address after application of the A20 gate. +
+ +

void (*set_NMI)(unsigned val); +

Not supported yet. Will tell the simulator that the value of +the NMI pin, is currently val. Use an empty stub function +for this for now. + +

void (*set_RESET)(unsigned val); +

Not supported yet. Will tell the simulator that the value of +the RESET pin, is currently val. Use an empty stub function +for this for now. + +

void (*set_INTR)(unsigned val); +

The INTR pin is driven by the device models. When the INTR pin is +raised due to an interrupt request by the PIC, or lowered after the +interrupt is acknowledged, this function is called to notify the +simulator of the new status. Only the master simulator will receive +notification, as INTR is always 0 for the slave simulator. Interrupts +are forced in the slave simulator, synchronizing it to the execution +path of the master, using force_interrupt() described below. +A value in val of 0 indicates no interrupt is requested. A value +of 1 indicates an interrupt request. + +

void (*force_interrupt)(unsigned vector); +

In order for the debugger to force the slave simulator to take an +interrupt at the same point as the master simulator, the interrupt vector +is recorded when taken by the master simulator. The debugger commands +the slave to the same point, and calls this routine, forcing the slave +to take the given interrupt, vector. + +

void (*instr_start)(void); (Only defined if macro BX_INSTRUMENTATION is 1) +

Called when the user types in "instrument start" at the debug prompt. +The instrumentation package can use this function to do whatever is +necessary to initialize the instrumentation package and/or command +it to begin collecting data. + +

void (*instr_stop)(void); (Only defined if macro BX_INSTRUMENTATION is 1) +

Called when the user types in "instrument stop" at the debug prompt. +The instrumentation package can use this function to do whatever is +necessary to temporarily or permanently stop the instrumentation package +from collecting data. + +

void (*instr_reset)(void); (Only defined if macro BX_INSTRUMENTATION is 1) +

Called when the user types in "instrument reset" at the debug prompt. +The instrumentation package can use this function to command the instrumentation +package to reset it's data collection mechanisms. + +

void (*instr_print)(void); (Only defined if macro BX_INSTRUMENTATION is 1) +

Called when the user types in "instrument print" at the debug prompt. +The instrumentation package can use this function to output it's collected +data. + +

void (*loader)(char *path); (Only defined if macro BX_USE_LOADER is 1) +

Called when the user types in "loader pathname" at the debug prompt. +The idea is to allow a loader routine to read in a program which is specific +to the OS you are running within the emulator, from a file on your native +workstation, load it properly into simulator memory and run it on the +simulator. This loader must be specific to the OS you are running within the +simulator, and I do not provide one with bochs. + +

void (*take_irq)(void); +
void (*take_dma)(void); +
unsigned (*query_pending)(void); +

These are vestiges of a past interface. They correspond to the +"take irq", "take dma", and "query pending" commands, which you +shouldn't use. They will be removed. Set these fields to NULL, +or to empty stub functions. + +


+
+

Debugger (Cosimulation Controller) Functions:

+ +

void bx_dbg_exit(int code) +

When there is a situation in the simulator, where you need to terminate +due to an unrecoverable error (panic), call bx_dbg_exit(). Among +other things, this function will call the at_exit callback function +in each simulator, and ultimately call the system exit() function. + +

Bit8u bx_dbg_IAC(void) +

The simulator's CPU code should call this function when it is acknowledging an +interrupt from the PIC via the INTR line. The interrupt vector number from the PIC +is returned. + +

Bit32u bx_dbg_inp(Bit16u addr, unsigned len) +

To read data from an IO device, the simulator should call this function. +Pass in the IO address addr, and the size of the IO operation len. + +

void bx_dbg_outp(Bit16u addr, Bit32u value, unsigned len) +

To write data to an IO device, the simulator should call this function. +Pass in the IO address addr, and the size of the IO operation len. + +

Bit8u bx_dbg_ucmem_read(Bit32u addr) +
void bx_dbg_ucmem_write(Bit32u addr, Bit8u value) +

For memory read/write accesses which fall in the range of 0xA0000 to 0xBFFFF, +the accesses should not be to directed to the simulator's memory, since +these are UnCacheable MEMory addresses. The VGA adapter maps it's memory to this +range. Instead, call these functions to perform reads/writes to memory +accesses in this range. For bx_dbg_ucmem_read(), pass the physical address +addr, and the value of the read is returned. For bx_dbg_ucmem_write(), +pass the physical address addr and value value of the write. + +

void bx_dbg_async_pin_ack(unsigned what, bx_bool val) +

In order for the master and slave simulators to accept changes in pins +such as the A20 line, at the same point, the debugger provides a mechanism +for pending the pin change, until it is acknowledged by the master simulator. +The place where the change is ack'd, is recorded by the debugger. This +information is used to run the slave simulator, forcing it to accept the +changes at the same locale as did the master. + +

Initially, the IO devices call a function bx_dbg_async_pin_request(), +not listed here, to record the pin change as pending. The pending status +is recorded along with the guard information in bx_guard.async_changes_pending.which. +This field contains a binary OR'd set of pending pin changes. Currently +only A20 is supported, which is represented by the macro BX_DBG_ASYNC_PENDING_A20. + +

At a time prudent to your CPU simulator, check to see if there are +any pending changes, that the CPU should acknowledge. If so, acknowledge +them by calling bx_dbg_async_pin_ack(). The pending value of +the A20 enable is stored in bx_guard.async_changes_pending.a20. +Here is some sample code which performs this task, that you can insert +into the appropriate place in your CPU simulator. + +

+  if (bx_guard.async_changes_pending.which) {
+    if (bx_guard.async_changes_pending.which & BX_DBG_ASYNC_PENDING_A20)
+      bx_dbg_async_pin_ack(BX_DBG_ASYNC_PENDING_A20,
+                           bx_guard.async_changes_pending.a20);
+    // ...other checks here when they are supported
+    }
+
+ +The bx_dbg_async_pin_ack() function will in turn, invoke +the set_A20() callback function in the master simulator, so you +don't have to deal with updating local A20 state in your simulator here, +as long as you handle it in set_A20(). Keep in mind, the slave +simulator will never see the code inside this sample code if-construct, +since changes are forced in the slave by the debugger at points where the master +simulator acknowledged them, not as a direct effect of the IO devices. + +
+
+

Guards:

+ +Guards are a mechanism by which the debugger requests each simulator +to stop execution and return control back to the debugger. The debugger +runs each simulator for a particular number of instructions, or until +certain events occur. Guards are set by the debugger, and it is up +to each simulator to examine them upon and during execution of the execute() +callback, and return control back to the debugger when the guard criteria +are met. + +

Guard information set by the debugger is stored in global structure +bx_guard of type bx_guard_t. For reference, it's declaration +is shown here, followed by an explanation of the purpose of each field. +Information about the guard encountered by the simulator, and which +caused control to return to the debugger is stored in the global structure +bx_guard_found[] of type bx_guard_found_t. This is actually +an array of structures, where bx_guard_found[0] is the first simulator +with ID 0, and bx_guard_found[1] is the second simulator with +ID 1. This structure is also declared below, and the text explains +the information which should be returned in this structure based on +the guard encountered. + +

+typedef struct {
+  unsigned long guard_for;
+
+  // instruction address breakpoints
+  struct {
+#if BX_DBG_SUPPORT_VIR_BPOINT
+    unsigned num_virtual;
+    struct {
+      Bit32u cs;  // only use 16 bits
+      Bit32u eip;
+      unsigned bpoint_id;
+      } vir[BX_DBG_MAX_VIR_BPOINTS];
+#endif
+
+#if BX_DBG_SUPPORT_LIN_BPOINT
+    unsigned num_linear;
+    struct {
+      Bit32u addr;
+      unsigned bpoint_id;
+      } lin[BX_DBG_MAX_LIN_BPOINTS];
+#endif
+
+#if BX_DBG_SUPPORT_PHY_BPOINT
+    unsigned num_physical;
+    struct {
+      Bit32u addr;
+      unsigned bpoint_id;
+      } phy[BX_DBG_MAX_PHY_BPOINTS];
+#endif
+    } iaddr;
+
+  bx_dbg_icount_t icount; // stop after completing this many instructions
+
+  // user typed Ctrl-C, requesting simulator stop at next convient spot
+  volatile bx_bool interrupt_requested;
+
+  // booleans to control whether simulator should report events
+  // to debug controller
+  struct {
+   bx_bool irq;
+   bx_bool a20;
+   bx_bool io;
+   bx_bool ucmem;
+   bx_bool dma;
+   } report;
+
+  struct {
+    bx_bool irq;  // should process IRQs asynchronously
+    bx_bool dma;  // should process DMAs asynchronously
+    } async;
+
+#define BX_DBG_ASYNC_PENDING_A20   0x01
+#define BX_DBG_ASYNC_PENDING_RESET 0x02
+#define BX_DBG_ASYNC_PENDING_NMI   0x04
+
+  // Asynchronous changes which are pending.  These are Q'd by
+  // the debugger, as the master simulator is notified of a pending
+  // async change.  At the simulator's next point, where it checks for
+  // such events, it notifies the debugger with acknowlegement.  This
+  // field contains a logically or'd list of all events which should
+  // be checked, and ack'd.
+  struct {
+    unsigned which; // logical OR of above constants
+    bx_bool a20;
+    bx_bool reset;
+    bx_bool nmi;
+    } async_changes_pending;
+  } bx_guard_t;
+
+typedef struct {
+  unsigned long guard_found;
+  unsigned iaddr_index;
+  bx_dbg_icount_t icount; // number of completed instructions
+  Bit32u   cs;     // cs:eip and linear addr of instruction at guard point
+  Bit32u   eip;
+  Bit32u   laddr;
+  bx_bool  is_32bit_code; // CS seg size at guard point
+  bx_bool  ctrl_c; // simulator stopped due to Ctrl-C request
+  } bx_guard_found_t;
+
+extern bx_guard_t        bx_guard;
+extern bx_guard_found_t  bx_guard_found[];
+
+ +
+

bx_guard_found[]:

+It is the task of each simulator to update the bx_guard_found +structure. +There are some fields which are specific to the type of guard in +question, and you should update those when a particular guard is +encountered. Those fields are explained in more detail in the section +relating to the specific guard. There are some fields which are +updated for every case, no matter what the guard is. Below is a list +and explanation of the usage of each field. + +

unsigned long guard_found; this should be filled in with the +particular guard encountered, for example if an instruction count +guard is hit, set this to BX_DBG_GUARD_ICOUNT. + +

unsigned iaddr_index; +This field is updated, whenever a virtual/linear/physical instruction +address guard is hit. It is the array index into the bx_guard.iaddr.vir[], +bx_guard.iaddr.lin[], or bx_guard.iaddr.phy[] arrays, whichever is appropriate. + +

bx_dbg_icount_t icount; +This contains the number of instructions which have been completely +executed, when the guard was encountered. + +

Bit32u cs; +
Bit32u eip; +
Bit32u laddr; +
bx_bool is_32bit_code; +These all relate to the same instruction address. From the debugger's +point of view, instruction addresses can be only at the beginning of +the instruction. Once an instruction is completed, use the address +of the next instruction. +Set cs and eip to the instruction's address (CS:EIP). +Set laddr to the instruction's corresponding linear address. +Set is_32bit_code to the size (0=16bit, 1=32bit) of the code +segment when the guard is encountered. This is used for disassembly. + +

bx_bool ctrl_c; +To allow the user to interrupt a simulator from the debug prompt, the +debugger traps Ctrl-C interrupts, and sets bx_guard.interrupt_requested. +Your simulator can optionally look for this, provided that the +BX_DBG_GUARD_CTRL_C bit is set in bx_guard.guard_for structure. +If you chose to do so, you may look for this occurrance whenever is +convenient. Set ctrl_c to 1 to signify this guard has occurred. +Here' some sample code to demonstrate this: +

+    // convenient point to see if user typed Ctrl-C
+    if (bx_guard.interrupt_requested && (bx_guard.guard_for & BX_DBG_GUARD_CTRL_C)) {
+      bx_guard_found[BX_SIM_ID].guard_found = BX_DBG_GUARD_CTRL_C;
+      return; // some mechanism to return control here
+      }
+
+ +
+

bx_guard:

+

unsigned long guard_for; +

This is a binary OR'd list of guards the debugger is requesting each +simulator to stop on. Only if the corresponding bit is set in this field, +should the simulator examine the rest of the criteria for that guard. +Currently, each simulator must be capable of recognizing the following +guards, and returning to the debugger when they occur: +

    +
  • BX_DBG_GUARD_ICOUNT: Instruction count. +
  • BX_DBG_GUARD_CTRL_C: User requested interrupt via Ctrl-C +
  • BX_DBG_GUARD_IADDR_VIR: Stop on this virtual instruction address +
  • BX_DBG_GUARD_IADDR_LIN: Stop on this linear instruction address +
  • BX_DBG_GUARD_IADDR_PHY: Stop on this physical instruction address +
+ +

struct { .. } iaddr; +

This structure holds the guard information for instruction address +guards (breakpoints). Depending upon your selections, after editing +config.h in the main directory (generated by running ./configure), +certain types of instruction address guards are supported. Which ones, +are determined by the BX_DBG_SUPPORT_VIR_BPOINT, BX_DBG_SUPPORT_LIN_BPOINT, +and BX_DBG_SUPPORT_PHY_BPOINT macros. + +

If the guard_for field contains a set bit represented by +BX_DBG_GUARD_IADDR_VIR, then the iaddr.num_virtual field holds +the number of virtual instruction address guards to examine and compare +to the current address. For each, you must examine the CS:EIP values +stored in iaddr.vir[n], in the cs and eip subfields. +If there is a match, record this in the guard found structure, and +return control to the debugger: +

+bx_guard_found[ID].guard_found = BX_DBG_GUARD_IADDR_VIR;
+bx_guard_found[ID].iaddr_index = n; // array index in bx_guard.iaddr.vir[]
+bx_guard_found[ID].icount = .. // number of completed instructions
+bx_guard_found[ID].cs = .. // CS selector value
+bx_guard_found[ID].eip = .. // EIP value
+bx_guard_found[ID].laddr = .. // linear address of CS:EIP
+bx_guard_found[ID].is_32bit_code = .. // 0=16bit code, 1=32bit code
+// return control here
+
+ +

If the guard_for field contains a set bit represented by +BX_DBG_GUARD_IADDR_LIN, then the iaddr.num_linear field holds +the number of linear instruction address guards to examine and compare +to the current address. For each, you must examine the linear address values +stored in iaddr.lin[n], in the addr subfield. +If there is a match, record this in the guard found structure, and +return control to the debugger: +

+bx_guard_found[ID].guard_found = BX_DBG_GUARD_IADDR_LIN;
+bx_guard_found[ID].iaddr_index = n; // array index in bx_guard.iaddr.lin[]
+bx_guard_found[ID].icount = .. // number of completed instructions
+bx_guard_found[ID].cs = .. // CS selector value
+bx_guard_found[ID].eip = .. // EIP value
+bx_guard_found[ID].laddr = .. // linear address of CS:EIP
+bx_guard_found[ID].is_32bit_code = .. // 0=16bit code, 1=32bit code
+// return control here
+
+ +

If the guard_for field contains a set bit represented by +BX_DBG_GUARD_IADDR_PHY, then the iaddr.num_physical field holds +the number of physical instruction address guards to examine and compare +to the current address. For each, you must examine the physical address values +stored in iaddr.phy[n], in the addr subfield. +If there is a match, record this in the guard found structure, and +return control to the debugger: +

+bx_guard_found[ID].guard_found = BX_DBG_GUARD_IADDR_PHY;
+bx_guard_found[ID].iaddr_index = n; // array index in bx_guard.iaddr.phy[]
+bx_guard_found[ID].icount = .. // number of completed instructions
+bx_guard_found[ID].cs = .. // CS selector value
+bx_guard_found[ID].eip = .. // EIP value
+bx_guard_found[ID].laddr = .. // linear address of CS:EIP
+bx_guard_found[ID].is_32bit_code = .. // 0=16bit code, 1=32bit code
+// return control here
+
+ + +

volatile bx_bool interrupt_requested; +

If the debugger has turned on the guard for a user interrupt, and +the user has indeed requested one (Ctrl-C), the debugger will set +this field to 1. The simulator should record this in the guard found +information, and return control back to the debugger. Look above at the +explanation for the bx_guard.interrupt_requested field for some sample code +on how to do this. + +

struct { .. } async; +

struct { .. } async_changes_pending; + + +


+

+Related Links: +

+ + + diff --git a/bochs/docs-html/enh_dbg_user_man.txt b/bochs/docs-html/enh_dbg_user_man.txt new file mode 100755 index 00000000..2efa82c9 --- /dev/null +++ b/bochs/docs-html/enh_dbg_user_man.txt @@ -0,0 +1,163 @@ +User tips: (ver 1.2) + +The main user features available from the menus should be fairly obvious +to anyone who has used bochs -- but here are a few quick explanations, anyway. +These explanations include a few keyboard and mouse shortcuts that you might +not find through experimentation. + +Terminology: +The Bochs guys call this GUI debugger interface the CI, to distinguish it +for themselves from the "VGA window" that shows the display of the simulated +computer. I will call this debugger GUI interface the "frontend". It's not +much better of a term, but oh well. + +The text debugger interface that you are all familiar with is called the +Bochs Internal Debugger ("ID" for short). + +The frontend is organized around 3 main "list-view" windows: + +The Register window: +Typically, all the various registers are grouped by color. If you don't like the +colors, they can be turned off, or modified at compile time. There are options +to show or hide most register "groups", so that you can focus more strictly on +the registers you are interested in (probably just the GP registers). + +Notes: +Yes, the XMM display shows hex in the "decimal" column -- there is more +room there. Deal with it. + +** Doubleclicking a register attempts to change its value. Bochs may not +allow you to change most registers. In future versions, more registers may +be modifiable. + +The Disassembly window: +Disassembly output that is autoloaded, or generated from the menu, ends up +here. If the frontend cannot detect the "current instruction" in the list, +when it reaches the next instruction -- then it will autoload a new list. +Having a big list will reduce the number of autoloads, and allows you to see +more. The list can contain up to 2048 lines. However, if you load more than +1000 lines, you are more likely to see performance problems. + +Note: There are two kinds of emulated memory in bochs: Linear and Physical. +Emulated Linear memory is mapped onto Physical memory by x86 virtual memory +methods (paging and segmentation). If paging and segmenataion are "off", or +"identity mapped", then both "types" of memory mean the same thing. But they +still work a little differently. With the Internal Debugger, you can set +breakpoints to either kind of memory, separately. Normally, you would use +the "b" command to set breakpoints in physical mem, and "lb" to set breakpoints +in linear mem. This frontend ONLY displays linear breakpoints. It does not +bother trying to figure out the linear->phsical reverse mapping to show +physical breakpoints. (There are also "virtual" breakpoints that are also +not shown.) All the types of breakpoints still WORK, it is just that you +will not see them marked on the screen. + +It will be obvious to you that the current instruction is marked in green, +unless it is on a breakpoint, when it turns blue. Breakpoints are red, of +course. + +** You must click a line in the window, before you can use frontend commands +to set or clear a linear breakpoint on it. +** You can doubleclick (which saves steps) to set or clear a linear breakpoint. + +The MemDump window: + +As of this version, the MemDump window isn't much more than a display of the +contents of memory. In later versions, hopefully it will be expanded into a +fairly fully-featured hexeditor. You can dump either phyical mem, or linear +mem. There are breakpoint-like things (that work with physical memory only, +currently), called "watchpoints". A physical memory address can cause a break +in the simulation if it is read, or written. + +The frontend again does NOT try to calculate out the linear -> physical mapping +in any attempt to display the physical watchpoints while viewing linear mem. + +You must click a hex byte (on a physical mem dump that shows bytes), in order to +set or clear a read and/or write watchpoint on that byte. Read watchpoints are +green (on black), write watchpoints are red, watchpoints that are both write +and read are blue. There is a hardcoded limit in bochs of 16 of each type of +watchpoint. + +The MemDump window loads/shows 4K of memory at a time. + +** PageUp/Down scrolls the display up or down through mem, 2K at a time. +** Doubleclicking a line of memory allows you to change the byte values. +(Works on both linear and physical mem dumps.) +** Doubleclicking with the Shift key down sets write watchpoints. +** Doubleclicking with Alt sets read watchpoints. +** You need to click once on the memory window before you can use its "Find" +function. The Find function is pretty limited in scope, currently. It can +only find bytes (or strings of bytes) within each 16byte "line". + + +Other windows: + +The Output window shows anything that the Bochs Internal Debugger tries to send +to you. The window is scrollable, but only keeps a limited history of output (10K). +The ID is always spamming you with "Next at t=" and disassembly lines, that would +tend to fill up the Output window with garbage -- so there are options to ignore +either of these types of output. + +The Input window is for sending user commands directly into the Bochs Internal +Debugger -- bypassing the frontend. Results will appear in the Output Window. +The Input window has a history feature for commands, using the Up and Down arrows -- +it remembers 64 commands, 80 bytes each. No matter where you click on the frontend, +you can always type directly into the Input box without clicking on it. + +When the Input window is invisible, you should still be able to type into it -- +after taking into account the bug listed at the bottom of this file. + +** Hitting Enter on a blank line will cause a Singlestep. + +The Param Tree: + +The bochs param_tree shows the internal state of most of bochs. It will be +expanded in the future to show even more. You can see the detailed state of +all cpu registers -- including the "hidden" parts (look in the "bochs" branch). +Or see the current state of most of the emulated hardware. + +The Stack window: + +The MemDump windows do not automatically refresh -- except for the Stack +window. If you leave the stack window active, it will update as the stack +changes. If you want to update the other MemDump windows with fresh data, +hit Refresh. + +The Breakpoint/Watchpoint window: + +Doubleclicking will delete a breakpoint or watchpoint. + +The Command Button row: + +Just a (hopefully) convenient way of using the mouse, instead of the keyboard. +If you don't like them, or they take up too much space, you can turn them off. + +The CPU Button row: + +This only shows up when you are running a multi-cpu simulation. Click on the +CPU that you want to view. All CPUs are always stepped together, and they all +stop the first time one hits some sort of breakpoint. + +Docking/Resizing + +If you grab one of the two vertical "bars" between the lists, you can horizontally +resize the lists. The cursor will change, but there will be no animation. + +If you grab the middle of one of the lists, and drag it on top of one of the +other lists, you can reorder the positions of the lists on the screen. The +cursor will change, but there will be no animation. You can set an alternate +"docking order" at compile time, also, if you have a permanent preference. +(See the top of the wenhdbg_h.h file, for compile-time customization.) + +Additional Notes: + +If you have a really big GDT or Paging display in the MemDump window, and you +select a different display, it may take several seconds to delete the big display +before it can switch. + +Uppercase text tends to seem a little annoying, but it really is a lot easier to +read, especially on a proportional font. If you change to a fixed font, then you +may want to switch the display to lowercase. + +KDE Users: The gtk-qt-engine drawing functions of Ver 0.71 (or anything earlier +than 1.0?) draw all text as black, instead of in the correct foreground colors. +Fix: Upgrade to 1.1. diff --git a/bochs/docs-html/memory.txt b/bochs/docs-html/memory.txt new file mode 100755 index 00000000..d772b3dc --- /dev/null +++ b/bochs/docs-html/memory.txt @@ -0,0 +1,114 @@ +Memory access handling explanation +by Brendan Trotter: + +For the local APIC/s, any read or write to a CPU's own local APIC is +handled internally and does not go to the bus. If the read/write misses +this area then the read/write does go to the bus (where other CPU's ignore +it). + +This means if 2 CPUs have different local APIC addresses and one CPU tries +to write to the area used by the second CPU's local APIC, then it will go +to the bus and will not access the second CPU's local APIC. +This applies in all cases (e.g. hyper-threading and dual core work the same). + +For I/O APICs, the device is on the bus and should override anything that +is "underneath" it. For example, if you relocate the I/O APIC to +0x00000000, then a read or write to this area will not reach the RAM +underneath. In a similar way, if someone maps a PCI device to 0xFEC00000 +(or somewhere that overlaps the I/O APIC) then a write to this area will +not reach the PCI device. + +This leads to something like the following for accesses originating from a +CPU: + +if (address_is_within_this_CPUs_local_APIC_area) + do_local_APIC_access(); +else if (address_is_within_an_I/O_APIC_area) + do_I/O_APIC_access(); +else if (address_is_within_a_PCI_device_area) + do_PCI_access(); +else if (address_is_within_RAM_area) + do_RAM_access(); +else printf("Bogus address!\n"); + +For an accesses originating from a PCI device (e.g. PCI bus masters), there +is no access to any CPUs local APIC. It'd go like: + +if (address_is_within_an_I/O_APIC_area) + do_I/O_APIC_access(); +else if (address_is_within_a_PCI_device_area) + do_PCI_access(); +else if (address_is_within_RAM_area) + do_RAM_access(); +else printf("Bogus address from PCI device!\n"); + +In both cases it is complicated by the configuration of the PCI host +controller/s and any "PCI to PCI" bridges. Fortunately this can be ignored +by Bochs as it doesn't support PCI bridges (except for the host controller +itself which can handle all accesses). Bochs may need to worry about the +"PCI to LPC" bridge though. For example, even though a PCI device can +read/write to the I/O APIC, an ISA device behind the PCI to LPC bridge +can't. This means for an ISA bus master you'd have something like: + +if (address_is_within_a_PCI_device_area) + do_PCI_access(); +else if (address_is_within_RAM_area) + do_RAM_access(); +else printf("Bogus address from PCI device!\n"); + +This complicates things for the ISA DMA controllers, which should not be +able to read/write to the I/O APIC - for e.g. if the I/O APIC base is set +to 0x00000000, then an ISA DMA transfer that writes to 0x00000000 should +write to RAM not the I/O APIC (a PCI bus master would write to the I/O APIC +in the same situation). + +I'm not convinced modelling real hardware 100% correctly is necessary +though - it would only matter for very rare situations (e.g. when the OS +stuffs things up badly). A normal OS will not stuff things up like this +(i.e. a normal OS won't map the I/O APIC to an area that overlaps RAM or +anything else). For OS developers (who might stuff things up), it'd +probably be better to panic anyway - e.g. "BX_PANIC: I/O APIC base set to +an address that overlaps RAM or a memory mapped device". + +In general, the CPU has an "address bus" which consists of data lines, +address lines and 2 others lines. One of these other lines is the "I/O +select" line - if you do "mov [0x000000AA],al" and then do "out 0xAA,al" +you'd get almost the same thing on the CPUs bus (the only difference would +be the state of the "I/O select" line). When the CPU does an access that is +intended for I/O port space it just asserts the "I/O select" line. + +The second line is for SMM which works just like the I/O select line. + +When the CPU accesses a memory location normally the "SMM select" line is +not asserted and normal memory is accessed. When the CPU is in SMM mode the +"SMM select" line is asserted for memory accesses. This means that the CPU +can use 3 completely seperate address spaces (one for normal memory, one +for I/O space and another for SMRAM). How the chipset treats these lines +depends on what the CPU is used for - for example, these lines could be +ignored so that all types of accesses are the same (which means I/O port +instructions would access memory locations from 0x00000000 to 0x0000FFFF +and there'd be no seperate SMRAM area). For "PC compatible" computers the +"I/O select" line does select a completely seperate address space, but the +"SMM select" line does not. Instead, the chipset uses it to disable access +to the video display memory (and enable access to the RAM underneath). + +Fortunately, access to the SMRAM area is also controlled by the chipset, +such that the CPU can access SMRAM regardless of whether it asserts it's +"SMM select" line or not. As mentioned in my previous email, for the I440FX +chipset it's called the System Management RAM Control Register (or SMRCR), +and is in the PCI host controller's PCI configuration space at offset 0x72. + +Returning to what I wrote earlier, this leads to something like the +following for accesses originating from a CPU: + +if (address_is_within_this_CPUs_local_APIC_area) + do_local_APIC_access(); +else if ((CPU_is_in_SMM_mode || chipset_SMRCR_enabled) && address_is_within_SMM_area) + do_SMM_access(); +else if (address_is_within_an_I/O_APIC_area) + do_I/O_APIC_access(); +else if (address_is_within_a_PCI_device_area) + do_PCI_access(); +else if (address_is_within_RAM_area) + do_RAM_access(); +else printf("Bogus address!\n"); diff --git a/bochs/docs-html/random.txt b/bochs/docs-html/random.txt new file mode 100644 index 00000000..9ac36ef7 --- /dev/null +++ b/bochs/docs-html/random.txt @@ -0,0 +1,12 @@ +look at http://www.ao.net/help/software/lps/disktools/INDEX +asbench.zip Benchmark for drives under a ASPI device driver +ataid011.zip ATA Identification. Echos Identify Drive data +atrt4mb.exe AT Regression test +and most interesting of all: +ext2tool.zip Mount and use Ext2 filesystems from DOS + + +From: Gregg Eshelman +Sounds good. :) Some Windows disk imaging apps +are WinImage and SH (Schenk and Horne) Copy Star. + diff --git a/bochs/dynamic/README b/bochs/dynamic/README new file mode 100644 index 00000000..87ef8aa8 --- /dev/null +++ b/bochs/dynamic/README @@ -0,0 +1,5 @@ +I'm going to completely rehash the dynamic translation code. +For now, I removed this since it's out of date. + +-Kevin +Oct 4 1999 diff --git a/bochs/extplugin.h b/bochs/extplugin.h new file mode 100644 index 00000000..2e27d143 --- /dev/null +++ b/bochs/extplugin.h @@ -0,0 +1,55 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// extplugin.h +// +// This header file defines the types necessary to make a Bochs plugin, +// but without mentioning all the details of Bochs internals (bochs.h). +// It is included by the configuration interfaces and possibly other +// things which are intentionally isolated from other parts of the program. +// +// The plugin_t struct comes from the plugin.h file from plex86. +// Plex86 is Copyright (C) 1999-2000 The plex86 developers team +// +///////////////////////////////////////////////////////////////////////// + +#ifndef __EXTPLUGIN_H +#define __EXTPLUGIN_H + +#if BX_PLUGINS +#if BX_HAVE_LTDL +#include +#else +#include "ltdl.h" +#endif +#endif + +enum plugintype_t { + PLUGTYPE_NULL=100, + PLUGTYPE_CORE, + PLUGTYPE_OPTIONAL, + PLUGTYPE_USER +}; + +#define MAX_ARGC 10 + +typedef struct _plugin_t +{ + plugintype_t type; + int initialized; +#if BX_PLUGINS + lt_dlhandle handle; +#endif + int argc; + char *name, *args, *argv[MAX_ARGC]; + int (*plugin_init)(struct _plugin_t *plugin, plugintype_t type, int argc, char *argv[]); + void (*plugin_fini)(void); + + struct _plugin_t *next; +} plugin_t; + + + +#endif /* __EXTPLUGIN_H */ + diff --git a/bochs/font/vga.bitmap.h b/bochs/font/vga.bitmap.h new file mode 100644 index 00000000..e40969b8 --- /dev/null +++ b/bochs/font/vga.bitmap.h @@ -0,0 +1,284 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +typedef struct { + unsigned char data[16]; +} bx_fontcharbitmap_t; + +static const bx_fontcharbitmap_t bx_vgafont[256] = { +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xa5, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xdb, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x36, 0x7f, 0x7f, 0x7f, 0x7f, 0x3e, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff }}, +{{ 0x00, 0x00, 0x78, 0x60, 0x70, 0x58, 0x1e, 0x33, 0x33, 0x33, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0xfc, 0xcc, 0xfc, 0x0c, 0x0c, 0x0c, 0x0c, 0x0e, 0x0f, 0x07, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0xfe, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xe6, 0xe7, 0x67, 0x03, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x7f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x40, 0x60, 0x70, 0x78, 0x7c, 0x7f, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0xfe, 0xdb, 0xdb, 0xdb, 0xde, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x3e, 0x63, 0x06, 0x1c, 0x36, 0x63, 0x63, 0x36, 0x1c, 0x30, 0x63, 0x3e, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x7f, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0x7f, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x36, 0x7f, 0x36, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x08, 0x1c, 0x1c, 0x3e, 0x3e, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x3e, 0x3e, 0x1c, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x36, 0x36, 0x7f, 0x36, 0x36, 0x36, 0x7f, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x18, 0x18, 0x3e, 0x63, 0x43, 0x03, 0x3e, 0x60, 0x60, 0x61, 0x63, 0x3e, 0x18, 0x18, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x43, 0x63, 0x30, 0x18, 0x0c, 0x06, 0x63, 0x61, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x1c, 0x36, 0x36, 0x1c, 0x6e, 0x3b, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x0c, 0x0c, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x0c, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x1c, 0x36, 0x63, 0x63, 0x6b, 0x6b, 0x63, 0x63, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x18, 0x1c, 0x1e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3e, 0x63, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x63, 0x7f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3e, 0x63, 0x60, 0x60, 0x3c, 0x60, 0x60, 0x60, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x30, 0x38, 0x3c, 0x36, 0x33, 0x7f, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x7f, 0x03, 0x03, 0x03, 0x3f, 0x60, 0x60, 0x60, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x1c, 0x06, 0x03, 0x03, 0x3f, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x7f, 0x63, 0x60, 0x60, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x7e, 0x60, 0x60, 0x60, 0x30, 0x1e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3e, 0x63, 0x63, 0x30, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x3e, 0x63, 0x63, 0x7b, 0x7b, 0x7b, 0x3b, 0x03, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x08, 0x1c, 0x36, 0x63, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3f, 0x66, 0x66, 0x66, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3c, 0x66, 0x43, 0x03, 0x03, 0x03, 0x03, 0x43, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x1f, 0x36, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x36, 0x1f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x7f, 0x66, 0x46, 0x16, 0x1e, 0x16, 0x06, 0x46, 0x66, 0x7f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x7f, 0x66, 0x46, 0x16, 0x1e, 0x16, 0x06, 0x06, 0x06, 0x0f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3c, 0x66, 0x43, 0x03, 0x03, 0x7b, 0x63, 0x63, 0x66, 0x5c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x63, 0x63, 0x63, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x33, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x67, 0x66, 0x66, 0x36, 0x1e, 0x1e, 0x36, 0x66, 0x66, 0x67, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x0f, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x63, 0x77, 0x7f, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x63, 0x67, 0x6f, 0x7f, 0x7b, 0x73, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3f, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x06, 0x06, 0x0f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x6b, 0x7b, 0x3e, 0x30, 0x70, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3f, 0x66, 0x66, 0x66, 0x3e, 0x36, 0x66, 0x66, 0x66, 0x67, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3e, 0x63, 0x63, 0x06, 0x1c, 0x30, 0x60, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x36, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x63, 0x63, 0x63, 0x63, 0x6b, 0x6b, 0x6b, 0x7f, 0x77, 0x36, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x63, 0x63, 0x36, 0x3e, 0x1c, 0x1c, 0x3e, 0x36, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x7f, 0x63, 0x61, 0x30, 0x18, 0x0c, 0x06, 0x43, 0x63, 0x7f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0x60, 0x40, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x08, 0x1c, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00 }}, +{{ 0x0c, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x30, 0x3e, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x07, 0x06, 0x06, 0x1e, 0x36, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x63, 0x03, 0x03, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x38, 0x30, 0x30, 0x3c, 0x36, 0x33, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x63, 0x7f, 0x03, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x1c, 0x36, 0x26, 0x06, 0x0f, 0x06, 0x06, 0x06, 0x06, 0x0f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3e, 0x30, 0x33, 0x1e, 0x00 }}, +{{ 0x00, 0x00, 0x07, 0x06, 0x06, 0x36, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x67, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x18, 0x18, 0x00, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x70, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x3c, 0x00 }}, +{{ 0x00, 0x00, 0x07, 0x06, 0x06, 0x66, 0x36, 0x1e, 0x1e, 0x36, 0x66, 0x67, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x7f, 0x6b, 0x6b, 0x6b, 0x6b, 0x63, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x0f, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3e, 0x30, 0x30, 0x78, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x6e, 0x66, 0x06, 0x06, 0x06, 0x0f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x63, 0x06, 0x1c, 0x30, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x08, 0x0c, 0x0c, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x6b, 0x6b, 0x6b, 0x7f, 0x36, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x36, 0x1c, 0x1c, 0x1c, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x7e, 0x60, 0x30, 0x1f, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x33, 0x18, 0x0c, 0x06, 0x63, 0x7f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x6e, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x08, 0x1c, 0x36, 0x63, 0x63, 0x63, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x3c, 0x66, 0x43, 0x03, 0x03, 0x03, 0x43, 0x66, 0x3c, 0x30, 0x60, 0x3e, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x33, 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x3e, 0x63, 0x7f, 0x03, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x08, 0x1c, 0x36, 0x00, 0x1e, 0x30, 0x3e, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x33, 0x00, 0x00, 0x1e, 0x30, 0x3e, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x06, 0x0c, 0x18, 0x00, 0x1e, 0x30, 0x3e, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x1c, 0x36, 0x1c, 0x00, 0x1e, 0x30, 0x3e, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x06, 0x06, 0x66, 0x3c, 0x30, 0x60, 0x3c, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x08, 0x1c, 0x36, 0x00, 0x3e, 0x63, 0x7f, 0x03, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x63, 0x00, 0x00, 0x3e, 0x63, 0x7f, 0x03, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x06, 0x0c, 0x18, 0x00, 0x3e, 0x63, 0x7f, 0x03, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x66, 0x00, 0x00, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x18, 0x3c, 0x66, 0x00, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x06, 0x0c, 0x18, 0x00, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x63, 0x00, 0x08, 0x1c, 0x36, 0x63, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x1c, 0x36, 0x1c, 0x00, 0x1c, 0x36, 0x63, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x18, 0x0c, 0x06, 0x00, 0x7f, 0x66, 0x06, 0x3e, 0x06, 0x06, 0x66, 0x7f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x6e, 0x6c, 0x7e, 0x1b, 0x1b, 0x76, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x7c, 0x36, 0x33, 0x33, 0x7f, 0x33, 0x33, 0x33, 0x33, 0x73, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x08, 0x1c, 0x36, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x63, 0x00, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x06, 0x0c, 0x18, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x0c, 0x1e, 0x33, 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x06, 0x0c, 0x18, 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x63, 0x00, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x7e, 0x60, 0x30, 0x1e, 0x00 }}, +{{ 0x00, 0x63, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x63, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x18, 0x18, 0x3c, 0x66, 0x06, 0x06, 0x06, 0x66, 0x3c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x1c, 0x36, 0x26, 0x06, 0x0f, 0x06, 0x06, 0x06, 0x06, 0x67, 0x3f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x1f, 0x33, 0x33, 0x1f, 0x23, 0x33, 0x7b, 0x33, 0x33, 0x33, 0x63, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x70, 0xd8, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1b, 0x0e, 0x00, 0x00 }}, +{{ 0x00, 0x18, 0x0c, 0x06, 0x00, 0x1e, 0x30, 0x3e, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x18, 0x0c, 0x06, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x18, 0x0c, 0x06, 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x6e, 0x3b, 0x00, 0x3b, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x6e, 0x3b, 0x00, 0x63, 0x67, 0x6f, 0x7f, 0x7b, 0x73, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x3c, 0x36, 0x36, 0x7c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x1c, 0x36, 0x36, 0x1c, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x0c, 0x0c, 0x06, 0x03, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x03, 0x03, 0x43, 0x63, 0x33, 0x18, 0x0c, 0x06, 0x3b, 0x61, 0x30, 0x18, 0x7c, 0x00, 0x00 }}, +{{ 0x00, 0x03, 0x03, 0x43, 0x63, 0x33, 0x18, 0x0c, 0x66, 0x73, 0x79, 0x7c, 0x60, 0x60, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x36, 0x1b, 0x36, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x36, 0x6c, 0x36, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22 }}, +{{ 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55 }}, +{{ 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6f, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6f, 0x60, 0x6f, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c }}, +{{ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x60, 0x6f, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c }}, +{{ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6f, 0x60, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xec, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c }}, +{{ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xec, 0x0c, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0c, 0xec, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c }}, +{{ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xef, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xef, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c }}, +{{ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xec, 0x0c, 0xec, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xef, 0x00, 0xef, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c }}, +{{ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c }}, +{{ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xff, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }}, +{{ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f }}, +{{ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0 }}, +{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b, 0x1b, 0x1b, 0x3b, 0x6e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x1e, 0x33, 0x33, 0x33, 0x1b, 0x33, 0x63, 0x63, 0x63, 0x33, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x7f, 0x63, 0x63, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x7f, 0x63, 0x06, 0x0c, 0x18, 0x0c, 0x06, 0x63, 0x7f, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x0e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x03, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x1c, 0x36, 0x63, 0x63, 0x7f, 0x63, 0x63, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x1c, 0x36, 0x63, 0x63, 0x63, 0x36, 0x36, 0x36, 0x36, 0x77, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x78, 0x0c, 0x18, 0x30, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0xc0, 0x60, 0x7e, 0xdb, 0xdb, 0xcf, 0x7e, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x38, 0x0c, 0x06, 0x06, 0x3e, 0x06, 0x06, 0x06, 0x0c, 0x38, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x70, 0xd8, 0xd8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }}, +{{ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1b, 0x1b, 0x1b, 0x0e, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x00, 0x6e, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x1c, 0x36, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0x36, 0x36, 0x3c, 0x38, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x1b, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x0e, 0x1b, 0x0c, 0x06, 0x13, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}, +}; diff --git a/bochs/fpu/Makefile.in b/bochs/fpu/Makefile.in new file mode 100644 index 00000000..8e49da52 --- /dev/null +++ b/bochs/fpu/Makefile.in @@ -0,0 +1,178 @@ +# Copyright (C) 2001 The Bochs Project +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +@SUFFIX_LINE@ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_builddir = .. +top_srcdir = @top_srcdir@ + +SHELL = /bin/sh + +@SET_MAKE@ + +CC = @CC@ +CFLAGS = @CFLAGS@ @GUI_CFLAGS@ +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ @GUI_CXXFLAGS@ + +#CFLAGS = -Wall -Wstrict-prototypes -fomit-frame-pointer -fno-strict-aliasing -pipe -fno-strength-reduce -mpreferred-stack-boundary=2 -DCPU=686 -march=i686 + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +RANLIB = @RANLIB@ + +L_TARGET = libfpu.a + + +BX_INCDIRS = -I.. -I$(srcdir)/.. -I../@INSTRUMENT_DIR@ -I$(srcdir)/../@INSTRUMENT_DIR@ -I. -I$(srcdir)/. -I./stubs -I$(srcdir)/./stubs + +OBJS = ferr.o fpu.o fpu_arith.o fpu_compare.o fpu_const.o \ + fpu_load_store.o fpu_misc.o fpu_trans.o fpu_tags.o \ + fprem.o fsincos.o f2xm1.o fyl2x.o fpatan.o \ + softfloat.o softfloatx80.o softfloat-specialize.o \ + softfloat-round-pack.o poly.o + +all: libfpu.a + +.@CPP_SUFFIX@.o: + $(CXX) @DASH@c $(BX_INCDIRS) $(CXXFLAGS) @CXXFP@$< @OFP@$@ + +.c.o: + $(CC) @DASH@c $(CFLAGS) $(BX_INCDIRS) $< @OFP@$@ + + +libfpu.a: $(OBJS) + @RMCOMMAND@ libfpu.a + @MAKELIB@ $(OBJS) + $(RANLIB) libfpu.a + +clean: + @RMCOMMAND@ *.o + @RMCOMMAND@ *.a + +dist-clean: clean + @RMCOMMAND@ Makefile + +########################################### +# dependencies generated by +# gcc -MM -I.. -I../instrument/stubs *.cc | sed -e 's/\.cc/.@CPP_SUFFIX@/g' +########################################### +f2xm1.o: f2xm1.@CPP_SUFFIX@ softfloatx80.h softfloat.h ../config.h \ + softfloat-specialize.h softfloat-macros.h softfloat-round-pack.h +ferr.o: ferr.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../cpu/cpu.h ../cpu/model_specific.h ../cpu/crregs.h \ + ../cpu/descriptor.h ../cpu/instr.h ../cpu/ia_opcodes.h \ + ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \ + ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \ + ../cpu/xmm.h ../cpu/stack.h softfloat-specialize.h softfloat.h +fpatan.o: fpatan.@CPP_SUFFIX@ softfloatx80.h softfloat.h ../config.h \ + softfloat-specialize.h softfloat-macros.h softfloat-round-pack.h \ + fpu_constant.h +fprem.o: fprem.@CPP_SUFFIX@ softfloatx80.h softfloat.h ../config.h \ + softfloat-specialize.h softfloat-round-pack.h softfloat-macros.h +fpu_arith.o: fpu_arith.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../cpu/cpu.h ../cpu/model_specific.h \ + ../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h ../cpu/ia_opcodes.h \ + ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \ + ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \ + ../cpu/xmm.h ../cpu/stack.h softfloatx80.h softfloat.h \ + softfloat-specialize.h +fpu.o: fpu.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../cpu/cpu.h ../cpu/model_specific.h ../cpu/crregs.h \ + ../cpu/descriptor.h ../cpu/instr.h ../cpu/ia_opcodes.h \ + ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \ + ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \ + ../cpu/xmm.h ../cpu/stack.h ../iodev/iodev.h ../param_names.h \ + softfloatx80.h softfloat.h softfloat-specialize.h +fpu_compare.o: fpu_compare.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../cpu/cpu.h ../cpu/model_specific.h \ + ../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h ../cpu/ia_opcodes.h \ + ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \ + ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \ + ../cpu/xmm.h ../cpu/stack.h softfloatx80.h softfloat.h \ + softfloat-specialize.h +fpu_const.o: fpu_const.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../cpu/cpu.h ../cpu/model_specific.h \ + ../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h ../cpu/ia_opcodes.h \ + ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \ + ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \ + ../cpu/xmm.h ../cpu/stack.h softfloatx80.h softfloat.h \ + softfloat-specialize.h +fpu_load_store.o: fpu_load_store.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../cpu/cpu.h ../cpu/model_specific.h \ + ../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h ../cpu/ia_opcodes.h \ + ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \ + ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \ + ../cpu/xmm.h ../cpu/stack.h softfloatx80.h softfloat.h \ + softfloat-specialize.h +fpu_misc.o: fpu_misc.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../cpu/cpu.h ../cpu/model_specific.h \ + ../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h ../cpu/ia_opcodes.h \ + ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \ + ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \ + ../cpu/xmm.h ../cpu/stack.h softfloatx80.h softfloat.h \ + softfloat-specialize.h +fpu_tags.o: fpu_tags.@CPP_SUFFIX@ ../config.h softfloat.h softfloat-specialize.h \ + ../cpu/i387.h ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h \ + ../fpu/control_w.h +fpu_trans.o: fpu_trans.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../cpu/cpu.h ../cpu/model_specific.h \ + ../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h ../cpu/ia_opcodes.h \ + ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \ + ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \ + ../cpu/xmm.h ../cpu/stack.h softfloatx80.h softfloat.h \ + softfloat-specialize.h +fsincos.o: fsincos.@CPP_SUFFIX@ softfloatx80.h softfloat.h ../config.h \ + softfloat-specialize.h softfloat-macros.h softfloat-round-pack.h \ + fpu_constant.h +fyl2x.o: fyl2x.@CPP_SUFFIX@ softfloatx80.h softfloat.h ../config.h \ + softfloat-specialize.h softfloat-macros.h softfloat-round-pack.h \ + fpu_constant.h +poly.o: poly.@CPP_SUFFIX@ softfloat.h ../config.h +softfloat.o: softfloat.@CPP_SUFFIX@ softfloat.h ../config.h softfloat-round-pack.h \ + softfloat-macros.h softfloat-specialize.h +softfloat-round-pack.o: softfloat-round-pack.@CPP_SUFFIX@ softfloat.h ../config.h \ + softfloat-round-pack.h softfloat-macros.h softfloat-specialize.h +softfloat-specialize.o: softfloat-specialize.@CPP_SUFFIX@ softfloat.h ../config.h \ + softfloat-specialize.h softfloat-macros.h +softfloatx80.o: softfloatx80.@CPP_SUFFIX@ softfloatx80.h softfloat.h ../config.h \ + softfloat-specialize.h softfloat-round-pack.h softfloat-macros.h diff --git a/bochs/fpu/control_w.h b/bochs/fpu/control_w.h new file mode 100644 index 00000000..631968a5 --- /dev/null +++ b/bochs/fpu/control_w.h @@ -0,0 +1,58 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2003-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef _CONTROL_W_H_ +#define _CONTROL_W_H_ + +/* ************ */ +/* Control Word */ +/* ************ */ + +#define FPU_CW_Reserved_Bits (0xe0c0) /* reserved bits */ + +#define FPU_CW_Inf (0x1000) /* infinity control, legacy */ + +#define FPU_CW_RC (0x0C00) /* rounding control */ +#define FPU_CW_PC (0x0300) /* precision control */ + +#define FPU_RC_RND (0x0000) /* rounding control */ +#define FPU_RC_DOWN (0x0400) +#define FPU_RC_UP (0x0800) +#define FPU_RC_CHOP (0x0C00) + +#define FPU_CW_Precision (0x0020) /* loss of precision mask */ +#define FPU_CW_Underflow (0x0010) /* underflow mask */ +#define FPU_CW_Overflow (0x0008) /* overflow mask */ +#define FPU_CW_Zero_Div (0x0004) /* divide by zero mask */ +#define FPU_CW_Denormal (0x0002) /* denormalized operand mask */ +#define FPU_CW_Invalid (0x0001) /* invalid operation mask */ + +#define FPU_CW_Exceptions_Mask (0x003f) /* all masks */ + +/* Precision control bits affect only the following: + ADD, SUB(R), MUL, DIV(R), and SQRT */ +#define FPU_PR_32_BITS (0x000) +#define FPU_PR_RESERVED_BITS (0x100) +#define FPU_PR_64_BITS (0x200) +#define FPU_PR_80_BITS (0x300) + +#endif diff --git a/bochs/fpu/f2xm1.cc b/bochs/fpu/f2xm1.cc new file mode 100755 index 00000000..e5904ea3 --- /dev/null +++ b/bochs/fpu/f2xm1.cc @@ -0,0 +1,178 @@ +/*============================================================================ +This source file is an extension to the SoftFloat IEC/IEEE Floating-point +Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) +floating point emulation. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +/*============================================================================ + * Written for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#define FLOAT128 + +#include "softfloatx80.h" +#include "softfloat-round-pack.h" + +static const floatx80 floatx80_negone = packFloatx80(1, 0x3fff, BX_CONST64(0x8000000000000000)); +static const floatx80 floatx80_neghalf = packFloatx80(1, 0x3ffe, BX_CONST64(0x8000000000000000)); +static const float128 float128_ln2 = + packFloat128(BX_CONST64(0x3ffe62e42fefa39e), BX_CONST64(0xf35793c7673007e6)); + +#ifdef BETTER_THAN_PENTIUM + +#define LN2_SIG_HI BX_CONST64(0xb17217f7d1cf79ab) +#define LN2_SIG_LO BX_CONST64(0xc9e3b39800000000) /* 96 bit precision */ + +#else + +#define LN2_SIG_HI BX_CONST64(0xb17217f7d1cf79ab) +#define LN2_SIG_LO BX_CONST64(0xc000000000000000) /* 67-bit precision */ + +#endif + +#define EXP_ARR_SIZE 15 + +static float128 exp_arr[EXP_ARR_SIZE] = +{ + PACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /* 1 */ + PACK_FLOAT_128(0x3ffe000000000000, 0x0000000000000000), /* 2 */ + PACK_FLOAT_128(0x3ffc555555555555, 0x5555555555555555), /* 3 */ + PACK_FLOAT_128(0x3ffa555555555555, 0x5555555555555555), /* 4 */ + PACK_FLOAT_128(0x3ff8111111111111, 0x1111111111111111), /* 5 */ + PACK_FLOAT_128(0x3ff56c16c16c16c1, 0x6c16c16c16c16c17), /* 6 */ + PACK_FLOAT_128(0x3ff2a01a01a01a01, 0xa01a01a01a01a01a), /* 7 */ + PACK_FLOAT_128(0x3fefa01a01a01a01, 0xa01a01a01a01a01a), /* 8 */ + PACK_FLOAT_128(0x3fec71de3a556c73, 0x38faac1c88e50017), /* 9 */ + PACK_FLOAT_128(0x3fe927e4fb7789f5, 0xc72ef016d3ea6679), /* 10 */ + PACK_FLOAT_128(0x3fe5ae64567f544e, 0x38fe747e4b837dc7), /* 11 */ + PACK_FLOAT_128(0x3fe21eed8eff8d89, 0x7b544da987acfe85), /* 12 */ + PACK_FLOAT_128(0x3fde6124613a86d0, 0x97ca38331d23af68), /* 13 */ + PACK_FLOAT_128(0x3fda93974a8c07c9, 0xd20badf145dfa3e5), /* 14 */ + PACK_FLOAT_128(0x3fd6ae7f3e733b81, 0xf11d8656b0ee8cb0) /* 15 */ +}; + +extern float128 EvalPoly(float128 x, float128 *arr, unsigned n, float_status_t &status); + +/* required -1 < x < 1 */ +static float128 poly_exp(float128 x, float_status_t &status) +{ +/* + // 2 3 4 5 6 7 8 9 + // x x x x x x x x x + // e - 1 ~ x + --- + --- + --- + --- + --- + --- + --- + --- + ... + // 2! 3! 4! 5! 6! 7! 8! 9! + // + // 2 3 4 5 6 7 8 + // x x x x x x x x + // = x [ 1 + --- + --- + --- + --- + --- + --- + --- + --- + ... ] + // 2! 3! 4! 5! 6! 7! 8! 9! + // + // 8 8 + // -- 2k -- 2k+1 + // p(x) = > C * x q(x) = > C * x + // -- 2k -- 2k+1 + // k=0 k=0 + // + // x + // e - 1 ~ x * [ p(x) + x * q(x) ] + // +*/ + float128 t = EvalPoly(x, exp_arr, EXP_ARR_SIZE, status); + return float128_mul(t, x, status); +} + +// ================================================= +// x +// FX2M1 Compute 2 - 1 +// ================================================= + +// +// Uses the following identities: +// +// 1. ---------------------------------------------------------- +// x x*ln(2) +// 2 = e +// +// 2. ---------------------------------------------------------- +// 2 3 4 5 n +// x x x x x x x +// e = 1 + --- + --- + --- + --- + --- + ... + --- + ... +// 1! 2! 3! 4! 5! n! +// + +floatx80 f2xm1(floatx80 a, float_status_t &status) +{ + Bit64u zSig0, zSig1, zSig2; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a)) + { + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + + Bit64u aSig = extractFloatx80Frac(a); + Bit32s aExp = extractFloatx80Exp(a); + int aSign = extractFloatx80Sign(a); + + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig<<1)) + return propagateFloatx80NaN(a, status); + + return (aSign) ? floatx80_negone : a; + } + + if (aExp == 0) { + if (aSig == 0) return a; + float_raise(status, float_flag_denormal | float_flag_inexact); + normalizeFloatx80Subnormal(aSig, &aExp, &aSig); + + tiny_argument: + mul128By64To192(LN2_SIG_HI, LN2_SIG_LO, aSig, &zSig0, &zSig1, &zSig2); + if (0 < (Bit64s) zSig0) { + shortShift128Left(zSig0, zSig1, 1, &zSig0, &zSig1); + --aExp; + } + return + roundAndPackFloatx80(80, aSign, aExp, zSig0, zSig1, status); + } + + float_raise(status, float_flag_inexact); + + if (aExp < 0x3FFF) + { + if (aExp < EXP_BIAS-68) + goto tiny_argument; + + /* ******************************** */ + /* using float128 for approximation */ + /* ******************************** */ + + float128 x = floatx80_to_float128(a, status); + x = float128_mul(x, float128_ln2, status); + x = poly_exp(x, status); + return float128_to_floatx80(x, status); + } + else + { + if (a.exp == 0xBFFF && ! (aSig<<1)) + return floatx80_neghalf; + + return a; + } +} diff --git a/bochs/fpu/ferr.cc b/bochs/fpu/ferr.cc new file mode 100755 index 00000000..8f1b5496 --- /dev/null +++ b/bochs/fpu/ferr.cc @@ -0,0 +1,133 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2003-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#define NEED_CPU_REG_SHORTCUTS 1 +#include "bochs.h" +#include "cpu/cpu.h" +#define LOG_THIS BX_CPU_THIS_PTR + +#if BX_SUPPORT_FPU + +#include "softfloat-specialize.h" + +void BX_CPU_C::FPU_stack_overflow(void) +{ + /* The masked response */ + if (BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(floatx80_default_nan, 0); + } + FPU_exception(FPU_EX_Stack_Overflow); +} + +void BX_CPU_C::FPU_stack_underflow(int stnr, int pop_stack) +{ + /* The masked response */ + if (BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + BX_WRITE_FPU_REG(floatx80_default_nan, stnr); + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } + FPU_exception(FPU_EX_Stack_Underflow); +} + +/* Returns unmasked exceptions if occured */ +unsigned BX_CPU_C::FPU_exception(unsigned exception, bx_bool is_store) +{ + /* Extract only the bits which we use to set the status word */ + exception &= (FPU_SW_Exceptions_Mask); + + Bit32u status = FPU_PARTIAL_STATUS; + + unsigned unmasked = exception & ~FPU_CONTROL_WORD & FPU_CW_Exceptions_Mask; + // if IE or DZ exception happen nothing else will be reported + if (exception & (FPU_EX_Invalid | FPU_EX_Zero_Div)) + unmasked &= (FPU_EX_Invalid | FPU_EX_Zero_Div); + + /* Set summary bits iff exception isn't masked */ + if (unmasked) + FPU_PARTIAL_STATUS |= (FPU_SW_Summary | FPU_SW_Backward); + + if (exception & FPU_EX_Invalid) { + // FPU_EX_Invalid cannot come with any other exception but x87 stack fault + FPU_PARTIAL_STATUS |= exception; + if (exception & FPU_SW_Stack_Fault) { + if (! (exception & FPU_SW_C1)) { + /* This bit distinguishes over- from underflow for a stack fault, + and roundup from round-down for precision loss. */ + FPU_PARTIAL_STATUS &= ~FPU_SW_C1; + } + } + return unmasked; + } + + if (exception & FPU_EX_Zero_Div) { + FPU_PARTIAL_STATUS |= FPU_EX_Zero_Div; + return unmasked; + } + + if (exception & FPU_EX_Denormal) { + FPU_PARTIAL_STATUS |= FPU_EX_Denormal; + if (unmasked & FPU_EX_Denormal) + return unmasked & FPU_EX_Denormal; + } + + /* Set the corresponding exception bits */ + FPU_PARTIAL_STATUS |= exception; + + if (exception & FPU_EX_Precision) + { + if (! (exception & FPU_SW_C1)) { + /* This bit distinguishes over- from underflow for a stack fault, + and roundup from round-down for precision loss. */ + FPU_PARTIAL_STATUS &= ~FPU_SW_C1; + } + } + + // If #P unmasked exception occured the result still has to be + // written to the destination. + unmasked &= ~FPU_EX_Precision; + + if (unmasked & (FPU_EX_Underflow | FPU_EX_Overflow)) { + // If unmasked over- or underflow occurs and dest is a memory location: + // - the TOS and destination operands remain unchanged + // - the inexact-result condition is not reported and C1 flag is cleared + // - no result is stored in the memory + // If the destination is in the register stack, adjusted resulting value + // is stored in the destination operand. + if (! is_store) { + unmasked &= ~(FPU_EX_Underflow | FPU_EX_Overflow); + } + else { + FPU_PARTIAL_STATUS &= ~FPU_SW_C1; // clear C1 flag + if (! (status & FPU_EX_Precision)) + FPU_PARTIAL_STATUS &= ~FPU_EX_Precision; + } + } + + return unmasked; +} + +#endif diff --git a/bochs/fpu/fpatan.cc b/bochs/fpu/fpatan.cc new file mode 100755 index 00000000..60ef3520 --- /dev/null +++ b/bochs/fpu/fpatan.cc @@ -0,0 +1,283 @@ +/*============================================================================ +This source file is an extension to the SoftFloat IEC/IEEE Floating-point +Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) +floating point emulation. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +/*============================================================================ + * Written for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#define FLOAT128 + +#include "softfloatx80.h" +#include "softfloat-round-pack.h" +#include "fpu_constant.h" + +#define FPATAN_ARR_SIZE 11 + +static const float128 float128_one = + packFloat128(BX_CONST64(0x3fff000000000000), BX_CONST64(0x0000000000000000)); +static const float128 float128_sqrt3 = + packFloat128(BX_CONST64(0x3fffbb67ae8584ca), BX_CONST64(0xa73b25742d7078b8)); +static const floatx80 floatx80_pi = + packFloatx80(0, 0x4000, BX_CONST64(0xc90fdaa22168c235)); + +static const float128 float128_pi2 = + packFloat128(BX_CONST64(0x3fff921fb54442d1), BX_CONST64(0x8469898CC5170416)); +static const float128 float128_pi4 = + packFloat128(BX_CONST64(0x3ffe921fb54442d1), BX_CONST64(0x8469898CC5170416)); +static const float128 float128_pi6 = + packFloat128(BX_CONST64(0x3ffe0c152382d736), BX_CONST64(0x58465BB32E0F580F)); + +static float128 atan_arr[FPATAN_ARR_SIZE] = +{ + PACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /* 1 */ + PACK_FLOAT_128(0xbffd555555555555, 0x5555555555555555), /* 3 */ + PACK_FLOAT_128(0x3ffc999999999999, 0x999999999999999a), /* 5 */ + PACK_FLOAT_128(0xbffc249249249249, 0x2492492492492492), /* 7 */ + PACK_FLOAT_128(0x3ffbc71c71c71c71, 0xc71c71c71c71c71c), /* 9 */ + PACK_FLOAT_128(0xbffb745d1745d174, 0x5d1745d1745d1746), /* 11 */ + PACK_FLOAT_128(0x3ffb3b13b13b13b1, 0x3b13b13b13b13b14), /* 13 */ + PACK_FLOAT_128(0xbffb111111111111, 0x1111111111111111), /* 15 */ + PACK_FLOAT_128(0x3ffae1e1e1e1e1e1, 0xe1e1e1e1e1e1e1e2), /* 17 */ + PACK_FLOAT_128(0xbffaaf286bca1af2, 0x86bca1af286bca1b), /* 19 */ + PACK_FLOAT_128(0x3ffa861861861861, 0x8618618618618618) /* 21 */ +}; + +extern float128 OddPoly(float128 x, float128 *arr, unsigned n, float_status_t &status); + +/* |x| < 1/4 */ +static float128 poly_atan(float128 x1, float_status_t &status) +{ +/* + // 3 5 7 9 11 13 15 17 + // x x x x x x x x + // atan(x) ~ x - --- + --- - --- + --- - ---- + ---- - ---- + ---- + // 3 5 7 9 11 13 15 17 + // + // 2 4 6 8 10 12 14 16 + // x x x x x x x x + // = x * [ 1 - --- + --- - --- + --- - ---- + ---- - ---- + ---- ] + // 3 5 7 9 11 13 15 17 + // + // 5 5 + // -- 4k -- 4k+2 + // p(x) = > C * x q(x) = > C * x + // -- 2k -- 2k+1 + // k=0 k=0 + // + // 2 + // atan(x) ~ x * [ p(x) + x * q(x) ] + // +*/ + return OddPoly(x1, atan_arr, FPATAN_ARR_SIZE, status); +} + +// ================================================= +// FPATAN Compute y * log (x) +// 2 +// ================================================= + +// +// Uses the following identities: +// +// 1. ---------------------------------------------------------- +// +// atan(-x) = -atan(x) +// +// 2. ---------------------------------------------------------- +// +// x + y +// atan(x) + atan(y) = atan -------, xy < 1 +// 1-xy +// +// x + y +// atan(x) + atan(y) = atan ------- + PI, x > 0, xy > 1 +// 1-xy +// +// x + y +// atan(x) + atan(y) = atan ------- - PI, x < 0, xy > 1 +// 1-xy +// +// 3. ---------------------------------------------------------- +// +// atan(x) = atan(INF) + atan(- 1/x) +// +// x-1 +// atan(x) = PI/4 + atan( ----- ) +// x+1 +// +// x * sqrt(3) - 1 +// atan(x) = PI/6 + atan( ----------------- ) +// x + sqrt(3) +// +// 4. ---------------------------------------------------------- +// 3 5 7 9 2n+1 +// x x x x n x +// atan(x) = x - --- + --- - --- + --- - ... + (-1) ------ + ... +// 3 5 7 9 2n+1 +// + +floatx80 fpatan(floatx80 a, floatx80 b, float_status_t &status) +{ + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a) || floatx80_is_unsupported(b)) { + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + + Bit64u aSig = extractFloatx80Frac(a); + Bit32s aExp = extractFloatx80Exp(a); + int aSign = extractFloatx80Sign(a); + Bit64u bSig = extractFloatx80Frac(b); + Bit32s bExp = extractFloatx80Exp(b); + int bSign = extractFloatx80Sign(b); + + int zSign = aSign ^ bSign; + + if (bExp == 0x7FFF) + { + if ((Bit64u) (bSig<<1)) + return propagateFloatx80NaN(a, b, status); + + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig<<1)) + return propagateFloatx80NaN(a, b, status); + + if (aSign) { /* return 3PI/4 */ + return roundAndPackFloatx80(80, bSign, + FLOATX80_3PI4_EXP, FLOAT_3PI4_HI, FLOAT_3PI4_LO, status); + } + else { /* return PI/4 */ + return roundAndPackFloatx80(80, bSign, + FLOATX80_PI4_EXP, FLOAT_PI_HI, FLOAT_PI_LO, status); + } + } + + if (aSig && (aExp == 0)) + float_raise(status, float_flag_denormal); + + /* return PI/2 */ + return roundAndPackFloatx80(80, bSign, FLOATX80_PI2_EXP, FLOAT_PI_HI, FLOAT_PI_LO, status); + } + if (aExp == 0x7FFF) + { + if ((Bit64u) (aSig<<1)) + return propagateFloatx80NaN(a, b, status); + + if (bSig && (bExp == 0)) + float_raise(status, float_flag_denormal); + +return_PI_or_ZERO: + + if (aSign) { /* return PI */ + return roundAndPackFloatx80(80, bSign, FLOATX80_PI_EXP, FLOAT_PI_HI, FLOAT_PI_LO, status); + } else { /* return 0 */ + return packFloatx80(bSign, 0, 0); + } + } + if (bExp == 0) + { + if (bSig == 0) { + if (aSig && (aExp == 0)) float_raise(status, float_flag_denormal); + goto return_PI_or_ZERO; + } + + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(bSig, &bExp, &bSig); + } + if (aExp == 0) + { + if (aSig == 0) /* return PI/2 */ + return roundAndPackFloatx80(80, bSign, FLOATX80_PI2_EXP, FLOAT_PI_HI, FLOAT_PI_LO, status); + + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(aSig, &aExp, &aSig); + } + + float_raise(status, float_flag_inexact); + + /* |a| = |b| ==> return PI/4 */ + if (aSig == bSig && aExp == bExp) + return roundAndPackFloatx80(80, bSign, FLOATX80_PI4_EXP, FLOAT_PI_HI, FLOAT_PI_LO, status); + + /* ******************************** */ + /* using float128 for approximation */ + /* ******************************** */ + + float128 a128 = normalizeRoundAndPackFloat128(0, aExp-0x10, aSig, 0, status); + float128 b128 = normalizeRoundAndPackFloat128(0, bExp-0x10, bSig, 0, status); + float128 x; + int swap = 0, add_pi6 = 0, add_pi4 = 0; + + if (aExp > bExp || (aExp == bExp && aSig > bSig)) + { + x = float128_div(b128, a128, status); + } + else { + x = float128_div(a128, b128, status); + swap = 1; + } + + Bit32s xExp = extractFloat128Exp(x); + + if (xExp <= EXP_BIAS-40) + goto approximation_completed; + + if (x.hi >= BX_CONST64(0x3ffe800000000000)) // 3/4 < x < 1 + { + /* + arctan(x) = arctan((x-1)/(x+1)) + pi/4 + */ + float128 t1 = float128_sub(x, float128_one, status); + float128 t2 = float128_add(x, float128_one, status); + x = float128_div(t1, t2, status); + add_pi4 = 1; + } + else + { + /* argument correction */ + if (xExp >= 0x3FFD) // 1/4 < x < 3/4 + { + /* + arctan(x) = arctan((x*sqrt(3)-1)/(x+sqrt(3))) + pi/6 + */ + float128 t1 = float128_mul(x, float128_sqrt3, status); + float128 t2 = float128_add(x, float128_sqrt3, status); + x = float128_sub(t1, float128_one, status); + x = float128_div(x, t2, status); + add_pi6 = 1; + } + } + + x = poly_atan(x, status); + if (add_pi6) x = float128_add(x, float128_pi6, status); + if (add_pi4) x = float128_add(x, float128_pi4, status); + +approximation_completed: + if (swap) x = float128_sub(float128_pi2, x, status); + floatx80 result = float128_to_floatx80(x, status); + if (zSign) floatx80_chs(result); + int rSign = extractFloatx80Sign(result); + if (!bSign && rSign) + return floatx80_add(result, floatx80_pi, status); + if (bSign && !rSign) + return floatx80_sub(result, floatx80_pi, status); + return result; +} diff --git a/bochs/fpu/fprem.cc b/bochs/fpu/fprem.cc new file mode 100755 index 00000000..83d686c7 --- /dev/null +++ b/bochs/fpu/fprem.cc @@ -0,0 +1,191 @@ +/*============================================================================ +This source file is an extension to the SoftFloat IEC/IEEE Floating-point +Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) +floating point emulation. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +/*============================================================================ + * Written for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#include "softfloatx80.h" +#include "softfloat-round-pack.h" +#define USE_estimateDiv128To64 +#include "softfloat-macros.h" + +/* executes single exponent reduction cycle */ +static Bit64u remainder_kernel(Bit64u aSig0, Bit64u bSig, int expDiff, Bit64u *zSig0, Bit64u *zSig1) +{ + Bit64u term0, term1; + Bit64u aSig1 = 0; + + shortShift128Left(aSig1, aSig0, expDiff, &aSig1, &aSig0); + Bit64u q = estimateDiv128To64(aSig1, aSig0, bSig); + mul64To128(bSig, q, &term0, &term1); + sub128(aSig1, aSig0, term0, term1, zSig1, zSig0); + while ((Bit64s)(*zSig1) < 0) { + --q; + add128(*zSig1, *zSig0, 0, bSig, zSig1, zSig0); + } + return q; +} + +static int do_fprem(floatx80 a, floatx80 b, floatx80 &r, Bit64u &q, int rounding_mode, float_status_t &status) +{ + Bit32s aExp, bExp, zExp, expDiff; + Bit64u aSig0, aSig1, bSig; + int aSign; + q = 0; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a) || floatx80_is_unsupported(b)) + { + float_raise(status, float_flag_invalid); + r = floatx80_default_nan; + return -1; + } + + aSig0 = extractFloatx80Frac(a); + aExp = extractFloatx80Exp(a); + aSign = extractFloatx80Sign(a); + bSig = extractFloatx80Frac(b); + bExp = extractFloatx80Exp(b); + + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig0<<1) || ((bExp == 0x7FFF) && (Bit64u) (bSig<<1))) { + r = propagateFloatx80NaN(a, b, status); + return -1; + } + float_raise(status, float_flag_invalid); + r = floatx80_default_nan; + return -1; + } + if (bExp == 0x7FFF) { + if ((Bit64u) (bSig<<1)) { + r = propagateFloatx80NaN(a, b, status); + return -1; + } + if (aExp == 0 && aSig0) { + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(aSig0, &aExp, &aSig0); + r = (a.fraction & BX_CONST64(0x8000000000000000)) ? + packFloatx80(aSign, aExp, aSig0) : a; + return 0; + } + r = a; + return 0; + + } + if (bExp == 0) { + if (bSig == 0) { + float_raise(status, float_flag_invalid); + r = floatx80_default_nan; + return -1; + } + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(bSig, &bExp, &bSig); + } + if (aExp == 0) { + if (aSig0 == 0) { + r = a; + return 0; + } + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(aSig0, &aExp, &aSig0); + } + expDiff = aExp - bExp; + aSig1 = 0; + + Bit32u overflow = 0; + + if (expDiff >= 64) { + int n = (expDiff & 0x1f) | 0x20; + remainder_kernel(aSig0, bSig, n, &aSig0, &aSig1); + zExp = aExp - n; + overflow = 1; + } + else { + zExp = bExp; + + if (expDiff < 0) { + if (expDiff < -1) { + r = (a.fraction & BX_CONST64(0x8000000000000000)) ? + packFloatx80(aSign, aExp, aSig0) : a; + return 0; + } + shift128Right(aSig0, 0, 1, &aSig0, &aSig1); + expDiff = 0; + } + + if (expDiff > 0) { + q = remainder_kernel(aSig0, bSig, expDiff, &aSig0, &aSig1); + } + else { + if (bSig <= aSig0) { + aSig0 -= bSig; + q = 1; + } + } + + if (rounding_mode == float_round_nearest_even) + { + Bit64u term0, term1; + shift128Right(bSig, 0, 1, &term0, &term1); + + if (! lt128(aSig0, aSig1, term0, term1)) + { + int lt = lt128(term0, term1, aSig0, aSig1); + int eq = eq128(aSig0, aSig1, term0, term1); + + if ((eq && (q & 1)) || lt) { + aSign = !aSign; + ++q; + } + if (lt) sub128(bSig, 0, aSig0, aSig1, &aSig0, &aSig1); + } + } + } + + r = normalizeRoundAndPackFloatx80(80, aSign, zExp, aSig0, aSig1, status); + return overflow; +} + +/*---------------------------------------------------------------------------- +| Returns the remainder of the extended double-precision floating-point value +| `a' with respect to the corresponding value `b'. The operation is performed +| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +int floatx80_ieee754_remainder(floatx80 a, floatx80 b, floatx80 &r, Bit64u &q, float_status_t &status) +{ + return do_fprem(a, b, r, q, float_round_nearest_even, status); +} + +/*---------------------------------------------------------------------------- +| Returns the remainder of the extended double-precision floating-point value +| `a' with respect to the corresponding value `b'. Unlike previous function +| the function does not compute the remainder specified in the IEC/IEEE +| Standard for Binary Floating-Point Arithmetic. This function operates +| differently from the previous function in the way that it rounds the +| quotient of 'a' divided by 'b' to an integer. +*----------------------------------------------------------------------------*/ + +int floatx80_remainder(floatx80 a, floatx80 b, floatx80 &r, Bit64u &q, float_status_t &status) +{ + return do_fprem(a, b, r, q, float_round_to_zero, status); +} diff --git a/bochs/fpu/fpu.cc b/bochs/fpu/fpu.cc new file mode 100644 index 00000000..d84e2de3 --- /dev/null +++ b/bochs/fpu/fpu.cc @@ -0,0 +1,569 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2003-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + + +#define NEED_CPU_REG_SHORTCUTS 1 +#include "bochs.h" +#include "cpu/cpu.h" +#define LOG_THIS BX_CPU_THIS_PTR + +#include "iodev/iodev.h" + +#define CHECK_PENDING_EXCEPTIONS 1 + +#if BX_SUPPORT_FPU +void BX_CPU_C::prepareFPU(bxInstruction_c *i, bx_bool check_pending_exceptions) +{ + if (BX_CPU_THIS_PTR cr0.get_EM() || BX_CPU_THIS_PTR cr0.get_TS()) + exception(BX_NM_EXCEPTION, 0); + + if (check_pending_exceptions) + BX_CPU_THIS_PTR FPU_check_pending_exceptions(); +} + +void BX_CPU_C::FPU_update_last_instruction(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR the_i387.foo = (((Bit32u)(i->b1()) << 8) | i->modrm()) & 0x7ff; + BX_CPU_THIS_PTR the_i387.fcs = BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value; + BX_CPU_THIS_PTR the_i387.fip = BX_CPU_THIS_PTR prev_rip; + + if (! i->modC0()) { + BX_CPU_THIS_PTR the_i387.fds = BX_CPU_THIS_PTR sregs[i->seg()].selector.value; + BX_CPU_THIS_PTR the_i387.fdp = RMAddr(i); + } +} + +void BX_CPU_C::FPU_check_pending_exceptions(void) +{ + if(BX_CPU_THIS_PTR the_i387.get_partial_status() & FPU_SW_Summary) + { + // NE=1 selects the native or internal mode, which generates #MF, + // which is an extension introduced with 80486. + // NE=0 selects the original (backward compatible) FPU error + // handling, which generates an IRQ 13 via the PIC chip. +#if BX_CPU_LEVEL >= 4 + if (BX_CPU_THIS_PTR cr0.get_NE() != 0) { + exception(BX_MF_EXCEPTION, 0); + } + else +#endif + { + // MSDOS compatibility external interrupt (IRQ13) + BX_INFO(("math_abort: MSDOS compatibility FPU exception")); + DEV_pic_raise_irq(13); + } + } +} + +bx_address BX_CPU_C::fpu_save_environment(bxInstruction_c *i) +{ + unsigned offset; + + /* read all registers in stack order and update x87 tag word */ + for(int n=0;n<8;n++) { + // update tag only if it is not empty + if (! IS_TAG_EMPTY(n)) { + int tag = FPU_tagof(BX_READ_FPU_REG(n)); + BX_CPU_THIS_PTR the_i387.FPU_settagi(tag, n); + } + } + + bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + bx_address asize_mask = i->asize_mask(); + + if (protected_mode()) /* Protected Mode */ + { + if (i->os32L() || i->os64L()) + { + Bit32u tmp; + + tmp = 0xffff0000 | BX_CPU_THIS_PTR the_i387.get_control_word(); + write_virtual_dword(i->seg(), eaddr, tmp); + tmp = 0xffff0000 | BX_CPU_THIS_PTR the_i387.get_status_word(); + write_virtual_dword(i->seg(), (eaddr + 0x04) & asize_mask, tmp); + tmp = 0xffff0000 | BX_CPU_THIS_PTR the_i387.get_tag_word(); + write_virtual_dword(i->seg(), (eaddr + 0x08) & asize_mask, tmp); + tmp = (Bit32u)(BX_CPU_THIS_PTR the_i387.fip); + write_virtual_dword(i->seg(), (eaddr + 0x0c) & asize_mask, tmp); + tmp = (BX_CPU_THIS_PTR the_i387.fcs & 0xffff) | + ((Bit32u)(BX_CPU_THIS_PTR the_i387.foo)) << 16; + write_virtual_dword(i->seg(), (eaddr + 0x10) & asize_mask, tmp); + tmp = (Bit32u)(BX_CPU_THIS_PTR the_i387.fdp); + write_virtual_dword(i->seg(), (eaddr + 0x14) & asize_mask, tmp); + tmp = 0xffff0000 | (BX_CPU_THIS_PTR the_i387.fds); + write_virtual_dword(i->seg(), (eaddr + 0x18) & asize_mask, tmp); + + offset = 0x1c; + } + else /* Protected Mode - 16 bit */ + { + Bit16u tmp; + + tmp = BX_CPU_THIS_PTR the_i387.get_control_word(); + write_virtual_word(i->seg(), eaddr, tmp); + tmp = BX_CPU_THIS_PTR the_i387.get_status_word(); + write_virtual_word(i->seg(), (eaddr + 0x02) & asize_mask, tmp); + tmp = BX_CPU_THIS_PTR the_i387.get_tag_word(); + write_virtual_word(i->seg(), (eaddr + 0x04) & asize_mask, tmp); + tmp = (Bit16u)(BX_CPU_THIS_PTR the_i387.fip) & 0xffff; + write_virtual_word(i->seg(), (eaddr + 0x06) & asize_mask, tmp); + tmp = (BX_CPU_THIS_PTR the_i387.fcs); + write_virtual_word(i->seg(), (eaddr + 0x08) & asize_mask, tmp); + tmp = (Bit16u)(BX_CPU_THIS_PTR the_i387.fdp) & 0xffff; + write_virtual_word(i->seg(), (eaddr + 0x0a) & asize_mask, tmp); + tmp = (BX_CPU_THIS_PTR the_i387.fds); + write_virtual_word(i->seg(), (eaddr + 0x0c) & asize_mask, tmp); + + offset = 0x0e; + } + } + else /* Real or V86 Mode */ + { + Bit32u fp_ip = ((Bit32u)(BX_CPU_THIS_PTR the_i387.fcs) << 4) + + (Bit32u)(BX_CPU_THIS_PTR the_i387.fip); + Bit32u fp_dp = ((Bit32u)(BX_CPU_THIS_PTR the_i387.fds) << 4) + + (Bit32u)(BX_CPU_THIS_PTR the_i387.fdp); + + if (i->os32L()) + { + Bit32u tmp; + + tmp = 0xffff0000 | BX_CPU_THIS_PTR the_i387.get_control_word(); + write_virtual_dword(i->seg(), eaddr, tmp); + tmp = 0xffff0000 | BX_CPU_THIS_PTR the_i387.get_status_word(); + write_virtual_dword(i->seg(), (eaddr + 0x04) & asize_mask, tmp); + tmp = 0xffff0000 | BX_CPU_THIS_PTR the_i387.get_tag_word(); + write_virtual_dword(i->seg(), (eaddr + 0x08) & asize_mask, tmp); + tmp = 0xffff0000 | (fp_ip & 0xffff); + write_virtual_dword(i->seg(), (eaddr + 0x0c) & asize_mask, tmp); + tmp = ((fp_ip & 0xffff0000) >> 4) | BX_CPU_THIS_PTR the_i387.foo; + write_virtual_dword(i->seg(), (eaddr + 0x10) & asize_mask, tmp); + tmp = 0xffff0000 | (fp_dp & 0xffff); + write_virtual_dword(i->seg(), (eaddr + 0x14) & asize_mask, tmp); + tmp = (fp_dp & 0xffff0000) >> 4; + write_virtual_dword(i->seg(), (eaddr + 0x18) & asize_mask, tmp); + + offset = 0x1c; + } + else /* Real or V86 Mode - 16 bit */ + { + Bit16u tmp; + + tmp = BX_CPU_THIS_PTR the_i387.get_control_word(); + write_virtual_word(i->seg(), eaddr, tmp); + tmp = BX_CPU_THIS_PTR the_i387.get_status_word(); + write_virtual_word(i->seg(), (eaddr + 0x02) & asize_mask, tmp); + tmp = BX_CPU_THIS_PTR the_i387.get_tag_word(); + write_virtual_word(i->seg(), (eaddr + 0x04) & asize_mask, tmp); + tmp = fp_ip & 0xffff; + write_virtual_word(i->seg(), (eaddr + 0x06) & asize_mask, tmp); + tmp = (Bit16u)((fp_ip & 0xf0000) >> 4) | BX_CPU_THIS_PTR the_i387.foo; + write_virtual_word(i->seg(), (eaddr + 0x08) & asize_mask, tmp); + tmp = fp_dp & 0xffff; + write_virtual_word(i->seg(), (eaddr + 0x0a) & asize_mask, tmp); + tmp = (Bit16u)((fp_dp & 0xf0000) >> 4); + write_virtual_word(i->seg(), (eaddr + 0x0c) & asize_mask, tmp); + + offset = 0x0e; + } + } + + return (eaddr + offset) & asize_mask; +} + +bx_address BX_CPU_C::fpu_load_environment(bxInstruction_c *i) +{ + unsigned offset; + + bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + bx_address asize_mask = i->asize_mask(); + + if (protected_mode()) /* Protected Mode */ + { + if (i->os32L() || i->os64L()) + { + Bit32u tmp; + + tmp = read_virtual_dword(i->seg(), (eaddr + 0x18) & asize_mask); + BX_CPU_THIS_PTR the_i387.fds = tmp & 0xffff; + tmp = read_virtual_dword(i->seg(), (eaddr + 0x14) & asize_mask); + BX_CPU_THIS_PTR the_i387.fdp = tmp; + tmp = read_virtual_dword(i->seg(), (eaddr + 0x10) & asize_mask); + BX_CPU_THIS_PTR the_i387.fcs = tmp & 0xffff; + BX_CPU_THIS_PTR the_i387.foo = (tmp >> 16) & 0x07ff; + tmp = read_virtual_dword(i->seg(), (eaddr + 0x0c) & asize_mask); + BX_CPU_THIS_PTR the_i387.fip = tmp; + tmp = read_virtual_dword(i->seg(), (eaddr + 0x08) & asize_mask); + BX_CPU_THIS_PTR the_i387.twd = tmp & 0xffff; + tmp = read_virtual_dword(i->seg(), (eaddr + 0x04) & asize_mask); + BX_CPU_THIS_PTR the_i387.swd = tmp & 0xffff; + BX_CPU_THIS_PTR the_i387.tos = (tmp >> 11) & 0x7; + tmp = read_virtual_dword(i->seg(), eaddr); + BX_CPU_THIS_PTR the_i387.cwd = tmp & 0xffff; + offset = 0x1c; + } + else /* Protected Mode - 16 bit */ + { + Bit16u tmp; + + tmp = read_virtual_word(i->seg(), (eaddr + 0x0c) & asize_mask); + BX_CPU_THIS_PTR the_i387.fds = tmp; + tmp = read_virtual_word(i->seg(), (eaddr + 0x0a) & asize_mask); + BX_CPU_THIS_PTR the_i387.fdp = tmp; + tmp = read_virtual_word(i->seg(), (eaddr + 0x08) & asize_mask); + BX_CPU_THIS_PTR the_i387.fcs = tmp; + tmp = read_virtual_word(i->seg(), (eaddr + 0x06) & asize_mask); + BX_CPU_THIS_PTR the_i387.fip = tmp; + tmp = read_virtual_word(i->seg(), (eaddr + 0x04) & asize_mask); + BX_CPU_THIS_PTR the_i387.twd = tmp; + tmp = read_virtual_word(i->seg(), (eaddr + 0x02) & asize_mask); + BX_CPU_THIS_PTR the_i387.swd = tmp; + BX_CPU_THIS_PTR the_i387.tos = (tmp >> 11) & 0x7; + tmp = read_virtual_word(i->seg(), eaddr); + BX_CPU_THIS_PTR the_i387.cwd = tmp; + /* opcode is defined to be zero */ + BX_CPU_THIS_PTR the_i387.foo = 0; + offset = 0x0e; + } + } + else /* Real or V86 Mode */ + { + Bit32u fp_ip, fp_dp; + + if (i->os32L()) + { + Bit32u tmp; + + tmp = read_virtual_dword(i->seg(), (eaddr + 0x18) & asize_mask); + fp_dp = (tmp & 0x0ffff000) << 4; + tmp = read_virtual_dword(i->seg(), (eaddr + 0x14) & asize_mask); + fp_dp |= tmp & 0xffff; + BX_CPU_THIS_PTR the_i387.fdp = fp_dp; + BX_CPU_THIS_PTR the_i387.fds = 0; + tmp = read_virtual_dword(i->seg(), (eaddr + 0x10) & asize_mask); + BX_CPU_THIS_PTR the_i387.foo = tmp & 0x07ff; + fp_ip = (tmp & 0x0ffff000) << 4; + tmp = read_virtual_dword(i->seg(), (eaddr + 0x0c) & asize_mask); + fp_ip |= tmp & 0xffff; + BX_CPU_THIS_PTR the_i387.fip = fp_ip; + BX_CPU_THIS_PTR the_i387.fcs = 0; + tmp = read_virtual_dword(i->seg(), (eaddr + 0x08) & asize_mask); + BX_CPU_THIS_PTR the_i387.twd = tmp & 0xffff; + tmp = read_virtual_dword(i->seg(), (eaddr + 0x04) & asize_mask); + BX_CPU_THIS_PTR the_i387.swd = tmp & 0xffff; + BX_CPU_THIS_PTR the_i387.tos = (tmp >> 11) & 0x7; + tmp = read_virtual_dword(i->seg(), eaddr); + BX_CPU_THIS_PTR the_i387.cwd = tmp & 0xffff; + offset = 0x1c; + } + else /* Real or V86 Mode - 16 bit */ + { + Bit16u tmp; + + tmp = read_virtual_word(i->seg(), (eaddr + 0x0c) & asize_mask); + fp_dp = (tmp & 0xf000) << 4; + tmp = read_virtual_word(i->seg(), (eaddr + 0x0a) & asize_mask); + BX_CPU_THIS_PTR the_i387.fdp = fp_dp | tmp; + BX_CPU_THIS_PTR the_i387.fds = 0; + tmp = read_virtual_word(i->seg(), (eaddr + 0x08) & asize_mask); + BX_CPU_THIS_PTR the_i387.foo = tmp & 0x07ff; + fp_ip = (tmp & 0xf000) << 4; + tmp = read_virtual_word(i->seg(), (eaddr + 0x06) & asize_mask); + BX_CPU_THIS_PTR the_i387.fip = fp_ip | tmp; + BX_CPU_THIS_PTR the_i387.fcs = 0; + tmp = read_virtual_word(i->seg(), (eaddr + 0x04) & asize_mask); + BX_CPU_THIS_PTR the_i387.twd = tmp; + tmp = read_virtual_word(i->seg(), (eaddr + 0x02) & asize_mask); + BX_CPU_THIS_PTR the_i387.swd = tmp; + BX_CPU_THIS_PTR the_i387.tos = (tmp >> 11) & 0x7; + tmp = read_virtual_word(i->seg(), eaddr); + BX_CPU_THIS_PTR the_i387.cwd = tmp; + offset = 0x0e; + } + } + + /* always set bit 6 as '1 */ + BX_CPU_THIS_PTR the_i387.cwd = + (BX_CPU_THIS_PTR the_i387.cwd & ~FPU_CW_Reserved_Bits) | 0x0040; + + /* check for unmasked exceptions */ + if (FPU_PARTIAL_STATUS & ~FPU_CONTROL_WORD & FPU_CW_Exceptions_Mask) + { + /* set the B and ES bits in the status-word */ + FPU_PARTIAL_STATUS |= FPU_SW_Summary | FPU_SW_Backward; + } + else { + /* clear the B and ES bits in the status-word */ + FPU_PARTIAL_STATUS &= ~(FPU_SW_Summary | FPU_SW_Backward); + } + + return (eaddr + offset) & asize_mask; +} + +/* D9 /5 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FLDCW(bxInstruction_c *i) +{ + prepareFPU(i, CHECK_PENDING_EXCEPTIONS); + + bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + Bit16u cwd = read_virtual_word(i->seg(), eaddr); + FPU_CONTROL_WORD = (cwd & ~FPU_CW_Reserved_Bits) | 0x0040; // bit 6 is reserved as '1 + + /* check for unmasked exceptions */ + if (FPU_PARTIAL_STATUS & ~FPU_CONTROL_WORD & FPU_CW_Exceptions_Mask) + { + /* set the B and ES bits in the status-word */ + FPU_PARTIAL_STATUS |= FPU_SW_Summary | FPU_SW_Backward; + } + else + { + /* clear the B and ES bits in the status-word */ + FPU_PARTIAL_STATUS &= ~(FPU_SW_Summary | FPU_SW_Backward); + } +} + +/* D9 /7 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FNSTCW(bxInstruction_c *i) +{ + prepareFPU(i, !CHECK_PENDING_EXCEPTIONS); + + Bit16u cwd = BX_CPU_THIS_PTR the_i387.get_control_word(); + + bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + write_virtual_word(i->seg(), eaddr, cwd); +} + +/* DD /7 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FNSTSW(bxInstruction_c *i) +{ + prepareFPU(i, !CHECK_PENDING_EXCEPTIONS); + + Bit16u swd = BX_CPU_THIS_PTR the_i387.get_status_word(); + + bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + write_virtual_word(i->seg(), eaddr, swd); +} + +/* DF E0 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FNSTSW_AX(bxInstruction_c *i) +{ + prepareFPU(i, !CHECK_PENDING_EXCEPTIONS); + AX = BX_CPU_THIS_PTR the_i387.get_status_word(); +} + +/* DD /4 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FRSTOR(bxInstruction_c *i) +{ + prepareFPU(i, CHECK_PENDING_EXCEPTIONS); + + bx_address offset = fpu_load_environment(i); + floatx80 tmp; + + /* read all registers in stack order */ + for(int n=0;n<8;n++) + { + tmp.fraction = read_virtual_qword(i->seg(), (offset + n*10) & i->asize_mask()); + tmp.exp = read_virtual_word (i->seg(), (offset + n*10 + 8) & i->asize_mask()); + + // update tag only if it is not empty + BX_WRITE_FPU_REGISTER_AND_TAG(tmp, + IS_TAG_EMPTY(n) ? FPU_Tag_Empty : FPU_tagof(tmp), n); + } +} + +/* DD /6 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FNSAVE(bxInstruction_c *i) +{ + prepareFPU(i, !CHECK_PENDING_EXCEPTIONS); + + bx_address offset = fpu_save_environment(i); + + /* save all registers in stack order. */ + for(int n=0;n<8;n++) + { + floatx80 stn = BX_READ_FPU_REG(n); + write_virtual_qword(i->seg(), (offset + n*10) & i->asize_mask(), stn.fraction); + write_virtual_word (i->seg(), (offset + n*10 + 8) & i->asize_mask(), stn.exp); + } + + BX_CPU_THIS_PTR the_i387.init(); +} + +/* 9B E2 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FNCLEX(bxInstruction_c *i) +{ + prepareFPU(i, !CHECK_PENDING_EXCEPTIONS); + + FPU_PARTIAL_STATUS &= ~(FPU_SW_Backward|FPU_SW_Summary|FPU_SW_Stack_Fault|FPU_SW_Precision| + FPU_SW_Underflow|FPU_SW_Overflow|FPU_SW_Zero_Div|FPU_SW_Denormal_Op| + FPU_SW_Invalid); + + // do not update last fpu instruction pointer +} + +/* DB E3 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FNINIT(bxInstruction_c *i) +{ + prepareFPU(i, !CHECK_PENDING_EXCEPTIONS); + BX_CPU_THIS_PTR the_i387.init(); +} + +/* D9 /4 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FLDENV(bxInstruction_c *i) +{ + prepareFPU(i, CHECK_PENDING_EXCEPTIONS); + fpu_load_environment(i); + + /* read all registers in stack order and update x87 tag word */ + for(int n=0;n<8;n++) { + // update tag only if it is not empty + if (! IS_TAG_EMPTY(n)) { + int tag = FPU_tagof(BX_READ_FPU_REG(n)); + BX_CPU_THIS_PTR the_i387.FPU_settagi(tag, n); + } + } +} + +/* D9 /6 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FNSTENV(bxInstruction_c *i) +{ + prepareFPU(i, !CHECK_PENDING_EXCEPTIONS); + fpu_save_environment(i); + /* mask all floating point exceptions */ + FPU_CONTROL_WORD |= FPU_CW_Exceptions_Mask; + /* clear the B and ES bits in the status word */ + FPU_PARTIAL_STATUS &= ~(FPU_SW_Backward|FPU_SW_Summary); +} + +/* D9 D0 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FNOP(bxInstruction_c *i) +{ + prepareFPU(i, CHECK_PENDING_EXCEPTIONS); + FPU_update_last_instruction(i); + + // Perform no FPU operation. This instruction takes up space in the + // instruction stream but does not affect the FPU or machine + // context, except the EIP register. +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FPLEGACY(bxInstruction_c *i) +{ + prepareFPU(i, !CHECK_PENDING_EXCEPTIONS); + + // FPU performs no specific operation and no internal x87 states + // are affected +} + +#endif + +#if BX_SUPPORT_FPU + +#include "softfloatx80.h" + +#include + +void BX_CPU_C::print_state_FPU(void) +{ + static double scale_factor = pow(2.0, -63.0); + static const char* cw_round_control[] = { + "NEAREST", "DOWN", "UP", "CHOP" + }; + static const char* cw_precision_control[] = { + "32", "RES", "64", "80" + }; + static const char* fp_class[] = { + "ZERO", "xNAN", "-INF", "+INF", "DENORMAL", "NORMAL" + }; + + Bit32u reg; + reg = BX_CPU_THIS_PTR the_i387.get_status_word(); + fprintf(stderr, "status word: 0x%04x: ", reg); + fprintf(stderr, "%s %s TOS%d %s %s %s %s %s %s %s %s %s %s %s\n", + (reg & FPU_SW_Backward) ? "B" : "b", + (reg & FPU_SW_C3) ? "C3" : "c3", (FPU_TOS&7), + (reg & FPU_SW_C2) ? "C2" : "c2", + (reg & FPU_SW_C1) ? "C1" : "c1", + (reg & FPU_SW_C0) ? "C0" : "c0", + (reg & FPU_SW_Summary) ? "ES" : "es", + (reg & FPU_SW_Stack_Fault) ? "SF" : "sf", + (reg & FPU_SW_Precision) ? "PE" : "pe", + (reg & FPU_SW_Underflow) ? "UE" : "ue", + (reg & FPU_SW_Overflow) ? "OE" : "oe", + (reg & FPU_SW_Zero_Div) ? "ZE" : "ze", + (reg & FPU_SW_Denormal_Op) ? "DE" : "de", + (reg & FPU_SW_Invalid) ? "IE" : "ie"); + + reg = BX_CPU_THIS_PTR the_i387.get_control_word(); + fprintf(stderr, "control word: 0x%04x: ", reg); + fprintf(stderr, "%s RC_%s PC_%s %s %s %s %s %s %s\n", + (reg & FPU_CW_Inf) ? "INF" : "inf", + (cw_round_control[(reg & FPU_CW_RC) >> 10]), + (cw_precision_control[(reg & FPU_CW_PC) >> 8]), + (reg & FPU_CW_Precision) ? "PM" : "pm", + (reg & FPU_CW_Underflow) ? "UM" : "um", + (reg & FPU_CW_Overflow) ? "OM" : "om", + (reg & FPU_CW_Zero_Div) ? "ZM" : "zm", + (reg & FPU_CW_Denormal) ? "DM" : "dm", + (reg & FPU_CW_Invalid) ? "IM" : "im"); + + reg = BX_CPU_THIS_PTR the_i387.get_tag_word(); + fprintf(stderr, "tag word: 0x%04x\n", reg); + reg = BX_CPU_THIS_PTR the_i387.foo; + fprintf(stderr, "operand: 0x%04x\n", reg); + fprintf(stderr, "fip: 0x" FMT_ADDRX "\n", + BX_CPU_THIS_PTR the_i387.fip); + reg = BX_CPU_THIS_PTR the_i387.fcs; + fprintf(stderr, "fcs: 0x%04x\n", reg); + fprintf(stderr, "fdp: 0x" FMT_ADDRX "\n", + BX_CPU_THIS_PTR the_i387.fdp); + reg = BX_CPU_THIS_PTR the_i387.fds; + fprintf(stderr, "fds: 0x%04x\n", reg); + + // print stack too + int tos = FPU_TOS & 7; + for (int i=0; i<8; i++) { + const floatx80 &fp = BX_FPU_REG(i); + unsigned tag = BX_CPU_THIS_PTR the_i387.FPU_gettagi((i-tos)&7); + if (tag != FPU_Tag_Empty) tag = FPU_tagof(fp); + double f = pow(2.0, ((0x7fff & fp.exp) - 0x3fff)); + if (fp.exp & 0x8000) f = -f; +#ifdef _MSC_VER + f *= (double)(signed __int64)(fp.fraction>>1) * scale_factor * 2; +#else + f *= fp.fraction*scale_factor; +#endif + float_class_t f_class = floatx80_class(fp); + fprintf(stderr, "%sFP%d ST%d(%c): raw 0x%04x:%08lx%08lx (%.10f) (%s)\n", + i==tos?"=>":" ", i, (i-tos)&7, + "v0se"[tag], + fp.exp & 0xffff, GET32H(fp.fraction), GET32L(fp.fraction), + f, (f_class == float_NaN) ? (floatx80_is_signaling_nan(fp) ? "SNAN" : "QNAN") : fp_class[f_class]); + } +} + +#endif diff --git a/bochs/fpu/fpu_arith.cc b/bochs/fpu/fpu_arith.cc new file mode 100755 index 00000000..1b71720c --- /dev/null +++ b/bochs/fpu/fpu_arith.cc @@ -0,0 +1,1199 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2003-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#define NEED_CPU_REG_SHORTCUTS 1 +#include "bochs.h" +#include "cpu/cpu.h" +#define LOG_THIS BX_CPU_THIS_PTR + +#if BX_SUPPORT_FPU + +float_status_t FPU_pre_exception_handling(Bit16u control_word) +{ + float_status_t status; + + int precision = control_word & FPU_CW_PC; + + switch(precision) + { + case FPU_PR_32_BITS: + status.float_rounding_precision = 32; + break; + case FPU_PR_64_BITS: + status.float_rounding_precision = 64; + break; + case FPU_PR_80_BITS: + status.float_rounding_precision = 80; + break; + default: + /* With the precision control bits set to 01 "(reserved)", a + real CPU behaves as if the precision control bits were + set to 11 "80 bits" */ + status.float_rounding_precision = 80; + } + + status.float_exception_flags = 0; // clear exceptions before execution + status.float_nan_handling_mode = float_first_operand_nan; + status.float_rounding_mode = (control_word & FPU_CW_RC) >> 10; + status.flush_underflow_to_zero = 0; + status.float_exception_masks = control_word & FPU_CW_Exceptions_Mask; + + return status; +} + +#include "softfloatx80.h" + +floatx80 FPU_handle_NaN(floatx80 a, int aIsNaN, float32 b32, int bIsNaN, float_status_t &status) +{ + int aIsSignalingNaN = floatx80_is_signaling_nan(a); + int bIsSignalingNaN = float32_is_signaling_nan(b32); + + if (aIsSignalingNaN | bIsSignalingNaN) + float_raise(status, float_flag_invalid); + + // propogate QNaN to SNaN + a = propagateFloatx80NaN(a, status); + + if (aIsNaN & !bIsNaN) return a; + + // float32 is NaN so conversion will propagate SNaN to QNaN and raise + // appropriate exception flags + floatx80 b = float32_to_floatx80(b32, status); + + if (aIsSignalingNaN) { + if (bIsSignalingNaN) goto returnLargerSignificand; + return bIsNaN ? b : a; + } + else if (aIsNaN) { + if (bIsSignalingNaN) return a; + returnLargerSignificand: + if (a.fraction < b.fraction) return b; + if (b.fraction < a.fraction) return a; + return (a.exp < b.exp) ? a : b; + } + else { + return b; + } +} + +int FPU_handle_NaN(floatx80 a, float32 b, floatx80 &r, float_status_t &status) +{ + if (floatx80_is_unsupported(a)) { + float_raise(status, float_flag_invalid); + r = floatx80_default_nan; + return 1; + } + + int aIsNaN = floatx80_is_nan(a), bIsNaN = float32_is_nan(b); + if (aIsNaN | bIsNaN) { + r = FPU_handle_NaN(a, aIsNaN, b, bIsNaN, status); + return 1; + } + return 0; +} + +floatx80 FPU_handle_NaN(floatx80 a, int aIsNaN, float64 b64, int bIsNaN, float_status_t &status) +{ + int aIsSignalingNaN = floatx80_is_signaling_nan(a); + int bIsSignalingNaN = float64_is_signaling_nan(b64); + + if (aIsSignalingNaN | bIsSignalingNaN) + float_raise(status, float_flag_invalid); + + // propogate QNaN to SNaN + a = propagateFloatx80NaN(a, status); + + if (aIsNaN & !bIsNaN) return a; + + // float64 is NaN so conversion will propagate SNaN to QNaN and raise + // appropriate exception flags + floatx80 b = float64_to_floatx80(b64, status); + + if (aIsSignalingNaN) { + if (bIsSignalingNaN) goto returnLargerSignificand; + return bIsNaN ? b : a; + } + else if (aIsNaN) { + if (bIsSignalingNaN) return a; + returnLargerSignificand: + if (a.fraction < b.fraction) return b; + if (b.fraction < a.fraction) return a; + return (a.exp < b.exp) ? a : b; + } + else { + return b; + } +} + +int FPU_handle_NaN(floatx80 a, float64 b, floatx80 &r, float_status_t &status) +{ + if (floatx80_is_unsupported(a)) { + float_raise(status, float_flag_invalid); + r = floatx80_default_nan; + return 1; + } + + int aIsNaN = floatx80_is_nan(a), bIsNaN = float64_is_nan(b); + if (aIsNaN | bIsNaN) { + r = FPU_handle_NaN(a, aIsNaN, b, bIsNaN, status); + return 1; + } + return 0; +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FADD_ST0_STj(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = BX_READ_FPU_REG(i->rm()); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_add(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FADD_STi_ST0(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + int pop_stack = i->b1() & 2; + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_stack_underflow(i->rm(), pop_stack); + return; + } + + floatx80 a = BX_READ_FPU_REG(i->rm()); + floatx80 b = BX_READ_FPU_REG(0); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_add(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) { + BX_WRITE_FPU_REG(result, i->rm()); + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FADD_SINGLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float32 load_reg = read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 a = BX_READ_FPU_REG(0), result; + if (! FPU_handle_NaN(a, load_reg, result, status)) + result = floatx80_add(a, float32_to_floatx80(load_reg, status), status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FADD_DOUBLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float64 load_reg = read_virtual_qword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 a = BX_READ_FPU_REG(0), result; + if (! FPU_handle_NaN(a, load_reg, result, status)) + result = floatx80_add(a, float64_to_floatx80(load_reg, status), status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FIADD_WORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit16s load_reg = (Bit16s) read_virtual_word(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = int32_to_floatx80((Bit32s)(load_reg)); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_add(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FIADD_DWORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit32s load_reg = (Bit32s) read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = int32_to_floatx80(load_reg); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_add(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FMUL_ST0_STj(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = BX_READ_FPU_REG(i->rm()); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_mul(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FMUL_STi_ST0(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + int pop_stack = i->b1() & 2; + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_stack_underflow(i->rm(), pop_stack); + return; + } + + floatx80 a = BX_READ_FPU_REG(i->rm()); + floatx80 b = BX_READ_FPU_REG(0); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_mul(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) { + BX_WRITE_FPU_REG(result, i->rm()); + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FMUL_SINGLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float32 load_reg = read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 a = BX_READ_FPU_REG(0), result; + if (! FPU_handle_NaN(a, load_reg, result, status)) + result = floatx80_mul(a, float32_to_floatx80(load_reg, status), status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FMUL_DOUBLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float64 load_reg = read_virtual_qword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 a = BX_READ_FPU_REG(0), result; + if (! FPU_handle_NaN(a, load_reg, result, status)) + result = floatx80_mul(a, float64_to_floatx80(load_reg, status), status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FIMUL_WORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit16s load_reg = (Bit16s) read_virtual_word(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = int32_to_floatx80((Bit32s)(load_reg)); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_mul(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FIMUL_DWORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit32s load_reg = (Bit32s) read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = int32_to_floatx80(load_reg); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_mul(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FSUB_ST0_STj(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = BX_READ_FPU_REG(i->rm()); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_sub(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FSUBR_ST0_STj(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(i->rm()); + floatx80 b = BX_READ_FPU_REG(0); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_sub(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FSUB_STi_ST0(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + int pop_stack = i->b1() & 2; + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_stack_underflow(i->rm(), pop_stack); + return; + } + + floatx80 a = BX_READ_FPU_REG(i->rm()); + floatx80 b = BX_READ_FPU_REG(0); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_sub(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) { + BX_WRITE_FPU_REG(result, i->rm()); + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FSUBR_STi_ST0(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + int pop_stack = i->b1() & 2; + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_stack_underflow(i->rm(), pop_stack); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = BX_READ_FPU_REG(i->rm()); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_sub(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) { + BX_WRITE_FPU_REG(result, i->rm()); + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FSUB_SINGLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float32 load_reg = read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 a = BX_READ_FPU_REG(0), result; + if (! FPU_handle_NaN(a, load_reg, result, status)) + result = floatx80_sub(a, float32_to_floatx80(load_reg, status), status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FSUBR_SINGLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float32 load_reg = read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 b = BX_READ_FPU_REG(0), result; + if (! FPU_handle_NaN(b, load_reg, result, status)) + result = floatx80_sub(float32_to_floatx80(load_reg, status), b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FSUB_DOUBLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float64 load_reg = read_virtual_qword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 a = BX_READ_FPU_REG(0), result; + if (! FPU_handle_NaN(a, load_reg, result, status)) + result = floatx80_sub(a, float64_to_floatx80(load_reg, status), status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FSUBR_DOUBLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float64 load_reg = read_virtual_qword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + + floatx80 b = BX_READ_FPU_REG(0), result; + if (! FPU_handle_NaN(b, load_reg, result, status)) + result = floatx80_sub(float64_to_floatx80(load_reg, status), b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FISUB_WORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit16s load_reg = (Bit16s) read_virtual_word(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = int32_to_floatx80((Bit32s)(load_reg)); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_sub(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FISUBR_WORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit16s load_reg = (Bit16s) read_virtual_word(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + floatx80 a = int32_to_floatx80((Bit32s)(load_reg)); + floatx80 b = BX_READ_FPU_REG(0); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_sub(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FISUB_DWORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit32s load_reg = (Bit32s) read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = int32_to_floatx80(load_reg); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_sub(BX_READ_FPU_REG(0), + int32_to_floatx80(load_reg), status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FISUBR_DWORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit32s load_reg = (Bit32s) read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + floatx80 a = int32_to_floatx80(load_reg); + floatx80 b = BX_READ_FPU_REG(0); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_sub(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FDIV_ST0_STj(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = BX_READ_FPU_REG(i->rm()); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_div(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FDIVR_ST0_STj(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(i->rm()); + floatx80 b = BX_READ_FPU_REG(0); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_div(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FDIV_STi_ST0(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + int pop_stack = i->b1() & 2; + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_stack_underflow(i->rm(), pop_stack); + return; + } + + floatx80 a = BX_READ_FPU_REG(i->rm()); + floatx80 b = BX_READ_FPU_REG(0); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_div(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) { + BX_WRITE_FPU_REG(result, i->rm()); + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FDIVR_STi_ST0(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + int pop_stack = i->b1() & 2; + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_stack_underflow(i->rm(), pop_stack); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = BX_READ_FPU_REG(i->rm()); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_div(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) { + BX_WRITE_FPU_REG(result, i->rm()); + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FDIV_SINGLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float32 load_reg = read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 a = BX_READ_FPU_REG(0), result; + if (! FPU_handle_NaN(a, load_reg, result, status)) + result = floatx80_div(a, float32_to_floatx80(load_reg, status), status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FDIVR_SINGLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float32 load_reg = read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 b = BX_READ_FPU_REG(0), result; + if (! FPU_handle_NaN(b, load_reg, result, status)) + result = floatx80_div(float32_to_floatx80(load_reg, status), b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FDIV_DOUBLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float64 load_reg = read_virtual_qword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 a = BX_READ_FPU_REG(0), result; + if (! FPU_handle_NaN(a, load_reg, result, status)) + result = floatx80_div(a, float64_to_floatx80(load_reg, status), status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FDIVR_DOUBLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float64 load_reg = read_virtual_qword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 b = BX_READ_FPU_REG(0), result; + if (! FPU_handle_NaN(b, load_reg, result, status)) + result = floatx80_div(float64_to_floatx80(load_reg, status), b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FIDIV_WORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit16s load_reg = (Bit16s) read_virtual_word(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = int32_to_floatx80((Bit32s)(load_reg)); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_div(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FIDIVR_WORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit16s load_reg = (Bit16s) read_virtual_word(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + floatx80 a = int32_to_floatx80((Bit32s)(load_reg)); + floatx80 b = BX_READ_FPU_REG(0); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_div(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FIDIV_DWORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit32s load_reg = (Bit32s) read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = int32_to_floatx80(load_reg); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_div(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FIDIVR_DWORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit32s load_reg = (Bit32s) read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + floatx80 a = int32_to_floatx80(load_reg); + floatx80 b = BX_READ_FPU_REG(0); + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_div(a, b, status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FSQRT(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_sqrt(BX_READ_FPU_REG(0), status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +/* D9 FC */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FRNDINT(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_round_to_int(BX_READ_FPU_REG(0), status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +#endif diff --git a/bochs/fpu/fpu_compare.cc b/bochs/fpu/fpu_compare.cc new file mode 100755 index 00000000..4f2b01fd --- /dev/null +++ b/bochs/fpu/fpu_compare.cc @@ -0,0 +1,563 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2003-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#define NEED_CPU_REG_SHORTCUTS 1 +#include "bochs.h" +#include "cpu/cpu.h" +#define LOG_THIS BX_CPU_THIS_PTR + +#if BX_SUPPORT_FPU + +extern float_status_t FPU_pre_exception_handling(Bit16u control_word); + +#include "softfloatx80.h" + +static int status_word_flags_fpu_compare(int float_relation) +{ + switch(float_relation) { + case float_relation_unordered: + return (FPU_SW_C0|FPU_SW_C2|FPU_SW_C3); + + case float_relation_greater: + return (0); + + case float_relation_less: + return (FPU_SW_C0); + + case float_relation_equal: + return (FPU_SW_C3); + } + + return (-1); // should never get here +} + +void BX_CPU_C::write_eflags_fpu_compare(int float_relation) +{ + switch(float_relation) { + case float_relation_unordered: + setEFlagsOSZAPC(EFlagsZFMask | EFlagsPFMask | EFlagsCFMask); + break; + + case float_relation_greater: + setEFlagsOSZAPC(0); + break; + + case float_relation_less: + setEFlagsOSZAPC(EFlagsCFMask); + break; + + case float_relation_equal: + setEFlagsOSZAPC(EFlagsZFMask); + break; + + default: + BX_PANIC(("write_eflags: unknown floating point compare relation")); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FCOM_STi(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + int pop_stack = i->nnn() & 1; + // handle special case of FSTP opcode @ 0xDE 0xD0..D7 + if (i->b1() == 0xde) + pop_stack = 1; + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_exception(FPU_EX_Stack_Underflow); + setcc(FPU_SW_C0|FPU_SW_C2|FPU_SW_C3); + + if(BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + int rc = floatx80_compare(BX_READ_FPU_REG(0), BX_READ_FPU_REG(i->rm()), status); + setcc(status_word_flags_fpu_compare(rc)); + + if (! FPU_exception(status.float_exception_flags)) { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FCOMI_ST0_STj(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + int pop_stack = i->b1() & 4; + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_exception(FPU_EX_Stack_Underflow); + setEFlagsOSZAPC(EFlagsZFMask | EFlagsPFMask | EFlagsCFMask); + + if(BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + int rc = floatx80_compare(BX_READ_FPU_REG(0), BX_READ_FPU_REG(i->rm()), status); + BX_CPU_THIS_PTR write_eflags_fpu_compare(rc); + + if (! FPU_exception(status.float_exception_flags)) { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FUCOMI_ST0_STj(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + int pop_stack = i->b1() & 4; + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_exception(FPU_EX_Stack_Underflow); + setEFlagsOSZAPC(EFlagsZFMask | EFlagsPFMask | EFlagsCFMask); + + if(BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + int rc = floatx80_compare_quiet(BX_READ_FPU_REG(0), BX_READ_FPU_REG(i->rm()), status); + BX_CPU_THIS_PTR write_eflags_fpu_compare(rc); + + if (! FPU_exception(status.float_exception_flags)) { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FUCOM_STi(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + int pop_stack = i->nnn() & 1; + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_exception(FPU_EX_Stack_Underflow); + setcc(FPU_SW_C0|FPU_SW_C2|FPU_SW_C3); + + if(BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + int rc = floatx80_compare_quiet(BX_READ_FPU_REG(0), BX_READ_FPU_REG(i->rm()), status); + setcc(status_word_flags_fpu_compare(rc)); + + if (! FPU_exception(status.float_exception_flags)) { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FCOM_SINGLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + int pop_stack = i->nnn() & 1, rc; + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float32 load_reg = read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + setcc(FPU_SW_C0|FPU_SW_C2|FPU_SW_C3); + + if(BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 a = BX_READ_FPU_REG(0); + + if (floatx80_is_nan(a) || floatx80_is_unsupported(a) || float32_is_nan(load_reg)) { + rc = float_relation_unordered; + float_raise(status, float_flag_invalid); + } + else { + rc = floatx80_compare(a, float32_to_floatx80(load_reg, status), status); + } + setcc(status_word_flags_fpu_compare(rc)); + + if (! FPU_exception(status.float_exception_flags)) { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FCOM_DOUBLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + int pop_stack = i->nnn() & 1, rc; + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float64 load_reg = read_virtual_qword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + setcc(FPU_SW_C0|FPU_SW_C2|FPU_SW_C3); + + if(BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 a = BX_READ_FPU_REG(0); + + if (floatx80_is_nan(a) || floatx80_is_unsupported(a) || float64_is_nan(load_reg)) { + rc = float_relation_unordered; + float_raise(status, float_flag_invalid); + } + else { + rc = floatx80_compare(a, float64_to_floatx80(load_reg, status), status); + } + setcc(status_word_flags_fpu_compare(rc)); + + if (! FPU_exception(status.float_exception_flags)) { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FICOM_WORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + int pop_stack = i->nnn() & 1; + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit16s load_reg = (Bit16s) read_virtual_word(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + setcc(FPU_SW_C0|FPU_SW_C2|FPU_SW_C3); + + if(BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + int rc = floatx80_compare(BX_READ_FPU_REG(0), + int32_to_floatx80((Bit32s)(load_reg)), status); + setcc(status_word_flags_fpu_compare(rc)); + + if (! FPU_exception(status.float_exception_flags)) { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FICOM_DWORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + int pop_stack = i->nnn() & 1; + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit32s load_reg = (Bit32s) read_virtual_dword(i->seg(), RMAddr(i)); + + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + setcc(FPU_SW_C0|FPU_SW_C2|FPU_SW_C3); + + if(BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + int rc = floatx80_compare(BX_READ_FPU_REG(0), int32_to_floatx80(load_reg), status); + setcc(status_word_flags_fpu_compare(rc)); + + if (! FPU_exception(status.float_exception_flags)) { + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +/* DE D9 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FCOMPP(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(1)) + { + FPU_exception(FPU_EX_Stack_Underflow); + setcc(FPU_SW_C0|FPU_SW_C2|FPU_SW_C3); + + if(BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + BX_CPU_THIS_PTR the_i387.FPU_pop(); + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + int rc = floatx80_compare(BX_READ_FPU_REG(0), BX_READ_FPU_REG(1), status); + setcc(status_word_flags_fpu_compare(rc)); + + if (! FPU_exception(status.float_exception_flags)) { + BX_CPU_THIS_PTR the_i387.FPU_pop(); + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +/* DA E9 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FUCOMPP(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(1)) + { + FPU_exception(FPU_EX_Stack_Underflow); + setcc(FPU_SW_C0|FPU_SW_C2|FPU_SW_C3); + + if(BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + BX_CPU_THIS_PTR the_i387.FPU_pop(); + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + int rc = floatx80_compare_quiet(BX_READ_FPU_REG(0), BX_READ_FPU_REG(1), status); + setcc(status_word_flags_fpu_compare(rc)); + + if (! FPU_exception(status.float_exception_flags)) { + BX_CPU_THIS_PTR the_i387.FPU_pop(); + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FCMOV_ST0_STj(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(i->rm())) + { + FPU_stack_underflow(0); + return; + } + + floatx80 sti_reg = BX_READ_FPU_REG(i->rm()); + + bx_bool condition = 0; + switch(i->nnn() & 3) + { + case 0: condition = get_CF(); break; + case 1: condition = get_ZF(); break; + case 2: condition = get_CF() || get_ZF(); break; + case 3: condition = get_PF(); break; + default: + BX_PANIC(("FCMOV_ST0_STj: default case")); + } + if (i->b1() & 1) + condition = !condition; + + if (condition) + BX_WRITE_FPU_REG(sti_reg, 0); +} + +/* D9 E4 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FTST(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_exception(FPU_EX_Stack_Underflow); + setcc(FPU_SW_C0|FPU_SW_C2|FPU_SW_C3); + } + else { + extern const floatx80 Const_Z; + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + int rc = floatx80_compare(BX_READ_FPU_REG(0), Const_Z, status); + setcc(status_word_flags_fpu_compare(rc)); + FPU_exception(status.float_exception_flags); + } +} + +/* D9 E5 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FXAM(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + floatx80 reg = BX_READ_FPU_REG(0); + int sign = floatx80_sign(reg); + + /* + * Examine the contents of the ST(0) register and sets the condition + * code flags C0, C2 and C3 in the FPU status word to indicate the + * class of value or number in the register. + */ + + if (IS_TAG_EMPTY(0)) + { + setcc(FPU_SW_C3|FPU_SW_C1|FPU_SW_C0); + } + else + { + float_class_t aClass = floatx80_class(reg); + + switch(aClass) + { + case float_zero: + setcc(FPU_SW_C3|FPU_SW_C1); + break; + + case float_NaN: + // unsupported handled as NaNs + if (floatx80_is_unsupported(reg)) { + setcc(FPU_SW_C1); + } else { + setcc(FPU_SW_C1|FPU_SW_C0); + } + break; + + case float_negative_inf: + case float_positive_inf: + setcc(FPU_SW_C2|FPU_SW_C1|FPU_SW_C0); + break; + + case float_denormal: + setcc(FPU_SW_C3|FPU_SW_C2|FPU_SW_C1); + break; + + case float_normalized: + setcc(FPU_SW_C2|FPU_SW_C1); + break; + } + } + + /* + * The C1 flag is set to the sign of the value in ST(0), regardless + * of whether the register is empty or full. + */ + if (! sign) + clear_C1(); +} + +#endif diff --git a/bochs/fpu/fpu_const.cc b/bochs/fpu/fpu_const.cc new file mode 100755 index 00000000..416812a6 --- /dev/null +++ b/bochs/fpu/fpu_const.cc @@ -0,0 +1,174 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2003-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#define NEED_CPU_REG_SHORTCUTS 1 +#include "bochs.h" +#include "cpu/cpu.h" +#define LOG_THIS BX_CPU_THIS_PTR + +#if BX_SUPPORT_FPU + +#include "softfloatx80.h" + +const floatx80 Const_QNaN = packFloatx80(0, floatx80_default_nan_exp, floatx80_default_nan_fraction); +const floatx80 Const_Z = packFloatx80(0, 0x0000, 0); +const floatx80 Const_1 = packFloatx80(0, 0x3fff, BX_CONST64(0x8000000000000000)); +const floatx80 Const_L2T = packFloatx80(0, 0x4000, BX_CONST64(0xd49a784bcd1b8afe)); +const floatx80 Const_L2E = packFloatx80(0, 0x3fff, BX_CONST64(0xb8aa3b295c17f0bc)); +const floatx80 Const_PI = packFloatx80(0, 0x4000, BX_CONST64(0xc90fdaa22168c235)); +const floatx80 Const_LG2 = packFloatx80(0, 0x3ffd, BX_CONST64(0x9a209a84fbcff799)); +const floatx80 Const_LN2 = packFloatx80(0, 0x3ffe, BX_CONST64(0xb17217f7d1cf79ac)); +const floatx80 Const_INF = packFloatx80(0, 0x7fff, BX_CONST64(0x8000000000000000)); + +/* A fast way to find out whether x is one of RC_DOWN or RC_CHOP + (and not one of RC_RND or RC_UP). + */ +#define DOWN_OR_CHOP() (FPU_CONTROL_WORD & FPU_CW_RC & FPU_RC_DOWN) + +BX_CPP_INLINE floatx80 FPU_round_const(const floatx80 &a, int adj) +{ + floatx80 result = a; + result.fraction += adj; + return result; +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FLDL2T(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) + { + FPU_stack_overflow(); + } + else { + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(FPU_round_const(Const_L2T, (FPU_CONTROL_WORD & FPU_CW_RC) == FPU_RC_UP), 0); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FLDL2E(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) + { + FPU_stack_overflow(); + } + else { + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(FPU_round_const(Const_L2E, DOWN_OR_CHOP() ? -1 : 0), 0); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FLDPI(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) + { + FPU_stack_overflow(); + } + else { + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(FPU_round_const(Const_PI, DOWN_OR_CHOP() ? -1 : 0), 0); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FLDLG2(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) + { + FPU_stack_overflow(); + } + else { + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(FPU_round_const(Const_LG2, DOWN_OR_CHOP() ? -1 : 0), 0); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FLDLN2(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) + { + FPU_stack_overflow(); + } + else { + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(FPU_round_const(Const_LN2, DOWN_OR_CHOP() ? -1 : 0), 0); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FLD1(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) + { + FPU_stack_overflow(); + } + else { + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(Const_1, 0); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FLDZ(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) + { + FPU_stack_overflow(); + } + else { + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(Const_Z, 0); + } +} + +#endif diff --git a/bochs/fpu/fpu_constant.h b/bochs/fpu/fpu_constant.h new file mode 100755 index 00000000..73a46fdf --- /dev/null +++ b/bochs/fpu/fpu_constant.h @@ -0,0 +1,82 @@ +/*============================================================================ +This source file is an extension to the SoftFloat IEC/IEEE Floating-point +Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) +floating point emulation. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +#ifndef _FPU_CONSTANTS_H_ +#define _FPU_CONSTANTS_H_ + +#include + +// Pentium CPU uses only 68-bit precision M_PI approximation +// #define BETTER_THAN_PENTIUM + +/*============================================================================ + * Written for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +////////////////////////////// +// PI, PI/2, PI/4 constants +////////////////////////////// + +#define FLOATX80_PI_EXP (0x4000) + +// 128-bit PI fraction +#ifdef BETTER_THAN_PENTIUM +#define FLOAT_PI_HI (BX_CONST64(0xc90fdaa22168c234)) +#define FLOAT_PI_LO (BX_CONST64(0xc4c6628b80dc1cd1)) +#else +#define FLOAT_PI_HI (BX_CONST64(0xc90fdaa22168c234)) +#define FLOAT_PI_LO (BX_CONST64(0xC000000000000000)) +#endif + +#define FLOATX80_PI2_EXP (0x3FFF) +#define FLOATX80_PI4_EXP (0x3FFE) + +////////////////////////////// +// 3PI/4 constant +////////////////////////////// + +#define FLOATX80_3PI4_EXP (0x4000) + +// 128-bit 3PI/4 fraction +#ifdef BETTER_THAN_PENTIUM +#define FLOAT_3PI4_HI (BX_CONST64(0x96cbe3f9990e91a7)) +#define FLOAT_3PI4_LO (BX_CONST64(0x9394c9e8a0a5159c)) +#else +#define FLOAT_3PI4_HI (BX_CONST64(0x96cbe3f9990e91a7)) +#define FLOAT_3PI4_LO (BX_CONST64(0x9000000000000000)) +#endif + +////////////////////////////// +// 1/LN2 constant +////////////////////////////// + +#define FLOAT_LN2INV_EXP (0x3FFF) + +// 128-bit 1/LN2 fraction +#ifdef BETTER_THAN_PENTIUM +#define FLOAT_LN2INV_HI (BX_CONST64(0xb8aa3b295c17f0bb)) +#define FLOAT_LN2INV_LO (BX_CONST64(0xbe87fed0691d3e89)) +#else +#define FLOAT_LN2INV_HI (BX_CONST64(0xb8aa3b295c17f0bb)) +#define FLOAT_LN2INV_LO (BX_CONST64(0xC000000000000000)) +#endif + +#endif diff --git a/bochs/fpu/fpu_load_store.cc b/bochs/fpu/fpu_load_store.cc new file mode 100755 index 00000000..541e2f67 --- /dev/null +++ b/bochs/fpu/fpu_load_store.cc @@ -0,0 +1,733 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2003-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#define NEED_CPU_REG_SHORTCUTS 1 +#include "bochs.h" +#include "cpu/cpu.h" +#define LOG_THIS BX_CPU_THIS_PTR + +#if BX_SUPPORT_FPU + +#define swap_values16u(a, b) { Bit16u tmp = a; a = b; b = tmp; } + +extern float_status_t FPU_pre_exception_handling(Bit16u control_word); + +#include "softfloatx80.h" + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FLD_STi(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) + { + FPU_stack_overflow(); + return; + } + + floatx80 sti_reg = floatx80_default_nan; + + if (IS_TAG_EMPTY(i->rm())) + { + FPU_exception(FPU_EX_Stack_Underflow); + + if (! BX_CPU_THIS_PTR the_i387.is_IA_masked()) + return; + } + else { + sti_reg = BX_READ_FPU_REG(i->rm()); + } + + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(sti_reg, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FLD_SINGLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float32 load_reg = read_virtual_dword(i->seg(), RMAddr(i)); + + FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) { + FPU_stack_overflow(); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + // convert to floatx80 format + floatx80 result = float32_to_floatx80(load_reg, status); + + unsigned unmasked = FPU_exception(status.float_exception_flags); + if (! (unmasked & FPU_CW_Invalid)) { + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(result, 0); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FLD_DOUBLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + float64 load_reg = read_virtual_qword(i->seg(), RMAddr(i)); + + FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) { + FPU_stack_overflow(); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + // convert to floatx80 format + floatx80 result = float64_to_floatx80(load_reg, status); + + unsigned unmasked = FPU_exception(status.float_exception_flags); + if (! (unmasked & FPU_CW_Invalid)) { + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(result, 0); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FLD_EXTENDED_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + floatx80 result; + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + result.fraction = read_virtual_qword(i->seg(), RMAddr(i)); + result.exp = read_virtual_word(i->seg(), (RMAddr(i)+8) & i->asize_mask()); + + FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) { + FPU_stack_overflow(); + } + else { + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(result, 0); + } +} + +/* DF /0 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FILD_WORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit16s load_reg = (Bit16s) read_virtual_word(i->seg(), RMAddr(i)); + + FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) { + FPU_stack_overflow(); + } + else { + floatx80 result = int32_to_floatx80((Bit32s) load_reg); + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(result, 0); + } +} + +/* DB /0 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FILD_DWORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit32s load_reg = (Bit32s) read_virtual_dword(i->seg(), RMAddr(i)); + + FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) { + FPU_stack_overflow(); + } + else { + floatx80 result = int32_to_floatx80(load_reg); + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(result, 0); + } +} + +/* DF /5 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FILD_QWORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit64s load_reg = (Bit64s) read_virtual_qword(i->seg(), RMAddr(i)); + + FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) { + FPU_stack_overflow(); + } + else { + floatx80 result = int64_to_floatx80(load_reg); + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(result, 0); + } +} + +/* DF /4 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FBLD_PACKED_BCD(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + Bit16u hi2 = read_virtual_word(i->seg(), (RMAddr(i) + 8) & i->asize_mask()); + Bit64u lo8 = read_virtual_qword(i->seg(), RMAddr(i)); + + FPU_update_last_instruction(i); + + clear_C1(); + + if (! IS_TAG_EMPTY(-1)) + { + FPU_stack_overflow(); + return; + } + + // convert packed BCD to 64-bit integer + Bit64s scale = 1; + Bit64s val64 = 0; + + for (int n = 0; n < 16; n++) + { + val64 += (lo8 & 0x0f) * scale; + lo8 >>= 4; + scale *= 10; + } + + val64 += (hi2 & 0x0f) * scale; + val64 += ((hi2>>4) & 0x0f) * scale * 10; + + floatx80 result = int64_to_floatx80(val64); + if (hi2 & 0x8000) // set negative + floatx80_chs(result); + + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(result, 0); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FST_STi(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + FPU_update_last_instruction(i); + + int pop_stack = i->nnn() & 1; + // handle special case of FSTP opcode @ 0xDF 0xD0..D7 + if (i->b1() == 0xdf) + pop_stack = 1; + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(i->rm(), pop_stack); + } + else { + floatx80 st0_reg = BX_READ_FPU_REG(0); + + BX_WRITE_FPU_REG(st0_reg, i->rm()); + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); + } +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FST_SINGLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + FPU_update_last_instruction(i); + + Bit16u x87_sw = FPU_PARTIAL_STATUS; + + clear_C1(); + + float32 save_reg = float32_default_nan; /* The masked response */ + + int pop_stack = i->nnn() & 1; + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + + if (! BX_CPU_THIS_PTR the_i387.is_IA_masked()) + return; + } + else + { + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + save_reg = floatx80_to_float32(BX_READ_FPU_REG(0), status); + + if (FPU_exception(status.float_exception_flags, 1)) + return; + } + + // store to the memory might generate an exception, in this case origial FPU_SW must be kept + swap_values16u(x87_sw, FPU_PARTIAL_STATUS); + + write_virtual_dword(i->seg(), RMAddr(i), save_reg); + + FPU_PARTIAL_STATUS = x87_sw; + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FST_DOUBLE_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + FPU_update_last_instruction(i); + + Bit16u x87_sw = FPU_PARTIAL_STATUS; + + clear_C1(); + + float64 save_reg = float64_default_nan; /* The masked response */ + + int pop_stack = i->nnn() & 1; + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + + if (! BX_CPU_THIS_PTR the_i387.is_IA_masked()) + return; + } + else + { + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + save_reg = floatx80_to_float64(BX_READ_FPU_REG(0), status); + + if (FPU_exception(status.float_exception_flags, 1)) + return; + } + + // store to the memory might generate an exception, in this case origial FPU_SW must be kept + swap_values16u(x87_sw, FPU_PARTIAL_STATUS); + + write_virtual_qword(i->seg(), RMAddr(i), save_reg); + + FPU_PARTIAL_STATUS = x87_sw; + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); +} + +/* DB /7 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FSTP_EXTENDED_REAL(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + FPU_update_last_instruction(i); + + clear_C1(); + + floatx80 save_reg = floatx80_default_nan; /* The masked response */ + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + + if (! BX_CPU_THIS_PTR the_i387.is_IA_masked()) + return; + } + else + { + save_reg = BX_READ_FPU_REG(0); + } + + write_virtual_qword(i->seg(), RMAddr(i), save_reg.fraction); + write_virtual_word(i->seg(), (RMAddr(i) + 8) & i->asize_mask(), save_reg.exp); + + BX_CPU_THIS_PTR the_i387.FPU_pop(); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FIST_WORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + FPU_update_last_instruction(i); + + Bit16u x87_sw = FPU_PARTIAL_STATUS; + + Bit16s save_reg = int16_indefinite; + + int pop_stack = i->nnn() & 1; + + clear_C1(); + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + + if (! BX_CPU_THIS_PTR the_i387.is_IA_masked()) + return; + } + else + { + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + save_reg = floatx80_to_int16(BX_READ_FPU_REG(0), status); + + if (FPU_exception(status.float_exception_flags, 1)) + return; + } + + // store to the memory might generate an exception, in this case origial FPU_SW must be kept + swap_values16u(x87_sw, FPU_PARTIAL_STATUS); + + write_virtual_word(i->seg(), RMAddr(i), (Bit16u)(save_reg)); + + FPU_PARTIAL_STATUS = x87_sw; + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FIST_DWORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + FPU_update_last_instruction(i); + + Bit16u x87_sw = FPU_PARTIAL_STATUS; + + Bit32s save_reg = int32_indefinite; /* The masked response */ + + int pop_stack = i->nnn() & 1; + + clear_C1(); + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + + if (! BX_CPU_THIS_PTR the_i387.is_IA_masked()) + return; + } + else + { + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + save_reg = floatx80_to_int32(BX_READ_FPU_REG(0), status); + + if (FPU_exception(status.float_exception_flags, 1)) + return; + } + + // store to the memory might generate an exception, in this case origial FPU_SW must be kept + swap_values16u(x87_sw, FPU_PARTIAL_STATUS); + + write_virtual_dword(i->seg(), RMAddr(i), (Bit32u)(save_reg)); + + FPU_PARTIAL_STATUS = x87_sw; + if (pop_stack) + BX_CPU_THIS_PTR the_i387.FPU_pop(); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FISTP_QWORD_INTEGER(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + FPU_update_last_instruction(i); + + Bit16u x87_sw = FPU_PARTIAL_STATUS; + + Bit64s save_reg = int64_indefinite; /* The masked response */ + + clear_C1(); + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + + if (! BX_CPU_THIS_PTR the_i387.is_IA_masked()) + return; + } + else + { + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + save_reg = floatx80_to_int64(BX_READ_FPU_REG(0), status); + + if (FPU_exception(status.float_exception_flags, 1)) + return; + } + + // store to the memory might generate an exception, in this case origial FPU_SW must be kept + swap_values16u(x87_sw, FPU_PARTIAL_STATUS); + + write_virtual_qword(i->seg(), RMAddr(i), (Bit64u)(save_reg)); + + FPU_PARTIAL_STATUS = x87_sw; + + BX_CPU_THIS_PTR the_i387.FPU_pop(); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FBSTP_PACKED_BCD(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + FPU_update_last_instruction(i); + + Bit16u x87_sw = FPU_PARTIAL_STATUS; + + /* + * The packed BCD integer indefinite encoding (FFFFC000000000000000H) + * is stored in response to a masked floating-point invalid-operation + * exception. + */ + Bit16u save_reg_hi = 0xFFFF; + Bit64u save_reg_lo = BX_CONST64(0xC000000000000000); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + + if (! BX_CPU_THIS_PTR the_i387.is_IA_masked()) + return; + } + else + { + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 reg = BX_READ_FPU_REG(0); + + Bit64s save_val = floatx80_to_int64(reg, status); + + int sign = (reg.exp & 0x8000) != 0; + if (sign) + save_val = -save_val; + + if (save_val > BX_CONST64(999999999999999999)) { + status.float_exception_flags = float_flag_invalid; // throw away other flags + } + + if (! (status.float_exception_flags & float_flag_invalid)) + { + save_reg_hi = (sign) ? 0x8000 : 0; + save_reg_lo = 0; + + for (int i=0; i<16; i++) { + save_reg_lo += ((Bit64u)(save_val % 10)) << (4*i); + save_val /= 10; + } + + save_reg_hi += (Bit16u)(save_val % 10); + save_val /= 10; + save_reg_hi += (Bit16u)(save_val % 10) << 4; + } + + /* check for fpu arithmetic exceptions */ + if (FPU_exception(status.float_exception_flags, 1)) + return; + } + + // store to the memory might generate an exception, in this case origial FPU_SW must be kept + swap_values16u(x87_sw, FPU_PARTIAL_STATUS); + + // write packed bcd to memory + write_virtual_qword(i->seg(), RMAddr(i), save_reg_lo); + write_virtual_word(i->seg(), (RMAddr(i) + 8) & i->asize_mask(), save_reg_hi); + + FPU_PARTIAL_STATUS = x87_sw; + + BX_CPU_THIS_PTR the_i387.FPU_pop(); +} + +/* DF /1 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FISTTP16(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + FPU_update_last_instruction(i); + + Bit16u x87_sw = FPU_PARTIAL_STATUS; + + Bit16s save_reg = int16_indefinite; /* The masked response */ + + clear_C1(); + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + + if (! BX_CPU_THIS_PTR the_i387.is_IA_masked()) + return; + } + else + { + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + save_reg = floatx80_to_int16_round_to_zero(BX_READ_FPU_REG(0), status); + + if (FPU_exception(status.float_exception_flags, 1)) + return; + } + + // store to the memory might generate an exception, in this case origial FPU_SW must be kept + swap_values16u(x87_sw, FPU_PARTIAL_STATUS); + + write_virtual_word(i->seg(), RMAddr(i), (Bit16u)(save_reg)); + + FPU_PARTIAL_STATUS = x87_sw; + + BX_CPU_THIS_PTR the_i387.FPU_pop(); +} + +/* DB /1 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FISTTP32(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + FPU_update_last_instruction(i); + + Bit16u x87_sw = FPU_PARTIAL_STATUS; + + Bit32s save_reg = int32_indefinite; /* The masked response */ + + clear_C1(); + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + + if (! BX_CPU_THIS_PTR the_i387.is_IA_masked()) + return; + } + else + { + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + save_reg = floatx80_to_int32_round_to_zero(BX_READ_FPU_REG(0), status); + + if (FPU_exception(status.float_exception_flags, 1)) + return; + } + + // store to the memory might generate an exception, in this case origial FPU_SW must be kept + swap_values16u(x87_sw, FPU_PARTIAL_STATUS); + + write_virtual_dword(i->seg(), RMAddr(i), (Bit32u)(save_reg)); + + FPU_PARTIAL_STATUS = x87_sw; + + BX_CPU_THIS_PTR the_i387.FPU_pop(); +} + +/* DD /1 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FISTTP64(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + + RMAddr(i) = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); + + FPU_update_last_instruction(i); + + Bit16u x87_sw = FPU_PARTIAL_STATUS; + + Bit64s save_reg = int64_indefinite; /* The masked response */ + + clear_C1(); + + if (IS_TAG_EMPTY(0)) + { + FPU_exception(FPU_EX_Stack_Underflow); + + if (! BX_CPU_THIS_PTR the_i387.is_IA_masked()) + return; + } + else + { + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + save_reg = floatx80_to_int64_round_to_zero(BX_READ_FPU_REG(0), status); + + if (FPU_exception(status.float_exception_flags, 1)) + return; + } + + // store to the memory might generate an exception, in this case origial FPU_SW must be kept + swap_values16u(x87_sw, FPU_PARTIAL_STATUS); + + write_virtual_qword(i->seg(), RMAddr(i), (Bit64u)(save_reg)); + + FPU_PARTIAL_STATUS = x87_sw; + + BX_CPU_THIS_PTR the_i387.FPU_pop(); +} + +#endif diff --git a/bochs/fpu/fpu_misc.cc b/bochs/fpu/fpu_misc.cc new file mode 100755 index 00000000..1dac186c --- /dev/null +++ b/bochs/fpu/fpu_misc.cc @@ -0,0 +1,151 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2003-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#define NEED_CPU_REG_SHORTCUTS 1 +#include "bochs.h" +#include "cpu/cpu.h" +#define LOG_THIS BX_CPU_THIS_PTR + +#if BX_SUPPORT_FPU + +#include "softfloatx80.h" + +/* D9 C8 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FXCH_STi(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + int st0_tag = BX_CPU_THIS_PTR the_i387.FPU_gettagi(0); + int sti_tag = BX_CPU_THIS_PTR the_i387.FPU_gettagi(i->rm()); + + floatx80 st0_reg = BX_READ_FPU_REG(0); + floatx80 sti_reg = BX_READ_FPU_REG(i->rm()); + + clear_C1(); + + if (st0_tag == FPU_Tag_Empty || sti_tag == FPU_Tag_Empty) + { + FPU_exception(FPU_EX_Stack_Underflow); + + if(BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + /* Masked response */ + if (st0_tag == FPU_Tag_Empty) + st0_reg = floatx80_default_nan; + + if (sti_tag == FPU_Tag_Empty) + sti_reg = floatx80_default_nan; + } + else { + return; + } + } + + BX_WRITE_FPU_REG(st0_reg, i->rm()); + BX_WRITE_FPU_REG(sti_reg, 0); +} + +/* D9 E0 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FCHS(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + } + else { + clear_C1(); + floatx80 st0_reg = BX_READ_FPU_REG(0); + BX_WRITE_FPU_REG(floatx80_chs(st0_reg), 0); + } +} + +/* D9 E1 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FABS(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + } + else { + clear_C1(); + floatx80 st0_reg = BX_READ_FPU_REG(0); + BX_WRITE_FPU_REG(floatx80_abs(st0_reg), 0); + } +} + +/* D9 F6 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FDECSTP(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + BX_CPU_THIS_PTR the_i387.tos = (BX_CPU_THIS_PTR the_i387.tos-1) & 7; +} + +/* D9 F7 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FINCSTP(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + BX_CPU_THIS_PTR the_i387.tos = (BX_CPU_THIS_PTR the_i387.tos+1) & 7; +} + +/* DD C0 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FFREE_STi(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + BX_CPU_THIS_PTR the_i387.FPU_settagi(FPU_Tag_Empty, i->rm()); +} + +/* + * Free the st(0) register and pop it from the FPU stack. + * "Undocumented" by Intel & AMD but mentioned in AMDs Athlon Docs. + */ + +/* DF C0 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FFREEP_STi(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + BX_CPU_THIS_PTR the_i387.FPU_settagi(FPU_Tag_Empty, i->rm()); + BX_CPU_THIS_PTR the_i387.FPU_pop(); +} + +#endif diff --git a/bochs/fpu/fpu_tags.cc b/bochs/fpu/fpu_tags.cc new file mode 100644 index 00000000..046561e9 --- /dev/null +++ b/bochs/fpu/fpu_tags.cc @@ -0,0 +1,66 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2003-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#include "config.h" + +#if BX_SUPPORT_FPU + +#include "softfloat.h" +#include "softfloat-specialize.h" + +/* ----------------------------------------------------------- + * Slimmed down version used to compile against a CPU simulator + * rather than a kernel (ported by Kevin Lawton) + * ------------------------------------------------------------ */ + +#include + +int FPU_tagof(const floatx80 ®) +{ + Bit32s exp = floatx80_exp(reg); + if (exp == 0) + { + if (! floatx80_fraction(reg)) + return FPU_Tag_Zero; + + /* The number is a de-normal or pseudodenormal. */ + return FPU_Tag_Special; + } + + if (exp == 0x7fff) + { + /* Is an Infinity, a NaN, or an unsupported data type. */ + return FPU_Tag_Special; + } + + if (!(reg.fraction & BX_CONST64(0x8000000000000000))) + { + /* Unsupported data type. */ + /* Valid numbers have the ms bit set to 1. */ + return FPU_Tag_Special; + } + + return FPU_Tag_Valid; +} + +#endif diff --git a/bochs/fpu/fpu_trans.cc b/bochs/fpu/fpu_trans.cc new file mode 100755 index 00000000..95c1fccd --- /dev/null +++ b/bochs/fpu/fpu_trans.cc @@ -0,0 +1,436 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2003-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#define NEED_CPU_REG_SHORTCUTS 1 +#include "bochs.h" +#include "cpu/cpu.h" +#define LOG_THIS BX_CPU_THIS_PTR + +#if BX_SUPPORT_FPU + +#include "softfloatx80.h" +#include "softfloat-specialize.h" + +extern float_status_t FPU_pre_exception_handling(Bit16u control_word); + +/* D9 F0 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::F2XM1(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word() | FPU_PR_80_BITS); + + floatx80 result = f2xm1(BX_READ_FPU_REG(0), status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +/* D9 F1 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FYL2X(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(1)) + { + FPU_stack_underflow(1, 1 /* pop_stack */); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word() | FPU_PR_80_BITS); + + floatx80 result = fyl2x(BX_READ_FPU_REG(0), BX_READ_FPU_REG(1), status); + + if (! FPU_exception(status.float_exception_flags)) { + BX_CPU_THIS_PTR the_i387.FPU_pop(); + BX_WRITE_FPU_REG(result, 0); + } +} + +/* D9 F2 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FPTAN(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + clear_C2(); + + if (IS_TAG_EMPTY(0) || ! IS_TAG_EMPTY(-1)) + { + if(IS_TAG_EMPTY(0)) + FPU_exception(FPU_EX_Stack_Underflow); + else + FPU_exception(FPU_EX_Stack_Overflow); + + /* The masked response */ + if (BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + BX_WRITE_FPU_REG(floatx80_default_nan, 0); + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(floatx80_default_nan, 0); + } + + return; + } + + extern const floatx80 Const_1; + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word() | FPU_PR_80_BITS); + + floatx80 y = BX_READ_FPU_REG(0); + if (ftan(y, status) == -1) + { + FPU_PARTIAL_STATUS |= FPU_SW_C2; + return; + } + + if (floatx80_is_nan(y)) + { + if (! FPU_exception(status.float_exception_flags)) + { + BX_WRITE_FPU_REG(y, 0); + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(y, 0); + } + + return; + } + + if (! FPU_exception(status.float_exception_flags)) { + BX_WRITE_FPU_REG(y, 0); + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(Const_1, 0); + } +} + +/* D9 F3 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FPATAN(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(1)) + { + FPU_stack_underflow(1, 1 /* pop_stack */); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word() | FPU_PR_80_BITS); + + floatx80 result = fpatan(BX_READ_FPU_REG(0), BX_READ_FPU_REG(1), status); + + if (! FPU_exception(status.float_exception_flags)) { + BX_CPU_THIS_PTR the_i387.FPU_pop(); + BX_WRITE_FPU_REG(result, 0); + } +} + +/* D9 F4 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FXTRACT(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0) || ! IS_TAG_EMPTY(-1)) + { + if(IS_TAG_EMPTY(0)) + FPU_exception(FPU_EX_Stack_Underflow); + else + FPU_exception(FPU_EX_Stack_Overflow); + + /* The masked response */ + if (BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + BX_WRITE_FPU_REG(floatx80_default_nan, 0); + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(floatx80_default_nan, 0); + } + + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = floatx80_extract(a, status); + + if (! FPU_exception(status.float_exception_flags)) { + BX_WRITE_FPU_REG(b, 0); // exponent + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(a, 0); // fraction + } +} + +/* D9 F5 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FPREM1(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + clear_C2(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(1)) + { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + Bit64u quotient; + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = BX_READ_FPU_REG(1); + floatx80 result; + + int flags = floatx80_ieee754_remainder(a, b, result, quotient, status); + + if (! FPU_exception(status.float_exception_flags)) { + if (flags >= 0) { + int cc = 0; + if (flags) cc = FPU_SW_C2; + else { + if (quotient & 1) cc |= FPU_SW_C1; + if (quotient & 2) cc |= FPU_SW_C3; + if (quotient & 4) cc |= FPU_SW_C0; + } + setcc(cc); + } + BX_WRITE_FPU_REG(result, 0); + } +} + +/* D9 F8 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FPREM(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + clear_C2(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(1)) + { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + Bit64u quotient; + + floatx80 a = BX_READ_FPU_REG(0); + floatx80 b = BX_READ_FPU_REG(1); + floatx80 result; + + int flags = floatx80_remainder(a, b, result, quotient, status); + + if (! FPU_exception(status.float_exception_flags)) { + if (flags >= 0) { + int cc = 0; + if (flags) cc = FPU_SW_C2; + else { + if (quotient & 1) cc |= FPU_SW_C1; + if (quotient & 2) cc |= FPU_SW_C3; + if (quotient & 4) cc |= FPU_SW_C0; + } + setcc(cc); + } + BX_WRITE_FPU_REG(result, 0); + } +} + +/* D9 F9 */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FYL2XP1(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(1)) + { + FPU_stack_underflow(1, 1 /* pop_stack */); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word() | FPU_PR_80_BITS); + + floatx80 result = fyl2xp1(BX_READ_FPU_REG(0), BX_READ_FPU_REG(1), status); + + if (! FPU_exception(status.float_exception_flags)) { + BX_CPU_THIS_PTR the_i387.FPU_pop(); + BX_WRITE_FPU_REG(result, 0); + } +} + +/* D9 FB */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FSINCOS(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + clear_C2(); + + if (IS_TAG_EMPTY(0) || ! IS_TAG_EMPTY(-1)) + { + if(IS_TAG_EMPTY(0)) + FPU_exception(FPU_EX_Stack_Underflow); + else + FPU_exception(FPU_EX_Stack_Overflow); + + /* The masked response */ + if (BX_CPU_THIS_PTR the_i387.is_IA_masked()) + { + BX_WRITE_FPU_REG(floatx80_default_nan, 0); + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(floatx80_default_nan, 0); + } + + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word() | FPU_PR_80_BITS); + + floatx80 y = BX_READ_FPU_REG(0); + floatx80 sin_y, cos_y; + if (fsincos(y, &sin_y, &cos_y, status) == -1) + { + FPU_PARTIAL_STATUS |= FPU_SW_C2; + return; + } + + if (! FPU_exception(status.float_exception_flags)) { + BX_WRITE_FPU_REG(sin_y, 0); + BX_CPU_THIS_PTR the_i387.FPU_push(); + BX_WRITE_FPU_REG(cos_y, 0); + } +} + +/* D9 FD */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FSCALE(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + + if (IS_TAG_EMPTY(0) || IS_TAG_EMPTY(1)) + { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word()); + + floatx80 result = floatx80_scale(BX_READ_FPU_REG(0), BX_READ_FPU_REG(1), status); + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(result, 0); +} + +/* D9 FE */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FSIN(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + clear_C2(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word() | FPU_PR_80_BITS); + + floatx80 y = BX_READ_FPU_REG(0); + if (fsin(y, status) == -1) + { + FPU_PARTIAL_STATUS |= FPU_SW_C2; + return; + } + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(y, 0); +} + +/* D9 FF */ +void BX_CPP_AttrRegparmN(1) BX_CPU_C::FCOS(bxInstruction_c *i) +{ + BX_CPU_THIS_PTR prepareFPU(i); + BX_CPU_THIS_PTR FPU_update_last_instruction(i); + + clear_C1(); + clear_C2(); + + if (IS_TAG_EMPTY(0)) { + FPU_stack_underflow(0); + return; + } + + float_status_t status = + FPU_pre_exception_handling(BX_CPU_THIS_PTR the_i387.get_control_word() | FPU_PR_80_BITS); + + floatx80 y = BX_READ_FPU_REG(0); + if (fcos(y, status) == -1) + { + FPU_PARTIAL_STATUS |= FPU_SW_C2; + return; + } + + if (! FPU_exception(status.float_exception_flags)) + BX_WRITE_FPU_REG(y, 0); +} + +#endif diff --git a/bochs/fpu/fsincos.cc b/bochs/fpu/fsincos.cc new file mode 100755 index 00000000..089ed402 --- /dev/null +++ b/bochs/fpu/fsincos.cc @@ -0,0 +1,431 @@ +/*============================================================================ +This source file is an extension to the SoftFloat IEC/IEEE Floating-point +Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) +floating point emulation. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +/*============================================================================ + * Written for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#define FLOAT128 + +#define USE_estimateDiv128To64 +#include "softfloatx80.h" +#include "softfloat-round-pack.h" +#include "fpu_constant.h" + +static const floatx80 floatx80_one = packFloatx80(0, 0x3fff, BX_CONST64(0x8000000000000000)); + +/* reduce trigonometric function argument using 128-bit precision + M_PI approximation */ +static Bit64u argument_reduction_kernel(Bit64u aSig0, int Exp, Bit64u *zSig0, Bit64u *zSig1) +{ + Bit64u term0, term1, term2; + Bit64u aSig1 = 0; + + shortShift128Left(aSig1, aSig0, Exp, &aSig1, &aSig0); + Bit64u q = estimateDiv128To64(aSig1, aSig0, FLOAT_PI_HI); + mul128By64To192(FLOAT_PI_HI, FLOAT_PI_LO, q, &term0, &term1, &term2); + sub128(aSig1, aSig0, term0, term1, zSig1, zSig0); + while ((Bit64s)(*zSig1) < 0) { + --q; + add192(*zSig1, *zSig0, term2, 0, FLOAT_PI_HI, FLOAT_PI_LO, zSig1, zSig0, &term2); + } + *zSig1 = term2; + return q; +} + +static int reduce_trig_arg(int expDiff, int &zSign, Bit64u &aSig0, Bit64u &aSig1) +{ + Bit64u term0, term1, q = 0; + + if (expDiff < 0) { + shift128Right(aSig0, 0, 1, &aSig0, &aSig1); + expDiff = 0; + } + if (expDiff > 0) { + q = argument_reduction_kernel(aSig0, expDiff, &aSig0, &aSig1); + } + else { + if (FLOAT_PI_HI <= aSig0) { + aSig0 -= FLOAT_PI_HI; + q = 1; + } + } + + shift128Right(FLOAT_PI_HI, FLOAT_PI_LO, 1, &term0, &term1); + if (! lt128(aSig0, aSig1, term0, term1)) + { + int lt = lt128(term0, term1, aSig0, aSig1); + int eq = eq128(aSig0, aSig1, term0, term1); + + if ((eq && (q & 1)) || lt) { + zSign = !zSign; + ++q; + } + if (lt) sub128(FLOAT_PI_HI, FLOAT_PI_LO, aSig0, aSig1, &aSig0, &aSig1); + } + + return (int)(q & 3); +} + +#define SIN_ARR_SIZE 11 +#define COS_ARR_SIZE 11 + +static float128 sin_arr[SIN_ARR_SIZE] = +{ + PACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /* 1 */ + PACK_FLOAT_128(0xbffc555555555555, 0x5555555555555555), /* 3 */ + PACK_FLOAT_128(0x3ff8111111111111, 0x1111111111111111), /* 5 */ + PACK_FLOAT_128(0xbff2a01a01a01a01, 0xa01a01a01a01a01a), /* 7 */ + PACK_FLOAT_128(0x3fec71de3a556c73, 0x38faac1c88e50017), /* 9 */ + PACK_FLOAT_128(0xbfe5ae64567f544e, 0x38fe747e4b837dc7), /* 11 */ + PACK_FLOAT_128(0x3fde6124613a86d0, 0x97ca38331d23af68), /* 13 */ + PACK_FLOAT_128(0xbfd6ae7f3e733b81, 0xf11d8656b0ee8cb0), /* 15 */ + PACK_FLOAT_128(0x3fce952c77030ad4, 0xa6b2605197771b00), /* 17 */ + PACK_FLOAT_128(0xbfc62f49b4681415, 0x724ca1ec3b7b9675), /* 19 */ + PACK_FLOAT_128(0x3fbd71b8ef6dcf57, 0x18bef146fcee6e45) /* 21 */ +}; + +static float128 cos_arr[COS_ARR_SIZE] = +{ + PACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /* 0 */ + PACK_FLOAT_128(0xbffe000000000000, 0x0000000000000000), /* 2 */ + PACK_FLOAT_128(0x3ffa555555555555, 0x5555555555555555), /* 4 */ + PACK_FLOAT_128(0xbff56c16c16c16c1, 0x6c16c16c16c16c17), /* 6 */ + PACK_FLOAT_128(0x3fefa01a01a01a01, 0xa01a01a01a01a01a), /* 8 */ + PACK_FLOAT_128(0xbfe927e4fb7789f5, 0xc72ef016d3ea6679), /* 10 */ + PACK_FLOAT_128(0x3fe21eed8eff8d89, 0x7b544da987acfe85), /* 12 */ + PACK_FLOAT_128(0xbfda93974a8c07c9, 0xd20badf145dfa3e5), /* 14 */ + PACK_FLOAT_128(0x3fd2ae7f3e733b81, 0xf11d8656b0ee8cb0), /* 16 */ + PACK_FLOAT_128(0xbfca6827863b97d9, 0x77bb004886a2c2ab), /* 18 */ + PACK_FLOAT_128(0x3fc1e542ba402022, 0x507a9cad2bf8f0bb) /* 20 */ +}; + +extern float128 OddPoly (float128 x, float128 *arr, unsigned n, float_status_t &status); + +/* 0 <= x <= pi/4 */ +BX_CPP_INLINE float128 poly_sin(float128 x, float_status_t &status) +{ + // 3 5 7 9 11 13 15 + // x x x x x x x + // sin (x) ~ x - --- + --- - --- + --- - ---- + ---- - ---- = + // 3! 5! 7! 9! 11! 13! 15! + // + // 2 4 6 8 10 12 14 + // x x x x x x x + // = x * [ 1 - --- + --- - --- + --- - ---- + ---- - ---- ] = + // 3! 5! 7! 9! 11! 13! 15! + // + // 3 3 + // -- 4k -- 4k+2 + // p(x) = > C * x > 0 q(x) = > C * x < 0 + // -- 2k -- 2k+1 + // k=0 k=0 + // + // 2 + // sin(x) ~ x * [ p(x) + x * q(x) ] + // + + return OddPoly(x, sin_arr, SIN_ARR_SIZE, status); +} + +extern float128 EvenPoly(float128 x, float128 *arr, unsigned n, float_status_t &status); + +/* 0 <= x <= pi/4 */ +BX_CPP_INLINE float128 poly_cos(float128 x, float_status_t &status) +{ + // 2 4 6 8 10 12 14 + // x x x x x x x + // cos (x) ~ 1 - --- + --- - --- + --- - ---- + ---- - ---- + // 2! 4! 6! 8! 10! 12! 14! + // + // 3 3 + // -- 4k -- 4k+2 + // p(x) = > C * x > 0 q(x) = > C * x < 0 + // -- 2k -- 2k+1 + // k=0 k=0 + // + // 2 + // cos(x) ~ [ p(x) + x * q(x) ] + // + + return EvenPoly(x, cos_arr, COS_ARR_SIZE, status); +} + +BX_CPP_INLINE void sincos_invalid(floatx80 *sin_a, floatx80 *cos_a, floatx80 a) +{ + if (sin_a) *sin_a = a; + if (cos_a) *cos_a = a; +} + +BX_CPP_INLINE void sincos_tiny_argument(floatx80 *sin_a, floatx80 *cos_a, floatx80 a) +{ + if (sin_a) *sin_a = a; + if (cos_a) *cos_a = floatx80_one; +} + +static floatx80 sincos_approximation(int neg, float128 r, Bit64u quotient, float_status_t &status) +{ + if (quotient & 0x1) { + r = poly_cos(r, status); + neg = 0; + } else { + r = poly_sin(r, status); + } + + floatx80 result = float128_to_floatx80(r, status); + if (quotient & 0x2) + neg = ! neg; + + if (neg) + floatx80_chs(result); + + return result; +} + +// ================================================= +// FSINCOS Compute sin(x) and cos(x) +// ================================================= + +// +// Uses the following identities: +// ---------------------------------------------------------- +// +// sin(-x) = -sin(x) +// cos(-x) = cos(x) +// +// sin(x+y) = sin(x)*cos(y)+cos(x)*sin(y) +// cos(x+y) = sin(x)*sin(y)+cos(x)*cos(y) +// +// sin(x+ pi/2) = cos(x) +// sin(x+ pi) = -sin(x) +// sin(x+3pi/2) = -cos(x) +// sin(x+2pi) = sin(x) +// + +int fsincos(floatx80 a, floatx80 *sin_a, floatx80 *cos_a, float_status_t &status) +{ + Bit64u aSig0, aSig1 = 0; + Bit32s aExp, zExp, expDiff; + int aSign, zSign; + int q = 0; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a)) { + goto invalid; + } + + aSig0 = extractFloatx80Frac(a); + aExp = extractFloatx80Exp(a); + aSign = extractFloatx80Sign(a); + + /* invalid argument */ + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig0<<1)) { + sincos_invalid(sin_a, cos_a, propagateFloatx80NaN(a, status)); + return 0; + } + + invalid: + float_raise(status, float_flag_invalid); + sincos_invalid(sin_a, cos_a, floatx80_default_nan); + return 0; + } + + if (aExp == 0) { + if (aSig0 == 0) { + sincos_tiny_argument(sin_a, cos_a, a); + return 0; + } + + float_raise(status, float_flag_denormal); + + /* handle pseudo denormals */ + if (! (aSig0 & BX_CONST64(0x8000000000000000))) + { + float_raise(status, float_flag_inexact); + if (sin_a) + float_raise(status, float_flag_underflow); + sincos_tiny_argument(sin_a, cos_a, a); + return 0; + } + + normalizeFloatx80Subnormal(aSig0, &aExp, &aSig0); + } + + zSign = aSign; + zExp = EXP_BIAS; + expDiff = aExp - zExp; + + /* argument is out-of-range */ + if (expDiff >= 63) + return -1; + + float_raise(status, float_flag_inexact); + + if (expDiff < -1) { // doesn't require reduction + if (expDiff <= -68) { + a = packFloatx80(aSign, aExp, aSig0); + sincos_tiny_argument(sin_a, cos_a, a); + return 0; + } + zExp = aExp; + } + else { + q = reduce_trig_arg(expDiff, zSign, aSig0, aSig1); + } + + /* **************************** */ + /* argument reduction completed */ + /* **************************** */ + + /* using float128 for approximation */ + float128 r = normalizeRoundAndPackFloat128(0, zExp-0x10, aSig0, aSig1, status); + + if (aSign) q = -q; + if (sin_a) *sin_a = sincos_approximation(zSign, r, q, status); + if (cos_a) *cos_a = sincos_approximation(zSign, r, q+1, status); + + return 0; +} + +int fsin(floatx80 &a, float_status_t &status) +{ + return fsincos(a, &a, 0, status); +} + +int fcos(floatx80 &a, float_status_t &status) +{ + return fsincos(a, 0, &a, status); +} + +// ================================================= +// FPTAN Compute tan(x) +// ================================================= + +// +// Uses the following identities: +// +// 1. ---------------------------------------------------------- +// +// sin(-x) = -sin(x) +// cos(-x) = cos(x) +// +// sin(x+y) = sin(x)*cos(y)+cos(x)*sin(y) +// cos(x+y) = sin(x)*sin(y)+cos(x)*cos(y) +// +// sin(x+ pi/2) = cos(x) +// sin(x+ pi) = -sin(x) +// sin(x+3pi/2) = -cos(x) +// sin(x+2pi) = sin(x) +// +// 2. ---------------------------------------------------------- +// +// sin(x) +// tan(x) = ------ +// cos(x) +// + +int ftan(floatx80 &a, float_status_t &status) +{ + Bit64u aSig0, aSig1 = 0; + Bit32s aExp, zExp, expDiff; + int aSign, zSign; + int q = 0; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a)) { + goto invalid; + } + + aSig0 = extractFloatx80Frac(a); + aExp = extractFloatx80Exp(a); + aSign = extractFloatx80Sign(a); + + /* invalid argument */ + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig0<<1)) + { + a = propagateFloatx80NaN(a, status); + return 0; + } + + invalid: + float_raise(status, float_flag_invalid); + a = floatx80_default_nan; + return 0; + } + + if (aExp == 0) { + if (aSig0 == 0) return 0; + float_raise(status, float_flag_denormal); + /* handle pseudo denormals */ + if (! (aSig0 & BX_CONST64(0x8000000000000000))) + { + float_raise(status, float_flag_inexact | float_flag_underflow); + return 0; + } + normalizeFloatx80Subnormal(aSig0, &aExp, &aSig0); + } + + zSign = aSign; + zExp = EXP_BIAS; + expDiff = aExp - zExp; + + /* argument is out-of-range */ + if (expDiff >= 63) + return -1; + + float_raise(status, float_flag_inexact); + + if (expDiff < -1) { // doesn't require reduction + if (expDiff <= -68) { + a = packFloatx80(aSign, aExp, aSig0); + return 0; + } + zExp = aExp; + } + else { + q = reduce_trig_arg(expDiff, zSign, aSig0, aSig1); + } + + /* **************************** */ + /* argument reduction completed */ + /* **************************** */ + + /* using float128 for approximation */ + float128 r = normalizeRoundAndPackFloat128(0, zExp-0x10, aSig0, aSig1, status); + + float128 sin_r = poly_sin(r, status); + float128 cos_r = poly_cos(r, status); + + if (q & 0x1) { + r = float128_div(cos_r, sin_r, status); + zSign = ! zSign; + } else { + r = float128_div(sin_r, cos_r, status); + } + + a = float128_to_floatx80(r, status); + if (zSign) + floatx80_chs(a); + + return 0; +} diff --git a/bochs/fpu/fyl2x.cc b/bochs/fpu/fyl2x.cc new file mode 100755 index 00000000..d24c2114 --- /dev/null +++ b/bochs/fpu/fyl2x.cc @@ -0,0 +1,353 @@ +/*============================================================================ +This source file is an extension to the SoftFloat IEC/IEEE Floating-point +Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) +floating point emulation. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +/*============================================================================ + * Written for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#define FLOAT128 + +#include "softfloatx80.h" +#include "softfloat-round-pack.h" +#include "fpu_constant.h" + +static const floatx80 floatx80_one = + packFloatx80(0, 0x3fff, BX_CONST64(0x8000000000000000)); + +static const float128 float128_one = + packFloat128(BX_CONST64(0x3fff000000000000), BX_CONST64(0x0000000000000000)); +static const float128 float128_two = + packFloat128(BX_CONST64(0x4000000000000000), BX_CONST64(0x0000000000000000)); + +static const float128 float128_ln2inv2 = + packFloat128(BX_CONST64(0x400071547652b82f), BX_CONST64(0xe1777d0ffda0d23a)); + +#define SQRT2_HALF_SIG BX_CONST64(0xb504f333f9de6484) + +extern float128 OddPoly(float128 x, float128 *arr, unsigned n, float_status_t &status); + +#define L2_ARR_SIZE 9 + +static float128 ln_arr[L2_ARR_SIZE] = +{ + PACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /* 1 */ + PACK_FLOAT_128(0x3ffd555555555555, 0x5555555555555555), /* 3 */ + PACK_FLOAT_128(0x3ffc999999999999, 0x999999999999999a), /* 5 */ + PACK_FLOAT_128(0x3ffc249249249249, 0x2492492492492492), /* 7 */ + PACK_FLOAT_128(0x3ffbc71c71c71c71, 0xc71c71c71c71c71c), /* 9 */ + PACK_FLOAT_128(0x3ffb745d1745d174, 0x5d1745d1745d1746), /* 11 */ + PACK_FLOAT_128(0x3ffb3b13b13b13b1, 0x3b13b13b13b13b14), /* 13 */ + PACK_FLOAT_128(0x3ffb111111111111, 0x1111111111111111), /* 15 */ + PACK_FLOAT_128(0x3ffae1e1e1e1e1e1, 0xe1e1e1e1e1e1e1e2) /* 17 */ +}; + +static float128 poly_ln(float128 x1, float_status_t &status) +{ +/* + // + // 3 5 7 9 11 13 15 + // 1+u u u u u u u u + // 1/2 ln --- ~ u + --- + --- + --- + --- + ---- + ---- + ---- = + // 1-u 3 5 7 9 11 13 15 + // + // 2 4 6 8 10 12 14 + // u u u u u u u + // = u * [ 1 + --- + --- + --- + --- + ---- + ---- + ---- ] = + // 3 5 7 9 11 13 15 + // + // 3 3 + // -- 4k -- 4k+2 + // p(u) = > C * u q(u) = > C * u + // -- 2k -- 2k+1 + // k=0 k=0 + // + // 1+u 2 + // 1/2 ln --- ~ u * [ p(u) + u * q(u) ] + // 1-u + // +*/ + return OddPoly(x1, ln_arr, L2_ARR_SIZE, status); +} + +/* required sqrt(2)/2 < x < sqrt(2) */ +static float128 poly_l2(float128 x, float_status_t &status) +{ + /* using float128 for approximation */ + float128 x_p1 = float128_add(x, float128_one, status); + float128 x_m1 = float128_sub(x, float128_one, status); + x = float128_div(x_m1, x_p1, status); + x = poly_ln(x, status); + x = float128_mul(x, float128_ln2inv2, status); + return x; +} + +static float128 poly_l2p1(float128 x, float_status_t &status) +{ + /* using float128 for approximation */ + float128 x_p2 = float128_add(x, float128_two, status); + x = float128_div(x, x_p2, status); + x = poly_ln(x, status); + x = float128_mul(x, float128_ln2inv2, status); + return x; +} + +// ================================================= +// FYL2X Compute y * log (x) +// 2 +// ================================================= + +// +// Uses the following identities: +// +// 1. ---------------------------------------------------------- +// ln(x) +// log (x) = -------, ln (x*y) = ln(x) + ln(y) +// 2 ln(2) +// +// 2. ---------------------------------------------------------- +// 1+u x-1 +// ln (x) = ln -----, when u = ----- +// 1-u x+1 +// +// 3. ---------------------------------------------------------- +// 3 5 7 2n+1 +// 1+u u u u u +// ln ----- = 2 [ u + --- + --- + --- + ... + ------ + ... ] +// 1-u 3 5 7 2n+1 +// + +floatx80 fyl2x(floatx80 a, floatx80 b, float_status_t &status) +{ + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a) || floatx80_is_unsupported(b)) { +invalid: + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + + Bit64u aSig = extractFloatx80Frac(a); + Bit32s aExp = extractFloatx80Exp(a); + int aSign = extractFloatx80Sign(a); + Bit64u bSig = extractFloatx80Frac(b); + Bit32s bExp = extractFloatx80Exp(b); + int bSign = extractFloatx80Sign(b); + + int zSign = bSign ^ 1; + + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig<<1) + || ((bExp == 0x7FFF) && (Bit64u) (bSig<<1))) + { + return propagateFloatx80NaN(a, b, status); + } + if (aSign) goto invalid; + else { + if (bExp == 0) { + if (bSig == 0) goto invalid; + float_raise(status, float_flag_denormal); + } + return packFloatx80(bSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + } + if (bExp == 0x7FFF) + { + if ((Bit64u) (bSig<<1)) return propagateFloatx80NaN(a, b, status); + if (aSign && (Bit64u)(aExp | aSig)) goto invalid; + if (aSig && (aExp == 0)) + float_raise(status, float_flag_denormal); + if (aExp < 0x3FFF) { + return packFloatx80(zSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (aExp == 0x3FFF && ((Bit64u) (aSig<<1) == 0)) goto invalid; + return packFloatx80(bSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (aExp == 0) { + if (aSig == 0) { + if ((bExp | bSig) == 0) goto invalid; + float_raise(status, float_flag_divbyzero); + return packFloatx80(zSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (aSign) goto invalid; + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(aSig, &aExp, &aSig); + } + if (aSign) goto invalid; + if (bExp == 0) { + if (bSig == 0) { + if (aExp < 0x3FFF) return packFloatx80(zSign, 0, 0); + return packFloatx80(bSign, 0, 0); + } + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(bSig, &bExp, &bSig); + } + if (aExp == 0x3FFF && ((Bit64u) (aSig<<1) == 0)) + return packFloatx80(bSign, 0, 0); + + float_raise(status, float_flag_inexact); + + int ExpDiff = aExp - 0x3FFF; + aExp = 0; + if (aSig >= SQRT2_HALF_SIG) { + ExpDiff++; + aExp--; + } + + /* ******************************** */ + /* using float128 for approximation */ + /* ******************************** */ + + Bit64u zSig0, zSig1; + shift128Right(aSig<<1, 0, 16, &zSig0, &zSig1); + float128 x = packFloat128(0, aExp+0x3FFF, zSig0, zSig1); + x = poly_l2(x, status); + x = float128_add(x, int64_to_float128((Bit64s) ExpDiff), status); + return floatx80_mul(b, x, status); +} + +// ================================================= +// FYL2XP1 Compute y * log (x + 1) +// 2 +// ================================================= + +// +// Uses the following identities: +// +// 1. ---------------------------------------------------------- +// ln(x) +// log (x) = ------- +// 2 ln(2) +// +// 2. ---------------------------------------------------------- +// 1+u x +// ln (x+1) = ln -----, when u = ----- +// 1-u x+2 +// +// 3. ---------------------------------------------------------- +// 3 5 7 2n+1 +// 1+u u u u u +// ln ----- = 2 [ u + --- + --- + --- + ... + ------ + ... ] +// 1-u 3 5 7 2n+1 +// + +floatx80 fyl2xp1(floatx80 a, floatx80 b, float_status_t &status) +{ + Bit32s aExp, bExp; + Bit64u aSig, bSig, zSig0, zSig1, zSig2; + int aSign, bSign; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a) || floatx80_is_unsupported(b)) { +invalid: + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + + aSig = extractFloatx80Frac(a); + aExp = extractFloatx80Exp(a); + aSign = extractFloatx80Sign(a); + bSig = extractFloatx80Frac(b); + bExp = extractFloatx80Exp(b); + bSign = extractFloatx80Sign(b); + int zSign = aSign ^ bSign; + + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig<<1) + || ((bExp == 0x7FFF) && (Bit64u) (bSig<<1))) + { + return propagateFloatx80NaN(a, b, status); + } + if (aSign) goto invalid; + else { + if (bExp == 0) { + if (bSig == 0) goto invalid; + float_raise(status, float_flag_denormal); + } + return packFloatx80(bSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + } + if (bExp == 0x7FFF) + { + if ((Bit64u) (bSig<<1)) + return propagateFloatx80NaN(a, b, status); + + if (aExp == 0) { + if (aSig == 0) goto invalid; + float_raise(status, float_flag_denormal); + } + + return packFloatx80(zSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (aExp == 0) { + if (aSig == 0) { + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return packFloatx80(zSign, 0, 0); + } + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(aSig, &aExp, &aSig); + } + if (bExp == 0) { + if (bSig == 0) return packFloatx80(zSign, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(bSig, &bExp, &bSig); + } + + float_raise(status, float_flag_inexact); + + if (aSign && aExp >= 0x3FFF) + return a; + + if (aExp >= 0x3FFC) // big argument + { + return fyl2x(floatx80_add(a, floatx80_one, status), b, status); + } + + // handle tiny argument + if (aExp < EXP_BIAS-70) + { + // first order approximation, return (a*b)/ln(2) + Bit32s zExp = aExp + FLOAT_LN2INV_EXP - 0x3FFE; + + mul128By64To192(FLOAT_LN2INV_HI, FLOAT_LN2INV_LO, aSig, &zSig0, &zSig1, &zSig2); + if (0 < (Bit64s) zSig0) { + shortShift128Left(zSig0, zSig1, 1, &zSig0, &zSig1); + --zExp; + } + + zExp = zExp + bExp - 0x3FFE; + mul128By64To192(zSig0, zSig1, bSig, &zSig0, &zSig1, &zSig2); + if (0 < (Bit64s) zSig0) { + shortShift128Left(zSig0, zSig1, 1, &zSig0, &zSig1); + --zExp; + } + + return + roundAndPackFloatx80(80, aSign ^ bSign, zExp, zSig0, zSig1, status); + } + + /* ******************************** */ + /* using float128 for approximation */ + /* ******************************** */ + + shift128Right(aSig<<1, 0, 16, &zSig0, &zSig1); + float128 x = packFloat128(aSign, aExp, zSig0, zSig1); + x = poly_l2p1(x, status); + return floatx80_mul(b, x, status); +} diff --git a/bochs/fpu/poly.cc b/bochs/fpu/poly.cc new file mode 100755 index 00000000..9926ee01 --- /dev/null +++ b/bochs/fpu/poly.cc @@ -0,0 +1,105 @@ +/*============================================================================ +This source file is an extension to the SoftFloat IEC/IEEE Floating-point +Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) +floating point emulation. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +/*============================================================================ + * Written for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#define FLOAT128 + +#include +#include "softfloat.h" + +// 2 3 4 n +// f(x) ~ C + (C * x) + (C * x) + (C * x) + (C * x) + ... + (C * x) +// 0 1 2 3 4 n +// +// -- 2k -- 2k+1 +// p(x) = > C * x q(x) = > C * x +// -- 2k -- 2k+1 +// +// f(x) ~ [ p(x) + x * q(x) ] +// + +float128 EvalPoly(float128 x, float128 *arr, unsigned n, float_status_t &status) +{ + float128 x2 = float128_mul(x, x, status); + unsigned i; + + assert(n > 1); + + float128 r1 = arr[--n]; + i = n; + while(i >= 2) { + r1 = float128_mul(r1, x2, status); + i -= 2; + r1 = float128_add(r1, arr[i], status); + } + if (i) r1 = float128_mul(r1, x, status); + + float128 r2 = arr[--n]; + i = n; + while(i >= 2) { + r2 = float128_mul(r2, x2, status); + i -= 2; + r2 = float128_add(r2, arr[i], status); + } + if (i) r2 = float128_mul(r2, x, status); + + return float128_add(r1, r2, status); +} + +// 2 4 6 8 2n +// f(x) ~ C + (C * x) + (C * x) + (C * x) + (C * x) + ... + (C * x) +// 0 1 2 3 4 n +// +// -- 4k -- 4k+2 +// p(x) = > C * x q(x) = > C * x +// -- 2k -- 2k+1 +// +// 2 +// f(x) ~ [ p(x) + x * q(x) ] +// + +float128 EvenPoly(float128 x, float128 *arr, unsigned n, float_status_t &status) +{ + return EvalPoly(float128_mul(x, x, status), arr, n, status); +} + +// 3 5 7 9 2n+1 +// f(x) ~ (C * x) + (C * x) + (C * x) + (C * x) + (C * x) + ... + (C * x) +// 0 1 2 3 4 n +// 2 4 6 8 2n +// = x * [ C + (C * x) + (C * x) + (C * x) + (C * x) + ... + (C * x) +// 0 1 2 3 4 n +// +// -- 4k -- 4k+2 +// p(x) = > C * x q(x) = > C * x +// -- 2k -- 2k+1 +// +// 2 +// f(x) ~ x * [ p(x) + x * q(x) ] +// + +float128 OddPoly(float128 x, float128 *arr, unsigned n, float_status_t &status) +{ + return float128_mul(x, EvenPoly(x, arr, n, status), status); +} diff --git a/bochs/fpu/softfloat-compare.h b/bochs/fpu/softfloat-compare.h new file mode 100755 index 00000000..0454201f --- /dev/null +++ b/bochs/fpu/softfloat-compare.h @@ -0,0 +1,496 @@ +/*============================================================================ +This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic +Package, Release 2b. + +Written by John R. Hauser. This work was made possible in part by the +International Computer Science Institute, located at Suite 600, 1947 Center +Street, Berkeley, California 94704. Funding was partially provided by the +National Science Foundation under grant MIP-9311980. The original version +of this code was written as part of a project to build a fixed-point vector +processor in collaboration with the University of California at Berkeley, +overseen by Profs. Nelson Morgan and John Wawrzynek. More information +is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ +arithmetic/SoftFloat.html'. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +/*============================================================================ + * Adapted for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#ifndef _SOFTFLOAT_COMPARE_H_ +#define _SOFTFLOAT_COMPARE_H_ + +#include "softfloat.h" + +// ======= float32 ======= // + +typedef int (*float32_compare_method)(float32, float32, float_status_t &status); + +// 0x00 +BX_CPP_INLINE int float32_eq_ordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation == float_relation_equal); +} + +// 0x01 +BX_CPP_INLINE int float32_lt_ordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation == float_relation_less); +} + +// 0x02 +BX_CPP_INLINE int float32_le_ordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation == float_relation_less) || (relation == float_relation_equal); +} + +// 0x03 +BX_CPP_INLINE int float32_unordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation == float_relation_unordered); +} + +// 0x04 +BX_CPP_INLINE int float32_neq_unordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation != float_relation_equal); +} + +// 0x05 +BX_CPP_INLINE int float32_nlt_unordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation != float_relation_less); +} + +// 0x06 +BX_CPP_INLINE int float32_nle_unordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation != float_relation_less) && (relation != float_relation_equal); +} + +// 0x07 +BX_CPP_INLINE int float32_ordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation != float_relation_unordered); +} + +// 0x08 +BX_CPP_INLINE int float32_eq_unordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation == float_relation_equal) || (relation == float_relation_unordered); +} + +// 0x09 +BX_CPP_INLINE int float32_nge_unordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation == float_relation_less) || (relation == float_relation_unordered); +} + +// 0x0a +BX_CPP_INLINE int float32_ngt_unordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation != float_relation_greater); +} + +// 0x0b +BX_CPP_INLINE int float32_false_quiet(float32 a, float32 b, float_status_t &status) +{ + float32_compare_quiet(a, b, status); + return 0; +} + +// 0x0c +BX_CPP_INLINE int float32_neq_ordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation != float_relation_equal) && (relation != float_relation_unordered); +} + +// 0x0d +BX_CPP_INLINE int float32_ge_ordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation == float_relation_greater) || (relation == float_relation_equal); +} + +// 0x0e +BX_CPP_INLINE int float32_gt_ordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation == float_relation_greater); +} + +// 0x0f +BX_CPP_INLINE int float32_true_quiet(float32 a, float32 b, float_status_t &status) +{ + float32_compare_quiet(a, b, status); + return 1; +} + +// 0x10 +BX_CPP_INLINE int float32_eq_ordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation == float_relation_equal); +} + +// 0x11 +BX_CPP_INLINE int float32_lt_ordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation == float_relation_less); +} + +// 0x12 +BX_CPP_INLINE int float32_le_ordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation == float_relation_less) || (relation == float_relation_equal); +} + +// 0x13 +BX_CPP_INLINE int float32_unordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation == float_relation_unordered); +} + +// 0x14 +BX_CPP_INLINE int float32_neq_unordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation != float_relation_equal); +} + +// 0x15 +BX_CPP_INLINE int float32_nlt_unordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation != float_relation_less); +} + +// 0x16 +BX_CPP_INLINE int float32_nle_unordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation != float_relation_less) && (relation != float_relation_equal); +} + +// 0x17 +BX_CPP_INLINE int float32_ordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation != float_relation_unordered); +} + +// 0x18 +BX_CPP_INLINE int float32_eq_unordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation == float_relation_equal) || (relation == float_relation_unordered); +} + +// 0x19 +BX_CPP_INLINE int float32_nge_unordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation == float_relation_less) || (relation == float_relation_unordered); +} + +// 0x1a +BX_CPP_INLINE int float32_ngt_unordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation != float_relation_greater); +} + +// 0x1b +BX_CPP_INLINE int float32_false_signalling(float32 a, float32 b, float_status_t &status) +{ + float32_compare(a, b, status); + return 0; +} + +// 0x1c +BX_CPP_INLINE int float32_neq_ordered_signalling(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare(a, b, status); + return (relation != float_relation_equal) && (relation != float_relation_unordered); +} + +// 0x1d +BX_CPP_INLINE int float32_ge_ordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation == float_relation_greater) || (relation == float_relation_equal); +} + +// 0x1e +BX_CPP_INLINE int float32_gt_ordered_quiet(float32 a, float32 b, float_status_t &status) +{ + int relation = float32_compare_quiet(a, b, status); + return (relation == float_relation_greater); +} + +// 0x1f +BX_CPP_INLINE int float32_true_signalling(float32 a, float32 b, float_status_t &status) +{ + float32_compare(a, b, status); + return 1; +} + +// ======= float64 ======= // + +typedef int (*float64_compare_method)(float64, float64, float_status_t &status); + +// 0x00 +BX_CPP_INLINE int float64_eq_ordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation == float_relation_equal); +} + +// 0x01 +BX_CPP_INLINE int float64_lt_ordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation == float_relation_less); +} + +// 0x02 +BX_CPP_INLINE int float64_le_ordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation == float_relation_less) || (relation == float_relation_equal); +} + +// 0x03 +BX_CPP_INLINE int float64_unordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation == float_relation_unordered); +} + +// 0x04 +BX_CPP_INLINE int float64_neq_unordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation != float_relation_equal); +} + +// 0x05 +BX_CPP_INLINE int float64_nlt_unordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation != float_relation_less); +} + +// 0x06 +BX_CPP_INLINE int float64_nle_unordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation != float_relation_less) && (relation != float_relation_equal); +} + +// 0x07 +BX_CPP_INLINE int float64_ordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation != float_relation_unordered); +} + +// 0x08 +BX_CPP_INLINE int float64_eq_unordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation == float_relation_equal) || (relation == float_relation_unordered); +} + +// 0x09 +BX_CPP_INLINE int float64_nge_unordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation == float_relation_less) || (relation == float_relation_unordered); +} + +// 0x0a +BX_CPP_INLINE int float64_ngt_unordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation != float_relation_greater); +} + +// 0x0b +BX_CPP_INLINE int float64_false_quiet(float64 a, float64 b, float_status_t &status) +{ + float64_compare_quiet(a, b, status); + return 0; +} + +// 0x0c +BX_CPP_INLINE int float64_neq_ordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation != float_relation_equal) && (relation != float_relation_unordered); +} + +// 0x0d +BX_CPP_INLINE int float64_ge_ordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation == float_relation_greater) || (relation == float_relation_equal); +} + +// 0x0e +BX_CPP_INLINE int float64_gt_ordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation == float_relation_greater); +} + +// 0x0f +BX_CPP_INLINE int float64_true_quiet(float64 a, float64 b, float_status_t &status) +{ + float64_compare_quiet(a, b, status); + return 1; +} + +// 0x10 +BX_CPP_INLINE int float64_eq_ordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation == float_relation_equal); +} + +// 0x11 +BX_CPP_INLINE int float64_lt_ordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation == float_relation_less); +} + +// 0x12 +BX_CPP_INLINE int float64_le_ordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation == float_relation_less) || (relation == float_relation_equal); +} + +// 0x13 +BX_CPP_INLINE int float64_unordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation == float_relation_unordered); +} + +// 0x14 +BX_CPP_INLINE int float64_neq_unordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation != float_relation_equal); +} + +// 0x15 +BX_CPP_INLINE int float64_nlt_unordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation != float_relation_less); +} + +// 0x16 +BX_CPP_INLINE int float64_nle_unordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation != float_relation_less) && (relation != float_relation_equal); +} + +// 0x17 +BX_CPP_INLINE int float64_ordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation != float_relation_unordered); +} + +// 0x18 +BX_CPP_INLINE int float64_eq_unordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation == float_relation_equal) || (relation == float_relation_unordered); +} + +// 0x19 +BX_CPP_INLINE int float64_nge_unordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation == float_relation_less) || (relation == float_relation_unordered); +} + +// 0x1a +BX_CPP_INLINE int float64_ngt_unordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation != float_relation_greater); +} + +// 0x1b +BX_CPP_INLINE int float64_false_signalling(float64 a, float64 b, float_status_t &status) +{ + float64_compare(a, b, status); + return 0; +} + +// 0x1c +BX_CPP_INLINE int float64_neq_ordered_signalling(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare(a, b, status); + return (relation != float_relation_equal) && (relation != float_relation_unordered); +} + +// 0x1d +BX_CPP_INLINE int float64_ge_ordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation == float_relation_greater) || (relation == float_relation_equal); +} + +// 0x1e +BX_CPP_INLINE int float64_gt_ordered_quiet(float64 a, float64 b, float_status_t &status) +{ + int relation = float64_compare_quiet(a, b, status); + return (relation == float_relation_greater); +} + +// 0x1f +BX_CPP_INLINE int float64_true_signalling(float64 a, float64 b, float_status_t &status) +{ + float64_compare(a, b, status); + return 1; +} + +#endif diff --git a/bochs/fpu/softfloat-macros.h b/bochs/fpu/softfloat-macros.h new file mode 100755 index 00000000..34f87c69 --- /dev/null +++ b/bochs/fpu/softfloat-macros.h @@ -0,0 +1,650 @@ +/*============================================================================ +This C source fragment is part of the SoftFloat IEC/IEEE Floating-point +Arithmetic Package, Release 2b. + +Written by John R. Hauser. This work was made possible in part by the +International Computer Science Institute, located at Suite 600, 1947 Center +Street, Berkeley, California 94704. Funding was partially provided by the +National Science Foundation under grant MIP-9311980. The original version +of this code was written as part of a project to build a fixed-point vector +processor in collaboration with the University of California at Berkeley, +overseen by Profs. Nelson Morgan and John Wawrzynek. More information +is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ +arithmetic/SoftFloat.html'. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal notice) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +/*============================================================================ + * Adapted for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#ifndef _SOFTFLOAT_MACROS_H_ +#define _SOFTFLOAT_MACROS_H_ + +/*---------------------------------------------------------------------------- +| Shifts `a' right by the number of bits given in `count'. If any nonzero +| bits are shifted off, they are ``jammed'' into the least significant bit of +| the result by setting the least significant bit to 1. The value of `count' +| can be arbitrarily large; in particular, if `count' is greater than 32, the +| result will be either 0 or 1, depending on whether `a' is zero or nonzero. +| The result is stored in the location pointed to by `zPtr'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE Bit32u shift32RightJamming(Bit32u a, int count) +{ + Bit32u z; + + if (count == 0) { + z = a; + } + else if (count < 32) { + z = (a>>count) | ((a<<((-count) & 31)) != 0); + } + else { + z = (a != 0); + } + + return z; +} + +/*---------------------------------------------------------------------------- +| Shifts `a' right by the number of bits given in `count'. If any nonzero +| bits are shifted off, they are ``jammed'' into the least significant bit of +| the result by setting the least significant bit to 1. The value of `count' +| can be arbitrarily large; in particular, if `count' is greater than 64, the +| result will be either 0 or 1, depending on whether `a' is zero or nonzero. +| The result is stored in the location pointed to by `zPtr'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE Bit64u shift64RightJamming(Bit64u a, int count) +{ + Bit64u z; + + if (count == 0) { + z = a; + } + else if (count < 64) { + z = (a>>count) | ((a << ((-count) & 63)) != 0); + } + else { + z = (a != 0); + } + + return z; +} + +/*---------------------------------------------------------------------------- +| Shifts the 128-bit value formed by concatenating `a0' and `a1' right by 64 +| _plus_ the number of bits given in `count'. The shifted result is at most +| 64 nonzero bits; this is stored at the location pointed to by `z0Ptr'. The +| bits shifted off form a second 64-bit result as follows: The _last_ bit +| shifted off is the most-significant bit of the extra result, and the other +| 63 bits of the extra result are all zero if and only if _all_but_the_last_ +| bits shifted off were all zero. This extra result is stored in the location +| pointed to by `z1Ptr'. The value of `count' can be arbitrarily large. +| (This routine makes more sense if `a0' and `a1' are considered to form +| a fixed-point value with binary point between `a0' and `a1'. This fixed- +| point value is shifted right by the number of bits given in `count', and +| the integer part of the result is returned at the location pointed to by +| `z0Ptr'. The fractional part of the result may be slightly corrupted as +| described above, and is returned at the location pointed to by `z1Ptr'.) +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE void + shift64ExtraRightJamming( + Bit64u a0, Bit64u a1, int count, Bit64u *z0Ptr, Bit64u *z1Ptr) +{ + Bit64u z0, z1; + int negCount = (-count) & 63; + + if (count == 0) { + z1 = a1; + z0 = a0; + } + else if (count < 64) { + z1 = (a0<>count; + } + else { + if (count == 64) { + z1 = a0 | (a1 != 0); + } + else { + z1 = ((a0 | a1) != 0); + } + z0 = 0; + } + *z1Ptr = z1; + *z0Ptr = z0; +} + +/*---------------------------------------------------------------------------- +| Adds the 128-bit value formed by concatenating `a0' and `a1' to the 128-bit +| value formed by concatenating `b0' and `b1'. Addition is modulo 2^128, so +| any carry out is lost. The result is broken into two 64-bit pieces which +| are stored at the locations pointed to by `z0Ptr' and `z1Ptr'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE void + add128(Bit64u a0, Bit64u a1, Bit64u b0, Bit64u b1, Bit64u *z0Ptr, Bit64u *z1Ptr) +{ + Bit64u z1 = a1 + b1; + *z1Ptr = z1; + *z0Ptr = a0 + b0 + (z1 < a1); +} + +/*---------------------------------------------------------------------------- +| Subtracts the 128-bit value formed by concatenating `b0' and `b1' from the +| 128-bit value formed by concatenating `a0' and `a1'. Subtraction is modulo +| 2^128, so any borrow out (carry out) is lost. The result is broken into two +| 64-bit pieces which are stored at the locations pointed to by `z0Ptr' and +| `z1Ptr'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE void + sub128(Bit64u a0, Bit64u a1, Bit64u b0, Bit64u b1, Bit64u *z0Ptr, Bit64u *z1Ptr) +{ + *z1Ptr = a1 - b1; + *z0Ptr = a0 - b0 - (a1 < b1); +} + +/*---------------------------------------------------------------------------- +| Multiplies `a' by `b' to obtain a 128-bit product. The product is broken +| into two 64-bit pieces which are stored at the locations pointed to by +| `z0Ptr' and `z1Ptr'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE void mul64To128(Bit64u a, Bit64u b, Bit64u *z0Ptr, Bit64u *z1Ptr) +{ + Bit32u aHigh, aLow, bHigh, bLow; + Bit64u z0, zMiddleA, zMiddleB, z1; + + aLow = (Bit32u) a; + aHigh = (Bit32u)(a>>32); + bLow = (Bit32u) b; + bHigh = (Bit32u)(b>>32); + z1 = ((Bit64u) aLow) * bLow; + zMiddleA = ((Bit64u) aLow) * bHigh; + zMiddleB = ((Bit64u) aHigh) * bLow; + z0 = ((Bit64u) aHigh) * bHigh; + zMiddleA += zMiddleB; + z0 += (((Bit64u) (zMiddleA < zMiddleB))<<32) + (zMiddleA>>32); + zMiddleA <<= 32; + z1 += zMiddleA; + z0 += (z1 < zMiddleA); + *z1Ptr = z1; + *z0Ptr = z0; +} + +/*---------------------------------------------------------------------------- +| Returns an approximation to the 64-bit integer quotient obtained by dividing +| `b' into the 128-bit value formed by concatenating `a0' and `a1'. The +| divisor `b' must be at least 2^63. If q is the exact quotient truncated +| toward zero, the approximation returned lies between q and q + 2 inclusive. +| If the exact quotient q is larger than 64 bits, the maximum positive 64-bit +| unsigned integer is returned. +*----------------------------------------------------------------------------*/ + +#ifdef USE_estimateDiv128To64 +static Bit64u estimateDiv128To64(Bit64u a0, Bit64u a1, Bit64u b) +{ + Bit64u b0, b1; + Bit64u rem0, rem1, term0, term1; + Bit64u z; + + if (b <= a0) return BX_CONST64(0xFFFFFFFFFFFFFFFF); + b0 = b>>32; + z = (b0<<32 <= a0) ? BX_CONST64(0xFFFFFFFF00000000) : (a0 / b0)<<32; + mul64To128(b, z, &term0, &term1); + sub128(a0, a1, term0, term1, &rem0, &rem1); + while (((Bit64s) rem0) < 0) { + z -= BX_CONST64(0x100000000); + b1 = b<<32; + add128(rem0, rem1, b0, b1, &rem0, &rem1); + } + rem0 = (rem0<<32) | (rem1>>32); + z |= (b0<<32 <= rem0) ? 0xFFFFFFFF : rem0 / b0; + return z; +} +#endif + +/*---------------------------------------------------------------------------- +| Returns an approximation to the square root of the 32-bit significand given +| by `a'. Considered as an integer, `a' must be at least 2^31. If bit 0 of +| `aExp' (the least significant bit) is 1, the integer returned approximates +| 2^31*sqrt(`a'/2^31), where `a' is considered an integer. If bit 0 of `aExp' +| is 0, the integer returned approximates 2^31*sqrt(`a'/2^30). In either +| case, the approximation returned lies strictly within +/-2 of the exact +| value. +*----------------------------------------------------------------------------*/ + +#ifdef USE_estimateSqrt32 +static Bit32u estimateSqrt32(Bit16s aExp, Bit32u a) +{ + static const Bit16u sqrtOddAdjustments[] = { + 0x0004, 0x0022, 0x005D, 0x00B1, 0x011D, 0x019F, 0x0236, 0x02E0, + 0x039C, 0x0468, 0x0545, 0x0631, 0x072B, 0x0832, 0x0946, 0x0A67 + }; + static const Bit16u sqrtEvenAdjustments[] = { + 0x0A2D, 0x08AF, 0x075A, 0x0629, 0x051A, 0x0429, 0x0356, 0x029E, + 0x0200, 0x0179, 0x0109, 0x00AF, 0x0068, 0x0034, 0x0012, 0x0002 + }; + Bit32u z; + + int index = (a>>27) & 15; + if (aExp & 1) { + z = 0x4000 + (a>>17) - sqrtOddAdjustments[index]; + z = ((a / z)<<14) + (z<<15); + a >>= 1; + } + else { + z = 0x8000 + (a>>17) - sqrtEvenAdjustments[index]; + z = a / z + z; + z = (0x20000 <= z) ? 0xFFFF8000 : (z<<15); + if (z <= a) return (Bit32u) (((Bit32s) a)>>1); + } + return ((Bit32u) ((((Bit64u) a)<<31) / z)) + (z>>1); +} +#endif + +/*---------------------------------------------------------------------------- +| Returns the number of leading 0 bits before the most-significant 1 bit of +| `a'. If `a' is zero, 32 is returned. +*----------------------------------------------------------------------------*/ + +static int countLeadingZeros32(Bit32u a) +{ + static const int countLeadingZerosHigh[] = { + 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }; + int shiftCount = 0; + if (a < 0x10000) { + shiftCount += 16; + a <<= 16; + } + if (a < 0x1000000) { + shiftCount += 8; + a <<= 8; + } + shiftCount += countLeadingZerosHigh[ a>>24 ]; + return shiftCount; +} + +/*---------------------------------------------------------------------------- +| Returns the number of leading 0 bits before the most-significant 1 bit of +| `a'. If `a' is zero, 64 is returned. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int countLeadingZeros64(Bit64u a) +{ + int shiftCount = 0; + if (a < ((Bit64u) 1)<<32) { + shiftCount += 32; + } + else { + a >>= 32; + } + shiftCount += countLeadingZeros32((int)(a)); + return shiftCount; +} + +#ifdef FLOATX80 + +/*---------------------------------------------------------------------------- +| Shifts the 128-bit value formed by concatenating `a0' and `a1' right by the +| number of bits given in `count'. Any bits shifted off are lost. The value +| of `count' can be arbitrarily large; in particular, if `count' is greater +| than 128, the result will be 0. The result is broken into two 64-bit pieces +| which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE void + shift128Right(Bit64u a0, Bit64u a1, int count, Bit64u *z0Ptr, Bit64u *z1Ptr) +{ + Bit64u z0, z1; + int negCount = (-count) & 63; + + if (count == 0) { + z1 = a1; + z0 = a0; + } + else if (count < 64) { + z1 = (a0<>count); + z0 = a0>>count; + } + else { + z1 = (count < 64) ? (a0>>(count & 63)) : 0; + z0 = 0; + } + *z1Ptr = z1; + *z0Ptr = z0; +} + +/*---------------------------------------------------------------------------- +| Shifts the 128-bit value formed by concatenating `a0' and `a1' right by the +| number of bits given in `count'. If any nonzero bits are shifted off, they +| are ``jammed'' into the least significant bit of the result by setting the +| least significant bit to 1. The value of `count' can be arbitrarily large; +| in particular, if `count' is greater than 128, the result will be either +| 0 or 1, depending on whether the concatenation of `a0' and `a1' is zero or +| nonzero. The result is broken into two 64-bit pieces which are stored at +| the locations pointed to by `z0Ptr' and `z1Ptr'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE void + shift128RightJamming( + Bit64u a0, Bit64u a1, int count, Bit64u *z0Ptr, Bit64u *z1Ptr) +{ + Bit64u z0, z1; + int negCount = (-count) & 63; + + if (count == 0) { + z1 = a1; + z0 = a0; + } + else if (count < 64) { + z1 = (a0<>count) | ((a1<>count; + } + else { + if (count == 64) { + z1 = a0 | (a1 != 0); + } + else if (count < 128) { + z1 = (a0>>(count & 63)) | (((a0<>((-count) & 63)); +} + +/*---------------------------------------------------------------------------- +| Adds the 192-bit value formed by concatenating `a0', `a1', and `a2' to the +| 192-bit value formed by concatenating `b0', `b1', and `b2'. Addition is +| modulo 2^192, so any carry out is lost. The result is broken into three +| 64-bit pieces which are stored at the locations pointed to by `z0Ptr', +| `z1Ptr', and `z2Ptr'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE void add192( + Bit64u a0, + Bit64u a1, + Bit64u a2, + Bit64u b0, + Bit64u b1, + Bit64u b2, + Bit64u *z0Ptr, + Bit64u *z1Ptr, + Bit64u *z2Ptr +) +{ + Bit64u z0, z1, z2; + unsigned carry0, carry1; + + z2 = a2 + b2; + carry1 = (z2 < a2); + z1 = a1 + b1; + carry0 = (z1 < a1); + z0 = a0 + b0; + z1 += carry1; + z0 += (z1 < carry1); + z0 += carry0; + *z2Ptr = z2; + *z1Ptr = z1; + *z0Ptr = z0; +} + +/*---------------------------------------------------------------------------- +| Subtracts the 192-bit value formed by concatenating `b0', `b1', and `b2' +| from the 192-bit value formed by concatenating `a0', `a1', and `a2'. +| Subtraction is modulo 2^192, so any borrow out (carry out) is lost. The +| result is broken into three 64-bit pieces which are stored at the locations +| pointed to by `z0Ptr', `z1Ptr', and `z2Ptr'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE void sub192( + Bit64u a0, + Bit64u a1, + Bit64u a2, + Bit64u b0, + Bit64u b1, + Bit64u b2, + Bit64u *z0Ptr, + Bit64u *z1Ptr, + Bit64u *z2Ptr +) +{ + Bit64u z0, z1, z2; + unsigned borrow0, borrow1; + + z2 = a2 - b2; + borrow1 = (a2 < b2); + z1 = a1 - b1; + borrow0 = (a1 < b1); + z0 = a0 - b0; + z0 -= (z1 < borrow1); + z1 -= borrow1; + z0 -= borrow0; + *z2Ptr = z2; + *z1Ptr = z1; + *z0Ptr = z0; +} + +/*---------------------------------------------------------------------------- +| Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' +| is equal to the 128-bit value formed by concatenating `b0' and `b1'. +| Otherwise, returns 0. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int eq128(Bit64u a0, Bit64u a1, Bit64u b0, Bit64u b1) +{ + return (a0 == b0) && (a1 == b1); +} + +/*---------------------------------------------------------------------------- +| Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is less +| than or equal to the 128-bit value formed by concatenating `b0' and `b1'. +| Otherwise, returns 0. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int le128(Bit64u a0, Bit64u a1, Bit64u b0, Bit64u b1) +{ + return (a0 < b0) || ((a0 == b0) && (a1 <= b1)); +} + +/*---------------------------------------------------------------------------- +| Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is less +| than the 128-bit value formed by concatenating `b0' and `b1'. Otherwise, +| returns 0. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int lt128(Bit64u a0, Bit64u a1, Bit64u b0, Bit64u b1) +{ + return (a0 < b0) || ((a0 == b0) && (a1 < b1)); +} + +#endif /* FLOATX80 */ + +/*---------------------------------------------------------------------------- +| Multiplies the 128-bit value formed by concatenating `a0' and `a1' by +| `b' to obtain a 192-bit product. The product is broken into three 64-bit +| pieces which are stored at the locations pointed to by `z0Ptr', `z1Ptr', and +| `z2Ptr'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE void mul128By64To192( + Bit64u a0, + Bit64u a1, + Bit64u b, + Bit64u *z0Ptr, + Bit64u *z1Ptr, + Bit64u *z2Ptr +) +{ + Bit64u z0, z1, z2, more1; + + mul64To128(a1, b, &z1, &z2); + mul64To128(a0, b, &z0, &more1); + add128(z0, more1, 0, z1, &z0, &z1); + *z2Ptr = z2; + *z1Ptr = z1; + *z0Ptr = z0; +} + +#ifdef FLOAT128 + +/*---------------------------------------------------------------------------- +| Multiplies the 128-bit value formed by concatenating `a0' and `a1' to the +| 128-bit value formed by concatenating `b0' and `b1' to obtain a 256-bit +| product. The product is broken into four 64-bit pieces which are stored at +| the locations pointed to by `z0Ptr', `z1Ptr', `z2Ptr', and `z3Ptr'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE void mul128To256( + Bit64u a0, + Bit64u a1, + Bit64u b0, + Bit64u b1, + Bit64u *z0Ptr, + Bit64u *z1Ptr, + Bit64u *z2Ptr, + Bit64u *z3Ptr +) +{ + Bit64u z0, z1, z2, z3; + Bit64u more1, more2; + + mul64To128(a1, b1, &z2, &z3); + mul64To128(a1, b0, &z1, &more2); + add128(z1, more2, 0, z2, &z1, &z2); + mul64To128(a0, b0, &z0, &more1); + add128(z0, more1, 0, z1, &z0, &z1); + mul64To128(a0, b1, &more1, &more2); + add128(more1, more2, 0, z2, &more1, &z2); + add128(z0, z1, 0, more1, &z0, &z1); + *z3Ptr = z3; + *z2Ptr = z2; + *z1Ptr = z1; + *z0Ptr = z0; +} + + +/*---------------------------------------------------------------------------- +| Shifts the 192-bit value formed by concatenating `a0', `a1', and `a2' right +| by 64 _plus_ the number of bits given in `count'. The shifted result is +| at most 128 nonzero bits; these are broken into two 64-bit pieces which are +| stored at the locations pointed to by `z0Ptr' and `z1Ptr'. The bits shifted +| off form a third 64-bit result as follows: The _last_ bit shifted off is +| the most-significant bit of the extra result, and the other 63 bits of the +| extra result are all zero if and only if _all_but_the_last_ bits shifted off +| were all zero. This extra result is stored in the location pointed to by +| `z2Ptr'. The value of `count' can be arbitrarily large. +| (This routine makes more sense if `a0', `a1', and `a2' are considered +| to form a fixed-point value with binary point between `a1' and `a2'. This +| fixed-point value is shifted right by the number of bits given in `count', +| and the integer part of the result is returned at the locations pointed to +| by `z0Ptr' and `z1Ptr'. The fractional part of the result may be slightly +| corrupted as described above, and is returned at the location pointed to by +| `z2Ptr'.) +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE void shift128ExtraRightJamming( + Bit64u a0, + Bit64u a1, + Bit64u a2, + int count, + Bit64u *z0Ptr, + Bit64u *z1Ptr, + Bit64u *z2Ptr +) +{ + Bit64u z0, z1, z2; + int negCount = (-count) & 63; + + if (count == 0) { + z2 = a2; + z1 = a1; + z0 = a0; + } + else { + if (count < 64) { + z2 = a1<>count); + z0 = a0>>count; + } + else { + if (count == 64) { + z2 = a1; + z1 = a0; + } + else { + a2 |= a1; + if (count < 128) { + z2 = a0<>(count & 63); + } + else { + z2 = (count == 128) ? a0 : (a0 != 0); + z1 = 0; + } + } + z0 = 0; + } + z2 |= (a2 != 0); + } + *z2Ptr = z2; + *z1Ptr = z1; + *z0Ptr = z0; +} + +#endif /* FLOAT128 */ + +#endif diff --git a/bochs/fpu/softfloat-round-pack.cc b/bochs/fpu/softfloat-round-pack.cc new file mode 100755 index 00000000..c5b7e7ce --- /dev/null +++ b/bochs/fpu/softfloat-round-pack.cc @@ -0,0 +1,730 @@ +/*============================================================================ +This C source file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic +Package, Release 2b. + +Written by John R. Hauser. This work was made possible in part by the +International Computer Science Institute, located at Suite 600, 1947 Center +Street, Berkeley, California 94704. Funding was partially provided by the +National Science Foundation under grant MIP-9311980. The original version +of this code was written as part of a project to build a fixed-point vector +processor in collaboration with the University of California at Berkeley, +overseen by Profs. Nelson Morgan and John Wawrzynek. More information +is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ +arithmetic/SoftFloat.html'. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +#define FLOAT128 + +/*============================================================================ + * Adapted for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#include "softfloat.h" +#include "softfloat-round-pack.h" + +/*---------------------------------------------------------------------------- +| Primitive arithmetic functions, including multi-word arithmetic, and +| division and square root approximations. (Can be specialized to target +| if desired). +*----------------------------------------------------------------------------*/ +#include "softfloat-macros.h" + +/*---------------------------------------------------------------------------- +| Functions and definitions to determine: (1) whether tininess for underflow +| is detected before or after rounding by default, (2) what (if anything) +| happens when exceptions are raised, (3) how signaling NaNs are distinguished +| from quiet NaNs, (4) the default generated quiet NaNs, and (5) how NaNs +| are propagated from function inputs to output. These details are target- +| specific. +*----------------------------------------------------------------------------*/ +#include "softfloat-specialize.h" + +/*---------------------------------------------------------------------------- +| Takes a 64-bit fixed-point value `absZ' with binary point between bits 6 +| and 7, and returns the properly rounded 32-bit integer corresponding to the +| input. If `zSign' is 1, the input is negated before being converted to an +| integer. Bit 63 of `absZ' must be zero. Ordinarily, the fixed-point input +| is simply rounded to an integer, with the inexact exception raised if the +| input cannot be represented exactly as an integer. However, if the fixed- +| point input is too large, the invalid exception is raised and the integer +| indefinite value is returned. +*----------------------------------------------------------------------------*/ + +Bit32s roundAndPackInt32(int zSign, Bit64u exactAbsZ, float_status_t &status) +{ + int roundingMode = get_float_rounding_mode(status); + int roundNearestEven = (roundingMode == float_round_nearest_even); + int roundIncrement = 0x40; + if (! roundNearestEven) { + if (roundingMode == float_round_to_zero) roundIncrement = 0; + else { + roundIncrement = 0x7F; + if (zSign) { + if (roundingMode == float_round_up) roundIncrement = 0; + } + else { + if (roundingMode == float_round_down) roundIncrement = 0; + } + } + } + int roundBits = (int)(exactAbsZ & 0x7F); + Bit64u absZ = (exactAbsZ + roundIncrement)>>7; + absZ &= ~(((roundBits ^ 0x40) == 0) & roundNearestEven); + Bit32s z = (Bit32s) absZ; + if (zSign) z = -z; + if ((absZ>>32) || (z && ((z < 0) ^ zSign))) { + float_raise(status, float_flag_invalid); + return (Bit32s)(int32_indefinite); + } + if (roundBits) { + float_raise(status, float_flag_inexact); + if ((absZ << 7) > exactAbsZ) + set_float_rounding_up(status); + } + return z; +} + +/*---------------------------------------------------------------------------- +| Takes the 128-bit fixed-point value formed by concatenating `absZ0' and +| `absZ1', with binary point between bits 63 and 64 (between the input words), +| and returns the properly rounded 64-bit integer corresponding to the input. +| If `zSign' is 1, the input is negated before being converted to an integer. +| Ordinarily, the fixed-point input is simply rounded to an integer, with +| the inexact exception raised if the input cannot be represented exactly as +| an integer. However, if the fixed-point input is too large, the invalid +| exception is raised and the integer indefinite value is returned. +*----------------------------------------------------------------------------*/ + +Bit64s roundAndPackInt64(int zSign, Bit64u absZ0, Bit64u absZ1, float_status_t &status) +{ + Bit64s z; + int roundingMode = get_float_rounding_mode(status); + int roundNearestEven = (roundingMode == float_round_nearest_even); + int increment = ((Bit64s) absZ1 < 0); + if (! roundNearestEven) { + if (roundingMode == float_round_to_zero) increment = 0; + else { + if (zSign) { + increment = (roundingMode == float_round_down) && absZ1; + } + else { + increment = (roundingMode == float_round_up) && absZ1; + } + } + } + Bit64u exactAbsZ0 = absZ0; + if (increment) { + ++absZ0; + if (absZ0 == 0) goto overflow; + absZ0 &= ~(((Bit64u) (absZ1<<1) == 0) & roundNearestEven); + } + z = absZ0; + if (zSign) z = -z; + if (z && ((z < 0) ^ zSign)) { + overflow: + float_raise(status, float_flag_invalid); + return (Bit64s)(int64_indefinite); + } + if (absZ1) { + float_raise(status, float_flag_inexact); + if (absZ0 > exactAbsZ0) + set_float_rounding_up(status); + } + return z; +} + +/*---------------------------------------------------------------------------- +| Normalizes the subnormal single-precision floating-point value represented +| by the denormalized significand `aSig'. The normalized exponent and +| significand are stored at the locations pointed to by `zExpPtr' and +| `zSigPtr', respectively. +*----------------------------------------------------------------------------*/ + +void normalizeFloat32Subnormal(Bit32u aSig, Bit16s *zExpPtr, Bit32u *zSigPtr) +{ + int shiftCount = countLeadingZeros32(aSig) - 8; + *zSigPtr = aSig<> 7; + zSigRound &= ~(((roundBits ^ 0x40) == 0) & roundNearestEven); + if ((zSigRound << 7) > zSig) set_float_rounding_up(status); + if (zSigRound == 0) zExp = 0; + return packFloat32(zSign, zExp, zSigRound); +} + +/*---------------------------------------------------------------------------- +| Takes an abstract floating-point value having sign `zSign', exponent `zExp', +| and significand `zSig', and returns the proper single-precision floating- +| point value corresponding to the abstract input. This routine is just like +| `roundAndPackFloat32' except that `zSig' does not have to be normalized. +| Bit 31 of `zSig' must be zero, and `zExp' must be 1 less than the ``true'' +| floating-point exponent. +*----------------------------------------------------------------------------*/ + +float32 normalizeRoundAndPackFloat32(int zSign, Bit16s zExp, Bit32u zSig, float_status_t &status) +{ + int shiftCount = countLeadingZeros32(zSig) - 1; + return roundAndPackFloat32(zSign, zExp - shiftCount, zSig<>10; + zSigRound &= ~(((roundBits ^ 0x200) == 0) & roundNearestEven); + if ((zSigRound << 10) > zSig) set_float_rounding_up(status); + if (zSigRound == 0) zExp = 0; + return packFloat64(zSign, zExp, zSigRound); +} + +/*---------------------------------------------------------------------------- +| Takes an abstract floating-point value having sign `zSign', exponent `zExp', +| and significand `zSig', and returns the proper double-precision floating- +| point value corresponding to the abstract input. This routine is just like +| `roundAndPackFloat64' except that `zSig' does not have to be normalized. +| Bit 63 of `zSig' must be zero, and `zExp' must be 1 less than the ``true'' +| floating-point exponent. +*----------------------------------------------------------------------------*/ + +float64 normalizeRoundAndPackFloat64(int zSign, Bit16s zExp, Bit64u zSig, float_status_t &status) +{ + int shiftCount = countLeadingZeros64(zSig) - 1; + return roundAndPackFloat64(zSign, zExp - shiftCount, zSig< zSigExact) set_float_rounding_up(status); + return packFloatx80(zSign, zExp, zSig0); + } + } + if (roundBits) float_raise(status, float_flag_inexact); + zSigExact = zSig0; + zSig0 += roundIncrement; + if (zSig0 < roundIncrement) { + // Basically scale by shifting right and keep overflow + ++zExp; + zSig0 = BX_CONST64(0x8000000000000000); + zSigExact >>= 1; // must scale also, or else later tests will fail + } + roundIncrement = roundMask + 1; + if (roundNearestEven && (roundBits<<1 == roundIncrement)) + roundMask |= roundIncrement; + zSig0 &= ~roundMask; + if (zSig0 > zSigExact) set_float_rounding_up(status); + if (zSig0 == 0) zExp = 0; + return packFloatx80(zSign, zExp, zSig0); + precision80: + increment = ((Bit64s) zSig1 < 0); + if (! roundNearestEven) { + if (roundingMode == float_round_to_zero) increment = 0; + else { + if (zSign) { + increment = (roundingMode == float_round_down) && zSig1; + } + else { + increment = (roundingMode == float_round_up) && zSig1; + } + } + } + if (0x7FFD <= (Bit32u) (zExp - 1)) { + if ((0x7FFE < zExp) + || ((zExp == 0x7FFE) + && (zSig0 == BX_CONST64(0xFFFFFFFFFFFFFFFF)) + && increment)) + { + roundMask = 0; + overflow: + float_raise(status, float_flag_overflow | float_flag_inexact); + if ((roundingMode == float_round_to_zero) + || (zSign && (roundingMode == float_round_up)) + || (! zSign && (roundingMode == float_round_down))) + { + return packFloatx80(zSign, 0x7FFE, ~roundMask); + } + set_float_rounding_up(status); + return packFloatx80(zSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (zExp <= 0) { + int isTiny = (zExp < 0) || (! increment) + || (zSig0 < BX_CONST64(0xFFFFFFFFFFFFFFFF)); + shift64ExtraRightJamming(zSig0, zSig1, 1 - zExp, &zSig0, &zSig1); + zExp = 0; + if (isTiny) { + if (zSig1 || (zSig0 && !float_exception_masked(status, float_flag_underflow))) + float_raise(status, float_flag_underflow); + } + if (zSig1) float_raise(status, float_flag_inexact); + if (roundNearestEven) increment = ((Bit64s) zSig1 < 0); + else { + if (zSign) { + increment = (roundingMode == float_round_down) && zSig1; + } else { + increment = (roundingMode == float_round_up) && zSig1; + } + } + if (increment) { + zSigExact = zSig0++; + zSig0 &= ~(((Bit64u) (zSig1<<1) == 0) & roundNearestEven); + if (zSig0 > zSigExact) set_float_rounding_up(status); + if ((Bit64s) zSig0 < 0) zExp = 1; + } + return packFloatx80(zSign, zExp, zSig0); + } + } + if (zSig1) float_raise(status, float_flag_inexact); + if (increment) { + zSigExact = zSig0++; + if (zSig0 == 0) { + zExp++; + zSig0 = BX_CONST64(0x8000000000000000); + zSigExact >>= 1; // must scale also, or else later tests will fail + } + else { + zSig0 &= ~(((Bit64u) (zSig1<<1) == 0) & roundNearestEven); + } + if (zSig0 > zSigExact) set_float_rounding_up(status); + } + else { + if (zSig0 == 0) zExp = 0; + } + return packFloatx80(zSign, zExp, zSig0); +} + +floatx80 roundAndPackFloatx80(int roundingPrecision, + int zSign, Bit32s zExp, Bit64u zSig0, Bit64u zSig1, float_status_t &status) +{ + float_status_t round_status = status; + floatx80 result = SoftFloatRoundAndPackFloatx80(roundingPrecision, zSign, zExp, zSig0, zSig1, status); + + // bias unmasked undeflow + if (status.float_exception_flags & ~status.float_exception_masks & float_flag_underflow) { + float_raise(round_status, float_flag_underflow); + return SoftFloatRoundAndPackFloatx80(roundingPrecision, zSign, zExp + 0x6000, zSig0, zSig1, status = round_status); + } + + // bias unmasked overflow + if (status.float_exception_flags & ~status.float_exception_masks & float_flag_overflow) { + float_raise(round_status, float_flag_overflow); + return SoftFloatRoundAndPackFloatx80(roundingPrecision, zSign, zExp - 0x6000, zSig0, zSig1, status = round_status); + } + + return result; +} + +/*---------------------------------------------------------------------------- +| Takes an abstract floating-point value having sign `zSign', exponent +| `zExp', and significand formed by the concatenation of `zSig0' and `zSig1', +| and returns the proper extended double-precision floating-point value +| corresponding to the abstract input. This routine is just like +| `roundAndPackFloatx80' except that the input significand does not have to be +| normalized. +*----------------------------------------------------------------------------*/ + +floatx80 normalizeRoundAndPackFloatx80(int roundingPrecision, + int zSign, Bit32s zExp, Bit64u zSig0, Bit64u zSig1, float_status_t &status) +{ + if (zSig0 == 0) { + zSig0 = zSig1; + zSig1 = 0; + zExp -= 64; + } + int shiftCount = countLeadingZeros64(zSig0); + shortShift128Left(zSig0, zSig1, shiftCount, &zSig0, &zSig1); + zExp -= shiftCount; + return + roundAndPackFloatx80(roundingPrecision, zSign, zExp, zSig0, zSig1, status); +} + +#endif + +#ifdef FLOAT128 + +/*---------------------------------------------------------------------------- +| Normalizes the subnormal quadruple-precision floating-point value +| represented by the denormalized significand formed by the concatenation of +| `aSig0' and `aSig1'. The normalized exponent is stored at the location +| pointed to by `zExpPtr'. The most significant 49 bits of the normalized +| significand are stored at the location pointed to by `zSig0Ptr', and the +| least significant 64 bits of the normalized significand are stored at the +| location pointed to by `zSig1Ptr'. +*----------------------------------------------------------------------------*/ + +void normalizeFloat128Subnormal( + Bit64u aSig0, Bit64u aSig1, Bit32s *zExpPtr, Bit64u *zSig0Ptr, Bit64u *zSig1Ptr) +{ + int shiftCount; + + if (aSig0 == 0) { + shiftCount = countLeadingZeros64(aSig1) - 15; + if (shiftCount < 0) { + *zSig0Ptr = aSig1 >>(-shiftCount); + *zSig1Ptr = aSig1 << (shiftCount & 63); + } + else { + *zSig0Ptr = aSig1 << shiftCount; + *zSig1Ptr = 0; + } + *zExpPtr = - shiftCount - 63; + } + else { + shiftCount = countLeadingZeros64(aSig0) - 15; + shortShift128Left(aSig0, aSig1, shiftCount, zSig0Ptr, zSig1Ptr); + *zExpPtr = 1 - shiftCount; + } +} + +/*---------------------------------------------------------------------------- +| Takes an abstract floating-point value having sign `zSign', exponent `zExp', +| and extended significand formed by the concatenation of `zSig0', `zSig1', +| and `zSig2', and returns the proper quadruple-precision floating-point value +| corresponding to the abstract input. Ordinarily, the abstract value is +| simply rounded and packed into the quadruple-precision format, with the +| inexact exception raised if the abstract input cannot be represented +| exactly. However, if the abstract value is too large, the overflow and +| inexact exceptions are raised and an infinity or maximal finite value is +| returned. If the abstract value is too small, the input value is rounded to +| a subnormal number, and the underflow and inexact exceptions are raised if +| the abstract input cannot be represented exactly as a subnormal quadruple- +| precision floating-point number. +| The input significand must be normalized or smaller. If the input +| significand is not normalized, `zExp' must be 0; in that case, the result +| returned is a subnormal number, and it must not require rounding. In the +| usual case that the input significand is normalized, `zExp' must be 1 less +| than the ``true'' floating-point exponent. The handling of underflow and +| overflow follows the IEC/IEEE Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float128 roundAndPackFloat128( + int zSign, Bit32s zExp, Bit64u zSig0, Bit64u zSig1, Bit64u zSig2, float_status_t &status) +{ + int increment = ((Bit64s) zSig2 < 0); + if (0x7FFD <= (Bit32u) zExp) { + if ((0x7FFD < zExp) + || ((zExp == 0x7FFD) + && eq128(BX_CONST64(0x0001FFFFFFFFFFFF), + BX_CONST64(0xFFFFFFFFFFFFFFFF), zSig0, zSig1) + && increment)) + { + float_raise(status, float_flag_overflow | float_flag_inexact); + return packFloat128(zSign, 0x7FFF, 0, 0); + } + if (zExp < 0) { + int isTiny = (zExp < -1) + || ! increment + || lt128(zSig0, zSig1, + BX_CONST64(0x0001FFFFFFFFFFFF), + BX_CONST64(0xFFFFFFFFFFFFFFFF)); + shift128ExtraRightJamming( + zSig0, zSig1, zSig2, -zExp, &zSig0, &zSig1, &zSig2); + zExp = 0; + if (isTiny && zSig2) float_raise(status, float_flag_underflow); + increment = ((Bit64s) zSig2 < 0); + } + } + if (zSig2) float_raise(status, float_flag_inexact); + if (increment) { + add128(zSig0, zSig1, 0, 1, &zSig0, &zSig1); + zSig1 &= ~((zSig2 + zSig2 == 0) & 1); + } + else { + if ((zSig0 | zSig1) == 0) zExp = 0; + } + return packFloat128(zSign, zExp, zSig0, zSig1); +} + +/*---------------------------------------------------------------------------- +| Takes an abstract floating-point value having sign `zSign', exponent `zExp', +| and significand formed by the concatenation of `zSig0' and `zSig1', and +| returns the proper quadruple-precision floating-point value corresponding +| to the abstract input. This routine is just like `roundAndPackFloat128' +| except that the input significand has fewer bits and does not have to be +| normalized. In all cases, `zExp' must be 1 less than the ``true'' floating- +| point exponent. +*----------------------------------------------------------------------------*/ + +float128 normalizeRoundAndPackFloat128( + int zSign, Bit32s zExp, Bit64u zSig0, Bit64u zSig1, float_status_t &status) +{ + Bit64u zSig2; + + if (zSig0 == 0) { + zSig0 = zSig1; + zSig1 = 0; + zExp -= 64; + } + int shiftCount = countLeadingZeros64(zSig0) - 15; + if (0 <= shiftCount) { + zSig2 = 0; + shortShift128Left(zSig0, zSig1, shiftCount, &zSig0, &zSig1); + } + else { + shift128ExtraRightJamming( + zSig0, zSig1, 0, -shiftCount, &zSig0, &zSig1, &zSig2); + } + zExp -= shiftCount; + return roundAndPackFloat128(zSign, zExp, zSig0, zSig1, zSig2, status); +} + +#endif diff --git a/bochs/fpu/softfloat-round-pack.h b/bochs/fpu/softfloat-round-pack.h new file mode 100755 index 00000000..f9e041b0 --- /dev/null +++ b/bochs/fpu/softfloat-round-pack.h @@ -0,0 +1,260 @@ +/*============================================================================ +This C source file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic +Package, Release 2b. + +Written by John R. Hauser. This work was made possible in part by the +International Computer Science Institute, located at Suite 600, 1947 Center +Street, Berkeley, California 94704. Funding was partially provided by the +National Science Foundation under grant MIP-9311980. The original version +of this code was written as part of a project to build a fixed-point vector +processor in collaboration with the University of California at Berkeley, +overseen by Profs. Nelson Morgan and John Wawrzynek. More information +is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ +arithmetic/SoftFloat.html'. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +/*============================================================================ + * Adapted for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#ifndef _SOFTFLOAT_ROUND_PACK_H_ +#define _SOFTFLOAT_ROUND_PACK_H_ + +#include "softfloat.h" + +/*---------------------------------------------------------------------------- +| Takes a 64-bit fixed-point value `absZ' with binary point between bits 6 +| and 7, and returns the properly rounded 32-bit integer corresponding to the +| input. If `zSign' is 1, the input is negated before being converted to an +| integer. Bit 63 of `absZ' must be zero. Ordinarily, the fixed-point input +| is simply rounded to an integer, with the inexact exception raised if the +| input cannot be represented exactly as an integer. However, if the fixed- +| point input is too large, the invalid exception is raised and the integer +| indefinite value is returned. +*----------------------------------------------------------------------------*/ + +Bit32s roundAndPackInt32(int zSign, Bit64u absZ, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Takes the 128-bit fixed-point value formed by concatenating `absZ0' and +| `absZ1', with binary point between bits 63 and 64 (between the input words), +| and returns the properly rounded 64-bit integer corresponding to the input. +| If `zSign' is 1, the input is negated before being converted to an integer. +| Ordinarily, the fixed-point input is simply rounded to an integer, with +| the inexact exception raised if the input cannot be represented exactly as +| an integer. However, if the fixed-point input is too large, the invalid +| exception is raised and the integer indefinite value is returned. +*----------------------------------------------------------------------------*/ + +Bit64s roundAndPackInt64(int zSign, Bit64u absZ0, Bit64u absZ1, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Normalizes the subnormal single-precision floating-point value represented +| by the denormalized significand `aSig'. The normalized exponent and +| significand are stored at the locations pointed to by `zExpPtr' and +| `zSigPtr', respectively. +*----------------------------------------------------------------------------*/ + +void normalizeFloat32Subnormal(Bit32u aSig, Bit16s *zExpPtr, Bit32u *zSigPtr); + +/*---------------------------------------------------------------------------- +| Takes an abstract floating-point value having sign `zSign', exponent `zExp', +| and significand `zSig', and returns the proper single-precision floating- +| point value corresponding to the abstract input. Ordinarily, the abstract +| value is simply rounded and packed into the single-precision format, with +| the inexact exception raised if the abstract input cannot be represented +| exactly. However, if the abstract value is too large, the overflow and +| inexact exceptions are raised and an infinity or maximal finite value is +| returned. If the abstract value is too small, the input value is rounded to +| a subnormal number, and the underflow and inexact exceptions are raised if +| the abstract input cannot be represented exactly as a subnormal single- +| precision floating-point number. +| The input significand `zSig' has its binary point between bits 30 +| and 29, which is 7 bits to the left of the usual location. This shifted +| significand must be normalized or smaller. If `zSig' is not normalized, +| `zExp' must be 0; in that case, the result returned is a subnormal number, +| and it must not require rounding. In the usual case that `zSig' is +| normalized, `zExp' must be 1 less than the ``true'' floating-point exponent. +| The handling of underflow and overflow follows the IEC/IEEE Standard for +| Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float32 roundAndPackFloat32(int zSign, Bit16s zExp, Bit32u zSig, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Takes an abstract floating-point value having sign `zSign', exponent `zExp', +| and significand `zSig', and returns the proper single-precision floating- +| point value corresponding to the abstract input. This routine is just like +| `roundAndPackFloat32' except that `zSig' does not have to be normalized. +| Bit 31 of `zSig' must be zero, and `zExp' must be 1 less than the ``true'' +| floating-point exponent. +*----------------------------------------------------------------------------*/ + +float32 normalizeRoundAndPackFloat32(int zSign, Bit16s zExp, Bit32u zSig, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Normalizes the subnormal double-precision floating-point value represented +| by the denormalized significand `aSig'. The normalized exponent and +| significand are stored at the locations pointed to by `zExpPtr' and +| `zSigPtr', respectively. +*----------------------------------------------------------------------------*/ + +void normalizeFloat64Subnormal(Bit64u aSig, Bit16s *zExpPtr, Bit64u *zSigPtr); + +/*---------------------------------------------------------------------------- +| Takes an abstract floating-point value having sign `zSign', exponent `zExp', +| and significand `zSig', and returns the proper double-precision floating- +| point value corresponding to the abstract input. Ordinarily, the abstract +| value is simply rounded and packed into the double-precision format, with +| the inexact exception raised if the abstract input cannot be represented +| exactly. However, if the abstract value is too large, the overflow and +| inexact exceptions are raised and an infinity or maximal finite value is +| returned. If the abstract value is too small, the input value is rounded +| to a subnormal number, and the underflow and inexact exceptions are raised +| if the abstract input cannot be represented exactly as a subnormal double- +| precision floating-point number. +| The input significand `zSig' has its binary point between bits 62 +| and 61, which is 10 bits to the left of the usual location. This shifted +| significand must be normalized or smaller. If `zSig' is not normalized, +| `zExp' must be 0; in that case, the result returned is a subnormal number, +| and it must not require rounding. In the usual case that `zSig' is +| normalized, `zExp' must be 1 less than the ``true'' floating-point exponent. +| The handling of underflow and overflow follows the IEC/IEEE Standard for +| Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float64 roundAndPackFloat64(int zSign, Bit16s zExp, Bit64u zSig, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Takes an abstract floating-point value having sign `zSign', exponent `zExp', +| and significand `zSig', and returns the proper double-precision floating- +| point value corresponding to the abstract input. This routine is just like +| `roundAndPackFloat64' except that `zSig' does not have to be normalized. +| Bit 63 of `zSig' must be zero, and `zExp' must be 1 less than the ``true'' +| floating-point exponent. +*----------------------------------------------------------------------------*/ + +float64 normalizeRoundAndPackFloat64(int zSign, Bit16s zExp, Bit64u zSig, float_status_t &status); + +#ifdef FLOATX80 + +/*---------------------------------------------------------------------------- +| Normalizes the subnormal extended double-precision floating-point value +| represented by the denormalized significand `aSig'. The normalized exponent +| and significand are stored at the locations pointed to by `zExpPtr' and +| `zSigPtr', respectively. +*----------------------------------------------------------------------------*/ + +void normalizeFloatx80Subnormal(Bit64u aSig, Bit32s *zExpPtr, Bit64u *zSigPtr); + +/*---------------------------------------------------------------------------- +| Takes an abstract floating-point value having sign `zSign', exponent `zExp', +| and extended significand formed by the concatenation of `zSig0' and `zSig1', +| and returns the proper extended double-precision floating-point value +| corresponding to the abstract input. Ordinarily, the abstract value is +| rounded and packed into the extended double-precision format, with the +| inexact exception raised if the abstract input cannot be represented +| exactly. However, if the abstract value is too large, the overflow and +| inexact exceptions are raised and an infinity or maximal finite value is +| returned. If the abstract value is too small, the input value is rounded to +| a subnormal number, and the underflow and inexact exceptions are raised if +| the abstract input cannot be represented exactly as a subnormal extended +| double-precision floating-point number. +| If `roundingPrecision' is 32 or 64, the result is rounded to the same +| number of bits as single or double precision, respectively. Otherwise, the +| result is rounded to the full precision of the extended double-precision +| format. +| The input significand must be normalized or smaller. If the input +| significand is not normalized, `zExp' must be 0; in that case, the result +| returned is a subnormal number, and it must not require rounding. The +| handling of underflow and overflow follows the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +floatx80 roundAndPackFloatx80(int roundingPrecision, + int zSign, Bit32s zExp, Bit64u zSig0, Bit64u zSig1, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Takes an abstract floating-point value having sign `zSign', exponent +| `zExp', and significand formed by the concatenation of `zSig0' and `zSig1', +| and returns the proper extended double-precision floating-point value +| corresponding to the abstract input. This routine is just like +| `roundAndPackFloatx80' except that the input significand does not have to be +| normalized. +*----------------------------------------------------------------------------*/ + +floatx80 normalizeRoundAndPackFloatx80(int roundingPrecision, + int zSign, Bit32s zExp, Bit64u zSig0, Bit64u zSig1, float_status_t &status); + +#endif // FLOATX80 + +#ifdef FLOAT128 + +/*---------------------------------------------------------------------------- +| Normalizes the subnormal quadruple-precision floating-point value +| represented by the denormalized significand formed by the concatenation of +| `aSig0' and `aSig1'. The normalized exponent is stored at the location +| pointed to by `zExpPtr'. The most significant 49 bits of the normalized +| significand are stored at the location pointed to by `zSig0Ptr', and the +| least significant 64 bits of the normalized significand are stored at the +| location pointed to by `zSig1Ptr'. +*----------------------------------------------------------------------------*/ + +void normalizeFloat128Subnormal( + Bit64u aSig0, Bit64u aSig1, Bit32s *zExpPtr, Bit64u *zSig0Ptr, Bit64u *zSig1Ptr); + +/*---------------------------------------------------------------------------- +| Takes an abstract floating-point value having sign `zSign', exponent `zExp', +| and extended significand formed by the concatenation of `zSig0', `zSig1', +| and `zSig2', and returns the proper quadruple-precision floating-point value +| corresponding to the abstract input. Ordinarily, the abstract value is +| simply rounded and packed into the quadruple-precision format, with the +| inexact exception raised if the abstract input cannot be represented +| exactly. However, if the abstract value is too large, the overflow and +| inexact exceptions are raised and an infinity or maximal finite value is +| returned. If the abstract value is too small, the input value is rounded to +| a subnormal number, and the underflow and inexact exceptions are raised if +| the abstract input cannot be represented exactly as a subnormal quadruple- +| precision floating-point number. +| The input significand must be normalized or smaller. If the input +| significand is not normalized, `zExp' must be 0; in that case, the result +| returned is a subnormal number, and it must not require rounding. In the +| usual case that the input significand is normalized, `zExp' must be 1 less +| than the ``true'' floating-point exponent. The handling of underflow and +| overflow follows the IEC/IEEE Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float128 roundAndPackFloat128( + int zSign, Bit32s zExp, Bit64u zSig0, Bit64u zSig1, Bit64u zSig2, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Takes an abstract floating-point value having sign `zSign', exponent `zExp', +| and significand formed by the concatenation of `zSig0' and `zSig1', and +| returns the proper quadruple-precision floating-point value corresponding +| to the abstract input. This routine is just like `roundAndPackFloat128' +| except that the input significand has fewer bits and does not have to be +| normalized. In all cases, `zExp' must be 1 less than the ``true'' floating- +| point exponent. +*----------------------------------------------------------------------------*/ + +float128 normalizeRoundAndPackFloat128( + int zSign, Bit32s zExp, Bit64u zSig0, Bit64u zSig1, float_status_t &status); + +#endif // FLOAT128 + +#endif diff --git a/bochs/fpu/softfloat-specialize.cc b/bochs/fpu/softfloat-specialize.cc new file mode 100755 index 00000000..303b7572 --- /dev/null +++ b/bochs/fpu/softfloat-specialize.cc @@ -0,0 +1,195 @@ +/*============================================================================ +This C source fragment is part of the SoftFloat IEC/IEEE Floating-point +Arithmetic Package, Release 2b. + +Written by John R. Hauser. This work was made possible in part by the +International Computer Science Institute, located at Suite 600, 1947 Center +Street, Berkeley, California 94704. Funding was partially provided by the +National Science Foundation under grant MIP-9311980. The original version +of this code was written as part of a project to build a fixed-point vector +processor in collaboration with the University of California at Berkeley, +overseen by Profs. Nelson Morgan and John Wawrzynek. More information +is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ +arithmetic/SoftFloat.html'. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +#define FLOAT128 + +/*============================================================================ + * Adapted for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#include "softfloat.h" +#include "softfloat-specialize.h" + +/*---------------------------------------------------------------------------- +| Takes two single-precision floating-point values `a' and `b', one of which +| is a NaN, and returns the appropriate NaN result. If either `a' or `b' is a +| signaling NaN, the invalid exception is raised. +*----------------------------------------------------------------------------*/ + +float32 propagateFloat32NaN(float32 a, float32 b, float_status_t &status) +{ + int aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN; + + aIsNaN = float32_is_nan(a); + aIsSignalingNaN = float32_is_signaling_nan(a); + bIsNaN = float32_is_nan(b); + bIsSignalingNaN = float32_is_signaling_nan(b); + a |= 0x00400000; + b |= 0x00400000; + if (aIsSignalingNaN | bIsSignalingNaN) float_raise(status, float_flag_invalid); + if (get_float_nan_handling_mode(status) == float_larger_significand_nan) { + if (aIsSignalingNaN) { + if (bIsSignalingNaN) goto returnLargerSignificand; + return bIsNaN ? b : a; + } + else if (aIsNaN) { + if (bIsSignalingNaN | ! bIsNaN) return a; + returnLargerSignificand: + if ((Bit32u) (a<<1) < (Bit32u) (b<<1)) return b; + if ((Bit32u) (b<<1) < (Bit32u) (a<<1)) return a; + return (a < b) ? a : b; + } + else { + return b; + } + } else { + return (aIsSignalingNaN | aIsNaN) ? a : b; + } +} + +/*---------------------------------------------------------------------------- +| Takes two double-precision floating-point values `a' and `b', one of which +| is a NaN, and returns the appropriate NaN result. If either `a' or `b' is a +| signaling NaN, the invalid exception is raised. +*----------------------------------------------------------------------------*/ + +float64 propagateFloat64NaN(float64 a, float64 b, float_status_t &status) +{ + int aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN; + aIsNaN = float64_is_nan(a); + aIsSignalingNaN = float64_is_signaling_nan(a); + bIsNaN = float64_is_nan(b); + bIsSignalingNaN = float64_is_signaling_nan(b); + a |= BX_CONST64(0x0008000000000000); + b |= BX_CONST64(0x0008000000000000); + if (aIsSignalingNaN | bIsSignalingNaN) float_raise(status, float_flag_invalid); + if (get_float_nan_handling_mode(status) == float_larger_significand_nan) { + if (aIsSignalingNaN) { + if (bIsSignalingNaN) goto returnLargerSignificand; + return bIsNaN ? b : a; + } + else if (aIsNaN) { + if (bIsSignalingNaN | ! bIsNaN) return a; + returnLargerSignificand: + if ((Bit64u) (a<<1) < (Bit64u) (b<<1)) return b; + if ((Bit64u) (b<<1) < (Bit64u) (a<<1)) return a; + return (a < b) ? a : b; + } + else { + return b; + } + } else { + return (aIsSignalingNaN | aIsNaN) ? a : b; + } +} + +#ifdef FLOATX80 + +/*---------------------------------------------------------------------------- +| Takes two extended double-precision floating-point values `a' and `b', one +| of which is a NaN, and returns the appropriate NaN result. If either `a' or +| `b' is a signaling NaN, the invalid exception is raised. +*----------------------------------------------------------------------------*/ + +floatx80 propagateFloatx80NaN(floatx80 a, floatx80 b, float_status_t &status) +{ + int aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN; + aIsNaN = floatx80_is_nan(a); + aIsSignalingNaN = floatx80_is_signaling_nan(a); + bIsNaN = floatx80_is_nan(b); + bIsSignalingNaN = floatx80_is_signaling_nan(b); + a.fraction |= BX_CONST64(0xC000000000000000); + b.fraction |= BX_CONST64(0xC000000000000000); + if (aIsSignalingNaN | bIsSignalingNaN) float_raise(status, float_flag_invalid); + if (aIsSignalingNaN) { + if (bIsSignalingNaN) goto returnLargerSignificand; + return bIsNaN ? b : a; + } + else if (aIsNaN) { + if (bIsSignalingNaN | ! bIsNaN) return a; + returnLargerSignificand: + if (a.fraction < b.fraction) return b; + if (b.fraction < a.fraction) return a; + return (a.exp < b.exp) ? a : b; + } + else { + return b; + } +} + +/*---------------------------------------------------------------------------- +| The pattern for a default generated extended double-precision NaN. +*----------------------------------------------------------------------------*/ +const floatx80 floatx80_default_nan = + packFloatx80(0, floatx80_default_nan_exp, floatx80_default_nan_fraction); + +#endif /* FLOATX80 */ + +#ifdef FLOAT128 + +/*---------------------------------------------------------------------------- +| Takes two quadruple-precision floating-point values `a' and `b', one of +| which is a NaN, and returns the appropriate NaN result. If either `a' or +| `b' is a signaling NaN, the invalid exception is raised. +*----------------------------------------------------------------------------*/ + +float128 propagateFloat128NaN(float128 a, float128 b, float_status_t &status) +{ + int aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN; + aIsNaN = float128_is_nan(a); + aIsSignalingNaN = float128_is_signaling_nan(a); + bIsNaN = float128_is_nan(b); + bIsSignalingNaN = float128_is_signaling_nan(b); + a.hi |= BX_CONST64(0x0000800000000000); + b.hi |= BX_CONST64(0x0000800000000000); + if (aIsSignalingNaN | bIsSignalingNaN) float_raise(status, float_flag_invalid); + if (aIsSignalingNaN) { + if (bIsSignalingNaN) goto returnLargerSignificand; + return bIsNaN ? b : a; + } + else if (aIsNaN) { + if (bIsSignalingNaN | !bIsNaN) return a; + returnLargerSignificand: + if (lt128(a.hi<<1, a.lo, b.hi<<1, b.lo)) return b; + if (lt128(b.hi<<1, b.lo, a.hi<<1, a.lo)) return a; + return (a.hi < b.hi) ? a : b; + } + else { + return b; + } +} + +/*---------------------------------------------------------------------------- +| The pattern for a default generated quadruple-precision NaN. +*----------------------------------------------------------------------------*/ +const float128 float128_default_nan = + packFloat128(float128_default_nan_hi, float128_default_nan_lo); + +#endif /* FLOAT128 */ diff --git a/bochs/fpu/softfloat-specialize.h b/bochs/fpu/softfloat-specialize.h new file mode 100755 index 00000000..ffa757d6 --- /dev/null +++ b/bochs/fpu/softfloat-specialize.h @@ -0,0 +1,619 @@ +/*============================================================================ +This C source fragment is part of the SoftFloat IEC/IEEE Floating-point +Arithmetic Package, Release 2b. + +Written by John R. Hauser. This work was made possible in part by the +International Computer Science Institute, located at Suite 600, 1947 Center +Street, Berkeley, California 94704. Funding was partially provided by the +National Science Foundation under grant MIP-9311980. The original version +of this code was written as part of a project to build a fixed-point vector +processor in collaboration with the University of California at Berkeley, +overseen by Profs. Nelson Morgan and John Wawrzynek. More information +is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ +arithmetic/SoftFloat.html'. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +#ifndef _SOFTFLOAT_SPECIALIZE_H_ +#define _SOFTFLOAT_SPECIALIZE_H_ + +#include "softfloat.h" + +/*============================================================================ + * Adapted for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#define int16_indefinite ((Bit16s)0x8000) +#define int32_indefinite ((Bit32s)0x80000000) +#define int64_indefinite BX_CONST64(0x8000000000000000) + +/*---------------------------------------------------------------------------- +| Internal canonical NaN format. +*----------------------------------------------------------------------------*/ + +typedef struct { + int sign; + Bit64u hi, lo; +} commonNaNT; + +/*---------------------------------------------------------------------------- +| The pattern for a default generated single-precision NaN. +*----------------------------------------------------------------------------*/ +#define float32_default_nan 0xFFC00000 + +#define float32_fraction extractFloat32Frac +#define float32_exp extractFloat32Exp +#define float32_sign extractFloat32Sign + +/*---------------------------------------------------------------------------- +| Returns the fraction bits of the single-precision floating-point value `a'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE Bit32u extractFloat32Frac(float32 a) +{ + return a & 0x007FFFFF; +} + +/*---------------------------------------------------------------------------- +| Returns the exponent bits of the single-precision floating-point value `a'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE Bit16s extractFloat32Exp(float32 a) +{ + return (a>>23) & 0xFF; +} + +/*---------------------------------------------------------------------------- +| Returns the sign bit of the single-precision floating-point value `a'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int extractFloat32Sign(float32 a) +{ + return a>>31; +} + +/*---------------------------------------------------------------------------- +| Packs the sign `zSign', exponent `zExp', and significand `zSig' into a +| single-precision floating-point value, returning the result. After being +| shifted into the proper positions, the three fields are simply added +| together to form the result. This means that any integer portion of `zSig' +| will be added into the exponent. Since a properly normalized significand +| will have an integer portion equal to 1, the `zExp' input should be 1 less +| than the desired result exponent whenever `zSig' is a complete, normalized +| significand. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE float32 packFloat32(int zSign, Bit16s zExp, Bit32u zSig) +{ + return (((Bit32u) zSign)<<31) + (((Bit32u) zExp)<<23) + zSig; +} + +/*---------------------------------------------------------------------------- +| Returns 1 if the single-precision floating-point value `a' is a NaN; +| otherwise returns 0. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int float32_is_nan(float32 a) +{ + return (0xFF000000 < (Bit32u) (a<<1)); +} + +/*---------------------------------------------------------------------------- +| Returns 1 if the single-precision floating-point value `a' is a signaling +| NaN; otherwise returns 0. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int float32_is_signaling_nan(float32 a) +{ + return (((a>>22) & 0x1FF) == 0x1FE) && (a & 0x003FFFFF); +} + +/*---------------------------------------------------------------------------- +| Convert float32 denormals to zero +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE float32 float32_denormal_to_zero(float32 op) +{ + if (float32_class(op) == float_denormal) op &= ((Bit32u)(1) << 31); + return op; +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the single-precision floating-point NaN +| `a' to the canonical NaN format. If `a' is a signaling NaN, the invalid +| exception is raised. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE commonNaNT float32ToCommonNaN(float32 a, float_status_t &status) +{ + commonNaNT z; + if (float32_is_signaling_nan(a)) float_raise(status, float_flag_invalid); + z.sign = a>>31; + z.lo = 0; + z.hi = ((Bit64u) a)<<41; + return z; +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the canonical NaN `a' to the single- +| precision floating-point format. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE float32 commonNaNToFloat32(commonNaNT a) +{ + return (((Bit32u) a.sign)<<31) | 0x7FC00000 | (Bit32u)(a.hi>>41); +} + +/*---------------------------------------------------------------------------- +| Takes two single-precision floating-point values `a' and `b', one of which +| is a NaN, and returns the appropriate NaN result. If either `a' or `b' is a +| signaling NaN, the invalid exception is raised. +*----------------------------------------------------------------------------*/ + +float32 propagateFloat32NaN(float32 a, float32 b, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Takes single-precision floating-point NaN `a' and returns the appropriate +| NaN result. If `a' is a signaling NaN, the invalid exception is raised. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE float32 propagateFloat32NaN(float32 a, float_status_t &status) +{ + if (float32_is_signaling_nan(a)) + float_raise(status, float_flag_invalid); + + return a | 0x00400000; +} + +/*---------------------------------------------------------------------------- +| The pattern for a default generated double-precision NaN. +*----------------------------------------------------------------------------*/ +#define float64_default_nan BX_CONST64(0xFFF8000000000000) + +#define float64_fraction extractFloat64Frac +#define float64_exp extractFloat64Exp +#define float64_sign extractFloat64Sign + +/*---------------------------------------------------------------------------- +| Returns the fraction bits of the double-precision floating-point value `a'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE Bit64u extractFloat64Frac(float64 a) +{ + return a & BX_CONST64(0x000FFFFFFFFFFFFF); +} + +/*---------------------------------------------------------------------------- +| Returns the exponent bits of the double-precision floating-point value `a'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE Bit16s extractFloat64Exp(float64 a) +{ + return (Bit16s)(a>>52) & 0x7FF; +} + +/*---------------------------------------------------------------------------- +| Returns the sign bit of the double-precision floating-point value `a'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int extractFloat64Sign(float64 a) +{ + return (int)(a>>63); +} + +/*---------------------------------------------------------------------------- +| Packs the sign `zSign', exponent `zExp', and significand `zSig' into a +| double-precision floating-point value, returning the result. After being +| shifted into the proper positions, the three fields are simply added +| together to form the result. This means that any integer portion of `zSig' +| will be added into the exponent. Since a properly normalized significand +| will have an integer portion equal to 1, the `zExp' input should be 1 less +| than the desired result exponent whenever `zSig' is a complete, normalized +| significand. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE float64 packFloat64(int zSign, Bit16s zExp, Bit64u zSig) +{ + return (((Bit64u) zSign)<<63) + (((Bit64u) zExp)<<52) + zSig; +} + +/*---------------------------------------------------------------------------- +| Returns 1 if the double-precision floating-point value `a' is a NaN; +| otherwise returns 0. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int float64_is_nan(float64 a) +{ + return (BX_CONST64(0xFFE0000000000000) < (Bit64u) (a<<1)); +} + +/*---------------------------------------------------------------------------- +| Returns 1 if the double-precision floating-point value `a' is a signaling +| NaN; otherwise returns 0. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int float64_is_signaling_nan(float64 a) +{ + return (((a>>51) & 0xFFF) == 0xFFE) && (a & BX_CONST64(0x0007FFFFFFFFFFFF)); +} + +/*---------------------------------------------------------------------------- +| Convert float64 denormals to zero +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE float64 float64_denormal_to_zero(float64 op) +{ + if (float64_class(op) == float_denormal) op &= ((Bit64u)(1) << 63); + return op; +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the double-precision floating-point NaN +| `a' to the canonical NaN format. If `a' is a signaling NaN, the invalid +| exception is raised. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE commonNaNT float64ToCommonNaN(float64 a, float_status_t &status) +{ + commonNaNT z; + if (float64_is_signaling_nan(a)) float_raise(status, float_flag_invalid); + z.sign = (int)(a>>63); + z.lo = 0; + z.hi = a<<12; + return z; +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the canonical NaN `a' to the double- +| precision floating-point format. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE float64 commonNaNToFloat64(commonNaNT a) +{ + return (((Bit64u) a.sign)<<63) | BX_CONST64(0x7FF8000000000000) | (a.hi>>12); +} + +/*---------------------------------------------------------------------------- +| Takes two double-precision floating-point values `a' and `b', one of which +| is a NaN, and returns the appropriate NaN result. If either `a' or `b' is a +| signaling NaN, the invalid exception is raised. +*----------------------------------------------------------------------------*/ + +float64 propagateFloat64NaN(float64 a, float64 b, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Takes double-precision floating-point NaN `a' and returns the appropriate +| NaN result. If `a' is a signaling NaN, the invalid exception is raised. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE float64 propagateFloat64NaN(float64 a, float_status_t &status) +{ + if (float64_is_signaling_nan(a)) + float_raise(status, float_flag_invalid); + + return a | BX_CONST64(0x0008000000000000); +} + +#ifdef FLOATX80 + +/*---------------------------------------------------------------------------- +| The pattern for a default generated extended double-precision NaN. The +| `high' and `low' values hold the most- and least-significant bits, +| respectively. +*----------------------------------------------------------------------------*/ +#define floatx80_default_nan_exp 0xFFFF +#define floatx80_default_nan_fraction BX_CONST64(0xC000000000000000) + +#define floatx80_fraction extractFloatx80Frac +#define floatx80_exp extractFloatx80Exp +#define floatx80_sign extractFloatx80Sign + +#define EXP_BIAS 0x3FFF + +/*---------------------------------------------------------------------------- +| Returns the fraction bits of the extended double-precision floating-point +| value `a'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE Bit64u extractFloatx80Frac(floatx80 a) +{ + return a.fraction; +} + +/*---------------------------------------------------------------------------- +| Returns the exponent bits of the extended double-precision floating-point +| value `a'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE Bit32s extractFloatx80Exp(floatx80 a) +{ + return a.exp & 0x7FFF; +} + +/*---------------------------------------------------------------------------- +| Returns the sign bit of the extended double-precision floating-point value +| `a'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int extractFloatx80Sign(floatx80 a) +{ + return a.exp>>15; +} + +/*---------------------------------------------------------------------------- +| Packs the sign `zSign', exponent `zExp', and significand `zSig' into an +| extended double-precision floating-point value, returning the result. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE floatx80 packFloatx80(int zSign, Bit32s zExp, Bit64u zSig) +{ + floatx80 z; + z.fraction = zSig; + z.exp = (zSign << 15) + zExp; + return z; +} + +/*---------------------------------------------------------------------------- +| Returns 1 if the extended double-precision floating-point value `a' is a +| NaN; otherwise returns 0. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int floatx80_is_nan(floatx80 a) +{ + return ((a.exp & 0x7FFF) == 0x7FFF) && (Bit64s) (a.fraction<<1); +} + +/*---------------------------------------------------------------------------- +| Returns 1 if the extended double-precision floating-point value `a' is a +| signaling NaN; otherwise returns 0. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int floatx80_is_signaling_nan(floatx80 a) +{ + Bit64u aLow = a.fraction & ~BX_CONST64(0x4000000000000000); + return ((a.exp & 0x7FFF) == 0x7FFF) && + ((Bit64u) (aLow<<1)) && (a.fraction == aLow); +} + +/*---------------------------------------------------------------------------- +| Returns 1 if the extended double-precision floating-point value `a' is an +| unsupported; otherwise returns 0. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int floatx80_is_unsupported(floatx80 a) +{ + return ((a.exp & 0x7FFF) && !(a.fraction & BX_CONST64(0x8000000000000000))); +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the extended double-precision floating- +| point NaN `a' to the canonical NaN format. If `a' is a signaling NaN, the +| invalid exception is raised. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE commonNaNT floatx80ToCommonNaN(floatx80 a, float_status_t &status) +{ + commonNaNT z; + if (floatx80_is_signaling_nan(a)) float_raise(status, float_flag_invalid); + z.sign = a.exp >> 15; + z.lo = 0; + z.hi = a.fraction << 1; + return z; +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the canonical NaN `a' to the extended +| double-precision floating-point format. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE floatx80 commonNaNToFloatx80(commonNaNT a) +{ + floatx80 z; + z.fraction = BX_CONST64(0xC000000000000000) | (a.hi>>1); + z.exp = (((Bit16u) a.sign)<<15) | 0x7FFF; + return z; +} + +/*---------------------------------------------------------------------------- +| Takes two extended double-precision floating-point values `a' and `b', one +| of which is a NaN, and returns the appropriate NaN result. If either `a' or +| `b' is a signaling NaN, the invalid exception is raised. +*----------------------------------------------------------------------------*/ + +floatx80 propagateFloatx80NaN(floatx80 a, floatx80 b, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Takes extended double-precision floating-point NaN `a' and returns the +| appropriate NaN result. If `a' is a signaling NaN, the invalid exception +| is raised. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE floatx80 propagateFloatx80NaN(floatx80 a, float_status_t &status) +{ + if (floatx80_is_signaling_nan(a)) + float_raise(status, float_flag_invalid); + + a.fraction |= BX_CONST64(0xC000000000000000); + + return a; +} + +/*---------------------------------------------------------------------------- +| The pattern for a default generated extended double-precision NaN. +*----------------------------------------------------------------------------*/ +extern const floatx80 floatx80_default_nan; + +#endif /* FLOATX80 */ + +#ifdef FLOAT128 + +#include "softfloat-macros.h" + +/*---------------------------------------------------------------------------- +| The pattern for a default generated quadruple-precision NaN. The `high' and +| `low' values hold the most- and least-significant bits, respectively. +*----------------------------------------------------------------------------*/ +#define float128_default_nan_hi BX_CONST64(0xFFFF800000000000) +#define float128_default_nan_lo BX_CONST64(0x0000000000000000) + +#define float128_exp extractFloat128Exp + +/*---------------------------------------------------------------------------- +| Returns the least-significant 64 fraction bits of the quadruple-precision +| floating-point value `a'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE Bit64u extractFloat128Frac1(float128 a) +{ + return a.lo; +} + +/*---------------------------------------------------------------------------- +| Returns the most-significant 48 fraction bits of the quadruple-precision +| floating-point value `a'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE Bit64u extractFloat128Frac0(float128 a) +{ + return a.hi & BX_CONST64(0x0000FFFFFFFFFFFF); +} + +/*---------------------------------------------------------------------------- +| Returns the exponent bits of the quadruple-precision floating-point value +| `a'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE Bit32s extractFloat128Exp(float128 a) +{ + return ((Bit32s)(a.hi>>48)) & 0x7FFF; +} + +/*---------------------------------------------------------------------------- +| Returns the sign bit of the quadruple-precision floating-point value `a'. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int extractFloat128Sign(float128 a) +{ + return (int)(a.hi >> 63); +} + +/*---------------------------------------------------------------------------- +| Packs the sign `zSign', the exponent `zExp', and the significand formed +| by the concatenation of `zSig0' and `zSig1' into a quadruple-precision +| floating-point value, returning the result. After being shifted into the +| proper positions, the three fields `zSign', `zExp', and `zSig0' are simply +| added together to form the most significant 32 bits of the result. This +| means that any integer portion of `zSig0' will be added into the exponent. +| Since a properly normalized significand will have an integer portion equal +| to 1, the `zExp' input should be 1 less than the desired result exponent +| whenever `zSig0' and `zSig1' concatenated form a complete, normalized +| significand. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE float128 packFloat128(int zSign, Bit32s zExp, Bit64u zSig0, Bit64u zSig1) +{ + float128 z; + z.lo = zSig1; + z.hi = (((Bit64u) zSign)<<63) + (((Bit64u) zExp)<<48) + zSig0; + return z; +} + +/*---------------------------------------------------------------------------- +| Packs two 64-bit precision integers into into the quadruple-precision +| floating-point value, returning the result. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE float128 packFloat128(Bit64u zHi, Bit64u zLo) +{ + float128 z; + z.lo = zLo; + z.hi = zHi; + return z; +} + +#ifdef _MSC_VER +#define PACK_FLOAT_128(hi,lo) { lo, hi } +#else +#define PACK_FLOAT_128(hi,lo) packFloat128(BX_CONST64(hi),BX_CONST64(lo)) +#endif + +/*---------------------------------------------------------------------------- +| Returns 1 if the quadruple-precision floating-point value `a' is a NaN; +| otherwise returns 0. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int float128_is_nan(float128 a) +{ + return (BX_CONST64(0xFFFE000000000000) <= (Bit64u) (a.hi<<1)) + && (a.lo || (a.hi & BX_CONST64(0x0000FFFFFFFFFFFF))); +} + +/*---------------------------------------------------------------------------- +| Returns 1 if the quadruple-precision floating-point value `a' is a +| signaling NaN; otherwise returns 0. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int float128_is_signaling_nan(float128 a) +{ + return (((a.hi>>47) & 0xFFFF) == 0xFFFE) + && (a.lo || (a.hi & BX_CONST64(0x00007FFFFFFFFFFF))); +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the quadruple-precision floating-point NaN +| `a' to the canonical NaN format. If `a' is a signaling NaN, the invalid +| exception is raised. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE commonNaNT float128ToCommonNaN(float128 a, float_status_t &status) +{ + commonNaNT z; + if (float128_is_signaling_nan(a)) float_raise(status, float_flag_invalid); + z.sign = (int)(a.hi>>63); + shortShift128Left(a.hi, a.lo, 16, &z.hi, &z.lo); + return z; +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the canonical NaN `a' to the quadruple- +| precision floating-point format. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE float128 commonNaNToFloat128(commonNaNT a) +{ + float128 z; + shift128Right(a.hi, a.lo, 16, &z.hi, &z.lo); + z.hi |= (((Bit64u) a.sign)<<63) | BX_CONST64(0x7FFF800000000000); + return z; +} + +/*---------------------------------------------------------------------------- +| Takes two quadruple-precision floating-point values `a' and `b', one of +| which is a NaN, and returns the appropriate NaN result. If either `a' or +| `b' is a signaling NaN, the invalid exception is raised. +*----------------------------------------------------------------------------*/ + +float128 propagateFloat128NaN(float128 a, float128 b, float_status_t &status); + +/*---------------------------------------------------------------------------- +| The pattern for a default generated quadruple-precision NaN. +*----------------------------------------------------------------------------*/ +extern const float128 float128_default_nan; + +#endif /* FLOAT128 */ + +#endif diff --git a/bochs/fpu/softfloat.cc b/bochs/fpu/softfloat.cc new file mode 100755 index 00000000..20ce11d9 --- /dev/null +++ b/bochs/fpu/softfloat.cc @@ -0,0 +1,2911 @@ +/*============================================================================ +This C source file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic +Package, Release 2b. + +Written by John R. Hauser. This work was made possible in part by the +International Computer Science Institute, located at Suite 600, 1947 Center +Street, Berkeley, California 94704. Funding was partially provided by the +National Science Foundation under grant MIP-9311980. The original version +of this code was written as part of a project to build a fixed-point vector +processor in collaboration with the University of California at Berkeley, +overseen by Profs. Nelson Morgan and John Wawrzynek. More information +is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ +arithmetic/SoftFloat.html'. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +#define FLOAT128 + +/*============================================================================ + * Adapted for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#include "softfloat.h" +#include "softfloat-round-pack.h" + +/*---------------------------------------------------------------------------- +| Primitive arithmetic functions, including multi-word arithmetic, and +| division and square root approximations. (Can be specialized to target +| if desired). +*----------------------------------------------------------------------------*/ +#define USE_estimateDiv128To64 +#define USE_estimateSqrt32 +#include "softfloat-macros.h" + +/*---------------------------------------------------------------------------- +| Functions and definitions to determine: (1) whether tininess for underflow +| is detected before or after rounding by default, (2) what (if anything) +| happens when exceptions are raised, (3) how signaling NaNs are distinguished +| from quiet NaNs, (4) the default generated quiet NaNs, and (5) how NaNs +| are propagated from function inputs to output. These details are target- +| specific. +*----------------------------------------------------------------------------*/ +#include "softfloat-specialize.h" + +/*---------------------------------------------------------------------------- +| Returns the result of converting the 32-bit two's complement integer `a' +| to the single-precision floating-point format. The conversion is performed +| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float32 int32_to_float32(Bit32s a, float_status_t &status) +{ + if (a == 0) return 0; + if (a == (Bit32s) 0x80000000) return packFloat32(1, 0x9E, 0); + int zSign = (a < 0); + return normalizeRoundAndPackFloat32(zSign, 0x9C, zSign ? -a : a, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the 32-bit two's complement integer `a' +| to the double-precision floating-point format. The conversion is performed +| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float64 int32_to_float64(Bit32s a) +{ + if (a == 0) return 0; + int zSign = (a < 0); + Bit32u absA = zSign ? -a : a; + int shiftCount = countLeadingZeros32(absA) + 21; + Bit64u zSig = absA; + return packFloat64(zSign, 0x432 - shiftCount, zSig<>(-shiftCount); + if ((Bit32u) (aSig<<(shiftCount & 31))) { + float_raise(status, float_flag_inexact); + } + if (aSign) z = -z; + return z; +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the single-precision floating-point value +| `a' to the 64-bit two's complement integer format. The conversion is +| performed according to the IEC/IEEE Standard for Binary Floating-Point +| Arithmetic - which means in particular that the conversion is rounded +| according to the current rounding mode. If `a' is a NaN or the +| conversion overflows, the integer indefinite value is returned. +*----------------------------------------------------------------------------*/ + +Bit64s float32_to_int64(float32 a, float_status_t &status) +{ + Bit64u aSig64, aSigExtra; + + Bit32u aSig = extractFloat32Frac(a); + Bit16s aExp = extractFloat32Exp(a); + int aSign = extractFloat32Sign(a); + + int shiftCount = 0xBE - aExp; + if (shiftCount < 0) { + float_raise(status, float_flag_invalid); + return (Bit64s)(int64_indefinite); + } + if (aExp) aSig |= 0x00800000; + aSig64 = aSig; + aSig64 <<= 40; + shift64ExtraRightJamming(aSig64, 0, shiftCount, &aSig64, &aSigExtra); + return roundAndPackInt64(aSign, aSig64, aSigExtra, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the single-precision floating-point value +| `a' to the 64-bit two's complement integer format. The conversion is +| performed according to the IEC/IEEE Standard for Binary Floating-Point +| Arithmetic, except that the conversion is always rounded toward zero. +| If `a' is a NaN or the conversion overflows, the integer indefinite +| value is returned. +*----------------------------------------------------------------------------*/ + +Bit64s float32_to_int64_round_to_zero(float32 a, float_status_t &status) +{ + int aSign; + Bit16s aExp; + Bit32u aSig; + Bit64u aSig64; + Bit64s z; + + aSig = extractFloat32Frac(a); + aExp = extractFloat32Exp(a); + aSign = extractFloat32Sign(a); + int shiftCount = aExp - 0xBE; + if (0 <= shiftCount) { + if (a != 0xDF000000) { + float_raise(status, float_flag_invalid); + } + return (Bit64s)(int64_indefinite); + } + else if (aExp <= 0x7E) { + if (aExp | aSig) float_raise(status, float_flag_inexact); + return 0; + } + aSig64 = aSig | 0x00800000; + aSig64 <<= 40; + z = aSig64>>(-shiftCount); + if ((Bit64u) (aSig64<<(shiftCount & 63))) { + float_raise(status, float_flag_inexact); + } + if (aSign) z = -z; + return z; +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the single-precision floating-point value +| `a' to the double-precision floating-point format. The conversion is +| performed according to the IEC/IEEE Standard for Binary Floating-Point +| Arithmetic. +*----------------------------------------------------------------------------*/ + +float64 float32_to_float64(float32 a, float_status_t &status) +{ + Bit32u aSig = extractFloat32Frac(a); + Bit16s aExp = extractFloat32Exp(a); + int aSign = extractFloat32Sign(a); + + if (aExp == 0xFF) { + if (aSig) return commonNaNToFloat64(float32ToCommonNaN(a, status)); + return packFloat64(aSign, 0x7FF, 0); + } + if (aExp == 0) { + if (aSig == 0) return packFloat64(aSign, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloat32Subnormal(aSig, &aExp, &aSig); + --aExp; + } + return packFloat64(aSign, aExp + 0x380, ((Bit64u) aSig)<<29); +} + +/*---------------------------------------------------------------------------- +| Rounds the single-precision floating-point value `a' to an integer, and +| returns the result as a single-precision floating-point value. The +| operation is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float32 float32_round_to_int(float32 a, float_status_t &status) +{ + int aSign; + Bit16s aExp; + Bit32u lastBitMask, roundBitsMask; + int roundingMode; + float32 z; + + aExp = extractFloat32Exp(a); + if (0x96 <= aExp) { + if ((aExp == 0xFF) && extractFloat32Frac(a)) { + return propagateFloat32NaN(a, status); + } + return a; + } + if (aExp <= 0x7E) { + if ((Bit32u) (a<<1) == 0) return a; + float_raise(status, float_flag_inexact); + aSign = extractFloat32Sign(a); + switch (get_float_rounding_mode(status)) { + case float_round_nearest_even: + if ((aExp == 0x7E) && extractFloat32Frac(a)) { + return packFloat32(aSign, 0x7F, 0); + } + break; + case float_round_down: + return aSign ? 0xBF800000 : 0; + case float_round_up: + return aSign ? 0x80000000 : 0x3F800000; + } + return packFloat32(aSign, 0, 0); + } + lastBitMask = 1; + lastBitMask <<= 0x96 - aExp; + roundBitsMask = lastBitMask - 1; + z = a; + roundingMode = get_float_rounding_mode(status); + if (roundingMode == float_round_nearest_even) { + z += lastBitMask>>1; + if ((z & roundBitsMask) == 0) z &= ~lastBitMask; + } + else if (roundingMode != float_round_to_zero) { + if (extractFloat32Sign(z) ^ (roundingMode == float_round_up)) { + z += roundBitsMask; + } + } + z &= ~roundBitsMask; + if (z != a) float_raise(status, float_flag_inexact); + return z; +} + +/*---------------------------------------------------------------------------- +| Returns the result of adding the absolute values of the single-precision +| floating-point values `a' and `b'. If `zSign' is 1, the sum is negated +| before being returned. `zSign' is ignored if the result is a NaN. +| The addition is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +static float32 addFloat32Sigs(float32 a, float32 b, int zSign, float_status_t &status) +{ + Bit16s aExp, bExp, zExp; + Bit32u aSig, bSig, zSig; + Bit16s expDiff; + + aSig = extractFloat32Frac(a); + aExp = extractFloat32Exp(a); + bSig = extractFloat32Frac(b); + bExp = extractFloat32Exp(b); + + expDiff = aExp - bExp; + aSig <<= 6; + bSig <<= 6; + + if (0 < expDiff) { + if (aExp == 0xFF) { + if (aSig) return propagateFloat32NaN(a, b, status); + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return a; + } + if ((aExp == 0) && aSig) + float_raise(status, float_flag_denormal); + + if (bExp == 0) { + if (bSig) float_raise(status, float_flag_denormal); + --expDiff; + } + else bSig |= 0x20000000; + + bSig = shift32RightJamming(bSig, expDiff); + zExp = aExp; + } + else if (expDiff < 0) { + if (bExp == 0xFF) { + if (bSig) return propagateFloat32NaN(a, b, status); + if (aSig && (aExp == 0)) float_raise(status, float_flag_denormal); + return packFloat32(zSign, 0xFF, 0); + } + if ((bExp == 0) && bSig) + float_raise(status, float_flag_denormal); + + if (aExp == 0) { + if (aSig) float_raise(status, float_flag_denormal); + ++expDiff; + } + else aSig |= 0x20000000; + + aSig = shift32RightJamming(aSig, -expDiff); + zExp = bExp; + } + else { + if (aExp == 0xFF) { + if (aSig | bSig) return propagateFloat32NaN(a, b, status); + return a; + } + if (aExp == 0) { + if (aSig | bSig) float_raise(status, float_flag_denormal); + return packFloat32(zSign, 0, (aSig + bSig)>>6); + } + zSig = 0x40000000 + aSig + bSig; + zExp = aExp; + goto roundAndPack; + } + aSig |= 0x20000000; + zSig = (aSig + bSig)<<1; + --zExp; + if ((Bit32s) zSig < 0) { + zSig = aSig + bSig; + ++zExp; + } + roundAndPack: + return roundAndPackFloat32(zSign, zExp, zSig, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of subtracting the absolute values of the single- +| precision floating-point values `a' and `b'. If `zSign' is 1, the +| difference is negated before being returned. `zSign' is ignored if the +| result is a NaN. The subtraction is performed according to the IEC/IEEE +| Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +static float32 subFloat32Sigs(float32 a, float32 b, int zSign, float_status_t &status) +{ + Bit16s aExp, bExp, zExp; + Bit32u aSig, bSig, zSig; + Bit16s expDiff; + + aSig = extractFloat32Frac(a); + aExp = extractFloat32Exp(a); + bSig = extractFloat32Frac(b); + bExp = extractFloat32Exp(b); + + expDiff = aExp - bExp; + aSig <<= 7; + bSig <<= 7; + if (0 < expDiff) goto aExpBigger; + if (expDiff < 0) goto bExpBigger; + if (aExp == 0xFF) { + if (aSig | bSig) return propagateFloat32NaN(a, b, status); + float_raise(status, float_flag_invalid); + return float32_default_nan; + } + if (aExp == 0) { + if (aSig | bSig) float_raise(status, float_flag_denormal); + aExp = 1; + bExp = 1; + } + if (bSig < aSig) goto aBigger; + if (aSig < bSig) goto bBigger; + return packFloat32(get_float_rounding_mode(status) == float_round_down, 0, 0); + bExpBigger: + if (bExp == 0xFF) { + if (bSig) return propagateFloat32NaN(a, b, status); + if (aSig && (aExp == 0)) float_raise(status, float_flag_denormal); + return packFloat32(zSign ^ 1, 0xFF, 0); + } + if ((bExp == 0) && bSig) + float_raise(status, float_flag_denormal); + + if (aExp == 0) { + if (aSig) float_raise(status, float_flag_denormal); + ++expDiff; + } + else aSig |= 0x40000000; + + aSig = shift32RightJamming(aSig, -expDiff); + bSig |= 0x40000000; + bBigger: + zSig = bSig - aSig; + zExp = bExp; + zSign ^= 1; + goto normalizeRoundAndPack; + aExpBigger: + if (aExp == 0xFF) { + if (aSig) return propagateFloat32NaN(a, b, status); + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return a; + } + if ((aExp == 0) && aSig) + float_raise(status, float_flag_denormal); + + if (bExp == 0) { + if (bSig) float_raise(status, float_flag_denormal); + --expDiff; + } + else bSig |= 0x40000000; + + bSig = shift32RightJamming(bSig, expDiff); + aSig |= 0x40000000; + aBigger: + zSig = aSig - bSig; + zExp = aExp; + normalizeRoundAndPack: + --zExp; + return normalizeRoundAndPackFloat32(zSign, zExp, zSig, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of adding the single-precision floating-point values `a' +| and `b'. The operation is performed according to the IEC/IEEE Standard for +| Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float32 float32_add(float32 a, float32 b, float_status_t &status) +{ + int aSign = extractFloat32Sign(a); + int bSign = extractFloat32Sign(b); + + if (aSign == bSign) { + return addFloat32Sigs(a, b, aSign, status); + } + else { + return subFloat32Sigs(a, b, aSign, status); + } +} + +/*---------------------------------------------------------------------------- +| Returns the result of subtracting the single-precision floating-point values +| `a' and `b'. The operation is performed according to the IEC/IEEE Standard +| for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float32 float32_sub(float32 a, float32 b, float_status_t &status) +{ + int aSign = extractFloat32Sign(a); + int bSign = extractFloat32Sign(b); + + if (aSign == bSign) { + return subFloat32Sigs(a, b, aSign, status); + } + else { + return addFloat32Sigs(a, b, aSign, status); + } +} + +/*---------------------------------------------------------------------------- +| Returns the result of multiplying the single-precision floating-point values +| `a' and `b'. The operation is performed according to the IEC/IEEE Standard +| for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float32 float32_mul(float32 a, float32 b, float_status_t &status) +{ + int aSign, bSign, zSign; + Bit16s aExp, bExp, zExp; + Bit32u aSig, bSig; + Bit64u zSig64; + Bit32u zSig; + + aSig = extractFloat32Frac(a); + aExp = extractFloat32Exp(a); + aSign = extractFloat32Sign(a); + bSig = extractFloat32Frac(b); + bExp = extractFloat32Exp(b); + bSign = extractFloat32Sign(b); + zSign = aSign ^ bSign; + if (aExp == 0xFF) { + if (aSig || ((bExp == 0xFF) && bSig)) + return propagateFloat32NaN(a, b, status); + + if ((bExp | bSig) == 0) { + float_raise(status, float_flag_invalid); + return float32_default_nan; + } + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return packFloat32(zSign, 0xFF, 0); + } + if (bExp == 0xFF) { + if (bSig) return propagateFloat32NaN(a, b, status); + if ((aExp | aSig) == 0) { + float_raise(status, float_flag_invalid); + return float32_default_nan; + } + if (aSig && (aExp == 0)) float_raise(status, float_flag_denormal); + return packFloat32(zSign, 0xFF, 0); + } + if (aExp == 0) { + if (aSig == 0) { + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return packFloat32(zSign, 0, 0); + } + float_raise(status, float_flag_denormal); + normalizeFloat32Subnormal(aSig, &aExp, &aSig); + } + if (bExp == 0) { + if (bSig == 0) return packFloat32(zSign, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloat32Subnormal(bSig, &bExp, &bSig); + } + zExp = aExp + bExp - 0x7F; + aSig = (aSig | 0x00800000)<<7; + bSig = (bSig | 0x00800000)<<8; + zSig64 = shift64RightJamming(((Bit64u) aSig) * bSig, 32); + zSig = (Bit32u) zSig64; + if (0 <= (Bit32s) (zSig<<1)) { + zSig <<= 1; + --zExp; + } + return roundAndPackFloat32(zSign, zExp, zSig, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of dividing the single-precision floating-point value `a' +| by the corresponding value `b'. The operation is performed according to the +| IEC/IEEE Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float32 float32_div(float32 a, float32 b, float_status_t &status) +{ + int aSign, bSign, zSign; + Bit16s aExp, bExp, zExp; + Bit32u aSig, bSig, zSig; + + aSig = extractFloat32Frac(a); + aExp = extractFloat32Exp(a); + aSign = extractFloat32Sign(a); + bSig = extractFloat32Frac(b); + bExp = extractFloat32Exp(b); + bSign = extractFloat32Sign(b); + zSign = aSign ^ bSign; + if (aExp == 0xFF) { + if (aSig) return propagateFloat32NaN(a, b, status); + if (bExp == 0xFF) { + if (bSig) return propagateFloat32NaN(a, b, status); + float_raise(status, float_flag_invalid); + return float32_default_nan; + } + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return packFloat32(zSign, 0xFF, 0); + } + if (bExp == 0xFF) { + if (bSig) return propagateFloat32NaN(a, b, status); + if (aSig && (aExp == 0)) float_raise(status, float_flag_denormal); + return packFloat32(zSign, 0, 0); + } + if (bExp == 0) { + if (bSig == 0) { + if ((aExp | aSig) == 0) { + float_raise(status, float_flag_invalid); + return float32_default_nan; + } + float_raise(status, float_flag_divbyzero); + return packFloat32(zSign, 0xFF, 0); + } + float_raise(status, float_flag_denormal); + normalizeFloat32Subnormal(bSig, &bExp, &bSig); + } + if (aExp == 0) { + if (aSig == 0) return packFloat32(zSign, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloat32Subnormal(aSig, &aExp, &aSig); + } + zExp = aExp - bExp + 0x7D; + aSig = (aSig | 0x00800000)<<7; + bSig = (bSig | 0x00800000)<<8; + if (bSig <= (aSig + aSig)) { + aSig >>= 1; + ++zExp; + } + zSig = (((Bit64u) aSig)<<32) / bSig; + if ((zSig & 0x3F) == 0) { + zSig |= ((Bit64u) bSig * zSig != ((Bit64u) aSig)<<32); + } + return roundAndPackFloat32(zSign, zExp, zSig, status); +} + +/*---------------------------------------------------------------------------- +| Returns the square root of the single-precision floating-point value `a'. +| The operation is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float32 float32_sqrt(float32 a, float_status_t &status) +{ + int aSign; + Bit16s aExp, zExp; + Bit32u aSig, zSig; + Bit64u rem, term; + + aSig = extractFloat32Frac(a); + aExp = extractFloat32Exp(a); + aSign = extractFloat32Sign(a); + if (aExp == 0xFF) { + if (aSig) return propagateFloat32NaN(a, status); + if (! aSign) return a; + float_raise(status, float_flag_invalid); + return float32_default_nan; + } + if (aSign) { + if ((aExp | aSig) == 0) return a; + float_raise(status, float_flag_invalid); + return float32_default_nan; + } + if (aExp == 0) { + if (aSig == 0) return 0; + float_raise(status, float_flag_denormal); + normalizeFloat32Subnormal(aSig, &aExp, &aSig); + } + zExp = ((aExp - 0x7F)>>1) + 0x7E; + aSig = (aSig | 0x00800000)<<8; + zSig = estimateSqrt32(aExp, aSig) + 2; + if ((zSig & 0x7F) <= 5) { + if (zSig < 2) { + zSig = 0x7FFFFFFF; + goto roundAndPack; + } + aSig >>= aExp & 1; + term = ((Bit64u) zSig) * zSig; + rem = (((Bit64u) aSig)<<32) - term; + while ((Bit64s) rem < 0) { + --zSig; + rem += (((Bit64u) zSig)<<1) | 1; + } + zSig |= (rem != 0); + } + zSig = shift32RightJamming(zSig, 1); + roundAndPack: + return roundAndPackFloat32(0, zExp, zSig, status); +} + +/*---------------------------------------------------------------------------- +| Determine single-precision floating-point number class +*----------------------------------------------------------------------------*/ + +float_class_t float32_class(float32 a) +{ + Bit16s aExp = extractFloat32Exp(a); + Bit32u aSig = extractFloat32Frac(a); + int aSign = extractFloat32Sign(a); + + if(aExp == 0xFF) { + if (aSig == 0) + return (aSign) ? float_negative_inf : float_positive_inf; + + return float_NaN; + } + + if(aExp == 0) { + if (aSig == 0) return float_zero; + return float_denormal; + } + + return float_normalized; +} + +/*---------------------------------------------------------------------------- +| Compare between two single precision floating point numbers. Returns +| 'float_relation_equal' if the operands are equal, 'float_relation_less' if +| the value 'a' is less than the corresponding value `b', +| 'float_relation_greater' if the value 'a' is greater than the corresponding +| value `b', or 'float_relation_unordered' otherwise. +*----------------------------------------------------------------------------*/ + +int float32_compare(float32 a, float32 b, float_status_t &status) +{ + float_class_t aClass = float32_class(a); + float_class_t bClass = float32_class(b); + + if (aClass == float_NaN || bClass == float_NaN) { + float_raise(status, float_flag_invalid); + return float_relation_unordered; + } + + if (aClass == float_denormal || bClass == float_denormal) + { + float_raise(status, float_flag_denormal); + } + + if ((a == b) || ((Bit32u) ((a | b)<<1) == 0)) return float_relation_equal; + + int aSign = extractFloat32Sign(a); + int bSign = extractFloat32Sign(b); + if (aSign != bSign) + return (aSign) ? float_relation_less : float_relation_greater; + + if (aSign ^ (a < b)) return float_relation_less; + return float_relation_greater; +} + +/*---------------------------------------------------------------------------- +| Compare between two double precision floating point numbers. Returns +| 'float_relation_equal' if the operands are equal, 'float_relation_less' if +| the value 'a' is less than the corresponding value `b', +| 'float_relation_greater' if the value 'a' is greater than the corresponding +| value `b', or 'float_relation_unordered' otherwise. Quiet NaNs do not cause +| an exception. +*----------------------------------------------------------------------------*/ + +int float32_compare_quiet(float32 a, float32 b, float_status_t &status) +{ + float_class_t aClass = float32_class(a); + float_class_t bClass = float32_class(b); + + if (aClass == float_NaN || bClass == float_NaN) + { + if (float32_is_signaling_nan(a) || float32_is_signaling_nan(b)) + { + float_raise(status, float_flag_invalid); + } + return float_relation_unordered; + } + + if (aClass == float_denormal || bClass == float_denormal) + { + float_raise(status, float_flag_denormal); + } + + if ((a == b) || ((Bit32u) ((a | b)<<1) == 0)) return float_relation_equal; + + int aSign = extractFloat32Sign(a); + int bSign = extractFloat32Sign(b); + if (aSign != bSign) + return (aSign) ? float_relation_less : float_relation_greater; + + if (aSign ^ (a < b)) return float_relation_less; + return float_relation_greater; +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the double-precision floating-point value +| `a' to the 32-bit two's complement integer format. The conversion is +| performed according to the IEC/IEEE Standard for Binary Floating-Point +| Arithmetic - which means in particular that the conversion is rounded +| according to the current rounding mode. If `a' is a NaN or the +| conversion overflows, the integer indefinite value is returned. +*----------------------------------------------------------------------------*/ + +Bit32s float64_to_int32(float64 a, float_status_t &status) +{ + Bit64u aSig = extractFloat64Frac(a); + Bit16s aExp = extractFloat64Exp(a); + int aSign = extractFloat64Sign(a); + if ((aExp == 0x7FF) && aSig) aSign = 0; + if (aExp) aSig |= BX_CONST64(0x0010000000000000); + int shiftCount = 0x42C - aExp; + if (0 < shiftCount) aSig = shift64RightJamming(aSig, shiftCount); + return roundAndPackInt32(aSign, aSig, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the double-precision floating-point value +| `a' to the 32-bit two's complement integer format. The conversion is +| performed according to the IEC/IEEE Standard for Binary Floating-Point +| Arithmetic, except that the conversion is always rounded toward zero. +| If `a' is a NaN or the conversion overflows, the integer indefinite +| value is returned. +*----------------------------------------------------------------------------*/ + +Bit32s float64_to_int32_round_to_zero(float64 a, float_status_t &status) +{ + int aSign; + Bit16s aExp; + Bit64u aSig, savedASig; + Bit32s z; + int shiftCount; + + aSig = extractFloat64Frac(a); + aExp = extractFloat64Exp(a); + aSign = extractFloat64Sign(a); + if (0x41E < aExp) { + if ((aExp == 0x7FF) && aSig) aSign = 0; + goto invalid; + } + else if (aExp < 0x3FF) { + if (aExp || aSig) float_raise(status, float_flag_inexact); + return 0; + } + aSig |= BX_CONST64(0x0010000000000000); + shiftCount = 0x433 - aExp; + savedASig = aSig; + aSig >>= shiftCount; + z = (Bit32s) aSig; + if (aSign) z = -z; + if ((z < 0) ^ aSign) { + invalid: + float_raise(status, float_flag_invalid); + return (Bit32s)(int32_indefinite); + } + if ((aSig<>(-shiftCount); + if ((Bit64u) (aSig<<(shiftCount & 63))) { + float_raise(status, float_flag_inexact); + } + } + if (aSign) z = -z; + return z; +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the double-precision floating-point value +| `a' to the single-precision floating-point format. The conversion is +| performed according to the IEC/IEEE Standard for Binary Floating-Point +| Arithmetic. +*----------------------------------------------------------------------------*/ + +float32 float64_to_float32(float64 a, float_status_t &status) +{ + int aSign; + Bit16s aExp; + Bit64u aSig; + Bit32u zSig; + + aSig = extractFloat64Frac(a); + aExp = extractFloat64Exp(a); + aSign = extractFloat64Sign(a); + if (aExp == 0x7FF) { + if (aSig) return commonNaNToFloat32(float64ToCommonNaN(a, status)); + return packFloat32(aSign, 0xFF, 0); + } + if (aExp == 0) { + if (aSig == 0) return packFloat32(aSign, 0, 0); + float_raise(status, float_flag_denormal); + } + aSig = shift64RightJamming(aSig, 22); + zSig = (Bit32u) aSig; + if (aExp || zSig) { + zSig |= 0x40000000; + aExp -= 0x381; + } + return roundAndPackFloat32(aSign, aExp, zSig, status); +} + +/*---------------------------------------------------------------------------- +| Rounds the double-precision floating-point value `a' to an integer, and +| returns the result as a double-precision floating-point value. The +| operation is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float64 float64_round_to_int(float64 a, float_status_t &status) +{ + int aSign; + Bit16s aExp; + Bit64u lastBitMask, roundBitsMask; + int roundingMode; + float64 z; + + aExp = extractFloat64Exp(a); + if (0x433 <= aExp) { + if ((aExp == 0x7FF) && extractFloat64Frac(a)) { + return propagateFloat64NaN(a, status); + } + return a; + } + if (aExp < 0x3FF) { + if ((Bit64u) (a<<1) == 0) return a; + float_raise(status, float_flag_inexact); + aSign = extractFloat64Sign(a); + switch (get_float_rounding_mode(status)) { + case float_round_nearest_even: + if ((aExp == 0x3FE) && extractFloat64Frac(a)) { + return packFloat64(aSign, 0x3FF, 0); + } + break; + case float_round_down: + return aSign ? BX_CONST64(0xBFF0000000000000) : 0; + case float_round_up: + return + aSign ? BX_CONST64(0x8000000000000000) : BX_CONST64(0x3FF0000000000000); + } + return packFloat64(aSign, 0, 0); + } + lastBitMask = 1; + lastBitMask <<= 0x433 - aExp; + roundBitsMask = lastBitMask - 1; + z = a; + roundingMode = get_float_rounding_mode(status); + if (roundingMode == float_round_nearest_even) { + z += lastBitMask>>1; + if ((z & roundBitsMask) == 0) z &= ~lastBitMask; + } + else if (roundingMode != float_round_to_zero) { + if (extractFloat64Sign(z) ^ (roundingMode == float_round_up)) { + z += roundBitsMask; + } + } + z &= ~roundBitsMask; + if (z != a) float_raise(status, float_flag_inexact); + return z; +} + +/*---------------------------------------------------------------------------- +| Returns the result of adding the absolute values of the double-precision +| floating-point values `a' and `b'. If `zSign' is 1, the sum is negated +| before being returned. `zSign' is ignored if the result is a NaN. +| The addition is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +static float64 addFloat64Sigs(float64 a, float64 b, int zSign, float_status_t &status) +{ + Bit16s aExp, bExp, zExp; + Bit64u aSig, bSig, zSig; + Bit16s expDiff; + + aSig = extractFloat64Frac(a); + aExp = extractFloat64Exp(a); + bSig = extractFloat64Frac(b); + bExp = extractFloat64Exp(b); + + expDiff = aExp - bExp; + aSig <<= 9; + bSig <<= 9; + if (0 < expDiff) { + if (aExp == 0x7FF) { + if (aSig) return propagateFloat64NaN(a, b, status); + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return a; + } + if ((aExp == 0) && aSig) + float_raise(status, float_flag_denormal); + + if (bExp == 0) { + if (bSig) float_raise(status, float_flag_denormal); + --expDiff; + } + else bSig |= BX_CONST64(0x2000000000000000); + + bSig = shift64RightJamming(bSig, expDiff); + zExp = aExp; + } + else if (expDiff < 0) { + if (bExp == 0x7FF) { + if (bSig) return propagateFloat64NaN(a, b, status); + if (aSig && (aExp == 0)) float_raise(status, float_flag_denormal); + return packFloat64(zSign, 0x7FF, 0); + } + if ((bExp == 0) && bSig) + float_raise(status, float_flag_denormal); + + if (aExp == 0) { + if (aSig) float_raise(status, float_flag_denormal); + ++expDiff; + } + else aSig |= BX_CONST64(0x2000000000000000); + + aSig = shift64RightJamming(aSig, -expDiff); + zExp = bExp; + } + else { + if (aExp == 0x7FF) { + if (aSig | bSig) return propagateFloat64NaN(a, b, status); + return a; + } + if (aExp == 0) { + if (aSig | bSig) float_raise(status, float_flag_denormal); + return packFloat64(zSign, 0, (aSig + bSig)>>9); + } + zSig = BX_CONST64(0x4000000000000000) + aSig + bSig; + zExp = aExp; + goto roundAndPack; + } + aSig |= BX_CONST64(0x2000000000000000); + zSig = (aSig + bSig)<<1; + --zExp; + if ((Bit64s) zSig < 0) { + zSig = aSig + bSig; + ++zExp; + } + roundAndPack: + return roundAndPackFloat64(zSign, zExp, zSig, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of subtracting the absolute values of the double- +| precision floating-point values `a' and `b'. If `zSign' is 1, the +| difference is negated before being returned. `zSign' is ignored if the +| result is a NaN. The subtraction is performed according to the IEC/IEEE +| Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +static float64 subFloat64Sigs(float64 a, float64 b, int zSign, float_status_t &status) +{ + Bit16s aExp, bExp, zExp; + Bit64u aSig, bSig, zSig; + Bit16s expDiff; + + aSig = extractFloat64Frac(a); + aExp = extractFloat64Exp(a); + bSig = extractFloat64Frac(b); + bExp = extractFloat64Exp(b); + + expDiff = aExp - bExp; + aSig <<= 10; + bSig <<= 10; + if (0 < expDiff) goto aExpBigger; + if (expDiff < 0) goto bExpBigger; + if (aExp == 0x7FF) { + if (aSig | bSig) return propagateFloat64NaN(a, b, status); + float_raise(status, float_flag_invalid); + return float64_default_nan; + } + if (aExp == 0) { + if (aSig | bSig) float_raise(status, float_flag_denormal); + aExp = 1; + bExp = 1; + } + if (bSig < aSig) goto aBigger; + if (aSig < bSig) goto bBigger; + return packFloat64(get_float_rounding_mode(status) == float_round_down, 0, 0); + bExpBigger: + if (bExp == 0x7FF) { + if (bSig) return propagateFloat64NaN(a, b, status); + if (aSig && (aExp == 0)) float_raise(status, float_flag_denormal); + return packFloat64(zSign ^ 1, 0x7FF, 0); + } + if ((bExp == 0) && bSig) + float_raise(status, float_flag_denormal); + + if (aExp == 0) { + if (aSig) float_raise(status, float_flag_denormal); + ++expDiff; + } + else aSig |= BX_CONST64(0x4000000000000000); + + aSig = shift64RightJamming(aSig, -expDiff); + bSig |= BX_CONST64(0x4000000000000000); + bBigger: + zSig = bSig - aSig; + zExp = bExp; + zSign ^= 1; + goto normalizeRoundAndPack; + aExpBigger: + if (aExp == 0x7FF) { + if (aSig) return propagateFloat64NaN(a, b, status); + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return a; + } + if ((aExp == 0) && aSig) + float_raise(status, float_flag_denormal); + + if (bExp == 0) { + if (bSig) float_raise(status, float_flag_denormal); + --expDiff; + } + else bSig |= BX_CONST64(0x4000000000000000); + + bSig = shift64RightJamming(bSig, expDiff); + aSig |= BX_CONST64(0x4000000000000000); + aBigger: + zSig = aSig - bSig; + zExp = aExp; + normalizeRoundAndPack: + --zExp; + return normalizeRoundAndPackFloat64(zSign, zExp, zSig, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of adding the double-precision floating-point values `a' +| and `b'. The operation is performed according to the IEC/IEEE Standard for +| Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float64 float64_add(float64 a, float64 b, float_status_t &status) +{ + int aSign = extractFloat64Sign(a); + int bSign = extractFloat64Sign(b); + + if (aSign == bSign) { + return addFloat64Sigs(a, b, aSign, status); + } + else { + return subFloat64Sigs(a, b, aSign, status); + } +} + +/*---------------------------------------------------------------------------- +| Returns the result of subtracting the double-precision floating-point values +| `a' and `b'. The operation is performed according to the IEC/IEEE Standard +| for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float64 float64_sub(float64 a, float64 b, float_status_t &status) +{ + int aSign = extractFloat64Sign(a); + int bSign = extractFloat64Sign(b); + + if (aSign == bSign) { + return subFloat64Sigs(a, b, aSign, status); + } + else { + return addFloat64Sigs(a, b, aSign, status); + } +} + +/*---------------------------------------------------------------------------- +| Returns the result of multiplying the double-precision floating-point values +| `a' and `b'. The operation is performed according to the IEC/IEEE Standard +| for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float64 float64_mul(float64 a, float64 b, float_status_t &status) +{ + int aSign, bSign, zSign; + Bit16s aExp, bExp, zExp; + Bit64u aSig, bSig, zSig0, zSig1; + + aSig = extractFloat64Frac(a); + aExp = extractFloat64Exp(a); + aSign = extractFloat64Sign(a); + bSig = extractFloat64Frac(b); + bExp = extractFloat64Exp(b); + bSign = extractFloat64Sign(b); + zSign = aSign ^ bSign; + if (aExp == 0x7FF) { + if (aSig || ((bExp == 0x7FF) && bSig)) { + return propagateFloat64NaN(a, b, status); + } + if ((bExp | bSig) == 0) { + float_raise(status, float_flag_invalid); + return float64_default_nan; + } + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return packFloat64(zSign, 0x7FF, 0); + } + if (bExp == 0x7FF) { + if (bSig) return propagateFloat64NaN(a, b, status); + if ((aExp | aSig) == 0) { + float_raise(status, float_flag_invalid); + return float64_default_nan; + } + if (aSig && (aExp == 0)) float_raise(status, float_flag_denormal); + return packFloat64(zSign, 0x7FF, 0); + } + if (aExp == 0) { + if (aSig == 0) { + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return packFloat64(zSign, 0, 0); + } + float_raise(status, float_flag_denormal); + normalizeFloat64Subnormal(aSig, &aExp, &aSig); + } + if (bExp == 0) { + if (bSig == 0) return packFloat64(zSign, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloat64Subnormal(bSig, &bExp, &bSig); + } + zExp = aExp + bExp - 0x3FF; + aSig = (aSig | BX_CONST64(0x0010000000000000))<<10; + bSig = (bSig | BX_CONST64(0x0010000000000000))<<11; + mul64To128(aSig, bSig, &zSig0, &zSig1); + zSig0 |= (zSig1 != 0); + if (0 <= (Bit64s) (zSig0<<1)) { + zSig0 <<= 1; + --zExp; + } + return roundAndPackFloat64(zSign, zExp, zSig0, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of dividing the double-precision floating-point value `a' +| by the corresponding value `b'. The operation is performed according to +| the IEC/IEEE Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float64 float64_div(float64 a, float64 b, float_status_t &status) +{ + int aSign, bSign, zSign; + Bit16s aExp, bExp, zExp; + Bit64u aSig, bSig, zSig; + Bit64u rem0, rem1; + Bit64u term0, term1; + + aSig = extractFloat64Frac(a); + aExp = extractFloat64Exp(a); + aSign = extractFloat64Sign(a); + bSig = extractFloat64Frac(b); + bExp = extractFloat64Exp(b); + bSign = extractFloat64Sign(b); + zSign = aSign ^ bSign; + if (aExp == 0x7FF) { + if (aSig) return propagateFloat64NaN(a, b, status); + if (bExp == 0x7FF) { + if (bSig) return propagateFloat64NaN(a, b, status); + float_raise(status, float_flag_invalid); + return float64_default_nan; + } + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return packFloat64(zSign, 0x7FF, 0); + } + if (bExp == 0x7FF) { + if (bSig) return propagateFloat64NaN(a, b, status); + if (aSig && (aExp == 0)) float_raise(status, float_flag_denormal); + return packFloat64(zSign, 0, 0); + } + if (bExp == 0) { + if (bSig == 0) { + if ((aExp | aSig) == 0) { + float_raise(status, float_flag_invalid); + return float64_default_nan; + } + float_raise(status, float_flag_divbyzero); + return packFloat64(zSign, 0x7FF, 0); + } + float_raise(status, float_flag_denormal); + normalizeFloat64Subnormal(bSig, &bExp, &bSig); + } + if (aExp == 0) { + if (aSig == 0) return packFloat64(zSign, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloat64Subnormal(aSig, &aExp, &aSig); + } + zExp = aExp - bExp + 0x3FD; + aSig = (aSig | BX_CONST64(0x0010000000000000))<<10; + bSig = (bSig | BX_CONST64(0x0010000000000000))<<11; + if (bSig <= (aSig + aSig)) { + aSig >>= 1; + ++zExp; + } + zSig = estimateDiv128To64(aSig, 0, bSig); + if ((zSig & 0x1FF) <= 2) { + mul64To128(bSig, zSig, &term0, &term1); + sub128(aSig, 0, term0, term1, &rem0, &rem1); + while ((Bit64s) rem0 < 0) { + --zSig; + add128(rem0, rem1, 0, bSig, &rem0, &rem1); + } + zSig |= (rem1 != 0); + } + return roundAndPackFloat64(zSign, zExp, zSig, status); +} + +/*---------------------------------------------------------------------------- +| Returns the square root of the double-precision floating-point value `a'. +| The operation is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float64 float64_sqrt(float64 a, float_status_t &status) +{ + int aSign; + Bit16s aExp, zExp; + Bit64u aSig, zSig, doubleZSig; + Bit64u rem0, rem1, term0, term1; + + aSig = extractFloat64Frac(a); + aExp = extractFloat64Exp(a); + aSign = extractFloat64Sign(a); + if (aExp == 0x7FF) { + if (aSig) return propagateFloat64NaN(a, status); + if (! aSign) return a; + float_raise(status, float_flag_invalid); + return float64_default_nan; + } + if (aSign) { + if ((aExp | aSig) == 0) return a; + float_raise(status, float_flag_invalid); + return float64_default_nan; + } + if (aExp == 0) { + if (aSig == 0) return 0; + float_raise(status, float_flag_denormal); + normalizeFloat64Subnormal(aSig, &aExp, &aSig); + } + zExp = ((aExp - 0x3FF)>>1) + 0x3FE; + aSig |= BX_CONST64(0x0010000000000000); + zSig = estimateSqrt32(aExp, (Bit32u)(aSig>>21)); + aSig <<= 9 - (aExp & 1); + zSig = estimateDiv128To64(aSig, 0, zSig<<32) + (zSig<<30); + if ((zSig & 0x1FF) <= 5) { + doubleZSig = zSig<<1; + mul64To128(zSig, zSig, &term0, &term1); + sub128(aSig, 0, term0, term1, &rem0, &rem1); + while ((Bit64s) rem0 < 0) { + --zSig; + doubleZSig -= 2; + add128(rem0, rem1, zSig>>63, doubleZSig | 1, &rem0, &rem1); + } + zSig |= ((rem0 | rem1) != 0); + } + return roundAndPackFloat64(0, zExp, zSig, status); +} + +/*---------------------------------------------------------------------------- +| Determine double-precision floating-point number class +*----------------------------------------------------------------------------*/ + +float_class_t float64_class(float64 a) +{ + Bit16s aExp = extractFloat64Exp(a); + Bit64u aSig = extractFloat64Frac(a); + int aSign = extractFloat64Sign(a); + + if(aExp == 0x7FF) { + if (aSig == 0) + return (aSign) ? float_negative_inf : float_positive_inf; + + return float_NaN; + } + + if(aExp == 0) { + if (aSig == 0) + return float_zero; + return float_denormal; + } + + return float_normalized; +} + +/*---------------------------------------------------------------------------- +| Compare between two double precision floating point numbers. Returns +| 'float_relation_equal' if the operands are equal, 'float_relation_less' if +| the value 'a' is less than the corresponding value `b', +| 'float_relation_greater' if the value 'a' is greater than the corresponding +| value `b', or 'float_relation_unordered' otherwise. +*----------------------------------------------------------------------------*/ + +int float64_compare(float64 a, float64 b, float_status_t &status) +{ + float_class_t aClass = float64_class(a); + float_class_t bClass = float64_class(b); + + if (aClass == float_NaN || bClass == float_NaN) { + float_raise(status, float_flag_invalid); + return float_relation_unordered; + } + + if (aClass == float_denormal || bClass == float_denormal) + { + float_raise(status, float_flag_denormal); + } + + if ((a == b) || ((Bit64u) ((a | b)<<1) == 0)) return float_relation_equal; + + int aSign = extractFloat64Sign(a); + int bSign = extractFloat64Sign(b); + if (aSign != bSign) + return (aSign) ? float_relation_less : float_relation_greater; + + if (aSign ^ (a < b)) return float_relation_less; + return float_relation_greater; +} + +/*---------------------------------------------------------------------------- +| Compare between two double precision floating point numbers. Returns +| 'float_relation_equal' if the operands are equal, 'float_relation_less' if +| the value 'a' is less than the corresponding value `b', +| 'float_relation_greater' if the value 'a' is greater than the corresponding +| value `b', or 'float_relation_unordered' otherwise. Quiet NaNs do not cause +| an exception. +*----------------------------------------------------------------------------*/ + +int float64_compare_quiet(float64 a, float64 b, float_status_t &status) +{ + float_class_t aClass = float64_class(a); + float_class_t bClass = float64_class(b); + + if (aClass == float_NaN || bClass == float_NaN) + { + if (float64_is_signaling_nan(a) || float64_is_signaling_nan(b)) + { + float_raise(status, float_flag_invalid); + } + return float_relation_unordered; + } + + if (aClass == float_denormal || bClass == float_denormal) + { + float_raise(status, float_flag_denormal); + } + + if ((a == b) || ((Bit64u) ((a | b)<<1) == 0)) return float_relation_equal; + + int aSign = extractFloat64Sign(a); + int bSign = extractFloat64Sign(b); + if (aSign != bSign) + return (aSign) ? float_relation_less : float_relation_greater; + + if (aSign ^ (a < b)) return float_relation_less; + return float_relation_greater; +} + +#ifdef FLOATX80 + +/*---------------------------------------------------------------------------- +| Returns the result of converting the 32-bit two's complement integer `a' +| to the extended double-precision floating-point format. The conversion +| is performed according to the IEC/IEEE Standard for Binary Floating-Point +| Arithmetic. +*----------------------------------------------------------------------------*/ + +floatx80 int32_to_floatx80(Bit32s a) +{ + if (a == 0) return packFloatx80(0, 0, 0); + int zSign = (a < 0); + Bit32u absA = zSign ? -a : a; + int shiftCount = countLeadingZeros32(absA) + 32; + Bit64u zSig = absA; + return packFloatx80(zSign, 0x403E - shiftCount, zSig< 0x401E) goto invalid; + if (aExp < 0x3FFF) { + if (aExp || aSig) float_raise(status, float_flag_inexact); + return 0; + } + shiftCount = 0x403E - aExp; + savedASig = aSig; + aSig >>= shiftCount; + z = (Bit32s) aSig; + if (aSign) z = -z; + if ((z < 0) ^ aSign) { + invalid: + float_raise(status, float_flag_invalid); + return (Bit32s)(int32_indefinite); + } + if ((aSig<>(-shiftCount); + if ((Bit64u) (aSig<<(shiftCount & 63))) { + float_raise(status, float_flag_inexact); + } + if (aSign) z = -z; + return z; +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the extended double-precision floating- +| point value `a' to the single-precision floating-point format. The +| conversion is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float32 floatx80_to_float32(floatx80 a, float_status_t &status) +{ + Bit64u aSig = extractFloatx80Frac(a); + Bit32s aExp = extractFloatx80Exp(a); + int aSign = extractFloatx80Sign(a); + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a)) + { + float_raise(status, float_flag_invalid); + return float32_default_nan; + } + + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig<<1)) + return commonNaNToFloat32(floatx80ToCommonNaN(a, status)); + + return packFloat32(aSign, 0xFF, 0); + } + aSig = shift64RightJamming(aSig, 33); + if (aExp || aSig) aExp -= 0x3F81; + return roundAndPackFloat32(aSign, aExp, (Bit32u) aSig, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the extended double-precision floating- +| point value `a' to the double-precision floating-point format. The +| conversion is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float64 floatx80_to_float64(floatx80 a, float_status_t &status) +{ + Bit32s aExp; + Bit64u aSig, zSig; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a)) + { + float_raise(status, float_flag_invalid); + return float64_default_nan; + } + + aSig = extractFloatx80Frac(a); + aExp = extractFloatx80Exp(a); + int aSign = extractFloatx80Sign(a); + + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig<<1)) { + return commonNaNToFloat64(floatx80ToCommonNaN(a, status)); + } + return packFloat64(aSign, 0x7FF, 0); + } + zSig = shift64RightJamming(aSig, 1); + if (aExp || aSig) aExp -= 0x3C01; + return roundAndPackFloat64(aSign, aExp, zSig, status); +} + +/*---------------------------------------------------------------------------- +| Rounds the extended double-precision floating-point value `a' to an integer, +| and returns the result as an extended double-precision floating-point +| value. The operation is performed according to the IEC/IEEE Standard for +| Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +floatx80 floatx80_round_to_int(floatx80 a, float_status_t &status) +{ + int aSign; + Bit64u lastBitMask, roundBitsMask; + Bit8u roundingMode; + floatx80 z; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a)) + { + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + + Bit32s aExp = extractFloatx80Exp(a); + Bit64u aSig = extractFloatx80Frac(a); + if (0x403E <= aExp) { + if ((aExp == 0x7FFF) && (Bit64u) (aSig<<1)) { + return propagateFloatx80NaN(a, status); + } + return a; + } + if (aExp < 0x3FFF) { + if (aExp == 0) { + if ((aSig<<1) == 0) return a; + float_raise(status, float_flag_denormal); + } + float_raise(status, float_flag_inexact); + aSign = extractFloatx80Sign(a); + switch (get_float_rounding_mode(status)) { + case float_round_nearest_even: + if ((aExp == 0x3FFE) && (Bit64u) (aSig<<1)) { + set_float_rounding_up(status); + return packFloatx80(aSign, 0x3FFF, BX_CONST64(0x8000000000000000)); + } + break; + case float_round_down: + if (aSign) { + set_float_rounding_up(status); + return packFloatx80(1, 0x3FFF, BX_CONST64(0x8000000000000000)); + } + else { + return packFloatx80(0, 0, 0); + } + case float_round_up: + if (aSign) { + return packFloatx80(1, 0, 0); + } + else { + set_float_rounding_up(status); + return packFloatx80(0, 0x3FFF, BX_CONST64(0x8000000000000000)); + } + } + return packFloatx80(aSign, 0, 0); + } + lastBitMask = 1; + lastBitMask <<= 0x403E - aExp; + roundBitsMask = lastBitMask - 1; + z = a; + roundingMode = get_float_rounding_mode(status); + if (roundingMode == float_round_nearest_even) { + z.fraction += lastBitMask>>1; + if ((z.fraction & roundBitsMask) == 0) z.fraction &= ~lastBitMask; + } + else if (roundingMode != float_round_to_zero) { + if (extractFloatx80Sign(z) ^ (roundingMode == float_round_up)) + z.fraction += roundBitsMask; + } + z.fraction &= ~roundBitsMask; + if (z.fraction == 0) { + z.exp++; + z.fraction = BX_CONST64(0x8000000000000000); + } + if (z.fraction != a.fraction) { + float_raise(status, float_flag_inexact); + if (z.fraction > a.fraction || z.exp > a.exp) + set_float_rounding_up(status); + } + return z; +} + +/*---------------------------------------------------------------------------- +| Returns the result of adding the absolute values of the extended double- +| precision floating-point values `a' and `b'. If `zSign' is 1, the sum is +| negated before being returned. `zSign' is ignored if the result is a NaN. +| The addition is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +static floatx80 addFloatx80Sigs(floatx80 a, floatx80 b, int zSign, float_status_t &status) +{ + Bit32s aExp, bExp, zExp; + Bit64u aSig, bSig, zSig0, zSig1; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a) || floatx80_is_unsupported(b)) + { + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + + aSig = extractFloatx80Frac(a); + aExp = extractFloatx80Exp(a); + bSig = extractFloatx80Frac(b); + bExp = extractFloatx80Exp(b); + + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig<<1) || ((bExp == 0x7FFF) && (Bit64u) (bSig<<1))) + return propagateFloatx80NaN(a, b, status); + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return a; + } + if (bExp == 0x7FFF) { + if ((Bit64u) (bSig<<1)) return propagateFloatx80NaN(a, b, status); + if (aSig && (aExp == 0)) float_raise(status, float_flag_denormal); + return packFloatx80(zSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (aExp == 0) { + if (aSig == 0) { + if ((bExp == 0) && bSig) { + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(bSig, &bExp, &bSig); + } + return roundAndPackFloatx80(get_float_rounding_precision(status), + zSign, bExp, bSig, 0, status); + } + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(aSig, &aExp, &aSig); + } + if (bExp == 0) { + if (bSig == 0) + return roundAndPackFloatx80(get_float_rounding_precision(status), + zSign, aExp, aSig, 0, status); + + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(bSig, &bExp, &bSig); + } + Bit32s expDiff = aExp - bExp; + zExp = aExp; + if (0 < expDiff) { + shift64ExtraRightJamming(bSig, 0, expDiff, &bSig, &zSig1); + } + else if (expDiff < 0) { + shift64ExtraRightJamming(aSig, 0, -expDiff, &aSig, &zSig1); + zExp = bExp; + } + else { + zSig0 = aSig + bSig; + zSig1 = 0; + goto shiftRight1; + } + zSig0 = aSig + bSig; + if ((Bit64s) zSig0 < 0) goto roundAndPack; + shiftRight1: + shift64ExtraRightJamming(zSig0, zSig1, 1, &zSig0, &zSig1); + zSig0 |= BX_CONST64(0x8000000000000000); + zExp++; + roundAndPack: + return + roundAndPackFloatx80(get_float_rounding_precision(status), + zSign, zExp, zSig0, zSig1, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of subtracting the absolute values of the extended +| double-precision floating-point values `a' and `b'. If `zSign' is 1, the +| difference is negated before being returned. `zSign' is ignored if the +| result is a NaN. The subtraction is performed according to the IEC/IEEE +| Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +static floatx80 subFloatx80Sigs(floatx80 a, floatx80 b, int zSign, float_status_t &status) +{ + Bit32s aExp, bExp, zExp; + Bit64u aSig, bSig, zSig0, zSig1; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a) || floatx80_is_unsupported(b)) + { + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + + aSig = extractFloatx80Frac(a); + aExp = extractFloatx80Exp(a); + bSig = extractFloatx80Frac(b); + bExp = extractFloatx80Exp(b); + + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig<<1)) return propagateFloatx80NaN(a, b, status); + if (bExp == 0x7FFF) { + if ((Bit64u) (bSig<<1)) return propagateFloatx80NaN(a, b, status); + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return a; + } + if (bExp == 0x7FFF) { + if ((Bit64u) (bSig<<1)) return propagateFloatx80NaN(a, b, status); + if (aSig && (aExp == 0)) float_raise(status, float_flag_denormal); + return packFloatx80(zSign ^ 1, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (aExp == 0) { + if (aSig == 0) { + if (bExp == 0) { + if (bSig) { + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(bSig, &bExp, &bSig); + return roundAndPackFloatx80(get_float_rounding_precision(status), + zSign ^ 1, bExp, bSig, 0, status); + } + return packFloatx80(get_float_rounding_mode(status) == float_round_down, 0, 0); + } + return roundAndPackFloatx80(get_float_rounding_precision(status), + zSign ^ 1, bExp, bSig, 0, status); + } + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(aSig, &aExp, &aSig); + } + if (bExp == 0) { + if (bSig == 0) + return roundAndPackFloatx80(get_float_rounding_precision(status), + zSign, aExp, aSig, 0, status); + + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(bSig, &bExp, &bSig); + } + Bit32s expDiff = aExp - bExp; + if (0 < expDiff) { + shift128RightJamming(bSig, 0, expDiff, &bSig, &zSig1); + goto aBigger; + } + if (expDiff < 0) { + shift128RightJamming(aSig, 0, -expDiff, &aSig, &zSig1); + goto bBigger; + } + zSig1 = 0; + if (bSig < aSig) goto aBigger; + if (aSig < bSig) goto bBigger; + return packFloatx80(get_float_rounding_mode(status) == float_round_down, 0, 0); + bBigger: + sub128(bSig, 0, aSig, zSig1, &zSig0, &zSig1); + zExp = bExp; + zSign ^= 1; + goto normalizeRoundAndPack; + aBigger: + sub128(aSig, 0, bSig, zSig1, &zSig0, &zSig1); + zExp = aExp; + normalizeRoundAndPack: + return + normalizeRoundAndPackFloatx80(get_float_rounding_precision(status), + zSign, zExp, zSig0, zSig1, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of adding the extended double-precision floating-point +| values `a' and `b'. The operation is performed according to the IEC/IEEE +| Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +floatx80 floatx80_add(floatx80 a, floatx80 b, float_status_t &status) +{ + int aSign = extractFloatx80Sign(a); + int bSign = extractFloatx80Sign(b); + + if (aSign == bSign) + return addFloatx80Sigs(a, b, aSign, status); + else + return subFloatx80Sigs(a, b, aSign, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of subtracting the extended double-precision floating- +| point values `a' and `b'. The operation is performed according to the +| IEC/IEEE Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +floatx80 floatx80_sub(floatx80 a, floatx80 b, float_status_t &status) +{ + int aSign = extractFloatx80Sign(a); + int bSign = extractFloatx80Sign(b); + + if (aSign == bSign) + return subFloatx80Sigs(a, b, aSign, status); + else + return addFloatx80Sigs(a, b, aSign, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of multiplying the extended double-precision floating- +| point values `a' and `b'. The operation is performed according to the +| IEC/IEEE Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +floatx80 floatx80_mul(floatx80 a, floatx80 b, float_status_t &status) +{ + int aSign, bSign, zSign; + Bit32s aExp, bExp, zExp; + Bit64u aSig, bSig, zSig0, zSig1; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a) || floatx80_is_unsupported(b)) + { + invalid: + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + + aSig = extractFloatx80Frac(a); + aExp = extractFloatx80Exp(a); + aSign = extractFloatx80Sign(a); + bSig = extractFloatx80Frac(b); + bExp = extractFloatx80Exp(b); + bSign = extractFloatx80Sign(b); + zSign = aSign ^ bSign; + + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig<<1) || ((bExp == 0x7FFF) && (Bit64u) (bSig<<1))) { + return propagateFloatx80NaN(a, b, status); + } + if (bExp == 0) { + if (bSig == 0) goto invalid; + float_raise(status, float_flag_denormal); + } + return packFloatx80(zSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (bExp == 0x7FFF) { + if ((Bit64u) (bSig<<1)) return propagateFloatx80NaN(a, b, status); + if (aExp == 0) { + if (aSig == 0) goto invalid; + float_raise(status, float_flag_denormal); + } + return packFloatx80(zSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (aExp == 0) { + if (aSig == 0) { + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return packFloatx80(zSign, 0, 0); + } + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(aSig, &aExp, &aSig); + } + if (bExp == 0) { + if (bSig == 0) return packFloatx80(zSign, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(bSig, &bExp, &bSig); + } + zExp = aExp + bExp - 0x3FFE; + mul64To128(aSig, bSig, &zSig0, &zSig1); + if (0 < (Bit64s) zSig0) { + shortShift128Left(zSig0, zSig1, 1, &zSig0, &zSig1); + --zExp; + } + return + roundAndPackFloatx80(get_float_rounding_precision(status), + zSign, zExp, zSig0, zSig1, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of dividing the extended double-precision floating-point +| value `a' by the corresponding value `b'. The operation is performed +| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +floatx80 floatx80_div(floatx80 a, floatx80 b, float_status_t &status) +{ + int aSign, bSign, zSign; + Bit32s aExp, bExp, zExp; + Bit64u aSig, bSig, zSig0, zSig1; + Bit64u rem0, rem1, rem2, term0, term1, term2; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a) || floatx80_is_unsupported(b)) + { + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + + aSig = extractFloatx80Frac(a); + aExp = extractFloatx80Exp(a); + aSign = extractFloatx80Sign(a); + bSig = extractFloatx80Frac(b); + bExp = extractFloatx80Exp(b); + bSign = extractFloatx80Sign(b); + + zSign = aSign ^ bSign; + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig<<1)) return propagateFloatx80NaN(a, b, status); + if (bExp == 0x7FFF) { + if ((Bit64u) (bSig<<1)) return propagateFloatx80NaN(a, b, status); + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return packFloatx80(zSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (bExp == 0x7FFF) { + if ((Bit64u) (bSig<<1)) return propagateFloatx80NaN(a, b, status); + if (aSig && (aExp == 0)) float_raise(status, float_flag_denormal); + return packFloatx80(zSign, 0, 0); + } + if (bExp == 0) { + if (bSig == 0) { + if ((aExp | aSig) == 0) { + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + float_raise(status, float_flag_divbyzero); + return packFloatx80(zSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(bSig, &bExp, &bSig); + } + if (aExp == 0) { + if (aSig == 0) return packFloatx80(zSign, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(aSig, &aExp, &aSig); + } + zExp = aExp - bExp + 0x3FFE; + rem1 = 0; + if (bSig <= aSig) { + shift128Right(aSig, 0, 1, &aSig, &rem1); + ++zExp; + } + zSig0 = estimateDiv128To64(aSig, rem1, bSig); + mul64To128(bSig, zSig0, &term0, &term1); + sub128(aSig, rem1, term0, term1, &rem0, &rem1); + while ((Bit64s) rem0 < 0) { + --zSig0; + add128(rem0, rem1, 0, bSig, &rem0, &rem1); + } + zSig1 = estimateDiv128To64(rem1, 0, bSig); + if ((Bit64u) (zSig1<<1) <= 8) { + mul64To128(bSig, zSig1, &term1, &term2); + sub128(rem1, 0, term1, term2, &rem1, &rem2); + while ((Bit64s) rem1 < 0) { + --zSig1; + add128(rem1, rem2, 0, bSig, &rem1, &rem2); + } + zSig1 |= ((rem1 | rem2) != 0); + } + return + roundAndPackFloatx80(get_float_rounding_precision(status), + zSign, zExp, zSig0, zSig1, status); +} + +/*---------------------------------------------------------------------------- +| Returns the square root of the extended double-precision floating-point +| value `a'. The operation is performed according to the IEC/IEEE Standard +| for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +floatx80 floatx80_sqrt(floatx80 a, float_status_t &status) +{ + int aSign; + Bit32s aExp, zExp; + Bit64u aSig0, aSig1, zSig0, zSig1, doubleZSig0; + Bit64u rem0, rem1, rem2, rem3, term0, term1, term2, term3; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a)) + { + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + + aSig0 = extractFloatx80Frac(a); + aExp = extractFloatx80Exp(a); + aSign = extractFloatx80Sign(a); + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig0<<1)) return propagateFloatx80NaN(a, status); + if (! aSign) return a; + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + if (aSign) { + if ((aExp | aSig0) == 0) return a; + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + if (aExp == 0) { + if (aSig0 == 0) return packFloatx80(0, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(aSig0, &aExp, &aSig0); + } + zExp = ((aExp - 0x3FFF)>>1) + 0x3FFF; + zSig0 = estimateSqrt32(aExp, aSig0>>32); + shift128Right(aSig0, 0, 2 + (aExp & 1), &aSig0, &aSig1); + zSig0 = estimateDiv128To64(aSig0, aSig1, zSig0<<32) + (zSig0<<30); + doubleZSig0 = zSig0<<1; + mul64To128(zSig0, zSig0, &term0, &term1); + sub128(aSig0, aSig1, term0, term1, &rem0, &rem1); + while ((Bit64s) rem0 < 0) { + --zSig0; + doubleZSig0 -= 2; + add128(rem0, rem1, zSig0>>63, doubleZSig0 | 1, &rem0, &rem1); + } + zSig1 = estimateDiv128To64(rem1, 0, doubleZSig0); + if ((zSig1 & BX_CONST64(0x3FFFFFFFFFFFFFFF)) <= 5) { + if (zSig1 == 0) zSig1 = 1; + mul64To128(doubleZSig0, zSig1, &term1, &term2); + sub128(rem1, 0, term1, term2, &rem1, &rem2); + mul64To128(zSig1, zSig1, &term2, &term3); + sub192(rem1, rem2, 0, 0, term2, term3, &rem1, &rem2, &rem3); + while ((Bit64s) rem1 < 0) { + --zSig1; + shortShift128Left(0, zSig1, 1, &term2, &term3); + term3 |= 1; + term2 |= doubleZSig0; + add192(rem1, rem2, rem3, 0, term2, term3, &rem1, &rem2, &rem3); + } + zSig1 |= ((rem1 | rem2 | rem3) != 0); + } + shortShift128Left(0, zSig1, 1, &zSig0, &zSig1); + zSig0 |= doubleZSig0; + return + roundAndPackFloatx80(get_float_rounding_precision(status), + 0, zExp, zSig0, zSig1, status); +} + +#endif + +#ifdef FLOAT128 + +/*---------------------------------------------------------------------------- +| Returns the result of converting the extended double-precision floating- +| point value `a' to the quadruple-precision floating-point format. The +| conversion is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float128 floatx80_to_float128(floatx80 a, float_status_t &status) +{ + Bit64u zSig0, zSig1; + + Bit64u aSig = extractFloatx80Frac(a); + Bit32s aExp = extractFloatx80Exp(a); + int aSign = extractFloatx80Sign(a); + + if ((aExp == 0x7FFF) && (Bit64u) (aSig<<1)) + return commonNaNToFloat128(floatx80ToCommonNaN(a, status)); + + shift128Right(aSig<<1, 0, 16, &zSig0, &zSig1); + return packFloat128(aSign, aExp, zSig0, zSig1); +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the quadruple-precision floating-point +| value `a' to the extended double-precision floating-point format. The +| conversion is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +floatx80 float128_to_floatx80(float128 a, float_status_t &status) +{ + Bit32s aExp; + Bit64u aSig0, aSig1; + + aSig1 = extractFloat128Frac1(a); + aSig0 = extractFloat128Frac0(a); + aExp = extractFloat128Exp(a); + int aSign = extractFloat128Sign(a); + + if (aExp == 0x7FFF) { + if (aSig0 | aSig1) + return commonNaNToFloatx80(float128ToCommonNaN(a, status)); + + return packFloatx80(aSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + + if (aExp == 0) { + if ((aSig0 | aSig1) == 0) return packFloatx80(aSign, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloat128Subnormal(aSig0, aSig1, &aExp, &aSig0, &aSig1); + } + else aSig0 |= BX_CONST64(0x0001000000000000); + + shortShift128Left(aSig0, aSig1, 15, &aSig0, &aSig1); + return roundAndPackFloatx80(80, aSign, aExp, aSig0, aSig1, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of multiplying the extended double-precision floating- +| point value `a' and quadruple-precision floating point value `b'. The +| operation is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +floatx80 floatx80_mul(floatx80 a, float128 b, float_status_t &status) +{ + Bit32s aExp, bExp, zExp; + Bit64u aSig, bSig0, bSig1, zSig0, zSig1, zSig2; + int aSign, bSign, zSign; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a)) + { + invalid: + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + + aSig = extractFloatx80Frac(a); + aExp = extractFloatx80Exp(a); + aSign = extractFloatx80Sign(a); + bSig0 = extractFloat128Frac0(b); + bSig1 = extractFloat128Frac1(b); + bExp = extractFloat128Exp(b); + bSign = extractFloat128Sign(b); + + zSign = aSign ^ bSign; + + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig<<1) + || ((bExp == 0x7FFF) && (bSig0 | bSig1))) + { + floatx80 r = commonNaNToFloatx80(float128ToCommonNaN(b, status)); + return propagateFloatx80NaN(a, r, status); + } + if (bExp == 0) { + if ((bSig0 | bSig1) == 0) goto invalid; + float_raise(status, float_flag_denormal); + } + return packFloatx80(zSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (bExp == 0x7FFF) { + if (bSig0 | bSig1) { + floatx80 r = commonNaNToFloatx80(float128ToCommonNaN(b, status)); + return propagateFloatx80NaN(a, r, status); + } + if (aExp == 0) { + if (aSig == 0) goto invalid; + float_raise(status, float_flag_denormal); + } + return packFloatx80(zSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (aExp == 0) { + if (aSig == 0) { + if ((bExp == 0) && (bSig0 | bSig1)) float_raise(status, float_flag_denormal); + return packFloatx80(zSign, 0, 0); + } + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(aSig, &aExp, &aSig); + } + if (bExp == 0) { + if ((bSig0 | bSig1) == 0) return packFloatx80(zSign, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloat128Subnormal(bSig0, bSig1, &bExp, &bSig0, &bSig1); + } + else bSig0 |= BX_CONST64(0x0001000000000000); + + zExp = aExp + bExp - 0x3FFE; + shortShift128Left(bSig0, bSig1, 15, &bSig0, &bSig1); + mul128By64To192(bSig0, bSig1, aSig, &zSig0, &zSig1, &zSig2); + if (0 < (Bit64s) zSig0) { + shortShift128Left(zSig0, zSig1, 1, &zSig0, &zSig1); + --zExp; + } + return + roundAndPackFloatx80(get_float_rounding_precision(status), + zSign, zExp, zSig0, zSig1, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of adding the absolute values of the quadruple-precision +| floating-point values `a' and `b'. If `zSign' is 1, the sum is negated +| before being returned. `zSign' is ignored if the result is a NaN. +| The addition is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +static float128 addFloat128Sigs(float128 a, float128 b, int zSign, float_status_t &status) +{ + Bit32s aExp, bExp, zExp; + Bit64u aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2; + Bit32s expDiff; + + aSig1 = extractFloat128Frac1(a); + aSig0 = extractFloat128Frac0(a); + aExp = extractFloat128Exp(a); + bSig1 = extractFloat128Frac1(b); + bSig0 = extractFloat128Frac0(b); + bExp = extractFloat128Exp(b); + expDiff = aExp - bExp; + + if (0 < expDiff) { + if (aExp == 0x7FFF) { + if (aSig0 | aSig1) return propagateFloat128NaN(a, b, status); + return a; + } + if (bExp == 0) --expDiff; + else bSig0 |= BX_CONST64(0x0001000000000000); + shift128ExtraRightJamming(bSig0, bSig1, 0, expDiff, &bSig0, &bSig1, &zSig2); + zExp = aExp; + } + else if (expDiff < 0) { + if (bExp == 0x7FFF) { + if (bSig0 | bSig1) return propagateFloat128NaN(a, b, status); + return packFloat128(zSign, 0x7FFF, 0, 0); + } + if (aExp == 0) ++expDiff; + else aSig0 |= BX_CONST64(0x0001000000000000); + shift128ExtraRightJamming(aSig0, aSig1, 0, -expDiff, &aSig0, &aSig1, &zSig2); + zExp = bExp; + } + else { + if (aExp == 0x7FFF) { + if (aSig0 | aSig1 | bSig0 | bSig1) + return propagateFloat128NaN(a, b, status); + + return a; + } + add128(aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1); + if (aExp == 0) return packFloat128(zSign, 0, zSig0, zSig1); + zSig2 = 0; + zSig0 |= BX_CONST64(0x0002000000000000); + zExp = aExp; + goto shiftRight1; + } + aSig0 |= BX_CONST64(0x0001000000000000); + add128(aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1); + --zExp; + if (zSig0 < BX_CONST64(0x0002000000000000)) goto roundAndPack; + ++zExp; + shiftRight1: + shift128ExtraRightJamming(zSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2); + roundAndPack: + return roundAndPackFloat128(zSign, zExp, zSig0, zSig1, zSig2, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of subtracting the absolute values of the quadruple- +| precision floating-point values `a' and `b'. If `zSign' is 1, the +| difference is negated before being returned. `zSign' is ignored if the +| result is a NaN. The subtraction is performed according to the IEC/IEEE +| Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +static float128 subFloat128Sigs(float128 a, float128 b, int zSign, float_status_t &status) +{ + Bit32s aExp, bExp, zExp; + Bit64u aSig0, aSig1, bSig0, bSig1, zSig0, zSig1; + Bit32s expDiff; + + aSig1 = extractFloat128Frac1(a); + aSig0 = extractFloat128Frac0(a); + aExp = extractFloat128Exp(a); + bSig1 = extractFloat128Frac1(b); + bSig0 = extractFloat128Frac0(b); + bExp = extractFloat128Exp(b); + + expDiff = aExp - bExp; + shortShift128Left(aSig0, aSig1, 14, &aSig0, &aSig1); + shortShift128Left(bSig0, bSig1, 14, &bSig0, &bSig1); + if (0 < expDiff) goto aExpBigger; + if (expDiff < 0) goto bExpBigger; + if (aExp == 0x7FFF) { + if (aSig0 | aSig1 | bSig0 | bSig1) + return propagateFloat128NaN(a, b, status); + + float_raise(status, float_flag_invalid); + return float128_default_nan; + } + if (aExp == 0) { + aExp = 1; + bExp = 1; + } + if (bSig0 < aSig0) goto aBigger; + if (aSig0 < bSig0) goto bBigger; + if (bSig1 < aSig1) goto aBigger; + if (aSig1 < bSig1) goto bBigger; + return packFloat128(0, 0); + + bExpBigger: + if (bExp == 0x7FFF) { + if (bSig0 | bSig1) return propagateFloat128NaN(a, b, status); + return packFloat128(zSign ^ 1, 0x7FFF, 0, 0); + } + if (aExp == 0) ++expDiff; + else { + aSig0 |= BX_CONST64(0x4000000000000000); + } + shift128RightJamming(aSig0, aSig1, - expDiff, &aSig0, &aSig1); + bSig0 |= BX_CONST64(0x4000000000000000); + bBigger: + sub128(bSig0, bSig1, aSig0, aSig1, &zSig0, &zSig1); + zExp = bExp; + zSign ^= 1; + goto normalizeRoundAndPack; + aExpBigger: + if (aExp == 0x7FFF) { + if (aSig0 | aSig1) return propagateFloat128NaN(a, b, status); + return a; + } + if (bExp == 0) --expDiff; + else { + bSig0 |= BX_CONST64(0x4000000000000000); + } + shift128RightJamming(bSig0, bSig1, expDiff, &bSig0, &bSig1); + aSig0 |= BX_CONST64(0x4000000000000000); + aBigger: + sub128(aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1); + zExp = aExp; + normalizeRoundAndPack: + --zExp; + return normalizeRoundAndPackFloat128(zSign, zExp - 14, zSig0, zSig1, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of adding the quadruple-precision floating-point values +| `a' and `b'. The operation is performed according to the IEC/IEEE Standard +| for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float128 float128_add(float128 a, float128 b, float_status_t &status) +{ + int aSign = extractFloat128Sign(a); + int bSign = extractFloat128Sign(b); + + if (aSign == bSign) { + return addFloat128Sigs(a, b, aSign, status); + } + else { + return subFloat128Sigs(a, b, aSign, status); + } +} + +/*---------------------------------------------------------------------------- +| Returns the result of subtracting the quadruple-precision floating-point +| values `a' and `b'. The operation is performed according to the IEC/IEEE +| Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float128 float128_sub(float128 a, float128 b, float_status_t &status) +{ + int aSign = extractFloat128Sign(a); + int bSign = extractFloat128Sign(b); + + if (aSign == bSign) { + return subFloat128Sigs(a, b, aSign, status); + } + else { + return addFloat128Sigs(a, b, aSign, status); + } +} + +/*---------------------------------------------------------------------------- +| Returns the result of multiplying the quadruple-precision floating-point +| values `a' and `b'. The operation is performed according to the IEC/IEEE +| Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float128 float128_mul(float128 a, float128 b, float_status_t &status) +{ + int aSign, bSign, zSign; + Bit32s aExp, bExp, zExp; + Bit64u aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2, zSig3; + + aSig1 = extractFloat128Frac1(a); + aSig0 = extractFloat128Frac0(a); + aExp = extractFloat128Exp(a); + aSign = extractFloat128Sign(a); + bSig1 = extractFloat128Frac1(b); + bSig0 = extractFloat128Frac0(b); + bExp = extractFloat128Exp(b); + bSign = extractFloat128Sign(b); + + zSign = aSign ^ bSign; + if (aExp == 0x7FFF) { + if ((aSig0 | aSig1) || ((bExp == 0x7FFF) && (bSig0 | bSig1))) { + return propagateFloat128NaN(a, b, status); + } + if ((bExp | bSig0 | bSig1) == 0) { + float_raise(status, float_flag_invalid); + return float128_default_nan; + } + return packFloat128(zSign, 0x7FFF, 0, 0); + } + if (bExp == 0x7FFF) { + if (bSig0 | bSig1) return propagateFloat128NaN(a, b, status); + if ((aExp | aSig0 | aSig1) == 0) { + float_raise(status, float_flag_invalid); + return float128_default_nan; + } + return packFloat128(zSign, 0x7FFF, 0, 0); + } + if (aExp == 0) { + if ((aSig0 | aSig1) == 0) return packFloat128(zSign, 0, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloat128Subnormal(aSig0, aSig1, &aExp, &aSig0, &aSig1); + } + if (bExp == 0) { + if ((bSig0 | bSig1) == 0) return packFloat128(zSign, 0, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloat128Subnormal(bSig0, bSig1, &bExp, &bSig0, &bSig1); + } + zExp = aExp + bExp - 0x4000; + aSig0 |= BX_CONST64(0x0001000000000000); + shortShift128Left(bSig0, bSig1, 16, &bSig0, &bSig1); + mul128To256(aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1, &zSig2, &zSig3); + add128(zSig0, zSig1, aSig0, aSig1, &zSig0, &zSig1); + zSig2 |= (zSig3 != 0); + if (BX_CONST64(0x0002000000000000) <= zSig0) { + shift128ExtraRightJamming(zSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2); + ++zExp; + } + return roundAndPackFloat128(zSign, zExp, zSig0, zSig1, zSig2, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of dividing the quadruple-precision floating-point value +| `a' by the corresponding value `b'. The operation is performed according to +| the IEC/IEEE Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float128 float128_div(float128 a, float128 b, float_status_t &status) +{ + int aSign, bSign, zSign; + Bit32s aExp, bExp, zExp; + Bit64u aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2; + Bit64u rem0, rem1, rem2, rem3, term0, term1, term2, term3; + + aSig1 = extractFloat128Frac1(a); + aSig0 = extractFloat128Frac0(a); + aExp = extractFloat128Exp(a); + aSign = extractFloat128Sign(a); + bSig1 = extractFloat128Frac1(b); + bSig0 = extractFloat128Frac0(b); + bExp = extractFloat128Exp(b); + bSign = extractFloat128Sign(b); + + zSign = aSign ^ bSign; + if (aExp == 0x7FFF) { + if (aSig0 | aSig1) return propagateFloat128NaN(a, b, status); + if (bExp == 0x7FFF) { + if (bSig0 | bSig1) return propagateFloat128NaN(a, b, status); + float_raise(status, float_flag_invalid); + return float128_default_nan; + } + return packFloat128(zSign, 0x7FFF, 0, 0); + } + if (bExp == 0x7FFF) { + if (bSig0 | bSig1) return propagateFloat128NaN(a, b, status); + return packFloat128(zSign, 0, 0, 0); + } + if (bExp == 0) { + if ((bSig0 | bSig1) == 0) { + if ((aExp | aSig0 | aSig1) == 0) { + float_raise(status, float_flag_invalid); + return float128_default_nan; + } + float_raise(status, float_flag_divbyzero); + return packFloat128(zSign, 0x7FFF, 0, 0); + } + float_raise(status, float_flag_denormal); + normalizeFloat128Subnormal(bSig0, bSig1, &bExp, &bSig0, &bSig1); + } + if (aExp == 0) { + if ((aSig0 | aSig1) == 0) return packFloat128(zSign, 0, 0, 0); + float_raise(status, float_flag_denormal); + normalizeFloat128Subnormal(aSig0, aSig1, &aExp, &aSig0, &aSig1); + } + zExp = aExp - bExp + 0x3FFD; + shortShift128Left( + aSig0 | BX_CONST64(0x0001000000000000), aSig1, 15, &aSig0, &aSig1); + shortShift128Left( + bSig0 | BX_CONST64(0x0001000000000000), bSig1, 15, &bSig0, &bSig1); + if (le128(bSig0, bSig1, aSig0, aSig1)) { + shift128Right(aSig0, aSig1, 1, &aSig0, &aSig1); + ++zExp; + } + zSig0 = estimateDiv128To64(aSig0, aSig1, bSig0); + mul128By64To192(bSig0, bSig1, zSig0, &term0, &term1, &term2); + sub192(aSig0, aSig1, 0, term0, term1, term2, &rem0, &rem1, &rem2); + while ((Bit64s) rem0 < 0) { + --zSig0; + add192(rem0, rem1, rem2, 0, bSig0, bSig1, &rem0, &rem1, &rem2); + } + zSig1 = estimateDiv128To64(rem1, rem2, bSig0); + if ((zSig1 & 0x3FFF) <= 4) { + mul128By64To192(bSig0, bSig1, zSig1, &term1, &term2, &term3); + sub192(rem1, rem2, 0, term1, term2, term3, &rem1, &rem2, &rem3); + while ((Bit64s) rem1 < 0) { + --zSig1; + add192(rem1, rem2, rem3, 0, bSig0, bSig1, &rem1, &rem2, &rem3); + } + zSig1 |= ((rem1 | rem2 | rem3) != 0); + } + shift128ExtraRightJamming(zSig0, zSig1, 0, 15, &zSig0, &zSig1, &zSig2); + return roundAndPackFloat128(zSign, zExp, zSig0, zSig1, zSig2, status); +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the 64-bit two's complement integer `a' to +| the quadruple-precision floating-point format. The conversion is performed +| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +float128 int64_to_float128(Bit64s a) +{ + Bit64u zSig0, zSig1; + + if (a == 0) return packFloat128(0, 0, 0, 0); + int zSign = (a < 0); + Bit64u absA = zSign ? - a : a; + Bit8u shiftCount = countLeadingZeros64(absA) + 49; + Bit32s zExp = 0x406E - shiftCount; + if (64 <= shiftCount) { + zSig1 = 0; + zSig0 = absA; + shiftCount -= 64; + } + else { + zSig1 = absA; + zSig0 = 0; + } + shortShift128Left(zSig0, zSig1, shiftCount, &zSig0, &zSig1); + return packFloat128(zSign, zExp, zSig0, zSig1); +} + +#endif diff --git a/bochs/fpu/softfloat.h b/bochs/fpu/softfloat.h new file mode 100755 index 00000000..03391a4b --- /dev/null +++ b/bochs/fpu/softfloat.h @@ -0,0 +1,339 @@ +/*============================================================================ +This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic +Package, Release 2b. + +Written by John R. Hauser. This work was made possible in part by the +International Computer Science Institute, located at Suite 600, 1947 Center +Street, Berkeley, California 94704. Funding was partially provided by the +National Science Foundation under grant MIP-9311980. The original version +of this code was written as part of a project to build a fixed-point vector +processor in collaboration with the University of California at Berkeley, +overseen by Profs. Nelson Morgan and John Wawrzynek. More information +is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ +arithmetic/SoftFloat.html'. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +/*============================================================================ + * Adapted for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#include /* generated by configure script from config.h.in */ + +#ifndef _SOFTFLOAT_H_ +#define _SOFTFLOAT_H_ + +#define FLOATX80 + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE floating-point types. +*----------------------------------------------------------------------------*/ +typedef Bit32u float32; +typedef Bit64u float64; + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE floating-point class. +*----------------------------------------------------------------------------*/ +typedef enum { + float_zero, + float_NaN, + float_negative_inf, + float_positive_inf, + float_denormal, + float_normalized +} float_class_t; + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE floating-point NaN operands handling mode. +*----------------------------------------------------------------------------*/ +enum float_nan_handling_mode_t { + float_larger_significand_nan = 0, // this mode used by x87 FPU + float_first_operand_nan = 1 // this mode used by SSE +}; + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE floating-point rounding mode. +*----------------------------------------------------------------------------*/ +enum float_round_t { + float_round_nearest_even = 0, + float_round_down = 1, + float_round_up = 2, + float_round_to_zero = 3 +}; + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE floating-point exception flags. +*----------------------------------------------------------------------------*/ +enum float_exception_flag_t { + float_flag_invalid = 0x01, + float_flag_denormal = 0x02, + float_flag_divbyzero = 0x04, + float_flag_overflow = 0x08, + float_flag_underflow = 0x10, + float_flag_inexact = 0x20 +}; + +#ifdef FLOATX80 +#define RAISE_SW_C1 0x0200 +#endif + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE floating-point ordering relations +*----------------------------------------------------------------------------*/ +enum { + float_relation_less = -1, + float_relation_equal = 0, + float_relation_greater = 1, + float_relation_unordered = 2 +}; + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE floating-point status structure. +*----------------------------------------------------------------------------*/ +struct float_status_t +{ +#ifdef FLOATX80 + int float_rounding_precision; /* floatx80 only */ +#endif + int float_rounding_mode; + int float_exception_flags; + int float_exception_masks; + int float_nan_handling_mode; /* flag register */ + int flush_underflow_to_zero; /* flag register */ +}; + +/*---------------------------------------------------------------------------- +| Routine to raise any or all of the software IEC/IEEE floating-point +| exception flags. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE void float_raise(float_status_t &status, int flags) +{ + status.float_exception_flags |= flags; +} + +/*---------------------------------------------------------------------------- +| Routine to check if any or all of the software IEC/IEEE floating-point +| exceptions are masked. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int float_exception_masked(float_status_t &status, int flag) +{ + return status.float_exception_masks & flag; +} + +/*---------------------------------------------------------------------------- +| Returns current floating point rounding mode specified by status word. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int get_float_rounding_mode(float_status_t &status) +{ + return status.float_rounding_mode; +} + +/*---------------------------------------------------------------------------- +| Returns current floating point precision (floatx80 only). +*----------------------------------------------------------------------------*/ + +#ifdef FLOATX80 +BX_CPP_INLINE int get_float_rounding_precision(float_status_t &status) +{ + return status.float_rounding_precision; +} +#endif + +/*---------------------------------------------------------------------------- +| Returns current floating point NaN operands handling mode specified +| by status word. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int get_float_nan_handling_mode(float_status_t &status) +{ + return status.float_nan_handling_mode; +} + +/*---------------------------------------------------------------------------- +| Raise floating point precision lost up flag (floatx80 only). +*----------------------------------------------------------------------------*/ + +#ifdef FLOATX80 +BX_CPP_INLINE void set_float_rounding_up(float_status_t &status) +{ + status.float_exception_flags |= (float_flag_inexact | RAISE_SW_C1); +} +#endif + +/*---------------------------------------------------------------------------- +| Returns 1 if the feature is supported; +| otherwise returns 0. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE int get_flush_underflow_to_zero(float_status_t &status) +{ + return status.flush_underflow_to_zero; +} + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE integer-to-floating-point conversion routines. +*----------------------------------------------------------------------------*/ +float32 int32_to_float32(Bit32s, float_status_t &status); +float64 int32_to_float64(Bit32s); +float32 int64_to_float32(Bit64s, float_status_t &status); +float64 int64_to_float64(Bit64s, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE single-precision conversion routines. +*----------------------------------------------------------------------------*/ +Bit32s float32_to_int32(float32, float_status_t &status); +Bit32s float32_to_int32_round_to_zero(float32, float_status_t &status); +Bit64s float32_to_int64(float32, float_status_t &status); +Bit64s float32_to_int64_round_to_zero(float32, float_status_t &status); +float64 float32_to_float64(float32, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE single-precision operations. +*----------------------------------------------------------------------------*/ +float32 float32_round_to_int(float32, float_status_t &status); +float32 float32_add(float32, float32, float_status_t &status); +float32 float32_sub(float32, float32, float_status_t &status); +float32 float32_mul(float32, float32, float_status_t &status); +float32 float32_div(float32, float32, float_status_t &status); +float32 float32_sqrt(float32, float_status_t &status); + +int float32_compare(float32, float32, float_status_t &status); +int float32_compare_quiet(float32, float32, float_status_t &status); + +float_class_t float32_class(float32); +int float32_is_signaling_nan(float32); +int float32_is_nan(float32); + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE double-precision conversion routines. +*----------------------------------------------------------------------------*/ +Bit32s float64_to_int32(float64, float_status_t &status); +Bit32s float64_to_int32_round_to_zero(float64, float_status_t &status); +Bit64s float64_to_int64(float64, float_status_t &status); +Bit64s float64_to_int64_round_to_zero(float64, float_status_t &status); +float32 float64_to_float32(float64, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE double-precision operations. +*----------------------------------------------------------------------------*/ +float64 float64_round_to_int(float64, float_status_t &status); +float64 float64_add(float64, float64, float_status_t &status); +float64 float64_sub(float64, float64, float_status_t &status); +float64 float64_mul(float64, float64, float_status_t &status); +float64 float64_div(float64, float64, float_status_t &status); +float64 float64_sqrt(float64, float_status_t &status); + +int float64_compare(float64, float64, float_status_t &status); +int float64_compare_quiet(float64, float64, float_status_t &status); + +float_class_t float64_class(float64); +int float64_is_signaling_nan(float64); +int float64_is_nan(float64); + +#ifdef FLOATX80 + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE floating-point types. +*----------------------------------------------------------------------------*/ + +#ifdef BX_BIG_ENDIAN +struct floatx80 { // leave alignment to compiler + Bit16u exp; + Bit64u fraction; +}; +#else +struct floatx80 { + Bit64u fraction; + Bit16u exp; +}; +#endif + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE integer-to-floating-point conversion routines. +*----------------------------------------------------------------------------*/ +floatx80 int32_to_floatx80(Bit32s); +floatx80 int64_to_floatx80(Bit64s); + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE extended double-precision conversion routines. +*----------------------------------------------------------------------------*/ +floatx80 float32_to_floatx80(float32, float_status_t &status); +floatx80 float64_to_floatx80(float64, float_status_t &status); + +Bit32s floatx80_to_int32(floatx80, float_status_t &status); +Bit32s floatx80_to_int32_round_to_zero(floatx80, float_status_t &status); +Bit64s floatx80_to_int64(floatx80, float_status_t &status); +Bit64s floatx80_to_int64_round_to_zero(floatx80, float_status_t &status); + +float32 floatx80_to_float32(floatx80, float_status_t &status); +float64 floatx80_to_float64(floatx80, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE extended double-precision operations. +*----------------------------------------------------------------------------*/ +floatx80 floatx80_round_to_int(floatx80, float_status_t &status); +floatx80 floatx80_add(floatx80, floatx80, float_status_t &status); +floatx80 floatx80_sub(floatx80, floatx80, float_status_t &status); +floatx80 floatx80_mul(floatx80, floatx80, float_status_t &status); +floatx80 floatx80_div(floatx80, floatx80, float_status_t &status); +floatx80 floatx80_sqrt(floatx80, float_status_t &status); + +float_class_t floatx80_class(floatx80); +int floatx80_is_signaling_nan(floatx80); +int floatx80_is_nan(floatx80); + +#endif /* FLOATX80 */ + +#ifdef FLOAT128 + +#ifdef BX_BIG_ENDIAN +struct float128 { + Bit64u hi, lo; +}; +#else +struct float128 { + Bit64u lo, hi; +}; +#endif + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE quadruple-precision conversion routines. +*----------------------------------------------------------------------------*/ +float128 floatx80_to_float128(floatx80 a, float_status_t &status); +floatx80 float128_to_floatx80(float128 a, float_status_t &status); + +float128 int64_to_float128(Bit64s a); + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE extended double-precision operations. +*----------------------------------------------------------------------------*/ +floatx80 floatx80_mul(floatx80 a, float128 b, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE quadruple-precision operations. +*----------------------------------------------------------------------------*/ +float128 float128_add(float128 a, float128 b, float_status_t &status); +float128 float128_sub(float128 a, float128 b, float_status_t &status); +float128 float128_mul(float128 a, float128 b, float_status_t &status); +float128 float128_div(float128 a, float128 b, float_status_t &status); + +#endif /* FLOAT128 */ + +#endif diff --git a/bochs/fpu/softfloatx80.cc b/bochs/fpu/softfloatx80.cc new file mode 100755 index 00000000..b3358659 --- /dev/null +++ b/bochs/fpu/softfloatx80.cc @@ -0,0 +1,363 @@ +/*============================================================================ +This source file is an extension to the SoftFloat IEC/IEEE Floating-point +Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) +floating point emulation. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +/*============================================================================ + * Written for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#include "softfloatx80.h" +#include "softfloat-round-pack.h" +#include "softfloat-macros.h" + +/*---------------------------------------------------------------------------- +| Returns the result of converting the extended double-precision floating- +| point value `a' to the 16-bit two's complement integer format. The +| conversion is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic - which means in particular that the conversion +| is rounded according to the current rounding mode. If `a' is a NaN or the +| conversion overflows, the integer indefinite value is returned. +*----------------------------------------------------------------------------*/ + +Bit16s floatx80_to_int16(floatx80 a, float_status_t &status) +{ + if (floatx80_is_unsupported(a)) + { + float_raise(status, float_flag_invalid); + return int16_indefinite; + } + + Bit32s v32 = floatx80_to_int32(a, status); + + if ((v32 > 32767) || (v32 < -32768)) { + status.float_exception_flags = float_flag_invalid; // throw way other flags + return int16_indefinite; + } + + return (Bit16s) v32; +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the extended double-precision floating- +| point value `a' to the 16-bit two's complement integer format. The +| conversion is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic, except that the conversion is always rounded +| toward zero. If `a' is a NaN or the conversion overflows, the integer +| indefinite value is returned. +*----------------------------------------------------------------------------*/ + +Bit16s floatx80_to_int16_round_to_zero(floatx80 a, float_status_t &status) +{ + if (floatx80_is_unsupported(a)) + { + float_raise(status, float_flag_invalid); + return int16_indefinite; + } + + Bit32s v32 = floatx80_to_int32_round_to_zero(a, status); + + if ((v32 > 32767) || (v32 < -32768)) { + status.float_exception_flags = float_flag_invalid; // throw way other flags + return int16_indefinite; + } + + return (Bit16s) v32; +} + +/*---------------------------------------------------------------------------- +| Separate the source extended double-precision floating point value `a' +| into its exponent and significand, store the significant back to the +| 'a' and return the exponent. The operation performed is a superset of +| the IEC/IEEE recommended logb(x) function. +*----------------------------------------------------------------------------*/ + +floatx80 floatx80_extract(floatx80 &a, float_status_t &status) +{ + Bit64u aSig = extractFloatx80Frac(a); + Bit32s aExp = extractFloatx80Exp(a); + int aSign = extractFloatx80Sign(a); + + if (floatx80_is_unsupported(a)) + { + float_raise(status, float_flag_invalid); + a = floatx80_default_nan; + return a; + } + + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig<<1)) + { + a = propagateFloatx80NaN(a, status); + return a; + } + return packFloatx80(0, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (aExp == 0) + { + if (aSig == 0) { + float_raise(status, float_flag_divbyzero); + a = packFloatx80(aSign, 0, 0); + return packFloatx80(1, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(aSig, &aExp, &aSig); + } + + a.exp = (aSign << 15) + 0x3FFF; + a.fraction = aSig; + return int32_to_floatx80(aExp - 0x3FFF); +} + +/*---------------------------------------------------------------------------- +| Scales extended double-precision floating-point value in operand `a' by +| value `b'. The function truncates the value in the second operand 'b' to +| an integral value and adds that value to the exponent of the operand 'a'. +| The operation performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +floatx80 floatx80_scale(floatx80 a, floatx80 b, float_status_t &status) +{ + Bit32s aExp, bExp; + Bit64u aSig, bSig; + + // handle unsupported extended double-precision floating encodings + if (floatx80_is_unsupported(a) || floatx80_is_unsupported(b)) + { + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + + aSig = extractFloatx80Frac(a); + aExp = extractFloatx80Exp(a); + int aSign = extractFloatx80Sign(a); + bSig = extractFloatx80Frac(b); + bExp = extractFloatx80Exp(b); + int bSign = extractFloatx80Sign(b); + + if (aExp == 0x7FFF) { + if ((Bit64u) (aSig<<1) || ((bExp == 0x7FFF) && (Bit64u) (bSig<<1))) + { + return propagateFloatx80NaN(a, b, status); + } + if ((bExp == 0x7FFF) && bSign) { + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + return a; + } + if (bExp == 0x7FFF) { + if ((Bit64u) (bSig<<1)) return propagateFloatx80NaN(a, b, status); + if ((aExp | aSig) == 0) { + if (! bSign) { + float_raise(status, float_flag_invalid); + return floatx80_default_nan; + } + return a; + } + if (aSig && (aExp == 0)) float_raise(status, float_flag_denormal); + if (bSign) return packFloatx80(aSign, 0, 0); + return packFloatx80(aSign, 0x7FFF, BX_CONST64(0x8000000000000000)); + } + if (aExp == 0) { + if (bSig && (bExp == 0)) float_raise(status, float_flag_denormal); + if (aSig == 0) return a; + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(aSig, &aExp, &aSig); + if (bExp < 0x3FFF) + return normalizeRoundAndPackFloatx80(80, aSign, aExp, aSig, 0, status); + } + if (bExp == 0) { + if (bSig == 0) return a; + float_raise(status, float_flag_denormal); + normalizeFloatx80Subnormal(bSig, &bExp, &bSig); + } + + if (bExp > 0x400E) { + /* generate appropriate overflow/underflow */ + return roundAndPackFloatx80(80, aSign, + bSign ? -0x3FFF : 0x7FFF, aSig, 0, status); + } + + if (bExp < 0x3FFF) return a; + + int shiftCount = 0x403E - bExp; + bSig >>= shiftCount; + Bit32s scale = (Bit32s) bSig; + if (bSign) scale = -scale; /* -32768..32767 */ + return + roundAndPackFloatx80(80, aSign, aExp+scale, aSig, 0, status); +} + +/*---------------------------------------------------------------------------- +| Determine extended-precision floating-point number class. +*----------------------------------------------------------------------------*/ + +float_class_t floatx80_class(floatx80 a) +{ + Bit32s aExp = extractFloatx80Exp(a); + Bit64u aSig = extractFloatx80Frac(a); + + if(aExp == 0) { + if (aSig == 0) + return float_zero; + + /* denormal or pseudo-denormal */ + return float_denormal; + } + + /* valid numbers have the MS bit set */ + if (!(aSig & BX_CONST64(0x8000000000000000))) + return float_NaN; /* report unsupported as NaNs */ + + if(aExp == 0x7fff) { + int aSign = extractFloatx80Sign(a); + + if (((Bit64u) (aSig<< 1)) == 0) + return (aSign) ? float_negative_inf : float_positive_inf; + + return float_NaN; + } + + return float_normalized; +} + +/*---------------------------------------------------------------------------- +| Compare between two extended precision floating point numbers. Returns +| 'float_relation_equal' if the operands are equal, 'float_relation_less' if +| the value 'a' is less than the corresponding value `b', +| 'float_relation_greater' if the value 'a' is greater than the corresponding +| value `b', or 'float_relation_unordered' otherwise. +*----------------------------------------------------------------------------*/ + +int floatx80_compare(floatx80 a, floatx80 b, float_status_t &status) +{ + float_class_t aClass = floatx80_class(a); + float_class_t bClass = floatx80_class(b); + + if (aClass == float_NaN || bClass == float_NaN) + { + float_raise(status, float_flag_invalid); + return float_relation_unordered; + } + + if (aClass == float_denormal || bClass == float_denormal) + { + float_raise(status, float_flag_denormal); + } + + int aSign = extractFloatx80Sign(a); + int bSign = extractFloatx80Sign(b); + + if (aClass == float_zero) { + if (bClass == float_zero) return float_relation_equal; + return bSign ? float_relation_greater : float_relation_less; + } + + if (bClass == float_zero || aSign != bSign) { + return aSign ? float_relation_less : float_relation_greater; + } + + Bit64u aSig = extractFloatx80Frac(a); + Bit32s aExp = extractFloatx80Exp(a); + Bit64u bSig = extractFloatx80Frac(b); + Bit32s bExp = extractFloatx80Exp(b); + + if (aClass == float_denormal) + normalizeFloatx80Subnormal(aSig, &aExp, &aSig); + + if (bClass == float_denormal) + normalizeFloatx80Subnormal(bSig, &bExp, &bSig); + + if (aExp == bExp && aSig == bSig) + return float_relation_equal; + + int less_than = + aSign ? ((bExp < aExp) || ((bExp == aExp) && (bSig < aSig))) + : ((aExp < bExp) || ((aExp == bExp) && (aSig < bSig))); + + if (less_than) return float_relation_less; + return float_relation_greater; +} + +/*---------------------------------------------------------------------------- +| Compare between two extended precision floating point numbers. Returns +| 'float_relation_equal' if the operands are equal, 'float_relation_less' if +| the value 'a' is less than the corresponding value `b', +| 'float_relation_greater' if the value 'a' is greater than the corresponding +| value `b', or 'float_relation_unordered' otherwise. Quiet NaNs do not cause +| an exception. +*----------------------------------------------------------------------------*/ + +int floatx80_compare_quiet(floatx80 a, floatx80 b, float_status_t &status) +{ + float_class_t aClass = floatx80_class(a); + float_class_t bClass = floatx80_class(b); + + if (aClass == float_NaN || bClass == float_NaN) + { + if (floatx80_is_unsupported(a) || floatx80_is_unsupported(b)) + float_raise(status, float_flag_invalid); + + if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) + float_raise(status, float_flag_invalid); + + return float_relation_unordered; + } + + if (aClass == float_denormal || bClass == float_denormal) + { + float_raise(status, float_flag_denormal); + } + + int aSign = extractFloatx80Sign(a); + int bSign = extractFloatx80Sign(b); + + if (aClass == float_zero) { + if (bClass == float_zero) return float_relation_equal; + return bSign ? float_relation_greater : float_relation_less; + } + + if (bClass == float_zero || aSign != bSign) { + return aSign ? float_relation_less : float_relation_greater; + } + + Bit64u aSig = extractFloatx80Frac(a); + Bit32s aExp = extractFloatx80Exp(a); + Bit64u bSig = extractFloatx80Frac(b); + Bit32s bExp = extractFloatx80Exp(b); + + if (aClass == float_denormal) + normalizeFloatx80Subnormal(aSig, &aExp, &aSig); + + if (bClass == float_denormal) + normalizeFloatx80Subnormal(bSig, &bExp, &bSig); + + if (aExp == bExp && aSig == bSig) + return float_relation_equal; + + int less_than = + aSign ? ((bExp < aExp) || ((bExp == aExp) && (bSig < aSig))) + : ((aExp < bExp) || ((aExp == bExp) && (aSig < bSig))); + + if (less_than) return float_relation_less; + return float_relation_greater; +} diff --git a/bochs/fpu/softfloatx80.h b/bochs/fpu/softfloatx80.h new file mode 100755 index 00000000..0c94f135 --- /dev/null +++ b/bochs/fpu/softfloatx80.h @@ -0,0 +1,100 @@ +/*============================================================================ +This source file is an extension to the SoftFloat IEC/IEEE Floating-point +Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) +floating point emulation. + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has +been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES +RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS +AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, +COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE +EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE +INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR +OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) the source code for the derivative work includes prominent notice that +the work is derivative, and (2) the source code includes prominent notice with +these four paragraphs for those parts of this code that are retained. +=============================================================================*/ + +/*============================================================================ + * Written for Bochs (x86 achitecture simulator) by + * Stanislav Shwartsman [sshwarts at sourceforge net] + * ==========================================================================*/ + +#ifndef _SOFTFLOATX80_EXTENSIONS_H_ +#define _SOFTFLOATX80_EXTENSIONS_H_ + +#include "softfloat.h" +#include "softfloat-specialize.h" + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE integer-to-floating-point conversion routines. +*----------------------------------------------------------------------------*/ + +Bit16s floatx80_to_int16(floatx80, float_status_t &status); +Bit16s floatx80_to_int16_round_to_zero(floatx80, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE extended double-precision operations. +*----------------------------------------------------------------------------*/ + +float_class_t floatx80_class(floatx80); +floatx80 floatx80_extract(floatx80 &a, float_status_t &status); +floatx80 floatx80_scale(floatx80 a, floatx80 b, float_status_t &status); +int floatx80_remainder(floatx80 a, floatx80 b, floatx80 &r, Bit64u &q, float_status_t &status); +int floatx80_ieee754_remainder(floatx80 a, floatx80 b, floatx80 &r, Bit64u &q, float_status_t &status); +floatx80 f2xm1(floatx80 a, float_status_t &status); +floatx80 fyl2x(floatx80 a, floatx80 b, float_status_t &status); +floatx80 fyl2xp1(floatx80 a, floatx80 b, float_status_t &status); +floatx80 fpatan(floatx80 a, floatx80 b, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE extended double-precision trigonometric functions. +*----------------------------------------------------------------------------*/ + +int fsincos(floatx80 a, floatx80 *sin_a, floatx80 *cos_a, float_status_t &status); +int fsin(floatx80 &a, float_status_t &status); +int fcos(floatx80 &a, float_status_t &status); +int ftan(floatx80 &a, float_status_t &status); + +/*---------------------------------------------------------------------------- +| Software IEC/IEEE extended double-precision compare. +*----------------------------------------------------------------------------*/ + +int floatx80_compare(floatx80, floatx80, float_status_t &status); +int floatx80_compare_quiet(floatx80, floatx80, float_status_t &status); + +/*----------------------------------------------------------------------------- +| Calculates the absolute value of the extended double-precision floating-point +| value `a'. The operation is performed according to the IEC/IEEE Standard +| for Binary Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE floatx80& floatx80_abs(floatx80 ®) +{ + reg.exp &= 0x7FFF; + return reg; +} + +/*----------------------------------------------------------------------------- +| Changes the sign of the extended double-precision floating-point value 'a'. +| The operation is performed according to the IEC/IEEE Standard for Binary +| Floating-Point Arithmetic. +*----------------------------------------------------------------------------*/ + +BX_CPP_INLINE floatx80& floatx80_chs(floatx80 ®) +{ + reg.exp ^= 0x8000; + return reg; +} + +/*----------------------------------------------------------------------------- +| Commonly used extended double-precision floating-point constants. +*----------------------------------------------------------------------------*/ + +extern const floatx80 Const_Z; +extern const floatx80 Const_1; + +#endif diff --git a/bochs/fpu/status_w.h b/bochs/fpu/status_w.h new file mode 100644 index 00000000..9de61120 --- /dev/null +++ b/bochs/fpu/status_w.h @@ -0,0 +1,69 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2003-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#ifndef _STATUS_H_ +#define _STATUS_H_ + +/* Status Word */ +#define FPU_SW_Backward (0x8000) /* backward compatibility */ +#define FPU_SW_C3 (0x4000) /* condition bit 3 */ +#define FPU_SW_Top (0x3800) /* top of stack */ +#define FPU_SW_C2 (0x0400) /* condition bit 2 */ +#define FPU_SW_C1 (0x0200) /* condition bit 1 */ +#define FPU_SW_C0 (0x0100) /* condition bit 0 */ +#define FPU_SW_Summary (0x0080) /* exception summary */ +#define FPU_SW_Stack_Fault (0x0040) /* stack fault */ +#define FPU_SW_Precision (0x0020) /* loss of precision */ +#define FPU_SW_Underflow (0x0010) /* underflow */ +#define FPU_SW_Overflow (0x0008) /* overflow */ +#define FPU_SW_Zero_Div (0x0004) /* divide by zero */ +#define FPU_SW_Denormal_Op (0x0002) /* denormalized operand */ +#define FPU_SW_Invalid (0x0001) /* invalid operation */ + +#define FPU_SW_CC (FPU_SW_C0|FPU_SW_C1|FPU_SW_C2|FPU_SW_C3) + +#define FPU_SW_Exceptions_Mask (0x027f) /* status word exceptions bit mask */ + +/* Exception flags: */ +#define FPU_EX_Precision (0x0020) /* loss of precision */ +#define FPU_EX_Underflow (0x0010) /* underflow */ +#define FPU_EX_Overflow (0x0008) /* overflow */ +#define FPU_EX_Zero_Div (0x0004) /* divide by zero */ +#define FPU_EX_Denormal (0x0002) /* denormalized operand */ +#define FPU_EX_Invalid (0x0001) /* invalid operation */ + +/* Special exceptions: */ +#define FPU_EX_Stack_Overflow (0x0041|FPU_SW_C1) /* stack overflow */ +#define FPU_EX_Stack_Underflow (0x0041) /* stack underflow */ + +/* precision control */ +#define FPU_EX_Precision_Lost_Up (EX_Precision | SW_C1) +#define FPU_EX_Precision_Lost_Dn (EX_Precision) + +#define setcc(cc) \ + FPU_PARTIAL_STATUS = (FPU_PARTIAL_STATUS & ~(FPU_SW_CC)) | ((cc) & FPU_SW_CC) + +#define clear_C1() { FPU_PARTIAL_STATUS &= ~FPU_SW_C1; } +#define clear_C2() { FPU_PARTIAL_STATUS &= ~FPU_SW_C2; } + +#endif diff --git a/bochs/fpu/tag_w.h b/bochs/fpu/tag_w.h new file mode 100755 index 00000000..ba7d7345 --- /dev/null +++ b/bochs/fpu/tag_w.h @@ -0,0 +1,33 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2003-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#ifndef _TAG_W_H +#define _TAG_W_H + +/* Tag Word */ +#define FPU_Tag_Valid 0x00 +#define FPU_Tag_Zero 0x01 +#define FPU_Tag_Special 0x02 +#define FPU_Tag_Empty 0x03 + +#endif diff --git a/bochs/fpu/todo b/bochs/fpu/todo new file mode 100755 index 00000000..e4176d02 --- /dev/null +++ b/bochs/fpu/todo @@ -0,0 +1,7 @@ +TODO: +---- + +Elliminate floa128 use, Intel uses only 67-bit precision calculations +when float128 has at least 112-bit. Replacement of float128 with for +example 96-bit precision number could significantly speed up +calculations. diff --git a/bochs/gdbstub.cc b/bochs/gdbstub.cc new file mode 100644 index 00000000..c9107a82 --- /dev/null +++ b/bochs/gdbstub.cc @@ -0,0 +1,941 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2006 The Bochs Project Team +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#ifdef __MINGW32__ +#include +#define SIGTRAP 5 +#else +#include +#include +#include +#include +#include +#include +#endif + +#define NEED_CPU_REG_SHORTCUTS 1 + +#include "bochs.h" +#include "param_names.h" +#include "cpu/cpu.h" +#include "iodev/iodev.h" + +#define LOG_THIS gdbstublog-> +#define IFDBG(x) x + +static int last_stop_reason = GDBSTUB_STOP_NO_REASON; + +#define GDBSTUB_EXECUTION_BREAKPOINT (0xac1) +#define GDBSTUB_TRACE (0xac2) +#define GDBSTUB_USER_BREAK (0xac3) + +static bx_list_c *gdbstub_list; +static int listen_socket_fd; +static int socket_fd; +static logfunctions *gdbstublog; + +static int hex(char ch) +{ + if ((ch >= 'a') && (ch <= 'f')) return(ch - 'a' + 10); + if ((ch >= '0') && (ch <= '9')) return(ch - '0'); + if ((ch >= 'A') && (ch <= 'F')) return(ch - 'A' + 10); + return(-1); +} + +static char buf[4096], *bufptr = buf; + +static void flush_debug_buffer() +{ + char *p = buf; + while (p != bufptr) { + int n = send(socket_fd, p, bufptr-p, 0); + if (n == -1) { + BX_ERROR(("error on debug socket: %m")); + break; + } + p += n; + } + bufptr = buf; +} + +static void put_debug_char(char ch) +{ + if (bufptr == buf + sizeof buf) + flush_debug_buffer(); + *bufptr++ = ch; +} + +static char get_debug_char(void) +{ + char ch; + + recv(socket_fd, &ch, 1, 0); + + return(ch); +} + +static const char hexchars[]="0123456789abcdef"; + +static void put_reply(const char* buffer) +{ + unsigned char csum; + int i; + + BX_DEBUG(("put_buffer '%s'", buffer)); + + do { + put_debug_char('$'); + + csum = 0; + + i = 0; + while (buffer[i] != 0) + { + put_debug_char(buffer[i]); + csum = csum + buffer[i]; + i++; + } + + put_debug_char('#'); + put_debug_char(hexchars[csum >> 4]); + put_debug_char(hexchars[csum % 16]); + flush_debug_buffer(); + } while (get_debug_char() != '+'); +} + +static void get_command(char* buffer) +{ + unsigned char checksum; + unsigned char xmitcsum; + char ch; + unsigned int count; + unsigned int i; + + do { + while ((ch = get_debug_char()) != '$'); + + checksum = 0; + xmitcsum = 0; + count = 0; + + while (1) + { + ch = get_debug_char(); + if (ch == '#') break; + checksum = checksum + ch; + buffer[count] = ch; + count++; + } + buffer[count] = 0; + + if (ch == '#') + { + xmitcsum = hex(get_debug_char()) << 4; + xmitcsum += hex(get_debug_char()); + if (checksum != xmitcsum) + { + BX_INFO(("Bad checksum")); + } + } + + if (checksum != xmitcsum) + { + put_debug_char('-'); + flush_debug_buffer(); + } + else + { + put_debug_char('+'); + if (buffer[2] == ':') + { + put_debug_char(buffer[0]); + put_debug_char(buffer[1]); + count = strlen(buffer); + for (i = 3; i <= count; i++) + { + buffer[i - 3] = buffer[i]; + } + } + flush_debug_buffer(); + } + } while (checksum != xmitcsum); +} + +void hex2mem(char* buf, unsigned char* mem, int count) +{ + unsigned char ch; + + for (int i = 0; i> 4]; + *buf++ = hexchars[ch % 16]; + } + *buf = 0; + return(buf); +} + +int hexdigit(char c) +{ + if (isdigit(c)) + return c - '0'; + else if (isupper(c)) + return c - 'A' + 10; + else + return c - 'a' + 10; +} + +Bit64u read_little_endian_hex(char *&buf) +{ + int byte; + Bit64u ret = 0; + int n = 0; + while (isxdigit(*buf)) { + byte = hexdigit(*buf++); + if (isxdigit(*buf)) + byte = (byte << 4) | hexdigit(*buf++); + ret |= (Bit64u)byte << (n*8); + ++n; + } + return ret; +} + +static int continue_thread = -1; +static int other_thread = 0; + +#if !BX_SUPPORT_X86_64 +#define NUMREGS (16) +#define NUMREGSBYTES (NUMREGS * 4) +static Bit32u registers[NUMREGS]; +#endif + +#define MAX_BREAKPOINTS (255) +static unsigned breakpoints[MAX_BREAKPOINTS] = {0,}; +static unsigned nr_breakpoints = 0; + +static int stub_trace_flag = 0; +static int instr_count = 0; +static int saved_eip = 0; +static int bx_enter_gdbstub = 0; + +void bx_gdbstub_break(void) +{ + bx_enter_gdbstub = 1; +} + +int bx_gdbstub_check(unsigned int eip) +{ + unsigned int i; + unsigned char ch; + long arg; + int r; +#if defined(__CYGWIN__) || defined(__MINGW32__) + fd_set fds; + struct timeval tv = {0, 0}; +#endif + + if (bx_enter_gdbstub) + { + bx_enter_gdbstub = 0; + last_stop_reason = GDBSTUB_EXECUTION_BREAKPOINT; + return GDBSTUB_EXECUTION_BREAKPOINT; + } + + instr_count++; + + if ((instr_count % 500) == 0) + { +#if !defined(__CYGWIN__) && !defined(__MINGW32__) + arg = fcntl(socket_fd, F_GETFL); + fcntl(socket_fd, F_SETFL, arg | O_NONBLOCK); + r = recv(socket_fd, &ch, 1, 0); + fcntl(socket_fd, F_SETFL, arg); +#else + FD_ZERO(&fds); + FD_SET(socket_fd, &fds); + r = select(socket_fd + 1, &fds, NULL, NULL, &tv); + if (r == 1) + { + r = recv(socket_fd, (char *)&ch, 1, 0); + } +#endif + if (r == 1) + { + BX_INFO(("Got byte %x", (unsigned int)ch)); + last_stop_reason = GDBSTUB_USER_BREAK; + return GDBSTUB_USER_BREAK; + } + } + + for (i = 0; i < nr_breakpoints; i++) + { + if (eip == breakpoints[i]) + { + BX_INFO(("found breakpoint at %x", eip)); + last_stop_reason = GDBSTUB_EXECUTION_BREAKPOINT; + return GDBSTUB_EXECUTION_BREAKPOINT; + } + } + + if (stub_trace_flag == 1) + { + last_stop_reason = GDBSTUB_TRACE; + return GDBSTUB_TRACE; + } + last_stop_reason = GDBSTUB_STOP_NO_REASON; + return GDBSTUB_STOP_NO_REASON; +} + +static int remove_breakpoint(unsigned addr, int len) +{ + if (len != 1) + { + return(0); + } + + for (unsigned i = 0; i < MAX_BREAKPOINTS; i++) + { + if (breakpoints[i] == addr) + { + BX_INFO(("Removing breakpoint at %x", addr)); + breakpoints[i] = 0; + return(1); + } + } + return(0); +} + +static void insert_breakpoint(unsigned addr) +{ + unsigned int i; + + BX_INFO(("setting breakpoint at %x", addr)); + + for (i = 0; i < (unsigned)MAX_BREAKPOINTS; i++) + { + if (breakpoints[i] == 0) + { + breakpoints[i] = addr; + if (i >= nr_breakpoints) + { + nr_breakpoints = i + 1; + } + return; + } + } + BX_INFO(("No slot for breakpoint")); +} + +static void do_pc_breakpoint(int insert, Bit64u addr, int len) +{ + for (int i = 0; i < len; ++i) + if (insert) + insert_breakpoint(addr+i); + else + remove_breakpoint(addr+i, 1); +} + +static void do_breakpoint(int insert, char* buffer) +{ + char* ebuf; + unsigned long type = strtoul(buffer, &ebuf, 16); + Bit64u addr = strtoull(ebuf+1, &ebuf, 16); + unsigned long len = strtoul(ebuf+1, &ebuf, 16); + switch (type) { + case 0: + case 1: + do_pc_breakpoint(insert, addr, len); + put_reply("OK"); + break; + default: + put_reply(""); + break; + } +} + +static void write_signal(char* buf, int signal) +{ + buf[0] = hexchars[signal >> 4]; + buf[1] = hexchars[signal % 16]; + buf[2] = 0; +} + +static int access_linear(Bit64u laddress, + unsigned len, + unsigned int rw, + Bit8u* data) +{ + bx_phy_address phys; + bx_bool valid; + + if (((laddress & 0xfff) + len) > 4096) + { + valid = access_linear(laddress, + 4096 - (laddress & 0xfff), + rw, + data); + if (!valid) return(0); + + valid = access_linear(laddress, + len + (laddress & 0xfff) - 4096, + rw, + (Bit8u *)(data + (4096 - (laddress & 0xfff)))); + return(valid); + } + + valid = BX_CPU(0)->dbg_xlate_linear2phy(laddress, (bx_phy_address*)&phys); + if (!valid) return(0); + + if (rw & 1) { + valid = BX_MEM(0)->dbg_set_mem(phys, len, data); + } else { + valid = BX_MEM(0)->dbg_fetch_mem(BX_CPU(0), phys, len, data); + } + + return(valid); +} + +static void debug_loop(void) +{ + char buffer[255]; + char obuf[1024]; + int ne = 0; + Bit8u mem[255]; + + while (ne == 0) + { + get_command(buffer); + BX_DEBUG(("get_buffer '%s'", buffer)); + + switch (buffer[0]) + { + case 'c': + { + char buf[255]; + Bit32u new_eip; + + if (buffer[1] != 0) + { + new_eip = (Bit32u) atoi(buffer + 1); + + BX_INFO(("continuing at %x", new_eip)); + + for (int i=0; iinvalidate_prefetch_q(); + } + + saved_eip = EIP; + BX_CPU_THIS_PTR gen_reg[BX_32BIT_REG_EIP].dword.erx = new_eip; + } + + stub_trace_flag = 0; + bx_cpu.cpu_loop(0); + + DEV_vga_refresh(); + + if (buffer[1] != 0) + { + bx_cpu.invalidate_prefetch_q(); + BX_CPU_THIS_PTR gen_reg[BX_32BIT_REG_EIP].dword.erx = saved_eip; + } + + BX_INFO(("stopped with %x", last_stop_reason)); + buf[0] = 'S'; + if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT || + last_stop_reason == GDBSTUB_TRACE) + { + write_signal(&buf[1], SIGTRAP); + } + else + { + write_signal(&buf[1], 0); + } + put_reply(buf); + break; + } + + case 's': + { + char buf[255]; + + BX_INFO(("stepping")); + stub_trace_flag = 1; + bx_cpu.cpu_loop(0); + DEV_vga_refresh(); + stub_trace_flag = 0; + BX_INFO(("stopped with %x", last_stop_reason)); + buf[0] = 'S'; + if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT || + last_stop_reason == GDBSTUB_TRACE) + { + write_signal(&buf[1], SIGTRAP); + } + else + { + write_signal(&buf[1], SIGTRAP); + } + put_reply(buf); + break; + } + + case 'M': + { + unsigned char mem[255]; + char* ebuf; + + Bit64u addr = strtoull(&buffer[1], &ebuf, 16); + int len = strtoul(ebuf + 1, &ebuf, 16); + hex2mem(ebuf + 1, mem, len); + + if (len == 1 && mem[0] == 0xcc) + { + insert_breakpoint(addr); + put_reply("OK"); + } + else if (remove_breakpoint(addr, len)) + { + put_reply("OK"); + } + else + { + if (access_linear(addr, len, BX_WRITE, mem)) + { + put_reply("OK"); + } + else + { + put_reply("Eff"); + } + } + break; + } + + case 'm': + { + Bit64u addr; + int len; + char* ebuf; + + addr = strtoull(&buffer[1], &ebuf, 16); + len = strtoul(ebuf + 1, NULL, 16); + BX_INFO(("addr %Lx len %x", addr, len)); + + access_linear(addr, len, BX_READ, mem); + mem2hex(mem, obuf, len); + put_reply(obuf); + break; + } + + case 'P': + { + int reg; + Bit64u value; + char* ebuf; + + reg = strtoul(&buffer[1], &ebuf, 16); + ++ebuf; + value = read_little_endian_hex(ebuf); + + BX_INFO(("reg %d set to %Lx", reg, value)); +#if BX_SUPPORT_X86_64 == 0 + switch (reg) + { + case 0: + EAX = value; + break; + + case 1: + ECX = value; + break; + + case 2: + EBX = value; + break; + + case 3: + EDX = value; + break; + + case 4: + ESP = value; + break; + + case 5: + EBP = value; + break; + + case 6: + ESI = value; + break; + + case 7: + EDI = value; + break; + + case 8: + EIP = value; + BX_CPU_THIS_PTR invalidate_prefetch_q(); + break; + + default: + break; + } +#else + switch (reg) + { + case 0: + RAX = value; + break; + + case 1: + RBX = value; + break; + + case 2: + RCX = value; + break; + + case 3: + RDX = value; + break; + + case 4: + RSP = value; + break; + + case 5: + RBP = value; + break; + + case 6: + RSI = value; + break; + + case 7: + RDI = value; + break; + + case 8: + R8 = value; + break; + + case 9: + R9 = value; + break; + + case 10: + R10 = value; + break; + + case 11: + R11 = value; + break; + + case 12: + R12 = value; + break; + + case 13: + R13 = value; + break; + + case 14: + R15 = value; + break; + + case 15: + R15 = value; + break; + + case 16: + RIP = value; + BX_CPU_THIS_PTR invalidate_prefetch_q(); + break; + + default: + break; + } +#endif + put_reply("OK"); + + break; + } + + case 'g': + { +#if BX_SUPPORT_X86_64 == 0 + WriteHostDWordToLittleEndian(registers + 0, EAX); + WriteHostDWordToLittleEndian(registers + 1, ECX); + WriteHostDWordToLittleEndian(registers + 2, EDX); + WriteHostDWordToLittleEndian(registers + 3, EBX); + WriteHostDWordToLittleEndian(registers + 4, ESP); + WriteHostDWordToLittleEndian(registers + 5, EBP); + WriteHostDWordToLittleEndian(registers + 6, ESI); + WriteHostDWordToLittleEndian(registers + 7, EDI); + if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT) + { + WriteHostDWordToLittleEndian(registers + 8, EIP + 1); + } + else + { + WriteHostDWordToLittleEndian(registers + 8, EIP); + } + WriteHostDWordToLittleEndian(registers + 9, + BX_CPU_THIS_PTR read_eflags()); + WriteHostDWordToLittleEndian(registers + 10, + BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value); + WriteHostDWordToLittleEndian(registers + 11, + BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector.value); + WriteHostDWordToLittleEndian(registers + 12, + BX_CPU_THIS_PTR sregs[BX_SEG_REG_DS].selector.value); + WriteHostDWordToLittleEndian(registers + 13, + BX_CPU_THIS_PTR sregs[BX_SEG_REG_ES].selector.value); + WriteHostDWordToLittleEndian(registers + 14, + BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS].selector.value); + WriteHostDWordToLittleEndian(registers + 15, + BX_CPU_THIS_PTR sregs[BX_SEG_REG_GS].selector.value); + mem2hex((const Bit8u*) registers, obuf, NUMREGSBYTES); +#else +#define PUTREG(buf, val, len) do { \ + Bit64u u = (val); \ + (buf) = mem2hex((const Bit8u*)&u, (buf), (len)); \ + } while (0) + char* buf = obuf; + PUTREG(buf, RAX, 8); + PUTREG(buf, RBX, 8); + PUTREG(buf, RCX, 8); + PUTREG(buf, RDX, 8); + PUTREG(buf, RSI, 8); + PUTREG(buf, RDI, 8); + PUTREG(buf, RBP, 8); + PUTREG(buf, RSP, 8); + PUTREG(buf, R8, 8); + PUTREG(buf, R9, 8); + PUTREG(buf, R10, 8); + PUTREG(buf, R11, 8); + PUTREG(buf, R12, 8); + PUTREG(buf, R13, 8); + PUTREG(buf, R14, 8); + PUTREG(buf, R15, 8); + Bit64u rip; + rip = RIP; + if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT) + { + ++rip; + } + PUTREG(buf, rip, 8); + PUTREG(buf, BX_CPU_THIS_PTR read_eflags(), 4); + PUTREG(buf, BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value, 4); + PUTREG(buf, BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector.value, 4); + PUTREG(buf, BX_CPU_THIS_PTR sregs[BX_SEG_REG_DS].selector.value, 4); + PUTREG(buf, BX_CPU_THIS_PTR sregs[BX_SEG_REG_ES].selector.value, 4); + PUTREG(buf, BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS].selector.value, 4); + PUTREG(buf, BX_CPU_THIS_PTR sregs[BX_SEG_REG_GS].selector.value, 4); +#endif + put_reply(obuf); + break; + } + + case '?': + sprintf(obuf, "S%02x", SIGTRAP); + put_reply(obuf); + break; + + case 'H': + if (buffer[1] == 'c') + { + continue_thread = strtol(&buffer[2], NULL, 16); + put_reply("OK"); + } + else if (buffer[1] == 'g') + { + other_thread = strtol(&buffer[2], NULL, 16); + put_reply("OK"); + } + else + { + put_reply("Eff"); + } + break; + + case 'q': + if (buffer[1] == 'C') + { + sprintf(obuf,"%Lx", (Bit64u)1); + put_reply(obuf); + } + else if (strncmp(&buffer[1], "Offsets", strlen("Offsets")) == 0) + { + sprintf(obuf, "Text=%x;Data=%x;Bss=%x", + SIM->get_param_num("text_base", gdbstub_list)->get(), + SIM->get_param_num("data_base", gdbstub_list)->get(), + SIM->get_param_num("bss_base", gdbstub_list)->get()); + put_reply(obuf); + } + else if (strncmp(&buffer[1], "Supported", strlen("Supported")) == 0) + { + put_reply(""); + } + else + { + put_reply(""); /* not supported */ + } + break; + + case 'Z': + do_breakpoint(1, buffer+1); + break; + case 'z': + do_breakpoint(0, buffer+1); + break; + case 'k': + BX_PANIC(("Debugger asked us to quit")); + break; + case 'D': + BX_INFO(("Debugger detached")); + put_reply("OK"); + return; + break; + + default: + put_reply(""); + break; + } + } +} + +static void wait_for_connect(int portn) +{ + struct sockaddr_in sockaddr; + socklen_t sockaddr_len; + struct protoent *protoent; + int r; + int opt; + + listen_socket_fd = socket(PF_INET, SOCK_STREAM, 0); + if (listen_socket_fd == -1) + { + BX_PANIC(("Failed to create socket")); + exit(1); + } + + /* Allow rapid reuse of this port */ + opt = 1; +#if __MINGW32__ + r = setsockopt(listen_socket_fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&opt, sizeof(opt)); +#else + r = setsockopt(listen_socket_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); +#endif + if (r == -1) + { + BX_INFO(("setsockopt(SO_REUSEADDR) failed")); + } + + memset (&sockaddr, '\000', sizeof sockaddr); +#if BX_HAVE_SOCKADDR_IN_SIN_LEN + // if you don't have sin_len change that to #if 0. This is the subject of + // bug [ 626840 ] no 'sin_len' in 'struct sockaddr_in'. + sockaddr.sin_len = sizeof sockaddr; +#endif + sockaddr.sin_family = AF_INET; + sockaddr.sin_port = htons(portn); + sockaddr.sin_addr.s_addr = htonl(INADDR_ANY); + + r = bind(listen_socket_fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)); + if (r == -1) + { + BX_PANIC(("Failed to bind socket")); + } + + r = listen(listen_socket_fd, 0); + if (r == -1) + { + BX_PANIC(("Failed to listen on socket")); + } + + sockaddr_len = sizeof sockaddr; + socket_fd = accept(listen_socket_fd, (struct sockaddr *)&sockaddr, &sockaddr_len); + if (socket_fd == -1) + { + BX_PANIC(("Failed to accept on socket")); + } + close(listen_socket_fd); + + protoent = getprotobyname ("tcp"); + if (!protoent) + { + BX_INFO(("getprotobyname (\"tcp\") failed")); + return; + } + + /* Disable Nagle - allow small packets to be sent without delay. */ + opt = 1; +#ifdef __MINGW32__ + r = setsockopt (socket_fd, protoent->p_proto, TCP_NODELAY, (const char *)&opt, sizeof(opt)); +#else + r = setsockopt (socket_fd, protoent->p_proto, TCP_NODELAY, &opt, sizeof(opt)); +#endif + if (r == -1) + { + BX_INFO(("setsockopt(TCP_NODELAY) failed")); + } + Bit32u ip = sockaddr.sin_addr.s_addr; + printf("Connected to %d.%d.%d.%d\n", ip & 0xff, (ip >> 8) & 0xff, (ip >> 16) & 0xff, (ip >> 24) & 0xff); +} + +void bx_gdbstub_init(void) +{ + gdbstublog = new logfunctions(); + gdbstublog->put("GDBST"); + gdbstublog->setonoff(LOGLEV_PANIC, ACT_FATAL); + + gdbstub_list = (bx_list_c*) SIM->get_param(BXPN_GDBSTUB); + int portn = SIM->get_param_num("port", gdbstub_list)->get(); + +#ifdef __MINGW32__ + WSADATA wsaData; + WSAStartup(2, &wsaData); +#endif + + /* Wait for connect */ + printf("Waiting for gdb connection on port %d\n", portn); + wait_for_connect(portn); + + /* Do debugger command loop */ + debug_loop(); + + /* CPU loop */ + bx_cpu.cpu_loop(0); +} diff --git a/bochs/gui/Makefile.in b/bochs/gui/Makefile.in new file mode 100644 index 00000000..cc5b8c75 --- /dev/null +++ b/bochs/gui/Makefile.in @@ -0,0 +1,395 @@ +# Copyright (C) 2001 The Bochs Project +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Makefile for the gui component of bochs + + +@SUFFIX_LINE@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +srcdir = @srcdir@ +VPATH = @srcdir@ +bindir = @bindir@ +libdir = @libdir@ +datarootdir = @datarootdir@ +mandir = @mandir@ +man1dir = $(mandir)/man1 +man5dir = $(mandir)/man5 +docdir = $(datarootdir)/doc/bochs +sharedir = $(datarootdir)/bochs +top_builddir = .. +top_srcdir = @top_srcdir@ + +SHELL = /bin/sh + +@SET_MAKE@ + +CXX = @CXX@ +CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@ @GUI_CXXFLAGS@ +LOCAL_CXXFLAGS = @TOOLKIT_CXXFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +X_CFLAGS = @X_CFLAGS@ +RANLIB = @RANLIB@ +PLUGIN_PATH=@libdir@ +top_builddir = .. +LIBTOOL=@LIBTOOL@ +WIN32_DLL_IMPORT_LIBRARY=../dllexports.a +BX_INCDIRS = -I.. -I$(srcdir)/.. -I../iodev -I$(srcdir)/../iodev -I../@INSTRUMENT_DIR@ -I$(srcdir)/../@INSTRUMENT_DIR@ + +GUI_OBJS_X11 = x.o +GUI_OBJS_SDL = sdl.o +GUI_OBJS_SVGA = svga.o +GUI_OBJS_BEOS = beos.o +GUI_OBJS_WIN32 = win32.o +GUI_OBJS_MACOS = macintosh.o +GUI_OBJS_CARBON = carbon.o +GUI_OBJS_NOGUI = nogui.o +GUI_OBJS_TERM = term.o +GUI_OBJS_RFB = rfb.o +GUI_OBJS_AMIGAOS = amigaos.o +GUI_OBJS_WX = wx.o +GUI_OBJS_WX_SUPPORT = wxmain.o wxdialog.o +OBJS_THAT_CANNOT_BE_PLUGINS = keymap.o gui.o siminterface.o paramtree.o textconfig.o enh_dbg.o @ENH_DBG_OBJS@ @DIALOG_OBJS@ +OBJS_THAT_CAN_BE_PLUGINS = @GUI_OBJS@ + +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +XPM_LIB = @XPM_LIB@ +GUI_LINK_OPTS_X = $(X_LIBS) $(X_PRE_LIBS) -lX11 $(XPM_LIB) -lXrandr +GUI_LINK_OPTS_SDL = `sdl-config --cflags --libs` +GUI_LINK_OPTS_SVGA = -lvga -lvgagl +GUI_LINK_OPTS_BEOS = -lbe +GUI_LINK_OPTS_RFB = @RFB_LIBS@ +GUI_LINK_OPTS_AMIGAOS = +GUI_LINK_OPTS_WIN32 = -luser32 -lgdi32 -lcomdlg32 -lcomctl32 +GUI_LINK_OPTS_WIN32_VCPP = user32.lib gdi32.lib winmm.lib \ + comdlg32.lib comctl32.lib wsock32.lib +GUI_LINK_OPTS_MACOS = +GUI_LINK_OPTS_CARBON = -framework Carbon +GUI_LINK_OPTS_NOGUI = +GUI_LINK_OPTS_TERM = @GUI_LINK_OPTS_TERM@ +GUI_LINK_OPTS_WX = @GUI_LINK_OPTS_WX@ +GUI_LINK_OPTS = @GUI_LINK_OPTS@ @DEVICE_LINK_OPTS@ + +NONPLUGIN_OBJS = @GUI_NON_PLUGIN_OBJS@ +PLUGIN_OBJS = @GUI_PLUGIN_OBJS@ + +# +# -------- end configurable options -------------------------- +# + +all: libgui.a + +plugins: $(PLUGIN_OBJS:@PLUGIN_LIBNAME_TRANSFORMATION@) + +libgui.a: $(NONPLUGIN_OBJS) + @RMCOMMAND@ libgui.a + @MAKELIB@ $(NONPLUGIN_OBJS) + @RANLIB@ libgui.a + +# standard compile rule for C++ files +.@CPP_SUFFIX@.o: + $(CXX) @DASH@c $(CXXFLAGS) $(LOCAL_CXXFLAGS) @CXXFP@$< @OFP@$@ + +##### building plugins with libtool +%.lo: %.@CPP_SUFFIX@ + $(LIBTOOL) --mode=compile $(CXX) -c $(CXXFLAGS) $(LOCAL_CXXFLAGS) $< -o $@ + +libbx_%.la: %.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) + +libbx_x.la: x.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) $(GUI_LINK_OPTS_X) + +libbx_sdl.la: sdl.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) $(GUI_LINK_OPTS_SDL) + +libbx_svga.la: svga.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) $(GUI_LINK_OPTS_SVGA) + +libbx_beos.la: beos.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) $(GUI_LINK_OPTS_BEOS) + +libbx_rfb.la: rfb.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) $(GUI_LINK_OPTS_RFB) + +libbx_amigaos.la: amigaos.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) $(GUI_LINK_OPTS_AMIGAOS) + +libbx_win32.la: win32.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) $(GUI_LINK_OPTS_WIN32) + +libbx_macos.la: macos.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) $(GUI_LINK_OPTS_MACOS) + +libbx_carbon.la: carbon.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) $(GUI_LINK_OPTS_CARBON) + +libbx_nogui.la: nogui.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) $(GUI_LINK_OPTS_NOGUI) + +libbx_term.la: term.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) $(GUI_LINK_OPTS_TERM) + +# special link rules for plugins that require more than one object file +libbx_wx.la: $(GUI_OBJS_WX:.o=.lo) $(GUI_OBJS_WX_SUPPORT:.o=.lo) + $(LIBTOOL) --mode=link $(CXX) -module $(GUI_OBJS_WX:.o=.lo) $(GUI_OBJS_WX_SUPPORT:.o=.lo) -o libbx_wx.la -rpath $(PLUGIN_PATH) $(GUI_LINK_OPTS_WX) + +#### building DLLs for win32 (tested on cygwin only) +bx_%.dll: %.o + $(CXX) $(CXXFLAGS) -shared -o $@ $< $(WIN32_DLL_IMPORT_LIBRARY) $(GUI_LINK_OPTS_WIN32) + +bx_wx.dll: $(GUI_OBJS_WX) $(GUI_OBJS_WX_SUPPORT) + $(CXX) $(CXXFLAGS) -shared -o bx_wx.dll $(GUI_OBJS_WX) $(GUI_OBJS_WX_SUPPORT) $(WIN32_DLL_IMPORT_LIBRARY) `wx-config --libs` -luser32 -lgdi32 -lcomdlg32 -lcomctl32 + +bx_sdl.dll: $(GUI_OBJS_SDL) + $(CXX) $(CXXFLAGS) -shared -o bx_sdl.dll $(GUI_OBJS_SDL) $(WIN32_DLL_IMPORT_LIBRARY) $(GUI_LINK_OPTS_SDL) + +bx_rfb.dll: $(GUI_OBJS_RFB) + $(CXX) $(CXXFLAGS) -shared -o bx_rfb.dll $(GUI_OBJS_RFB) $(WIN32_DLL_IMPORT_LIBRARY) $(GUI_LINK_OPTS_RFB) + +# no need to build DLLs for beos.o +# no need to build DLLs for x.o + +##### end DLL section + +clean: + @RMCOMMAND@ -rf .libs *.la *.a *.lo *.o *.dll + +dist-clean: clean + @RMCOMMAND@ Makefile + +########################################### +# all other dependencies generated by +# gcc -MM -I.. -I../iodev -I../instrument/stubs `wx-config --cxxflags` *.cc | \ +# sed -e 's/\.cc/.@CPP_SUFFIX@/g' +# gcc -MM -I.. -I../iodev -I../instrument/stubs `wx-config --cxxflags` *.cc | \ +# sed -e 's/\.cc/.@CPP_SUFFIX@/g' -e 's/\.o:/.lo:/g' +# +# This means that every source file is listed twice, once with a .o rule +# and then again with an identical .lo rule. The .lo rules are used when +# building plugins. +########################################### +amigaos.o: amigaos.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h ../iodev/iodev.h +beos.o: beos.@CPP_SUFFIX@ ../param_names.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../iodev/iodev.h +carbon.o: carbon.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + keymap.h ../iodev/iodev.h ../param_names.h +enh_dbg.o: enh_dbg.@CPP_SUFFIX@ ../config.h +gtk_enh_dbg_osdep.o: gtk_enh_dbg_osdep.@CPP_SUFFIX@ ../config.h +gui.o: gui.@CPP_SUFFIX@ ../iodev/iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h ../iodev/vga.h \ + keymap.h ../gui/bitmaps/floppya.h ../gui/bitmaps/floppyb.h \ + ../gui/bitmaps/mouse.h ../gui/bitmaps/reset.h ../gui/bitmaps/power.h \ + ../gui/bitmaps/snapshot.h ../gui/bitmaps/copy.h ../gui/bitmaps/paste.h \ + ../gui/bitmaps/configbutton.h ../gui/bitmaps/cdromd.h \ + ../gui/bitmaps/userbutton.h ../gui/bitmaps/saverestore.h +keymap.o: keymap.@CPP_SUFFIX@ ../param_names.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h keymap.h +macintosh.o: macintosh.@CPP_SUFFIX@ ../param_names.h ../bochs.h ../config.h \ + ../osdep.h ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../iodev/iodev.h +nogui.o: nogui.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h icon_bochs.h +paramtree.o: paramtree.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h paramtree.h +rfb.o: rfb.@CPP_SUFFIX@ ../param_names.h ../iodev/iodev.h ../bochs.h ../config.h \ + ../osdep.h ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h keymap.h icon_bochs.h \ + ../font/vga.bitmap.h sdl.h rfb.h rfbkeys.h +sdl.o: sdl.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h keymap.h ../iodev/iodev.h icon_bochs.h sdl.h sdlkeys.h +siminterface.o: siminterface.@CPP_SUFFIX@ ../param_names.h ../iodev/iodev.h \ + ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h ../config.h \ + ../osdep.h ../bxversion.h ../gui/siminterface.h ../gui/paramtree.h \ + ../memory/memory.h ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h \ + ../gui/gui.h ../instrument/stubs/instrument.h +svga.o: svga.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h ../iodev/iodev.h +term.o: term.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h ../iodev/iodev.h +textconfig.o: textconfig.@CPP_SUFFIX@ ../config.h ../osdep.h ../param_names.h \ + textconfig.h siminterface.h paramtree.h ../extplugin.h ../ltdl.h +win32.o: win32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h keymap.h ../iodev/iodev.h ../iodev/vga.h +win32dialog.o: win32dialog.@CPP_SUFFIX@ win32dialog.h ../config.h +win32_enh_dbg_osdep.o: win32_enh_dbg_osdep.@CPP_SUFFIX@ ../config.h +win32paramdlg.o: win32paramdlg.@CPP_SUFFIX@ win32dialog.h ../config.h +wx.o: wx.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h keymap.h ../iodev/iodev.h \ + ../font/vga.bitmap.h wxmain.h +wxdialog.o: wxdialog.@CPP_SUFFIX@ ../config.h ../param_names.h \ + ../osdep.h ../gui/siminterface.h \ + ../gui/paramtree.h ../bxversion.h wxdialog.h wxmain.h +wxmain.o: wxmain.@CPP_SUFFIX@ ../config.h ../param_names.h \ + ../osdep.h ../gui/siminterface.h ../gui/paramtree.h ../bxversion.h \ + wxdialog.h wxmain.h ../extplugin.h ../ltdl.h bitmaps/cdromd.xpm \ + bitmaps/copy.xpm bitmaps/floppya.xpm bitmaps/floppyb.xpm bitmaps/paste.xpm \ + bitmaps/power.xpm bitmaps/reset.xpm bitmaps/snapshot.xpm bitmaps/mouse.xpm \ + bitmaps/userbutton.xpm bitmaps/saverestore.xpm icon_bochs.xpm +x.o: x.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h keymap.h ../iodev/iodev.h enh_dbg.h icon_bochs.xpm \ + ../font/vga.bitmap.h +amigaos.lo: amigaos.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h ../iodev/iodev.h +beos.lo: beos.@CPP_SUFFIX@ ../param_names.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../iodev/iodev.h +carbon.lo: carbon.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + keymap.h ../iodev/iodev.h ../param_names.h +enh_dbg.lo: enh_dbg.@CPP_SUFFIX@ ../config.h +gtk_enh_dbg_osdep.lo: gtk_enh_dbg_osdep.@CPP_SUFFIX@ ../config.h +gui.lo: gui.@CPP_SUFFIX@ ../iodev/iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h ../iodev/vga.h \ + keymap.h ../gui/bitmaps/floppya.h ../gui/bitmaps/floppyb.h \ + ../gui/bitmaps/mouse.h ../gui/bitmaps/reset.h ../gui/bitmaps/power.h \ + ../gui/bitmaps/snapshot.h ../gui/bitmaps/copy.h ../gui/bitmaps/paste.h \ + ../gui/bitmaps/configbutton.h ../gui/bitmaps/cdromd.h \ + ../gui/bitmaps/userbutton.h ../gui/bitmaps/saverestore.h +keymap.lo: keymap.@CPP_SUFFIX@ ../param_names.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h keymap.h +macintosh.lo: macintosh.@CPP_SUFFIX@ ../param_names.h ../bochs.h ../config.h \ + ../osdep.h ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../iodev/iodev.h +nogui.lo: nogui.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h icon_bochs.h +paramtree.lo: paramtree.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h paramtree.h +rfb.lo: rfb.@CPP_SUFFIX@ ../param_names.h ../iodev/iodev.h ../bochs.h ../config.h \ + ../osdep.h ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h keymap.h icon_bochs.h \ + ../font/vga.bitmap.h sdl.h rfb.h rfbkeys.h +sdl.lo: sdl.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h keymap.h ../iodev/iodev.h icon_bochs.h sdl.h sdlkeys.h +siminterface.lo: siminterface.@CPP_SUFFIX@ ../param_names.h ../iodev/iodev.h \ + ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h ../config.h \ + ../osdep.h ../bxversion.h ../gui/siminterface.h ../gui/paramtree.h \ + ../memory/memory.h ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h \ + ../gui/gui.h ../instrument/stubs/instrument.h +svga.lo: svga.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h ../iodev/iodev.h +term.lo: term.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h ../iodev/iodev.h +textconfig.lo: textconfig.@CPP_SUFFIX@ ../config.h ../osdep.h ../param_names.h \ + textconfig.h siminterface.h paramtree.h ../extplugin.h ../ltdl.h +win32.lo: win32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h keymap.h ../iodev/iodev.h +win32dialog.lo: win32dialog.@CPP_SUFFIX@ win32dialog.h ../config.h +win32_enh_dbg_osdep.lo: win32_enh_dbg_osdep.@CPP_SUFFIX@ ../config.h +win32paramdlg.lo: win32paramdlg.@CPP_SUFFIX@ win32dialog.h ../config.h +wx.lo: wx.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h keymap.h ../iodev/iodev.h \ + ../font/vga.bitmap.h wxmain.h +wxdialog.lo: wxdialog.@CPP_SUFFIX@ ../config.h ../param_names.h \ + ../osdep.h ../gui/siminterface.h \ + ../gui/paramtree.h ../bxversion.h wxdialog.h wxmain.h +wxmain.lo: wxmain.@CPP_SUFFIX@ ../config.h ../param_names.h \ + ../osdep.h ../gui/siminterface.h ../gui/paramtree.h ../bxversion.h \ + wxdialog.h wxmain.h ../extplugin.h ../ltdl.h bitmaps/cdromd.xpm \ + bitmaps/copy.xpm bitmaps/floppya.xpm bitmaps/floppyb.xpm bitmaps/paste.xpm \ + bitmaps/power.xpm bitmaps/reset.xpm bitmaps/snapshot.xpm bitmaps/mouse.xpm \ + bitmaps/userbutton.xpm bitmaps/saverestore.xpm icon_bochs.xpm +x.lo: x.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../param_names.h keymap.h ../iodev/iodev.h enh_dbg.h icon_bochs.xpm \ + ../font/vga.bitmap.h diff --git a/bochs/gui/amigagui.h b/bochs/gui/amigagui.h new file mode 100644 index 00000000..bb1982cc --- /dev/null +++ b/bochs/gui/amigagui.h @@ -0,0 +1,200 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define FULL(x) (x*0x01010101) +#define ID_FTXT MAKE_ID('F','T','X','T') +#define ID_CHRS MAKE_ID('C','H','R','S') + + +void check_toolbar(void); + +struct IntuitionBase *IntuitionBase; +struct GfxBase *GfxBase; +struct Library *KeymapBase; +struct Library *GadToolsBase; + +struct Library *CyberGfxBase; +struct Library *AslBase; +struct Library *DiskfontBase; +struct Library *IFFParseBase; +struct Screen *screen = NULL, *pub_screen = NULL; +struct Window *window = NULL; +struct TextFont *vgafont; + +struct IOStdReq *inputReqBlk = NULL; +struct MsgPort *inputPort = NULL; +struct Interrupt *inputHandler = NULL; + +int input_error = -1; + +LONG pmap[256]; +ULONG cmap[256]; +static UWORD *emptypointer; +char verstr[256]; + +struct TextAttr vgata = { + "vga.font", + 16, + NULL + }; + +struct Image bx_header_image[BX_MAX_PIXMAPS]; +struct Gadget *bx_header_gadget[BX_MAX_PIXMAPS], *bx_glistptr = NULL, *bx_gadget_handle; +static unsigned bx_image_entries = 0, bx_headerbar_entries = 0; +static unsigned bx_bordertop, bx_borderleft, bx_borderright, bx_borderbottom, + bx_headerbar_y, mouse_button_state = 0, bx_headernext_left, + bx_headernext_right, x_tilesize, y_tilesize, bx_mouseX, bx_mouseY; +static LONG apen = -1, black = -1, white = -1; +BOOL bx_xchanged = FALSE; +void *vi; + +extern "C" { void dprintf(char *, ...) __attribute__ ((format (printf, 1, 2)));} + +int w = 648, h = 480, d = 8; + +char HandlerName[]="Bochs InputHandler"; + +const unsigned char raw_to_bochs [130] = { + BX_KEY_GRAVE, + BX_KEY_1, /*1*/ + BX_KEY_2, + BX_KEY_3, + BX_KEY_4, + BX_KEY_5, + BX_KEY_6, + BX_KEY_7, + BX_KEY_8, + BX_KEY_9, + BX_KEY_0, /*10*/ + BX_KEY_MINUS, + BX_KEY_EQUALS, + BX_KEY_BACKSLASH, + 0, + BX_KEY_KP_INSERT, + BX_KEY_Q, + BX_KEY_W, + BX_KEY_E, + BX_KEY_R, + BX_KEY_T, /*20*/ + BX_KEY_Y, + BX_KEY_U, + BX_KEY_I, + BX_KEY_O, + BX_KEY_P, + BX_KEY_LEFT_BRACKET, + BX_KEY_RIGHT_BRACKET, + 0, + BX_KEY_KP_END, + BX_KEY_KP_DOWN, /*30*/ + BX_KEY_KP_PAGE_DOWN, + BX_KEY_A, + BX_KEY_S, + BX_KEY_D, + BX_KEY_F, + BX_KEY_G, + BX_KEY_H, + BX_KEY_J, + BX_KEY_K, + BX_KEY_L, /*40*/ + BX_KEY_SEMICOLON, + BX_KEY_SINGLE_QUOTE, + 0, + 0, + BX_KEY_KP_LEFT, + BX_KEY_KP_5, + BX_KEY_KP_RIGHT, + 0, + BX_KEY_Z, + BX_KEY_X, /*50*/ + BX_KEY_C, + BX_KEY_V, + BX_KEY_B, + BX_KEY_N, + BX_KEY_M, + BX_KEY_COMMA, + BX_KEY_PERIOD, + BX_KEY_SLASH, + 0, + BX_KEY_KP_DELETE, /*60*/ + BX_KEY_KP_HOME, + BX_KEY_KP_UP, + BX_KEY_KP_PAGE_UP, + BX_KEY_SPACE, + BX_KEY_BACKSPACE, + BX_KEY_TAB, + BX_KEY_KP_ENTER, + BX_KEY_ENTER, + BX_KEY_ESC, + BX_KEY_DELETE, /*70*/ + BX_KEY_INSERT, + BX_KEY_PAGE_UP, + BX_KEY_PAGE_DOWN, + BX_KEY_KP_SUBTRACT, + BX_KEY_F11, + BX_KEY_UP, + BX_KEY_DOWN, + BX_KEY_RIGHT, + BX_KEY_LEFT, + BX_KEY_F1, /*80*/ + BX_KEY_F2, + BX_KEY_F3, + BX_KEY_F4, + BX_KEY_F5, + BX_KEY_F6, + BX_KEY_F7, + BX_KEY_F8, + BX_KEY_F9, + BX_KEY_F10, + 0, /*90*/ + 0, + BX_KEY_KP_DIVIDE, + BX_KEY_KP_MULTIPLY, + BX_KEY_KP_ADD, + BX_KEY_MENU, + BX_KEY_SHIFT_L, + BX_KEY_SHIFT_R, + BX_KEY_CAPS_LOCK, + BX_KEY_CTRL_L, + BX_KEY_ALT_L, /*100*/ + BX_KEY_ALT_R, + BX_KEY_WIN_L, + BX_KEY_WIN_R, + 0, + 0, + 0, + BX_KEY_SCRL_LOCK, + BX_KEY_PRINT, + BX_KEY_NUM_LOCK, + BX_KEY_PAUSE, /*110*/ + BX_KEY_F12, + BX_KEY_HOME, + BX_KEY_END, + BX_KEY_INT_STOP, + BX_KEY_INT_FAV, + BX_KEY_INT_BACK, + BX_KEY_INT_FORWARD, + BX_KEY_INT_HOME, + BX_KEY_INT_SEARCH +}; diff --git a/bochs/gui/amigaos.cc b/bochs/gui/amigaos.cc new file mode 100644 index 00000000..370b0277 --- /dev/null +++ b/bochs/gui/amigaos.cc @@ -0,0 +1,855 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2000-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "bochs.h" +#include "param_names.h" +#include "iodev.h" +#if BX_WITH_AMIGAOS +#include "icon_bochs.h" +#include "amigagui.h" + +unsigned long __stack = 100000; +static unsigned int text_rows=25, text_cols=80; + +class bx_amigaos_gui_c : public bx_gui_c { +public: + bx_amigaos_gui_c (void) {} + DECLARE_GUI_VIRTUAL_METHODS() +}; + +// declare one instance of the gui object and call macro to insert the +// plugin code +static bx_amigaos_gui_c *theGui = NULL; +IMPLEMENT_GUI_PLUGIN_CODE(amigaos) + +#define LOG_THIS theGui-> + +static void hide_pointer(); +static void show_pointer(); +static void freeiff(struct IFFHandle *iff); + + +static ULONG screenreqfunc(struct Hook *hook, struct ScreenModeRequester *smr, ULONG id) +{ + return IsCyberModeID(id); +} + +LONG DispatcherFunc(void) +{ + struct Hook *hook = (Hook *)REG_A0; + return (*(LONG(*)(struct Hook *,LONG,LONG))hook->h_SubEntry)(hook,REG_A2,REG_A1); +} + +struct InputEvent *MyInputHandler(void) +{ + struct InputEvent *event = (struct InputEvent *)REG_A0; + + if (SIM->get_param_bool(BXPN_MOUSE_ENABLED)->get()) + { + switch(event->ie_Code) { + case IECODE_LBUTTON: + { + mouse_button_state |= 0x01; + DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state); + return NULL; + } + + case (IECODE_LBUTTON | IECODE_UP_PREFIX): + { + mouse_button_state &= ~0x01; + DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state); + return NULL; + } + + case IECODE_RBUTTON: + { + mouse_button_state |= 0x02; + DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state); + return NULL; + } + + case (IECODE_RBUTTON | IECODE_UP_PREFIX): + { + mouse_button_state &= 0x01; + DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state); + return NULL; + } + } + + if (event->ie_Class == IECLASS_RAWMOUSE) + { + DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state); + return NULL; + } + + return (event); + } + return (event); +} + +void setup_inputhandler(void) +{ + static struct EmulLibEntry GATEMyInputHandler = + { + TRAP_LIB, 0, (void (*)(void))MyInputHandler + }; + + + if (inputPort=CreateMsgPort()) + { + if (inputHandler=(struct Interrupt *)AllocMem(sizeof(struct Interrupt), MEMF_PUBLIC|MEMF_CLEAR)) + { + if (inputReqBlk=(struct IOStdReq *)CreateIORequest(inputPort, sizeof(struct IOStdReq))) + { + if (!(input_error = OpenDevice("input.device",NULL, (struct IORequest *)inputReqBlk, NULL))) + { + inputHandler->is_Code=(void(*)())&GATEMyInputHandler; + inputHandler->is_Data=NULL; + inputHandler->is_Node.ln_Pri=100; + inputHandler->is_Node.ln_Name=HandlerName; + inputReqBlk->io_Data=(APTR)inputHandler; + inputReqBlk->io_Command=IND_ADDHANDLER; + DoIO((struct IORequest *)inputReqBlk); + } + else + BX_PANIC(("Amiga: Could not open input.device")); + } + else + BX_PANIC(("Amiga: Could not create I/O request")); + } + else + BX_PANIC(("Amiga: Could not allocate interrupt struct memory")); + } + else + printf(("Amiga: Could not create message port")); +} + +bx_bool open_screen(void) +{ + ULONG id = INVALID_ID; + + char *scrmode; + struct DrawInfo *screen_drawinfo = NULL; + + struct ScreenModeRequester *smr; + + static struct EmulLibEntry GATEDispatcherFunc = + { + TRAP_LIB, 0, (void (*)(void))DispatcherFunc + }; + + struct Hook screenreqhook = { 0, 0, (ULONG(*)())&GATEDispatcherFunc, (ULONG(*)())screenreqfunc, 0 }; + + sprintf (verstr, "Bochs x86 Emulator %s", VER_STRING); + + if (SIM->get_param_bool(BXPN_FULLSCREEN)->get()) + { + if((scrmode = SIM->get_param_string(BXPN_SCREENMODE)->getptr())) + { + id = strtoul(scrmode, NULL, 0); + if (!IsCyberModeID(id)) id = INVALID_ID; + } + + if (id == INVALID_ID) + { + if (smr = (ScreenModeRequester *)AllocAslRequestTags(ASL_ScreenModeRequest, + ASLSM_DoWidth, TRUE, + ASLSM_DoHeight, TRUE, + ASLSM_MinDepth, 8, + ASLSM_MaxDepth, 32, + ASLSM_PropertyFlags, DIPF_IS_WB, + ASLSM_PropertyMask, DIPF_IS_WB, + ASLSM_FilterFunc, (ULONG) &screenreqhook, + TAG_DONE)) + { + if (AslRequest(smr, NULL)) + { + id = smr->sm_DisplayID; + FreeAslRequest(smr); + } + else + { + FreeAslRequest(smr); + BX_PANIC(("Amiga: Can't start without a screen")); + } + } + } + + h = GetCyberIDAttr(CYBRIDATTR_HEIGHT, id); + w = GetCyberIDAttr(CYBRIDATTR_WIDTH, id); + d = GetCyberIDAttr(CYBRIDATTR_DEPTH, id); + + //sprintf(scrmode, "%d", id); + //setenv("env:bochs/screenmode", scrmode, 1); + + + screen = OpenScreenTags(NULL, + SA_Width, w, + SA_Height, h, + SA_Depth, d, + SA_Title, verstr, + SA_DisplayID, id, + SA_ShowTitle, FALSE, + SA_Type, PUBLICSCREEN, + SA_SharePens, TRUE, + TAG_DONE); + + if(!screen) + BX_PANIC(("Amiga: Couldn't open screen")); + + window = OpenWindowTags(NULL, + WA_CustomScreen,(int)screen, + WA_Width,w, + WA_Height,h, + WA_Title, verstr, + WA_IDCMP, IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_INACTIVEWINDOW, + WA_ReportMouse, TRUE, + WA_RMBTrap, TRUE, + WA_Backdrop,TRUE, + WA_Borderless,TRUE, + WA_Activate,TRUE, + TAG_DONE); + } + else + { + pub_screen = LockPubScreen(NULL); + if (pub_screen != NULL) + { + screen_drawinfo = GetScreenDrawInfo(pub_screen); + if (screen_drawinfo != NULL) + { + id = GetVPModeID(&pub_screen->ViewPort); + d = GetCyberIDAttr(CYBRIDATTR_DEPTH, id); + } else { + UnlockPubScreen(NULL,pub_screen); + BX_PANIC(("Amiga: Couldn't get ScreenDrawInfo")); + } + + window = OpenWindowTags(NULL, + WA_Width,w, + WA_Height,h, + WA_Title, verstr, + WA_IDCMP, IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_CHANGEWINDOW | IDCMP_INACTIVEWINDOW, + WA_RMBTrap, TRUE, + WA_DepthGadget, TRUE, + WA_ReportMouse, TRUE, + WA_DragBar, TRUE, + WA_Activate,TRUE, + TAG_DONE); + + UnlockPubScreen(NULL,pub_screen); + } + else + BX_PANIC(("Amiga: Couldn't lock the public screen")); + } + + if (!window) + BX_PANIC(("Amiga: Couldn't open the window")); + + if ((emptypointer = (UWORD *)AllocVec (16, MEMF_CLEAR)) == NULL) + BX_PANIC(("Amiga: Couldn't allocate memory")); + + vgafont = OpenDiskFont(&vgata); + + if (SIM->get_param_bool(BXPN_MOUSE_ENABLED)->get()) + hide_pointer(); + + if(!vgafont) + BX_PANIC(("Amiga: Couldn't open the vga font")); + + SetFont(window->RPort, vgafont); + + if (NULL == (vi = GetVisualInfo(window->WScreen, TAG_END))) + BX_PANIC(("Amiga: GetVisualInfo() failed")); + + bx_gadget_handle = CreateContext(&bx_glistptr); + + bx_bordertop = window->BorderTop; + bx_borderleft = window->BorderLeft; + bx_borderright = window->BorderRight; + bx_borderbottom = window->BorderBottom; + bx_headernext_left = bx_borderleft; + bx_headernext_right += bx_borderright; + + for (apen = 0; apen < 256; apen++) /*fill the pen map with -1 so we can know which pens to free at exit*/ + pmap[apen] = -1; + + white = ObtainBestPen(window->WScreen->ViewPort.ColorMap, 0xffffffff, 0xffffffff, 0xffffffff, NULL); + black = ObtainBestPen(window->WScreen->ViewPort.ColorMap, 0x00000000, 0x00000000, 0x00000000, NULL); +} + +void bx_amigaos_gui_c::specific_init(int argc, char **argv, unsigned tilewidth, unsigned tileheight, + unsigned headerbar_y) +{ + x_tilesize = tilewidth; + y_tilesize = tileheight; + + bx_headerbar_y = headerbar_y; + + IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 39); + if (IntuitionBase == NULL) + BX_PANIC(("Amiga: Failed to open intuition.library v39 or later!")); + if (IntuitionBase->LibNode.lib_Version == 50 && IntuitionBase->LibNode.lib_Revision < 5) + BX_PANIC(("Amiga: intuition.library v50 needs to be revision 5 or higher!")); + + GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 39); + if (GfxBase == NULL) + BX_PANIC(("Amiga: Failed to open graphics.library v39 or later!")); + + GadToolsBase = OpenLibrary("gadtools.library", 37); + if (GadToolsBase == NULL) + BX_PANIC(("Amiga: Failed to open gadtools.library v37 or later!")); + if (GadToolsBase->lib_Version == 50 && GadToolsBase->lib_Revision < 3) + BX_PANIC(("Amiga: gadtools.library v50 needs to be revision 3 or higher!")); + + CyberGfxBase = OpenLibrary("cybergraphics.library", 40); + if (CyberGfxBase == NULL) + BX_PANIC(("Amiga: Failed to open cybergraphics.library v40 or later!")); + + AslBase = OpenLibrary("asl.library", 38); + if (AslBase == NULL) + BX_PANIC(("Amiga: Failed to open asl.library v38 or later!")); + + DiskfontBase = OpenLibrary("diskfont.library", 38); + if (DiskfontBase == NULL) + BX_PANIC(("Amiga: Failed to open diskfont.library v38 or later!")); + + IFFParseBase = OpenLibrary("iffparse.library", 39); + if (IFFParseBase == NULL) + BX_PANIC(("Amiga: Failed to open iffparse.library v39 or later!")); + + open_screen(); + setup_inputhandler(); + + if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) { + BX_ERROR(("Amiga: private_colormap option ignored.")); + } +} + +void bx_amigaos_gui_c::handle_events(void) +{ + void (*func) (void); + struct IntuiMessage *imsg = NULL; + struct Gadget *gad; + ULONG imCode,imClass,imQualifier; + Bit32u key_event; + + while ((imsg = (struct IntuiMessage *)GetMsg(window->UserPort))) + { + gad = (struct Gadget *)imsg->IAddress; + key_event= 0; + + imClass = imsg->Class; + imCode = imsg->Code; + imQualifier = imsg->Qualifier; + + ReplyMsg((struct Message *)imsg); + + switch (imClass) { + case IDCMP_RAWKEY: + if (imQualifier & IEQUALIFIER_LSHIFT && imQualifier & IEQUALIFIER_CONTROL && imQualifier & IEQUALIFIER_LCOMMAND) + { + toggle_mouse_enable(); + break; + } + + if(imCode <= 101) + key_event = raw_to_bochs[imCode]; + if(imCode >= 128) + key_event = raw_to_bochs[imCode-128] | BX_KEY_RELEASED; + if(key_event) + DEV_kbd_gen_scancode(key_event); + break; + + case GADGETUP: + ((void (*)()) bx_header_gadget[gad->GadgetID]->UserData)(); + break; + + case IDCMP_INACTIVEWINDOW: + if (SIM->get_param_bool(BXPN_MOUSE_ENABLED)->get()) + toggle_mouse_enable(); + break; + + case IDCMP_CHANGEWINDOW: + if(bx_xchanged) + { + bx_amigaos_gui_c::show_headerbar(); + bx_xchanged = FALSE; + } + break; + } + } +} + + +void bx_amigaos_gui_c::flush(void) { } + +void bx_amigaos_gui_c::clear_screen(void) +{ + if (d > 8 || !SIM->get_param_bool(BXPN_FULLSCREEN)->get()) + SetAPen(window->RPort, black); + else + SetAPen(window->RPort, 0); /*should be ok to clear with the first pen in the map*/ + RectFill(window->RPort, bx_borderleft, bx_bordertop + bx_headerbar_y, window->Width - bx_borderright - 1, window->Height - bx_borderbottom - 1); +} + +void bx_amigaos_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, + unsigned long cursor_x, unsigned long cursor_y, + bx_vga_tminfo_t tm_info) +{ + int i; + int cursori; + unsigned nchars; + char achar; + char string[80]; + int x, y; + static int previ; + unsigned int fgcolor, bgcolor; + + //current cursor position + cursori = (cursor_y * text_cols + cursor_x) * 2; + + // Number of characters on screen, variable number of rows + nchars = text_cols * text_rows; + + for (i=0; i> 4; + + if (i == cursori) /*invert the cursor block*/ + { + SetAPen(window->RPort, pmap[bgcolor]); + SetBPen(window->RPort, pmap[fgcolor]); + } + else + { + SetAPen(window->RPort, pmap[fgcolor]); + SetBPen(window->RPort, pmap[bgcolor]); + } + + x = ((i/2) % text_cols)*window->RPort->TxWidth; + y = ((i/2) / text_cols)*window->RPort->TxHeight; + + Move(window->RPort, bx_borderleft + x, bx_bordertop + bx_headerbar_y + y + window->RPort->TxBaseline); + Text(window->RPort, &achar, 1); + } + } + + previ = cursori; + +} + +int bx_amigaos_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) +{ + struct IFFHandle *iff = NULL; + long err = 0; + struct ContextNode *cn; + + if (!(iff = AllocIFF ())) + { + BX_INFO(("Amiga: Failed to allocate iff handle")); + return 0; + } + + if (!(iff->iff_Stream = (ULONG) OpenClipboard (0))) + { + BX_INFO(("Amiga: Failed to open clipboard device")); + freeiff(iff); + return 0; + } + + InitIFFasClip (iff); + + if (err = OpenIFF (iff, IFFF_READ)) + { + BX_INFO(("Amiga: Failed to open clipboard for reading")); + freeiff(iff); + return 0; + } + + if (err = StopChunk(iff, ID_FTXT, ID_CHRS)) + { + BX_INFO(("Amiga: Failed StopChunk()")); + freeiff(iff); + return 0; + } + + while(1) { + UBYTE readbuf[1024]; + int len = 0; + + err = ParseIFF(iff, IFFPARSE_SCAN); + if(err == IFFERR_EOC) continue; + else if(err) break; + + cn = CurrentChunk(iff); + + if((cn) && (cn->cn_Type == ID_FTXT) && (cn->cn_ID == ID_CHRS)) + { + while((len = ReadChunkBytes(iff,readbuf, 1024)) > 0) + { + Bit8u *buf = new Bit8u[len]; + memcpy (buf, readbuf, len); + *bytes = buf; + *nbytes = len; + } + if(len < 0) err = len; + } + } + + if(err && (err != IFFERR_EOF)) + { + BX_INFO(("Amiga: Failed to read from clipboard")); + freeiff(iff); + return 0; + } + + freeiff(iff); + + return 1; +} + +int bx_amigaos_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) +{ + struct IFFHandle *iff = NULL; + long err = 0; + + BX_INFO(("Amiga: set_clipboard_text")); + + if (!(iff = AllocIFF ())) + { + BX_INFO(("Amiga: Failed to allocate iff handle")); + return 0; + } + + if (!(iff->iff_Stream = (ULONG) OpenClipboard (0))) + { + BX_INFO(("Amiga: Failed to open clipboard device")); + freeiff(iff); + return 0; + } + + InitIFFasClip (iff); + + if (err = OpenIFF (iff, IFFF_WRITE)) + { + BX_INFO(("Amiga: Failed to open clipboard for writing")); + freeiff(iff); + return 0; + } + + if(!(err = PushChunk(iff, ID_FTXT, ID_FORM, IFFSIZE_UNKNOWN))) + { + if(!(err=PushChunk(iff, 0, ID_CHRS, IFFSIZE_UNKNOWN))) + { + if(WriteChunkBytes(iff, text_snapshot, len) != len) + err = IFFERR_WRITE; + } + if(!err) err = PopChunk(iff); + } + if(!err) err = PopChunk(iff); + + if(err) + { + BX_INFO(("Amiga: Failed to write text to clipboard")); + freeiff(iff); + return 0; + } + + freeiff(iff); + + return 1; +} + +bx_bool bx_amigaos_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) +{ + Bit8u *ptr = (Bit8u *)(cmap+index); + + ptr++; /*first 8bits are not defined in the XRGB8 entry*/ + *ptr = red; ptr++; + *ptr = green; ptr++; + *ptr = blue; + + if (d > 8 || !SIM->get_param_bool(BXPN_FULLSCREEN)->get()) + { + if(pmap[index] != -1) + ReleasePen(window->WScreen->ViewPort.ColorMap, pmap[index]); + pmap[index] = ObtainBestPen(window->WScreen->ViewPort.ColorMap, FULL(red), FULL(green), FULL(blue), OBP_Precision, (ULONG) PRECISION_EXACT, TAG_DONE); + } + else + { + SetRGB32(&screen->ViewPort, index, red << 24, green << 24, blue << 24); + pmap[index] = index; + } + + //printf("%d, %d: [%d, %d, %d]\n", pmap[index], index, red, green, blue); + + return(1); +} + +void bx_amigaos_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) +{ + if (d == 8) + WritePixelArray(tile, 0, 0, x_tilesize, window->RPort, bx_borderleft + x0, bx_bordertop + bx_headerbar_y + y0, x_tilesize, y_tilesize, RECTFMT_LUT8); + else + WriteLUTPixelArray(tile, 0, 0, x_tilesize, window->RPort, cmap, bx_borderleft + x0, bx_bordertop + bx_headerbar_y + y0, x_tilesize, y_tilesize, CTABFMT_XRGB8); +} + +void bx_amigaos_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight, unsigned fwidth, unsigned bpp) +{ + + if (bpp > 8) { + BX_PANIC(("%d bpp graphics mode not supported yet", bpp)); + } + + int xdiff = w - x; + + if (fheight > 0) { + text_cols = x / fwidth; + text_rows = y / fheight; + if (fwidth != 8) { + x = x * 8 / fwidth; + } + if (fheight != 16) { + y = y * 16 / fheight; + } + } + + if (!SIM->get_param_bool(BXPN_FULLSCREEN)->get() && (x != w || y != h)) + { + ChangeWindowBox(window, window->LeftEdge, window->TopEdge, x + bx_borderleft + bx_borderright, y + bx_bordertop + bx_borderbottom + bx_headerbar_y); + w = x; + h = y; + } + + /* Now we need to realign the gadgets and refresh the title bar*/ + + if(xdiff != 0) + { + int i; + + for(i = 0; i < bx_headerbar_entries; i++) + { + if(bx_header_gadget[i]->LeftEdge + bx_header_gadget[i]->Width > bx_headernext_left) + bx_header_gadget[i]->LeftEdge -= xdiff; + } + + bx_xchanged = TRUE; + + } +} + +unsigned bx_amigaos_gui_c::create_bitmap(const unsigned char *bmap, unsigned xdim, unsigned ydim) +{ + int i = 0; + Bit8u *a; + + if (bx_image_entries >= BX_MAX_PIXMAPS) { + BX_PANIC(("amiga: too many pixmaps, increase BX_MAX_PIXMAPS")); + } + + bx_header_image[bx_image_entries].LeftEdge = 0; + bx_header_image[bx_image_entries].TopEdge = 0; + bx_header_image[bx_image_entries].Width = xdim; + bx_header_image[bx_image_entries].Height = ydim; + bx_header_image[bx_image_entries].Depth = 2; + bx_header_image[bx_image_entries].ImageData = (UWORD *)bmap; + bx_header_image[bx_image_entries].NextImage = NULL; + bx_header_image[bx_image_entries].PlanePick = 0x1; + if (d > 8 || !SIM->get_param_bool(BXPN_FULLSCREEN)->get()) + bx_header_image[bx_image_entries].PlaneOnOff = 0x2; + + /*we need to reverse the bitorder for this to work*/ + + a = (Bit8u *) bx_header_image[bx_image_entries].ImageData; + + for(i = 0; i <= xdim*ydim/8; i++, a++) + { + *a = ((*a & 0xf0) >> 4) | ((*a & 0x0f) << 4); + *a = ((*a & 0xcc) >> 2) | ((*a & 0x33) << 2); + *a = ((*a & 0xaa) >> 1) | ((*a & 0x55) << 1); + } + +//dprintf("image data (%d), %lx\n", bx_image_entries, bmap); + + bx_image_entries++; + return(bx_image_entries - 1); // return index as handle +} + +unsigned bx_amigaos_gui_c::headerbar_bitmap(unsigned bmap_id, unsigned alignment, void (*f)(void)) +{ + struct NewGadget ng; + + ng.ng_TopEdge = bx_bordertop; + ng.ng_Width = bx_header_image[bmap_id].Width; + ng.ng_Height = bx_header_image[bmap_id].Height; + ng.ng_VisualInfo = vi; + ng.ng_TextAttr = &vgata; + ng.ng_GadgetID = bx_headerbar_entries; + ng.ng_GadgetText = (UBYTE *)""; + ng.ng_Flags = 0; + ng.ng_UserData = f; + + if (alignment == BX_GRAVITY_LEFT) + { + ng.ng_LeftEdge = bx_headernext_left; + bx_headernext_left += ng.ng_Width; + } + else + { + ng.ng_LeftEdge = window->Width - bx_headernext_right - ng.ng_Width; + bx_headernext_right += ng.ng_Width; + } + + bx_gadget_handle = bx_header_gadget[bx_headerbar_entries] = + CreateGadget(BUTTON_KIND, bx_gadget_handle, &ng, GT_Underscore, '_', TAG_END); + + bx_gadget_handle->GadgetType |= GTYP_BOOLGADGET; + bx_gadget_handle->Flags |= GFLG_GADGIMAGE | GFLG_GADGHNONE; + bx_gadget_handle->GadgetRender = &bx_header_image[bmap_id]; + bx_gadget_handle->UserData = f; + + bx_headerbar_entries++; + return(bx_headerbar_entries - 1); +} + +void bx_amigaos_gui_c::show_headerbar(void) +{ + RemoveGList(window, bx_glistptr, bx_headerbar_entries); + + if (d > 8 || !SIM->get_param_bool(BXPN_FULLSCREEN)->get()) + SetAPen(window->RPort, white); + else + SetAPen(window->RPort, 0); + RectFill(window->RPort, bx_borderleft, bx_bordertop, window->Width - bx_borderright - 1, bx_headerbar_y + bx_bordertop - 1); + + AddGList(window, bx_glistptr, ~0, bx_headerbar_entries, NULL); + RefreshGList(bx_glistptr, window, NULL, bx_headerbar_entries + 1); + + GT_RefreshWindow(window,NULL); +} + +void bx_amigaos_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) +{ + bx_header_gadget[hbar_id]->GadgetRender = &bx_header_image[bmap_id]; + + RefreshGList(bx_glistptr, window, NULL, bx_headerbar_entries + 1); +} + +void bx_amigaos_gui_c::exit(void) +{ + if(window) + { + RemoveGList(window, bx_glistptr, bx_headerbar_entries); + FreeGadgets(bx_glistptr); + FreeVec(emptypointer); + + /*Release the pens*/ + while (apen >= 0) + { + if (pmap[apen] == black) + black = -1; + if (pmap[apen] == white) + white = -1; + ReleasePen(window->WScreen->ViewPort.ColorMap, pmap[apen]); + apen--; + } + if (black != -1) + ReleasePen(window->WScreen->ViewPort.ColorMap, black); + if(white != -1) + ReleasePen(window->WScreen->ViewPort.ColorMap, white); + CloseWindow(window); + } + + if(screen) + CloseScreen(screen); + if(CyberGfxBase) + CloseLibrary(CyberGfxBase); + if(GadToolsBase) + CloseLibrary(GadToolsBase); + if(GfxBase) + CloseLibrary((struct Library *)GfxBase); + if(IntuitionBase) + CloseLibrary((struct Library *)IntuitionBase); + if(DiskfontBase) + CloseLibrary(DiskfontBase); + if(AslBase) + CloseLibrary(AslBase); + if(IFFParseBase) + CloseLibrary(IFFParseBase); + + if(!input_error) + { + inputReqBlk->io_Data=(APTR)inputHandler; + inputReqBlk->io_Command=IND_REMHANDLER; + DoIO((struct IORequest *)inputReqBlk); + CloseDevice((struct IORequest *)inputReqBlk); + } + + if(inputReqBlk) + DeleteIORequest((struct IORequest *)inputReqBlk); + if(inputHandler) + FreeMem(inputHandler,sizeof(struct Interrupt)); + if(inputPort) + DeleteMsgPort(inputPort); +} + +void show_pointer(void) +{ + ClearPointer(window); +} + +void hide_pointer(void) +{ + SetPointer(window, emptypointer, 1, 16, 0, 0); +} + +void bx_amigaos_gui_c::mouse_enabled_changed_specific (bx_bool val) +{ + if (val) { + BX_INFO(("[AmigaOS] Mouse on")); + hide_pointer(); + } else { + BX_INFO(("[AmigaOS] Mouse off")); + show_pointer(); + } +} + +void freeiff(struct IFFHandle *iff) +{ + if(iff) { + CloseIFF (iff); + if (iff->iff_Stream) + CloseClipboard((struct ClipboardHandle *) iff->iff_Stream); + FreeIFF(iff); + } +} + +#endif /* if BX_WITH_AMIGAOS */ diff --git a/bochs/gui/beos.cc b/bochs/gui/beos.cc new file mode 100644 index 00000000..5a25a3bb --- /dev/null +++ b/bochs/gui/beos.cc @@ -0,0 +1,1167 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include +#include +#include +#include + +#include "param_names.h" +#include "bochs.h" +#include "iodev.h" +#if BX_WITH_BEOS + +#include +#include +#include +#include +#include +#include + +//#include "icon_bochs.h" +#include "font/vga.bitmap.h" + +class bx_beos_gui_c : public bx_gui_c { +public: + bx_beos_gui_c (void) {} + DECLARE_GUI_VIRTUAL_METHODS() +}; + +// declare one instance of the gui object and call macro to insert the +// plugin code +static bx_beos_gui_c *theGui = NULL; +IMPLEMENT_GUI_PLUGIN_CODE(beos) + +#define LOG_THIS theGui-> + +#define PAD_NEAREST(n, quantum) ((((n) + ((quantum) - 1)) / (n)) * (n)) + +class BochsApplication : public BApplication { +public: + BochsApplication(); +}; + +class BochsWindow : public BWindow { +public: + BochsWindow(BRect frame); + virtual bool QuitRequested(); + virtual void FrameResized(float width, float height); +}; + +class BochsView : public BView { +private: + BBitmap *backing_store; + BView *backing_view; + +public: + BochsView(BRect frame, char *name); + ~BochsView(); + virtual void AttachedToWindow(); + virtual void Draw(BRect updateRect); + virtual void KeyDown(const char *bytes, int32 numBytes); + virtual void KeyUp(const char *bytes, int32 numBytes); + virtual void MouseDown(BPoint point); + virtual void MouseUp(BPoint point); + virtual void MouseMoved(BPoint point, + uint32 transit, const BMessage *message); + void DrawBitmap(const BBitmap *aBitmap, BPoint where); + void FillRect(BRect r, pattern p = B_SOLID_HIGH); + void SetHighColor(uchar r, uchar g, uchar b, uchar a = 255); + void SetLowColor(uchar r, uchar g, uchar b, uchar a = 255); + void SetFont(const BFont *font, uint32 mask = B_FONT_ALL); + void set_text_colors(void); + void set_inv_text_colors(void); + void set_headerbar_colors(void); +}; + + +void GUI_end(void); +void enq_key_event(Bit32u key, Bit32u press_release); +Bit32u deq_key_event(void); +#define SCANCODE_BUFSIZE 20 +static Bit32u keyevents[SCANCODE_BUFSIZE]; +static unsigned head=0, tail=0; +static bool view_attached = 0; + +static BochsApplication *myApplication = NULL; +static BochsWindow *aWindow = NULL; +static BochsView *aView = NULL; +static BView *canvas = NULL; +static uint8 cmap_index[256]; // indeces into system colormap + +static BRect rect; +static BPoint image_origin; +static BBitmap *image = NULL; +static BScreen *screen; +static unsigned long rowsize_padded=0; +static uint8 *rawdata = NULL; + +static unsigned int text_rows=25, text_cols=80; +static unsigned font_width, font_height; +static Bit8u blank_line[80]; +static unsigned dimension_x, dimension_y; + +//static unsigned imDepth, imWide, imBPP; + +// current cursor coordinates +//IRA=> Start +static BPoint current; +static BPoint previous; +static Bit8u mouse_button_state = 0; +//IRA=> End +//static int prev_x=-1, prev_y=-1; +//static int current_x=-1, current_y=-1; + +static unsigned prev_block_cursor_x=0; +static unsigned prev_block_cursor_y=0; + +static void headerbar_click(int x, int y); + +Bit8u ascii_to_scancode[0x7f] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0x39, 0x02, 0x28, 0x04, 0x05, 0x06, 0x08, 0x28, /* !"#$%&' */ + 0x0a, 0x0b, 0x09, 0x0d, 0x33, 0x0c, 0x34, 0x35, /* ()*+,-./ */ + 0x0b, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, /* 01234567 */ + 0x09, 0x0a, 0x27, 0x27, 0x33, 0x0d, 0x34, 0x35, /* 89:;<=>? */ + 0x03, 0x1e, 0x30, 0x2e, 0x20, 0x12, 0x21, 0x22, /* @ABCDEFG */ + 0x23, 0x17, 0x24, 0x25, 0x26, 0x32, 0x31, 0x18, /* HIJKLMNO */ + 0x19, 0x10, 0x13, 0x1f, 0x14, 0x16, 0x2f, 0x11, /* PQRSTUVW */ + 0x2d, 0x15, 0x2c, 0x1a, 0x2b, 0x1b, 0x07, 0x0c, /* XYZ[\]^_ */ + 0x29, 0x1e, 0x30, 0x2e, 0x20, 0x12, 0x21, 0x22, /* `abcdefg */ + 0x23, 0x17, 0x24, 0x25, 0x26, 0x32, 0x31, 0x18, /* hijklmno */ + 0x19, 0x10, 0x13, 0x1f, 0x14, 0x16, 0x2f, 0x11, /* pqrstuvw */ + 0x2d, 0x15, 0x2c, 0x1a, 0x2b, 0x1b, 0x29 /* xyz{|}~ */ +}; + +extern Bit8u graphics_snapshot[32 * 1024]; +//extern pc_keyb_c *pc_keyboard; + + + + +unsigned col_vals[256], curr_foreground, curr_background; + +static unsigned x_tilesize, y_tilesize; + +static struct { + BBitmap *bmap; + unsigned xdim; + unsigned ydim; +} bx_bitmaps[BX_MAX_PIXMAPS]; +static unsigned bx_bitmap_entries = 0; + +static struct { + BBitmap *bitmap; + unsigned xdim; + unsigned ydim; + unsigned xorigin; + unsigned yorigin; + unsigned alignment; + void (*f)(void); +} bx_headerbar_entry[BX_MAX_HEADERBAR_ENTRIES]; + +static unsigned bx_headerbar_y = 0; +static unsigned bx_headerbar_entries = 0; +static unsigned bx_bitmap_left_xorigin = 0; // pixels from left +static unsigned bx_bitmap_right_xorigin = 0; // pixels from right + +static void headerbar_click(int x, int y); +static unsigned char reverse_bitorder(unsigned char b); +static void create_vga_font(void); +static BBitmap *vgafont[256]; + +void bx_beos_gui_c::specific_init(int argc, char **argv, + unsigned tilewidth, unsigned tileheight, + unsigned header_bar_y) +{ + UNUSED(argc); + UNUSED(argv); + + put("BGUI"); + + if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) { + BX_INFO(("BeOS: private_colormap option not handled yet.")); + } + + x_tilesize = tilewidth; + y_tilesize = tileheight; + bx_headerbar_y = header_bar_y; + + for (int i=0; i<80; i++) { + blank_line[i] = ' '; + } + + font_width = 8; + font_height = 16; + + // width = columns * font_width; + // height = rows * font_height; + +BX_INFO(("font_width = %u", (unsigned) font_width)); +BX_INFO(("font_height = %u", (unsigned) font_height)); + + // Create pixmap of depth 1 (bitmap) for icon + // icon_pixmap = XCreateBitmapFromData(bx_x_display, win, + // (char *) bochs_icon_bits, bochs_icon_width, bochs_icon_height); + + curr_background = 0; + // XSetBackground(bx_x_display, gc, col_vals[curr_background]); + curr_foreground = 1; + // XSetForeground(bx_x_display, gc, col_vals[curr_foreground]); + //XGrabPointer(bx_x_display, win, True, 0, GrabModeAsync, GrabModeAsync, + // win, None, CurrentTime); + //XFlush(bx_x_display); + + myApplication = new BochsApplication(); + + // wait until window on screen + while (1) { + aWindow->Lock(); + if (aWindow->IsHidden()) { + aWindow->Unlock(); + continue; + } + aWindow->Unlock(); + break; + } + + screen = new BScreen; + // start out with all color map indeces pointing to Black + cmap_index[0] = screen->IndexForColor(0, 0, 0); + for (unsigned i=1; i<256; i++) { + cmap_index[i] = cmap_index[0]; + } + + rect.Set(0,0, x_tilesize-1, y_tilesize-1); + image = new BBitmap(rect, B_COLOR_8_BIT); + rowsize_padded = PAD_NEAREST(x_tilesize, sizeof(int32)); + rawdata = new uint8[rowsize_padded * y_tilesize]; + + create_vga_font(); +} + +void bx_beos_gui_c::handle_events(void) +{ + Bit32u key; + + while (head != tail) { + key = deq_key_event(); + DEV_kbd_gen_scancode(key); + } +//IRA=> Start + if (aView) { + unsigned long buttons; + aView->LockLooper(); + aView->GetMouse(¤t, &buttons, false); + aView->UnlockLooper(); + + Bit8u newstate = 0; //please note: 2nd and 3rd button are mapped the same + if (buttons & B_PRIMARY_MOUSE_BUTTON) + newstate |= 0x01; + if (buttons & B_SECONDARY_MOUSE_BUTTON) + newstate |= 0x02; + if (buttons & B_TERTIARY_MOUSE_BUTTON) + newstate |= 0x02; + + if (current != previous || mouse_button_state != newstate) { + int dx = (int)(current.x - previous.x) *2; + int dy = -(int)((current.y - previous.y) *2); + DEV_mouse_motion(dx, dy, newstate); + mouse_button_state = newstate; + previous = current; + } + } +//IRA=> End +} + +void bx_beos_gui_c::flush(void) +{ + if (view_attached) aView->Flush(); +} + +void bx_beos_gui_c::clear_screen(void) +{ + aWindow->Lock(); + aView->FillRect(BRect(0, bx_headerbar_y, dimension_x-1, dimension_y-1), B_SOLID_LOW); + aWindow->Unlock(); +} + +void bx_beos_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, + unsigned long cursor_x, unsigned long cursor_y, + bx_vga_tminfo_t tm_info) +{ + unsigned i, x, y; + BPoint point; + unsigned char achar; + unsigned nchars; + + aWindow->Lock(); + + // Number of characters on screen, variable number of rows + nchars = text_cols * text_rows; + + // first draw over character at original block cursor location + if ((prev_block_cursor_y*text_cols + prev_block_cursor_x) < nchars) { + achar = new_text[(prev_block_cursor_y*text_cols + prev_block_cursor_x)*2]; + point.Set(prev_block_cursor_x*8, prev_block_cursor_y*16 + bx_headerbar_y); + aView->DrawBitmap(vgafont[achar], point); + } + + for (i=0; iDrawBitmap(vgafont[achar], point); + } + } + + prev_block_cursor_x = cursor_x; + prev_block_cursor_y = cursor_y; + + // now draw character at new block cursor location in reverse + if ((cursor_y*text_cols + cursor_x) < nchars) { + achar = new_text[(cursor_y*text_cols + cursor_x)*2]; + point.Set(cursor_x*8, cursor_y*16 + bx_headerbar_y); + aView->set_inv_text_colors(); + aView->DrawBitmap(vgafont[achar], point); + aView->set_text_colors(); + } + + aWindow->Unlock(); +} + +int bx_beos_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) +{ + return 0; +} + +int bx_beos_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) +{ + return 0; +} + +void bx_beos_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) +{ + for (unsigned y=0; yLock(); + image->SetBits(rawdata, rowsize_padded * y_tilesize, 0, B_COLOR_8_BIT); + image_origin.Set(x0, y0 + bx_headerbar_y); + + aView->DrawBitmap(image, image_origin); + aWindow->Unlock(); +} + +bx_bool bx_beos_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) +{ + cmap_index[index] = screen->IndexForColor(red, green, blue); + return(1); +} + +void bx_beos_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight, unsigned fwidth, unsigned bpp) +{ + if (bpp > 8) { + BX_PANIC(("%d bpp graphics mode not supported yet", bpp)); + } + if (fheight > 0) { + text_cols = x / fwidth; + text_rows = y / fheight; + if (fwidth != 8) { + x = x * 8 / fwidth; + } + if (fheight != 16) { + y = y * 16 / fheight; + } + } + aWindow->Lock(); + aWindow->ResizeTo(x, y + bx_headerbar_y); + aWindow->Unlock(); +} + + +////////////////////////////////////////////////////// + +void GUI_end() +{ + //myApplication->Run(); + delete(myApplication); +} + +BochsApplication::BochsApplication() + : BApplication("application/x-vnd.Be-Bochs") +{ + BRect aRect; + + int left, right, top, bottom; + left = 5; + top = 80; + dimension_x = 640; + dimension_y = 480 + bx_headerbar_y; + right = left + dimension_x - 1; + bottom = top + dimension_y - 1; + + // set up a rectangle and instantiate a new window + aRect.Set(left, top, right, bottom); + aWindow = new BochsWindow(aRect); + + // set up a rectangle and instantiate a new view + // view rect should be same size as window rect but with left top at (0, 0) + aRect.OffsetTo(B_ORIGIN); + aView = new BochsView(aRect, "BochsView"); + aView->SetViewColor(0, 0, 0); + + aView->set_text_colors(); + + // add view to window + aWindow->AddChild(aView); + + // make window visible + aWindow->Show(); +} + +//void set_palette_entry(long i,rgb_color c); + +BochsWindow::BochsWindow(BRect frame) + : BWindow(frame, "BeBochs V1.3.pre compiled Bernd Korz", B_TITLED_WINDOW, B_NOT_RESIZABLE) +{ +} + +bool BochsWindow::QuitRequested() +{ + be_app->PostMessage(B_QUIT_REQUESTED); + return(TRUE); +} + +void BochsWindow::FrameResized(float width, float height) +{ + dimension_x = unsigned(width); + dimension_y = unsigned(height) + bx_headerbar_y; + theGui->show_headerbar(); +} + +//------------------------------ + +BochsView::BochsView(BRect rect, char *name) + : BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW) +{ + backing_store = new BBitmap(rect, B_BITMAP_ACCEPTS_VIEWS, B_COLOR_8_BIT); + backing_view = new BView(rect,"backing store", B_FOLLOW_ALL, B_WILL_DRAW); + backing_store->AddChild(backing_view); +} + +void BochsView::set_text_colors(void) +{ + aView->SetHighColor(255, 255, 255); + aView->SetLowColor(0, 0, 0); +} + +void BochsView::set_inv_text_colors(void) +{ + aView->SetHighColor(0, 0, 0); + aView->SetLowColor(255, 255, 255); +} + +void BochsView::set_headerbar_colors(void) +{ + aView->SetHighColor(0, 0, 0); + aView->SetLowColor(255, 255, 255); +} + +void BochsView::AttachedToWindow() +{ + BFont font(be_fixed_font); + + aWindow->Lock(); + font.SetSize(16); + font.SetFlags(B_DISABLE_ANTIALIASING); + aView->SetFont(&font); + + aView->MakeFocus(true); + aWindow->Unlock(); + + view_attached = 1; +} + +void BochsView::MouseDown(BPoint point) +{ + UNUSED(point); + if (point.y < BX_HEADER_BAR_Y) { + headerbar_click(int(point.x), int(point.y)); + return; + } + BX_DEBUG(("mousedown()")); +} + +void BochsView::MouseUp(BPoint point) +{ + UNUSED(point); + // currently a place holder function + BX_DEBUG(("mouseup()")); + BView::MouseUp(point); +} + +void BochsView::MouseMoved(BPoint point, + uint32 transit, const BMessage *message) +{ + UNUSED(point); + UNUSED(transit); + UNUSED(message); + BX_DEBUG(("mousemoved()")); +} + +void BochsView::KeyDown(const char *bytes, int32 numBytes) +{ + BMessage *msg; + //int32 key; + int32 modifiers; + + uint8 byte; + + msg = Window()->CurrentMessage(); + if (!msg) { + BX_DEBUG(("keydown() msg NULL")); + return; + } + modifiers = msg->FindInt32("modifiers"); +#if 0 + B_SHIFT_KEY = 0x00000001, + B_COMMAND_KEY = 0x00000002, + B_CONTROL_KEY = 0x00000004, + B_CAPS_LOCK = 0x00000008, + B_SCROLL_LOCK = 0x00000010, + B_NUM_LOCK = 0x00000020, + B_OPTION_KEY = 0x00000040, + B_MENU_KEY = 0x00000080, + B_LEFT_SHIFT_KEY = 0x00000100, + B_RIGHT_SHIFT_KEY = 0x00000200, + B_LEFT_COMMAND_KEY = 0x00000400, + B_RIGHT_COMMAND_KEY = 0x00000800, + B_LEFT_CONTROL_KEY = 0x00001000, + B_RIGHT_CONTROL_KEY = 0x00002000, + B_LEFT_OPTION_KEY = 0x00004000, + B_RIGHT_OPTION_KEY = 0x00008000 +#endif +//if (modifiers) { +// fprintf(stderr, "# modifiers = %08x\n", (unsigned) modifiers); +//} + + if (numBytes == 1) { + //fprintf(stderr, "# down: char %02xh\n", (unsigned) bytes[0]); + byte = bytes[0]; + if (byte == 0x00) { + // Ctrl-Space + enq_key_event(BX_KEY_CTRL_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_SPACE, BX_KEY_PRESSED); + enq_key_event(BX_KEY_SPACE, BX_KEY_RELEASED); + enq_key_event(BX_KEY_CTRL_L, BX_KEY_RELEASED); + return; + } + if (byte == 0x1b) { + // Esc + if (modifiers & B_CONTROL_KEY) + enq_key_event(BX_KEY_CTRL_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_ESC, BX_KEY_PRESSED); + enq_key_event(BX_KEY_ESC, BX_KEY_RELEASED); + if (modifiers & B_CONTROL_KEY) + enq_key_event(BX_KEY_CTRL_L, BX_KEY_RELEASED); + return; + } + if ((byte >= 0x30) && (byte <= 0x39)) { + // 0 .. 9 + byte -= 0x30; + enq_key_event(BX_KEY_0 + byte, BX_KEY_PRESSED); + enq_key_event(BX_KEY_0 + byte, BX_KEY_RELEASED); + return; + } + if ((byte >= 0x41) && (byte <= 0x5A)) { + // A .. Z + byte -= 0x41; + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_A + byte, BX_KEY_PRESSED); + enq_key_event(BX_KEY_A + byte, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + return; + } + if ((byte >= 0x61) && (byte <= 0x7A)) { + // a .. z + byte -= 0x61; + enq_key_event(BX_KEY_A + byte, BX_KEY_PRESSED); + enq_key_event(BX_KEY_A + byte, BX_KEY_RELEASED); + return; + } + switch (byte) { + case 0x20: // Space + enq_key_event(BX_KEY_SPACE, BX_KEY_PRESSED); + enq_key_event(BX_KEY_SPACE, BX_KEY_RELEASED); + break; + case 0x21: // Exclamation Point + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_1, BX_KEY_PRESSED); + enq_key_event(BX_KEY_1, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x22: // Double Quotes + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_SINGLE_QUOTE, BX_KEY_PRESSED); + enq_key_event(BX_KEY_SINGLE_QUOTE, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x23: // Pound Sign + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_3, BX_KEY_PRESSED); + enq_key_event(BX_KEY_3, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x24: // Dollar Sign + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_4, BX_KEY_PRESSED); + enq_key_event(BX_KEY_4, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x25: // Percent + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_5, BX_KEY_PRESSED); + enq_key_event(BX_KEY_5, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x26: // Ampersand + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_7, BX_KEY_PRESSED); + enq_key_event(BX_KEY_7, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x27: // Single Quote + enq_key_event(BX_KEY_SINGLE_QUOTE, BX_KEY_PRESSED); + enq_key_event(BX_KEY_SINGLE_QUOTE, BX_KEY_RELEASED); + break; + case 0x28: // Left Paren + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_9, BX_KEY_PRESSED); + enq_key_event(BX_KEY_9, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x29: // Right Paren + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_0, BX_KEY_PRESSED); + enq_key_event(BX_KEY_0, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x2a: // Multiply + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_8, BX_KEY_PRESSED); + enq_key_event(BX_KEY_8, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x2b: // Add + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_EQUALS, BX_KEY_PRESSED); + enq_key_event(BX_KEY_EQUALS, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x2c: // Comma + enq_key_event(BX_KEY_COMMA, BX_KEY_PRESSED); + enq_key_event(BX_KEY_COMMA, BX_KEY_RELEASED); + break; + case 0x2d: // Minus + enq_key_event(BX_KEY_MINUS, BX_KEY_PRESSED); + enq_key_event(BX_KEY_MINUS, BX_KEY_RELEASED); + break; + case 0x2e: // Period + enq_key_event(BX_KEY_PERIOD, BX_KEY_PRESSED); + enq_key_event(BX_KEY_PERIOD, BX_KEY_RELEASED); + break; + case 0x2f: // Slash + enq_key_event(BX_KEY_SLASH, BX_KEY_PRESSED); + enq_key_event(BX_KEY_SLASH, BX_KEY_RELEASED); + break; + + case 0x3a: // Colon + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_SEMICOLON, BX_KEY_PRESSED); + enq_key_event(BX_KEY_SEMICOLON, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x3b: // Semi-Colon + enq_key_event(BX_KEY_SEMICOLON, BX_KEY_PRESSED); + enq_key_event(BX_KEY_SEMICOLON, BX_KEY_RELEASED); + break; + case 0x3c: // Less Than + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_COMMA, BX_KEY_PRESSED); + enq_key_event(BX_KEY_COMMA, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x3d: // Equals + enq_key_event(BX_KEY_EQUALS, BX_KEY_PRESSED); + enq_key_event(BX_KEY_EQUALS, BX_KEY_RELEASED); + break; + case 0x3e: // Greater Than + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_PERIOD, BX_KEY_PRESSED); + enq_key_event(BX_KEY_PERIOD, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x3f: // Question Mark + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_SLASH, BX_KEY_PRESSED); + enq_key_event(BX_KEY_SLASH, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x40: // At Sign + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_2, BX_KEY_PRESSED); + enq_key_event(BX_KEY_2, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + + case 0x5b: // Left Bracket + enq_key_event(BX_KEY_LEFT_BRACKET, BX_KEY_PRESSED); + enq_key_event(BX_KEY_LEFT_BRACKET, BX_KEY_RELEASED); + break; + case 0x5c: // Back Slash + enq_key_event(BX_KEY_BACKSLASH, BX_KEY_PRESSED); + enq_key_event(BX_KEY_BACKSLASH, BX_KEY_RELEASED); + break; + case 0x5d: // Right Bracket + enq_key_event(BX_KEY_RIGHT_BRACKET, BX_KEY_PRESSED); + enq_key_event(BX_KEY_RIGHT_BRACKET, BX_KEY_RELEASED); + break; + case 0x5e: // Caret + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_6, BX_KEY_PRESSED); + enq_key_event(BX_KEY_6, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x5f: // Underscore + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_MINUS, BX_KEY_PRESSED); + enq_key_event(BX_KEY_MINUS, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x60: // Grave Accent + enq_key_event(BX_KEY_GRAVE, BX_KEY_PRESSED); + enq_key_event(BX_KEY_GRAVE, BX_KEY_RELEASED); + break; + + case 0x7b: // Left Brace + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_LEFT_BRACKET, BX_KEY_PRESSED); + enq_key_event(BX_KEY_LEFT_BRACKET, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x7c: // Verticle Bar + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_BACKSLASH, BX_KEY_PRESSED); + enq_key_event(BX_KEY_BACKSLASH, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x7d: // Right Brace + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_RIGHT_BRACKET, BX_KEY_PRESSED); + enq_key_event(BX_KEY_RIGHT_BRACKET, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + case 0x7e: // Tilde + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_GRAVE, BX_KEY_PRESSED); + enq_key_event(BX_KEY_GRAVE, BX_KEY_RELEASED); + enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); + break; + + case B_BACKSPACE: + enq_key_event(BX_KEY_BACKSPACE, BX_KEY_PRESSED); + enq_key_event(BX_KEY_BACKSPACE, BX_KEY_RELEASED); + break; + case B_ENTER: //case B_RETURN: + enq_key_event(BX_KEY_ENTER, BX_KEY_PRESSED); + enq_key_event(BX_KEY_ENTER, BX_KEY_RELEASED); + break; + case B_TAB: + enq_key_event(BX_KEY_TAB, BX_KEY_PRESSED); + enq_key_event(BX_KEY_TAB, BX_KEY_RELEASED); + break; + case B_LEFT_ARROW: + enq_key_event(BX_KEY_LEFT, BX_KEY_PRESSED); + enq_key_event(BX_KEY_LEFT, BX_KEY_RELEASED); + break; + case B_RIGHT_ARROW: + enq_key_event(BX_KEY_RIGHT, BX_KEY_PRESSED); + enq_key_event(BX_KEY_RIGHT, BX_KEY_RELEASED); + break; + case B_UP_ARROW: + enq_key_event(BX_KEY_UP, BX_KEY_PRESSED); + enq_key_event(BX_KEY_UP, BX_KEY_RELEASED); + break; + case B_DOWN_ARROW: + enq_key_event(BX_KEY_DOWN, BX_KEY_PRESSED); + enq_key_event(BX_KEY_DOWN, BX_KEY_RELEASED); + break; +#if 0 + case B_FUNCTION_KEY: break; + msg->FindInt32("key", &key); + switch (key) { + case B_F1_KEY: break; + case B_F2_KEY: break; + case B_F3_KEY: break; + case B_F4_KEY: break; + case B_F5_KEY: break; + case B_F6_KEY: break; + case B_F7_KEY: break; + case B_F8_KEY: break; + case B_F9_KEY: break; + case B_F10_KEY: break; + case B_F11_KEY: break; + case B_F12_KEY: break; + case B_PRINT_KEY: break; + case B_SCROLL_KEY: break; + case B_PAUSE_KEY: break; + default: + fprintf(stderr, "# keydown() unknown function key %08xh\n", + (unsigned) key); + } +#endif + case B_INSERT: break; + enq_key_event(BX_KEY_INSERT, BX_KEY_PRESSED); + enq_key_event(BX_KEY_INSERT, BX_KEY_RELEASED); + break; + case B_DELETE: break; + enq_key_event(BX_KEY_DELETE, BX_KEY_PRESSED); + enq_key_event(BX_KEY_DELETE, BX_KEY_RELEASED); + break; + case B_HOME: break; + enq_key_event(BX_KEY_HOME, BX_KEY_PRESSED); + enq_key_event(BX_KEY_HOME, BX_KEY_RELEASED); + break; + case B_END: break; + enq_key_event(BX_KEY_END, BX_KEY_PRESSED); + enq_key_event(BX_KEY_END, BX_KEY_RELEASED); + break; + case B_PAGE_UP: break; + enq_key_event(BX_KEY_PAGE_UP, BX_KEY_PRESSED); + enq_key_event(BX_KEY_PAGE_UP, BX_KEY_RELEASED); + break; + case B_PAGE_DOWN: break; + enq_key_event(BX_KEY_PAGE_DOWN, BX_KEY_PRESSED); + enq_key_event(BX_KEY_PAGE_DOWN, BX_KEY_RELEASED); + break; + + default: + if ((byte >= 0x01) && (byte <= 0x1a)) { + // If the above keys dont catch this case, synthesize a + // Ctrl-A .. Ctrl-Z event + byte -= 1; + enq_key_event(BX_KEY_CTRL_L, BX_KEY_PRESSED); + enq_key_event(BX_KEY_A + byte, BX_KEY_PRESSED); + enq_key_event(BX_KEY_A + byte, BX_KEY_RELEASED); + enq_key_event(BX_KEY_CTRL_L, BX_KEY_RELEASED); + return; + } + fprintf(stderr, "# keydown: char %02xh unhandled\n", + (unsigned) bytes[0]); + return; + } + return; + } + else { + // ignore for now + fprintf(stderr, "# keydown() ignoring multibyte key\n"); + } +} + +void BochsView::KeyUp(const char *bytes, int32 numBytes) +{ + UNUSED(bytes); + UNUSED(numBytes); +} + +void BochsView::Draw(BRect rect) +{ + DrawBitmapAsync(backing_store, rect, rect); +} + +BochsView::~BochsView() +{ + delete backing_store; + delete backing_view; +} + +void BochsView::SetFont(const BFont *font, uint32 mask) +{ + backing_store->Lock(); + backing_view->SetFont(font,mask); + backing_store->Unlock(); +} + +void BochsView::SetHighColor(uchar r, uchar g, uchar b, uchar a) +{ + backing_store->Lock(); + backing_view->SetHighColor(r,g,b,a); + backing_store->Unlock(); +} + +void BochsView::SetLowColor(uchar r, uchar g, uchar b, uchar a) +{ + backing_store->Lock(); + backing_view->SetLowColor(r,g,b,a); + backing_store->Unlock(); +} + +void BochsView::DrawBitmap(const BBitmap *aBitmap, BPoint where) +{ + backing_store->Lock(); + backing_view->DrawBitmap(aBitmap,where); + backing_store->Unlock(); + BRect r = aBitmap->Bounds(); + r.OffsetBy(where); + Invalidate(r); +} + +void BochsView::FillRect(BRect r, pattern p) +{ + backing_store->Lock(); + backing_view->FillRect(r,p); + backing_store->Unlock(); + Invalidate(r); +} + +void enq_key_event(Bit32u key, Bit32u press_release) +{ + if (((tail+1) % SCANCODE_BUFSIZE) == head) { + fprintf(stderr, "# enq_key_event: buffer full\n"); + return; + } + keyevents[tail] = key | press_release; + tail = (tail + 1) % SCANCODE_BUFSIZE; +} + +Bit32u deq_key_event(void) +{ + Bit32u key; + + if (head == tail) { + fprintf(stderr, "# deq_key_event: buffer empty\n"); + return(0); + } + key = keyevents[head]; + head = (head + 1) % SCANCODE_BUFSIZE; + return(key); +} + +unsigned char reverse_bitorder(unsigned char b) +{ + unsigned char ret=0; + for (unsigned i=0; i<8; i++) { + ret |= (b & 0x01) << (7-i); + b >>= 1; + } + return(ret); +} + +unsigned bx_beos_gui_c::create_bitmap(const unsigned char *bmap, + unsigned xdim, unsigned ydim) +{ + BRect rect(0.0, 0.0, xdim-1, ydim-1); + int32 bitslength; + //int32 bytesperrow; + unsigned char *data; + + if (bx_bitmap_entries >= BX_MAX_PIXMAPS) { + BX_PANIC(("beos: too many pixmaps, increase BX_MAX_PIXMAPS")); + } + + bx_bitmaps[bx_bitmap_entries].bmap = + new BBitmap(rect, B_MONOCHROME_1_BIT); + + bitslength = bx_bitmaps[bx_bitmap_entries].bmap->BitsLength(); + //bytesperrow = bx_bitmaps[bx_bitmap_entries].bmap->BytesPerRow(); + data = (unsigned char *) bx_bitmaps[bx_bitmap_entries].bmap->Bits(); + for (int32 i=0; i BX_MAX_HEADERBAR_ENTRIES) + BX_PANIC(("beos: too many headerbar entries, increase BX_MAX_HEADERBAR_ENTRIES")); + + bx_headerbar_entries++; + hb_index = bx_headerbar_entries - 1; + + bx_headerbar_entry[hb_index].bitmap = bx_bitmaps[bmap_id].bmap; + bx_headerbar_entry[hb_index].xdim = bx_bitmaps[bmap_id].xdim; + bx_headerbar_entry[hb_index].ydim = bx_bitmaps[bmap_id].ydim; + bx_headerbar_entry[hb_index].alignment = alignment; + bx_headerbar_entry[hb_index].f = f; + if (alignment == BX_GRAVITY_LEFT) { + bx_headerbar_entry[hb_index].xorigin = bx_bitmap_left_xorigin; + bx_headerbar_entry[hb_index].yorigin = 0; + bx_bitmap_left_xorigin += bx_bitmaps[bmap_id].xdim; + } + else { // BX_GRAVITY_RIGHT + bx_bitmap_right_xorigin += bx_bitmaps[bmap_id].xdim; + bx_headerbar_entry[hb_index].xorigin = bx_bitmap_right_xorigin; + bx_headerbar_entry[hb_index].yorigin = 0; + } + return(hb_index); +} + +void bx_beos_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) +{ + unsigned xorigin; + + bx_headerbar_entry[hbar_id].bitmap = bx_bitmaps[bmap_id].bmap; + + if (bx_headerbar_entry[hbar_id].alignment == BX_GRAVITY_LEFT) + xorigin = bx_headerbar_entry[hbar_id].xorigin; + else + xorigin = dimension_x - bx_headerbar_entry[hbar_id].xorigin; + aWindow->Lock(); + aView->set_headerbar_colors(); + aView->DrawBitmap(bx_headerbar_entry[hbar_id].bitmap, BPoint(xorigin, 0)); + aView->set_text_colors(); + aWindow->Unlock(); +} + +void bx_beos_gui_c::show_headerbar(void) +{ + unsigned xorigin; + BPoint origin; + + // clear header bar area to white + + aWindow->Lock(); + aView->set_headerbar_colors(); + aView->FillRect(BRect(0, 0, dimension_x-1, bx_headerbar_y-1), B_SOLID_LOW); + for (unsigned i=0; iDrawBitmap(bx_headerbar_entry[i].bitmap, origin); + } + aView->set_text_colors(); + aWindow->Unlock(); +} + +void headerbar_click(int x, int y) +{ + int xorigin; + + // assuming y is in bounds + UNUSED(y); + for (unsigned i=0; i=xorigin) && (x<(xorigin+int(bx_headerbar_entry[i].xdim)))) { + bx_headerbar_entry[i].f(); + return; + } + } +} + +void create_vga_font(void) +{ + int32 bitslength; + int32 bytesperrow; + unsigned char *data; + BRect brect(0,0, 7,15); + + BX_INFO(("BeOS: creating VGA font from bitmaps")); + + // VGA font is 8wide x 16high + for (unsigned c=0; c<256; c++) { + vgafont[c] = new BBitmap(brect, B_MONOCHROME_1_BIT); + if (!vgafont[c]) { + BX_PANIC(("beos: could not create bitmap")); + } + + bitslength = vgafont[c]->BitsLength(); + bytesperrow = vgafont[c]->BytesPerRow(); + data = (unsigned char *) vgafont[c]->Bits(); + memset(data, 0, bitslength); + for (unsigned i=0; i<16; i++) { + data[i*bytesperrow] = reverse_bitorder(bx_vgafont[c].data[i]); + } + } +} + +void bx_beos_gui_c::exit(void) +{ + fprintf(stderr, "# WARNING: BEOS: bx_beos_gui_c::exit() not implemented yet.\n"); +} + +//IRA=> Start +// This is called whenever the mouse_enabled parameter changes. It +// can change because of a gui event such as clicking on the mouse-enable +// bitmap or pressing the middle button, or from the configuration interface. +// In all those cases, setting the parameter value will get you here. + +void bx_beos_gui_c::mouse_enabled_changed_specific (bx_bool val) +{ + BX_DEBUG (("mouse_enabled=%d, BeOS specific code", val?1:0)); + if (val) { + BX_INFO(("[x] Mouse on")); +// mouse_enable_x = current_x; +// mouse_enable_y = current_y; + be_app->HideCursor(); + // Move the cursor to a 'safe' place +// warp_cursor(warp_home_x-current_x, warp_home_y-current_y); + } else { + BX_INFO(("[x] Mouse off")); + be_app->ShowCursor(); +// warp_cursor(mouse_enable_x-current_x, mouse_enable_y-current_y); + } +} +//IRA=> End + +#endif /* if BX_WITH_BEOS */ diff --git a/bochs/gui/bitmaps/cdromd.h b/bochs/gui/bitmaps/cdromd.h new file mode 100644 index 00000000..45e8382e --- /dev/null +++ b/bochs/gui/bitmaps/cdromd.h @@ -0,0 +1,34 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#define BX_CDROMD_BMAP_X 32 +#define BX_CDROMD_BMAP_Y 32 + +static const unsigned char bx_cdromd_bmap[(BX_CONFIG_BMAP_X * BX_CONFIG_BMAP_Y)/8] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0e, 0x00, 0x00, 0x10, 0x12, 0x00, + 0x00, 0x10, 0x12, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x60, 0x0e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x0c, 0x30, 0x00, + 0x00, 0xe2, 0x47, 0x00, 0x00, 0x19, 0x98, 0x00, 0x80, 0xe6, 0x67, 0x01, + 0x40, 0x19, 0x98, 0x02, 0x20, 0xe5, 0xa7, 0x04, 0xa0, 0x12, 0x48, 0x05, + 0x90, 0xca, 0x53, 0x09, 0x50, 0x25, 0xa4, 0x0a, 0x50, 0x15, 0xa8, 0x0a, + 0x50, 0x15, 0xa8, 0x0a, 0x50, 0x15, 0xa8, 0x0a, 0x50, 0x15, 0xa8, 0x0a, + 0x50, 0x25, 0xa4, 0x0a, 0x90, 0xca, 0x53, 0x09, 0xa0, 0x12, 0x48, 0x05, + 0x20, 0xe5, 0xa7, 0x04, 0x40, 0x19, 0x98, 0x02, 0x80, 0xe6, 0x67, 0x01, + 0x00, 0x19, 0x98, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0x0c, 0x30, 0x00, + 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +static const unsigned char bx_cdromd_eject_bmap[(BX_CONFIG_BMAP_X * BX_CONFIG_BMAP_Y)/8] = { + 0x01, 0x00, 0x00, 0x80, 0x02, 0x60, 0x0e, 0x40, 0x04, 0x10, 0x12, 0x20, + 0x08, 0x10, 0x12, 0x10, 0x10, 0x10, 0x12, 0x08, 0x20, 0x60, 0x0e, 0x04, + 0x40, 0x00, 0x00, 0x02, 0x80, 0xf0, 0x0f, 0x01, 0x00, 0x0d, 0xb0, 0x00, + 0x00, 0xe2, 0x47, 0x00, 0x00, 0x1d, 0xb8, 0x00, 0x80, 0xee, 0x77, 0x01, + 0x40, 0x19, 0x98, 0x02, 0x20, 0xe5, 0xa7, 0x04, 0xa0, 0x52, 0x4a, 0x05, + 0x90, 0xca, 0x53, 0x09, 0x50, 0xa5, 0xa5, 0x0a, 0x50, 0x55, 0xaa, 0x0a, + 0x50, 0x35, 0xac, 0x0a, 0x50, 0x15, 0xa8, 0x0a, 0x50, 0x1d, 0xb8, 0x0a, + 0x50, 0x25, 0xa4, 0x0a, 0x90, 0xca, 0x53, 0x09, 0xa0, 0x13, 0xc8, 0x05, + 0xa0, 0xe5, 0xa7, 0x05, 0x40, 0x19, 0x98, 0x02, 0xa0, 0xe6, 0x67, 0x05, + 0x10, 0x19, 0x98, 0x08, 0x08, 0xe2, 0x47, 0x10, 0x04, 0x0c, 0x30, 0x20, + 0x02, 0xf0, 0x0f, 0x40, 0x01, 0x00, 0x00, 0x80 +}; diff --git a/bochs/gui/bitmaps/cdromd.xpm b/bochs/gui/bitmaps/cdromd.xpm new file mode 100644 index 00000000..a9f9d979 --- /dev/null +++ b/bochs/gui/bitmaps/cdromd.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *cdromd_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 32 32 2 1", +/* colors */ +". c None", +"# c #000000", +/* pixels */ +"................................", +".............##..###............", +"............#....#..#...........", +"............#....#..#...........", +"............#....#..#...........", +".............##..###............", +"................................", +"............########............", +"..........##........##..........", +".........#...######...#.........", +"........#..##......##..#........", +".......#.##..######..##.#.......", +"......#.#..##......##..#.#......", +".....#..#.#..######..#.#..#.....", +".....#.#.#..#......#..#.#.#.....", +"....#..#.#.#..####..#.#.#..#....", +"....#.#.#.#..#....#..#.#.#.#....", +"....#.#.#.#.#......#.#.#.#.#....", +"....#.#.#.#.#......#.#.#.#.#....", +"....#.#.#.#.#......#.#.#.#.#....", +"....#.#.#.#.#......#.#.#.#.#....", +"....#.#.#.#..#....#..#.#.#.#....", +"....#..#.#.#..####..#.#.#..#....", +".....#.#.#..#......#..#.#.#.....", +".....#..#.#..######..#.#..#.....", +"......#.#..##......##..#.#......", +".......#.##..######..##.#.......", +"........#..##......##..#........", +".........#...######...#.........", +"..........##........##..........", +"............########............", +"................................" +}; diff --git a/bochs/gui/bitmaps/configbutton.h b/bochs/gui/bitmaps/configbutton.h new file mode 100644 index 00000000..1ce239dd --- /dev/null +++ b/bochs/gui/bitmaps/configbutton.h @@ -0,0 +1,16 @@ +#define BX_CONFIG_BMAP_X 32 +#define BX_CONFIG_BMAP_Y 32 + +static const unsigned char bx_config_bmap[(BX_CONFIG_BMAP_X * BX_CONFIG_BMAP_Y)/8] = { + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x80, 0x01, 0xfc, 0x7f, 0xc0, 0x03, + 0xfc, 0xff, 0xc1, 0x03, 0xfc, 0xff, 0xc1, 0x03, 0xfc, 0x7f, 0xc0, 0x03, + 0x84, 0x07, 0xc0, 0x03, 0x80, 0x07, 0xc0, 0x03, 0x80, 0x07, 0xc0, 0x03, + 0x80, 0x07, 0xc0, 0x03, 0x80, 0x07, 0xc0, 0x03, 0x80, 0x07, 0xc0, 0x03, + 0x80, 0x07, 0xc0, 0x03, 0x80, 0x07, 0xc0, 0x03, 0x80, 0x07, 0xc0, 0x03, + 0x80, 0x07, 0xc0, 0x03, 0x80, 0x07, 0xc0, 0x03, 0x80, 0x07, 0xc0, 0x03, + 0x80, 0x07, 0xc0, 0x03, 0x80, 0x07, 0xe0, 0x07, 0x80, 0x07, 0xf0, 0x0f, + 0x80, 0x07, 0x70, 0x0e, 0x80, 0x07, 0x30, 0x0c, 0x80, 0x07, 0x30, 0x0c, + 0x80, 0x07, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x38, 0x27, 0xba, 0x1c, + 0x84, 0x68, 0x8a, 0x02, 0x84, 0xa8, 0xba, 0x32, 0x84, 0x28, 0x8b, 0x22, + 0x38, 0x27, 0x8a, 0x1c, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/bochs/gui/bitmaps/configbutton.xpm b/bochs/gui/bitmaps/configbutton.xpm new file mode 100644 index 00000000..719e620d --- /dev/null +++ b/bochs/gui/bitmaps/configbutton.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *configbutton_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 32 32 2 1", +/* colors */ +". c None", +"# c #000000", +/* pixels */ +"................................", +"..#....................##.......", +"..#############.......####......", +"..###############.....####......", +"..###############.....####......", +"..#############.......####......", +"..#....####...........####......", +".......####...........####......", +".......####...........####......", +".......####...........####......", +".......####...........####......", +".......####...........####......", +".......####...........####......", +".......####...........####......", +".......####...........####......", +".......####...........####......", +".......####...........####......", +".......####...........####......", +".......####...........####......", +".......####..........######.....", +".......####.........########....", +".......####.........###..###....", +".......####.........##....##....", +".......####.........##....##....", +".......####..........#....#.....", +"................................", +"...###..###..#...#.###.#..###...", +"..#....#...#.##..#.#...#.#......", +"..#....#...#.#.#.#.###.#.#..##..", +"..#....#...#.#..##.#...#.#...#..", +"...###..###..#...#.#...#..###...", +"................................" +}; diff --git a/bochs/gui/bitmaps/copy.h b/bochs/gui/bitmaps/copy.h new file mode 100644 index 00000000..04ee1ed2 --- /dev/null +++ b/bochs/gui/bitmaps/copy.h @@ -0,0 +1,19 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#define BX_COPY_BMAP_X 32 +#define BX_COPY_BMAP_Y 32 + +static unsigned char bx_copy_bmap[(BX_COPY_BMAP_X*BX_COPY_BMAP_Y)] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x80, 0x60, 0x4e, 0x02, 0x80, 0x90, 0x52, 0x02, 0x80, 0x90, 0x52, 0x02, + 0x00, 0x6f, 0x8e, 0x03, 0x00, 0x00, 0x02, 0x02, 0xf8, 0x3f, 0x02, 0x02, + 0x08, 0x20, 0xc0, 0x01, 0xe8, 0x2b, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, + 0xe8, 0x2e, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0xe8, 0x39, 0x00, 0x00, + 0x08, 0x24, 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, 0xe8, 0xaf, 0xff, 0x03, + 0x08, 0xa0, 0x00, 0x02, 0xf8, 0xbf, 0xbe, 0x02, 0x00, 0x80, 0x00, 0x02, + 0x80, 0x88, 0xee, 0x02, 0x80, 0x90, 0x00, 0x02, 0x00, 0xbf, 0x9e, 0x03, + 0x00, 0x90, 0x40, 0x02, 0x00, 0x88, 0x08, 0x02, 0x00, 0x80, 0xfe, 0x02, + 0x00, 0x80, 0x00, 0x02, 0x00, 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; diff --git a/bochs/gui/bitmaps/copy.xpm b/bochs/gui/bitmaps/copy.xpm new file mode 100644 index 00000000..e0b44143 --- /dev/null +++ b/bochs/gui/bitmaps/copy.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *copy_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 32 32 2 1", +/* colors */ +". c None", +"# c #000000", +/* pixels */ +"................................", +"........####....................", +".......#........................", +".......#.....##..###..#..#......", +".......#....#..#.#..#.#..#......", +".......#....#..#.#..#.#..#......", +"........####.##..###...###......", +".................#.......#......", +"...###########...#.......#......", +"...#.........#........###.......", +"...#.#####.#.#..................", +"...#.........#..................", +"...#.###.###.#..................", +"...#.........#..................", +"...#.####..###..................", +"...#......#..#..................", +"...#...#.....#..................", +"...#.#######.#.###########......", +"...#.........#.#.........#......", +"...###########.#.#####.#.#......", +"...............#.........#......", +".......#...#...#.###.###.#......", +".......#....#..#.........#......", +"........######.#.####..###......", +"............#..#......#..#......", +"...........#...#...#.....#......", +"...............#.#######.#......", +"...............#.........#......", +"...............###########......", +"................................", +"................................", +"................................" +}; diff --git a/bochs/gui/bitmaps/floppya.h b/bochs/gui/bitmaps/floppya.h new file mode 100644 index 00000000..17222c35 --- /dev/null +++ b/bochs/gui/bitmaps/floppya.h @@ -0,0 +1,34 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#define BX_FLOPPYA_BMAP_X 32 +#define BX_FLOPPYA_BMAP_Y 32 + +static const unsigned char bx_floppya_bmap[(BX_FLOPPYA_BMAP_X * BX_FLOPPYA_BMAP_Y)/8] = { + 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x40, 0x11, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x60, 0x13, 0x00, 0x00, 0x60, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0x01, 0x80, 0x07, + 0x20, 0xfd, 0xbf, 0x04, 0x20, 0x01, 0x80, 0x04, 0xe0, 0xfd, 0xbf, 0x07, + 0xe0, 0x01, 0x80, 0x07, 0xe0, 0xfd, 0xbf, 0x07, 0xe0, 0x01, 0x80, 0x07, + 0xe0, 0xfd, 0xbf, 0x07, 0xe0, 0x01, 0x80, 0x07, 0xe0, 0xfd, 0xbf, 0x07, + 0xe0, 0x01, 0x80, 0x07, 0xe0, 0xfd, 0xbf, 0x07, 0xe0, 0x01, 0x80, 0x07, + 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, + 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xaf, 0xea, 0x07, 0xe0, 0xf7, 0xd5, 0x07, + 0xe0, 0xef, 0xea, 0x07, 0xe0, 0xf7, 0xd5, 0x07, 0xc0, 0xef, 0xea, 0x07, + 0x80, 0x57, 0xd5, 0x07, 0x00, 0xaf, 0xea, 0x07 +}; + +static const unsigned char bx_floppya_eject_bmap[(BX_FLOPPYA_BMAP_X * BX_FLOPPYA_BMAP_Y)/8] = { + 0x01, 0x80, 0x00, 0x80, 0x02, 0x40, 0x01, 0x40, 0x04, 0x40, 0x11, 0x20, + 0x08, 0xc0, 0x01, 0x10, 0x10, 0x60, 0x13, 0x08, 0x20, 0x60, 0x03, 0x04, + 0x40, 0x00, 0x00, 0x02, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0x01, 0x80, 0x07, + 0x20, 0xff, 0xff, 0x04, 0x20, 0x05, 0xa0, 0x04, 0xe0, 0xfd, 0xbf, 0x07, + 0xe0, 0x11, 0x88, 0x07, 0xe0, 0xfd, 0xbf, 0x07, 0xe0, 0x41, 0x82, 0x07, + 0xe0, 0xfd, 0xbf, 0x07, 0xe0, 0x81, 0x81, 0x07, 0xe0, 0xfd, 0xbf, 0x07, + 0xe0, 0x21, 0x84, 0x07, 0xe0, 0xfd, 0xbf, 0x07, 0xe0, 0x09, 0x90, 0x07, + 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, + 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xaf, 0xea, 0x07, 0xe0, 0xf7, 0xd5, 0x07, + 0xf0, 0xef, 0xea, 0x0f, 0xe8, 0xf7, 0xd5, 0x17, 0xc4, 0xef, 0xea, 0x27, + 0x82, 0x57, 0xd5, 0x47, 0x01, 0xaf, 0xea, 0x87 +}; diff --git a/bochs/gui/bitmaps/floppya.xpm b/bochs/gui/bitmaps/floppya.xpm new file mode 100644 index 00000000..90c3d75b --- /dev/null +++ b/bochs/gui/bitmaps/floppya.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *floppya_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 32 32 2 1", +/* colors */ +". c None", +"# c #000000", +/* pixels */ +"...............#................", +"..............#.#...............", +"..............#.#...#...........", +"..............###...............", +".............##.##..#...........", +".............##.##..............", +"................................", +".....######################.....", +".....####..............####.....", +".....#..#.############.#..#.....", +".....#..#..............#..#.....", +".....####.############.####.....", +".....####..............####.....", +".....####.############.####.....", +".....####..............####.....", +".....####.############.####.....", +".....####..............####.....", +".....####.############.####.....", +".....####..............####.....", +".....####.############.####.....", +".....####..............####.....", +".....######################.....", +".....######################.....", +".....######################.....", +".....######################.....", +".....#######.#.#.#.#.######.....", +".....######.#####.#.#.#####.....", +".....#######.###.#.#.######.....", +".....######.#####.#.#.#####.....", +"......######.###.#.#.######.....", +".......####.#.#.#.#.#.#####.....", +"........####.#.#.#.#.######....." +}; diff --git a/bochs/gui/bitmaps/floppyb.h b/bochs/gui/bitmaps/floppyb.h new file mode 100644 index 00000000..8a3be0f1 --- /dev/null +++ b/bochs/gui/bitmaps/floppyb.h @@ -0,0 +1,34 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#define BX_FLOPPYB_BMAP_X 32 +#define BX_FLOPPYB_BMAP_Y 32 + +static const unsigned char bx_floppyb_bmap[(BX_FLOPPYB_BMAP_X * BX_FLOPPYB_BMAP_Y)/8] = { + 0x00, 0xe0, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0xe0, 0x08, 0x00, + 0x00, 0x20, 0x01, 0x00, 0x00, 0x20, 0x09, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0x01, 0x80, 0x07, + 0x20, 0xfd, 0xbf, 0x04, 0x20, 0x01, 0x80, 0x04, 0xe0, 0xfd, 0xbf, 0x07, + 0xe0, 0x01, 0x80, 0x07, 0xe0, 0xfd, 0xbf, 0x07, 0xe0, 0x01, 0x80, 0x07, + 0xe0, 0xfd, 0xbf, 0x07, 0xe0, 0x01, 0x80, 0x07, 0xe0, 0xfd, 0xbf, 0x07, + 0xe0, 0x01, 0x80, 0x07, 0xe0, 0xfd, 0xbf, 0x07, 0xe0, 0x01, 0x80, 0x07, + 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, + 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xaf, 0xea, 0x07, 0xe0, 0xf7, 0xd5, 0x07, + 0xe0, 0xef, 0xea, 0x07, 0xe0, 0xf7, 0xd5, 0x07, 0xc0, 0xef, 0xea, 0x07, + 0x80, 0x57, 0xd5, 0x07, 0x00, 0xaf, 0xea, 0x07 +}; + +static const unsigned char bx_floppyb_eject_bmap[(BX_FLOPPYB_BMAP_X * BX_FLOPPYB_BMAP_Y)/8] = { + 0x01, 0xe0, 0x00, 0x80, 0x02, 0x20, 0x01, 0x40, 0x04, 0xe0, 0x08, 0x20, + 0x08, 0x20, 0x01, 0x10, 0x10, 0x20, 0x09, 0x08, 0x20, 0xe0, 0x00, 0x04, + 0x40, 0x00, 0x00, 0x02, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0x01, 0x80, 0x07, + 0x20, 0xff, 0xff, 0x04, 0x20, 0x05, 0xa0, 0x04, 0xe0, 0xfd, 0xbf, 0x07, + 0xe0, 0x11, 0x88, 0x07, 0xe0, 0xfd, 0xbf, 0x07, 0xe0, 0x41, 0x82, 0x07, + 0xe0, 0xfd, 0xbf, 0x07, 0xe0, 0x81, 0x81, 0x07, 0xe0, 0xfd, 0xbf, 0x07, + 0xe0, 0x21, 0x84, 0x07, 0xe0, 0xfd, 0xbf, 0x07, 0xe0, 0x09, 0x90, 0x07, + 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, + 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xaf, 0xea, 0x07, 0xe0, 0xf7, 0xd5, 0x07, + 0xf0, 0xef, 0xea, 0x0f, 0xe8, 0xf7, 0xd5, 0x17, 0xc4, 0xef, 0xea, 0x27, + 0x82, 0x57, 0xd5, 0x47, 0x01, 0xaf, 0xea, 0x87 +}; diff --git a/bochs/gui/bitmaps/floppyb.xpm b/bochs/gui/bitmaps/floppyb.xpm new file mode 100644 index 00000000..858cafcc --- /dev/null +++ b/bochs/gui/bitmaps/floppyb.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *floppyb_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 32 32 2 1", +/* colors */ +". c None", +"# c #000000", +/* pixels */ +".............###................", +".............#..#...............", +".............###...#............", +".............#..#...............", +".............#..#..#............", +".............###................", +"................................", +".....######################.....", +".....####..............####.....", +".....#..#.############.#..#.....", +".....#..#..............#..#.....", +".....####.############.####.....", +".....####..............####.....", +".....####.############.####.....", +".....####..............####.....", +".....####.############.####.....", +".....####..............####.....", +".....####.############.####.....", +".....####..............####.....", +".....####.############.####.....", +".....####..............####.....", +".....######################.....", +".....######################.....", +".....######################.....", +".....######################.....", +".....#######.#.#.#.#.######.....", +".....######.#####.#.#.#####.....", +".....#######.###.#.#.######.....", +".....######.#####.#.#.#####.....", +"......######.###.#.#.######.....", +".......####.#.#.#.#.#.#####.....", +"........####.#.#.#.#.######....." +}; diff --git a/bochs/gui/bitmaps/mouse.h b/bochs/gui/bitmaps/mouse.h new file mode 100644 index 00000000..be7d246d --- /dev/null +++ b/bochs/gui/bitmaps/mouse.h @@ -0,0 +1,34 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#define BX_MOUSE_BMAP_X 32 +#define BX_MOUSE_BMAP_Y 32 + +static unsigned char bx_mouse_bmap[(BX_MOUSE_BMAP_X * BX_MOUSE_BMAP_Y)/8] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xf8, 0x1f, 0x00, + 0x00, 0x0c, 0x30, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x06, 0x40, 0x00, + 0xf8, 0xff, 0xc0, 0x00, 0x0c, 0x80, 0xc1, 0x00, 0x24, 0x22, 0xc1, 0x00, + 0x74, 0x77, 0x81, 0x00, 0x74, 0x77, 0x81, 0x01, 0x74, 0x77, 0x81, 0x01, + 0x74, 0x77, 0x01, 0x01, 0x74, 0x77, 0x01, 0x03, 0x74, 0x77, 0x01, 0x06, + 0x24, 0x22, 0x01, 0x0c, 0x0c, 0x80, 0x01, 0x38, 0x04, 0x00, 0x01, 0x00, + 0x0c, 0x80, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x0c, 0x80, 0x01, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x0c, 0x80, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x0c, 0x80, 0x01, 0x00, 0x14, 0x40, 0x01, 0x00, 0x2c, 0xa0, 0x01, 0x00, + 0x54, 0x55, 0x01, 0x00, 0xac, 0xaa, 0x01, 0x00, 0xf8, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +static unsigned char bx_nomouse_bmap[(BX_MOUSE_BMAP_X * BX_MOUSE_BMAP_Y)/8] = { + 0x01, 0x00, 0x00, 0x80, 0x02, 0xe0, 0x07, 0x40, 0x04, 0xf8, 0x1f, 0x20, + 0x08, 0x0c, 0x30, 0x10, 0x10, 0x06, 0x60, 0x08, 0x20, 0x06, 0x40, 0x04, + 0xf8, 0xff, 0xc0, 0x02, 0x8c, 0x80, 0xc1, 0x01, 0x24, 0x23, 0xc1, 0x00, + 0x74, 0x77, 0xc1, 0x00, 0x74, 0x77, 0xa1, 0x01, 0x74, 0x7f, 0x91, 0x01, + 0x74, 0x77, 0x09, 0x01, 0x74, 0x77, 0x05, 0x03, 0x74, 0x77, 0x03, 0x06, + 0x24, 0xa2, 0x01, 0x0c, 0x0c, 0x80, 0x01, 0x38, 0x04, 0x40, 0x03, 0x00, + 0x0c, 0xa0, 0x05, 0x00, 0x04, 0x10, 0x09, 0x00, 0x0c, 0x88, 0x11, 0x00, + 0x04, 0x04, 0x21, 0x00, 0x0c, 0x82, 0x41, 0x00, 0x04, 0x01, 0x81, 0x00, + 0x8c, 0x80, 0x01, 0x01, 0x54, 0x40, 0x01, 0x02, 0x2c, 0xa0, 0x01, 0x04, + 0x54, 0x55, 0x01, 0x08, 0xac, 0xaa, 0x01, 0x10, 0xfc, 0xff, 0x00, 0x20, + 0x02, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x80 +}; diff --git a/bochs/gui/bitmaps/mouse.xpm b/bochs/gui/bitmaps/mouse.xpm new file mode 100644 index 00000000..6bee3a61 --- /dev/null +++ b/bochs/gui/bitmaps/mouse.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *mouse_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 32 32 2 1", +/* colors */ +". c None", +"# c #000000", +/* pixels */ +"................................", +".............######.............", +"...........##########...........", +"..........##........##..........", +".........##..........##.........", +".........##...........#.........", +"...#############......##........", +"..##...........##.....##........", +"..#..#...#...#..#.....##........", +"..#.###.###.###.#......#........", +"..#.###.###.###.#......##.......", +"..#.###.###.###.#......##.......", +"..#.###.###.###.#.......#.......", +"..#.###.###.###.#.......##......", +"..#.###.###.###.#........##.....", +"..#..#...#...#..#.........##....", +"..##...........##..........###..", +"..#.............#...............", +"..##...........##...............", +"..#.............#...............", +"..##...........##...............", +"..#.............#...............", +"..##...........##...............", +"..#.............#...............", +"..##...........##...............", +"..#.#.........#.#...............", +"..##.#.......#.##...............", +"..#.#.#.#.#.#.#.#...............", +"..##.#.#.#.#.#.##...............", +"...#############................", +"................................", +"................................" +}; diff --git a/bochs/gui/bitmaps/paste.h b/bochs/gui/bitmaps/paste.h new file mode 100644 index 00000000..7aa000d8 --- /dev/null +++ b/bochs/gui/bitmaps/paste.h @@ -0,0 +1,19 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#define BX_PASTE_BMAP_X 32 +#define BX_PASTE_BMAP_Y 32 + +static unsigned char bx_paste_bmap[(BX_PASTE_BMAP_X*BX_PASTE_BMAP_Y)] = { + 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x10, 0x00, 0x20, 0x9a, 0x93, 0x03, + 0x20, 0x66, 0x78, 0x04, 0xe0, 0xa5, 0xd3, 0x07, 0x20, 0x24, 0x54, 0x00, + 0x20, 0xd8, 0x93, 0x03, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x02, 0x00, + 0x00, 0x7c, 0x3f, 0x00, 0xc0, 0x83, 0xc1, 0x03, 0x20, 0x02, 0x40, 0x04, + 0x20, 0x01, 0x80, 0x04, 0x20, 0x01, 0x80, 0x04, 0xa0, 0xff, 0xff, 0x05, + 0x20, 0x00, 0x00, 0x04, 0x20, 0x00, 0x00, 0x04, 0x20, 0xf8, 0x3f, 0x04, + 0x20, 0x08, 0x20, 0x04, 0x20, 0xe8, 0x2b, 0x04, 0x20, 0x08, 0x20, 0x04, + 0x20, 0xe8, 0x2e, 0x04, 0x20, 0x08, 0x20, 0x04, 0x20, 0xe8, 0x39, 0x04, + 0x20, 0x08, 0x24, 0x04, 0x20, 0x88, 0x20, 0x04, 0x20, 0xe8, 0x2f, 0x04, + 0x20, 0x08, 0x20, 0x04, 0x20, 0xf8, 0x3f, 0x04, 0x20, 0x00, 0x00, 0x04, + 0xc0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, }; diff --git a/bochs/gui/bitmaps/paste.xpm b/bochs/gui/bitmaps/paste.xpm new file mode 100644 index 00000000..ea60bce4 --- /dev/null +++ b/bochs/gui/bitmaps/paste.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *paste_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 32 32 2 1", +/* colors */ +". c None", +"# c #000000", +/* pixels */ +"................................", +".....####...........#...........", +".....#...#.##..###..#..###......", +".....#...##..##....####...#.....", +".....####.#..#.###..#.#####.....", +".....#....#..#....#.#.#.........", +".....#.....##.####..#..###......", +"...............##...............", +"..............##.#..............", +"..........#####.######..........", +"......####.....##.....####......", +".....#...#............#...#.....", +".....#..#..............#..#.....", +".....#..#..............#..#.....", +".....#.##################.#.....", +".....#....................#.....", +".....#....................#.....", +".....#.....###########....#.....", +".....#.....#.........#....#.....", +".....#.....#.#####.#.#....#.....", +".....#.....#.........#....#.....", +".....#.....#.###.###.#....#.....", +".....#.....#.........#....#.....", +".....#.....#.####..###....#.....", +".....#.....#......#..#....#.....", +".....#.....#...#.....#....#.....", +".....#.....#.#######.#....#.....", +".....#.....#.........#....#.....", +".....#.....###########....#.....", +".....#....................#.....", +"......####################......", +"................................" +}; diff --git a/bochs/gui/bitmaps/power.h b/bochs/gui/bitmaps/power.h new file mode 100644 index 00000000..ccbeaa11 --- /dev/null +++ b/bochs/gui/bitmaps/power.h @@ -0,0 +1,20 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#define BX_POWER_BMAP_X 32 +#define BX_POWER_BMAP_Y 32 + +static const unsigned char bx_power_bmap[(BX_POWER_BMAP_X * BX_POWER_BMAP_Y)/8] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x24, 0x67, 0x66, 0x34, 0xa4, 0x28, 0x92, 0x48, 0x9a, 0xa8, 0xfa, 0x04, + 0x82, 0x64, 0x09, 0x04, 0x07, 0xa3, 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf8, 0x03, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x0f, 0x1e, 0x00, + 0x80, 0x03, 0x38, 0x00, 0xc0, 0x00, 0x60, 0x00, 0xe0, 0xe0, 0xe0, 0x00, + 0x60, 0xe0, 0xc0, 0x00, 0x70, 0xe0, 0xc0, 0x01, 0x30, 0xe0, 0x80, 0x01, + 0x30, 0xe0, 0x80, 0x01, 0x30, 0xe0, 0x80, 0x01, 0x30, 0xe0, 0x80, 0x01, + 0x30, 0xe0, 0x80, 0x01, 0x70, 0xe0, 0xc0, 0x01, 0x60, 0xe0, 0xc0, 0x00, + 0xe0, 0xe0, 0xe0, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x80, 0x03, 0x38, 0x00, + 0x00, 0x0f, 0x1e, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0xf8, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/bochs/gui/bitmaps/power.xpm b/bochs/gui/bitmaps/power.xpm new file mode 100644 index 00000000..831fb9fb --- /dev/null +++ b/bochs/gui/bitmaps/power.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *power_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 32 32 2 1", +/* colors */ +". c None", +"# c #000000", +/* pixels */ +"................................", +"................................", +".####...........................", +"..#..#..###..##..##..##...#.##..", +"..#..#.#...#.#...#..#..#...#..#.", +".#.##..#...#.#.#.#.#####..#.....", +".#.....#..#..##.#..#......#.....", +"###.....##...#.#....###..###....", +"................................", +"...........#######..............", +".........###########............", +"........####.....####...........", +".......###.........###..........", +"......##.............##.........", +".....###.....###.....###........", +".....##......###......##........", +"....###......###......###.......", +"....##.......###.......##.......", +"....##.......###.......##.......", +"....##.......###.......##.......", +"....##.......###.......##.......", +"....##.......###.......##.......", +"....###......###......###.......", +".....##......###......##........", +".....###.....###.....###........", +"......##.............##.........", +".......###.........###..........", +"........####.....####...........", +".........###########............", +"...........#######..............", +"................................", +"................................" +}; diff --git a/bochs/gui/bitmaps/reset.h b/bochs/gui/bitmaps/reset.h new file mode 100644 index 00000000..cd173cff --- /dev/null +++ b/bochs/gui/bitmaps/reset.h @@ -0,0 +1,20 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#define BX_RESET_BMAP_X 32 +#define BX_RESET_BMAP_Y 32 + +static const unsigned char bx_reset_bmap[(BX_RESET_BMAP_X * BX_RESET_BMAP_Y)/8] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3c, 0x00, 0x00, 0x10, + 0x48, 0x0c, 0xc7, 0x7c, 0x48, 0x92, 0x20, 0x11, 0x34, 0x1f, 0xf3, 0x09, + 0x24, 0x41, 0x12, 0x48, 0x6e, 0xce, 0xe1, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, + 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x3f, 0x00, + 0x00, 0xc7, 0x38, 0x00, 0x00, 0x87, 0x38, 0x00, 0x00, 0x07, 0x38, 0x00, + 0x00, 0x07, 0x38, 0x00, 0x00, 0x07, 0x38, 0x00, 0x00, 0x07, 0x38, 0x00, + 0x00, 0x07, 0x38, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xfe, 0x1f, 0x00, + 0x00, 0xfc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/bochs/gui/bitmaps/reset.xpm b/bochs/gui/bitmaps/reset.xpm new file mode 100644 index 00000000..8ff8687a --- /dev/null +++ b/bochs/gui/bitmaps/reset.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *reset_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 32 32 2 1", +/* colors */ +". c None", +"# c #000000", +/* pixels */ +"................................", +".............................#..", +"..####......................#...", +"...#..#...##....###...##..#####.", +"...#..#..#..#..#.....#..#...#...", +"..#.##..#####...##..#####..#....", +"..#..#..#.....#..#..#......#..#.", +".###.##..###..###....###....##..", +"................................", +"................................", +"................................", +"................................", +"................................", +"...............#................", +"..............##................", +".............#######............", +"............#########...........", +".............#########..........", +"........###...##...###..........", +"........###....#...###..........", +"........###........###..........", +"........###........###..........", +"........###........###..........", +"........###........###..........", +"........###........###..........", +"........##############..........", +".........############...........", +"..........##########............", +"................................", +"................................", +"................................", +"................................" +}; diff --git a/bochs/gui/bitmaps/saverestore.h b/bochs/gui/bitmaps/saverestore.h new file mode 100755 index 00000000..403d85a1 --- /dev/null +++ b/bochs/gui/bitmaps/saverestore.h @@ -0,0 +1,26 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#define BX_SAVE_RESTORE_BMAP_X 32 +#define BX_SAVE_RESTORE_BMAP_Y 32 + +static const unsigned char bx_save_restore_bmap[(BX_SAVE_RESTORE_BMAP_X * BX_SAVE_RESTORE_BMAP_Y)/8] = +{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2e, 0xdd, 0x9d, 0x3b, + 0x22, 0x45, 0x45, 0x4a, 0x2c, 0xd9, 0x5d, 0x4a, + 0x28, 0x51, 0x44, 0x4a, 0xee, 0x5d, 0x5c, 0x3a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xe0, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, + 0x00, 0xe0, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, + 0x00, 0xec, 0x0d, 0x00, 0x00, 0xee, 0x1d, 0x00, + 0x00, 0xef, 0x3d, 0x00, 0x00, 0xe7, 0x39, 0x00, + 0x00, 0xe7, 0x39, 0x00, 0x00, 0x07, 0x38, 0x00, + 0x00, 0x07, 0x38, 0x00, 0x00, 0x07, 0x38, 0x00, + 0x00, 0x07, 0x38, 0x00, 0x00, 0x07, 0x38, 0x00, + 0x00, 0xff, 0x3f, 0x00, 0x00, 0xfe, 0x1f, 0x00, + 0x00, 0xfc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/bochs/gui/bitmaps/saverestore.xpm b/bochs/gui/bitmaps/saverestore.xpm new file mode 100755 index 00000000..37e62123 --- /dev/null +++ b/bochs/gui/bitmaps/saverestore.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *saverestore_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 32 32 2 1", +/* colors */ +". c None", +"# c #000000", +/* pixels */ +"................................", +"................................", +"................................", +".###.#..#.###.###.###..###.###..", +".#...#..#.#...#.#.#...#..#.#..#.", +"..##.#..#..##.###.###.#..#.#..#.", +"...#.#..#...#.#...#...#..#.#..#.", +".###.####.###.#...###.#..#.###..", +"................................", +"................................", +"................................", +"................................", +".............####...............", +".............####...............", +".............####...............", +".............####...............", +"..........##.####.##............", +".........###.####.###...........", +"........####.####.####..........", +"........###..####..###..........", +"........###..####..###..........", +"........###........###..........", +"........###........###..........", +"........###........###..........", +"........###........###..........", +"........###........###..........", +"........##############..........", +".........############...........", +"..........##########............", +"................................", +"................................", +"................................", +}; diff --git a/bochs/gui/bitmaps/snapshot.h b/bochs/gui/bitmaps/snapshot.h new file mode 100644 index 00000000..8fcebef5 --- /dev/null +++ b/bochs/gui/bitmaps/snapshot.h @@ -0,0 +1,20 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#define BX_SNAPSHOT_BMAP_X 32 +#define BX_SNAPSHOT_BMAP_Y 32 + +static const unsigned char bx_snapshot_bmap[(BX_SNAPSHOT_BMAP_X * BX_SNAPSHOT_BMAP_Y)/8] = { + 0x00, 0x00, 0x20, 0x40, 0x77, 0xe6, 0xee, 0xec, 0x91, 0xa8, 0xa2, 0x52, + 0x96, 0xac, 0xac, 0x52, 0x94, 0xaa, 0xa8, 0x52, 0xb7, 0xee, 0xae, 0xcc, + 0x00, 0x20, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x08, 0x10, 0x00, + 0x7c, 0x0f, 0x10, 0x1f, 0xfa, 0x07, 0xa0, 0x2e, 0x42, 0x07, 0xa0, 0x50, + 0xa3, 0x03, 0xc0, 0xe0, 0xff, 0xee, 0x77, 0xbf, 0x01, 0xf9, 0x9f, 0x40, + 0x01, 0x1d, 0xb8, 0xa0, 0xff, 0xe5, 0xa7, 0xff, 0xff, 0xba, 0x5a, 0xff, + 0xff, 0x55, 0xb5, 0xff, 0xff, 0x8d, 0xaa, 0xff, 0xff, 0x16, 0x55, 0xff, + 0xff, 0xa2, 0x6a, 0xff, 0xff, 0x46, 0x55, 0xff, 0xff, 0xaa, 0x6a, 0xff, + 0xff, 0x56, 0x55, 0xff, 0xfe, 0xae, 0x6a, 0x7f, 0x00, 0x55, 0xb5, 0x00, + 0x00, 0xbd, 0xba, 0x00, 0x00, 0xfa, 0x5f, 0x00, 0x00, 0xe4, 0x27, 0x00, + 0x00, 0x18, 0x18, 0x00, 0x00, 0xe0, 0x07, 0x00 +}; diff --git a/bochs/gui/bitmaps/snapshot.xpm b/bochs/gui/bitmaps/snapshot.xpm new file mode 100644 index 00000000..11b85e95 --- /dev/null +++ b/bochs/gui/bitmaps/snapshot.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *snapshot_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 32 32 2 1", +/* colors */ +". c None", +"# c #000000", +/* pixels */ +".....................#........#.", +"###.###..##..###.###.###..##.###", +"#...#..#...#.#.#.#...#.#.#..#.#.", +".##.#..#..##.#.#..##.#.#.#..#.#.", +"..#.#..#.#.#.#.#...#.#.#.#..#.#.", +"###.##.#.###.###.###.#.#..##..##", +".............#..................", +"............########............", +"...........#........#...........", +"..#####.####........#...#####...", +".#.########..........#.#.###.#..", +".#....#.###..........#.#....#.#.", +"##...#.###............##.....###", +"########.###.######.###.######.#", +"#.......#..##########..#......#.", +"#.......#.###......###.#.....#.#", +"#########.#..######..#.#########", +"########.#.###.#.#.##.#.########", +"#########.#.#.#.#.#.##.#########", +"#########.##...#.#.#.#.#########", +"########.##.#...#.#.#.#.########", +"########.#...#.#.#.#.##.########", +"########.##...#.#.#.#.#.########", +"########.#.#.#.#.#.#.##.########", +"########.##.#.#.#.#.#.#.########", +".#######.###.#.#.#.#.##.#######.", +"........#.#.#.#.#.#.##.#........", +"........#.####.#.#.###.#........", +".........#.##########.#.........", +"..........#..######..#..........", +"...........##......##...........", +".............######............." +}; diff --git a/bochs/gui/bitmaps/userbutton.h b/bochs/gui/bitmaps/userbutton.h new file mode 100644 index 00000000..a8be0f57 --- /dev/null +++ b/bochs/gui/bitmaps/userbutton.h @@ -0,0 +1,20 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +#define BX_USER_BMAP_X 32 +#define BX_USER_BMAP_Y 32 + +static const unsigned char bx_user_bmap[BX_USER_BMAP_X*BX_USER_BMAP_Y/8] = { + 0x00, 0x00, 0x00, 0x00, 0x84, 0x78, 0x9e, 0x07, 0x84, 0x04, 0x82, 0x08, + 0x84, 0x04, 0x82, 0x08, 0x84, 0x38, 0x9e, 0x07, 0x84, 0x40, 0x82, 0x01, + 0x84, 0x40, 0x82, 0x06, 0x78, 0x3c, 0x9e, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x80, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0x02, 0x00, 0x00, 0x20, + 0xaa, 0xaa, 0x2a, 0x2a, 0x02, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x20, + 0xaa, 0xaa, 0xaa, 0x2a, 0x52, 0x55, 0x11, 0x25, 0xaa, 0xaa, 0xaa, 0x2a, + 0x52, 0x55, 0x01, 0x25, 0xaa, 0xaa, 0x82, 0x2a, 0x52, 0x55, 0x11, 0x25, + 0xaa, 0xbf, 0xaa, 0x2a, 0x02, 0x00, 0x00, 0x20, 0xfe, 0xff, 0xff, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/bochs/gui/bitmaps/userbutton.xpm b/bochs/gui/bitmaps/userbutton.xpm new file mode 100644 index 00000000..af3a25b5 --- /dev/null +++ b/bochs/gui/bitmaps/userbutton.xpm @@ -0,0 +1,40 @@ +/* XPM */ +static const char *userbutton_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 2 1", +". c None", +"# c #000000", +/* pixels */ +"................................", +"..#....#...####..####..####.....", +"..#....#..#......#.....#...#....", +"..#....#..#......#.....#...#....", +"..#....#...###...####..####.....", +"..#....#......#..#.....##.......", +"..#....#......#..#.....#.##.....", +"...####...####...####..#...#....", +"................................", +"................................", +".............................#..", +"..........................###...", +".........................#......", +"........................#.......", +".......................#........", +".......................#........", +".#############################..", +".#...........................#..", +".#.#.#.#.#.#.#.#.#.#.#...#.#.#..", +".#...........................#..", +".#...........................#..", +".#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..", +".#..#.#.#.#.#.#.#...#...#.#..#..", +".#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..", +".#..#.#.#.#.#.#.#.......#.#..#..", +".#.#.#.#.#.#.#.#.#.....#.#.#.#..", +".#..#.#.#.#.#.#.#...#...#.#..#..", +".#.#.#.#######.#.#.#.#.#.#.#.#..", +".#...........................#..", +".#############################..", +"................................", +"................................" +}; diff --git a/bochs/gui/carbon.cc b/bochs/gui/carbon.cc new file mode 100644 index 00000000..8d6e0d96 --- /dev/null +++ b/bochs/gui/carbon.cc @@ -0,0 +1,2200 @@ +//////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +//////////////////////////////////////////////////////////////////////// + +// carbon.cc -- bochs GUI file for MacOS X with Carbon API +// written by David Batterham +// with contributions from Tim Senecal +// port to Carbon API by Emmanuel Maillard +// Carbon polishing by Jeremy Parsons (Br'fin) +// slight overhaul of Carbon key event, graphics and window handling +// and SIM->notify alert support by Chris Thomas + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + + +// BOCHS INCLUDES +#include "bochs.h" +#include "keymap.h" +#include "iodev.h" + +#include "param_names.h" + +#if BX_WITH_CARBON + +#include "icon_bochs.h" +#include "font/vga.bitmap.h" +#include "bxversion.h" + +// MAC OS INCLUDES +#include +#include + +// NOTE about use of Boolean versus bx_bool: +// Boolean is defined as unsigned char in the Carbon headers, so when +// you are talking to the Carbon API, it expects to find Boolean variables +// and pointers to Booleans. The rest of Bochs uses bx_bool to represent +// booleans, which are defined to be 32 bit unsigned, so member function +// definitions and booleans outside this file will be bx_bools. "Boolean" +// should only be used in Carbon specific code such as in this file. + +// CONSTANTS + +#define rMBarID 128 +#define mApple 128 +#define iAbout 1 +#define mFile 129 +#define iQuit 1 +#define mEdit 130 +#define iUndo 1 +#define iCut 3 +#define iCopy 4 +#define iPaste 5 +#define iClear 6 +#define mBochs 131 +#define iFloppy 1 +#define iCursor 3 +#define iTool 4 +#define iMenuBar 5 +#define iFullScreen 6 +#define iConsole 7 +#define iSnapshot 9 +#define iReset 10 + +enum { + RESET_TOOL_BUTTON = 5, + CONFIGURE_TOOL_BUTTON, + SNAPSHOT_TOOL_BUTTON, + PASTE_TOOL_BUTTON, + COPY_TOOL_BUTTON, + USER_TOOL_BUTTON +}; + +const MenuCommand kCommandFloppy = FOUR_CHAR_CODE ('FLPY'); +const MenuCommand kCommandCursor = FOUR_CHAR_CODE ('CRSR'); +const MenuCommand kCommandTool = FOUR_CHAR_CODE ('TOOL'); +const MenuCommand kCommandMenuBar = FOUR_CHAR_CODE ('MENU'); +const MenuCommand kCommandFullScreen = FOUR_CHAR_CODE ('SCRN'); +const MenuCommand kCommandSnapshot = FOUR_CHAR_CODE ('SNAP'); +const MenuCommand kCommandReset = FOUR_CHAR_CODE ('RSET'); + +#define SLEEP_TIME 0 // Number of ticks to surrender the processor during a WaitNextEvent() +// Change this to 15 or higher if you don't want Bochs to hog the processor! + +int font_width; +int font_height; + +#define WINBITMAP(w) GetPortBitMapForCopyBits(GetWindowPort(w)) // (((GrafPtr)(w))->portBits) + +#define ASCII_1_MASK 0x00FF0000 +#define ASCII_2_MASK 0x000000FF + +const RGBColor black = {0, 0, 0}; +const RGBColor white = {0xFFFF, 0xFFFF, 0xFFFF}; +const RGBColor medGrey = {0xCCCC, 0xCCCC, 0xCCCC}; +const RGBColor ltGrey = {0xEEEE, 0xEEEE, 0xEEEE}; + +// GLOBALS + +WindowPtr win, toolwin, fullwin, backdrop, hidden, SouixWin; +WindowGroupRef fullwinGroup; +SInt16 gOldMBarHeight; +Boolean menubarVisible = true, cursorVisible = true; +Boolean windowUpdatesPending = true, mouseMoved = false; +RgnHandle mBarRgn, cnrRgn; +unsigned mouse_button_state = 0; +CTabHandle gCTable; +PixMapHandle gTile; +BitMap *vgafont[256]; +Rect srcTextRect, srcTileRect; +Point scrCenter = {300, 240}; +Ptr KCHR; +short gheaderbar_y; +Point prevPt; +unsigned width, height, gMinTop, gMaxTop, gLeft; +GWorldPtr gOffWorld; +Ptr gMyBuffer; +ProcessSerialNumber gProcessSerNum; +static unsigned vga_bpp=8; +static EventModifiers oldMods = 0; +static unsigned int text_rows=25, text_cols=80; + +enum { + TEXT_MODE, + GRAPHIC_MODE +} last_screen_state = TEXT_MODE, screen_state = TEXT_MODE; + +// HEADERBAR STUFF +#define TOOL_SPACING 10 +#define TOOL_MARGIN_SPACE 4 +int numPixMaps = 0, toolPixMaps = 0; +unsigned bx_bitmap_left_xorigin = 2+TOOL_SPACING; // pixels from left +unsigned bx_bitmap_right_xorigin = 2+TOOL_SPACING; // pixels from right +//PixMapHandle bx_pixmap[BX_MAX_PIXMAPS]; +CIconHandle bx_cicn[BX_MAX_PIXMAPS]; + +struct __bx_tool_pixmap { +// CIconHandle cicn; +// PixMapHandle pm; + ControlRef control; + unsigned xdim; + unsigned ydim; + unsigned xorigin; + unsigned yorigin; + unsigned alignment; + void (*f)(void); +} bx_tool_pixmap[BX_MAX_PIXMAPS]; + +// Carbon Event Handlers +pascal OSStatus CEvtHandleWindowToolCommand (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); +pascal OSStatus CEvtHandleWindowToolUpdate (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); +pascal OSStatus CEvtHandleWindowBackdropUpdate (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); +pascal OSStatus CEvtHandleWindowEmulatorClick (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); +pascal OSStatus CEvtHandleWindowEmulatorUpdate (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); +pascal OSStatus CEvtHandleWindowEmulatorKeys (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); +pascal OSStatus CEvtHandleApplicationAppleEvent (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); +pascal OSStatus CEvtHandleApplicationMouseMoved (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); +pascal OSStatus CEvtHandleApplicationMouseUp (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); +pascal OSStatus CEvtHandleApplicationMenuClick (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); +pascal OSStatus CEvtHandleApplicationMenus (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); + +// Event handlers +OSStatus HandleKey(EventRef theEvent, Bit32u keyState); +static BxEvent * CarbonSiminterfaceCallback(void *theClass, BxEvent *event); +static bxevent_handler old_callback = NULL; +static void *old_callback_arg = NULL; + +// Show/hide UI elements +void HidePointer(void); +void ShowPointer(void); +void HideTools(void); +void ShowTools(void); +void HideMenubar(void); +void ShowMenubar(void); +// void HideConsole(void); +// void ShowConsole(void); + +void UpdateTools(void); + +// Initialisation +void InitToolbox(void); +void CreateTile(void); +void CreateMenus(void); +void CreateWindows(void); +void CreateKeyMap(void); +void CreateVGAFont(unsigned char *vga_charmap); +BitMap *CreateBitMap(unsigned width, unsigned height); +PixMapHandle CreatePixMap(unsigned left, unsigned top, unsigned width, + unsigned height, unsigned depth, CTabHandle clut); +unsigned char reverse_bitorder(unsigned char); + +static pascal OSErr QuitAppleEventHandler(const AppleEvent *appleEvt, AppleEvent* reply, SInt32 refcon); + +class bx_carbon_gui_c : public bx_gui_c { +public: + bx_carbon_gui_c (void) {} + DECLARE_GUI_VIRTUAL_METHODS() + virtual void beep_on(float frequency); + virtual void beep_off(); +}; + +// declare one instance of the gui object and call macro to insert the +// plugin code +static bx_carbon_gui_c *theGui = NULL; +IMPLEMENT_GUI_PLUGIN_CODE(carbon) + +#define LOG_THIS theGui-> + +// Carbon Event Handlers + +pascal OSStatus CEvtHandleWindowToolCommand (EventHandlerCallRef nextHandler, + EventRef theEvent, + void* userData) +{ + HICommand commandStruct; + UInt32 theCommandID; + + GetEventParameter (theEvent, kEventParamDirectObject, + typeHICommand, NULL, sizeof(HICommand), + NULL, &commandStruct); + + theCommandID = commandStruct.commandID; + + if(theCommandID < toolPixMaps) { + bx_tool_pixmap[theCommandID].f(); + } + + return noErr; // Report success +} + +pascal OSStatus CEvtHandleWindowToolUpdate (EventHandlerCallRef nextHandler, + EventRef theEvent, + void* userData) +{ + theGui->show_headerbar(); + + return noErr; // Report success +} + +pascal OSStatus CEvtHandleWindowBackdropUpdate (EventHandlerCallRef nextHandler, + EventRef theEvent, + void* userData) +{ + Rect box; + + WindowRef myWindow; + GetEventParameter (theEvent, kEventParamDirectObject, typeWindowRef, + NULL, sizeof(WindowRef), NULL, &myWindow); + + GetWindowPortBounds(myWindow, &box); + BackColor(blackColor); + EraseRect(&box); + + return noErr; // Report success +} + +// Translate MouseDowns in a handled window into Bochs events +// Main ::HANDLE_EVENTS will feed all mouse updates to Bochs +pascal OSStatus CEvtHandleWindowEmulatorClick (EventHandlerCallRef nextHandler, + EventRef theEvent, + void* userData) +{ + UInt32 keyModifiers; + GetEventParameter (theEvent, kEventParamKeyModifiers, typeUInt32, + NULL, sizeof(UInt32), NULL, &keyModifiers); + +//if (!IsWindowActive(win)) +//{ +// SelectWindow(win); +//} + + if (keyModifiers & cmdKey) + mouse_button_state |= 0x02; + else + mouse_button_state |= 0x01; + + return noErr; // Report success +} + +pascal OSStatus CEvtHandleWindowEmulatorUpdate (EventHandlerCallRef nextHandler, + EventRef theEvent, + void* userData) +{ + Rect box; + Pattern qdBlackPattern; + + WindowRef myWindow; + GetEventParameter (theEvent, kEventParamDirectObject, typeWindowRef, + NULL, sizeof(WindowRef), NULL, &myWindow); + + GetWindowPortBounds(myWindow, &box); + DEV_vga_redraw_area(box.left, box.top, box.right, box.bottom); + + return noErr; // Report success +} + +pascal OSStatus CEvtHandleWindowEmulatorKeys (EventHandlerCallRef nextHandler, + EventRef theEvent, + void* userData) +{ + UInt32 kind; + OSStatus outStatus = eventNotHandledErr; + + kind = GetEventKind(theEvent); + switch(kind) + { + case kEventRawKeyDown: + case kEventRawKeyRepeat: + outStatus = HandleKey(theEvent, BX_KEY_PRESSED); + break; + case kEventRawKeyUp: + outStatus = HandleKey(theEvent, BX_KEY_RELEASED); + break; + } + + return outStatus; +} + +#if 0 +// This stuff does work... it gets called, but converting the record +// and then calling AEProcessAppleEvent consistently results in noOutstandingHLE(err result -608) +// And its going to take more work to get RunApplicationLoop to work... +pascal OSStatus CEvtHandleApplicationAppleEvent (EventHandlerCallRef nextHandler, + EventRef theEvent, + void* userData) +{ + EventRecord eventRec; + + fprintf(stderr, "# Carbon apple event handler called\n"); + if(ConvertEventRefToEventRecord(theEvent, &eventRec)) + { + fprintf(stderr, "# Calling AEProcessAppleEvent\n"); + OSStatus result = AEProcessAppleEvent(&eventRec); + fprintf(stderr, "# Received AE result: %i\n", result); + returm result; + } + else + BX_PANIC(("Can't convert apple event")); + + return noErr; // Report success +} +#endif + +// Only have our application deal with mouseEvents when we catch the movement +pascal OSStatus CEvtHandleApplicationMouseMoved (EventHandlerCallRef nextHandler, + EventRef theEvent, + void* userData) +{ + mouseMoved = true; + + return eventNotHandledErr; +} + +pascal OSStatus CEvtHandleApplicationMouseUp (EventHandlerCallRef nextHandler, + EventRef theEvent, + void* userData) +{ + UInt32 keyModifiers; + GetEventParameter (theEvent, kEventParamKeyModifiers, typeUInt32, + NULL, sizeof(UInt32), NULL, &keyModifiers); + + if (keyModifiers & cmdKey) + mouse_button_state &= ~0x02; + else + mouse_button_state &= ~0x01; + + return eventNotHandledErr; // Don't want to eat all the mouseups +} + +// Catch MouseDown's in the menubar, trigger menu browsing +pascal OSStatus CEvtHandleApplicationMenuClick (EventHandlerCallRef nextHandler, + EventRef theEvent, + void* userData) +{ + short part; + WindowPtr whichWindow; + + Point wheresMyMouse; + GetEventParameter (theEvent, kEventParamMouseLocation, typeQDPoint, + NULL, sizeof(Point), NULL, &wheresMyMouse); + + part = FindWindow(wheresMyMouse, &whichWindow); + + if(part == inMenuBar) + { + // MenuSelect will actually trigger an event cascade, + // Triggering command events for any selected menu item + MenuSelect(wheresMyMouse); + return noErr; + } + + return eventNotHandledErr; // Don't want to eat all the clicks +} + +pascal OSStatus CEvtHandleApplicationMenus (EventHandlerCallRef nextHandler, + EventRef theEvent, + void* userData) +{ + HICommand commandStruct; + + OSErr err = noErr; + short i; + + GetEventParameter (theEvent, kEventParamDirectObject, + typeHICommand, NULL, sizeof(HICommand), + NULL, &commandStruct); + + switch(commandStruct.commandID) + { + case kHICommandAbout: + { + DialogRef aboutDialog; + DialogItemIndex index; + CFStringRef cf_version; + char version[256]; + sprintf(version, "Bochs x86 Emulator version %s (MacOS X port)", VER_STRING); + cf_version = CFStringCreateWithCString(NULL, version, kCFStringEncodingASCII); + + AlertStdCFStringAlertParamRec aboutParam = {0}; + aboutParam.version = kStdCFStringAlertVersionOne; + aboutParam.position = kWindowDefaultPosition; + aboutParam.defaultButton = kAlertStdAlertOKButton; + + CreateStandardAlert( + kAlertNoteAlert, + cf_version, + NULL, /* can be NULL */ + &aboutParam, /* can be NULL */ + &aboutDialog); + + RunStandardAlert( + aboutDialog, + NULL, /* can be NULL */ + &index); + CFRelease(cf_version); + } + break; + + case kHICommandQuit: + BX_EXIT(0); + break; + + case kCommandFloppy: + //DiskEject(1); + break; + + case kCommandCursor: + if (cursorVisible) + HidePointer(); + else + ShowPointer(); + break; + + case kCommandTool: + if (IsWindowVisible(toolwin)) + HideTools(); + else + ShowTools(); + break; + + case kCommandMenuBar: + if (menubarVisible) + HideMenubar(); + else + ShowMenubar(); + break; + + case kCommandFullScreen: + if (IsWindowVisible(toolwin) || menubarVisible) + { + if (menubarVisible) + HideMenubar(); + if (IsWindowVisible(toolwin)) + HideTools(); + } + else + { + if (!menubarVisible) + ShowMenubar(); + if (!IsWindowVisible(toolwin)) + ShowTools(); + } + break; + +/* + // Codewarrior programatic console that isn't available under Carbon without Codewarrior + case iConsole: + if (IsWindowVisible(SouixWin)) + HideConsole(); + else + ShowConsole(); + break; +*/ + case kCommandSnapshot: + bx_tool_pixmap[SNAPSHOT_TOOL_BUTTON].f(); + break; + + case kCommandReset: + bx_tool_pixmap[RESET_TOOL_BUTTON].f(); + break; + + case kHICommandCopy: + bx_tool_pixmap[COPY_TOOL_BUTTON].f(); + break; + + case kHICommandPaste: + bx_tool_pixmap[PASTE_TOOL_BUTTON].f(); + break; + } + + return noErr; // Report success +} + +void MacPanic(void) +{ + StopAlert(200, NULL); +} + +void InitToolbox(void) +{ + OSErr err; + // gQuitFlag = false; + + InitCursor(); + +#if 0 + // Our handler gets called... but I can't AEProcesAppleEvent successfully upon it? + EventTypeSpec appleEvent = { kEventClassAppleEvent, kEventAppleEvent }; + InstallApplicationEventHandler(NewEventHandlerUPP(CEvtHandleApplicationAppleEvent), + 1, &appleEvent, 0, NULL); +#endif + + err = AEInstallEventHandler(kCoreEventClass, kAEQuitApplication, + NewAEEventHandlerUPP(QuitAppleEventHandler), 0, false); + if (err != noErr) + ExitToShell(); +} + +static pascal OSErr QuitAppleEventHandler(const AppleEvent *appleEvt, AppleEvent* reply, SInt32 refcon) +{ + //gQuitFlag = true; + BX_PANIC(("User terminated")); + return (noErr); +} + +void CreateTile(void) +{ + GDHandle saveDevice; + CGrafPtr savePort; + OSErr err; + unsigned long p_f; + long theRowBytes = ((((long) (vga_bpp==24?32:(((vga_bpp+1)>>1)<<1)) * ((long) (srcTileRect.right-srcTileRect.left)) + 31) >> 5) << 2); + +// if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) +// { + GetGWorld(&savePort, &saveDevice); + switch(vga_bpp) + { + case 1: + p_f = k1MonochromePixelFormat; + break; + case 2: + p_f = k2IndexedPixelFormat; + break; + case 4: + p_f = k4IndexedPixelFormat; + break; + case 8: + p_f = k8IndexedPixelFormat; + break; + case 15: + p_f = k16LE555PixelFormat; + break; + case 16: + p_f = k16LE565PixelFormat; + break; + case 24: + //p_f = k24BGRPixelFormat; + //break; + case 32: + p_f = k32ARGBPixelFormat;//k32BGRAPixelFormat; + break; + } + + BX_ASSERT((gMyBuffer = (Ptr)malloc(theRowBytes * (srcTileRect.bottom - srcTileRect.top))) != NULL); + err = NewGWorldFromPtr(&gOffWorld, p_f, + &srcTileRect, vga_bpp>8 ? NULL : gCTable, NULL, keepLocal, gMyBuffer, theRowBytes); + if (err != noErr || gOffWorld == NULL) + BX_PANIC(("mac: can't create gOffWorld; err=%hd", err)); + + SetGWorld(gOffWorld, NULL); + RGBForeColor(&black); + RGBBackColor(&white); + + gTile = GetGWorldPixMap(gOffWorld); + + if (gTile != NULL) + { + NoPurgePixels(gTile); + if (!LockPixels(gTile)) + BX_ERROR(("mac: can't LockPixels gTile")); + if ((**gTile).pixelType != RGBDirect && (**gTile).pmTable != gCTable) + { + DisposeCTable(gCTable); + gCTable = (**gTile).pmTable; + } + + (**gCTable).ctFlags |= 0x4000; //use palette manager indexes + CTabChanged(gCTable); + } + else + BX_PANIC(("mac: can't create gTile")); + + SetGWorld(savePort, saveDevice); +/* } + else + { + gOffWorld = NULL; + gTile = CreatePixMap(0, 0, srcTileRect.right, srcTileRect.bottom, 8, gCTable); + if (gTile == NULL) + BX_PANIC(("mac: can't create gTile")); + }*/ +} + +void CreateMenus(void) +{ + Handle menu; + + menu = GetNewMBar(rMBarID); // get our menus from resource + if (menu != nil) + { + SetMenuBar(menu); + DrawMenuBar(); + } + else + BX_PANIC(("can't create menu")); + + SetMenuItemCommandID (GetMenuRef(mApple), iAbout, kHICommandAbout); + SetMenuItemCommandID (GetMenuRef(mFile), iQuit, kHICommandQuit); + SetMenuItemCommandID (GetMenuRef(mEdit), iCopy, kHICommandCopy); + SetMenuItemCommandID (GetMenuRef(mEdit), iPaste, kHICommandPaste); + SetMenuItemCommandID (GetMenuRef(mBochs), iFloppy, kCommandFloppy); + SetMenuItemCommandID (GetMenuRef(mBochs), iCursor, kCommandCursor); + SetMenuItemCommandID (GetMenuRef(mBochs), iTool, kCommandTool); + SetMenuItemCommandID (GetMenuRef(mBochs), iMenuBar, kCommandMenuBar); + SetMenuItemCommandID (GetMenuRef(mBochs), iFullScreen, kCommandFullScreen); + SetMenuItemCommandID (GetMenuRef(mBochs), iSnapshot, kCommandSnapshot); + SetMenuItemCommandID (GetMenuRef(mBochs), iReset, kCommandReset); + + DisableMenuItem(GetMenuRef(mEdit), iUndo); + DisableMenuItem(GetMenuRef(mEdit), iCut); + DisableMenuItem(GetMenuRef(mEdit), iClear); + DisableMenuItem(GetMenuRef(mBochs), iFloppy); + + EventTypeSpec commandEvents = {kEventClassCommand, kEventCommandProcess}; + EventTypeSpec menuEvents = {kEventClassMouse, kEventMouseDown}; + InstallApplicationEventHandler(NewEventHandlerUPP(CEvtHandleApplicationMenus), + 1, &commandEvents, 0, NULL); + InstallApplicationEventHandler(NewEventHandlerUPP(CEvtHandleApplicationMenuClick), + 1, &menuEvents, 0, NULL); +} + +void CreateWindows(void) +{ + Rect winRect; + Rect screenBounds; + Rect positioningBounds; + + EventTypeSpec eventClick = { kEventClassWindow, kEventWindowHandleContentClick }; + EventTypeSpec eventUpdate = { kEventClassWindow, kEventWindowDrawContent }; + EventTypeSpec keyboardEvents[3] = { + { kEventClassKeyboard, kEventRawKeyDown }, { kEventClassKeyboard, kEventRawKeyRepeat }, + { kEventClassKeyboard, kEventRawKeyUp }}; + EventTypeSpec eventCommand = { kEventClassCommand, kEventCommandProcess }; + + // Create a backdrop window for fullscreen mode +// GetRegionBounds(GetGrayRgn(), &screenBounds); + + // Fullscreen mode only really wants to be on one screen + screenBounds = (**GetMainDevice()).gdRect; + GetAvailableWindowPositioningBounds(GetMainDevice(), &positioningBounds); + + SetRect(&winRect, 0, 0, screenBounds.right, screenBounds.bottom + GetMBarHeight()); + CreateNewWindow(kPlainWindowClass, (kWindowStandardHandlerAttribute), &winRect, &backdrop); + if (backdrop == NULL) + {BX_PANIC(("mac: can't create backdrop window"));} + InstallWindowEventHandler(backdrop, NewEventHandlerUPP(CEvtHandleWindowBackdropUpdate), 1, &eventUpdate, NULL, NULL); + InstallWindowEventHandler(backdrop, NewEventHandlerUPP(CEvtHandleWindowEmulatorClick), 1, &eventClick, NULL, NULL); + InstallWindowEventHandler(backdrop, NewEventHandlerUPP(CEvtHandleWindowEmulatorKeys), 3, keyboardEvents, 0, NULL); + + width = 640; + height = 480; + gLeft = positioningBounds.left; + gMinTop = positioningBounds.top; + gMaxTop = gMinTop + gheaderbar_y; + + // Create a moveable tool window for the "headerbar" + winRect.top = positioningBounds.top + 10; + winRect.left = positioningBounds.left; + winRect.bottom = winRect.top + gheaderbar_y; + winRect.right = positioningBounds.right; + + CreateNewWindow(kFloatingWindowClass, kWindowStandardHandlerAttribute, &winRect, &toolwin); + if (toolwin == NULL) + {BX_PANIC(("mac: can't create tool window"));} + + // Use an Aqua-savvy window background + SetThemeWindowBackground(toolwin, kThemeBrushUtilityWindowBackgroundActive, false); + + SetWindowTitleWithCFString (toolwin, CFSTR("MacBochs Hardware Controls")); // Set title + //InstallWindowEventHandler(toolwin, NewEventHandlerUPP(CEvtHandleWindowToolClick), 1, &eventClick, NULL, NULL); + InstallWindowEventHandler(toolwin, NewEventHandlerUPP(CEvtHandleWindowToolCommand), 1, &eventCommand, NULL, NULL); + InstallWindowEventHandler(toolwin, NewEventHandlerUPP(CEvtHandleWindowToolUpdate), 1, &eventUpdate, NULL, NULL); + + // Create the emulator window for full screen mode + winRect.left = (screenBounds.right - width) /2; //(qd.screenBits.bounds.right - width)/2; + winRect.right = winRect.left + width; + winRect.top = (screenBounds.bottom - height)/2; + winRect.bottom = winRect.top + height; + + CreateNewWindow(kPlainWindowClass, (kWindowStandardHandlerAttribute), &winRect, &fullwin); + if (fullwin == NULL) + BX_PANIC(("mac: can't create fullscreen emulator window")); + + InstallWindowEventHandler(fullwin, NewEventHandlerUPP(CEvtHandleWindowEmulatorUpdate), 1, &eventUpdate, NULL, NULL); + InstallWindowEventHandler(fullwin, NewEventHandlerUPP(CEvtHandleWindowEmulatorClick), 1, &eventClick, NULL, NULL); InstallWindowEventHandler(fullwin, NewEventHandlerUPP(CEvtHandleWindowEmulatorKeys), 3, keyboardEvents, 0, NULL); + + // Create the regular emulator window + winRect.left = gLeft; + winRect.top = gMaxTop; + winRect.right = winRect.left + width; + winRect.bottom = winRect.top + height; + + CreateNewWindow(kDocumentWindowClass, + (kWindowStandardHandlerAttribute | kWindowCollapseBoxAttribute), + &winRect, &win); + if (win == NULL) + BX_PANIC(("mac: can't create emulator window")); + + SetWindowTitleWithCFString (win, CFSTR("MacBochs x86 PC")); // Set title + InstallWindowEventHandler(win, NewEventHandlerUPP(CEvtHandleWindowEmulatorUpdate), 1, &eventUpdate, NULL, NULL); + InstallWindowEventHandler(win, NewEventHandlerUPP(CEvtHandleWindowEmulatorClick), 1, &eventClick, NULL, NULL); + InstallWindowEventHandler(win, NewEventHandlerUPP(CEvtHandleWindowEmulatorKeys), 3, keyboardEvents, 0, NULL); + + // Group the fullscreen and backdrop windows together, since they also share the same click + // event handler they will effectively act as a single window for layering and events + + CreateWindowGroup((kWindowGroupAttrLayerTogether | kWindowGroupAttrSharedActivation), &fullwinGroup); + SetWindowGroupName(fullwinGroup, CFSTR("net.sourceforge.bochs.windowgroups.fullscreen")); + + // This *can't* be the right way, then again groups aren't yet the right way + // For the life of me I couldn't find a right way of making sure my created group stayed + // below the layer of Floating Windows. But with the windows we have there's no current + // harm from making it part of the same group. + SetWindowGroup(toolwin, fullwinGroup); + SetWindowGroup(fullwin, fullwinGroup); + SetWindowGroup(backdrop, fullwinGroup); + + RepositionWindow(win, NULL, kWindowCenterOnMainScreen); + + hidden = fullwin; + + ShowWindow(toolwin); + ShowWindow(win); + + SetPortWindowPort(win); +} + +// ::SPECIFIC_INIT() +// +// Called from gui.cc, once upon program startup, to allow for the +// specific GUI code (X11, BeOS, ...) to be initialized. +// +// argc, argv: not used right now, but the intention is to pass native GUI +// specific options from the command line. (X11 options, BeOS options,...) +// +// tilewidth, tileheight: for optimization, graphics_tile_update() passes +// only updated regions of the screen to the gui code to be redrawn. +// These define the dimensions of a region (tile). +// headerbar_y: A headerbar (toolbar) is display on the top of the +// VGA window, showing floppy status, and other information. It +// always assumes the width of the current VGA mode width, but +// it's height is defined by this parameter. + +void bx_carbon_gui_c::specific_init(int argc, char **argv, unsigned tilewidth, unsigned tileheight, + unsigned headerbar_y) +{ + int i; + + put("MGUI"); + InitToolbox(); + + font_width = 8; + font_height = 16; + + gheaderbar_y = headerbar_y + TOOL_MARGIN_SPACE + TOOL_MARGIN_SPACE; + + CreateKeyMap(); + + gCTable = GetCTable(128); + BX_ASSERT (gCTable != NULL); + CTabChanged(gCTable); //(*gCTable)->ctSeed = GetCTSeed(); + SetRect(&srcTileRect, 0, 0, tilewidth, tileheight); + + for(i=0; i<256; i++) { + vgafont[i] = NULL; + } + CreateMenus(); + CreateVGAFont(vga_charmap); + CreateTile(); + CreateWindows(); + + EventTypeSpec mouseUpEvent = { kEventClassMouse, kEventMouseUp }; + EventTypeSpec mouseMoved[2] = { { kEventClassMouse, kEventMouseMoved }, + { kEventClassMouse, kEventMouseDragged } }; + InstallApplicationEventHandler(NewEventHandlerUPP(CEvtHandleApplicationMouseUp), + 1, &mouseUpEvent, 0, NULL); + InstallApplicationEventHandler(NewEventHandlerUPP(CEvtHandleApplicationMouseMoved), + 2, mouseMoved, 0, NULL); + + if (GetCurrentProcess(&gProcessSerNum) == noErr) + SetFrontProcess(&gProcessSerNum); + + GetMouse(&prevPt); + + // redirect notify callback to X11 specific code + SIM->get_notify_callback(&old_callback, &old_callback_arg); + SIM->set_notify_callback(CarbonSiminterfaceCallback, NULL); + + UNUSED(argc); + UNUSED(argv); + + // loads keymap for x11 + if (SIM->get_param_bool(BXPN_KBD_USEMAPPING)->get()) { + bx_keymap.loadKeymap(NULL); // I have no function to convert X windows symbols + } +} + +// HandleKey() +// +// Handles keyboard-related events. + +OSStatus HandleKey(EventRef theEvent, Bit32u keyState) +{ + UInt32 key; + UInt32 trans; + OSStatus status; + UInt32 modifiers; + + static UInt32 transState = 0; + + status = GetEventParameter (theEvent, + kEventParamKeyModifiers, + typeUInt32, NULL, + sizeof(UInt32), NULL, + &modifiers); + if(status == noErr) + { + status = GetEventParameter (theEvent, + kEventParamKeyCode, + typeUInt32, NULL, + sizeof(UInt32), NULL, + &key); + if(status == noErr) + { + +// key = event->message & charCodeMask; + + // Let our menus process command keys + if(modifiers & cmdKey) + { + status = eventNotHandledErr; + } + else + { +/* if (modifiers & shiftKey) + DEV_kbd_gen_scancode(BX_KEY_SHIFT_L | keyState); + if (modifiers & controlKey) + DEV_kbd_gen_scancode(BX_KEY_CTRL_L | keyState); + if (modifiers & optionKey) + DEV_kbd_gen_scancode(BX_KEY_ALT_L | keyState);*/ + +// key = (event->message & keyCodeMask) >> 8; + + trans = KeyTranslate(KCHR, key, &transState); + if ((trans == BX_KEY_PRINT) && ((oldMods & optionKey) || (oldMods & rightOptionKey))) + trans = BX_KEY_ALT_SYSREQ; + if ((trans == BX_KEY_PAUSE) && ((oldMods & controlKey) || (oldMods & rightControlKey))) + trans = BX_KEY_CTRL_BREAK; + // KeyTranslate maps Mac virtual key codes to any type of character code + // you like (in this case, Bochs key codes). Much nicer than a huge switch + // statement! + + if (trans > 0) + DEV_kbd_gen_scancode(trans | keyState); + +/* if (modifiers & shiftKey) + DEV_kbd_gen_scancode(BX_KEY_SHIFT_L | BX_KEY_RELEASED); + if (modifiers & controlKey) + DEV_kbd_gen_scancode(BX_KEY_CTRL_L | BX_KEY_RELEASED); + if (modifiers & optionKey) + DEV_kbd_gen_scancode(BX_KEY_ALT_L | BX_KEY_RELEASED);*/ + } + } + } + + return status; +} + +BX_CPP_INLINE void ResetPointer(void) +{ + // this appears to work well, especially when combined with + // mouse processing on the MouseMoved events + if(CGWarpMouseCursorPosition(CGPointMake(scrCenter.h, scrCenter.v))) + { + fprintf(stderr, "# Failed to warp cursor"); + } +} + +// ::HANDLE_EVENTS() +// +// Called periodically (vga_update_interval in .bochsrc) so the +// the gui code can poll for keyboard, mouse, and other +// relevant events. + +void bx_carbon_gui_c::handle_events(void) +{ + EventRecord event; + Point mousePt; + int dx, dy; + EventModifiers newMods; + unsigned curstate; + GrafPtr oldport; + + curstate = mouse_button_state; //so we can compare the old and the new mouse state + + if (WaitNextEvent(everyEvent, &event, SLEEP_TIME, NULL)) + { + switch(event.what) + { +/* + // This event is just redundant + case nullEvent: + + // These events are all covered by installed carbon event handlers + case mouseDown: + case mouseUp: + case keyDown: + case autoKey: + case keyUp: + case updateEvt: + break; +*/ + case diskEvt: + // floppyA_handler(); + break; + + case kHighLevelEvent: + // fprintf(stderr, "# Classic apple event handler called\n"); + AEProcessAppleEvent(&event); + show_headerbar(); // Update if necessary (example, clipboard change) + break; + + default: + break; + } + } + else if (oldMods != (newMods = (event.modifiers & 0xfe00))) + { + if ((newMods ^ oldMods) & shiftKey) + DEV_kbd_gen_scancode(BX_KEY_SHIFT_L | ((newMods & shiftKey)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + if ((newMods ^ oldMods) & alphaLock) + DEV_kbd_gen_scancode(BX_KEY_CAPS_LOCK | ((newMods & alphaLock)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + if ((newMods ^ oldMods) & optionKey) + DEV_kbd_gen_scancode(BX_KEY_ALT_L | ((newMods & optionKey)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + if ((newMods ^ oldMods) & controlKey) + DEV_kbd_gen_scancode(BX_KEY_CTRL_L | ((newMods & controlKey)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + if ((newMods ^ oldMods) & rightShiftKey) + DEV_kbd_gen_scancode(BX_KEY_SHIFT_R | ((newMods & rightShiftKey)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + if ((newMods ^ oldMods) & rightOptionKey) + DEV_kbd_gen_scancode(BX_KEY_ALT_R | ((newMods & rightOptionKey)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + if ((newMods ^ oldMods) & rightControlKey) + DEV_kbd_gen_scancode(BX_KEY_CTRL_R | ((newMods & rightControlKey)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + oldMods = newMods; + } + + + // Only update mouse if we're not in the dock + // and we are the frontmost app. + ProcessSerialNumber frontProcessSerNum; + Boolean isSameProcess; + + GetFrontProcess(&frontProcessSerNum); + SameProcess(&frontProcessSerNum, &gProcessSerNum, &isSameProcess); + + if(isSameProcess && !IsWindowCollapsed(win)) + { + GetPort(&oldport); + SetPortWindowPort(win); + + GetMouse(&mousePt); + + if(menubarVisible && cursorVisible) + { + // Don't track the mouse if we're working with the main window + // and we're outside the window + if(mouseMoved && + (mousePt.v < 0 || mousePt.v > height || mousePt.h < 0 || mousePt.h > width) && + (prevPt.v < 0 || prevPt.v > height || prevPt.h < 0 || prevPt.h > width)) + { + mouseMoved = false; + } +/* + // Limit mouse action to window + // Grr, any better ways to sync host and bochs cursor? + if(mousePt.h < 0) { mousePt.h = 0; } + else if(mousePt.h > width) { mousePt.h = width; } + if(mousePt.v < 0) { mousePt.v = 0; } + else if(mousePt.v > height) { mousePt.v = height; } +*/ + } + + //if mouse has moved, or button has changed state + if (mouseMoved || (curstate != mouse_button_state)) + { + if(mouseMoved) + { + CGMouseDelta CGdX, CGdY; + CGGetLastMouseDelta(&CGdX, &CGdY); + dx = CGdX; + dy = - CGdY; // Windows has an opposing grid + } + else + { + dx = 0; + dy = 0; + } + + DEV_mouse_motion(dx, dy, mouse_button_state); + + if (!cursorVisible && mouseMoved) + { + SetPt(&scrCenter, 300, 240); + LocalToGlobal(&scrCenter); + ResetPointer(); //next getmouse should be 300, 240 + SetPt(&mousePt, 300, 240); + } + mouseMoved = false; + } + + prevPt = mousePt; + + SetPort(oldport); + } +} + + +// ::FLUSH() +// +// Called periodically, requesting that the gui code flush all pending +// screen update requests. + +void bx_carbon_gui_c::flush(void) +{ + // an opportunity to make the Window Manager happy. + // not needed on the macintosh.... + + // Unless you don't want to needlessly update the dock icon + // umpteen zillion times a second for each tile. + // A further note, UpdateCollapsedWindowDockTile is not + // recommended for animation. Setup like this my performance + // seems reasonable for little fuss. + if(windowUpdatesPending) + { + if(IsWindowCollapsed(win)) + { + UpdateCollapsedWindowDockTile(win); + } + if(last_screen_state != screen_state) + { + last_screen_state = screen_state; + UpdateTools(); + } + } + windowUpdatesPending = false; +} + + +// ::CLEAR_SCREEN() +// +// Called to request that the VGA region is cleared. Don't +// clear the area that defines the headerbar. + +void bx_carbon_gui_c::clear_screen(void) +{ + Rect r; + + SetPortWindowPort(win); + + RGBForeColor(&black); + RGBBackColor(&white); + GetWindowPortBounds(win, &r); + PaintRect (&r); + + windowUpdatesPending = true; +} + + + +// ::TEXT_UPDATE() +// +// Called in a VGA text mode, to update the screen with +// new content. +// +// old_text: array of character/attributes making up the contents +// of the screen from the last call. See below +// new_text: array of character/attributes making up the current +// contents, which should now be displayed. See below +// +// format of old_text & new_text: each is tm_info.line_offset*text_rows +// bytes long. Each character consists of 2 bytes. The first by is +// the character value, the second is the attribute byte. +// +// cursor_x: new x location of cursor +// cursor_y: new y location of cursor +// tm_info: this structure contains information for additional +// features in text mode (cursor shape, line offset,...) + +void bx_carbon_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, + unsigned long cursor_x, unsigned long cursor_y, + bx_vga_tminfo_t tm_info) +{ + unsigned char cAttr, cChar; + Rect destRect; + RGBColor fgColor, bgColor; + GrafPtr oldPort, savePort; + GDHandle saveDevice; + GrafPtr winGrafPtr = GetWindowPort(win); + OSErr theError; + Bit8u *old_line, *new_line; + unsigned int curs, hchars, offset, rows, x, xc, y, yc; + bx_bool forceUpdate = 0, blink_mode, blink_state; + static unsigned prev_cursor_x=0; + static unsigned prev_cursor_y=0; + + screen_state = TEXT_MODE; + + // first check if the screen needs to be redrawn completely + blink_mode = (tm_info.blink_flags & BX_TEXT_BLINK_MODE) > 0; + blink_state = (tm_info.blink_flags & BX_TEXT_BLINK_STATE) > 0; + if (blink_mode) { + if (tm_info.blink_flags & BX_TEXT_BLINK_TOGGLE) + forceUpdate = 1; + } + if (charmap_updated == 1) { + CreateVGAFont(vga_charmap); + charmap_updated = 0; + forceUpdate = 1; + } + + // invalidate character at previous and new cursor location + if((prev_cursor_y < text_rows) && (prev_cursor_x < text_cols)) { + curs = prev_cursor_y * tm_info.line_offset + prev_cursor_x * 2; + old_text[curs] = ~new_text[curs]; + } + if((tm_info.cs_start <= tm_info.cs_end) && (tm_info.cs_start < font_height) && + (cursor_y < text_rows) && (cursor_x < text_cols)) { + curs = cursor_y * tm_info.line_offset + cursor_x * 2; + old_text[curs] = ~new_text[curs]; + } else { + curs = 0xffff; + } + + GetPort(&oldPort); + + SetPortWindowPort(win); + + rows = text_rows; + y = 0; + do { + hchars = text_cols; + new_line = new_text; + old_line = old_text; + x = 0; + offset = y * tm_info.line_offset; + do { + if (forceUpdate || (old_text[0] != new_text[0]) + || (old_text[1] != new_text[1])) { + cChar = new_text[0]; + cAttr = new_text[1]; + + if (blink_mode) { + cAttr = new_text[1] & 0x7F; + if (!blink_state && (new_text[1] & 0x80)) + cAttr = (cAttr & 0x70) | (cAttr >> 4); + } + if (offset == curs) { + cAttr = (cAttr >> 4) | (cAttr << 4); + } + + if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) { + PmForeColor(new_text[1] & 0x0F); + if (blink_mode) { + PmBackColor((new_text[1] & 0x70) >> 4); + if (!blink_state && (new_text[1] & 0x80)) + PmForeColor((new_text[1] & 0x70) >> 4); + } else { + PmBackColor((new_text[1] & 0xF0) >> 4); + } + } else { + fgColor = (**gCTable).ctTable[new_text[1] & 0x0F].rgb; + bgColor = (**gCTable).ctTable[(new_text[1] & 0xF0) >> 4].rgb; + + RGBForeColor(&fgColor); + RGBBackColor(&bgColor); + } + + xc = x * font_width; + yc = y * font_height; + + SetRect(&destRect, xc, yc, + xc+font_width, yc+font_height); + + CopyBits(vgafont[cChar], WINBITMAP(win), + &srcTextRect, &destRect, srcCopy, NULL); + + if ((theError = QDError()) != noErr) + BX_ERROR(("mac: CopyBits returned %hd", theError)); + } + x++; + new_text+=2; + old_text+=2; + offset+=2; + } while (--hchars); + y++; + new_text = new_line + tm_info.line_offset; + old_text = old_line + tm_info.line_offset; + } while (--rows); + + //previous cursor position + prev_cursor_x = cursor_x; + prev_cursor_y = cursor_y; + + SetPort(oldPort); + + windowUpdatesPending = true; +} + +int bx_carbon_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) +{ + ScrapRef theScrap; + ScrapFlavorFlags theScrapFlags; + Size theScrapSize; + OSStatus err; + + GetCurrentScrap(&theScrap); + + // Make sure there is text to paste + err= GetScrapFlavorFlags(theScrap, kScrapFlavorTypeText, &theScrapFlags); + if(err == noErr) + { + GetScrapFlavorSize(theScrap, kScrapFlavorTypeText, &theScrapSize); + *nbytes = theScrapSize; + *bytes = new Bit8u[1 + *nbytes]; + BX_INFO (("found %d bytes on the clipboard", *nbytes)); + err= GetScrapFlavorData(theScrap, kScrapFlavorTypeText, &theScrapSize, *bytes); + BX_INFO (("first byte is 0x%02x", *bytes[0])); + } + else + { + BX_INFO (("No text found on clipboard...")); + } + return (err == noErr); +} + +int bx_carbon_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) +{ + ScrapRef theScrap; + + // Clear out the existing clipboard + ClearCurrentScrap(); + + GetCurrentScrap(&theScrap); + PutScrapFlavor (theScrap, kScrapFlavorTypeText, kScrapFlavorMaskNone, len, text_snapshot); + + return 1; +} + +// ::PALETTE_CHANGE() +// +// Allocate a color in the native GUI, for this color, and put +// it in the colormap location 'index'. +// returns: 0=no screen update needed (color map change has direct effect) +// 1=screen updated needed (redraw using current colormap) + +bx_bool bx_carbon_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) +{ + PaletteHandle thePal, oldpal; + GDHandle saveDevice; + CGrafPtr savePort; + GrafPtr oldPort; + +/* if (gOffWorld != NULL) //(SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) + { + GetGWorld(&savePort, &saveDevice); + + SetGWorld(gOffWorld, NULL); + }*/ + if ((**gTile).pixelType != RGBDirect) + { + GetPort(&oldPort); + SetPortWindowPort(win); + + (**gCTable).ctTable[index].value = index; + (**gCTable).ctTable[index].rgb.red = (red << 8); + (**gCTable).ctTable[index].rgb.green = (green << 8); + (**gCTable).ctTable[index].rgb.blue = (blue << 8); + + SetEntries(index, index, (**gCTable).ctTable); + + CTabChanged(gCTable); + + SetPort(oldPort); + } +/* if (gOffWorld != NULL) //(SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) + SetGWorld(savePort, saveDevice);*/ + if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) + { + + thePal = NewPalette(index, gCTable, pmTolerant, 0x5000); + oldpal = GetPalette(win); + + SetPalette(win, thePal, false); + SetPalette(fullwin, thePal, false); + SetPalette(hidden, thePal, false); + return(1); + } + + return((**gTile).pixelType != RGBDirect); +} + + +// ::GRAPHICS_TILE_UPDATE() +// +// Called to request that a tile of graphics be drawn to the +// screen, since info in this region has changed. +// +// tile: array of 8bit values representing a block of pixels with +// dimension equal to the 'tilewidth' & 'tileheight' parameters to +// ::specific_init(). Each value specifies an index into the +// array of colors you allocated for ::palette_change() +// x0: x origin of tile +// y0: y origin of tile +// +// note: origin of tile and of window based on (0,0) being in the upper +// left of the window. + +void bx_carbon_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) +{ + Rect destRect; + OSErr theError; + Ptr theBaseAddr; + GDHandle saveDevice; + CGrafPtr savePort; + GrafPtr oldPort; + +/* if (gOffWorld != NULL) + { + GetGWorld(&savePort, &saveDevice); + + SetGWorld(gOffWorld, NULL); + }*/ + + screen_state = GRAPHIC_MODE; + + // SetPort - Otherwise an update happens to the headerbar and ooomph, we're drawing weirdly on the screen + GetPort(&oldPort); + SetPortWindowPort(win); + destRect = srcTileRect; + OffsetRect(&destRect, x0, y0); + + //(**gTile).baseAddr = (Ptr)tile; + if ((theError = LockPortBits(gOffWorld)) != noErr) + BX_PANIC(("mac: LockPortBits returned %hd", theError)); + if ((theBaseAddr = GetPixBaseAddr(gTile)) == NULL) + BX_PANIC(("mac: gTile has NULL baseAddr (offscreen buffer purged)")); + else if (vga_bpp == 24 || vga_bpp == 32) + { + for (unsigned iY = 0; iY < (srcTileRect.bottom-srcTileRect.top); iY++) + { + Bit8u *iA = ((Bit8u *)theBaseAddr) + iY * GetPixRowBytes(gTile); + for (unsigned iX = 0; iX < (srcTileRect.right-srcTileRect.left); iX++) + { + iA[iX*4 + 3] = tile[((srcTileRect.right-srcTileRect.left)*iY+iX)*(vga_bpp>>3)]; + iA[iX*4 + 2] = tile[((srcTileRect.right-srcTileRect.left)*iY+iX)*(vga_bpp>>3) + 1]; + iA[iX*4 + 1] = tile[((srcTileRect.right-srcTileRect.left)*iY+iX)*(vga_bpp>>3) + 2]; + iA[iX*4] = vga_bpp == 24 ? 0 : tile[((srcTileRect.right-srcTileRect.left)*iY+iX)*4 + 3]; + } + } + } + else + BlockMoveData(tile, theBaseAddr, (srcTileRect.bottom-srcTileRect.top) * GetPixRowBytes(gTile)); + if ((theError = UnlockPortBits(gOffWorld)) != noErr) + BX_ERROR(("mac: UnlockPortBits returned %hd", theError)); + RGBForeColor(&black); + RGBBackColor(&white); + CopyBits(GetPortBitMapForCopyBits(gOffWorld), WINBITMAP(win), + &srcTileRect, &destRect, srcCopy, NULL); + if ((theError = QDError()) != noErr) + BX_ERROR(("mac: CopyBits returned %hd", theError)); + SetPort(oldPort); + windowUpdatesPending = true; +/* if (gOffWorld != NULL) + SetGWorld(savePort, saveDevice);*/ +} + + + +// ::DIMENSION_UPDATE() +// +// Called when the VGA mode changes it's X,Y dimensions. +// Resize the window to this size, but you need to add on +// the height of the headerbar to the Y value. +// +// x: new VGA x size +// y: new VGA y size (add headerbar_y parameter from ::specific_init(). +// fheight: new VGA character height in text mode +// fwidth : new VGA character width in text mode +// bpp : bits per pixel in graphics mode + +void bx_carbon_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight, unsigned fwidth, unsigned bpp) +{ + if ((bpp != 1) && (bpp != 2) && (bpp != 4) && (bpp != 8) && (bpp != 15) && (bpp != 16) && (bpp != 24) && (bpp != 32)) { + BX_PANIC(("%d bpp graphics mode not supported yet", bpp)); + } + if (bpp != vga_bpp) + { + free(gMyBuffer); + DisposeGWorld(gOffWorld); + if ((gCTable == NULL) || (*gCTable == NULL) || (*gCTable == (void *)-1)) + gCTable = GetCTable(128); + vga_bpp = bpp; + CreateTile(); + } + + if (fheight > 0) { + text_cols = x / fwidth; + text_rows = y / fheight; + if(fwidth != font_width || fheight != font_height) { + font_width = fwidth; + font_height = fheight; + CreateVGAFont(vga_charmap); + } + } + + if (x != width || y != height) + { +#if 1 + SizeWindow(win, x, y, false); +#endif + +#if 0 + // Animates the resizing, cute, but gratuitous + Rect box, frame; + GetWindowBounds(win, kWindowStructureRgn, &frame); + GetWindowPortBounds(win, &box); + frame.right = frame.right - box.right + x; + frame.bottom = frame.bottom - box.bottom + y; + + TransitionWindow(win, kWindowSlideTransitionEffect, kWindowResizeTransitionAction, &frame); +#endif + SizeWindow(fullwin, x, y, false); + SizeWindow(hidden, x, y, false); + width = x; + height = y; + } + + windowUpdatesPending = true; + + host_xres = x; + host_yres = y; + host_bpp = bpp; +} + + +// ::CREATE_BITMAP() +// +// Create a monochrome bitmap of size 'xdim' by 'ydim', which will +// be drawn in the headerbar. Return an integer ID to the bitmap, +// with which the bitmap can be referenced later. +// +// bmap: packed 8 pixels-per-byte bitmap. The pixel order is: +// bit0 is the left most pixel, bit7 is the right most pixel. +// xdim: x dimension of bitmap +// ydim: y dimension of bitmap + +// rewritten by tim senecal to use the cicn (color icon) resources instead + +// We need to have a cicn resource for each and every call to create_bitmap +// If this fails, it is probably because more icons were added to bochs and +// we need to create more cicns in bochs.r to match with create_bitmap calls in +// gui.cc +unsigned bx_carbon_gui_c::create_bitmap(const unsigned char *bmap, unsigned xdim, unsigned ydim) +{ + unsigned i; + unsigned char *data; + long row_bytes, bytecount; + + bx_cicn[numPixMaps] = GetCIcon(numPixMaps+128); +// BX_ASSERT(bx_cicn[numPixMaps]); + + numPixMaps++; + + return(numPixMaps-1); +} + + +// ::HEADERBAR_BITMAP() +// +// Called to install a bitmap in the bochs headerbar (toolbar). +// +// bmap_id: will correspond to an ID returned from +// ::create_bitmap(). 'alignment' is either BX_GRAVITY_LEFT +// or BX_GRAVITY_RIGHT, meaning install the bitmap in the next +// available leftmost or rightmost space. +// f: a 'C' function pointer to callback when the mouse is clicked in +// the boundaries of this bitmap. + +unsigned bx_carbon_gui_c::headerbar_bitmap(unsigned bmap_id, unsigned alignment, void (*f)(void)) +{ + unsigned hb_index; + Rect destRect, r; + GetWindowPortBounds(toolwin, &r); + int xorigin, yorigin = TOOL_MARGIN_SPACE; + ControlButtonContentInfo info; + + toolPixMaps++; + hb_index = toolPixMaps-1; +//bx_tool_pixmap[hb_index].pm = bx_pixmap[bmap_id]; +//bx_tool_pixmap[hb_index].cicn = bx_cicn[bmap_id]; + bx_tool_pixmap[hb_index].alignment = alignment; + bx_tool_pixmap[hb_index].f = f; + + if (alignment == BX_GRAVITY_LEFT) + { + bx_tool_pixmap[hb_index].xorigin = bx_bitmap_left_xorigin; + bx_tool_pixmap[hb_index].yorigin = TOOL_MARGIN_SPACE; +// bx_bitmap_left_xorigin += (**bx_pixmap[bmap_id]).bounds.right; + bx_bitmap_left_xorigin += 32 + TOOL_SPACING; + xorigin = bx_tool_pixmap[hb_index].xorigin; + } + else + { +// bx_bitmap_right_xorigin += (**bx_pixmap[bmap_id]).bounds.right; + bx_bitmap_right_xorigin += 32; + bx_tool_pixmap[hb_index].xorigin = bx_bitmap_right_xorigin; + bx_tool_pixmap[hb_index].yorigin = TOOL_MARGIN_SPACE; + xorigin = r.right - bx_tool_pixmap[hb_index].xorigin; + bx_bitmap_right_xorigin += TOOL_SPACING; + } + + SetRect(&destRect, xorigin, yorigin, xorigin+32, yorigin+32); + + info.contentType = kControlContentCIconHandle; + info.u.cIconHandle = bx_cicn[bmap_id]; + + CreateIconControl(toolwin, &destRect, &info, false, &(bx_tool_pixmap[hb_index].control)); + SetControlCommandID(bx_tool_pixmap[hb_index].control, hb_index); + return(hb_index); +} + +// ::SHOW_HEADERBAR() +// +// Show (redraw) the current headerbar, which is composed of +// currently installed bitmaps. + +void bx_carbon_gui_c::show_headerbar(void) +{ + UpdateTools(); + DrawControls(toolwin); +} + + +// ::REPLACE_BITMAP() +// +// Replace the bitmap installed in the headerbar ID slot 'hbar_id', +// with the one specified by 'bmap_id'. 'bmap_id' will have +// been generated by ::create_bitmap(). The old and new bitmap +// must be of the same size. This allows the bitmap the user +// sees to change, when some action occurs. For example when +// the user presses on the floppy icon, it then displays +// the ejected status. +// +// hbar_id: headerbar slot ID +// bmap_id: bitmap ID + +void bx_carbon_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) +{ +//bx_tool_pixmap[hbar_id].pm = bx_pixmap[bmap_id]; +//bx_tool_pixmap[hbar_id].cicn = bx_cicn[bmap_id]; + ControlButtonContentInfo info; + + info.contentType = kControlContentCIconHandle; + info.u.cIconHandle = bx_cicn[bmap_id]; + + SetControlData(bx_tool_pixmap[hbar_id].control, + kControlEntireControl, kControlIconContentTag, sizeof(ControlButtonContentInfo), &info); + show_headerbar(); +} + + +// ::EXIT() +// +// Called before bochs terminates, to allow for a graceful +// exit from the native GUI mechanism. + +void bx_carbon_gui_c::exit(void) +{ + if (!menubarVisible) + ShowMenubar(); // Make the menubar visible again + InitCursor(); + + // Make the clipboard all happy before we go + CallInScrapPromises(); +} + +#if 0 +void bx_carbon_gui_c::snapshot_handler(void) +{ + PicHandle ScreenShot; + long val; + + SetPortWindowPort(win); + + ScreenShot = OpenPicture(&win->portRect); + + CopyBits(&win->portBits, &win->portBits, &win->portRect, &win->portRect, srcCopy, NULL); + + ClosePicture(); + + val = ZeroScrap(); + + HLock((Handle)ScreenShot); + PutScrap(GetHandleSize((Handle)ScreenShot), 'PICT', *ScreenShot); + HUnlock((Handle)ScreenShot); + + KillPicture(ScreenShot); +} +#endif + +// HidePointer() +// +// Hides the Mac mouse pointer + +void HidePointer() +{ + HiliteMenu(0); + HideCursor(); + SetPortWindowPort(win); + SetPt(&scrCenter, 300, 240); + LocalToGlobal(&scrCenter); + ResetPointer(); + GetMouse(&prevPt); + cursorVisible = false; + CheckMenuItem(GetMenuHandle(mBochs), iCursor, false); +} + +// ShowPointer() +// +// Shows the Mac mouse pointer + +void ShowPointer() +{ + InitCursor(); + cursorVisible = true; + CheckMenuItem(GetMenuHandle(mBochs), iCursor, true); + //CheckItem(GetMenuHandle(mBochs), iCursor, true); +} + +// UpdateTools() +// +// Check the state of the emulation and use it to tell which tools are available or not. +void UpdateTools() +{ + ScrapRef theScrap; + ScrapFlavorFlags theScrapFlags; + + GetCurrentScrap(&theScrap); + + // If keyboard mapping is on AND there is text on the clipboard enable pasting + if (SIM->get_param_bool(BXPN_KBD_USEMAPPING)->get() && + (GetScrapFlavorFlags(theScrap, kScrapFlavorTypeText, &theScrapFlags) == noErr)) + { + EnableMenuItem(GetMenuRef(mEdit), iPaste); + EnableControl(bx_tool_pixmap[PASTE_TOOL_BUTTON].control); + } + else + { + DisableMenuItem(GetMenuRef(mEdit), iPaste); + DisableControl(bx_tool_pixmap[PASTE_TOOL_BUTTON].control); + } + + // Currently copy and snapshot aren't available if we aren't in text mode + if (screen_state == GRAPHIC_MODE) { + DisableMenuItem(GetMenuRef(mEdit), iCopy); + DisableMenuItem(GetMenuRef(mBochs), iSnapshot); + DisableControl(bx_tool_pixmap[COPY_TOOL_BUTTON].control); + DisableControl(bx_tool_pixmap[SNAPSHOT_TOOL_BUTTON].control); + } else + { + EnableMenuItem(GetMenuRef(mEdit), iCopy); + EnableMenuItem(GetMenuRef(mBochs), iSnapshot); + EnableControl(bx_tool_pixmap[COPY_TOOL_BUTTON].control); + EnableControl(bx_tool_pixmap[SNAPSHOT_TOOL_BUTTON].control); + } + + // User control active if keys defined + char *user_shortcut; + user_shortcut = SIM->get_param_string(BXPN_USER_SHORTCUT)->getptr(); + if (user_shortcut[0] && (strcmp(user_shortcut, "none"))) { + EnableControl(bx_tool_pixmap[USER_TOOL_BUTTON].control); + } + else + { + DisableControl(bx_tool_pixmap[USER_TOOL_BUTTON].control); + } + + // Config panel only available if user has a terminal or equivalent + if(isatty(STDIN_FILENO)) + { + EnableControl(bx_tool_pixmap[CONFIGURE_TOOL_BUTTON].control); + } + else + { + DisableControl(bx_tool_pixmap[CONFIGURE_TOOL_BUTTON].control); + } +} + +// HideTools() +// +// Hides the Bochs toolbar + +void HideTools() +{ + HideWindow(toolwin); +#if 0 + if (menubarVisible) + { + MoveWindow(win, gLeft, gMinTop, false); + } + else + { + MoveWindow(hidden, gLeft, gMinTop, false); + } +#endif + CheckMenuItem(GetMenuHandle(mBochs), iTool, false); + HiliteWindow(win, true); +} + +// ShowTools() +// +// Shows the Bochs toolbar + +void ShowTools() +{ +#if 0 + if (menubarVisible) + { + MoveWindow(win, gLeft, gMaxTop, false); + } + else + { + MoveWindow(hidden, gLeft, gMaxTop, false); + } +#endif + ShowWindow(toolwin); +// theGui->show_headerbar(); + CheckMenuItem(GetMenuHandle(mBochs), iTool, true); + HiliteWindow(win, true); +} + +// HideMenubar() +// +// Hides the menubar (obviously) + +void HideMenubar() +{ + HideMenuBar(); + + HideWindow(win); + ShowWindow(backdrop); + hidden = win; + win = fullwin; + ShowWindow(win); + + SelectWindow(win); + menubarVisible = false; + CheckMenuItem(GetMenuHandle(mBochs), iMenuBar, false); +} + +// ShowMenubar() +// +// Makes the menubar visible again so other programs will display correctly. + +void ShowMenubar() +{ + HideWindow(backdrop); + win = hidden; + hidden = fullwin; + HideWindow(hidden); + ShowWindow(win); + HiliteWindow(win, true); + + ShowMenuBar(); + + menubarVisible = true; + CheckMenuItem(GetMenuHandle(mBochs), iMenuBar, true); +} + +void HideConsole() +{ +// HideWindow(SouixWin); + CheckMenuItem(GetMenuHandle(mBochs), iConsole, false); +} + +void ShowConsole() +{ +// ShowWindow(SouixWin); +// SelectWindow(SouixWin); + CheckMenuItem(GetMenuHandle(mBochs), iConsole, true); +} + +// CreateKeyMap() +// +// Create a KCHR data structure to map Mac virtual key codes to Bochs key codes + +void CreateKeyMap(void) +{ + const unsigned char KCHRHeader [258] = { + 0, + 1 + }; + + const unsigned char KCHRTable [130] = { + 0, + 1, + BX_KEY_A, + BX_KEY_S, + BX_KEY_D, + BX_KEY_F, + BX_KEY_H, + BX_KEY_G, + BX_KEY_Z, + BX_KEY_X, + BX_KEY_C, + BX_KEY_V, + BX_KEY_LEFT_BACKSLASH, + BX_KEY_B, + BX_KEY_Q, + BX_KEY_W, + BX_KEY_E, + BX_KEY_R, + BX_KEY_Y, + BX_KEY_T, + BX_KEY_1, + BX_KEY_2, + BX_KEY_3, + BX_KEY_4, + BX_KEY_6, + BX_KEY_5, + BX_KEY_EQUALS, + BX_KEY_9, + BX_KEY_7, + BX_KEY_MINUS, + BX_KEY_8, + BX_KEY_0, + BX_KEY_RIGHT_BRACKET, + BX_KEY_O, + BX_KEY_U, + BX_KEY_LEFT_BRACKET, + BX_KEY_I, + BX_KEY_P, + BX_KEY_ENTER, + BX_KEY_L, + BX_KEY_J, + BX_KEY_SINGLE_QUOTE, + BX_KEY_K, + BX_KEY_SEMICOLON, + BX_KEY_BACKSLASH, + BX_KEY_COMMA, + BX_KEY_SLASH, + BX_KEY_N, + BX_KEY_M, + BX_KEY_PERIOD, + BX_KEY_TAB, + BX_KEY_SPACE, + BX_KEY_GRAVE, + BX_KEY_BACKSPACE, + BX_KEY_KP_ENTER, + BX_KEY_ESC, + 0, // 0x36 (record button) + 0, // 0x37 (cmd key) + 0, // 0x38 (left shift) + 0, // 0x39 (caps lock) + 0, // 0x3A (left option/alt) + 0, // 0x3B (left ctrl) + 0, // 0x3C (right shift) + 0, // 0x3D (right option/alt) + 0, // 0x3E (right ctrl) + 0, // 0x3F (fn key -- laptops) + 0, // 0x40 + BX_KEY_KP_DELETE, // KP_PERIOD + 0, // 0x42 (move right/multiply) + BX_KEY_KP_MULTIPLY, + 0, // 0x44 + BX_KEY_KP_ADD, + 0, // 0x46 (move left/add) + BX_KEY_NUM_LOCK, + 0, // 0x48 (move down/equals) + 0, // 0x49 + 0, // 0x4A + BX_KEY_KP_DIVIDE, + BX_KEY_KP_ENTER, + 0, // 0x4D (move up/divide) + BX_KEY_KP_SUBTRACT, + 0, // 0x4F + 0, // 0x50 + BX_KEY_EQUALS, // 0x51 (kp equals) + BX_KEY_KP_INSERT, // 0x52 (kp 0) + BX_KEY_KP_END, // 0x53 (kp 1) + BX_KEY_KP_DOWN, // 0x54 (kp 2) + BX_KEY_KP_PAGE_DOWN, // 0x55 (kp 3) + BX_KEY_KP_LEFT, // 0x56 (kp 4) + BX_KEY_KP_5, + BX_KEY_KP_RIGHT, // 0x58 (kp 6) + BX_KEY_KP_HOME, // 0x59 (kp 7) + 0, // 0x5A + BX_KEY_KP_UP, // 0x5B (kp 8) + BX_KEY_KP_PAGE_UP, // 0x5C (kp 9) + 0, // 0x5D + 0, // 0x5E + 0, // 0x5F + BX_KEY_F5, + BX_KEY_F6, + BX_KEY_F7, + BX_KEY_F3, + BX_KEY_F8, + BX_KEY_F9, + 0, // 0x66 + BX_KEY_F11, + 0, // 0x68 + BX_KEY_PRINT, // 0x69 (print screen) + 0, // 0x6A + BX_KEY_SCRL_LOCK, // 0x6B (scroll lock) + 0, // 0x6C + BX_KEY_F10, + BX_KEY_MENU, // 0x6E + BX_KEY_F12, + 0, // 0x70 + BX_KEY_PAUSE, // 0x71 (pause) + BX_KEY_INSERT, + BX_KEY_HOME, + BX_KEY_PAGE_UP, + BX_KEY_DELETE, + BX_KEY_F4, + BX_KEY_END, + BX_KEY_F2, + BX_KEY_PAGE_DOWN, + BX_KEY_F1, + BX_KEY_LEFT, + BX_KEY_RIGHT, + BX_KEY_DOWN, + BX_KEY_UP + }; + + KCHR = NewPtrClear(390); + if (KCHR == NULL) + BX_PANIC(("mac: can't allocate memory for key map")); + + BlockMove(KCHRHeader, KCHR, sizeof(KCHRHeader)); + BlockMove(KCHRTable, Ptr(KCHR + sizeof(KCHRHeader)), sizeof(KCHRTable)); +} + +// CreateVGAFont() +// +// Create an array of PixMaps for the PC screen font + +void CreateVGAFont(unsigned char *vga_charmap) +{ + int i, x; + unsigned char *fontData, curPixel; + long row_bytes, bytecount; + + SetRect(&srcTextRect, 0, 0, font_width, font_height); + for (i=0; i<256; i++) + { + if(vgafont[i] != NULL) free(vgafont[i]); + vgafont[i] = CreateBitMap(font_width, font_height); + row_bytes = (*(vgafont[i])).rowBytes; + bytecount = row_bytes * font_height; + fontData = (unsigned char *)NewPtrClear(bytecount); + + for (x=0; xbaseAddr = Ptr(fontData); + } +} + +// CreateBitMap() +// Allocate a new bitmap and fill in the fields with appropriate +// values. + +BitMap *CreateBitMap(unsigned width, unsigned height) +{ + BitMap *bm; + long row_bytes; + + row_bytes = ((width + 31) >> 5) << 2; + bm = (BitMap *)calloc(1, sizeof(BitMap)); + if (bm == NULL) + BX_PANIC(("mac: can't allocate memory for pixmap")); + SetRect(&bm->bounds, 0, 0, width, height); + bm->rowBytes = row_bytes; + // Quickdraw allocates a new color table by default, but we want to + // use one we created earlier. + + return bm; +} + +// CreatePixMap() +// Allocate a new pixmap handle and fill in the fields with appropriate +// values. +/* +PixMapHandle CreatePixMap(unsigned left, unsigned top, unsigned width, + unsigned height, unsigned depth, CTabHandle clut) +{ + PixMapHandle pm; + long row_bytes; + + row_bytes = (((long) depth * ((long) width) + 31) >> 5) << 2; + pm = NewPixMap(); + if (pm == NULL) + BX_PANIC(("mac: can't allocate memory for pixmap")); + (**pm).bounds.left = left; + (**pm).bounds.top = top; + (**pm).bounds.right = left+width; + (**pm).bounds.bottom = top+height; + (**pm).pixelSize = depth; + (**pm).rowBytes = row_bytes | 0x8000; + + DisposeCTable((**pm).pmTable); + (**pm).pmTable = clut; + // Quickdraw allocates a new color table by default, but we want to + // use one we created earlier. + + return pm; +}*/ + +unsigned char reverse_bitorder(unsigned char b) +{ + unsigned char ret=0; + + for (unsigned i=0; i<8; i++) + { + ret |= (b & 0x01) << (7-i); + b >>= 1; + } + + return(ret); +} + +void bx_carbon_gui_c::mouse_enabled_changed_specific (bx_bool val) +{ +} + +void bx_carbon_gui_c::beep_on(float frequency) +{ + AlertSoundPlay(); + BX_INFO(("Carbon Beep ON (frequency=%.2f)",frequency)); +} + +void bx_carbon_gui_c::beep_off() +{ + BX_INFO(("Carbon Beep OFF")); +} + +// we need to handle "ask" events so that PANICs are properly reported +static BxEvent * CarbonSiminterfaceCallback (void *theClass, BxEvent *event) +{ + event->retcode = 0; // default return code + + if(event->type == BX_ASYNC_EVT_LOG_MSG || event->type == BX_SYNC_EVT_LOG_ASK) + { + DialogRef alertDialog; + CFStringRef title; + CFStringRef exposition; + DialogItemIndex index; + AlertStdCFStringAlertParamRec alertParam = {0}; + + if(event->u.logmsg.prefix != NULL) + { + title = CFStringCreateWithCString(NULL, event->u.logmsg.prefix, kCFStringEncodingASCII); + exposition = CFStringCreateWithCString(NULL, event->u.logmsg.msg, kCFStringEncodingASCII); + } + else + { + title = CFStringCreateWithCString(NULL, event->u.logmsg.msg, kCFStringEncodingASCII); + exposition = NULL; + } + + alertParam.version = kStdCFStringAlertVersionOne; + alertParam.defaultText = CFSTR("Continue"); + alertParam.cancelText = CFSTR("Quit"); + alertParam.position = kWindowDefaultPosition; + alertParam.defaultButton = kAlertStdAlertOKButton; + alertParam.cancelButton = kAlertStdAlertCancelButton; + + CreateStandardAlert( + kAlertCautionAlert, + title, + exposition, /* can be NULL */ + &alertParam, /* can be NULL */ + &alertDialog); + + RunStandardAlert( + alertDialog, + NULL, /* can be NULL */ + &index); + + CFRelease(title); + + if(exposition != NULL) + { + CFRelease(exposition); + } + + // continue + if(index == kAlertStdAlertOKButton) + { + event->retcode = 0; + } + // quit + else if(index == kAlertStdAlertCancelButton) + { + event->retcode = 2; + } +#if 0 + if(event->u.logmsg.prefix != NULL) + { + BX_INFO(("Callback log: Prefix: %s", event->u.logmsg.prefix)); + } + BX_INFO(("Callback log: Message: %s", event->u.logmsg.msg)); +#endif + return event; + } + +#if 0 + // Track down the message that exiting leaves... + switch(event->type) + { + case BX_SYNC_EVT_TICK: + case BX_SYNC_EVT_LOG_ASK: + break; + default: + BX_INFO(("Callback tracing: Evt: %d (%s)", event->type, + ((BX_EVT_IS_ASYNC(event->type))?"async":"sync"))); + } +#endif + if (old_callback != NULL) { + return (*old_callback)(old_callback_arg, event); + } else { + return event; + } +} +#endif /* if BX_WITH_CARBON */ diff --git a/bochs/gui/enh_dbg.cc b/bochs/gui/enh_dbg.cc new file mode 100755 index 00000000..39a38a9c --- /dev/null +++ b/bochs/gui/enh_dbg.cc @@ -0,0 +1,3381 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// BOCHS ENHANCED DEBUGGER Ver 1.2 +// (C) Chourdakis Michael, 2008 +// http://www.turboirc.com +// +// Modified by Bruce Ewing +// + +#include "config.h" + +#if BX_DEBUGGER && BX_DEBUGGER_GUI + +#include + +#include "bochs.h" +#include "param_names.h" +#include "cpu/cpu.h" +#include "disasm/disasm.h" + +#include "enh_dbg.h" + +// Match stuff +#define MATCH_TRUE 1 +#define MATCH_FALSE 0 +#define MATCH_ABORT -1 + +#define NEGATE_CLASS +#define OPTIMIZE_JUST_STAR + +// get a "class" to access the disassebler +// Note; any instance has access to all the member functions -- that is enough! +// -- i.e. No further initialization necessary. +static disassembler bx_disassemble; + +#ifdef WIN32 +int useCR = 1; // Win32 needs CRLF pairs for an EOL +bx_bool NeedSysRresize = TRUE; // use Sys Reg to help autosize Reg "hex" column +#else +int useCR = 0; +bx_bool NeedSysRresize = FALSE; // use Sys Reg to help autosize Reg "hex" column +#endif + +bx_bool SeeReg[8] = { + TRUE, // in 64bit mode, show 32bit versions of registers also (EAX, ...) + FALSE, // show segment registers (CS, ...) + FALSE, // show GDTR, IDTR, LDTR, Task Reg + FALSE, // show control register (CR0, ...) + FALSE, // show FPU (STi) / MMX registers + FALSE, // show XMM registers + FALSE, // show the Debug Registers (DR0, ...) + FALSE // Test Registers not yet supported in bochs +}; + +bx_bool SingleCPU = FALSE; // Display all SMP CPUs +bx_bool ShowIOWindows = TRUE; // Display the Input and Output Internal Debugger windows +bx_bool ShowButtons = TRUE; // Display the top-row Step/Continue pushbuttons +bx_bool SeeRegColors = TRUE; // Display registers with background color "groups" +bx_bool ignoreNxtT = TRUE; // Do not show "Next at t=" output lines +bx_bool ignSSDisasm = TRUE; // Do not show extra disassembly line at each break +int UprCase = 0; // 1 = convert all Asm, Register names, Register values to uppercase +int DumpInAsciiMode = 3; // bit 1 = show ASCII in dumps, bit 2 = show hex, value=0 is illegal + +bx_bool isLittleEndian = TRUE; +int DefaultAsmLines = 250; // default # of asm lines disassembled and "cached" +int bottommargin = 6; // ASM autoscroller tries to leave this many lines below +int topmargin = 3; // autoscroller tries to leave this many lines above +// Note: topmargin must be less than bottommargin + +// How to use DockOrder: the Register list is window 1, ASM is window 2, MemDump is window 3 +// Create the hex value with the digits in the order you want the windows to be. +// 0x312 would have MemDump on the left, Register in the middle, ASM on the right +short DockOrder = 0x123; // set the default List "docking" (Reg, ASM, Dump) + +bx_bool SA_valid = FALSE; +Bit64u SelectedDataAddress = 0; +Bit64u CurrentAsmLA = 0; // = EIP/RIP -- for highlighting in ASM window +Bit64u BottomAsmLA; // beginning and end addrs on ASM window +Bit64u TopAsmLA; + +Bit32u PrevStepNSize = 50; // cpu_loop control variables +Bit64u PrevPtime = 9; // any number other than 0 +Bit64u NewPtime; // used to test whether sim has "updated" +unsigned TotCPUs; // # of CPUs in a multi-CPU simulation +unsigned CpuSupportSSE = 0; // cpu supports SSE +unsigned CurrentCPU; // cpu that is being displayed + +struct ASKTEXT ask_str; + +// window resizing/docking stuff +int OneCharWide; // average width of a char in current font (pixels) +int Sizing = 0; // current "resizing/docking mode" +int Resize_HiX; // horizontal limits of the current resize operation (pixels) +int Resize_LoX; +unsigned ListWidthPix[3] = {5,7,8}; // set initial proportions of Reg, Asm, Dump windows +int CurCenterList = 0; +bx_bool DumpHasFocus = FALSE; +// BarClix holds the x-axis position (in pixels or logical units) of the two resizing bars, +// in parent coordinates (ie. any window that contains the lists) +unsigned short BarClix[2]; + +bx_bool AtBreak = FALSE; // Status indicators +bx_bool CpuModeChange = TRUE; +bx_bool StatusChange = TRUE; + +bx_bool In64Mode = FALSE; // CPU modes +bx_bool In32Mode = FALSE; +unsigned CpuMode = 0; +Bit32u InPaging = 0; // Storage for the top bit of CR0, unmodified + +bx_bool doOneTimeInit = TRUE; // Internal flags +bx_bool ResizeColmns; // address/value column autosize flag +bx_bool FWflag = FALSE; // friendly warning has been shown to user once already + +static char *PrevStack; // buffer for testing changes in stack values +Bit64u PStackLA = 0; // to calculate alignment between prev and current stack +bx_bool StackEntChg[STACK_ENTRIES]; // flag for "change detected" on each stack line + +// only pay special attention to registers up to EFER +static const char* RegLCName[EFER_Rnum + 1] = { + "rax","rbx","rcx","rdx","rsi","rdi","rbp","rsp","rip", + "r8","r9","r10","r11","r12","r13","r14","r15", + "eflags","eax","ebx","ecx","edx","esi","edi","ebp","esp","eip", + "cs","ds","es","ss","fs","gs", + "gdtr","idtr","ldtr","tr","cr0","cr2","cr3","cr4","efer" +}; +static char* RDispName[EFER_Rnum + 1]; +static bx_param_num_c *RegObject[BX_MAX_SMP_THREADS_SUPPORTED][TOT_REG_NUM + EXTRA_REGS]; +Bit64u rV[EFER_Rnum + 1]; // current values of registers +Bit64u PV[EFER_Rnum + 1]; // previous values of registers +Bit32s GDT_Len; // "limits" (= bytesize-1) for GDT and IDT +Bit32s IDT_Len; +Bit8u RegColor[TOT_REG_NUM]; // specifies foreground and background color of registers +// Text color is red if the upper bit is set. Background is set according to ColorList. +int RitemToRnum[TOT_REG_NUM]; // mapping from Reg List Item# to register number + +Bit64u ladrmin = 0; // bochs linear addressing access variables +Bit64u ladrmax = 0; +Bit64u l_p_offset; + +bx_bool DumpInitted = FALSE; // has the MemDump window ever been filled with data? +int DumpAlign = 1; +int PrevDAD; // saves "previous DumpAlign value" (forces column autosize) +char *DataDump; +Bit64u DumpStart = 0; // current emulated address (lin or phys) of DataDump +bx_bool doDumpRefresh; +int DViewMode = VIEW_MEMDUMP; +bx_bool LinearDump = TRUE; // FALSE = memdump uses physical addressing + +char *tmpcb; // 512b is allocated in bigbuf +char *CurStack; // Stack workspace (400b usually) +char AsciiHex[512]; // Unsigned char to printable hex xlat table +static char UCtable[256]; + +char bigbuf[outbufSIZE]; // 40K preallocated storage for all char buffers (see DoAllInit) +char *DbgAppendPtr = bigbuf; +char *OutWindow; // buffer for the Output window +int OutWinCnt = OutWinSIZE; // available size of OutWindow buffer +int PO_Tdelay = 0; // delay before displaying partial output lines + +int AsmLineCount = 1; // # of disassembled asm lines loaded +int AsmPgSize = 0; +int ListLineRatio; // number of vertical pixels in a ListView Item +int ListVerticalPix; // number of vertical pixels in each List +Bit64u AsmLA[MAX_ASM]; // linear address of each disassembled ASM line + +// Command stuff +int CommandHistoryIdx = 0; +char *CmdHistory[CmdHistorySize]; // 64 command History storage (fixed 80b each) +int CmdHInsert = 0; // index of next history entry to store + +int SizeList = 0; +Bit32s xClick = -1; // halfway through a mouseclick flag + location +Bit32s yClick = 0; // values are in Listview coordinates + +static const char* GDTt2[8] = { + "16-bit code", + "64-bit code", + "32-bit code", + "16-bit data", + "64-bit data", + "32-bit data", + "Illegal", + "Unused" +}; + +static const char* GDTsT[] = { "","Available 16bit TSS","LDT","Busy 16bit TSS","16bit Call Gate", + "Task Gate","16bit Interrupt Gate","16bit Trap Gate","Reserved", + "Available 32bit TSS","Reserved","Busy 32bit TSS","32bit Call Gate", + "Reserved","32bit Interrupt Gate","32bit Trap Gate" +}; + +// Register hex display formats -- index by UprCase +static const char* Fmt64b[2] = { FMT_ADDRX64, "%016llX" }; +static const char* Fmt32b[2] = { "%08x", "%08X" }; +static const char* Fmt16b[2] = { "%04x", "%04X" }; +static const char* xDT64Fmt[2] = { FMT_ADDRX64 " (%4x)", "%016llX (%4X)" }; +static const char* xDT32Fmt[2] = { "%08x (%4x)", "%08X (%4X)" }; + +static const char *BrkName[5] = { + "Linear Breakpt", + "Physical Breakpt", + "Virtual Breakpt", + "Write Watchpoint", + "Read Watchpoint", +}; + +bx_address BrkLAddr[BX_DBG_MAX_LIN_BPOINTS]; +unsigned BrkIdx[BX_DBG_MAX_LIN_BPOINTS]; +int BreakCount = 0; + +// Breakpoint Dump Window stuff +unsigned short BrkpIDMap[256]; +unsigned short WWP_BaseEntry; +unsigned short RWP_BaseEntry; +unsigned short EndLinEntry; +unsigned short EndPhyEntry; +unsigned short WWPSnapCount; +unsigned short RWPSnapCount; +bx_phy_address WWP_Snapshot[16]; +bx_phy_address RWP_Snapshot[16]; + +short nDock[36] = { // lookup table for alternate DockOrders + 0x231, 0x312, 0x231, 0x213, 0x132, 0x132, + 0x213, 0x321, 0x123, 0x123, 0x321, 0x312, + 0x213, 0x213, 0x123, 0x312, 0x321, 0x312, + 0x132, 0x123, 0x132, 0x321, 0x231, 0x231, + 0x312, 0x312, 0x231, 0x213, 0x132, 0x213, + 0x132, 0x123, 0x321, 0x321, 0x123, 0x231 +}; + +void MakeXlatTables() +{ + char *p, c; + int i = 256; + while (--i >= 0) // make an upper case translation table + UCtable[i]= toupper(i); + p = AsciiHex; // then also make a "hex" table + for ( i = 0; i < 256; i++) + { + c = i >> 4; + if (c > 9) + c += 'A' - 10; // do all hex in uppercase + else + c += '0'; + *(p++)= c; + c = i & 0xf; + if (c > 9) + c += 'A' - 10; + else + c += '0'; + *(p++)= c; + } +} + +int DoMatch(const char *text, const char *p, bx_bool IsCaseSensitive) +{ + // probably the MOST DIFFICULT FUNCTION in TurboIRC + // Thanks to BitchX for copying this function + //int last; + int matched; + //int reverse; + int pT = 0; + int pP = 0; + + for (; p[pP] != '\0'; pP++, pT++) + { + if (text[pT] == '\0' && p[pP] != '*') + return MATCH_ABORT; + switch (p[pP]) + { + // case '\\': // Match with following char + // pP++; + // NO BREAK HERE + + default: + if (IsCaseSensitive != FALSE) + { + if (text[pT] != p[pP]) + return MATCH_FALSE; + else + continue; + } + if (UCtable[(int) text[pT]] != UCtable[(int) p[pP]]) + return MATCH_FALSE; + continue; + + case '?': + continue; + + case '*': + if (p[pP] == '*') + pP++; + if (p[pP] == '\0') + return MATCH_TRUE; + while (text[pT] != FALSE) + { + matched = DoMatch(text + pT++, p + pP, FALSE); + if (matched != MATCH_FALSE) + return matched; + } + return MATCH_ABORT; + + } + } + return (text[pT] == '\0'); +} + +// This will be called from the other funcs +int VMatching(const char *text, const char *p, bx_bool IsCaseSensitive) +{ +#ifdef OPTIMIZE_JUST_STAR + if (p[0] == '*' && p[1] == '\0') + return MATCH_TRUE; +#endif + return (DoMatch(text, p, IsCaseSensitive) == MATCH_TRUE); +} + +int IsMatching(const char *text, const char *p, bx_bool IsCaseSensitive) +{ + return VMatching(text, p, IsCaseSensitive); +} + +// utility function for list resizing operation -- set LoX and HiX +// the resize operation exits if the mouse moves beyond LoX or HiX +void SetHorzLimits() +{ + int i; + if (Sizing == -2) // is it the left or right bar? + { + Resize_LoX = OneCharWide << 2; // set horizontal limits + i = ListWidthPix[(DockOrder >> 8) -1]; // col1 width + // calculate end of col2 - 4 charwidths in parent coordinates + Resize_HiX = i + ListWidthPix[CurCenterList] - (OneCharWide << 2); + Sizing = 1; + } + else + { + i = ListWidthPix[(DockOrder >> 8) -1]; // col1 width + Resize_LoX = i + (OneCharWide << 2); // set horizontal limits + // calculate total width - 4 charwidths in parent coordinates + i = ListWidthPix[REG_WND] + ListWidthPix[ASM_WND] + ListWidthPix[DUMP_WND]; + Resize_HiX = i - (OneCharWide << 2); + Sizing = 2; + } +} + +void DockResize (int DestIdx, Bit32u ParentX) +{ + if (Sizing >= 10) // dock operation + { + int Siz = Sizing - 10; // calculate which list initiated dock = moving window + if (Siz != DestIdx) // moving window = destination window is a no-op + { + // Convert Sizing and DestIdx into a table lookup index (j) + // -- otherwise, the "algorithm" to compute new DockOrder is annoying + int j = (Siz*2 + ((Siz | DestIdx) & 1)) *6; + if (Siz == 1) + j = (Siz*4 + (DestIdx & 2)) *3; + + // convert current DockOrder to a number from 0 to 5, add to j + j += ((DockOrder >> 7) - 2) &6; + if (((DockOrder >> 4) &3) > (DockOrder & 3)) + j += 1; + DockOrder = nDock[j]; + MoveLists(); + } + } + else // resize operation + { + int idx, totpix; + if (Sizing == 1) + { + idx = (DockOrder >> 8) -1; // sizing the left bar + totpix = ListWidthPix[idx] + ListWidthPix[CurCenterList]; + ListWidthPix[idx] = ParentX; + ListWidthPix[CurCenterList] = totpix - ParentX; // reset the widths of the left and center windows + } + else + { + ParentX -= ListWidthPix[(DockOrder >> 8) -1]; // caclulate new width of center window + idx = (DockOrder & 3) -1; + totpix = ListWidthPix[idx] + ListWidthPix[CurCenterList]; + ListWidthPix[CurCenterList] = ParentX; + ListWidthPix[idx] = totpix - ParentX; // reset the widths of the right and center windows + } + + MoveLists(); + } +} + +// Convert a string (except for the 0x in a hex number) to uppercase +void upr(char* d) +{ + char *p; + p = d; + while (*p != 0) + { + if (*p == '0' && p[1] == 'x') + p += 2; + else + { + *p = UCtable[(int) *p]; // use the lookup table created by MakeXlatTables + ++p; + } + } +} + +// create EFLAGS display for Status line +void ShowEflags(char *buf) +{ + static const char *EflBName[16] = { + "cf", "pf", "af", "zf", "sf", "tf", "if", "df", "of", "nt", "rf", "vm", "ac", "vif", "vip", "id" + }; + static const int EflBNameLen[16] = { + 2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2 + }; + static const int EflBitVal[16] = { + 1, 4, 0x10, 0x40, 0x80, 0x100, 0x200, 0x400, 0x800, 0x4000, 0x10000, 0x20000, 0x40000, 0x80000, 0x100000, 0x200000 + }; + + Bit32u Efl = (Bit32u) rV[EFL_Rnum]; + int i = 16; + char *cp = buf + 6; + + sprintf(buf,"IOPL=%1u", (Efl & 0x3000) >> 12); + while (--i >= 0) + { + *(cp++)= ' '; + strcpy (cp, EflBName[i]); // copy the name of the bitflag + if ((Efl & EflBitVal[i]) != 0) // if the bit is set, put the name in uppercase + upr(cp); + cp += EflBNameLen[i]; + } +} + +// change the display on the status line if anything has changed +void UpdateStatus() +{ + static bx_bool PrevAtBreak = FALSE; + + if (StatusChange == FALSE) return; // avoid sending unnecessary messages/invalidations + StatusChange = FALSE; + + if (AtBreak != FALSE) // modify status line only during a break + { + char eflags_buf[80]; + ShowEflags(eflags_buf); // prints out eflags + SetStatusText(3, eflags_buf); // display eflags + + if (CpuModeChange != FALSE) // Did CR0 bits or EFER bits change value? + { + CpuModeChange = FALSE; + char mode[32]; + switch (CpuMode) { + case BX_MODE_IA32_REAL: + if (In32Mode == FALSE) + strcpy (mode, "CPU: Real Mode (16)"); + else + strcpy (mode, "CPU: Real Mode (32)"); + break; + case BX_MODE_IA32_V8086: + strcpy (mode, "CPU: V8086 Mode"); + break; + case BX_MODE_IA32_PROTECTED: + if (In32Mode == FALSE) { + if (InPaging != 0) + strcpy (mode, "CPU: PMode (16) (PG)"); + else + strcpy (mode, "CPU: PMode (16)"); + } + else { + if (InPaging != 0) + strcpy (mode, "CPU: PMode (32) (PG)"); + else + strcpy (mode, "CPU: PMode (32)"); + } + break; + case BX_MODE_LONG_COMPAT: + strcpy (mode, "CPU: Compatibility Mode"); + break; + case BX_MODE_LONG_64: + strcpy (mode, "CPU: Long Mode"); + break; + } + SetStatusText(1, mode); // display CPU mode in status col#1 + } + } + + if (AtBreak != PrevAtBreak) + // switch window color ("active"=white or gray), depending on AtBreak value + MakeListsGray(); + PrevAtBreak = AtBreak; +} + +// Read a copy of some emulated linear bochs memory +// Note: laddr + len must not cross a 4K boundary -- otherwise, there are no limits +bx_bool ReadBxLMem(Bit64u laddr, unsigned len, Bit8u *buf) +{ + return bx_dbg_read_linear(CurrentCPU, laddr, len, buf); +} + +// binary conversion (and validity testing) on hex/decimal char string inputs +Bit64u cvthex(char *p, Bit64u errval) +{ + Bit64u ret = 0; + bx_bool end = FALSE; + while (end == FALSE) + { + if (*p >= '0' && *p <= '9') // test for digits + ret = (ret << 4) | (*(p++) - '0'); + else if ((*p | 0x20) >= 'a' && (*p | 0x20) <= 'f') // test for hex letters + ret = (ret << 4) | ((*(p++) | 0x20) - 'a' + 10); // 0xA = 10, of course + else + end = TRUE; + } + if (*p != 0 && *p != ' ' && *p != '\t') // hex must end on a whitespace + return errval; + return ret; +} + +Bit64u cvt64(char *nstr, bx_bool negok) +{ + char *p, *s; + Bit64u ret = 0; + bx_bool neg = FALSE; + p= nstr; + while (*p==' ' || *p == '\t') + ++p; + if (*p == '-' && negok != FALSE) + { + ++p; + neg = TRUE; + } + if (*p == '0' && (p[1] | 0x20) == 'x' && neg == FALSE) + return cvthex (p+2, 0); + s = p; + while (*p >= '0' && *p <= '9') + ret = (ret * 10) + *(p++) - '0'; + if ((*p | 0x20) >= 'a' && (*p | 0x20) <= 'f' && neg == FALSE) + return cvthex (s, ret); + if (neg != FALSE) + return 0 - ret; + return ret; +} + +// "singlestep" disassembly lines from the internal debugger are sometimes ignored +bx_bool isSSDisasm(char *s) +{ + if (ignSSDisasm == FALSE) // ignoring those lines? + return FALSE; + + while (*s == ' ') // need to parse the line to see if it is ASM + ++s; + if (*s != '(') // first char must be ( + return FALSE; + while (*s != '[' && *s != 0) // then there must be a [ + ++s; + if (*s == 0) + return FALSE; + while (*s != 0 && (*s != ')' || s[1] != ':' || s[2] != ' ')) + ++s; + if (*s == 0) + return FALSE; + while (*s != ';' && *s != 0) // last, there must be a ; + ++s; + if (*s == 0) + return FALSE; + return TRUE; +} + +// dump output from the bochs internal debugger to Output window +// Note: this routine may be called *DIRECTLY* from bochs! +void ParseIDText(const char *x) +{ + int i = 0; + int overflow = 0; + while (*x !=0 && *x != '\r' && *x != '\n' && DbgAppendPtr < tmpcb) + *(DbgAppendPtr++)= *(x++); // append the chars from x into the bigbuf + if (DbgAppendPtr >= tmpcb) // overflow error? + { + DispMessage("Debugger output cannot be parsed -- line too long","Buffer overflow"); + DbgAppendPtr = bigbuf; // throw away the line + return; + } + + *DbgAppendPtr = 0; + if (*x == 0) // automatically process only complete lines further + { + PO_Tdelay = 2; // wait a half second, then force display of partial lines + return; + } + PO_Tdelay = 0; // line completed -- cancel any partial output time delay + + // restart DbgAppendPtr at the beginning of a new line buffer + char *s = DbgAppendPtr = bigbuf; // s -> raw text line from debugger + if (ignoreNxtT != FALSE) + { + if (strncmp(s,"Next at t",9) == 0) + return; + } + if (isSSDisasm(s) != FALSE) + return; + + while ((*s >= ' ' || *s == '\t') && i < 204) // scan out to eol, count chars + { + ++i; + ++s; + } + if (i > 203) // max out at 203 chars per line (should never happen) + { + i = 200; + overflow = 3; + } + char *p = OutWindow; + if ((i+overflow+2+useCR) > OutWinCnt) // amt needed vs. space available + { + s = OutWindow; // need to toss lines off beginning of OutWindow + int j = OutWinCnt - overflow - 2 - useCR; + while (j < i) // throw away one line at a time + { + // stop on any unprintable char < ' ' + while ((unsigned char)*s >= ' ' || *s == '\t') + { + ++s; + ++j; // increase available space as chars are tossed + } + // in reality, s must be pointing at an EOL + s += 1 + useCR; + j += 1 + useCR; + } + OutWinCnt = j + overflow + 2 + useCR; + j = OutWinSIZE - OutWinCnt; // chars to copy, without the terminal zero + while (j-- > 0) // recopy the OutWindow buffer up + *(p++) = *(s++); + } + else + p = OutWindow + OutWinSIZE - OutWinCnt; + OutWinCnt -= i + overflow + 1 + useCR; + if (useCR != 0) + *(p++) = '\r'; // end of buf only had a 0 in it, + *(p++) = '\n'; // and needs an EOL to display properly + s = bigbuf; + while (i-- > 0) // copy the new output line onto the buffer + *(p++) = *(s++); + if (overflow != 0) + { + *(p++) = '.'; // just for fun, if the line overflows + *(p++) = '.'; + *(p++) = '.'; + } + *p = 0; + SetOutWinTxt(); // OS specific routine to replace Output window's text +} + +// load appropriate register values from simulation into local rV[] array +void FillRegs() +{ + int i = EFER_Rnum + 1; // EFER is the highest reg # in rV + while (--i >= 0) + { + if (RegObject[CurrentCPU][i] != NULL) + rV[i] = RegObject[CurrentCPU][i]->get64(); + } +#if BX_SUPPORT_X86_64 == 0 + // copy RIP, RSP from EIP, ESP -- so LAs for both are always easily available + rV[RIP_Rnum] = rV[EIP_Rnum]; + rV[RSP_Rnum] = rV[ESP_Rnum]; +#else + // copy the lower dwords of RAX - RIP to EAX - EIP (with 32bit truncation) + i = RIP_Rnum + 1; + while (--i >= 0) + rV[i + (EAX_Rnum - RAX_Rnum)] = GET32L(rV[i]); +#endif + if (RegObject[CurrentCPU][GDTR_Lim] != NULL) // get the limits on GDT and IDT + GDT_Len = RegObject[CurrentCPU][GDTR_Lim]->get(); + if (RegObject[CurrentCPU][IDTR_Lim] != NULL) + IDT_Len = RegObject[CurrentCPU][IDTR_Lim]->get(); + + // Check CR0 bit 31 -- Paging bit + Bit32u NewPg = (Bit32u) rV[CR0_Rnum] & 0x80000000; + if (InPaging != NewPg) + { + GrayMenuItem ((int) NewPg, CMD_PAGEV); + StatusChange = TRUE; + } + InPaging = NewPg; +} + +// grab linear breakpoints out of internal debugger's bx_guard structures, and sort them +void ParseBkpt() +{ + extern bx_guard_t bx_guard; + int k; + int j = 0; + int i = bx_guard.iaddr.num_linear; + while (--i >= 0) + { + if (bx_guard.iaddr.lin[i].enabled != FALSE) + { + BrkLAddr[j] = bx_guard.iaddr.lin[i].addr; + BrkIdx[j] = bx_guard.iaddr.lin[i].bpoint_id; + ++j; + } + } + BreakCount = i = j; + // sort the breakpoint list (linear sort), to make it faster to search + while (--i > 0) + { + j = k = i; + while (--j >= 0) + { + if (BrkLAddr[j] > BrkLAddr[k]) // find the next biggest + k = j; + } + if (k < i) + { + bx_address h = BrkLAddr[i]; // do the swap on BOTH arrays + j = BrkIdx[i]; + BrkLAddr[i] = BrkLAddr[k]; + BrkIdx[i] = BrkIdx[k]; + BrkLAddr[k] = h; + BrkIdx[k] = j; + } + } +} + +// this routine is only called if debugger already knows SSE is supported +// -- but it might not be "turned on", either +int FillSSE(int LineCount) +{ +#if BX_CPU_LEVEL >= 6 + if (! CpuSupportSSE) + return (LineCount); + + Bit64u val = 0; + bx_param_num_c *p; + char *cols[3]; + char ssetxt[80]; + int i; + + if ((rV[CR0_Rnum] & 0xc) != 0) // TS or EM flags in CR0 temporarily disable SSE + { + cols[0] = ssetxt; + strcpy (ssetxt, "SSE-off"); + InsertListRow(cols, 1, REG_WND, LineCount, 4); + RitemToRnum[LineCount] = XMM0_Rnum; + return ++LineCount; + } + +// format: XMM[#] 00000000:00000000 (each 16 hex digits) + *ssetxt = 0; + cols[1] = ssetxt; // column 1 is being left blank + cols[0] = ssetxt + 1; + cols[2] = ssetxt + 10; + strcpy (ssetxt+1, "XMM[0]"); + ssetxt[10] = '0'; // I'm putting a hex value in the decimal column -- more room there! + ssetxt[11] = 'x'; + strcpy (ssetxt + 28, " : "); + for (i = 0; i < BX_XMM_REGISTERS; i++) + { + if (i >= 10) + { + ssetxt[5] = '1'; + ssetxt[6] = i - 10 + '0'; + ssetxt[7] = ']'; + ssetxt[8] = 0; + } + else + ssetxt[5] = i + '0'; + + RitemToRnum[LineCount] = i + XMM0_Rnum; + p = RegObject[CurrentCPU][XMM0_hi + i]; + if (p != NULL) + val = p->get64(); // get the value of "xmm(i)_hi" register + else + val = 0; + sprintf (ssetxt + 12,Fmt64b[UprCase],val); + p = RegObject[CurrentCPU][XMM0_Rnum + i]; + if (p != NULL) + val = p->get64(); // "SSE.xmm[i]_lo" + else + val = 0; + sprintf (ssetxt + 31,Fmt64b[UprCase], val); + InsertListRow(cols, 3, REG_WND, LineCount, 4); // 3 cols, group 4 + ++LineCount; + } +#endif + return (LineCount); +} + +// this routine is only called if debugger already knows FPU is supported +// -- but it might not be active +int FillMMX(int LineCount) +{ + static double scale_factor = pow(2.0, -63.0); + int i; + Bit16u exp = 0; + Bit64u mmreg = 0; + bx_param_num_c *p; + unsigned short exponent[8]; + char *cols[3]; + char fputxt[60]; + + cols[0] = fputxt; + if ((rV[CR0_Rnum] & 0xc) != 0) // TS or EM flags in CR0 temporarily disable MMX/FPU/SSE + { + strcpy (fputxt, "FPU-off"); + InsertListRow(cols, 1, REG_WND, LineCount, 3); + RitemToRnum[LineCount] = ST0_Rnum; + return ++LineCount; + } + +// format: MM#|ST# 00000000:00000000 then FPU float value in "decimal" column + cols[1] = fputxt + 10; + cols[2] = fputxt + 32; + strcpy (fputxt, "MM0-ST0"); + strcpy (fputxt + 18, " : "); + i = 7; + for (i = 0; i < 8; i++) + { + fputxt[2] = i + '0'; + fputxt[6] = i + '0'; + RitemToRnum[LineCount] = i + ST0_Rnum; + p = RegObject[CurrentCPU][ST0_Rnum + i]; + if (p != NULL) + mmreg = p->get64(); // get the value of "mmx(i)" register + else + mmreg = 0; + sprintf (fputxt + 10,Fmt32b[UprCase],GET32H(mmreg)); + sprintf (fputxt + 21,Fmt32b[UprCase], GET32L(mmreg)); + + p = RegObject[CurrentCPU][ST0_exp + i]; + if (p != NULL) + exp = (Bit16u) p->get64(); // get the exponent for this FPU register + else + exp = 0; + exponent[i] = exp; // save each one temporarily + double f = pow(2.0, ((0x7fff & exp) - 0x3fff)); + if (exp & 0x8000) + f = -f; +#ifdef _MSC_VER + f *= (double)(signed __int64)(mmreg>>1) * scale_factor * 2; +#else + f *= mmreg*scale_factor; +#endif + sprintf (cols[2],"%.3e",f); + InsertListRow(cols, 3, REG_WND, LineCount, 3); // 3 cols, group 3 + ++LineCount; + } + strcpy (fputxt, "ST0.exp"); + for (i = 0; i < 8; i++) + { + fputxt[2] = i + '0'; + RitemToRnum[LineCount] = i + ST0_exp; + sprintf (fputxt+10,Fmt16b[UprCase], exponent[i]); // col1 + sprintf (fputxt+32,"%u", exponent[i]); // col2 + InsertListRow(cols, 3, REG_WND, LineCount, 3); // 3 cols, group 3 + ++LineCount; + } + return LineCount; +} + +// get values of Debug registers from simulation +int FillDebugRegs(int itemnum) +{ + bx_param_num_c *bxp; + Bit32u val; + unsigned int i; + char *cols[2]; + char drtxt[20]; + + strcpy (drtxt,"dr0"); + if (UprCase != FALSE) + { + *drtxt = 'D'; + drtxt[1] = 'R'; + } + cols[0] = drtxt; + cols[1] = drtxt + 4; + + for(i = 0; i < 6; i++) + { + bxp = RegObject[CurrentCPU][DR0_Rnum + i]; + val = 0; + if (bxp != NULL) + val = bxp->get(); + RitemToRnum[itemnum] = i + DR0_Rnum; + sprintf(drtxt + 4,Fmt32b[UprCase],val); + + InsertListRow(cols, 2, REG_WND, itemnum, 5); // 3 cols, group 5 + ++drtxt[2]; // change the name, the cheap way + if (i == 3) drtxt[2] += 2; // jump from "DR3" to "DR6" + ++itemnum; + } + return itemnum; +} + +#define BX_GUI_DB_ASM_DATA (4400) + +// Disassemble a linear memory area, in a loop, loading text into ASM window +// completely update the ASM display with new data +void FillAsm(Bit64u LAddr, int MaxLines) +{ + Bit64u ReadAddr = LAddr; + int BufLen = 0; + int i, len; + bx_bool BufEmpty; + bx_bool Go = TRUE; + char AsmData[BX_GUI_DB_ASM_DATA]; // 5K for binary disassembly data + char *s, *p = AsmData; // just to avoid a compiler warning + char *cols[3]; + char asmtxt[200]; + + cols[0] = asmtxt; + cols[1] = asmtxt + 36; + cols[2] = asmtxt + 100; + AsmLineCount = 0; // initialize for disasm window update + StartListUpdate(ASM_WND); + if (MaxLines > MAX_ASM) // just for protection + MaxLines = MAX_ASM; + + while (Go != FALSE) + { + // copydown buffer -- buffer size must be 4K + 16 + s= AsmData; + i= BufLen; // BufLen is guaranteed < 16 + while (i-- > 0) + *(s++)= *(p++); + // load buffer, up to the next 4k boundary + len = 4096 - (((int) ReadAddr) & 0xfff); // calculate read amount + Go = ReadBxLMem(ReadAddr, len, (Bit8u *) s); + BufLen += len; + ReadAddr += len; + if (Go == FALSE) + break; + BufEmpty = FALSE; + p= AsmData; // start at the beginning of the new buffer + while (AsmLineCount < MaxLines && BufEmpty == FALSE) + { + // disassemble 1 line with a direct call, into asmtxt + len = bx_disassemble.disasm(In32Mode, In64Mode, (bx_address) 0, + (bx_address) LAddr, (Bit8u *) p, cols[2]); + if (len <= BufLen) // disassembly was successful? + { + AsmLA[AsmLineCount] = LAddr; // save, and + if (In64Mode == FALSE) // "display" linear addy of the opcode + sprintf (asmtxt,Fmt32b[UprCase],LAddr); + else + sprintf (asmtxt,Fmt64b[UprCase],LAddr); + + BufLen -= len; // used up len bytes from buffer + LAddr += len; // calculate next LAddr + + // then build the "bytes" column entry + s = cols[1]; + *(s++) = '('; // begin with the bytecount in parens + i = len; + if (len > 9) + { + *(s++)= '1'; // len < 16, so convert to decimal the easy way + i -= 10; + } + *(s++) = i + '0'; + *(s++) = ')'; + *(s++) = ' '; + while (len-- > 0) + { + i = (unsigned char) *(p++); + *(s++) = AsciiHex[2*i]; + *(s++) = AsciiHex[2*i+1]; + } + *s = 0; // zero terminate the "bytes" string + + // then, finalize the ASM disassembly text + if (UprCase != FALSE) // do any requested uppercase conversion on the text + upr(cols[2]); + InsertListRow(cols, 3, ASM_WND, AsmLineCount, 8); // 3 cols, "no" group + ++AsmLineCount; + } + else + BufEmpty = TRUE; + } + if (AsmLineCount >= MaxLines) // disassembled enough lines? + Go = FALSE; + } + if (ResizeColmns != FALSE) + RedrawColumns(ASM_WND); + EndListUpdate(ASM_WND); +} + + +// Reload the entire Register window with data +void LoadRegList() +{ + int i, itemnum; // TODO: This routine needs a big rewrite to make it pretty + bx_bool showEreg = TRUE; + char *cols[3]; + char regtxt[100]; + StartListUpdate(REG_WND); + FillRegs(); // get new values for rV local register array + +// Display GP registers -- 64 bit registers first, if they exist + cols[1] = regtxt; + cols[2] = regtxt + 40; + itemnum = 0; + if (In64Mode != FALSE) + { + showEreg = SeeReg[0]; // get user option setting for EAX, etc. + for (i = RAX_Rnum; i <= R15_Rnum; i++) + { + RitemToRnum[itemnum] = i; // always recreate the register -> itemnum mapping + sprintf(regtxt,Fmt64b[UprCase], rV[i]); // print the hex column + sprintf(cols[2], FMT_LL "d", rV[i]); // and decimal + cols[0] = RDispName[i]; + InsertListRow(cols, 3, REG_WND, itemnum, 0); // 3 cols, group 0 + ++itemnum; + } + } + + // then 32bit GP registers (if appropriate) + if (showEreg != FALSE) + { + for (i = EAX_Rnum; i <= EIP_Rnum; i++) + { + RitemToRnum[itemnum] = i; + sprintf(regtxt, Fmt32b[UprCase], (Bit32u)rV[i]); // print the hex column + sprintf(cols[2], FMT_LL "d", rV[i]); // and decimal + cols[0] = RDispName[i]; + + if (In32Mode == FALSE && i == 26) // Check for Real Mode (Pmode is TRUE in Long Mode) + { + rV[EIP_Rnum] &= 0xffff; // in Real Mode, mask IP to 2 bytes + ++cols[0]; // and shorten name to 2 letters + } + InsertListRow(cols, 3, REG_WND, itemnum, 0); // 3 cols, group 0 + ++itemnum; + } + } + // always insert eflags next + RitemToRnum[itemnum] = EFL_Rnum; + sprintf(regtxt,Fmt32b[UprCase],(Bit32u)rV[EFL_Rnum]); // print the hex column + cols[0] = RDispName[EFL_Rnum]; + InsertListRow(cols, 2, REG_WND, itemnum, 0); // 2 cols, group 0 + ++itemnum; + + if (rV[EFL_Rnum] != PV[EFL_Rnum]) + StatusChange = TRUE; // if eflags changed, force a status update + + // display Segment registers (if requested) + if (SeeReg[1]) + { + for(i = CS_Rnum; i <= GS_Rnum; i++) // segment registers + { + RitemToRnum[itemnum] = i; + sprintf(regtxt, Fmt16b[UprCase], rV[i] & 0xffff); + cols[0] = RDispName[i]; + InsertListRow(cols, 2, REG_WND, itemnum, 1); // 2 cols, group 1 + ++itemnum; + } + } + // display System regsiters (if requested) + // displaying these once may be necessary for column resizing + if (SeeReg[2] || (ResizeColmns != FALSE && NeedSysRresize != FALSE)) + { + int j = TRRnum; + if (In32Mode == FALSE) // don't show lgdt or tr in Real mode + j= IDTRnum; + for(i = GDTRnum; i <= j; i++) + { + RitemToRnum[itemnum] = i; + if (i == GDTRnum || i == IDTRnum) + { + Bit16u limit = GDT_Len; + if (i == IDTRnum) + limit = IDT_Len; + if (In64Mode == FALSE) + sprintf(regtxt,xDT32Fmt[UprCase],(Bit32u)rV[i],limit); + else + sprintf(regtxt,xDT64Fmt[UprCase],rV[i],limit); + + } + else + sprintf(regtxt,Fmt16b[UprCase], rV[i] & 0xffff); // lgdt, tr + + cols[0] = RDispName[i]; + InsertListRow(cols, 2, REG_WND, itemnum, 1); // 2 cols, group 1 + ++itemnum; + } + } + // display Control Registers (if requested) + if (SeeReg[3]) + { + for(i = CR0_Rnum; i <= EFER_Rnum; i++) + { + RitemToRnum[itemnum] = i; + sprintf(regtxt,"%08X",(Bit32u)rV[i]); + cols[0] = RDispName[i]; + InsertListRow(cols, 2, REG_WND, itemnum, 2); // 2 cols, group 2 + ++itemnum; + } + } + + // set the register background colors for rV + i = EFER_Rnum + 1; // total number of registers stored in rV + while (--i >= 0) + { + if (rV[i] != PV[i]) // set the "red" flag if value changed + RegColor[i] |= 0x80; + else + RegColor[i] &= 0x7f; + } +// Load any optional STi, MMX, SSE, DRx, TRx register info into the Register window +#if BX_SUPPORT_FPU + // MMX-FPU registers + if (SeeReg[4] != FALSE) + itemnum = FillMMX(itemnum); +#endif + + // SSE registers + if (CpuSupportSSE && SeeReg[5] != FALSE) + itemnum = FillSSE(itemnum); + + // Internal x86 Debug Registers + if (SeeReg[6] != FALSE) + itemnum = FillDebugRegs(itemnum); + +// if (SeeReg[7] != FALSE) // Test registers are not supported yet in bochs +// FillTRXRegs(itemnum); + + RedrawColumns(REG_WND); // resize Hex Value column sometimes + EndListUpdate(REG_WND); +} + +// scroll ASM window so that the current line is in the "middle" +void doAsmScroll() +{ + int j; + int CurTopIdx = GetASMTopIdx(); + int nli = -2; + // Can the current line be displayed at all? + if (CurrentAsmLA < *AsmLA || CurrentAsmLA > AsmLA[AsmLineCount-1]) + return; + // convert from LA to a Line Index (nli) with a search + j = CurTopIdx; // try to start at CurTopIdx + if (AsmLA[j] > CurrentAsmLA) + j = 0; + while (nli < 0 && j < AsmLineCount && AsmLA[j] <= CurrentAsmLA) + { + if (AsmLA[j] == CurrentAsmLA) + nli = j; + ++j; + } + // not found -> CurrentAsmLA is an illegal opcode address + if (nli < 0) + return; + // is the current line ALREADY in the middle of the window? + if (nli < CurTopIdx || nli >= CurTopIdx + AsmPgSize - bottommargin) + { + // need to scroll! + int ScrollLines = nli - CurTopIdx - topmargin; + j = AsmLineCount - CurTopIdx - AsmPgSize; + // limit ScrollLines by the theoretical max and min + if (ScrollLines > j) + ScrollLines = j + 1; // just a little extra to make sure + if (ScrollLines < -CurTopIdx) + ScrollLines = -CurTopIdx - 1; // just a little extra to make sure + // convert # of scroll lines to pixels + ScrollASM (ScrollLines * ListLineRatio); + } + Invalidate(ASM_WND); // "current opcode" in ASM window needs redrawing +} + +// try to find a Linear Address to start a "pretty" autodisassembly +void CanDoLA(Bit64u *h) +{ + int index; + if (TopAsmLA > *h || *h > AsmLA[AsmLineCount-1]) // is it hopeless? + return; + if (bottommargin > AsmLineCount) + index = 0; + else + index = AsmLineCount - bottommargin; + while (++index < AsmLineCount) + { + if (AsmLA[index] == *h) + { + *h = AsmLA[index - topmargin]; + return; + } + } +} + +void InitRegObjects() +{ + bx_list_c *cpu_list; + extern bx_list_c *root_param; + int cpu = BX_SMP_PROCESSORS; + // get the param tree interface objects for every single register on all CPUs + while (--cpu >= 0) + { + // RegObject[j]s are all initialized to NULL when allocated in the BSS area + // but it doesn't hurt anything to do it again, once + int i = TOT_REG_NUM + EXTRA_REGS; + while (--i >= 0) + RegObject[cpu][i] = (bx_param_num_c *) NULL; + + char pname[16]; + sprintf (pname,"bochs.cpu%d", cpu); // set the "cpu number" for cpu_list + cpu_list = (bx_list_c *) SIM->get_param(pname, root_param); + + // TODO: in the next version, put all the names in an array, and loop + // -- but that method is not compatible with bochs 2.3.7 or earlier +#if BX_SUPPORT_X86_64 == 0 + RegObject[cpu][EAX_Rnum] = SIM->get_param_num("EAX", cpu_list); + RegObject[cpu][EBX_Rnum] = SIM->get_param_num("EBX", cpu_list); + RegObject[cpu][ECX_Rnum] = SIM->get_param_num("ECX", cpu_list); + RegObject[cpu][EDX_Rnum] = SIM->get_param_num("EDX", cpu_list); + RegObject[cpu][ESI_Rnum] = SIM->get_param_num("ESI", cpu_list); + RegObject[cpu][EDI_Rnum] = SIM->get_param_num("EDI", cpu_list); + RegObject[cpu][EBP_Rnum] = SIM->get_param_num("EBP", cpu_list); + RegObject[cpu][ESP_Rnum] = SIM->get_param_num("ESP", cpu_list); + RegObject[cpu][EIP_Rnum] = SIM->get_param_num("EIP", cpu_list); +#else + RegObject[cpu][RAX_Rnum] = SIM->get_param_num("RAX", cpu_list); + RegObject[cpu][RBX_Rnum] = SIM->get_param_num("RBX", cpu_list); + RegObject[cpu][RCX_Rnum] = SIM->get_param_num("RCX", cpu_list); + RegObject[cpu][RDX_Rnum] = SIM->get_param_num("RDX", cpu_list); + RegObject[cpu][RSI_Rnum] = SIM->get_param_num("RSI", cpu_list); + RegObject[cpu][RDI_Rnum] = SIM->get_param_num("RDI", cpu_list); + RegObject[cpu][RBP_Rnum] = SIM->get_param_num("RBP", cpu_list); + RegObject[cpu][RSP_Rnum] = SIM->get_param_num("RSP", cpu_list); + RegObject[cpu][RIP_Rnum] = SIM->get_param_num("RIP", cpu_list); + RegObject[cpu][R8_Rnum] = SIM->get_param_num("R8", cpu_list); + RegObject[cpu][R9_Rnum] = SIM->get_param_num("R9", cpu_list); + RegObject[cpu][R10_Rnum] = SIM->get_param_num("R10", cpu_list); + RegObject[cpu][R11_Rnum] = SIM->get_param_num("R11", cpu_list); + RegObject[cpu][R12_Rnum] = SIM->get_param_num("R12", cpu_list); + RegObject[cpu][R13_Rnum] = SIM->get_param_num("R13", cpu_list); + RegObject[cpu][R14_Rnum] = SIM->get_param_num("R14", cpu_list); + RegObject[cpu][R15_Rnum] = SIM->get_param_num("R15", cpu_list); +#endif + RegObject[cpu][EFL_Rnum] = SIM->get_param_num("EFLAGS", cpu_list); + RegObject[cpu][CS_Rnum] = SIM->get_param_num("CS.selector", cpu_list); + RegObject[cpu][DS_Rnum] = SIM->get_param_num("DS.selector", cpu_list); + RegObject[cpu][ES_Rnum] = SIM->get_param_num("ES.selector", cpu_list); + RegObject[cpu][SS_Rnum] = SIM->get_param_num("SS.selector", cpu_list); + RegObject[cpu][FS_Rnum] = SIM->get_param_num("FS.selector", cpu_list); + RegObject[cpu][GS_Rnum] = SIM->get_param_num("GS.selector", cpu_list); + RegObject[cpu][GDTRnum] = SIM->get_param_num("GDTR.base", cpu_list); + RegObject[cpu][GDTR_Lim] = SIM->get_param_num("GDTR.limit", cpu_list); + RegObject[cpu][IDTRnum] = SIM->get_param_num("IDTR.base", cpu_list); + RegObject[cpu][IDTR_Lim] = SIM->get_param_num("IDTR.limit", cpu_list); + RegObject[cpu][LDTRnum] = SIM->get_param_num("LDTR.base", cpu_list); + RegObject[cpu][TRRnum] = SIM->get_param_num("TR.base", cpu_list); + RegObject[cpu][CR0_Rnum] = SIM->get_param_num("CR0", cpu_list); + RegObject[cpu][CR2_Rnum] = SIM->get_param_num("CR2", cpu_list); + RegObject[cpu][CR3_Rnum] = SIM->get_param_num("CR3", cpu_list); +#if BX_CPU_LEVEL >= 4 + RegObject[cpu][CR4_Rnum] = SIM->get_param_num("CR4", cpu_list); +#endif +#if BX_SUPPORT_X86_64 + RegObject[cpu][EFER_Rnum] = SIM->get_param_num("MSR.EFER", cpu_list); +#endif +#if BX_SUPPORT_FPU + RegObject[cpu][ST0_Rnum] = SIM->get_param_num("FPU.st0.fraction", cpu_list); + RegObject[cpu][ST1_Rnum] = SIM->get_param_num("FPU.st1.fraction", cpu_list); + RegObject[cpu][ST2_Rnum] = SIM->get_param_num("FPU.st2.fraction", cpu_list); + RegObject[cpu][ST3_Rnum] = SIM->get_param_num("FPU.st3.fraction", cpu_list); + RegObject[cpu][ST4_Rnum] = SIM->get_param_num("FPU.st4.fraction", cpu_list); + RegObject[cpu][ST5_Rnum] = SIM->get_param_num("FPU.st5.fraction", cpu_list); + RegObject[cpu][ST6_Rnum] = SIM->get_param_num("FPU.st6.fraction", cpu_list); + RegObject[cpu][ST7_Rnum] = SIM->get_param_num("FPU.st7.fraction", cpu_list); + RegObject[cpu][ST0_exp] = SIM->get_param_num("FPU.st0.exp", cpu_list); + RegObject[cpu][ST1_exp] = SIM->get_param_num("FPU.st1.exp", cpu_list); + RegObject[cpu][ST2_exp] = SIM->get_param_num("FPU.st2.exp", cpu_list); + RegObject[cpu][ST3_exp] = SIM->get_param_num("FPU.st3.exp", cpu_list); + RegObject[cpu][ST4_exp] = SIM->get_param_num("FPU.st4.exp", cpu_list); + RegObject[cpu][ST5_exp] = SIM->get_param_num("FPU.st5.exp", cpu_list); + RegObject[cpu][ST6_exp] = SIM->get_param_num("FPU.st6.exp", cpu_list); + RegObject[cpu][ST7_exp] = SIM->get_param_num("FPU.st7.exp", cpu_list); +#endif + +#if BX_CPU_LEVEL >= 6 + if (! CpuSupportSSE) { + RegObject[cpu][XMM0_Rnum] = SIM->get_param_num("SSE.xmm00_0", cpu_list); + RegObject[cpu][XMM1_Rnum] = SIM->get_param_num("SSE.xmm01_0", cpu_list); + RegObject[cpu][XMM2_Rnum] = SIM->get_param_num("SSE.xmm02_0", cpu_list); + RegObject[cpu][XMM3_Rnum] = SIM->get_param_num("SSE.xmm03_0", cpu_list); + RegObject[cpu][XMM4_Rnum] = SIM->get_param_num("SSE.xmm04_0", cpu_list); + RegObject[cpu][XMM5_Rnum] = SIM->get_param_num("SSE.xmm05_0", cpu_list); + RegObject[cpu][XMM6_Rnum] = SIM->get_param_num("SSE.xmm06_0", cpu_list); + RegObject[cpu][XMM7_Rnum] = SIM->get_param_num("SSE.xmm07_0", cpu_list); + RegObject[cpu][XMM0_hi] = SIM->get_param_num("SSE.xmm00_1", cpu_list); + RegObject[cpu][XMM1_hi] = SIM->get_param_num("SSE.xmm01_1", cpu_list); + RegObject[cpu][XMM2_hi] = SIM->get_param_num("SSE.xmm02_1", cpu_list); + RegObject[cpu][XMM3_hi] = SIM->get_param_num("SSE.xmm03_1", cpu_list); + RegObject[cpu][XMM4_hi] = SIM->get_param_num("SSE.xmm04_1", cpu_list); + RegObject[cpu][XMM5_hi] = SIM->get_param_num("SSE.xmm05_1", cpu_list); + RegObject[cpu][XMM6_hi] = SIM->get_param_num("SSE.xmm06_1", cpu_list); + RegObject[cpu][XMM7_hi] = SIM->get_param_num("SSE.xmm07_1", cpu_list); + +#if BX_SUPPORT_X86_64 + RegObject[cpu][XMM8_Rnum] = SIM->get_param_num("SSE.xmm08_0", cpu_list); + RegObject[cpu][XMM9_Rnum] = SIM->get_param_num("SSE.xmm09_0", cpu_list); + RegObject[cpu][XMMA_Rnum] = SIM->get_param_num("SSE.xmm10_0", cpu_list); + RegObject[cpu][XMMB_Rnum] = SIM->get_param_num("SSE.xmm11_0", cpu_list); + RegObject[cpu][XMMC_Rnum] = SIM->get_param_num("SSE.xmm12_0", cpu_list); + RegObject[cpu][XMMD_Rnum] = SIM->get_param_num("SSE.xmm13_0", cpu_list); + RegObject[cpu][XMME_Rnum] = SIM->get_param_num("SSE.xmm14_0", cpu_list); + RegObject[cpu][XMMF_Rnum] = SIM->get_param_num("SSE.xmm15_0", cpu_list); + RegObject[cpu][XMM8_hi] = SIM->get_param_num("SSE.xmm08_1", cpu_list); + RegObject[cpu][XMM9_hi] = SIM->get_param_num("SSE.xmm09_1", cpu_list); + RegObject[cpu][XMMA_hi] = SIM->get_param_num("SSE.xmm00_1", cpu_list); + RegObject[cpu][XMMB_hi] = SIM->get_param_num("SSE.xmm11_1", cpu_list); + RegObject[cpu][XMMC_hi] = SIM->get_param_num("SSE.xmm12_1", cpu_list); + RegObject[cpu][XMMD_hi] = SIM->get_param_num("SSE.xmm13_1", cpu_list); + RegObject[cpu][XMME_hi] = SIM->get_param_num("SSE.xmm14_1", cpu_list); + RegObject[cpu][XMMF_hi] = SIM->get_param_num("SSE.xmm15_1", cpu_list); +#endif + } +#endif + + RegObject[cpu][DR0_Rnum] = SIM->get_param_num("DR0", cpu_list); + RegObject[cpu][DR1_Rnum] = SIM->get_param_num("DR1", cpu_list); + RegObject[cpu][DR2_Rnum] = SIM->get_param_num("DR2", cpu_list); + RegObject[cpu][DR3_Rnum] = SIM->get_param_num("DR3", cpu_list); + RegObject[cpu][DR6_Rnum] = SIM->get_param_num("DR6", cpu_list); + RegObject[cpu][DR7_Rnum] = SIM->get_param_num("DR7", cpu_list); + } +} + + +void doUpdate() +{ + void FillStack(); + if (doOneTimeInit != FALSE) + SpecialInit(); + // begin an autoupdate of Register and Asm windows + LoadRegList(); // build and show ListView + ParseBkpt(); // get the linear breakpoint list + if (DViewMode == VIEW_STACK) // in stack view mode, keep the stack updated + FillStack(); + CurrentAsmLA = BX_CPU(CurrentCPU)->get_laddr(BX_SEG_REG_CS, (bx_address) rV[RIP_Rnum]); + if (CurrentAsmLA < BottomAsmLA || CurrentAsmLA > TopAsmLA) + { + Bit64u h = CurrentAsmLA; + // generate a startLA (= h) that overlaps by topmargin, if possible + CanDoLA(&h); + + FillAsm(h, DefaultAsmLines); + + // Set the scroll position for the new ASM window + BottomAsmLA = *AsmLA; + int j = bottommargin; // try to use this bottom margin on ASM window + if (j > AsmLineCount) + j = AsmLineCount; + TopAsmLA = AsmLA[AsmLineCount - j]; //TopAsmLA is the scroll point + } + else + doAsmScroll(); // ASM window may need to scroll + ResizeColmns = FALSE; // done with reformatting, if it was needed + UpdateStatus(); // Mode and Eflags may have changed status +} + +// Fill the GDT ListView, reading GDT data directly from bochs linear mem +void FillGDT() +{ + unsigned int i, j, GroupId; + unsigned int k = (GDT_Len + 1) / 8; + Bit8u gdtbuf[8]; + char *cols[18]; + char gdttxt[90]; + doDumpRefresh = FALSE; + + Bit64u laddr = rV[GDTRnum]; + StartListUpdate(DUMP_WND); + + *gdttxt = 0; + cols[0]= gdttxt + 1; + cols[1]= gdttxt + 30; + cols[2]= gdttxt + 40; + cols[3]= gdttxt + 80; + cols[4]= gdttxt; // columns #5 to 17 are blank + cols[5]= gdttxt; + cols[6]= gdttxt; + cols[7]= gdttxt; + cols[8]= gdttxt; + cols[9]= gdttxt; + cols[10]= gdttxt; + cols[11]= gdttxt; + cols[12]= gdttxt; + cols[13]= gdttxt; + cols[14]= gdttxt; + cols[15]= gdttxt; + cols[16]= gdttxt; + + for(i = 0; i < k; i++) + { + // read 2 dwords from bochs linear mem into "buffer" + sprintf(cols[0], "%02u (Selector 0x%04X)", i, i << 3); + if (ReadBxLMem(laddr, 8, gdtbuf) == FALSE) // abort the current GDT dump on a memory error + { + cols[1]= gdttxt; // ERROR - blank out cols #2 - 4 for this new row + cols[2]= gdttxt; + cols[3]= gdttxt; + cols[17] = gdttxt + 30; + strcpy (cols[17],"illegal address"); + InsertListRow(cols, 18, DUMP_WND, i, 8); // 18 cols, "no group" + RedrawColumns(DUMP_WND); + EndListUpdate(DUMP_WND); + break; + } + laddr += 8; + + // enforce proper littleendianness on the gdtbuf bytes + Bit32u limit = gdtbuf[0] | ((Bit32u) gdtbuf[1] << 8); + limit |= ((Bit32u)gdtbuf[6] & 0xf) << 16; + if ((gdtbuf[6] & 0x80) != 0) // 'Granularity' bit = 4K limit multiplier + limit = limit * 4096 + 4095; // and the bottom 12 bits aren't tested + + GroupId = 8; // default to "blank" group + cols[17]= (char*)GDTsT[0]; // default info string is blank + j = 8; // default GDT type (group) is blank + if ((gdtbuf[5] & 0x10) == 0) // 'S' bit clear = System segment + { + GroupId = 1; + if (limit == 0 && (gdtbuf[5] & 0x80) == 0) // 'P' (present) bit + GroupId = 0; + // point to the approprate info string for the GDT system segment type + cols[17] = (char*)GDTsT[(int) (gdtbuf[5] & 0xf)]; + } + else // it's an 'executable' code or data segment + { + j = (gdtbuf[6] & 0x60) >> 5; // get the 'L' and 'D/B' bits + if (j == 3) // both bits set is illegal + j = 6; + else if ((gdtbuf[5] & 0x8) == 0) + j += 3; // data seg -> j= 3 to 5, code seg -> j= 0 to 2 + +#ifndef IS_WIN98 + GroupId = j; // use GroupIDs on XP and higher systems +#else + cols[17] = (char*)GDTt2[j]; // otherwise, put descriptive text in "info" column +#endif + } + + // enforce proper littleendianness on the gdtbuf bytes + Bit32u base = gdtbuf[2] | ((Bit32u) gdtbuf[3] << 8); + base |= (Bit32u) gdtbuf[4] << 16; + base |= (Bit32u) gdtbuf[7] << 24; + + if ((gdtbuf[6] & 0x60) == 0x20) // test for longmode segment + { + base = 0; // the base is always 0 in longmode, with "no" limit + sprintf(cols[2],"0xFFFFFFFFFFFFFFFF"); + } + else + sprintf(cols[2],"0x%X",limit); + sprintf(cols[1],"0x%X",base); + sprintf(cols[3],"%u", (gdtbuf[5] & 0x60) >> 5); + + if (i == 0) + cols[17] = (char*)GDTt2[7]; // call "Null" selector "unused" + InsertListRow(cols, 18, DUMP_WND, i, GroupId); // 18 cols + } + + RedrawColumns(DUMP_WND); + EndListUpdate(DUMP_WND); +} + +// Fills the IDT ListView, reading IDT data directly from bochs linear mem +void FillIDT() +{ + Bit64u laddr; + Bit8u idtbuf[16]; + Bit16u sel; + Bit32u ofs; + unsigned entrysize; + unsigned int i; + char *cols[18]; + char idttxt[80]; + unsigned int mode = 0; + if (In32Mode != FALSE) + mode = 1; + if (In64Mode != FALSE) + mode = 2; + doDumpRefresh = FALSE; + + *idttxt = 0; + cols[0]= idttxt + 1; + cols[1]= idttxt; // columns #2 to 17 are blank + cols[2]= idttxt; + cols[3]= idttxt; + cols[4]= idttxt; + cols[5]= idttxt; + cols[6]= idttxt; + cols[7]= idttxt; + cols[8]= idttxt; + cols[9]= idttxt; + cols[10]= idttxt; + cols[11]= idttxt; + cols[12]= idttxt; + cols[13]= idttxt; + cols[14]= idttxt; + cols[15]= idttxt; + cols[16]= idttxt; + cols[17]= idttxt + 10; + entrysize = 4 << mode; // calculate the bytesize of the entries + unsigned int k = (IDT_Len + 1) / entrysize; + StartListUpdate(DUMP_WND); + + // recover the IDT linear base address + laddr = rV[IDTRnum]; + + if (k > 256) // if IDT_Len is unreasonably large, set a reasonable maximum + k = 256; + for(i = 0; i < k; i++) + { + idttxt[1] = AsciiHex[2*i]; + idttxt[2] = AsciiHex[2*i+1]; + idttxt[3] = 0; + if (ReadBxLMem(laddr, entrysize, idtbuf) == FALSE) // abort the current IDT dump on a memory error + { + strcpy (cols[17],"illegal address"); + InsertListRow(cols, 18, DUMP_WND, i, 8); // 18 cols, "no group" + RedrawColumns(DUMP_WND); + EndListUpdate(DUMP_WND); + break; + } + laddr += entrysize; + // enforce proper littleendianness on the idtbuf bytes + ofs = idtbuf[0] | ((Bit32u) idtbuf[1] << 8); + sel = idtbuf[2] | ((Bit16u) idtbuf[3] << 8); + + switch (mode) + { + case 0: // Real Mode + sprintf(cols[17],"0x%04X:0x%04X", sel, ofs); + break; + + case 1: // Pmode + ofs |= ((Bit32u) idtbuf[6] << 16) | ((Bit32u) idtbuf[7] << 24); + sprintf(cols[17],"0x%04X:0x%08X", sel, ofs); + // TODO: also print some flags from idtbuf[5], maybe, in another column + break; + + case 2: // Lmode + Bit64u off64 = (Bit64u)(ofs | ((Bit32u) idtbuf[6] << 16) | ((Bit32u) idtbuf[7] << 24)); + off64 |= ((Bit64u) idtbuf[8] << 32) | ((Bit64u) idtbuf[9] << 40); + off64 |= ((Bit64u) idtbuf[10] << 48) | ((Bit64u) idtbuf[11] << 56); + sprintf(cols[17],"0x%04X:0x" FMT_LLCAPX, sel, off64); + // TODO: also print some flags from idtbuf[5], maybe, in another column + break; + } + + InsertListRow(cols, 18, DUMP_WND, i, 8); // 18 cols, "no group" + } + RedrawColumns(DUMP_WND); + EndListUpdate(DUMP_WND); +} + + +// insert one entry into the Paging data list (a linear and a physical addy) +void AddPagingLine(int LC, char *pa_lin, char *pa_phy) +{ + char zero = 0; + char *cols[18]; + cols[0]= pa_lin; + cols[1]= &zero; // columns #2 to 17 are blank + cols[2]= &zero; + cols[3]= &zero; + cols[4]= &zero; + cols[5]= &zero; + cols[6]= &zero; + cols[7]= &zero; + cols[8]= &zero; + cols[9]= &zero; + cols[10]= &zero; + cols[11]= &zero; + cols[12]= &zero; + cols[13]= &zero; + cols[14]= &zero; + cols[15]= &zero; + cols[16]= &zero; + cols[17]= pa_phy; + InsertListRow(cols, 18, DUMP_WND, LC, 8); // 18 cols, "no group" +} + +// lifted from bx_dbg_dump_table in dbg_main of the internal debugger +void FillPAGE() +{ + Bit32u lin, start_lin, curlin; // show only low 32 bit + bx_phy_address phy; + Bit64u start_phy, phy64; + int LineCount = 0; + char pa_lin[50]; + char pa_phy[50]; + doDumpRefresh = FALSE; + + StartListUpdate(DUMP_WND); + curlin = lin = 0; // always start at linear address 0 + start_lin = 1; // force a mismatch on the first line + start_phy = 2; + while (LineCount < 1024 && curlin != 0xfffff000) + { + // get translation lin -> phys, and verify mapping is legal + if (BX_CPU(CurrentCPU)->dbg_xlate_linear2phy(lin, &phy) != FALSE) + { + phy64 = phy; + if ((lin - start_lin) != (phy64 - start_phy)) + { + if (start_lin != 1) + { + sprintf (pa_lin,"0x%08X - 0x%08X",start_lin, lin - 1); + sprintf (pa_phy,"0x" FMT_LLCAPX " - 0x" FMT_LLCAPX, + start_phy, start_phy + (lin-1-start_lin)); + AddPagingLine (LineCount,pa_lin,pa_phy); + ++LineCount; + } + start_lin = lin; + start_phy = phy64; + } + } + else + { + if (start_lin != 1) + { + sprintf (pa_lin,"0x%08X - 0x%08X",start_lin, lin - 1); + sprintf (pa_phy,"0x" FMT_LLCAPX " - 0x" FMT_LLCAPX, + start_phy, start_phy + (lin-1-start_lin)); + AddPagingLine (LineCount,pa_lin,pa_phy); + ++LineCount; + } + start_lin = 1; + start_phy = 2; + } + curlin = lin; + lin += 0x1000; // then test the next 4K page in the loop + } + if (start_lin != 1) // need to output one last line? + { + sprintf (pa_lin,"0x%08X - 0x%08X", start_lin, -1); + sprintf (pa_phy,"0x" FMT_LLCAPX " - 0x" FMT_LLCAPX,start_phy, start_phy + (lin-1-start_lin)); + AddPagingLine (LineCount,pa_lin,pa_phy); + } + RedrawColumns(DUMP_WND); + EndListUpdate(DUMP_WND); +} + +// build the stack display +void FillStack() +{ + // sometimes need to specially invalidate the stack window + static bx_bool StkInvOnce = FALSE; + Bit64u StackLA, EndLA; + unsigned int len, i, wordsize, overlap; + int j; + bx_bool LglAddy; + bx_bool UpdateDisp; + char *cp, *cpp; + char *cols[18]; + char stktxt[120]; + + *stktxt = 0; + cols[0]= stktxt + 1; + cols[1]= stktxt + 40; + cols[2]= stktxt; // columns #3 to 17 are blank + cols[3]= stktxt; + cols[4]= stktxt; + cols[5]= stktxt; + cols[6]= stktxt; + cols[7]= stktxt; + cols[8]= stktxt; + cols[9]= stktxt; + cols[10]= stktxt; + cols[11]= stktxt; + cols[12]= stktxt; + cols[13]= stktxt; + cols[14]= stktxt; + cols[15]= stktxt; + cols[16]= stktxt; + cols[17]= stktxt + 80; + doDumpRefresh = FALSE; + StackLA = (Bit64u) BX_CPU(CurrentCPU)->get_laddr(BX_SEG_REG_SS, (bx_address) rV[RSP_Rnum]); + + if (PStackLA == 1) // illegal value requests a full refresh + PStackLA = StackLA ^ 0x4000; // force a non-match below (kludge) + + wordsize = 4; // assume Pmode + if (In32Mode == FALSE) + wordsize = 2; + else if (In64Mode != FALSE) + wordsize = 8; + len = STACK_ENTRIES * wordsize; + + // TODO: enforce that cp is wordsize aligned + // also -- enforce that StackLA is wordsize aligned + cp = CurStack; + i = (unsigned) StackLA & 0xfff; // where is stack bottom, in its 4K memory page? + if (i > 0x1000 - len) // does len cross a 4K boundary? + { + unsigned int ReadSize = 0x1000 - i; + // read up to the 4K boundary, then try to read the last chunk + if (ReadBxLMem(StackLA, ReadSize, (Bit8u *) cp) == FALSE) + { + // no data to show -- just one error message + sprintf (cols[17],"illegal address"); + StartListUpdate(DUMP_WND); + InsertListRow(cols, 18, DUMP_WND, 0, 8); // 18 cols, "no group" + EndListUpdate(DUMP_WND); + return; + } + LglAddy = ReadBxLMem(StackLA + ReadSize, len + i - 0x1000, (Bit8u *) cp + ReadSize); + if (LglAddy == FALSE) + len = ReadSize; + } + else + ReadBxLMem(StackLA, len, (Bit8u *) cp); + + UpdateDisp = CpuModeChange; // calculate which stack entries have changed + cp = CurStack; + cpp = PrevStack; + j = overlap = len / wordsize; + while (--j >= 0) + StackEntChg[j] = TRUE; // assume that all lines have changed + if (PStackLA > StackLA) // calculate the overlap between the prev and current stacks + { + EndLA = PStackLA - StackLA; + if (EndLA < len) + { + i = (unsigned int) (EndLA / wordsize); + cp += i * wordsize; + } + else + i = overlap; // force the next loop to exit + } + else + { + EndLA = StackLA - PStackLA; + if (EndLA < len) + { + i = 0; + j = (int) (EndLA / wordsize); + cpp += j * wordsize; + overlap -= j; + } + else + i = overlap; // force the next loop to exit + } + while (i < overlap) + { + j = wordsize; // if the two entries match, cancel the EntryChange flag for that entry + while (j > 0 && *cp == *cpp) + { + --j; + ++cp; + ++cpp; + } + if (j == 0) + StackEntChg[i] = FALSE; // got a match on all bytes + else + { + cp += j; // bump the pointers to the next stack entry + cpp += j; + } + ++i; + } + j = len / wordsize; + while (--j >= 0) + UpdateDisp |= StackEntChg[j]; + if (UpdateDisp == FALSE) // Don't need to update the list? (no changes?) + { + if (StkInvOnce == FALSE) + Invalidate(DUMP_WND); // Invalidate ONCE to turn off all the red stuff + StkInvOnce = TRUE; + return; + } + StartListUpdate(DUMP_WND); + StkInvOnce = FALSE; + PStackLA = StackLA; + cp = CurStack; + cpp = PrevStack; + j = len; + while (--j >= 0) + *(cpp++)= *(cp++); // copy the stack to the Prev buffer + j= STACK_ENTRIES * 8 - len; + while (--j >= 0) + *(cpp++)= 0; // zero out the unused tail end of the prev buffer + cp = CurStack; // the following display loop runs on the cp pointer + + EndLA = StackLA + len - 1; + i = 0; + while (StackLA < EndLA) + { + if (In64Mode == FALSE) + { + int tmp; + sprintf (cols[0],Fmt32b[1],StackLA); + if (In32Mode == FALSE) + tmp = *((Bit16s *) cp); + else + tmp = *((Bit32s *) cp); + sprintf (cols[1],Fmt32b[UprCase],tmp); + sprintf (cols[17],"%d",tmp); + } + else + { + Bit64s tmp = *((Bit64s *) cp); + sprintf (cols[0],Fmt64b[UprCase],StackLA); + sprintf (cols[1],Fmt64b[1],tmp); + sprintf (cols[17], FMT_LL "d",tmp); + } + InsertListRow(cols, 18, DUMP_WND, i, 8); // 18 cols, "no group" + StackLA += wordsize; + cp += wordsize; + ++i; + } + + RedrawColumns(DUMP_WND); + EndListUpdate(DUMP_WND); +} + +// utility function to print breakpoints in a unified way +void prtbrk (Bit32u seg, Bit64u addy, unsigned int id, bx_bool enabled, char *cols[]) +{ + int i = 0; + if (enabled == FALSE) + *cols[1] = 'n'; + else + *cols[1] = 'y'; + sprintf (cols[17],"%u",id); + if (seg <= 0xffff){ + i= 5; + sprintf (cols[0],"%04X:",seg); + } + + sprintf (cols[0] + i,FMT_LLCAPX,addy); +} + +// Displays all Breakpoints and Watchpoints +void FillBrkp() +{ + int LineCount, totqty, i; + char *cols[18]; + char brktxt[60]; + unsigned int brktype; + extern bx_guard_t bx_guard; + + doDumpRefresh = FALSE; + + *brktxt = 0; + brktxt[49] = 0; // 0 terminate the "enabled" string + cols[2]= brktxt; // columns #3 to 17 are blank + cols[3]= brktxt; + cols[4]= brktxt; + cols[5]= brktxt; + cols[6]= brktxt; + cols[7]= brktxt; + cols[8]= brktxt; + cols[9]= brktxt; + cols[10]= brktxt; + cols[11]= brktxt; + cols[12]= brktxt; + cols[13]= brktxt; + cols[14]= brktxt; + cols[15]= brktxt; + cols[16]= brktxt; + StartListUpdate(DUMP_WND); + i = 256; + while (--i >= 0) + BrkpIDMap[i] = 0; + i = 16; + while (--i >= 0) + { + WWP_Snapshot[i] = 0; + RWP_Snapshot[i] = 0; + } + + LineCount = 0; + for (brktype = 0; brktype < 5; brktype++) + { + cols[0]= brktxt; + cols[1]= brktxt; + cols[17]= brktxt; + InsertListRow(cols, 18, DUMP_WND, LineCount++, 8); // make a blank row + cols[0]= (char*)BrkName[brktype]; + InsertListRow(cols, 18, DUMP_WND, LineCount++, 8); // brkpt "type" as only text on row + cols[0]= brktxt + 1; + if (brktype < 3) + { + cols[17]= brktxt + 50; // only breakpoints have IDs + cols[1]= brktxt + 48; // and can be "enabled" + if (brktype == 0) + { +#if (BX_DBG_MAX_LIN_BPOINTS > 0) + totqty = bx_guard.iaddr.num_linear; + for (i = 0; i < totqty; i++) + { + BrkpIDMap[LineCount] = bx_guard.iaddr.lin[i].bpoint_id; + prtbrk (0xf0000, (Bit64u) bx_guard.iaddr.lin[i].addr, + (unsigned) BrkpIDMap[LineCount], + bx_guard.iaddr.lin[i].enabled, cols); + InsertListRow(cols, 18, DUMP_WND, LineCount++, 8); + } +#endif + EndLinEntry = LineCount; + } + else if (brktype == 1) + { +#if (BX_DBG_MAX_PHY_BPOINTS > 0) + totqty = bx_guard.iaddr.num_physical; + for (i = 0; i < totqty; i++) + { + BrkpIDMap[LineCount] = bx_guard.iaddr.phy[i].bpoint_id; + prtbrk (0xf0000, (Bit64u) bx_guard.iaddr.phy[i].addr, + (unsigned) BrkpIDMap[LineCount], + bx_guard.iaddr.phy[i].enabled, cols); + InsertListRow(cols, 18, DUMP_WND, LineCount++, 8); + } +#endif + EndPhyEntry = LineCount; + } + else + { +#if (BX_DBG_MAX_VIR_BPOINTS > 0) + totqty = bx_guard.iaddr.num_virtual; + for (i = 0; i < totqty; i++) + { + BrkpIDMap[LineCount] = bx_guard.iaddr.vir[i].bpoint_id; + prtbrk (bx_guard.iaddr.vir[i].cs, + (Bit64u) bx_guard.iaddr.vir[i].eip, + (unsigned) BrkpIDMap[LineCount], + bx_guard.iaddr.vir[i].enabled, cols); + InsertListRow(cols, 18, DUMP_WND, LineCount++, 8); + } +#endif + } + } + else if (brktype == 3) + { + WWP_BaseEntry = LineCount; + totqty = num_write_watchpoints; + WWPSnapCount = num_write_watchpoints; + for (i = 0; i < totqty; i++) + { + WWP_Snapshot[i] = write_watchpoint[i].addr; + sprintf (cols[0],"%08X",write_watchpoint[i].addr); + InsertListRow(cols, 18, DUMP_WND, LineCount++, 8); + } + } + else + { + RWP_BaseEntry = LineCount; + totqty = num_read_watchpoints; + RWPSnapCount = num_read_watchpoints; + for (i = 0; i < totqty; i++) + { + RWP_Snapshot[i] = read_watchpoint[i].addr; + sprintf (cols[0],"%08X",read_watchpoint[i].addr); + InsertListRow(cols, 18, DUMP_WND, LineCount++, 8); + } + } + } + RedrawColumns(DUMP_WND); + EndListUpdate(DUMP_WND); +} + +// performs endian byteswapping the hard way, for a Data dump +void FillDataX(char* t, char C, bx_bool doHex) +{ + char tmpbuf[40]; + char *d = tmpbuf; + if (isLittleEndian == FALSE || doHex == FALSE) + d = t + strlen(t); // bigendian can always be appended directly + *d = C; + d[1] = 0; + if (isprint(C) == 0) + *d = '.'; + + if (doHex != FALSE) + { + *d = AsciiHex[2* (unsigned char)C]; + d[1] = AsciiHex[2* (unsigned char)C + 1]; + d[2] = 0; + if (isLittleEndian != FALSE) // little endian => reverse hex digits + { + strcat(d,t); + strcpy(t,d); // so append the new bytes to the FRONT of t + } + } +} + +// do the ShowData display work asynchronously, as a thread +void ShowData() +{ + unsigned int i; + char *x; + char *cols[18]; + char mdtxt[200]; + char tmphex[40]; + + *mdtxt = 0; + cols[0]= mdtxt + 1; // the amount of storage needed for each column is complicated + cols[1]= mdtxt + 20; + cols[2]= mdtxt + 60; + cols[3]= mdtxt + 64; + cols[4]= mdtxt + 70; + cols[5]= mdtxt + 74; + cols[6]= mdtxt + 84; + cols[7]= mdtxt + 88; + cols[8]= mdtxt + 94; + cols[9]= mdtxt + 100; + cols[10]= mdtxt + 120; + cols[11]= mdtxt + 124; + cols[12]= mdtxt + 130; + cols[13]= mdtxt + 134; + cols[14]= mdtxt + 144; + cols[15]= mdtxt + 148; + cols[16]= mdtxt + 154; + cols[17]= mdtxt + 160; + doDumpRefresh = FALSE; + StartListUpdate(DUMP_WND); + + x = DataDump; // data dumps are ALWAYS 4K + for(i = 0; i < 4096; i += 16) + { + if (In64Mode == FALSE) + sprintf(cols[0],"0x%08X",(Bit32u) (DumpStart + i)); + else + sprintf(cols[0],"0x" FMT_LLCAPX,DumpStart + i); + + *tmphex = 0; + *cols[17] = 0; + for(unsigned y = 0; y < 16; y++) + { + if ((DumpInAsciiMode & 1) != 0) + // verify the char is printable, then append it to the "ascii" column + FillDataX(cols[17],x[y],FALSE); + + if ((DumpInAsciiMode & 2) != 0) + { + // convert char to hex, build "endian" hex value, 2 digits at a time + FillDataX(tmphex,x[y],TRUE); + if (((y + 1) & (DumpAlign - 1)) == 0) + { + strcpy (cols[y+2-DumpAlign], tmphex); + *tmphex = 0; // FillDataX APPENDS, so you need to clear the buffer + } + } + } + InsertListRow(cols, 18, DUMP_WND, i>>4, 8); // 18 cols, list2, "no group" + x+= 16; // bump to the next row of data + } + + RedrawColumns(DUMP_WND); + EndListUpdate(DUMP_WND); +} + + +// build Register "display" names from lower case names +// (must build the pointer list while building the names) +void MakeRDnames() +{ + char *p = RDispName[0]; // first storage location + for (int i=0; i <= EFER_Rnum; i++) + { + RDispName[i] = p; // create the Name pointer + const char *c = RegLCName[i]; // Register name in lower case + + if (UprCase != 0) + { + while (*c != 0) + *(p++) = UCtable[(int) *(c++)]; // use lookup tbl for uppercase + } + else + { + while (*c != 0) + *(p++) = *(c++); + } + *(p++) = 0; + } +} + +// generic initialization routine -- called once, only at startup +void DoAllInit() +{ + char *p; + int i; + + CurrentCPU = 0; // need to init CPU info once only + if (SingleCPU == FALSE) + TotCPUs = BX_SMP_PROCESSORS; + else + TotCPUs = 1; + + // for GUI debugger +#if BX_CPU_LEVEL >= 6 + CpuSupportSSE = SIM->get_param_enum(BXPN_CPUID_SSE)->get(); +#endif + + // divide up the pre-allocated char buffer into smaller pieces + p = bigbuf + outbufSIZE; // point at the end of preallocated mem + p -= 200; // 200 bytes is enough for all the register names + RDispName[0] = p; + p -= 4096; + DataDump = p; // storage for 4K memory dumps + p -= OutWinCnt; // 10K for Output Window buffer + OutWindow = p; + i = 64; + while (--i >= 0) + { + p -= 80; // command history buffers are 80b each + CmdHistory[i] = p; // set up 64 of them (5120b) + *p = 0; // and clear each one + } + p -= STACK_ENTRIES * 8; // usually a 400 byte buffer for the stack values + PrevStack = p; + p -= STACK_ENTRIES * 8; // and another one + CurStack = p; + p -= 512; + p -= 512; // 2 "hex" bytes per byte value + tmpcb = p; + + i = TOT_REG_NUM; // fake up a color table -- there are just enough, currently + int j = 7; // color 7 = orange + while (i > 0) + { + // change color when the loop goes below the base register number +// if (i == TRXR) --j; // 5 TRX registers -- currently don't exist + if (i == DR0_Rnum) --j; // 6 Debug + else if (i == XMM0_Rnum) --j; // 8 or 16 XMM + else if (i == ST0_Rnum) --j; // 8 MMX/FPU + else if (i == CR0_Rnum) --j; // EFER and CR + else if (i == GDTRnum) --j; // Sys Registers + else if (i == CS_Rnum) --j; // Segments + else if (i == EAX_Rnum) --j; // GP Registers (32b) + // below EAX is 64bit GP Registers and EFLAGS + RegColor[--i] = j; + } + + MakeXlatTables(); // create UpperCase and AsciiHex translation tables + MakeRDnames(); // create Rnames from lower-case register names + InitRegObjects(); // get/store all the bx_param_num_c objects for the registers +} + +// refill whichever "data window" is active -- or param_tree +void RefreshDataWin() +{ + switch (DViewMode) + { + case VIEW_MEMDUMP: + if (DumpInitted != FALSE) + ShowData(); + else + EndListUpdate(2); // list is empty, so end (show) it! + break; + case VIEW_GDT: + FillGDT(); + break; + case VIEW_IDT: + FillIDT(); + break; + case VIEW_PAGING: + FillPAGE(); + break; + case VIEW_STACK: + PStackLA = 1; // flag to force a full stack refresh + FillStack(); + break; + case VIEW_BREAK: + FillBrkp(); + break; + case VIEW_PTREE: + FillPTree(); + } +} + +// performs tasks whenever the simulation "breaks" +void OnBreak() +{ + int i = EFER_Rnum + 1; + // check if Ptime has changed + TakeInputFocus(); + NewPtime = bx_pc_system.time_ticks(); + if (PrevPtime == NewPtime) // if not, nothing really changed + { + UpdateStatus(); // Updates if there really was a status change, at least + return; + } + // display the new ptime on the status bar + char time_buf[20]; + sprintf (time_buf,"t= " FMT_LL "d", NewPtime); + SetStatusText (2, time_buf); + PrevPtime = NewPtime; + + // remember register values from before the last run + while (--i >= 0) + PV[i] = rV[i]; + ladrmin = ladrmax; // invalidate any old linear->phys mapping + + // then detect current CPU mode the *right* way -- look for changes + // TODO: create param Objects for CS.d_b and cpu_mode for each CPU + CpuMode = BX_CPU(CurrentCPU)->get_cpu_mode(); + if (CpuMode == BX_MODE_LONG_64) + { + if (In64Mode == FALSE) // Entering LongMode? + { + CpuModeChange = TRUE; + In64Mode = TRUE; + In32Mode = TRUE; // In32Mode must be TRUE in LongMode + ResizeColmns = TRUE; // if so, some formatting has changed + } + } + else + { + bx_bool d_b = BX_CPU(CurrentCPU)->sregs[BX_SEG_REG_CS].cache.u.segment.d_b; + if (In32Mode != d_b || In64Mode != FALSE) + { + CpuModeChange = TRUE; + In64Mode = FALSE; + In32Mode = d_b; + } + } + if (CpuModeChange != FALSE) + { + GrayMenuItem ((int) In64Mode, CMD_EREG); + BottomAsmLA = ~0; // force an ASM autoload + StatusChange = TRUE; + } + doUpdate(); // do a full "autoupdate" + if (doDumpRefresh != FALSE) + RefreshDataWin(); +} + +static int HexFromAsk(const char* ask, char* b) // this routine converts a user-typed hex string into binary bytes +{ // it ignores any bigendian issues -- binary is converted front to end as chars + int y = 0; + int i = 0; + for(;;) + { + unsigned int C = 0; + if (strlen(ask + i) < 2) + break; + if (!sscanf(ask + i,"%02X",&C)) + break; + b[y++] = C; + i += 2; + } + return y; +} + +static bx_bool FindHex(const unsigned char* b1,int bs,const unsigned char* b2,int by) +{ + // search bs bytes of b1 + for(int i = 0; i < bs; i++) // TODO: this loop could be a little more efficient. + { // -- it just scans an input byte string against DataDump memory + bx_bool Match = TRUE; + for(int y = 0; y < by; y++) + { + if (b1[i + y] != b2[y]) + { + Match = FALSE; + break; + } + } + if (Match != FALSE) + return TRUE; + } + return FALSE; +} + +bx_bool AskText(const char *title, const char *prompt, char *DefaultText) +{ + ask_str.title= title; + ask_str.prompt= prompt; + ask_str.reply= DefaultText; + return ShowAskDialog(); +} + +// load new memory for a MemDump +// newDS = illegal (1) is a flag to ask the user for a DumpStart address +bx_bool InitDataDump(bx_bool isLinear, Bit64u newDS) +{ + bx_bool retval = TRUE; + bx_bool MsgOnErr = FALSE; + if (AtBreak == FALSE) + return FALSE; + if (((int) newDS & 0xf) != 0) // legal addys must be on 16byte boundary + { + if (In64Mode == FALSE) + sprintf(tmpcb,"0x%X",(Bit32u) DumpStart); + else + sprintf(tmpcb,"0x" FMT_LL "X",DumpStart); + if (AskText("4K Memory Dump","4K Memory Dump -- Enter Address (use 0x for hex):",tmpcb) == FALSE) + return FALSE; + + newDS = cvt64(tmpcb,FALSE); // input either hex or decimal + newDS &= ~15; // force Mem Dump to be 16b aligned + MsgOnErr = TRUE; + } + + // load 4k DataDump array from bochs emulated linear or physical memory + if (isLinear != FALSE) + { + // cannot read linear mem across a 4K boundary -- so break the read in two + // -- calculate location of 4K boundary (h): + unsigned int len = (int) newDS & 0xfff; + unsigned int i = 4096 - len; + Bit64u h = newDS + i; + retval = ReadBxLMem(newDS,i,(Bit8u *)DataDump); + if (retval != FALSE && len != 0) + retval = ReadBxLMem(h,len,(Bit8u *)DataDump + i); + } + else + retval = (bx_bool) bx_mem.dbg_fetch_mem( BX_CPU(CurrentCPU), + (bx_phy_address)newDS, 4096, (Bit8u *)DataDump); + if (retval == FALSE) + { + // assume that the DataDump array is still valid -- fetch_mem should error without damage + if (MsgOnErr != FALSE) + DispMessage ("Address range was not legal memory","Memory Error"); + return retval; + } + SA_valid = FALSE; // any previous MemDump click is now irrelevant + ResizeColmns = TRUE; // autosize column 0 once + DumpInitted = TRUE; // OK to refresh the Dump window in the future (it has data) + DumpStart = newDS; + LinearDump = isLinear; // finalize dump mode, since it worked + ShowMemData(TRUE); // Display DataDump using these new parameters/data + return TRUE; +} + +// User is changing which registers are displaying in the Register list +void ToggleSeeReg(int cmd) +{ + int i = cmd - CMD_EREG; + if (i < 0 || i > 7) + return; + if (i == 4 || i == 5) + ResizeColmns = TRUE; // may need to resize the register value column + + SeeReg[i] ^= TRUE; + SetMenuCheckmark ((int) SeeReg[i], i + CHK_CMD_EREG); + if (AtBreak != FALSE) + LoadRegList(); // do a register window update +} + +void doNewWSize(int i) +{ + // DumpAlign is the "wordsize" in bytes -- need to "calculate" the power of 2 + int j = 0; + if (DumpAlign == 2) j = 1; + else if (DumpAlign == 4) j = 2; + else if (DumpAlign == 8) j = 3; + else if (DumpAlign == 16) j = 4; + if (j != i) + { + ToggleWSchecks(i, j); + DumpAlign = 1<= 0x10000) + { + if (DViewMode != VIEW_GDT) + DispMessage("GDT limit is illegal","Simulation error"); + ShowMemData(FALSE); + } + else + { + HideTree(); + DViewMode = VIEW_GDT; // displaying a GDT + FillGDT(); + } +} + +void ToggleIDT() +{ + if (AtBreak == FALSE) + return; + GrayMenuItem (0, CMD_WPTWR); + GrayMenuItem (0, CMD_WPTRD); + if (DViewMode == VIEW_IDT || /*(IDT_Len & 3) != 3 ||*/ (unsigned) IDT_Len >= 0x10000) + { + if (DViewMode != VIEW_IDT) + DispMessage("IDT limit is illegal","Simulation error"); + ShowMemData(FALSE); + } + else + { + HideTree(); + DViewMode = VIEW_IDT; // displaying an IDT + FillIDT(); + } +} + +void TogglePAGE() +{ + if (AtBreak == FALSE) + return; + GrayMenuItem (0, CMD_WPTWR); + GrayMenuItem (0, CMD_WPTRD); + if (DViewMode == VIEW_PAGING || InPaging == FALSE) + ShowMemData(FALSE); + else + { + HideTree(); + DViewMode = VIEW_PAGING; // currently displaying Paging info + FillPAGE(); + } +} + +void ToggleStack() +{ + if (AtBreak == FALSE) + return; + GrayMenuItem (0, CMD_WPTWR); + GrayMenuItem (0, CMD_WPTRD); + if (DViewMode == VIEW_STACK) + ShowMemData(FALSE); + else + { + HideTree(); + DViewMode = VIEW_STACK; // currently displaying stack + PStackLA = 1; // flag to force a full refresh + FillStack(); + } +} + +void ToggleBrkpt() +{ + if (AtBreak == FALSE) + return; + GrayMenuItem (0, CMD_WPTWR); + GrayMenuItem (0, CMD_WPTRD); + if (DViewMode == VIEW_BREAK) + ShowMemData(FALSE); + else + { + HideTree(); // HideTree needs to know the "prev" DViewMode + DViewMode = VIEW_BREAK; // currently displaying breakpoint info + FillBrkp(); + } +} + +void TogglePTree() +{ + if (AtBreak == FALSE) + return; + GrayMenuItem (0, CMD_WPTWR); + GrayMenuItem (0, CMD_WPTRD); + if (DViewMode == VIEW_PTREE) + ShowMemData(FALSE); + else + { + // FillPTree needs to know the "prev" DViewMode, to handle "refresh" events properly + FillPTree(); // get all info from param_tree into tree-view window + DViewMode = VIEW_PTREE; // currently displaying param_tree + } +} + +void doFind() +{ + unsigned int i, L; + bx_bool Select; + char srchstr[100]; + if (AtBreak == FALSE) + return; + *tmpcb = 0; + // read ASM text or MemDump data, find matches, select all matching lines + if (DumpHasFocus == FALSE) + { + if (AskText("Find text in mnemonic lines","ASM Search text:",tmpcb) == FALSE) + return; + if (strchr(tmpcb,'*') == 0 && strchr(tmpcb,'?') == 0) + sprintf(srchstr,"*%s*",tmpcb); + else + strcpy(srchstr,tmpcb); + + if (UprCase != FALSE) // convert search string to uppercase if ASM is that way + upr(srchstr); + for(i = 0; i < (unsigned) AsmLineCount; i++) + { + GetLIText(ASM_WND, i, 2, tmpcb); // retrieve the ASM column 2 text for row i + Select = FALSE; + if (IsMatching(tmpcb, srchstr, TRUE) != FALSE) + Select = TRUE; + SetLIState(ASM_WND, i, Select); + } + } + else + { + if (AskText("Memory Dump Search", + "Sequential hex bytes (e.g 00FEFA - no spaces), or ascii string (max. 16b):",tmpcb) == FALSE) + return; + + int by = HexFromAsk(tmpcb,srchstr); // by = len of binary search string + + // Find in all rows of 16 bytes -- must do rows, so they can be selected + for(i = 0, L = 0; i < 4096; i += 16, L++) + { + Select = FALSE; + if (by != 0 && FindHex((unsigned char *)DataDump + i,16,(unsigned char *)srchstr,by)) + Select = TRUE; + SetLIState(DUMP_WND, L, Select); + } + + // Try ascii for additional matches and selected lines + Select = TRUE; // this loop, only add selected lines to the display + by = strlen(tmpcb); + for(i = 0, L = 0; i < 4096; i += 16, L++) + { + if (by != 0 && FindHex((unsigned char *)DataDump + i,16,(unsigned char *)tmpcb,by)) + SetLIState(DUMP_WND, L, Select); + } + } +} + +void doStepN() +{ + // can't run sim until everything is ready + if (AtBreak == FALSE || debug_cmd_ready != FALSE) + return; + sprintf (tmpcb,"%d",PrevStepNSize); + if (AskText("Singlestep N times","Number of steps (use 0x for hex):",tmpcb) == FALSE) + return; + Bit32u i = (Bit32u) cvt64(tmpcb,FALSE); // input either hex or decimal + if (i == 0) + return; + PrevStepNSize = i; + AtBreak = FALSE; + StatusChange = TRUE; + bx_dbg_stepN_command(CurrentCPU, i); + AtBreak = TRUE; + StatusChange = TRUE; + OnBreak(); +} + +// User wants a custom disassembly +void doDisAsm() +{ + int NumLines = DefaultAsmLines; + if (AtBreak == FALSE) + return; + sprintf (tmpcb,"0x" FMT_LL "X",CurrentAsmLA); + if (AskText("Disassemble", + "Disassemble -- Enter Linear Start Address (use 0x for hex):",tmpcb) == FALSE) + return; + Bit64u h = cvt64(tmpcb,FALSE); // input either hex or decimal + sprintf (tmpcb,"%d",NumLines); + if (AskText("Disassemble","Number of lines: (Max. 2048)",tmpcb) == FALSE) + return; + sscanf (tmpcb,"%d",&NumLines); + if (NumLines <= 0 || NumLines > 2048) + return; + if (NumLines > 1000 && FWflag == FALSE) + ShowFW(); + FillAsm(h, NumLines); + // Set the scroll limits for the new ASM window + BottomAsmLA = *AsmLA; + int j = bottommargin; // try to use this bottom margin on ASM window + if (j > AsmLineCount) + j = AsmLineCount; + TopAsmLA = AsmLA[AsmLineCount - j]; //TopAsmLA is the scroll point +} + +// Toggle all "selected" items as linear breakpoint on the ASM window +void SetBreak(int OneEntry) +{ + int L; + if (AtBreak == FALSE) + return; + if (OneEntry >= 0) + L = OneEntry; + else + // -1 is a flag to start the search at the beginning + L = GetNextSelectedLI(ASM_WND, -1); + while (L >= 0) + { + int iExist = -1; + int i=0; + while (i < BreakCount && iExist < 0) + { + if (BrkLAddr[i] == AsmLA[L]) + iExist = i; + ++i; + } + if (iExist >= 0) + { + // existing, remove + bx_dbg_del_lbreak(BrkIdx[iExist]); + i = iExist; // also compress it out of the local list + while (++i < BreakCount) + { + BrkLAddr[i-1] = BrkLAddr[i]; + BrkIdx[i-1] = BrkIdx[i]; + } + --BreakCount; + } + else + { + bx_address nbrk = (bx_address) AsmLA[L]; + // Set a "regular" bochs linear breakpoint to that address + int BpId = bx_dbg_lbreakpoint_command(bkRegular, nbrk); + if (BpId >= 0) + { + // insertion sort the new Brkpt into the local list + i = BreakCount - 1; + while (i >= 0 && BrkLAddr[i] > nbrk) + { + BrkLAddr[i+1] = BrkLAddr[i]; + BrkIdx[i+1] = BrkIdx[i]; + --i; + } + BrkLAddr[i+1] = nbrk; + BrkIdx[i+1] = BpId; + ++BreakCount; + } + } + if (OneEntry >= 0) // do not loop, if only doing one entry + L = -1; + else + // start the next ASM search at current item L + L = GetNextSelectedLI(ASM_WND, L); + } + Invalidate(ASM_WND); // redraw the ASM window -- colors may have changed +} + +void DelWatchpoint(bx_watchpoint *wp_array, unsigned *TotEntries, int i) +{ + while (++i < (int) *TotEntries) + wp_array[i-1] = wp_array[i]; + -- *TotEntries; +} + +void SetWatchpoint(unsigned *num_watchpoints, bx_watchpoint *watchpoint) +{ + int iExist1 = -1; + int i = (int) *num_watchpoints; + if (AtBreak == FALSE || SA_valid == FALSE) + return; + // the list is unsorted -- test all of them + while (--i >= 0) + { + if (watchpoint[i].addr == SelectedDataAddress) + { + iExist1 = i; + i = 0; + } + } + if (iExist1 >= 0) + { + // existing watchpoint, remove by copying the list down + DelWatchpoint(watchpoint, num_watchpoints, iExist1); + } + else + { + // Set a watchpoint to last clicked address -- the list is not sorted + if (*num_watchpoints >= BX_DBG_MAX_WATCHPONTS) { + DispMessage("Too many of that type of watchpoint. Max: 16", "Table Overflow"); + } + else { + watchpoint[*num_watchpoints].len = 1; + watchpoint[*num_watchpoints].addr = (bx_phy_address) SelectedDataAddress; + ++(*num_watchpoints); + } + } + Invalidate(DUMP_WND); // redraw the MemDump window -- colors may have changed +} + +void ChangeReg() +{ + // Change a register -- search for the first selected register + int L = GetNextSelectedLI(REG_WND, -1); + if (AtBreak == FALSE || L == -1 || L >= TOT_REG_NUM) + return; + + int i = RitemToRnum[L]; + if (i > EFER_Rnum) // TODO: extend this to more reg -- need display names for all + return; + char *d1 = RDispName[i]; +// if (i > EFER_Rnum) +// *tmpcb = 0; +// else + sprintf (tmpcb,"0x" FMT_LL "X", rV[i]); + if (AskText("Change Register Value",d1,tmpcb)) + { + Bit64u val; + val = cvt64(tmpcb,TRUE); // input either hex or decimal +#if BX_SUPPORT_X86_64 + if (i >= EAX_Rnum && i <= EBP_Rnum) // must use RAX-RBP when setting 32b registers + i -= EAX_Rnum - RAX_Rnum; +#endif + RegObject[CurrentCPU][i]->set(val); // the set function should be a bool, not a void +// bx_bool worked = RegObject[CurrentCPU][i]->set(val); +// if (worked == FALSE) +// DispMessage ("Bochs does not allow you to set that register","Selection Error"); +// else + LoadRegList(); // update the register window + } +} + +// user wants to edit some memory +void SetMemLine(int L) +{ + // get base address of "line" of data -- each line (L) is 16 bytes + char addrstr[64]; + Bit64u h = DumpStart + (L<<4); + if (AtBreak == FALSE || L >= 256) + return; + + if (LinearDump == FALSE) + sprintf(addrstr,"Physical Address: 0x" FMT_LL "X",h); + else + sprintf(addrstr,"Linear Address: 0x" FMT_LL "X",h); + + unsigned char *u = (unsigned char *)(DataDump + (L<<4)); // important that it be unsigned! + sprintf(tmpcb,"%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", + *u,u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8],u[9],u[10],u[11],u[12],u[13],u[14],u[15]); + + if (AskText("Change Memory Values",addrstr,tmpcb)) + { + Bit8u newval; + int err=0; + char *x = tmpcb; + upr(x); // force input string to uppercase + + if (LinearDump != FALSE) // is h is a LINEAR address? Convert to physical! + { + // use the ReadBx function to calculate the lin->phys offset + if (ReadBxLMem(h,0,(Bit8u *)addrstr) == FALSE) // "read" 0 bytes + err = 2; + else + h -= l_p_offset; // convert h to a physmem address + } + + while (*x != 0 && err == 0) + { + char *s = x; + // verify that the next 2 chars are hex digits + if ((*x < '0' || *x > '9') && (*x < 'A' || *x > 'F')) + err = 1; + else + { + ++x; + if ((*x < '0' || *x > '9') && (*x < 'A' || *x > 'F')) + err = 1; + else + { + ++x; + if (*x != ' ' && *x != 0) // followed by a space or 0 + err = 1; + } + } + if (err == 0) + { + // convert the hex to a byte, and try to store the byte in bochs physmem + sscanf (s,"%2X", (unsigned int*)&newval); + if (bx_mem.dbg_set_mem( (bx_phy_address) h, 1, &newval) == FALSE) + err = 2; + ++h; // bump to the next mem address + while (*x == ' ') // scan past whitespace + ++x; + } + } + + if (err != 0) + { + if (err == 1) + DispMessage ("Improper char hex format","Input Format Error"); + else + DispMessage ("Illegal memory address error?","Memory Error"); + } + ShowData(); // refresh the data dump, even if there were errors + } +} + +// Alt, Shift, Control keys are "down" if negative +// Normal return value is 0, return != 0 has OS-specific meaning. +int HotKey (int ww, int Alt, int Shift, int Control) +{ + if (Alt < 0){ + if (ww == '1') + doNewWSize(0); + else if (ww == '2') + doNewWSize(1); + else if (ww == '4') + doNewWSize(2); + else if (ww == '8') + doNewWSize(3); + else if (ww == '6') + doNewWSize(4); + else if (ww == VK_F2) + TogglePAGE(); +#if BX_SUPPORT_FPU + else if (ww == VK_F3) ToggleSeeReg(CMD_FPUR); // MMX/FPU toggle +#endif + else if (ww == VK_F6) // AltF6 = Read Watchpt + { + if (DumpHasFocus != FALSE) + SetWatchpoint(&num_read_watchpoints,read_watchpoint); + } + else if (ww == VK_F7) // Alt+F7 memdump hex toggle + { + int i = DumpInAsciiMode; + i ^= 2; + if (i != 0) + { + DumpInAsciiMode = i; + i &= 2; + SetMenuCheckmark (i, CHK_CMD_MHEX); + GrayMenuItem (i, CMD_MASCII); + PrevDAD = 0; // force columns to resize + if (DViewMode == VIEW_MEMDUMP && DumpInitted != FALSE) + { + if (AtBreak == FALSE) + doDumpRefresh = TRUE; + else + ShowData(); + } + } + } + return 0; + } + switch (ww) + { + case VK_ESCAPE: + CommandHistoryIdx = 0; + ClearInputWindow(); + ShowMemData(FALSE); // force a "normal" MemDump window + break; + + case VK_UP: + // History from nextmost previous command + SelectHistory(-1); + break; + + case VK_DOWN: + // Next History command + SelectHistory(+1); + break; + + case VK_PRIOR: + // Page up on the MemDump window by 2K + if (DumpInitted != FALSE) + InitDataDump(LinearDump, DumpStart - 2048); + break; + + case VK_NEXT: + // Page down on the MemDump window by 2K + if (DumpInitted != FALSE) + InitDataDump(LinearDump, DumpStart + 2048); + break; + + case VK_F2: + if (Control < 0) + ToggleGDT(); + else if (Shift < 0) + ToggleIDT(); + else + ToggleStack(); + break; + + case VK_F3: // ^F3 = param tree, F3 = toggle syntax + if (Control < 0) + TogglePTree(); + else + { + bx_disassemble.toggle_syntax_mode(); + if (AtBreak != FALSE) + { + // do the standard ASM window fill sequence + Bit64u h = CurrentAsmLA; + CanDoLA(&h); + FillAsm(h, DefaultAsmLines); + } + else + BottomAsmLA = ~0; // force an ASM autoload + } + break; + + case VK_F4: + if (Shift < 0) // Debug register toggle + ToggleSeeReg(CMD_DREG); + else if (Control >= 0) // Refresh + { + BottomAsmLA = ~0; // force an ASM autoload + ResizeColmns = TRUE; // force everything to repaint + doDumpRefresh = TRUE; // force a data window reload on a break + if (AtBreak != FALSE) // can't refresh the windows until a break! + { + doUpdate(); // refresh the ASM and Register windows + RefreshDataWin(); // and whichever data window is up + } + } + else { + if (CpuSupportSSE) + ToggleSeeReg(CMD_XMMR); // SSE toggle + } + break; + + case VK_F5: + if (Shift < 0) // ShiftF5 = Modechange brk toggle + { + // toggle mode_break on cpu0, use that value to reset all CPUs + bx_bool nmb = BX_CPU(0)->mode_break ^ TRUE; + int j = TotCPUs; + while (--j >= 0) + BX_CPU(j)->mode_break = nmb; + SetMenuCheckmark ((int) nmb, CHK_CMD_MODEB); + } + else + { + // can't continue until everything is ready + if (AtBreak != FALSE && debug_cmd_ready == FALSE) + { + // The VGAW *MUST* be refreshed periodically -- it's best to use the timer. + // Which means that the sim cannot be directly run from this msglp thread. + *debug_cmd = 'c'; // send a fake "continue" command to the internal debugger + debug_cmd[1] = 0; + debug_cmd_ready = TRUE; + AtBreak = FALSE; + StatusChange = TRUE; + } + } + break; + + case VK_F7: + if (Control < 0) + InitDataDump(0,(Bit64u) 1); // ^F7 = PhysDump + else if (Shift < 0) // ShiftF7 = ascii toggle + { + int i = DumpInAsciiMode; + i ^= 1; + if (i != 0) + { + DumpInAsciiMode = i; + i &= 1; + SetMenuCheckmark (i, CHK_CMD_MASCII); + GrayMenuItem (i, CMD_MHEX); + PrevDAD = 0; // force columns to resize + if (DViewMode == VIEW_MEMDUMP && DumpInitted != FALSE) + { + if (AtBreak == FALSE) + doDumpRefresh = TRUE; + else + ShowData(); + } + } + } + else + InitDataDump(1,(Bit64u) 1); // F7 = LinDump + break; + + case VK_F6: + if (Control < 0) // ^F6 = Breakpoint window + ToggleBrkpt(); + else if (Shift < 0) // ShiftF6 = Write Watchpt + { + if (DumpHasFocus == FALSE) + SetBreak(-1); // set or delete breakpoint(s) at the selected address(es) + else + SetWatchpoint(&num_write_watchpoints,write_watchpoint); + } + else + { + if (DumpHasFocus == FALSE) // F6 = Brkpt + SetBreak(-1); // set or delete breakpoint(s) at the selected address(es) + else + SetWatchpoint(&num_write_watchpoints,write_watchpoint); + } + break; + + case VK_F8: + // can't continue until everything is ready + if (AtBreak != FALSE && debug_cmd_ready == FALSE) + { + *debug_cmd = 'p'; // send a fake "proceed" command to the internal debugger + debug_cmd[1] = 0; + debug_cmd_ready = TRUE; + AtBreak = FALSE; + StatusChange = TRUE; + } + break; + + case VK_F11: + if (AtBreak != FALSE && debug_cmd_ready == FALSE) + { + bx_dbg_stepN_command(CurrentCPU, 1); // singlestep + StatusChange = TRUE; + OnBreak(); + } + break; + + case VK_F9: + doStepN(); // ask user for a step # + break; + + case 'C': // ^c = break + if (Control < 0) + { + SIM->debug_break(); + } + break; + + case 'D': + if (Control < 0) + doDisAsm(); + break; + + case 'F': + if (Control < 0) + doFind(); + break; + + case VK_RIGHT: // Win32: send a few virtual movement keys back into the Input window + case VK_LEFT: + case VK_END: + case VK_HOME: + case VK_DELETE: + return -1; + + case VK_RETURN: + // can't run a command until everything is ready + if (AtBreak != FALSE && debug_cmd_ready == FALSE) + { + *tmpcb = 0; + GetInputEntry(tmpcb); + StatusChange = TRUE; + if (*tmpcb == 0) // Hitting on a blank line means SINGLESTEP + { + bx_dbg_stepN_command(CurrentCPU, 1); // singlestep + OnBreak(); + } + else + { + // deal with the command history: + if (strlen(tmpcb) > 79) + DispMessage ("Running command, but history has an 80 char Max.", + "Command history overflow"); + else + { + strcpy (CmdHistory[CmdHInsert], tmpcb); + CmdHInsert = (CmdHInsert + 1) & 63; // circular buffer, 0 to 63 + } + strcpy (debug_cmd,tmpcb); // send the command into the bochs internal debugger + debug_cmd_ready = TRUE; + AtBreak = FALSE; + ClearInputWindow(); // prepare for the next command + CommandHistoryIdx = 0; // and reset the history queue to the new end + } + } + } // end the switch +// if (Control >= 0 && ww >= ' ' && ww < 0x7f) -- might be interesting to catch printable chars +// return 1; + return 0; +} + +void ActivateMenuItem (int cmd) +{ + int i; + + switch(cmd) + { + case CMD_CONT: // run/go/continue + if (AtBreak != FALSE && debug_cmd_ready == FALSE) + { + // The VGAW *MUST* be refreshed periodically -- it's best to use the timer. + // Which means that the sim cannot be directly run from this msglp thread. + *debug_cmd = 'c'; // send a fake "continue" command to the internal debugger + debug_cmd[1] = 0; + debug_cmd_ready = TRUE; + AtBreak = FALSE; + StatusChange = TRUE; + } + break; + + case CMD_STEP1: // step 1 + if (AtBreak != FALSE && debug_cmd_ready == FALSE) + { + bx_dbg_stepN_command(CurrentCPU, 1); // singlestep + StatusChange = TRUE; + OnBreak(); + } + break; + + case CMD_STEPN: // step N + doStepN(); + break; + + case CMD_BREAK: // break/stop the sim + // SIM->debug_break() only "break"s the internal debugger + SIM->debug_break(); + break; + + case CMD_BRKPT: // set or delete breakpoint(s) at the selected address(es) + SetBreak(-1); + break; + + case CMD_WPTWR: // set or delete a data write watchpoint + SetWatchpoint(&num_write_watchpoints,write_watchpoint); + break; + + case CMD_WPTRD: // set or delete a data read watchpoint + SetWatchpoint(&num_read_watchpoints,read_watchpoint); + break; + + case CMD_FIND: // find -- Control-F + doFind(); + break; + + case CMD_RFRSH: // force an update/refresh + BottomAsmLA = ~0; // force an ASM autoload + ResizeColmns = TRUE; // force everything to repaint + doDumpRefresh = TRUE; // force a data window reload on a break + if (AtBreak != FALSE) // can't refresh the windows until a break! + { + doUpdate(); // refresh the ASM and Register windows + RefreshDataWin(); // and whichever data window is up + } + break; + + case CMD_PHYDMP: // "physical mem" data dump + InitDataDump(0,(Bit64u) 1); + break; + + case CMD_LINDMP: // "linear memory" data dump + InitDataDump(1,(Bit64u) 1); + break; + + case CMD_STACK: // toggle display of Stack + ToggleStack(); + break; + + case CMD_GDTV: // toggle display of GDT + ToggleGDT(); + break; + + case CMD_IDTV: // toggle display of IDT + ToggleIDT(); + break; + + case CMD_PAGEV: // display paging info + TogglePAGE(); + break; + + case CMD_VBRK: // display breakpoint/watchpoint info + ToggleBrkpt(); + break; + + case CMD_CMEM: // view current MemDump -- acts like "cancel" + CommandHistoryIdx = 0; + ClearInputWindow(); + ShowMemData(FALSE); // force a "normal" MemDump window + break; + + case CMD_PTREE: + TogglePTree(); + break; + + case CMD_DISASM: // disassemble starting at a particular address + doDisAsm(); + break; + + case CMD_MODEB: // toggle the simulation's Mode-Change-Break flag + { + // toggle mode_break on cpu0, use that value to reset all CPUs + bx_bool nmb = BX_CPU(0)->mode_break ^ TRUE; + i = TotCPUs; + while (--i >= 0) + BX_CPU(i)->mode_break = nmb; + SetMenuCheckmark ((int) nmb, CHK_CMD_MODEB); + break; + } + + case CMD_ONECPU: // toggle whether to show SMP CPUs + if (AtBreak == FALSE) + break; + SingleCPU ^= TRUE; + TotCPUs = 1; + if (SingleCPU == FALSE) + TotCPUs = BX_SMP_PROCESSORS; + SetMenuCheckmark ((int) SingleCPU, CHK_CMD_ONECPU); + VSizeChange(); + break; + + case CMD_DADEF: // set default # of disassembly lines in a list + if (AtBreak == FALSE) + break; + sprintf (tmpcb,"%d",DefaultAsmLines); + if (AskText("Disassembly default linecount","Max. 2048:",tmpcb) == FALSE) + return; + sscanf (tmpcb,"%u",&i); + if (i > 0 && i <= 2048) + DefaultAsmLines = i; + if (i > 1000 && FWflag == FALSE) // friendly warning + ShowFW(); + break; + + case CMD_ATTI: // Toggle ASM Syntax + bx_disassemble.toggle_syntax_mode(); + if (AtBreak != FALSE) + { + // do the standard ASM window fill sequence + Bit64u h = CurrentAsmLA; + CanDoLA(&h); + FillAsm(h, DefaultAsmLines); + } + else + BottomAsmLA = ~0; // force an ASM autoload + break; + + case CMD_IOWIN: // toggle display of internal debugger Input and Output windows + if (AtBreak == FALSE) + break; + ShowIOWindows ^= TRUE; + SetMenuCheckmark ((int) ShowIOWindows, CHK_CMD_IOWIN); + VSizeChange(); + break; + + case CMD_SBTN: // Toggle showing top pushbutton-row + if (AtBreak == FALSE) + break; + ShowButtons ^= TRUE; + SetMenuCheckmark ((int) ShowButtons, CHK_CMD_SBTN); + VSizeChange(); + break; + + case CMD_UCASE: // Toggle showing everything in uppercase + UprCase ^= 1; + SetMenuCheckmark ((int) UprCase, CHK_CMD_UCASE); + MakeRDnames(); + if (AtBreak != FALSE) + { + LoadRegList(); + // do the standard ASM window fill sequence + Bit64u h = CurrentAsmLA; + CanDoLA(&h); + FillAsm(h, DefaultAsmLines); + } + else + BottomAsmLA = ~0; // force an ASM autoload + break; + + case CMD_MHEX: // Toggle showing hex in Dump window + i = DumpInAsciiMode; + i ^= 2; + if (i != 0) + { + DumpInAsciiMode = i; + i &= 2; + SetMenuCheckmark (i, CHK_CMD_MHEX); + GrayMenuItem (i, CMD_MASCII); + PrevDAD = 0; // force columns to resize + if (DViewMode == VIEW_MEMDUMP && DumpInitted != FALSE) + { + if (AtBreak == FALSE) + doDumpRefresh = TRUE; + else + ShowData(); + } + } + break; + + case CMD_MASCII: // Toggle showing ASCII in Dump window + i = DumpInAsciiMode; + i ^= 1; + if (i != 0) + { + DumpInAsciiMode = i; + i &= 1; + SetMenuCheckmark (i, CHK_CMD_MASCII); + GrayMenuItem (i, CMD_MHEX); + PrevDAD = 0; // force columns to resize + if (DViewMode == VIEW_MEMDUMP && DumpInitted != FALSE) + { + if (AtBreak == FALSE) + doDumpRefresh = TRUE; + else + ShowData(); + } + } + break; + + case CMD_LEND: // Toggle Endianness for the MemDumps + isLittleEndian ^= TRUE; + SetMenuCheckmark ((int) isLittleEndian, CHK_CMD_LEND); + if (DViewMode == VIEW_MEMDUMP && DumpInitted != FALSE) + { + if (AtBreak == FALSE) + doDumpRefresh = TRUE; + else + ShowData(); + } + break; + + case CMD_WS_1: // set memory dump "wordsize" + // "Align" = "wordsize" -- from 1 to 16 + doNewWSize(0); + break; + + case CMD_WS_2: + doNewWSize(1); + break; + + case CMD_WS_4: + doNewWSize(2); + break; + + case CMD_WS_8: + doNewWSize(3); + break; + + case CMD_WS16: + doNewWSize(4); + break; + + case CMD_IGNSA: // Toggle ID disassembly output ignoring + ignSSDisasm ^= TRUE; + SetMenuCheckmark ((int) ignSSDisasm, CHK_CMD_IGNSA); + break; + + case CMD_IGNNT: // Toggle NextT ignoring + ignoreNxtT ^= TRUE; + SetMenuCheckmark ((int) ignoreNxtT, CHK_CMD_IGNNT); + break; + + case CMD_RCLR: // Toggle Register Coloring + SeeRegColors ^= TRUE; + SetMenuCheckmark ((int) SeeRegColors, CHK_CMD_RCLR); + if (AtBreak != FALSE) + LoadRegList(); + break; + + + case CMD_EREG: // Show Registers of various types + case CMD_SREG: + case CMD_SYSR: + case CMD_CREG: + case CMD_FPUR: + case CMD_XMMR: + case CMD_DREG: + case CMD_TREG: + ToggleSeeReg(cmd); + break; + + case CMD_ABOUT: // "About" box + DispMessage ("Bochs Enhanced Debugger, Version 1.2\r\nCopyright (C) Chourdakis Michael.\r\nModified by Bruce Ewing", + "About"); + break; + + case CMD_FONT: // font + ResizeColmns = TRUE; // column widths are font dependent + if (NewFont() != FALSE) + VSizeChange(); + } +} + +void InitDebugDialog() +{ + DoAllInit(); // non-os-specific init stuff + OSInit(); +} + +#endif diff --git a/bochs/gui/enh_dbg.h b/bochs/gui/enh_dbg.h new file mode 100755 index 00000000..2f39b448 --- /dev/null +++ b/bochs/gui/enh_dbg.h @@ -0,0 +1,420 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// BOCHS ENHANCED DEBUGGER Ver 1.2 +// (C) Chourdakis Michael, 2008 +// http://www.turboirc.com +// +// Modified by Bruce Ewing +// + +#ifndef BX_ENH_DBG_DEF_H +#define BX_ENH_DBG_DEF_H + +#if BX_DEBUGGER && BX_DEBUGGER_GUI + +#ifndef IS_WIN98 +// workaround broken code if IS_WIN98 not defined +#define IS_WIN98 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +void MoveLists(); +void SetStatusText(int column, const char *buf); // should it be here ? +void MakeListsGray(); +void DispMessage(const char *msg, const char *title); +void InsertListRow(char *ColumnText[], int ColumnCount, int listnum, int LineCount, int grouping); +void StartListUpdate(int listnum); +void EndListUpdate(int listnum); +void RedrawColumns(int listnum); +void Invalidate(int i); +void TakeInputFocus(); +bx_bool ShowAskDialog(); +bx_bool NewFont(); +void GrayMenuItem(int flag, int CmdIndex); +void ShowMemData(bx_bool initting); +void SetMenuCheckmark (int flag, int CmdIndex); +void ClearInputWindow(); +void VSizeChange(); +void ToggleWSchecks(int newWS, int oldWS); +void SetOutWinTxt(); +void ShowFW(); +void GetInputEntry(char *buf); +void SelectHistory(int UpDown); +void DelWatchpoint(bx_watchpoint *wp_array, unsigned *TotEntries, int i); +void SetWatchpoint(unsigned *num_watchpoints, bx_watchpoint *watchpoint); + +void HideTree(); +void FillPTree(); + +int GetASMTopIdx(); +void ScrollASM(int pixels); + +void GetLIText(int listnum, int itemnum, int column, char *buf); +void SetLIState(int listnum, int itemnum, bx_bool Select); +int GetNextSelectedLI(int listnum, int StartPt); + +bx_bool OSInit(); +void SpecialInit(); + +void HitBreak(); +void ParseIDText(const char *x); + +extern char *debug_cmd; +extern bx_bool debug_cmd_ready; +extern bx_bool vgaw_refresh; + +#ifdef WIN32 + +#define CHK_CMD_MODEB CMD_MODEB +#define CHK_CMD_ONECPU CMD_ONECPU +#define CHK_CMD_UCASE CMD_UCASE +#define CHK_CMD_IOWIN CMD_IOWIN +#define CHK_CMD_SBTN CMD_SBTN +#define CHK_CMD_MHEX CMD_MHEX +#define CHK_CMD_MASCII CMD_MASCII +#define CHK_CMD_LEND CMD_LEND +#define CHK_CMD_IGNSA CMD_IGNSA +#define CHK_CMD_IGNNT CMD_IGNNT +#define CHK_CMD_RCLR CMD_RCLR +#define CHK_CMD_EREG CMD_EREG + +#else // GTK+ + +// checkmark indices +#define MODE_BRK 0 +#define ONE_CPU 1 +#define U_CASE 2 +#define IO_WIN 3 +#define SHOW_BTN 4 +#define MD_HEX 5 +#define MD_ASC 6 +#define L_END 7 +#define IGN_SA 8 +#define IGN_NT 9 +#define R_CLR 10 +#define E_REG 11 +#define S_REG 12 +#define SYS_R 13 +#define C_REG 14 +#define FPU_R 15 +#define XMM_R 16 +#define D_REG 17 +//#define T_REG 18 + +#define CHK_CMD_MODEB MODE_BRK +#define CHK_CMD_ONECPU ONE_CPU +#define CHK_CMD_UCASE U_CASE +#define CHK_CMD_IOWIN IO_WIN +#define CHK_CMD_SBTN SHOW_BTN +#define CHK_CMD_MHEX MD_HEX +#define CHK_CMD_MASCII MD_ASC +#define CHK_CMD_LEND L_END +#define CHK_CMD_IGNSA IGN_SA +#define CHK_CMD_IGNNT IGN_NT +#define CHK_CMD_RCLR R_CLR +#define CHK_CMD_EREG E_REG + +#endif + +#ifndef WIN32 + +// Need to define my version of the win32 "virtual keys" + +#define VK_PRIOR 65365 +#define VK_NEXT 65366 +#define VK_F2 65471 +#define VK_F3 65472 +#define VK_F4 65473 +#define VK_F5 65474 +#define VK_F6 65475 +#define VK_F7 65476 +#define VK_F8 65477 +#define VK_F9 65478 +#define VK_F11 65480 +#define VK_UP 65362 +#define VK_DOWN 65364 +#define VK_RETURN 65293 +#define VK_LEFT 65361 +#define VK_RIGHT 65363 +#define VK_END 65367 +#define VK_HOME 65360 +#define VK_DELETE 65535 +#define VK_ESCAPE 65307 + +#endif + +// User Customizable initial settings: + +extern bx_bool SeeReg[8]; + +extern bx_bool SingleCPU; // Display all SMP CPUs +extern bx_bool ShowIOWindows; // Display the Input and Output Internal Debugger windows +extern bx_bool ShowButtons; // Display the top-row Step/Continue pushbuttons +extern bx_bool SeeRegColors; // Display registers with background color "groups" +extern bx_bool ignoreNxtT; // Do not show "Next at t=" output lines +extern bx_bool ignSSDisasm; // Do not show extra disassembly line at each break +extern int UprCase; // 1 = convert all Asm, Register names, Register values to uppercase +extern int DumpInAsciiMode; // bit 1 = show ASCII in dumps, bit 2 = show hex, value=0 is illegal + +extern bx_bool isLittleEndian; + +// How to use DockOrder: the Register list is window 1, ASM is window 2, MemDump is window 3 +// Create the hex value with the digits in the order you want the windows to be. +// 0x312 would have MemDump on the left, Register in the middle, ASM on the right +extern short DockOrder; // set the default List "docking" (Reg, ASM, Dump) + +#define STACK_ENTRIES 50 // # of words/dwords/qwords to display in stack window +// Note: STACK_ENTRIES must be <= 512 + +// END of User Customizable settings + +#ifndef WIN32 +#define FMT_LLCAPX "%016llX" +#else +#define FMT_LLCAPX "%016I64X" +#endif + +#define MAX_ASM 2048 // max entries in ASM window + +extern bx_bool SA_valid; +extern Bit64u SelectedDataAddress; +extern Bit64u CurrentAsmLA; // = EIP/RIP -- for highlighting in ASM window +extern Bit64u BottomAsmLA; // beginning and end addrs on ASM window +extern Bit64u TopAsmLA; + +extern Bit64u PrevPtime; // any number other than 0 +extern Bit64u NewPtime; // used to test whether sim has "updated" +extern unsigned TotCPUs; // # of CPUs in a multi-CPU simulation +extern unsigned CpuSupportSSE; // cpu supports SSE +extern unsigned CurrentCPU; // cpu that is being displayed + +// AskTest stuff -- for the generic dialog box +struct ASKTEXT { + const char* title; + const char* prompt; + char* reply; +}; + +extern struct ASKTEXT ask_str; + +// window resizing/docking stuff +extern int OneCharWide; // average width of a char in current font (pixels) +extern int Sizing; // current "resizing/docking mode" +extern int Resize_HiX; // horizontal limits of the current resize operation (pixels) +extern int Resize_LoX; +extern unsigned ListWidthPix[3]; // set initial proportions of Reg, Asm, Dump windows +extern int CurCenterList; +extern bx_bool DumpHasFocus; + +// BarClix holds the x-axis position (in pixels or logical units) of the two resizing bars, +// in parent coordinates (ie. any window that contains the lists) +extern unsigned short BarClix[2]; + +extern bx_bool AtBreak; // Status indicators +extern bx_bool StatusChange; + +extern bx_bool doOneTimeInit; // Internal flags +extern bx_bool ResizeColmns; // address/value column autosize flag +extern bx_bool FWflag; // friendly warning has been shown to user once already + +extern Bit64u PStackLA; // to calculate alignment between prev and current stack +extern bx_bool StackEntChg[STACK_ENTRIES]; // flag for "change detected" on each stack line + +// List Window indexes = DockOrder window numbers -1 +#define REG_WND 0 +#define ASM_WND 1 +#define DUMP_WND 2 + +// DViewModes +#define VIEW_MEMDUMP 0 +#define VIEW_GDT 1 +#define VIEW_IDT 2 +#define VIEW_PAGING 3 +#define VIEW_STACK 4 +#define VIEW_BREAK 5 +#define VIEW_PTREE 6 + +extern bx_bool DumpInitted; // has the MemDump window ever been filled with data? +extern int DumpAlign; +extern int PrevDAD; // saves "previous DumpAlign value" (forces column autosize) +extern Bit64u DumpStart; // current emulated address (lin or phys) of DataDump +extern bx_bool doDumpRefresh; +extern int DViewMode; +extern bx_bool LinearDump; // FALSE = memdump uses physical addressing + +extern char *tmpcb; // 512b is allocated in bigbuf +extern char AsciiHex[512]; // Unsigned char to printable hex xlat table + +#define outbufSIZE 40960 +extern char bigbuf[outbufSIZE]; // 40K preallocated storage for all char buffers (see DoAllInit) +extern char *OutWindow; // buffer for the Output window +#define OutWinSIZE 10240 +extern int PO_Tdelay; // delay before displaying partial output lines + +extern int AsmPgSize; +extern int ListLineRatio; // number of vertical pixels in a ListView Item +extern int ListVerticalPix; // number of vertical pixels in each List +extern int AsmLineCount; // # of disassembled asm lines loaded +extern Bit64u AsmLA[MAX_ASM]; // linear address of each disassembled ASM line + +// Command stuff +extern int CommandHistoryIdx; +#define CmdHistorySize 64 +extern char *CmdHistory[CmdHistorySize]; // 64 command History storage (fixed 80b each) +extern int CmdHInsert; // index of next history entry to store + +// register storage -- names and values +#define RAX_Rnum 0 +#define RBX_Rnum 1 +#define RCX_Rnum 2 +#define RDX_Rnum 3 +#define RSI_Rnum 4 +#define RDI_Rnum 5 +#define RBP_Rnum 6 +#define RSP_Rnum 7 +#define RIP_Rnum 8 +#define R8_Rnum 9 +#define R9_Rnum 10 +#define R10_Rnum 11 +#define R11_Rnum 12 +#define R12_Rnum 13 +#define R13_Rnum 14 +#define R14_Rnum 15 +#define R15_Rnum 16 +#define EFL_Rnum 17 // it makes the most sense if EFLAGS is between RXX and EXX +#define EAX_Rnum 18 // because it "belongs with" both sets of GP registers +#define EBX_Rnum 19 +#define ECX_Rnum 20 +#define EDX_Rnum 21 +#define ESI_Rnum 22 +#define EDI_Rnum 23 +#define EBP_Rnum 24 +#define ESP_Rnum 25 +#define EIP_Rnum 26 +#define CS_Rnum 27 +#define DS_Rnum 28 +#define ES_Rnum 29 +#define SS_Rnum 30 +#define FS_Rnum 31 +#define GS_Rnum 32 +#define GDTRnum 33 +#define IDTRnum 34 +#define LDTRnum 35 +#define TRRnum 36 +#define CR0_Rnum 37 +#define CR2_Rnum 38 +#define CR3_Rnum 39 +#define CR4_Rnum 40 +#define EFER_Rnum 41 // currently used to mark the last entry in rV[] +#define ST0_Rnum 42 +#define ST1_Rnum 43 +#define ST2_Rnum 44 +#define ST3_Rnum 45 +#define ST4_Rnum 46 +#define ST5_Rnum 47 +#define ST6_Rnum 48 +#define ST7_Rnum 49 +#define XMM0_Rnum 50 +#define XMM1_Rnum 51 +#define XMM2_Rnum 52 +#define XMM3_Rnum 53 +#define XMM4_Rnum 54 +#define XMM5_Rnum 55 +#define XMM6_Rnum 56 +#define XMM7_Rnum 57 +#define XMM8_Rnum 58 +#define XMM9_Rnum 59 +#define XMMA_Rnum 60 +#define XMMB_Rnum 61 +#define XMMC_Rnum 62 +#define XMMD_Rnum 63 +#define XMME_Rnum 64 +#define XMMF_Rnum 65 +#define DR0_Rnum 66 +#define DR1_Rnum 67 +#define DR2_Rnum 68 +#define DR3_Rnum 69 +#define DR6_Rnum 70 +#define DR7_Rnum 71 +// #define TR0_Rnum 71 -- put Test Registers in here when they are supported +#define TOT_REG_NUM 72 +// extra "register numbers" for registers that have more than one part +#define GDTR_Lim 72 +#define IDTR_Lim 73 +#define ST0_exp 74 +#define ST1_exp 75 +#define ST2_exp 76 +#define ST3_exp 77 +#define ST4_exp 78 +#define ST5_exp 79 +#define ST6_exp 80 +#define ST7_exp 81 +#define XMM0_hi 82 +#define XMM1_hi 82 +#define XMM2_hi 83 +#define XMM3_hi 84 +#define XMM4_hi 85 +#define XMM5_hi 86 +#define XMM6_hi 87 +#define XMM7_hi 88 +#define XMM8_hi 89 +#define XMM9_hi 90 +#define XMMA_hi 91 +#define XMMB_hi 92 +#define XMMC_hi 93 +#define XMMD_hi 94 +#define XMME_hi 95 +#define XMMF_hi 96 +#define EXTRA_REGS 28 + +extern Bit8u RegColor[TOT_REG_NUM]; // specifies foreground and background color of registers +// Text color is red if the upper bit is set. Background is set according to ColorList. +extern int RitemToRnum[TOT_REG_NUM]; // mapping from Reg List Item# to register number + +// do the linear breakpoint list as 2 arrays, rather than a structure -- much easier to search! +extern bx_address BrkLAddr[BX_DBG_MAX_LIN_BPOINTS]; +extern int BreakCount; + +// Breakpoint Dump Window stuff +extern unsigned short BrkpIDMap[256]; +extern unsigned short WWP_BaseEntry; +extern unsigned short RWP_BaseEntry; +extern unsigned short EndLinEntry; +extern unsigned short EndPhyEntry; +extern unsigned short WWPSnapCount; +extern unsigned short RWPSnapCount; +extern bx_phy_address WWP_Snapshot[16]; +extern bx_phy_address RWP_Snapshot[16]; + +extern int SizeList; +extern Bit32s xClick; // halfway through a mouseclick flag + location +extern Bit32s yClick; // values are in Listview coordinates + +#include "wenhdbg_res.h" // MenuIDs + +static const char* DC0txt[2] = {"P.Address","L.Address"}; // DumpMode definitions in text + +static const char* BTxt[6] = { + "Continue [c]", + "Step [s]", + "Step N [s ###]", + "Refresh", + "Break [^C]", + "Break All"}; + +static int BtnLkup[6] = { + CMD_CONT, CMD_STEP1, CMD_STEPN, CMD_RFRSH, CMD_BREAK +}; + +#endif + +#endif diff --git a/bochs/gui/gtk_enh_dbg_osdep.cc b/bochs/gui/gtk_enh_dbg_osdep.cc new file mode 100755 index 00000000..d965a8c3 --- /dev/null +++ b/bochs/gui/gtk_enh_dbg_osdep.cc @@ -0,0 +1,2393 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// BOCHS ENHANCED DEBUGGER Ver 1.2 +// (C) Chourdakis Michael, 2008 +// http://www.turboirc.com +// +// Modified by Bruce Ewing +// + +#include "config.h" + +#if BX_DEBUGGER && BX_DEBUGGER_GUI + +#include "bochs.h" +#include "enh_dbg.h" + +#include +#include +#include + +// replace the Win32 COLORREF and RGB definitions, for GDK +#define RGB(R,G,B) {(R<<16)|(G<<8)|B,(R*65535)/255,(G*65535)/255,(B*65535)/255} + +// User Customizable Register color table: +// background "register type" colors indexed by RegColor value +const GdkColor ColorList[16] = { + RGB(255,255,255), // white + RGB(200,255,255), // blue (aqua) + RGB(230,230,230), // gray + RGB(248,255,200), // yellow + RGB(216,216,255), // purple + RGB(200,255,200), // green + RGB(255,230,200), // orange + RGB(255,255,255), // more user definable + RGB(255,255,255), + RGB(255,255,255), + RGB(255,255,255), + RGB(255,255,255), + RGB(255,255,255), + RGB(255,255,255), + RGB(255,255,255), + RGB(255,255,255) +}; + +// END of User Customizable settings + +#define TreeParent GtkTreeIter + +void DockResize (int j, Bit32u x); // need some function prototypes +void SetHorzLimits(); +void ParseIDText(const char *x); +void ShowData(); +void UpdateStatus(); +void doUpdate(); +void RefreshDataWin(); +void OnBreak(); +void ParseBkpt(); +void SetBreak(int i); +void ChangeReg(); +int HotKey (int ww, int Alt, int Shift, int Control); +void ActivateMenuItem (int LW); +void SetMemLine (int L); +void MakeBL(TreeParent *tp, bx_param_c *p); + +#define NUM_CHKS 24 // slight overestimate of # of Optmenu items with checkmarks +#define WSChkIdx 19 // "checkmark index" of the first "wordsize" menu item + +// reverse mapping from command indexes to menu item widgets +GtkWidget *Cmd2MI[CMD_IDX_HI - CMD_IDX_LO + 1]; + +// GTK objects and global stuff +GtkTextMark* EndMark; +GtkTreeViewColumn *AllCols[24]; +GtkCellRenderer *LV_Rend[3]; +GdkCursor *SizeCurs; +GdkCursor *DockCurs; +gulong mmov_hID; + + // GTK containers +GtkWidget *window; +GtkWidget *menubar; +GtkWidget *CmdMenu; +GtkWidget *ViewMenu; +GtkWidget *OptMenu; +GtkWidget *HelpMenu; +GtkWidget *MainVbox; +GtkWidget *CmdBHbox; +GtkWidget *CpuBHbox; +GtkWidget *StatHbox; +GtkWidget *TreeTbl; +GtkWidget *IOVbox; +GtkWidget *ScrlWinOut; +GtkWidget *ScrlWin[3]; +GtkWidget *LVHbox; +GtkWidget *LVEvtBox; +GtkWidget *VSepEvtBox1; +GtkWidget *VSepEvtBox2; + + // GTK menu widgets -- titles, then actual menu items +GtkWidget *CmdTitle; +GtkWidget *ViewTitle; +GtkWidget *OptTitle; +GtkWidget *HelpTitle; + +GtkWidget *ContMI; +GtkWidget *StepMI; +GtkWidget *StepNMI; +GtkWidget *BreakMI; +GtkWidget *SetBrkMI; +GtkWidget *WatchWrMI; +GtkWidget *WatchRdMI; +GtkWidget *FindMI; +GtkWidget *RefreshMI; + +GtkWidget *PhyDumpMI; +GtkWidget *LinDumpMI; +GtkWidget *StackMI; +GtkWidget *GDTMI; +GtkWidget *IDTMI; +GtkWidget *PageMI; +GtkWidget *ViewBrkMI; +GtkWidget *MemDumpMI; +GtkWidget *PTreeMI; +GtkWidget *DisAsmMI; + +GtkWidget *ChkMIs[NUM_CHKS]; // menu items with checkmarks + +//GtkWidget *XceptMI; +GtkWidget *DefDisMI; +GtkWidget *SyntaxMI; +GtkWidget *FontMI; +GtkWidget *WrdSizeMI; +GtkWidget *WSmenu; + +GtkWidget *AboutMI; + +GtkWidget *sep1; // menu separators +GtkWidget *sep2; +GtkWidget *sep3; +GtkWidget *sep4; +GtkWidget *sep5; +GtkWidget *sep6; +GtkWidget *sep7; + +GtkWidget *sep8; // separators around the ListViews +GtkWidget *sep9; + + // GTK widgets +GtkWidget *CmdBtn[5]; // "command" buttonrow +GtkWidget *CpuBtn[BX_MAX_SMP_THREADS_SUPPORTED]; // "CPU" buttonrow +GtkWidget *CpuB_label[BX_MAX_SMP_THREADS_SUPPORTED]; // "labels" on CPU buttons + +GtkWidget *Stat[4]; // 4 entry "Status Bar" +GtkWidget *StatVSep1; +GtkWidget *StatVSep2; +GtkWidget *StatVSep3; + +GtkWidget *IEntry; // Singleline Input Text Window +GtkWidget *OText; // Multiline, wrapping, Output Text Window + +GtkWidget *PTree; // bochs param_tree TreeView +GtkWidget *LV[3]; // Register, ASM, MemDump / ListViews (TreeViews) + +// HIHI put all these colors in an array, and use #defines for them +// need a "medium gray" color for inactive lists +const GdkColor mgray = RGB(200,200,200); +const GdkColor white = { + 0xffffff, + 0xffff, // need to specify cell background color sometimes + 0xffff, + 0xffff +}; +GdkColor fg_red = RGB(255,0,0); +GdkColor fg_black = RGB(0,0,0); +const GdkColor AsmColors[4] = { + RGB(0,0,0), + RGB(0,100,0), + RGB(150,0,0), + RGB(0,0,200) +}; +const GdkColor PDumpClr[4] = { + RGB(0,0,0), + RGB(255,0,150), + RGB(0,170,255), + RGB(130,255,0) +}; + +unsigned int CurXSize; // last known size of main client window + +int DumpSelRow; // keeps track of "clicks" on MemDump entries +int SelectedEntry; // keeps track of "clicks" on ASM entries +bx_bool UpdateOWflag = FALSE; +bx_bool HitBrkflag = FALSE; +bx_bool ForcingCheck = FALSE; // using a hotkey to flip a menu item checkmark +int KeyStateShft; +int KeyStateAlt; +// guint PrevState = GDK_BUTTON1_MASK; // turn on the "mouseup" bit, to detect the first mousedown +int SizingDelay = 0; +bx_bool EnterSizeMode = FALSE; +unsigned int CurScrX; + +//bx_bool UpdInProgress[3]; // flag -- list update incomplete (not OK to paint) + +char SelMem[260]; // flag array for which list rows are "selected" +char SelAsm[MAX_ASM]; +char SelReg[TOT_REG_NUM + EXTRA_REGS]; + +// "run" the standard dialog box -- get text from the user +bx_bool ShowAskDialog() +{ + bx_bool ret = FALSE; + static GtkWidget *dialog = NULL; + static GtkWidget *AskEntry = NULL; + static GtkWidget *AskPrompt = NULL; + const gchar *entry_text; + + if (dialog == NULL) + { + dialog = gtk_dialog_new (); + gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); + gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, GTK_RESPONSE_OK); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); + } +// HIHI should the "transient" line be INSIDE the dialog creation "if"? -- when I tried it, it crashed? + // The following causes this dialog to stay above the main window +// gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window)); + + gtk_window_set_title (GTK_WINDOW (dialog), ask_str.title); + + if (AskEntry == NULL) + { + AskPrompt = gtk_label_new (ask_str.prompt); + gtk_widget_show (AskPrompt); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), AskPrompt, TRUE, TRUE, 5); + AskEntry = gtk_entry_new (); + // "Enter" (activate) = OK button + gtk_entry_set_activates_default (GTK_ENTRY (AskEntry), TRUE); + // increase the width of the Entry to about 80 chars + gtk_entry_set_width_chars (GTK_ENTRY (AskEntry), 80); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), AskEntry, TRUE, TRUE, 5); + } + + gtk_widget_show (AskEntry); + gtk_label_set_text (GTK_LABEL (AskPrompt), ask_str.prompt); + gtk_widget_grab_focus(AskEntry); // Entry must be visible before it can get focus + // and it must have focus before any new text is set, or the dialog will crash + gtk_entry_set_text (GTK_ENTRY (AskEntry), ask_str.reply); + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) + { + entry_text = gtk_entry_get_text (GTK_ENTRY (AskEntry)); + strcpy (ask_str.reply, entry_text); + ret = TRUE; + } + + // if any text remains in the Entry, the dialog box will crash on its next use + gtk_entry_set_text (GTK_ENTRY (AskEntry), ""); // so clear it + gtk_widget_grab_focus(IEntry); + gtk_widget_hide (dialog); // for reuse! + return ret; +} + +// set all TRUE flags to checked in the Options menu +void InitMenus() +{ +//L exception notify is not implemented yet + menubar = gtk_menu_bar_new(); + CmdMenu = gtk_menu_new(); + ViewMenu = gtk_menu_new(); + OptMenu = gtk_menu_new(); + HelpMenu = gtk_menu_new(); + + CmdTitle = gtk_menu_item_new_with_label("Commands"); // each menu needs a title + ViewTitle = gtk_menu_item_new_with_label("View"); // (and the titles are created as widgets) + OptTitle = gtk_menu_item_new_with_label("Options"); + HelpTitle = gtk_menu_item_new_with_label("Help"); + + gtk_menu_item_set_submenu(GTK_MENU_ITEM(CmdTitle), CmdMenu); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(ViewTitle), ViewMenu); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(OptTitle), OptMenu); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(HelpTitle), HelpMenu); + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), CmdTitle); + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), ViewTitle); + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), OptTitle); + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), HelpTitle); + + // build all the menu items + // Commands Menu + ContMI = gtk_menu_item_new_with_label("Continue [c]\t\t\t\t\tF5"); + StepMI = gtk_menu_item_new_with_label("Step [s]\t\t\t\t\t\tF11"); + StepNMI = gtk_menu_item_new_with_label("Step #...\t\t\t\t\t\tF9"); + BreakMI = gtk_menu_item_new_with_label("Break\t\t\t\t\t\tCtrl+C"); + SetBrkMI = gtk_menu_item_new_with_label("Breakpoint (ASM selected)\t\tF6"); + WatchWrMI = gtk_menu_item_new_with_label("Watch Write (PhysDump selected)\tShift+F6"); + WatchRdMI = gtk_menu_item_new_with_label("Watch Read (PhysDump selected)\tAlt+F6"); + FindMI = gtk_menu_item_new_with_label("Find...\t\t\t\t\t\tCtrl+F"); + RefreshMI = gtk_menu_item_new_with_label("Refresh Screen\t\t\t\t\tF4"); + + // View Menu + PhyDumpMI = gtk_menu_item_new_with_label("Physical MemDump...\tCtrl+F7"); + LinDumpMI = gtk_menu_item_new_with_label("Linear MemDump...\t\tF7"); + StackMI = gtk_menu_item_new_with_label("Stack\t\t\t\tF2"); + GDTMI = gtk_menu_item_new_with_label("GDT\t\t\t\t\tCtrl+F2"); + IDTMI = gtk_menu_item_new_with_label("IDT\t\t\t\t\tShift+F2"); + PageMI = gtk_menu_item_new_with_label("Page Table\t\t\tAlt+F2"); + ViewBrkMI = gtk_menu_item_new_with_label("Breakpoints\t\t\tCtrl+F6"); + MemDumpMI = gtk_menu_item_new_with_label("Current MemDump\t\tEsc"); + PTreeMI = gtk_menu_item_new_with_label("Bochs param_tree\t\tCtrl+F3"); + DisAsmMI = gtk_menu_item_new_with_label("Disassemble...\t\t\tCtrl+D"); + // Options Menu - without checkmarks + DefDisMI = gtk_menu_item_new_with_label("Default disassembled lines..."); + SyntaxMI = gtk_menu_item_new_with_label("Toggle Intel/ATT syntax\t\tF3"); + FontMI = gtk_menu_item_new_with_label ("Font..."); + WrdSizeMI = gtk_menu_item_new_with_label("Set MemDump 'Wordsize'..."); + WSmenu = gtk_menu_new(); + + // Options Menu - with checkmarks + ChkMIs[MODE_BRK] = gtk_check_menu_item_new_with_label("Break on CPU mode change\tShift+F5"); + ChkMIs[ONE_CPU] = gtk_check_menu_item_new_with_label("Show CPU0 only"); + ChkMIs[U_CASE] = gtk_check_menu_item_new_with_label("Text in UPPERCASE"); + ChkMIs[IO_WIN] = gtk_check_menu_item_new_with_label("Show Input/Output Windows"); + ChkMIs[SHOW_BTN] = gtk_check_menu_item_new_with_label("Show Buttons"); + ChkMIs[MD_HEX] = gtk_check_menu_item_new_with_label("MemDump in Hex\t\t\tAlt+F7"); + ChkMIs[MD_ASC] = gtk_check_menu_item_new_with_label("MemDump in ASCII\t\t\tShift+F7"); + ChkMIs[L_END] = gtk_check_menu_item_new_with_label("LittleEndian"); + ChkMIs[IGN_SA] = gtk_check_menu_item_new_with_label("Ignore ASM lines"); + ChkMIs[IGN_NT] = gtk_check_menu_item_new_with_label("Ignore Next at t="); + ChkMIs[R_CLR] = gtk_check_menu_item_new_with_label("Colorize Register Types"); + ChkMIs[E_REG] = gtk_check_menu_item_new_with_label("Show 32bit Registers"); + ChkMIs[S_REG] = gtk_check_menu_item_new_with_label("Show Segment Registers"); + ChkMIs[SYS_R] = gtk_check_menu_item_new_with_label("Show System Registers"); + ChkMIs[C_REG] = gtk_check_menu_item_new_with_label("Show Control Registers"); + ChkMIs[FPU_R] = gtk_check_menu_item_new_with_label("Show MMX/FPU Registers\tAlt+F3"); + ChkMIs[XMM_R] = gtk_check_menu_item_new_with_label("Show SSE Registers\t\tCtrl+F4"); + ChkMIs[D_REG] = gtk_check_menu_item_new_with_label("Show Debug Registers\t\tShift+F4"); +// ChkMIs[T_REG] = gtk_check_menu_item_new_with_label("Show Test Registers"); + ChkMIs[WSChkIdx] = gtk_check_menu_item_new_with_label("1 byte\t\tAlt+1"); + ChkMIs[WSChkIdx+1] = gtk_check_menu_item_new_with_label("2 bytes\t\tAlt+2"); + ChkMIs[WSChkIdx+2] = gtk_check_menu_item_new_with_label("4 bytes\t\tAlt+4"); + ChkMIs[WSChkIdx+3] = gtk_check_menu_item_new_with_label("8 bytes\t\tAlt+8"); + ChkMIs[WSChkIdx+4] = gtk_check_menu_item_new_with_label("16 bytes\t\tAlt+6"); + + // Help Menu + AboutMI = gtk_menu_item_new_with_label("About..."); + + sep1 = gtk_separator_menu_item_new(); // can't reuse menu separators + sep2 = gtk_separator_menu_item_new(); + sep3 = gtk_separator_menu_item_new(); + sep4 = gtk_separator_menu_item_new(); + sep5 = gtk_separator_menu_item_new(); + sep6 = gtk_separator_menu_item_new(); + sep7 = gtk_separator_menu_item_new(); + + // insert all the menu items into each menu + gtk_menu_shell_append(GTK_MENU_SHELL(CmdMenu), ContMI); + gtk_menu_shell_append(GTK_MENU_SHELL(CmdMenu), StepMI); + gtk_menu_shell_append(GTK_MENU_SHELL(CmdMenu), StepNMI); + gtk_menu_shell_append(GTK_MENU_SHELL(CmdMenu), BreakMI); + gtk_menu_shell_append(GTK_MENU_SHELL(CmdMenu), sep1); + gtk_menu_shell_append(GTK_MENU_SHELL(CmdMenu), SetBrkMI); + gtk_menu_shell_append(GTK_MENU_SHELL(CmdMenu), WatchWrMI); + gtk_menu_shell_append(GTK_MENU_SHELL(CmdMenu), WatchRdMI); + gtk_menu_shell_append(GTK_MENU_SHELL(CmdMenu), sep2); + gtk_menu_shell_append(GTK_MENU_SHELL(CmdMenu), FindMI); + gtk_menu_shell_append(GTK_MENU_SHELL(CmdMenu), RefreshMI); + + gtk_menu_shell_append(GTK_MENU_SHELL(ViewMenu), PhyDumpMI); + gtk_menu_shell_append(GTK_MENU_SHELL(ViewMenu), LinDumpMI); + gtk_menu_shell_append(GTK_MENU_SHELL(ViewMenu), StackMI); + gtk_menu_shell_append(GTK_MENU_SHELL(ViewMenu), GDTMI); + gtk_menu_shell_append(GTK_MENU_SHELL(ViewMenu), IDTMI); + gtk_menu_shell_append(GTK_MENU_SHELL(ViewMenu), PageMI); + gtk_menu_shell_append(GTK_MENU_SHELL(ViewMenu), ViewBrkMI); + gtk_menu_shell_append(GTK_MENU_SHELL(ViewMenu), MemDumpMI); + gtk_menu_shell_append(GTK_MENU_SHELL(ViewMenu), sep3); + gtk_menu_shell_append(GTK_MENU_SHELL(ViewMenu), PTreeMI); + gtk_menu_shell_append(GTK_MENU_SHELL(ViewMenu), DisAsmMI); + + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[MODE_BRK]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[ONE_CPU]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), DefDisMI); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), SyntaxMI); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), sep4); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), FontMI); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[U_CASE]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[IO_WIN]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[SHOW_BTN]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), sep5); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[MD_HEX]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[MD_ASC]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[L_END]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), WrdSizeMI); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), sep6); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[IGN_SA]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[IGN_NT]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), sep7); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[R_CLR]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[E_REG]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[S_REG]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[SYS_R]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[C_REG]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[FPU_R]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[XMM_R]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[D_REG]); +// gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[T_REG]); + gtk_menu_shell_append(GTK_MENU_SHELL(HelpMenu), AboutMI); + + gtk_menu_item_set_submenu(GTK_MENU_ITEM(WrdSizeMI), WSmenu); // set up popup menu + gtk_menu_shell_append(GTK_MENU_SHELL(WSmenu), ChkMIs[WSChkIdx]); + gtk_menu_shell_append(GTK_MENU_SHELL(WSmenu), ChkMIs[WSChkIdx+1]); + gtk_menu_shell_append(GTK_MENU_SHELL(WSmenu), ChkMIs[WSChkIdx+2]); + gtk_menu_shell_append(GTK_MENU_SHELL(WSmenu), ChkMIs[WSChkIdx+3]); + gtk_menu_shell_append(GTK_MENU_SHELL(WSmenu), ChkMIs[WSChkIdx+4]); + + // init all the checkmarks + + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[E_REG]), SeeReg[0]); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[S_REG]), SeeReg[1]); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[SYS_R]), SeeReg[2]); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[C_REG]), SeeReg[3]); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[FPU_R]), SeeReg[4]); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[XMM_R]), SeeReg[5]); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[D_REG]), SeeReg[6]); +// gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ShowTRegMI), SeeReg[7]); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[ONE_CPU]), SingleCPU); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[IO_WIN]), ShowIOWindows); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[SHOW_BTN]), ShowButtons); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[U_CASE]), UprCase); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[L_END]), isLittleEndian); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[IGN_SA]), ignSSDisasm); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[IGN_NT]), ignoreNxtT); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[R_CLR]), SeeRegColors); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[WSChkIdx]), TRUE); + if (DumpInAsciiMode == 0) // prevent an illegal value + DumpInAsciiMode = 3; + // I don't know why, but the next 2 "set_active" commands blow up if moved into SpecialInit + if ((DumpInAsciiMode & 2) != 0) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[MD_HEX]), TRUE); + if ((DumpInAsciiMode & 1) != 0) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[MD_ASC]), TRUE); +} + +// add a whole row of text into a ListView, all at once +// Note: LineCount should start at 0 +void InsertListRow(char *ColumnText[], int ColumnCount, int listnum, int LineCount, int grouping) +{ + char tmp[4]; + GtkTreeIter iter; + GtkListStore *Database; + *tmp = 0; + Database = (GtkListStore *) gtk_tree_view_get_model( GTK_TREE_VIEW(LV[listnum]) ); + gtk_list_store_append (GTK_LIST_STORE(Database), &iter); /* Acquire an iterator */ + // some rows of the register list only print 2 columns + // the dump window always prints 18, but the first 17 may be blank and 0 width + if (ColumnCount == 2) + gtk_list_store_set (GTK_LIST_STORE(Database), &iter, 0, ColumnText[0], 1, ColumnText[1], 2, + tmp, 3, (gint) LineCount, -1); + else if (ColumnCount == 3) + { + gtk_list_store_set (GTK_LIST_STORE(Database), &iter, 0, ColumnText[0], 1, ColumnText[1], 2, + ColumnText[2], 3, (gint) LineCount, -1); + } + else + { + // it might be easier to use the gtk_list_store_set_valuesv() function? + gtk_list_store_set (GTK_LIST_STORE(Database), &iter, 0, ColumnText[0], 1, ColumnText[1], + 2, ColumnText[2], 3, ColumnText[3], 4, ColumnText[4], 5, ColumnText[5], + 6, ColumnText[6], 7, ColumnText[7], 8, ColumnText[8], 9, ColumnText[9], + 10, ColumnText[10], 11, ColumnText[11], 12, ColumnText[12], 13, ColumnText[13], + 14, ColumnText[14], 15, ColumnText[15], 16, ColumnText[16], 17, ColumnText[17], 18, (gint) LineCount, -1); + } +} + +void ShowFW() +{ + FWflag = TRUE; // the X version of this should be stubbed +} + +// try to get a list repaint to happen +void Invalidate(int i) +{ + GdkWindow *LstGdk; + LstGdk = gtk_tree_view_get_bin_window (GTK_TREE_VIEW (LV[i])); + gdk_window_invalidate_rect (LstGdk, NULL, TRUE); // rect=NULL means "the whole window" + gtk_widget_queue_draw(LV[i]); // redraw the selected ListView "bin" window +} + +void SetStatusText(int column, const char *buf) +{ + gtk_label_set_text(GTK_LABEL(Stat[column]), buf); +} + +// called by the Find command -- only for LV[ASM] column 2! +void GetLIText(int listnum, int itemnum, int column, char *buf) +{ + char *value; + GtkTreeIter iter; + GtkListStore *Database; + Database = (GtkListStore *) gtk_tree_view_get_model( GTK_TREE_VIEW(LV[listnum]) ); + // get an iter for row # itemnum + gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(Database), &iter, NULL, itemnum); + // pull the text out of "row # iter" at the specified column + gtk_tree_model_get(GTK_TREE_MODEL(Database), &iter, column, &value, -1); + strcpy (buf, value); + g_free(value); +} + +// get a bochs command from the user Input window +void GetInputEntry(char *buf) +{ + const gchar *gcp; + gcp = gtk_entry_get_text(GTK_ENTRY(IEntry)); + strcpy (buf, gcp); +} + +// highlights individual rows in ASM or Mem windows +void SetLIState(int listnum, int itemnum, bx_bool Select) +{ + char *Sel = SelAsm; + int max = MAX_ASM; + if (listnum == 2) + { + Sel = SelMem; + max = 256; + } + if (itemnum >= max) + itemnum = max-1; + Sel[itemnum] = Select; +} + +// Searches ASM or Reg list for the next (or first) selected row +int GetNextSelectedLI(int listnum, int StartPt) +{ + int L = StartPt; + char *Sel = SelAsm; + int end = MAX_ASM; + bx_bool stop = FALSE; + + if (listnum == REG_WND) + { + Sel = SelReg; + end = TOT_REG_NUM + EXTRA_REGS; + } + if (L < -1) + L = -1; + while (stop == FALSE) + { + if (++L >= end) + stop = TRUE; + else + { + if (Sel[L] != FALSE) + stop = TRUE; + } + } + if (L >= end) + return -1; + return L; +} + +// returns the row number of the ASM list that is showing at the top of the window +// it is also easy to calculate AsmPgSize and ListLineRatio here, +// -- they MUST be calculated somewhere in the os_specific code +int GetASMTopIdx() +{ + GtkAdjustment *va; + GtkListStore *Database; + Database = (GtkListStore *) gtk_tree_view_get_model( GTK_TREE_VIEW(LV[ASM_WND]) ); + + AsmPgSize = 0; + va = gtk_tree_view_get_vadjustment ( GTK_TREE_VIEW(LV[ASM_WND]) ); + // calculate the number of vertical "pixels" in one row (as a fraction of the scroll range) + if (AsmLineCount == 0) + return 0; + ListLineRatio = (int) (va->upper - va->lower) / AsmLineCount; + if (ListLineRatio == 0) + return 0; + AsmPgSize = (int) va->page_size / ListLineRatio; + return ((int) va->value / ListLineRatio); +} + +// "pixels" is a multiple of (and therefore proportional to) ListLineRatio +// -- it does not technically have to really be a pixel count +void ScrollASM(int pixels) +{ + GtkAdjustment *va = gtk_tree_view_get_vadjustment ( GTK_TREE_VIEW(LV[ASM_WND]) ); + gtk_adjustment_set_value (GTK_ADJUSTMENT(va), va->value + pixels); +} + +// handle checkmarks in the "wordsize" popup menu +// Note: setting/clearing a checkmark sends an immediate "activate" signal to the associated menuitem +void ToggleWSchecks(int newWS, int oldWS) +{ + if ((bx_bool) gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(ChkMIs[WSChkIdx + newWS])) == FALSE) + { + ForcingCheck = TRUE; // prevent infinite checkmark loops + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[WSChkIdx + newWS]), TRUE); + } + if ((bx_bool) gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(ChkMIs[WSChkIdx + oldWS])) != FALSE) + { + ForcingCheck = TRUE; // prevent infinite checkmark loops + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[WSChkIdx + oldWS]), FALSE); + } +} + +// repack the ScrollWindows into the ListHbox using a new DockOrder +// FirstListIndex is precalculated in MoveLists, so pass in the value +void RepackLists(int FirstListIndex) +{ + gtk_box_pack_start(GTK_BOX(LVHbox), ScrlWin[FirstListIndex], FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(LVHbox), VSepEvtBox1, FALSE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(LVHbox), ScrlWin[(DockOrder& 3) -1], FALSE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(LVHbox), VSepEvtBox2, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(LVHbox), ScrlWin[CurCenterList], TRUE, TRUE, 0); +} + +// unpack the ScrollWindows from the ListHbox, then repack using a new DockOrder +// -- also calculate the X-coords of the "bars" between the lists +void MoveLists() +{ + int i; + gtk_widget_ref (ScrlWin[0]); // make sure the list widgets do not get deleted + gtk_widget_ref (ScrlWin[1]); // when they are removed from their container + gtk_widget_ref (ScrlWin[2]); + gtk_widget_ref (VSepEvtBox1); + gtk_widget_ref (VSepEvtBox2); + gtk_container_remove (GTK_CONTAINER(LVHbox), ScrlWin[0]); + gtk_container_remove (GTK_CONTAINER(LVHbox), ScrlWin[1]); + gtk_container_remove (GTK_CONTAINER(LVHbox), ScrlWin[2]); + gtk_container_remove (GTK_CONTAINER(LVHbox), VSepEvtBox1); + gtk_container_remove (GTK_CONTAINER(LVHbox), VSepEvtBox2); + + CurCenterList = ((DockOrder>>4)& 3) -1; // index of center list + i = (DockOrder >> 8) -1; // index of left list + + RepackLists(i); // pack widgets back into container in new DockOrder + gtk_widget_unref (ScrlWin[0]); + gtk_widget_unref (ScrlWin[1]); // and get rid of the temporary "ref"s + gtk_widget_unref (ScrlWin[2]); + gtk_widget_unref (VSepEvtBox1); + gtk_widget_unref (VSepEvtBox2); + + // use DockOrder to figure out the table X-coordinates of the 2 v-separators + i = ListWidthPix[i]; +// BarClix[0] = i; +// BarClix[1] = i + ListWidthPix[CurCenterList]; + + BottomAsmLA = ~0; // force an ASM autoload next time, to resize it + doDumpRefresh = TRUE; // force a data window refresh on a break + if (AtBreak != FALSE) // can't refresh the windows until a break! + { + doUpdate(); // refresh the ASM and Register windows + RefreshDataWin(); // and whichever data window is up + } +} + +// modify the displayed items in the MainVbox +void VSizeChange() +{ + if (ShowButtons == FALSE) // set the visibility of the Command Buttons + gtk_widget_hide(CmdBHbox); + else + gtk_widget_show(CmdBHbox); + + if (SingleCPU == FALSE) // set the visibility of the CPU Buttons + gtk_widget_show(CpuBHbox); + else + gtk_widget_hide(CpuBHbox); + + if (ShowIOWindows == FALSE) + { + gtk_widget_hide(IOVbox); + GTK_TABLE(TreeTbl)->nrows = 3; // IO windows do not exist, so total table rows = 3 + } + else + { + // Note: if an invisible Entry window contains text and is shown, the program can crash + // so copy out any text, clear the Entry, make it visible, and then reload it + const gchar *gcp; + gcp = gtk_entry_get_text(GTK_ENTRY(IEntry)); + strcpy (tmpcb, gcp); + gtk_entry_set_text(GTK_ENTRY(IEntry),""); + GTK_TABLE(TreeTbl)->nrows = 4; // IO windows exist, so total table rows = 4 + gtk_widget_show(IOVbox); + gtk_widget_grab_focus(IEntry); // Input window loses focus while it is hidden + gtk_entry_set_text(GTK_ENTRY(IEntry),tmpcb); + } + gtk_widget_queue_draw(window); // redraw everything +} + +void TakeInputFocus() +{ + gtk_widget_grab_focus(IEntry); // get the focus back from the VGA window +} + +void MakeListsGray() +{ + if (AtBreak == FALSE) + { + SetStatusText(0, "Running"); + } + else + SetStatusText(0, "Break"); + + // It's good to set the background color OUTSIDE the area of the lists + // -- except that this seems difficult in gtk + // So, the default behavior is not quite as pretty, but it is good enough. +} + +// ParseIDText (*bochs*) calls this when the window needs to be redrawn with new text -- +// funct must not call any GTK functions directly, because it is run from the bochs thread +void SetOutWinTxt() +{ + UpdateOWflag = TRUE; +} + +// in the Win32 version, the caret is placed at the beginning of each selected history line, +// but the exact functionality is not important -- just do what is easy +void SelectHistory(int UpDown) +{ + // the History buffer is circular, so wrap 64 to 0, and -1 to 63 + CommandHistoryIdx = (CommandHistoryIdx + UpDown) & 63; + gtk_entry_set_text(GTK_ENTRY(IEntry),CmdHistory[(CmdHInsert + CommandHistoryIdx) & 63]); +} + +void ClearInputWindow() +{ + gtk_entry_set_text(GTK_ENTRY(IEntry),""); +} + +// set == 0 to clear a check, 1 or 2 to set a check +void SetMenuCheckmark (int set, int ChkIdx) +{ + bx_bool flag = TRUE; + if (set == 0) + flag = FALSE; + if ((bx_bool) gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(ChkMIs[ChkIdx])) != flag) + { + ForcingCheck = TRUE; + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[ChkIdx]), flag); + } +} + +// pass in FALSE or 0 to gray out a menu item +void GrayMenuItem (int flag, int CmdIndex) +{ + GtkWidget *lbl; + GtkWidget *MI = Cmd2MI[CmdIndex - CMD_IDX_LO + 1]; + // convert the Command Index to a Menu Item widget, and get its label + lbl = GTK_BIN(GTK_MENU_ITEM( MI ))->child; + gtk_widget_set_sensitive ( MI, flag ); +} + + +// finish initting things that must be initted in several stages +// -- this function is usually called only once, during the first doUpdate +void SpecialInit() +{ +// Menu items can not be deactivated until after their signals are attached + GrayMenuItem (0, CMD_EREG); + GrayMenuItem (0, CMD_WPTWR); + GrayMenuItem (0, CMD_WPTRD); + GrayMenuItem (0, CMD_PAGEV); +// GrayMenuItem (0, CMD_XCEPT); + if (BX_SMP_PROCESSORS == 1) + GrayMenuItem (0, CMD_ONECPU); + // one or the other MemDump mode must always be left on! (unchangeable) + if ((DumpInAsciiMode & 2) == 0) + GrayMenuItem (0, CMD_MASCII); + if ((DumpInAsciiMode & 1) == 0) + GrayMenuItem (0, CMD_MHEX); + +#if BX_SUPPORT_FPU == 0 + GrayMenuItem (0, CMD_FPUR); +#endif + + if (! CpuSupportSSE) + GrayMenuItem (0, CMD_XMMR); + + doOneTimeInit = FALSE; // make sure this function is never called again +} + +// this routine is stubbed in the GTK version +void RedrawColumns(int listnum) +{ +} + +// autosize the columns that may be used by other dumps, once, on a DViewMode change +void SetAutoSize6_9() +{ + AllCols[6]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; + AllCols[7]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; + AllCols[8]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; + AllCols[9]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; +} + +// Show/Hide the typical pattern of Dump window columns (show the first n, hide the rest out to 17) +void ShowDListCols (int totcols) +{ + int i = 5; + int firsthide = totcols + 5; // convert from a col# to an acolnum + while (++i < firsthide) + AllCols[i]->visible = TRUE; + while (i < 23) + AllCols[i++]->visible = FALSE; +} + +// OS-dependent code that runs before each ListFill routine of each type +void StartListUpdate(int listnum) +{ + static int PrevDV = -1; // type of previous Dump window that was displayed + GtkListStore *Database; + // set the scroll position back to the very top + GtkAdjustment *va = gtk_tree_view_get_vadjustment ( GTK_TREE_VIEW(LV[listnum]) ); + gtk_adjustment_set_value (GTK_ADJUSTMENT(va), 0); + // then clear the database for the list that is updating + Database = (GtkListStore *) gtk_tree_view_get_model( GTK_TREE_VIEW(LV[listnum]) ); + gtk_list_store_clear(GTK_LIST_STORE(Database)); + + // a DumpAlign change is treated just like a DViewMode change + if (DViewMode == VIEW_MEMDUMP && PrevDAD != DumpAlign) + PrevDV = -1; + + // use Upd flag to prevent paint messages, cpu_loop calls, duplicate calls +// UpdInProgress[listnum] = TRUE; + if (ResizeColmns != FALSE || (listnum == DUMP_WND && PrevDV != DViewMode)) + { + // autosize Reg "hex" column, Asm "L.Addr" column + if (listnum == REG_WND) + AllCols[1]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; + else if (listnum == ASM_WND) + AllCols[3]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; + // otherwise, autosize/rename/hide all the proper Dump list columns + else + { + switch (DViewMode) + { + case VIEW_MEMDUMP: + // fix the MemDump column "names" + if (DumpInitted == FALSE) + { + GtkTreeIter iter; + ShowDListCols (18); // show all columns -- must be visible to set col titles! + // reset a "generic" header for col 0 + gtk_tree_view_column_set_title(AllCols[6], "Address"); + gtk_tree_view_column_set_title(AllCols[7], "0"); + gtk_tree_view_column_set_title(AllCols[8], "1"); + gtk_tree_view_column_set_title(AllCols[9], "2"); + gtk_tree_view_column_set_title(AllCols[23], "Ascii"); + SetAutoSize6_9(); // autosize the usual suspects + // add a blank line to "modify the store" -- which will activate autosize + gtk_list_store_append (GTK_LIST_STORE(Database), &iter); /* Acquire an iterator */ + gtk_list_store_set (GTK_LIST_STORE(Database), &iter, 0, "", -1); + } + else + { + AllCols[6]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; + if (PrevDV == VIEW_MEMDUMP) // autosizing address column only? + break; + PrevDAD = DumpAlign; + gtk_tree_view_column_set_title(AllCols[23], "Ascii"); + if ((DumpInAsciiMode & 2) == 0) // hex bit is turned on? + { + // if dumping ONLY in ascii, hide ALL the other columns + ShowDListCols (2); // show only columns 0 and 17 + break; + } + AllCols[7]->visible = TRUE; // columns must be visible to set col titles! + AllCols[8]->visible = TRUE; + AllCols[9]->visible = TRUE; + gtk_tree_view_column_set_title(AllCols[7], "0"); + gtk_tree_view_column_set_title(AllCols[8], "1"); + gtk_tree_view_column_set_title(AllCols[9], "2"); + for (int i = 7 ; i < 24 ; i++) + { + if (((i - 7) & (DumpAlign - 1)) == 0) // either autosize, + { + AllCols[i]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; + AllCols[i]->visible = TRUE; + } + else // or set the column invisible + AllCols[i]->visible = FALSE; + } + } + break; + + case VIEW_GDT: + SetAutoSize6_9(); // autosize the usual suspects + if (PrevDV == VIEW_GDT) // autosizing only? + break; + ShowDListCols (5); // show 4 columns, hide the rest out to 17 + gtk_tree_view_column_set_title(AllCols[6], "Index"); // header for col 0 + gtk_tree_view_column_set_title(AllCols[7], "Base Address"); // header for col 1 + gtk_tree_view_column_set_title(AllCols[8], "Size"); // header for col 2 + gtk_tree_view_column_set_title(AllCols[9], "DPL"); // header for col 3 + gtk_tree_view_column_set_title(AllCols[23], "Info"); // header for col 4 (17) + break; + + case VIEW_IDT: + AllCols[6]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; + if (PrevDV == VIEW_IDT) // autosizing only? + break; + ShowDListCols (2); // show 1 column, hide the rest out to 17 + gtk_tree_view_column_set_title(AllCols[6], "Interrupt"); // header for col 0 + gtk_tree_view_column_set_title(AllCols[23], "L.Address"); // header for col 1 (17) + break; + + case VIEW_PAGING: + AllCols[6]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; + if (PrevDV == VIEW_PAGING) // autosizing only? + break; + ShowDListCols (2); // show 1 column, hide the rest out to 17 + gtk_tree_view_column_set_title(AllCols[6], "L.Address"); // header for col 0 + gtk_tree_view_column_set_title(AllCols[23], "is mapped to P.Address"); // header for col 1 (17) + break; + + case VIEW_STACK: + AllCols[6]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; + AllCols[7]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; + if (PrevDV == VIEW_STACK) // autosizing only? + break; + ShowDListCols (3); // show 2 columns, hide the rest out to 17 + gtk_tree_view_column_set_title(AllCols[6], "L.Address"); // header for col 0 + gtk_tree_view_column_set_title(AllCols[7], "Value"); // header for col 1 + gtk_tree_view_column_set_title(AllCols[23], "(dec.)"); // header for col 2 (17) + break; + + case VIEW_BREAK: + AllCols[6]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; + AllCols[7]->column_type = GTK_TREE_VIEW_COLUMN_AUTOSIZE; + if (PrevDV == VIEW_STACK) // autosizing only? + break; + ShowDListCols (3); // show 2 columns, hide the rest out to 17 + gtk_tree_view_column_set_title(AllCols[6], "Address"); // header for col 0 + gtk_tree_view_column_set_title(AllCols[7], "Enabled"); // header for col 1 + gtk_tree_view_column_set_title(AllCols[23], "ID"); // header for col 2 (17) + } + PrevDV = DViewMode; + } + } +} + +void EndListUpdate(int listnum) +{ + int i; + +// UpdInProgress[listnum] = FALSE; // It's OK to paint the listview now + // clear selections for each list on a list update + if (listnum == REG_WND) + { + i = TOT_REG_NUM + EXTRA_REGS; + while (--i >= 0) + SelReg[i] = 0; + } + else if (listnum == ASM_WND) + { + i = MAX_ASM; + while (--i >= 0) + SelAsm[i] = 0; + } + else if (DViewMode == VIEW_MEMDUMP) + { + i = 256; + while (--i >= 0) + SelMem[i] = 0; + } + + // AUTOSIZE turns off "user resize" mode! Turning resize mode back on will force + // autosize back into GROW_ONLY mode -- which is what I want, anyway. + i = 23; + while (--i >= 0) + { + // the 3rd column in Reg and Asm lists is not resizable + if (i != 2 && i != 5) + gtk_tree_view_column_set_resizable (AllCols[i], TRUE); + } +// Invalidate (listnum); +} + +void DispMessage(const char *msg, const char *title) +{ + GtkWidget *dialog; + dialog = gtk_message_dialog_new(GTK_WINDOW(window), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "%s", msg); + gtk_window_set_title(GTK_WINDOW(dialog), title); + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); +} + +// hide/clear param_tree window when showing a different MemDump window (GDT, IDT, etc.) +void HideTree() +{ + GtkTreeStore *treestore; + if (DViewMode != VIEW_PTREE) + return; + treestore = (GtkTreeStore *) gtk_tree_view_get_model( GTK_TREE_VIEW(PTree) ); + gtk_container_remove (GTK_CONTAINER(ScrlWin[2]),PTree); + gtk_container_add (GTK_CONTAINER(ScrlWin[2]), LV[2]); + gtk_tree_store_clear(GTK_TREE_STORE(treestore)); +} + +// exit GDT/IDT/Paging/Stack/Tree -- back to the MemDump window +void ShowMemData(bx_bool initting) +{ + int i = 1; + if (LinearDump == FALSE) + i = 0; + if (initting != FALSE) + { + GrayMenuItem (0, CMD_WPTWR); + GrayMenuItem (0, CMD_WPTRD); + // update column 0 to say whether its physmem or linear + gtk_tree_view_column_set_title(AllCols[6], DC0txt[i]); + } + HideTree(); + gtk_widget_show(LV[DUMP_WND]); + DViewMode = VIEW_MEMDUMP; // returning to MemDump mode + if (DumpInitted == FALSE) + { + StartListUpdate(DUMP_WND); // autosize for a blank MemDump window + EndListUpdate(DUMP_WND); + } + else + { + gtk_tree_view_column_set_title(AllCols[6], DC0txt[i]); + if (AtBreak == FALSE) + doDumpRefresh = TRUE; + else + ShowData(); // repopulates & resizes all columns + } +} + +// create the top layer of a parameter tree TreeView +void FillPTree() +{ + int n; + GtkTreeStore *treestore; + extern bx_list_c *root_param; + // Note: don't multithread this display -- the user expects it to complete + if (DViewMode != VIEW_PTREE) + { + gtk_container_remove (GTK_CONTAINER(ScrlWin[2]),LV[2]); + gtk_container_add (GTK_CONTAINER(ScrlWin[2]), PTree); + } + doDumpRefresh = FALSE; + treestore = (GtkTreeStore *) gtk_tree_view_get_model( GTK_TREE_VIEW(PTree) ); + gtk_tree_store_clear(GTK_TREE_STORE(treestore)); + // Note: all tree strings are hardcoded to be in tmpcb -- don't change! + n = root_param->get_size(); + for (int i=0; iget(i)); + gtk_widget_show(PTree); +} + +void MakeTreeChild (TreeParent *h_P, int ChildCount, TreeParent *h_TC) +{ + GtkTreeStore *treestore; + treestore = (GtkTreeStore *) gtk_tree_view_get_model( GTK_TREE_VIEW(PTree) ); + gtk_tree_store_append(GTK_TREE_STORE(treestore), h_TC, h_P); // create the "leaf" + gtk_tree_store_set(GTK_TREE_STORE(treestore), h_TC, 0, tmpcb, -1); // and put a name (+ data) on it +} + +bx_bool NewFont() +{ + char *ofn; + if (AtBreak == FALSE) + return FALSE; + // need to know the current font, to highlight it + g_object_get( G_OBJECT( LV_Rend[0] ), "font", &ofn, NULL ); + GtkWidget *widget = gtk_font_selection_dialog_new ("Choose primary font"); + gtk_font_selection_dialog_set_font_name (GTK_FONT_SELECTION_DIALOG(widget), ofn); + if (gtk_dialog_run (GTK_DIALOG (widget)) == GTK_RESPONSE_OK) + { + int i, width; + char *fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(widget)); + g_object_set( G_OBJECT( LV_Rend[0] ), "font", fontname, NULL ); + g_object_set( G_OBJECT( LV_Rend[1] ), "font", fontname, NULL ); + g_object_set( G_OBJECT( LV_Rend[2] ), "font", fontname, NULL ); + g_free (fontname); + // calculate a new value for OneCharWide + PangoLayout * layout = gtk_widget_create_pango_layout (LV[0], "M"); + PangoFontDescription * fontdesc; + g_object_get( G_OBJECT( LV_Rend[0] ), "font-desc", &fontdesc, NULL ); + pango_layout_set_font_description (layout, fontdesc); + pango_layout_get_pixel_size (layout, &width, &i); + pango_font_description_free (fontdesc); + g_object_unref (layout); + OneCharWide = width; // The "width" I'm getting is about half what I expect +// OneCharWide = width >> 1; // pretend that an average char width is half an "M" + if (OneCharWide > 12) OneCharWide = 12; + } + g_free (ofn); + gtk_widget_destroy (widget); + + return TRUE; +} + +// turn off any current sizing/docking mode +void sizing_cancel() +{ + // cancel presize, size, predock, and dock modes + if (Sizing != 0) + { + gtk_event_box_set_above_child (GTK_EVENT_BOX(LVEvtBox), FALSE); + gtk_event_box_set_above_child (GTK_EVENT_BOX(VSepEvtBox1), TRUE); + gtk_event_box_set_above_child (GTK_EVENT_BOX(VSepEvtBox2), TRUE); + if (Sizing < 10) // cancel (p)resize mode motion detection + g_signal_handler_disconnect (LVEvtBox, mmov_hID); + gdk_window_set_cursor (GTK_WIDGET(LVEvtBox)->window, NULL); // change the cursor to normal + Sizing = 0; + } + EnterSizeMode = FALSE; + SizingDelay = 0; + SizeList = 0; + xClick = -1; +} + +// conditionally begin a resize operation +void enter_resize_mode() +{ + // need reasonably accurate column widths in horz. limit calculations -- update widths + int width0, width1; + gint totwidth; + gint height; + EnterSizeMode = FALSE; // presize mode may never have reset this + // a GtkAllocation structure (inside every widget) is a rectangle: relative x, y, + width & height + width0 = ScrlWin[0]->allocation.width; + ListWidthPix[0] = width0; + width1 = ScrlWin[1]->allocation.width; + ListWidthPix[1] = width1; + + gdk_drawable_get_size (window->window, &totwidth, &height); + ListWidthPix[2] = totwidth - (width0 + width1); + + if (Sizing < 0) // in presize mode? -- enter full resize mode + SetHorzLimits(); +} + +// begin a pre-dock operation -- cancel if a mouseup event happens +void Set_PreDock(int ListNum, GdkEventButton *event) +{ + // Sadly, in order to narrow the mousedown event to only the ListView (without the scrollbars) + // information seems to get lost about which button is being pressed + // -- but the button info seems not reliable anyway (currently) so it must be lived with + + // enter pre-dock mode, autoactivate full docking mode in 2 VGAW refresh time ticks + xClick = (unsigned int) (event->x_root + 0.5); + yClick = (unsigned int) (event->y_root + 0.5); + SizeList = ListNum + 10; + SizingDelay = 2; +} + +// Select one entry in Register ListView +gboolean RegMouseDown_cb(GtkWidget *widget, GdkEventButton *event, gpointer data) +{ + int row; + GtkTreePath *path; + gint *pathdat; + bx_bool onrow; + + Set_PreDock (0, event); + GrayMenuItem (0, CMD_WPTWR); // disable watchpoints for physdumps (not selected) + GrayMenuItem (0, CMD_WPTRD); + GrayMenuItem (1, CMD_BRKPT); // enable ASM breakpoints (window is selected by default) + row = TOT_REG_NUM + EXTRA_REGS; + while (--row >= 0) + SelReg[row] = 0; + onrow = (bx_bool) gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(LV[0]), + (gint) (event->x + 0.5), (gint) (event->y + 0.5), &path, NULL, NULL, NULL); + if (onrow == FALSE) + return FALSE; + pathdat = gtk_tree_path_get_indices (path); + row = (int) *pathdat; + gtk_tree_path_free (path); + if (row >= TOT_REG_NUM + EXTRA_REGS || row < 0) + row = TOT_REG_NUM + EXTRA_REGS -1; + SelReg[row] = TRUE; + Invalidate (REG_WND); + + return FALSE; +} + +// Select multiple entries in ASM ListView +gboolean AsmMouseDown_cb(GtkWidget *widget, GdkEventButton *event, gpointer data) +{ + GtkTreePath *path; + gint *pathdat; + bx_bool onrow; + + Set_PreDock (1, event); + GrayMenuItem (0, CMD_WPTWR); // disable watchpoints for physdumps (not selected) + GrayMenuItem (0, CMD_WPTRD); + GrayMenuItem (1, CMD_BRKPT); // enable ASM breakpoints (window is selected) + if ((event->state & GDK_CONTROL_MASK) == 0) + { + int i = MAX_ASM; + while (--i >= 0) + SelAsm[i] = 0; + } + onrow = (bx_bool) gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(LV[1]), + (gint) (event->x + 0.5), (gint) (event->y + 0.5), &path, NULL, NULL, NULL); + if (onrow == FALSE) + return FALSE; + pathdat = gtk_tree_path_get_indices (path); + SelectedEntry = (int) *pathdat; + gtk_tree_path_free (path); + if (SelectedEntry >= MAX_ASM || SelectedEntry < 0) + SelectedEntry = MAX_ASM -1; + SelAsm[SelectedEntry] ^= 1; + Invalidate (ASM_WND); + return FALSE; +} + +// Select multiple entries in Phys or Linear Memdump ListView +gboolean MemMouseDown_cb(GtkWidget *widget, GdkEventButton *event, gpointer data) +{ + int column, cellx; + GtkTreePath *path; + gint *pathdat; + bx_bool onrow; + + Set_PreDock (2, event); + if (DViewMode != VIEW_MEMDUMP && DViewMode != VIEW_BREAK) + return FALSE; + if ((event->state & GDK_CONTROL_MASK) == 0) + { + int i = 256; + while (--i >= 0) + SelMem[i] = 0; + } + onrow = (bx_bool) gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(LV[2]), + (gint) (event->x + 0.5), (gint) (event->y + 0.5), &path, NULL, NULL, NULL); + if (onrow == FALSE) + return FALSE; + pathdat = gtk_tree_path_get_indices (path); + DumpSelRow = (int) *pathdat; + gtk_tree_path_free (path); + + // handle enabling/disabling watchpoint menu items + if (LinearDump == FALSE && DViewMode == VIEW_MEMDUMP) + { + GrayMenuItem (1, CMD_WPTWR); // enable watchpoints for physdumps + GrayMenuItem (1, CMD_WPTRD); + } + else + { + GrayMenuItem (0, CMD_WPTWR); // disable watchpoints for lineardumps + GrayMenuItem (0, CMD_WPTRD); + } + if (DViewMode != VIEW_MEMDUMP) // VIEW_BREAK handling is complete now + { + GrayMenuItem (1, CMD_BRKPT); // enable ASM breakpoints (window is selected by default) + return FALSE; + } + GrayMenuItem (0, CMD_BRKPT); // disable ASM breakpoints (window is not selected) + + cellx = 0; + column = 6; // loop over the Mem window columns, 6 to 23 + + while (event->x >= cellx && column < 23) + { + int j = cellx += AllCols[column]->width; + if (event->x >= j){ + ++column; + cellx = j; + } + } + if (DumpSelRow >= 256 || DumpSelRow < 0) + DumpSelRow = 255; + KeyStateShft = event->state & GDK_SHIFT_MASK; + KeyStateAlt = event->state & GDK_MOD1_MASK; + SelMem[DumpSelRow] ^= 1; + // only set the SelDataAddy for memdumps with a wordsize of 1 + if (DumpAlign == 1 && column > 6) + { + SA_valid = TRUE; + SelectedDataAddress = DumpStart + (DumpSelRow*16) + (column - 7); + } + Invalidate (DUMP_WND); + return FALSE; +} + +// Change the CPU display +void CPUb_cb(GtkWidget *widget, gpointer CPUnum) // "CPUnum" is the value supplied at handler creation +{ + unsigned int newCPU = GPOINTER_TO_INT( CPUnum ); + if (CurrentCPU != newCPU) + { + // change text on CurrentCPU button to lowercase and BOLD with markup + strcpy (tmpcb, "cpu0"); + tmpcb[6] = CurrentCPU + '0'; + gtk_label_set_markup (GTK_LABEL(CpuB_label[CurrentCPU]), tmpcb); + // change text on newCPU button to uppercase and BOLD with markup + strcpy (tmpcb, "CPU0"); + tmpcb[6] = newCPU + '0'; + gtk_label_set_markup (GTK_LABEL(CpuB_label[newCPU]), tmpcb); + CurrentCPU = newCPU; + BottomAsmLA = ~0; // force an ASM autoload, to repaint + PrevPtime = 0; // force a full update + if (AtBreak != FALSE) // if at a break, pretend it just happened + OnBreak(); // refresh the ASM and Register windows + } +} + +// calls the proper GUI command on activate events -- non breaking +void nbCmd_cb(GtkWidget *widget, gpointer CmdIdx) // "CmdIdx" is the value supplied at handler creation +{ + if (ForcingCheck == FALSE) // using a hotkey to flip a menu item checkmark? + ActivateMenuItem (GPOINTER_TO_INT (CmdIdx)); + ForcingCheck = FALSE; +} + +// calls the proper GUI command on activate events, with a sim break +void Cmd_cb(GtkWidget *widget, gpointer CmdIdx) // "CmdIdx" is the value supplied at handler creation +{ + if (AtBreak == FALSE) + { +// DoBreak = TRUE; -- for multithreading + SIM->debug_break(); // On a menu click always break (with some exceptions) + } + ActivateMenuItem (GPOINTER_TO_INT (CmdIdx)); +} + +// code to run on exit -- arguments are ignored +void Close_cb(GtkWidget *widget, gpointer data) +{ + GtkListStore *Database; + GtkTreeStore *treestore; + // clear all the "store" databases + Database = (GtkListStore *) gtk_tree_view_get_model( GTK_TREE_VIEW(LV[0]) ); + gtk_list_store_clear(GTK_LIST_STORE(Database)); + Database = (GtkListStore *) gtk_tree_view_get_model( GTK_TREE_VIEW(LV[1]) ); + gtk_list_store_clear(GTK_LIST_STORE(Database)); + Database = (GtkListStore *) gtk_tree_view_get_model( GTK_TREE_VIEW(LV[2]) ); + gtk_list_store_clear(GTK_LIST_STORE(Database)); + treestore = (GtkTreeStore *) gtk_tree_view_get_model( GTK_TREE_VIEW(PTree) ); + gtk_tree_store_clear(GTK_TREE_STORE(treestore)); + + bx_user_quit = 1; + SIM->debug_break(); + // holding one extra reference to both ScrlWin[2] widgets + // but I "sank" PTree myself, so it is my understanding that I need to "destroy" it myself + gtk_widget_destroy (PTree); + gtk_widget_unref (PTree); + gtk_widget_unref (LV[2]); + gdk_cursor_unref (SizeCurs); + gdk_cursor_unref (DockCurs); + + gtk_main_quit(); + debug_cmd_ready = TRUE; // kill the "get command sleep loop" + bx_dbg_quit_command(); // it's OK to call this from the "wrong" thread +} + +// there is only one widget that receives keystrokes, the Input Entry widget +// -- process those keydowns for hotkeys and special keys +gboolean keydown_event_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + gboolean ret = FALSE; // assume the key is NOT a hotkey -- enter it into the widget + int key = (int) (event->keyval & 0xffff); + int Control, Shift, Alt; + Control= Shift= Alt= 0; + if ((event->state & GDK_CONTROL_MASK) != 0) + Control = -1; + if ((event->state & GDK_SHIFT_MASK) != 0) + Shift = -1; + if ((event->state & GDK_MOD1_MASK) != 0) // this is the Alt key mask + Alt = -1; + + switch (event->keyval) + { + case 'c': + case 'd': + case 'f': + if (Control == 0) break; + key &= 0xdf; // convert to upper case + case VK_UP: + case VK_DOWN: + case VK_PRIOR: + case VK_NEXT: + case VK_ESCAPE: + case VK_F2: + case VK_F3: + case VK_F4: + case VK_F5: + case VK_F6: + case VK_F7: + case VK_F8: + case VK_F9: + case VK_F11: + case VK_RETURN: + HotKey (key, Alt, Shift, Control); + ret = TRUE; + } + return ret; +} + +// Input window appears to be hidden -- main window received a keydown. +// Force the event to redirect to the hidden IEntry widget +gboolean redirect_keydown(GtkWidget *widget, GdkEvent *event, gpointer data) +{ + // send the event ONLY to IEntry -- do not try to propogate it beyond + gtk_widget_event(IEntry, event); + return TRUE; +} + +// table (that contains the main windows!) is being resized/moved +// Note: the window gets MANY of these events where the size remains constant +gboolean TblSizeEvent(GtkWidget *widget, GdkEventConfigure *event, gpointer data) +{ + int i, j, k; + bx_bool unchanged = FALSE; + gint WinSizeX; + gint WinSizeY; + GdkWindow *TblGdk = gtk_widget_get_parent_window(TreeTbl); + + gdk_drawable_get_size (TblGdk, &WinSizeX, &WinSizeY); + + // don't "resize" on minimize, if window is too small, or if width is (almost) unchanged + // -- five pixels spread over 3 windows is negligible + if (CurXSize > (unsigned int)WinSizeX - 8 && CurXSize <= (unsigned int)WinSizeX) + unchanged = TRUE; + if (WinSizeY > 100 && WinSizeX > 150 && unchanged == FALSE) + { + CurXSize = WinSizeX -4; // assume 4 pixels total for the two VSeparators + + // need to recalculate List widths, with the same proportions as before + i = ListWidthPix[0] + ListWidthPix[1] + ListWidthPix[2]; + if (i == 0) + i = 1; + j = (ListWidthPix[2] * CurXSize) / i; + k = (ListWidthPix[1] * CurXSize) / i; + i = OneCharWide << 2; + if (j < i) j = i; + if (k < i) k = i; + ListWidthPix[0] = CurXSize - k - j; // Register list + ListWidthPix[1] = k; // Asm + ListWidthPix[2] = j; // MemDump + ListVerticalPix = (WinSizeY * 3) /4; + // set the size of the two ScrlWins that are not in the middle + // (the middle one automatically takes the rest) + i= CurCenterList -1; + if (i < 0) // wrap -1 to 2 + i = 2; + // -1 means "let the window manager decide how big to make it" + gtk_widget_set_size_request(ScrlWin[i], ListWidthPix[i], -1); + i = CurCenterList + 1; + if (i == 3) // wrap 3 to 0 + i = 0; + gtk_widget_set_size_request(ScrlWin[i], ListWidthPix[i], -1); + } + return FALSE; +} + +// Note: for some reason, the path shouldn't be freed +void Reg_DblClick (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) +{ + sizing_cancel(); + if (AtBreak == FALSE) + return; + ChangeReg(); +} + +void Asm_DblClick (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) +{ + sizing_cancel(); + if (AtBreak == FALSE) + return; + SetBreak(SelectedEntry); +} + +void Mem_DblClick (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) +{ + sizing_cancel(); + if (AtBreak == FALSE || (DViewMode != VIEW_MEMDUMP && DViewMode != VIEW_BREAK)) + return; + + if (DViewMode == VIEW_MEMDUMP) + { + if (KeyStateShft != 0 && LinearDump == FALSE) + SetWatchpoint(&num_write_watchpoints,write_watchpoint); + + else if (KeyStateAlt != 0 && LinearDump == FALSE) + SetWatchpoint(&num_read_watchpoints,read_watchpoint); + + else +//L HIHI Fix how this works in the Windoze version to match GTK? + SetMemLine(DumpSelRow); + } + else // doubleclick to delete a breakpoint in Breakpoint dump + { +//L HIHI pre-test DumpSelRow < 256 + if (DumpSelRow < WWP_BaseEntry) + { + if (BrkpIDMap[DumpSelRow] == 0) + ; // dblclick was on an invalid row + else if (DumpSelRow > EndPhyEntry) + bx_dbg_del_vbreak(BrkpIDMap[DumpSelRow]); // delete Virtual Brk + else if (DumpSelRow > EndLinEntry) + bx_dbg_del_pbreak(BrkpIDMap[DumpSelRow]); // delete Phy Brkpt + else + { + bx_dbg_del_lbreak(BrkpIDMap[DumpSelRow]); // delete Lin Brkpt + ParseBkpt(); // get a new set of linear breakpoints + Invalidate (1); // breakpoint colors may have changed + } + } + else if (DumpSelRow >= WWP_BaseEntry && DumpSelRow < WWP_BaseEntry + WWPSnapCount) + { + // if a watchpoint was clicked, get its index (0 to 15) + int i = DumpSelRow - WWP_BaseEntry; + if (WWP_Snapshot[i] == write_watchpoint[i].addr) + DelWatchpoint(write_watchpoint, &num_write_watchpoints, i); + } + else if (DumpSelRow >= RWP_BaseEntry && DumpSelRow < RWP_BaseEntry + RWPSnapCount) + { + int i = DumpSelRow - RWP_BaseEntry; + if (RWP_Snapshot[i] == read_watchpoint[i].addr) + DelWatchpoint(read_watchpoint, &num_read_watchpoints, i); + } + RefreshDataWin(); // show the NEW set of break/watchpoints + } +} + +// enforce that resize moves remain within the window +gboolean LvLeave(GtkWidget *widget, GdkEventCrossing *event, gpointer data) +{ + if (Sizing == 0 && xClick < 0) // anything to cancel? + return FALSE; + // calculate the position of the top left corner of the LV Event Box + unsigned int x_org = (unsigned int) (event->x_root - event->x + 0.5); + unsigned int y_org = (unsigned int) (event->y_root - event->y + 0.5); + unsigned int absx = (unsigned int) (event->x_root + 0.5); + unsigned int absy = (unsigned int) (event->y_root + 0.5); + gint width; + gint height; + // get the width and height of the ListView hbox window + gdk_drawable_get_size (event->window, &width, &height); + + // cursor moved outside the box (not just onto a vert. separator)? + if (absx < x_org || absx >= (x_org + width) || absy < y_org || absy >= (y_org + height)) + sizing_cancel(); + return FALSE; +} + +// doing a resizing operation -- keep track of the cursor position +gboolean LV_MouseMove(GtkWidget *widget, GdkEventMotion *event, gpointer data) +{ + int Cur_CliX = (int) (event->x + 0.5); + + if (EnterSizeMode != FALSE) + { + // need the "relative" X coordinate of the cursor (wrt the LVEB window) + int PrevCliX = CurScrX - (int)(event->x_root - event->x + 0.5); + int i= OneCharWide >> 1; + Resize_LoX = PrevCliX - i; // set presize horizontal limits + Resize_HiX = PrevCliX + i; + EnterSizeMode = FALSE; + } + if (Sizing != 0) + { + // enforce horizontal limits of the current resize operation + if (Cur_CliX > Resize_HiX || Cur_CliX < Resize_LoX) + sizing_cancel(); + } + return FALSE; +} + +// begin a resizing operation +gboolean LV_MouseDown(GtkWidget *widget, GdkEventButton *event, gpointer data) +{ +// pre-size mode activated the LVEventBox, and now the user has clicked the mouse + enter_resize_mode(); // updates ListWidthPix, verifies presize mode + return TRUE; +} + +// mouse is on top of a separator between listviews -- enter presize mode +gboolean VsEnter(GtkWidget *widget, GdkEventCrossing *event, gpointer SepNum) +{ + int VsepNum = GPOINTER_TO_INT( SepNum ); + + // turn on presize mode, if some kind of sizing isn't already running + if (Sizing == 0) + { + Sizing = VsepNum - 2; // Sizing = -1 or -2 for "presize" + gdk_window_set_cursor (GTK_WIDGET(LVEvtBox)->window, SizeCurs); + EnterSizeMode = TRUE; + CurScrX = (unsigned int) (event->x_root + 0.5); + gtk_event_box_set_above_child (GTK_EVENT_BOX(LVEvtBox), TRUE); + gtk_event_box_set_above_child (GTK_EVENT_BOX(VSepEvtBox1), FALSE); + gtk_event_box_set_above_child (GTK_EVENT_BOX(VSepEvtBox2), FALSE); + mmov_hID = g_signal_connect (G_OBJECT (LVEvtBox), "motion_notify_event", + G_CALLBACK (LV_MouseMove), NULL); + } + return FALSE; +} + +gboolean LV_MouseUp(GtkWidget *widget, GdkEventButton *event, gpointer data) +{ + SizingDelay = 0; // cancel pre-dock mode on every mouseup + SizeList = 0; // -- this will not affect any other sizing modes + xClick = -1; + return FALSE; +} + +// either cancel or complete a dock or sizing +gboolean LEB_MouseUp(GtkWidget *widget, GdkEventButton *event, gpointer data) +{ + int width0, width1, fList, oldcList, dest; + gint totwidth, heightLV, x, zip; + if (Sizing != 0 || xClick >= 0) // complete a resize or dock operation + { + int cx = (int)(event->x + 0.5); + int cy = (int)(event->y + 0.5); + heightLV = ScrlWin[0]->allocation.height; + gdk_drawable_get_size (window->window, &totwidth, &zip); + dest = fList = (DockOrder >> 8) -1; + + if (Sizing < 10) // complete a resize operation + { + width0 = cx; + width1 = ListWidthPix[fList] - cx; // "delta" pixels (pos or neg) + if (Sizing == 1) // moving Vsep1? + gtk_widget_set_size_request(ScrlWin[fList], cx, -1); + else + { + dest = (DockOrder & 3) -1; + width0 = totwidth - cx - 4; // assume the Vseps are 2 pixels wide + width1 = ListWidthPix[dest] - width0; // "delta" pixels (pos or neg) + gtk_widget_set_size_request(ScrlWin[dest], width0, -1); + } + ListWidthPix[dest] = width0; + ListWidthPix[CurCenterList] += width1; // tack the delta pixels onto ctr list + } + else // complete a Docking operation + { + // get "local" x mouse coordinate value (main window relative) + gdk_window_get_pointer (GTK_WIDGET(LVEvtBox)->window, &x, &zip, NULL); + // verify that mouseup was within a LV window + if (x >= 0 && cy >= 0 && x < totwidth && cy < heightLV) + { + // update the widths of the LVs + width0 = ScrlWin[0]->allocation.width; + ListWidthPix[0] = width0; + width1 = ScrlWin[1]->allocation.width; + ListWidthPix[1] = width1; + ListWidthPix[2] = totwidth - (width0 + width1); + oldcList = CurCenterList; + if ((unsigned) x < ListWidthPix[fList]) + dest = fList; + else if ((unsigned) x < ListWidthPix[fList] + ListWidthPix[CurCenterList]) + dest = CurCenterList; + else dest = (DockOrder & 3) -1; + DockResize (dest, (Bit32u) 0); // ParentX is not used for docking + // if the center list moved, it will not keep its size properly + if (oldcList != CurCenterList) + { + gtk_widget_set_size_request(ScrlWin[CurCenterList], -1, -1); + gtk_widget_set_size_request(ScrlWin[oldcList], ListWidthPix[oldcList], -1); + } + } + } + sizing_cancel(); + } + return TRUE; +} + +// one-time init function to make all the buttons/menu items work +void AttachSignals() +{ + int i; + g_signal_connect (G_OBJECT(window), "destroy", + GTK_SIGNAL_FUNC(Close_cb), (gpointer) NULL); + g_signal_connect (G_OBJECT(CmdBtn[0]), "clicked", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) BtnLkup[0]); + g_signal_connect (G_OBJECT(CmdBtn[1]), "clicked", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) BtnLkup[1]); + g_signal_connect (G_OBJECT(CmdBtn[2]), "clicked", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) BtnLkup[2]); + g_signal_connect (G_OBJECT(CmdBtn[3]), "clicked", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) BtnLkup[3]); + g_signal_connect (G_OBJECT(CmdBtn[4]), "clicked", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) BtnLkup[4]); + + i = BX_SMP_PROCESSORS; + if (i > 1) + { + while (--i >= 0) + g_signal_connect (G_OBJECT(CpuBtn[i]), "clicked", GTK_SIGNAL_FUNC(CPUb_cb), (gpointer) i); + } + +// activate the menu items + g_signal_connect (G_OBJECT(ContMI), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_CONT); + g_signal_connect (G_OBJECT(StepMI), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_STEP1); + g_signal_connect (G_OBJECT(StepNMI), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_STEPN); + g_signal_connect (G_OBJECT(BreakMI), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_BREAK); + g_signal_connect (G_OBJECT(SetBrkMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_BRKPT); + Cmd2MI[CMD_BRKPT - CMD_IDX_LO + 1] = SetBrkMI; + g_signal_connect (G_OBJECT(WatchWrMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_WPTWR); + Cmd2MI[CMD_WPTWR - CMD_IDX_LO + 1] = WatchWrMI; + g_signal_connect (G_OBJECT(WatchRdMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_WPTRD); + Cmd2MI[CMD_WPTRD - CMD_IDX_LO + 1] = WatchRdMI; + g_signal_connect (G_OBJECT(FindMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_FIND); + g_signal_connect (G_OBJECT(RefreshMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_RFRSH); + + g_signal_connect (G_OBJECT(PhyDumpMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_PHYDMP); + g_signal_connect (G_OBJECT(LinDumpMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_LINDMP); + g_signal_connect (G_OBJECT(StackMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_STACK); + g_signal_connect (G_OBJECT(GDTMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_GDTV); + g_signal_connect (G_OBJECT(IDTMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_IDTV); + g_signal_connect (G_OBJECT(PageMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_PAGEV); + Cmd2MI[CMD_PAGEV - CMD_IDX_LO + 1] = PageMI; + g_signal_connect (G_OBJECT(ViewBrkMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_VBRK); + g_signal_connect (G_OBJECT(MemDumpMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_CMEM); + g_signal_connect (G_OBJECT(PTreeMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_PTREE); + g_signal_connect (G_OBJECT(DisAsmMI), "activate", GTK_SIGNAL_FUNC(Cmd_cb), (gpointer) CMD_DISASM); + + g_signal_connect (G_OBJECT(ChkMIs[CHK_CMD_MODEB]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_MODEB); + g_signal_connect (G_OBJECT(ChkMIs[CHK_CMD_ONECPU]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_ONECPU); + Cmd2MI[CMD_ONECPU - CMD_IDX_LO + 1] = ChkMIs[CHK_CMD_ONECPU]; + g_signal_connect (G_OBJECT(DefDisMI), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_DADEF); + g_signal_connect (G_OBJECT(SyntaxMI), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_ATTI); + g_signal_connect (G_OBJECT(FontMI), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_FONT); + g_signal_connect (G_OBJECT(ChkMIs[CHK_CMD_UCASE]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_UCASE); + g_signal_connect (G_OBJECT(ChkMIs[CHK_CMD_IOWIN]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_IOWIN); + g_signal_connect (G_OBJECT(ChkMIs[CHK_CMD_SBTN]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_SBTN); + g_signal_connect (G_OBJECT(ChkMIs[CHK_CMD_MHEX]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_MHEX); + Cmd2MI[CMD_MHEX - CMD_IDX_LO + 1] = ChkMIs[CHK_CMD_MHEX]; + g_signal_connect (G_OBJECT(ChkMIs[CHK_CMD_MASCII]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_MASCII); + Cmd2MI[CMD_MASCII - CMD_IDX_LO + 1] = ChkMIs[CHK_CMD_MASCII]; + g_signal_connect (G_OBJECT(ChkMIs[CHK_CMD_LEND]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_LEND); + g_signal_connect (G_OBJECT(ChkMIs[CHK_CMD_IGNSA]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_IGNSA); + g_signal_connect (G_OBJECT(ChkMIs[CHK_CMD_IGNNT]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_IGNNT); + g_signal_connect (G_OBJECT(ChkMIs[CHK_CMD_RCLR]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_RCLR); + g_signal_connect (G_OBJECT(ChkMIs[CHK_CMD_EREG]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_EREG); + Cmd2MI[CMD_EREG - CMD_IDX_LO + 1] = ChkMIs[CHK_CMD_EREG]; + g_signal_connect (G_OBJECT(ChkMIs[S_REG]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_SREG); + g_signal_connect (G_OBJECT(ChkMIs[SYS_R]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_SYSR); + g_signal_connect (G_OBJECT(ChkMIs[C_REG]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_CREG); + g_signal_connect (G_OBJECT(ChkMIs[FPU_R]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_FPUR); + Cmd2MI[CMD_FPUR - CMD_IDX_LO + 1] = ChkMIs[FPU_R]; + g_signal_connect (G_OBJECT(ChkMIs[XMM_R]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_XMMR); + Cmd2MI[CMD_XMMR - CMD_IDX_LO + 1] = ChkMIs[XMM_R]; + g_signal_connect (G_OBJECT(ChkMIs[D_REG]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_DREG); + Cmd2MI[CMD_DREG - CMD_IDX_LO + 1] = ChkMIs[D_REG]; +// g_signal_connect (G_OBJECT(ChkMIs[T_REG]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_TREG); +// Cmd2MI[CMD_TREG - CMD_IDX_LO + 1] = ChkMIs[T_REG]; + + g_signal_connect (G_OBJECT(AboutMI), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_ABOUT); + + g_signal_connect (G_OBJECT(ChkMIs[WSChkIdx]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_WS_1); + g_signal_connect (G_OBJECT(ChkMIs[WSChkIdx+1]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_WS_2); + g_signal_connect (G_OBJECT(ChkMIs[WSChkIdx+2]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_WS_4); + g_signal_connect (G_OBJECT(ChkMIs[WSChkIdx+3]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_WS_8); + g_signal_connect (G_OBJECT(ChkMIs[WSChkIdx+4]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_WS16); + + g_signal_connect (G_OBJECT (IEntry), "key_press_event", G_CALLBACK (keydown_event_cb), NULL); + g_signal_connect (G_OBJECT (window), "key_press_event", G_CALLBACK (redirect_keydown), NULL); + g_signal_connect (LV[0], "button_press_event", G_CALLBACK (RegMouseDown_cb), NULL); + g_signal_connect (LV[0], "row-activated", GTK_SIGNAL_FUNC(Reg_DblClick), (gpointer) 0); + g_signal_connect (LV[1], "button_press_event", G_CALLBACK (AsmMouseDown_cb), NULL); + g_signal_connect (LV[1], "row-activated", GTK_SIGNAL_FUNC(Asm_DblClick), (gpointer) 1); + g_signal_connect (LV[2], "button_press_event", G_CALLBACK (MemMouseDown_cb), NULL); + g_signal_connect (LV[2], "row-activated", GTK_SIGNAL_FUNC(Mem_DblClick), NULL); + + g_signal_connect (G_OBJECT (LVEvtBox), "leave_notify_event", G_CALLBACK (LvLeave), NULL); + g_signal_connect (G_OBJECT (VSepEvtBox1), "enter_notify_event", G_CALLBACK (VsEnter), (gpointer) 0); + g_signal_connect (G_OBJECT (VSepEvtBox2), "enter_notify_event", G_CALLBACK (VsEnter), (gpointer) 1); + g_signal_connect (G_OBJECT (LVEvtBox), "button_press_event", G_CALLBACK (LV_MouseDown), NULL); + g_signal_connect (G_OBJECT (LVEvtBox), "button_release_event", G_CALLBACK (LEB_MouseUp), NULL); + g_signal_connect (G_OBJECT (LV[0]), "button_release_event", G_CALLBACK (LV_MouseUp), NULL); + g_signal_connect (G_OBJECT (LV[1]), "button_release_event", G_CALLBACK (LV_MouseUp), NULL); + g_signal_connect (G_OBJECT (LV[2]), "button_release_event", G_CALLBACK (LV_MouseUp), NULL); +} + +// force the screen to "get current" every half a second +static gboolean VGAWrefreshTick(GtkWidget *widget) +{ + if (bx_user_quit != FALSE) // may be in the middle of a "destroy" + return FALSE; + if (SizingDelay > 0) + { + GdkDisplay * display = gdk_display_get_default(); + gint x; + gint y; // enter pre-dock mode + int i, j; + --SizingDelay; + gdk_display_get_pointer (display, NULL, &x, &y, NULL); // absolute x and y mouse coords + i = x - xClick; + j = y - yClick; // calculate the pixel delta from the mousedown event to now + if (i < 0) i= -i; + if (j < 0) j= -j; + if ((SizingDelay == 1 && (i > OneCharWide || j > OneCharWide)) || SizingDelay == 0) + { + // transition from predock to full dock mode + xClick = -1; + if (SizeList == 0) return FALSE; + gtk_event_box_set_above_child (GTK_EVENT_BOX(VSepEvtBox1), FALSE); + gtk_event_box_set_above_child (GTK_EVENT_BOX(VSepEvtBox2), FALSE); + gtk_event_box_set_above_child (GTK_EVENT_BOX(LVEvtBox), TRUE); + Sizing = SizeList; // Sizing tells which ListView is being moved + gdk_window_set_cursor (GTK_WIDGET(LVEvtBox)->window, DockCurs); + } + } + UpdateStatus(); + if (PO_Tdelay > 0) // output window is delaying display of a partial line? + { + if (--PO_Tdelay == 0) // on a timeout, add a lf to complete the line + ParseIDText ("\n"); + } + Invalidate (0); + Invalidate (1); + if (DViewMode != VIEW_PTREE) + Invalidate (2); + vgaw_refresh = TRUE; + return TRUE; +} + +// Need to keep the bochs thread and the gtk_main threads separate -- bochs thread must not +// call GTK functions -- so it needs to set flags to initiate OnBreak, and OutputText updates +static gboolean BochsUpdateTick(GtkWidget *widget) +{ + if (bx_user_quit != FALSE) // may be in the middle of a "destroy" + return FALSE; + if (UpdateOWflag != FALSE) + { + // replace the entire Output window's text, then scroll the window to the end + GtkTextBuffer *OBuffer; // pull model out of the widget + UpdateOWflag = FALSE; + OBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(OText)); + gtk_text_buffer_set_text(OBuffer, OutWindow, -1); + gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(OText), EndMark, (gdouble) 0, TRUE, (gdouble) 1, (gdouble) 1); + } + if (HitBrkflag != FALSE) + OnBreak(); + HitBrkflag = FALSE; + return TRUE; +} + + +// called from *bochs* at a simulation break, or other ID command completion -- +// so it must not call GTK functions directly, only through a shared memory flag +void HitBreak() +{ + if (AtBreak == FALSE) + { + AtBreak = TRUE; + StatusChange = TRUE; + } + if (bx_user_quit == FALSE) // may be in the middle of a "destroy" + HitBrkflag = TRUE; +} + +// special paint procedure for any colors on ListViews +void ListClr_PaintCb(GtkTreeViewColumn *col, + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer acolnum) +{ + int colnum = GPOINTER_TO_INT ( acolnum ); + gint rownum = 0; + + if (AtBreak == FALSE) + g_object_set(renderer, "cell-background-gdk", &mgray, "cell-background-set", TRUE, NULL); + else if (colnum <3) + { + // painting REG_WND -- recover the row number for this iter + gtk_tree_model_get (model, iter, 3, &rownum, -1); +//L HIHI verify rownum in all 3 sections + + if (colnum == 0 && SelReg[rownum] != FALSE) // is this row selected? + { + // if selected, foreground of column 0 = white, background = blue + g_object_set(renderer, "foreground-gdk", &white, "foreground-set", TRUE, NULL); + g_object_set(renderer, "cell-background-gdk", &AsmColors[3], "cell-background-set", TRUE, NULL); + return; + } + // set fg (and bg if requested) according to color list + Bit8u ClrFlgs = RegColor[ RitemToRnum[rownum] ]; + // RitemToRnum converts a ListView row number to the corresponding Register number. + // RegColor has the 0x80 bit set if the register is supposed to be red. + // Background color index is in the low nibble of ClrFlgs/RegColor. + if (SeeRegColors != FALSE) + g_object_set(renderer, "cell-background-gdk", &ColorList[ClrFlgs &7], "cell-background-set", TRUE, NULL); + else + g_object_set(renderer, "cell-background-gdk", &white, "cell-background-set", TRUE, NULL); + + if ((ClrFlgs & 0x80) != 0) // should this register be red? + g_object_set(renderer, "foreground-gdk", &fg_red, "foreground-set", TRUE, NULL); + else + g_object_set(renderer, "foreground-gdk", &fg_black, "foreground-set", TRUE, NULL); + } + else if (colnum < 6) + { + // painting ASM_WND -- recover the row number and "Linear Address" for this iter + gtk_tree_model_get (model, iter, 3, &rownum, -1); + bx_address h = (bx_address) AsmLA[rownum]; + + if (colnum == 3 && SelAsm[rownum] != FALSE) // is this row selected? + { + // if selected, foreground of column 0 = white, background = blue + g_object_set(renderer, "foreground-gdk", &white, "foreground-set", TRUE, NULL); + g_object_set(renderer, "cell-background-gdk", &AsmColors[3], "cell-background-set", TRUE, NULL); + g_object_set(renderer, "weight", PANGO_WEIGHT_NORMAL, "weight-set", TRUE, + "style", PANGO_STYLE_NORMAL, "style-set", TRUE, NULL); + return; + } + // clear out any gray background + g_object_set(renderer, "cell-background-gdk", &white, "cell-background-set", TRUE, NULL); + // use an ellipsis ... on the bytes column + if (colnum == 4) + g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, NULL); + else + g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_NONE, "ellipsize-set", TRUE, NULL); + int AsmClrNum = 0; // assume black text + if (h == CurrentAsmLA) + AsmClrNum = 1; // current opcode is colored dark green + int j= BreakCount; + while (--j >= 0) // loop over all breakpoints + { + // brk list is sorted -- if the value goes too low, end the loop + if (BrkLAddr[j] < h) + j = 0; // force the loop to end if it goes too far + else if (BrkLAddr[j] == h) + { + j= 0; + if (h == CurrentAsmLA) + AsmClrNum = 3; // breakpoint @ current opcode = blue + else + AsmClrNum = 2; // active breakpoint is red + } + } + g_object_set(renderer, "foreground-gdk", &AsmColors[AsmClrNum], "foreground-set", TRUE, NULL); + // extra visuals for current RIP and breakpoints -- use bold and italic on mnemonics + if (colnum == 5 && AsmClrNum != 0) + { + if ((AsmClrNum&1) != 0) // current RIP + g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL); + if ((AsmClrNum&2) != 0) // breakpoint + g_object_set(renderer, "style", PANGO_STYLE_ITALIC, "style-set", TRUE, NULL); + } + else + { + g_object_set(renderer, "weight", PANGO_WEIGHT_NORMAL, "weight-set", TRUE, + "style", PANGO_STYLE_NORMAL, "style-set", TRUE, NULL); + } + } + else + { + // painting some kind of dump window -- stack and physdump are special + // clear out any gray background + gtk_tree_model_get (model, iter, 18, &rownum, -1); + g_object_set(renderer, "cell-background-gdk", &white, "cell-background-set", TRUE, NULL); + if (DViewMode == VIEW_STACK) + { + // highlight changed lines in stack + if (rownum < 0 || rownum >= STACK_ENTRIES) // make sure the line # is legal + ; + else if (StackEntChg[rownum] != FALSE) + g_object_set(renderer, "foreground-gdk", &fg_red, "foreground-set", TRUE, NULL); + else + g_object_set(renderer, "foreground-gdk", &fg_black, "foreground-set", TRUE, NULL); + return; + } + + // is this row selected (only applies to Memdump windows)? + if (colnum == 6 && SelMem[rownum] != FALSE && DViewMode == VIEW_MEMDUMP) + { + // if selected, foreground of column 0 = white, background = blue + g_object_set(renderer, "foreground-gdk", &white, "foreground-set", TRUE, NULL); + g_object_set(renderer, "cell-background-gdk", &AsmColors[3], "cell-background-set", TRUE, NULL); + return; + } + // the only other special painting is for Phys Dump columns, with byte DumpAlign (watchpoints) + int DmpClrNum = 0; // assume black text + if (colnum > 6 && DumpAlign == 1 && LinearDump == FALSE && DViewMode == VIEW_MEMDUMP) + { + // For each cell, calculate its equivalent physmem address + // byte offset = 0 means colnum = 7 + bx_phy_address h = (bx_phy_address) DumpStart + 16*rownum + colnum - 7; + int j = num_write_watchpoints; + int i = num_read_watchpoints; + while (j > 0) + { + if (write_watchpoint[--j].addr == h) + { + DmpClrNum = 1; // write watchpoint + j = -1; // on a match j<0 -- else j == 0 + } + } + while (--i >= 0) + { + if (read_watchpoint[i].addr == h) + { + if (j < 0) // BOTH read and write + DmpClrNum = 2; + else + DmpClrNum = 3; // read watchpoint + i = 0; // end the loop on a match + } + } + } + g_object_set(renderer, "foreground-gdk", &PDumpClr[DmpClrNum], "foreground-set", TRUE, NULL); + if (DmpClrNum != 0) + g_object_set(renderer, "cell-background-gdk", &fg_black, "cell-background-set", TRUE, NULL); + } +} + +// build the columns for each of the three main lists +void MakeList(int listnum, const char *ColNameArray[]) +{ + int i; + int nColumns = 3; + char txt[4]; + GtkListStore *Database; // "model" that contains the actual data + GtkCellRenderer *renderer; // column/cell drawing object + GtkTreeViewColumn *column; // column object + GtkTreeSelection *sel; // need the tree's selection object + + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW( LV[listnum]) ); + gtk_tree_selection_set_mode (sel, GTK_SELECTION_NONE); + + // format for next funct is ( # of columns, datatype, ... ); -- really stupid argument arrangement! + if (listnum != DUMP_WND) + Database = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); + else // 18 columns + { + nColumns = 18; + Database = gtk_list_store_new (19, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); + } + + char *cp = (char*)ColNameArray[0]; + *txt = '0' -1; + txt[1] = 0; + // allocate one renderer for each ListView + renderer = gtk_cell_renderer_text_new(); + LV_Rend[listnum]= renderer; + for (i=0 ; i < nColumns ; i++) + { + // when nColumns == 18, there are only two entries in ColNameArray + if (nColumns == 3) + cp = (char*)ColNameArray[i]; + column = gtk_tree_view_column_new_with_attributes(cp, + renderer, "text", i, NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(LV[listnum]), column); + gtk_tree_view_column_set_cell_data_func(column, renderer, ListClr_PaintCb, (gpointer) ((listnum*3) + i), NULL); + + // Note: column and renderer are not technically "GTK Objects", so don't unref them + cp = txt; + ++*cp; // cheap way to create "0" through "9" and "A" through "F" + if (i == 10) *cp = 'A'; + else if (i == 16) cp = (char*)ColNameArray[1]; + // must store copies of all the columns, to change column titles and other "properties" later + AllCols[(listnum*3) + i] = column; + } + + gtk_tree_view_set_model(GTK_TREE_VIEW(LV[listnum]), GTK_TREE_MODEL(Database)); + // ListView now holds a reference to Database -- don't need the local reference anymore + g_object_unref (G_OBJECT (Database)); +} + +// gtk version of multithreading (doesn't seem to work on some platforms?): +/* +// this function must be called as a new multithread, from the initialization code +// -- it runs the main gtk "event loop", which spawns all the "events", +// "repaint"s, and callbacks -- and never returns, except on a "quit" +gpointer EventLp(gpointer data) +{ + gtk_main(); + g_thread_exit(0); + return (gpointer) NULL; +} + +void MakeGTKthreads() +{ + // do gtk multithreading initialization FIRST -- before ANYTHING ELSE + GError *error = NULL; +#ifndef G_THREADS_ENABLED + printf ("init err1: thread support not enabled in glib\n"); + return FALSE; +#endif +#ifndef G_THREADS_IMPL_POSIX + printf ("init err2: pthread package not found\n"); + return FALSE; +#endif + if (g_thread_supported() == FALSE) + { + printf ("init err3: pthreads/multithreading is not running? No multithread support.\n"); + return FALSE; + } + g_thread_init(NULL); + g_thread_create (EventLp, (gpointer) NULL, FALSE, &error); +} +*/ + +// multithreading using pure posix threads -- not glib threads +void * EventLp(void *data) +{ + gtk_main(); +// pthread_exit(0); + return NULL; +} + +void MakeGTKthreads() +{ + pthread_t hThread; +// g_thread_init(NULL); // if I put this in, it gives me an "undefined reference" of all crazy things! + pthread_create (&hThread, NULL, EventLp, NULL); +} + +// This function must be called immediately after bochs starts +bx_bool OSInit() +{ + int i, argc; + char *argv[2], **argvp; + const char* LColNames[] = { + "Reg Name","Hex Value","Decimal","L.Address","Bytes","Mnemonic","Address","Ascii" + }; + GtkTextBuffer *Tbuffer; + GtkTextIter Titer; + GtkWidget *tmpLbl; + *bigbuf = 0; // gtk flames out if you pass in a NULL -- sheesh + argv[0] = bigbuf; // so I really do have to fake up an "argv" list + argv[1] = NULL; + argvp = argv; + argc = 1; + + // you MUST call gtk_init, even with faked arguments, because it inits GDK and Glib + if (gtk_init_check(&argc, &argvp) == FALSE) + printf ("gtk init failed, can not access display?\n"); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), "Bochs Enhanced Debugger"); + gtk_window_set_default_size(GTK_WINDOW(window), 500, 500); + gtk_window_maximize(GTK_WINDOW(window)); + + MainVbox = gtk_vbox_new(FALSE, 0); // vbox that contains EVERYTHING + + gtk_container_add(GTK_CONTAINER(window), MainVbox); + + // make/init the menu "containers" (shells) and menu items + InitMenus(); + + // build the StatusBar + StatHbox = gtk_hbox_new(FALSE, 3); + Stat[0] = gtk_label_new("Break"); + gtk_label_set_width_chars (GTK_LABEL(Stat[0]), 7); + Stat[1] = gtk_label_new("CPU:"); + gtk_label_set_width_chars (GTK_LABEL(Stat[1]), 23); + Stat[2] = gtk_label_new("t=0"); + gtk_label_set_width_chars (GTK_LABEL(Stat[2]), 19); + Stat[3] = gtk_label_new("IOPL"); + StatVSep1 = gtk_vseparator_new(); + StatVSep2 = gtk_vseparator_new(); + StatVSep3 = gtk_vseparator_new(); + gtk_box_pack_start(GTK_BOX(StatHbox), Stat[0], FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(StatHbox), StatVSep1, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(StatHbox), Stat[1], FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(StatHbox), StatVSep2, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(StatHbox), Stat[2], FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(StatHbox), StatVSep3, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(StatHbox), Stat[3], TRUE, TRUE, 0); + // set LEFT, instead of the default centered "justification" of status text + gtk_misc_set_alignment(GTK_MISC(Stat[0]), (gfloat) 0., (gfloat) 0.5); + gtk_misc_set_alignment(GTK_MISC(Stat[1]), (gfloat) 0., (gfloat) 0.5); + gtk_misc_set_alignment(GTK_MISC(Stat[2]), (gfloat) 0., (gfloat) 0.5); + gtk_misc_set_alignment(GTK_MISC(Stat[3]), (gfloat) 0., (gfloat) 0.5); + + gtk_box_pack_start(GTK_BOX(MainVbox), menubar, FALSE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(MainVbox), StatHbox, FALSE, FALSE, 0); + + // build the table that holds the TreeView/Input&Output windows + TreeTbl = gtk_table_new(4, 1, TRUE); // proportion the remaining space in quarters, vertically + sep8 = gtk_vseparator_new(); // vertical separators between the ListViews + sep9 = gtk_vseparator_new(); + VSepEvtBox1 = gtk_event_box_new(); // seps need event boxes to catch "Enter" events + VSepEvtBox2 = gtk_event_box_new(); + gtk_container_add (GTK_CONTAINER(VSepEvtBox1), sep8); + gtk_container_add (GTK_CONTAINER(VSepEvtBox2), sep9); + gtk_widget_add_events(VSepEvtBox1, GDK_ENTER_NOTIFY_MASK); // masks must be set immediately after creation + gtk_widget_add_events(VSepEvtBox2, GDK_ENTER_NOTIFY_MASK); + IOVbox = gtk_vbox_new(FALSE, 0); // stack the Input Entry and Output TextView vertically + + // create Input window + IEntry = gtk_entry_new(); + gtk_entry_set_max_length (GTK_ENTRY(IEntry), 190); + + // create Output window + ScrlWinOut = gtk_scrolled_window_new( NULL, NULL ); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrlWinOut), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + OText = gtk_text_view_new(); + gtk_text_view_set_editable(GTK_TEXT_VIEW(OText), FALSE); // set it to "read only" + GTK_WIDGET_UNSET_FLAGS(OText, GTK_CAN_FOCUS); + gtk_container_add (GTK_CONTAINER(ScrlWinOut), OText); +// a TextView *already has* a viewport, so DON'T add another one -- or it won't scroll properly! +// gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(ScrlWinOut), OText); + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(OText), GTK_WRAP_WORD); + // create a textmark that always points to the very end of OText + Tbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(OText)); + gtk_text_buffer_get_iter_at_offset (Tbuffer, &Titer, 0); + EndMark = gtk_text_buffer_create_mark (Tbuffer, NULL, &Titer, FALSE); + + gtk_box_pack_start(GTK_BOX(IOVbox), ScrlWinOut, TRUE, TRUE, 0); + gtk_box_pack_end(GTK_BOX(IOVbox), IEntry, FALSE, FALSE, 0); + LVHbox = gtk_hbox_new(FALSE, 0); // to hold the ListView windows + LVEvtBox = gtk_event_box_new(); // need to catch "leave" and "move" events for ListViews + gtk_container_add (GTK_CONTAINER(LVEvtBox), LVHbox); + gtk_widget_add_events(LVEvtBox, GDK_LEAVE_NOTIFY_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK); + + // make Command and CPU Button rows + CmdBHbox = gtk_hbox_new(TRUE, 0); + + for (i=0 ; i < 5 ; i++) + { + CmdBtn[i] = gtk_button_new(); + tmpLbl = gtk_label_new (""); + sprintf (bigbuf, "%s",BTxt[i]); // create "bold" pango markup for buttons + gtk_label_set_markup (GTK_LABEL(tmpLbl), bigbuf); + gtk_container_add (GTK_CONTAINER(GTK_BUTTON(CmdBtn[i])), tmpLbl); + GTK_WIDGET_UNSET_FLAGS(CmdBtn[i], GTK_CAN_FOCUS); + gtk_box_pack_start(GTK_BOX(CmdBHbox), CmdBtn[i], TRUE, TRUE, 0); + } + gtk_box_pack_start(GTK_BOX(MainVbox), CmdBHbox, FALSE, FALSE, 0); + // CPU button row does not exist for only 1 cpu + if (BX_SMP_PROCESSORS > 1) + { + CpuBHbox = gtk_hbox_new(TRUE, 0); + gtk_box_pack_start(GTK_BOX(MainVbox), CpuBHbox, FALSE, FALSE, 0); + i = 0; + strcpy (bigbuf, "CPU0"); // Handle CPU0 specially -- it is "selected" + while (i < BX_SMP_PROCESSORS) + { + CpuBtn[i] = gtk_button_new(); + tmpLbl = gtk_label_new (""); + CpuB_label[i] = tmpLbl; + gtk_label_set_markup (GTK_LABEL(tmpLbl), bigbuf); + gtk_container_add (GTK_CONTAINER(GTK_BUTTON(CpuBtn[i])), tmpLbl); + GTK_WIDGET_UNSET_FLAGS(CpuBtn[i], GTK_CAN_FOCUS); + gtk_box_pack_start(GTK_BOX(CpuBHbox), CpuBtn[i], TRUE, TRUE, 0); + sprintf (bigbuf, "cpu%d",++i); // create the next CPU button label + } + } + + gtk_box_pack_end(GTK_BOX(MainVbox), TreeTbl, TRUE, TRUE, 0); + + gtk_table_attach_defaults(GTK_TABLE(TreeTbl), LVEvtBox, 0, 1, 0, 3); // order = LRTB + gtk_table_attach_defaults(GTK_TABLE(TreeTbl), IOVbox, 0, 1, 3, 4); + VSizeChange(); + + // build the 3 ListView windows + i = 3; + while (--i >= 0) + { + ScrlWin[i] = gtk_scrolled_window_new( NULL, NULL ); + // always want a horizontal scrollbar, to divide lists from Output window visually + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrlWin[i]), GTK_POLICY_ALWAYS, GTK_POLICY_AUTOMATIC); + LV[i] = gtk_tree_view_new(); + GTK_WIDGET_UNSET_FLAGS(LV[i], GTK_CAN_FOCUS); + gtk_container_add (GTK_CONTAINER(ScrlWin[i]), LV[i]); +// all TreeViews *already have* a viewport, so DON'T add another one with the ScrollWindow, or it won't scroll properly! + MakeList(i, &LColNames[i*3]); + } + CurCenterList = ((DockOrder>>4)& 3) -1; // index of center list + RepackLists((DockOrder >> 8) -1); // index of left list + + // make the param_tree widget + GtkTreeViewColumn *treecol; + GtkCellRenderer *renderer; + GtkTreeStore *treestore; + PTree = gtk_tree_view_new(); + treecol = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(treecol, "bochs parameter tree"); + gtk_tree_view_append_column(GTK_TREE_VIEW(PTree), treecol); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(treecol, renderer, TRUE); + gtk_tree_view_column_add_attribute(treecol, renderer, "text", 0); // pull display text from treestore col 0 + GTK_WIDGET_UNSET_FLAGS(PTree, GTK_CAN_FOCUS); + treestore = gtk_tree_store_new(1, G_TYPE_STRING); + gtk_tree_view_set_model(GTK_TREE_VIEW(PTree), GTK_TREE_MODEL(treestore)); + g_object_unref(treestore); // PTree now references treestore itself + + gtk_widget_ref (PTree); // keep an extra ref to both ScrlWin[2] widgets, + gtk_widget_ref (LV[2]); // so they don't get deleted when removed from their container + gtk_object_sink (GTK_OBJECT (PTree)); // the PTree reference is "floating", so "sink" it + + AttachSignals(); // this must be called AFTER InitMenus() + TakeInputFocus(); + gtk_widget_show_all(window); + + // In order to catch Enter/Leave events, you need a widget with a Gdk Window. Neither hboxes or VSeps have them, + // so it is necessary to add event boxes. The windows should be invisible, and when I want them to WORK, they + // must be ON TOP of the child widgets. LVEvtBox is only needed in resize/dock mode. + gtk_event_box_set_visible_window (GTK_EVENT_BOX(LVEvtBox), FALSE); + gtk_event_box_set_above_child (GTK_EVENT_BOX(LVEvtBox), FALSE); + gtk_event_box_set_visible_window (GTK_EVENT_BOX(VSepEvtBox1), FALSE); + gtk_event_box_set_above_child (GTK_EVENT_BOX(VSepEvtBox1), TRUE); + gtk_event_box_set_visible_window (GTK_EVENT_BOX(VSepEvtBox2), FALSE); + gtk_event_box_set_above_child (GTK_EVENT_BOX(VSepEvtBox2), TRUE); + // build the sizing/docking cursors + SizeCurs = gdk_cursor_new (GDK_SB_H_DOUBLE_ARROW); + DockCurs = gdk_cursor_new (GDK_CROSSHAIR); + gdk_cursor_ref (SizeCurs); + gdk_cursor_ref (DockCurs); + + // the OneCharWide pixel value is used to limit docking and resizing movements + int width; + PangoLayout * layout = gtk_widget_create_pango_layout (LV[0], "M"); + PangoFontDescription * fontdesc; + g_object_get( G_OBJECT( LV_Rend[0] ), "font-desc", &fontdesc, NULL ); + pango_layout_set_font_description (layout, fontdesc); + pango_layout_get_pixel_size (layout, &width, &i); + pango_font_description_free (fontdesc); + g_object_unref (layout); + OneCharWide = width; // The "width" I'm getting is about half what I expect +// OneCharWide = width >> 1; // pretend that an average char width is half an "M" + if (OneCharWide > 12) OneCharWide = 12; + +// UpdInProgress[REG_WND] = FALSE; +// UpdInProgress[ASM_WND] = FALSE; +// UpdInProgress[DUMP_WND] = FALSE; + ResizeColmns = TRUE; // force an initial resize on hex, address columns + + g_timeout_add(500, (GSourceFunc) VGAWrefreshTick, (gpointer) window); + g_timeout_add(50, (GSourceFunc) BochsUpdateTick, (gpointer) window); + + g_signal_connect (G_OBJECT (window), "configure_event", G_CALLBACK (TblSizeEvent), NULL); + // could use: gtk_tree_view_column_get_width(), etc. + AllCols[4]->fixed_width = AllCols[4]->width; + AllCols[4]->column_type = GTK_TREE_VIEW_COLUMN_FIXED; + + MakeGTKthreads(); + return TRUE; +} + +// recurse displaying each leaf/branch of param_tree -- with values for each leaf +void MakeBL(TreeParent *h_P, bx_param_c *p) +{ + TreeParent h_new; + bx_list_c *as_list = NULL; + int n = 0; + strcpy (tmpcb, p->get_name()); + int j = strlen (tmpcb); + switch (p->get_type()) + { + case BXT_PARAM_NUM: + if (((bx_param_num_c*)p)->get_base() == BASE_DEC) + sprintf (tmpcb + j,": " FMT_LL "d",((bx_param_num_c*)p)->get64()); + else + sprintf (tmpcb + j,": 0x" FMT_LL "X",((bx_param_num_c*)p)->get64()); + break; + case BXT_LIST: + as_list = (bx_list_c *)p; + n = as_list->get_size(); + break; + case BXT_PARAM_BOOL: + sprintf (tmpcb + j,": %s",((bx_param_bool_c*)p)->get()?"true":"false"); + break; + case BXT_PARAM_ENUM: + sprintf (tmpcb + j,": %s",((bx_param_enum_c*)p)->get_selected()); + break; + case BXT_PARAM_STRING: + if (((bx_param_string_c*)p)->get_options() & bx_param_string_c::RAW_BYTES) + { + char *cp = tmpcb + j; + unsigned char *rp = (unsigned char *)((bx_param_string_c*)p)->getptr(); + char sc = ((bx_param_string_c*)p)->get_separator(); + int k = ((bx_param_string_c*)p)->get_maxsize(); + *(cp++) = ':'; + *(cp++) = ' '; + while (k-- > 0) + { + *(cp++) = AsciiHex[2* *rp]; + *(cp++) = AsciiHex[2* *rp + 1]; + *(cp++) = sc; + } + *--cp = 0; // overwrite the last separator char + } + else + sprintf (tmpcb + j,": %s",((bx_param_string_c*)p)->getptr()); + break; + case BXT_PARAM_DATA: + sprintf (tmpcb + j,": binary data, size=%d",((bx_shadow_data_c*)p)->get_size()); + } + MakeTreeChild (h_P, n, &h_new); + if (n > 0) + { + for (int i=0; iget(i)); // recurse for all children that are lists + } +} + +#endif diff --git a/bochs/gui/gui.cc b/bochs/gui/gui.cc new file mode 100644 index 00000000..c5dac90e --- /dev/null +++ b/bochs/gui/gui.cc @@ -0,0 +1,867 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +#include +#include "iodev.h" +#include "vga.h" +#include "keymap.h" +#include "gui/bitmaps/floppya.h" +#include "gui/bitmaps/floppyb.h" +#include "gui/bitmaps/mouse.h" +#include "gui/bitmaps/reset.h" +#include "gui/bitmaps/power.h" +#include "gui/bitmaps/snapshot.h" +#include "gui/bitmaps/copy.h" +#include "gui/bitmaps/paste.h" +#include "gui/bitmaps/configbutton.h" +#include "gui/bitmaps/cdromd.h" +#include "gui/bitmaps/userbutton.h" +#include "gui/bitmaps/saverestore.h" + +#if BX_WITH_MACOS +# include +#endif + +bx_gui_c *bx_gui = NULL; +extern bx_pc_system_c bx_pc_system; +#define BX_GUI_THIS bx_gui-> +#define LOG_THIS BX_GUI_THIS + +#define BX_KEY_UNKNOWN 0x7fffffff +#define N_USER_KEYS 37 + +typedef struct { + const char *key; + Bit32u symbol; +} user_key_t; + +static user_key_t user_keys[N_USER_KEYS] = +{ + { "f1", BX_KEY_F1 }, + { "f2", BX_KEY_F2 }, + { "f3", BX_KEY_F3 }, + { "f4", BX_KEY_F4 }, + { "f5", BX_KEY_F5 }, + { "f6", BX_KEY_F6 }, + { "f7", BX_KEY_F7 }, + { "f8", BX_KEY_F8 }, + { "f9", BX_KEY_F9 }, + { "f10", BX_KEY_F10 }, + { "f11", BX_KEY_F11 }, + { "f12", BX_KEY_F12 }, + { "alt", BX_KEY_ALT_L }, + { "bksl", BX_KEY_BACKSLASH }, + { "bksp", BX_KEY_BACKSPACE }, + { "ctrl", BX_KEY_CTRL_L }, + { "del", BX_KEY_DELETE }, + { "down", BX_KEY_DOWN }, + { "end", BX_KEY_END }, + { "enter", BX_KEY_ENTER }, + { "esc", BX_KEY_ESC }, + { "home", BX_KEY_HOME }, + { "ins", BX_KEY_INSERT }, + { "left", BX_KEY_LEFT }, + { "menu", BX_KEY_MENU }, + { "minus", BX_KEY_MINUS }, + { "pgdwn", BX_KEY_PAGE_DOWN }, + { "pgup", BX_KEY_PAGE_UP }, + { "plus", BX_KEY_KP_ADD }, + { "right", BX_KEY_RIGHT }, + { "shift", BX_KEY_SHIFT_L }, + { "space", BX_KEY_SPACE }, + { "tab", BX_KEY_TAB }, + { "up", BX_KEY_UP }, + { "win", BX_KEY_WIN_L }, + { "print", BX_KEY_PRINT }, + { "power", BX_KEY_POWER_POWER } +}; + +bx_gui_c::bx_gui_c(void) +{ + put("GUI"); // Init in specific_init + statusitem_count = 0; + framebuffer = NULL; +} + +bx_gui_c::~bx_gui_c() +{ + if (framebuffer != NULL) { + delete [] framebuffer; + } +} + +void bx_gui_c::init(int argc, char **argv, unsigned tilewidth, unsigned tileheight) +{ + BX_GUI_THIS new_gfx_api = 0; + BX_GUI_THIS host_xres = 640; + BX_GUI_THIS host_yres = 480; + BX_GUI_THIS host_bpp = 8; + BX_GUI_THIS dialog_caps = BX_GUI_DLG_RUNTIME | BX_GUI_DLG_SAVE_RESTORE; + + BX_GUI_THIS toggle_method = SIM->get_param_enum(BXPN_MOUSE_TOGGLE)->get(); + BX_GUI_THIS toggle_keystate = 0; + switch (toggle_method) { + case BX_MOUSE_TOGGLE_CTRL_MB: + strcpy(mouse_toggle_text, "CTRL + 3rd button"); + break; + case BX_MOUSE_TOGGLE_CTRL_F10: + strcpy(mouse_toggle_text, "CTRL + F10"); + break; + case BX_MOUSE_TOGGLE_CTRL_ALT: + strcpy(mouse_toggle_text, "CTRL + ALT"); + break; + case BX_MOUSE_TOGGLE_F12: + strcpy(mouse_toggle_text, "F12"); + break; + } + + specific_init(argc, argv, tilewidth, tileheight, BX_HEADER_BAR_Y); + + // Define some bitmaps to use in the headerbar + BX_GUI_THIS floppyA_bmap_id = create_bitmap(bx_floppya_bmap, + BX_FLOPPYA_BMAP_X, BX_FLOPPYA_BMAP_Y); + BX_GUI_THIS floppyA_eject_bmap_id = create_bitmap(bx_floppya_eject_bmap, + BX_FLOPPYA_BMAP_X, BX_FLOPPYA_BMAP_Y); + BX_GUI_THIS floppyB_bmap_id = create_bitmap(bx_floppyb_bmap, + BX_FLOPPYB_BMAP_X, BX_FLOPPYB_BMAP_Y); + BX_GUI_THIS floppyB_eject_bmap_id = create_bitmap(bx_floppyb_eject_bmap, + BX_FLOPPYB_BMAP_X, BX_FLOPPYB_BMAP_Y); + BX_GUI_THIS cdromD_bmap_id = create_bitmap(bx_cdromd_bmap, + BX_CDROMD_BMAP_X, BX_CDROMD_BMAP_Y); + BX_GUI_THIS cdromD_eject_bmap_id = create_bitmap(bx_cdromd_eject_bmap, + BX_CDROMD_BMAP_X, BX_CDROMD_BMAP_Y); + BX_GUI_THIS mouse_bmap_id = create_bitmap(bx_mouse_bmap, + BX_MOUSE_BMAP_X, BX_MOUSE_BMAP_Y); + BX_GUI_THIS nomouse_bmap_id = create_bitmap(bx_nomouse_bmap, + BX_MOUSE_BMAP_X, BX_MOUSE_BMAP_Y); + + BX_GUI_THIS power_bmap_id = create_bitmap(bx_power_bmap, BX_POWER_BMAP_X, BX_POWER_BMAP_Y); + BX_GUI_THIS reset_bmap_id = create_bitmap(bx_reset_bmap, BX_RESET_BMAP_X, BX_RESET_BMAP_Y); + BX_GUI_THIS snapshot_bmap_id = create_bitmap(bx_snapshot_bmap, BX_SNAPSHOT_BMAP_X, BX_SNAPSHOT_BMAP_Y); + //DanceOS Richard Hellwig +#ifdef DANCEOS_RESTORE + BX_GUI_THIS restore_bmap_id = create_bitmap(bx_floppya_bmap, BX_FLOPPYA_BMAP_X, BX_FLOPPYA_BMAP_Y); +#endif + BX_GUI_THIS copy_bmap_id = create_bitmap(bx_copy_bmap, BX_COPY_BMAP_X, BX_COPY_BMAP_Y); + BX_GUI_THIS paste_bmap_id = create_bitmap(bx_paste_bmap, BX_PASTE_BMAP_X, BX_PASTE_BMAP_Y); + BX_GUI_THIS config_bmap_id = create_bitmap(bx_config_bmap, BX_CONFIG_BMAP_X, BX_CONFIG_BMAP_Y); + BX_GUI_THIS user_bmap_id = create_bitmap(bx_user_bmap, BX_USER_BMAP_X, BX_USER_BMAP_Y); + BX_GUI_THIS save_restore_bmap_id = create_bitmap(bx_save_restore_bmap, + BX_SAVE_RESTORE_BMAP_X, BX_SAVE_RESTORE_BMAP_Y); + + // Add the initial bitmaps to the headerbar, and enable callback routine, for use + // when that bitmap is clicked on + + // Floppy A: + BX_GUI_THIS floppyA_status = SIM->get_param_bool(BXPN_FLOPPYA_STATUS)->get(); + if (BX_GUI_THIS floppyA_status) + BX_GUI_THIS floppyA_hbar_id = headerbar_bitmap(BX_GUI_THIS floppyA_bmap_id, + BX_GRAVITY_LEFT, floppyA_handler); + else + BX_GUI_THIS floppyA_hbar_id = headerbar_bitmap(BX_GUI_THIS floppyA_eject_bmap_id, + BX_GRAVITY_LEFT, floppyA_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS floppyA_hbar_id, "Change floppy A: media"); + + // Floppy B: + BX_GUI_THIS floppyB_status = SIM->get_param_bool(BXPN_FLOPPYB_STATUS)->get(); + if (BX_GUI_THIS floppyB_status) + BX_GUI_THIS floppyB_hbar_id = headerbar_bitmap(BX_GUI_THIS floppyB_bmap_id, + BX_GRAVITY_LEFT, floppyB_handler); + else + BX_GUI_THIS floppyB_hbar_id = headerbar_bitmap(BX_GUI_THIS floppyB_eject_bmap_id, + BX_GRAVITY_LEFT, floppyB_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS floppyB_hbar_id, "Change floppy B: media"); + + // CDROM, + // the harddrive object is not initialised yet, + // so we just set the bitmap to ejected for now + BX_GUI_THIS cdromD_hbar_id = headerbar_bitmap(BX_GUI_THIS cdromD_eject_bmap_id, + BX_GRAVITY_LEFT, cdromD_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS cdromD_hbar_id, "Change first CDROM media"); + + // Mouse button + if (SIM->get_param_bool(BXPN_MOUSE_ENABLED)->get()) + BX_GUI_THIS mouse_hbar_id = headerbar_bitmap(BX_GUI_THIS mouse_bmap_id, + BX_GRAVITY_LEFT, toggle_mouse_enable); + else + BX_GUI_THIS mouse_hbar_id = headerbar_bitmap(BX_GUI_THIS nomouse_bmap_id, + BX_GRAVITY_LEFT, toggle_mouse_enable); + BX_GUI_THIS set_tooltip(BX_GUI_THIS mouse_hbar_id, "Enable mouse capture"); + + // These are the buttons on the right side. They are created in order + // of right to left. + + // Power button + BX_GUI_THIS power_hbar_id = headerbar_bitmap(BX_GUI_THIS power_bmap_id, + BX_GRAVITY_RIGHT, power_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS power_hbar_id, "Turn power off"); + // Save/Restore Button + BX_GUI_THIS save_restore_hbar_id = headerbar_bitmap(BX_GUI_THIS save_restore_bmap_id, + BX_GRAVITY_RIGHT, save_restore_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS save_restore_hbar_id, "Save simulation state"); + // Reset button + BX_GUI_THIS reset_hbar_id = headerbar_bitmap(BX_GUI_THIS reset_bmap_id, + BX_GRAVITY_RIGHT, reset_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS reset_hbar_id, "Reset the system"); + // Configure button + BX_GUI_THIS config_hbar_id = headerbar_bitmap(BX_GUI_THIS config_bmap_id, + BX_GRAVITY_RIGHT, config_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS config_hbar_id, "Runtime config dialog"); + //DanceOS Richard Hellwig + // Fake-Restore button +#ifdef DANCEOS_RESTORE + BX_GUI_THIS restore_hbar_id = headerbar_bitmap(BX_GUI_THIS restore_bmap_id, + BX_GRAVITY_RIGHT, restore_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS restore_hbar_id, "Restore..."); +#endif + // Snapshot button + BX_GUI_THIS snapshot_hbar_id = headerbar_bitmap(BX_GUI_THIS snapshot_bmap_id, + BX_GRAVITY_RIGHT, snapshot_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS snapshot_hbar_id, "Save snapshot of the text mode screen"); + // Paste button + BX_GUI_THIS paste_hbar_id = headerbar_bitmap(BX_GUI_THIS paste_bmap_id, + BX_GRAVITY_RIGHT, paste_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS paste_hbar_id, "Paste clipboard text as emulated keystrokes"); + // Copy button + BX_GUI_THIS copy_hbar_id = headerbar_bitmap(BX_GUI_THIS copy_bmap_id, + BX_GRAVITY_RIGHT, copy_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS copy_hbar_id, "Copy text mode screen to the clipboard"); + // User button + BX_GUI_THIS user_hbar_id = headerbar_bitmap(BX_GUI_THIS user_bmap_id, + BX_GRAVITY_RIGHT, userbutton_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS user_hbar_id, "Send keyboard shortcut"); + + if (SIM->get_param_bool(BXPN_TEXT_SNAPSHOT_CHECK)->get()) { + bx_pc_system.register_timer(this, bx_gui_c::snapshot_checker, (unsigned) 1000000, 1, 1, "snap_chk"); + } + + BX_GUI_THIS charmap_updated = 0; + + if (!BX_GUI_THIS new_gfx_api && (BX_GUI_THIS framebuffer == NULL)) { + BX_GUI_THIS framebuffer = new Bit8u[BX_MAX_XRES * BX_MAX_YRES * 4]; + } + show_headerbar(); +} + +void bx_gui_c::cleanup(void) +{ + statusitem_count = 0; +} + +void bx_gui_c::update_drive_status_buttons(void) +{ + BX_GUI_THIS floppyA_status = SIM->get_param_bool(BXPN_FLOPPYA_STATUS)->get(); + BX_GUI_THIS floppyB_status = SIM->get_param_bool(BXPN_FLOPPYB_STATUS)->get(); + Bit32u handle = DEV_hd_get_first_cd_handle(); + BX_GUI_THIS cdromD_status = DEV_hd_get_cd_media_status(handle); + if (BX_GUI_THIS floppyA_status) + replace_bitmap(BX_GUI_THIS floppyA_hbar_id, BX_GUI_THIS floppyA_bmap_id); + else { +#if BX_WITH_MACOS + // If we are using the Mac floppy driver, eject the disk + // from the floppy drive. This doesn't work in MacOS X. + if (!strcmp(SIM->get_param_string(BXPN_FLOPPYA_PATH)->getptr(), SuperDrive)) + DiskEject(1); +#endif + replace_bitmap(BX_GUI_THIS floppyA_hbar_id, BX_GUI_THIS floppyA_eject_bmap_id); + } + if (BX_GUI_THIS floppyB_status) + replace_bitmap(BX_GUI_THIS floppyB_hbar_id, BX_GUI_THIS floppyB_bmap_id); + else { +#if BX_WITH_MACOS + // If we are using the Mac floppy driver, eject the disk + // from the floppy drive. This doesn't work in MacOS X. + if (!strcmp(SIM->get_param_string(BXPN_FLOPPYB_PATH)->getptr(), SuperDrive)) + DiskEject(1); +#endif + replace_bitmap(BX_GUI_THIS floppyB_hbar_id, BX_GUI_THIS floppyB_eject_bmap_id); + } + if (BX_GUI_THIS cdromD_status) + replace_bitmap(BX_GUI_THIS cdromD_hbar_id, BX_GUI_THIS cdromD_bmap_id); + else { + replace_bitmap(BX_GUI_THIS cdromD_hbar_id, BX_GUI_THIS cdromD_eject_bmap_id); + } +} + +void bx_gui_c::floppyA_handler(void) +{ + if (SIM->get_param_enum(BXPN_FLOPPYA_DEVTYPE)->get() == BX_FDD_NONE) + return; // no primary floppy device present + if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_FLOPPY) { + // instead of just toggling the status, call win32dialog to bring up + // a dialog asking what disk image you want to switch to. + int ret = SIM->ask_param(BXPN_FLOPPYA_PATH); + if (ret > 0) { + BX_GUI_THIS update_drive_status_buttons(); + } + return; + } + BX_GUI_THIS floppyA_status = !BX_GUI_THIS floppyA_status; + DEV_floppy_set_media_status(0, BX_GUI_THIS floppyA_status); + BX_GUI_THIS update_drive_status_buttons(); +} + +void bx_gui_c::floppyB_handler(void) +{ + if (SIM->get_param_enum(BXPN_FLOPPYB_DEVTYPE)->get() == BX_FDD_NONE) + return; // no secondary floppy device present + if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_FLOPPY) { + // instead of just toggling the status, call win32dialog to bring up + // a dialog asking what disk image you want to switch to. + int ret = SIM->ask_param(BXPN_FLOPPYB_PATH); + if (ret > 0) { + BX_GUI_THIS update_drive_status_buttons(); + } + return; + } + BX_GUI_THIS floppyB_status = !BX_GUI_THIS floppyB_status; + DEV_floppy_set_media_status(1, BX_GUI_THIS floppyB_status); + BX_GUI_THIS update_drive_status_buttons(); +} + +void bx_gui_c::cdromD_handler(void) +{ + Bit32u handle = DEV_hd_get_first_cd_handle(); + if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_CDROM) { + // instead of just toggling the status, call win32dialog to bring up + // a dialog asking what disk image you want to switch to. + // This code handles the first cdrom only. The cdrom drives #2, #3 and + // #4 are handled in the win32 runtime dialog. + bx_param_c *cdrom = SIM->get_first_cdrom(); + if (cdrom == NULL) + return; // no cdrom found + int ret = SIM->ask_param(cdrom); + if (ret > 0) { + BX_GUI_THIS update_drive_status_buttons(); + } + return; + } + BX_GUI_THIS cdromD_status = + DEV_hd_set_cd_media_status(handle, !BX_GUI_THIS cdromD_status); + BX_GUI_THIS update_drive_status_buttons(); +} + +void bx_gui_c::reset_handler(void) +{ + BX_INFO(("system RESET callback")); + bx_pc_system.Reset(BX_RESET_HARDWARE); +} + +void bx_gui_c::power_handler(void) +{ + // test case for yes/no dialog: confirm power off + //if (!SIM->ask_yes_no("Quit Bochs", "Are you sure ?", 0)) + // return; + // the user pressed power button, so there's no doubt they want bochs + // to quit. Change panics to fatal for the GUI and then do a panic. + bx_user_quit = 1; + LOG_THIS setonoff(LOGLEV_PANIC, ACT_FATAL); + BX_PANIC (("POWER button turned off.")); + // shouldn't reach this point, but if you do, QUIT!!! + fprintf (stderr, "Bochs is exiting because you pressed the power button.\n"); + BX_EXIT (1); +} + +Bit32s bx_gui_c::make_text_snapshot(char **snapshot, Bit32u *length) +{ + Bit8u* raw_snap = NULL; + char *clean_snap; + unsigned line_addr, txt_addr, txHeight, txWidth; + + DEV_vga_get_text_snapshot(&raw_snap, &txHeight, &txWidth); + if (txHeight <= 0) return -1; + clean_snap = (char*) malloc(txHeight*(txWidth+2)+1); + txt_addr = 0; + for (unsigned i=0; i 0) && (clean_snap[txt_addr-1] == ' ')) txt_addr--; +#ifdef WIN32 + if(!(SIM->get_param_bool(BXPN_TEXT_SNAPSHOT_CHECK)->get())) { + clean_snap[txt_addr++] = 13; + } +#endif + clean_snap[txt_addr++] = 10; + } + clean_snap[txt_addr] = 0; + *snapshot = clean_snap; + *length = txt_addr; + return 0; +} + +// create a text snapshot and copy to the system clipboard. On guis that +// we haven't figured out how to support yet, dump to a file instead. +void bx_gui_c::copy_handler(void) +{ + Bit32u len; + char *text_snapshot; + if (make_text_snapshot (&text_snapshot, &len) < 0) { + BX_INFO(("copy button failed, mode not implemented")); + return; + } + if (!BX_GUI_THIS set_clipboard_text(text_snapshot, len)) { + // platform specific code failed, use portable code instead + FILE *fp = fopen("copy.txt", "w"); + fwrite(text_snapshot, 1, len, fp); + fclose(fp); + } + free(text_snapshot); +} + +// Check the current text snapshot against file snapchk.txt. +void bx_gui_c::snapshot_checker(void *this_ptr) +{ + char filename[BX_PATHNAME_LEN]; + strcpy(filename,"snapchk.txt"); + FILE *fp = fopen(filename, "rb"); + if(fp) { + char *text_snapshot; + Bit32u len; + if (make_text_snapshot (&text_snapshot, &len) < 0) { + return; + } + char *compare_snapshot = (char *) malloc((len+1) * sizeof(char)); + fread(compare_snapshot, 1, len, fp); + fclose(fp); + strcpy(filename,"snapmask.txt"); + fp=fopen(filename, "rb"); + if(fp) { + char *mask_snapshot = (char *) malloc((len+1) * sizeof(char)); + unsigned i; + bx_bool flag = 1; + fread(mask_snapshot, 1, len, fp); + fclose(fp); + for(i=0;iask_filename (filename, sizeof(filename), + "Save snapshot as...", "snapshot.txt", + bx_param_string_c::SAVE_FILE_DIALOG); + if (ret < 0) { // cancelled + free(text_snapshot); + return; + } + } else { + strcpy (filename, "snapshot.txt"); + } + FILE *fp = fopen(filename, "wb"); + fwrite(text_snapshot, 1, len, fp); + fclose(fp); + free(text_snapshot); +} + +// Read ASCII chars from the system clipboard and paste them into bochs. +// Note that paste cannot work with the key mapping tables loaded. +void bx_gui_c::paste_handler(void) +{ + Bit32s nbytes; + Bit8u *bytes; + if (!bx_keymap.isKeymapLoaded ()) { + BX_ERROR (("keyboard_mapping disabled, so paste cannot work")); + return; + } + if (!BX_GUI_THIS get_clipboard_text(&bytes, &nbytes)) { + BX_ERROR (("paste not implemented on this platform")); + return; + } + BX_INFO (("pasting %d bytes", nbytes)); + DEV_kbd_paste_bytes (bytes, nbytes); +} + +void bx_gui_c::config_handler(void) +{ + if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_RUNTIME) { + SIM->configuration_interface(NULL, CI_RUNTIME_CONFIG); + } +} + +void bx_gui_c::toggle_mouse_enable(void) +{ + int old = SIM->get_param_bool(BXPN_MOUSE_ENABLED)->get(); + BX_DEBUG (("toggle mouse_enabled, now %d", !old)); + SIM->get_param_bool(BXPN_MOUSE_ENABLED)->set(!old); +} + +bx_bool bx_gui_c::mouse_toggle_check(Bit32u key, bx_bool pressed) +{ + Bit32u newstate; + bx_bool toggle = 0; + + newstate = toggle_keystate; + if (pressed) { + newstate |= key; + if (newstate == toggle_keystate) return 0; + switch (toggle_method) { + case BX_MOUSE_TOGGLE_CTRL_MB: + toggle = (newstate & BX_GUI_MT_CTRL_MB) == BX_GUI_MT_CTRL_MB; + if (!toggle) { + toggle = (newstate & BX_GUI_MT_CTRL_LRB) == BX_GUI_MT_CTRL_LRB; + } + break; + case BX_MOUSE_TOGGLE_CTRL_F10: + toggle = (newstate & BX_GUI_MT_CTRL_F10) == BX_GUI_MT_CTRL_F10; + break; + case BX_MOUSE_TOGGLE_CTRL_ALT: + toggle = (newstate & BX_GUI_MT_CTRL_ALT) == BX_GUI_MT_CTRL_ALT; + break; + case BX_MOUSE_TOGGLE_F12: + toggle = (newstate == BX_GUI_MT_F12); + break; + } + toggle_keystate = newstate; + } else { + toggle_keystate &= ~key; + } + return toggle; +} + +const char* bx_gui_c::get_toggle_info(void) +{ + return mouse_toggle_text; +} + +Bit32u get_user_key(char *key) +{ + int i = 0; + + while (i < N_USER_KEYS) { + if (!strcmp(key, user_keys[i].key)) + return user_keys[i].symbol; + i++; + } + return BX_KEY_UNKNOWN; +} + +void bx_gui_c::userbutton_handler(void) +{ + Bit32u shortcut[4]; + Bit32u symbol; + char user_shortcut[512]; + char *ptr; + int i, len = 0, ret = 1; + + if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_USER) { + ret = SIM->ask_param(BXPN_USER_SHORTCUT); + } + strcpy(user_shortcut, SIM->get_param_string(BXPN_USER_SHORTCUT)->getptr()); + if ((ret > 0) && user_shortcut[0] && (strcmp(user_shortcut, "none"))) { + ptr = strtok(user_shortcut, "-"); + if ((strcmp(ptr, SIM->get_param_string(BXPN_USER_SHORTCUT)->getptr())) || + (strlen(SIM->get_param_string(BXPN_USER_SHORTCUT)->getptr()) < 6)) { + while (ptr) { + symbol = get_user_key(ptr); + if (symbol == BX_KEY_UNKNOWN) { + BX_ERROR(("Unknown shortcut %s ignored", ptr)); + return; + } + shortcut[len++] = symbol; + ptr = strtok(NULL, "-"); + } + } else { + BX_ERROR(("Unknown shortcut %s ignored", user_shortcut)); + return; + } + i = 0; + while (i < len) { + DEV_kbd_gen_scancode(shortcut[i++]); + } + i--; + while (i >= 0) { + DEV_kbd_gen_scancode(shortcut[i--] | BX_KEY_RELEASED); + } + } +} + +void bx_gui_c::save_restore_handler(void) +{ + int ret; + char sr_path[BX_PATHNAME_LEN]; + + if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_SAVE_RESTORE) { + sr_path[0] = 0; + ret = SIM->ask_filename(sr_path, sizeof(sr_path), + "Save Bochs state to folder...", "none", + bx_param_string_c::SELECT_FOLDER_DLG); + if ((ret >= 0) && (strcmp(sr_path, "none"))) { + if (SIM->save_state(sr_path)) { + if (!SIM->ask_yes_no("WARNING", + "The save function currently doesn't handle the state of hard drive images,\n" + "so we don't recommend to continue, unless you are running a read-only\n" + "guest system (e.g. Live-CD).\n\n" + "Do you want to continue?", 0)) { + power_handler(); + } + } + } + } +} + + + +//DanceOS Richard Hellwig +#ifdef DANCEOS_RESTORE +void bx_gui_c::restore_handler(void) +{ + int ret; + char temp_path[BX_PATHNAME_LEN]; + + //gui 631 + if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_SAVE_RESTORE) { + temp_path[0] = 0; + ret = SIM->ask_filename(temp_path, sizeof(temp_path), + "Restore Bochs state from folder...", "none", + bx_param_string_c::SELECT_FOLDER_DLG); + if ((ret >= 0) && (strcmp(temp_path, "none"))) { + + sal::restore_bochs_request = true; + sal::sr_path = temp_path; + } + } + +} +#endif + +void bx_gui_c::mouse_enabled_changed(bx_bool val) +{ + // This is only called when SIM->get_init_done is 1. Note that VAL + // is the new value of mouse_enabled, which may not match the old + // value which is still in SIM->get_param_bool(BXPN_MOUSE_ENABLED)->get(). + BX_DEBUG (("replacing the mouse bitmaps")); + if (val) + BX_GUI_THIS replace_bitmap(BX_GUI_THIS mouse_hbar_id, BX_GUI_THIS mouse_bmap_id); + else + BX_GUI_THIS replace_bitmap(BX_GUI_THIS mouse_hbar_id, BX_GUI_THIS nomouse_bmap_id); + // give the GUI a chance to respond to the event. Most guis will hide + // the native mouse cursor and do something to trap the mouse inside the + // bochs VGA display window. + BX_GUI_THIS mouse_enabled_changed_specific (val); +} + +void bx_gui_c::init_signal_handlers() +{ +#if BX_GUI_SIGHANDLER + if (bx_gui_sighandler) + { + Bit32u mask = bx_gui->get_sighandler_mask (); + for (Bit32u sig=0; sig<32; sig++) + { + if (mask & (1<> 5] = 1; + BX_GUI_THIS charmap_updated = 1; +} + +void bx_gui_c::beep_on(float frequency) +{ + BX_INFO(("GUI Beep ON (frequency=%.2f)", frequency)); +} + +void bx_gui_c::beep_off() +{ + BX_INFO(("GUI Beep OFF")); +} + +int bx_gui_c::register_statusitem(const char *text) +{ + if (statusitem_count < BX_MAX_STATUSITEMS) { + strncpy(statusitem_text[statusitem_count], text, 8); + statusitem_text[statusitem_count][7] = 0; + return statusitem_count++; + } else { + return -1; + } +} + +void bx_gui_c::get_capabilities(Bit16u *xres, Bit16u *yres, Bit16u *bpp) +{ + *xres = 1024; + *yres = 768; + *bpp = 32; +} + +bx_svga_tileinfo_t *bx_gui_c::graphics_tile_info(bx_svga_tileinfo_t *info) +{ + if (!info) { + info = (bx_svga_tileinfo_t *)malloc(sizeof(bx_svga_tileinfo_t)); + if (!info) { + return NULL; + } + } + + BX_GUI_THIS host_pitch = BX_GUI_THIS host_xres * ((BX_GUI_THIS host_bpp + 1) >> 3); + + info->bpp = BX_GUI_THIS host_bpp; + info->pitch = BX_GUI_THIS host_pitch; + switch (info->bpp) { + case 15: + info->red_shift = 15; + info->green_shift = 10; + info->blue_shift = 5; + info->red_mask = 0x7c00; + info->green_mask = 0x03e0; + info->blue_mask = 0x001f; + break; + case 16: + info->red_shift = 16; + info->green_shift = 11; + info->blue_shift = 5; + info->red_mask = 0xf800; + info->green_mask = 0x07e0; + info->blue_mask = 0x001f; + break; + case 24: + case 32: + info->red_shift = 24; + info->green_shift = 16; + info->blue_shift = 8; + info->red_mask = 0xff0000; + info->green_mask = 0x00ff00; + info->blue_mask = 0x0000ff; + break; + } + info->is_indexed = (BX_GUI_THIS host_bpp == 8); +#ifdef BX_LITTLE_ENDIAN + info->is_little_endian = 1; +#else + info->is_little_endian = 0; +#endif + + return info; +} + +Bit8u *bx_gui_c::graphics_tile_get(unsigned x0, unsigned y0, + unsigned *w, unsigned *h) +{ + if (x0+X_TILESIZE > BX_GUI_THIS host_xres) { + *w = BX_GUI_THIS host_xres - x0; + } + else { + *w = X_TILESIZE; + } + + if (y0+Y_TILESIZE > BX_GUI_THIS host_yres) { + *h = BX_GUI_THIS host_yres - y0; + } + else { + *h = Y_TILESIZE; + } + + return (Bit8u *)framebuffer + y0 * BX_GUI_THIS host_pitch + + x0 * ((BX_GUI_THIS host_bpp + 1) >> 3); +} + +void bx_gui_c::graphics_tile_update_in_place(unsigned x0, unsigned y0, + unsigned w, unsigned h) +{ + Bit8u tile[X_TILESIZE * Y_TILESIZE * 4]; + Bit8u *tile_ptr, *fb_ptr; + Bit16u xc, yc, fb_pitch, tile_pitch; + Bit8u r, diffx, diffy; + + diffx = (x0 % X_TILESIZE); + diffy = (y0 % Y_TILESIZE); + if (diffx > 0) { + x0 -= diffx; + w += diffx; + } + if (diffy > 0) { + y0 -= diffy; + h += diffy; + } + fb_pitch = BX_GUI_THIS host_pitch; + tile_pitch = X_TILESIZE * ((BX_GUI_THIS host_bpp + 1) >> 3); + for (yc=y0; yc<(y0+h); yc+=Y_TILESIZE) { + for (xc=x0; xc<(x0+w); xc+=X_TILESIZE) { + fb_ptr = BX_GUI_THIS framebuffer + (yc * fb_pitch + xc * ((BX_GUI_THIS host_bpp + 1) >> 3)); + tile_ptr = &tile[0]; + for (r=0; rinfo("installing %s module as the Bochs GUI", #gui_name); \ + theGui = new bx_##gui_name##_gui_c (); \ + bx_gui = theGui; \ + return(0); /* Success */ \ + } \ + void lib##gui_name##_LTX_plugin_fini(void) { } diff --git a/bochs/gui/icon_bochs.h b/bochs/gui/icon_bochs.h new file mode 100644 index 00000000..f67f1622 --- /dev/null +++ b/bochs/gui/icon_bochs.h @@ -0,0 +1,36 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +#define bochs_icon_width 32 +#define bochs_icon_height 32 + +static unsigned char bochs_icon_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, + 0xe0, 0xff, 0xff, 0x07, 0xf8, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x1f, + 0xfc, 0xc7, 0xe3, 0x3f, 0xfc, 0xc7, 0xe3, 0x3f, 0xfc, 0xc3, 0xc3, 0x3f, + 0xfc, 0xc3, 0xc3, 0x3f, 0xf8, 0xc1, 0x83, 0x1f, 0xf0, 0xc0, 0x03, 0x0f, + 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, + 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, + 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0xf0, 0xc0, 0x03, 0x0f, + 0xf8, 0xc1, 0x83, 0x1f, 0xfc, 0xc3, 0xc3, 0x3f, 0xfc, 0xc3, 0xc3, 0x3f, + 0xfc, 0xc7, 0xe3, 0x3f, 0xfc, 0xc7, 0xe3, 0x3f, 0xf8, 0xff, 0xff, 0x1f, + 0xf8, 0xff, 0xff, 0x1f, 0xe0, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; diff --git a/bochs/gui/icon_bochs.xpm b/bochs/gui/icon_bochs.xpm new file mode 100644 index 00000000..d9cea3d6 --- /dev/null +++ b/bochs/gui/icon_bochs.xpm @@ -0,0 +1,45 @@ +/* XPM */ +static const char *icon_bochs_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 7 1", +" c black", +". c #800000", +"X c #808000", +"o c yellow", +"O c #808080", +"+ c #c0c0c0", +"@ c None", +/* pixels */ +"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", +"@@@@@@@@@@. +@@@+ +@@@@@@@@@", +"@@@@@@@@ Oo @+ .@@@@@@@@", +"@@@@@@ ooooo ooo. @@@@@@@", +"@@@@ oooooo. oooooX @@@@@", +"@+ XoooooO XX ooooooo O@@@", +"+ oooooO XXXX X ooooooo @@", +"@ ooo XXXXXX XX ooooooX ", +"@@. XXXXXXXX XXX Xooooo. ", +"@@@@ OXXXXXXXXX XXXXXO oO .@", +"@@@@ .XXXXXXX XXXXXXX. @@@", +"@+ oo XXXX XXXXXXXX @@@", +"@ ooooo XXXXXX O", +"@@O oooooo OXXXX. XX Oooo ", +"@@@@ .ooooo. XXXXX oooo O@", +"@@@@ Oooooo XX. .ooo @@@", +"@@@@ XX oooooo .oooo. @@@@", +"@@@@ ooXX . ooO o @@@@", +"@@@@ oooXX. .Xo XX XXo @@@@", +"@@@@ ooooXXXXXXXo XXXX.XXoo @@@@", +"@@@+ oooooooooooo XooXXXooo @@@@", +"@@@. oooooooooooo Xooooooo @@@@", +"@@@+ oooooooooo XoooooX .@@@@@", +"@@@@@O XoooooooX ooooo +@@@@@@", +"@@@@@@@ ooooooX oooX @@@@@@@@", +"@@@@@@@@@ ooooX oo @@@@@@@@@", +"@@@@@@@@@@. Ooo. O@@@@@@@@@@", +"@@@@@@@@@@@@ @@@@@@@@@@@@", +"@@@@@@@@@@@@@@O O@@@@@@@@@@@@@", +"@@@@@@@@@@@@@@@@+@@@@@@@@@@@@@@@", +"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", +"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" +}; diff --git a/bochs/gui/keymap.cc b/bochs/gui/keymap.cc new file mode 100644 index 00000000..c1abbaed --- /dev/null +++ b/bochs/gui/keymap.cc @@ -0,0 +1,313 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +///////////////////////////////////////////////////////////////////////// +// +// Todo +// . Currently supported by sdl, wxGTK and x11. Check if other guis need mapping. +// . Tables look-up should be optimised. +// + +#include "param_names.h" +#include "bochs.h" +#include "keymap.h" + +// Table of bochs "BX_KEY_*" symbols +// the table must be in BX_KEY_* order +const char *bx_key_symbol[BX_KEY_NBKEYS] = { + "BX_KEY_CTRL_L", "BX_KEY_SHIFT_L", "BX_KEY_F1", + "BX_KEY_F2", "BX_KEY_F3", "BX_KEY_F4", + "BX_KEY_F5", "BX_KEY_F6", "BX_KEY_F7", + "BX_KEY_F8", "BX_KEY_F9", "BX_KEY_F10", + "BX_KEY_F11", "BX_KEY_F12", "BX_KEY_CTRL_R", + "BX_KEY_SHIFT_R", "BX_KEY_CAPS_LOCK", "BX_KEY_NUM_LOCK", + "BX_KEY_ALT_L", "BX_KEY_ALT_R", "BX_KEY_A", + "BX_KEY_B", "BX_KEY_C", "BX_KEY_D", + "BX_KEY_E", "BX_KEY_F", "BX_KEY_G", + "BX_KEY_H", "BX_KEY_I", "BX_KEY_J", + "BX_KEY_K", "BX_KEY_L", "BX_KEY_M", + "BX_KEY_N", "BX_KEY_O", "BX_KEY_P", + "BX_KEY_Q", "BX_KEY_R", "BX_KEY_S", + "BX_KEY_T", "BX_KEY_U", "BX_KEY_V", + "BX_KEY_W", "BX_KEY_X", "BX_KEY_Y", + "BX_KEY_Z", "BX_KEY_0", "BX_KEY_1", + "BX_KEY_2", "BX_KEY_3", "BX_KEY_4", + "BX_KEY_5", "BX_KEY_6", "BX_KEY_7", + "BX_KEY_8", "BX_KEY_9", "BX_KEY_ESC", + "BX_KEY_SPACE", "BX_KEY_SINGLE_QUOTE", "BX_KEY_COMMA", + "BX_KEY_PERIOD", "BX_KEY_SLASH", "BX_KEY_SEMICOLON", + "BX_KEY_EQUALS", "BX_KEY_LEFT_BRACKET", "BX_KEY_BACKSLASH", + "BX_KEY_RIGHT_BRACKET", "BX_KEY_MINUS", "BX_KEY_GRAVE", + "BX_KEY_BACKSPACE", "BX_KEY_ENTER", "BX_KEY_TAB", + "BX_KEY_LEFT_BACKSLASH", "BX_KEY_PRINT", "BX_KEY_SCRL_LOCK", + "BX_KEY_PAUSE", "BX_KEY_INSERT", "BX_KEY_DELETE", + "BX_KEY_HOME", "BX_KEY_END", "BX_KEY_PAGE_UP", + "BX_KEY_PAGE_DOWN", "BX_KEY_KP_ADD", "BX_KEY_KP_SUBTRACT", + "BX_KEY_KP_END", "BX_KEY_KP_DOWN", "BX_KEY_KP_PAGE_DOWN", + "BX_KEY_KP_LEFT", "BX_KEY_KP_RIGHT", "BX_KEY_KP_HOME", + "BX_KEY_KP_UP", "BX_KEY_KP_PAGE_UP", "BX_KEY_KP_INSERT", + "BX_KEY_KP_DELETE", "BX_KEY_KP_5", "BX_KEY_UP", + "BX_KEY_DOWN", "BX_KEY_LEFT", "BX_KEY_RIGHT", + "BX_KEY_KP_ENTER", "BX_KEY_KP_MULTIPLY", "BX_KEY_KP_DIVIDE", + "BX_KEY_WIN_L", "BX_KEY_WIN_R", "BX_KEY_MENU", + "BX_KEY_ALT_SYSREQ", "BX_KEY_CTRL_BREAK", "BX_KEY_INT_BACK", + "BX_KEY_INT_FORWARD", "BX_KEY_INT_STOP", "BX_KEY_INT_MAIL", + "BX_KEY_INT_SEARCH", "BX_KEY_INT_FAV", "BX_KEY_INT_HOME", + "BX_KEY_POWER_MYCOMP", "BX_KEY_POWER_CALC", "BX_KEY_POWER_SLEEP", + "BX_KEY_POWER_POWER", "BX_KEY_POWER_WAKE", +}; + +bx_keymap_c bx_keymap; + +#define LOG_THIS bx_keymap. + +bx_keymap_c::bx_keymap_c(void) +{ + put("KMAP"); + + keymapCount = 0; + keymapTable = (BXKeyEntry *)NULL; +} + +bx_keymap_c::~bx_keymap_c(void) +{ + if(keymapTable != NULL) { + free(keymapTable); + keymapTable = (BXKeyEntry *)NULL; + } + keymapCount = 0; +} + +void bx_keymap_c::loadKeymap(Bit32u stringToSymbol(const char*)) +{ + if (SIM->get_param_bool(BXPN_KBD_USEMAPPING)->get()) { + loadKeymap(stringToSymbol, SIM->get_param_string(BXPN_KBD_KEYMAP)->getptr()); + } +} + +bx_bool bx_keymap_c::isKeymapLoaded () +{ + return (keymapCount > 0); +} + + +/////////////////// +// I'll add these to the keymap object in a minute. +static unsigned char *lineptr = NULL; +static int lineCount; + +static void init_parse() +{ + lineCount = 0; +} + +static void init_parse_line(char *line_to_parse) +{ + // chop off newline + lineptr = (unsigned char *)line_to_parse; + char *nl; + if ((nl = strchr(line_to_parse,'\n')) != NULL) { + *nl = 0; + } +} + +static Bit32s get_next_word(char *output) +{ + char *copyp = output; + // find first nonspace + while (*lineptr && isspace(*lineptr)) + lineptr++; + if (!*lineptr) + return -1; // nothing but spaces until end of line + if (*lineptr == '#') + return -1; // nothing but a comment + // copy nonspaces into the output + while (*lineptr && !isspace(*lineptr)) + *copyp++ = *lineptr++; + *copyp=0; // null terminate the copy + // there must be at least one nonspace, since that's why we stopped the + // first loop! + BX_ASSERT (copyp != output); + return 0; +} + +static Bit32s get_next_keymap_line (FILE *fp, char *bxsym, char *modsym, Bit32s *ascii, char *hostsym) +{ + char line[256]; + char buf[256]; + line[0] = 0; + while (1) { + lineCount++; + if (!fgets(line, sizeof(line)-1, fp)) return -1; // EOF + init_parse_line (line); + if (get_next_word (bxsym) >= 0) { + modsym[0] = 0; + char *p; + if ((p = strchr (bxsym, '+')) != NULL) { + *p = 0; // truncate bxsym. + p++; // move one char beyond the + + strcpy (modsym, p); // copy the rest to modsym + } + if (get_next_word (buf) < 0) { + BX_PANIC (("keymap line %d: expected 3 columns", lineCount)); + return -1; + } + if (buf[0] == '\'' && buf[2] == '\'' && buf[3]==0) { + *ascii = (Bit8u) buf[1]; + } else if (!strcmp(buf, "space")) { + *ascii = ' '; + } else if (!strcmp(buf, "return")) { + *ascii = '\n'; + } else if (!strcmp(buf, "tab")) { + *ascii = '\t'; + } else if (!strcmp(buf, "backslash")) { + *ascii = '\\'; + } else if (!strcmp(buf, "apostrophe")) { + *ascii = '\''; + } else if (!strcmp(buf, "none")) { + *ascii = -1; + } else { + BX_PANIC (("keymap line %d: ascii equivalent is \"%s\" but it must be char constant like 'x', or one of space,tab,return,none", lineCount, buf)); + } + if (get_next_word (hostsym) < 0) { + BX_PANIC (("keymap line %d: expected 3 columns", lineCount)); + return -1; + } + return 0; + } + // no words on this line, keep reading. + } +} + +void bx_keymap_c::loadKeymap(Bit32u stringToSymbol(const char*), const char* filename) +{ + FILE *keymapFile; + char baseSym[256], modSym[256], hostSym[256]; + Bit32s ascii = 0; + Bit32u baseKey, modKey, hostKey; + struct stat status; + + if (stat(filename, &status)) { + BX_PANIC(("Can not stat keymap file '%s'.",filename)); + } + + if (!(S_ISREG(status.st_mode))) { + BX_PANIC(("Keymap file '%s' is not a file",filename)); + } + + if((keymapFile = fopen(filename,"r"))==NULL) { + BX_PANIC(("Can not open keymap file '%s'.",filename)); + } + + BX_INFO(("Loading keymap from '%s'",filename)); + init_parse(); + + // Read keymap file one line at a time + while(1) { + if (get_next_keymap_line (keymapFile, + baseSym, modSym, &ascii, hostSym) < 0) { break; } + + // convert X_KEY_* symbols to values + baseKey = convertStringToBXKey(baseSym); + modKey = convertStringToBXKey(modSym); + hostKey = 0; + if (stringToSymbol != NULL) + hostKey = stringToSymbol(hostSym); + + BX_DEBUG(("baseKey='%s' (%d), modSym='%s' (%d), ascii=%d, guisym='%s' (%d)", baseSym, baseKey, modSym, modKey, ascii, hostSym, hostKey)); + + // Check if data is valid + if (baseKey==BX_KEYMAP_UNKNOWN) { + BX_PANIC (("line %d: unknown BX_KEY constant '%s'",lineCount,baseSym)); + continue; + } + + if (hostKey==BX_KEYMAP_UNKNOWN) { + BX_PANIC (("line %d: unknown host key name '%s' (wrong keymap ?)",lineCount,hostSym)); + continue; + } + + keymapTable=(BXKeyEntry*)realloc(keymapTable,(keymapCount+1) * sizeof(BXKeyEntry)); + + if (keymapTable==NULL) + BX_PANIC(("Can not allocate memory for keymap table.")); + + keymapTable[keymapCount].baseKey=baseKey; + keymapTable[keymapCount].modKey=modKey; + keymapTable[keymapCount].ascii=ascii; + keymapTable[keymapCount].hostKey=hostKey; + + keymapCount++; + } + + BX_INFO(("Loaded %d symbols",keymapCount)); + + fclose(keymapFile); +} + +Bit32u bx_keymap_c::convertStringToBXKey(const char* string) +{ + // We look through the bx_key_symbol table to find the searched string + for (Bit16u i=0; i) +{ + chop; + s/^ *//; + if (/^#/ || /^ *$/) { print "$_\n"; next;} + ($key, $equals, $xksym) = split (/ +/); + printf ("%-45s %-10s %s\n", $key, 'none', "XK_$xksym"); +} diff --git a/bochs/gui/keymaps/sdl-pc-de.map b/bochs/gui/keymaps/sdl-pc-de.map new file mode 100644 index 00000000..c87a974c --- /dev/null +++ b/bochs/gui/keymaps/sdl-pc-de.map @@ -0,0 +1,222 @@ +# Bochs Keymap file +# $Id$ +# Target: PC(x86) keyboard, DE keymap, SDL gui on X11 +# Author: Volker Ruppert +# +# The keymap file describes the layout of a keyboard, and how it translates +# into Bochs key codes. +# +# Format: +# BX_Keysym ASCII_equivalent Host_key_name +# +# Or, for keys that require modifiers: +# BX_Keysym+BX_Modifier ASCII_equivalent Host_key_name +# +# BX_Keysym and BX_Modifier must be present in the bx_key_symbol[] list in +# gui/keymap.cc. The BX_Modifier is usually a shift key press, but it +# could be any key. Presently a maximum of one modifier is supported, but this +# could be changed in keymap.h (structure def has only one slot for modifier), +# keymap.cc (parsing code), and iodev/keyboard.cc (simulate keypresses for >1 +# modifier). +# +# The ASCII_equivalent must be either apostrophe + one character + apostrophe, +# or one of these keywords: space, return, tab, backslash, apostrophe, none. +# This format is designed to look like a char constant in C, but it's a very +# simple parser. There's no concept of backslash being an escape char. The +# backslash and apostrophe entries are provided for aesthetic purposes only: no +# C++ programmer wants to see '\' or '''. The parser doesn't care, but they are +# ugly. +# +# Host_key_name is the name of the key combination according to the gui library +# (X windows, SDL, etc). Each GUI module must provide a function that converts +# these host key names into numbers. A pointer to the conversion function is +# passed to loadKeymap(), and it is used when parsing the keymap file. As the +# keymap file is parsed, the conversion function is called for each host key +# name, to convert it into a number. Only the number is stored. If the host +# key name is not found, the conversion function returns BX_KEYMAP_UNKNOWN, and +# the keymap code will panic, like this: +# +# [KMAP ] line 51: unknown host key name 'SDLK_PAREN_RIGHT' +# +# If this happens, you must edit the keymap file, and either correct the host +# key name or comment out that line. +# + +BX_KEY_0 '0' SDLK_0 +BX_KEY_0+BX_KEY_SHIFT_L '=' SDLK_EQUALS +BX_KEY_1 '1' SDLK_1 +BX_KEY_1+BX_KEY_SHIFT_L '!' SDLK_EXCLAIM +BX_KEY_2 '2' SDLK_2 +BX_KEY_2+BX_KEY_ALT_R '' SDLK_2 +BX_KEY_2+BX_KEY_SHIFT_L '"' SDLK_QUOTEDBL +BX_KEY_3 '3' SDLK_3 +BX_KEY_3+BX_KEY_SHIFT_L '' SDLK_3 +BX_KEY_4 '4' SDLK_4 +BX_KEY_4+BX_KEY_SHIFT_L '$' SDLK_DOLLAR +BX_KEY_4+BX_KEY_ALT_R '' SDLK_4 +BX_KEY_5 '5' SDLK_5 +BX_KEY_5+BX_KEY_ALT_R '' SDLK_5 +BX_KEY_5+BX_KEY_SHIFT_L '%' SDLK_5 +BX_KEY_6 '6' SDLK_6 +BX_KEY_6+BX_KEY_SHIFT_L '&' SDLK_AMPERSAND +BX_KEY_7 '7' SDLK_7 +BX_KEY_7+BX_KEY_ALT_R '{' SDLK_7 +BX_KEY_7+BX_KEY_SHIFT_L '/' SDLK_SLASH +BX_KEY_8 '8' SDLK_8 +BX_KEY_8+BX_KEY_ALT_R '[' SDLK_LEFTBRACKET +BX_KEY_8+BX_KEY_SHIFT_L '(' SDLK_LEFTPAREN +BX_KEY_9 '9' SDLK_9 +BX_KEY_9+BX_KEY_ALT_R ']' SDLK_RIGHTBRACKET +BX_KEY_9+BX_KEY_SHIFT_L ')' SDLK_RIGHTPAREN +BX_KEY_A+BX_KEY_SHIFT_L 'A' SDLK_a +BX_KEY_A 'a' SDLK_a +BX_KEY_A+BX_KEY_ALT_R '' SDLK_a +BX_KEY_B+BX_KEY_SHIFT_L 'B' SDLK_b +BX_KEY_B 'b' SDLK_b +BX_KEY_C+BX_KEY_SHIFT_L 'C' SDLK_c +BX_KEY_C 'c' SDLK_c +BX_KEY_C+BX_KEY_ALT_R '' SDLK_c +BX_KEY_D+BX_KEY_SHIFT_L 'D' SDLK_d +BX_KEY_D 'd' SDLK_d +BX_KEY_E+BX_KEY_SHIFT_L 'E' SDLK_e +BX_KEY_E+BX_KEY_ALT_R none SDLK_EURO +BX_KEY_E 'e' SDLK_e +BX_KEY_F+BX_KEY_SHIFT_L 'F' SDLK_f +BX_KEY_F 'f' SDLK_f +BX_KEY_G+BX_KEY_SHIFT_L 'G' SDLK_g +BX_KEY_G 'g' SDLK_g +BX_KEY_H+BX_KEY_SHIFT_L 'H' SDLK_h +BX_KEY_H 'h' SDLK_h +BX_KEY_I+BX_KEY_SHIFT_L 'I' SDLK_i +BX_KEY_I 'i' SDLK_i +BX_KEY_J+BX_KEY_SHIFT_L 'J' SDLK_j +BX_KEY_J 'j' SDLK_j +BX_KEY_K+BX_KEY_SHIFT_L 'K' SDLK_k +BX_KEY_K 'k' SDLK_k +BX_KEY_L+BX_KEY_SHIFT_L 'L' SDLK_l +BX_KEY_L 'l' SDLK_l +BX_KEY_M+BX_KEY_SHIFT_L 'M' SDLK_m +BX_KEY_M 'm' SDLK_m +BX_KEY_M+BX_KEY_ALT_R '' SDLK_m +BX_KEY_N+BX_KEY_SHIFT_L 'N' SDLK_n +BX_KEY_N 'n' SDLK_n +BX_KEY_O+BX_KEY_SHIFT_L 'O' SDLK_o +BX_KEY_O 'o' SDLK_o +BX_KEY_O+BX_KEY_ALT_R '' SDLK_o +BX_KEY_P+BX_KEY_SHIFT_L 'P' SDLK_p +BX_KEY_P 'p' SDLK_p +BX_KEY_Q+BX_KEY_SHIFT_L 'Q' SDLK_q +BX_KEY_Q+BX_KEY_ALT_R '@' SDLK_AT +BX_KEY_Q 'q' SDLK_q +BX_KEY_R+BX_KEY_SHIFT_L 'R' SDLK_r +BX_KEY_R+BX_KEY_ALT_R '' SDLK_r +BX_KEY_R 'r' SDLK_r +BX_KEY_S+BX_KEY_SHIFT_L 'S' SDLK_s +BX_KEY_S 's' SDLK_s +BX_KEY_T+BX_KEY_SHIFT_L 'T' SDLK_t +BX_KEY_T 't' SDLK_t +BX_KEY_U+BX_KEY_SHIFT_L 'U' SDLK_u +BX_KEY_U 'u' SDLK_u +BX_KEY_V+BX_KEY_SHIFT_L 'V' SDLK_v +BX_KEY_V 'v' SDLK_v +BX_KEY_W+BX_KEY_SHIFT_L 'W' SDLK_w +BX_KEY_W 'w' SDLK_w +BX_KEY_X+BX_KEY_SHIFT_L 'X' SDLK_x +BX_KEY_X+BX_KEY_ALT_R '' SDLK_x +BX_KEY_X 'x' SDLK_x +BX_KEY_Y+BX_KEY_SHIFT_L 'Z' SDLK_z +BX_KEY_Y 'z' SDLK_z +BX_KEY_Z+BX_KEY_SHIFT_L 'Y' SDLK_y +BX_KEY_Z+BX_KEY_ALT_R '' SDLK_y +BX_KEY_Z 'y' SDLK_y +BX_KEY_F1 none SDLK_F1 +BX_KEY_F2 none SDLK_F2 +BX_KEY_F3 none SDLK_F3 +BX_KEY_F4 none SDLK_F4 +BX_KEY_F5 none SDLK_F5 +BX_KEY_F6 none SDLK_F6 +BX_KEY_F7 none SDLK_F7 +BX_KEY_F8 none SDLK_F8 +BX_KEY_F9 none SDLK_F9 +BX_KEY_F10 none SDLK_F10 +BX_KEY_F11 none SDLK_F11 +BX_KEY_F12 none SDLK_F12 +BX_KEY_ALT_L none SDLK_LALT +BX_KEY_ALT_L none SDLK_LMETA +BX_KEY_ALT_R none SDLK_RALT +BX_KEY_ALT_R none SDLK_MODE +BX_KEY_BACKSLASH apostrophe SDLK_QUOTE +BX_KEY_BACKSLASH '#' SDLK_HASH +BX_KEY_BACKSPACE none SDLK_BACKSPACE +BX_KEY_CAPS_LOCK none SDLK_CAPSLOCK +BX_KEY_COMMA ',' SDLK_COMMA +BX_KEY_COMMA+BX_KEY_SHIFT_L ';' SDLK_SEMICOLON +BX_KEY_CTRL_L none SDLK_LCTRL +BX_KEY_CTRL_R none SDLK_RCTRL +BX_KEY_DELETE none SDLK_DELETE +BX_KEY_DOWN none SDLK_DOWN +BX_KEY_END none SDLK_END +BX_KEY_ENTER return SDLK_RETURN +BX_KEY_EQUALS none SDLK_WORLD_20 +BX_KEY_EQUALS+BX_KEY_ALT_R '' SDLK_WORLD_20 +BX_KEY_EQUALS+BX_KEY_SHIFT_L '`' SDLK_WORLD_20 +BX_KEY_ESC none SDLK_ESCAPE +BX_KEY_GRAVE '^' SDLK_CARET +BX_KEY_GRAVE+BX_KEY_SHIFT_L '' SDLK_CARET +BX_KEY_GRAVE+BX_KEY_ALT_R '' SDLK_CARET +BX_KEY_HOME none SDLK_HOME +BX_KEY_INSERT none SDLK_INSERT +BX_KEY_KP_5 none SDLK_KP5 +BX_KEY_KP_ADD none SDLK_KP_PLUS +BX_KEY_KP_DELETE none SDLK_KP_PERIOD +BX_KEY_KP_DIVIDE none SDLK_KP_DIVIDE +BX_KEY_KP_DOWN none SDLK_KP2 +BX_KEY_KP_END none SDLK_KP1 +BX_KEY_KP_ENTER none SDLK_KP_ENTER +BX_KEY_KP_HOME none SDLK_KP7 +BX_KEY_KP_INSERT none SDLK_KP0 +BX_KEY_KP_LEFT none SDLK_KP4 +BX_KEY_KP_MULTIPLY none SDLK_KP_MULTIPLY +BX_KEY_KP_PAGE_DOWN none SDLK_KP3 +BX_KEY_KP_PAGE_UP none SDLK_KP9 +BX_KEY_KP_RIGHT none SDLK_KP6 +BX_KEY_KP_SUBTRACT none SDLK_KP_MINUS +BX_KEY_KP_UP none SDLK_KP8 +BX_KEY_LEFT none SDLK_LEFT +BX_KEY_LEFT_BACKSLASH+BX_KEY_ALT_R '|' SDLK_LESS +BX_KEY_LEFT_BACKSLASH+BX_KEY_SHIFT_L '>' SDLK_GREATER +BX_KEY_LEFT_BACKSLASH '<' SDLK_LESS +BX_KEY_LEFT_BRACKET+BX_KEY_SHIFT_L '' SDLK_WORLD_92 +BX_KEY_LEFT_BRACKET '' SDLK_WORLD_92 +BX_KEY_MENU none SDLK_MENU +BX_KEY_MINUS+BX_KEY_ALT_L backslash SDLK_BACKSLASH +BX_KEY_MINUS+BX_KEY_SHIFT_L '?' SDLK_QUESTION +BX_KEY_MINUS '' SDLK_WORLD_63 +BX_KEY_NUM_LOCK none SDLK_NUMLOCK +BX_KEY_PAGE_DOWN none SDLK_PAGEDOWN +BX_KEY_PAGE_UP none SDLK_PAGEUP +BX_KEY_PAUSE none SDLK_BREAK +BX_KEY_PAUSE none SDLK_PAUSE +BX_KEY_PERIOD+BX_KEY_SHIFT_L ':' SDLK_COLON +BX_KEY_PERIOD '.' SDLK_PERIOD +BX_KEY_PERIOD+BX_KEY_ALT_L '' SDLK_PERIOD +BX_KEY_PRINT none SDLK_PRINT +BX_KEY_PRINT none SDLK_SYSREQ +BX_KEY_RIGHT none SDLK_RIGHT +BX_KEY_RIGHT_BRACKET+BX_KEY_ALT_R '~' SDLK_PLUS +BX_KEY_RIGHT_BRACKET+BX_KEY_SHIFT_L '*' SDLK_PLUS +BX_KEY_RIGHT_BRACKET '+' SDLK_PLUS +BX_KEY_SCRL_LOCK none SDLK_SCROLLOCK +BX_KEY_SEMICOLON+BX_KEY_SHIFT_L '' SDLK_WORLD_86 +BX_KEY_SEMICOLON '' SDLK_WORLD_86 +BX_KEY_SHIFT_L none SDLK_LSHIFT +BX_KEY_SHIFT_R none SDLK_RSHIFT +BX_KEY_SINGLE_QUOTE+BX_KEY_SHIFT_L '' SDLK_WORLD_68 +BX_KEY_SINGLE_QUOTE '' SDLK_WORLD_68 +BX_KEY_SLASH '-' SDLK_MINUS +BX_KEY_SLASH+BX_KEY_SHIFT_L '_' SDLK_UNDERSCORE +BX_KEY_SPACE space SDLK_SPACE +BX_KEY_TAB tab SDLK_TAB +BX_KEY_UP none SDLK_UP +BX_KEY_WIN_L none SDLK_LSUPER +BX_KEY_WIN_R none SDLK_RSUPER diff --git a/bochs/gui/keymaps/sdl-pc-us.map b/bochs/gui/keymaps/sdl-pc-us.map new file mode 100644 index 00000000..9cf99f69 --- /dev/null +++ b/bochs/gui/keymaps/sdl-pc-us.map @@ -0,0 +1,211 @@ +# Bochs Keymap file +# $Id$ +# Target: PC(x86) keyboard, US keymap, SDL gui +# Author: Bryce Denney +# +# The keymap file describes the layout of a keyboard, and how it translates +# into Bochs key codes. +# +# Format: +# BX_Keysym ASCII_equivalent Host_key_name +# +# Or, for keys that require modifiers: +# BX_Keysym+BX_Modifier ASCII_equivalent Host_key_name +# +# BX_Keysym and BX_Modifier must be present in the bx_key_symbol[] list in +# gui/keymap.cc. The BX_Modifier is usually a shift key press, but it +# could be any key. Presently a maximum of one modifier is supported, but this +# could be changed in keymap.h (structure def has only one slot for modifier), +# keymap.cc (parsing code), and iodev/keyboard.cc (simulate keypresses for >1 +# modifier). +# +# The ASCII_equivalent must be either apostrophe + one character + apostrophe, +# or one of these keywords: space, return, tab, backslash, apostrophe, none. +# This format is designed to look like a char constant in C, but it's a very +# simple parser. There's no concept of backslash being an escape char. The +# backslash and apostrophe entries are provided for aesthetic purposes only: no +# C++ programmer wants to see '\' or '''. The parser doesn't care, but they are +# ugly. +# +# Host_key_name is the name of the key combination according to the gui library +# (X windows, SDL, etc). Each GUI module must provide a function that converts +# these host key names into numbers. A pointer to the conversion function is +# passed to loadKeymap(), and it is used when parsing the keymap file. As the +# keymap file is parsed, the conversion function is called for each host key +# name, to convert it into a number. Only the number is stored. If the host +# key name is not found, the conversion function returns BX_KEYMAP_UNKNOWN, and +# the keymap code will panic, like this: +# +# [KMAP ] line 51: unknown host key name 'SDLK_PAREN_RIGHT' +# +# If this happens, you must edit the keymap file, and either correct the host +# key name or comment out that line. +# + +BX_KEY_0 '0' SDLK_0 +BX_KEY_0+BX_KEY_SHIFT_L ')' SDLK_RIGHTPAREN +BX_KEY_1 '1' SDLK_1 +BX_KEY_1+BX_KEY_SHIFT_L '!' SDLK_EXCLAIM +BX_KEY_2 '2' SDLK_2 +BX_KEY_2+BX_KEY_SHIFT_L '@' SDLK_AT +BX_KEY_3 '3' SDLK_3 +BX_KEY_3+BX_KEY_SHIFT_L '#' SDLK_HASH +BX_KEY_4 '4' SDLK_4 +BX_KEY_4+BX_KEY_SHIFT_L '$' SDLK_DOLLAR +BX_KEY_5 '5' SDLK_5 +#BX_KEY_5+BX_KEY_SHIFT_L '%' SDLK_PERCENT +BX_KEY_6 '6' SDLK_6 +BX_KEY_6+BX_KEY_SHIFT_L '^' SDLK_CARET +BX_KEY_7 '7' SDLK_7 +BX_KEY_7+BX_KEY_SHIFT_L '&' SDLK_AMPERSAND +BX_KEY_8 '8' SDLK_8 +BX_KEY_8+BX_KEY_SHIFT_L '*' SDLK_ASTERISK +BX_KEY_9 '9' SDLK_9 +BX_KEY_9+BX_KEY_SHIFT_L '(' SDLK_LEFTPAREN +BX_KEY_A+BX_KEY_SHIFT_L 'A' SDLK_a +BX_KEY_A 'a' SDLK_a +BX_KEY_B+BX_KEY_SHIFT_L 'B' SDLK_b +BX_KEY_B 'b' SDLK_b +BX_KEY_C+BX_KEY_SHIFT_L 'C' SDLK_c +BX_KEY_C 'c' SDLK_c +BX_KEY_D+BX_KEY_SHIFT_L 'D' SDLK_d +BX_KEY_D 'd' SDLK_d +BX_KEY_E+BX_KEY_SHIFT_L 'E' SDLK_e +BX_KEY_E 'e' SDLK_e +BX_KEY_F+BX_KEY_SHIFT_L 'F' SDLK_f +BX_KEY_F 'f' SDLK_f +BX_KEY_G+BX_KEY_SHIFT_L 'G' SDLK_g +BX_KEY_G 'g' SDLK_g +BX_KEY_H+BX_KEY_SHIFT_L 'H' SDLK_h +BX_KEY_H 'h' SDLK_h +BX_KEY_I+BX_KEY_SHIFT_L 'I' SDLK_i +BX_KEY_I 'i' SDLK_i +BX_KEY_J+BX_KEY_SHIFT_L 'J' SDLK_j +BX_KEY_J 'j' SDLK_j +BX_KEY_K+BX_KEY_SHIFT_L 'K' SDLK_k +BX_KEY_K 'k' SDLK_k +BX_KEY_L+BX_KEY_SHIFT_L 'L' SDLK_l +BX_KEY_L 'l' SDLK_l +BX_KEY_M+BX_KEY_SHIFT_L 'M' SDLK_m +BX_KEY_M 'm' SDLK_m +BX_KEY_N+BX_KEY_SHIFT_L 'N' SDLK_n +BX_KEY_N 'n' SDLK_n +BX_KEY_O+BX_KEY_SHIFT_L 'O' SDLK_o +BX_KEY_O 'o' SDLK_o +BX_KEY_P+BX_KEY_SHIFT_L 'P' SDLK_p +BX_KEY_P 'p' SDLK_p +BX_KEY_Q+BX_KEY_SHIFT_L 'Q' SDLK_q +BX_KEY_Q 'q' SDLK_q +BX_KEY_R+BX_KEY_SHIFT_L 'R' SDLK_r +BX_KEY_R 'r' SDLK_r +BX_KEY_S+BX_KEY_SHIFT_L 'S' SDLK_s +BX_KEY_S 's' SDLK_s +BX_KEY_T+BX_KEY_SHIFT_L 'T' SDLK_t +BX_KEY_T 't' SDLK_t +BX_KEY_U+BX_KEY_SHIFT_L 'U' SDLK_u +BX_KEY_U 'u' SDLK_u +BX_KEY_V+BX_KEY_SHIFT_L 'V' SDLK_v +BX_KEY_V 'v' SDLK_v +BX_KEY_W+BX_KEY_SHIFT_L 'W' SDLK_w +BX_KEY_W 'w' SDLK_w +BX_KEY_X+BX_KEY_SHIFT_L 'X' SDLK_x +BX_KEY_X 'x' SDLK_x +BX_KEY_Y+BX_KEY_SHIFT_L 'Y' SDLK_y +BX_KEY_Y 'y' SDLK_y +BX_KEY_Z+BX_KEY_SHIFT_L 'Z' SDLK_z +BX_KEY_Z 'z' SDLK_z +BX_KEY_F1 none SDLK_F1 +BX_KEY_F2 none SDLK_F2 +BX_KEY_F3 none SDLK_F3 +BX_KEY_F4 none SDLK_F4 +BX_KEY_F5 none SDLK_F5 +BX_KEY_F6 none SDLK_F6 +BX_KEY_F7 none SDLK_F7 +BX_KEY_F8 none SDLK_F8 +BX_KEY_F9 none SDLK_F9 +BX_KEY_F10 none SDLK_F10 +BX_KEY_F11 none SDLK_F11 +BX_KEY_F12 none SDLK_F12 +BX_KEY_ALT_L none SDLK_LALT +BX_KEY_ALT_L none SDLK_LMETA +BX_KEY_ALT_R none SDLK_MODE +#BX_KEY_ALT_R none SDLK_Multi_key +BX_KEY_BACKSLASH backslash SDLK_BACKSLASH +#BX_KEY_BACKSLASH+BX_KEY_SHIFT_L '|' SDLK_bar +BX_KEY_BACKSPACE none SDLK_BACKSPACE +BX_KEY_CAPS_LOCK none SDLK_CAPSLOCK +BX_KEY_COMMA ',' SDLK_COMMA +BX_KEY_COMMA+BX_KEY_SHIFT_L '<' SDLK_LESS +BX_KEY_CTRL_L none SDLK_LCTRL +BX_KEY_CTRL_R none SDLK_RCTRL +BX_KEY_DELETE none SDLK_DELETE +BX_KEY_DOWN none SDLK_DOWN +BX_KEY_END none SDLK_END +BX_KEY_ENTER return SDLK_RETURN +BX_KEY_EQUALS '=' SDLK_EQUALS +BX_KEY_EQUALS+BX_KEY_SHIFT_L '+' SDLK_PLUS +BX_KEY_ESC none SDLK_ESCAPE +#BX_KEY_GRAVE+BX_KEY_SHIFT_L '~' SDLK_asciitilde +BX_KEY_GRAVE '`' SDLK_BACKQUOTE +BX_KEY_HOME none SDLK_HOME +BX_KEY_INSERT none SDLK_INSERT +BX_KEY_KP_5 none SDLK_KP5 +#BX_KEY_KP_5 none SDLK_KP_BEGIN +BX_KEY_KP_ADD none SDLK_KP_PLUS +BX_KEY_KP_DELETE none SDLK_KP_PERIOD +#BX_KEY_KP_DELETE none SDLK_KP_DELETE +BX_KEY_KP_DIVIDE none SDLK_KP_DIVIDE +BX_KEY_KP_DOWN none SDLK_KP2 +#BX_KEY_KP_DOWN none SDLK_KP_DOWN +BX_KEY_KP_END none SDLK_KP1 +#BX_KEY_KP_END none SDLK_KP_END +BX_KEY_KP_ENTER none SDLK_KP_ENTER +BX_KEY_KP_HOME none SDLK_KP7 +#BX_KEY_KP_HOME none SDLK_KP_HOME +BX_KEY_KP_INSERT none SDLK_KP0 +#BX_KEY_KP_INSERT none SDLK_KP_INSERT +BX_KEY_KP_LEFT none SDLK_KP4 +#BX_KEY_KP_LEFT none SDLK_KP_LEFT +BX_KEY_KP_MULTIPLY none SDLK_KP_MULTIPLY +BX_KEY_KP_PAGE_DOWN none SDLK_KP3 +#BX_KEY_KP_PAGE_DOWN none SDLK_KP_PAGE_DOWN +BX_KEY_KP_PAGE_UP none SDLK_KP9 +#BX_KEY_KP_PAGE_UP none SDLK_KP_PAGE_UP +BX_KEY_KP_RIGHT none SDLK_KP6 +#BX_KEY_KP_RIGHT none SDLK_KP_Right +BX_KEY_KP_SUBTRACT none SDLK_KP_MINUS +BX_KEY_KP_UP none SDLK_KP8 +#BX_KEY_KP_UP none SDLK_KP_Up +BX_KEY_LEFT none SDLK_LEFT +#BX_KEY_LEFT_BRACKET+BX_KEY_SHIFT_L '{' SDLK_BRACELEFT +BX_KEY_LEFT_BRACKET '[' SDLK_LEFTBRACKET +BX_KEY_MENU none SDLK_MENU +BX_KEY_MINUS '-' SDLK_MINUS +BX_KEY_MINUS+BX_KEY_SHIFT_L '_' SDLK_UNDERSCORE +BX_KEY_NUM_LOCK none SDLK_NUMLOCK +BX_KEY_PAGE_DOWN none SDLK_PAGEDOWN +BX_KEY_PAGE_UP none SDLK_PAGEUP +BX_KEY_PAUSE none SDLK_BREAK +BX_KEY_PAUSE none SDLK_PAUSE +BX_KEY_PERIOD+BX_KEY_SHIFT_L '>' SDLK_GREATER +BX_KEY_PERIOD '.' SDLK_PERIOD +BX_KEY_PRINT none SDLK_PRINT +BX_KEY_PRINT none SDLK_SYSREQ +BX_KEY_RIGHT none SDLK_RIGHT +#BX_KEY_RIGHT_BRACKET+BX_KEY_SHIFT_L '}' SDLK_BRACERIGHT +BX_KEY_RIGHT_BRACKET ']' SDLK_RIGHTBRACKET +BX_KEY_SCRL_LOCK none SDLK_SCROLLOCK +BX_KEY_SEMICOLON+BX_KEY_SHIFT_L ':' SDLK_COLON +BX_KEY_SEMICOLON ';' SDLK_SEMICOLON +BX_KEY_SHIFT_L none SDLK_LSHIFT +BX_KEY_SHIFT_R none SDLK_RSHIFT +BX_KEY_SINGLE_QUOTE apostrophe SDLK_QUOTE +BX_KEY_SINGLE_QUOTE+BX_KEY_SHIFT_L '"' SDLK_QUOTEDBL +BX_KEY_SLASH+BX_KEY_SHIFT_L '?' SDLK_QUESTION +BX_KEY_SLASH '/' SDLK_SLASH +BX_KEY_SPACE space SDLK_SPACE +#BX_KEY_TAB none SDLK_ISO_LEFT_TAB +BX_KEY_TAB tab SDLK_TAB +BX_KEY_UP none SDLK_UP +BX_KEY_WIN_L none SDLK_LSUPER +BX_KEY_WIN_R none SDLK_LSUPER diff --git a/bochs/gui/keymaps/x11-pc-be.map b/bochs/gui/keymaps/x11-pc-be.map new file mode 100644 index 00000000..c3895050 --- /dev/null +++ b/bochs/gui/keymaps/x11-pc-be.map @@ -0,0 +1,220 @@ +# Bochs Keymap file +# $Id$ +# Target: PC(x86) keyboard, BE keymap +# Author: Wouter Verhelst, +# based on FR keymap by Christophe Bothamy, Bryce Denney +# +# The keymap file describes the layout of a keyboard, and how it translates +# into Bochs key codes. +# +# Format: +# BX_Keysym ASCII_equivalent Xwin_Keysym +# +# Or, for keys that require modifiers: +# BX_Keysym+BX_Modifier ASCII_equivalent Xwin_Keysym +# +# BX_Keysym and BX_Modifier must be present in the bx_key_symbol[] list in +# gui/keymap.cc. The BX_Modifier is usually a shift key press, but it +# could be any key. Presently a maximum of one modifier is supported, but this +# could be changed in keymap.h (structure def has only one slot for modifier), +# keymap.cc (parsing code), and iodev/keyboard.cc (simulate keypresses for >1 +# modifier). +# +# The ASCII_equivalent must be either apostrophe + one character + apostrophe, +# or one of these keywords: space, return, tab, backslash, apostrophe, none. +# This format is designed to look like a char constant in C, but it's a very +# simple parser. There's no concept of backslash being an escape char. The +# backslash and apostrophe entries are provided for aesthetic purposes only: no +# C++ programmer wants to see '\' or '''. The parser doesn't care, but they are +# ugly. +# +# Xwin_Keysym is the X windows equivalent of the key combination. These +# codes should match whatever you find in /usr/X11R6/include/X11/keysymdef.h. +# If you're running X windows, Bochs will take each of these Xwin_Keysyms, +# pull off the XK_ in front, and use XStringToKeysym() to change them into +# numerical codes. If this lookup fails, you will get a panic and you need +# to edit the keymap file. + +BX_KEY_0+BX_KEY_SHIFT_L '0' XK_0 +BX_KEY_0 '' XK_agrave +BX_KEY_0+BX_KEY_ALT_R '}' XK_braceright +BX_KEY_1+BX_KEY_SHIFT_L '1' XK_1 +BX_KEY_1 '&' XK_ampersand +BX_KEY_1+BX_KEY_ALT_R '|' XK_bar +BX_KEY_2+BX_KEY_SHIFT_L '2' XK_2 +BX_KEY_2+BX_KEY_ALT_R '@' XK_at +BX_KEY_2 '' XK_eacute +BX_KEY_3+BX_KEY_SHIFT_L '3' XK_3 +BX_KEY_3+BX_KEY_ALT_R '#' XK_numbersign +BX_KEY_3 '"' XK_quotedbl +BX_KEY_4+BX_KEY_SHIFT_L '4' XK_4 +BX_KEY_4 apostrophe XK_apostrophe +BX_KEY_5+BX_KEY_SHIFT_L '5' XK_5 +BX_KEY_5 '(' XK_parenleft +BX_KEY_6+BX_KEY_SHIFT_L '6' XK_6 +BX_KEY_6+BX_KEY_ALT_R '^' XK_asciicircum +BX_KEY_6 '' XK_section +BX_KEY_7+BX_KEY_SHIFT_L '7' XK_7 +BX_KEY_7 '' XK_egrave +BX_KEY_8+BX_KEY_SHIFT_L '8' XK_8 +BX_KEY_8 '!' XK_exclam +BX_KEY_9+BX_KEY_SHIFT_L '9' XK_9 +BX_KEY_9+BX_KEY_ALT_R '{' XK_braceleft +BX_KEY_9 '' XK_ccedilla +BX_KEY_A+BX_KEY_SHIFT_L 'Q' XK_Q +BX_KEY_A 'q' XK_q +BX_KEY_B+BX_KEY_SHIFT_L 'B' XK_B +BX_KEY_B 'b' XK_b +BX_KEY_C+BX_KEY_SHIFT_L 'C' XK_C +BX_KEY_C 'c' XK_c +BX_KEY_D+BX_KEY_SHIFT_L 'D' XK_D +BX_KEY_D 'd' XK_d +BX_KEY_E+BX_KEY_SHIFT_L 'E' XK_E +BX_KEY_E 'e' XK_e +BX_KEY_E+BX_KEY_ALT_R none XK_EuroSign +BX_KEY_F+BX_KEY_SHIFT_L 'F' XK_F +BX_KEY_F 'f' XK_f +BX_KEY_G+BX_KEY_SHIFT_L 'G' XK_G +BX_KEY_G 'g' XK_g +BX_KEY_H+BX_KEY_SHIFT_L 'H' XK_H +BX_KEY_H 'h' XK_h +BX_KEY_I+BX_KEY_SHIFT_L 'I' XK_I +BX_KEY_I 'i' XK_i +BX_KEY_J+BX_KEY_SHIFT_L 'J' XK_J +BX_KEY_J 'j' XK_j +BX_KEY_K+BX_KEY_SHIFT_L 'K' XK_K +BX_KEY_K 'k' XK_k +BX_KEY_L+BX_KEY_SHIFT_L 'L' XK_L +BX_KEY_L 'l' XK_l +BX_KEY_M+BX_KEY_SHIFT_L '?' XK_question +BX_KEY_M ',' XK_comma +BX_KEY_N+BX_KEY_SHIFT_L 'N' XK_N +BX_KEY_N 'n' XK_n +BX_KEY_O+BX_KEY_SHIFT_L 'O' XK_O +BX_KEY_O 'o' XK_o +BX_KEY_P+BX_KEY_SHIFT_L 'P' XK_P +BX_KEY_P 'p' XK_p +BX_KEY_Q+BX_KEY_SHIFT_L 'A' XK_A +BX_KEY_Q 'a' XK_a +BX_KEY_R+BX_KEY_SHIFT_L 'R' XK_R +BX_KEY_R 'r' XK_r +BX_KEY_S+BX_KEY_SHIFT_L 'S' XK_S +BX_KEY_S 's' XK_s +BX_KEY_T+BX_KEY_SHIFT_L 'T' XK_T +BX_KEY_T 't' XK_t +BX_KEY_U+BX_KEY_SHIFT_L 'U' XK_U +BX_KEY_U 'u' XK_u +BX_KEY_V+BX_KEY_SHIFT_L 'V' XK_V +BX_KEY_V 'v' XK_v +BX_KEY_W+BX_KEY_SHIFT_L 'Z' XK_Z +BX_KEY_W 'z' XK_z +BX_KEY_X+BX_KEY_SHIFT_L 'X' XK_X +BX_KEY_X 'x' XK_x +BX_KEY_Y+BX_KEY_SHIFT_L 'Y' XK_Y +BX_KEY_Y 'y' XK_y +BX_KEY_Z+BX_KEY_SHIFT_L 'W' XK_W +BX_KEY_Z 'w' XK_w +BX_KEY_F1 none XK_F1 +BX_KEY_F2 none XK_F2 +BX_KEY_F3 none XK_F3 +BX_KEY_F4 none XK_F4 +BX_KEY_F5 none XK_F5 +BX_KEY_F6 none XK_F6 +BX_KEY_F7 none XK_F7 +BX_KEY_F8 none XK_F8 +BX_KEY_F9 none XK_F9 +BX_KEY_F10 none XK_F10 +BX_KEY_F11 none XK_F11 +BX_KEY_F12 none XK_F12 +BX_KEY_ALT_L none XK_Alt_L +BX_KEY_ALT_L none XK_Meta_L +BX_KEY_ALT_R none XK_Alt_R +BX_KEY_ALT_R none XK_Mode_switch +BX_KEY_ALT_R none XK_Multi_key +BX_KEY_BACKSLASH '' XK_mu +BX_KEY_BACKSLASH+BX_KEY_SHIFT_L '' XK_sterling +BX_KEY_BACKSLASH+BX_KEY_ALT_R '`' XK_dead_grave +BX_KEY_BACKSPACE none XK_BackSpace +BX_KEY_CAPS_LOCK none XK_Caps_Lock +BX_KEY_COMMA+BX_KEY_SHIFT_L '.' XK_period +BX_KEY_COMMA ';' XK_semicolon +BX_KEY_CTRL_L none XK_Control_L +BX_KEY_CTRL_R none XK_Control_R +BX_KEY_DELETE none XK_Delete +BX_KEY_DOWN none XK_Down +BX_KEY_END none XK_End +BX_KEY_ENTER return XK_Return +BX_KEY_EQUALS '-' XK_minus +BX_KEY_EQUALS+BX_KEY_SHIFT_L '_' XK_underscore +BX_KEY_ESC none XK_Escape +BX_KEY_GRAVE '' XK_twosuperior +BX_KEY_GRAVE+BX_KEY_SHIFT_L '' XK_threesuperior +BX_KEY_HOME none XK_Home +BX_KEY_INSERT none XK_Insert +BX_KEY_KP_5 none XK_KP_5 +BX_KEY_KP_5 none XK_KP_Begin +BX_KEY_KP_ADD none XK_KP_Add +BX_KEY_KP_DELETE none XK_KP_Decimal +BX_KEY_KP_DELETE none XK_KP_Delete +BX_KEY_KP_DIVIDE none XK_KP_Divide +BX_KEY_KP_DOWN none XK_KP_2 +BX_KEY_KP_DOWN none XK_KP_Down +BX_KEY_KP_END none XK_KP_1 +BX_KEY_KP_END none XK_KP_End +BX_KEY_KP_ENTER none XK_KP_Enter +BX_KEY_KP_HOME none XK_KP_7 +BX_KEY_KP_HOME none XK_KP_Home +BX_KEY_KP_INSERT none XK_KP_0 +BX_KEY_KP_INSERT none XK_KP_Insert +BX_KEY_KP_LEFT none XK_KP_4 +BX_KEY_KP_LEFT none XK_KP_Left +BX_KEY_KP_MULTIPLY none XK_KP_Multiply +BX_KEY_KP_PAGE_DOWN none XK_KP_3 +BX_KEY_KP_PAGE_DOWN none XK_KP_Page_Down +BX_KEY_KP_PAGE_UP none XK_KP_9 +BX_KEY_KP_PAGE_UP none XK_KP_Page_Up +BX_KEY_KP_RIGHT none XK_KP_6 +BX_KEY_KP_RIGHT none XK_KP_Right +BX_KEY_KP_SUBTRACT none XK_KP_Subtract +BX_KEY_KP_UP none XK_KP_8 +BX_KEY_KP_UP none XK_KP_Up +BX_KEY_LEFT none XK_Left +BX_KEY_LEFT_BACKSLASH+BX_KEY_SHIFT_L '>' XK_greater +BX_KEY_LEFT_BACKSLASH '<' XK_less +BX_KEY_LEFT_BACKSLASH+BX_KEY_ALT_R backslash XK_backslash +BX_KEY_LEFT_BRACKET none XK_dead_circumflex +BX_KEY_LEFT_BRACKET+BX_KEY_SHIFT_L none XK_dead_diaeresis +BX_KEY_LEFT_BRACKET+BX_KEY_ALT_R '[' XK_bracketleft +BX_KEY_MENU none XK_Menu +BX_KEY_MINUS+BX_KEY_SHIFT_L '' XK_degree +BX_KEY_MINUS ')' XK_parenright +BX_KEY_NUM_LOCK none XK_Num_Lock +BX_KEY_PAGE_DOWN none XK_Page_Down +BX_KEY_PAGE_UP none XK_Page_Up +BX_KEY_PAUSE none XK_Break +BX_KEY_PAUSE none XK_Pause +BX_KEY_PERIOD ':' XK_colon +BX_KEY_PERIOD+BX_KEY_SHIFT_L '/' XK_slash +BX_KEY_PRINT none XK_Print +BX_KEY_PRINT none XK_Sys_Req +BX_KEY_RIGHT none XK_Right +BX_KEY_RIGHT_BRACKET '$' XK_dollar +BX_KEY_RIGHT_BRACKET+BX_KEY_SHIFT_L '*' XK_asterisk +BX_KEY_RIGHT_BRACKET+BX_KEY_ALT_R ']' XK_bracketright +BX_KEY_SCRL_LOCK none XK_Scroll_Lock +BX_KEY_SEMICOLON+BX_KEY_SHIFT_L 'M' XK_M +BX_KEY_SEMICOLON 'm' XK_m +BX_KEY_SHIFT_L none XK_Shift_L +BX_KEY_SHIFT_R none XK_Shift_R +BX_KEY_SINGLE_QUOTE+BX_KEY_SHIFT_L '%' XK_percent +BX_KEY_SINGLE_QUOTE+BX_KEY_ALT_R none XK_dead_acute +BX_KEY_SINGLE_QUOTE '' XK_ugrave +BX_KEY_SLASH '=' XK_equal +BX_KEY_SLASH+BX_KEY_SHIFT_L '+' XK_plus +BX_KEY_SLASH+BX_KEY_ALT_R none XK_dead_tilde +BX_KEY_SPACE space XK_space +BX_KEY_TAB none XK_ISO_Left_Tab +BX_KEY_TAB tab XK_Tab +BX_KEY_UP none XK_Up +BX_KEY_WIN_L none XK_Super_L +BX_KEY_WIN_R none XK_Super_R diff --git a/bochs/gui/keymaps/x11-pc-da.map b/bochs/gui/keymaps/x11-pc-da.map new file mode 100644 index 00000000..41ead2b6 --- /dev/null +++ b/bochs/gui/keymaps/x11-pc-da.map @@ -0,0 +1,247 @@ +# Bochs Keymap file +# $Id: x11-pc-da.map,v 0.9 2002/09/02 +# Target: PC(x86) keyboard, DA keymap +# Author: Andreas Ott +# +# The keymap file describes the layout of a keyboard, and how it translates +# into Bochs key codes. +# +# Format: +# BX_Keysym ASCII_equivalent Xwin_Keysym +# +# Or, for keys that require modifiers: +# BX_Keysym+BX_Modifier ASCII_equivalent Xwin_Keysym +# +# BX_Keysym and BX_Modifier must be present in the bx_key_symbol[] list in +# gui/keymap.cc. The BX_Modifier is usually a shift key press, but it +# could be any key. Presently a maximum of one modifier is supported, but this +# could be changed in keymap.h (structure def has only one slot for modifier), +# keymap.cc (parsing code), and iodev/keyboard.cc (simulate keypresses for >1 +# modifier). +# +# The ASCII_equivalent must be either apostrophe + one character + apostrophe, +# or one of these keywords: space, return, tab, backslash, apostrophe, none. +# This format is designed to look like a char constant in C, but it's a very +# simple parser. There's no concept of backslash being an escape char. The +# backslash and apostrophe entries are provided for aesthetic purposes only: no +# C++ programmer wants to see '\' or '''. The parser doesn't care, but they are +# ugly. +# +# Xwin_Keysym is the X windows equivalent of the key combination. These +# codes should match whatever you find in /usr/X11R6/include/X11/keysymdef.h. +# If you're running X windows, Bochs will take each of these Xwin_Keysyms, +# pull off the XK_ in front, and use XStringToKeysym() to change them into +# numerical codes. If this lookup fails, you will get a panic and you need +# to edit the keymap file. + +BX_KEY_0 '0' XK_0 +BX_KEY_0+BX_KEY_ALT_R '}' XK_braceright +BX_KEY_0+BX_KEY_SHIFT_L '=' XK_equal +BX_KEY_1 '1' XK_1 +BX_KEY_1+BX_KEY_SHIFT_L '!' XK_exclam +BX_KEY_1+BX_KEY_ALT_R '' XK_exclamdown +BX_KEY_2 '2' XK_2 +BX_KEY_2+BX_KEY_SHIFT_L '=' XK_quotedbl +BX_KEY_2+BX_KEY_ALT_R '@' XK_at # XK_twosuperior +BX_KEY_3 '3' XK_3 +BX_KEY_3+BX_KEY_SHIFT_L '#' XK_numbersign +BX_KEY_3+BX_KEY_ALT_R '' XK_sterling +BX_KEY_4 '4' XK_4 +BX_KEY_4+BX_KEY_SHIFT_L '' XK_currency +BX_KEY_4+BX_KEY_ALT_R '$' XK_dollar +BX_KEY_5 '5' XK_5 +BX_KEY_5+BX_KEY_ALT_R '' XK_onehalf +BX_KEY_5+BX_KEY_SHIFT_L '%' XK_percent +BX_KEY_6 '6' XK_6 +BX_KEY_6+BX_KEY_SHIFT_L '&' XK_ampersand +BX_KEY_6+BX_KEY_ALT_R '' XK_yen +BX_KEY_7 '7' XK_7 +BX_KEY_7+BX_KEY_ALT_R '{' XK_braceleft +BX_KEY_7+BX_KEY_SHIFT_L '/' XK_slash +BX_KEY_8 '8' XK_8 +BX_KEY_8+BX_KEY_ALT_R '[' XK_bracketleft +BX_KEY_8+BX_KEY_SHIFT_L '(' XK_parenleft +BX_KEY_9 '9' XK_9 +BX_KEY_9+BX_KEY_ALT_R ']' XK_bracketright +BX_KEY_9+BX_KEY_SHIFT_L ')' XK_parenright +BX_KEY_A+BX_KEY_SHIFT_L 'A' XK_A +BX_KEY_A 'a' XK_a +BX_KEY_A+BX_KEY_ALT_R '' XK_ordfeminine +BX_KEY_B+BX_KEY_SHIFT_L 'B' XK_B +BX_KEY_B 'b' XK_b +BX_KEY_B+BX_KEY_ALT_R none XK_rightdoublequotemark +BX_KEY_C+BX_KEY_SHIFT_L 'C' XK_C +BX_KEY_C 'c' XK_c +BX_KEY_C+BX_KEY_ALT_R '' XK_copyright +BX_KEY_D+BX_KEY_SHIFT_L 'D' XK_D +BX_KEY_D 'd' XK_d +BX_KEY_D+BX_KEY_ALT_R '' XK_eth +BX_KEY_E+BX_KEY_SHIFT_L 'E' XK_E +BX_KEY_E+BX_KEY_ALT_R '?' XK_EuroSign +BX_KEY_E 'e' XK_e +BX_KEY_F+BX_KEY_SHIFT_L 'F' XK_F +BX_KEY_F+BX_KEY_ALT_R '?' XK_dstroke +BX_KEY_F 'f' XK_f +BX_KEY_G+BX_KEY_SHIFT_L 'G' XK_G +BX_KEY_G+BX_KEY_ALT_R '?' XK_eng +BX_KEY_G 'g' XK_g +BX_KEY_H+BX_KEY_SHIFT_L 'H' XK_H +BX_KEY_H 'h' XK_h +BX_KEY_H+BX_KEY_ALT_R '?' XK_hstroke +BX_KEY_I+BX_KEY_SHIFT_L 'I' XK_I +BX_KEY_I 'i' XK_i +BX_KEY_I+BX_KEY_ALT_R none XK_rightarrow +BX_KEY_J+BX_KEY_SHIFT_L 'J' XK_J +BX_KEY_J 'j' XK_j +BX_KEY_K+BX_KEY_SHIFT_L 'K' XK_K +BX_KEY_K 'k' XK_k +BX_KEY_K+BX_KEY_ALT_R none XK_kra +BX_KEY_L+BX_KEY_SHIFT_L 'L' XK_L +BX_KEY_L 'l' XK_l +BX_KEY_M+BX_KEY_SHIFT_L 'M' XK_M +BX_KEY_M 'm' XK_m +BX_KEY_M+BX_KEY_ALT_R '' XK_mu +BX_KEY_N+BX_KEY_SHIFT_L 'N' XK_N +BX_KEY_N 'n' XK_n +BX_KEY_O+BX_KEY_SHIFT_L 'O' XK_O +BX_KEY_O 'o' XK_o +BX_KEY_O+BX_KEY_ALT_R none XK_oslash +BX_KEY_P+BX_KEY_SHIFT_L 'P' XK_P +BX_KEY_P 'p' XK_p +BX_KEY_P+BX_KEY_ALT_R '' XK_thorn +BX_KEY_Q+BX_KEY_SHIFT_L 'Q' XK_Q +BX_KEY_Q+BX_KEY_ALT_R '@' XK_at +BX_KEY_Q 'q' XK_q +BX_KEY_R+BX_KEY_SHIFT_L 'R' XK_R +BX_KEY_R+BX_KEY_ALT_R '' XK_registered +BX_KEY_R 'r' XK_r +BX_KEY_S+BX_KEY_SHIFT_L 'S' XK_S +BX_KEY_S 's' XK_s +BX_KEY_S+BX_KEY_ALT_R '' XK_ssharp +BX_KEY_T+BX_KEY_SHIFT_L 'T' XK_T +BX_KEY_T 't' XK_t +BX_KEY_T+BX_KEY_ALT_R '' XK_thorn +BX_KEY_U+BX_KEY_SHIFT_L 'U' XK_U +BX_KEY_U+BX_KEY_ALT_R none XK_downarrow +BX_KEY_U 'u' XK_u +BX_KEY_V+BX_KEY_SHIFT_L 'V' XK_V +BX_KEY_V+BX_KEY_ALT_R none XK_leftdoublequotemark +BX_KEY_V 'v' XK_v +BX_KEY_W+BX_KEY_SHIFT_L 'W' XK_W +BX_KEY_W+BX_KEY_ALT_R '?' XK_lstroke +BX_KEY_W 'w' XK_w +BX_KEY_X+BX_KEY_SHIFT_L 'X' XK_X +BX_KEY_X+BX_KEY_ALT_R '' XK_guillemotright +BX_KEY_X 'x' XK_x +BX_KEY_Y+BX_KEY_SHIFT_L 'Y' XK_Y +BX_KEY_Y+BX_KEY_ALT_R none XK_leftarrow +BX_KEY_Y 'y' XK_y +BX_KEY_Z+BX_KEY_SHIFT_L 'Z' XK_Z +BX_KEY_Z+BX_KEY_ALT_R '' XK_guillemotleft +BX_KEY_Z 'z' XK_z +BX_KEY_F1 none XK_F1 +BX_KEY_F2 none XK_F2 +BX_KEY_F3 none XK_F3 +BX_KEY_F4 none XK_F4 +BX_KEY_F5 none XK_F5 +BX_KEY_F6 none XK_F6 +BX_KEY_F7 none XK_F7 +BX_KEY_F8 none XK_F8 +BX_KEY_F9 none XK_F9 +BX_KEY_F10 none XK_F10 +BX_KEY_F11 none XK_F11 +BX_KEY_F12 none XK_F12 +BX_KEY_ALT_L none XK_Alt_L +BX_KEY_ALT_L none XK_Meta_L +BX_KEY_ALT_R none XK_Mode_switch +BX_KEY_ALT_R none XK_Multi_key +BX_KEY_BACKSLASH apostrophe XK_apostrophe +BX_KEY_BACKSLASH+BX_KEY_SHIFT_L '*' XK_asterisk +BX_KEY_BACKSPACE none XK_BackSpace +BX_KEY_CAPS_LOCK none XK_Caps_Lock +BX_KEY_COMMA ',' XK_comma +BX_KEY_COMMA+BX_KEY_ALT_R none XK_horizconnector +BX_KEY_COMMA+BX_KEY_SHIFT_L ';' XK_semicolon +BX_KEY_CTRL_L none XK_Control_L +BX_KEY_CTRL_R none XK_Control_R +BX_KEY_DELETE none XK_Delete +BX_KEY_DOWN none XK_Down +BX_KEY_END none XK_End +BX_KEY_ENTER return XK_Return +BX_KEY_EQUALS none XK_acute +BX_KEY_EQUALS+BX_KEY_ALT_R '|' XK_bar +BX_KEY_EQUALS+BX_KEY_SHIFT_L '`' XK_grave +BX_KEY_ESC none XK_Escape +BX_KEY_GRAVE '' XK_onehalf +BX_KEY_GRAVE+BX_KEY_SHIFT_L '' XK_section +BX_KEY_GRAVE+BX_KEY_ALT_R '' XK_threequarters +BX_KEY_HOME none XK_Home +BX_KEY_INSERT none XK_Insert +BX_KEY_KP_5 none XK_KP_5 +BX_KEY_KP_5 none XK_KP_Begin +BX_KEY_KP_ADD none XK_KP_Add +BX_KEY_KP_DELETE none XK_KP_Decimal +BX_KEY_KP_DELETE none XK_KP_Delete +BX_KEY_KP_DIVIDE none XK_KP_Divide +BX_KEY_KP_DOWN none XK_KP_2 +BX_KEY_KP_DOWN none XK_KP_Down +BX_KEY_KP_END none XK_KP_1 +BX_KEY_KP_END none XK_KP_End +BX_KEY_KP_ENTER none XK_KP_Enter +BX_KEY_KP_HOME none XK_KP_7 +BX_KEY_KP_HOME none XK_KP_Home +BX_KEY_KP_INSERT none XK_KP_0 +BX_KEY_KP_INSERT none XK_KP_Insert +BX_KEY_KP_LEFT none XK_KP_4 +BX_KEY_KP_LEFT none XK_KP_Left +BX_KEY_KP_MULTIPLY none XK_KP_Multiply +BX_KEY_KP_PAGE_DOWN none XK_KP_3 +BX_KEY_KP_PAGE_DOWN none XK_KP_Page_Down +BX_KEY_KP_PAGE_UP none XK_KP_9 +BX_KEY_KP_PAGE_UP none XK_KP_Page_Up +BX_KEY_KP_RIGHT none XK_KP_6 +BX_KEY_KP_RIGHT none XK_KP_Right +BX_KEY_KP_SUBTRACT none XK_KP_Subtract +BX_KEY_KP_UP none XK_KP_8 +BX_KEY_KP_UP none XK_KP_Up +BX_KEY_LEFT none XK_Left +BX_KEY_LEFT_BACKSLASH+BX_KEY_ALT_R backslash XK_backslash +BX_KEY_LEFT_BACKSLASH+BX_KEY_SHIFT_L '>' XK_greater +BX_KEY_LEFT_BACKSLASH '<' XK_less +BX_KEY_LEFT_BRACKET+BX_KEY_SHIFT_L '' XK_Aring +BX_KEY_LEFT_BRACKET+BX_KEY_ALT_L none XK_diaeresis +BX_KEY_LEFT_BRACKET '' XK_aring +BX_KEY_MENU none XK_Menu +BX_KEY_MINUS+BX_KEY_ALT_R '' XK_plusminus +BX_KEY_MINUS+BX_KEY_SHIFT_L '?' XK_question +BX_KEY_MINUS '+' XK_plus +BX_KEY_NUM_LOCK none XK_Num_Lock +BX_KEY_PAGE_DOWN none XK_Page_Down +BX_KEY_PAGE_UP none XK_Page_Up +BX_KEY_PAUSE none XK_Break +BX_KEY_PAUSE none XK_Pause +BX_KEY_PERIOD+BX_KEY_SHIFT_L ':' XK_colon +BX_KEY_PERIOD '.' XK_period +BX_KEY_PERIOD+BX_KEY_ALT_R '' XK_periodcentered +BX_KEY_PRINT none XK_Print +BX_KEY_PRINT none XK_Sys_Req +BX_KEY_RIGHT none XK_Right +BX_KEY_RIGHT_BRACKET+BX_KEY_ALT_R '~' XK_asciitilde +BX_KEY_RIGHT_BRACKET+BX_KEY_SHIFT_L '^' XK_asciicircum +BX_KEY_RIGHT_BRACKET '"' XK_diaeresis +BX_KEY_SCRL_LOCK none XK_Scroll_Lock +BX_KEY_SEMICOLON+BX_KEY_SHIFT_L '' XK_AE +BX_KEY_SEMICOLON '' XK_ae +BX_KEY_SHIFT_L none XK_Shift_L +BX_KEY_SHIFT_R none XK_Shift_R +BX_KEY_SINGLE_QUOTE '' XK_oslash +BX_KEY_SINGLE_QUOTE+BX_KEY_SHIFT_L '' XK_Ooblique +BX_KEY_SLASH+BX_KEY_ALT_R '' XK_hyphen +BX_KEY_SLASH '-' XK_minus +BX_KEY_SLASH+BX_KEY_SHIFT_L '_' XK_underscore +BX_KEY_SPACE space XK_space +BX_KEY_TAB none XK_ISO_Left_Tab +BX_KEY_TAB tab XK_Tab +BX_KEY_UP none XK_Up +BX_KEY_WIN_L none XK_Super_L +BX_KEY_WIN_R none XK_Super_R diff --git a/bochs/gui/keymaps/x11-pc-de.map b/bochs/gui/keymaps/x11-pc-de.map new file mode 100644 index 00000000..c3388c2a --- /dev/null +++ b/bochs/gui/keymaps/x11-pc-de.map @@ -0,0 +1,248 @@ +# Bochs Keymap file +# $Id$ +# Target: PC(x86) keyboard, DE keymap +# Author: Volker Ruppert +# +# The keymap file describes the layout of a keyboard, and how it translates +# into Bochs key codes. +# +# Format: +# BX_Keysym ASCII_equivalent Xwin_Keysym +# +# Or, for keys that require modifiers: +# BX_Keysym+BX_Modifier ASCII_equivalent Xwin_Keysym +# +# BX_Keysym and BX_Modifier must be present in the bx_key_symbol[] list in +# gui/keymap.cc. The BX_Modifier is usually a shift key press, but it +# could be any key. Presently a maximum of one modifier is supported, but this +# could be changed in keymap.h (structure def has only one slot for modifier), +# keymap.cc (parsing code), and iodev/keyboard.cc (simulate keypresses for >1 +# modifier). +# +# The ASCII_equivalent must be either apostrophe + one character + apostrophe, +# or one of these keywords: space, return, tab, backslash, apostrophe, none. +# This format is designed to look like a char constant in C, but it's a very +# simple parser. There's no concept of backslash being an escape char. The +# backslash and apostrophe entries are provided for aesthetic purposes only: no +# C++ programmer wants to see '\' or '''. The parser doesn't care, but they are +# ugly. +# +# Xwin_Keysym is the X windows equivalent of the key combination. These +# codes should match whatever you find in /usr/X11R6/include/X11/keysymdef.h. +# If you're running X windows, Bochs will take each of these Xwin_Keysyms, +# pull off the XK_ in front, and use XStringToKeysym() to change them into +# numerical codes. If this lookup fails, you will get a panic and you need +# to edit the keymap file. + +BX_KEY_0 '0' XK_0 +BX_KEY_0+BX_KEY_ALT_R '}' XK_braceright +BX_KEY_0+BX_KEY_SHIFT_L '=' XK_equal +BX_KEY_1 '1' XK_1 +BX_KEY_1+BX_KEY_SHIFT_L '!' XK_exclam +BX_KEY_1+BX_KEY_ALT_R '' XK_onesuperior +BX_KEY_2 '2' XK_2 +BX_KEY_2+BX_KEY_SHIFT_L '"' XK_quotedbl +BX_KEY_2+BX_KEY_ALT_R '' XK_twosuperior +BX_KEY_3 '3' XK_3 +BX_KEY_3+BX_KEY_SHIFT_L '' XK_section +BX_KEY_3+BX_KEY_ALT_R '' XK_threesuperior +BX_KEY_4 '4' XK_4 +BX_KEY_4+BX_KEY_SHIFT_L '$' XK_dollar +BX_KEY_4+BX_KEY_ALT_R '' XK_onequarter +BX_KEY_5 '5' XK_5 +BX_KEY_5+BX_KEY_ALT_R '' XK_onehalf +BX_KEY_5+BX_KEY_SHIFT_L '%' XK_percent +BX_KEY_6 '6' XK_6 +BX_KEY_6+BX_KEY_SHIFT_L '&' XK_ampersand +BX_KEY_6+BX_KEY_ALT_R '' XK_threequarters +BX_KEY_7 '7' XK_7 +BX_KEY_7+BX_KEY_ALT_R '{' XK_braceleft +BX_KEY_7+BX_KEY_SHIFT_L '/' XK_slash +BX_KEY_8 '8' XK_8 +BX_KEY_8+BX_KEY_ALT_R '[' XK_bracketleft +BX_KEY_8+BX_KEY_SHIFT_L '(' XK_parenleft +BX_KEY_9 '9' XK_9 +BX_KEY_9+BX_KEY_ALT_R ']' XK_bracketright +BX_KEY_9+BX_KEY_SHIFT_L ')' XK_parenright +BX_KEY_A+BX_KEY_SHIFT_L 'A' XK_A +BX_KEY_A 'a' XK_a +BX_KEY_A+BX_KEY_ALT_R '' XK_ae +BX_KEY_B+BX_KEY_SHIFT_L 'B' XK_B +BX_KEY_B 'b' XK_b +BX_KEY_B+BX_KEY_ALT_R none XK_rightdoublequotemark +BX_KEY_C+BX_KEY_SHIFT_L 'C' XK_C +BX_KEY_C 'c' XK_c +BX_KEY_C+BX_KEY_ALT_R '' XK_cent +BX_KEY_D+BX_KEY_SHIFT_L 'D' XK_D +BX_KEY_D 'd' XK_d +BX_KEY_D+BX_KEY_ALT_R '' XK_eth +BX_KEY_E+BX_KEY_SHIFT_L 'E' XK_E +BX_KEY_E+BX_KEY_ALT_R none XK_EuroSign +BX_KEY_E 'e' XK_e +BX_KEY_F+BX_KEY_SHIFT_L 'F' XK_F +BX_KEY_F+BX_KEY_ALT_R none XK_dstroke +BX_KEY_F 'f' XK_f +BX_KEY_G+BX_KEY_SHIFT_L 'G' XK_G +BX_KEY_G+BX_KEY_ALT_R none XK_eng +BX_KEY_G 'g' XK_g +BX_KEY_H+BX_KEY_SHIFT_L 'H' XK_H +BX_KEY_H 'h' XK_h +BX_KEY_H+BX_KEY_ALT_R none XK_hstroke +BX_KEY_I+BX_KEY_SHIFT_L 'I' XK_I +BX_KEY_I 'i' XK_i +BX_KEY_I+BX_KEY_ALT_R none XK_rightarrow +BX_KEY_J+BX_KEY_SHIFT_L 'J' XK_J +BX_KEY_J 'j' XK_j +BX_KEY_K+BX_KEY_SHIFT_L 'K' XK_K +BX_KEY_K 'k' XK_k +BX_KEY_K+BX_KEY_ALT_R none XK_kra +BX_KEY_L+BX_KEY_SHIFT_L 'L' XK_L +BX_KEY_L 'l' XK_l +BX_KEY_M+BX_KEY_SHIFT_L 'M' XK_M +BX_KEY_M 'm' XK_m +BX_KEY_M+BX_KEY_ALT_R '' XK_mu +BX_KEY_N+BX_KEY_SHIFT_L 'N' XK_N +BX_KEY_N 'n' XK_n +BX_KEY_O+BX_KEY_SHIFT_L 'O' XK_O +BX_KEY_O 'o' XK_o +BX_KEY_O+BX_KEY_ALT_R '' XK_oslash +BX_KEY_P+BX_KEY_SHIFT_L 'P' XK_P +BX_KEY_P 'p' XK_p +BX_KEY_P+BX_KEY_ALT_R '' XK_thorn +BX_KEY_Q+BX_KEY_SHIFT_L 'Q' XK_Q +BX_KEY_Q+BX_KEY_ALT_R '@' XK_at +BX_KEY_Q 'q' XK_q +BX_KEY_R+BX_KEY_SHIFT_L 'R' XK_R +BX_KEY_R+BX_KEY_ALT_R '' XK_paragraph +BX_KEY_R 'r' XK_r +BX_KEY_S+BX_KEY_SHIFT_L 'S' XK_S +BX_KEY_S 's' XK_s +BX_KEY_T+BX_KEY_SHIFT_L 'T' XK_T +BX_KEY_T 't' XK_t +BX_KEY_T+BX_KEY_ALT_R none XK_tslash +BX_KEY_U+BX_KEY_SHIFT_L 'U' XK_U +BX_KEY_U+BX_KEY_ALT_R none XK_downarrow +BX_KEY_U 'u' XK_u +BX_KEY_V+BX_KEY_SHIFT_L 'V' XK_V +BX_KEY_V+BX_KEY_ALT_R none XK_leftdoublequotemark +BX_KEY_V 'v' XK_v +BX_KEY_W+BX_KEY_SHIFT_L 'W' XK_W +BX_KEY_W+BX_KEY_ALT_R none XK_lstroke +BX_KEY_W 'w' XK_w +BX_KEY_X+BX_KEY_SHIFT_L 'X' XK_X +BX_KEY_X+BX_KEY_ALT_R '' XK_guillemotright +BX_KEY_X 'x' XK_x +BX_KEY_Y+BX_KEY_SHIFT_L 'Z' XK_Z +BX_KEY_Y+BX_KEY_ALT_R none XK_leftarrow +BX_KEY_Y 'z' XK_z +BX_KEY_Z+BX_KEY_SHIFT_L 'Y' XK_Y +BX_KEY_Z+BX_KEY_ALT_R '' XK_guillemotleft +BX_KEY_Z 'y' XK_y +BX_KEY_F1 none XK_F1 +BX_KEY_F2 none XK_F2 +BX_KEY_F3 none XK_F3 +BX_KEY_F4 none XK_F4 +BX_KEY_F5 none XK_F5 +BX_KEY_F6 none XK_F6 +BX_KEY_F7 none XK_F7 +BX_KEY_F8 none XK_F8 +BX_KEY_F9 none XK_F9 +BX_KEY_F10 none XK_F10 +BX_KEY_F11 none XK_F11 +BX_KEY_F12 none XK_F12 +BX_KEY_ALT_L none XK_Alt_L +BX_KEY_ALT_L none XK_Meta_L +BX_KEY_ALT_R none XK_Alt_R +BX_KEY_ALT_R none XK_Mode_switch +BX_KEY_ALT_R none XK_Multi_key +BX_KEY_ALT_R none XK_ISO_Level3_Shift +BX_KEY_BACKSLASH apostrophe XK_apostrophe +BX_KEY_BACKSLASH '#' XK_numbersign +BX_KEY_BACKSPACE none XK_BackSpace +BX_KEY_CAPS_LOCK none XK_Caps_Lock +BX_KEY_COMMA ',' XK_comma +BX_KEY_COMMA+BX_KEY_ALT_R none XK_horizconnector +BX_KEY_COMMA+BX_KEY_SHIFT_L ';' XK_semicolon +BX_KEY_CTRL_L none XK_Control_L +BX_KEY_CTRL_R none XK_Control_R +BX_KEY_DELETE none XK_Delete +BX_KEY_DOWN none XK_Down +BX_KEY_END none XK_End +BX_KEY_ENTER return XK_Return +BX_KEY_EQUALS none XK_acute +BX_KEY_EQUALS+BX_KEY_ALT_R '' XK_cedilla +BX_KEY_EQUALS+BX_KEY_SHIFT_L '`' XK_grave +BX_KEY_ESC none XK_Escape +BX_KEY_GRAVE '^' XK_asciicircum +BX_KEY_GRAVE+BX_KEY_SHIFT_L '' XK_degree +BX_KEY_GRAVE+BX_KEY_ALT_R '' XK_notsign +BX_KEY_HOME none XK_Home +BX_KEY_INSERT none XK_Insert +BX_KEY_KP_5 none XK_KP_5 +BX_KEY_KP_5 none XK_KP_Begin +BX_KEY_KP_ADD none XK_KP_Add +BX_KEY_KP_DELETE none XK_KP_Decimal +BX_KEY_KP_DELETE none XK_KP_Delete +BX_KEY_KP_DIVIDE none XK_KP_Divide +BX_KEY_KP_DOWN none XK_KP_2 +BX_KEY_KP_DOWN none XK_KP_Down +BX_KEY_KP_END none XK_KP_1 +BX_KEY_KP_END none XK_KP_End +BX_KEY_KP_ENTER none XK_KP_Enter +BX_KEY_KP_HOME none XK_KP_7 +BX_KEY_KP_HOME none XK_KP_Home +BX_KEY_KP_INSERT none XK_KP_0 +BX_KEY_KP_INSERT none XK_KP_Insert +BX_KEY_KP_LEFT none XK_KP_4 +BX_KEY_KP_LEFT none XK_KP_Left +BX_KEY_KP_MULTIPLY none XK_KP_Multiply +BX_KEY_KP_PAGE_DOWN none XK_KP_3 +BX_KEY_KP_PAGE_DOWN none XK_KP_Page_Down +BX_KEY_KP_PAGE_UP none XK_KP_9 +BX_KEY_KP_PAGE_UP none XK_KP_Page_Up +BX_KEY_KP_RIGHT none XK_KP_6 +BX_KEY_KP_RIGHT none XK_KP_Right +BX_KEY_KP_SUBTRACT none XK_KP_Subtract +BX_KEY_KP_UP none XK_KP_8 +BX_KEY_KP_UP none XK_KP_Up +BX_KEY_LEFT none XK_Left +BX_KEY_LEFT_BACKSLASH+BX_KEY_ALT_R '|' XK_bar +BX_KEY_LEFT_BACKSLASH+BX_KEY_SHIFT_L '>' XK_greater +BX_KEY_LEFT_BACKSLASH '<' XK_less +BX_KEY_LEFT_BRACKET+BX_KEY_SHIFT_L '' XK_Udiaeresis +BX_KEY_LEFT_BRACKET+BX_KEY_ALT_L none XK_diaeresis +BX_KEY_LEFT_BRACKET '' XK_udiaeresis +BX_KEY_MENU none XK_Menu +BX_KEY_MINUS+BX_KEY_ALT_L backslash XK_backslash +BX_KEY_MINUS+BX_KEY_SHIFT_L '?' XK_question +BX_KEY_MINUS '' XK_ssharp +BX_KEY_NUM_LOCK none XK_Num_Lock +BX_KEY_PAGE_DOWN none XK_Page_Down +BX_KEY_PAGE_UP none XK_Page_Up +BX_KEY_PAUSE none XK_Break +BX_KEY_PAUSE none XK_Pause +BX_KEY_PERIOD+BX_KEY_SHIFT_L ':' XK_colon +BX_KEY_PERIOD '.' XK_period +BX_KEY_PERIOD+BX_KEY_ALT_L '' XK_periodcentered +BX_KEY_PRINT none XK_Print +BX_KEY_PRINT none XK_Sys_Req +BX_KEY_RIGHT none XK_Right +BX_KEY_RIGHT_BRACKET+BX_KEY_ALT_R '~' XK_asciitilde +BX_KEY_RIGHT_BRACKET+BX_KEY_SHIFT_L '*' XK_asterisk +BX_KEY_RIGHT_BRACKET '+' XK_plus +BX_KEY_SCRL_LOCK none XK_Scroll_Lock +BX_KEY_SEMICOLON+BX_KEY_SHIFT_L '' XK_Odiaeresis +BX_KEY_SEMICOLON '' XK_odiaeresis +BX_KEY_SHIFT_L none XK_Shift_L +BX_KEY_SHIFT_R none XK_Shift_R +BX_KEY_SINGLE_QUOTE+BX_KEY_SHIFT_L '' XK_Adiaeresis +BX_KEY_SINGLE_QUOTE '' XK_adiaeresis +BX_KEY_SLASH none XK_dead_belowdot +BX_KEY_SLASH '-' XK_minus +BX_KEY_SLASH+BX_KEY_SHIFT_L '_' XK_underscore +BX_KEY_SPACE space XK_space +BX_KEY_TAB none XK_ISO_Left_Tab +BX_KEY_TAB tab XK_Tab +BX_KEY_UP none XK_Up +BX_KEY_WIN_L none XK_Super_L +BX_KEY_WIN_R none XK_Super_R diff --git a/bochs/gui/keymaps/x11-pc-es.map b/bochs/gui/keymaps/x11-pc-es.map new file mode 100644 index 00000000..cd6d4cad --- /dev/null +++ b/bochs/gui/keymaps/x11-pc-es.map @@ -0,0 +1,217 @@ +# Bochs Keymap file +# $Id$ +# Target: PC(x86) keyboard, ES keymap +# Author: Vicente Hernando Ara +# +# The keymap file describes the layout of a keyboard, and how it translates +# into Bochs key codes. +# +# Format: +# BX_Keysym ASCII_equivalent Xwin_Keysym +# +# Or, for keys that require modifiers: +# BX_Keysym+BX_Modifier ASCII_equivalent Xwin_Keysym +# +# BX_Keysym and BX_Modifier must be present in the bx_key_symbol[] list in +# gui/keymap.cc. The BX_Modifier is usually a shift key press, but it +# could be any key. Presently a maximum of one modifier is supported, but this +# could be changed in keymap.h (structure def has only one slot for modifier), +# keymap.cc (parsing code), and iodev/keyboard.cc (simulate keypresses for >1 +# modifier). +# +# The ASCII_equivalent must be either apostrophe + one character + apostrophe, +# or one of these keywords: space, return, tab, backslash, apostrophe, none. +# This format is designed to look like a char constant in C, but it's a very +# simple parser. There's no concept of backslash being an escape char. The +# backslash and apostrophe entries are provided for aesthetic purposes only: no +# C++ programmer wants to see '\' or '''. The parser doesn't care, but they are +# ugly. +# +# Xwin_Keysym is the X windows equivalent of the key combination. These +# codes should match whatever you find in /usr/X11R6/include/X11/keysymdef.h. +# If you're running X windows, Bochs will take each of these Xwin_Keysyms, +# pull off the XK_ in front, and use XStringToKeysym() to change them into +# numerical codes. If this lookup fails, you will get a panic and you need +# to edit the keymap file. +# +BX_KEY_0 none XK_0 +BX_KEY_0 none XK_equal +BX_KEY_1 none XK_1 +BX_KEY_1 none XK_bar +BX_KEY_1 none XK_exclam +BX_KEY_2 none XK_2 +BX_KEY_2 none XK_at +BX_KEY_2 none XK_quotedbl +BX_KEY_3 none XK_3 +BX_KEY_3 none XK_numbersign +BX_KEY_3 none XK_periodcentered +BX_KEY_4 none XK_4 +BX_KEY_4 none XK_dollar +BX_KEY_5 none XK_5 +BX_KEY_5 none XK_percent +BX_KEY_6 none XK_6 +BX_KEY_6 none XK_ampersand +BX_KEY_7 none XK_7 +BX_KEY_7 none XK_slash +BX_KEY_8 none XK_8 +BX_KEY_8 none XK_parenleft +BX_KEY_9 none XK_9 +BX_KEY_9 none XK_parenright +BX_KEY_A none XK_A +BX_KEY_A none XK_a +BX_KEY_B none XK_B +BX_KEY_B none XK_b +BX_KEY_C none XK_C +BX_KEY_C none XK_c +BX_KEY_D none XK_D +BX_KEY_D none XK_d +BX_KEY_E none XK_E +BX_KEY_E none XK_EuroSign +BX_KEY_E none XK_e +BX_KEY_F none XK_F +BX_KEY_F none XK_f +BX_KEY_G none XK_G +BX_KEY_G none XK_g +BX_KEY_H none XK_H +BX_KEY_H none XK_h +BX_KEY_I none XK_I +BX_KEY_I none XK_i +BX_KEY_J none XK_J +BX_KEY_J none XK_j +BX_KEY_K none XK_K +BX_KEY_K none XK_k +BX_KEY_L none XK_L +BX_KEY_L none XK_l +BX_KEY_M none XK_M +BX_KEY_M none XK_m +BX_KEY_N none XK_N +BX_KEY_N none XK_n +BX_KEY_O none XK_O +BX_KEY_O none XK_o +BX_KEY_P none XK_P +BX_KEY_P none XK_p +BX_KEY_Q none XK_Q +BX_KEY_Q none XK_q +BX_KEY_R none XK_R +BX_KEY_R none XK_r +BX_KEY_S none XK_S +BX_KEY_S none XK_s +BX_KEY_T none XK_T +BX_KEY_T none XK_t +BX_KEY_U none XK_U +BX_KEY_U none XK_u +BX_KEY_V none XK_V +BX_KEY_V none XK_v +BX_KEY_W none XK_W +BX_KEY_W none XK_w +BX_KEY_X none XK_X +BX_KEY_X none XK_x +BX_KEY_Y none XK_Y +BX_KEY_Y none XK_y +BX_KEY_Z none XK_Z +BX_KEY_Z none XK_z +BX_KEY_F1 none XK_F1 +BX_KEY_F2 none XK_F2 +BX_KEY_F3 none XK_F3 +BX_KEY_F4 none XK_F4 +BX_KEY_F5 none XK_F5 +BX_KEY_F6 none XK_F6 +BX_KEY_F7 none XK_F7 +BX_KEY_F8 none XK_F8 +BX_KEY_F9 none XK_F9 +BX_KEY_F10 none XK_F10 +BX_KEY_F11 none XK_F11 +BX_KEY_F12 none XK_F12 +BX_KEY_ALT_L none XK_Alt_L +BX_KEY_ALT_L none XK_Meta_L +BX_KEY_ALT_R none XK_Alt_R +BX_KEY_ALT_R none XK_Mode_switch +BX_KEY_ALT_R none XK_Multi_key +BX_KEY_BACKSLASH none XK_Ccedilla +BX_KEY_BACKSLASH none XK_ccedilla +BX_KEY_BACKSPACE none XK_BackSpace +BX_KEY_CAPS_LOCK none XK_Caps_Lock +BX_KEY_COMMA none XK_comma +BX_KEY_COMMA none XK_semicolon +BX_KEY_CTRL_L none XK_Control_L +BX_KEY_CTRL_R none XK_Control_R +BX_KEY_DELETE none XK_Delete +BX_KEY_DOWN none XK_Down +BX_KEY_END none XK_End +BX_KEY_ENTER none XK_Return +BX_KEY_EQUALS none XK_exclamdown +BX_KEY_EQUALS none XK_questiondown +BX_KEY_ESC none XK_Escape +BX_KEY_GRAVE none XK_asciitilde +BX_KEY_GRAVE none XK_backslash +BX_KEY_GRAVE none XK_grave +BX_KEY_GRAVE none XK_masculine +BX_KEY_GRAVE none XK_ordfeminine +BX_KEY_HOME none XK_Home +BX_KEY_INSERT none XK_Insert +BX_KEY_KP_5 none XK_KP_5 +BX_KEY_KP_5 none XK_KP_Begin +BX_KEY_KP_ADD none XK_KP_Add +BX_KEY_KP_DELETE none XK_KP_Decimal +BX_KEY_KP_DELETE none XK_KP_Delete +BX_KEY_KP_DIVIDE none XK_KP_Divide +BX_KEY_KP_DOWN none XK_KP_2 +BX_KEY_KP_DOWN none XK_KP_Down +BX_KEY_KP_END none XK_KP_1 +BX_KEY_KP_END none XK_KP_End +BX_KEY_KP_ENTER none XK_KP_Enter +BX_KEY_KP_HOME none XK_KP_7 +BX_KEY_KP_HOME none XK_KP_Home +BX_KEY_KP_INSERT none XK_KP_0 +BX_KEY_KP_INSERT none XK_KP_Insert +BX_KEY_KP_LEFT none XK_KP_4 +BX_KEY_KP_LEFT none XK_KP_Left +BX_KEY_KP_MULTIPLY none XK_KP_Multiply +BX_KEY_KP_PAGE_DOWN none XK_KP_3 +BX_KEY_KP_PAGE_DOWN none XK_KP_Page_Down +BX_KEY_KP_PAGE_UP none XK_KP_9 +BX_KEY_KP_PAGE_UP none XK_KP_Page_Up +BX_KEY_KP_RIGHT none XK_KP_6 +BX_KEY_KP_RIGHT none XK_KP_Right +BX_KEY_KP_SUBTRACT none XK_KP_Subtract +BX_KEY_KP_UP none XK_KP_8 +BX_KEY_KP_UP none XK_KP_Up +BX_KEY_LEFT none XK_Left +BX_KEY_LEFT_BACKSLASH none XK_greater +BX_KEY_LEFT_BACKSLASH none XK_less +BX_KEY_LEFT_BRACKET none XK_braceleft +BX_KEY_LEFT_BRACKET none XK_bracketleft +BX_KEY_LEFT_BRACKET none XK_dead_circumflex +BX_KEY_LEFT_BRACKET none XK_dead_grave +BX_KEY_MENU none XK_Menu +BX_KEY_MINUS none XK_apostrophe +BX_KEY_MINUS none XK_question +BX_KEY_NUM_LOCK none XK_Num_Lock +BX_KEY_PAGE_DOWN none XK_Page_Down +BX_KEY_PAGE_UP none XK_Page_Up +BX_KEY_PAUSE none XK_Break +BX_KEY_PAUSE none XK_Pause +BX_KEY_PERIOD none XK_colon +BX_KEY_PERIOD none XK_period +BX_KEY_PRINT none XK_Print +BX_KEY_PRINT none XK_Sys_Req +BX_KEY_RIGHT none XK_Right +BX_KEY_RIGHT_BRACKET none XK_asterisk +BX_KEY_RIGHT_BRACKET none XK_braceright +BX_KEY_RIGHT_BRACKET none XK_bracketright +BX_KEY_RIGHT_BRACKET none XK_plus +BX_KEY_SCRL_LOCK none XK_Scroll_Lock +BX_KEY_SEMICOLON none XK_Ntilde +BX_KEY_SEMICOLON none XK_ntilde +BX_KEY_SHIFT_L none XK_Shift_L +BX_KEY_SHIFT_R none XK_Shift_R +BX_KEY_SINGLE_QUOTE none XK_dead_acute +BX_KEY_SINGLE_QUOTE none XK_dead_diaeresis +BX_KEY_SLASH none XK_minus +BX_KEY_SLASH none XK_underscore +BX_KEY_SPACE none XK_space +BX_KEY_TAB none XK_ISO_Left_Tab +BX_KEY_TAB none XK_Tab +BX_KEY_UP none XK_Up +BX_KEY_WIN_L none XK_Super_L +BX_KEY_WIN_R none XK_Super_R diff --git a/bochs/gui/keymaps/x11-pc-fr.map b/bochs/gui/keymaps/x11-pc-fr.map new file mode 100644 index 00000000..d1d59778 --- /dev/null +++ b/bochs/gui/keymaps/x11-pc-fr.map @@ -0,0 +1,218 @@ +# Bochs Keymap file +# $Id$ +# Target: PC(x86) keyboard, FR keymap +# Author: Christophe Bothamy, Bryce Denney +# +# The keymap file describes the layout of a keyboard, and how it translates +# into Bochs key codes. +# +# Format: +# BX_Keysym ASCII_equivalent Xwin_Keysym +# +# Or, for keys that require modifiers: +# BX_Keysym+BX_Modifier ASCII_equivalent Xwin_Keysym +# +# BX_Keysym and BX_Modifier must be present in the bx_key_symbol[] list in +# gui/keymap.cc. The BX_Modifier is usually a shift key press, but it +# could be any key. Presently a maximum of one modifier is supported, but this +# could be changed in keymap.h (structure def has only one slot for modifier), +# keymap.cc (parsing code), and iodev/keyboard.cc (simulate keypresses for >1 +# modifier). +# +# The ASCII_equivalent must be either apostrophe + one character + apostrophe, +# or one of these keywords: space, return, tab, backslash, apostrophe, none. +# This format is designed to look like a char constant in C, but it's a very +# simple parser. There's no concept of backslash being an escape char. The +# backslash and apostrophe entries are provided for aesthetic purposes only: no +# C++ programmer wants to see '\' or '''. The parser doesn't care, but they are +# ugly. +# +# Xwin_Keysym is the X windows equivalent of the key combination. These +# codes should match whatever you find in /usr/X11R6/include/X11/keysymdef.h. +# If you're running X windows, Bochs will take each of these Xwin_Keysyms, +# pull off the XK_ in front, and use XStringToKeysym() to change them into +# numerical codes. If this lookup fails, you will get a panic and you need +# to edit the keymap file. + +BX_KEY_0+BX_KEY_SHIFT_L '0' XK_0 +BX_KEY_0 '' XK_agrave +BX_KEY_0+BX_KEY_ALT_R '@' XK_at +BX_KEY_1+BX_KEY_SHIFT_L '1' XK_1 +BX_KEY_1 '&' XK_ampersand +BX_KEY_2+BX_KEY_SHIFT_L '2' XK_2 +BX_KEY_2+BX_KEY_ALT_R '~' XK_asciitilde +BX_KEY_2 '' XK_eacute +BX_KEY_3+BX_KEY_SHIFT_L '3' XK_3 +BX_KEY_3+BX_KEY_ALT_R '#' XK_numbersign +BX_KEY_3 '"' XK_quotedbl +BX_KEY_4+BX_KEY_SHIFT_L '4' XK_4 +BX_KEY_4 apostrophe XK_apostrophe +BX_KEY_4+BX_KEY_ALT_R '{' XK_braceleft +BX_KEY_5+BX_KEY_SHIFT_L '5' XK_5 +BX_KEY_5+BX_KEY_ALT_R '[' XK_bracketleft +BX_KEY_5 '(' XK_parenleft +BX_KEY_6+BX_KEY_SHIFT_L '6' XK_6 +BX_KEY_6+BX_KEY_ALT_R '|' XK_bar +BX_KEY_6 '-' XK_minus +BX_KEY_7+BX_KEY_SHIFT_L '7' XK_7 +BX_KEY_7 '' XK_egrave +BX_KEY_7+BX_KEY_ALT_R '`' XK_grave +BX_KEY_8+BX_KEY_SHIFT_L '8' XK_8 +BX_KEY_8+BX_KEY_ALT_R backslash XK_backslash +BX_KEY_8 '_' XK_underscore +BX_KEY_9+BX_KEY_SHIFT_L '9' XK_9 +BX_KEY_9+BX_KEY_ALT_R '^' XK_asciicircum +BX_KEY_9 '' XK_ccedilla +BX_KEY_A+BX_KEY_SHIFT_L 'Q' XK_Q +BX_KEY_A 'q' XK_q +BX_KEY_B+BX_KEY_SHIFT_L 'B' XK_B +BX_KEY_B 'b' XK_b +BX_KEY_C+BX_KEY_SHIFT_L 'C' XK_C +BX_KEY_C 'c' XK_c +BX_KEY_D+BX_KEY_SHIFT_L 'D' XK_D +BX_KEY_D 'd' XK_d +BX_KEY_E+BX_KEY_SHIFT_L 'E' XK_E +BX_KEY_E 'e' XK_e +BX_KEY_E+BX_KEY_ALT_R none XK_EuroSign +BX_KEY_F+BX_KEY_SHIFT_L 'F' XK_F +BX_KEY_F 'f' XK_f +BX_KEY_G+BX_KEY_SHIFT_L 'G' XK_G +BX_KEY_G 'g' XK_g +BX_KEY_H+BX_KEY_SHIFT_L 'H' XK_H +BX_KEY_H 'h' XK_h +BX_KEY_I+BX_KEY_SHIFT_L 'I' XK_I +BX_KEY_I 'i' XK_i +BX_KEY_J+BX_KEY_SHIFT_L 'J' XK_J +BX_KEY_J 'j' XK_j +BX_KEY_K+BX_KEY_SHIFT_L 'K' XK_K +BX_KEY_K 'k' XK_k +BX_KEY_L+BX_KEY_SHIFT_L 'L' XK_L +BX_KEY_L 'l' XK_l +BX_KEY_M+BX_KEY_SHIFT_L '?' XK_question +BX_KEY_M ',' XK_comma +BX_KEY_N+BX_KEY_SHIFT_L 'N' XK_N +BX_KEY_N 'n' XK_n +BX_KEY_O+BX_KEY_SHIFT_L 'O' XK_O +BX_KEY_O 'o' XK_o +BX_KEY_P+BX_KEY_SHIFT_L 'P' XK_P +BX_KEY_P 'p' XK_p +BX_KEY_Q+BX_KEY_SHIFT_L 'A' XK_A +BX_KEY_Q 'a' XK_a +BX_KEY_R+BX_KEY_SHIFT_L 'R' XK_R +BX_KEY_R 'r' XK_r +BX_KEY_S+BX_KEY_SHIFT_L 'S' XK_S +BX_KEY_S 's' XK_s +BX_KEY_T+BX_KEY_SHIFT_L 'T' XK_T +BX_KEY_T 't' XK_t +BX_KEY_U+BX_KEY_SHIFT_L 'U' XK_U +BX_KEY_U 'u' XK_u +BX_KEY_V+BX_KEY_SHIFT_L 'V' XK_V +BX_KEY_V 'v' XK_v +BX_KEY_W+BX_KEY_SHIFT_L 'Z' XK_Z +BX_KEY_W 'z' XK_z +BX_KEY_X+BX_KEY_SHIFT_L 'X' XK_X +BX_KEY_X 'x' XK_x +BX_KEY_Y+BX_KEY_SHIFT_L 'Y' XK_Y +BX_KEY_Y 'y' XK_y +BX_KEY_Z+BX_KEY_SHIFT_L 'W' XK_W +BX_KEY_Z 'w' XK_w +BX_KEY_F1 none XK_F1 +BX_KEY_F2 none XK_F2 +BX_KEY_F3 none XK_F3 +BX_KEY_F4 none XK_F4 +BX_KEY_F5 none XK_F5 +BX_KEY_F6 none XK_F6 +BX_KEY_F7 none XK_F7 +BX_KEY_F8 none XK_F8 +BX_KEY_F9 none XK_F9 +BX_KEY_F10 none XK_F10 +BX_KEY_F11 none XK_F11 +BX_KEY_F12 none XK_F12 +BX_KEY_ALT_L none XK_Alt_L +BX_KEY_ALT_L none XK_Meta_L +BX_KEY_ALT_R none XK_Alt_R +BX_KEY_ALT_R none XK_Mode_switch +BX_KEY_ALT_R none XK_Multi_key +BX_KEY_BACKSLASH '*' XK_asterisk +BX_KEY_BACKSLASH+BX_KEY_SHIFT_L '' XK_mu +BX_KEY_BACKSPACE none XK_BackSpace +BX_KEY_CAPS_LOCK none XK_Caps_Lock +BX_KEY_COMMA+BX_KEY_SHIFT_L '.' XK_period +BX_KEY_COMMA ';' XK_semicolon +BX_KEY_CTRL_L none XK_Control_L +BX_KEY_CTRL_R none XK_Control_R +BX_KEY_DELETE none XK_Delete +BX_KEY_DOWN none XK_Down +BX_KEY_END none XK_End +BX_KEY_ENTER return XK_Return +BX_KEY_EQUALS+BX_KEY_ALT_R '}' XK_braceright +BX_KEY_EQUALS '=' XK_equal +BX_KEY_EQUALS+BX_KEY_SHIFT_L '+' XK_plus +BX_KEY_ESC none XK_Escape +BX_KEY_GRAVE '' XK_twosuperior +BX_KEY_HOME none XK_Home +BX_KEY_INSERT none XK_Insert +BX_KEY_KP_5 none XK_KP_5 +BX_KEY_KP_5 none XK_KP_Begin +BX_KEY_KP_ADD none XK_KP_Add +BX_KEY_KP_DELETE none XK_KP_Decimal +BX_KEY_KP_DELETE none XK_KP_Delete +BX_KEY_KP_DIVIDE none XK_KP_Divide +BX_KEY_KP_DOWN none XK_KP_2 +BX_KEY_KP_DOWN none XK_KP_Down +BX_KEY_KP_END none XK_KP_1 +BX_KEY_KP_END none XK_KP_End +BX_KEY_KP_ENTER none XK_KP_Enter +BX_KEY_KP_HOME none XK_KP_7 +BX_KEY_KP_HOME none XK_KP_Home +BX_KEY_KP_INSERT none XK_KP_0 +BX_KEY_KP_INSERT none XK_KP_Insert +BX_KEY_KP_LEFT none XK_KP_4 +BX_KEY_KP_LEFT none XK_KP_Left +BX_KEY_KP_MULTIPLY none XK_KP_Multiply +BX_KEY_KP_PAGE_DOWN none XK_KP_3 +BX_KEY_KP_PAGE_DOWN none XK_KP_Page_Down +BX_KEY_KP_PAGE_UP none XK_KP_9 +BX_KEY_KP_PAGE_UP none XK_KP_Page_Up +BX_KEY_KP_RIGHT none XK_KP_6 +BX_KEY_KP_RIGHT none XK_KP_Right +BX_KEY_KP_SUBTRACT none XK_KP_Subtract +BX_KEY_KP_UP none XK_KP_8 +BX_KEY_KP_UP none XK_KP_Up +BX_KEY_LEFT none XK_Left +BX_KEY_LEFT_BACKSLASH+BX_KEY_SHIFT_L '>' XK_greater +BX_KEY_LEFT_BACKSLASH '<' XK_less +BX_KEY_LEFT_BRACKET '^' XK_dead_circumflex +BX_KEY_LEFT_BRACKET none XK_dead_diaeresis +BX_KEY_MENU none XK_Menu +BX_KEY_MINUS+BX_KEY_ALT_R ']' XK_bracketright +BX_KEY_MINUS+BX_KEY_SHIFT_L '' XK_degree +BX_KEY_MINUS ')' XK_parenright +BX_KEY_NUM_LOCK none XK_Num_Lock +BX_KEY_PAGE_DOWN none XK_Page_Down +BX_KEY_PAGE_UP none XK_Page_Up +BX_KEY_PAUSE none XK_Break +BX_KEY_PAUSE none XK_Pause +BX_KEY_PERIOD ':' XK_colon +BX_KEY_PERIOD+BX_KEY_SHIFT_L '/' XK_slash +BX_KEY_PRINT none XK_Print +BX_KEY_PRINT none XK_Sys_Req +BX_KEY_RIGHT none XK_Right +BX_KEY_RIGHT_BRACKET+BX_KEY_ALT_R '' XK_currency +BX_KEY_RIGHT_BRACKET '$' XK_dollar +BX_KEY_RIGHT_BRACKET+BX_KEY_SHIFT_L '' XK_sterling +BX_KEY_SCRL_LOCK none XK_Scroll_Lock +BX_KEY_SEMICOLON+BX_KEY_SHIFT_L 'M' XK_M +BX_KEY_SEMICOLON 'm' XK_m +BX_KEY_SHIFT_L none XK_Shift_L +BX_KEY_SHIFT_R none XK_Shift_R +BX_KEY_SINGLE_QUOTE+BX_KEY_SHIFT_L '%' XK_percent +BX_KEY_SINGLE_QUOTE '' XK_ugrave +BX_KEY_SLASH '!' XK_exclam +BX_KEY_SLASH+BX_KEY_SHIFT_L '' XK_section +BX_KEY_SPACE space XK_space +BX_KEY_TAB none XK_ISO_Left_Tab +BX_KEY_TAB tab XK_Tab +BX_KEY_UP none XK_Up +BX_KEY_WIN_L none XK_Super_L +BX_KEY_WIN_R none XK_Super_R diff --git a/bochs/gui/keymaps/x11-pc-it.map b/bochs/gui/keymaps/x11-pc-it.map new file mode 100644 index 00000000..ddef765c --- /dev/null +++ b/bochs/gui/keymaps/x11-pc-it.map @@ -0,0 +1,207 @@ +# Bochs Keymap file +# $Id$ +# Target: PC(x86) keyboard, IT keymap +# Author: Emanuele Goldoni +# +# The keymap file describes the layout of a keyboard, and how it translates +# into Bochs key codes. +# +# Format: +# BX_Keysym ASCII_equivalent Xwin_Keysym +# +# Or, for keys that require modifiers: +# BX_Keysym+BX_Modifier ASCII_equivalent Xwin_Keysym +# +# BX_Keysym and BX_Modifier must be present in the bx_key_symbol[] list in +# gui/keymap.cc. The BX_Modifier is usually a shift key press, but it +# could be any key. Presently a maximum of one modifier is supported, but this +# could be changed in keymap.h (structure def has only one slot for modifier), +# keymap.cc (parsing code), and iodev/keyboard.cc (simulate keypresses for >1 +# modifier). +# +# The ASCII_equivalent must be either apostrophe + one character + apostrophe, +# or one of these keywords: space, return, tab, backslash, apostrophe, none. +# This format is designed to look like a char constant in C, but it's a very +# simple parser. There's no concept of backslash being an escape char. The +# backslash and apostrophe entries are provided for aesthetic purposes only: no +# C++ programmer wants to see '\' or '''. The parser doesn't care, but they are +# ugly. +# +# Xwin_Keysym is the X windows equivalent of the key combination. These +# codes should match whatever you find in /usr/X11R6/include/X11/keysymdef.h. +# If you're running X windows, Bochs will take each of these Xwin_Keysyms, +# pull off the XK_ in front, and use XStringToKeysym() to change them into +# numerical codes. If this lookup fails, you will get a panic and you need +# to edit the keymap file. +# + +BX_KEY_0 '0' XK_0 +BX_KEY_0+BX_KEY_SHIFT_L '=' XK_equal +BX_KEY_1 '1' XK_1 +BX_KEY_1+BX_KEY_SHIFT_L '!' XK_exclam +BX_KEY_2 '2' XK_2 +BX_KEY_2+BX_KEY_SHIFT_L '"' XK_quotedbl +BX_KEY_3 '3' XK_3 +BX_KEY_3+BX_KEY_SHIFT_L '' XK_sterling +BX_KEY_4 '4' XK_4 +BX_KEY_4+BX_KEY_SHIFT_L '$' XK_dollar +BX_KEY_5 '5' XK_5 +BX_KEY_5+BX_KEY_SHIFT_L '%' XK_percent +BX_KEY_6 '6' XK_6 +BX_KEY_6+BX_KEY_SHIFT_L '&' XK_ampersand +BX_KEY_7 '7' XK_7 +BX_KEY_7+BX_KEY_SHIFT_L '/' XK_slash +BX_KEY_8 '8' XK_8 +BX_KEY_8+BX_KEY_SHIFT_L '(' XK_parenleft +BX_KEY_9 '9' XK_9 +BX_KEY_9+BX_KEY_SHIFT_L ')' XK_parenright +BX_KEY_A+BX_KEY_SHIFT_L 'A' XK_A +BX_KEY_A 'a' XK_a +BX_KEY_B+BX_KEY_SHIFT_L 'B' XK_B +BX_KEY_B 'b' XK_b +BX_KEY_C+BX_KEY_SHIFT_L 'C' XK_C +BX_KEY_C 'c' XK_c +BX_KEY_D+BX_KEY_SHIFT_L 'D' XK_D +BX_KEY_D 'd' XK_d +BX_KEY_E+BX_KEY_SHIFT_L 'E' XK_E +BX_KEY_E 'e' XK_e +BX_KEY_F+BX_KEY_SHIFT_L 'F' XK_F +BX_KEY_F 'f' XK_f +BX_KEY_G+BX_KEY_SHIFT_L 'G' XK_G +BX_KEY_G 'g' XK_g +BX_KEY_H+BX_KEY_SHIFT_L 'H' XK_H +BX_KEY_H 'h' XK_h +BX_KEY_I+BX_KEY_SHIFT_L 'I' XK_I +BX_KEY_I 'i' XK_i +BX_KEY_J+BX_KEY_SHIFT_L 'J' XK_J +BX_KEY_J 'j' XK_j +BX_KEY_K+BX_KEY_SHIFT_L 'K' XK_K +BX_KEY_K 'k' XK_k +BX_KEY_L+BX_KEY_SHIFT_L 'L' XK_L +BX_KEY_L 'l' XK_l +BX_KEY_M+BX_KEY_SHIFT_L 'M' XK_M +BX_KEY_M 'm' XK_m +BX_KEY_N+BX_KEY_SHIFT_L 'N' XK_N +BX_KEY_N 'n' XK_n +BX_KEY_O+BX_KEY_SHIFT_L 'O' XK_O +BX_KEY_O 'o' XK_o +BX_KEY_P+BX_KEY_SHIFT_L 'P' XK_P +BX_KEY_P 'p' XK_p +BX_KEY_Q+BX_KEY_SHIFT_L 'Q' XK_Q +BX_KEY_Q 'q' XK_q +BX_KEY_R+BX_KEY_SHIFT_L 'R' XK_R +BX_KEY_R 'r' XK_r +BX_KEY_S+BX_KEY_SHIFT_L 'S' XK_S +BX_KEY_S 's' XK_s +BX_KEY_T+BX_KEY_SHIFT_L 'T' XK_T +BX_KEY_T 't' XK_t +BX_KEY_U+BX_KEY_SHIFT_L 'U' XK_U +BX_KEY_U 'u' XK_u +BX_KEY_V+BX_KEY_SHIFT_L 'V' XK_V +BX_KEY_V 'v' XK_v +BX_KEY_W+BX_KEY_SHIFT_L 'W' XK_W +BX_KEY_W 'w' XK_w +BX_KEY_X+BX_KEY_SHIFT_L 'X' XK_X +BX_KEY_X 'x' XK_x +BX_KEY_Y+BX_KEY_SHIFT_L 'Y' XK_Y +BX_KEY_Y 'y' XK_y +BX_KEY_Z+BX_KEY_SHIFT_L 'Z' XK_Z +BX_KEY_Z 'z' XK_z +BX_KEY_F1 none XK_F1 +BX_KEY_F2 none XK_F2 +BX_KEY_F3 none XK_F3 +BX_KEY_F4 none XK_F4 +BX_KEY_F5 none XK_F5 +BX_KEY_F6 none XK_F6 +BX_KEY_F7 none XK_F7 +BX_KEY_F8 none XK_F8 +BX_KEY_F9 none XK_F9 +BX_KEY_F10 none XK_F10 +BX_KEY_F11 none XK_F11 +BX_KEY_F12 none XK_F12 +BX_KEY_ALT_L none XK_Alt_L +BX_KEY_ALT_L none XK_Meta_L +BX_KEY_ALT_R none XK_Alt_R +BX_KEY_ALT_R none XK_Mode_switch +BX_KEY_ALT_R none XK_Multi_key +BX_KEY_BACKSLASH '' XK_ugrave +BX_KEY_BACKSLASH+BX_KEY_SHIFT_L '' XK_section +BX_KEY_LEFT_BACKSLASH+BX_KEY_SHIFT_L '>' XK_greater +BX_KEY_LEFT_BACKSLASH '<' XK_less +BX_KEY_BACKSPACE none XK_BackSpace +BX_KEY_CAPS_LOCK none XK_Caps_Lock +BX_KEY_COMMA ',' XK_comma +BX_KEY_COMMA+BX_KEY_SHIFT_L ';' XK_semicolon +BX_KEY_CTRL_L none XK_Control_L +BX_KEY_CTRL_R none XK_Control_R +BX_KEY_DELETE none XK_Delete +BX_KEY_DOWN none XK_Down +BX_KEY_END none XK_End +BX_KEY_ENTER return XK_Return +BX_KEY_EQUALS '' XK_igrave +BX_KEY_EQUALS+BX_KEY_SHIFT_L '^' XK_asciicircum +BX_KEY_ESC none XK_Escape +BX_KEY_GRAVE+BX_KEY_SHIFT_L '|' XK_bar +BX_KEY_GRAVE backslash XK_backslash +BX_KEY_HOME none XK_Home +BX_KEY_INSERT none XK_Insert +BX_KEY_KP_5 none XK_KP_5 +BX_KEY_KP_5 none XK_KP_Begin +BX_KEY_KP_ADD none XK_KP_Add +BX_KEY_KP_DELETE none XK_KP_Decimal +BX_KEY_KP_DELETE none XK_KP_Delete +BX_KEY_KP_DIVIDE none XK_KP_Divide +BX_KEY_KP_DOWN none XK_KP_2 +BX_KEY_KP_DOWN none XK_KP_Down +BX_KEY_KP_END none XK_KP_1 +BX_KEY_KP_END none XK_KP_End +BX_KEY_KP_ENTER none XK_KP_Enter +BX_KEY_KP_HOME none XK_KP_7 +BX_KEY_KP_HOME none XK_KP_Home +BX_KEY_KP_INSERT none XK_KP_0 +BX_KEY_KP_INSERT none XK_KP_Insert +BX_KEY_KP_LEFT none XK_KP_4 +BX_KEY_KP_LEFT none XK_KP_Left +BX_KEY_KP_MULTIPLY none XK_KP_Multiply +BX_KEY_KP_PAGE_DOWN none XK_KP_3 +BX_KEY_KP_PAGE_DOWN none XK_KP_Page_Down +BX_KEY_KP_PAGE_UP none XK_KP_9 +BX_KEY_KP_PAGE_UP none XK_KP_Page_Up +BX_KEY_KP_RIGHT none XK_KP_6 +BX_KEY_KP_RIGHT none XK_KP_Right +BX_KEY_KP_SUBTRACT none XK_KP_Subtract +BX_KEY_KP_UP none XK_KP_8 +BX_KEY_KP_UP none XK_KP_Up +BX_KEY_LEFT none XK_Left +BX_KEY_LEFT_BRACKET+BX_KEY_SHIFT_L '' XK_eacute +BX_KEY_LEFT_BRACKET '' XK_egrave +BX_KEY_MENU none XK_Menu +BX_KEY_MINUS apostrophe XK_apostrophe +BX_KEY_MINUS+BX_KEY_SHIFT_L '?' XK_question +BX_KEY_NUM_LOCK none XK_Num_Lock +BX_KEY_PAGE_DOWN none XK_Page_Down +BX_KEY_PAGE_UP none XK_Page_Up +BX_KEY_PAUSE none XK_Break +BX_KEY_PAUSE none XK_Pause +BX_KEY_PERIOD+BX_KEY_SHIFT_L ':' XK_colon +BX_KEY_PERIOD '.' XK_period +BX_KEY_PRINT none XK_Print +BX_KEY_PRINT none XK_Sys_Req +BX_KEY_RIGHT none XK_Right +BX_KEY_RIGHT_BRACKET+BX_KEY_SHIFT_L '*' XK_asterisk +BX_KEY_RIGHT_BRACKET '+' XK_plus +BX_KEY_SCRL_LOCK none XK_Scroll_Lock +BX_KEY_SEMICOLON+BX_KEY_SHIFT_L '' XK_ccedilla +BX_KEY_SEMICOLON '' XK_ograve +BX_KEY_SHIFT_L none XK_Shift_L +BX_KEY_SHIFT_R none XK_Shift_R +BX_KEY_SINGLE_QUOTE '' XK_agrave +BX_KEY_SINGLE_QUOTE+BX_KEY_SHIFT_L '' XK_degree +BX_KEY_SLASH+BX_KEY_SHIFT_L '_' XK_underscore +BX_KEY_SLASH '-' XK_minus +BX_KEY_SPACE space XK_space +BX_KEY_TAB none XK_ISO_Left_Tab +BX_KEY_TAB tab XK_Tab +BX_KEY_UP none XK_Up +BX_KEY_WIN_L none XK_Super_L +BX_KEY_WIN_R none XK_Super_R diff --git a/bochs/gui/keymaps/x11-pc-ru.map b/bochs/gui/keymaps/x11-pc-ru.map new file mode 100644 index 00000000..aabf5087 --- /dev/null +++ b/bochs/gui/keymaps/x11-pc-ru.map @@ -0,0 +1,211 @@ +# Bochs Keymap file +# $Id$ +# Target: PC(x86) keyboard, RU keymap +# Author: Dmitry Soshnikov +# +# The keymap file describes the layout of a keyboard, and how it translates +# into Bochs key codes. +# +# Format: +# BX_Keysym ASCII_equivalent Xwin_Keysym +# +# Or, for keys that require modifiers: +# BX_Keysym+BX_Modifier ASCII_equivalent Xwin_Keysym +# +# BX_Keysym and BX_Modifier must be present in the bx_key_symbol[] list in +# gui/keymap.cc. The BX_Modifier is usually a shift key press, but it +# could be any key. Presently a maximum of one modifier is supported, but this +# could be changed in keymap.h (structure def has only one slot for modifier), +# keymap.cc (parsing code), and iodev/keyboard.cc (simulate keypresses for >1 +# modifier). +# +# The ASCII_equivalent must be either apostrophe + one character + apostrophe, +# or one of these keywords: space, return, tab, backslash, apostrophe, none. +# This format is designed to look like a char constant in C, but it's a very +# simple parser. There's no concept of backslash being an escape char. The +# backslash and apostrophe entries are provided for aesthetic purposes only: no +# C++ programmer wants to see '\' or '''. The parser doesn't care, but they are +# ugly. +# +# Xwin_Keysym is the X windows equivalent of the key combination. These +# codes should match whatever you find in /usr/X11R6/include/X11/keysymdef.h. +# If you're running X windows, Bochs will take each of these Xwin_Keysyms, +# pull off the XK_ in front, and use XStringToKeysym() to change them into +# numerical codes. If this lookup fails, you will get a panic and you need +# to edit the keymap file. +# +# Note: this is charset-1251 layout map (using in Windows and some newest +# implementations of Linux), which works properly. Users of KOI8-R should +# slightly modify the map to achieve proper matching (actually didn't tested. +# - D.S.) It concerns of "," and "." symbols, which are placed on the second +# row of the keyboard (instead of placing it on "?/" button in charset-1251), +# and some other (unimportant) symbols. Main symbolic keyboard should work. + +BX_KEY_0 '0' XK_0 +BX_KEY_0+BX_KEY_SHIFT_L ')' XK_parenright +BX_KEY_1 '1' XK_1 +BX_KEY_1+BX_KEY_SHIFT_L '!' XK_exclam +BX_KEY_2 '2' XK_2 +BX_KEY_2+BX_KEY_SHIFT_L '"' XK_quotedbl +BX_KEY_3 '3' XK_3 +BX_KEY_3+BX_KEY_SHIFT_L '?' XK_numerosign +BX_KEY_4 '4' XK_4 +BX_KEY_4+BX_KEY_SHIFT_L ';' XK_semicolon +BX_KEY_5 '5' XK_5 +BX_KEY_5+BX_KEY_SHIFT_L '%' XK_percent +BX_KEY_6 '6' XK_6 +BX_KEY_6+BX_KEY_SHIFT_L ':' XK_colon +BX_KEY_7 '7' XK_7 +BX_KEY_7+BX_KEY_SHIFT_L '?' XK_question +BX_KEY_8 '8' XK_8 +BX_KEY_8+BX_KEY_SHIFT_L '*' XK_asterisk +BX_KEY_9 '9' XK_9 +BX_KEY_9+BX_KEY_SHIFT_L '(' XK_parenleft +BX_KEY_A+BX_KEY_SHIFT_L '' XK_Cyrillic_EF +BX_KEY_A '' XK_Cyrillic_ef +BX_KEY_B+BX_KEY_SHIFT_L '' XK_Cyrillic_I +BX_KEY_B '' XK_Cyrillic_i +BX_KEY_C+BX_KEY_SHIFT_L '' XK_Cyrillic_ES +BX_KEY_C '' XK_Cyrillic_es +BX_KEY_D+BX_KEY_SHIFT_L '' XK_Cyrillic_VE +BX_KEY_D '' XK_Cyrillic_ve +BX_KEY_E+BX_KEY_SHIFT_L '' XK_Cyrillic_U +BX_KEY_E '' XK_Cyrillic_u +BX_KEY_F+BX_KEY_SHIFT_L '' XK_Cyrillic_A +BX_KEY_F '' XK_Cyrillic_a +BX_KEY_G+BX_KEY_SHIFT_L '' XK_Cyrillic_PE +BX_KEY_G '' XK_Cyrillic_pe +BX_KEY_H+BX_KEY_SHIFT_L '' XK_Cyrillic_ER +BX_KEY_H '' XK_Cyrillic_er +BX_KEY_I+BX_KEY_SHIFT_L '' XK_Cyrillic_SHA +BX_KEY_I '' XK_Cyrillic_sha +BX_KEY_J+BX_KEY_SHIFT_L '' XK_Cyrillic_O +BX_KEY_J '' XK_Cyrillic_o +BX_KEY_K+BX_KEY_SHIFT_L '' XK_Cyrillic_EL +BX_KEY_K '' XK_Cyrillic_el +BX_KEY_L+BX_KEY_SHIFT_L '' XK_Cyrillic_DE +BX_KEY_L '' XK_Cyrillic_de +BX_KEY_M+BX_KEY_SHIFT_L '' XK_Cyrillic_SOFTSIGN +BX_KEY_M '' XK_Cyrillic_softsign +BX_KEY_N+BX_KEY_SHIFT_L '' XK_Cyrillic_TE +BX_KEY_N '' XK_Cyrillic_te +BX_KEY_O+BX_KEY_SHIFT_L '' XK_Cyrillic_SHCHA +BX_KEY_O '' XK_Cyrillic_shcha +BX_KEY_P+BX_KEY_SHIFT_L '' XK_Cyrillic_ZE +BX_KEY_P '' XK_Cyrillic_ze +BX_KEY_Q+BX_KEY_SHIFT_L '' XK_Cyrillic_SHORTI +BX_KEY_Q '' XK_Cyrillic_shorti +BX_KEY_R+BX_KEY_SHIFT_L '' XK_Cyrillic_KA +BX_KEY_R '' XK_Cyrillic_ka +BX_KEY_S+BX_KEY_SHIFT_L '' XK_Cyrillic_YERU +BX_KEY_S '' XK_Cyrillic_yeru +BX_KEY_T+BX_KEY_SHIFT_L '' XK_Cyrillic_IE +BX_KEY_T '' XK_Cyrillic_ie +BX_KEY_U+BX_KEY_SHIFT_L '' XK_Cyrillic_GHE +BX_KEY_U '' XK_Cyrillic_ghe +BX_KEY_V+BX_KEY_SHIFT_L '' XK_Cyrillic_EM +BX_KEY_V '' XK_Cyrillic_em +BX_KEY_W+BX_KEY_SHIFT_L '' XK_Cyrillic_TSE +BX_KEY_W '' XK_Cyrillic_tse +BX_KEY_X+BX_KEY_SHIFT_L '' XK_Cyrillic_CHE +BX_KEY_X '' XK_Cyrillic_che +BX_KEY_Y+BX_KEY_SHIFT_L '' XK_Cyrillic_EN +BX_KEY_Y '' XK_Cyrillic_en +BX_KEY_Z+BX_KEY_SHIFT_L '' XK_Cyrillic_YA +BX_KEY_Z '' XK_Cyrillic_ya +BX_KEY_F1 none XK_F1 +BX_KEY_F2 none XK_F2 +BX_KEY_F3 none XK_F3 +BX_KEY_F4 none XK_F4 +BX_KEY_F5 none XK_F5 +BX_KEY_F6 none XK_F6 +BX_KEY_F7 none XK_F7 +BX_KEY_F8 none XK_F8 +BX_KEY_F9 none XK_F9 +BX_KEY_F10 none XK_F10 +BX_KEY_F11 none XK_F11 +BX_KEY_F12 none XK_F12 +BX_KEY_ALT_L none XK_Alt_L +BX_KEY_ALT_L none XK_Meta_L +BX_KEY_ALT_R none XK_Alt_R +BX_KEY_ALT_R none XK_Mode_switch +BX_KEY_ALT_R none XK_Multi_key +BX_KEY_BACKSLASH backslash XK_backslash +BX_KEY_BACKSLASH+BX_KEY_SHIFT_L '|' XK_bar +BX_KEY_BACKSPACE none XK_BackSpace +BX_KEY_CAPS_LOCK none XK_Caps_Lock +BX_KEY_COMMA '' XK_Cyrillic_be +BX_KEY_COMMA+BX_KEY_SHIFT_L '' XK_Cyrillic_BE +BX_KEY_CTRL_L none XK_Control_L +BX_KEY_CTRL_R none XK_Control_R +BX_KEY_DELETE none XK_Delete +BX_KEY_DOWN none XK_Down +BX_KEY_END none XK_End +BX_KEY_ENTER return XK_Return +BX_KEY_EQUALS '=' XK_equal +BX_KEY_EQUALS+BX_KEY_SHIFT_L '+' XK_plus +BX_KEY_ESC none XK_Escape +BX_KEY_GRAVE+BX_KEY_SHIFT_L '' XK_Cyrillic_IO +BX_KEY_GRAVE '' XK_Cyrillic_io +BX_KEY_HOME none XK_Home +BX_KEY_INSERT none XK_Insert +BX_KEY_KP_5 none XK_KP_5 +BX_KEY_KP_5 none XK_KP_Begin +BX_KEY_KP_ADD none XK_KP_Add +BX_KEY_KP_DELETE none XK_KP_Decimal +BX_KEY_KP_DELETE none XK_KP_Delete +BX_KEY_KP_DIVIDE none XK_KP_Divide +BX_KEY_KP_DOWN none XK_KP_2 +BX_KEY_KP_DOWN none XK_KP_Down +BX_KEY_KP_END none XK_KP_1 +BX_KEY_KP_END none XK_KP_End +BX_KEY_KP_ENTER none XK_KP_Enter +BX_KEY_KP_HOME none XK_KP_7 +BX_KEY_KP_HOME none XK_KP_Home +BX_KEY_KP_INSERT none XK_KP_0 +BX_KEY_KP_INSERT none XK_KP_Insert +BX_KEY_KP_LEFT none XK_KP_4 +BX_KEY_KP_LEFT none XK_KP_Left +BX_KEY_KP_MULTIPLY none XK_KP_Multiply +BX_KEY_KP_PAGE_DOWN none XK_KP_3 +BX_KEY_KP_PAGE_DOWN none XK_KP_Page_Down +BX_KEY_KP_PAGE_UP none XK_KP_9 +BX_KEY_KP_PAGE_UP none XK_KP_Page_Up +BX_KEY_KP_RIGHT none XK_KP_6 +BX_KEY_KP_RIGHT none XK_KP_Right +BX_KEY_KP_SUBTRACT none XK_KP_Subtract +BX_KEY_KP_UP none XK_KP_8 +BX_KEY_KP_UP none XK_KP_Up +BX_KEY_LEFT none XK_Left +BX_KEY_LEFT_BRACKET+BX_KEY_SHIFT_L '' XK_Cyrillic_HA +BX_KEY_LEFT_BRACKET '' XK_Cyrillic_ha +BX_KEY_MENU none XK_Menu +BX_KEY_MINUS '-' XK_minus +BX_KEY_MINUS+BX_KEY_SHIFT_L '_' XK_underscore +BX_KEY_NUM_LOCK none XK_Num_Lock +BX_KEY_PAGE_DOWN none XK_Page_Down +BX_KEY_PAGE_UP none XK_Page_Up +BX_KEY_PAUSE none XK_Break +BX_KEY_PAUSE none XK_Pause +BX_KEY_PERIOD+BX_KEY_SHIFT_L '' XK_Cyrillic_YU +BX_KEY_PERIOD '' XK_Cyrillic_yu +BX_KEY_PRINT none XK_Print +BX_KEY_PRINT none XK_Sys_Req +BX_KEY_RIGHT none XK_Right +BX_KEY_RIGHT_BRACKET+BX_KEY_SHIFT_L '' XK_Cyrillic_HARDSIGN +BX_KEY_RIGHT_BRACKET '' XK_Cyrillic_hardsign +BX_KEY_SCRL_LOCK none XK_Scroll_Lock +BX_KEY_SEMICOLON+BX_KEY_SHIFT_L '' XK_Cyrillic_ZHE +BX_KEY_SEMICOLON '' XK_Cyrillic_zhe +BX_KEY_SHIFT_L none XK_Shift_L +BX_KEY_SHIFT_R none XK_Shift_R +BX_KEY_SINGLE_QUOTE '' XK_Cyrillic_e +BX_KEY_SINGLE_QUOTE+BX_KEY_SHIFT_L '' XK_Cyrillic_E +BX_KEY_SLASH+BX_KEY_SHIFT_L ',' XK_comma +BX_KEY_SLASH '.' XK_period +BX_KEY_SPACE space XK_space +BX_KEY_TAB none XK_ISO_Left_Tab +BX_KEY_TAB tab XK_Tab +BX_KEY_UP none XK_Up +BX_KEY_WIN_L none XK_Super_L +BX_KEY_WIN_R none XK_Super_R diff --git a/bochs/gui/keymaps/x11-pc-se.map b/bochs/gui/keymaps/x11-pc-se.map new file mode 100644 index 00000000..dbb925c8 --- /dev/null +++ b/bochs/gui/keymaps/x11-pc-se.map @@ -0,0 +1,278 @@ +# Bochs Keymap file +# $Id$ +# Target: PC(x86) keyboard, SE keymap +# Author: Magnus 'Moggen' berg +# +# The keymap file describes the layout of a keyboard, and how it translates +# into Bochs key codes. +# +# Format: +# BX_Keysym ASCII_equivalent Xwin_Keysym +# +# Or, for keys that require modifiers: +# BX_Keysym+BX_Modifier ASCII_equivalent Xwin_Keysym +# +# BX_Keysym and BX_Modifier must be present in the bx_key_symbol[] list in +# gui/keymap.cc. The BX_Modifier is usually a shift key press, but it +# could be any key. Presently a maximum of one modifier is supported, but this +# could be changed in keymap.h (structure def has only one slot for modifier), +# keymap.cc (parsing code), and iodev/keyboard.cc (simulate keypresses for >1 +# modifier). +# +# The ASCII_equivalent must be either apostrophe + one character + apostrophe, +# or one of these keywords: space, return, tab, backslash, apostrophe, none. +# This format is designed to look like a char constant in C, but it's a very +# simple parser. There's no concept of backslash being an escape char. The +# backslash and apostrophe entries are provided for aesthetic purposes only: no +# C++ programmer wants to see '\' or '''. The parser doesn't care, but they are +# ugly. +# +# Xwin_Keysym is the X windows equivalent of the key combination. These +# codes should match whatever you find in /usr/X11R6/include/X11/keysymdef.h. +# If you're running X windows, Bochs will take each of these Xwin_Keysyms, +# pull off the XK_ in front, and use XStringToKeysym() to change them into +# numerical codes. If this lookup fails, you will get a panic and you need +# to edit the keymap file. +# + +# Upper key groups +BX_KEY_ESC none XK_Escape + +BX_KEY_F1 none XK_F1 +BX_KEY_F2 none XK_F2 +BX_KEY_F3 none XK_F3 +BX_KEY_F4 none XK_F4 + +BX_KEY_F5 none XK_F5 +BX_KEY_F6 none XK_F6 +BX_KEY_F7 none XK_F7 +BX_KEY_F8 none XK_F8 + +BX_KEY_F9 none XK_F9 +BX_KEY_F10 none XK_F10 +BX_KEY_F11 none XK_F11 +BX_KEY_F12 none XK_F12 + +BX_KEY_PRINT none XK_Print +BX_KEY_PRINT none XK_Sys_Req +BX_KEY_SCRL_LOCK none XK_Scroll_Lock +BX_KEY_PAUSE none XK_Break +BX_KEY_PAUSE none XK_Pause + +# Main key group +# Row 1 +BX_KEY_GRAVE '' XK_section +BX_KEY_GRAVE+BX_KEY_SHIFT_L '' XK_onehalf +BX_KEY_GRAVE+BX_KEY_ALT_R '' XK_paragraph +BX_KEY_GRAVE+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_threequarters +BX_KEY_1 '1' XK_1 +BX_KEY_1+BX_KEY_SHIFT_L '!' XK_exclam +BX_KEY_1+BX_KEY_ALT_R '' XK_exclamdown +BX_KEY_1+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_onesuperior +BX_KEY_2 '2' XK_2 +BX_KEY_2+BX_KEY_SHIFT_L '"' XK_quotedbl +BX_KEY_2+BX_KEY_ALT_R '@' XK_at +BX_KEY_2+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_twosuperior +BX_KEY_3 '3' XK_3 +BX_KEY_3+BX_KEY_SHIFT_L '#' XK_numbersign +BX_KEY_3+BX_KEY_ALT_R '' XK_sterling +BX_KEY_3+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_threesuperior +BX_KEY_4 '4' XK_4 +BX_KEY_4+BX_KEY_SHIFT_L '' XK_currency +BX_KEY_4+BX_KEY_ALT_R '$' XK_dollar +BX_KEY_4+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_onequarter +BX_KEY_5 '5' XK_5 +BX_KEY_5+BX_KEY_SHIFT_L '%' XK_percent +BX_KEY_5+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_cent +BX_KEY_6 '6' XK_6 +BX_KEY_6+BX_KEY_SHIFT_L '&' XK_ampersand +BX_KEY_6+BX_KEY_ALT_R '' XK_yen +BX_KEY_7 '7' XK_7 +BX_KEY_7+BX_KEY_SHIFT_L '/' XK_slash +BX_KEY_7+BX_KEY_ALT_R '{' XK_braceleft +BX_KEY_7+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_division +BX_KEY_8 '8' XK_8 +BX_KEY_8+BX_KEY_SHIFT_L '(' XK_parenleft +BX_KEY_8+BX_KEY_ALT_R '[' XK_bracketleft +BX_KEY_9 '9' XK_9 +BX_KEY_9+BX_KEY_SHIFT_L ')' XK_parenright +BX_KEY_9+BX_KEY_ALT_R ']' XK_bracketright +BX_KEY_0 '0' XK_0 +BX_KEY_0+BX_KEY_SHIFT_L '=' XK_equal +BX_KEY_0+BX_KEY_ALT_R '}' XK_braceright +BX_KEY_0+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_degree +BX_KEY_MINUS '+' XK_plus +BX_KEY_MINUS+BX_KEY_SHIFT_L '?' XK_question +BX_KEY_MINUS+BX_KEY_ALT_L backslash XK_backslash +BX_KEY_MINUS+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_questiondown +BX_KEY_EQUALS none XK_dead_acute +BX_KEY_EQUALS+BX_KEY_SHIFT_L none XK_dead_grave +BX_KEY_EQUALS+BX_KEY_ALT_L '' XK_plusminus +BX_KEY_EQUALS+BX_KEY_ALT_L+BX_KEY_ALT_R '' XK_notsign +BX_KEY_BACKSPACE none XK_BackSpace + +# Row 2 +BX_KEY_TAB tab XK_Tab +BX_KEY_TAB none XK_ISO_Left_Tab +BX_KEY_Q 'q' XK_q +BX_KEY_Q+BX_KEY_SHIFT_L 'Q' XK_Q +BX_KEY_W 'w' XK_w +BX_KEY_W+BX_KEY_SHIFT_L 'W' XK_W +BX_KEY_E 'e' XK_e +BX_KEY_E+BX_KEY_SHIFT_L 'E' XK_E +BX_KEY_E+BX_KEY_SHIFT_L+BX_KEY_ALT_R none XK_EuroSign +BX_KEY_R 'r' XK_r +BX_KEY_R+BX_KEY_SHIFT_L 'R' XK_R +BX_KEY_R+BX_KEY_ALT_R '' XK_registered +BX_KEY_T 't' XK_t +BX_KEY_T+BX_KEY_SHIFT_L 'T' XK_T +BX_KEY_T+BX_KEY_ALT_R '' XK_thorn +BX_KEY_T+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_THORN +BX_KEY_Y 'y' XK_y +BX_KEY_Y+BX_KEY_SHIFT_L 'Y' XK_Y +BX_KEY_U 'u' XK_u +BX_KEY_U+BX_KEY_SHIFT_L 'U' XK_U +BX_KEY_I 'i' XK_i +BX_KEY_I+BX_KEY_SHIFT_L 'I' XK_I +BX_KEY_O 'o' XK_o +BX_KEY_O+BX_KEY_SHIFT_L 'O' XK_O +BX_KEY_P 'p' XK_p +BX_KEY_P+BX_KEY_SHIFT_L 'P' XK_P +BX_KEY_LEFT_BRACKET '' XK_aring +BX_KEY_LEFT_BRACKET+BX_KEY_SHIFT_L '' XK_Aring +BX_KEY_RIGHT_BRACKET none XK_dead_diaeresis +BX_KEY_RIGHT_BRACKET+BX_KEY_SHIFT_L none XK_dead_circumflex +BX_KEY_RIGHT_BRACKET+BX_KEY_ALT_R none XK_dead_tilde +BX_KEY_ENTER return XK_Return + +# Row 3 +BX_KEY_CAPS_LOCK none XK_Caps_Lock +BX_KEY_A 'a' XK_a +BX_KEY_A+BX_KEY_SHIFT_L 'A' XK_A +BX_KEY_A+BX_KEY_ALT_R '' XK_ordfeminine +BX_KEY_A+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_masculine +BX_KEY_S 's' XK_s +BX_KEY_S+BX_KEY_SHIFT_L 'S' XK_S +BX_KEY_S+BX_KEY_ALT_R '' XK_ssharp +BX_KEY_D 'd' XK_d +BX_KEY_D+BX_KEY_SHIFT_L 'D' XK_D +BX_KEY_D+BX_KEY_ALT_R '' XK_eth +BX_KEY_D+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_ETH +BX_KEY_F 'f' XK_f +BX_KEY_F+BX_KEY_SHIFT_L 'F' XK_F +BX_KEY_G 'g' XK_g +BX_KEY_G+BX_KEY_SHIFT_L 'G' XK_G +BX_KEY_H 'h' XK_h +BX_KEY_H+BX_KEY_SHIFT_L 'H' XK_H +BX_KEY_J 'j' XK_j +BX_KEY_J+BX_KEY_SHIFT_L 'J' XK_J +BX_KEY_K 'k' XK_k +BX_KEY_K+BX_KEY_SHIFT_L 'K' XK_K +BX_KEY_L 'l' XK_l +BX_KEY_L+BX_KEY_SHIFT_L 'L' XK_L +BX_KEY_SEMICOLON '' XK_odiaeresis +BX_KEY_SEMICOLON+BX_KEY_SHIFT_L '' XK_Odiaeresis +BX_KEY_SEMICOLON+BX_KEY_ALT_R '' XK_oslash +BX_KEY_SEMICOLON+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_Ooblique +BX_KEY_SINGLE_QUOTE '' XK_adiaeresis +BX_KEY_SINGLE_QUOTE+BX_KEY_SHIFT_L '' XK_Adiaeresis +BX_KEY_SINGLE_QUOTE+BX_KEY_ALT_R '' XK_ae +BX_KEY_SINGLE_QUOTE+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_AE +BX_KEY_BACKSLASH apostrophe XK_apostrophe +BX_KEY_BACKSLASH+BX_KEY_SHIFT_L '*' XK_asterisk +BX_KEY_BACKSLASH+BX_KEY_ALT_R '' XK_acute +BX_KEY_BACKSLASH+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_multiply + +# Row 4 +BX_KEY_SHIFT_L none XK_Shift_L +BX_KEY_LEFT_BACKSLASH '<' XK_less +BX_KEY_LEFT_BACKSLASH+BX_KEY_SHIFT_L '>' XK_greater +BX_KEY_LEFT_BACKSLASH+BX_KEY_ALT_R '|' XK_bar +BX_KEY_LEFT_BACKSLASH+BX_KEY_SHIFT_L+BX_KEY_ALT_R '' XK_brokenbar +BX_KEY_Z 'z' XK_z +BX_KEY_Z+BX_KEY_SHIFT_L 'Z' XK_Z +BX_KEY_Z+BX_KEY_ALT_R '' XK_guillemotleft +BX_KEY_X 'x' XK_x +BX_KEY_X+BX_KEY_SHIFT_L 'X' XK_X +BX_KEY_X+BX_KEY_ALT_R '' XK_guillemotright +BX_KEY_C 'c' XK_c +BX_KEY_C+BX_KEY_SHIFT_L 'C' XK_C +BX_KEY_C+BX_KEY_ALT_R '' XK_copyright +BX_KEY_V 'v' XK_v +BX_KEY_V+BX_KEY_SHIFT_L 'V' XK_V +BX_KEY_V+BX_KEY_SHIFT_L+BX_KEY_ALT_R '`' XK_grave +BX_KEY_B 'b' XK_b +BX_KEY_B+BX_KEY_SHIFT_L 'B' XK_B +BX_KEY_N 'n' XK_n +BX_KEY_N+BX_KEY_SHIFT_L 'N' XK_N +BX_KEY_M 'm' XK_m +BX_KEY_M+BX_KEY_SHIFT_L 'M' XK_M +BX_KEY_M+BX_KEY_ALT_R '' XK_mu +BX_KEY_COMMA ',' XK_comma +BX_KEY_COMMA+BX_KEY_SHIFT_L ';' XK_semicolon +BX_KEY_PERIOD '.' XK_period +BX_KEY_PERIOD+BX_KEY_SHIFT_L ':' XK_colon +BX_KEY_PERIOD+BX_KEY_ALT_R '' XK_periodcentered +BX_KEY_SLASH '-' XK_minus +BX_KEY_SLASH+BX_KEY_SHIFT '_' XK_underscore +BX_KEY_SLASH+BX_KEY_ALT_R '' XK_hyphen +BX_KEY_SLASH+BX_KEY_SHIFT+BX_KEY_ALT_R '' XK_macron +BX_KEY_SHIFT_R none XK_Shift_R + +# Row 5 +BX_KEY_CTRL_L none XK_Control_L +BX_KEY_WIN_L none XK_Super_L +BX_KEY_ALT_L none XK_Alt_L +BX_KEY_ALT_L none XK_Meta_L +BX_KEY_SPACE space XK_space +BX_KEY_SPACE+BX_KEY_ALT_R none XK_nobreakspace +BX_KEY_ALT_R none XK_Alt_R +BX_KEY_ALT_R none XK_Mode_switch +BX_KEY_ALT_R none XK_Multi_key +BX_KEY_WIN_R none XK_Super_R +BX_KEY_MENU none XK_Menu +BX_KEY_CTRL_R none XK_Control_R + +# Ins/Del/Home/End/PgUp/PgDn +BX_KEY_INSERT none XK_Insert +BX_KEY_DELETE none XK_Delete +BX_KEY_HOME none XK_Home +BX_KEY_END none XK_End +BX_KEY_PAGE_UP none XK_Page_Up +BX_KEY_PAGE_DOWN none XK_Page_Down + +# Arrow keys +BX_KEY_LEFT none XK_Left +BX_KEY_RIGHT none XK_Right +BX_KEY_UP none XK_Up +BX_KEY_DOWN none XK_Down + +# Numerical keypad +BX_KEY_NUM_LOCK none XK_Num_Lock +BX_KEY_KP_DIVIDE none XK_KP_Divide +BX_KEY_KP_MULTIPLY none XK_KP_Multiply +BX_KEY_KP_SUBTRACT none XK_KP_Subtract +BX_KEY_KP_ADD none XK_KP_Add +BX_KEY_KP_ENTER none XK_KP_Enter +BX_KEY_KP_HOME none XK_KP_7 +BX_KEY_KP_HOME none XK_KP_Home +BX_KEY_KP_UP none XK_KP_8 +BX_KEY_KP_UP none XK_KP_Up +BX_KEY_KP_PAGE_UP none XK_KP_9 +BX_KEY_KP_PAGE_UP none XK_KP_Page_Up +BX_KEY_KP_LEFT none XK_KP_4 +BX_KEY_KP_LEFT none XK_KP_Left +BX_KEY_KP_5 none XK_KP_5 +BX_KEY_KP_5 none XK_KP_Begin +BX_KEY_KP_RIGHT none XK_KP_6 +BX_KEY_KP_RIGHT none XK_KP_Right +BX_KEY_KP_END none XK_KP_1 +BX_KEY_KP_END none XK_KP_End +BX_KEY_KP_DOWN none XK_KP_2 +BX_KEY_KP_DOWN none XK_KP_Down +BX_KEY_KP_PAGE_DOWN none XK_KP_3 +BX_KEY_KP_PAGE_DOWN none XK_KP_Page_Down +BX_KEY_KP_INSERT none XK_KP_0 +BX_KEY_KP_INSERT none XK_KP_Insert +BX_KEY_KP_DELETE none XK_KP_Decimal +BX_KEY_KP_DELETE none XK_KP_Delete diff --git a/bochs/gui/keymaps/x11-pc-si.map b/bochs/gui/keymaps/x11-pc-si.map new file mode 100644 index 00000000..8c7778fd --- /dev/null +++ b/bochs/gui/keymaps/x11-pc-si.map @@ -0,0 +1,206 @@ +# Bochs Keymap file +# $Id$ +# Target: PC(x86) keyboard, SI keymap +# Author: Mitja Ursic +# +# The keymap file describes the layout of a keyboard, and how it translates +# into Bochs key codes. +# +# Format: +# BX_Keysym ASCII_equivalent Xwin_Keysym +# +# Or, for keys that require modifiers: +# BX_Keysym+BX_Modifier ASCII_equivalent Xwin_Keysym +# +# BX_Keysym and BX_Modifier must be present in the bx_key_symbol[] list in +# gui/keymap.cc. The BX_Modifier is usually a shift key press, but it +# could be any key. Presently a maximum of one modifier is supported, but this +# could be changed in keymap.h (structure def has only one slot for modifier), +# keymap.cc (parsing code), and iodev/keyboard.cc (simulate keypresses for >1 +# modifier). +# +# The ASCII_equivalent must be either apostrophe + one character + apostrophe, +# or one of these keywords: space, return, tab, backslash, apostrophe, none. +# This format is designed to look like a char constant in C, but it's a very +# simple parser. There's no concept of backslash being an escape char. The +# backslash and apostrophe entries are provided for aesthetic purposes only: no +# C++ programmer wants to see '\' or '''. The parser doesn't care, but they are +# ugly. +# +# Xwin_Keysym is the X windows equivalent of the key combination. These +# codes should match whatever you find in /usr/X11R6/include/X11/keysymdef.h. +# If you're running X windows, Bochs will take each of these Xwin_Keysyms, +# pull off the XK_ in front, and use XStringToKeysym() to change them into +# numerical codes. If this lookup fails, you will get a panic and you need +# to edit the keymap file. +# + +BX_KEY_0 '0' XK_0 +BX_KEY_0+BX_KEY_SHIFT_L ')' XK_parenright +BX_KEY_1 '1' XK_1 +BX_KEY_1+BX_KEY_SHIFT_L '!' XK_exclam +BX_KEY_2 '2' XK_2 +BX_KEY_2+BX_KEY_SHIFT_L '@' XK_at +BX_KEY_3 '3' XK_3 +BX_KEY_3+BX_KEY_SHIFT_L '#' XK_numbersign +BX_KEY_4 '4' XK_4 +BX_KEY_4+BX_KEY_SHIFT_L '$' XK_dollar +BX_KEY_5 '5' XK_5 +BX_KEY_5+BX_KEY_SHIFT_L '%' XK_percent +BX_KEY_6 '6' XK_6 +BX_KEY_7+BX_KEY_SHIFT_L '&' XK_ampersand +BX_KEY_7 '7' XK_7 +BX_KEY_SLASH none XK_cacute +BX_KEY_8 '8' XK_8 +BX_KEY_KP_MULTIPLY '*' XK_asterisk +BX_KEY_9 '9' XK_9 +BX_KEY_9+BX_KEY_SHIFT_L '(' XK_parenleft +BX_KEY_A+BX_KEY_SHIFT_L 'a' XK_A +BX_KEY_A 'a' XK_a +BX_KEY_B+BX_KEY_SHIFT_L 'B' XK_B +BX_KEY_B 'b' XK_b +BX_KEY_C+BX_KEY_SHIFT_L 'C' XK_C +BX_KEY_C 'c' XK_c +BX_KEY_D+BX_KEY_SHIFT_L 'D' XK_D +BX_KEY_D 'd' XK_d +BX_KEY_E+BX_KEY_SHIFT_L 'E' XK_E +BX_KEY_E 'e' XK_e +BX_KEY_F+BX_KEY_SHIFT_L 'F' XK_F +BX_KEY_F 'f' XK_f +BX_KEY_G+BX_KEY_SHIFT_L 'G' XK_G +BX_KEY_G 'g' XK_g +BX_KEY_H+BX_KEY_SHIFT_L 'H' XK_H +BX_KEY_H 'h' XK_h +BX_KEY_I+BX_KEY_SHIFT_L 'I' XK_I +BX_KEY_I 'i' XK_i +BX_KEY_J+BX_KEY_SHIFT_L 'J' XK_J +BX_KEY_J 'j' XK_j +BX_KEY_K+BX_KEY_SHIFT_L 'K' XK_K +BX_KEY_K 'k' XK_k +BX_KEY_L+BX_KEY_SHIFT_L 'L' XK_L +BX_KEY_L 'l' XK_l +BX_KEY_M+BX_KEY_SHIFT_L 'M' XK_M +BX_KEY_M 'm' XK_m +BX_KEY_N+BX_KEY_SHIFT_L 'N' XK_N +BX_KEY_N 'n' XK_n +BX_KEY_O+BX_KEY_SHIFT_L 'O' XK_O +BX_KEY_O 'o' XK_o +BX_KEY_P+BX_KEY_SHIFT_L 'P' XK_P +BX_KEY_P 'p' XK_p +BX_KEY_Q+BX_KEY_SHIFT_L 'Q' XK_Q +BX_KEY_Q 'q' XK_q +BX_KEY_R+BX_KEY_SHIFT_L 'R' XK_R +BX_KEY_R 'r' XK_r +BX_KEY_S+BX_KEY_SHIFT_L 'S' XK_S +BX_KEY_S 's' XK_s +BX_KEY_T+BX_KEY_SHIFT_L 'T' XK_T +BX_KEY_T 't' XK_t +BX_KEY_U+BX_KEY_SHIFT_L 'U' XK_U +BX_KEY_U 'u' XK_u +BX_KEY_V+BX_KEY_SHIFT_L 'V' XK_V +BX_KEY_V 'v' XK_v +BX_KEY_W+BX_KEY_SHIFT_L 'W' XK_W +BX_KEY_W 'w' XK_w +BX_KEY_X+BX_KEY_SHIFT_L 'X' XK_X +BX_KEY_X 'x' XK_x +BX_KEY_Y+BX_KEY_SHIFT_L 'Y' XK_Y +BX_KEY_Y 'y' XK_y +BX_KEY_Z+BX_KEY_SHIFT_L 'Z' XK_Z +BX_KEY_Z 'z' XK_z +BX_KEY_F1 none XK_F1 +BX_KEY_F2 none XK_F2 +BX_KEY_F3 none XK_F3 +BX_KEY_F4 none XK_F4 +BX_KEY_F5 none XK_F5 +BX_KEY_F6 none XK_F6 +BX_KEY_F7 none XK_F7 +BX_KEY_F8 none XK_F8 +BX_KEY_F9 none XK_F9 +BX_KEY_F10 none XK_F10 +BX_KEY_F11 none XK_F11 +BX_KEY_F12 none XK_F12 +BX_KEY_ALT_L none XK_Alt_L +BX_KEY_ALT_L none XK_Meta_L +BX_KEY_ALT_R none XK_Alt_R +BX_KEY_ALT_R none XK_Mode_switch +BX_KEY_ALT_R none XK_Multi_key +BX_KEY_BACKSLASH backslash XK_backslash +BX_KEY_BACKSLASH+BX_KEY_SHIFT_L '|' XK_bar +BX_KEY_BACKSPACE none XK_BackSpace +BX_KEY_CAPS_LOCK none XK_Caps_Lock +BX_KEY_COMMA ',' XK_comma +BX_KEY_COMMA+BX_KEY_SHIFT_L ';' XK_semicolon +BX_KEY_CTRL_L none XK_Control_L +BX_KEY_CTRL_R none XK_Control_R +BX_KEY_DELETE none XK_Delete +BX_KEY_DOWN none XK_Down +BX_KEY_END none XK_End +BX_KEY_ENTER return XK_Return +BX_KEY_EQUALS '=' XK_zcaron +BX_KEY_KP_ADD '+' XK_plus +BX_KEY_ESC none XK_Escape +BX_KEY_GRAVE+BX_KEY_SHIFT_L '~' XK_asciitilde +BX_KEY_GRAVE '`' XK_grave +BX_KEY_HOME none XK_Home +BX_KEY_INSERT none XK_Insert +BX_KEY_KP_5 none XK_KP_5 +BX_KEY_KP_5 none XK_KP_Begin +BX_KEY_KP_ADD none XK_KP_Add +BX_KEY_KP_DELETE none XK_KP_Decimal +BX_KEY_KP_DELETE none XK_KP_Delete +BX_KEY_KP_DIVIDE none XK_KP_Divide +BX_KEY_KP_DOWN none XK_KP_2 +BX_KEY_KP_DOWN none XK_KP_Down +BX_KEY_KP_END none XK_KP_1 +BX_KEY_KP_END none XK_KP_End +BX_KEY_KP_ENTER none XK_KP_Enter +BX_KEY_KP_HOME none XK_KP_7 +BX_KEY_KP_HOME none XK_KP_Home +BX_KEY_KP_INSERT none XK_KP_0 +BX_KEY_KP_INSERT none XK_KP_Insert +BX_KEY_KP_LEFT none XK_KP_4 +BX_KEY_KP_LEFT none XK_KP_Left +BX_KEY_KP_MULTIPLY none XK_KP_Multiply +BX_KEY_KP_PAGE_DOWN none XK_KP_3 +BX_KEY_KP_PAGE_DOWN none XK_KP_Page_Down +BX_KEY_KP_PAGE_UP none XK_KP_9 +BX_KEY_KP_PAGE_UP none XK_KP_Page_Up +BX_KEY_KP_RIGHT none XK_KP_6 +BX_KEY_KP_RIGHT none XK_KP_Right +BX_KEY_KP_SUBTRACT none XK_KP_Subtract +BX_KEY_KP_UP none XK_KP_8 +BX_KEY_KP_UP none XK_KP_Up +BX_KEY_LEFT none XK_Left +BX_KEY_LEFT_BRACKET+BX_KEY_SHIFT_L '{' XK_Scaron +BX_KEY_LEFT_BRACKET '[' XK_bracketleft +BX_KEY_MENU none XK_Menu +BX_KEY_MINUS '-' XK_minus +BX_KEY_MINUS+BX_KEY_SHIFT_L '_' XK_underscore +BX_KEY_NUM_LOCK none XK_Num_Lock +BX_KEY_PAGE_DOWN none XK_Page_Down +BX_KEY_PAGE_UP none XK_Page_Up +BX_KEY_PAUSE none XK_Break +BX_KEY_PAUSE none XK_Pause +BX_KEY_COMMA ',' XK_comma +BX_KEY_PERIOD '.' XK_period +BX_KEY_PERIOD+BX_KEY_SHIFT_L ':' XK_colon #more > +BX_KEY_PRINT none XK_Print +BX_KEY_PRINT none XK_Sys_Req +BX_KEY_RIGHT none XK_Right +BX_KEY_RIGHT_BRACKET+BX_KEY_SHIFT_L '}' XK_Dstroke +BX_KEY_RIGHT_BRACKET ']' XK_bracketright +BX_KEY_SCRL_LOCK none XK_Scroll_Lock +BX_KEY_COMMA+BX_KEY_SHIFT_L ';' XK_semicolon #less < +BX_KEY_SEMICOLON ';' XK_ccaron +BX_KEY_SEMICOLON+BX_KEY_SHIFT_L ':' XK_Ccaron +BX_KEY_SHIFT_L none XK_Shift_L +BX_KEY_SHIFT_R none XK_Shift_R +BX_KEY_SINGLE_QUOTE apostrophe XK_apostrophe +BX_KEY_SINGLE_QUOTE+BX_KEY_SHIFT_L '"' XK_quotedbl +BX_KEY_SLASH+BX_KEY_SHIFT_L '?' XK_question +BX_KEY_SPACE space XK_space +BX_KEY_TAB none XK_ISO_Left_Tab +BX_KEY_TAB tab XK_Tab +BX_KEY_UP none XK_Up +BX_KEY_WIN_L none XK_Super_L +BX_KEY_WIN_R none XK_Super_R diff --git a/bochs/gui/keymaps/x11-pc-uk.map b/bochs/gui/keymaps/x11-pc-uk.map new file mode 100644 index 00000000..4c408bfe --- /dev/null +++ b/bochs/gui/keymaps/x11-pc-uk.map @@ -0,0 +1,209 @@ +# Bochs Keymap file +# $Id$ +# Target: PC(x86) keyboard, UK keymap +# Author: Denis Lenihan +# +# The keymap file describes the layout of a keyboard, and how it translates +# into Bochs key codes. +# +# Format: +# BX_Keysym ASCII_equivalent Xwin_Keysym +# +# Or, for keys that require modifiers: +# BX_Keysym+BX_Modifier ASCII_equivalent Xwin_Keysym +# +# BX_Keysym and BX_Modifier must be present in the bx_key_symbol[] list in +# gui/keymap.cc. The BX_Modifier is usually a shift key press, but it +# could be any key. Presently a maximum of one modifier is supported, but this +# could be changed in keymap.h (structure def has only one slot for modifier), +# keymap.cc (parsing code), and iodev/keyboard.cc (simulate keypresses for >1 +# modifier). +# +# The ASCII_equivalent must be either apostrophe + one character + apostrophe, +# or one of these keywords: space, return, tab, backslash, apostrophe, none. +# This format is designed to look like a char constant in C, but it's a very +# simple parser. There's no concept of backslash being an escape char. The +# backslash and apostrophe entries are provided for aesthetic purposes only: no +# C++ programmer wants to see '\' or '''. The parser doesn't care, but they are +# ugly. +# +# Xwin_Keysym is the X windows equivalent of the key combination. These +# codes should match whatever you find in /usr/X11R6/include/X11/keysymdef.h. +# If you're running X windows, Bochs will take each of these Xwin_Keysyms, +# pull off the XK_ in front, and use XStringToKeysym() to change them into +# numerical codes. If this lookup fails, you will get a panic and you need +# to edit the keymap file. +# + +BX_KEY_0 '0' XK_0 +BX_KEY_0+BX_KEY_SHIFT_L ')' XK_parenright +BX_KEY_1 '1' XK_1 +BX_KEY_1+BX_KEY_SHIFT_L '!' XK_exclam +BX_KEY_2 '2' XK_2 +BX_KEY_2+BX_KEY_SHIFT_L '"' XK_quotedbl +BX_KEY_3 '3' XK_3 +BX_KEY_3+BX_KEY_SHIFT_L '' XK_sterling +BX_KEY_3+BX_KEY_ALT_R '|' XK_EuroSign +BX_KEY_4 '4' XK_4 +BX_KEY_4+BX_KEY_SHIFT_L '$' XK_dollar +BX_KEY_5 '5' XK_5 +BX_KEY_5+BX_KEY_SHIFT_L '%' XK_percent +BX_KEY_6 '6' XK_6 +BX_KEY_6+BX_KEY_SHIFT_L '^' XK_asciicircum +BX_KEY_7 '7' XK_7 +BX_KEY_7+BX_KEY_SHIFT_L '&' XK_ampersand +BX_KEY_8 '8' XK_8 +BX_KEY_8+BX_KEY_SHIFT_L '*' XK_asterisk +BX_KEY_9 '9' XK_9 +BX_KEY_9+BX_KEY_SHIFT_L '(' XK_parenleft +BX_KEY_A+BX_KEY_SHIFT_L 'A' XK_A +BX_KEY_A 'a' XK_a +BX_KEY_B+BX_KEY_SHIFT_L 'B' XK_B +BX_KEY_B 'b' XK_b +BX_KEY_C+BX_KEY_SHIFT_L 'C' XK_C +BX_KEY_C 'c' XK_c +BX_KEY_D+BX_KEY_SHIFT_L 'D' XK_D +BX_KEY_D 'd' XK_d +BX_KEY_E+BX_KEY_SHIFT_L 'E' XK_E +BX_KEY_E 'e' XK_e +BX_KEY_F+BX_KEY_SHIFT_L 'F' XK_F +BX_KEY_F 'f' XK_f +BX_KEY_G+BX_KEY_SHIFT_L 'G' XK_G +BX_KEY_G 'g' XK_g +BX_KEY_H+BX_KEY_SHIFT_L 'H' XK_H +BX_KEY_H 'h' XK_h +BX_KEY_I+BX_KEY_SHIFT_L 'I' XK_I +BX_KEY_I 'i' XK_i +BX_KEY_J+BX_KEY_SHIFT_L 'J' XK_J +BX_KEY_J 'j' XK_j +BX_KEY_K+BX_KEY_SHIFT_L 'K' XK_K +BX_KEY_K 'k' XK_k +BX_KEY_L+BX_KEY_SHIFT_L 'L' XK_L +BX_KEY_L 'l' XK_l +BX_KEY_M+BX_KEY_SHIFT_L 'M' XK_M +BX_KEY_M 'm' XK_m +BX_KEY_N+BX_KEY_SHIFT_L 'N' XK_N +BX_KEY_N 'n' XK_n +BX_KEY_O+BX_KEY_SHIFT_L 'O' XK_O +BX_KEY_O 'o' XK_o +BX_KEY_P+BX_KEY_SHIFT_L 'P' XK_P +BX_KEY_P 'p' XK_p +BX_KEY_Q+BX_KEY_SHIFT_L 'Q' XK_Q +BX_KEY_Q 'q' XK_q +BX_KEY_R+BX_KEY_SHIFT_L 'R' XK_R +BX_KEY_R 'r' XK_r +BX_KEY_S+BX_KEY_SHIFT_L 'S' XK_S +BX_KEY_S 's' XK_s +BX_KEY_T+BX_KEY_SHIFT_L 'T' XK_T +BX_KEY_T 't' XK_t +BX_KEY_U+BX_KEY_SHIFT_L 'U' XK_U +BX_KEY_U 'u' XK_u +BX_KEY_V+BX_KEY_SHIFT_L 'V' XK_V +BX_KEY_V 'v' XK_v +BX_KEY_W+BX_KEY_SHIFT_L 'W' XK_W +BX_KEY_W 'w' XK_w +BX_KEY_X+BX_KEY_SHIFT_L 'X' XK_X +BX_KEY_X 'x' XK_x +BX_KEY_Y+BX_KEY_SHIFT_L 'Y' XK_Y +BX_KEY_Y 'y' XK_y +BX_KEY_Z+BX_KEY_SHIFT_L 'Z' XK_Z +BX_KEY_Z 'z' XK_z +BX_KEY_F1 none XK_F1 +BX_KEY_F2 none XK_F2 +BX_KEY_F3 none XK_F3 +BX_KEY_F4 none XK_F4 +BX_KEY_F5 none XK_F5 +BX_KEY_F6 none XK_F6 +BX_KEY_F7 none XK_F7 +BX_KEY_F8 none XK_F8 +BX_KEY_F9 none XK_F9 +BX_KEY_F10 none XK_F10 +BX_KEY_F11 none XK_F11 +BX_KEY_F12 none XK_F12 +BX_KEY_ALT_L none XK_Alt_L +BX_KEY_ALT_L none XK_Meta_L +BX_KEY_ALT_R none XK_Alt_R +BX_KEY_ALT_R none XK_Mode_switch +BX_KEY_ALT_R none XK_Multi_key +BX_KEY_LEFT_BACKSLASH '\' XK_backslash +BX_KEY_LEFT_BACKSLASH+BX_KEY_SHIFT_L '|' XK_bar +BX_KEY_BACKSLASH '~' XK_asciitilde +BX_KEY_BACKSLASH+BX_KEY_SHIFT_L '#' XK_numbersign +BX_KEY_BACKSPACE none XK_BackSpace +BX_KEY_CAPS_LOCK none XK_Caps_Lock +BX_KEY_COMMA ',' XK_comma +BX_KEY_COMMA+BX_KEY_SHIFT_L '<' XK_less +BX_KEY_CTRL_L none XK_Control_L +BX_KEY_CTRL_R none XK_Control_R +BX_KEY_DELETE none XK_Delete +BX_KEY_DOWN none XK_Down +BX_KEY_END none XK_End +BX_KEY_ENTER return XK_Return +BX_KEY_EQUALS '=' XK_equal +BX_KEY_EQUALS+BX_KEY_SHIFT_L '+' XK_plus +BX_KEY_ESC none XK_Escape +BX_KEY_GRAVE+BX_KEY_SHIFT_L '' XK_notsign +BX_KEY_GRAVE '`' XK_grave +BX_KEY_GRAVE+BX_KEY_ALT_R '|' XK_bar +BX_KEY_HOME none XK_Home +BX_KEY_INSERT none XK_Insert +BX_KEY_KP_5 none XK_KP_5 +BX_KEY_KP_5 none XK_KP_Begin +BX_KEY_KP_ADD none XK_KP_Add +BX_KEY_KP_DELETE none XK_KP_Decimal +BX_KEY_KP_DELETE none XK_KP_Delete +BX_KEY_KP_DIVIDE none XK_KP_Divide +BX_KEY_KP_DOWN none XK_KP_2 +BX_KEY_KP_DOWN none XK_KP_Down +BX_KEY_KP_END none XK_KP_1 +BX_KEY_KP_END none XK_KP_End +BX_KEY_KP_ENTER none XK_KP_Enter +BX_KEY_KP_HOME none XK_KP_7 +BX_KEY_KP_HOME none XK_KP_Home +BX_KEY_KP_INSERT none XK_KP_0 +BX_KEY_KP_INSERT none XK_KP_Insert +BX_KEY_KP_LEFT none XK_KP_4 +BX_KEY_KP_LEFT none XK_KP_Left +BX_KEY_KP_MULTIPLY none XK_KP_Multiply +BX_KEY_KP_PAGE_DOWN none XK_KP_3 +BX_KEY_KP_PAGE_DOWN none XK_KP_Page_Down +BX_KEY_KP_PAGE_UP none XK_KP_9 +BX_KEY_KP_PAGE_UP none XK_KP_Page_Up +BX_KEY_KP_RIGHT none XK_KP_6 +BX_KEY_KP_RIGHT none XK_KP_Right +BX_KEY_KP_SUBTRACT none XK_KP_Subtract +BX_KEY_KP_UP none XK_KP_8 +BX_KEY_KP_UP none XK_KP_Up +BX_KEY_LEFT none XK_Left +BX_KEY_LEFT_BRACKET+BX_KEY_SHIFT_L '{' XK_braceleft +BX_KEY_LEFT_BRACKET '[' XK_bracketleft +BX_KEY_MENU none XK_Menu +BX_KEY_MINUS '-' XK_minus +BX_KEY_MINUS+BX_KEY_SHIFT_L '_' XK_underscore +BX_KEY_NUM_LOCK none XK_Num_Lock +BX_KEY_PAGE_DOWN none XK_Page_Down +BX_KEY_PAGE_UP none XK_Page_Up +BX_KEY_PAUSE none XK_Break +BX_KEY_PAUSE none XK_Pause +BX_KEY_PERIOD+BX_KEY_SHIFT_L '>' XK_greater +BX_KEY_PERIOD '.' XK_period +BX_KEY_PRINT none XK_Print +BX_KEY_PRINT none XK_Sys_Req +BX_KEY_RIGHT none XK_Right +BX_KEY_RIGHT_BRACKET+BX_KEY_SHIFT_L '}' XK_braceright +BX_KEY_RIGHT_BRACKET ']' XK_bracketright +BX_KEY_SCRL_LOCK none XK_Scroll_Lock +BX_KEY_SEMICOLON+BX_KEY_SHIFT_L ':' XK_colon +BX_KEY_SEMICOLON ';' XK_semicolon +BX_KEY_SHIFT_L none XK_Shift_L +BX_KEY_SHIFT_R none XK_Shift_R +BX_KEY_SINGLE_QUOTE apostrophe XK_apostrophe +BX_KEY_SINGLE_QUOTE+BX_KEY_SHIFT_L '@' XK_at +BX_KEY_SLASH+BX_KEY_SHIFT_L '?' XK_question +BX_KEY_SLASH '/' XK_slash +BX_KEY_SPACE space XK_space +BX_KEY_TAB none XK_ISO_Left_Tab +BX_KEY_TAB tab XK_Tab +BX_KEY_UP none XK_Up +BX_KEY_WIN_L none XK_Super_L +BX_KEY_WIN_R none XK_Super_R diff --git a/bochs/gui/keymaps/x11-pc-us.map b/bochs/gui/keymaps/x11-pc-us.map new file mode 100644 index 00000000..9dfaf7a3 --- /dev/null +++ b/bochs/gui/keymaps/x11-pc-us.map @@ -0,0 +1,205 @@ +# Bochs Keymap file +# $Id$ +# Target: PC(x86) keyboard, US keymap +# Author: Christophe Bothamy, Bryce Denney +# +# The keymap file describes the layout of a keyboard, and how it translates +# into Bochs key codes. +# +# Format: +# BX_Keysym ASCII_equivalent Xwin_Keysym +# +# Or, for keys that require modifiers: +# BX_Keysym+BX_Modifier ASCII_equivalent Xwin_Keysym +# +# BX_Keysym and BX_Modifier must be present in the bx_key_symbol[] list in +# gui/keymap.cc. The BX_Modifier is usually a shift key press, but it +# could be any key. Presently a maximum of one modifier is supported, but this +# could be changed in keymap.h (structure def has only one slot for modifier), +# keymap.cc (parsing code), and iodev/keyboard.cc (simulate keypresses for >1 +# modifier). +# +# The ASCII_equivalent must be either apostrophe + one character + apostrophe, +# or one of these keywords: space, return, tab, backslash, apostrophe, none. +# This format is designed to look like a char constant in C, but it's a very +# simple parser. There's no concept of backslash being an escape char. The +# backslash and apostrophe entries are provided for aesthetic purposes only: no +# C++ programmer wants to see '\' or '''. The parser doesn't care, but they are +# ugly. +# +# Xwin_Keysym is the X windows equivalent of the key combination. These +# codes should match whatever you find in /usr/X11R6/include/X11/keysymdef.h. +# If you're running X windows, Bochs will take each of these Xwin_Keysyms, +# pull off the XK_ in front, and use XStringToKeysym() to change them into +# numerical codes. If this lookup fails, you will get a panic and you need +# to edit the keymap file. +# + +BX_KEY_0 '0' XK_0 +BX_KEY_0+BX_KEY_SHIFT_L ')' XK_parenright +BX_KEY_1 '1' XK_1 +BX_KEY_1+BX_KEY_SHIFT_L '!' XK_exclam +BX_KEY_2 '2' XK_2 +BX_KEY_2+BX_KEY_SHIFT_L '@' XK_at +BX_KEY_3 '3' XK_3 +BX_KEY_3+BX_KEY_SHIFT_L '#' XK_numbersign +BX_KEY_4 '4' XK_4 +BX_KEY_4+BX_KEY_SHIFT_L '$' XK_dollar +BX_KEY_5 '5' XK_5 +BX_KEY_5+BX_KEY_SHIFT_L '%' XK_percent +BX_KEY_6 '6' XK_6 +BX_KEY_6+BX_KEY_SHIFT_L '^' XK_asciicircum +BX_KEY_7 '7' XK_7 +BX_KEY_7+BX_KEY_SHIFT_L '&' XK_ampersand +BX_KEY_8 '8' XK_8 +BX_KEY_8+BX_KEY_SHIFT_L '*' XK_asterisk +BX_KEY_9 '9' XK_9 +BX_KEY_9+BX_KEY_SHIFT_L '(' XK_parenleft +BX_KEY_A+BX_KEY_SHIFT_L 'A' XK_A +BX_KEY_A 'a' XK_a +BX_KEY_B+BX_KEY_SHIFT_L 'B' XK_B +BX_KEY_B 'b' XK_b +BX_KEY_C+BX_KEY_SHIFT_L 'C' XK_C +BX_KEY_C 'c' XK_c +BX_KEY_D+BX_KEY_SHIFT_L 'D' XK_D +BX_KEY_D 'd' XK_d +BX_KEY_E+BX_KEY_SHIFT_L 'E' XK_E +BX_KEY_E 'e' XK_e +BX_KEY_F+BX_KEY_SHIFT_L 'F' XK_F +BX_KEY_F 'f' XK_f +BX_KEY_G+BX_KEY_SHIFT_L 'G' XK_G +BX_KEY_G 'g' XK_g +BX_KEY_H+BX_KEY_SHIFT_L 'H' XK_H +BX_KEY_H 'h' XK_h +BX_KEY_I+BX_KEY_SHIFT_L 'I' XK_I +BX_KEY_I 'i' XK_i +BX_KEY_J+BX_KEY_SHIFT_L 'J' XK_J +BX_KEY_J 'j' XK_j +BX_KEY_K+BX_KEY_SHIFT_L 'K' XK_K +BX_KEY_K 'k' XK_k +BX_KEY_L+BX_KEY_SHIFT_L 'L' XK_L +BX_KEY_L 'l' XK_l +BX_KEY_M+BX_KEY_SHIFT_L 'M' XK_M +BX_KEY_M 'm' XK_m +BX_KEY_N+BX_KEY_SHIFT_L 'N' XK_N +BX_KEY_N 'n' XK_n +BX_KEY_O+BX_KEY_SHIFT_L 'O' XK_O +BX_KEY_O 'o' XK_o +BX_KEY_P+BX_KEY_SHIFT_L 'P' XK_P +BX_KEY_P 'p' XK_p +BX_KEY_Q+BX_KEY_SHIFT_L 'Q' XK_Q +BX_KEY_Q 'q' XK_q +BX_KEY_R+BX_KEY_SHIFT_L 'R' XK_R +BX_KEY_R 'r' XK_r +BX_KEY_S+BX_KEY_SHIFT_L 'S' XK_S +BX_KEY_S 's' XK_s +BX_KEY_T+BX_KEY_SHIFT_L 'T' XK_T +BX_KEY_T 't' XK_t +BX_KEY_U+BX_KEY_SHIFT_L 'U' XK_U +BX_KEY_U 'u' XK_u +BX_KEY_V+BX_KEY_SHIFT_L 'V' XK_V +BX_KEY_V 'v' XK_v +BX_KEY_W+BX_KEY_SHIFT_L 'W' XK_W +BX_KEY_W 'w' XK_w +BX_KEY_X+BX_KEY_SHIFT_L 'X' XK_X +BX_KEY_X 'x' XK_x +BX_KEY_Y+BX_KEY_SHIFT_L 'Y' XK_Y +BX_KEY_Y 'y' XK_y +BX_KEY_Z+BX_KEY_SHIFT_L 'Z' XK_Z +BX_KEY_Z 'z' XK_z +BX_KEY_F1 none XK_F1 +BX_KEY_F2 none XK_F2 +BX_KEY_F3 none XK_F3 +BX_KEY_F4 none XK_F4 +BX_KEY_F5 none XK_F5 +BX_KEY_F6 none XK_F6 +BX_KEY_F7 none XK_F7 +BX_KEY_F8 none XK_F8 +BX_KEY_F9 none XK_F9 +BX_KEY_F10 none XK_F10 +BX_KEY_F11 none XK_F11 +BX_KEY_F12 none XK_F12 +BX_KEY_ALT_L none XK_Alt_L +BX_KEY_ALT_L none XK_Meta_L +BX_KEY_ALT_R none XK_Alt_R +BX_KEY_ALT_R none XK_Mode_switch +BX_KEY_ALT_R none XK_Multi_key +BX_KEY_BACKSLASH backslash XK_backslash +BX_KEY_BACKSLASH+BX_KEY_SHIFT_L '|' XK_bar +BX_KEY_BACKSPACE none XK_BackSpace +BX_KEY_CAPS_LOCK none XK_Caps_Lock +BX_KEY_COMMA ',' XK_comma +BX_KEY_COMMA+BX_KEY_SHIFT_L '<' XK_less +BX_KEY_CTRL_L none XK_Control_L +BX_KEY_CTRL_R none XK_Control_R +BX_KEY_DELETE none XK_Delete +BX_KEY_DOWN none XK_Down +BX_KEY_END none XK_End +BX_KEY_ENTER return XK_Return +BX_KEY_EQUALS '=' XK_equal +BX_KEY_EQUALS+BX_KEY_SHIFT_L '+' XK_plus +BX_KEY_ESC none XK_Escape +BX_KEY_GRAVE+BX_KEY_SHIFT_L '~' XK_asciitilde +BX_KEY_GRAVE '`' XK_grave +BX_KEY_HOME none XK_Home +BX_KEY_INSERT none XK_Insert +BX_KEY_KP_5 none XK_KP_5 +BX_KEY_KP_5 none XK_KP_Begin +BX_KEY_KP_ADD none XK_KP_Add +BX_KEY_KP_DELETE none XK_KP_Decimal +BX_KEY_KP_DELETE none XK_KP_Delete +BX_KEY_KP_DIVIDE none XK_KP_Divide +BX_KEY_KP_DOWN none XK_KP_2 +BX_KEY_KP_DOWN none XK_KP_Down +BX_KEY_KP_END none XK_KP_1 +BX_KEY_KP_END none XK_KP_End +BX_KEY_KP_ENTER none XK_KP_Enter +BX_KEY_KP_HOME none XK_KP_7 +BX_KEY_KP_HOME none XK_KP_Home +BX_KEY_KP_INSERT none XK_KP_0 +BX_KEY_KP_INSERT none XK_KP_Insert +BX_KEY_KP_LEFT none XK_KP_4 +BX_KEY_KP_LEFT none XK_KP_Left +BX_KEY_KP_MULTIPLY none XK_KP_Multiply +BX_KEY_KP_PAGE_DOWN none XK_KP_3 +BX_KEY_KP_PAGE_DOWN none XK_KP_Page_Down +BX_KEY_KP_PAGE_UP none XK_KP_9 +BX_KEY_KP_PAGE_UP none XK_KP_Page_Up +BX_KEY_KP_RIGHT none XK_KP_6 +BX_KEY_KP_RIGHT none XK_KP_Right +BX_KEY_KP_SUBTRACT none XK_KP_Subtract +BX_KEY_KP_UP none XK_KP_8 +BX_KEY_KP_UP none XK_KP_Up +BX_KEY_LEFT none XK_Left +BX_KEY_LEFT_BRACKET+BX_KEY_SHIFT_L '{' XK_braceleft +BX_KEY_LEFT_BRACKET '[' XK_bracketleft +BX_KEY_MENU none XK_Menu +BX_KEY_MINUS '-' XK_minus +BX_KEY_MINUS+BX_KEY_SHIFT_L '_' XK_underscore +BX_KEY_NUM_LOCK none XK_Num_Lock +BX_KEY_PAGE_DOWN none XK_Page_Down +BX_KEY_PAGE_UP none XK_Page_Up +BX_KEY_PAUSE none XK_Break +BX_KEY_PAUSE none XK_Pause +BX_KEY_PERIOD+BX_KEY_SHIFT_L '>' XK_greater +BX_KEY_PERIOD '.' XK_period +BX_KEY_PRINT none XK_Print +BX_KEY_PRINT none XK_Sys_Req +BX_KEY_RIGHT none XK_Right +BX_KEY_RIGHT_BRACKET+BX_KEY_SHIFT_L '}' XK_braceright +BX_KEY_RIGHT_BRACKET ']' XK_bracketright +BX_KEY_SCRL_LOCK none XK_Scroll_Lock +BX_KEY_SEMICOLON+BX_KEY_SHIFT_L ':' XK_colon +BX_KEY_SEMICOLON ';' XK_semicolon +BX_KEY_SHIFT_L none XK_Shift_L +BX_KEY_SHIFT_R none XK_Shift_R +BX_KEY_SINGLE_QUOTE apostrophe XK_apostrophe +BX_KEY_SINGLE_QUOTE+BX_KEY_SHIFT_L '"' XK_quotedbl +BX_KEY_SLASH+BX_KEY_SHIFT_L '?' XK_question +BX_KEY_SLASH '/' XK_slash +BX_KEY_SPACE space XK_space +BX_KEY_TAB none XK_ISO_Left_Tab +BX_KEY_TAB tab XK_Tab +BX_KEY_UP none XK_Up +BX_KEY_WIN_L none XK_Super_L +BX_KEY_WIN_R none XK_Super_R diff --git a/bochs/gui/macintosh.cc b/bochs/gui/macintosh.cc new file mode 100644 index 00000000..fdbb70dc --- /dev/null +++ b/bochs/gui/macintosh.cc @@ -0,0 +1,1696 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// macintosh.cc -- bochs GUI file for the Macintosh +// written by David Batterham +// with contributions from Tim Senecal + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +// BOCHS INCLUDES +#include + +#include "param_names.h" +#include "bochs.h" +#include "iodev.h" + +// decide whether to enable this file or not +#if BX_WITH_MACOS + +#include "icon_bochs.h" +#include "font/vga.bitmap.h" + +// MAC OS INCLUDES +#undef ACCESSOR_CALLS_ARE_FUNCTIONS +#define ACCESSOR_CALLS_ARE_FUNCTIONS 1 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// CONSTANTS + +#define rMBarID 128 +#define mApple 128 +#define iAbout 1 +#define mFile 129 +#define iQuit 1 +#define mEdit 130 +#define mBochs 131 +#define iFloppy 1 +#define iCursor 3 +#define iTool 4 +#define iMenuBar 5 +#define iFullScreen 6 +#define iConsole 7 +#define iSnapshot 9 +#define iReset 10 + +#define SLEEP_TIME 0 // Number of ticks to surrender the processor during a WaitNextEvent() +// Change this to 15 or higher if you don't want Bochs to hog the processor! + +#define FONT_WIDTH 8 +#define FONT_HEIGHT 16 + +#define WINBITMAP(w) (((GrafPtr)(w))->portBits) + +#define ASCII_1_MASK 0x00FF0000 +#define ASCII_2_MASK 0x000000FF + +const RGBColor black = {0, 0, 0}; +const RGBColor white = {0xFFFF, 0xFFFF, 0xFFFF}; +const RGBColor medGrey = {0xCCCC, 0xCCCC, 0xCCCC}; +const RGBColor ltGrey = {0xEEEE, 0xEEEE, 0xEEEE}; + +class bx_macintosh_gui_c : public bx_gui_c { +public: + bx_macintosh_gui_c (void) {} + DECLARE_GUI_VIRTUAL_METHODS() +}; + +// declare one instance of the gui object and call macro to insert the +// plugin code +static bx_macintosh_gui_c *theGui = NULL; +IMPLEMENT_GUI_PLUGIN_CODE(macintosh) + +#define LOG_THIS theGui-> + +// GLOBALS + +WindowPtr win, toolwin, fullwin, backdrop, hidden, SouixWin; +SInt16 gOldMBarHeight; +bx_bool menubarVisible = true, cursorVisible = true; +RgnHandle mBarRgn, cnrRgn; +unsigned mouse_button_state = 0; +CTabHandle gCTable; +PixMapHandle gTile; +BitMap *vgafont[256]; +Rect srcTextRect, srcTileRect; +Point scrCenter = {320, 240}; +Ptr KCHR; +short gheaderbar_y; +Point prevPt; +unsigned width, height, gMinTop, gMaxTop, gLeft; +GWorldPtr gOffWorld; +Ptr gMyBuffer; +static unsigned vga_bpp=8; +static EventModifiers oldMods = 0; +static unsigned int text_rows=25, text_cols=80; + +// HEADERBAR STUFF +int numPixMaps = 0, toolPixMaps = 0; +unsigned bx_bitmap_left_xorigin = 2; // pixels from left +unsigned bx_bitmap_right_xorigin = 2; // pixels from right +//PixMapHandle bx_pixmap[BX_MAX_PIXMAPS]; +CIconHandle bx_cicn[BX_MAX_PIXMAPS]; + +struct { + CIconHandle cicn; +// PixMapHandle pm; + unsigned xdim; + unsigned ydim; + unsigned xorigin; + unsigned yorigin; + unsigned alignment; + void (*f)(void); +} bx_tool_pixmap[BX_MAX_PIXMAPS]; + +// Event handlers +BX_CPP_INLINE void HandleKey(EventRecord *event, Bit32u keyState); +BX_CPP_INLINE void HandleToolClick(Point where); +void HandleMenuChoice(long menuChoice); +BX_CPP_INLINE void HandleClick(EventRecord *event); + +// Update routines +void UpdateWindow(WindowPtr window); +void UpdateRgn(RgnHandle rgn); + +// Show/hide UI elements +void HidePointer(void); +void ShowPointer(void); +void HideTools(void); +void ShowTools(void); +void HideMenubar(void); +void ShowMenubar(void); +void HideConsole(void); +void ShowConsole(void); + +// Initialisation +void FixWindow(void); +void MacPanic(void); +void InitToolbox(void); +void CreateTile(void); +void CreateMenus(void); +void CreateWindows(void); +void CreateKeyMap(void); +void CreateVGAFont(void); +BitMap *CreateBitMap(unsigned width, unsigned height); +PixMapHandle CreatePixMap(unsigned left, unsigned top, unsigned width, + unsigned height, unsigned depth, CTabHandle clut); +unsigned char reverse_bitorder(unsigned char); + +//this routine moves the initial window position so that it is entirely onscreen +//it is needed for os 8.x with appearance managaer +void FixWindow(void) +{ + RgnHandle wStruct; + Region *wRgn; + CWindowRecord *thing; + Rect wRect; + RgnHandle tStruct; + Region *tRgn; + Rect tRect; + short MinVal; + + thing = (CWindowRecord *)win; + wStruct = thing->strucRgn; + wRgn = (Region *)*wStruct; + wRect = wRgn->rgnBBox; + + thing = (CWindowRecord *)toolwin; + tStruct = thing->strucRgn; + tRgn = (Region *)*tStruct; + tRect = tRgn->rgnBBox; + + if (wRect.left < 2) + { + gLeft = gLeft + (2 - wRect.left); + } + + MinVal = tRect.bottom+2; +//MinVal = MinVal + GetMBarHeight(); + + if (wRect.top < MinVal) + { +// gMinTop = gMinTop + (MinVal - wRect.top); + gMaxTop = gMaxTop + (MinVal - wRect.top); + } + + MoveWindow(win, gLeft, gMaxTop, false); +} + +void MacPanic(void) +{ + StopAlert(200, NULL); +} + +void InitToolbox(void) +{ + InitGraf(&qd.thePort); + InitWindows(); + InitMenus(); + InitDialogs(nil); + InitCursor(); + MaxApplZone(); + // Initialise the toolbox +} + +void CreateTile(void) +{ + GDHandle saveDevice; + CGrafPtr savePort; + OSErr err; + unsigned long p_f; + long theRowBytes = ((((long) (vga_bpp==24?32:(((vga_bpp+1)>>1)<<1)) * ((long) (srcTileRect.right-srcTileRect.left)) + 31) >> 5) << 2); + +//if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) +//{ + + GetGWorld(&savePort, &saveDevice); + switch(vga_bpp) + { + case 1: + p_f = k1MonochromePixelFormat; + break; + case 2: + p_f = k2IndexedPixelFormat; + break; + case 4: + p_f = k4IndexedPixelFormat; + break; + case 8: + p_f = k8IndexedPixelFormat; + break; + case 15: + p_f = k16LE555PixelFormat; + break; + case 16: + p_f = k16LE565PixelFormat; + break; + case 24: + //p_f = k24BGRPixelFormat; + //break; + case 32: + p_f = k32ARGBPixelFormat;//k32BGRAPixelFormat; + break; + } + + BX_ASSERT((gMyBuffer = (Ptr)malloc(theRowBytes * (srcTileRect.bottom - srcTileRect.top))) != NULL); + err = QTNewGWorldFromPtr(&gOffWorld, p_f, + &srcTileRect, vga_bpp>8 ? NULL : gCTable, NULL, keepLocal, gMyBuffer, theRowBytes); + if (err != noErr || gOffWorld == NULL) + BX_PANIC(("mac: can't create gOffWorld; err=%hd", err)); + + SetGWorld(gOffWorld, NULL); + RGBForeColor(&black); + RGBBackColor(&white); + + gTile = GetGWorldPixMap(gOffWorld); + + if (gTile != NULL) + { + NoPurgePixels(gTile); + if (!LockPixels(gTile)) + BX_ERROR(("mac: can't LockPixels gTile")); + if ((**gTile).pixelType != RGBDirect && (**gTile).pmTable != gCTable) + { + DisposeCTable(gCTable); + gCTable = (**gTile).pmTable; + } + + (**gCTable).ctFlags |= 0x4000; //use palette manager indexes + CTabChanged(gCTable); + } + else + BX_PANIC(("mac: can't create gTile")); + + SetGWorld(savePort, saveDevice); + +/*} + else + { + gOffWorld = NULL; + gTile = CreatePixMap(0, 0, srcTileRect.right, srcTileRect.bottom, 8, gCTable); + if (gTile == NULL) + BX_PANIC(("mac: can't create gTile")); +}*/ +} + +void CreateMenus(void) +{ + Handle menu; + + menu = GetNewMBar(rMBarID); // get our menus from resource + if (menu != nil) + { + SetMenuBar(menu); + DisposeHandle(menu); + AppendResMenu(GetMenuHandle(mApple), 'DRVR'); // add apple menu items + DrawMenuBar(); + } + else + BX_PANIC(("can't create menu")); +} + +void CreateWindows(void) +{ + int l, t, r, b; + Rect winRect; + + SetRect(&winRect, 0, 0, qd.screenBits.bounds.right, qd.screenBits.bounds.bottom); + backdrop = NewWindow(NULL, &winRect, "\p", false, plainDBox, (WindowPtr)-1, false, 0); + + width = 640; + height = 480; + gLeft = 4; + gMinTop = 44; + gMaxTop = 44 + gheaderbar_y; + + l = (qd.screenBits.bounds.right - width)/2; + r = l + width; + t = (qd.screenBits.bounds.bottom - height)/2; + b = t + height; + + SetRect(&winRect, 0, 20, qd.screenBits.bounds.right, 22+gheaderbar_y); + toolwin = NewCWindow(NULL, &winRect, "\pMacBochs 586", true, floatProc, + (WindowPtr)-1, false, 0); + if (toolwin == NULL) + BX_PANIC(("mac: can't create tool window")); + // Create a moveable tool window for the "headerbar" + + SetRect(&winRect, l, t, r, b); + fullwin = NewCWindow(NULL, &winRect, "\p", false, plainDBox, (WindowPtr)-1, false, 1); + + SetRect(&winRect, gLeft, gMaxTop, gLeft+width, gMaxTop+height); + win = NewCWindow(NULL, &winRect, "\pMacBochs 586", true, documentProc, + (WindowPtr)-1, true, 1); + if (win == NULL) + BX_PANIC(("mac: can't create emulator window")); + + FixWindow(); + + hidden = fullwin; + + HiliteWindow(win, true); + + SetPort(win); +} + +// ::SPECIFIC_INIT() +// +// Called from gui.cc, once upon program startup, to allow for the +// specific GUI code (X11, BeOS, ...) to be initialized. +// +// argc, argv: not used right now, but the intention is to pass native GUI +// specific options from the command line. (X11 options, BeOS options,...) +// +// tilewidth, tileheight: for optimization, graphics_tile_update() passes +// only updated regions of the screen to the gui code to be redrawn. +// These define the dimensions of a region (tile). +// headerbar_y: A headerbar (toolbar) is display on the top of the +// VGA window, showing floppy status, and other information. It +// always assumes the width of the current VGA mode width, but +// it's height is defined by this parameter. + +void bx_macintosh_gui_c::specific_init(int argc, char **argv, unsigned tilewidth, unsigned tileheight, unsigned headerbar_y) +{ + put("MGUI"); + InitToolbox(); + + //SouixWin = FrontWindow(); + + atexit(MacPanic); + + gheaderbar_y = headerbar_y; + + CreateKeyMap(); + + gCTable = GetCTable(128); + BX_ASSERT (gCTable != NULL); + CTabChanged(gCTable); //(*gCTable)->ctSeed = GetCTSeed(); + SetRect(&srcTextRect, 0, 0, FONT_WIDTH, FONT_HEIGHT); + SetRect(&srcTileRect, 0, 0, tilewidth, tileheight); + + CreateMenus(); + CreateVGAFont(); + CreateTile(); + CreateWindows(); + + GetMouse(&prevPt); + SetEventMask(everyEvent); + + SIOUXSettings.setupmenus = false; + SIOUXSettings.autocloseonquit = true; + SIOUXSettings.asktosaveonclose = false; + SIOUXSettings.standalone = false; + + UNUSED(argc); + UNUSED(argv); + + //HideWindow(SouixWin); +} + +// HandleKey() +// +// Handles keyboard-related events. + +BX_CPP_INLINE void HandleKey(EventRecord *event, Bit32u keyState) +{ + UInt32 key; + UInt32 trans; + static UInt32 transState = 0; + + key = event->message & charCodeMask; + + if (event->modifiers & cmdKey) + { + HandleMenuChoice(MenuKey(key)); + } +//else if (FrontWindow() == SouixWin) +//{ +// SIOUXHandleOneEvent(event); +//} + else + { +/* if (event->modifiers & shiftKey) + DEV_kbd_gen_scancode(BX_KEY_SHIFT_L | keyState); + if (event->modifiers & controlKey) + DEV_kbd_gen_scancode(BX_KEY_CTRL_L | keyState); + if (event->modifiers & optionKey) + DEV_kbd_gen_scancode(BX_KEY_ALT_L | keyState);*/ + + key = (event->message & keyCodeMask) >> 8; + + trans = KeyTranslate(KCHR, key, &transState); + if ((trans == BX_KEY_PRINT) && ((oldMods & optionKey) || (oldMods & rightOptionKey))) + trans = BX_KEY_ALT_SYSREQ; + if ((trans == BX_KEY_PAUSE) && ((oldMods & controlKey) || (oldMods & rightControlKey))) + trans = BX_KEY_CTRL_BREAK; + + // KeyTranslate maps Mac virtual key codes to any type of character code + // you like (in this case, Bochs key codes). Much nicer than a huge switch + // statement! + + if (trans > 0) + DEV_kbd_gen_scancode(trans | keyState); + +/* if (event->modifiers & shiftKey) + DEV_kbd_gen_scancode(BX_KEY_SHIFT_L | BX_KEY_RELEASED); + if (event->modifiers & controlKey) + DEV_kbd_gen_scancode(BX_KEY_CTRL_L | BX_KEY_RELEASED); + if (event->modifiers & optionKey) + DEV_kbd_gen_scancode(BX_KEY_ALT_L | BX_KEY_RELEASED);*/ + } +} + +// HandleToolClick() +// +// Handles mouse clicks in the Bochs tool window + +BX_CPP_INLINE void HandleToolClick(Point where) +{ + unsigned i; + int xorigin; + Rect bounds; + + SetPort(toolwin); + GlobalToLocal(&where); + for (i=0; iportRect.right - bx_tool_pixmap[i].xorigin; + SetRect(&bounds, xorigin, 0, xorigin+32, 32); + if (PtInRect(where, &bounds)) + bx_tool_pixmap[i].f(); + } + theGui->show_headerbar(); +} + +BX_CPP_INLINE void ResetPointer(void) +{ +#if 0 + CursorDevice *theMouse; + if (true) + { + theMouse = NULL; + CrsrDevNextDevice(&theMouse); + CrsrDevMoveTo(theMouse, (long)scrCenter.h, (long)scrCenter.v); + } +#endif + +#define MouseCur 0x082C +#define MouseTemp 0x0828 +#define MouseNew 0x08CE +#define MouseAttached 0x08CF + + *(Point *)MouseCur = scrCenter; + *(Point *)MouseTemp = scrCenter; + *(Ptr)MouseNew = *(Ptr)MouseAttached; + //*(char *)CrsrNew = 0xFF; +} + +// HandleClick() +// +// Handles mouse click events. + + +void HandleMenuChoice(long menuChoice) +{ + OSErr err = noErr; + short item, menu, i; + short daRefNum; + Rect bounds; + Str255 daName; + WindowRef newWindow; + DialogPtr theDlog; + + item = LoWord(menuChoice); + menu = HiWord(menuChoice); + + switch(menu) { + case mApple: + switch(item) { + case iAbout: + theDlog = GetNewDialog(128, NULL, (WindowPtr)-1); + ModalDialog(NULL, &i); + DisposeDialog(theDlog); + break; + + default: + GetMenuItemText(GetMenuHandle(mApple), item, daName); + daRefNum = OpenDeskAcc(daName); + break; + } + break; + + case mFile: + switch(item) { + case iQuit: + BX_PANIC(("User terminated")); + break; + + default: + break; + } + break; + + case mBochs: + switch(item) { + case iFloppy: + DiskEject(1); + break; + + case iCursor: + if (cursorVisible) + HidePointer(); + else + ShowPointer(); + break; + + case iTool: + if (IsWindowVisible(toolwin)) + HideTools(); + else + ShowTools(); + break; + + case iMenuBar: + if (menubarVisible) + HideMenubar(); + else + ShowMenubar(); + break; + + case iFullScreen: + if (cursorVisible || IsWindowVisible(toolwin) || menubarVisible) + { + if (cursorVisible) + HidePointer(); + if (menubarVisible) + HideMenubar(); + if (IsWindowVisible(toolwin)) + HideTools(); + } + else + { + if (!cursorVisible) + ShowPointer(); + if (!menubarVisible) + ShowMenubar(); + if (!IsWindowVisible(toolwin)) + ShowTools(); + } + break; + + case iConsole: + if (IsWindowVisible(SouixWin)) + HideConsole(); + else + ShowConsole(); + break; + + case iSnapshot: + // the following will break if snapshot is not last bitmap button instantiated + bx_tool_pixmap[toolPixMaps-1].f(); + break; + } + + default: + break; + } + + HiliteMenu(0); +} + +BX_CPP_INLINE void HandleClick(EventRecord *event) +{ + short part; + WindowPtr whichWindow; + Rect dRect; + + part = FindWindow(event->where, &whichWindow); + + switch(part) + { + case inContent: + if (whichWindow == win) + { + if (win != FrontWindow()) + SelectWindow(win); + if (event->modifiers & cmdKey) + mouse_button_state |= 0x02; + else + mouse_button_state |= 0x01; + } + else if (whichWindow == toolwin) + { + HiliteWindow(win, true); + HandleToolClick(event->where); + } + else if (whichWindow == backdrop) + { + SelectWindow(win); + } + else if (whichWindow == SouixWin) + { + SelectWindow(SouixWin); + } + break; + + case inDrag: + dRect = qd.screenBits.bounds; + if (IsWindowVisible(toolwin)) + dRect.top = gMaxTop; + DragWindow(whichWindow, event->where, &dRect); + break; + + case inMenuBar: + HandleMenuChoice(MenuSelect(event->where)); + break; + } +} + +void UpdateWindow(WindowPtr window) +{ + GrafPtr oldPort; + Rect box; + + GetPort(&oldPort); + + SetPort(window); + BeginUpdate(window); + + if (window == win) + { + box = window->portRect; + DEV_vga_redraw_area(box.left, box.top, box.right, box.bottom); + } + else if (window == backdrop) + { + box = window->portRect; + FillRect(&box, &qd.black); + } + else if (window == toolwin) + { + theGui->show_headerbar(); + } + + EndUpdate(window); + SetPort(oldPort); +} + +// ::HANDLE_EVENTS() +// +// Called periodically (vga_update_interval in .bochsrc) so the +// the gui code can poll for keyboard, mouse, and other +// relevant events. + +void bx_macintosh_gui_c::handle_events(void) +{ + EventRecord event; + Point mousePt; + int dx, dy; + int oldMods1=0; + EventModifiers newMods; + unsigned curstate; + GrafPtr oldport; + + curstate = mouse_button_state; //so we can compare the old and the new mouse state + + if (WaitNextEvent(everyEvent, &event, SLEEP_TIME, NULL)) + { + switch(event.what) + { + case nullEvent: + break; + + case mouseDown: + HandleClick(&event); + break; + + case mouseUp: + if (event.modifiers & cmdKey) + mouse_button_state &= ~0x02; + else + mouse_button_state &= ~0x01; + break; + + case keyDown: + case autoKey: + oldMods1 = event.modifiers; + HandleKey(&event, BX_KEY_PRESSED); + break; + + case keyUp: + event.modifiers = oldMods1; + HandleKey(&event, BX_KEY_RELEASED); + break; + + case updateEvt: + if ((WindowPtr)event.message == SouixWin) + SIOUXHandleOneEvent(&event); + else + UpdateWindow((WindowPtr)event.message); + break; + + case diskEvt: + floppyA_handler(); + + default: + break; + } + } + else if (oldMods != (newMods = (event.modifiers & 0xfe00))) + { + if ((newMods ^ oldMods) & shiftKey) + DEV_kbd_gen_scancode(BX_KEY_SHIFT_L | ((newMods & shiftKey)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + if ((newMods ^ oldMods) & alphaLock) + DEV_kbd_gen_scancode(BX_KEY_CAPS_LOCK | ((newMods & alphaLock)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + if ((newMods ^ oldMods) & optionKey) + DEV_kbd_gen_scancode(BX_KEY_ALT_L | ((newMods & optionKey)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + if ((newMods ^ oldMods) & controlKey) + DEV_kbd_gen_scancode(BX_KEY_CTRL_L | ((newMods & controlKey)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + if ((newMods ^ oldMods) & rightShiftKey) + DEV_kbd_gen_scancode(BX_KEY_SHIFT_R | ((newMods & rightShiftKey)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + if ((newMods ^ oldMods) & rightOptionKey) + DEV_kbd_gen_scancode(BX_KEY_ALT_R | ((newMods & rightOptionKey)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + if ((newMods ^ oldMods) & rightControlKey) + DEV_kbd_gen_scancode(BX_KEY_CTRL_R | ((newMods & rightControlKey)?BX_KEY_PRESSED:BX_KEY_RELEASED)); + oldMods = newMods; + } + + GetPort(&oldport); + SetPort(win); + + GetMouse(&mousePt); + +//if mouse has moved, or button has changed state + if ((!EqualPt(mousePt, prevPt)) || (curstate != mouse_button_state)) + { + dx = mousePt.h - prevPt.h; + dy = prevPt.v - mousePt.v; + + DEV_mouse_motion(dx, dy, mouse_button_state); + + if (!cursorVisible) + { + SetPt(&scrCenter, 320, 240); + LocalToGlobal(&scrCenter); + ResetPointer(); //next getmouse should be 320, 240 + SetPt(&mousePt, 320, 240); + } + } + + prevPt = mousePt; + + SetPort(oldport); +} + +// ::FLUSH() +// +// Called periodically, requesting that the gui code flush all pending +// screen update requests. + +void bx_macintosh_gui_c::flush(void) +{ + // an opportunity to make the Window Manager happy. + // not needed on the macintosh.... +} + +// ::CLEAR_SCREEN() +// +// Called to request that the VGA region is cleared. Don't +// clear the area that defines the headerbar. + +void bx_macintosh_gui_c::clear_screen(void) +{ + SetPort(win); + + RGBForeColor(&black); + RGBBackColor(&white); + + FillRect(&win->portRect, &qd.black); +} + +// ::TEXT_UPDATE() +// +// Called in a VGA text mode, to update the screen with +// new content. +// +// old_text: array of character/attributes making up the contents +// of the screen from the last call. See below +// new_text: array of character/attributes making up the current +// contents, which should now be displayed. See below +// +// format of old_text & new_text: each is tm_info.line_offset*text_rows +// bytes long. Each character consists of 2 bytes. The first by is +// the character value, the second is the attribute byte. +// +// cursor_x: new x location of cursor +// cursor_y: new y location of cursor +// tm_info: this structure contains information for additional +// features in text mode (cursor shape, line offset,...) + +void bx_macintosh_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, + unsigned long cursor_x, unsigned long cursor_y, + bx_vga_tminfo_t tm_info) +{ + int i; + unsigned char achar; + int x, y; + static int previ; + int cursori; + Rect destRect; + RGBColor fgColor, bgColor; + GrafPtr oldPort; + unsigned nchars; + OSErr theError; + + GetPort(&oldPort); + + SetPort(win); + + //current cursor position + cursori = (cursor_y * text_cols + cursor_x) * 2; + + // Number of characters on screen, variable number of rows + nchars = text_cols * text_rows; + + for (i=0; i> 4].rgb; + +// RGBForeColor(&fgColor); +// RGBBackColor(&bgColor); + + if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) + { + PmForeColor(new_text[i+1] & 0x0F); + PmBackColor((new_text[i+1] & 0xF0) >> 4); + } + else + { + fgColor = (**gCTable).ctTable[new_text[i+1] & 0x0F].rgb; + bgColor = (**gCTable).ctTable[(new_text[i+1] & 0xF0) >> 4].rgb; + + RGBForeColor(&fgColor); + RGBBackColor(&bgColor); + } + + x = ((i/2) % text_cols)*FONT_WIDTH; + y = ((i/2) / text_cols)*FONT_HEIGHT; + + SetRect(&destRect, x, y, x+FONT_WIDTH, y+FONT_HEIGHT); + + CopyBits(vgafont[achar], &WINBITMAP(win), + &srcTextRect, &destRect, srcCopy, NULL); + if ((theError = QDError()) != noErr) + BX_ERROR(("mac: CopyBits returned %hd", theError)); + + if (i == cursori) //invert the current cursor block + { + InvertRect(&destRect); + } + } + } + + //previous cursor position + previ = cursori; + + SetPort(oldPort); +} + +int bx_macintosh_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) +{ + return 0; +} + +int bx_macintosh_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) +{ + return 0; +} + +// ::PALETTE_CHANGE() +// +// Allocate a color in the native GUI, for this color, and put +// it in the colormap location 'index'. +// returns: 0=no screen update needed (color map change has direct effect) +// 1=screen updated needed (redraw using current colormap) + +bx_bool bx_macintosh_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) +{ + PaletteHandle thePal, oldpal; + GDHandle saveDevice; + CGrafPtr savePort; + GrafPtr oldPort; + +/*if (gOffWorld != NULL) //(SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) + { + GetGWorld(&savePort, &saveDevice); + + SetGWorld(gOffWorld, NULL); + }*/ + + if ((**gTile).pixelType != RGBDirect) + { + GetPort(&oldPort); + SetPort(win); + + (**gCTable).ctTable[index].value = index; + (**gCTable).ctTable[index].rgb.red = (red << 8); + (**gCTable).ctTable[index].rgb.green = (green << 8); + (**gCTable).ctTable[index].rgb.blue = (blue << 8); + + SetEntries(index, index, (**gCTable).ctTable); + + CTabChanged(gCTable); + + SetPort(oldPort); + } + +/*if (gOffWorld != NULL) //(SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) + SetGWorld(savePort, saveDevice);*/ + + if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) + { + thePal = NewPalette(index, gCTable, pmTolerant, 0x5000); + oldpal = GetPalette(win); + + SetPalette(win, thePal, false); + SetPalette(fullwin, thePal, false); + SetPalette(hidden, thePal, false); + + return(1); + } + + return((**gTile).pixelType != RGBDirect); +} + +// ::GRAPHICS_TILE_UPDATE() +// +// Called to request that a tile of graphics be drawn to the +// screen, since info in this region has changed. +// +// tile: array of 8bit values representing a block of pixels with +// dimension equal to the 'tilewidth' & 'tileheight' parameters to +// ::specific_init(). Each value specifies an index into the +// array of colors you allocated for ::palette_change() +// x0: x origin of tile +// y0: y origin of tile +// +// note: origin of tile and of window based on (0,0) being in the upper +// left of the window. + +void bx_macintosh_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) +{ + Rect destRect; + OSErr theError; + Ptr theBaseAddr; + GrafPtr oldPort; +/*GDHandle saveDevice; + CGrafPtr savePort; + + GetGWorld(&savePort, &saveDevice); + + SetGWorld(gOffWorld, NULL); */ + GetPort(&oldPort); + SetPort(win); + destRect = srcTileRect; + OffsetRect(&destRect, x0, y0); + + //(**gTile).baseAddr = (Ptr)tile; + if ((theBaseAddr = GetPixBaseAddr(gTile)) == NULL) + BX_PANIC(("mac: gTile has NULL baseAddr (offscreen buffer purged)")); + else if (vga_bpp == 24 || vga_bpp == 32) + { + for (unsigned iY = 0; iY < (srcTileRect.bottom-srcTileRect.top); iY++) + { + Bit8u *iA = ((Bit8u *)theBaseAddr) + iY * GetPixRowBytes(gTile); + for (unsigned iX = 0; iX < (srcTileRect.right-srcTileRect.left); iX++) + { + iA[iX*4 + 3] = tile[((srcTileRect.right-srcTileRect.left)*iY+iX)*(vga_bpp>>3)]; + iA[iX*4 + 2] = tile[((srcTileRect.right-srcTileRect.left)*iY+iX)*(vga_bpp>>3) + 1]; + iA[iX*4 + 1] = tile[((srcTileRect.right-srcTileRect.left)*iY+iX)*(vga_bpp>>3) + 2]; + iA[iX*4] = vga_bpp == 24 ? 0 : tile[((srcTileRect.right-srcTileRect.left)*iY+iX)*4 + 3]; + } + } + } + else + BlockMoveData(tile, theBaseAddr, (srcTileRect.bottom-srcTileRect.top) * GetPixRowBytes(gTile)); + RGBForeColor(&black); + RGBBackColor(&white); + CopyBits(GetPortBitMapForCopyBits(gOffWorld), &WINBITMAP(win), + &srcTileRect, &destRect, srcCopy, NULL); + if ((theError = QDError()) != noErr) + BX_ERROR(("mac: CopyBits returned %hd", theError)); + SetPort(oldPort); + +//SetGWorld(savePort, saveDevice); +} + +// ::DIMENSION_UPDATE() +// +// Called when the VGA mode changes it's X,Y dimensions. +// Resize the window to this size, but you need to add on +// the height of the headerbar to the Y value. +// +// x: new VGA x size +// y: new VGA y size (add headerbar_y parameter from ::specific_init(). +// fheight: new VGA character height in text mode +// fwidth : new VGA character width in text mode +// bpp : bits per pixel in graphics mode + +void bx_macintosh_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight, unsigned fwidth, unsigned bpp) +{ + if ((bpp != 1) && (bpp != 2) && (bpp != 4) && (bpp != 8) && (bpp != 15) && (bpp != 16) && (bpp != 24) && (bpp != 32)) { + BX_PANIC(("%d bpp graphics mode not supported yet", bpp)); + } + if (bpp != vga_bpp) + { + free(gMyBuffer); + if ((**gTile).pixelType == RGBDirect) + gCTable = GetCTable(128); + DisposeGWorld(gOffWorld); + vga_bpp = bpp; + CreateTile(); + } + if (fheight > 0) { + text_cols = x / fwidth; + text_rows = y / fheight; + if (fwidth != 8) { + x = x * 8 / fwidth; + } + if (fheight != 16) { + y = y * 16 / fheight; + } + } + + if (x != width || y != height) + { + SizeWindow(win, x, y, false); + SizeWindow(fullwin, x, y, false); + SizeWindow(hidden, x, y, false); + width = x; + height = y; + } + + host_xres = x; + host_yres = y; + host_bpp = bpp; +} + +// ::CREATE_BITMAP() +// +// Create a monochrome bitmap of size 'xdim' by 'ydim', which will +// be drawn in the headerbar. Return an integer ID to the bitmap, +// with which the bitmap can be referenced later. +// +// bmap: packed 8 pixels-per-byte bitmap. The pixel order is: +// bit0 is the left most pixel, bit7 is the right most pixel. +// xdim: x dimension of bitmap +// ydim: y dimension of bitmap + +// rewritten by tim senecal to use the cicn (color icon) resources instead + +unsigned bx_macintosh_gui_c::create_bitmap(const unsigned char *bmap, unsigned xdim, unsigned ydim) +{ + unsigned i; + unsigned char *data; + long row_bytes, bytecount; + + bx_cicn[numPixMaps] = GetCIcon(numPixMaps+128); + BX_ASSERT(bx_cicn[numPixMaps]); + + numPixMaps++; + + return(numPixMaps-1); +} + +// ::HEADERBAR_BITMAP() +// +// Called to install a bitmap in the bochs headerbar (toolbar). +// +// bmap_id: will correspond to an ID returned from +// ::create_bitmap(). 'alignment' is either BX_GRAVITY_LEFT +// or BX_GRAVITY_RIGHT, meaning install the bitmap in the next +// available leftmost or rightmost space. +// f: a 'C' function pointer to callback when the mouse is clicked in +// the boundaries of this bitmap. + +unsigned bx_macintosh_gui_c::headerbar_bitmap(unsigned bmap_id, unsigned alignment, void (*f)(void)) +{ + unsigned hb_index; + + toolPixMaps++; + hb_index = toolPixMaps-1; +//bx_tool_pixmap[hb_index].pm = bx_pixmap[bmap_id]; + bx_tool_pixmap[hb_index].cicn = bx_cicn[bmap_id]; + bx_tool_pixmap[hb_index].alignment = alignment; + bx_tool_pixmap[hb_index].f = f; + + if (alignment == BX_GRAVITY_LEFT) + { + bx_tool_pixmap[hb_index].xorigin = bx_bitmap_left_xorigin; + bx_tool_pixmap[hb_index].yorigin = 0; +// bx_bitmap_left_xorigin += (**bx_pixmap[bmap_id]).bounds.right; + bx_bitmap_left_xorigin += 34; + } + else + { +// bx_bitmap_right_xorigin += (**bx_pixmap[bmap_id]).bounds.right; + bx_bitmap_right_xorigin += 34; + bx_tool_pixmap[hb_index].xorigin = bx_bitmap_right_xorigin; + bx_tool_pixmap[hb_index].yorigin = 0; + } + return(hb_index); +} + +// ::SHOW_HEADERBAR() +// +// Show (redraw) the current headerbar, which is composed of +// currently installed bitmaps. + +void bx_macintosh_gui_c::show_headerbar(void) +{ + Rect destRect; + int i, xorigin; + + SetPort(toolwin); + RGBForeColor(&medGrey); + FillRect(&toolwin->portRect, &qd.black); + for (i=0; iportRect.right - bx_tool_pixmap[i].xorigin; + + SetRect(&destRect, xorigin, 0, xorigin+32, 32); + + //changed, simply plot the cicn for that button, in the prescribed rectangle + PlotCIcon(&destRect, bx_tool_pixmap[i].cicn); + } + RGBForeColor(&black); + +} + +// ::REPLACE_BITMAP() +// +// Replace the bitmap installed in the headerbar ID slot 'hbar_id', +// with the one specified by 'bmap_id'. 'bmap_id' will have +// been generated by ::create_bitmap(). The old and new bitmap +// must be of the same size. This allows the bitmap the user +// sees to change, when some action occurs. For example when +// the user presses on the floppy icon, it then displays +// the ejected status. +// +// hbar_id: headerbar slot ID +// bmap_id: bitmap ID + +void bx_macintosh_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) +{ +//bx_tool_pixmap[hbar_id].pm = bx_pixmap[bmap_id]; + bx_tool_pixmap[hbar_id].cicn = bx_cicn[bmap_id]; + show_headerbar(); +} + +// ::EXIT() +// +// Called before bochs terminates, to allow for a graceful +// exit from the native GUI mechanism. + +void bx_macintosh_gui_c::exit(void) +{ + if (!menubarVisible) + ShowMenubar(); // Make the menubar visible again + InitCursor(); +} + +#if 0 +void bx_macintosh_gui_c::snapshot_handler(void) +{ + PicHandle ScreenShot; + long val; + + SetPort(win); + + ScreenShot = OpenPicture(&win->portRect); + + CopyBits(&win->portBits, &win->portBits, &win->portRect, &win->portRect, srcCopy, NULL); + + ClosePicture(); + + val = ZeroScrap(); + + HLock((Handle)ScreenShot); + PutScrap(GetHandleSize((Handle)ScreenShot), 'PICT', *ScreenShot); + HUnlock((Handle)ScreenShot); + + KillPicture(ScreenShot); +} +#endif + +// UpdateRgn() +// +// Updates the screen after the menubar and round corners have been hidden + +void UpdateRgn(RgnHandle rgn) +{ + WindowPtr window; + + window = FrontWindow(); + PaintBehind(window, rgn); + CalcVisBehind(window, rgn); +} + +// HidePointer() +// +// Hides the Mac mouse pointer + +void HidePointer() +{ + HiliteMenu(0); + HideCursor(); + SetPort(win); + SetPt(&scrCenter, 320, 240); + LocalToGlobal(&scrCenter); + ResetPointer(); + GetMouse(&prevPt); + cursorVisible = false; + CheckItem(GetMenuHandle(mBochs), iCursor, false); +} + +// ShowPointer() +// +// Shows the Mac mouse pointer + +void ShowPointer() +{ + InitCursor(); + cursorVisible = true; + CheckItem(GetMenuHandle(mBochs), iCursor, true); +} + +// HideTools() +// +// Hides the Bochs toolbar + +void HideTools() +{ + HideWindow(toolwin); + if (menubarVisible) + { + MoveWindow(win, gLeft, gMinTop, false); + } + else + { + MoveWindow(hidden, gLeft, gMinTop, false); + } + CheckItem(GetMenuHandle(mBochs), iTool, false); + HiliteWindow(win, true); +} + +// ShowTools() +// +// Shows the Bochs toolbar + +void ShowTools() +{ + if (menubarVisible) + { + MoveWindow(win, gLeft, gMaxTop, false); + } + else + { + MoveWindow(hidden, gLeft, gMaxTop, false); + } + ShowWindow(toolwin); + BringToFront(toolwin); + SelectWindow(toolwin); + HiliteWindow(win, true); +//theGui->show_headerbar(); + CheckItem(GetMenuHandle(mBochs), iTool, true); + HiliteWindow(win, true); +} + +// HideMenubar() +// +// Hides the menubar (obviously) + +void HideMenubar() +{ + Rect mBarRect; + RgnHandle grayRgn; + + grayRgn = LMGetGrayRgn(); + gOldMBarHeight = GetMBarHeight(); + LMSetMBarHeight(0); + mBarRgn = NewRgn(); + mBarRect = qd.screenBits.bounds; + mBarRect.bottom = mBarRect.top + gOldMBarHeight; + RectRgn(mBarRgn, &mBarRect); + UnionRgn(grayRgn, mBarRgn, grayRgn); + UpdateRgn(mBarRgn); + + cnrRgn = NewRgn(); + RectRgn(cnrRgn, &qd.screenBits.bounds); + DiffRgn(cnrRgn, grayRgn, cnrRgn); + UnionRgn(grayRgn, cnrRgn, grayRgn); + UpdateRgn(mBarRgn); + + HideWindow(win); + ShowWindow(backdrop); + SelectWindow(backdrop); + hidden = win; + win = fullwin; + ShowWindow(win); + + SelectWindow(win); + menubarVisible = false; + CheckItem(GetMenuHandle(mBochs), iMenuBar, false); +} + +// ShowMenubar() +// +// Makes the menubar visible again so other programs will display correctly. + +void ShowMenubar() +{ + RgnHandle grayRgn; + GrafPtr savePort; + + grayRgn = LMGetGrayRgn(); + LMSetMBarHeight(gOldMBarHeight); + DiffRgn(grayRgn, mBarRgn, grayRgn); + DisposeRgn(mBarRgn); + DrawMenuBar(); + + GetPort(&savePort); + SetPort(LMGetWMgrPort()); + SetClip(cnrRgn); + FillRgn(cnrRgn, &qd.black); + SetPort(savePort); + DiffRgn(grayRgn, cnrRgn, grayRgn); + DisposeRgn(cnrRgn); + + HideWindow(backdrop); + win = hidden; + hidden = fullwin; + HideWindow(hidden); + ShowWindow(win); + HiliteWindow(win, true); + + menubarVisible = true; + CheckItem(GetMenuHandle(mBochs), iMenuBar, true); +} + +void HideConsole() +{ + HideWindow(SouixWin); + CheckItem(GetMenuHandle(mBochs), iConsole, false); +} + +void ShowConsole() +{ + ShowWindow(SouixWin); + SelectWindow(SouixWin); + CheckItem(GetMenuHandle(mBochs), iConsole, true); +} + +// CreateKeyMap() +// +// Create a KCHR data structure to map Mac virtual key codes to Bochs key codes + +void CreateKeyMap(void) +{ + const unsigned char KCHRHeader [258] = { 0, 1 }; + + const unsigned char KCHRTable [130] = { + 0, + 1, + BX_KEY_A, + BX_KEY_S, + BX_KEY_D, + BX_KEY_F, + BX_KEY_H, + BX_KEY_G, + BX_KEY_Z, + BX_KEY_X, + BX_KEY_C, + BX_KEY_V, + BX_KEY_LEFT_BACKSLASH, + BX_KEY_B, + BX_KEY_Q, + BX_KEY_W, + BX_KEY_E, + BX_KEY_R, + BX_KEY_Y, + BX_KEY_T, + BX_KEY_1, + BX_KEY_2, + BX_KEY_3, + BX_KEY_4, + BX_KEY_6, + BX_KEY_5, + BX_KEY_EQUALS, + BX_KEY_9, + BX_KEY_7, + BX_KEY_MINUS, + BX_KEY_8, + BX_KEY_0, + BX_KEY_RIGHT_BRACKET, + BX_KEY_O, + BX_KEY_U, + BX_KEY_LEFT_BRACKET, + BX_KEY_I, + BX_KEY_P, + BX_KEY_ENTER, + BX_KEY_L, + BX_KEY_J, + BX_KEY_SINGLE_QUOTE, + BX_KEY_K, + BX_KEY_SEMICOLON, + BX_KEY_BACKSLASH, + BX_KEY_COMMA, + BX_KEY_SLASH, + BX_KEY_N, + BX_KEY_M, + BX_KEY_PERIOD, + BX_KEY_TAB, + BX_KEY_SPACE, + BX_KEY_GRAVE, + BX_KEY_BACKSPACE, + BX_KEY_KP_ENTER, + BX_KEY_ESC, + 0, // 0x36 (record button) + 0, // 0x37 (cmd key) + 0, // 0x38 (left shift) + 0, // 0x39 (caps lock) + 0, // 0x3A (left option/alt) + 0, // 0x3B (left ctrl) + 0, // 0x3C (right shift) + 0, // 0x3D (right option/alt) + 0, // 0x3E (right ctrl) + 0, // 0x3F (fn key -- laptops) + 0, // 0x40 + BX_KEY_KP_DELETE, // KP_PERIOD + 0, // 0x42 (move right/multiply) + BX_KEY_KP_MULTIPLY, + 0, // 0x44 + BX_KEY_KP_ADD, + 0, // 0x46 (move left/add) + BX_KEY_NUM_LOCK, + 0, // 0x48 (move down/equals) + 0, // 0x49 + 0, // 0x4A + BX_KEY_KP_DIVIDE, + BX_KEY_KP_ENTER, + 0, // 0x4D (move up/divide) + BX_KEY_KP_SUBTRACT, + 0, // 0x4F + 0, // 0x50 + BX_KEY_EQUALS, // 0x51 (kp equals) + BX_KEY_KP_INSERT, // 0x52 (kp 0) + BX_KEY_KP_END, // 0x53 (kp 1) + BX_KEY_KP_DOWN, // 0x54 (kp 2) + BX_KEY_KP_PAGE_DOWN, // 0x55 (kp 3) + BX_KEY_KP_LEFT, // 0x56 (kp 4) + BX_KEY_KP_5, + BX_KEY_KP_RIGHT, // 0x58 (kp 6) + BX_KEY_KP_HOME, // 0x59 (kp 7) + 0, // 0x5A + BX_KEY_KP_UP, // 0x5B (kp 8) + BX_KEY_KP_PAGE_UP, // 0x5C (kp 9) + 0, // 0x5D + 0, // 0x5E + 0, // 0x5F + BX_KEY_F5, + BX_KEY_F6, + BX_KEY_F7, + BX_KEY_F3, + BX_KEY_F8, + BX_KEY_F9, + 0, // 0x66 + BX_KEY_F11, + 0, // 0x68 + BX_KEY_PRINT, // 0x69 (print screen) + 0, // 0x6A + BX_KEY_SCRL_LOCK, // 0x6B (scroll lock) + 0, // 0x6C + BX_KEY_F10, + BX_KEY_MENU, // 0x6E + BX_KEY_F12, + 0, // 0x70 + BX_KEY_PAUSE, // 0x71 (pause) + BX_KEY_INSERT, + BX_KEY_HOME, + BX_KEY_PAGE_UP, + BX_KEY_DELETE, + BX_KEY_F4, + BX_KEY_END, + BX_KEY_F2, + BX_KEY_PAGE_DOWN, + BX_KEY_F1, + BX_KEY_LEFT, + BX_KEY_RIGHT, + BX_KEY_DOWN, + BX_KEY_UP + }; + + KCHR = NewPtrClear(390); + if (KCHR == NULL) + BX_PANIC(("mac: can't allocate memory for key map")); + + BlockMove(KCHRHeader, KCHR, sizeof(KCHRHeader)); + BlockMove(KCHRTable, Ptr(KCHR + sizeof(KCHRHeader)), sizeof(KCHRTable)); +} + +// CreateVGAFont() +// +// Create an array of PixMaps for the PC screen font + +void CreateVGAFont(void) +{ + int i, x; + unsigned char *fontData, curPixel; + long row_bytes, bytecount; + + for (i=0; i<256; i++) + { + vgafont[i] = CreateBitMap(FONT_WIDTH, FONT_HEIGHT); + row_bytes = (*(vgafont[i])).rowBytes; + bytecount = row_bytes * FONT_HEIGHT; + fontData = (unsigned char *)NewPtrClear(bytecount); + + for (x=0; x<16; x++) + { + //curPixel = ~(bx_vgafont[i].data[x]); + curPixel = (bx_vgafont[i].data[x]); + fontData[x*row_bytes] = reverse_bitorder(curPixel); + } + + vgafont[i]->baseAddr = Ptr(fontData); + } +} + +// CreateBitMap() +// Allocate a new bitmap and fill in the fields with appropriate +// values. + +BitMap *CreateBitMap(unsigned width, unsigned height) +{ + BitMap *bm; + long row_bytes; + + row_bytes = ((width + 31) >> 5) << 2; + bm = (BitMap *)calloc(1, sizeof(BitMap)); + if (bm == NULL) + BX_PANIC(("mac: can't allocate memory for pixmap")); + SetRect(&bm->bounds, 0, 0, width, height); + bm->rowBytes = row_bytes; + // Quickdraw allocates a new color table by default, but we want to + // use one we created earlier. + + return bm; +} + +// CreatePixMap() +// Allocate a new pixmap handle and fill in the fields with appropriate +// values. + +PixMapHandle CreatePixMap(unsigned left, unsigned top, unsigned width, + unsigned height, unsigned depth, CTabHandle clut) +{ + PixMapHandle pm; + long row_bytes; + + row_bytes = (((long) depth * ((long) width) + 31) >> 5) << 2; + pm = NewPixMap(); + if (pm == NULL) + BX_PANIC(("mac: can't allocate memory for pixmap")); + (**pm).bounds.left = left; + (**pm).bounds.top = top; + (**pm).bounds.right = left+width; + (**pm).bounds.bottom = top+height; + (**pm).pixelSize = depth; + (**pm).rowBytes = row_bytes | 0x8000; + + DisposeCTable((**pm).pmTable); + (**pm).pmTable = clut; + // Quickdraw allocates a new color table by default, but we want to + // use one we created earlier. + + return pm; +} + +unsigned char reverse_bitorder(unsigned char b) +{ + unsigned char ret=0; + + for (unsigned i=0; i<8; i++) + { + ret |= (b & 0x01) << (7-i); + b >>= 1; + } + + return(ret); +} + +void bx_macintosh_gui_c::mouse_enabled_changed_specific (bx_bool val) +{ +} + +#endif /* if BX_WITH_MACOS */ diff --git a/bochs/gui/nogui.cc b/bochs/gui/nogui.cc new file mode 100644 index 00000000..e56f381d --- /dev/null +++ b/bochs/gui/nogui.cc @@ -0,0 +1,332 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "bochs.h" +#include "param_names.h" + +#if BX_WITH_NOGUI +#include "icon_bochs.h" + +class bx_nogui_gui_c : public bx_gui_c { +public: + bx_nogui_gui_c (void) {} + DECLARE_GUI_VIRTUAL_METHODS() +}; + +// declare one instance of the gui object and call macro to insert the +// plugin code +static bx_nogui_gui_c *theGui = NULL; +IMPLEMENT_GUI_PLUGIN_CODE(nogui) + +#define LOG_THIS theGui-> + +// This file defines stubs for the GUI interface, which is a +// place to start if you want to port bochs to a platform, for +// which there is no support for your native GUI, or if you want to compile +// bochs without any native GUI support (no output window or +// keyboard input will be possible). +// Look in 'x.cc', 'beos.cc', and 'win32.cc' for specific +// implementations of this interface. -Kevin + + + +// ::SPECIFIC_INIT() +// +// Called from gui.cc, once upon program startup, to allow for the +// specific GUI code (X11, BeOS, ...) to be initialized. +// +// argc, argv: these arguments can be used to initialize the GUI with +// specific options (X11 options, BeOS options,...) +// +// tilewidth, tileheight: for optimization, graphics_tile_update() passes +// only updated regions of the screen to the gui code to be redrawn. +// These define the dimensions of a region (tile). +// headerbar_y: A headerbar (toolbar) is display on the top of the +// VGA window, showing floppy status, and other information. It +// always assumes the width of the current VGA mode width, but +// it's height is defined by this parameter. + +void bx_nogui_gui_c::specific_init(int argc, char **argv, unsigned tilewidth, unsigned tileheight, + unsigned headerbar_y) +{ + put("NGUI"); + UNUSED(argc); + UNUSED(argv); + UNUSED(tilewidth); + UNUSED(tileheight); + UNUSED(headerbar_y); + + UNUSED(bochs_icon_bits); // global variable + + if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) { + BX_INFO(("private_colormap option ignored.")); + } +} + + +// ::HANDLE_EVENTS() +// +// Called periodically (vga_update_interval in .bochsrc) so the +// the gui code can poll for keyboard, mouse, and other +// relevant events. + +void bx_nogui_gui_c::handle_events(void) +{ +} + + +// ::FLUSH() +// +// Called periodically, requesting that the gui code flush all pending +// screen update requests. + +void bx_nogui_gui_c::flush(void) +{ +} + + +// ::CLEAR_SCREEN() +// +// Called to request that the VGA region is cleared. Don't +// clear the area that defines the headerbar. + +void bx_nogui_gui_c::clear_screen(void) +{ +} + + + +// ::TEXT_UPDATE() +// +// Called in a VGA text mode, to update the screen with +// new content. +// +// old_text: array of character/attributes making up the contents +// of the screen from the last call. See below +// new_text: array of character/attributes making up the current +// contents, which should now be displayed. See below +// +// format of old_text & new_text: each is tm_info.line_offset*text_rows +// bytes long. Each character consists of 2 bytes. The first by is +// the character value, the second is the attribute byte. +// +// cursor_x: new x location of cursor +// cursor_y: new y location of cursor +// tm_info: this structure contains information for additional +// features in text mode (cursor shape, line offset,...) + +void bx_nogui_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, + unsigned long cursor_x, unsigned long cursor_y, + bx_vga_tminfo_t tm_info) +{ + UNUSED(old_text); + UNUSED(new_text); + UNUSED(cursor_x); + UNUSED(cursor_y); + UNUSED(tm_info); +} + + +// ::GET_CLIPBOARD_TEXT() +// +// Called to get text from the GUI clipboard. Returns 1 if successful. + +int bx_nogui_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) +{ + UNUSED(bytes); + UNUSED(nbytes); + return 0; +} + + +// ::SET_CLIPBOARD_TEXT() +// +// Called to copy the text screen contents to the GUI clipboard. +// Returns 1 if successful. + +int bx_nogui_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) +{ + UNUSED(text_snapshot); + UNUSED(len); + return 0; +} + + +// ::PALETTE_CHANGE() +// +// Allocate a color in the native GUI, for this color, and put +// it in the colormap location 'index'. +// returns: 0=no screen update needed (color map change has direct effect) +// 1=screen updated needed (redraw using current colormap) + +bx_bool bx_nogui_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) +{ + UNUSED(index); + UNUSED(red); + UNUSED(green); + UNUSED(blue); + return(0); +} + + +// ::GRAPHICS_TILE_UPDATE() +// +// Called to request that a tile of graphics be drawn to the +// screen, since info in this region has changed. +// +// tile: array of 8bit values representing a block of pixels with +// dimension equal to the 'tilewidth' & 'tileheight' parameters to +// ::specific_init(). Each value specifies an index into the +// array of colors you allocated for ::palette_change() +// x0: x origin of tile +// y0: y origin of tile +// +// note: origin of tile and of window based on (0,0) being in the upper +// left of the window. + +void bx_nogui_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) +{ + UNUSED(tile); + UNUSED(x0); + UNUSED(y0); +} + + +// ::DIMENSION_UPDATE() +// +// Called when the VGA mode changes it's X,Y dimensions. +// Resize the window to this size, but you need to add on +// the height of the headerbar to the Y value. +// +// x: new VGA x size +// y: new VGA y size (add headerbar_y parameter from ::specific_init(). +// fheight: new VGA character height in text mode +// fwidth : new VGA character width in text mode +// bpp : bits per pixel in graphics mode + +void bx_nogui_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight, unsigned fwidth, unsigned bpp) +{ + UNUSED(x); + UNUSED(y); + UNUSED(fheight); + UNUSED(fwidth); + UNUSED(bpp); +} + + +// ::CREATE_BITMAP() +// +// Create a monochrome bitmap of size 'xdim' by 'ydim', which will +// be drawn in the headerbar. Return an integer ID to the bitmap, +// with which the bitmap can be referenced later. +// +// bmap: packed 8 pixels-per-byte bitmap. The pixel order is: +// bit0 is the left most pixel, bit7 is the right most pixel. +// xdim: x dimension of bitmap +// ydim: y dimension of bitmap + +unsigned bx_nogui_gui_c::create_bitmap(const unsigned char *bmap, unsigned xdim, unsigned ydim) +{ + UNUSED(bmap); + UNUSED(xdim); + UNUSED(ydim); + return(0); +} + + +// ::HEADERBAR_BITMAP() +// +// Called to install a bitmap in the bochs headerbar (toolbar). +// +// bmap_id: will correspond to an ID returned from +// ::create_bitmap(). 'alignment' is either BX_GRAVITY_LEFT +// or BX_GRAVITY_RIGHT, meaning install the bitmap in the next +// available leftmost or rightmost space. +// alignment: is either BX_GRAVITY_LEFT or BX_GRAVITY_RIGHT, +// meaning install the bitmap in the next +// available leftmost or rightmost space. +// f: a 'C' function pointer to callback when the mouse is clicked in +// the boundaries of this bitmap. + +unsigned bx_nogui_gui_c::headerbar_bitmap(unsigned bmap_id, unsigned alignment, void (*f)(void)) +{ + UNUSED(bmap_id); + UNUSED(alignment); + UNUSED(f); + return(0); +} + + +// ::SHOW_HEADERBAR() +// +// Show (redraw) the current headerbar, which is composed of +// currently installed bitmaps. + +void bx_nogui_gui_c::show_headerbar(void) +{ +} + + +// ::REPLACE_BITMAP() +// +// Replace the bitmap installed in the headerbar ID slot 'hbar_id', +// with the one specified by 'bmap_id'. 'bmap_id' will have +// been generated by ::create_bitmap(). The old and new bitmap +// must be of the same size. This allows the bitmap the user +// sees to change, when some action occurs. For example when +// the user presses on the floppy icon, it then displays +// the ejected status. +// +// hbar_id: headerbar slot ID +// bmap_id: bitmap ID + +void bx_nogui_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) +{ + UNUSED(hbar_id); + UNUSED(bmap_id); +} + + +// ::EXIT() +// +// Called before bochs terminates, to allow for a graceful +// exit from the native GUI mechanism. + +void bx_nogui_gui_c::exit(void) +{ + BX_INFO(("bx_nogui_gui_c::exit() not implemented yet.")); +} + + +// ::MOUSE_ENABLED_CHANGED_SPECIFIC() +// +// Called whenever the mouse capture mode should be changed. + +void bx_nogui_gui_c::mouse_enabled_changed_specific(bx_bool val) +{ +} + +#endif /* if BX_WITH_NOGUI */ diff --git a/bochs/gui/paramtree.cc b/bochs/gui/paramtree.cc new file mode 100755 index 00000000..2e90e7ca --- /dev/null +++ b/bochs/gui/paramtree.cc @@ -0,0 +1,1009 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2010 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#include "bochs.h" +#include "paramtree.h" + +///////////////////////////////////////////////////////////////////////// +// define methods of bx_param_* and family +///////////////////////////////////////////////////////////////////////// + +extern bx_simulator_interface_c *SIM; +extern logfunctions *siminterface_log; +extern bx_list_c *root_param; +#define LOG_THIS siminterface_log-> + +const char* bx_param_c::default_text_format = NULL; + +bx_param_c::bx_param_c(Bit32u id, const char *param_name, const char *param_desc) + : bx_object_c(id), + parent(NULL), + description(NULL), + label(NULL), + ask_format(NULL), + group_name(NULL) +{ + set_type(BXT_PARAM); + this->name = new char[strlen(param_name)+1]; + strcpy(this->name, param_name); + set_description(param_desc); + this->text_format = default_text_format; + this->long_text_format = default_text_format; + this->runtime_param = 0; + this->enabled = 1; + // dependent_list must be initialized before the set(), + // because set calls update_dependents(). + dependent_list = NULL; +} + +bx_param_c::bx_param_c(Bit32u id, const char *param_name, const char *param_label, const char *param_desc) + : bx_object_c(id), + parent(NULL), + description(NULL), + label(NULL), + ask_format(NULL), + group_name(NULL) +{ + set_type(BXT_PARAM); + this->name = new char[strlen(param_name)+1]; + strcpy(this->name, param_name); + set_description(param_desc); + set_label(param_label); + this->text_format = default_text_format; + this->long_text_format = default_text_format; + this->runtime_param = 0; + this->enabled = 1; + // dependent_list must be initialized before the set(), + // because set calls update_dependents(). + dependent_list = NULL; +} + +bx_param_c::~bx_param_c() +{ + delete [] name; + delete [] label; + delete [] description; + delete [] ask_format; + delete [] group_name; +} + +void bx_param_c::set_description(const char *text) +{ + delete [] this->description; + if (text) { + this->description = new char[strlen(text)+1]; + strcpy(this->description, text); + } else { + this->description = NULL; + } +} + +void bx_param_c::set_label(const char *text) +{ + delete [] label; + if (text) { + label = new char[strlen(text)+1]; + strcpy(label, text); + } else { + label = NULL; + } +} + +void bx_param_c::set_ask_format(const char *format) +{ + delete [] ask_format; + if (format) { + ask_format = new char[strlen(format)+1]; + strcpy(ask_format, format); + } else { + ask_format = NULL; + } +} + +void bx_param_c::set_group(const char *group) +{ + delete [] group_name; + if (group) { + group_name = new char[strlen(group)+1]; + strcpy(group_name, group); + } else { + group_name = NULL; + } +} + +int bx_param_c::get_param_path(char *path_out, int maxlen) +{ + if ((get_parent() == NULL) || (get_parent() == root_param)) { + // Start with an empty string. + // Never print the name of the root param. + path_out[0] = 0; + } else { + // build path of the parent, add a period, add path of this node + if (get_parent()->get_param_path(path_out, maxlen) > 0) { + strncat(path_out, ".", maxlen); + } + } + strncat(path_out, name, maxlen); + return strlen(path_out); +} + +const char* bx_param_c::set_default_format(const char *f) +{ + const char *old = default_text_format; + default_text_format = f; + return old; +} + +bx_param_num_c::bx_param_num_c(bx_param_c *parent, + const char *name, + const char *label, + const char *description, + Bit64s min, Bit64s max, Bit64s initial_val, + bx_bool is_shadow) + : bx_param_c(SIM->gen_param_id(), name, label, description) +{ + set_type(BXT_PARAM_NUM); + this->min = min; + this->max = max; + this->initial_val = initial_val; + this->val.number = initial_val; + this->handler = NULL; + this->save_handler = NULL; + this->restore_handler = NULL; + this->enable_handler = NULL; + this->base = default_base; + this->is_shadow = is_shadow; + if (!is_shadow) { + set(initial_val); + } + if (parent) { + BX_ASSERT(parent->get_type() == BXT_LIST); + this->parent = (bx_list_c *)parent; + this->parent->add(this); + } +} + +Bit32u bx_param_num_c::default_base = BASE_DEC; + +Bit32u bx_param_num_c::set_default_base(Bit32u val) +{ + Bit32u old = default_base; + default_base = val; + return old; +} + +void bx_param_num_c::set_handler(param_event_handler handler) +{ + this->handler = handler; + // now that there's a handler, call set once to run the handler immediately + //set (get ()); +} + +void bx_param_num_c::set_sr_handlers(void *devptr, param_save_handler save, param_restore_handler restore) +{ + sr_devptr = devptr; + save_handler = save; + restore_handler = restore; +} + +void bx_param_num_c::set_dependent_list(bx_list_c *l) +{ + dependent_list = l; + update_dependents(); +} + +Bit64s bx_param_num_c::get64() +{ + if (save_handler) { + return (*save_handler)(sr_devptr, this); + } + if (handler) { + // the handler can decide what value to return and/or do some side effect + return (*handler)(this, 0, val.number); + } else { + // just return the value + return val.number; + } +} + +void bx_param_num_c::set(Bit64s newval) +{ + if (handler) { + // the handler can override the new value and/or perform some side effect + val.number = newval; + (*handler)(this, 1, newval); + } else { + // just set the value. This code does not check max/min. + val.number = newval; + } + if (restore_handler) { + val.number = newval; + (*restore_handler)(sr_devptr, this, newval); + } + if ((val.number < min || val.number > max) && (Bit64u)max != BX_MAX_BIT64U) + BX_PANIC(("numerical parameter '%s' was set to " FMT_LL "d, which is out of range " FMT_LL "d to " FMT_LL "d", get_name (), val.number, min, max)); + if (dependent_list != NULL) update_dependents(); +} + +void bx_param_num_c::set_range(Bit64u min, Bit64u max) +{ + this->min = min; + this->max = max; +} + +void bx_param_num_c::set_initial_val(Bit64s initial_val) +{ + this->val.number = this->initial_val = initial_val; +} + +void bx_param_num_c::update_dependents() +{ + if (dependent_list) { + int en = val.number && enabled; + for (int i=0; iget_size(); i++) { + bx_param_c *param = dependent_list->get(i); + if (param != this) + param->set_enabled(en); + } + } +} + +void bx_param_num_c::set_enabled(int en) +{ + // The enable handler may wish to allow/disallow the action + if (enable_handler) { + en = (*enable_handler)(this, en); + } + bx_param_c::set_enabled(en); + update_dependents(); +} + +// Signed 64 bit +bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit64s *ptr_to_real_val, + int base, + Bit8u highbit, + Bit8u lowbit) +: bx_param_num_c(parent, name, NULL, NULL, BX_MIN_BIT64S, BX_MAX_BIT64S, *ptr_to_real_val, 1) +{ + this->varsize = 64; + this->lowbit = lowbit; + this->mask = ((BX_MAX_BIT64S >> (63 - (highbit - lowbit))) << lowbit); + val.p64bit = ptr_to_real_val; + if (base == BASE_HEX) { + this->base = base; + this->text_format = "0x"FMT_LL"x"; + } +} + +// Unsigned 64 bit +bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit64u *ptr_to_real_val, + int base, + Bit8u highbit, + Bit8u lowbit) +: bx_param_num_c(parent, name, NULL, NULL, BX_MIN_BIT64U, BX_MAX_BIT64U, *ptr_to_real_val, 1) +{ + this->varsize = 64; + this->lowbit = lowbit; + this->mask = ((BX_MAX_BIT64U >> (63 - (highbit - lowbit))) << lowbit); + val.p64bit = (Bit64s*) ptr_to_real_val; + if (base == BASE_HEX) { + this->base = base; + this->text_format = "0x"FMT_LL"x"; + } +} + +// Signed 32 bit +bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit32s *ptr_to_real_val, + int base, + Bit8u highbit, + Bit8u lowbit) +: bx_param_num_c(parent, name, NULL, NULL, BX_MIN_BIT32S, BX_MAX_BIT32S, *ptr_to_real_val, 1) +{ + this->varsize = 32; + this->lowbit = lowbit; + this->mask = ((BX_MAX_BIT32S >> (31 - (highbit - lowbit))) << lowbit); + val.p32bit = ptr_to_real_val; + if (base == BASE_HEX) { + this->base = base; + this->text_format = "0x%08x"; + } +} + +// Unsigned 32 bit +bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit32u *ptr_to_real_val, + int base, + Bit8u highbit, + Bit8u lowbit) +: bx_param_num_c(parent, name, NULL, NULL, BX_MIN_BIT32U, BX_MAX_BIT32U, *ptr_to_real_val, 1) +{ + this->varsize = 32; + this->lowbit = lowbit; + this->mask = ((BX_MAX_BIT32U >> (31 - (highbit - lowbit))) << lowbit); + val.p32bit = (Bit32s*) ptr_to_real_val; + if (base == BASE_HEX) { + this->base = base; + this->text_format = "0x%08x"; + } +} + +// Signed 16 bit +bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit16s *ptr_to_real_val, + int base, + Bit8u highbit, + Bit8u lowbit) +: bx_param_num_c(parent, name, NULL, NULL, BX_MIN_BIT16S, BX_MAX_BIT16S, *ptr_to_real_val, 1) +{ + this->varsize = 16; + this->lowbit = lowbit; + this->mask = ((BX_MAX_BIT16S >> (15 - (highbit - lowbit))) << lowbit); + val.p16bit = ptr_to_real_val; + if (base == BASE_HEX) { + this->base = base; + this->text_format = "0x%04x"; + } +} + +// Unsigned 16 bit +bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit16u *ptr_to_real_val, + int base, + Bit8u highbit, + Bit8u lowbit) +: bx_param_num_c(parent, name, NULL, NULL, BX_MIN_BIT16U, BX_MAX_BIT16U, *ptr_to_real_val, 1) +{ + this->varsize = 16; + this->lowbit = lowbit; + this->mask = ((BX_MAX_BIT16U >> (15 - (highbit - lowbit))) << lowbit); + val.p16bit = (Bit16s*) ptr_to_real_val; + if (base == BASE_HEX) { + this->base = base; + this->text_format = "0x%04x"; + } +} + +// Signed 8 bit +bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit8s *ptr_to_real_val, + int base, + Bit8u highbit, + Bit8u lowbit) +: bx_param_num_c(parent, name, NULL, NULL, BX_MIN_BIT8S, BX_MAX_BIT8S, *ptr_to_real_val, 1) +{ + this->varsize = 8; + this->lowbit = lowbit; + this->mask = ((BX_MAX_BIT8S >> (7 - (highbit - lowbit))) << lowbit); + this->mask = (1 << (highbit - lowbit)) - 1; + val.p8bit = ptr_to_real_val; + if (base == BASE_HEX) { + this->base = base; + this->text_format = "0x%02x"; + } +} + +// Unsigned 8 bit +bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit8u *ptr_to_real_val, + int base, + Bit8u highbit, + Bit8u lowbit) +: bx_param_num_c(parent, name, NULL, NULL, BX_MIN_BIT8U, BX_MAX_BIT8U, *ptr_to_real_val, 1) +{ + this->varsize = 8; + this->lowbit = lowbit; + this->mask = ((BX_MAX_BIT8U >> (7 - (highbit - lowbit))) << lowbit); + val.p8bit = (Bit8s*) ptr_to_real_val; + if (base == BASE_HEX) { + this->base = base; + this->text_format = "0x%02x"; + } +} + +Bit64s bx_shadow_num_c::get64() +{ + Bit64u current = 0; + switch (varsize) { + case 8: current = *(val.p8bit); break; + case 16: current = *(val.p16bit); break; + case 32: current = *(val.p32bit); break; + case 64: current = *(val.p64bit); break; + default: BX_PANIC(("unsupported varsize %d", varsize)); + } + current = (current >> lowbit) & mask; + if (handler) { + // the handler can decide what value to return and/or do some side effect + return (*handler)(this, 0, current) & mask; + } else { + // just return the value + return current; + } +} + +void bx_shadow_num_c::set(Bit64s newval) +{ + Bit64u tmp = 0; + if (((newval < min) || (newval > max)) && (min != BX_MIN_BIT64S) && ((Bit64u)max != BX_MAX_BIT64U)) + BX_PANIC(("numerical parameter %s was set to " FMT_LL "d, which is out of range " FMT_LL "d to " FMT_LL "d", get_name (), newval, min, max)); + switch (varsize) { + case 8: + tmp = *(val.p8bit) & ~(mask << lowbit); + tmp |= (newval & mask) << lowbit; + *(val.p8bit) = (Bit8s)tmp; + break; + case 16: + tmp = *(val.p16bit) & ~(mask << lowbit); + tmp |= (newval & mask) << lowbit; + *(val.p16bit) = (Bit16s)tmp; + break; + case 32: + tmp = *(val.p32bit) & ~(mask << lowbit); + tmp |= (newval & mask) << lowbit; + *(val.p32bit) = (Bit32s)tmp; + break; + case 64: + tmp = *(val.p64bit) & ~(mask << lowbit); + tmp |= (newval & mask) << lowbit; + *(val.p64bit) = (Bit64s)tmp; + break; + default: + BX_PANIC(("unsupported varsize %d", varsize)); + } + if (handler) { + // the handler can override the new value and/or perform some side effect + (*handler)(this, 1, tmp); + } +} + +void bx_shadow_num_c::reset() +{ + BX_PANIC(("reset not supported on bx_shadow_num_c yet")); +} + +bx_param_bool_c::bx_param_bool_c(bx_param_c *parent, + const char *name, + const char *label, + const char *description, + Bit64s initial_val, + bx_bool is_shadow) + : bx_param_num_c(parent, name, label, description, 0, 1, initial_val, is_shadow) +{ + set_type(BXT_PARAM_BOOL); +} + +bx_shadow_bool_c::bx_shadow_bool_c(bx_param_c *parent, + const char *name, + const char *label, + bx_bool *ptr_to_real_val, + Bit8u bitnum) + : bx_param_bool_c(parent, name, label, NULL, (Bit64s) *ptr_to_real_val, 1) +{ + val.pbool = ptr_to_real_val; + this->bitnum = bitnum; +} + +bx_shadow_bool_c::bx_shadow_bool_c(bx_param_c *parent, + const char *name, + bx_bool *ptr_to_real_val, + Bit8u bitnum) + : bx_param_bool_c(parent, name, NULL, NULL, (Bit64s) *ptr_to_real_val, 1) +{ + val.pbool = ptr_to_real_val; + this->bitnum = bitnum; +} + +Bit64s bx_shadow_bool_c::get64() +{ + if (handler) { + // the handler can decide what value to return and/or do some side effect + Bit64s ret = (*handler)(this, 0, (Bit64s) *(val.pbool)); + return (ret>>bitnum) & 1; + } else { + // just return the value + return (*(val.pbool)) & 1; + } +} + +void bx_shadow_bool_c::set(Bit64s newval) +{ + // only change the bitnum bit + Bit64s tmp = (newval&1) << bitnum; + *(val.pbool) &= ~tmp; + *(val.pbool) |= tmp; + if (handler) { + // the handler can override the new value and/or perform some side effect + (*handler)(this, 1, newval&1); + } +} + +bx_param_enum_c::bx_param_enum_c(bx_param_c *parent, + const char *name, + const char *label, + const char *description, + const char **choices, + Bit64s initial_val, + Bit64s value_base) + : bx_param_num_c(parent, name, label, description, value_base, BX_MAX_BIT64S, initial_val) +{ + set_type(BXT_PARAM_ENUM); + this->choices = choices; + // count number of choices, set max + const char **p = choices; + while (*p != NULL) p++; + this->min = value_base; + // now that the max is known, replace the BX_MAX_BIT64S sent to the parent + // class constructor with the real max. + this->max = value_base + (p - choices - 1); + this->deps_bitmap = NULL; + set(initial_val); +} + +bx_param_enum_c::~bx_param_enum_c() +{ + if (deps_bitmap != NULL) { + free(deps_bitmap); + } +} + + +void bx_param_enum_c::set(Bit64s val) +{ + bx_param_num_c::set(val); + update_dependents(); +} + +int bx_param_enum_c::find_by_name(const char *string) +{ + const char **p; + for (p=&choices[0]; *p; p++) { + if (!strcmp(string, *p)) + return p-choices; + } + return -1; +} + +bx_bool bx_param_enum_c::set_by_name(const char *string) +{ + int n = find_by_name(string); + if (n<0) return 0; + set(n + min); + return 1; +} + +void bx_param_enum_c::set_dependent_list(bx_list_c *l, bx_bool enable_all) +{ + dependent_list = l; + deps_bitmap = (Bit64u*)malloc(sizeof(Bit64u) * (max - min + 1)); + for (int i=0; i<(max-min+1); i++) { + if (enable_all) { + deps_bitmap[i] = (1 << (l->get_size())) - 1; + } else { + deps_bitmap[i] = 0; + } + } + update_dependents(); +} + +void bx_param_enum_c::set_dependent_bitmap(Bit64s value, Bit64u bitmap) +{ + if (deps_bitmap != NULL) { + deps_bitmap[value - min] = bitmap; + } + update_dependents(); +} + +Bit64u bx_param_enum_c::get_dependent_bitmap(Bit64s value) +{ + if (deps_bitmap != NULL) { + return deps_bitmap[value - min]; + } + return 0; +} + +void bx_param_enum_c::update_dependents() +{ + if ((dependent_list != NULL) && (deps_bitmap != NULL)) { + Bit64u en_bmap = deps_bitmap[val.number - min]; + Bit64u mask = 0x1; + for (int i=0; iget_size(); i++) { + int en = (en_bmap & mask) && enabled; + bx_param_c *param = dependent_list->get(i); + if (param != this) + param->set_enabled(en); + mask <<= 1; + } + } +} + +void bx_param_enum_c::set_enabled(int en) +{ + // The enable handler may wish to allow/disallow the action + if (enable_handler) { + en = (*enable_handler)(this, en); + } + bx_param_c::set_enabled(en); + update_dependents(); +} + +bx_param_string_c::bx_param_string_c(bx_param_c *parent, + const char *name, + const char *label, + const char *description, + const char *initial_val, + int maxsize) + : bx_param_c(SIM->gen_param_id(), name, label, description) +{ + set_type(BXT_PARAM_STRING); + int initial_val_size = strlen(initial_val) + 1; + if (maxsize < 0) { + maxsize = initial_val_size; + } else if (initial_val_size > maxsize) { + initial_val_size = maxsize; + } + this->val = new char[maxsize]; + this->initial_val = new char[maxsize]; + this->handler = NULL; + this->enable_handler = NULL; + this->maxsize = maxsize; + strncpy(this->val, initial_val, initial_val_size); + if (maxsize > initial_val_size) + memset(this->val + initial_val_size, 0, maxsize - initial_val_size); + strncpy(this->initial_val, initial_val, maxsize); + this->options = 0; + set(initial_val); + if (parent) { + BX_ASSERT(parent->get_type() == BXT_LIST); + this->parent = (bx_list_c *)parent; + this->parent->add(this); + } +} + +bx_param_filename_c::bx_param_filename_c(bx_param_c *parent, + const char *name, + const char *label, + const char *description, + const char *initial_val, + int maxsize) + : bx_param_string_c(parent, name, label, description, initial_val, maxsize) +{ + set_options(IS_FILENAME); + ext = NULL; +} + +bx_param_string_c::~bx_param_string_c() +{ + if (val != NULL) delete [] val; + if (initial_val != NULL) delete [] initial_val; +} + +void bx_param_string_c::reset() +{ + set(initial_val); +} + +void bx_param_string_c::set_handler(param_string_event_handler handler) +{ + this->handler = handler; +} + +void bx_param_string_c::set_enable_handler(param_enable_handler handler) +{ + this->enable_handler = handler; +} + +void bx_param_string_c::update_dependents() +{ + if (dependent_list) { + int en = (strlen(val) > 0) && (strcmp(val, "none")) && enabled; + for (int i=0; iget_size(); i++) { + bx_param_c *param = dependent_list->get(i); + if (param != this) + param->set_enabled(en); + } + } +} + +void bx_param_string_c::set_enabled(int en) +{ + // The enable handler may wish to allow/disallow the action + if (enable_handler) { + en = (*enable_handler)(this, en); + } + bx_param_c::set_enabled(en); + if (dependent_list != NULL) update_dependents(); +} + +void bx_param_string_c::set_dependent_list(bx_list_c *l) +{ + dependent_list = l; + update_dependents(); +} + +Bit32s bx_param_string_c::get(char *buf, int len) +{ + if (options & RAW_BYTES) + memcpy(buf, val, len); + else + strncpy(buf, val, len); + if (handler) { + // the handler can choose to replace the value in val/len. Also its + // return value is passed back as the return value of get. + (*handler)(this, 0, buf, buf, len); + } + return 0; +} + +void bx_param_string_c::set(const char *buf) +{ + char *oldval = new char[maxsize]; + + if (options & RAW_BYTES) { + memcpy(oldval, val, maxsize); + memcpy(val, buf, maxsize); + } else { + strncpy(oldval, val, maxsize); + oldval[maxsize - 1] = 0; + strncpy(val, buf, maxsize); + val[maxsize - 1] = 0; + } + if (handler) { + // the handler can return a different char* to be copied into the value + buf = (*handler)(this, 1, oldval, buf, -1); + } + delete [] oldval; + if (dependent_list != NULL) update_dependents(); +} + +bx_bool bx_param_string_c::equals(const char *buf) +{ + if (options & RAW_BYTES) + return (memcmp(val, buf, maxsize) == 0); + else + return (strncmp(val, buf, maxsize) == 0); +} + +void bx_param_string_c::set_initial_val(const char *buf) +{ + if (options & RAW_BYTES) + memcpy(initial_val, buf, maxsize); + else + strncpy(initial_val, buf, maxsize); + set(initial_val); +} + +bx_shadow_data_c::bx_shadow_data_c(bx_param_c *parent, + const char *name, + Bit8u *ptr_to_data, + Bit32u data_size) + : bx_param_c(SIM->gen_param_id(), name, "") +{ + set_type(BXT_PARAM_DATA); + this->data_ptr = ptr_to_data; + this->data_size = data_size; + if (parent) { + BX_ASSERT(parent->get_type() == BXT_LIST); + this->parent = (bx_list_c *)parent; + this->parent->add(this); + } +} + +bx_list_c::bx_list_c(bx_param_c *parent, int maxsize) + : bx_param_c(SIM->gen_param_id(), "list", "") +{ + set_type(BXT_LIST); + this->size = 0; + this->maxsize = maxsize; + this->list = new bx_param_c* [maxsize]; + this->parent = NULL; + if (parent) { + BX_ASSERT(parent->get_type() == BXT_LIST); + this->parent = (bx_list_c *)parent; + this->parent->add(this); + } + init(""); +} + +bx_list_c::bx_list_c(bx_param_c *parent, const char *name, int maxsize) + : bx_param_c(SIM->gen_param_id(), name, "") +{ + set_type (BXT_LIST); + this->size = 0; + this->maxsize = maxsize; + this->list = new bx_param_c* [maxsize]; + this->parent = NULL; + if (parent) { + BX_ASSERT(parent->get_type() == BXT_LIST); + this->parent = (bx_list_c *)parent; + this->parent->add(this); + } + init(""); +} + +bx_list_c::bx_list_c(bx_param_c *parent, const char *name, const char *title, + int maxsize) + : bx_param_c(SIM->gen_param_id(), name, "") +{ + set_type (BXT_LIST); + this->size = 0; + this->maxsize = maxsize; + this->list = new bx_param_c* [maxsize]; + this->parent = NULL; + if (parent) { + BX_ASSERT(parent->get_type() == BXT_LIST); + this->parent = (bx_list_c *)parent; + this->parent->add(this); + } + init(title); +} + +bx_list_c::bx_list_c(bx_param_c *parent, const char *name, const char *title, bx_param_c **init_list) + : bx_param_c(SIM->gen_param_id(), name, "") +{ + set_type(BXT_LIST); + this->size = 0; + while (init_list[this->size] != NULL) + this->size++; + this->maxsize = this->size; + this->list = new bx_param_c* [maxsize]; + for (int i=0; isize; i++) + this->list[i] = init_list[i]; + this->parent = NULL; + if (parent) { + BX_ASSERT(parent->get_type() == BXT_LIST); + this->parent = (bx_list_c *)parent; + this->parent->add(this); + } + init(title); +} + +bx_list_c::~bx_list_c() +{ + if (list != NULL) { + for (int i=0; ititle = new bx_param_string_c(NULL, + "list_title", + "", "", + get_name(), 80); + if ((list_title != NULL) && (strlen(list_title) > 0)) { + this->title->set((char *)list_title); + } + this->options = 0; + this->choice = new bx_param_num_c(NULL, + "list_choice", "", "", 0, BX_MAX_BIT64S, 1); +} + +void bx_list_c::set_parent(bx_param_c *newparent) +{ + if (parent) { + // if this object already had a parent, the correct thing + // to do would be to remove this object from the parent's + // list of children. Deleting children is currently + // not supported. + BX_PANIC(("bx_list_c::set_parent: changing from one parent to another is not supported")); + } + if (newparent) { + BX_ASSERT(newparent->get_type() == BXT_LIST); + parent = (bx_list_c *)newparent; + parent->add(this); + } +} + +bx_list_c* bx_list_c::clone() +{ + bx_list_c *newlist = new bx_list_c(NULL, name, title->getptr(), maxsize); + for (int i=0; iadd(get(i)); + newlist->set_options(options); + return newlist; +} + +void bx_list_c::add(bx_param_c *param) +{ + if (size >= maxsize) { + BX_PANIC(("add param '%s' to bx_list_c '%s': list capacity exceeded", + param->get_name(), get_name())); + return; + } + list[size] = param; + size++; +} + +bx_param_c* bx_list_c::get(int index) +{ + BX_ASSERT(index >= 0 && index < size); + return list[index]; +} + +bx_param_c* bx_list_c::get_by_name(const char *name) +{ + int imax = get_size(); + for (int i=0; iget_name())) { + return p; + } + } + return NULL; +} + +void bx_list_c::reset() +{ + int imax = get_size(); + for (int i=0; ireset(); + } +} + +void bx_list_c::clear() +{ + int imax = get_size(); + for (int i=0; iget_parent() == this) { + delete param; + } + } + size = 0; +} + +void bx_list_c::remove(const char *name) +{ + int imax = get_size(); + int found = 0; + for (int i=0; iget_name())) { + if (p->get_parent() == this) { + delete p; + } + found = 1; + } + if (found) { + list[i] = list[i+1]; + } + } + if (found) { + size--; + } +} diff --git a/bochs/gui/paramtree.h b/bochs/gui/paramtree.h new file mode 100755 index 00000000..db310bad --- /dev/null +++ b/bochs/gui/paramtree.h @@ -0,0 +1,461 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2010 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#ifndef BX_PARAM_TREE_H +#define BX_PARAM_TREE_H + +//////////////////////////////////////////////////////////////////// +// parameter classes: bx_param_c and family +//////////////////////////////////////////////////////////////////// +// +// All variables that can be configured through the CI are declared as +// "parameters" or objects of type bx_param_*. There is a bx_param_* +// class for each type of data that the user would need to see and +// edit, e.g. integer, boolean, enum, string, filename, or list of +// other parameters. The purpose of the bx_param_* class, in addition +// to storing the parameter's value, is to hold the name, description, +// and constraints on the value. The bx_param_* class should hold +// everything that the CI would need to display the value and allow +// the user to modify it. For integer parameters, the minimum and +// maximum allowed value can be defined, and the base in which it +// should be displayed and interpreted. For enums, the +// bx_param_enum_c structure includes the list of values which the +// parameter can have. +// +// Also, some parameter classes support get/set callback functions to +// allow arbitrary code to be executed when the parameter is get/set. +// An example of where this is useful: if you disable the NE2K card, +// the set() handler for that parameter can tell the user interface +// that the NE2K's irq, I/O address, and mac address should be +// disabled (greyed out, hidden, or made inaccessible). The get/set +// methods can also check if the set() value is acceptable using +// whatever means and override it. +// +// The parameter concept is similar to the use of parameters in JavaBeans. + +class bx_object_c; +class bx_param_c; +class bx_param_num_c; +class bx_param_enum_c; +class bx_param_bool_c; +class bx_param_string_c; +class bx_param_filename_c; +class bx_list_c; + +class BOCHSAPI bx_object_c { +private: + Bit32u id; + bx_objtype type; +protected: + void set_type(bx_objtype _type) { type = _type; } +public: + bx_object_c(Bit32u _id): id(_id), type(BXT_OBJECT) {} + virtual ~bx_object_c() {} + Bit32u get_id() const { return id; } + Bit8u get_type() const { return type; } +}; + +#define BASE_DEC 10 +#define BASE_HEX 16 + +class BOCHSAPI bx_param_c : public bx_object_c { + BOCHSAPI_CYGONLY static const char *default_text_format; +protected: + bx_list_c *parent; + char *name; + char *description; + char *label; // label string for text menus and gui dialogs + const char *text_format; // printf format string. %d for ints, %s for strings, etc. + const char *long_text_format; // printf format string. %d for ints, %s for strings, etc. + char *ask_format; // format string for asking for a new value + char *group_name; // name of the group the param belongs to + int runtime_param; + int enabled; + Bit32u options; + // The dependent_list is initialized to NULL. If dependent_list is modified + // to point to a bx_list_c of other parameters, the set() method of the + // parameter type will enable those parameters when the enable condition is + // true, and disable them it is false. + bx_list_c *dependent_list; + void *device; +public: + bx_param_c(Bit32u id, const char *name, const char *description); + bx_param_c(Bit32u id, const char *name, const char *label, const char *description); + virtual ~bx_param_c(); + bx_param_c *get_parent() { return (bx_param_c *) parent; } + int get_param_path(char *path_out, int maxlen); + void set_format(const char *format) {text_format = format;} + const char *get_format() const {return text_format;} + void set_long_format(const char *format) {long_text_format = format;} + const char *get_long_format() const {return long_text_format;} + void set_ask_format(const char *format); + const char *get_ask_format() const {return ask_format;} + void set_label(const char *text); + void set_description(const char *text); + const char *get_label() const {return label;} + void set_runtime_param(int val) { runtime_param = val; } + int get_runtime_param() { return runtime_param; } + void set_group(const char *group); + const char *get_group() const {return group_name;} + const char *get_name() const { return name; } + const char *get_description() const { return description; } + int get_enabled() const { return enabled; } + virtual void set_enabled(int enabled) { this->enabled = enabled; } + virtual void reset() {} + int getint() const {return -1;} + static const char* set_default_format(const char *f); + static const char *get_default_format() { return default_text_format; } + bx_list_c *get_dependent_list() { return dependent_list; } + void set_options(Bit32u options) { this->options = options; } + Bit32u get_options() const { return options; } + void set_device_param(void *dev) { device = dev; } + void *get_device_param() { return device; } +#if BX_USE_TEXTCONFIG + virtual void text_print(FILE *fp) {} + virtual int text_ask(FILE *fpin, FILE *fpout) {return -1;} +#endif +}; + +typedef Bit64s (*param_event_handler)(class bx_param_c *, int set, Bit64s val); +typedef Bit64s (*param_save_handler)(void *devptr, class bx_param_c *); +typedef void (*param_restore_handler)(void *devptr, class bx_param_c *, Bit64s val); +typedef int (*param_enable_handler)(class bx_param_c *, int en); + +class BOCHSAPI bx_param_num_c : public bx_param_c { + BOCHSAPI_CYGONLY static Bit32u default_base; + void update_dependents(); +protected: + Bit64s min, max, initial_val; + union _uval_ { + Bit64s number; // used by bx_param_num_c + Bit64s *p64bit; // used by bx_shadow_num_c + Bit32s *p32bit; // used by bx_shadow_num_c + Bit16s *p16bit; // used by bx_shadow_num_c + Bit8s *p8bit; // used by bx_shadow_num_c + bx_bool *pbool; // used by bx_shadow_bool_c + } val; + param_event_handler handler; + void *sr_devptr; + param_save_handler save_handler; + param_restore_handler restore_handler; + param_enable_handler enable_handler; + int base; + bx_bool is_shadow; +public: + enum { + // When a bx_param_num_c is displayed in dialog, USE_SPIN_CONTROL controls + // whether a spin control should be used instead of a simple text control. + USE_SPIN_CONTROL = (1<<0) + } bx_numopt_bits; + bx_param_num_c(bx_param_c *parent, + const char *name, + const char *label, + const char *description, + Bit64s min, Bit64s max, Bit64s initial_val, + bx_bool is_shadow = 0); + virtual void reset() { val.number = initial_val; } + void set_handler(param_event_handler handler); + void set_sr_handlers(void *devptr, param_save_handler save, param_restore_handler restore); + void set_enable_handler(param_enable_handler handler) { enable_handler = handler; } + void set_dependent_list(bx_list_c *l); + virtual void set_enabled(int enabled); + virtual Bit32s get() { return (Bit32s) get64(); } + virtual Bit64s get64(); + virtual void set(Bit64s val); + void set_base(int base) { this->base = base; } + void set_initial_val(Bit64s initial_val); + int get_base() const { return base; } + void set_range(Bit64u min, Bit64u max); + Bit64s get_min() { return min; } + Bit64s get_max() { return max; } + static Bit32u set_default_base(Bit32u val); + static Bit32u get_default_base() { return default_base; } +#if BX_USE_TEXTCONFIG + virtual void text_print(FILE *fp); + virtual int text_ask(FILE *fpin, FILE *fpout); +#endif +}; + +// a bx_shadow_num_c is like a bx_param_num_c except that it doesn't +// store the actual value with its data. Instead, it uses val.p32bit +// to keep a pointer to the actual data. This is used to register +// existing variables as parameters, without having to access it via +// set/get methods. +class BOCHSAPI bx_shadow_num_c : public bx_param_num_c { + Bit8u varsize; // must be 64, 32, 16, or 8 + Bit8u lowbit; // range of bits associated with this param + Bit64u mask; // mask is ANDed with value before it is returned from get +public: + bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit64s *ptr_to_real_val, + int base = BASE_DEC, + Bit8u highbit = 63, + Bit8u lowbit = 0); + bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit64u *ptr_to_real_val, + int base = BASE_DEC, + Bit8u highbit = 63, + Bit8u lowbit = 0); + bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit32s *ptr_to_real_val, + int base = BASE_DEC, + Bit8u highbit = 31, + Bit8u lowbit = 0); + bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit32u *ptr_to_real_val, + int base = BASE_DEC, + Bit8u highbit = 31, + Bit8u lowbit = 0); + bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit16s *ptr_to_real_val, + int base = BASE_DEC, + Bit8u highbit = 15, + Bit8u lowbit = 0); + bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit16u *ptr_to_real_val, + int base = BASE_DEC, + Bit8u highbit = 15, + Bit8u lowbit = 0); + bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit8s *ptr_to_real_val, + int base = BASE_DEC, + Bit8u highbit = 7, + Bit8u lowbit = 0); + bx_shadow_num_c(bx_param_c *parent, + const char *name, + Bit8u *ptr_to_real_val, + int base = BASE_DEC, + Bit8u highbit = 7, + Bit8u lowbit = 0); + virtual Bit64s get64(); + virtual void set(Bit64s val); + virtual void reset(); +}; + +class BOCHSAPI bx_param_bool_c : public bx_param_num_c { + // many boolean variables are used to enable/disable modules. In the + // user interface, the enable variable should enable/disable all the + // other parameters associated with that module. +public: + bx_param_bool_c(bx_param_c *parent, + const char *name, + const char *label, + const char *description, + Bit64s initial_val, + bx_bool is_shadow = 0); +#if BX_USE_TEXTCONFIG + virtual void text_print(FILE *fp); + virtual int text_ask(FILE *fpin, FILE *fpout); +#endif +}; + +// a bx_shadow_bool_c is a shadow param based on bx_param_bool_c. +class BOCHSAPI bx_shadow_bool_c : public bx_param_bool_c { + // each bit of a bitfield can be a separate value. bitnum tells which + // bit is used. get/set will only modify that bit. + Bit8u bitnum; +public: + bx_shadow_bool_c(bx_param_c *parent, + const char *name, + const char *label, + bx_bool *ptr_to_real_val, + Bit8u bitnum = 0); + bx_shadow_bool_c(bx_param_c *parent, + const char *name, + bx_bool *ptr_to_real_val, + Bit8u bitnum = 0); + virtual Bit64s get64(); + virtual void set(Bit64s val); +}; + + +class BOCHSAPI bx_param_enum_c : public bx_param_num_c { + const char **choices; + Bit64u *deps_bitmap; + void update_dependents(); +public: + bx_param_enum_c(bx_param_c *parent, + const char *name, + const char *label, + const char *description, + const char **choices, + Bit64s initial_val, + Bit64s value_base = 0); + virtual ~bx_param_enum_c(); + const char *get_choice(int n) { return choices[n]; } + const char *get_selected() { return choices[val.number - min]; } + int find_by_name(const char *string); + virtual void set(Bit64s val); + bx_bool set_by_name(const char *string); + void set_dependent_list(bx_list_c *l, bx_bool enable_all); + void set_dependent_bitmap(Bit64s value, Bit64u bitmap); + Bit64u get_dependent_bitmap(Bit64s value); + virtual void set_enabled(int enabled); +#if BX_USE_TEXTCONFIG + virtual void text_print(FILE *fp); + virtual int text_ask(FILE *fpin, FILE *fpout); +#endif +}; + +typedef const char* (*param_string_event_handler)(class bx_param_string_c *, + int set, const char *oldval, const char *newval, int maxlen); + +class BOCHSAPI bx_param_string_c : public bx_param_c { + int maxsize; + char *val, *initial_val; + param_string_event_handler handler; + param_enable_handler enable_handler; + char separator; + void update_dependents(); +public: + enum { + RAW_BYTES = 1, // use binary text editor, like MAC addr + IS_FILENAME = 2, // 1=yes it's a filename, 0=not a filename. + // Some guis have a file browser. This + // bit suggests that they use it. + SAVE_FILE_DIALOG = 4, // Use save dialog opposed to open file dialog + SELECT_FOLDER_DLG = 8 // Use folder selection dialog + } bx_string_opt_bits; + bx_param_string_c(bx_param_c *parent, + const char *name, + const char *label, + const char *description, + const char *initial_val, + int maxsize=-1); + virtual ~bx_param_string_c(); + virtual void reset(); + void set_handler(param_string_event_handler handler); + void set_enable_handler(param_enable_handler handler); + virtual void set_enabled(int enabled); + void set_dependent_list(bx_list_c *l); + Bit32s get(char *buf, int len); + char *getptr() {return val; } + void set(const char *buf); + bx_bool equals(const char *buf); + void set_separator(char sep) {separator = sep; } + char get_separator() const {return separator; } + int get_maxsize() const {return maxsize; } + void set_initial_val(const char *buf); +#if BX_USE_TEXTCONFIG + virtual void text_print(FILE *fp); + virtual int text_ask(FILE *fpin, FILE *fpout); +#endif +}; + +// Declare a filename class. It is identical to a string, except that +// it initializes the options differently. This is just a shortcut +// for declaring a string param and setting the options with IS_FILENAME. +class BOCHSAPI bx_param_filename_c : public bx_param_string_c { +const char *ext; +public: + bx_param_filename_c(bx_param_c *parent, + const char *name, + const char *label, + const char *description, + const char *initial_val, + int maxsize=-1); + const char *get_extension() {return ext;} + void set_extension(const char *ext) {this->ext = ext;} +}; + +class BOCHSAPI bx_shadow_data_c : public bx_param_c { + Bit32u data_size; + Bit8u *data_ptr; +public: + bx_shadow_data_c(bx_param_c *parent, + const char *name, + Bit8u *ptr_to_data, + Bit32u data_size); + Bit8u *getptr() {return data_ptr;} + Bit32u get_size() const {return data_size;} +}; + +#define BX_DEFAULT_LIST_SIZE 6 + +class BOCHSAPI bx_list_c : public bx_param_c { +protected: + // just a list of bx_param_c objects. size tells current number of + // objects in the list, and maxsize tells how many list items are + // allocated in the constructor. + bx_param_c **list; + int size, maxsize; + // for a menu, the value of choice before the call to "ask" is default. + // After ask, choice holds the value that the user chose. Choice defaults + // to 1 in the constructor. + bx_param_num_c *choice; + // title of the menu or series + bx_param_string_c *title; + void init(const char *list_title); +public: + enum { + // When a bx_list_c is displayed as a menu, SHOW_PARENT controls whether or + // not the menu shows a "Return to parent menu" choice or not. + SHOW_PARENT = (1<<0), + // Some lists are best displayed shown as menus, others as a series of + // related questions. This bit suggests to the CI that the series of + // questions format is preferred. + SERIES_ASK = (1<<1), + // When a bx_list_c is displayed in a dialog, USE_TAB_WINDOW suggests + // to the CI that each item in the list should be shown as a separate + // tab. This would be most appropriate when each item is another list + // of parameters. + USE_TAB_WINDOW = (1<<2), + // When a bx_list_c is displayed in a dialog, the list name is used as the + // label of the group box if USE_BOX_TITLE is set. This is only necessary if + // more than one list appears in a dialog box. + USE_BOX_TITLE = (1<<3), + // When a bx_list_c is displayed as a menu, SHOW_GROUP_NAME controls whether + // or not the name of group the item belongs to is added to the name of the + // item (used in the runtime menu). + SHOW_GROUP_NAME = (1<<4) + } bx_listopt_bits; + bx_list_c(bx_param_c *parent, int maxsize); + bx_list_c(bx_param_c *parent, const char *name, int maxsize); + bx_list_c(bx_param_c *parent, const char *name, const char *title, int maxsize = BX_DEFAULT_LIST_SIZE); + bx_list_c(bx_param_c *parent, const char *name, const char *title, bx_param_c **init_list); + virtual ~bx_list_c(); + bx_list_c *clone(); + void add(bx_param_c *param); + bx_param_c *get(int index); + bx_param_c *get_by_name(const char *name); + int get_size() const { return size; } + bx_param_num_c *get_choice() { return choice; } + bx_param_string_c *get_title() { return title; } + void set_parent(bx_param_c *newparent); + bx_param_c *get_parent() { return parent; } + virtual void reset(); + virtual void clear(); + virtual void remove(const char *name); +#if BX_USE_TEXTCONFIG + virtual void text_print(FILE *); + virtual int text_ask(FILE *fpin, FILE *fpout); +#endif +}; + +#endif diff --git a/bochs/gui/rfb.cc b/bochs/gui/rfb.cc new file mode 100644 index 00000000..54df5eb8 --- /dev/null +++ b/bochs/gui/rfb.cc @@ -0,0 +1,1702 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2000 Psyon.Org! +// +// Donald Becker +// http://www.psyon.org +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// RFB still to do : +// - properly handle SetPixelFormat, including big/little-endian flag +// - depth > 8bpp support +// - optional compression support + + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "param_names.h" +#include "iodev.h" +#include "keymap.h" +#if BX_WITH_RFB + +#include "icon_bochs.h" +#include "font/vga.bitmap.h" +#if BX_WITH_SDL && !BX_PLUGINS +extern unsigned char sdl_font8x8[256][8]; +#else +#include "sdl.h" // 8x8 font for status text +#endif + +class bx_rfb_gui_c : public bx_gui_c { +public: + bx_rfb_gui_c (void) {} + DECLARE_GUI_VIRTUAL_METHODS() + DECLARE_GUI_NEW_VIRTUAL_METHODS() + void get_capabilities(Bit16u *xres, Bit16u *yres, Bit16u *bpp); + void statusbar_setitem(int element, bx_bool active, bx_bool w=0); +#if BX_SHOW_IPS + void show_ips(Bit32u ips_count); +#endif +}; + +void rfbSetStatusText(int element, const char *text, bx_bool active, bx_bool w=0); +static Bit32u convertStringToRfbKey(const char *string); + +// declare one instance of the gui object and call macro to insert the +// plugin code +static bx_rfb_gui_c *theGui = NULL; +IMPLEMENT_GUI_PLUGIN_CODE(rfb) + +#define LOG_THIS theGui-> + +#include "rfb.h" +#include "rfbkeys.h" + +#ifdef WIN32 + +#include +#include + +#else + +#include +#include +#include +#include +#ifndef __QNXNTO__ +#include +#else +#include +#endif +#include + +typedef int SOCKET; +#ifndef INVALID_SOCKET +#define INVALID_SOCKET -1 +#endif + +#endif + +static bool keep_alive; +static bool client_connected; +static bool desktop_resizable; + +#define BX_RFB_PORT_MIN 5900 +#define BX_RFB_PORT_MAX 5949 +static unsigned short rfbPort; + +// Headerbar stuff +unsigned rfbBitmapCount = 0; +static struct { + char *bmap; + unsigned xdim; + unsigned ydim; +} rfbBitmaps[BX_MAX_PIXMAPS]; + +static unsigned rfbHeaderbarBitmapCount = 0; +struct _rfbHeaderbarBitmaps { + unsigned int index; + unsigned int xorigin; + unsigned int yorigin; + unsigned int alignment; + void (*f)(void); +} rfbHeaderbarBitmaps[BX_MAX_HEADERBAR_ENTRIES]; + +//Keyboard stuff +#define KEYBOARD true +#define MOUSE false +#define MAX_KEY_EVENTS 512 +static struct { + bool type; + int key; + int down; + int x; + int y; +} rfbKeyboardEvent[MAX_KEY_EVENTS]; +static unsigned long rfbKeyboardEvents = 0; +static bool bKeyboardInUse = false; + +// Misc Stuff +static struct { + unsigned int x; + unsigned int y; + unsigned int width; + unsigned int height; + bool updated; +} rfbUpdateRegion; + +#define BX_RFB_MAX_XDIM 1024 +#define BX_RFB_MAX_YDIM 768 +#define BX_RFB_DEF_XDIM 720 +#define BX_RFB_DEF_YDIM 480 + +static char *rfbScreen; +static char rfbPalette[256]; + +static unsigned rfbWindowX, rfbWindowY; +static unsigned rfbDimensionX, rfbDimensionY; +static long rfbHeaderbarY; +static long rfbTileX = 0; +static long rfbTileY = 0; +static unsigned long rfbCursorX = 0; +static unsigned long rfbCursorY = 0; +static unsigned long rfbOriginLeft = 0; +static unsigned long rfbOriginRight = 0; +static unsigned rfbStatusbarY = 18; +static unsigned rfbStatusitemPos[12] = { + 0, 170, 210, 250, 290, 330, 370, 410, 450, 490, 530, 570 +}; +static bx_bool rfbStatusitemActive[12]; + +static unsigned int text_rows=25, text_cols=80; +static unsigned int font_height=16, font_width=8; + +//static unsigned long ServerThread = 0; +//static unsigned long ServerThreadID = 0; + +static SOCKET sGlobal; + +static Bit32u clientEncodingsCount = 0; +static Bit32u *clientEncodings = NULL; + +void CDECL ServerThreadInit(void *indata); +void HandleRfbClient(SOCKET sClient); +int ReadExact(int sock, char *buf, int len); +int WriteExact(int sock, char *buf, int len); +void DrawBitmap(int x, int y, int width, int height, char *bmap, char color, bool update_client); +void DrawChar(int x, int y, int width, int height, int fonty, char *bmap, char color, bx_bool gfxchar); +void UpdateScreen(unsigned char *newBits, int x, int y, int width, int height, bool update_client); +void SendUpdate(int x, int y, int width, int height, Bit32u encoding); +void StartThread(); +void rfbKeyPressed(Bit32u key, int press_release); +void rfbMouseMove(int x, int y, int bmask); +void DrawColorPalette(); + +static const rfbPixelFormat BGR233Format = { + 8, 8, 1, 1, 7, 7, 3, 0, 3, 6 +}; + +// VNCViewer code to be replaced +#define PF_EQ(x,y) ((x.bitsPerPixel == y.bitsPerPixel) && (x.depth == y.depth) && (x.trueColourFlag == y.trueColourFlag) && ((x.bigEndianFlag == y.bigEndianFlag) || (x.bitsPerPixel == 8)) && (!x.trueColourFlag || ((x.redMax == y.redMax) && (x.greenMax == y.greenMax) && (x.blueMax == y.blueMax) && (x.redShift == y.redShift) && (x.greenShift == y.greenShift) && (x.blueShift == y.blueShift)))) + + +// ::SPECIFIC_INIT() +// +// Called from gui.cc, once upon program startup, to allow for the +// specific GUI code (X11, BeOS, ...) to be initialized. +// +// argc, argv: not used right now, but the intention is to pass native GUI +// specific options from the command line. (X11 options, BeOS options,...) +// +// tilewidth, tileheight: for optimization, graphics_tile_update() passes +// only updated regions of the screen to the gui code to be redrawn. +// These define the dimensions of a region (tile). +// headerbar_y: A headerbar (toolbar) is display on the top of the +// VGA window, showing floppy status, and other information. It +// always assumes the width of the current VGA mode width, but +// it's height is defined by this parameter. + +void bx_rfb_gui_c::specific_init(int argc, char **argv, unsigned tilewidth, unsigned tileheight, unsigned headerbar_y) +{ + unsigned char fc, vc; + int i, timeout = 30; + + put("RFB"); + UNUSED(bochs_icon_bits); + + rfbHeaderbarY = headerbar_y; + rfbDimensionX = BX_RFB_DEF_XDIM; + rfbDimensionY = BX_RFB_DEF_YDIM; + rfbWindowX = rfbDimensionX; + rfbWindowY = rfbDimensionY + rfbHeaderbarY + rfbStatusbarY; + rfbTileX = tilewidth; + rfbTileY = tileheight; + + for(i = 0; i < 256; i++) { + for(int j = 0; j < 16; j++) { + vc = bx_vgafont[i].data[j]; + fc = 0; + for (int b = 0; b < 8; b++) { + fc |= (vc & 0x01) << (7 - b); + vc >>= 1; + } + vga_charmap[i*32+j] = fc; + } + } + + rfbScreen = (char *)malloc(rfbWindowX * rfbWindowY); + memset(&rfbPalette, 0, sizeof(rfbPalette)); + rfbPalette[7] = (char)0xAD; + rfbPalette[63] = (char)0xFF; + + rfbUpdateRegion.x = rfbWindowX; + rfbUpdateRegion.y = rfbWindowY; + rfbUpdateRegion.width = 0; + rfbUpdateRegion.height = 0; + rfbUpdateRegion.updated = false; + + clientEncodingsCount=0; + clientEncodings=NULL; + + keep_alive = true; + client_connected = false; + desktop_resizable = false; + StartThread(); + +#ifdef WIN32 + Sleep(1000); + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL); +#endif + if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) { + BX_ERROR(("private_colormap option ignored.")); + } + + // load keymap for sdl + if (SIM->get_param_bool(BXPN_KBD_USEMAPPING)->get()) { + bx_keymap.loadKeymap(convertStringToRfbKey); + } + + // parse rfb specific options + if (argc > 1) { + for (i = 1; i < argc; i++) { + if (!strncmp(argv[i], "timeout=", 8)) { + timeout = atoi(&argv[i][8]); + } else { + BX_PANIC(("Unknown rfb option '%s'", argv[i])); + } + } + } + + // the ask menu doesn't work on the client side + io->set_log_action(LOGLEV_PANIC, ACT_FATAL); + + while ((!client_connected) && (timeout--)) { +#ifdef WIN32 + Sleep(1000); +#else + sleep(1); +#endif + } + if (timeout < 0) BX_PANIC(("timeout! no client present")); + + new_gfx_api = 1; + dialog_caps = 0; +} + +void rfbSetStatusText(int element, const char *text, bx_bool active, bx_bool w) +{ + char *newBits; + unsigned xleft, xsize, color, i, len; + + rfbStatusitemActive[element] = active; + xleft = rfbStatusitemPos[element] + 2; + xsize = rfbStatusitemPos[element+1] - xleft - 1; + newBits = (char *)malloc(((xsize / 8) + 1) * (rfbStatusbarY - 2)); + memset(newBits, 0, ((xsize / 8) + 1) * (rfbStatusbarY - 2)); + for (i=0; i<(rfbStatusbarY - 2); i++) { + newBits[((xsize / 8) + 1) * i] = 0; + } + if (element > 0) { + color = active?(w?0xc0:0xa0):0xf7; + } else { + color = 0xf0; + } + DrawBitmap(xleft, rfbWindowY - rfbStatusbarY + 1, xsize, rfbStatusbarY - 2, newBits, color, false); + free(newBits); + len = ((element > 0) && (strlen(text) > 4)) ? 4 : strlen(text); + for (i = 0; i < len; i++) { + DrawChar(xleft + i * 8 + 2, rfbWindowY - rfbStatusbarY + 5, 8, 8, 0, + (char *)&sdl_font8x8[(unsigned)text[i]][0], color, 0); + } + if (xleft < rfbUpdateRegion.x) rfbUpdateRegion.x = xleft; + if ((rfbWindowY - rfbStatusbarY + 1) < rfbUpdateRegion.y) rfbUpdateRegion.y = rfbWindowY - rfbStatusbarY + 1; + if (((xleft + xsize) - rfbUpdateRegion.x) > rfbUpdateRegion.width) rfbUpdateRegion.width = ((xleft + xsize) - rfbUpdateRegion.x); + if (((rfbWindowY - 2) - rfbUpdateRegion.y) > rfbUpdateRegion.height) rfbUpdateRegion.height = ((rfbWindowY - 2) - rfbUpdateRegion.y); + rfbUpdateRegion.updated = true; +} + +void bx_rfb_gui_c::statusbar_setitem(int element, bx_bool active, bx_bool w) +{ + if (element < 0) { + for (unsigned i = 0; i < statusitem_count; i++) { + rfbSetStatusText(i+1, statusitem_text[i], active, w); + } + } else if ((unsigned)element < statusitem_count) { + rfbSetStatusText(element+1, statusitem_text[element], active, w); + } +} + +#ifdef WIN32 +bool InitWinsock() +{ + WSADATA wsaData; + if(WSAStartup(MAKEWORD(1,1), &wsaData) != 0) return false; + return true; +} +#endif + +#ifdef WIN32 +bool StopWinsock() +{ + WSACleanup(); + return true; +} +#endif + +void CDECL ServerThreadInit(void *indata) +{ + SOCKET sServer; + SOCKET sClient; + struct sockaddr_in sai; + unsigned int sai_size; + int port_ok = 0; + int one=1; + +#ifdef WIN32 + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_IDLE); + if(!InitWinsock()) { + BX_PANIC(("could not initialize winsock.")); + goto end_of_thread; + } +#endif + + sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if(sServer == -1) { + BX_PANIC(("could not create socket.")); + goto end_of_thread; + } + if (setsockopt(sServer, SOL_SOCKET, SO_REUSEADDR, (const char *)&one, sizeof(int)) == -1) { + BX_PANIC(("could not set socket option.")); + goto end_of_thread; + } + + for (rfbPort = BX_RFB_PORT_MIN; rfbPort <= BX_RFB_PORT_MAX; rfbPort++) { + sai.sin_addr.s_addr = INADDR_ANY; + sai.sin_family = AF_INET; + sai.sin_port = htons(rfbPort); + BX_INFO (("Trying port %d", rfbPort)); + if(bind(sServer, (struct sockaddr *)&sai, sizeof(sai)) == -1) { + BX_INFO(("Could not bind socket.")); + continue; + } + if(listen(sServer, SOMAXCONN) == -1) { + BX_INFO(("Could not listen on socket.")); + continue; + } + // success + port_ok = 1; + break; + } + if (!port_ok) { + BX_PANIC (("RFB could not bind any port between %d and %d", + BX_RFB_PORT_MIN, + BX_RFB_PORT_MAX)); + goto end_of_thread; + } + BX_INFO (("listening for connections on port %i", rfbPort)); + sai_size = sizeof(sai); + while(keep_alive) { + sClient = accept(sServer, (struct sockaddr *)&sai, (socklen_t*)&sai_size); + if(sClient != INVALID_SOCKET) { + HandleRfbClient(sClient); + sGlobal = INVALID_SOCKET; + close(sClient); + } else { + close(sClient); + } + } + +end_of_thread: +#ifdef WIN32 + StopWinsock(); +#endif + return; +} + +void HandleRfbClient(SOCKET sClient) +{ + char rfbName[] = "Bochs-RFB"; + rfbProtocolVersionMessage pv; + int one = 1; + U32 auth; + rfbClientInitMessage cim; + rfbServerInitMessage sim; + bx_bool mouse_toggle = 0; + + client_connected = true; + setsockopt(sClient, IPPROTO_TCP, TCP_NODELAY, (const char *)&one, sizeof(one)); + BX_INFO(("accepted client connection.")); + snprintf(pv, rfbProtocolVersionMessageSize, + rfbProtocolVersionFormat, + rfbServerProtocolMajorVersion, + rfbServerProtocolMinorVersion); + + if(WriteExact(sClient, pv, rfbProtocolVersionMessageSize) < 0) { + BX_ERROR(("could not send protocol version.")); + return; + } + if(ReadExact(sClient, pv, rfbProtocolVersionMessageSize) < 0) { + BX_ERROR(("could not receive client protocol version.")); + return; + } + pv[rfbProtocolVersionMessageSize-1]=0; // Drop last character + BX_INFO(("Client protocol version is '%s'", pv)); + // FIXME should check for version number + + auth = htonl(rfbSecurityNone); + + if(WriteExact(sClient, (char *)&auth, sizeof(auth)) < 0) { + BX_ERROR(("could not send authorization method.")); + return; + } + + if(ReadExact(sClient, (char *)&cim, rfbClientInitMessageSize) < 0) { + BX_ERROR(("could not receive client initialization message.")); + return; + } + + sim.framebufferWidth = htons((short)rfbWindowX); + sim.framebufferHeight = htons((short)rfbWindowY); + sim.serverPixelFormat = BGR233Format; + sim.serverPixelFormat.redMax = htons(sim.serverPixelFormat.redMax); + sim.serverPixelFormat.greenMax = htons(sim.serverPixelFormat.greenMax); + sim.serverPixelFormat.blueMax = htons(sim.serverPixelFormat.blueMax); + sim.nameLength = strlen(rfbName); + sim.nameLength = htonl(sim.nameLength); + if(WriteExact(sClient, (char *)&sim, rfbServerInitMessageSize) < 0) { + BX_ERROR(("could send server initialization message.")); + return; + } + if(WriteExact(sClient, rfbName, strlen(rfbName)) < 0) { + BX_ERROR (("could not send server name.")); + return; + } + + sGlobal = sClient; + while(keep_alive) { + U8 msgType; + int n; + + if((n = recv(sClient, (char *)&msgType, 1, MSG_PEEK)) <= 0) { + if(n == 0) { + BX_ERROR(("client closed connection.")); + } else { + BX_ERROR(("error receiving data.")); + } + return; + } + + switch(msgType) { + case rfbSetPixelFormat: + { + rfbSetPixelFormatMessage spf; + ReadExact(sClient, (char *)&spf, sizeof(rfbSetPixelFormatMessage)); + + spf.pixelFormat.bitsPerPixel = spf.pixelFormat.bitsPerPixel; + spf.pixelFormat.depth = spf.pixelFormat.depth; + spf.pixelFormat.trueColourFlag = (spf.pixelFormat.trueColourFlag ? 1 : 0); + spf.pixelFormat.bigEndianFlag = (spf.pixelFormat.bigEndianFlag ? 1 : 0); + spf.pixelFormat.redMax = ntohs(spf.pixelFormat.redMax); + spf.pixelFormat.greenMax = ntohs(spf.pixelFormat.greenMax); + spf.pixelFormat.blueMax = ntohs(spf.pixelFormat.blueMax); + spf.pixelFormat.redShift = spf.pixelFormat.redShift; + spf.pixelFormat.greenShift = spf.pixelFormat.greenShift; + spf.pixelFormat.blueShift = spf.pixelFormat.blueShift; + + if (!PF_EQ(spf.pixelFormat, BGR233Format)) { + BX_ERROR(("client has wrong pixel format (%d %d %d %d %d %d %d %d %d)", + spf.pixelFormat.bitsPerPixel,spf.pixelFormat.depth,spf.pixelFormat.trueColourFlag, + spf.pixelFormat.bigEndianFlag,spf.pixelFormat.redMax,spf.pixelFormat.greenMax, + spf.pixelFormat.blueMax,spf.pixelFormat.redShift,spf.pixelFormat.blueShift)); + //return; + } + break; + } + case rfbFixColourMapEntries: + { + rfbFixColourMapEntriesMessage fcme; + ReadExact(sClient, (char *)&fcme, sizeof(rfbFixColourMapEntriesMessage)); + break; + } + case rfbSetEncodings: + { + rfbSetEncodingsMessage se; + Bit32u i; + U32 enc; + + // free previously registered encodings + if (clientEncodings != NULL) { + delete [] clientEncodings; + clientEncodingsCount = 0; + } + + ReadExact(sClient, (char *)&se, sizeof(rfbSetEncodingsMessage)); + + // Alloc new clientEncodings + clientEncodingsCount = ntohs(se.numberOfEncodings); + clientEncodings = new Bit32u[clientEncodingsCount]; + + for(i = 0; i < clientEncodingsCount; i++) { + if((n = ReadExact(sClient, (char *)&enc, sizeof(U32))) <= 0) { + if(n == 0) { + BX_ERROR(("client closed connection.")); + } else { + BX_ERROR(("error receiving data.")); + } + return; + } + clientEncodings[i]=ntohl(enc); + } + + // print supported encodings + BX_INFO(("rfbSetEncodings : client supported encodings:")); + for (i = 0; i < clientEncodingsCount; i++) { + Bit32u j; + bx_bool found = 0; + for (j=0; j < rfbEncodingsCount; j ++) { + if (clientEncodings[i] == rfbEncodings[j].id) { + BX_INFO(("%08x %s", rfbEncodings[j].id, rfbEncodings[j].name)); + found=1; + if (clientEncodings[i] == rfbEncodingDesktopSize) { + desktop_resizable = true; + } + break; + } + } + if (!found) BX_INFO(("%08x Unknown", clientEncodings[i])); + } + break; + } + case rfbFramebufferUpdateRequest: + { + rfbFramebufferUpdateRequestMessage fur; + + ReadExact(sClient, (char *)&fur, sizeof(rfbFramebufferUpdateRequestMessage)); + if(!fur.incremental) { + rfbUpdateRegion.x = 0; + rfbUpdateRegion.y = 0; + rfbUpdateRegion.width = rfbWindowX; + rfbUpdateRegion.height = rfbWindowY; + rfbUpdateRegion.updated = true; + } //else { + // if(fur.x < rfbUpdateRegion.x) rfbUpdateRegion.x = fur.x; + // if(fur.y < rfbUpdateRegion.x) rfbUpdateRegion.y = fur.y; + // if(((fur.x + fur.w) - rfbUpdateRegion.x) > rfbUpdateRegion.width) rfbUpdateRegion.width = ((fur.x + fur.w) - rfbUpdateRegion.x); + // if(((fur.y + fur.h) - rfbUpdateRegion.y) > rfbUpdateRegion.height) rfbUpdateRegion.height = ((fur.y + fur.h) - rfbUpdateRegion.y); + //} + //rfbUpdateRegion.updated = true; + break; + } + case rfbKeyEvent: + { + rfbKeyEventMessage ke; + ReadExact(sClient, (char *)&ke, sizeof(rfbKeyEventMessage)); + ke.key = ntohl(ke.key); + while(bKeyboardInUse); + + if ((ke.key == XK_Control_L) || (ke.key == XK_Control_R)) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_CTRL, ke.downFlag); + } else if (ke.key == XK_Alt_L) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_ALT, ke.downFlag); + } else if (ke.key == XK_F10) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_F10, ke.downFlag); + } else if (ke.key == XK_F12) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_F12, ke.downFlag); + } + if (mouse_toggle) { + bx_gui->toggle_mouse_enable(); + } else { + bKeyboardInUse = true; + if (rfbKeyboardEvents >= MAX_KEY_EVENTS) break; + rfbKeyboardEvent[rfbKeyboardEvents].type = KEYBOARD; + rfbKeyboardEvent[rfbKeyboardEvents].key = ke.key; + rfbKeyboardEvent[rfbKeyboardEvents].down = ke.downFlag; + rfbKeyboardEvents++; + bKeyboardInUse = false; + } + break; + } + case rfbPointerEvent: + { + rfbPointerEventMessage pe; + ReadExact(sClient, (char *)&pe, sizeof(rfbPointerEventMessage)); + while(bKeyboardInUse); + + if (bx_gui->mouse_toggle_check(BX_MT_MBUTTON, (pe.buttonMask & 0x02) > 0)) { + bx_gui->toggle_mouse_enable(); + } else { + bKeyboardInUse = true; + if (rfbKeyboardEvents >= MAX_KEY_EVENTS) break; + rfbKeyboardEvent[rfbKeyboardEvents].type = MOUSE; + rfbKeyboardEvent[rfbKeyboardEvents].x = ntohs(pe.xPosition); + rfbKeyboardEvent[rfbKeyboardEvents].y = ntohs(pe.yPosition); + rfbKeyboardEvent[rfbKeyboardEvents].down = (pe.buttonMask & 0x01) | + ((pe.buttonMask>>1) & 0x02) | + ((pe.buttonMask<<1) & 0x04); + rfbKeyboardEvents++; + bKeyboardInUse = false; + } + break; + } + case rfbClientCutText: + { + rfbClientCutTextMessage cct; + ReadExact(sClient, (char *)&cct, sizeof(rfbClientCutTextMessage)); + break; + } + } + } +} +// ::HANDLE_EVENTS() +// +// Called periodically (vga_update_interval in .bochsrc) so the +// the gui code can poll for keyboard, mouse, and other +// relevant events. + +void bx_rfb_gui_c::handle_events(void) +{ + while(bKeyboardInUse); + bKeyboardInUse = true; + if(rfbKeyboardEvents > 0) { + for(unsigned i = 0; i < rfbKeyboardEvents; i++) { + if(rfbKeyboardEvent[i].type == KEYBOARD) { + rfbKeyPressed(rfbKeyboardEvent[i].key, rfbKeyboardEvent[i].down); + } else { //type == MOUSE; + rfbMouseMove(rfbKeyboardEvent[i].x, rfbKeyboardEvent[i].y, rfbKeyboardEvent[i].down); + } + } + rfbKeyboardEvents = 0; + } + bKeyboardInUse = false; + + if(rfbUpdateRegion.updated) { + SendUpdate(rfbUpdateRegion.x, rfbUpdateRegion.y, rfbUpdateRegion.width, + rfbUpdateRegion.height, rfbEncodingRaw); + rfbUpdateRegion.x = rfbWindowX; + rfbUpdateRegion.y = rfbWindowY; + rfbUpdateRegion.width = 0; + rfbUpdateRegion.height = 0; + } + rfbUpdateRegion.updated = false; +} + +// ::FLUSH() +// +// Called periodically, requesting that the gui code flush all pending +// screen update requests. + +void bx_rfb_gui_c::flush(void) +{ +} + +// ::CLEAR_SCREEN() +// +// Called to request that the VGA region is cleared. Don't +// clear the area that defines the headerbar. +void bx_rfb_gui_c::clear_screen(void) +{ + memset(&rfbScreen[rfbWindowX * rfbHeaderbarY], 0, rfbWindowX * rfbDimensionY); +} + +// ::TEXT_UPDATE() +// +// Called in a VGA text mode, to update the screen with +// new content. +// +// old_text: array of character/attributes making up the contents +// of the screen from the last call. See below +// new_text: array of character/attributes making up the current +// contents, which should now be displayed. See below +// +// format of old_text & new_text: each is tm_info.line_offset*text_rows +// bytes long. Each character consists of 2 bytes. The first by is +// the character value, the second is the attribute byte. +// +// cursor_x: new x location of cursor +// cursor_y: new y location of cursor +// tm_info: this structure contains information for additional +// features in text mode (cursor shape, line offset,...) + +void bx_rfb_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, unsigned long cursor_x, unsigned long cursor_y, bx_vga_tminfo_t tm_info) +{ + Bit8u *old_line, *new_line; + Bit8u cAttr, cChar; + unsigned int curs, hchars, offset, rows, x, y, xc, yc; + bx_bool force_update=0, gfxchar, blink_state, blink_mode; + + blink_mode = (tm_info.blink_flags & BX_TEXT_BLINK_MODE) > 0; + blink_state = (tm_info.blink_flags & BX_TEXT_BLINK_STATE) > 0; + if (blink_mode) { + if (tm_info.blink_flags & BX_TEXT_BLINK_TOGGLE) + force_update = 1; + } + if(charmap_updated) { + force_update = 1; + charmap_updated = 0; + } + + // first invalidate character at previous and new cursor location + if ((rfbCursorY < text_rows) && (rfbCursorX < text_cols)) { + curs = rfbCursorY * tm_info.line_offset + rfbCursorX * 2; + old_text[curs] = ~new_text[curs]; + } + if((tm_info.cs_start <= tm_info.cs_end) && (tm_info.cs_start < font_height) && + (cursor_y < text_rows) && (cursor_x < text_cols)) { + curs = cursor_y * tm_info.line_offset + cursor_x * 2; + old_text[curs] = ~new_text[curs]; + } else { + curs = 0xffff; + } + + rows = text_rows; + y = 0; + do { + hchars = text_cols; + new_line = new_text; + old_line = old_text; + offset = y * tm_info.line_offset; + yc = y * font_height + rfbHeaderbarY; + x = 0; + do { + if (force_update || (old_text[0] != new_text[0]) + || (old_text[1] != new_text[1])) { + cChar = new_text[0]; + if (blink_mode) { + cAttr = new_text[1] & 0x7F; + if (!blink_state && (new_text[1] & 0x80)) + cAttr = (cAttr & 0x70) | (cAttr >> 4); + } else { + cAttr = new_text[1]; + } + gfxchar = tm_info.line_graphics && ((cChar & 0xE0) == 0xC0); + xc = x * font_width; + DrawChar(xc, yc, font_width, font_height, 0, (char *)&vga_charmap[cChar<<5], cAttr, gfxchar); + if(yc < rfbUpdateRegion.y) rfbUpdateRegion.y = yc; + if((yc + font_height - rfbUpdateRegion.y) > rfbUpdateRegion.height) rfbUpdateRegion.height = (yc + font_height - rfbUpdateRegion.y); + if(xc < rfbUpdateRegion.x) rfbUpdateRegion.x = xc; + if((xc + font_width - rfbUpdateRegion.x) > rfbUpdateRegion.width) rfbUpdateRegion.width = (xc + font_width - rfbUpdateRegion.x); + rfbUpdateRegion.updated = true; + if (offset == curs) { + cAttr = ((cAttr >> 4) & 0xF) + ((cAttr & 0xF) << 4); + DrawChar(xc, yc + tm_info.cs_start, font_width, tm_info.cs_end - tm_info.cs_start + 1, + tm_info.cs_start, (char *)&vga_charmap[cChar<<5], cAttr, gfxchar); + } + } + x++; + new_text+=2; + old_text+=2; + offset+=2; + } while (--hchars); + y++; + new_text = new_line + tm_info.line_offset; + old_text = old_line + tm_info.line_offset; + } while (--rows); + + rfbCursorX = cursor_x; + rfbCursorY = cursor_y; +} + +int bx_rfb_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) +{ + return 0; +} + +int bx_rfb_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) +{ + return 0; +} + +// ::PALETTE_CHANGE() +// +// Allocate a color in the native GUI, for this color, and put +// it in the colormap location 'index'. +// returns: 0=no screen update needed (color map change has direct effect) +// 1=screen updated needed (redraw using current colormap) + +bx_bool bx_rfb_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) +{ + rfbPalette[index] = (((red * 7 + 127) / 255) << 0) | (((green * 7 + 127) / 255) << 3) | (((blue * 3 + 127) / 255) << 6); + return(1); +} + +// ::GRAPHICS_TILE_UPDATE() +// +// Called to request that a tile of graphics be drawn to the +// screen, since info in this region has changed. +// +// tile: array of 8bit values representing a block of pixels with +// dimension equal to the 'tilewidth' & 'tileheight' parameters to +// ::specific_init(). Each value specifies an index into the +// array of colors you allocated for ::palette_change() +// x0: x origin of tile +// y0: y origin of tile +// +// note: origin of tile and of window based on (0,0) being in the upper +// left of the window. +void bx_rfb_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) +{ + UpdateScreen(tile, x0, y0 + rfbHeaderbarY, rfbTileX, rfbTileY, false); + if(x0 < rfbUpdateRegion.x) rfbUpdateRegion.x = x0; + if((y0 + rfbHeaderbarY) < rfbUpdateRegion.y) rfbUpdateRegion.y = y0 + rfbHeaderbarY; + if(((y0 + rfbHeaderbarY + rfbTileY) - rfbUpdateRegion.y) > rfbUpdateRegion.height) rfbUpdateRegion.height = ((y0 + rfbHeaderbarY + rfbTileY) - rfbUpdateRegion.y); + if(((x0 + rfbTileX) - rfbUpdateRegion.x) > rfbUpdateRegion.width) rfbUpdateRegion.width = ((x0 + rfbTileX) - rfbUpdateRegion.x); + if ((rfbUpdateRegion.x + rfbUpdateRegion.width) > rfbWindowX) { + rfbUpdateRegion.width = rfbWindowX - rfbUpdateRegion.x; + } + rfbUpdateRegion.updated = true; +} + +bx_svga_tileinfo_t *bx_rfb_gui_c::graphics_tile_info(bx_svga_tileinfo_t *info) +{ + if (!info) { + info = (bx_svga_tileinfo_t *)malloc(sizeof(bx_svga_tileinfo_t)); + if (!info) { + return NULL; + } + } + + info->bpp = 8; + info->pitch = rfbWindowX; + info->red_shift = 3; + info->green_shift = 6; + info->blue_shift = 8; + info->red_mask = 0x07; + info->green_mask = 0x38; + info->blue_mask = 0xc0; + info->is_indexed = 0; +#ifdef BX_LITTLE_ENDIAN + info->is_little_endian = 1; +#else + info->is_little_endian = 0; +#endif + + return info; +} + +Bit8u *bx_rfb_gui_c::graphics_tile_get(unsigned x0, unsigned y0, + unsigned *w, unsigned *h) +{ + if (x0+rfbTileX > rfbDimensionX) { + *w = rfbDimensionX - x0; + } + else { + *w = rfbTileX; + } + + if (y0+rfbTileY > rfbDimensionY) { + *h = rfbDimensionY - y0; + } + else { + *h = rfbTileY; + } + + return (Bit8u *)rfbScreen + (rfbHeaderbarY + y0) * rfbWindowX + x0; +} + +void bx_rfb_gui_c::graphics_tile_update_in_place(unsigned x0, unsigned y0, + unsigned w, unsigned h) +{ + if(x0 < rfbUpdateRegion.x) rfbUpdateRegion.x = x0; + if((y0 + rfbHeaderbarY) < rfbUpdateRegion.y) rfbUpdateRegion.y = y0 + rfbHeaderbarY; + if(((y0 + rfbHeaderbarY + h) - rfbUpdateRegion.y) > rfbUpdateRegion.height) rfbUpdateRegion.height = ((y0 + rfbHeaderbarY + h) - rfbUpdateRegion.y); + if(((x0 + w) - rfbUpdateRegion.x) > rfbUpdateRegion.width) rfbUpdateRegion.width = ((x0 + h) - rfbUpdateRegion.x); + if ((rfbUpdateRegion.x + rfbUpdateRegion.width) > rfbWindowX) { + rfbUpdateRegion.width = rfbWindowX - rfbUpdateRegion.x; + } + rfbUpdateRegion.updated = true; +} + + +// ::DIMENSION_UPDATE() +// +// Called when the VGA mode changes it's X,Y dimensions. +// Resize the window to this size, but you need to add on +// the height of the headerbar to the Y value. +// +// x: new VGA x size +// y: new VGA y size (add headerbar_y parameter from ::specific_init(). +// fheight: new VGA character height in text mode +// fwidth : new VGA character width in text mode +// bpp : bits per pixel in graphics mode + +void bx_rfb_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight, unsigned fwidth, unsigned bpp) +{ + if (bpp > 8) { + BX_PANIC(("%d bpp graphics mode not supported yet", bpp)); + } + if (fheight > 0) { + font_height = fheight; + font_width = fwidth; + text_cols = x / fwidth; + text_rows = y / fheight; + } + if ((x > BX_RFB_MAX_XDIM) || (y > BX_RFB_MAX_YDIM)) { + BX_PANIC(("dimension_update(): RFB doesn't support graphics mode %dx%d", x, y)); + } else if ((x != rfbDimensionX) || (x != rfbDimensionY)) { + if (desktop_resizable) { + rfbDimensionX = x; + rfbDimensionY = y; + rfbWindowX = rfbDimensionX; + rfbWindowY = rfbDimensionY + rfbHeaderbarY + rfbStatusbarY; + rfbScreen = (char *)realloc(rfbScreen, rfbWindowX * rfbWindowY); + SendUpdate(0, 0, rfbWindowX, rfbWindowY, rfbEncodingDesktopSize); + bx_gui->show_headerbar(); + } else { + clear_screen(); + SendUpdate(0, rfbHeaderbarY, rfbDimensionX, rfbDimensionY, rfbEncodingRaw); + rfbDimensionX = x; + rfbDimensionY = y; + } + } +} + + +// ::CREATE_BITMAP() +// +// Create a monochrome bitmap of size 'xdim' by 'ydim', which will +// be drawn in the headerbar. Return an integer ID to the bitmap, +// with which the bitmap can be referenced later. +// +// bmap: packed 8 pixels-per-byte bitmap. The pixel order is: +// bit0 is the left most pixel, bit7 is the right most pixel. +// xdim: x dimension of bitmap +// ydim: y dimension of bitmap + +unsigned bx_rfb_gui_c::create_bitmap(const unsigned char *bmap, unsigned xdim, unsigned ydim) +{ + if(rfbBitmapCount >= BX_MAX_PIXMAPS) { + BX_ERROR(("too many pixmaps.")); + return 0; + } + rfbBitmaps[rfbBitmapCount].bmap = (char *)malloc((xdim * ydim) / 8); + rfbBitmaps[rfbBitmapCount].xdim = xdim; + rfbBitmaps[rfbBitmapCount].ydim = ydim; + memcpy(rfbBitmaps[rfbBitmapCount].bmap, bmap, (xdim * ydim) / 8); + + rfbBitmapCount++; + return(rfbBitmapCount - 1); +} + + +// ::HEADERBAR_BITMAP() +// +// Called to install a bitmap in the bochs headerbar (toolbar). +// +// bmap_id: will correspond to an ID returned from +// ::create_bitmap(). 'alignment' is either BX_GRAVITY_LEFT +// or BX_GRAVITY_RIGHT, meaning install the bitmap in the next +// available leftmost or rightmost space. +// alignment: is either BX_GRAVITY_LEFT or BX_GRAVITY_RIGHT, +// meaning install the bitmap in the next +// available leftmost or rightmost space. +// f: a 'C' function pointer to callback when the mouse is clicked in +// the boundaries of this bitmap. + +unsigned bx_rfb_gui_c::headerbar_bitmap(unsigned bmap_id, unsigned alignment, void (*f)(void)) +{ + int hb_index; + + if((rfbHeaderbarBitmapCount + 1) > BX_MAX_HEADERBAR_ENTRIES) { + return 0; + } + + rfbHeaderbarBitmapCount++; + hb_index = rfbHeaderbarBitmapCount - 1; + rfbHeaderbarBitmaps[hb_index].index = bmap_id; + rfbHeaderbarBitmaps[hb_index].alignment = alignment; + rfbHeaderbarBitmaps[hb_index].f = f; + if (alignment == BX_GRAVITY_LEFT) { + rfbHeaderbarBitmaps[hb_index].xorigin = rfbOriginLeft; + rfbHeaderbarBitmaps[hb_index].yorigin = 0; + rfbOriginLeft += rfbBitmaps[bmap_id].xdim; + } else { // BX_GRAVITY_RIGHT + rfbOriginRight += rfbBitmaps[bmap_id].xdim; + rfbHeaderbarBitmaps[hb_index].xorigin = rfbOriginRight; + rfbHeaderbarBitmaps[hb_index].yorigin = 0; + } + return hb_index; +} + + +// ::SHOW_HEADERBAR() +// +// Show (redraw) the current headerbar, which is composed of +// currently installed bitmaps. + +void bx_rfb_gui_c::show_headerbar(void) +{ + char *newBits, value; + unsigned int i, xorigin, addr; + + newBits = (char *)malloc(rfbWindowX * rfbHeaderbarY); + memset(newBits, 0, (rfbWindowX * rfbHeaderbarY)); + DrawBitmap(0, 0, rfbWindowX, rfbHeaderbarY, newBits, (char)0xf0, false); + for(i = 0; i < rfbHeaderbarBitmapCount; i++) { + if(rfbHeaderbarBitmaps[i].alignment == BX_GRAVITY_LEFT) { + xorigin = rfbHeaderbarBitmaps[i].xorigin; + } else { + xorigin = rfbWindowX - rfbHeaderbarBitmaps[i].xorigin; + } + DrawBitmap(xorigin, 0, rfbBitmaps[rfbHeaderbarBitmaps[i].index].xdim, rfbBitmaps[rfbHeaderbarBitmaps[i].index].ydim, rfbBitmaps[rfbHeaderbarBitmaps[i].index].bmap, (char)0xf0, false); + } + free(newBits); + newBits = (char *)malloc(rfbWindowX * rfbStatusbarY / 8); + memset(newBits, 0, (rfbWindowX * rfbStatusbarY / 8)); + for (i = 1; i < 12; i++) { + addr = rfbStatusitemPos[i] / 8; + value = 1 << (rfbStatusitemPos[i] % 8); + for (unsigned j=1; j 0) { + int n = recv(sock, buf, len, 0); + if (n > 0) { + buf += n; + len -= n; + } else { + return n; + } + } + return 1; +} + +/* +* WriteExact writes an exact number of bytes on a TCP socket. Returns 1 if +* those bytes have been written, or -1 if an error occurred (errno is set to +* ETIMEDOUT if it timed out). +*/ + +int WriteExact(int sock, char *buf, int len) +{ + while (len > 0) { + int n = send(sock, buf, len,0); + + if (n > 0) { + buf += n; + len -= n; + } else { + if (n == 0) BX_ERROR(("WriteExact: write returned 0?")); + return n; + } + } + return 1; +} + +void DrawBitmap(int x, int y, int width, int height, char *bmap, char color, bool update_client) +{ + unsigned char *newBits; + char fgcolor, bgcolor; + static char vgaPalette[] = { + (char)0x00, //Black + (char)0x01, //Dark Blue + (char)0x02, //Dark Green + (char)0x03, //Dark Cyan + (char)0x04, //Dark Red + (char)0x05, //Dark Magenta + (char)0x06, //Brown + (char)0x07, //Light Gray + (char)0x38, //Dark Gray + (char)0x09, //Light Blue + (char)0x12, //Green + (char)0x1B, //Cyan + (char)0x24, //Light Red + (char)0x2D, //Magenta + (char)0x36, //Yellow + (char)0x3F //White + }; + + bgcolor = vgaPalette[(color >> 4) & 0xF]; + fgcolor = vgaPalette[color & 0xF]; + newBits = (unsigned char *)malloc(width * height); + memset(newBits, 0, (width * height)); + for(int i = 0; i < (width * height) / 8; i++) { + newBits[i * 8 + 0] = (bmap[i] & 0x01) ? fgcolor : bgcolor; + newBits[i * 8 + 1] = (bmap[i] & 0x02) ? fgcolor : bgcolor; + newBits[i * 8 + 2] = (bmap[i] & 0x04) ? fgcolor : bgcolor; + newBits[i * 8 + 3] = (bmap[i] & 0x08) ? fgcolor : bgcolor; + newBits[i * 8 + 4] = (bmap[i] & 0x10) ? fgcolor : bgcolor; + newBits[i * 8 + 5] = (bmap[i] & 0x20) ? fgcolor : bgcolor; + newBits[i * 8 + 6] = (bmap[i] & 0x40) ? fgcolor : bgcolor; + newBits[i * 8 + 7] = (bmap[i] & 0x80) ? fgcolor : bgcolor; + } + UpdateScreen(newBits, x, y, width, height, update_client); + //DrawColorPalette(); + free(newBits); +} + +void DrawChar(int x, int y, int width, int height, int fonty, char *bmap, char color, bx_bool gfxchar) +{ + static unsigned char newBits[9 * 32]; + unsigned char mask; + int bytes = width * height; + char fgcolor, bgcolor; + static char vgaPalette[] = { + (char)0x00, //Black + (char)0x01, //Dark Blue + (char)0x02, //Dark Green + (char)0x03, //Dark Cyan + (char)0x04, //Dark Red + (char)0x05, //Dark Magenta + (char)0x06, //Brown + (char)0x07, //Light Gray + (char)0x38, //Dark Gray + (char)0x09, //Light Blue + (char)0x12, //Green + (char)0x1B, //Cyan + (char)0x24, //Light Red + (char)0x2D, //Magenta + (char)0x36, //Yellow + (char)0x3F //White + }; + + bgcolor = vgaPalette[(color >> 4) & 0xF]; + fgcolor = vgaPalette[color & 0xF]; + + for(int i = 0; i < bytes; i+=width) { + mask = 0x80; + for(int j = 0; j < width; j++) { + if (mask > 0) { + newBits[i + j] = (bmap[fonty] & mask) ? fgcolor : bgcolor; + } else { + if (gfxchar) { + newBits[i + j] = (bmap[fonty] & 0x01) ? fgcolor : bgcolor; + } else { + newBits[i + j] = bgcolor; + } + } + mask >>= 1; + } + fonty++; + } + UpdateScreen(newBits, x, y, width, height, false); + //DrawColorPalette(); +} + +void DrawColorPalette() +{ + unsigned char bits[100]; + int x = 0, y = 0, c; + for(c = 0; c < 256; c++) { + memset(&bits, rfbPalette[c], 100); + UpdateScreen(bits, x, y, 10, 10, false); + x += 10; + if(x > 70) { + y += 10; + x = 0; + } + } +} + +void UpdateScreen(unsigned char *newBits, int x, int y, int width, int height, bool update_client) +{ + int i, c; + for(i = 0; i < height; i++) { + for(c = 0; c < width; c++) { + newBits[(i * width) + c] = rfbPalette[newBits[(i * width) + c]]; + } + memcpy(&rfbScreen[y * rfbWindowX + x], &newBits[i * width], width); + y++; + } + if(update_client) { + if(sGlobal == INVALID_SOCKET) return; + rfbFramebufferUpdateMessage fum; + rfbFramebufferUpdateRectHeader furh; + fum.messageType = rfbFramebufferUpdate; + fum.numberOfRectangles = htons(1); + WriteExact(sGlobal, (char *)&fum, rfbFramebufferUpdateMessageSize); + furh.r.xPosition = htons(x); + furh.r.yPosition = htons((y - i)); + furh.r.width = htons((short)width); + furh.r.height = htons((short)height); + furh.r.encodingType = htonl(rfbEncodingRaw); + WriteExact(sGlobal, (char *)&furh, rfbFramebufferUpdateRectHeaderSize); + WriteExact(sGlobal, (char *)newBits, width * height); + } +} + +void SendUpdate(int x, int y, int width, int height, Bit32u encoding) +{ + char *newBits; + + if(x < 0 || y < 0 || (x + width) > (int)rfbWindowX || (y + height) > (int)rfbWindowY) { + BX_ERROR(("Dimensions out of bounds. x=%i y=%i w=%i h=%i", x, y, width, height)); + } + if(sGlobal != INVALID_SOCKET) { + rfbFramebufferUpdateMessage fum; + rfbFramebufferUpdateRectHeader furh; + + fum.messageType = rfbFramebufferUpdate; + fum.numberOfRectangles = htons(1); + + furh.r.xPosition = htons(x); + furh.r.yPosition = htons(y); + furh.r.width = htons((short)width); + furh.r.height = htons((short)height); + furh.r.encodingType = htonl(encoding); + + WriteExact(sGlobal, (char *)&fum, rfbFramebufferUpdateMessageSize); + WriteExact(sGlobal, (char *)&furh, rfbFramebufferUpdateRectHeaderSize); + + if (encoding == rfbEncodingRaw) { + newBits = (char *)malloc(width * height); + for(int i = 0; i < height; i++) { + memcpy(&newBits[i * width], &rfbScreen[y * rfbWindowX + x], width); + y++; + } + WriteExact(sGlobal, (char *)newBits, width * height); + free(newBits); + } + } +} + +void StartThread() +{ +#ifdef WIN32 + _beginthread(ServerThreadInit, 0, NULL); +#else + pthread_t thread; + pthread_create(&thread, NULL, (void *(*)(void *))&ServerThreadInit, NULL); +#endif +} + +// function to convert key names into rfb key values. +// This first try will be horribly inefficient, but it only has +// to be done while loading a keymap. Once the simulation starts, +// this function won't be called. +static Bit32u convertStringToRfbKey(const char *string) +{ + rfbKeyTabEntry *ptr; + for (ptr = &rfb_keytable[0]; ptr->name != NULL; ptr++) { + if (!strcmp(string, ptr->name)) + return ptr->value; + } + return BX_KEYMAP_UNKNOWN; +} + +Bit32u rfb_ascii_to_key_event[0x5f] = { + // !"#$%&' + BX_KEY_SPACE, + BX_KEY_1, + BX_KEY_SINGLE_QUOTE, + BX_KEY_3, + BX_KEY_4, + BX_KEY_5, + BX_KEY_7, + BX_KEY_SINGLE_QUOTE, + + // ()*+,-./ + BX_KEY_9, + BX_KEY_0, + BX_KEY_8, + BX_KEY_EQUALS, + BX_KEY_COMMA, + BX_KEY_MINUS, + BX_KEY_PERIOD, + BX_KEY_SLASH, + + // 01234567 + BX_KEY_0, + BX_KEY_1, + BX_KEY_2, + BX_KEY_3, + BX_KEY_4, + BX_KEY_5, + BX_KEY_6, + BX_KEY_7, + + // 89:;<=>? + BX_KEY_8, + BX_KEY_9, + BX_KEY_SEMICOLON, + BX_KEY_SEMICOLON, + BX_KEY_COMMA, + BX_KEY_EQUALS, + BX_KEY_PERIOD, + BX_KEY_SLASH, + + // @ABCDEFG + BX_KEY_2, + BX_KEY_A, + BX_KEY_B, + BX_KEY_C, + BX_KEY_D, + BX_KEY_E, + BX_KEY_F, + BX_KEY_G, + + + // HIJKLMNO + BX_KEY_H, + BX_KEY_I, + BX_KEY_J, + BX_KEY_K, + BX_KEY_L, + BX_KEY_M, + BX_KEY_N, + BX_KEY_O, + + + // PQRSTUVW + BX_KEY_P, + BX_KEY_Q, + BX_KEY_R, + BX_KEY_S, + BX_KEY_T, + BX_KEY_U, + BX_KEY_V, + BX_KEY_W, + + // XYZ[\]^_ + BX_KEY_X, + BX_KEY_Y, + BX_KEY_Z, + BX_KEY_LEFT_BRACKET, + BX_KEY_BACKSLASH, + BX_KEY_RIGHT_BRACKET, + BX_KEY_6, + BX_KEY_MINUS, + + // `abcdefg + BX_KEY_GRAVE, + BX_KEY_A, + BX_KEY_B, + BX_KEY_C, + BX_KEY_D, + BX_KEY_E, + BX_KEY_F, + BX_KEY_G, + + // hijklmno + BX_KEY_H, + BX_KEY_I, + BX_KEY_J, + BX_KEY_K, + BX_KEY_L, + BX_KEY_M, + BX_KEY_N, + BX_KEY_O, + + // pqrstuvw + BX_KEY_P, + BX_KEY_Q, + BX_KEY_R, + BX_KEY_S, + BX_KEY_T, + BX_KEY_U, + BX_KEY_V, + BX_KEY_W, + + // xyz{|}~ + BX_KEY_X, + BX_KEY_Y, + BX_KEY_Z, + BX_KEY_LEFT_BRACKET, + BX_KEY_BACKSLASH, + BX_KEY_RIGHT_BRACKET, + BX_KEY_GRAVE +}; + +void rfbKeyPressed(Bit32u key, int press_release) +{ + Bit32u key_event; + + if (!SIM->get_param_bool(BXPN_KBD_USEMAPPING)->get()) { + if((key >= XK_space) && (key <= XK_asciitilde)) { + key_event = rfb_ascii_to_key_event[key - XK_space]; + } else { + switch (key) { + case XK_KP_1: +#ifdef XK_KP_End + case XK_KP_End: +#endif + key_event = BX_KEY_KP_END; break; + + case XK_KP_2: +#ifdef XK_KP_Down + case XK_KP_Down: +#endif + key_event = BX_KEY_KP_DOWN; break; + + case XK_KP_3: +#ifdef XK_KP_Page_Down + case XK_KP_Page_Down: +#endif + key_event = BX_KEY_KP_PAGE_DOWN; break; + + case XK_KP_4: +#ifdef XK_KP_Left + case XK_KP_Left: +#endif + key_event = BX_KEY_KP_LEFT; break; + + case XK_KP_5: +#ifdef XK_KP_Begin + case XK_KP_Begin: +#endif + key_event = BX_KEY_KP_5; break; + + case XK_KP_6: +#ifdef XK_KP_Right + case XK_KP_Right: +#endif + key_event = BX_KEY_KP_RIGHT; break; + + case XK_KP_7: +#ifdef XK_KP_Home + case XK_KP_Home: +#endif + key_event = BX_KEY_KP_HOME; break; + + case XK_KP_8: +#ifdef XK_KP_Up + case XK_KP_Up: +#endif + key_event = BX_KEY_KP_UP; break; + + case XK_KP_9: +#ifdef XK_KP_Page_Up + case XK_KP_Page_Up: +#endif + key_event = BX_KEY_KP_PAGE_UP; break; + + case XK_KP_0: +#ifdef XK_KP_Insert + case XK_KP_Insert: +#endif + key_event = BX_KEY_KP_INSERT; break; + + case XK_KP_Decimal: +#ifdef XK_KP_Delete + case XK_KP_Delete: +#endif + key_event = BX_KEY_KP_DELETE; break; + +#ifdef XK_KP_Enter + case XK_KP_Enter: key_event = BX_KEY_KP_ENTER; break; +#endif + + case XK_KP_Subtract: key_event = BX_KEY_KP_SUBTRACT; break; + case XK_KP_Add: key_event = BX_KEY_KP_ADD; break; + + case XK_KP_Multiply: key_event = BX_KEY_KP_MULTIPLY; break; + case XK_KP_Divide: key_event = BX_KEY_KP_DIVIDE; break; + + + case XK_Up: key_event = BX_KEY_UP; break; + case XK_Down: key_event = BX_KEY_DOWN; break; + case XK_Left: key_event = BX_KEY_LEFT; break; + case XK_Right: key_event = BX_KEY_RIGHT; break; + + case XK_Delete: key_event = BX_KEY_DELETE; break; + case XK_BackSpace: key_event = BX_KEY_BACKSPACE; break; + case XK_Tab: key_event = BX_KEY_TAB; break; +#ifdef XK_ISO_Left_Tab + case XK_ISO_Left_Tab: key_event = BX_KEY_TAB; break; +#endif + case XK_Return: key_event = BX_KEY_ENTER; break; + case XK_Escape: key_event = BX_KEY_ESC; break; + case XK_F1: key_event = BX_KEY_F1; break; + case XK_F2: key_event = BX_KEY_F2; break; + case XK_F3: key_event = BX_KEY_F3; break; + case XK_F4: key_event = BX_KEY_F4; break; + case XK_F5: key_event = BX_KEY_F5; break; + case XK_F6: key_event = BX_KEY_F6; break; + case XK_F7: key_event = BX_KEY_F7; break; + case XK_F8: key_event = BX_KEY_F8; break; + case XK_F9: key_event = BX_KEY_F9; break; + case XK_F10: key_event = BX_KEY_F10; break; + case XK_F11: key_event = BX_KEY_F11; break; + case XK_F12: key_event = BX_KEY_F12; break; + case XK_Control_L: key_event = BX_KEY_CTRL_L; break; +#ifdef XK_Control_R + case XK_Control_R: key_event = BX_KEY_CTRL_R; break; +#endif + case XK_Shift_L: key_event = BX_KEY_SHIFT_L; break; + case XK_Shift_R: key_event = BX_KEY_SHIFT_R; break; + case XK_Alt_L: key_event = BX_KEY_ALT_L; break; +#ifdef XK_Alt_R + case XK_Alt_R: key_event = BX_KEY_ALT_R; break; +#endif + case XK_Caps_Lock: key_event = BX_KEY_CAPS_LOCK; break; + case XK_Num_Lock: key_event = BX_KEY_NUM_LOCK; break; +#ifdef XK_Scroll_Lock + case XK_Scroll_Lock: key_event = BX_KEY_SCRL_LOCK; break; +#endif +#ifdef XK_Print + case XK_Print: key_event = BX_KEY_PRINT; break; +#endif +#ifdef XK_Pause + case XK_Pause: key_event = BX_KEY_PAUSE; break; +#endif + + case XK_Insert: key_event = BX_KEY_INSERT; break; + case XK_Home: key_event = BX_KEY_HOME; break; + case XK_End: key_event = BX_KEY_END; break; + case XK_Page_Up: key_event = BX_KEY_PAGE_UP; break; + case XK_Page_Down: key_event = BX_KEY_PAGE_DOWN; break; + + default: + BX_ERROR(("rfbKeyPress(): key %04x unhandled!", key)); + return; + } + } + } else { + BXKeyEntry *entry = bx_keymap.findHostKey(key); + if (!entry) { + BX_ERROR(("rfbKeyPressed(): key %x unhandled!", (unsigned) key)); + return; + } + key_event = entry->baseKey; + } + + if (!press_release) key_event |= BX_KEY_RELEASED; + DEV_kbd_gen_scancode(key_event); +} + +void rfbMouseMove(int x, int y, int bmask) +{ + static int oldx = -1; + static int oldy = -1; + int xorigin; + + if ((oldx == 1) && (oldy == -1)) { + oldx = x; + oldy = y; + return; + } + if(y > rfbHeaderbarY) { + DEV_mouse_motion(x - oldx, oldy - y, bmask); + oldx = x; + oldy = y; + } else { + if (bmask == 1) { + for (unsigned i=0; i=xorigin) && (x<(xorigin+int(rfbBitmaps[rfbHeaderbarBitmaps[i].index].xdim)))) { + rfbHeaderbarBitmaps[i].f(); + return; + } + } + } + } +} + +void bx_rfb_gui_c::mouse_enabled_changed_specific(bx_bool val) +{ +} + +void bx_rfb_gui_c::get_capabilities(Bit16u *xres, Bit16u *yres, Bit16u *bpp) +{ + if (desktop_resizable) { + *xres = BX_RFB_MAX_XDIM; + *yres = BX_RFB_MAX_YDIM; + } else { + *xres = BX_RFB_DEF_XDIM; + *yres = BX_RFB_DEF_YDIM; + } + *bpp = 8; +} + +#if BX_SHOW_IPS +void bx_rfb_gui_c::show_ips(Bit32u ips_count) +{ + char ips_text[40]; + sprintf(ips_text, "IPS: %9u", ips_count); + rfbSetStatusText(0, ips_text, 1); +} +#endif + +#endif /* if BX_WITH_RFB */ diff --git a/bochs/gui/rfb.h b/bochs/gui/rfb.h new file mode 100644 index 00000000..da4e0e80 --- /dev/null +++ b/bochs/gui/rfb.h @@ -0,0 +1,392 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2000-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// This file includes the rfb spec header and the port numbers + +// Define the RFB types +typedef Bit32u U32; +typedef Bit16u U16; +typedef Bit8u U8; +typedef Bit32s S32; +typedef Bit16s S16; +typedef Bit8s S8; + +// Port range +#define BX_RFB_PORT_MIN 5900 +#define BX_RFB_PORT_MAX 5949 + + +// RFB Protocol definitions. +// Please refer to the specification document +// http://www.realvnc.com/docs/rfbproto.pdf + +typedef struct { + U16 xPosition; + U16 yPosition; + U16 width; + U16 height; + U32 encodingType; +} rfbRectangle; + +#define rfbRectangleSize (sizeof(rfbRectangle)) + + +typedef struct { + U8 bitsPerPixel; + U8 depth; + U8 bigEndianFlag; + U8 trueColourFlag; + U16 redMax; + U16 greenMax; + U16 blueMax; + U8 redShift; + U8 greenShift; + U8 blueShift; + U8 padding[3]; +} rfbPixelFormat; + +#define rfbPixelFormatSize (sizeof(rfbPixelFormat)) + + +#define rfbProtocolVersionFormat "RFB %03d.%03d\n" +#define rfbServerProtocolMajorVersion 3 +#define rfbServerProtocolMinorVersion 3 + +typedef char rfbProtocolVersionMessage[12 + 1]; // Add 1 for null byte +#define rfbProtocolVersionMessageSize (sizeof(rfbProtocolVersionMessage) - 1) // Real Message Length + + +#define rfbSecurityConnFailed 0 +#define rfbSecurityNone 1 +#define rfbSecurityVncAuth 2 + +#define rfbSecurityVncAuthOK 0 +#define rfbSecurityVncAuthFailed 1 +#define rfbSecurityVncAuthTooMany 2 // No longer used (3.7) + + +typedef struct { + U8 sharedFlag; +} rfbClientInitMessage; + +#define rfbClientInitMessageSize (sizeof(rfbClientInitMessage)) + + +typedef struct { + U16 framebufferWidth; + U16 framebufferHeight; + rfbPixelFormat serverPixelFormat; + U32 nameLength; + // U8[] nameString; +} rfbServerInitMessage; + +#define rfbServerInitMessageSize (sizeof(rfbServerInitMessage)) + +// Client to Server message types +#define rfbSetPixelFormat 0 +#define rfbFixColourMapEntries 1 +#define rfbSetEncodings 2 +#define rfbFramebufferUpdateRequest 3 +#define rfbKeyEvent 4 +#define rfbPointerEvent 5 +#define rfbClientCutText 6 + + +// Client to Server messages + +typedef struct { + U8 messageType; + U8 padding[3]; + rfbPixelFormat pixelFormat; +} rfbSetPixelFormatMessage; + +#define rfbSetPixelFormatMessageSize (sizeof(rfbSetPixelFormatMessage)) + + +typedef struct { + U8 messageType; + U8 padding; + U16 firstColour; + U16 numberOfColours; +} rfbFixColourMapEntriesMessage; + +#define rfbFixColourMapEntriesMessageSize (sizeof(rfbFixColourMapEntriesMessage)) + + +typedef struct { + U8 messageType; + U8 padding; + U16 numberOfEncodings; +} rfbSetEncodingsMessage; + +#define rfbSetEncodingsMessageSize (sizeof(rfbSetEncodingsMessage)) + + +typedef struct { + U8 messageType; + U8 incremental; + U16 xPosition; + U16 yPosition; + U16 width; + U16 height; +} rfbFramebufferUpdateRequestMessage; + +#define rfbFramebufferUpdateRequestMessageSize (sizeof(rfbFramebufferUpdateRequestMessage)) + + +typedef struct { + U8 messageType; + U8 downFlag; + U8 padding[2]; + U32 key; +} rfbKeyEventMessage; + +#define rfbKeyEventMessageSize (sizeof(rfbKeyEventMessage)) + + +typedef struct { + U8 messageType; + U8 buttonMask; + U16 xPosition; + U16 yPosition; +} rfbPointerEventMessage; + +#define rfbPointerEventMessageSize (sizeof(rfbPointerEventMessage)) + +#define rfbButton1Mask 1 +#define rfbButton2Mask 2 +#define rfbButton3Mask 4 + + +typedef struct { + U8 messageType; + U8 padding[3]; + U32 length; + // U8[] text; +} rfbClientCutTextMessage; + +#define rfbClientCutTextMessageSize (sizeof(rfbClientCutTextMessage)) + +// Fill in correct names +typedef union { + rfbSetPixelFormatMessage spf; + rfbFixColourMapEntriesMessage fcme; + rfbSetEncodingsMessage se; + rfbFramebufferUpdateRequestMessage fur; + rfbKeyEventMessage ke; + rfbPointerEventMessage pe; + rfbClientCutTextMessage cct; +} rfbClientToServerMessage; + + +// Server to Client message types +#define rfbFramebufferUpdate 0 +#define rfbSetColourMapEntries 1 +#define rfbBell 2 +#define rfbServerCutText 3 + +// Encoding types +#define rfbEncodingRaw 0 +#define rfbEncodingCopyRect 1 +#define rfbEncodingRRE 2 +#define rfbEncodingCoRRE 4 +#define rfbEncodingHextile 5 +#define rfbEncodingZRLE 16 +#define rfbEncodingCursor 0xffffff11 +#define rfbEncodingDesktopSize 0xffffff21 +#define rfbEncodingZlib 6 +#define rfbEncodingTight 7 +#define rfbEncodingZlibHex 8 +#define rfbEncodingTightOption00 0xffffff00 // to 0xffffffff except 0xffffff11 and 0xffffff21 +#define rfbEncodingTightOption01 0xffffff01 +#define rfbEncodingTightOption02 0xffffff02 +#define rfbEncodingTightOption03 0xffffff03 +#define rfbEncodingTightOption04 0xffffff04 +#define rfbEncodingTightOption05 0xffffff05 +#define rfbEncodingTightOption06 0xffffff06 +#define rfbEncodingTightOption07 0xffffff07 +#define rfbEncodingTightOption08 0xffffff08 +#define rfbEncodingTightOption09 0xffffff09 +#define rfbEncodingTightOption0a 0xffffff0a +#define rfbEncodingTightOption0b 0xffffff0b +#define rfbEncodingTightOption0c 0xffffff0c +#define rfbEncodingTightOption0d 0xffffff0d +#define rfbEncodingTightOption0e 0xffffff0e +#define rfbEncodingTightOption0f 0xffffff0f +#define rfbEncodingTightOption10 0xffffff10 +#define rfbEncodingTightOption12 0xffffff12 +#define rfbEncodingTightOption13 0xffffff13 +#define rfbEncodingTightOption14 0xffffff14 +#define rfbEncodingTightOption15 0xffffff15 +#define rfbEncodingTightOption16 0xffffff16 +#define rfbEncodingTightOption17 0xffffff17 +#define rfbEncodingTightOption18 0xffffff18 +#define rfbEncodingTightOption19 0xffffff19 +#define rfbEncodingTightOption1a 0xffffff1a +#define rfbEncodingTightOption1b 0xffffff1b +#define rfbEncodingTightOption1c 0xffffff1c +#define rfbEncodingTightOption1d 0xffffff1d +#define rfbEncodingTightOption1e 0xffffff1e +#define rfbEncodingTightOption1f 0xffffff1f +#define rfbEncodingTightOption20 0xffffff20 + +typedef struct { + U32 id; + const char *name; +} rfbEncodingType; + +rfbEncodingType rfbEncodings[] = { + {rfbEncodingRaw, "Raw"}, + {rfbEncodingCopyRect, "CopyRect"}, + {rfbEncodingRRE, "RRE"}, + {rfbEncodingCoRRE, "CoRRE"}, + {rfbEncodingHextile, "Hextile"}, + {rfbEncodingZRLE, "ZRLE"}, + {rfbEncodingCursor, "Cursor"}, + {rfbEncodingDesktopSize, "DesktopSize"}, + {rfbEncodingZlib, "Zlib"}, + {rfbEncodingTight, "Tight"}, + {rfbEncodingZlibHex, "ZlibHex"}, + {rfbEncodingTightOption00, "TightOption00"}, + {rfbEncodingTightOption01, "TightOption01"}, + {rfbEncodingTightOption02, "TightOption02"}, + {rfbEncodingTightOption03, "TightOption03"}, + {rfbEncodingTightOption04, "TightOption04"}, + {rfbEncodingTightOption05, "TightOption05"}, + {rfbEncodingTightOption06, "TightOption06"}, + {rfbEncodingTightOption07, "TightOption07"}, + {rfbEncodingTightOption08, "TightOption08"}, + {rfbEncodingTightOption09, "TightOption09"}, + {rfbEncodingTightOption0a, "TightOption0a"}, + {rfbEncodingTightOption0b, "TightOption0b"}, + {rfbEncodingTightOption0c, "TightOption0c"}, + {rfbEncodingTightOption0d, "TightOption0d"}, + {rfbEncodingTightOption0e, "TightOption0e"}, + {rfbEncodingTightOption0f, "TightOption0f"}, + {rfbEncodingTightOption10, "TightOption10"}, + {rfbEncodingTightOption12, "TightOption12"}, + {rfbEncodingTightOption13, "TightOption13"}, + {rfbEncodingTightOption14, "TightOption14"}, + {rfbEncodingTightOption15, "TightOption15"}, + {rfbEncodingTightOption16, "TightOption16"}, + {rfbEncodingTightOption17, "TightOption17"}, + {rfbEncodingTightOption18, "TightOption18"}, + {rfbEncodingTightOption19, "TightOption19"}, + {rfbEncodingTightOption1a, "TightOption1a"}, + {rfbEncodingTightOption1b, "TightOption1b"}, + {rfbEncodingTightOption1c, "TightOption1c"}, + {rfbEncodingTightOption1d, "TightOption1d"}, + {rfbEncodingTightOption1e, "TightOption1e"}, + {rfbEncodingTightOption1f, "TightOption1f"}, + {rfbEncodingTightOption20, "TightOption20"}, +}; + +#define rfbEncodingsCount (sizeof(rfbEncodings) / sizeof(rfbEncodingType)) + +// Server To Client Messages + +typedef struct { + U8 messageType; + U8 padding; + U16 numberOfRectangles; +} rfbFramebufferUpdateMessage; + +#define rfbFramebufferUpdateMessageSize (sizeof(rfbFramebufferUpdateMessage)) + +typedef struct { + rfbRectangle r; +} rfbFramebufferUpdateRectHeader; + +#define rfbFramebufferUpdateRectHeaderSize (sizeof(rfbFramebufferUpdateRectHeader)) + +typedef struct { + U16 srcXPosition; + U16 srcYPosition; +} rfbCopyRect; + +#define rfbCopyRectSize (sizeof(rfbCopyRect)) + + +/* typedef struct { */ +/* U32 numberOfSubrectangles; */ +/* PIXEL backgroundPixelValue; */ +/* } rfbRREHeader; */ + +/* #define rfbRREHeaderSize (sizeof(rfbRREHeader)) */ + + +/* typedef struct { */ +/* U32 numberOfSubrectangles; */ +/* PIXEL backgroundPixelValue; */ +/* } rfbCoRRERectangle; */ + +/* #define rfbCoRRERectangleSize (sizeof(rfbCoRRERectangle)) */ + + +#define rfbHextileRaw (1 << 0) +#define rfbHextileBackgroundSpecified (1 << 1) +#define rfbHextileForegroundSpecified (1 << 2) +#define rfbHextileAnySubrects (1 << 3) +#define rfbHextileSubrectsColoured (1 << 4) + +#define rfbHextilePackXY(x,y) (((x) << 4) | (y)) +#define rfbHextilePackWH(w,h) ((((w)-1) << 4) | ((h)-1)) +#define rfbHextileExtractX(byte) ((byte) >> 4) +#define rfbHextileExtractY(byte) ((byte) & 0xf) +#define rfbHextileExtractW(byte) (((byte) >> 4) + 1) +#define rfbHextileExtractH(byte) (((byte) & 0xf) + 1) + + +typedef struct { + U8 messageType; + U8 padding; + U16 firstColour; + U16 numberOfColours; +} rfbSetColourMapEntriesMessage; + +#define rfbSetColourMapEntriesMessageSize (sizeof(rfbSetColourMapEntriesMessage)) + + + +typedef struct { + U8 messageType; +} rfbBellMessage; + +#define rfbBellMessageSize (sizeof(rfbBellMessage)) + + + +typedef struct { + U8 messageType; + U8 padding[3]; + U32 length; + // U8[] text; +} rfbServerCutTextMessage; + +#define rfbServerCutTextMessageSize (sizeof(rfbServerCutTextMessage)) + +// Fill in correct names +typedef union { + rfbFramebufferUpdateMessage fu; + rfbBellMessage b; + rfbServerCutTextMessage sct; +} rfbServerToClientMessage; + diff --git a/bochs/gui/rfbkeys.h b/bochs/gui/rfbkeys.h new file mode 100644 index 00000000..03dacc65 --- /dev/null +++ b/bochs/gui/rfbkeys.h @@ -0,0 +1,632 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// This file includes the rfb key definitions and keyboard mapping stuff + +enum { + XK_space = 0x020, + XK_exclam, + XK_quotedbl, + XK_numbersign, + XK_dollar, + XK_percent, + XK_ampersand, + XK_apostrophe, + XK_parenleft, + XK_parenright, + XK_asterisk, + XK_plus, + XK_comma, + XK_minus, + XK_period, + XK_slash, + XK_0, + XK_1, + XK_2, + XK_3, + XK_4, + XK_5, + XK_6, + XK_7, + XK_8, + XK_9, + XK_colon, + XK_semicolon, + XK_less, + XK_equal, + XK_greater, + XK_question, + XK_at, + XK_A, + XK_B, + XK_C, + XK_D, + XK_E, + XK_F, + XK_G, + XK_H, + XK_I, + XK_J, + XK_K, + XK_L, + XK_M, + XK_N, + XK_O, + XK_P, + XK_Q, + XK_R, + XK_S, + XK_T, + XK_U, + XK_V, + XK_W, + XK_X, + XK_Y, + XK_Z, + XK_bracketleft, + XK_backslash, + XK_bracketright, + XK_asciicircum, + XK_underscore, + XK_grave, + XK_a, + XK_b, + XK_c, + XK_d, + XK_e, + XK_f, + XK_g, + XK_h, + XK_i, + XK_j, + XK_k, + XK_l, + XK_m, + XK_n, + XK_o, + XK_p, + XK_q, + XK_r, + XK_s, + XK_t, + XK_u, + XK_v, + XK_w, + XK_x, + XK_y, + XK_z, + XK_braceleft, + XK_bar, + XK_braceright, + XK_asciitilde +}; + +#define XK_nobreakspace 0x00a0 +#define XK_exclamdown 0x00a1 +#define XK_cent 0x00a2 +#define XK_sterling 0x00a3 +#define XK_currency 0x00a4 +#define XK_yen 0x00a5 +#define XK_brokenbar 0x00a6 +#define XK_section 0x00a7 +#define XK_diaeresis 0x00a8 +#define XK_copyright 0x00a9 +#define XK_ordfeminine 0x00aa +#define XK_guillemotleft 0x00ab +#define XK_notsign 0x00ac +#define XK_hyphen 0x00ad +#define XK_registered 0x00ae +#define XK_macron 0x00af +#define XK_degree 0x00b0 +#define XK_plusminus 0x00b1 +#define XK_twosuperior 0x00b2 +#define XK_threesuperior 0x00b3 +#define XK_acute 0x00b4 +#define XK_mu 0x00b5 +#define XK_paragraph 0x00b6 +#define XK_periodcentered 0x00b7 +#define XK_cedilla 0x00b8 +#define XK_onesuperior 0x00b9 +#define XK_masculine 0x00ba +#define XK_guillemotright 0x00bb +#define XK_onequarter 0x00bc +#define XK_onehalf 0x00bd +#define XK_threequarters 0x00be +#define XK_questiondown 0x00bf +#define XK_Agrave 0x00c0 +#define XK_Aacute 0x00c1 +#define XK_Acircumflex 0x00c2 +#define XK_Atilde 0x00c3 +#define XK_Adiaeresis 0x00c4 +#define XK_Aring 0x00c5 +#define XK_AE 0x00c6 +#define XK_Ccedilla 0x00c7 +#define XK_Egrave 0x00c8 +#define XK_Eacute 0x00c9 +#define XK_Ecircumflex 0x00ca +#define XK_Ediaeresis 0x00cb +#define XK_Igrave 0x00cc +#define XK_Iacute 0x00cd +#define XK_Icircumflex 0x00ce +#define XK_Idiaeresis 0x00cf +#define XK_ETH 0x00d0 +#define XK_Ntilde 0x00d1 +#define XK_Ograve 0x00d2 +#define XK_Oacute 0x00d3 +#define XK_Ocircumflex 0x00d4 +#define XK_Otilde 0x00d5 +#define XK_Odiaeresis 0x00d6 +#define XK_multiply 0x00d7 +#define XK_Oslash 0x00d8 +#define XK_Ooblique 0x00d8 +#define XK_Ugrave 0x00d9 +#define XK_Uacute 0x00da +#define XK_Ucircumflex 0x00db +#define XK_Udiaeresis 0x00dc +#define XK_Yacute 0x00dd +#define XK_THORN 0x00de +#define XK_ssharp 0x00df +#define XK_agrave 0x00e0 +#define XK_aacute 0x00e1 +#define XK_acircumflex 0x00e2 +#define XK_atilde 0x00e3 +#define XK_adiaeresis 0x00e4 +#define XK_aring 0x00e5 +#define XK_ae 0x00e6 +#define XK_ccedilla 0x00e7 +#define XK_egrave 0x00e8 +#define XK_eacute 0x00e9 +#define XK_ecircumflex 0x00ea +#define XK_ediaeresis 0x00eb +#define XK_igrave 0x00ec +#define XK_iacute 0x00ed +#define XK_icircumflex 0x00ee +#define XK_idiaeresis 0x00ef +#define XK_eth 0x00f0 +#define XK_ntilde 0x00f1 +#define XK_ograve 0x00f2 +#define XK_oacute 0x00f3 +#define XK_ocircumflex 0x00f4 +#define XK_otilde 0x00f5 +#define XK_odiaeresis 0x00f6 +#define XK_division 0x00f7 +#define XK_oslash 0x00f8 +#define XK_ooblique 0x00f8 +#define XK_ugrave 0x00f9 +#define XK_uacute 0x00fa +#define XK_ucircumflex 0x00fb +#define XK_udiaeresis 0x00fc +#define XK_yacute 0x00fd +#define XK_thorn 0x00fe +#define XK_ydiaeresis 0x00ff + +#define XK_EuroSign 0x20ac + +#define XK_ISO_Level3_Shift 0xFE03 +#define XK_ISO_Left_Tab 0xFE20 + +#define XK_dead_grave 0xFE50 +#define XK_dead_acute 0xFE51 +#define XK_dead_circumflex 0xFE52 +#define XK_dead_tilde 0xFE53 + +#define XK_BackSpace 0xFF08 +#define XK_Tab 0xFF09 +#define XK_Linefeed 0xFF0A +#define XK_Clear 0xFF0B +#define XK_Return 0xFF0D +#define XK_Pause 0xFF13 +#define XK_Scroll_Lock 0xFF14 +#define XK_Sys_Req 0xFF15 +#define XK_Escape 0xFF1B + +#define XK_Delete 0xFFFF + +#define XK_Home 0xFF50 +#define XK_Left 0xFF51 +#define XK_Up 0xFF52 +#define XK_Right 0xFF53 +#define XK_Down 0xFF54 +#define XK_Page_Up 0xFF55 +#define XK_Page_Down 0xFF56 +#define XK_End 0xFF57 +#define XK_Begin 0xFF58 + +#define XK_Select 0xFF60 +#define XK_Print 0xFF61 +#define XK_Execute 0xFF62 +#define XK_Insert 0xFF63 +#define XK_Menu 0xff67 +#define XK_Cancel 0xFF69 +#define XK_Help 0xFF6A +#define XK_Break 0xFF6B +#define XK_Num_Lock 0xFF7F + +#define XK_KP_Space 0xFF80 +#define XK_KP_Tab 0xFF89 +#define XK_KP_Enter 0xFF8D + +#define XK_KP_Home 0xFF95 +#define XK_KP_Left 0xFF96 +#define XK_KP_Up 0xFF97 +#define XK_KP_Right 0xFF98 +#define XK_KP_Down 0xFF99 +#define XK_KP_Prior 0xFF9A +#define XK_KP_Page_Up 0xFF9A +#define XK_KP_Next 0xFF9B +#define XK_KP_Page_Down 0xFF9B +#define XK_KP_End 0xFF9C +#define XK_KP_Begin 0xFF9D +#define XK_KP_Insert 0xFF9E +#define XK_KP_Delete 0xFF9F +#define XK_KP_Equal 0xFFBD +#define XK_KP_Multiply 0xFFAA +#define XK_KP_Add 0xFFAB +#define XK_KP_Separator 0xFFAC +#define XK_KP_Subtract 0xFFAD +#define XK_KP_Decimal 0xFFAE +#define XK_KP_Divide 0xFFAF + +#define XK_KP_F1 0xFF91 +#define XK_KP_F2 0xFF92 +#define XK_KP_F3 0xFF93 +#define XK_KP_F4 0xFF94 + +#define XK_KP_0 0xFFB0 +#define XK_KP_1 0xFFB1 +#define XK_KP_2 0xFFB2 +#define XK_KP_3 0xFFB3 +#define XK_KP_4 0xFFB4 +#define XK_KP_5 0xFFB5 +#define XK_KP_6 0xFFB6 +#define XK_KP_7 0xFFB7 +#define XK_KP_8 0xFFB8 +#define XK_KP_9 0xFFB9 + +#define XK_F1 0xFFBE +#define XK_F2 0xFFBF +#define XK_F3 0xFFC0 +#define XK_F4 0xFFC1 +#define XK_F5 0xFFC2 +#define XK_F6 0xFFC3 +#define XK_F7 0xFFC4 +#define XK_F8 0xFFC5 +#define XK_F9 0xFFC6 +#define XK_F10 0xFFC7 +#define XK_F11 0xFFC8 +#define XK_F12 0xFFC9 + +#define XK_Shift_L 0xFFE1 +#define XK_Shift_R 0xFFE2 +#define XK_Control_L 0xFFE3 +#define XK_Control_R 0xFFE4 +#define XK_Caps_Lock 0xFFE5 +#define XK_Shift_Lock 0xFFE6 +#define XK_Meta_L 0xFFE7 +#define XK_Meta_R 0xFFE8 +#define XK_Alt_L 0xFFE9 +#define XK_Alt_R 0xFFEA +#define XK_Super_L 0xFFEB +#define XK_Super_R 0xFFEC + +/// key mapping for rfb +typedef struct { + const char *name; + Bit32u value; +} rfbKeyTabEntry; + +#define DEF_RFB_KEY(key) \ + { #key, key }, + +rfbKeyTabEntry rfb_keytable[] = { + // this include provides all the entries. + DEF_RFB_KEY(XK_space) + DEF_RFB_KEY(XK_exclam) + DEF_RFB_KEY(XK_quotedbl) + DEF_RFB_KEY(XK_numbersign) + DEF_RFB_KEY(XK_dollar) + DEF_RFB_KEY(XK_percent) + DEF_RFB_KEY(XK_ampersand) + DEF_RFB_KEY(XK_apostrophe) + DEF_RFB_KEY(XK_parenleft) + DEF_RFB_KEY(XK_parenright) + DEF_RFB_KEY(XK_asterisk) + DEF_RFB_KEY(XK_plus) + DEF_RFB_KEY(XK_comma) + DEF_RFB_KEY(XK_minus) + DEF_RFB_KEY(XK_period) + DEF_RFB_KEY(XK_slash) + DEF_RFB_KEY(XK_0) + DEF_RFB_KEY(XK_1) + DEF_RFB_KEY(XK_2) + DEF_RFB_KEY(XK_3) + DEF_RFB_KEY(XK_4) + DEF_RFB_KEY(XK_5) + DEF_RFB_KEY(XK_6) + DEF_RFB_KEY(XK_7) + DEF_RFB_KEY(XK_8) + DEF_RFB_KEY(XK_9) + DEF_RFB_KEY(XK_colon) + DEF_RFB_KEY(XK_semicolon) + DEF_RFB_KEY(XK_less) + DEF_RFB_KEY(XK_equal) + DEF_RFB_KEY(XK_greater) + DEF_RFB_KEY(XK_question) + DEF_RFB_KEY(XK_at) + DEF_RFB_KEY(XK_A) + DEF_RFB_KEY(XK_B) + DEF_RFB_KEY(XK_C) + DEF_RFB_KEY(XK_D) + DEF_RFB_KEY(XK_E) + DEF_RFB_KEY(XK_F) + DEF_RFB_KEY(XK_G) + DEF_RFB_KEY(XK_H) + DEF_RFB_KEY(XK_I) + DEF_RFB_KEY(XK_J) + DEF_RFB_KEY(XK_K) + DEF_RFB_KEY(XK_L) + DEF_RFB_KEY(XK_M) + DEF_RFB_KEY(XK_N) + DEF_RFB_KEY(XK_O) + DEF_RFB_KEY(XK_P) + DEF_RFB_KEY(XK_Q) + DEF_RFB_KEY(XK_R) + DEF_RFB_KEY(XK_S) + DEF_RFB_KEY(XK_T) + DEF_RFB_KEY(XK_U) + DEF_RFB_KEY(XK_V) + DEF_RFB_KEY(XK_W) + DEF_RFB_KEY(XK_X) + DEF_RFB_KEY(XK_Y) + DEF_RFB_KEY(XK_Z) + DEF_RFB_KEY(XK_bracketleft) + DEF_RFB_KEY(XK_backslash) + DEF_RFB_KEY(XK_bracketright) + DEF_RFB_KEY(XK_asciicircum) + DEF_RFB_KEY(XK_underscore) + DEF_RFB_KEY(XK_grave) + DEF_RFB_KEY(XK_a) + DEF_RFB_KEY(XK_b) + DEF_RFB_KEY(XK_c) + DEF_RFB_KEY(XK_d) + DEF_RFB_KEY(XK_e) + DEF_RFB_KEY(XK_f) + DEF_RFB_KEY(XK_g) + DEF_RFB_KEY(XK_h) + DEF_RFB_KEY(XK_i) + DEF_RFB_KEY(XK_j) + DEF_RFB_KEY(XK_k) + DEF_RFB_KEY(XK_l) + DEF_RFB_KEY(XK_m) + DEF_RFB_KEY(XK_n) + DEF_RFB_KEY(XK_o) + DEF_RFB_KEY(XK_p) + DEF_RFB_KEY(XK_q) + DEF_RFB_KEY(XK_r) + DEF_RFB_KEY(XK_s) + DEF_RFB_KEY(XK_t) + DEF_RFB_KEY(XK_u) + DEF_RFB_KEY(XK_v) + DEF_RFB_KEY(XK_w) + DEF_RFB_KEY(XK_x) + DEF_RFB_KEY(XK_y) + DEF_RFB_KEY(XK_z) + DEF_RFB_KEY(XK_braceleft) + DEF_RFB_KEY(XK_bar) + DEF_RFB_KEY(XK_braceright) + DEF_RFB_KEY(XK_asciitilde) + DEF_RFB_KEY(XK_nobreakspace) + DEF_RFB_KEY(XK_exclamdown) + DEF_RFB_KEY(XK_cent) + DEF_RFB_KEY(XK_sterling) + DEF_RFB_KEY(XK_currency) + DEF_RFB_KEY(XK_yen) + DEF_RFB_KEY(XK_brokenbar) + DEF_RFB_KEY(XK_section) + DEF_RFB_KEY(XK_diaeresis) + DEF_RFB_KEY(XK_copyright) + DEF_RFB_KEY(XK_ordfeminine) + DEF_RFB_KEY(XK_guillemotleft) + DEF_RFB_KEY(XK_notsign) + DEF_RFB_KEY(XK_hyphen) + DEF_RFB_KEY(XK_registered) + DEF_RFB_KEY(XK_macron) + DEF_RFB_KEY(XK_degree) + DEF_RFB_KEY(XK_plusminus) + DEF_RFB_KEY(XK_twosuperior) + DEF_RFB_KEY(XK_threesuperior) + DEF_RFB_KEY(XK_acute) + DEF_RFB_KEY(XK_mu) + DEF_RFB_KEY(XK_paragraph) + DEF_RFB_KEY(XK_periodcentered) + DEF_RFB_KEY(XK_cedilla) + DEF_RFB_KEY(XK_onesuperior) + DEF_RFB_KEY(XK_masculine) + DEF_RFB_KEY(XK_guillemotright) + DEF_RFB_KEY(XK_onequarter) + DEF_RFB_KEY(XK_onehalf) + DEF_RFB_KEY(XK_threequarters) + DEF_RFB_KEY(XK_questiondown) + DEF_RFB_KEY(XK_Agrave) + DEF_RFB_KEY(XK_Aacute) + DEF_RFB_KEY(XK_Acircumflex) + DEF_RFB_KEY(XK_Atilde) + DEF_RFB_KEY(XK_Adiaeresis) + DEF_RFB_KEY(XK_Aring) + DEF_RFB_KEY(XK_AE) + DEF_RFB_KEY(XK_Ccedilla) + DEF_RFB_KEY(XK_Egrave) + DEF_RFB_KEY(XK_Eacute) + DEF_RFB_KEY(XK_Ecircumflex) + DEF_RFB_KEY(XK_Ediaeresis) + DEF_RFB_KEY(XK_Igrave) + DEF_RFB_KEY(XK_Iacute) + DEF_RFB_KEY(XK_Icircumflex) + DEF_RFB_KEY(XK_Idiaeresis) + DEF_RFB_KEY(XK_ETH) + DEF_RFB_KEY(XK_Ntilde) + DEF_RFB_KEY(XK_Ograve) + DEF_RFB_KEY(XK_Oacute) + DEF_RFB_KEY(XK_Ocircumflex) + DEF_RFB_KEY(XK_Otilde) + DEF_RFB_KEY(XK_Odiaeresis) + DEF_RFB_KEY(XK_multiply) + DEF_RFB_KEY(XK_Oslash) + DEF_RFB_KEY(XK_Ooblique) + DEF_RFB_KEY(XK_Ugrave) + DEF_RFB_KEY(XK_Uacute) + DEF_RFB_KEY(XK_Ucircumflex) + DEF_RFB_KEY(XK_Udiaeresis) + DEF_RFB_KEY(XK_Yacute) + DEF_RFB_KEY(XK_THORN) + DEF_RFB_KEY(XK_ssharp) + DEF_RFB_KEY(XK_agrave) + DEF_RFB_KEY(XK_aacute) + DEF_RFB_KEY(XK_acircumflex) + DEF_RFB_KEY(XK_atilde) + DEF_RFB_KEY(XK_adiaeresis) + DEF_RFB_KEY(XK_aring) + DEF_RFB_KEY(XK_ae) + DEF_RFB_KEY(XK_ccedilla) + DEF_RFB_KEY(XK_egrave) + DEF_RFB_KEY(XK_eacute) + DEF_RFB_KEY(XK_ecircumflex) + DEF_RFB_KEY(XK_ediaeresis) + DEF_RFB_KEY(XK_igrave) + DEF_RFB_KEY(XK_iacute) + DEF_RFB_KEY(XK_icircumflex) + DEF_RFB_KEY(XK_idiaeresis) + DEF_RFB_KEY(XK_eth) + DEF_RFB_KEY(XK_ntilde) + DEF_RFB_KEY(XK_ograve) + DEF_RFB_KEY(XK_oacute) + DEF_RFB_KEY(XK_ocircumflex) + DEF_RFB_KEY(XK_otilde) + DEF_RFB_KEY(XK_odiaeresis) + DEF_RFB_KEY(XK_division) + DEF_RFB_KEY(XK_oslash) + DEF_RFB_KEY(XK_ooblique) + DEF_RFB_KEY(XK_ugrave) + DEF_RFB_KEY(XK_uacute) + DEF_RFB_KEY(XK_ucircumflex) + DEF_RFB_KEY(XK_udiaeresis) + DEF_RFB_KEY(XK_yacute) + DEF_RFB_KEY(XK_thorn) + DEF_RFB_KEY(XK_ydiaeresis) + DEF_RFB_KEY(XK_EuroSign) + DEF_RFB_KEY(XK_ISO_Level3_Shift) + DEF_RFB_KEY(XK_ISO_Left_Tab) + DEF_RFB_KEY(XK_dead_grave) + DEF_RFB_KEY(XK_dead_acute) + DEF_RFB_KEY(XK_dead_circumflex) + DEF_RFB_KEY(XK_dead_tilde) + DEF_RFB_KEY(XK_BackSpace) + DEF_RFB_KEY(XK_Tab) + DEF_RFB_KEY(XK_Linefeed) + DEF_RFB_KEY(XK_Clear) + DEF_RFB_KEY(XK_Return) + DEF_RFB_KEY(XK_Pause) + DEF_RFB_KEY(XK_Scroll_Lock) + DEF_RFB_KEY(XK_Sys_Req) + DEF_RFB_KEY(XK_Escape) + DEF_RFB_KEY(XK_Delete) + DEF_RFB_KEY(XK_Home) + DEF_RFB_KEY(XK_Left) + DEF_RFB_KEY(XK_Up) + DEF_RFB_KEY(XK_Right) + DEF_RFB_KEY(XK_Down) + DEF_RFB_KEY(XK_Page_Up) + DEF_RFB_KEY(XK_Page_Down) + DEF_RFB_KEY(XK_End) + DEF_RFB_KEY(XK_Begin) + DEF_RFB_KEY(XK_Select) + DEF_RFB_KEY(XK_Print) + DEF_RFB_KEY(XK_Execute) + DEF_RFB_KEY(XK_Insert) + DEF_RFB_KEY(XK_Menu) + DEF_RFB_KEY(XK_Cancel) + DEF_RFB_KEY(XK_Help) + DEF_RFB_KEY(XK_Break) + DEF_RFB_KEY(XK_Num_Lock) + DEF_RFB_KEY(XK_KP_Space) + DEF_RFB_KEY(XK_KP_Tab) + DEF_RFB_KEY(XK_KP_Enter) + DEF_RFB_KEY(XK_KP_Home) + DEF_RFB_KEY(XK_KP_Left) + DEF_RFB_KEY(XK_KP_Up) + DEF_RFB_KEY(XK_KP_Right) + DEF_RFB_KEY(XK_KP_Down) + DEF_RFB_KEY(XK_KP_Prior) + DEF_RFB_KEY(XK_KP_Page_Up) + DEF_RFB_KEY(XK_KP_Next) + DEF_RFB_KEY(XK_KP_Page_Down) + DEF_RFB_KEY(XK_KP_End) + DEF_RFB_KEY(XK_KP_Begin) + DEF_RFB_KEY(XK_KP_Insert) + DEF_RFB_KEY(XK_KP_Delete) + DEF_RFB_KEY(XK_KP_Equal) + DEF_RFB_KEY(XK_KP_Multiply) + DEF_RFB_KEY(XK_KP_Add) + DEF_RFB_KEY(XK_KP_Separator) + DEF_RFB_KEY(XK_KP_Subtract) + DEF_RFB_KEY(XK_KP_Decimal) + DEF_RFB_KEY(XK_KP_Divide) + DEF_RFB_KEY(XK_KP_F1) + DEF_RFB_KEY(XK_KP_F2) + DEF_RFB_KEY(XK_KP_F3) + DEF_RFB_KEY(XK_KP_F4) + DEF_RFB_KEY(XK_KP_0) + DEF_RFB_KEY(XK_KP_1) + DEF_RFB_KEY(XK_KP_2) + DEF_RFB_KEY(XK_KP_3) + DEF_RFB_KEY(XK_KP_4) + DEF_RFB_KEY(XK_KP_5) + DEF_RFB_KEY(XK_KP_6) + DEF_RFB_KEY(XK_KP_7) + DEF_RFB_KEY(XK_KP_8) + DEF_RFB_KEY(XK_KP_9) + DEF_RFB_KEY(XK_F1) + DEF_RFB_KEY(XK_F2) + DEF_RFB_KEY(XK_F3) + DEF_RFB_KEY(XK_F4) + DEF_RFB_KEY(XK_F5) + DEF_RFB_KEY(XK_F6) + DEF_RFB_KEY(XK_F7) + DEF_RFB_KEY(XK_F8) + DEF_RFB_KEY(XK_F9) + DEF_RFB_KEY(XK_F10) + DEF_RFB_KEY(XK_F11) + DEF_RFB_KEY(XK_F12) + DEF_RFB_KEY(XK_Shift_L) + DEF_RFB_KEY(XK_Shift_R) + DEF_RFB_KEY(XK_Control_L) + DEF_RFB_KEY(XK_Control_R) + DEF_RFB_KEY(XK_Caps_Lock) + DEF_RFB_KEY(XK_Shift_Lock) + DEF_RFB_KEY(XK_Meta_L) + DEF_RFB_KEY(XK_Meta_R) + DEF_RFB_KEY(XK_Alt_L) + DEF_RFB_KEY(XK_Alt_R) + DEF_RFB_KEY(XK_Super_L) + DEF_RFB_KEY(XK_Super_R) + // one final entry to mark the end + { NULL, 0 } +}; diff --git a/bochs/gui/sdl.cc b/bochs/gui/sdl.cc new file mode 100644 index 00000000..ce6669a3 --- /dev/null +++ b/bochs/gui/sdl.cc @@ -0,0 +1,1661 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +#define _MULTI_THREAD + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "bochs.h" +#include "param_names.h" +#include "keymap.h" +#include "iodev.h" +#if BX_WITH_SDL + +#include +#include +#include +#include + +#include "icon_bochs.h" +#include "sdl.h" +#ifdef WIN32 +#include "win32dialog.h" +#endif + +class bx_sdl_gui_c : public bx_gui_c { +public: + bx_sdl_gui_c() {} + DECLARE_GUI_VIRTUAL_METHODS() + DECLARE_GUI_NEW_VIRTUAL_METHODS() + virtual void set_display_mode(disp_mode_t newmode); + virtual void statusbar_setitem(int element, bx_bool active, bx_bool w = 0); +#if BX_SHOW_IPS + virtual void show_ips(Bit32u ips_count); +#endif +}; + +void sdl_set_status_text(int element, const char *text, bx_bool active, bx_bool w = 0); + +// declare one instance of the gui object and call macro to insert the +// plugin code +static bx_sdl_gui_c *theGui = NULL; +IMPLEMENT_GUI_PLUGIN_CODE(sdl) + +#define LOG_THIS theGui-> + +#if SDL_BYTEORDER == SDL_BIG_ENDIAN +const Uint32 status_led_green = 0x00ff0000; +const Uint32 status_gray_text = 0x80808000; +const Uint32 status_led_red = 0x0040ff00; +#else +const Uint32 status_led_green = 0x0000ff00; +const Uint32 status_gray_text = 0x00808080; +const Uint32 status_led_red = 0x00ff4000; +#endif + +static unsigned prev_cursor_x=0; +static unsigned prev_cursor_y=0; +static Bit32u convertStringToSDLKey (const char *string); + +#define MAX_SDL_BITMAPS 32 +struct bitmaps { + SDL_Surface *surface; + SDL_Rect src,dst; + void (*cb)(void); +}; + +static struct { + unsigned bmp_id; + unsigned alignment; + void (*f)(void); +} hb_entry[BX_MAX_HEADERBAR_ENTRIES]; + +unsigned bx_headerbar_entries = 0; + +SDL_Thread *sdl_thread; +SDL_Surface *sdl_screen, *sdl_fullscreen; +SDL_Event sdl_event; +int sdl_fullscreen_toggle; +int sdl_grab; +unsigned res_x, res_y; +unsigned half_res_x, half_res_y; +int headerbar_height; +static unsigned bx_bitmap_left_xorigin = 0; // pixels from left +static unsigned bx_bitmap_right_xorigin = 0; // pixels from right +static unsigned int text_rows = 25, text_cols = 80; +Bit8u h_panning = 0, v_panning = 0; +Bit16u line_compare = 1023; +int fontwidth = 8, fontheight = 16; +static unsigned vga_bpp=8; +unsigned tilewidth, tileheight; +unsigned char menufont[256][8]; +Uint32 palette[256]; +Uint32 headerbar_fg, headerbar_bg; +Bit8u old_mousebuttons=0, new_mousebuttons=0; +int old_mousex=0, new_mousex=0; +int old_mousey=0, new_mousey=0; +bx_bool just_warped = false; +bitmaps *sdl_bitmaps[MAX_SDL_BITMAPS]; +int n_sdl_bitmaps = 0; +int statusbar_height = 18; +static unsigned statusitem_pos[12] = { + 0, 170, 210, 250, 290, 330, 370, 410, 450, 490, 530, 570 +}; +static bx_bool statusitem_active[12]; +#if BX_SHOW_IPS +static bx_bool sdl_ips_update = 0; +static char sdl_ips_text[20]; +#endif + +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define SWAP16(X) (X) +#define SWAP32(X) (X) +#else +#define SWAP16(X) SDL_Swap16(X) +#define SWAP32(X) SDL_Swap32(X) +#endif + +static void headerbar_click(int x); + +#if !defined(WIN32) && BX_DEBUGGER && BX_DEBUGGER_GUI +BxEvent *sdl_notify_callback (void *unused, BxEvent *event); +static bxevent_handler old_callback = NULL; +static void *old_callback_arg = NULL; +#endif + +#if BX_SHOW_IPS +#if defined(__MINGW32__) || defined(_MSC_VER) + void bx_signal_handler(int); +#endif +#endif + + +void switch_to_windowed(void) +{ + SDL_Surface *tmp; + SDL_Rect src, dst; + src.x = 0; src.y = 0; + src.w = res_x; src.h = res_y; + dst.x = 0; dst.y = 0; + + tmp = SDL_CreateRGBSurface( + SDL_SWSURFACE, + res_x, + res_y, + 32, +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + 0xff000000, + 0x00ff0000, + 0x0000ff00, + 0x000000ff +#else + 0x000000ff, + 0x0000ff00, + 0x00ff0000, + 0xff000000 +#endif + ); + + SDL_BlitSurface(sdl_fullscreen,&src,tmp,&dst); + SDL_UpdateRect(tmp,0,0,res_x,res_y); + SDL_FreeSurface(sdl_fullscreen); + sdl_fullscreen = NULL; + + sdl_screen = SDL_SetVideoMode(res_x,res_y+headerbar_height+statusbar_height,32, SDL_SWSURFACE); + dst.y = headerbar_height; + SDL_BlitSurface(tmp,&src,sdl_screen,&dst); + SDL_UpdateRect(tmp,0,0,res_x,res_y+headerbar_height+statusbar_height); + SDL_FreeSurface(tmp); + + bx_gui->show_headerbar(); + SDL_ShowCursor(1); + if (sdl_grab==1) { + SDL_WM_GrabInput(SDL_GRAB_OFF); + + sdl_grab = 0; + bx_gui->toggle_mouse_enable(); + } + bx_gui->flush(); +} + +void switch_to_fullscreen(void) +{ + SDL_Surface *tmp; + SDL_Rect src, dst; + src.x = 0; src.y = headerbar_height; + src.w = res_x; src.h = res_y; + dst.x = 0; dst.y = 0; + + tmp = SDL_CreateRGBSurface( + SDL_SWSURFACE, + res_x, + res_y, + 32, +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + 0xff000000, + 0x00ff0000, + 0x0000ff00, + 0x000000ff +#else + 0x000000ff, + 0x0000ff00, + 0x00ff0000, + 0xff000000 +#endif + ); + + SDL_BlitSurface(sdl_screen,&src,tmp,&dst); + SDL_UpdateRect(tmp,0,0,res_x,res_y); + SDL_FreeSurface(sdl_screen); + sdl_screen = NULL; + + sdl_fullscreen = SDL_SetVideoMode(res_x,res_y,32, SDL_HWSURFACE|SDL_FULLSCREEN); + src.y = 0; + SDL_BlitSurface(tmp,&src,sdl_fullscreen,&dst); + SDL_UpdateRect(tmp,0,0,res_x,res_y); + SDL_FreeSurface(tmp); + + SDL_ShowCursor(0); + if (sdl_grab==0) { + SDL_WM_GrabInput(SDL_GRAB_ON); + sdl_grab = 1; + bx_gui->toggle_mouse_enable(); + } + bx_gui->flush(); +} + +#if BX_SHOW_IPS +#if defined(__MINGW32__) || defined(_MSC_VER) +Uint32 SDLCALL sdlTimer(Uint32 interval) +{ + bx_signal_handler(SIGALRM); + return interval; +} +#endif +#endif + +#ifdef __MORPHOS__ +void bx_sdl_morphos_exit(void) +{ + SDL_Quit(); + if (PowerSDLBase) CloseLibrary(PowerSDLBase); +} +#endif + +void bx_sdl_gui_c::specific_init(int argc, char **argv, + unsigned x_tilesize, + unsigned y_tilesize, + unsigned header_bar_y) +{ + int i,j; + Uint32 flags; + bx_bool gui_ci; + + gui_ci = !strcmp(SIM->get_param_enum(BXPN_SEL_CONFIG_INTERFACE)->get_selected(), "win32config"); + put("SDL"); + + UNUSED(bochs_icon_bits); + + tilewidth = x_tilesize; + tileheight = y_tilesize; + headerbar_height = header_bar_y; + + for(i=0;i<256;i++) + for(j=0;j<16;j++) + vga_charmap[i*32+j] = sdl_font8x16[i][j]; + + for(i=0;i<256;i++) + for(j=0;j<8;j++) + menufont[i][j] = sdl_font8x8[i][j]; + + #ifdef __MORPHOS__ + if (!(PowerSDLBase=OpenLibrary("powersdl.library",0))) + { + LOG_THIS setonoff(LOGLEVEL_PANIC, ACT_FATAL); + BX_PANIC(("Unable to open SDL libraries")); + return; + } + #endif + + flags = SDL_INIT_VIDEO; +#if BX_SHOW_IPS +#if defined(__MINGW32__) || defined(_MSC_VER) + flags |= SDL_INIT_TIMER; +#endif +#endif + if (SDL_Init(flags) < 0) { + LOG_THIS setonoff(LOGLEV_PANIC, ACT_FATAL); + BX_PANIC(("Unable to initialize SDL libraries")); + return; + } + #ifdef __MORPHOS__ + atexit(bx_sdl_morphos_exit); + #else + atexit(SDL_Quit); + #endif + + sdl_screen = NULL; + sdl_fullscreen_toggle = 0; + dimension_update(640,480); + + SDL_EnableKeyRepeat(250,50); + SDL_WM_SetCaption(BOCHS_WINDOW_NAME, "Bochs"); + SDL_WarpMouse(half_res_x, half_res_y); + + // load keymap for sdl + if (SIM->get_param_bool(BXPN_KBD_USEMAPPING)->get()) { + bx_keymap.loadKeymap(convertStringToSDLKey); + } + + // parse sdl specific options + if (argc > 1) { + for (i = 1; i < argc; i++) { + if (!strcmp(argv[i], "fullscreen")) { + sdl_fullscreen_toggle = 1; + switch_to_fullscreen(); +#if !defined(WIN32) && BX_DEBUGGER && BX_DEBUGGER_GUI + } else if (!strcmp(argv[i], "gui_debug")) { + extern void InitDebugDialog(); + SIM->set_debug_gui(1); + // redirect notify callback to sdl specific code + SIM->get_notify_callback (&old_callback, &old_callback_arg); + assert (old_callback != NULL); + SIM->set_notify_callback (sdl_notify_callback, NULL); + InitDebugDialog(); +#endif + } else { + BX_PANIC(("Unknown sdl option '%s'", argv[i])); + } + } + } + + new_gfx_api = 1; +#ifdef WIN32 + if (gui_ci) { + dialog_caps = BX_GUI_DLG_ALL; + } +#if BX_SHOW_IPS + SDL_SetTimer(1000, sdlTimer); +#endif +#endif +} + +void sdl_set_status_text(int element, const char *text, bx_bool active, bx_bool w) +{ + Uint32 *buf, *buf_row; + Uint32 disp, fgcolor, bgcolor; + unsigned char *pfont_row, font_row; + int rowsleft = statusbar_height - 2; + int colsleft, textlen; + int x, xleft, xsize; + + statusitem_active[element] = active; + if(!sdl_screen) return; + disp = sdl_screen->pitch/4; + xleft = statusitem_pos[element] + 2; + xsize = statusitem_pos[element+1] - xleft - 1; + buf = (Uint32 *)sdl_screen->pixels + (res_y + headerbar_height + 1) * disp + xleft; + rowsleft = statusbar_height - 2; + fgcolor = active?headerbar_fg:status_gray_text; + if (element > 0) { + bgcolor = active?(w?status_led_red:status_led_green):headerbar_bg; + } else { + bgcolor = headerbar_bg; + } + do { + colsleft = xsize; + buf_row = buf; + do + { + *buf++ = bgcolor; + } while(--colsleft); + buf = buf_row + disp; + } while(--rowsleft); + if ((element > 0) && (strlen(text) > 4)) { + textlen = 4; + } else { + textlen = strlen(text); + } + buf = (Uint32 *)sdl_screen->pixels + (res_y + headerbar_height + 5) * disp + xleft; + x = 0; + do + { + pfont_row = &menufont[(unsigned)text[x]][0]; + buf_row = buf; + rowsleft = 8; + do + { + font_row = *pfont_row++; + colsleft = 8; + do + { + if((font_row & 0x80) != 0x00) + *buf++ = fgcolor; + else + buf++; + font_row <<= 1; + } while(--colsleft); + buf += (disp - 8); + } while(--rowsleft); + buf = buf_row + 8; + x++; + } while (--textlen); + SDL_UpdateRect(sdl_screen, xleft,res_y+headerbar_height+1,xsize,statusbar_height-2); +} + +void bx_sdl_gui_c::statusbar_setitem(int element, bx_bool active, bx_bool w) +{ + if (element < 0) { + for (unsigned i = 0; i < statusitem_count; i++) { + sdl_set_status_text(i+1, statusitem_text[i], active, w); + } + } else if ((unsigned)element < statusitem_count) { + sdl_set_status_text(element+1, statusitem_text[element], active, w); + } +} + +void bx_sdl_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, + unsigned long cursor_x, + unsigned long cursor_y, + bx_vga_tminfo_t tm_info) +{ + Bit8u *pfont_row, *old_line, *new_line, *text_base; + unsigned int cs_y, i, x, y; + unsigned int curs, hchars, offset; + Bit8u fontline, fontpixels, fontrows; + int rows; + Uint32 fgcolor, bgcolor; + Uint32 *buf, *buf_row, *buf_char; + Uint32 disp; + Bit16u font_row, mask; + Bit8u cfstart, cfwidth, cfheight, split_fontrows, split_textrow; + bx_bool cursor_visible, gfxcharw9, invert, forceUpdate, split_screen; + bx_bool blink_mode, blink_state; + Uint32 text_palette[16]; + + forceUpdate = 0; + blink_mode = (tm_info.blink_flags & BX_TEXT_BLINK_MODE) > 0; + blink_state = (tm_info.blink_flags & BX_TEXT_BLINK_STATE) > 0; + if (blink_mode) { + if (tm_info.blink_flags & BX_TEXT_BLINK_TOGGLE) + forceUpdate = 1; + } + if (charmap_updated) { + forceUpdate = 1; + charmap_updated = 0; + } + for (i=0; i<16; i++) { + text_palette[i] = palette[DEV_vga_get_actl_pal_idx(i)]; + } + if ((tm_info.h_panning != h_panning) || (tm_info.v_panning != v_panning)) { + forceUpdate = 1; + h_panning = tm_info.h_panning; + v_panning = tm_info.v_panning; + } + if (tm_info.line_compare != line_compare) { + forceUpdate = 1; + line_compare = tm_info.line_compare; + } + if (sdl_screen) { + disp = sdl_screen->pitch/4; + buf_row = (Uint32 *)sdl_screen->pixels + headerbar_height*disp; + } else { + disp = sdl_fullscreen->pitch/4; + buf_row = (Uint32 *)sdl_fullscreen->pixels; + } + // first invalidate character at previous and new cursor location + if ((prev_cursor_y < text_rows) && (prev_cursor_x < text_cols)) { + curs = prev_cursor_y * tm_info.line_offset + prev_cursor_x * 2; + old_text[curs] = ~new_text[curs]; + } + cursor_visible = ((tm_info.cs_start <= tm_info.cs_end) && (tm_info.cs_start < fontheight)); + if((cursor_visible) && (cursor_y < text_rows) && (cursor_x < text_cols)) { + curs = cursor_y * tm_info.line_offset + cursor_x * 2; + old_text[curs] = ~new_text[curs]; + } else { + curs = 0xffff; + } + + rows = text_rows; + if (v_panning) rows++; + y = 0; + cs_y = 0; + text_base = new_text - tm_info.start_address; + if (line_compare < res_y) { + split_textrow = (line_compare + v_panning) / fontheight; + split_fontrows = ((line_compare + v_panning) % fontheight) + 1; + } else { + split_textrow = rows + 1; + split_fontrows = 0; + } + split_screen = 0; + + do { + buf = buf_row; + hchars = text_cols; + if (h_panning) hchars++; + cfheight = fontheight; + cfstart = 0; + if (split_screen) + { + if (rows == 1) + { + cfheight = (res_y - line_compare - 1) % fontheight; + if (cfheight == 0) cfheight = fontheight; + } + } + else if (v_panning) + { + if (y == 0) + { + cfheight -= v_panning; + cfstart = v_panning; + } + else if (rows == 1) + { + cfheight = v_panning; + } + } + if (!split_screen && (y == split_textrow)) + { + if ((split_fontrows - cfstart) < cfheight) + { + cfheight = split_fontrows - cfstart; + } + } + new_line = new_text; + old_line = old_text; + x = 0; + offset = cs_y * tm_info.line_offset; + do + { + cfwidth = fontwidth; + if (h_panning) + { + if (hchars > text_cols) + { + cfwidth -= h_panning; + } + else if (hchars == 1) + { + cfwidth = h_panning; + } + } + // check if char needs to be updated + if(forceUpdate || (old_text[0] != new_text[0]) + || (old_text[1] != new_text[1])) + { + + // Get Foreground/Background pixel colors + fgcolor = text_palette[new_text[1] & 0x0F]; + if (blink_mode) { + bgcolor = text_palette[(new_text[1] >> 4) & 0x07]; + if (!blink_state && (new_text[1] & 0x80)) + fgcolor = bgcolor; + } else { + bgcolor = text_palette[(new_text[1] >> 4) & 0x0F]; + } + invert = ((offset == curs) && (cursor_visible)); + gfxcharw9 = ((tm_info.line_graphics) && ((new_text[0] & 0xE0) == 0xC0)); + + // Display this one char + fontrows = cfheight; + fontline = cfstart; + if (y > 0) + { + pfont_row = &vga_charmap[(new_text[0] << 5)]; + } + else + { + pfont_row = &vga_charmap[(new_text[0] << 5) + cfstart]; + } + buf_char = buf; + do + { + font_row = *pfont_row++; + if (gfxcharw9) + { + font_row = (font_row << 1) | (font_row & 0x01); + } + else + { + font_row <<= 1; + } + if (hchars > text_cols) + { + font_row <<= h_panning; + } + fontpixels = cfwidth; + if ((invert) && (fontline >= tm_info.cs_start) && (fontline <= tm_info.cs_end)) + mask = 0x100; + else + mask = 0x00; + do + { + if ((font_row & 0x100) == mask) + *buf = bgcolor; + else + *buf = fgcolor; + buf++; + font_row <<= 1; + } while(--fontpixels); + buf -= cfwidth; + buf += disp; + fontline++; + } while(--fontrows); + + // restore output buffer ptr to start of this char + buf = buf_char; + } + // move to next char location on screen + buf += cfwidth; + + // select next char in old/new text + new_text+=2; + old_text+=2; + offset+=2; + x++; + + // process one entire horizontal row + } while(--hchars); + + // go to next character row location + buf_row += disp * cfheight; + if (!split_screen && (y == split_textrow)) + { + new_text = text_base; + forceUpdate = 1; + cs_y = 0; + if (tm_info.split_hpanning) h_panning = 0; + rows = ((res_y - line_compare + fontheight - 2) / fontheight) + 1; + split_screen = 1; + } + else + { + new_text = new_line + tm_info.line_offset; + old_text = old_line + tm_info.line_offset; + cs_y++; + y++; + } + } while(--rows); + h_panning = tm_info.h_panning; + prev_cursor_x = cursor_x; + prev_cursor_y = cursor_y; +} + +int bx_sdl_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) +{ + return 0; +} + +int bx_sdl_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) +{ + return 0; +} + +void bx_sdl_gui_c::graphics_tile_update(Bit8u *snapshot, unsigned x, unsigned y) +{ + Uint32 *buf, disp; + Uint32 *buf_row; + int i,j; + + if(sdl_screen) + { + disp = sdl_screen->pitch/4; + buf = (Uint32 *)sdl_screen->pixels + (headerbar_height+y)*disp + x; + } + else + { + disp = sdl_fullscreen->pitch/4; + buf = (Uint32 *)sdl_fullscreen->pixels + y*disp + x; + } + + i = tileheight; + if(i + y > res_y) i = res_y - y; + + // FIXME + if(i<=0) return; + + switch (vga_bpp) + { + case 8: /* 8 bpp */ + do + { + buf_row = buf; + j = tilewidth; + do + { + *buf++ = palette[*snapshot++]; + } while(--j); + buf = buf_row + disp; + } while(--i); + break; + default: + BX_PANIC(("%u bpp modes handled by new graphics API", vga_bpp)); + return; + } +} + +bx_svga_tileinfo_t *bx_sdl_gui_c::graphics_tile_info(bx_svga_tileinfo_t *info) +{ + if (!info) { + info = (bx_svga_tileinfo_t *)malloc(sizeof(bx_svga_tileinfo_t)); + if (!info) return NULL; + } + + if (sdl_screen) { + info->bpp = sdl_screen->format->BitsPerPixel; + info->pitch = sdl_screen->pitch; + info->red_shift = sdl_screen->format->Rshift + 8 - sdl_screen->format->Rloss; + info->green_shift = sdl_screen->format->Gshift + 8 - sdl_screen->format->Gloss; + info->blue_shift = sdl_screen->format->Bshift + 8 - sdl_screen->format->Bloss; + info->red_mask = sdl_screen->format->Rmask; + info->green_mask = sdl_screen->format->Gmask; + info->blue_mask = sdl_screen->format->Bmask; + info->is_indexed = (sdl_screen->format->palette != NULL); + } + else { + info->bpp = sdl_fullscreen->format->BitsPerPixel; + info->pitch = sdl_fullscreen->pitch; + info->red_shift = sdl_fullscreen->format->Rshift + 8 - sdl_fullscreen->format->Rloss; + info->green_shift = sdl_fullscreen->format->Gshift + 8 - sdl_fullscreen->format->Gloss; + info->blue_shift = sdl_fullscreen->format->Bshift + 8 - sdl_fullscreen->format->Bloss; + info->red_mask = sdl_fullscreen->format->Rmask; + info->green_mask = sdl_fullscreen->format->Gmask; + info->blue_mask = sdl_fullscreen->format->Bmask; + info->is_indexed = (sdl_fullscreen->format->palette != NULL); + } + +#ifdef BX_LITTLE_ENDIAN + info->is_little_endian = 1; +#else + info->is_little_endian = 0; +#endif + + return info; +} + +Bit8u *bx_sdl_gui_c::graphics_tile_get(unsigned x0, unsigned y0, unsigned *w, unsigned *h) +{ + if (x0+tilewidth > res_x) { + *w = res_x - x0; + } + else { + *w = tilewidth; + } + + if (y0+tileheight > res_y) { + *h = res_y - y0; + } + else { + *h = tileheight; + } + + if (sdl_screen) { + return (Bit8u *)sdl_screen->pixels + + sdl_screen->pitch*(headerbar_height+y0) + + sdl_screen->format->BytesPerPixel*x0; + } + else { + return (Bit8u *)sdl_fullscreen->pixels + + sdl_fullscreen->pitch*(y0) + + sdl_fullscreen->format->BytesPerPixel*x0; + } +} + +void bx_sdl_gui_c::graphics_tile_update_in_place(unsigned x0, unsigned y0, + unsigned w, unsigned h) +{ +} + +static Bit32u sdl_sym_to_bx_key (SDLKey sym) +{ + switch (sym) + { +// case SDLK_UNKNOWN: return BX_KEY_UNKNOWN; +// case SDLK_FIRST: return BX_KEY_FIRST; + case SDLK_BACKSPACE: return BX_KEY_BACKSPACE; + case SDLK_TAB: return BX_KEY_TAB; +// case SDLK_CLEAR: return BX_KEY_CLEAR; + case SDLK_RETURN: return BX_KEY_ENTER; + case SDLK_PAUSE: return BX_KEY_PAUSE; + case SDLK_ESCAPE: return BX_KEY_ESC; + case SDLK_SPACE: return BX_KEY_SPACE; +// case SDLK_EXCLAIM: return BX_KEY_EXCLAIM; +// case SDLK_QUOTEDBL: return BX_KEY_QUOTEDBL; +// case SDLK_HASH: return BX_KEY_HASH; +// case SDLK_DOLLAR: return BX_KEY_DOLLAR; +// case SDLK_AMPERSAND: return BX_KEY_AMPERSAND; + case SDLK_QUOTE: return BX_KEY_SINGLE_QUOTE; +// case SDLK_LEFTPAREN: return BX_KEY_LEFTPAREN; +// case SDLK_RIGHTPAREN: return BX_KEY_RIGHTPAREN; +// case SDLK_ASTERISK: return BX_KEY_ASTERISK; +// case SDLK_PLUS: return BX_KEY_PLUS; + case SDLK_COMMA: return BX_KEY_COMMA; + case SDLK_MINUS: return BX_KEY_MINUS; + case SDLK_PERIOD: return BX_KEY_PERIOD; + case SDLK_SLASH: return BX_KEY_SLASH; + case SDLK_0: return BX_KEY_0; + case SDLK_1: return BX_KEY_1; + case SDLK_2: return BX_KEY_2; + case SDLK_3: return BX_KEY_3; + case SDLK_4: return BX_KEY_4; + case SDLK_5: return BX_KEY_5; + case SDLK_6: return BX_KEY_6; + case SDLK_7: return BX_KEY_7; + case SDLK_8: return BX_KEY_8; + case SDLK_9: return BX_KEY_9; +// case SDLK_COLON: return BX_KEY_COLON; + case SDLK_SEMICOLON: return BX_KEY_SEMICOLON; +// case SDLK_LESS: return BX_KEY_LESS; + case SDLK_EQUALS: return BX_KEY_EQUALS; +// case SDLK_GREATER: return BX_KEY_GREATER; +// case SDLK_QUESTION: return BX_KEY_QUESTION; +// case SDLK_AT: return BX_KEY_AT; +/* + Skip uppercase letters +*/ + case SDLK_LEFTBRACKET: return BX_KEY_LEFT_BRACKET; + case SDLK_BACKSLASH: return BX_KEY_BACKSLASH; + case SDLK_RIGHTBRACKET: return BX_KEY_RIGHT_BRACKET; +// case SDLK_CARET: return BX_KEY_CARET; +// case SDLK_UNDERSCORE: return BX_KEY_UNDERSCORE; + case SDLK_BACKQUOTE: return BX_KEY_GRAVE; + case SDLK_a: return BX_KEY_A; + case SDLK_b: return BX_KEY_B; + case SDLK_c: return BX_KEY_C; + case SDLK_d: return BX_KEY_D; + case SDLK_e: return BX_KEY_E; + case SDLK_f: return BX_KEY_F; + case SDLK_g: return BX_KEY_G; + case SDLK_h: return BX_KEY_H; + case SDLK_i: return BX_KEY_I; + case SDLK_j: return BX_KEY_J; + case SDLK_k: return BX_KEY_K; + case SDLK_l: return BX_KEY_L; + case SDLK_m: return BX_KEY_M; + case SDLK_n: return BX_KEY_N; + case SDLK_o: return BX_KEY_O; + case SDLK_p: return BX_KEY_P; + case SDLK_q: return BX_KEY_Q; + case SDLK_r: return BX_KEY_R; + case SDLK_s: return BX_KEY_S; + case SDLK_t: return BX_KEY_T; + case SDLK_u: return BX_KEY_U; + case SDLK_v: return BX_KEY_V; + case SDLK_w: return BX_KEY_W; + case SDLK_x: return BX_KEY_X; + case SDLK_y: return BX_KEY_Y; + case SDLK_z: return BX_KEY_Z; + case SDLK_DELETE: return BX_KEY_DELETE; +/* End of ASCII mapped keysyms */ + +/* Numeric keypad */ + case SDLK_KP0: return BX_KEY_KP_INSERT; + case SDLK_KP1: return BX_KEY_KP_END; + case SDLK_KP2: return BX_KEY_KP_DOWN; + case SDLK_KP3: return BX_KEY_KP_PAGE_DOWN; + case SDLK_KP4: return BX_KEY_KP_LEFT; + case SDLK_KP5: return BX_KEY_KP_5; + case SDLK_KP6: return BX_KEY_KP_RIGHT; + case SDLK_KP7: return BX_KEY_KP_HOME; + case SDLK_KP8: return BX_KEY_KP_UP; + case SDLK_KP9: return BX_KEY_KP_PAGE_UP; + case SDLK_KP_PERIOD: return BX_KEY_KP_DELETE; + case SDLK_KP_DIVIDE: return BX_KEY_KP_DIVIDE; + case SDLK_KP_MULTIPLY: return BX_KEY_KP_MULTIPLY; + case SDLK_KP_MINUS: return BX_KEY_KP_SUBTRACT; + case SDLK_KP_PLUS: return BX_KEY_KP_ADD; + case SDLK_KP_ENTER: return BX_KEY_KP_ENTER; +// case SDLK_KP_EQUALS: return BX_KEY_KP_EQUALS; + +/* Arrows + Home/End pad */ + case SDLK_UP: return BX_KEY_UP; + case SDLK_DOWN: return BX_KEY_DOWN; + case SDLK_RIGHT: return BX_KEY_RIGHT; + case SDLK_LEFT: return BX_KEY_LEFT; + case SDLK_INSERT: return BX_KEY_INSERT; + case SDLK_HOME: return BX_KEY_HOME; + case SDLK_END: return BX_KEY_END; + case SDLK_PAGEUP: return BX_KEY_PAGE_UP; + case SDLK_PAGEDOWN: return BX_KEY_PAGE_DOWN; + +/* Function keys */ + case SDLK_F1: return BX_KEY_F1; + case SDLK_F2: return BX_KEY_F2; + case SDLK_F3: return BX_KEY_F3; + case SDLK_F4: return BX_KEY_F4; + case SDLK_F5: return BX_KEY_F5; + case SDLK_F6: return BX_KEY_F6; + case SDLK_F7: return BX_KEY_F7; + case SDLK_F8: return BX_KEY_F8; + case SDLK_F9: return BX_KEY_F9; + case SDLK_F10: return BX_KEY_F10; + case SDLK_F11: return BX_KEY_F11; + case SDLK_F12: return BX_KEY_F12; +// case SDLK_F13: return BX_KEY_F13; +// case SDLK_F14: return BX_KEY_F14; +// case SDLK_F15: return BX_KEY_F15; + +/* Key state modifier keys */ + case SDLK_NUMLOCK: return BX_KEY_NUM_LOCK; + case SDLK_CAPSLOCK: return BX_KEY_CAPS_LOCK; + case SDLK_SCROLLOCK: return BX_KEY_SCRL_LOCK; + case SDLK_RSHIFT: return BX_KEY_SHIFT_R; + case SDLK_LSHIFT: return BX_KEY_SHIFT_L; + case SDLK_RCTRL: return BX_KEY_CTRL_R; + case SDLK_LCTRL: return BX_KEY_CTRL_L; + case SDLK_RALT: return BX_KEY_ALT_R; + case SDLK_LALT: return BX_KEY_ALT_L; + case SDLK_RMETA: return BX_KEY_ALT_R; + case SDLK_LMETA: return BX_KEY_WIN_L; + case SDLK_LSUPER: return BX_KEY_WIN_L; + case SDLK_RSUPER: return BX_KEY_WIN_R; +// case SDLK_MODE: return BX_KEY_MODE; +// case SDLK_COMPOSE: return BX_KEY_COMPOSE; + +/* Miscellaneous function keys */ + case SDLK_PRINT: return BX_KEY_PRINT; + case SDLK_BREAK: return BX_KEY_PAUSE; + case SDLK_MENU: return BX_KEY_MENU; +#if 0 + case SDLK_HELP: return BX_KEY_HELP; + case SDLK_SYSREQ: return BX_KEY_SYSREQ; + case SDLK_POWER: return BX_KEY_POWER; + case SDLK_EURO: return BX_KEY_EURO; + case SDLK_UNDO: return BX_KEY_UNDO; +#endif + default: + BX_ERROR(("sdl keysym %d not mapped", (int)sym)); + return BX_KEY_UNHANDLED; + } +} + +void bx_sdl_gui_c::handle_events(void) +{ + Bit32u key_event; + Bit8u mouse_state; + int wheel_status; + bx_bool mouse_toggle = 0; + + while(SDL_PollEvent(&sdl_event)) + { + wheel_status = 0; + switch(sdl_event.type) + { + case SDL_VIDEOEXPOSE: + if(sdl_fullscreen_toggle == 0) + SDL_UpdateRect(sdl_screen, 0,0, res_x, res_y+headerbar_height+statusbar_height); + else + SDL_UpdateRect(sdl_fullscreen, 0, headerbar_height, res_x, res_y); + break; + + case SDL_MOUSEMOTION: + //fprintf (stderr, "mouse event to (%d,%d), relative (%d,%d)\n", (int)(sdl_event.motion.x), (int)(sdl_event.motion.y), (int)sdl_event.motion.xrel, (int)sdl_event.motion.yrel); + if (!sdl_grab) { + //fprintf (stderr, "ignore mouse event because sdl_grab is off\n"); + break; + } + if (just_warped + && sdl_event.motion.x == half_res_x + && sdl_event.motion.y == half_res_y) { + // This event was generated as a side effect of the WarpMouse, + // and it must be ignored. + //fprintf (stderr, "ignore mouse event because it is a side effect of SDL_WarpMouse\n"); + just_warped = false; + break; + } + //fprintf (stderr, "processing relative mouse event\n"); + new_mousebuttons = ((sdl_event.motion.state & 0x01)|((sdl_event.motion.state>>1)&0x02) + |((sdl_event.motion.state<<1)&0x04)); + DEV_mouse_motion_ext( + sdl_event.motion.xrel, + -sdl_event.motion.yrel, + wheel_status, + new_mousebuttons); + old_mousebuttons = new_mousebuttons; + old_mousex = (int)(sdl_event.motion.x); + old_mousey = (int)(sdl_event.motion.y); + //fprintf (stderr, "warping mouse to center\n"); + SDL_WarpMouse(half_res_x, half_res_y); + just_warped = 1; + break; + + case SDL_MOUSEBUTTONDOWN: + // mouse capture toggle-check + if ((sdl_event.button.button == SDL_BUTTON_MIDDLE) + && (sdl_fullscreen_toggle == 0)) { + if (mouse_toggle_check(BX_MT_MBUTTON, 1)) { + if (sdl_grab == 0) { + SDL_ShowCursor(0); + SDL_WM_GrabInput(SDL_GRAB_ON); + } else { + SDL_ShowCursor(1); + SDL_WM_GrabInput(SDL_GRAB_OFF); + } + sdl_grab = ~sdl_grab; + toggle_mouse_enable(); + } + break; + } else if (sdl_event.button.y < headerbar_height) { + headerbar_click(sdl_event.button.x); + break; + } +#ifdef SDL_BUTTON_WHEELUP + // get the wheel status + if (sdl_event.button.button == SDL_BUTTON_WHEELUP) { + wheel_status = 1; + } + if (sdl_event.button.button == SDL_BUTTON_WHEELDOWN) { + wheel_status = -1; + } +#endif + case SDL_MOUSEBUTTONUP: + if ((sdl_event.button.button == SDL_BUTTON_MIDDLE) + && (sdl_fullscreen_toggle == 0)) { + mouse_toggle_check(BX_MT_MBUTTON, 0); + } + // figure out mouse state + new_mousex = (int)(sdl_event.button.x); + new_mousey = (int)(sdl_event.button.y); + // SDL_GetMouseState() returns the state of all buttons + mouse_state = SDL_GetMouseState(NULL, NULL); + new_mousebuttons = + (mouse_state & 0x01) | + ((mouse_state>>1)&0x02) | + ((mouse_state<<1)&0x04); + // filter out middle button if not fullscreen + if(sdl_fullscreen_toggle == 0) + new_mousebuttons &= 0x07; + // send motion information + DEV_mouse_motion_ext( + new_mousex - old_mousex, + -(new_mousey - old_mousey), + wheel_status, + new_mousebuttons); + // mark current state to diff with next packet + old_mousebuttons = new_mousebuttons; + old_mousex = new_mousex; + old_mousey = new_mousey; + break; + + case SDL_KEYDOWN: + // mouse capture toggle-check + if (sdl_fullscreen_toggle == 0) { + if ((sdl_event.key.keysym.sym == SDLK_LCTRL) || + (sdl_event.key.keysym.sym == SDLK_RCTRL)) { + mouse_toggle = mouse_toggle_check(BX_MT_KEY_CTRL, 1); + } else if (sdl_event.key.keysym.sym == SDLK_LALT) { + mouse_toggle = mouse_toggle_check(BX_MT_KEY_ALT, 1); + } else if (sdl_event.key.keysym.sym == SDLK_F10) { + mouse_toggle = mouse_toggle_check(BX_MT_KEY_F10, 1); + } else if (sdl_event.key.keysym.sym == SDLK_F12) { + mouse_toggle = mouse_toggle_check(BX_MT_KEY_F12, 1); + } + if (mouse_toggle) { + toggle_mouse_enable(); + } + } + + // Windows/Fullscreen toggle-check + if (sdl_event.key.keysym.sym == SDLK_SCROLLOCK) { +// SDL_WM_ToggleFullScreen(sdl_screen); + sdl_fullscreen_toggle = ~sdl_fullscreen_toggle; + if(sdl_fullscreen_toggle == 0) + switch_to_windowed(); + else + switch_to_fullscreen(); + bx_gui->show_headerbar(); + bx_gui->flush(); + break; + } + + // convert sym->bochs code + if (sdl_event.key.keysym.sym > SDLK_LAST) break; + if (!SIM->get_param_bool(BXPN_KBD_USEMAPPING)->get()) { + key_event = sdl_sym_to_bx_key (sdl_event.key.keysym.sym); + BX_DEBUG(("keypress scancode=%d, sym=%d, bx_key = %d", sdl_event.key.keysym.scancode, sdl_event.key.keysym.sym, key_event)); + } else { + /* use mapping */ + BXKeyEntry *entry = bx_keymap.findHostKey (sdl_event.key.keysym.sym); + if (!entry) { + BX_ERROR(("host key %d (0x%x) not mapped!", + (unsigned) sdl_event.key.keysym.sym, + (unsigned) sdl_event.key.keysym.sym)); + break; + } + key_event = entry->baseKey; + } + if (key_event == BX_KEY_UNHANDLED) break; + DEV_kbd_gen_scancode( key_event); + if ((key_event == BX_KEY_NUM_LOCK) || (key_event == BX_KEY_CAPS_LOCK)) { + DEV_kbd_gen_scancode(key_event | BX_KEY_RELEASED); + } + break; + + case SDL_KEYUP: + + // mouse capture toggle-check + if ((sdl_event.key.keysym.sym == SDLK_LCTRL) || + (sdl_event.key.keysym.sym == SDLK_RCTRL)) { + mouse_toggle_check(BX_MT_KEY_CTRL, 0); + } else if (sdl_event.key.keysym.sym == SDLK_LALT) { + mouse_toggle_check(BX_MT_KEY_ALT, 0); + } else if (sdl_event.key.keysym.sym == SDLK_F10) { + mouse_toggle_check(BX_MT_KEY_F10, 0); + } else if (sdl_event.key.keysym.sym == SDLK_F12) { + mouse_toggle_check(BX_MT_KEY_F12, 0); + } + + // filter out release of Windows/Fullscreen toggle and unsupported keys + if ((sdl_event.key.keysym.sym != SDLK_SCROLLOCK) + && (sdl_event.key.keysym.sym < SDLK_LAST)) + { + // convert sym->bochs code + if (!SIM->get_param_bool(BXPN_KBD_USEMAPPING)->get()) { + key_event = sdl_sym_to_bx_key (sdl_event.key.keysym.sym); + } else { + /* use mapping */ + BXKeyEntry *entry = bx_keymap.findHostKey (sdl_event.key.keysym.sym); + if (!entry) { + BX_ERROR(("host key %d (0x%x) not mapped!", + (unsigned) sdl_event.key.keysym.sym, + (unsigned) sdl_event.key.keysym.sym)); + break; + } + key_event = entry->baseKey; + } + if (key_event == BX_KEY_UNHANDLED) break; + if ((key_event == BX_KEY_NUM_LOCK) || (key_event == BX_KEY_CAPS_LOCK)) { + DEV_kbd_gen_scancode(key_event); + } + DEV_kbd_gen_scancode(key_event | BX_KEY_RELEASED); + } + break; + + case SDL_QUIT: + LOG_THIS setonoff(LOGLEV_PANIC, ACT_FATAL); + BX_PANIC(("User requested shutdown.")); + } + } +#if BX_SHOW_IPS + if (sdl_ips_update) { + sdl_ips_update = 0; + sdl_set_status_text(0, sdl_ips_text, 1); + } +#endif +} + +void bx_sdl_gui_c::flush(void) +{ + if(sdl_screen) + SDL_UpdateRect(sdl_screen,0,0,res_x,res_y+headerbar_height); + else + SDL_UpdateRect(sdl_fullscreen,0,0,res_x,res_y); +} + +void bx_sdl_gui_c::clear_screen(void) +{ + int i = res_y, j; + Uint32 color; + Uint32 *buf, *buf_row; + Uint32 disp; + + if(sdl_screen) + { + color = SDL_MapRGB(sdl_screen->format, 0,0,0); + disp = sdl_screen->pitch/4; + buf = (Uint32 *)sdl_screen->pixels + headerbar_height*disp; + } + else if(sdl_fullscreen) + { + color = SDL_MapRGB(sdl_fullscreen->format, 0,0, 0); + disp = sdl_fullscreen->pitch/4; + buf = (Uint32 *)sdl_fullscreen->pixels; + } + else return; + + do + { + buf_row = buf; + j = res_x; + while(j--) *buf++ = color; + buf = buf_row + disp; + } while(--i); + + if(sdl_screen) + SDL_UpdateRect(sdl_screen,0,0,res_x,res_y+headerbar_height); + else + SDL_UpdateRect(sdl_fullscreen,0,0,res_x,res_y); +} + +bx_bool bx_sdl_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) +{ + unsigned char palred = red & 0xFF; + unsigned char palgreen = green & 0xFF; + unsigned char palblue = blue & 0xFF; + + if(index > 255) return 0; + + if(sdl_screen) + palette[index] = SDL_MapRGB(sdl_screen->format, palred, palgreen, palblue); + else if(sdl_fullscreen) + palette[index] = SDL_MapRGB(sdl_fullscreen->format, palred, palgreen, palblue); + + return 1; +} + +void bx_sdl_gui_c::dimension_update(unsigned x, unsigned y, + unsigned fheight, unsigned fwidth, unsigned bpp) +{ + if (bpp == 8 || bpp == 15 || bpp == 16 || bpp == 24 || bpp == 32) { + vga_bpp = bpp; + } + else + { + BX_PANIC(("%d bpp graphics mode not supported", bpp)); + } + if(fheight > 0) + { + fontheight = fheight; + fontwidth = fwidth; + text_cols = x / fontwidth; + text_rows = y / fontheight; + } + + if((x == res_x) && (y == res_y)) return; + + if(sdl_screen) + { + SDL_FreeSurface(sdl_screen); + sdl_screen = NULL; + } + if(sdl_fullscreen) + { + SDL_FreeSurface(sdl_fullscreen); + sdl_fullscreen = NULL; + } + + if(sdl_fullscreen_toggle == 0) + { + sdl_screen = SDL_SetVideoMode(x, y+headerbar_height+statusbar_height, 32, SDL_SWSURFACE); + if(!sdl_screen) + { + LOG_THIS setonoff(LOGLEV_PANIC, ACT_FATAL); + BX_PANIC(("Unable to set requested videomode: %ix%i: %s",x,y,SDL_GetError())); + } + headerbar_fg = SDL_MapRGB( + sdl_screen->format, + BX_HEADERBAR_FG_RED, + BX_HEADERBAR_FG_GREEN, + BX_HEADERBAR_FG_BLUE); + headerbar_bg = SDL_MapRGB( + sdl_screen->format, + BX_HEADERBAR_BG_RED, + BX_HEADERBAR_BG_GREEN, + BX_HEADERBAR_BG_BLUE); + } + else + { + sdl_fullscreen = SDL_SetVideoMode(x, y, 32, SDL_HWSURFACE|SDL_FULLSCREEN); + if(!sdl_fullscreen) + { + LOG_THIS setonoff(LOGLEV_PANIC, ACT_FATAL); + BX_PANIC(("Unable to set requested videomode: %ix%i: %s",x,y,SDL_GetError())); + } + } + res_x = x; + res_y = y; + half_res_x = x/2; + half_res_y = y/2; + bx_gui->show_headerbar(); +} + +unsigned bx_sdl_gui_c::create_bitmap(const unsigned char *bmap, unsigned xdim, unsigned ydim) +{ + Uint32 *buf, *buf_row; + Uint32 disp; + unsigned char pixels; + + if (n_sdl_bitmaps >= MAX_SDL_BITMAPS) { + BX_PANIC(("too many SDL bitmaps. To fix, increase MAX_SDL_BITMAPS")); + return 0; + } + + bitmaps *tmp = new bitmaps; + + tmp->surface = SDL_CreateRGBSurface( + SDL_SWSURFACE, + xdim, + ydim, + 32, +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + 0xff000000, + 0x00ff0000, + 0x0000ff00, + 0x00000000 +#else + 0x000000ff, + 0x0000ff00, + 0x00ff0000, + 0x00000000 +#endif + ); + + if(!tmp->surface) + { + delete tmp; + bx_gui->exit(); + LOG_THIS setonoff(LOGLEV_PANIC, ACT_FATAL); + BX_PANIC(("Unable to create requested bitmap")); + } + + tmp->src.w = xdim; + tmp->src.h = ydim; + tmp->src.x = 0; + tmp->src.y = 0; + tmp->dst.x = -1; + tmp->dst.y = 0; + tmp->dst.w = xdim; + tmp->dst.h = ydim; + tmp->cb = NULL; + buf = (Uint32 *)tmp->surface->pixels; + disp = tmp->surface->pitch/4; + + do + { + buf_row = buf; + xdim = tmp->src.w / 8; + do + { + pixels = *bmap++; + for(unsigned i=0;i<8;i++) + { + if((pixels & 0x01) == 0) + *buf++ = headerbar_bg; + else + *buf++ = headerbar_fg; + pixels = pixels >> 1; + } + } while(--xdim); + buf = buf_row + disp; + } while(--ydim); + + SDL_UpdateRect(tmp->surface, 0, 0, tmp->src.w, tmp->src.h); + sdl_bitmaps[n_sdl_bitmaps] = tmp; + + return n_sdl_bitmaps++; +} + +unsigned bx_sdl_gui_c::headerbar_bitmap(unsigned bmap_id, unsigned alignment, + void (*f)(void)) +{ + unsigned hb_index; + + if(bmap_id >= (unsigned)n_sdl_bitmaps) return 0; + + if ((bx_headerbar_entries+1) > BX_MAX_HEADERBAR_ENTRIES) + BX_PANIC(("too many headerbar entries, increase BX_MAX_HEADERBAR_ENTRIES")); + + bx_headerbar_entries++; + hb_index = bx_headerbar_entries - 1; + + hb_entry[hb_index].bmp_id = bmap_id; + hb_entry[hb_index].alignment = alignment; + hb_entry[hb_index].f = f; + + if (alignment == BX_GRAVITY_LEFT) { + sdl_bitmaps[bmap_id]->dst.x = bx_bitmap_left_xorigin; + bx_bitmap_left_xorigin += sdl_bitmaps[bmap_id]->src.w; + } else { + bx_bitmap_right_xorigin += sdl_bitmaps[bmap_id]->src.w; + sdl_bitmaps[bmap_id]->dst.x = bx_bitmap_right_xorigin; + } + + return hb_index; +} + +void bx_sdl_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) +{ + SDL_Rect hb_dst; + unsigned old_id; + if (!sdl_screen) return; + + old_id = hb_entry[hbar_id].bmp_id; + hb_dst = sdl_bitmaps[old_id]->dst; + sdl_bitmaps[old_id]->dst.x = -1; + hb_entry[hbar_id].bmp_id = bmap_id; + sdl_bitmaps[bmap_id]->dst.x = hb_dst.x; + if(sdl_bitmaps[bmap_id]->dst.x != -1) + { + if (hb_entry[hbar_id].alignment == BX_GRAVITY_RIGHT) { + hb_dst.x = res_x - hb_dst.x; + } + SDL_BlitSurface( + sdl_bitmaps[bmap_id]->surface, + &sdl_bitmaps[bmap_id]->src, + sdl_screen, + &hb_dst); + SDL_UpdateRect( + sdl_screen, + hb_dst.x, + sdl_bitmaps[bmap_id]->dst.y, + sdl_bitmaps[bmap_id]->src.w, + sdl_bitmaps[bmap_id]->src.h); + } +} + +void bx_sdl_gui_c::show_headerbar(void) +{ + Uint32 *buf; + Uint32 *buf_row; + Uint32 disp; + int rowsleft = headerbar_height; + int colsleft, sb_item; + int bitmapscount = bx_headerbar_entries; + unsigned current_bmp, pos_x; + SDL_Rect hb_dst; + + if(!sdl_screen) return; + disp = sdl_screen->pitch/4; + buf = (Uint32 *)sdl_screen->pixels; + + // draw headerbar background + do + { + colsleft = res_x; + buf_row = buf; + do + { + *buf++ = headerbar_bg; + } while(--colsleft); + buf = buf_row + disp; + } while(--rowsleft); + SDL_UpdateRect( sdl_screen, 0,0,res_x,headerbar_height); + + // go thru the bitmaps and display the active ones + while(bitmapscount--) + { + current_bmp = hb_entry[bitmapscount].bmp_id; + if(sdl_bitmaps[current_bmp]->dst.x != -1) + { + hb_dst = sdl_bitmaps[current_bmp]->dst; + if (hb_entry[bitmapscount].alignment == BX_GRAVITY_RIGHT) { + hb_dst.x = res_x - hb_dst.x; + } + SDL_BlitSurface( + sdl_bitmaps[current_bmp]->surface, + &sdl_bitmaps[current_bmp]->src, + sdl_screen, + &hb_dst); + SDL_UpdateRect( + sdl_screen, + hb_dst.x, + sdl_bitmaps[current_bmp]->dst.y, + sdl_bitmaps[current_bmp]->src.w, + sdl_bitmaps[current_bmp]->src.h); + } + } + // draw statusbar background + rowsleft = statusbar_height; + buf = (Uint32 *)sdl_screen->pixels + (res_y + headerbar_height) * disp; + do + { + colsleft = res_x; + buf_row = buf; + sb_item = 1; + pos_x = 0; + do + { + if (pos_x == statusitem_pos[sb_item]) + { + *buf++ = headerbar_fg; + if (sb_item < 11) sb_item++; + } + else + { + *buf++ = headerbar_bg; + } + pos_x++; + } while(--colsleft); + buf = buf_row + disp; + } while(--rowsleft); + SDL_UpdateRect( sdl_screen, 0,res_y+headerbar_height,res_x,statusbar_height); + for (unsigned i=0; isrc.w; + if (hb_entry[i].alignment == BX_GRAVITY_LEFT) + xorigin = sdl_bitmaps[hb_entry[i].bmp_id]->dst.x; + else + xorigin = res_x - sdl_bitmaps[hb_entry[i].bmp_id]->dst.x; + if ((x>=xorigin) && (x<(xorigin+xdim))) { + hb_entry[i].f(); + return; + } + } +} + +void bx_sdl_gui_c::exit(void) +{ + if(sdl_screen) + SDL_FreeSurface(sdl_screen); + if(sdl_fullscreen) + SDL_FreeSurface(sdl_fullscreen); + while(n_sdl_bitmaps) + { + SDL_FreeSurface(sdl_bitmaps[n_sdl_bitmaps-1]->surface); + n_sdl_bitmaps--; + } +} + +/// key mapping for SDL +typedef struct { + const char *name; + Bit32u value; +} keyTableEntry; + +#define DEF_SDL_KEY(key) \ + { #key, key }, + +keyTableEntry keytable[] = { + // this include provides all the entries. +#include "sdlkeys.h" + // one final entry to mark the end + { NULL, 0 } +}; + +// function to convert key names into SDLKey values. +// This first try will be horribly inefficient, but it only has +// to be done while loading a keymap. Once the simulation starts, +// this function won't be called. +static Bit32u convertStringToSDLKey (const char *string) +{ + keyTableEntry *ptr; + for (ptr = &keytable[0]; ptr->name != NULL; ptr++) { + //BX_DEBUG (("comparing string '%s' to SDL key '%s'", string, ptr->name)); + if (!strcmp(string, ptr->name)) + return ptr->value; + } + return BX_KEYMAP_UNKNOWN; +} + +void bx_sdl_gui_c::set_display_mode(disp_mode_t newmode) +{ + // if no mode change, do nothing. + if (disp_mode == newmode) return; + // remember the display mode for next time + disp_mode = newmode; + // If fullscreen mode is on, we must switch back to windowed mode if + // the user needs to see the text console. + if (sdl_fullscreen_toggle) { + switch (newmode) { + case DISP_MODE_CONFIG: + BX_DEBUG(("switch to configuration mode (windowed)")); + switch_to_windowed(); + break; + case DISP_MODE_SIM: + BX_DEBUG(("switch to simulation mode (fullscreen)")); + switch_to_fullscreen(); + break; + } + } +} + +#if BX_SHOW_IPS +void bx_sdl_gui_c::show_ips(Bit32u ips_count) +{ + if (!sdl_ips_update) { + sprintf(sdl_ips_text, "IPS: %9u", ips_count); + sdl_ips_update = 1; + } +} +#endif + +#if !defined(WIN32) && BX_DEBUGGER && BX_DEBUGGER_GUI + +#include "enh_dbg.h" + +BxEvent *sdl_notify_callback(void *unused, BxEvent *event) +{ + switch (event->type) + { + case BX_SYNC_EVT_GET_DBG_COMMAND: + { + debug_cmd = new char[512]; + debug_cmd_ready = 0; + HitBreak(); + while (debug_cmd_ready == 0 && bx_user_quit == 0) + { + if (vgaw_refresh != 0) // is the GUI frontend requesting a VGAW refresh? + DEV_vga_refresh(); + vgaw_refresh = 0; +#ifdef WIN32 + Sleep(100); +#else + sleep(1); +#endif + } + if (bx_user_quit != 0) + BX_EXIT(0); + + event->u.debugcmd.command = debug_cmd; + event->retcode = 1; + return event; + } + case BX_ASYNC_EVT_DBG_MSG: + { + ParseIDText (event->u.logmsg.msg); + return event; + } + default: + return (*old_callback)(old_callback_arg, event); + } +} +#endif /* if BX_DEBUGGER && BX_DEBUGGER_GUI */ + +#endif /* if BX_WITH_SDL */ diff --git a/bochs/gui/sdl.h b/bochs/gui/sdl.h new file mode 100644 index 00000000..1097cf23 --- /dev/null +++ b/bochs/gui/sdl.h @@ -0,0 +1,804 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +#ifndef BX_SDL_H +#define BX_SDL_H + +#define BX_HEADERBAR_FG_RED 0x10 +#define BX_HEADERBAR_FG_GREEN 0x10 +#define BX_HEADERBAR_FG_BLUE 0x10 +#define BX_HEADERBAR_BG_RED 0xD0 +#define BX_HEADERBAR_BG_GREEN 0xD0 +#define BX_HEADERBAR_BG_BLUE 0xD0 + +unsigned char sdl_font8x16[256][16] = { + { 0, 0, 0, 0, 0, 0, 0, 0, // 0 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 126, 129, 165, 129, 129, 189, // 1 + 153, 129, 129, 126, 0, 0, 0, 0 }, + { 0, 0, 126, 255, 219, 255, 255, 195, // 2 + 231, 255, 255, 126, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 108, 254, 254, 254, // 3 + 254, 124, 56, 16, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 16, 56, 124, 254, // 4 + 124, 56, 16, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 24, 60, 60, 231, 231, // 5 + 231, 24, 24, 60, 0, 0, 0, 0 }, + { 0, 0, 0, 24, 60, 126, 255, 255, // 6 + 126, 24, 24, 60, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 24, 60, // 7 + 60, 24, 0, 0, 0, 0, 0, 0 }, + { 255, 255, 255, 255, 255, 255, 231, 195, // 8 + 195, 231, 255, 255, 255, 255, 255, 255 }, + { 0, 0, 0, 0, 0, 60, 102, 66, // 9 + 66, 102, 60, 0, 0, 0, 0, 0 }, + { 255, 255, 255, 255, 255, 195, 153, 189, // 10 + 189, 153, 195, 255, 255, 255, 255, 255 }, + { 0, 0, 30, 14, 26, 50, 120, 204, // 11 + 204, 204, 204, 120, 0, 0, 0, 0 }, + { 0, 0, 60, 102, 102, 102, 102, 60, // 12 + 24, 126, 24, 24, 0, 0, 0, 0 }, + { 0, 0, 63, 51, 63, 48, 48, 48, // 13 + 48, 112, 240, 224, 0, 0, 0, 0 }, + { 0, 0, 127, 99, 127, 99, 99, 99, // 14 + 99, 103, 231, 230, 192, 0, 0, 0 }, + { 0, 0, 0, 24, 24, 219, 60, 231, // 15 + 60, 219, 24, 24, 0, 0, 0, 0 }, + { 0, 128, 192, 224, 240, 248, 254, 248, // 16 + 240, 224, 192, 128, 0, 0, 0, 0 }, + { 0, 2, 6, 14, 30, 62, 254, 62, // 17 + 30, 14, 6, 2, 0, 0, 0, 0 }, + { 0, 0, 24, 60, 126, 24, 24, 24, // 18 + 126, 60, 24, 0, 0, 0, 0, 0 }, + { 0, 0, 102, 102, 102, 102, 102, 102, // 19 + 102, 0, 102, 102, 0, 0, 0, 0 }, + { 0, 0, 127, 219, 219, 219, 123, 27, // 20 + 27, 27, 27, 27, 0, 0, 0, 0 }, + { 0, 124, 198, 96, 56, 108, 198, 198, // 21 + 108, 56, 12, 198, 124, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, // 22 + 254, 254, 254, 254, 0, 0, 0, 0 }, + { 0, 0, 24, 60, 126, 24, 24, 24, // 23 + 126, 60, 24, 126, 0, 0, 0, 0 }, + { 0, 0, 24, 60, 126, 24, 24, 24, // 24 + 24, 24, 24, 24, 0, 0, 0, 0 }, + { 0, 0, 24, 24, 24, 24, 24, 24, // 25 + 24, 126, 60, 24, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 24, 12, 254, // 26 + 12, 24, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 48, 96, 254, // 27 + 96, 48, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 192, 192, // 28 + 192, 254, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 40, 108, 254, // 29 + 108, 40, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 16, 56, 56, 124, // 30 + 124, 254, 254, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 254, 254, 124, 124, // 31 + 56, 56, 16, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, // 32 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 24, 60, 60, 60, 24, 24, // 33 + 24, 0, 24, 24, 0, 0, 0, 0 }, + { 0, 102, 102, 102, 36, 0, 0, 0, // 34 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 108, 108, 254, 108, 108, // 35 + 108, 254, 108, 108, 0, 0, 0, 0 }, + { 24, 24, 124, 198, 194, 192, 124, 6, // 36 + 6, 134, 198, 124, 24, 24, 0, 0 }, + { 0, 0, 0, 0, 194, 198, 12, 24, // 37 + 48, 96, 198, 134, 0, 0, 0, 0 }, + { 0, 0, 56, 108, 108, 56, 118, 220, // 38 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 0, 48, 48, 48, 96, 0, 0, 0, // 39 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 12, 24, 48, 48, 48, 48, // 40 + 48, 48, 24, 12, 0, 0, 0, 0 }, + { 0, 0, 48, 24, 12, 12, 12, 12, // 41 + 12, 12, 24, 48, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 102, 60, 255, // 42 + 60, 102, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 24, 24, 126, // 43 + 24, 24, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, // 44 + 0, 24, 24, 24, 48, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 254, // 45 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, // 46 + 0, 0, 24, 24, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 2, 6, 12, 24, // 47 + 48, 96, 192, 128, 0, 0, 0, 0 }, + { 0, 0, 56, 108, 198, 198, 214, 214, // 48 + 198, 198, 108, 56, 0, 0, 0, 0 }, + { 0, 0, 24, 56, 120, 24, 24, 24, // 49 + 24, 24, 24, 126, 0, 0, 0, 0 }, + { 0, 0, 124, 198, 6, 12, 24, 48, // 50 + 96, 192, 198, 254, 0, 0, 0, 0 }, + { 0, 0, 124, 198, 6, 6, 60, 6, // 51 + 6, 6, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 12, 28, 60, 108, 204, 254, // 52 + 12, 12, 12, 30, 0, 0, 0, 0 }, + { 0, 0, 254, 192, 192, 192, 252, 6, // 53 + 6, 6, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 56, 96, 192, 192, 252, 198, // 54 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 254, 198, 6, 6, 12, 24, // 55 + 48, 48, 48, 48, 0, 0, 0, 0 }, + { 0, 0, 124, 198, 198, 198, 124, 198, // 56 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 124, 198, 198, 198, 126, 6, // 57 + 6, 6, 12, 120, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 24, 24, 0, 0, // 58 + 0, 24, 24, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 24, 24, 0, 0, // 59 + 0, 24, 24, 48, 0, 0, 0, 0 }, + { 0, 0, 0, 6, 12, 24, 48, 96, // 60 + 48, 24, 12, 6, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 126, 0, 0, // 61 + 126, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 96, 48, 24, 12, 6, // 62 + 12, 24, 48, 96, 0, 0, 0, 0 }, + { 0, 0, 124, 198, 198, 12, 24, 24, // 63 + 24, 0, 24, 24, 0, 0, 0, 0 }, + { 0, 0, 0, 124, 198, 198, 222, 222, // 64 + 222, 220, 192, 124, 0, 0, 0, 0 }, + { 0, 0, 16, 56, 108, 198, 198, 254, // 65 + 198, 198, 198, 198, 0, 0, 0, 0 }, + { 0, 0, 252, 102, 102, 102, 124, 102, // 66 + 102, 102, 102, 252, 0, 0, 0, 0 }, + { 0, 0, 60, 102, 194, 192, 192, 192, // 67 + 192, 194, 102, 60, 0, 0, 0, 0 }, + { 0, 0, 248, 108, 102, 102, 102, 102, // 68 + 102, 102, 108, 248, 0, 0, 0, 0 }, + { 0, 0, 254, 102, 98, 104, 120, 104, // 69 + 96, 98, 102, 254, 0, 0, 0, 0 }, + { 0, 0, 254, 102, 98, 104, 120, 104, // 70 + 96, 96, 96, 240, 0, 0, 0, 0 }, + { 0, 0, 60, 102, 194, 192, 192, 222, // 71 + 198, 198, 102, 58, 0, 0, 0, 0 }, + { 0, 0, 198, 198, 198, 198, 254, 198, // 72 + 198, 198, 198, 198, 0, 0, 0, 0 }, + { 0, 0, 60, 24, 24, 24, 24, 24, // 73 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 0, 0, 30, 12, 12, 12, 12, 12, // 74 + 204, 204, 204, 120, 0, 0, 0, 0 }, + { 0, 0, 230, 102, 102, 108, 120, 120, // 75 + 108, 102, 102, 230, 0, 0, 0, 0 }, + { 0, 0, 240, 96, 96, 96, 96, 96, // 76 + 96, 98, 102, 254, 0, 0, 0, 0 }, + { 0, 0, 198, 238, 254, 254, 214, 198, // 77 + 198, 198, 198, 198, 0, 0, 0, 0 }, + { 0, 0, 198, 230, 246, 254, 222, 206, // 78 + 198, 198, 198, 198, 0, 0, 0, 0 }, + { 0, 0, 124, 198, 198, 198, 198, 198, // 79 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 252, 102, 102, 102, 124, 96, // 80 + 96, 96, 96, 240, 0, 0, 0, 0 }, + { 0, 0, 124, 198, 198, 198, 198, 198, // 81 + 198, 214, 222, 124, 12, 14, 0, 0 }, + { 0, 0, 252, 102, 102, 102, 124, 108, // 82 + 102, 102, 102, 230, 0, 0, 0, 0 }, + { 0, 0, 124, 198, 198, 96, 56, 12, // 83 + 6, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 126, 126, 90, 24, 24, 24, // 84 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 0, 0, 198, 198, 198, 198, 198, 198, // 85 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 198, 198, 198, 198, 198, 198, // 86 + 198, 108, 56, 16, 0, 0, 0, 0 }, + { 0, 0, 198, 198, 198, 198, 214, 214, // 87 + 214, 254, 238, 108, 0, 0, 0, 0 }, + { 0, 0, 198, 198, 108, 124, 56, 56, // 88 + 124, 108, 198, 198, 0, 0, 0, 0 }, + { 0, 0, 102, 102, 102, 102, 60, 24, // 89 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 0, 0, 254, 198, 134, 12, 24, 48, // 90 + 96, 194, 198, 254, 0, 0, 0, 0 }, + { 0, 0, 60, 48, 48, 48, 48, 48, // 91 + 48, 48, 48, 60, 0, 0, 0, 0 }, + { 0, 0, 0, 128, 192, 224, 112, 56, // 92 + 28, 14, 6, 2, 0, 0, 0, 0 }, + { 0, 0, 60, 12, 12, 12, 12, 12, // 93 + 12, 12, 12, 60, 0, 0, 0, 0 }, + { 16, 56, 108, 198, 0, 0, 0, 0, // 94 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, // 95 + 0, 0, 0, 0, 0, 255, 0, 0 }, + { 0, 48, 24, 12, 0, 0, 0, 0, // 96 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 120, 12, 124, // 97 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 0, 0, 224, 96, 96, 120, 108, 102, // 98 + 102, 102, 102, 124, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 124, 198, 192, // 99 + 192, 192, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 28, 12, 12, 60, 108, 204, // 100 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 124, 198, 254, // 101 + 192, 192, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 28, 54, 50, 48, 120, 48, // 102 + 48, 48, 48, 120, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 118, 204, 204, // 103 + 204, 204, 204, 124, 12, 204, 120, 0 }, + { 0, 0, 224, 96, 96, 108, 118, 102, // 104 + 102, 102, 102, 230, 0, 0, 0, 0 }, + { 0, 0, 24, 24, 0, 56, 24, 24, // 105 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 0, 0, 6, 6, 0, 14, 6, 6, // 106 + 6, 6, 6, 6, 102, 102, 60, 0 }, + { 0, 0, 224, 96, 96, 102, 108, 120, // 107 + 120, 108, 102, 230, 0, 0, 0, 0 }, + { 0, 0, 56, 24, 24, 24, 24, 24, // 108 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 236, 254, 214, // 109 + 214, 214, 214, 198, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 220, 102, 102, // 110 + 102, 102, 102, 102, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 124, 198, 198, // 111 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 220, 102, 102, // 112 + 102, 102, 102, 124, 96, 96, 240, 0 }, + { 0, 0, 0, 0, 0, 118, 204, 204, // 113 + 204, 204, 204, 124, 12, 12, 30, 0 }, + { 0, 0, 0, 0, 0, 220, 118, 102, // 114 + 96, 96, 96, 240, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 124, 198, 96, // 115 + 56, 12, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 16, 48, 48, 252, 48, 48, // 116 + 48, 48, 54, 28, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 204, 204, 204, // 117 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 198, 198, 198, // 118 + 198, 198, 108, 56, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 198, 198, 214, // 119 + 214, 214, 254, 108, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 198, 108, 56, // 120 + 56, 56, 108, 198, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 198, 198, 198, // 121 + 198, 198, 198, 126, 6, 12, 248, 0 }, + { 0, 0, 0, 0, 0, 254, 204, 24, // 122 + 48, 96, 198, 254, 0, 0, 0, 0 }, + { 0, 0, 14, 24, 24, 24, 112, 24, // 123 + 24, 24, 24, 14, 0, 0, 0, 0 }, + { 0, 0, 24, 24, 24, 24, 24, 24, // 124 + 24, 24, 24, 24, 0, 0, 0, 0 }, + { 0, 0, 112, 24, 24, 24, 14, 24, // 125 + 24, 24, 24, 112, 0, 0, 0, 0 }, + { 0, 118, 220, 0, 0, 0, 0, 0, // 126 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 16, 56, 108, 198, // 127 + 198, 198, 254, 0, 0, 0, 0, 0 }, + { 0, 0, 60, 102, 194, 192, 192, 192, // 128 + 192, 194, 102, 60, 24, 112, 0, 0 }, + { 0, 0, 204, 0, 0, 204, 204, 204, // 129 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 0, 12, 24, 48, 0, 124, 198, 254, // 130 + 192, 192, 198, 124, 0, 0, 0, 0 }, + { 0, 16, 56, 108, 0, 120, 12, 124, // 131 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 0, 0, 204, 0, 0, 120, 12, 124, // 132 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 0, 96, 48, 24, 0, 120, 12, 124, // 133 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 0, 56, 108, 56, 0, 120, 12, 124, // 134 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 124, 198, 192, // 135 + 192, 192, 198, 124, 24, 112, 0, 0 }, + { 0, 16, 56, 108, 0, 124, 198, 254, // 136 + 192, 192, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 198, 0, 0, 124, 198, 254, // 137 + 192, 192, 198, 124, 0, 0, 0, 0 }, + { 0, 96, 48, 24, 0, 124, 198, 254, // 138 + 192, 192, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 102, 0, 0, 56, 24, 24, // 139 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 0, 24, 60, 102, 0, 56, 24, 24, // 140 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 0, 96, 48, 24, 0, 56, 24, 24, // 141 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 0, 198, 0, 16, 56, 108, 198, 198, // 142 + 254, 198, 198, 198, 0, 0, 0, 0 }, + { 56, 108, 56, 16, 56, 108, 198, 198, // 143 + 254, 198, 198, 198, 0, 0, 0, 0 }, + { 12, 24, 0, 254, 102, 98, 104, 120, // 144 + 104, 98, 102, 254, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 236, 54, 54, // 145 + 126, 216, 216, 110, 0, 0, 0, 0 }, + { 0, 0, 62, 108, 204, 204, 254, 204, // 146 + 204, 204, 204, 206, 0, 0, 0, 0 }, + { 0, 16, 56, 108, 0, 124, 198, 198, // 147 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 198, 0, 0, 124, 198, 198, // 148 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 96, 48, 24, 0, 124, 198, 198, // 149 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 48, 120, 204, 0, 204, 204, 204, // 150 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 0, 96, 48, 24, 0, 204, 204, 204, // 151 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 0, 0, 198, 0, 0, 198, 198, 198, // 152 + 198, 198, 198, 126, 6, 12, 120, 0 }, + { 0, 198, 0, 124, 198, 198, 198, 198, // 153 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 198, 0, 198, 198, 198, 198, 198, // 154 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 124, 206, 222, // 155 + 246, 230, 198, 124, 0, 0, 0, 0 }, + { 0, 56, 108, 100, 96, 240, 96, 96, // 156 + 96, 96, 230, 252, 0, 0, 0, 0 }, + { 0, 4, 124, 206, 206, 214, 214, 214, // 157 + 214, 230, 230, 124, 64, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 198, 108, 56, // 158 + 56, 108, 198, 0, 0, 0, 0, 0 }, + { 0, 14, 27, 24, 24, 24, 126, 24, // 159 + 24, 24, 216, 112, 0, 0, 0, 0 }, + { 0, 24, 48, 96, 0, 120, 12, 124, // 160 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 0, 12, 24, 48, 0, 56, 24, 24, // 161 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 0, 24, 48, 96, 0, 124, 198, 198, // 162 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 24, 48, 96, 0, 204, 204, 204, // 163 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 0, 0, 118, 220, 0, 220, 102, 102, // 164 + 102, 102, 102, 102, 0, 0, 0, 0 }, + { 118, 220, 0, 198, 230, 246, 254, 222, // 165 + 206, 198, 198, 198, 0, 0, 0, 0 }, + { 0, 0, 60, 108, 108, 62, 0, 126, // 166 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 56, 108, 108, 56, 0, 124, // 167 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 48, 48, 0, 48, 48, 96, // 168 + 192, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 124, 130, 178, 170, 178, 170, // 169 + 170, 130, 124, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 254, 6, // 170 + 6, 6, 6, 0, 0, 0, 0, 0 }, + { 0, 96, 224, 98, 102, 108, 24, 48, // 171 + 96, 220, 134, 12, 24, 62, 0, 0 }, + { 0, 96, 224, 98, 102, 108, 24, 48, // 172 + 102, 206, 154, 63, 6, 6, 0, 0 }, + { 0, 0, 24, 24, 0, 24, 24, 24, // 173 + 60, 60, 60, 24, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 54, 108, 216, // 174 + 108, 54, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 216, 108, 54, // 175 + 108, 216, 0, 0, 0, 0, 0, 0 }, + { 17, 68, 17, 68, 17, 68, 17, 68, // 176 + 17, 68, 17, 68, 17, 68, 17, 68 }, + { 85, 170, 85, 170, 85, 170, 85, 170, // 177 + 85, 170, 85, 170, 85, 170, 85, 170 }, + { 221, 119, 221, 119, 221, 119, 221, 119, // 178 + 221, 119, 221, 119, 221, 119, 221, 119 }, + { 24, 24, 24, 24, 24, 24, 24, 24, // 179 + 24, 24, 24, 24, 24, 24, 24, 24 }, + { 24, 24, 24, 24, 24, 24, 24, 248, // 180 + 24, 24, 24, 24, 24, 24, 24, 24 }, + { 96, 192, 16, 56, 108, 198, 198, 254, // 181 + 198, 198, 198, 198, 0, 0, 0, 0 }, + { 124, 198, 16, 56, 108, 198, 198, 254, // 182 + 198, 198, 198, 198, 0, 0, 0, 0 }, + { 12, 6, 16, 56, 108, 198, 198, 254, // 183 + 198, 198, 198, 198, 0, 0, 0, 0 }, + { 0, 0, 124, 130, 154, 162, 162, 162, // 184 + 154, 130, 124, 0, 0, 0, 0, 0 }, + { 54, 54, 54, 54, 54, 246, 6, 246, // 185 + 54, 54, 54, 54, 54, 54, 54, 54 }, + { 54, 54, 54, 54, 54, 54, 54, 54, // 186 + 54, 54, 54, 54, 54, 54, 54, 54 }, + { 0, 0, 0, 0, 0, 254, 6, 246, // 187 + 54, 54, 54, 54, 54, 54, 54, 54 }, + { 54, 54, 54, 54, 54, 246, 6, 254, // 188 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 24, 24, 124, 198, 192, 192, // 189 + 198, 124, 24, 24, 0, 0, 0, 0 }, + { 0, 0, 0, 102, 102, 60, 24, 126, // 190 + 24, 126, 24, 24, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 248, // 191 + 24, 24, 24, 24, 24, 24, 24, 24 }, + { 24, 24, 24, 24, 24, 24, 24, 31, // 192 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 24, 24, 24, 24, 24, 24, 24, 255, // 193 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 255, // 194 + 24, 24, 24, 24, 24, 24, 24, 24 }, + { 24, 24, 24, 24, 24, 24, 24, 31, // 195 + 24, 24, 24, 24, 24, 24, 24, 24 }, + { 0, 0, 0, 0, 0, 0, 0, 255, // 196 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 24, 24, 24, 24, 24, 24, 24, 255, // 197 + 24, 24, 24, 24, 24, 24, 24, 24 }, + { 0, 0, 118, 220, 0, 120, 12, 124, // 198 + 204, 204, 204, 118, 0, 0, 0, 0 }, + { 118, 220, 0, 56, 108, 198, 198, 254, // 199 + 198, 198, 198, 198, 0, 0, 0, 0 }, + { 54, 54, 54, 54, 54, 55, 48, 63, // 200 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 63, 48, 55, // 201 + 54, 54, 54, 54, 54, 54, 54, 54 }, + { 54, 54, 54, 54, 54, 247, 0, 255, // 202 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 255, 0, 247, // 203 + 54, 54, 54, 54, 54, 54, 54, 54 }, + { 54, 54, 54, 54, 54, 55, 48, 55, // 204 + 54, 54, 54, 54, 54, 54, 54, 54 }, + { 0, 0, 0, 0, 0, 255, 0, 255, // 205 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 54, 54, 54, 54, 54, 247, 0, 247, // 206 + 54, 54, 54, 54, 54, 54, 54, 54 }, + { 0, 0, 0, 0, 198, 124, 198, 198, // 207 + 198, 198, 124, 198, 0, 0, 0, 0 }, + { 0, 0, 52, 24, 44, 6, 62, 102, // 208 + 102, 102, 102, 60, 0, 0, 0, 0 }, + { 0, 0, 248, 108, 102, 102, 246, 102, // 209 + 102, 102, 108, 248, 0, 0, 0, 0 }, + { 56, 108, 0, 254, 102, 98, 104, 120, // 210 + 104, 98, 102, 254, 0, 0, 0, 0 }, + { 0, 198, 0, 254, 102, 98, 104, 120, // 211 + 104, 98, 102, 254, 0, 0, 0, 0 }, + { 48, 24, 0, 254, 102, 98, 104, 120, // 212 + 104, 98, 102, 254, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 56, 24, 24, // 213 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 12, 24, 0, 60, 24, 24, 24, 24, // 214 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 60, 102, 0, 60, 24, 24, 24, 24, // 215 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 0, 102, 0, 60, 24, 24, 24, 24, // 216 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 24, 24, 24, 24, 24, 24, 24, 248, // 217 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 31, // 218 + 24, 24, 24, 24, 24, 24, 24, 24 }, + { 255, 255, 255, 255, 255, 255, 255, 255, // 219 + 255, 255, 255, 255, 255, 255, 255, 255 }, + { 0, 0, 0, 0, 0, 0, 0, 255, // 220 + 255, 255, 255, 255, 255, 255, 255, 255 }, + { 0, 24, 24, 24, 24, 24, 0, 0, // 221 + 24, 24, 24, 24, 24, 0, 0, 0 }, + { 48, 24, 0, 60, 24, 24, 24, 24, // 222 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 255, 255, 255, 255, 255, 255, 255, 0, // 223 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 24, 48, 0, 124, 198, 198, 198, 198, // 224 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 120, 204, 204, 204, 216, 204, // 225 + 198, 198, 198, 204, 0, 0, 0, 0 }, + { 56, 108, 0, 124, 198, 198, 198, 198, // 226 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 48, 24, 0, 124, 198, 198, 198, 198, // 227 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 118, 220, 0, 124, 198, 198, // 228 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 118, 220, 0, 124, 198, 198, 198, 198, // 229 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 102, 102, 102, // 230 + 102, 102, 102, 124, 96, 96, 192, 0 }, + { 0, 0, 224, 96, 96, 124, 102, 102, // 231 + 102, 102, 102, 124, 96, 96, 240, 0 }, + { 0, 0, 240, 96, 124, 102, 102, 102, // 232 + 102, 124, 96, 240, 0, 0, 0, 0 }, + { 24, 48, 0, 198, 198, 198, 198, 198, // 233 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 56, 108, 0, 198, 198, 198, 198, 198, // 234 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 48, 24, 0, 198, 198, 198, 198, 198, // 235 + 198, 198, 198, 124, 0, 0, 0, 0 }, + { 0, 12, 24, 48, 0, 198, 198, 198, // 236 + 198, 198, 198, 126, 6, 12, 248, 0 }, + { 12, 24, 0, 102, 102, 102, 102, 60, // 237 + 24, 24, 24, 60, 0, 0, 0, 0 }, + { 0, 255, 0, 0, 0, 0, 0, 0, // 238 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 12, 24, 48, 0, 0, 0, 0, // 239 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 254, // 240 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 24, 24, 126, 24, // 241 + 24, 0, 0, 126, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, // 242 + 0, 0, 0, 0, 255, 0, 255, 0 }, + { 0, 224, 48, 98, 54, 236, 24, 48, // 243 + 102, 206, 154, 63, 6, 6, 0, 0 }, + { 0, 0, 127, 219, 219, 219, 123, 27, // 244 + 27, 27, 27, 27, 0, 0, 0, 0 }, + { 0, 124, 198, 96, 56, 108, 198, 198, // 245 + 108, 56, 12, 198, 124, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 24, 0, 126, // 246 + 0, 24, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, // 247 + 0, 0, 0, 24, 12, 120, 0, 0 }, + { 0, 56, 108, 108, 56, 0, 0, 0, // 248 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 198, 0, 0, 0, 0, 0, 0, // 249 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 24, // 250 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 24, 56, 24, 24, 24, 60, 0, // 251 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 124, 6, 60, 6, 6, 124, 0, // 252 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 60, 102, 12, 24, 50, 126, 0, // 253 + 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 126, 126, 126, 126, // 254 + 126, 126, 126, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, // 255 + 0, 0, 0, 0, 0, 0, 0, 0 }}; + +unsigned char sdl_font8x8[256][8] = { + { 0, 0, 0, 0, 0, 0, 0, 0 }, // 0 + { 126, 129, 165, 129, 189, 153, 129, 126 }, // 1 + { 126, 255, 219, 255, 195, 231, 255, 126 }, // 2 + { 108, 254, 254, 254, 124, 56, 16, 0 }, // 3 + { 16, 56, 124, 254, 124, 56, 16, 0 }, // 4 + { 56, 124, 56, 254, 254, 214, 16, 56 }, // 5 + { 16, 56, 124, 254, 254, 124, 16, 56 }, // 6 + { 0, 0, 24, 60, 60, 24, 0, 0 }, // 7 + { 255, 255, 231, 195, 195, 231, 255, 255 }, // 8 + { 0, 60, 102, 66, 66, 102, 60, 0 }, // 9 + { 255, 195, 153, 189, 189, 153, 195, 255 }, // 10 + { 15, 7, 15, 125, 204, 204, 204, 120 }, // 11 + { 60, 102, 102, 102, 60, 24, 126, 24 }, // 12 + { 63, 51, 63, 48, 48, 112, 240, 224 }, // 13 + { 127, 99, 127, 99, 99, 103, 230, 192 }, // 14 + { 24, 219, 60, 231, 231, 60, 219, 24 }, // 15 + { 128, 224, 248, 254, 248, 224, 128, 0 }, // 16 + { 2, 14, 62, 254, 62, 14, 2, 0 }, // 17 + { 24, 60, 126, 24, 24, 126, 60, 24 }, // 18 + { 102, 102, 102, 102, 102, 0, 102, 0 }, // 19 + { 127, 219, 219, 123, 27, 27, 27, 0 }, // 20 + { 62, 97, 60, 102, 102, 60, 134, 124 }, // 21 + { 0, 0, 0, 0, 126, 126, 126, 0 }, // 22 + { 24, 60, 126, 24, 126, 60, 24, 255 }, // 23 + { 24, 60, 126, 24, 24, 24, 24, 0 }, // 24 + { 24, 24, 24, 24, 126, 60, 24, 0 }, // 25 + { 0, 24, 12, 254, 12, 24, 0, 0 }, // 26 + { 0, 48, 96, 254, 96, 48, 0, 0 }, // 27 + { 0, 0, 192, 192, 192, 254, 0, 0 }, // 28 + { 0, 36, 102, 255, 102, 36, 0, 0 }, // 29 + { 0, 24, 60, 126, 255, 255, 0, 0 }, // 30 + { 0, 255, 255, 126, 60, 24, 0, 0 }, // 31 + { 0, 0, 0, 0, 0, 0, 0, 0 }, // 32 + { 24, 60, 60, 24, 24, 0, 24, 0 }, // 33 + { 102, 102, 36, 0, 0, 0, 0, 0 }, // 34 + { 108, 108, 254, 108, 254, 108, 108, 0 }, // 35 + { 24, 62, 96, 60, 6, 124, 24, 0 }, // 36 + { 0, 198, 204, 24, 48, 102, 198, 0 }, // 37 + { 56, 108, 56, 118, 220, 204, 118, 0 }, // 38 + { 24, 24, 48, 0, 0, 0, 0, 0 }, // 39 + { 12, 24, 48, 48, 48, 24, 12, 0 }, // 40 + { 48, 24, 12, 12, 12, 24, 48, 0 }, // 41 + { 0, 102, 60, 231, 60, 102, 0, 0 }, // 42 + { 0, 24, 24, 126, 24, 24, 0, 0 }, // 43 + { 0, 0, 0, 0, 0, 24, 24, 48 }, // 44 + { 0, 0, 0, 126, 0, 0, 0, 0 }, // 45 + { 0, 0, 0, 0, 0, 24, 24, 0 }, // 46 + { 6, 12, 24, 48, 96, 192, 128, 0 }, // 47 + { 124, 198, 206, 222, 246, 230, 124, 0 }, // 48 + { 24, 56, 24, 24, 24, 24, 126, 0 }, // 49 + { 124, 198, 6, 28, 48, 102, 254, 0 }, // 50 + { 124, 198, 6, 60, 6, 198, 124, 0 }, // 51 + { 28, 60, 108, 204, 254, 12, 30, 0 }, // 52 + { 254, 192, 192, 252, 6, 198, 124, 0 }, // 53 + { 56, 96, 192, 252, 198, 198, 124, 0 }, // 54 + { 254, 198, 12, 24, 48, 48, 48, 0 }, // 55 + { 124, 198, 198, 124, 198, 198, 124, 0 }, // 56 + { 124, 198, 198, 126, 6, 12, 120, 0 }, // 57 + { 0, 24, 24, 0, 0, 24, 24, 0 }, // 58 + { 0, 24, 24, 0, 0, 24, 24, 48 }, // 59 + { 6, 12, 24, 48, 24, 12, 6, 0 }, // 60 + { 0, 0, 126, 0, 0, 126, 0, 0 }, // 61 + { 96, 48, 24, 12, 24, 48, 96, 0 }, // 62 + { 124, 198, 12, 24, 24, 0, 24, 0 }, // 63 + { 124, 198, 222, 222, 222, 192, 120, 0 }, // 64 + { 56, 108, 198, 254, 198, 198, 198, 0 }, // 65 + { 252, 102, 102, 124, 102, 102, 252, 0 }, // 66 + { 60, 102, 192, 192, 192, 102, 60, 0 }, // 67 + { 248, 108, 102, 102, 102, 108, 248, 0 }, // 68 + { 254, 98, 104, 120, 104, 98, 254, 0 }, // 69 + { 254, 98, 104, 120, 104, 96, 240, 0 }, // 70 + { 60, 102, 192, 192, 206, 102, 58, 0 }, // 71 + { 198, 198, 198, 254, 198, 198, 198, 0 }, // 72 + { 60, 24, 24, 24, 24, 24, 60, 0 }, // 73 + { 30, 12, 12, 12, 204, 204, 120, 0 }, // 74 + { 230, 102, 108, 120, 108, 102, 230, 0 }, // 75 + { 240, 96, 96, 96, 98, 102, 254, 0 }, // 76 + { 198, 238, 254, 254, 214, 198, 198, 0 }, // 77 + { 198, 230, 246, 222, 206, 198, 198, 0 }, // 78 + { 124, 198, 198, 198, 198, 198, 124, 0 }, // 79 + { 252, 102, 102, 124, 96, 96, 240, 0 }, // 80 + { 124, 198, 198, 198, 198, 206, 124, 14 }, // 81 + { 252, 102, 102, 124, 108, 102, 230, 0 }, // 82 + { 60, 102, 48, 24, 12, 102, 60, 0 }, // 83 + { 126, 126, 90, 24, 24, 24, 60, 0 }, // 84 + { 198, 198, 198, 198, 198, 198, 124, 0 }, // 85 + { 198, 198, 198, 198, 198, 108, 56, 0 }, // 86 + { 198, 198, 198, 214, 214, 254, 108, 0 }, // 87 + { 198, 198, 108, 56, 108, 198, 198, 0 }, // 88 + { 102, 102, 102, 60, 24, 24, 60, 0 }, // 89 + { 254, 198, 140, 24, 50, 102, 254, 0 }, // 90 + { 60, 48, 48, 48, 48, 48, 60, 0 }, // 91 + { 192, 96, 48, 24, 12, 6, 2, 0 }, // 92 + { 60, 12, 12, 12, 12, 12, 60, 0 }, // 93 + { 16, 56, 108, 198, 0, 0, 0, 0 }, // 94 + { 0, 0, 0, 0, 0, 0, 0, 255 }, // 95 + { 48, 24, 12, 0, 0, 0, 0, 0 }, // 96 + { 0, 0, 120, 12, 124, 204, 118, 0 }, // 97 + { 224, 96, 124, 102, 102, 102, 220, 0 }, // 98 + { 0, 0, 124, 198, 192, 198, 124, 0 }, // 99 + { 28, 12, 124, 204, 204, 204, 118, 0 }, // 100 + { 0, 0, 124, 198, 254, 192, 124, 0 }, // 101 + { 60, 102, 96, 248, 96, 96, 240, 0 }, // 102 + { 0, 0, 118, 204, 204, 124, 12, 248 }, // 103 + { 224, 96, 108, 118, 102, 102, 230, 0 }, // 104 + { 24, 0, 56, 24, 24, 24, 60, 0 }, // 105 + { 6, 0, 6, 6, 6, 102, 102, 60 }, // 106 + { 224, 96, 102, 108, 120, 108, 230, 0 }, // 107 + { 56, 24, 24, 24, 24, 24, 60, 0 }, // 108 + { 0, 0, 236, 254, 214, 214, 214, 0 }, // 109 + { 0, 0, 220, 102, 102, 102, 102, 0 }, // 110 + { 0, 0, 124, 198, 198, 198, 124, 0 }, // 111 + { 0, 0, 220, 102, 102, 124, 96, 240 }, // 112 + { 0, 0, 118, 204, 204, 124, 12, 30 }, // 113 + { 0, 0, 220, 118, 96, 96, 240, 0 }, // 114 + { 0, 0, 126, 192, 124, 6, 252, 0 }, // 115 + { 48, 48, 252, 48, 48, 54, 28, 0 }, // 116 + { 0, 0, 204, 204, 204, 204, 118, 0 }, // 117 + { 0, 0, 198, 198, 198, 108, 56, 0 }, // 118 + { 0, 0, 198, 214, 214, 254, 108, 0 }, // 119 + { 0, 0, 198, 108, 56, 108, 198, 0 }, // 120 + { 0, 0, 198, 198, 198, 126, 6, 252 }, // 121 + { 0, 0, 126, 76, 24, 50, 126, 0 }, // 122 + { 14, 24, 24, 112, 24, 24, 14, 0 }, // 123 + { 24, 24, 24, 24, 24, 24, 24, 0 }, // 124 + { 112, 24, 24, 14, 24, 24, 112, 0 }, // 125 + { 118, 220, 0, 0, 0, 0, 0, 0 }, // 126 + { 0, 16, 56, 108, 198, 198, 254, 0 }, // 127 + { 124, 198, 192, 192, 198, 124, 12, 120 }, // 128 + { 204, 0, 204, 204, 204, 204, 118, 0 }, // 129 + { 12, 24, 124, 198, 254, 192, 124, 0 }, // 130 + { 124, 130, 120, 12, 124, 204, 118, 0 }, // 131 + { 198, 0, 120, 12, 124, 204, 118, 0 }, // 132 + { 48, 24, 120, 12, 124, 204, 118, 0 }, // 133 + { 48, 48, 120, 12, 124, 204, 118, 0 }, // 134 + { 0, 0, 126, 192, 192, 126, 12, 56 }, // 135 + { 124, 130, 124, 198, 254, 192, 124, 0 }, // 136 + { 198, 0, 124, 198, 254, 192, 124, 0 }, // 137 + { 48, 24, 124, 198, 254, 192, 124, 0 }, // 138 + { 102, 0, 56, 24, 24, 24, 60, 0 }, // 139 + { 124, 130, 56, 24, 24, 24, 60, 0 }, // 140 + { 48, 24, 0, 56, 24, 24, 60, 0 }, // 141 + { 198, 56, 108, 198, 254, 198, 198, 0 }, // 142 + { 56, 108, 124, 198, 254, 198, 198, 0 }, // 143 + { 24, 48, 254, 192, 248, 192, 254, 0 }, // 144 + { 0, 0, 126, 18, 254, 144, 254, 0 }, // 145 + { 62, 108, 204, 254, 204, 204, 206, 0 }, // 146 + { 124, 130, 124, 198, 198, 198, 124, 0 }, // 147 + { 198, 0, 124, 198, 198, 198, 124, 0 }, // 148 + { 48, 24, 124, 198, 198, 198, 124, 0 }, // 149 + { 120, 132, 0, 204, 204, 204, 118, 0 }, // 150 + { 96, 48, 204, 204, 204, 204, 118, 0 }, // 151 + { 198, 0, 198, 198, 198, 126, 6, 252 }, // 152 + { 198, 56, 108, 198, 198, 108, 56, 0 }, // 153 + { 198, 0, 198, 198, 198, 198, 124, 0 }, // 154 + { 0, 2, 124, 206, 214, 230, 124, 128 }, // 155 + { 56, 108, 100, 240, 96, 102, 252, 0 }, // 156 + { 58, 108, 206, 214, 230, 108, 184, 0 }, // 157 + { 0, 198, 108, 56, 108, 198, 0, 0 }, // 158 + { 14, 27, 24, 60, 24, 216, 112, 0 }, // 159 + { 24, 48, 120, 12, 124, 204, 118, 0 }, // 160 + { 12, 24, 0, 56, 24, 24, 60, 0 }, // 161 + { 12, 24, 124, 198, 198, 198, 124, 0 }, // 162 + { 24, 48, 204, 204, 204, 204, 118, 0 }, // 163 + { 118, 220, 0, 220, 102, 102, 102, 0 }, // 164 + { 118, 220, 0, 230, 246, 222, 206, 0 }, // 165 + { 60, 108, 108, 62, 0, 126, 0, 0 }, // 166 + { 56, 108, 108, 56, 0, 124, 0, 0 }, // 167 + { 24, 0, 24, 24, 48, 99, 62, 0 }, // 168 + { 126, 129, 185, 165, 185, 165, 129, 126 }, // 169 + { 0, 0, 0, 254, 6, 6, 0, 0 }, // 170 + { 99, 230, 108, 126, 51, 102, 204, 15 }, // 171 + { 99, 230, 108, 122, 54, 106, 223, 6 }, // 172 + { 24, 0, 24, 24, 60, 60, 24, 0 }, // 173 + { 0, 51, 102, 204, 102, 51, 0, 0 }, // 174 + { 0, 204, 102, 51, 102, 204, 0, 0 }, // 175 + { 34, 136, 34, 136, 34, 136, 34, 136 }, // 176 + { 85, 170, 85, 170, 85, 170, 85, 170 }, // 177 + { 119, 221, 119, 221, 119, 221, 119, 221 }, // 178 + { 24, 24, 24, 24, 24, 24, 24, 24 }, // 179 + { 24, 24, 56, 248, 56, 24, 24, 24 }, // 180 + { 48, 96, 56, 108, 198, 254, 198, 0 }, // 181 + { 124, 130, 56, 108, 198, 254, 198, 0 }, // 182 + { 24, 12, 56, 108, 198, 254, 198, 0 }, // 183 + { 126, 129, 157, 161, 161, 157, 129, 126 }, // 184 + { 54, 54, 246, 6, 246, 54, 54, 54 }, // 185 + { 54, 54, 54, 54, 54, 54, 54, 54 }, // 186 + { 0, 0, 254, 6, 246, 54, 54, 54 }, // 187 + { 54, 54, 246, 6, 254, 0, 0, 0 }, // 188 + { 24, 24, 126, 192, 192, 126, 24, 24 }, // 189 + { 102, 102, 60, 126, 24, 126, 24, 24 }, // 190 + { 0, 0, 0, 240, 56, 24, 24, 24 }, // 191 + { 24, 24, 28, 15, 0, 0, 0, 0 }, // 192 + { 24, 24, 60, 255, 0, 0, 0, 0 }, // 193 + { 0, 0, 0, 255, 60, 24, 24, 24 }, // 194 + { 48, 48, 56, 63, 56, 48, 48, 48 }, // 195 + { 0, 0, 0, 255, 0, 0, 0, 0 }, // 196 + { 24, 24, 24, 60, 231, 60, 24, 24 }, // 197 + { 240, 120, 120, 120, 60, 60, 60, 28 }, // 198 + { 30, 60, 60, 60, 120, 120, 120, 112 }, // 199 + { 15, 63, 63, 120, 120, 0, 1, 3 }, // 200 + { 192, 224, 240, 240, 240, 240, 240, 224 }, // 201 + { 0, 0, 0, 0, 0, 0, 0, 0 }, // 202 + { 0, 0, 0, 0, 0, 0, 0, 0 }, // 203 + { 30, 30, 14, 15, 15, 7, 7, 0 }, // 204 + { 240, 240, 224, 224, 192, 192, 192, 0 }, // 205 + { 6, 13, 27, 55, 47, 127, 126, 30 }, // 206 + { 0, 252, 255, 255, 143, 119, 243, 3 }, // 207 + { 0, 1, 7, 143, 143, 207, 207, 199 }, // 208 + { 0, 248, 254, 254, 31, 15, 192, 248 }, // 209 + { 0, 0, 0, 0, 0, 0, 0, 0 }, // 210 + { 0, 0, 0, 0, 0, 0, 0, 0 }, // 211 + { 30, 30, 30, 31, 15, 7, 7, 1 }, // 212 + { 3, 3, 3, 7, 143, 255, 254, 252 }, // 213 + { 195, 192, 192, 207, 143, 7, 7, 1 }, // 214 + { 254, 255, 31, 15, 143, 254, 254, 248 }, // 215 + { 102, 0, 60, 24, 24, 24, 60, 0 }, // 216 + { 24, 24, 56, 240, 0, 0, 0, 0 }, // 217 + { 0, 0, 0, 15, 28, 24, 24, 24 }, // 218 + { 255, 255, 255, 255, 255, 255, 255, 255 }, // 219 + { 0, 0, 0, 0, 255, 255, 255, 255 }, // 220 + { 24, 24, 24, 0, 0, 24, 24, 24 }, // 221 + { 48, 24, 60, 24, 24, 24, 60, 0 }, // 222 + { 255, 255, 255, 255, 0, 0, 0, 0 }, // 223 + { 0, 0, 0, 0, 0, 0, 0, 255 }, // 224 + { 0, 0, 0, 0, 0, 255, 0, 255 }, // 225 + { 0, 0, 0, 255, 0, 255, 0, 255 }, // 226 + { 0, 255, 0, 255, 0, 255, 0, 255 }, // 227 + { 0, 255, 0, 255, 0, 255, 0, 0 }, // 228 + { 0, 255, 0, 255, 0, 0, 0, 0 }, // 229 + { 0, 255, 0, 0, 0, 0, 0, 0 }, // 230 + { 224, 128, 0, 0, 0, 0, 128, 224 }, // 231 + { 248, 254, 255, 255, 255, 255, 254, 248 }, // 232 + { 24, 48, 198, 198, 198, 198, 124, 0 }, // 233 + { 124, 130, 0, 198, 198, 198, 124, 0 }, // 234 + { 96, 48, 198, 198, 198, 198, 124, 0 }, // 235 + { 24, 48, 198, 198, 198, 126, 6, 252 }, // 236 + { 12, 24, 102, 102, 60, 24, 60, 0 }, // 237 + { 255, 0, 0, 0, 0, 0, 0, 0 }, // 238 + { 12, 24, 48, 0, 0, 0, 0, 0 }, // 239 + { 0, 0, 0, 126, 0, 0, 0, 0 }, // 240 + { 24, 24, 126, 24, 24, 0, 126, 0 }, // 241 + { 0, 0, 0, 0, 0, 255, 0, 255 }, // 242 + { 225, 50, 228, 58, 246, 42, 95, 134 }, // 243 + { 127, 219, 219, 123, 27, 27, 27, 0 }, // 244 + { 62, 97, 60, 102, 102, 60, 134, 124 }, // 245 + { 0, 24, 0, 126, 0, 24, 0, 0 }, // 246 + { 0, 0, 0, 0, 0, 24, 12, 56 }, // 247 + { 56, 108, 108, 56, 0, 0, 0, 0 }, // 248 + { 0, 198, 0, 0, 0, 0, 0, 0 }, // 249 + { 0, 0, 0, 24, 0, 0, 0, 0 }, // 250 + { 24, 56, 24, 24, 60, 0, 0, 0 }, // 251 + { 120, 12, 56, 12, 120, 0, 0, 0 }, // 252 + { 120, 12, 24, 48, 124, 0, 0, 0 }, // 253 + { 0, 0, 60, 60, 60, 60, 0, 0 }, // 254 + { 0, 0, 0, 0, 0, 0, 0, 0 }}; // 255 + +#endif diff --git a/bochs/gui/sdlkeys.h b/bochs/gui/sdlkeys.h new file mode 100644 index 00000000..6fe0ffaf --- /dev/null +++ b/bochs/gui/sdlkeys.h @@ -0,0 +1,257 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +// This file is simply a list of SDL key symbols taken from . +// The order in this file is not important. In sdl.cc, DEF_SDL_KEY() is +// defined as a macro and then it includes this file to fill in all the data in +// its key mapping table. +// +// The symbols, such as SDLK_RETURN, are used for two purposes. They +// are converted into a string (by the # operator in processor), which is +// compared to the host key name in the keymap file. Also, the value of +// the symbol is inserted into the key mapping table. Then the value is +// compared with the keysym field of each key up/down event as it arrives. +// +// If you get undefined symbol errors in this file, it must mean that +// your SDL library version doesn't define those same SDLK_* symbols in +// . You can't fix it with #ifdef SDLK_SYM because +// they are enums, so you'll just have to comment out the offending line. +// The list was generated using symbols from SDL 1.2.3. + +DEF_SDL_KEY( SDLK_UNKNOWN ) +DEF_SDL_KEY( SDLK_FIRST ) +DEF_SDL_KEY( SDLK_BACKSPACE ) +DEF_SDL_KEY( SDLK_TAB ) +DEF_SDL_KEY( SDLK_CLEAR ) +DEF_SDL_KEY( SDLK_RETURN ) +DEF_SDL_KEY( SDLK_PAUSE ) +DEF_SDL_KEY( SDLK_ESCAPE ) +DEF_SDL_KEY( SDLK_SPACE ) +DEF_SDL_KEY( SDLK_EXCLAIM ) +DEF_SDL_KEY( SDLK_QUOTEDBL ) +DEF_SDL_KEY( SDLK_HASH ) +DEF_SDL_KEY( SDLK_DOLLAR ) +DEF_SDL_KEY( SDLK_AMPERSAND ) +DEF_SDL_KEY( SDLK_QUOTE ) +DEF_SDL_KEY( SDLK_LEFTPAREN ) +DEF_SDL_KEY( SDLK_RIGHTPAREN ) +DEF_SDL_KEY( SDLK_ASTERISK ) +DEF_SDL_KEY( SDLK_PLUS ) +DEF_SDL_KEY( SDLK_COMMA ) +DEF_SDL_KEY( SDLK_MINUS ) +DEF_SDL_KEY( SDLK_PERIOD ) +DEF_SDL_KEY( SDLK_SLASH ) +DEF_SDL_KEY( SDLK_0 ) +DEF_SDL_KEY( SDLK_1 ) +DEF_SDL_KEY( SDLK_2 ) +DEF_SDL_KEY( SDLK_3 ) +DEF_SDL_KEY( SDLK_4 ) +DEF_SDL_KEY( SDLK_5 ) +DEF_SDL_KEY( SDLK_6 ) +DEF_SDL_KEY( SDLK_7 ) +DEF_SDL_KEY( SDLK_8 ) +DEF_SDL_KEY( SDLK_9 ) +DEF_SDL_KEY( SDLK_COLON ) +DEF_SDL_KEY( SDLK_SEMICOLON ) +DEF_SDL_KEY( SDLK_LESS ) +DEF_SDL_KEY( SDLK_EQUALS ) +DEF_SDL_KEY( SDLK_GREATER ) +DEF_SDL_KEY( SDLK_QUESTION ) +DEF_SDL_KEY( SDLK_AT ) +DEF_SDL_KEY( /* ) +DEF_SDL_KEY( Skip uppercase letters ) +DEF_SDL_KEY( */ ) +DEF_SDL_KEY( SDLK_LEFTBRACKET ) +DEF_SDL_KEY( SDLK_BACKSLASH ) +DEF_SDL_KEY( SDLK_RIGHTBRACKET ) +DEF_SDL_KEY( SDLK_CARET ) +DEF_SDL_KEY( SDLK_UNDERSCORE ) +DEF_SDL_KEY( SDLK_BACKQUOTE ) +DEF_SDL_KEY( SDLK_a ) +DEF_SDL_KEY( SDLK_b ) +DEF_SDL_KEY( SDLK_c ) +DEF_SDL_KEY( SDLK_d ) +DEF_SDL_KEY( SDLK_e ) +DEF_SDL_KEY( SDLK_f ) +DEF_SDL_KEY( SDLK_g ) +DEF_SDL_KEY( SDLK_h ) +DEF_SDL_KEY( SDLK_i ) +DEF_SDL_KEY( SDLK_j ) +DEF_SDL_KEY( SDLK_k ) +DEF_SDL_KEY( SDLK_l ) +DEF_SDL_KEY( SDLK_m ) +DEF_SDL_KEY( SDLK_n ) +DEF_SDL_KEY( SDLK_o ) +DEF_SDL_KEY( SDLK_p ) +DEF_SDL_KEY( SDLK_q ) +DEF_SDL_KEY( SDLK_r ) +DEF_SDL_KEY( SDLK_s ) +DEF_SDL_KEY( SDLK_t ) +DEF_SDL_KEY( SDLK_u ) +DEF_SDL_KEY( SDLK_v ) +DEF_SDL_KEY( SDLK_w ) +DEF_SDL_KEY( SDLK_x ) +DEF_SDL_KEY( SDLK_y ) +DEF_SDL_KEY( SDLK_z ) +DEF_SDL_KEY( SDLK_DELETE ) +DEF_SDL_KEY( SDLK_WORLD_0 ) +DEF_SDL_KEY( SDLK_WORLD_1 ) +DEF_SDL_KEY( SDLK_WORLD_2 ) +DEF_SDL_KEY( SDLK_WORLD_3 ) +DEF_SDL_KEY( SDLK_WORLD_4 ) +DEF_SDL_KEY( SDLK_WORLD_5 ) +DEF_SDL_KEY( SDLK_WORLD_6 ) +DEF_SDL_KEY( SDLK_WORLD_7 ) +DEF_SDL_KEY( SDLK_WORLD_8 ) +DEF_SDL_KEY( SDLK_WORLD_9 ) +DEF_SDL_KEY( SDLK_WORLD_10 ) +DEF_SDL_KEY( SDLK_WORLD_11 ) +DEF_SDL_KEY( SDLK_WORLD_12 ) +DEF_SDL_KEY( SDLK_WORLD_13 ) +DEF_SDL_KEY( SDLK_WORLD_14 ) +DEF_SDL_KEY( SDLK_WORLD_15 ) +DEF_SDL_KEY( SDLK_WORLD_16 ) +DEF_SDL_KEY( SDLK_WORLD_17 ) +DEF_SDL_KEY( SDLK_WORLD_18 ) +DEF_SDL_KEY( SDLK_WORLD_19 ) +DEF_SDL_KEY( SDLK_WORLD_20 ) +DEF_SDL_KEY( SDLK_WORLD_21 ) +DEF_SDL_KEY( SDLK_WORLD_22 ) +DEF_SDL_KEY( SDLK_WORLD_23 ) +DEF_SDL_KEY( SDLK_WORLD_24 ) +DEF_SDL_KEY( SDLK_WORLD_25 ) +DEF_SDL_KEY( SDLK_WORLD_26 ) +DEF_SDL_KEY( SDLK_WORLD_27 ) +DEF_SDL_KEY( SDLK_WORLD_28 ) +DEF_SDL_KEY( SDLK_WORLD_29 ) +DEF_SDL_KEY( SDLK_WORLD_30 ) +DEF_SDL_KEY( SDLK_WORLD_31 ) +DEF_SDL_KEY( SDLK_WORLD_32 ) +DEF_SDL_KEY( SDLK_WORLD_33 ) +DEF_SDL_KEY( SDLK_WORLD_34 ) +DEF_SDL_KEY( SDLK_WORLD_35 ) +DEF_SDL_KEY( SDLK_WORLD_36 ) +DEF_SDL_KEY( SDLK_WORLD_37 ) +DEF_SDL_KEY( SDLK_WORLD_38 ) +DEF_SDL_KEY( SDLK_WORLD_39 ) +DEF_SDL_KEY( SDLK_WORLD_40 ) +DEF_SDL_KEY( SDLK_WORLD_41 ) +DEF_SDL_KEY( SDLK_WORLD_42 ) +DEF_SDL_KEY( SDLK_WORLD_43 ) +DEF_SDL_KEY( SDLK_WORLD_44 ) +DEF_SDL_KEY( SDLK_WORLD_45 ) +DEF_SDL_KEY( SDLK_WORLD_46 ) +DEF_SDL_KEY( SDLK_WORLD_47 ) +DEF_SDL_KEY( SDLK_WORLD_48 ) +DEF_SDL_KEY( SDLK_WORLD_49 ) +DEF_SDL_KEY( SDLK_WORLD_50 ) +DEF_SDL_KEY( SDLK_WORLD_51 ) +DEF_SDL_KEY( SDLK_WORLD_52 ) +DEF_SDL_KEY( SDLK_WORLD_53 ) +DEF_SDL_KEY( SDLK_WORLD_54 ) +DEF_SDL_KEY( SDLK_WORLD_55 ) +DEF_SDL_KEY( SDLK_WORLD_56 ) +DEF_SDL_KEY( SDLK_WORLD_57 ) +DEF_SDL_KEY( SDLK_WORLD_58 ) +DEF_SDL_KEY( SDLK_WORLD_59 ) +DEF_SDL_KEY( SDLK_WORLD_60 ) +DEF_SDL_KEY( SDLK_WORLD_61 ) +DEF_SDL_KEY( SDLK_WORLD_62 ) +DEF_SDL_KEY( SDLK_WORLD_63 ) +DEF_SDL_KEY( SDLK_WORLD_64 ) +DEF_SDL_KEY( SDLK_WORLD_65 ) +DEF_SDL_KEY( SDLK_WORLD_66 ) +DEF_SDL_KEY( SDLK_WORLD_67 ) +DEF_SDL_KEY( SDLK_WORLD_68 ) +DEF_SDL_KEY( SDLK_WORLD_69 ) +DEF_SDL_KEY( SDLK_WORLD_70 ) +DEF_SDL_KEY( SDLK_WORLD_71 ) +DEF_SDL_KEY( SDLK_WORLD_72 ) +DEF_SDL_KEY( SDLK_WORLD_73 ) +DEF_SDL_KEY( SDLK_WORLD_74 ) +DEF_SDL_KEY( SDLK_WORLD_75 ) +DEF_SDL_KEY( SDLK_WORLD_76 ) +DEF_SDL_KEY( SDLK_WORLD_77 ) +DEF_SDL_KEY( SDLK_WORLD_78 ) +DEF_SDL_KEY( SDLK_WORLD_79 ) +DEF_SDL_KEY( SDLK_WORLD_80 ) +DEF_SDL_KEY( SDLK_WORLD_81 ) +DEF_SDL_KEY( SDLK_WORLD_82 ) +DEF_SDL_KEY( SDLK_WORLD_83 ) +DEF_SDL_KEY( SDLK_WORLD_84 ) +DEF_SDL_KEY( SDLK_WORLD_85 ) +DEF_SDL_KEY( SDLK_WORLD_86 ) +DEF_SDL_KEY( SDLK_WORLD_87 ) +DEF_SDL_KEY( SDLK_WORLD_88 ) +DEF_SDL_KEY( SDLK_WORLD_89 ) +DEF_SDL_KEY( SDLK_WORLD_90 ) +DEF_SDL_KEY( SDLK_WORLD_91 ) +DEF_SDL_KEY( SDLK_WORLD_92 ) +DEF_SDL_KEY( SDLK_WORLD_93 ) +DEF_SDL_KEY( SDLK_WORLD_94 ) +DEF_SDL_KEY( SDLK_WORLD_95 ) +DEF_SDL_KEY( SDLK_KP0 ) +DEF_SDL_KEY( SDLK_KP1 ) +DEF_SDL_KEY( SDLK_KP2 ) +DEF_SDL_KEY( SDLK_KP3 ) +DEF_SDL_KEY( SDLK_KP4 ) +DEF_SDL_KEY( SDLK_KP5 ) +DEF_SDL_KEY( SDLK_KP6 ) +DEF_SDL_KEY( SDLK_KP7 ) +DEF_SDL_KEY( SDLK_KP8 ) +DEF_SDL_KEY( SDLK_KP9 ) +DEF_SDL_KEY( SDLK_KP_PERIOD ) +DEF_SDL_KEY( SDLK_KP_DIVIDE ) +DEF_SDL_KEY( SDLK_KP_MULTIPLY ) +DEF_SDL_KEY( SDLK_KP_MINUS ) +DEF_SDL_KEY( SDLK_KP_PLUS ) +DEF_SDL_KEY( SDLK_KP_ENTER ) +DEF_SDL_KEY( SDLK_KP_EQUALS ) +DEF_SDL_KEY( SDLK_UP ) +DEF_SDL_KEY( SDLK_DOWN ) +DEF_SDL_KEY( SDLK_RIGHT ) +DEF_SDL_KEY( SDLK_LEFT ) +DEF_SDL_KEY( SDLK_INSERT ) +DEF_SDL_KEY( SDLK_HOME ) +DEF_SDL_KEY( SDLK_END ) +DEF_SDL_KEY( SDLK_PAGEUP ) +DEF_SDL_KEY( SDLK_PAGEDOWN ) +DEF_SDL_KEY( SDLK_F1 ) +DEF_SDL_KEY( SDLK_F2 ) +DEF_SDL_KEY( SDLK_F3 ) +DEF_SDL_KEY( SDLK_F4 ) +DEF_SDL_KEY( SDLK_F5 ) +DEF_SDL_KEY( SDLK_F6 ) +DEF_SDL_KEY( SDLK_F7 ) +DEF_SDL_KEY( SDLK_F8 ) +DEF_SDL_KEY( SDLK_F9 ) +DEF_SDL_KEY( SDLK_F10 ) +DEF_SDL_KEY( SDLK_F11 ) +DEF_SDL_KEY( SDLK_F12 ) +DEF_SDL_KEY( SDLK_F13 ) +DEF_SDL_KEY( SDLK_F14 ) +DEF_SDL_KEY( SDLK_F15 ) +DEF_SDL_KEY( SDLK_NUMLOCK ) +DEF_SDL_KEY( SDLK_CAPSLOCK ) +DEF_SDL_KEY( SDLK_SCROLLOCK ) +DEF_SDL_KEY( SDLK_RSHIFT ) +DEF_SDL_KEY( SDLK_LSHIFT ) +DEF_SDL_KEY( SDLK_RCTRL ) +DEF_SDL_KEY( SDLK_LCTRL ) +DEF_SDL_KEY( SDLK_RALT ) +DEF_SDL_KEY( SDLK_LALT ) +DEF_SDL_KEY( SDLK_RMETA ) +DEF_SDL_KEY( SDLK_LMETA ) +DEF_SDL_KEY( SDLK_LSUPER ) +DEF_SDL_KEY( SDLK_RSUPER ) +DEF_SDL_KEY( SDLK_MODE ) +DEF_SDL_KEY( SDLK_COMPOSE ) +DEF_SDL_KEY( SDLK_HELP ) +DEF_SDL_KEY( SDLK_PRINT ) +DEF_SDL_KEY( SDLK_SYSREQ ) +DEF_SDL_KEY( SDLK_BREAK ) +DEF_SDL_KEY( SDLK_MENU ) +DEF_SDL_KEY( SDLK_POWER ) +DEF_SDL_KEY( SDLK_EURO ) +DEF_SDL_KEY( SDLK_UNDO ) diff --git a/bochs/gui/siminterface.cc b/bochs/gui/siminterface.cc new file mode 100644 index 00000000..5d7d39a6 --- /dev/null +++ b/bochs/gui/siminterface.cc @@ -0,0 +1,1264 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// See siminterface.h for description of the siminterface concept. +// Basically, the siminterface is visible from both the simulator and +// the configuration user interface, and allows them to talk to each other. + +#include "param_names.h" +#include "iodev.h" + +bx_simulator_interface_c *SIM = NULL; +logfunctions *siminterface_log = NULL; +bx_list_c *root_param = NULL; +#define LOG_THIS siminterface_log-> + +// bx_simulator_interface just defines the interface that the Bochs simulator +// and the gui will use to talk to each other. None of the methods of +// bx_simulator_interface are implemented; they are all virtual. The +// bx_real_sim_c class is a child of bx_simulator_interface_c, and it +// implements all the methods. The idea is that a gui needs to know only +// definition of bx_simulator_interface to talk to Bochs. The gui should +// not need to include bochs.h. +// +// I made this separation to ensure that all guis use the siminterface to do +// access bochs internals, instead of accessing things like +// bx_keyboard.s.internal_buffer[4] (or whatever) directly. -Bryce +// + +typedef struct _user_option_t { + const char *name; + user_option_parser_t parser; + user_option_save_t savefn; + struct _user_option_t *next; +} user_option_t; + +class bx_real_sim_c : public bx_simulator_interface_c { + bxevent_handler bxevent_callback; + void *bxevent_callback_data; + const char *registered_ci_name; + config_interface_callback_t ci_callback; + void *ci_callback_data; + user_option_t *user_options; + int init_done; + int enabled; + // save context to jump to if we must quit unexpectedly + jmp_buf *quit_context; + int exit_code; + unsigned param_id; + bx_bool wx_debug_gui; +public: + bx_real_sim_c(); + //DanceOS Richard Hellwig +#ifdef DANCEOS_RESTORE + virtual ~bx_real_sim_c() {root_param = NULL;} +#else + virtual ~bx_real_sim_c() {} +#endif + virtual void set_quit_context(jmp_buf *context) { quit_context = context; } + virtual int get_init_done() { return init_done; } + virtual int set_init_done(int n) { init_done = n; return 0;} + virtual void reset_all_param(); + // new param methods + virtual bx_param_c *get_param(const char *pname, bx_param_c *base=NULL); + virtual bx_param_num_c *get_param_num(const char *pname, bx_param_c *base=NULL); + virtual bx_param_string_c *get_param_string(const char *pname, bx_param_c *base=NULL); + virtual bx_param_bool_c *get_param_bool(const char *pname, bx_param_c *base=NULL); + virtual bx_param_enum_c *get_param_enum(const char *pname, bx_param_c *base=NULL); + virtual Bit32u gen_param_id() { return param_id++; } + virtual int get_n_log_modules(); + virtual char *get_prefix(int mod); + virtual int get_log_action(int mod, int level); + virtual void set_log_action(int mod, int level, int action); + virtual char *get_action_name(int action); + virtual int get_default_log_action(int level) { + return logfunctions::get_default_action(level); + } + virtual void set_default_log_action(int level, int action) { + logfunctions::set_default_action(level, action); + } + virtual const char *get_log_level_name(int level); + virtual int get_max_log_level() { return N_LOGLEV; } + virtual void quit_sim(int code); + virtual int get_exit_code() { return exit_code; } + virtual int get_default_rc(char *path, int len); + virtual int read_rc(const char *path); + virtual int write_rc(const char *path, int overwrite); + virtual int get_log_file(char *path, int len); + virtual int set_log_file(const char *path); + virtual int get_log_prefix(char *prefix, int len); + virtual int set_log_prefix(const char *prefix); + virtual int get_debugger_log_file(char *path, int len); + virtual int set_debugger_log_file(const char *path); + virtual int get_cdrom_options(int drive, bx_list_c **out, int *device = NULL); + virtual int hdimage_get_mode(const char *mode); + virtual void set_notify_callback(bxevent_handler func, void *arg); + virtual void get_notify_callback(bxevent_handler *func, void **arg); + virtual BxEvent* sim_to_ci_event(BxEvent *event); + virtual int log_msg(const char *prefix, int level, const char *msg); + virtual int ask_param(bx_param_c *param); + virtual int ask_param(const char *pname); + // ask the user for a pathname + virtual int ask_filename(const char *filename, int maxlen, const char *prompt, const char *the_default, int flags); + // yes/no dialog + virtual int ask_yes_no(const char *title, const char *prompt, bx_bool the_default); + // called at a regular interval, currently by the keyboard handler. + virtual void periodic(); + virtual int create_disk_image(const char *filename, int sectors, bx_bool overwrite); + virtual void refresh_ci(); + virtual void refresh_vga() { + // maybe need to check if something has been initialized yet? + DEV_vga_refresh(); + } + virtual void handle_events() { + // maybe need to check if something has been initialized yet? + bx_gui->handle_events(); + } + // find first hard drive or cdrom + bx_param_c *get_first_atadevice(Bit32u search_type); + bx_param_c *get_first_cdrom() { + return get_first_atadevice(BX_ATA_DEVICE_CDROM); + } + bx_param_c *get_first_hd() { + return get_first_atadevice(BX_ATA_DEVICE_DISK); + } +#if BX_DEBUGGER + virtual void debug_break(); + virtual void debug_interpret_cmd (char *cmd); + virtual char *debug_get_next_command (); + virtual void debug_puts(const char *cmd); +#endif + virtual void register_configuration_interface ( + const char* name, + config_interface_callback_t callback, + void *userdata); + virtual int configuration_interface(const char* name, ci_command_t command); + virtual int begin_simulation(int argc, char *argv[]); + virtual void set_sim_thread_func(is_sim_thread_func_t func) {} + virtual bx_bool is_sim_thread(); + virtual void set_debug_gui(bx_bool val) { wx_debug_gui = val; } + virtual bx_bool has_debug_gui() const { return wx_debug_gui; } + // provide interface to bx_gui->set_display_mode() method for config + // interfaces to use. + virtual void set_display_mode(disp_mode_t newmode) { + if (bx_gui != NULL) + bx_gui->set_display_mode(newmode); + } + virtual bx_bool test_for_text_console(); + // user-defined option support + virtual bx_bool register_user_option(const char *keyword, user_option_parser_t parser, user_option_save_t save_func); + virtual bx_bool unregister_user_option(const char *keyword); + virtual bx_bool is_user_option(const char *keyword); + virtual Bit32s parse_user_option(const char *context, int num_params, char *params []); + virtual Bit32s save_user_options(FILE *fp); + + // save/restore support + virtual void init_save_restore(); + virtual bx_bool save_state(const char *checkpoint_path); + virtual bx_bool restore_config(); + virtual bx_bool restore_logopts(); + virtual bx_bool restore_hardware(); + virtual bx_list_c *get_bochs_root() { + return (bx_list_c*)get_param("bochs", NULL); + } + virtual bx_bool restore_bochs_param(bx_list_c *root, const char *sr_path, const char *restore_name); + +private: + bx_bool save_sr_param(FILE *fp, bx_param_c *node, const char *sr_path, int level); +}; + +#if BX_DEBUGGER && BX_DEBUGGER_GUI +// FIXME: these probably belong inside the bx_simulator_interface_c structure +char *debug_cmd = NULL; +bx_bool debug_cmd_ready = 0; +bx_bool vgaw_refresh = 0; +#endif + +// recursive function to find parameters from the path +static bx_param_c *find_param(const char *full_pname, const char *rest_of_pname, bx_param_c *base) +{ + const char *from = rest_of_pname; + char component[BX_PATHNAME_LEN]; + char *to = component; + // copy the first piece of pname into component, stopping at first separator + // or at the end of the string + while (*from != 0 && *from != '.') { + *to = *from; + to++; + from++; + } + *to = 0; + if (!component[0]) { + BX_PANIC(("find_param: found empty component in parameter name '%s'", full_pname)); + // or does that mean that we're done? + } + if (base->get_type() != BXT_LIST) { + BX_PANIC(("find_param: base was not a list!")); + } + BX_DEBUG(("searching for component '%s' in list '%s'", component, base->get_name())); + + // find the component in the list. + bx_list_c *list = (bx_list_c *)base; + bx_param_c *child = list->get_by_name(component); + // if child not found, there is nothing else that can be done. return NULL. + if (child == NULL) return NULL; + if (from[0] == 0) { + // that was the end of the path, we're done + return child; + } + // continue parsing the path + BX_ASSERT(from[0] == '.'); + from++; // skip over the separator + return find_param(full_pname, from, child); +} + +bx_param_c *bx_real_sim_c::get_param(const char *pname, bx_param_c *base) +{ + if (base == NULL) + base = root_param; + // to access top level object, look for parameter "." + if (pname[0] == '.' && pname[1] == 0) + return base; + return find_param(pname, pname, base); +} + +bx_param_num_c *bx_real_sim_c::get_param_num(const char *pname, bx_param_c *base) +{ + bx_param_c *gen = get_param(pname, base); + if (gen==NULL) { + BX_ERROR(("get_param_num(%s) could not find a parameter", pname)); + return NULL; + } + int type = gen->get_type(); + if (type == BXT_PARAM_NUM || type == BXT_PARAM_BOOL || type == BXT_PARAM_ENUM) + return (bx_param_num_c *)gen; + BX_ERROR(("get_param_num(%s) could not find an integer parameter with that name", pname)); + return NULL; +} + +bx_param_string_c *bx_real_sim_c::get_param_string(const char *pname, bx_param_c *base) +{ + bx_param_c *gen = get_param(pname, base); + if (gen==NULL) { + BX_ERROR(("get_param_string(%s) could not find a parameter", pname)); + return NULL; + } + if (gen->get_type() == BXT_PARAM_STRING) + return (bx_param_string_c *)gen; + BX_ERROR(("get_param_string(%s) could not find an integer parameter with that name", pname)); + return NULL; +} + +bx_param_bool_c *bx_real_sim_c::get_param_bool(const char *pname, bx_param_c *base) +{ + bx_param_c *gen = get_param(pname, base); + if (gen==NULL) { + BX_ERROR(("get_param_bool(%s) could not find a parameter", pname)); + return NULL; + } + if (gen->get_type () == BXT_PARAM_BOOL) + return (bx_param_bool_c *)gen; + BX_ERROR(("get_param_bool(%s) could not find a bool parameter with that name", pname)); + return NULL; +} + +bx_param_enum_c *bx_real_sim_c::get_param_enum(const char *pname, bx_param_c *base) +{ + bx_param_c *gen = get_param(pname, base); + if (gen==NULL) { + BX_ERROR(("get_param_enum(%s) could not find a parameter", pname)); + return NULL; + } + if (gen->get_type() == BXT_PARAM_ENUM) + return (bx_param_enum_c *)gen; + BX_ERROR(("get_param_enum(%s) could not find a enum parameter with that name", pname)); + return NULL; +} + +void bx_init_siminterface() +{ + siminterface_log = new logfunctions(); + siminterface_log->put("CTRL"); + if (SIM == NULL) + SIM = new bx_real_sim_c(); + if (root_param == NULL) { + root_param = new bx_list_c(NULL, + "bochs", + "list of top level bochs parameters", + 30); + } +} + +bx_real_sim_c::bx_real_sim_c() +{ + bxevent_callback = NULL; + bxevent_callback_data = NULL; + ci_callback = NULL; + ci_callback_data = NULL; + is_sim_thread_func = NULL; + wx_debug_gui = 0; + + enabled = 1; + init_done = 0; + quit_context = NULL; + exit_code = 0; + param_id = BXP_NEW_PARAM_ID; + user_options = NULL; +} + +void bx_real_sim_c::reset_all_param() +{ + bx_reset_options(); +} + +int bx_real_sim_c::get_n_log_modules() +{ + return io->get_n_logfns(); +} + +char *bx_real_sim_c::get_prefix(int mod) +{ + logfunc_t *logfn = io->get_logfn(mod); + return logfn->getprefix(); +} + +int bx_real_sim_c::get_log_action(int mod, int level) +{ + logfunc_t *logfn = io->get_logfn(mod); + return logfn->getonoff(level); +} + +void bx_real_sim_c::set_log_action(int mod, int level, int action) +{ + // normal + if (mod >= 0) { + logfunc_t *logfn = io->get_logfn(mod); + logfn->setonoff(level, action); + return; + } + // if called with mod<0 loop over all + int nmod = get_n_log_modules (); + for (mod=0; modgetaction(action); +} + +const char *bx_real_sim_c::get_log_level_name(int level) +{ + return io->getlevel(level); +} + +void bx_real_sim_c::quit_sim(int code) +{ + BX_INFO(("quit_sim called with exit code %d", code)); + exit_code = code; + io->exit_log(); + // use longjmp to quit cleanly, no matter where in the stack we are. + if (quit_context != NULL) { + longjmp(*quit_context, 1); + BX_PANIC(("in bx_real_sim_c::quit_sim, longjmp should never return")); + } else { + // use exit() to stop the application. + if (!code) + BX_PANIC(("Quit simulation command")); + ::exit(exit_code); + } +} + +int bx_real_sim_c::get_default_rc(char *path, int len) +{ + char *rc = bx_find_bochsrc(); + if (rc == NULL) return -1; + strncpy(path, rc, len); + path[len-1] = 0; + return 0; +} + +int bx_real_sim_c::read_rc(const char *rc) +{ + return bx_read_configuration(rc); +} + +// return values: +// 0: written ok +// -1: failed +// -2: already exists, and overwrite was off +int bx_real_sim_c::write_rc(const char *rc, int overwrite) +{ + return bx_write_configuration(rc, overwrite); +} + +int bx_real_sim_c::get_log_file(char *path, int len) +{ + strncpy(path, SIM->get_param_string(BXPN_LOG_FILENAME)->getptr(), len); + return 0; +} + +int bx_real_sim_c::set_log_file(const char *path) +{ + SIM->get_param_string(BXPN_LOG_FILENAME)->set(path); + return 0; +} + +int bx_real_sim_c::get_log_prefix(char *prefix, int len) +{ + strncpy(prefix, SIM->get_param_string(BXPN_LOG_PREFIX)->getptr(), len); + return 0; +} + +int bx_real_sim_c::set_log_prefix(const char *prefix) +{ + SIM->get_param_string(BXPN_LOG_PREFIX)->set(prefix); + return 0; +} + +int bx_real_sim_c::get_debugger_log_file(char *path, int len) +{ + strncpy(path, SIM->get_param_string(BXPN_DEBUGGER_LOG_FILENAME)->getptr(), len); + return 0; +} + +int bx_real_sim_c::set_debugger_log_file(const char *path) +{ + SIM->get_param_string(BXPN_DEBUGGER_LOG_FILENAME)->set(path); + return 0; +} + +int bx_real_sim_c::get_cdrom_options(int level, bx_list_c **out, int *where) +{ + char pname[80]; + + for (Bit8u channel=0; channelget_param(pname); + if (SIM->get_param_enum("type", devlist)->get() == BX_ATA_DEVICE_CDROM) { + if (level==0) { + *out = devlist; + if (where != NULL) *where = (channel * 2) + device; + return 1; + } else { + level--; + } + } + } + } + return 0; +} + +const char *floppy_devtype_names[] = { "none", "5.25\" 360K", "5.25\" 1.2M", "3.5\" 720K", "3.5\" 1.44M", "3.5\" 2.88M", NULL }; +const char *floppy_type_names[] = { "none", "1.2M", "1.44M", "2.88M", "720K", "360K", "160K", "180K", "320K", "auto", NULL }; +int floppy_type_n_sectors[] = { -1, 80*2*15, 80*2*18, 80*2*36, 80*2*9, 40*2*9, 40*1*8, 40*1*9, 40*2*8, -1 }; +const char *bochs_bootdisk_names[] = { "none", "floppy", "disk","cdrom", "network", NULL }; + +const char *hdimage_mode_names[] = { + "flat", + "concat", + "external", + "dll", + "sparse", + "vmware3", + "vmware4", + "undoable", + "growing", + "volatile", + "z-undoable", + "z-volatile", + "vvfat", + NULL +}; + +int bx_real_sim_c::hdimage_get_mode(const char *mode) +{ + Bit8u i; + + for (i = 0; i <= BX_HDIMAGE_MODE_LAST; i++) { + if (!strcmp(mode, hdimage_mode_names[i])) return i; + } + return -1; +} + +void bx_real_sim_c::set_notify_callback(bxevent_handler func, void *arg) +{ + bxevent_callback = func; + bxevent_callback_data = arg; +} + +void bx_real_sim_c::get_notify_callback(bxevent_handler *func, void **arg) +{ + *func = bxevent_callback; + *arg = bxevent_callback_data; +} + +BxEvent *bx_real_sim_c::sim_to_ci_event(BxEvent *event) +{ + if (bxevent_callback == NULL) { + BX_ERROR(("notify called, but no bxevent_callback function is registered")); + return NULL; + } else { + return (*bxevent_callback)(bxevent_callback_data, event); + } +} + +// returns 0 for continue, 1 for alwayscontinue, 2 for die. +int bx_real_sim_c::log_msg(const char *prefix, int level, const char *msg) +{ + BxEvent be; + be.type = BX_SYNC_EVT_LOG_ASK; + be.u.logmsg.prefix = prefix; + be.u.logmsg.level = level; + be.u.logmsg.msg = msg; + // default return value in case something goes wrong. + be.retcode = BX_LOG_NOTIFY_FAILED; + // calling notify + sim_to_ci_event (&be); + return be.retcode; +} + +// Called by simulator whenever it needs the user to choose a new value +// for a registered parameter. Create a synchronous ASK_PARAM event, +// send it to the CI, and wait for the response. The CI will call the +// set() method on the parameter if the user changes the value. +int bx_real_sim_c::ask_param(bx_param_c *param) +{ + BX_ASSERT(param != NULL); + // create appropriate event + BxEvent event; + event.type = BX_SYNC_EVT_ASK_PARAM; + event.u.param.param = param; + sim_to_ci_event(&event); + return event.retcode; +} + +int bx_real_sim_c::ask_param(const char *pname) +{ + bx_param_c *paramptr = SIM->get_param(pname); + BX_ASSERT(paramptr != NULL); + // create appropriate event + BxEvent event; + event.type = BX_SYNC_EVT_ASK_PARAM; + event.u.param.param = paramptr; + sim_to_ci_event(&event); + return event.retcode; +} + +int bx_real_sim_c::ask_filename(const char *filename, int maxlen, const char *prompt, const char *the_default, int flags) +{ + BxEvent event; + bx_param_string_c param(NULL, "filename", prompt, "", the_default, maxlen); + flags |= param.IS_FILENAME; + param.set_options(flags); + event.type = BX_SYNC_EVT_ASK_PARAM; + event.u.param.param = ¶m; + sim_to_ci_event(&event); + if (event.retcode >= 0) + memcpy((char *)filename, param.getptr(), maxlen); + return event.retcode; +} + +int bx_real_sim_c::ask_yes_no(const char *title, const char *prompt, bx_bool the_default) +{ + BxEvent event; + char format[512]; + + bx_param_bool_c param(NULL, "yes_no", title, prompt, the_default); + sprintf(format, "%s\n\n%s [%%s] ", title, prompt); + param.set_ask_format(format); + event.type = BX_SYNC_EVT_ASK_PARAM; + event.u.param.param = ¶m; + sim_to_ci_event(&event); + if (event.retcode >= 0) { + return param.get(); + } + else { + return event.retcode; + } +} + +void bx_real_sim_c::periodic() +{ + // give the GUI a chance to do periodic things on the bochs thread. in + // particular, notice if the thread has been asked to die. + BxEvent tick; + tick.type = BX_SYNC_EVT_TICK; + sim_to_ci_event (&tick); + if (tick.retcode < 0) { + BX_INFO(("Bochs thread has been asked to quit.")); +#if !BX_DEBUGGER + bx_atexit(); + quit_sim(0); +#else + bx_dbg_exit(0); +#endif + } + static int refresh_counter = 0; + if (++refresh_counter == 50) { + // only ask the CI to refresh every 50 times periodic() is called. + // This should obviously be configurable because system speeds and + // user preferences vary. + refresh_ci(); + refresh_counter = 0; + } +} + +// create a disk image file called filename, size=512 bytes * sectors. +// If overwrite is 0 and the file exists, returns -1 without changing it. +// Otherwise, opens up the image and starts writing. Returns -2 if +// the image could not be opened, or -3 if there are failures during +// write, e.g. disk full. +// +// wxWidgets: This may be called from the gui thread. +int bx_real_sim_c::create_disk_image(const char *filename, int sectors, bx_bool overwrite) +{ + FILE *fp; + if (!overwrite) { + // check for existence first + fp = fopen(filename, "r"); + if (fp) { + // yes it exists + fclose(fp); + return -1; + } + } + fp = fopen(filename, "w"); + if (fp == NULL) { +#ifdef HAVE_PERROR + char buffer[1024]; + sprintf(buffer, "while opening '%s' for writing", filename); + perror(buffer); + // not sure how to get this back into the CI +#endif + return -2; + } + int sec = sectors; + /* + * seek to sec*512-1 and write a single character. + * can't just do: fseek(fp, 512*sec-1, SEEK_SET) + * because 512*sec may be too large for signed int. + */ + while (sec > 0) + { + /* temp <-- min(sec, 4194303) + * 4194303 is (int)(0x7FFFFFFF/512) + */ + int temp = ((sec < 4194303) ? sec : 4194303); + fseek(fp, 512*temp, SEEK_CUR); + sec -= temp; + } + + fseek(fp, -1, SEEK_CUR); + if (fputc('\0', fp) == EOF) + { + fclose(fp); + return -3; + } + fclose(fp); + return 0; +} + +void bx_real_sim_c::refresh_ci() +{ + if (SIM->has_debug_gui()) { + // presently, only wxWidgets interface uses these events + // It's an async event, so allocate a pointer and send it. + // The event will be freed by the recipient. + BxEvent *event = new BxEvent(); + event->type = BX_ASYNC_EVT_REFRESH; + sim_to_ci_event(event); + } +} + +bx_param_c *bx_real_sim_c::get_first_atadevice(Bit32u search_type) +{ + char pname[80]; + for (int channel=0; channelget_param_bool(pname)->get()) + continue; + for (int slave=0; slave<2; slave++) { + sprintf(pname, "ata.%d.%s.present", channel, (slave==0)?"master":"slave"); + Bit32u present = SIM->get_param_bool(pname)->get(); + sprintf(pname, "ata.%d.%s.type", channel, (slave==0)?"master":"slave"); + Bit32u type = SIM->get_param_enum(pname)->get(); + if (present && (type == search_type)) { + sprintf(pname, "ata.%d.%s", channel, (slave==0)?"master":"slave"); + return SIM->get_param(pname); + } + } + } + return NULL; +} + +#if BX_DEBUGGER + +// this can be safely called from either thread. +void bx_real_sim_c::debug_break() +{ + bx_debug_break(); +} + +// this should only be called from the sim_thread. +void bx_real_sim_c::debug_interpret_cmd(char *cmd) +{ + if (!is_sim_thread()) { + fprintf(stderr, "ERROR: debug_interpret_cmd called but not from sim_thread\n"); + return; + } + bx_dbg_interpret_line(cmd); +} + +char *bx_real_sim_c::debug_get_next_command() +{ + BxEvent event; + event.type = BX_SYNC_EVT_GET_DBG_COMMAND; + BX_DEBUG(("asking for next debug command")); + sim_to_ci_event (&event); + BX_DEBUG(("received next debug command: '%s'", event.u.debugcmd.command)); + if (event.retcode >= 0) + return event.u.debugcmd.command; + return NULL; +} + +void bx_real_sim_c::debug_puts(const char *text) +{ + if (SIM->has_debug_gui()) { + // send message to the wxWidgets debugger + BxEvent *event = new BxEvent(); + event->type = BX_ASYNC_EVT_DBG_MSG; + event->u.logmsg.msg = text; + sim_to_ci_event(event); + } else { + // text mode debugger: just write to console + fputs(text, stdout); + } +} +#endif + +void bx_real_sim_c::register_configuration_interface( + const char* name, + config_interface_callback_t callback, + void *userdata) +{ + ci_callback = callback; + ci_callback_data = userdata; + registered_ci_name = name; +} + +int bx_real_sim_c::configuration_interface(const char *ignore, ci_command_t command) +{ + bx_param_enum_c *ci_param = SIM->get_param_enum(BXPN_SEL_CONFIG_INTERFACE); + const char *name = ci_param->get_selected(); + if (!ci_callback) { + BX_PANIC(("no configuration interface was loaded")); + return -1; + } + if (strcmp(name, registered_ci_name) != 0) { + BX_PANIC(("siminterface does not support loading one configuration interface and then calling another")); + return -1; + } + if (!strcmp(name, "wx")) + wx_debug_gui = 1; + else + wx_debug_gui = 0; + // enter configuration mode, just while running the configuration interface + set_display_mode(DISP_MODE_CONFIG); + int retval = (*ci_callback)(ci_callback_data, command); + set_display_mode(DISP_MODE_SIM); + return retval; +} + +int bx_real_sim_c::begin_simulation(int argc, char *argv[]) +{ + return bx_begin_simulation(argc, argv); +} + +bx_bool bx_real_sim_c::is_sim_thread() +{ + if (is_sim_thread_func == NULL) return 1; + return (*is_sim_thread_func)(); +} + +// check if the text console exists. On some platforms, if Bochs is +// started from the "Start Menu" or by double clicking on it on a Mac, +// there may be nothing attached to stdin/stdout/stderr. This function +// tests if stdin/stdout/stderr are usable and returns 0 if not. +bx_bool bx_real_sim_c::test_for_text_console() +{ +#if BX_WITH_CARBON + // In a Carbon application, you have a text console if you run the app from + // the command line, but if you start it from the finder you don't. + if(!isatty(STDIN_FILENO)) return 0; +#endif + // default: yes + return 1; +} + +bx_bool bx_real_sim_c::is_user_option(const char *keyword) +{ + user_option_t *user_option; + + for (user_option = user_options; user_option; user_option = user_option->next) { + if (!strcmp(user_option->name, keyword)) return 1; + } + return 0; +} + +bx_bool bx_real_sim_c::register_user_option(const char *keyword, user_option_parser_t parser, + user_option_save_t save_func) +{ + user_option_t *user_option; + + user_option = (user_option_t *)malloc(sizeof(user_option_t)); + if (user_option == NULL) { + BX_PANIC(("can't allocate user_option_t")); + return 0; + } + + user_option->name = keyword; + user_option->parser = parser; + user_option->savefn = save_func; + user_option->next = NULL; + + if (user_options == NULL) { + user_options = user_option; + } else { + user_option_t *temp = user_options; + + while (temp->next) { + if (!strcmp(temp->name, keyword)) { + free(user_option); + return 0; + } + temp = temp->next; + } + temp->next = user_option; + } + return 1; +} + +bx_bool bx_real_sim_c::unregister_user_option(const char *keyword) +{ + user_option_t *user_option, *prev = NULL; + + for (user_option = user_options; user_option; user_option = user_option->next) { + if (!strcmp(user_option->name, keyword)) { + if (prev == NULL) { + user_options = user_option->next; + } else { + prev->next = user_option->next; + } + free(user_option); + return 1; + } else { + prev = user_option; + } + } + return 0; +} + +Bit32s bx_real_sim_c::parse_user_option(const char *context, int num_params, char *params []) +{ + user_option_t *user_option; + + for (user_option = user_options; user_option; user_option = user_option->next) { + if ((!strcmp(user_option->name, params[0])) && + (user_option->parser != NULL)) { + return (*user_option->parser)(context, num_params, params); + } + } + return -1; + +} + +Bit32s bx_real_sim_c::save_user_options(FILE *fp) +{ + user_option_t *user_option; + + for (user_option = user_options; user_option; user_option = user_option->next) { + if (user_option->savefn != NULL) { + (*user_option->savefn)(fp); + } + } + return 0; +} + +void bx_real_sim_c::init_save_restore() +{ + bx_list_c *list; + + if ((list = get_bochs_root()) != NULL) { + list->clear(); + } else { + list = new bx_list_c(root_param, + "bochs", + "subtree for save/restore", + 30 + BX_MAX_SMP_THREADS_SUPPORTED); + } +} + +bx_bool bx_real_sim_c::save_state(const char *checkpoint_path) +{ + char sr_file[BX_PATHNAME_LEN]; + char prefix[8]; + int i, dev, ndev = SIM->get_n_log_modules(); + int type, ntype = SIM->get_max_log_level(); + + sprintf(sr_file, "%s/config", checkpoint_path); + if (write_rc(sr_file, 1) < 0) + return 0; + sprintf(sr_file, "%s/logopts", checkpoint_path); + FILE *fp = fopen(sr_file, "w"); + if (fp != NULL) { + for (dev=0; dev= 0) && (prefix[i] == ' ')) prefix[i--] = 0; + if (strlen(prefix) > 0) { + fprintf(fp, "%s: ", prefix); + for (type=0; type 0) fprintf(fp, ", "); + fprintf(fp, "%s=%s", get_log_level_name(type), get_action_name(get_log_action(dev, type))); + } + fprintf(fp, "\n"); + } + } + fclose(fp); + } else { + return 0; + } + bx_list_c *sr_list = get_bochs_root(); + ndev = sr_list->get_size(); + for (dev=0; devget(dev)->get_name()); + fp = fopen(sr_file, "w"); + if (fp != NULL) { + save_sr_param(fp, sr_list->get(dev), checkpoint_path, 0); + fclose(fp); + } else { + return 0; + } + } + return 1; +} + +bx_bool bx_real_sim_c::restore_config() +{ + char config[BX_PATHNAME_LEN]; + sprintf(config, "%s/config", get_param_string(BXPN_RESTORE_PATH)->getptr()); + BX_INFO(("restoring '%s'", config)); + return (read_rc(config) >= 0); +} + +bx_bool bx_real_sim_c::restore_logopts() +{ + char logopts[BX_PATHNAME_LEN]; + char line[512], string[512], prefix[8]; + char *ret, *ptr; + int d, i, j, dev = 0, type = 0, action = 0; + int ndev = SIM->get_n_log_modules(); + FILE *fp; + + sprintf(logopts, "%s/logopts", get_param_string(BXPN_RESTORE_PATH)->getptr()); + BX_INFO(("restoring '%s'", logopts)); + fp = fopen(logopts, "r"); + if (fp != NULL) { + do { + ret = fgets(line, sizeof(line)-1, fp); + line[sizeof(line) - 1] = '\0'; + int len = strlen(line); + if ((len>0) && (line[len-1] < ' ')) + line[len-1] = '\0'; + i = 0; + if ((ret != NULL) && strlen(line)) { + ptr = strtok(line, ":"); + while (ptr) { + strcpy(string, ptr); + while (isspace(string[0])) strcpy(string, string+1); + while (isspace(string[strlen(string)-1])) string[strlen(string)-1] = 0; + if (i == 0) { + sprintf(prefix, "[%-5s]", string); + dev = -1; + for (d = 0; d < ndev; d++) { + if (!strcmp(prefix, get_prefix(d))) { + dev = d; + } + } + } else if (dev >= 0) { + j = 6; + if (!strncmp(string, "DEBUG=", 6)) { + type = LOGLEV_DEBUG; + } else if (!strncmp(string, "INFO=", 5)) { + type = LOGLEV_INFO; + j = 5; + } else if (!strncmp(string, "ERROR=", 6)) { + type = LOGLEV_ERROR; + } else if (!strncmp(string, "PANIC=", 6)) { + type = LOGLEV_PANIC; + } else if (!strncmp(string, "PASS=", 5)) { + type = LOGLEV_PASS; + j = 5; + } + if (!strcmp(string+j, "ignore")) { + action = ACT_IGNORE; + } else if (!strcmp(string+j, "report")) { + action = ACT_REPORT; + } else if (!strcmp(string+j, "ask")) { + action = ACT_ASK; + } else if (!strcmp(string+j, "fatal")) { + action = ACT_FATAL; + } + set_log_action(dev, type, action); + } else { + if (i == 1) { + BX_ERROR(("restore_logopts(): log module '%s' not found", prefix)); + } + } + i++; + ptr = strtok(NULL, ","); + } + } + } while (!feof(fp)); + fclose(fp); + } else { + return 0; + } + return 1; +} + +bx_bool bx_real_sim_c::restore_bochs_param(bx_list_c *root, const char *sr_path, const char *restore_name) +{ + char devstate[BX_PATHNAME_LEN], devdata[BX_PATHNAME_LEN]; + char line[512], buf[512], pname[80]; + char *ret, *ptr; + int i, j, p; + unsigned n; + bx_param_c *param = NULL; + FILE *fp, *fp2; + + if (root->get_by_name(restore_name) == NULL) { + BX_ERROR(("restore_bochs_param(): unknown parameter to restore")); + return 0; + } + + sprintf(devstate, "%s/%s", sr_path, restore_name); + BX_INFO(("restoring '%s'", devstate)); + bx_list_c *base = root; + fp = fopen(devstate, "r"); + if (fp != NULL) { + do { + ret = fgets(line, sizeof(line)-1, fp); + line[sizeof(line) - 1] = '\0'; + int len = strlen(line); + if ((len>0) && (line[len-1] < ' ')) + line[len-1] = '\0'; + i = 0; + if ((ret != NULL) && strlen(line)) { + ptr = strtok(line, " "); + while (ptr) { + if (i == 0) { + if (!strcmp(ptr, "}")) { + base = (bx_list_c*)base->get_parent(); + break; + } else { + param = get_param(ptr, base); + } + } else if (i == 2) { + if (param == NULL) { + BX_PANIC(("cannot find param!")); + } + else { + if (param->get_type() != BXT_LIST) { + param->get_param_path(pname, 80); + BX_DEBUG(("restoring parameter '%s'", pname)); + } + switch (param->get_type()) { + case BXT_PARAM_NUM: + if ((ptr[0] == '0') && (ptr[1] == 'x')) { + ((bx_param_num_c*)param)->set(strtoull(ptr, NULL, 16)); + } else { + ((bx_param_num_c*)param)->set(strtoull(ptr, NULL, 10)); + } + break; + case BXT_PARAM_BOOL: + ((bx_param_bool_c*)param)->set(!strcmp(ptr, "true")); + break; + case BXT_PARAM_ENUM: + ((bx_param_enum_c*)param)->set_by_name(ptr); + break; + case BXT_PARAM_STRING: + if (((bx_param_string_c*)param)->get_options() & bx_param_string_c::RAW_BYTES) { + p = 0; + for (j = 0; j < ((bx_param_string_c*)param)->get_maxsize(); j++) { + if (ptr[p] == ((bx_param_string_c*)param)->get_separator()) { + p++; + } + if (sscanf(ptr+p, "%02x", &n) == 1) { + buf[j] = n; + p += 2; + } + } + ((bx_param_string_c*)param)->set(buf); + } else { + ((bx_param_string_c*)param)->set(ptr); + } + break; + case BXT_PARAM_DATA: + sprintf(devdata, "%s/%s", sr_path, ptr); + fp2 = fopen(devdata, "rb"); + if (fp2 != NULL) { + fread(((bx_shadow_data_c*)param)->getptr(), 1, ((bx_shadow_data_c*)param)->get_size(), fp2); + fclose(fp2); + } + break; + case BXT_LIST: + base = (bx_list_c*)param; + break; + default: + BX_ERROR(("restore_sr_param(): unknown parameter type")); + } + } + } + i++; + ptr = strtok(NULL, " "); + } + } + } while (!feof(fp)); + fclose(fp); + } else { + BX_ERROR(("restore_bochs_param(): error in file open")); + return 0; + } + + return 1; +} + +bx_bool bx_real_sim_c::restore_hardware() +{ + bx_list_c *sr_list = get_bochs_root(); + int ndev = sr_list->get_size(); + for (int dev=0; devgetptr(), sr_list->get(dev)->get_name())) + return 0; + } + return 1; +} + +bx_bool bx_real_sim_c::save_sr_param(FILE *fp, bx_param_c *node, const char *sr_path, int level) +{ + int i; + Bit64s value; + char tmpstr[BX_PATHNAME_LEN], tmpbyte[4]; + FILE *fp2; + + for (i=0; iget_format()) { + fprintf(fp, node->get_format(), value); + } else { + if ((Bit64u)((bx_param_num_c*)node)->get_max() > BX_MAX_BIT32U) { + fprintf(fp, "0x"FMT_LL"x", (Bit64u) value); + } else { + fprintf(fp, "0x%x", (Bit32u) value); + } + } + fprintf(fp, "\n"); + } + break; + case BXT_PARAM_BOOL: + fprintf(fp, "%s\n", ((bx_param_bool_c*)node)->get()?"true":"false"); + break; + case BXT_PARAM_ENUM: + fprintf(fp, "%s\n", ((bx_param_enum_c*)node)->get_selected()); + break; + case BXT_PARAM_STRING: + if (((bx_param_string_c*)node)->get_options() & bx_param_string_c::RAW_BYTES) { + tmpstr[0] = 0; + for (i = 0; i < ((bx_param_string_c*)node)->get_maxsize(); i++) { + if (i > 0) { + tmpbyte[0] = ((bx_param_string_c*)node)->get_separator(); + tmpbyte[1] = 0; + strcat(tmpstr, tmpbyte); + } + sprintf(tmpbyte, "%02x", (Bit8u)((bx_param_string_c*)node)->getptr()[i]); + strcat(tmpstr, tmpbyte); + } + fprintf(fp, "%s\n", tmpstr); + } else { + fprintf(fp, "%s\n", ((bx_param_string_c*)node)->getptr()); + } + break; + case BXT_PARAM_DATA: + fprintf(fp, "%s.%s\n", node->get_parent()->get_name(), node->get_name()); + if (sr_path) + sprintf(tmpstr, "%s/%s.%s", sr_path, node->get_parent()->get_name(), node->get_name()); + else + sprintf(tmpstr, "%s.%s", node->get_parent()->get_name(), node->get_name()); + fp2 = fopen(tmpstr, "wb"); + if (fp2 != NULL) { + fwrite(((bx_shadow_data_c*)node)->getptr(), 1, ((bx_shadow_data_c*)node)->get_size(), fp2); + fclose(fp2); + } + break; + case BXT_LIST: + { + fprintf(fp, "{\n"); + bx_list_c *list = (bx_list_c*)node; + for (i=0; i < list->get_size(); i++) { + save_sr_param(fp, list->get(i), sr_path, level+1); + } + for (i=0; i, and the wxWidgets CI (wxmain.cc) doesn't need to include . +// Aside from making compiles faster, this enforces the use of the siminterface +// so it keeps the interface clean (important when we may have multiple UI +// implementations for example). This argues for keeping UI-specific +// structures out of the simulator interface. It certainly works ok for the +// text interface, but that's because FILE* is standard and portable. + +////////////////////////////////////////////////////// + +#ifndef BX_SIMINTERFACE_H +# define BX_SIMINTERFACE_H 1 + +// list of possible types for bx_param_c and descendant objects +typedef enum { + BXT_OBJECT = 201, + BXT_PARAM, + BXT_PARAM_NUM, + BXT_PARAM_BOOL, + BXT_PARAM_ENUM, + BXT_PARAM_STRING, + BXT_PARAM_DATA, + BXT_LIST +} bx_objtype; + +// base value for generated new parameter id +#define BXP_NEW_PARAM_ID 1001 + +#if BX_SUPPORT_SMP + #define BX_SMP_PROCESSORS (bx_cpu_count) +#else + #define BX_SMP_PROCESSORS 1 +#endif + +typedef enum { + BX_TOOLBAR_UNDEFINED, + BX_TOOLBAR_FLOPPYA, + BX_TOOLBAR_FLOPPYB, + BX_TOOLBAR_CDROMD, + BX_TOOLBAR_RESET, + BX_TOOLBAR_POWER, + BX_TOOLBAR_SAVE_RESTORE, + BX_TOOLBAR_COPY, + BX_TOOLBAR_PASTE, + BX_TOOLBAR_SNAPSHOT, + BX_TOOLBAR_CONFIG, + BX_TOOLBAR_MOUSE_EN, + BX_TOOLBAR_USER +} bx_toolbar_buttons; + +// Log level defines +typedef enum { + LOGLEV_DEBUG = 0, + LOGLEV_INFO, + LOGLEV_ERROR, + LOGLEV_PANIC, + LOGLEV_PASS, + N_LOGLEV +} bx_log_levels; + +// boot devices (using the same values as the rombios) +#define BX_BOOT_NONE 0 +#define BX_BOOT_FLOPPYA 1 +#define BX_BOOT_DISKC 2 +#define BX_BOOT_CDROM 3 +#define BX_BOOT_NETWORK 4 + +// loader hack +#define Load32bitOSNone 0 +#define Load32bitOSLinux 1 +#define Load32bitOSNullKernel 2 // being developed for plex86 +#define Load32bitOSLast 2 + +/////////////////////////////////////////////////////////////////// +// event structures for communication between simulator and CI +/////////////////////////////////////////////////////////////////// +// Because the CI (configuration interface) might be in a different +// thread or even a different process, we pass events encoded in data +// structures to it instead of just calling functions. Each type of +// event is declared as a different structure, and then all those +// structures are squished into a union in BxEvent. (BTW, this is +// almost exactly how X windows event structs work.) +// +// These are simple structs, unblemished by C++ methods and tricks. +// No matter what event type it is, we allocate a BxEvent for each +// one, as opposed to trying to save a few bytes on small events by +// allocating only the bytes necessary for it. This makes it easy and +// fast to store events in a queue, like this +// BxEvent event_queue[MAX_EVENTS]; +// +// Events come in two varieties: synchronous and asynchronous. We +// have to worry about sync and async events because the CI and the +// simulation may be running in different threads. An async event is +// the simplest. Whichever thread originates the event just builds +// the data structure, sends it, and then continues with its business. +// Async events can go in either direction. Synchronous events +// require the other thread to "respond" before the originating thread +// can continue. It's like a function with a return value; you can't +// continue until you get the return value back. +// +// Examples: +// +// async event: In the wxWidgets implementation, both the CI and the +// VGAW operate in the wxWidgets GUI thread. When the user presses a +// key, wxWidgets sends a wxKeyEvent to the VGAW event handler code in +// wx.cc. The VGAW handler then builds a BxEvent with +// type=BX_ASYNC_EVT_KEY, and fills in the bx_key and raw_scancode +// fields. The asynchronous event is placed on the event_queue for +// the simulator, then the VGAW handler returns. (With wxWidgets and +// many other graphical libaries, the event handler must return +// quickly because the window will not be updated until it's done.) +// Some time later, the simulator reaches the point where it checks +// for new events from the user (actually controlled by +// bx_keyb_c::periodic() in iodev/keyboard.cc) and calls +// bx_gui.handle_events(). Then all the events in the queue are +// processed by the simulator. There is no "response" sent back to +// the originating thread. +// +// sync event: Sometimes the simulator reaches a point where it needs +// to ask the user how to proceed. In this case, the simulator sends +// a synchronous event because it requires a response before it can +// continue. It builds an event structure, perhaps with type +// BX_SYNC_EVT_ASK_PARAM, sends it to the user interface +// using the event handler function defined by set_notify_callback(), +// and pauses the simulation. The user interface asks the user the +// question, and puts the answer into the BxEvent.retcode field. The +// event handler function returns the modified BxEvent with retcode +// filled in, and the simulation continues. The details of this +// transaction can be complicated if the simulation and CI are not +// in the same thread, but the behavior is as described. +// + +///// types and definitions used in event structures + +#define BX_EVT_IS_ASYNC(type) ((type) > __ALL_EVENTS_BELOW_ARE_ASYNC__) + +typedef enum { + __ALL_EVENTS_BELOW_ARE_SYNCHRONOUS__ = 2000, + BX_SYNC_EVT_GET_PARAM, // CI -> simulator -> CI + BX_SYNC_EVT_ASK_PARAM, // simulator -> CI -> simulator + BX_SYNC_EVT_TICK, // simulator -> CI, wait for response. + BX_SYNC_EVT_LOG_ASK, // simulator -> CI, wait for response. + BX_SYNC_EVT_GET_DBG_COMMAND, // simulator -> CI, wait for response. + __ALL_EVENTS_BELOW_ARE_ASYNC__, + BX_ASYNC_EVT_KEY, // vga window -> simulator + BX_ASYNC_EVT_MOUSE, // vga window -> simulator + BX_ASYNC_EVT_SET_PARAM, // CI -> simulator + BX_ASYNC_EVT_LOG_MSG, // simulator -> CI + BX_ASYNC_EVT_DBG_MSG, // simulator -> CI + BX_ASYNC_EVT_VALUE_CHANGED, // simulator -> CI + BX_ASYNC_EVT_TOOLBAR, // CI -> simulator + BX_ASYNC_EVT_REFRESH // simulator -> CI +} BxEventType; + +typedef union { + Bit32s s32; + char *charptr; +} AnyParamVal; + +// Define substructures which make up the interior of BxEvent. The +// substructures, such as BxKeyEvent or BxMouseEvent, should never be +// allocated on their own. They are only intended to be used within +// the union in the BxEvent structure. + +// Event type: BX_SYNC_EVT_TICK +// +// A tick event is synchronous, sent from the simulator to the GUI. The +// event doesn't do anything visible. Primarily it gives the GUI a chance +// to tell the simulator to quit, if necessary. There may be other uses +// for the tick in the future, such as giving some kind of regular +// status report or mentioning watched values that changed, but so far +// it's just for that one thing. There is no data associated with a +// tick event. + +// Event type: BX_ASYNC_EVT_KEY +// +// A key event can be sent from the VGA window to the Bochs simulator. +// It is asynchronous. +typedef struct { + // what was pressed? This is a BX_KEY_* value. For key releases, + // BX_KEY_RELEASED is ORed with the base BX_KEY_*. + Bit32u bx_key; + bx_bool raw_scancode; +} BxKeyEvent; + +// Event type: BX_ASYNC_EVT_MOUSE +// +// A mouse event can be sent from the VGA window to the Bochs +// simulator. It is asynchronous. Currently unused because mouse +// events aren't implemented in our wxWidgets code yet. +typedef struct { + // type is BX_EVT_MOUSE + Bit16s dx, dy; // mouse motion delta + Bit8u buttons; // which buttons are pressed. + // bit 0: 1=left button down, 0=up + // bit 1: 1=right button down, 0=up +} BxMouseEvent; + +// Event type: BX_SYNC_EVT_GET_PARAM, BX_ASYNC_EVT_SET_PARAM +// +// Parameter set/get events are initiated by the CI, since Bochs can +// always access the parameters directly. So far, I haven't used +// these event types. In the CI I just call +// SIM->get_param(parameter_id) to get a pointer to the bx_param_c +// object and then call the get/set methods. This is okay for +// configuration since bochs is not running. However it could be +// dangerous for the GUI thread to poke around in Bochs structures +// while the thread is running. For these cases, I may have to be +// more careful and actually build get/set events and place them on +// Bochs's event queue to be processed during SIM->periodic() or +// something. +typedef struct { + // type is BX_EVT_GET_PARAM, BX_EVT_SET_PARAM + class bx_param_c *param; // pointer to param structure + AnyParamVal val; +} BxParamEvent; + +// Event type: BX_SYNC_EVT_ASK_PARAM +// Synchronous event sent from the simulator to the CI. This tells the +// CI to ask the user to choose the value of a parameter. The CI may +// need to discover the type of parameter so that it can use the right +// kind of graphical display. The BxParamEvent is used for these events +// too. +// FIXME: at the moment the GUI implements the ASK_PARAM event for just +// a few parameter types. I need to implement the event for all parameter +// types. + +// Event type: BX_ASYNC_EVT_VALUE_CHANGED +// +// Asynchronous event sent from the simulator to the CI, telling it that +// some value that it (hopefully) cares about has changed. This isn't +// being used yet, but a good example is in a debugger interface, you might +// want to maintain a reasonably current display of the PC or some other +// simulation state. The CI would set some kind of event mask (which +// doesn't exist now of course) and then when certain values change, the +// simulator would send this event so that the CI can update. We may need +// some kind of "flow control" since the simulator will be able to produce +// new events much faster than the gui can accept them. + +// Event type: BX_ASYNC_EVT_LOG_MSG (unused) +// +// Asynchronous event from the simulator to the CI. When a BX_PANIC, +// BX_ERROR, BX_INFO, or BX_DEBUG is found in the simulator code, this +// event type can be used to inform the CI of the condition. There is +// no point in sending messages to the CI that will not be displayed; these +// would only slow the simulation. So we will need some mechanism for +// choosing what kinds of events will be delivered to the CI. Normally, +// you wouldn't want to look at the log unless something is going wrong. +// At that point, you might want to open up a window to watch the debug +// messages from one or two devices only. +// +// Idea: Except for panics that require user attention to continue, it +// might be most efficient to just append log messages to a file. +// When the user wants to look at the log messages, the gui can reopen +// the file (read only), skip to the end, and look backward for a +// reasonable number of lines to display (200?). This allows it to +// skip over huge bursts of log entries without allocating memory, +// synchronizing threads, etc. for each. +typedef struct { + Bit8u level; + const char *prefix; + const char *msg; +} BxLogMsgEvent; + +// Event type: BX_ASYNC_EVT_DBG_MSG +// +// Also uses BxLogMsgEvent, but this is a message to be displayed in +// the debugger history window. + +// Event type: BX_SYNC_EVT_LOG_ASK +// +// This is a synchronous version of BX_ASYNC_EVT_LOG_MSG, which is used +// when the "action=ask" setting is used. If the simulator runs into a +// panic, it sends a synchronous BX_SYNC_EVT_LOG_ASK to the CI to be +// displayed. The CI shows a dialog that asks if the user wants to +// continue, quit, etc. and sends the answer back to the simulator. +// This event also uses BxLogMsgEvent. +enum { + BX_LOG_ASK_CHOICE_CONTINUE, + BX_LOG_ASK_CHOICE_CONTINUE_ALWAYS, + BX_LOG_ASK_CHOICE_DIE, + BX_LOG_ASK_CHOICE_DUMP_CORE, + BX_LOG_ASK_CHOICE_ENTER_DEBUG, + BX_LOG_ASK_N_CHOICES, + BX_LOG_NOTIFY_FAILED +}; + +// Event type: BX_SYNC_EVT_GET_DBG_COMMAND +// +// This is a synchronous event sent from the simulator to the debugger +// requesting the next action. In a text mode debugger, this would prompt +// the user for the next command. When a new command is ready, the +// synchronous event is sent back with its fields filled in. +typedef struct { + char *command; // null terminated string. allocated by debugger interface + // with new operator, freed by simulator with delete. +} BxDebugCommand; + + + +// Event type: BX_EVT_TOOLBAR +// Asynchronous event from the VGAW to the simulator, sent when the user +// clicks on a toolbar button. This may one day become something more +// general, like a command event, but at the moment it's only needed for +// the toolbar events. +typedef struct { + bx_toolbar_buttons button; + bx_bool on; // for toggling buttons, on=true means the toolbar button is + // pressed. on=false means it is not pressed. +} BxToolbarEvent; + +// The BxEvent structure should be used for all events. Every event has +// a type and a spot for a return code (only used for synchronous events). +typedef struct { + BxEventType type; // what kind is this? + Bit32s retcode; // sucess or failure. only used for synchronous events. + union { + BxKeyEvent key; + BxMouseEvent mouse; + BxParamEvent param; + BxLogMsgEvent logmsg; + BxToolbarEvent toolbar; + BxDebugCommand debugcmd; + } u; +} BxEvent; + +#include "paramtree.h" + +// These are the different start modes. +enum { + // Just start the simulation without running the configuration interface + // at all, unless something goes wrong. + BX_QUICK_START = 200, + // Run the configuration interface. The default action will be to load a + // configuration file. This makes sense if a config file could not be + // loaded, either because it wasn't found or because it had errors. + BX_LOAD_START, + // Run the configuration interface. The default action will be to + // edit the configuration. + BX_EDIT_START, + // Run the configuration interface, but make the default action be to + // start the simulation. + BX_RUN_START +}; + +enum { + BX_MOUSE_TYPE_NONE, + BX_MOUSE_TYPE_PS2, + BX_MOUSE_TYPE_IMPS2, +#if BX_SUPPORT_BUSMOUSE + BX_MOUSE_TYPE_BUS, +#endif + BX_MOUSE_TYPE_SERIAL, + BX_MOUSE_TYPE_SERIAL_WHEEL, + BX_MOUSE_TYPE_SERIAL_MSYS +}; + +enum { + BX_MOUSE_TOGGLE_CTRL_MB, + BX_MOUSE_TOGGLE_CTRL_F10, + BX_MOUSE_TOGGLE_CTRL_ALT, + BX_MOUSE_TOGGLE_F12 +}; + +#define BX_FDD_NONE 0 // floppy not present +#define BX_FDD_525DD 1 // 360K 5.25" +#define BX_FDD_525HD 2 // 1.2M 5.25" +#define BX_FDD_350DD 3 // 720K 3.5" +#define BX_FDD_350HD 4 // 1.44M 3.5" +#define BX_FDD_350ED 5 // 2.88M 3.5" + +#define BX_FLOPPY_NONE 10 // media not present +#define BX_FLOPPY_1_2 11 // 1.2M 5.25" +#define BX_FLOPPY_1_44 12 // 1.44M 3.5" +#define BX_FLOPPY_2_88 13 // 2.88M 3.5" +#define BX_FLOPPY_720K 14 // 720K 3.5" +#define BX_FLOPPY_360K 15 // 360K 5.25" +#define BX_FLOPPY_160K 16 // 160K 5.25" +#define BX_FLOPPY_180K 17 // 180K 5.25" +#define BX_FLOPPY_320K 18 // 320K 5.25" +#define BX_FLOPPY_LAST 18 // last legal value of floppy type + +#define BX_FLOPPY_AUTO 19 // autodetect image size +#define BX_FLOPPY_UNKNOWN 20 // image size doesn't match one of the types above + +#define BX_ATA_DEVICE_DISK 0 +#define BX_ATA_DEVICE_CDROM 1 +#define BX_ATA_DEVICE_LAST 1 + +#define BX_ATA_BIOSDETECT_NONE 0 +#define BX_ATA_BIOSDETECT_AUTO 1 +#define BX_ATA_BIOSDETECT_CMOS 2 + +#define BX_ATA_TRANSLATION_NONE 0 +#define BX_ATA_TRANSLATION_LBA 1 +#define BX_ATA_TRANSLATION_LARGE 2 +#define BX_ATA_TRANSLATION_RECHS 3 +#define BX_ATA_TRANSLATION_AUTO 4 +#define BX_ATA_TRANSLATION_LAST 4 + +#define BX_HDIMAGE_MODE_FLAT 0 +#define BX_HDIMAGE_MODE_CONCAT 1 +#define BX_HDIMAGE_MODE_EXTDISKSIM 2 +#define BX_HDIMAGE_MODE_DLL_HD 3 +#define BX_HDIMAGE_MODE_SPARSE 4 +#define BX_HDIMAGE_MODE_VMWARE3 5 +#define BX_HDIMAGE_MODE_VMWARE4 6 +#define BX_HDIMAGE_MODE_UNDOABLE 7 +#define BX_HDIMAGE_MODE_GROWING 8 +#define BX_HDIMAGE_MODE_VOLATILE 9 +#define BX_HDIMAGE_MODE_Z_UNDOABLE 10 +#define BX_HDIMAGE_MODE_Z_VOLATILE 11 +#define BX_HDIMAGE_MODE_VVFAT 12 +#define BX_HDIMAGE_MODE_LAST 12 + +#define BX_CLOCK_SYNC_NONE 0 +#define BX_CLOCK_SYNC_REALTIME 1 +#define BX_CLOCK_SYNC_SLOWDOWN 2 +#define BX_CLOCK_SYNC_BOTH 3 +#define BX_CLOCK_SYNC_LAST 3 + +#define BX_CPUID_SUPPORT_NOSSE 0 +#define BX_CPUID_SUPPORT_SSE 1 +#define BX_CPUID_SUPPORT_SSE2 2 +#define BX_CPUID_SUPPORT_SSE3 3 +#define BX_CPUID_SUPPORT_SSSE3 4 +#define BX_CPUID_SUPPORT_SSE4_1 5 +#define BX_CPUID_SUPPORT_SSE4_2 6 + +#define BX_CLOCK_TIME0_LOCAL 1 +#define BX_CLOCK_TIME0_UTC 2 + +BOCHSAPI extern const char *floppy_devtype_names[]; +BOCHSAPI extern const char *floppy_type_names[]; +BOCHSAPI extern int floppy_type_n_sectors[]; +BOCHSAPI extern const char *bochs_bootdisk_names[]; +BOCHSAPI extern const char *hdimage_mode_names[]; + +//////////////////////////////////////////////////////////////////// +// base class simulator interface, contains just virtual functions. +// I'm not longer sure that having a base class is going to be of any +// use... -Bryce + +#include + +enum ci_command_t { CI_START, CI_RUNTIME_CONFIG, CI_SHUTDOWN }; +enum ci_return_t { + CI_OK, // normal return value + CI_ERR_NO_TEXT_CONSOLE // err: can't work because there's no text console + }; +typedef int (*config_interface_callback_t)(void *userdata, ci_command_t command); +typedef BxEvent* (*bxevent_handler)(void *theclass, BxEvent *event); +typedef Bit32s (*user_option_parser_t)(const char *context, int num_params, char *params[]); +typedef Bit32s (*user_option_save_t)(FILE *fp); + +// bx_gui->set_display_mode() changes the mode between the configuration +// interface and the simulation. This is primarily intended for display +// libraries which have a full-screen mode such as SDL, term, and svgalib. The +// display mode is set to DISP_MODE_CONFIG before displaying any configuration +// menus, for panics that requires user input, when entering the debugger, etc. +// It is set to DISP_MODE_SIM when the Bochs simulation resumes. The constants +// are defined here so that configuration interfaces can use them with the +// bx_simulator_interface_c::set_display_mode() method. +enum disp_mode_t { DISP_MODE_CONFIG=100, DISP_MODE_SIM }; + +class BOCHSAPI bx_simulator_interface_c { +public: + bx_simulator_interface_c() {} + virtual ~bx_simulator_interface_c() {} + virtual void set_quit_context(jmp_buf *context) {} + virtual int get_init_done() { return -1; } + virtual int set_init_done(int n) {return -1;} + virtual void reset_all_param() {} + // new param methods + virtual bx_param_c *get_param(const char *pname, bx_param_c *base=NULL) {return NULL;} + virtual bx_param_num_c *get_param_num(const char *pname, bx_param_c *base=NULL) {return NULL;} + virtual bx_param_string_c *get_param_string(const char *pname, bx_param_c *base=NULL) {return NULL;} + virtual bx_param_bool_c *get_param_bool(const char *pname, bx_param_c *base=NULL) {return NULL;} + virtual bx_param_enum_c *get_param_enum(const char *pname, bx_param_c *base=NULL) {return NULL;} + virtual unsigned gen_param_id() {return 0;} + virtual int get_n_log_modules() {return -1;} + virtual char *get_prefix(int mod) {return 0;} + virtual int get_log_action(int mod, int level) {return -1;} + virtual void set_log_action(int mod, int level, int action) {} + virtual int get_default_log_action(int level) {return -1;} + virtual void set_default_log_action(int level, int action) {} + virtual char *get_action_name(int action) {return 0;} + virtual const char *get_log_level_name(int level) {return 0;} + virtual int get_max_log_level() {return -1;} + + // exiting is somewhat complicated! The preferred way to exit bochs is + // to call BX_EXIT(exitcode). That is defined to call + // SIM->quit_sim(exitcode). The quit_sim function first calls + // the cleanup functions in bochs so that it can destroy windows + // and free up memory, then sends a notify message to the CI + // telling it that bochs has stopped. + virtual void quit_sim(int code) {} + + virtual int get_exit_code() { return 0; } + + virtual int get_default_rc(char *path, int len) {return -1;} + virtual int read_rc(const char *path) {return -1;} + virtual int write_rc(const char *rc, int overwrite) {return -1;} + virtual int get_log_file(char *path, int len) {return -1;} + virtual int set_log_file(char *path) {return -1;} + virtual int get_log_prefix(char *prefix, int len) {return -1;} + virtual int set_log_prefix(char *prefix) {return -1;} + virtual int get_debugger_log_file(char *path, int len) {return -1;} + virtual int set_debugger_log_file(char *path) {return -1;} + virtual int get_cdrom_options(int drive, bx_list_c **out, int *where = NULL) {return -1;} + virtual int hdimage_get_mode(const char *mode) {return -1;} + + // The CI calls set_notify_callback to register its event handler function. + // This event handler function is called whenever the simulator needs to + // send an event to the CI. For example, if the simulator hits a panic and + // wants to ask the user how to proceed, it would call the CI event handler + // to ask the CI to display a dialog. + // + // NOTE: At present, the standard VGAW buttons (floppy, snapshot, power, + // etc.) are displayed and handled by gui.cc, not by the CI or siminterface. + // gui.cc uses its own callback functions to implement the behavior of + // the buttons. Some of these implementations call the siminterface. + virtual void set_notify_callback(bxevent_handler func, void *arg) {} + virtual void get_notify_callback(bxevent_handler *func, void **arg) {} + + // send an event from the simulator to the CI. + virtual BxEvent* sim_to_ci_event(BxEvent *event) {return NULL;} + + // called from simulator when it hits serious errors, to ask if the user + // wants to continue or not + virtual int log_msg(const char *prefix, int level, const char *msg) {return -1;} + + // tell the CI to ask the user for the value of a parameter. + virtual int ask_param(bx_param_c *param) {return -1;} + virtual int ask_param(const char *pname) {return -1;} + + // ask the user for a pathname + virtual int ask_filename(const char *filename, int maxlen, const char *prompt, const char *the_default, int flags) {return -1;} + // yes/no dialog + virtual int ask_yes_no(const char *title, const char *prompt, bx_bool the_default) {return -1;} + // called at a regular interval, currently by the keyboard handler. + virtual void periodic() {} + virtual int create_disk_image(const char *filename, int sectors, bx_bool overwrite) {return -3;} + // Tell the configuration interface (CI) that some parameter values have + // changed. The CI will reread the parameters and change its display if it's + // appropriate. Maybe later: mention which params have changed to save time. + virtual void refresh_ci() {} + // forces a vga update. This was added so that a debugger can force + // a vga update when single stepping, without having to wait thousands + // of cycles for the normal vga refresh triggered by iodev/keyboard.cc. + virtual void refresh_vga() {} + // forces a call to bx_gui.handle_events. This was added so that a debugger + // can force the gui events to be handled, so that interactive things such + // as a toolbar click will be processed. + virtual void handle_events() {} + // return first hard disk in ATA interface + virtual bx_param_c *get_first_cdrom() {return NULL;} + // return first cdrom in ATA interface + virtual bx_param_c *get_first_hd() {return NULL;} +#if BX_DEBUGGER + // for debugger: same behavior as pressing control-C + virtual void debug_break() {} + virtual void debug_interpret_cmd(char *cmd) {} + virtual char *debug_get_next_command() {return NULL;} + virtual void debug_puts(const char *text) {} +#endif + virtual void register_configuration_interface( + const char* name, + config_interface_callback_t callback, + void *userdata) {} + virtual int configuration_interface(const char* name, ci_command_t command) {return -1; } + virtual int begin_simulation(int argc, char *argv[]) {return -1;} + typedef bx_bool (*is_sim_thread_func_t)(); + is_sim_thread_func_t is_sim_thread_func; + virtual void set_sim_thread_func(is_sim_thread_func_t func) { + is_sim_thread_func = func; + } + virtual bx_bool is_sim_thread() {return 1;} + virtual void set_debug_gui(bx_bool val) {} + virtual bx_bool has_debug_gui() const {return 0;} + // provide interface to bx_gui->set_display_mode() method for config + // interfaces to use. + virtual void set_display_mode(disp_mode_t newmode) {} + virtual bx_bool test_for_text_console() {return 1;} + // user-defined option support + virtual bx_bool register_user_option(const char *keyword, user_option_parser_t parser, user_option_save_t save_func) {return 0;} + virtual bx_bool unregister_user_option(const char *keyword) {return 0;} + virtual bx_bool is_user_option(const char *keyword) {return 0;} + virtual Bit32s parse_user_option(const char *context, int num_params, char *params []) {return -1;} + virtual Bit32s save_user_options(FILE *fp) {return -1;} + // save/restore support + virtual void init_save_restore() {} + virtual bx_bool save_state(const char *checkpoint_path) {return 0;} + virtual bx_bool restore_config() {return 0;} + virtual bx_bool restore_logopts() {return 0;} + virtual bx_bool restore_hardware() {return 0;} + virtual bx_list_c *get_bochs_root() {return NULL;} + virtual bx_bool restore_bochs_param(bx_list_c *root, const char *sr_path, const char *restore_name) { return 0; } +}; + +BOCHSAPI extern bx_simulator_interface_c *SIM; + +BOCHSAPI extern void bx_init_siminterface(); +BOCHSAPI extern int bx_init_main(int argc, char *argv[]); + +#if defined(__WXMSW__) || defined(WIN32) +// Just to provide HINSTANCE, etc. in files that have not included bochs.h. +// I don't like this at all, but I don't see a way around it. +#include +#endif + +// define structure to hold data that is passed into our main function. +typedef struct BOCHSAPI { + // standard argc,argv + int argc; + char **argv; +#ifdef WIN32 + char initial_dir[MAX_PATH]; +#endif +#ifdef __WXMSW__ + // these are only used when compiling with wxWidgets. This gives us a + // place to store the data that was passed to WinMain. + HINSTANCE hInstance; + HINSTANCE hPrevInstance; + LPSTR m_lpCmdLine; + int nCmdShow; +#endif +} bx_startup_flags_t; + +BOCHSAPI extern bx_startup_flags_t bx_startup_flags; +BOCHSAPI extern bx_bool bx_user_quit; +BOCHSAPI extern Bit8u bx_cpu_count; + +#endif /* BX_SIMINTERFACE_H */ diff --git a/bochs/gui/svga.cc b/bochs/gui/svga.cc new file mode 100644 index 00000000..61dd5759 --- /dev/null +++ b/bochs/gui/svga.cc @@ -0,0 +1,593 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#define _MULTI_THREAD + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "bochs.h" +#include "param_names.h" +#include "iodev.h" +#if BX_WITH_SVGA + +#include +#include +#include +#include +#include + +#include "font/vga.bitmap.h" +//#include "icon_bochs.h" + +class bx_svga_gui_c : public bx_gui_c { +public: + bx_svga_gui_c (void); + DECLARE_GUI_VIRTUAL_METHODS() + virtual void set_display_mode (disp_mode_t newmode); +}; + +// declare one instance of the gui object and call macro to insert the +// plugin code +static bx_svga_gui_c *theGui = NULL; + +IMPLEMENT_GUI_PLUGIN_CODE(svga) + +#define LOG_THIS theGui-> + +static unsigned res_x, res_y; +static unsigned fontwidth, fontheight; +static unsigned tilewidth, tileheight; +static unsigned char vgafont[256 * 16]; +static int clut8 = 0; +GraphicsContext *screen = NULL; +static int save_vga_mode; +static int save_vga_pal[256 * 3]; +static Bit8u fontbuffer[0x2000]; + +static bx_bool ctrll_pressed = 0; +static unsigned int text_rows=25, text_cols=80; +static unsigned prev_cursor_x=0; +static unsigned prev_cursor_y=0; + +void keyboard_handler(int scancode, int press); +void mouse_handler(int button, int dx, int dy, int dz, + int drx, int dry, int drz); + +unsigned char reverse_byteorder(unsigned char b) +{ + unsigned char ret = 0; + + for (unsigned i=0;i<8;i++){ + ret |= (b & 0x01) << (7 - i); + b >>= 1; + } + return ret; +} + +void create_vga_font() +{ + memcpy(vgafont, bx_vgafont, sizeof(bx_vgafont)); + + for (unsigned i=0;i< sizeof(bx_vgafont);i++) { + vgafont[i] = reverse_byteorder(vgafont[i]); + } +} + +bx_svga_gui_c::bx_svga_gui_c() +{ + put("SVGA"); +} + +void bx_svga_gui_c::specific_init( + int argc, + char **argv, + unsigned x_tilesize, + unsigned y_tilesize, + unsigned header_bar_y) +{ + tilewidth = x_tilesize; + tileheight = y_tilesize; + + if(vga_init() != 0) + { + LOG_THIS setonoff(LOGLEV_PANIC, ACT_FATAL); + BX_PANIC (("Unable to initialize SVGAlib")); + return; + } + + screen = gl_allocatecontext(); + + fontwidth = 8; + fontheight = 16; + dimension_update(640,400); + create_vga_font(); + gl_setfont(fontwidth, fontheight, (void *)vgafont); + gl_setwritemode(FONT_COMPRESSED); + + keyboard_init(); + keyboard_seteventhandler((__keyboard_handler) keyboard_handler); + + vga_setmousesupport(1); + mouse_seteventhandler((__mouse_handler) mouse_handler); + if (vga_ext_set(VGA_EXT_AVAILABLE, VGA_AVAIL_FLAGS) & VGA_CLUT8) { + vga_ext_set(VGA_EXT_SET, VGA_CLUT8); + clut8 = 1; + } + // Save settings to prepare for mode transition in set_display_mode. + // If DISP_MODE_SIM is called first, these values will be used. + save_vga_mode = vga_getcurrentmode(); + vga_getpalvec(0, 256, save_vga_pal); +} + +void bx_svga_gui_c::text_update( + Bit8u *old_text, + Bit8u *new_text, + unsigned long cursor_x, + unsigned long cursor_y, + bx_vga_tminfo_t tm_info) +{ + Bit8u *old_line, *new_line; + unsigned int curs, hchars, i, j, offset, rows, x, y; + char s[] = " "; + int fg, bg; + bx_bool force_update = 0, blink_state, blink_mode; + int text_palette[16]; + + // first check if the screen needs to be redrawn completely + blink_mode = (tm_info.blink_flags & BX_TEXT_BLINK_MODE) > 0; + blink_state = (tm_info.blink_flags & BX_TEXT_BLINK_STATE) > 0; + if (blink_mode) { + if (tm_info.blink_flags & BX_TEXT_BLINK_TOGGLE) + force_update = 1; + } + if (charmap_updated) { + BX_INFO(("charmap update. Font Height is %d", fontheight)); + for (unsigned c = 0; c<256; c++) { + if (char_changed[c]) { + j = c * fontheight; + for(i=0; i> 4]; + if (!blink_state && (new_text[1] & 0x80)) + fg = bg; + } else { + bg = text_palette[(new_text[1] & 0xF0) >> 4]; + } + if (offset == curs) { + gl_setfontcolors(fg, bg); + } else { + gl_setfontcolors(bg, fg); + } + gl_write(x * fontwidth, y * fontheight, s); + } + x++; + new_text+=2; + old_text+=2; + offset+=2; + } while (--hchars); + y++; + new_text = new_line + tm_info.line_offset; + old_text = old_line + tm_info.line_offset; + } while (--rows); + + prev_cursor_x = cursor_x; + prev_cursor_y = cursor_y; +} + +int bx_svga_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) +{ + return 0; +} + +int bx_svga_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) +{ + return 0; +} + +void bx_svga_gui_c::graphics_tile_update(Bit8u *snapshot, unsigned x, unsigned y) +{ + if ((y + tileheight) > res_y) { + gl_putbox(x, y, tilewidth, (res_y - y), snapshot); + } else { + gl_putbox(x, y, tilewidth, tileheight, snapshot); + } +} + +static Bit32u vga_to_bx_key(int key) +{ + ctrll_pressed = 0; + switch (key) { + case SCANCODE_ESCAPE: return BX_KEY_ESC; + case SCANCODE_1: return BX_KEY_1; + case SCANCODE_2: return BX_KEY_2; + case SCANCODE_3: return BX_KEY_3; + case SCANCODE_4: return BX_KEY_4; + case SCANCODE_5: return BX_KEY_5; + case SCANCODE_6: return BX_KEY_6; + case SCANCODE_7: return BX_KEY_7; + case SCANCODE_8: return BX_KEY_8; + case SCANCODE_9: return BX_KEY_9; + case SCANCODE_0: return BX_KEY_0; + + case SCANCODE_MINUS: return BX_KEY_MINUS; + case SCANCODE_EQUAL: return BX_KEY_EQUALS; + case SCANCODE_TAB: return BX_KEY_TAB; + case SCANCODE_BACKSPACE: return BX_KEY_BACKSPACE; + + case SCANCODE_Q: return BX_KEY_Q; + case SCANCODE_W: return BX_KEY_W; + case SCANCODE_E: return BX_KEY_E; + case SCANCODE_R: return BX_KEY_R; + case SCANCODE_T: return BX_KEY_T; + case SCANCODE_Y: return BX_KEY_Y; + case SCANCODE_U: return BX_KEY_U; + case SCANCODE_I: return BX_KEY_I; + case SCANCODE_O: return BX_KEY_O; + case SCANCODE_P: return BX_KEY_P; + + case SCANCODE_BRACKET_LEFT: return BX_KEY_LEFT_BRACKET; + case SCANCODE_BRACKET_RIGHT: return BX_KEY_RIGHT_BRACKET; + + case SCANCODE_ENTER: return BX_KEY_ENTER; + case SCANCODE_LEFTCONTROL: + ctrll_pressed = 1; + return BX_KEY_CTRL_L; + + case SCANCODE_A: return BX_KEY_A; + case SCANCODE_S: return BX_KEY_S; + case SCANCODE_D: return BX_KEY_D; + case SCANCODE_F: return BX_KEY_F; + case SCANCODE_G: return BX_KEY_G; + case SCANCODE_H: return BX_KEY_H; + case SCANCODE_J: return BX_KEY_J; + case SCANCODE_K: return BX_KEY_K; + case SCANCODE_L: return BX_KEY_L; + + case SCANCODE_SEMICOLON: return BX_KEY_SEMICOLON; + case SCANCODE_APOSTROPHE: return BX_KEY_SINGLE_QUOTE; + case SCANCODE_GRAVE: return BX_KEY_GRAVE; + + case SCANCODE_LEFTSHIFT: return BX_KEY_SHIFT_L; + case SCANCODE_BACKSLASH: return BX_KEY_BACKSLASH; + + case SCANCODE_Z: return BX_KEY_Z; + case SCANCODE_X: return BX_KEY_X; + case SCANCODE_C: return BX_KEY_C; + case SCANCODE_V: return BX_KEY_V; + case SCANCODE_B: return BX_KEY_B; + case SCANCODE_N: return BX_KEY_N; + case SCANCODE_M: return BX_KEY_M; + + case SCANCODE_COMMA: return BX_KEY_COMMA; + case SCANCODE_PERIOD: return BX_KEY_PERIOD; + case SCANCODE_SLASH: return BX_KEY_SLASH; + + case SCANCODE_RIGHTSHIFT: return BX_KEY_SHIFT_R; + case SCANCODE_KEYPADMULTIPLY: return BX_KEY_KP_MULTIPLY; + + case SCANCODE_LEFTALT: return BX_KEY_ALT_L; + case SCANCODE_SPACE: return BX_KEY_SPACE; + case SCANCODE_CAPSLOCK: return BX_KEY_CAPS_LOCK; + + case SCANCODE_F1: return BX_KEY_F1; + case SCANCODE_F2: return BX_KEY_F2; + case SCANCODE_F3: return BX_KEY_F3; + case SCANCODE_F4: return BX_KEY_F4; + case SCANCODE_F5: return BX_KEY_F5; + case SCANCODE_F6: return BX_KEY_F6; + case SCANCODE_F7: return BX_KEY_F7; + case SCANCODE_F8: return BX_KEY_F8; + case SCANCODE_F9: return BX_KEY_F9; + case SCANCODE_F10: return BX_KEY_F10; + + case SCANCODE_NUMLOCK: return BX_KEY_NUM_LOCK; + case SCANCODE_SCROLLLOCK: return BX_KEY_SCRL_LOCK; + + case SCANCODE_KEYPAD7: return BX_KEY_KP_HOME; + case SCANCODE_KEYPAD8: return BX_KEY_KP_UP; + case SCANCODE_KEYPAD9: return BX_KEY_KP_PAGE_UP; + case SCANCODE_KEYPADMINUS: return BX_KEY_KP_SUBTRACT; + case SCANCODE_KEYPAD4: return BX_KEY_KP_LEFT; + case SCANCODE_KEYPAD5: return BX_KEY_KP_5; + case SCANCODE_KEYPAD6: return BX_KEY_KP_RIGHT; + case SCANCODE_KEYPADPLUS: return BX_KEY_KP_ADD; + case SCANCODE_KEYPAD1: return BX_KEY_KP_END; + case SCANCODE_KEYPAD2: return BX_KEY_KP_DOWN; + case SCANCODE_KEYPAD3: return BX_KEY_KP_PAGE_DOWN; + case SCANCODE_KEYPAD0: return BX_KEY_KP_INSERT; +// case SCANCODE_KEYPADPERIOD: return BX_KEY_KP_; /* ??? */ + +// case SCANCODE_LESS: return BX_KEY_KP_LESS; /* ??? */ + + case SCANCODE_F11: return BX_KEY_F11; + case SCANCODE_F12: return BX_KEY_F12; + + case SCANCODE_KEYPADENTER: return BX_KEY_KP_ENTER; + case SCANCODE_RIGHTCONTROL: return BX_KEY_CTRL_R; + case SCANCODE_KEYPADDIVIDE: return BX_KEY_KP_DIVIDE; + case SCANCODE_PRINTSCREEN: return BX_KEY_PRINT; + case SCANCODE_RIGHTALT: return BX_KEY_ALT_R; + case SCANCODE_BREAK: return BX_KEY_PAUSE; + + case SCANCODE_HOME: return BX_KEY_HOME; + case SCANCODE_CURSORBLOCKUP: return BX_KEY_UP; + case SCANCODE_PAGEUP: return BX_KEY_PAGE_UP; + case SCANCODE_CURSORBLOCKLEFT: return BX_KEY_LEFT; + case SCANCODE_CURSORBLOCKRIGHT: return BX_KEY_RIGHT; + case SCANCODE_END: return BX_KEY_END; + case SCANCODE_CURSORBLOCKDOWN: return BX_KEY_DOWN; + case SCANCODE_PAGEDOWN: return BX_KEY_PAGE_DOWN; + case SCANCODE_INSERT: return BX_KEY_INSERT; + case SCANCODE_REMOVE: return BX_KEY_DELETE; + + case SCANCODE_RIGHTWIN: return BX_KEY_WIN_R; + case SCANCODE_LEFTWIN: return BX_KEY_WIN_L; + + default: return 0; + } +} + +void keyboard_handler(int scancode, int press) +{ + if (scancode != SCANCODE_F12) { + int bx_key = vga_to_bx_key(scancode); + Bit32u key_state; + + if (press) { + key_state = BX_KEY_PRESSED; + } else { + key_state = BX_KEY_RELEASED; + } + + DEV_kbd_gen_scancode(bx_key | key_state); + } else { + BX_INFO(("F12 pressed")); + // show runtime options menu, which uses stdin/stdout + SIM->configuration_interface (NULL, CI_RUNTIME_CONFIG); + } +} + +void mouse_handler(int button, int dx, int dy, int dz, + int drx, int dry, int drz) +{ + int buttons = 0; + + if (button & MOUSE_LEFTBUTTON) { + buttons |= 0x01; + } + if (button & MOUSE_RIGHTBUTTON) { + buttons |= 0x02; + } + if (button & MOUSE_MIDDLEBUTTON) { + buttons |= 0x04; + } + if (ctrll_pressed && ((buttons == 0x04) || (buttons == 0x05))) { + bx_bool old = SIM->get_param_bool(BXPN_MOUSE_ENABLED)->get(); + SIM->get_param_bool(BXPN_MOUSE_ENABLED)->set(!old); + } else { + DEV_mouse_motion((int) (0.25 * dx), (int) -(0.25 * dy), buttons); + } +} + +void bx_svga_gui_c::handle_events(void) +{ + keyboard_update(); + keyboard_clearstate(); + mouse_update(); +} + +void bx_svga_gui_c::flush(void) +{ + gl_copyscreen(screen); +} + +void bx_svga_gui_c::clear_screen(void) +{ + gl_clearscreen(0); +} + +bx_bool bx_svga_gui_c::palette_change( + unsigned index, + unsigned red, + unsigned green, + unsigned blue) +{ + if(index > 255) return 0; + + // without VGA_CLUT8 extension we have only 6 bits for each r,g,b value + if (!clut8 && (red > 63 || green > 63 || blue > 63)) { + red = red >> 2; + green = green >> 2; + blue = blue >> 2; + } + + vga_setpalette(index, red, green, blue); + + return 1; +} + + +void bx_svga_gui_c::dimension_update( + unsigned x, + unsigned y, + unsigned fheight, + unsigned fwidth, + unsigned bpp) +{ + int newmode = 0; + + if (bpp > 8) { + BX_PANIC(("%d bpp graphics mode not supported yet", bpp)); + } + if(fheight > 0) + { + text_cols = x / fwidth; + text_rows = y / fheight; + fontheight = fheight; + if (fwidth != 8) { + x = x * 8 / fwidth; + } + fontwidth = 8; + } + + if ((x == res_x) && (y == res_y)) return; + + if (x == 640 && y == 480) { + newmode = G640x480x256; + } else if (x == 640 && y == 400) { + newmode = G640x400x256; + } else if (x == 800 && y == 600) { + newmode = G800x600x256; + } else if (x == 1024 && y == 768) { + newmode = G1024x768x256; + } + + if (!vga_hasmode(newmode)) { + newmode = G640x480x256; // trying "default" mode... + } + + vga_getpalvec(0, 256, save_vga_pal); + if (vga_setmode(newmode) != 0) + { + LOG_THIS setonoff(LOGLEV_PANIC, ACT_FATAL); + BX_PANIC (("Unable to set requested videomode: %ix%i", x, y)); + } + + gl_setcontextvga(newmode); + gl_getcontext(screen); + gl_setcontextvgavirtual(newmode); + vga_setpalvec(0, 256, save_vga_pal); + save_vga_mode = newmode; + + res_x = x; + res_y = y; +} + + +unsigned bx_svga_gui_c::create_bitmap( + const unsigned char *bmap, + unsigned xdim, + unsigned ydim) +{ + return 0; +} + + +unsigned bx_svga_gui_c::headerbar_bitmap( + unsigned bmap_id, + unsigned alignment, + void (*f)(void)) +{ + return 0; +} + +void bx_svga_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) +{ +} + +void bx_svga_gui_c::show_headerbar(void) +{ +} + + +void bx_svga_gui_c::mouse_enabled_changed_specific (bx_bool val) +{ +} + + +void headerbar_click(int x) +{ +} + +void bx_svga_gui_c::exit(void) +{ + vga_setmode(TEXT); + keyboard_close(); + mouse_close(); +} + +void bx_svga_gui_c::set_display_mode (disp_mode_t newmode) +{ + // if no mode change, do nothing. + if (disp_mode == newmode) return; + // remember the display mode for next time + disp_mode = newmode; + switch (newmode) { + case DISP_MODE_CONFIG: + BX_DEBUG (("switch to configuration mode (back to console)")); + // remember old values and switch to text mode + save_vga_mode = vga_getcurrentmode(); + vga_getpalvec(0, 256, save_vga_pal); + keyboard_close(); + vga_setmode(TEXT); + break; + case DISP_MODE_SIM: + BX_DEBUG (("switch to simulation mode (fullscreen)")); + keyboard_init(); + keyboard_seteventhandler((__keyboard_handler) keyboard_handler); + vga_setmode(save_vga_mode); + vga_setpalvec(0, 256, save_vga_pal); + break; + } +} + +#endif /* if BX_WITH_SVGA */ diff --git a/bochs/gui/term.cc b/bochs/gui/term.cc new file mode 100644 index 00000000..35871b6b --- /dev/null +++ b/bochs/gui/term.cc @@ -0,0 +1,817 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2000-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "bochs.h" +#include "param_names.h" +#include "iodev.h" +#if BX_WITH_TERM + +extern "C" { +#include +#include +}; + +class bx_term_gui_c : public bx_gui_c { +public: + bx_term_gui_c(void) {} + DECLARE_GUI_VIRTUAL_METHODS() +#if BX_USE_IDLE_HACK + virtual void sim_is_idle(void); +#endif + + virtual Bit32u get_sighandler_mask(); + + // called when registered signal arrives + virtual void sighandler(int sig); +}; + +// declare one instance of the gui object and call macro to insert the +// plugin code +static bx_term_gui_c *theGui = NULL; +IMPLEMENT_GUI_PLUGIN_CODE(term) + +#define LOG_THIS theGui-> + +bx_bool initialized = 0; +static unsigned int text_rows = 25, text_cols = 80; + +static short curses_color[8] = { + /* 0 */ COLOR_BLACK, + /* 1 */ COLOR_BLUE, + /* 2 */ COLOR_GREEN, + /* 3 */ COLOR_CYAN, + /* 4 */ COLOR_RED, + /* 5 */ COLOR_MAGENTA, + /* 6 */ COLOR_YELLOW, + /* 7 */ COLOR_WHITE +}; + +static chtype vga_to_term[128] = { + 0xc7, 0xfc, 0xe9, 0xe2, 0xe4, 0xe0, 0xe5, 0xe7, + 0xea, 0xeb, 0xe8, 0xef, 0xee, 0xec, 0xc4, 0xc5, + 0xc9, 0xe6, 0xc6, 0xf4, 0xf6, 0xf2, 0xfb, 0xf9, + 0xff, 0xd6, 0xdc, 0xe7, 0xa3, 0xa5, ' ', ' ', + 0xe1, 0xed, 0xf3, 0xfa, 0xf1, 0xd1, 0xaa, 0xba, + 0xbf, ' ', 0xac, ' ', ' ', 0xa1, 0xab, 0xbb, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, ' ', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', ' ', 0xb5, ' ', + ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', 0xb1, ' ', ' ', ' ', ' ', 0xf7, ' ', + 0xb0, ' ', ' ', ' ', ' ', 0xb2, ' ', ' ' +}; + +static void do_scan(int key_event, int shift, int ctrl, int alt) +{ + /* At some point, cache alt/ctrl/shift so only when the state + changes do we simulate a press or release, to cut down on + keyboard input to the simulated machine */ + + BX_DEBUG(("key_event %d/0x%x %s%s%s", key_event, key_event, + shift ? "(shift)" : "", + ctrl ? "(ctrl)" : "", + alt ? "(alt)" : "")); + if(shift) + DEV_kbd_gen_scancode(BX_KEY_SHIFT_L); + if(ctrl) + DEV_kbd_gen_scancode(BX_KEY_CTRL_L); + if(alt) + DEV_kbd_gen_scancode(BX_KEY_ALT_L); + DEV_kbd_gen_scancode(key_event); + key_event |= BX_KEY_RELEASED; + + DEV_kbd_gen_scancode(key_event); + if(alt) + DEV_kbd_gen_scancode(BX_KEY_ALT_L|BX_KEY_RELEASED); + if(ctrl) + DEV_kbd_gen_scancode(BX_KEY_CTRL_L|BX_KEY_RELEASED); + if(shift) + DEV_kbd_gen_scancode(BX_KEY_SHIFT_L|BX_KEY_RELEASED); +} + +Bit32u bx_term_gui_c::get_sighandler_mask() +{ + return 0 +#ifdef SIGHUP + | (1<set_log_action(LOGLEV_PANIC, ACT_FATAL); + // logfile should be different from stderr, otherwise terminal mode + // really ends up having fun + if (!strcmp(SIM->get_param_string(BXPN_LOG_FILENAME)->getptr(), "-")) + BX_PANIC(("cannot log to stderr in term mode")); + + initscr(); + start_color(); + cbreak(); + curs_set(2); + keypad(stdscr,TRUE); + nodelay(stdscr, TRUE); + noecho(); + +#if BX_HAVE_COLOR_SET + if (has_colors()) { + for (int i=0; i<8; i++) { + for (int j=0; j<8; j++) { + if ((i!=0)||(j!=0)) init_pair(i * 8 + j, j, i); + } + } + } +#endif + + if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) + BX_ERROR(("WARNING: private_colormap option ignored.")); + + initialized = 1; +} + +void do_char(int character, int alt) +{ + switch (character) { + // control keys + case 0x9: do_scan(BX_KEY_TAB,0,0,alt); break; + case 0xa: do_scan(BX_KEY_KP_ENTER,0,0,alt); break; + case 0xd: do_scan(BX_KEY_KP_DELETE,0,0,alt); break; + case 0x1: do_scan(BX_KEY_A,0,1,alt); break; + case 0x2: do_scan(BX_KEY_B,0,1,alt); break; + case 0x3: do_scan(BX_KEY_C,0,1,alt); break; + case 0x4: do_scan(BX_KEY_D,0,1,alt); break; + case 0x5: do_scan(BX_KEY_E,0,1,alt); break; + case 0x6: do_scan(BX_KEY_F,0,1,alt); break; + case 0x7: do_scan(BX_KEY_G,0,1,alt); break; + case 0x8: do_scan(BX_KEY_H,0,1,alt); break; + case 0xb: do_scan(BX_KEY_K,0,1,alt); break; + case 0xc: do_scan(BX_KEY_L,0,1,alt); break; + case 0xe: do_scan(BX_KEY_N,0,1,alt); break; + case 0xf: do_scan(BX_KEY_O,0,1,alt); break; + case 0x10: do_scan(BX_KEY_P,0,1,alt); break; + case 0x11: do_scan(BX_KEY_Q,0,1,alt); break; + case 0x12: do_scan(BX_KEY_R,0,1,alt); break; + case 0x13: do_scan(BX_KEY_S,0,1,alt); break; + case 0x14: do_scan(BX_KEY_T,0,1,alt); break; + case 0x15: do_scan(BX_KEY_U,0,1,alt); break; + case 0x16: do_scan(BX_KEY_V,0,1,alt); break; + case 0x17: do_scan(BX_KEY_W,0,1,alt); break; + case 0x18: do_scan(BX_KEY_X,0,1,alt); break; + case 0x19: do_scan(BX_KEY_Y,0,1,alt); break; + case 0x1a: do_scan(BX_KEY_Z,0,1,alt); break; + case 0x20: do_scan(BX_KEY_SPACE,0,0,alt); break; + case 0x107: do_scan(BX_KEY_BACKSPACE,0,0,alt); break; + case 0x102: do_scan(BX_KEY_DOWN,0,0,alt); break; + case 0x103: do_scan(BX_KEY_UP,0,0,alt); break; + case 0x104: do_scan(BX_KEY_LEFT,0,0,alt); break; + case 0x105: do_scan(BX_KEY_RIGHT,0,0,alt); break; + case 0x152: do_scan(BX_KEY_PAGE_DOWN,0,0,alt); break; + case 0x153: do_scan(BX_KEY_PAGE_UP,0,0,alt); break; + case 0x106: do_scan(BX_KEY_HOME,0,0,alt); break; + case 0x168: do_scan(BX_KEY_END,0,0,alt); break; + case 0x14b: do_scan(BX_KEY_INSERT,0,0,alt); break; + case 0x7f: do_scan(BX_KEY_DELETE,0,0,alt); break; + case 0x1b: do_scan(BX_KEY_ESC,0,0,alt); break; + case '!': do_scan(BX_KEY_1,1,0,alt); break; + case '\'': do_scan(BX_KEY_SINGLE_QUOTE,0,0,alt); break; + case '#': do_scan(BX_KEY_3,1,0,alt); break; + case '$': do_scan(BX_KEY_4,1,0,alt); break; + case '%': do_scan(BX_KEY_5,1,0,alt); break; + case '^': do_scan(BX_KEY_6,1,0,alt); break; + case '&': do_scan(BX_KEY_7,1,0,alt); break; + case '"': do_scan(BX_KEY_SINGLE_QUOTE,1,0,alt); break; + + // ()*+,-./ + case '(': do_scan(BX_KEY_9,1,0,alt); break; + case ')': do_scan(BX_KEY_0,1,0,alt); break; + case '*': do_scan(BX_KEY_8,1,0,alt); break; + case '+': do_scan(BX_KEY_EQUALS,1,0,alt); break; + case ',': do_scan(BX_KEY_COMMA,0,0,alt); break; + case '-': do_scan(BX_KEY_MINUS,0,0,alt); break; + case '.': do_scan(BX_KEY_PERIOD,0,0,alt); break; + case '/': do_scan(BX_KEY_SLASH,0,0,alt); break; + + // 01234567 + case '0': do_scan(BX_KEY_0,0,0,alt); break; + case '1': do_scan(BX_KEY_1,0,0,alt); break; + case '2': do_scan(BX_KEY_2,0,0,alt); break; + case '3': do_scan(BX_KEY_3,0,0,alt); break; + case '4': do_scan(BX_KEY_4,0,0,alt); break; + case '5': do_scan(BX_KEY_5,0,0,alt); break; + case '6': do_scan(BX_KEY_6,0,0,alt); break; + case '7': do_scan(BX_KEY_7,0,0,alt); break; + + // 89:;<=>? + case '8': do_scan(BX_KEY_8,0,0,alt); break; + case '9': do_scan(BX_KEY_9,0,0,alt); break; + case ':': do_scan(BX_KEY_SEMICOLON,1,0,alt); break; + case ';': do_scan(BX_KEY_SEMICOLON,0,0,alt); break; + case '<': do_scan(BX_KEY_COMMA,1,0,alt); break; + case '=': do_scan(BX_KEY_EQUALS,0,0,alt); break; + case '>': do_scan(BX_KEY_PERIOD,1,0,alt); break; + case '?': do_scan(BX_KEY_SLASH,1,0,alt); break; + + // @ABCDEFG + case '@': do_scan(BX_KEY_2,1,0,alt); break; + case 'A': do_scan(BX_KEY_A,1,0,alt); break; + case 'B': do_scan(BX_KEY_B,1,0,alt); break; + case 'C': do_scan(BX_KEY_C,1,0,alt); break; + case 'D': do_scan(BX_KEY_D,1,0,alt); break; + case 'E': do_scan(BX_KEY_E,1,0,alt); break; + case 'F': do_scan(BX_KEY_F,1,0,alt); break; + case 'G': do_scan(BX_KEY_G,1,0,alt); break; + + // HIJKLMNO + case 'H': do_scan(BX_KEY_H,1,0,alt); break; + case 'I': do_scan(BX_KEY_I,1,0,alt); break; + case 'J': do_scan(BX_KEY_J,1,0,alt); break; + case 'K': do_scan(BX_KEY_K,1,0,alt); break; + case 'L': do_scan(BX_KEY_L,1,0,alt); break; + case 'M': do_scan(BX_KEY_M,1,0,alt); break; + case 'N': do_scan(BX_KEY_N,1,0,alt); break; + case 'O': do_scan(BX_KEY_O,1,0,alt); break; + + // PQRSTUVW + case 'P': do_scan(BX_KEY_P,1,0,alt); break; + case 'Q': do_scan(BX_KEY_Q,1,0,alt); break; + case 'R': do_scan(BX_KEY_R,1,0,alt); break; + case 'S': do_scan(BX_KEY_S,1,0,alt); break; + case 'T': do_scan(BX_KEY_T,1,0,alt); break; + case 'U': do_scan(BX_KEY_U,1,0,alt); break; + case 'V': do_scan(BX_KEY_V,1,0,alt); break; + case 'W': do_scan(BX_KEY_W,1,0,alt); break; + + // XYZ[\]^_ + case 'X': do_scan(BX_KEY_X,1,0,alt); break; + case 'Y': do_scan(BX_KEY_Y,1,0,alt); break; + case 'Z': do_scan(BX_KEY_Z,1,0,alt); break; + case '{': do_scan(BX_KEY_LEFT_BRACKET,1,0,alt); break; + case '|': do_scan(BX_KEY_BACKSLASH,1,0,alt); break; + case '}': do_scan(BX_KEY_RIGHT_BRACKET,1,0,alt); break; + case '_': do_scan(BX_KEY_MINUS,1,0,alt); break; + + // `abcdefg + case '`': do_scan(BX_KEY_GRAVE,0,0,alt); break; + case 'a': do_scan(BX_KEY_A,0,0,alt); break; + case 'b': do_scan(BX_KEY_B,0,0,alt); break; + case 'c': do_scan(BX_KEY_C,0,0,alt); break; + case 'd': do_scan(BX_KEY_D,0,0,alt); break; + case 'e': do_scan(BX_KEY_E,0,0,alt); break; + case 'f': do_scan(BX_KEY_F,0,0,alt); break; + case 'g': do_scan(BX_KEY_G,0,0,alt); break; + + // hijklmno + case 'h': do_scan(BX_KEY_H,0,0,alt); break; + case 'i': do_scan(BX_KEY_I,0,0,alt); break; + case 'j': do_scan(BX_KEY_J,0,0,alt); break; + case 'k': do_scan(BX_KEY_K,0,0,alt); break; + case 'l': do_scan(BX_KEY_L,0,0,alt); break; + case 'm': do_scan(BX_KEY_M,0,0,alt); break; + case 'n': do_scan(BX_KEY_N,0,0,alt); break; + case 'o': do_scan(BX_KEY_O,0,0,alt); break; + + // pqrstuvw + case 'p': do_scan(BX_KEY_P,0,0,alt); break; + case 'q': do_scan(BX_KEY_Q,0,0,alt); break; + case 'r': do_scan(BX_KEY_R,0,0,alt); break; + case 's': do_scan(BX_KEY_S,0,0,alt); break; + case 't': do_scan(BX_KEY_T,0,0,alt); break; + case 'u': do_scan(BX_KEY_U,0,0,alt); break; + case 'v': do_scan(BX_KEY_V,0,0,alt); break; + case 'w': do_scan(BX_KEY_W,0,0,alt); break; + + // xyz{|}~ + case 'x': do_scan(BX_KEY_X,0,0,alt); break; + case 'y': do_scan(BX_KEY_Y,0,0,alt); break; + case 'z': do_scan(BX_KEY_Z,0,0,alt); break; + case '[': do_scan(BX_KEY_LEFT_BRACKET,0,0,alt); break; + case '\\': do_scan(BX_KEY_BACKSLASH,0,0,alt); break; + case ']': do_scan(BX_KEY_RIGHT_BRACKET,0,0,alt); break; + case '~': do_scan(BX_KEY_GRAVE,1,0,alt); break; + + // function keys + case KEY_F(1): do_scan(BX_KEY_F1,0,0,alt); break; + case KEY_F(2): do_scan(BX_KEY_F2,0,0,alt); break; + case KEY_F(3): do_scan(BX_KEY_F3,0,0,alt); break; + case KEY_F(4): do_scan(BX_KEY_F4,0,0,alt); break; + case KEY_F(5): do_scan(BX_KEY_F5,0,0,alt); break; + case KEY_F(6): do_scan(BX_KEY_F6,0,0,alt); break; + case KEY_F(7): do_scan(BX_KEY_F7,0,0,alt); break; + case KEY_F(8): do_scan(BX_KEY_F8,0,0,alt); break; + case KEY_F(9): do_scan(BX_KEY_F9,0,0,alt); break; + case KEY_F(10): do_scan(BX_KEY_F10,0,0,alt); break; + case KEY_F(11): do_scan(BX_KEY_F11,0,0,alt); break; + case KEY_F(12): do_scan(BX_KEY_F12,0,0,alt); break; + + // shifted function keys + case KEY_F(13): do_scan(BX_KEY_F1,1,0,alt); break; + case KEY_F(14): do_scan(BX_KEY_F2,1,0,alt); break; + case KEY_F(15): do_scan(BX_KEY_F3,1,0,alt); break; + case KEY_F(16): do_scan(BX_KEY_F4,1,0,alt); break; + case KEY_F(17): do_scan(BX_KEY_F5,1,0,alt); break; + case KEY_F(18): do_scan(BX_KEY_F6,1,0,alt); break; + case KEY_F(19): do_scan(BX_KEY_F7,1,0,alt); break; + case KEY_F(20): do_scan(BX_KEY_F8,1,0,alt); break; + + default: + if(character > 0x79) { + do_char(character - 0x80,1); + break; + } + + BX_INFO(("character unhandled: 0x%x",character)); + break; + } +} + +// ::HANDLE_EVENTS() +// +// Called periodically (vga_update_interval in .bochsrc) so the +// the gui code can poll for keyboard, mouse, and other +// relevant events. + +void bx_term_gui_c::handle_events(void) +{ + int character; + while((character = getch()) != ERR) { + BX_DEBUG(("scancode(0x%x)",character)); + do_char(character,0); + } +} + +// ::FLUSH() +// +// Called periodically, requesting that the gui code flush all pending +// screen update requests. + +void bx_term_gui_c::flush(void) +{ + if (initialized) refresh(); +} + +// ::CLEAR_SCREEN() +// +// Called to request that the VGA region is cleared. Don't +// clear the area that defines the headerbar. + +void bx_term_gui_c::clear_screen(void) +{ + clear(); +#if BX_HAVE_COLOR_SET + color_set(7, NULL); +#endif +#if BX_HAVE_MVHLINE + if (LINES > (int)text_rows) { + mvhline(text_rows, 0, ACS_HLINE, text_cols); + } +#endif +#if BX_HAVE_MVVLINE + if (COLS > (int)text_cols) { + mvvline(0, text_cols, ACS_VLINE, text_rows); + } +#endif + if ((LINES > (int)text_rows) && (COLS > (int)text_cols)) { + mvaddch(text_rows, text_cols, ACS_LRCORNER); + } +} + +int get_color_pair(Bit8u vga_attr) +{ + int term_attr = curses_color[vga_attr & 0x07]; + term_attr |= (curses_color[(vga_attr & 0x70) >> 4] << 3); + return term_attr; +} + +chtype get_term_char(Bit8u vga_char[]) +{ + int term_char; + + if ((vga_char[1] & 0x0f) == ((vga_char[1] >> 4) & 0x0f)) { + return ' '; + } + switch (vga_char[0]) { + case 0x04: term_char = ACS_DIAMOND; break; + case 0x18: term_char = ACS_UARROW; break; + case 0x19: term_char = ACS_DARROW; break; + case 0x1a: term_char = ACS_RARROW; break; + case 0x1b: term_char = ACS_LARROW; break; + case 0xc4: + case 0xcd: term_char = ACS_HLINE; break; + case 0xb3: + case 0xba: term_char = ACS_VLINE; break; + case 0xc9: + case 0xd5: + case 0xd6: + case 0xda: term_char = ACS_ULCORNER; break; + case 0xb7: + case 0xb8: + case 0xbb: + case 0xbf: term_char = ACS_URCORNER; break; + case 0xc0: + case 0xc8: + case 0xd3: + case 0xd4: term_char = ACS_LLCORNER; break; + case 0xbc: + case 0xbd: + case 0xbe: + case 0xd9: term_char = ACS_LRCORNER; break; + case 0xc3: + case 0xc6: + case 0xc7: + case 0xcc: term_char = ACS_LTEE; break; + case 0xb4: + case 0xb5: + case 0xb6: + case 0xb9: term_char = ACS_RTEE; break; + case 0xc2: + case 0xcb: + case 0xd1: + case 0xd2: term_char = ACS_TTEE; break; + case 0xc1: + case 0xca: + case 0xcf: + case 0xd0: term_char = ACS_BTEE; break; + case 0xc5: + case 0xce: + case 0xd7: + case 0xd8: term_char = ACS_PLUS; break; + case 0xb0: + case 0xb1: term_char = ACS_CKBOARD; break; + case 0xb2: term_char = ACS_BOARD; break; + case 0xdb: term_char = ACS_BLOCK; break; + default: + if (vga_char[0] > 0x7f) { + term_char = vga_to_term[vga_char[0]-0x80]; + } else if (vga_char[0] > 0x1f) { + term_char = vga_char[0]; + } else { + term_char = ' '; + } + } + + return term_char; +} + +// ::TEXT_UPDATE() +// +// Called in a VGA text mode, to update the screen with +// new content. +// +// old_text: array of character/attributes making up the contents +// of the screen from the last call. See below +// new_text: array of character/attributes making up the current +// contents, which should now be displayed. See below +// +// format of old_text & new_text: each is tm_info.line_offset*text_rows +// bytes long. Each character consists of 2 bytes. The first by is +// the character value, the second is the attribute byte. +// +// cursor_x: new x location of cursor +// cursor_y: new y location of cursor +// tm_info: this structure contains information for additional +// features in text mode (cursor shape, line offset,...) + +void bx_term_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, + unsigned long cursor_x, unsigned long cursor_y, + bx_vga_tminfo_t tm_info) +{ + unsigned char *old_line, *new_line, *new_start; + unsigned char cAttr; + unsigned int hchars, rows, x, y; + chtype ch; + bx_bool force_update = 0; + + if(charmap_updated) { + force_update = 1; + charmap_updated = 0; + } + + new_start = new_text; + rows = text_rows; + y = 0; + do { + hchars = text_cols; + new_line = new_text; + old_line = old_text; + x = 0; + do { + if (force_update || (old_text[0] != new_text[0]) + || (old_text[1] != new_text[1])) { +#if BX_HAVE_COLOR_SET + if (has_colors()) { + color_set(get_color_pair(new_text[1]), NULL); + } +#endif + ch = get_term_char(&new_text[0]); + if ((new_text[1] & 0x08) > 0) ch |= A_BOLD; + if ((new_text[1] & 0x80) > 0) ch |= A_BLINK; + mvaddch(y, x, ch); + } + x++; + new_text+=2; + old_text+=2; + } while (--hchars); + y++; + new_text = new_line + tm_info.line_offset; + old_text = old_line + tm_info.line_offset; + } while (--rows); + + if ((cursor_x0) + cursor_x--; + else { + cursor_x=COLS-1; + cursor_y--; + } + cAttr = new_start[cursor_y*tm_info.line_offset+cursor_x*2+1]; +#if BX_HAVE_COLOR_SET + if (has_colors()) { + color_set(get_color_pair(cAttr), NULL); + } +#endif + ch = get_term_char(&new_start[cursor_y*tm_info.line_offset+cursor_x*2]); + if ((cAttr & 0x08) > 0) ch |= A_BOLD; + if ((cAttr & 0x80) > 0) ch |= A_REVERSE; + mvaddch(cursor_y, cursor_x, ch); + curs_set(2); + } else { + curs_set(0); + } +} + +int bx_term_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) +{ + return 0; +} + +int bx_term_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) +{ + return 0; +} + +// ::PALETTE_CHANGE() +// +// Allocate a color in the native GUI, for this color, and put +// it in the colormap location 'index'. +// returns: 0=no screen update needed (color map change has direct effect) +// 1=screen updated needed (redraw using current colormap) + +bx_bool bx_term_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) +{ + BX_DEBUG(("color pallete request (%d,%d,%d,%d) ignored", index,red,green,blue)); + return(0); +} + + +// ::GRAPHICS_TILE_UPDATE() +// +// Called to request that a tile of graphics be drawn to the +// screen, since info in this region has changed. +// +// tile: array of 8bit values representing a block of pixels with +// dimension equal to the 'tilewidth' & 'tileheight' parameters to +// ::specific_init(). Each value specifies an index into the +// array of colors you allocated for ::palette_change() +// x0: x origin of tile +// y0: y origin of tile +// +// note: origin of tile and of window based on (0,0) being in the upper +// left of the window. + +void bx_term_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) +{ +} + +// ::DIMENSION_UPDATE() +// +// Called when the VGA mode changes it's X,Y dimensions. +// Resize the window to this size, but you need to add on +// the height of the headerbar to the Y value. +// +// x: new VGA x size +// y: new VGA y size (add headerbar_y parameter from ::specific_init(). +// fheight: new VGA character height in text mode +// fwidth : new VGA character width in text mode +// bpp : bits per pixel in graphics mode + +void bx_term_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight, unsigned fwidth, unsigned bpp) +{ + if (bpp > 8) { + BX_PANIC(("%d bpp graphics mode not supported", bpp)); + } + if (fheight > 0) { + text_cols = x / fwidth; + text_rows = y / fheight; +#if BX_HAVE_COLOR_SET + color_set(7, NULL); +#endif +#if BX_HAVE_MVHLINE + if (LINES > (int)text_rows) { + mvhline(text_rows, 0, ACS_HLINE, text_cols); + } +#endif +#if BX_HAVE_MVVLINE + if (COLS > (int)text_cols) { + mvvline(0, text_cols, ACS_VLINE, text_rows); + } +#endif + if ((LINES > (int)text_rows) && (COLS > (int)text_cols)) { + mvaddch(text_rows, text_cols, ACS_LRCORNER); + } + } +} + +// ::CREATE_BITMAP() +// +// Create a monochrome bitmap of size 'xdim' by 'ydim', which will +// be drawn in the headerbar. Return an integer ID to the bitmap, +// with which the bitmap can be referenced later. +// +// bmap: packed 8 pixels-per-byte bitmap. The pixel order is: +// bit0 is the left most pixel, bit7 is the right most pixel. +// xdim: x dimension of bitmap +// ydim: y dimension of bitmap + +unsigned bx_term_gui_c::create_bitmap(const unsigned char *bmap, unsigned xdim, unsigned ydim) +{ + return(0); +} + +// ::HEADERBAR_BITMAP() +// +// Called to install a bitmap in the bochs headerbar (toolbar). +// +// bmap_id: will correspond to an ID returned from +// ::create_bitmap(). 'alignment' is either BX_GRAVITY_LEFT +// or BX_GRAVITY_RIGHT, meaning install the bitmap in the next +// available leftmost or rightmost space. +// alignment: is either BX_GRAVITY_LEFT or BX_GRAVITY_RIGHT, +// meaning install the bitmap in the next +// available leftmost or rightmost space. +// f: a 'C' function pointer to callback when the mouse is clicked in +// the boundaries of this bitmap. + +unsigned bx_term_gui_c::headerbar_bitmap(unsigned bmap_id, unsigned alignment, void (*f)(void)) +{ + return(0); +} + +// ::SHOW_HEADERBAR() +// +// Show (redraw) the current headerbar, which is composed of +// currently installed bitmaps. + +void bx_term_gui_c::show_headerbar(void) +{ +} + +// ::REPLACE_BITMAP() +// +// Replace the bitmap installed in the headerbar ID slot 'hbar_id', +// with the one specified by 'bmap_id'. 'bmap_id' will have +// been generated by ::create_bitmap(). The old and new bitmap +// must be of the same size. This allows the bitmap the user +// sees to change, when some action occurs. For example when +// the user presses on the floppy icon, it then displays +// the ejected status. +// +// hbar_id: headerbar slot ID +// bmap_id: bitmap ID + +void bx_term_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) +{ +} + +// ::EXIT() +// +// Called before bochs terminates, to allow for a graceful +// exit from the native GUI mechanism. + +void bx_term_gui_c::exit(void) +{ + if (!initialized) return; + clear(); + flush(); + endwin(); + BX_DEBUG(("exiting")); +} + +void bx_term_gui_c::mouse_enabled_changed_specific(bx_bool val) +{ +} + +#if BX_USE_IDLE_HACK +void bx_term_gui_c::sim_is_idle() +{ + int res; + fd_set readfds; + + struct timeval timeout; + timeout.tv_sec = 0; + timeout.tv_usec = 1000; /* 1/1000 s */ + + FD_ZERO(&readfds); + FD_SET(0, &readfds); // Wait for input + + res = select(1, &readfds, NULL, NULL, &timeout); + + switch(res) + { + case -1: /* select() error - should not happen */ + // This can happen when we have a alarm running, lets return + // perror("sim_is_idle: select() failure\n"); + //handle_events(); + return; + case 0: /* timeout */ + //handle_events(); + return; + } + //handle_events(); +} +#endif + +#endif /* if BX_WITH_TERM */ diff --git a/bochs/gui/textconfig.cc b/bochs/gui/textconfig.cc new file mode 100644 index 00000000..b34ddd0c --- /dev/null +++ b/bochs/gui/textconfig.cc @@ -0,0 +1,1063 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// +// This is code for a text-mode configuration interface. Note that this file +// does NOT include bochs.h. Instead, it does all of its contact with +// the simulator through an object called SIM, defined in siminterface.cc +// and siminterface.h. This separation adds an extra layer of method +// calls before any work can be done, but the benefit is that the compiler +// enforces the rules. I can guarantee that textconfig.cc doesn't call any +// I/O device objects directly, for example, because the bx_devices symbol +// isn't even defined in this context. +// + +// workaround for include file ordering problem in conjunction with AspectC++ +#include "bochs.h" + +#include "config.h" + +#if BX_USE_TEXTCONFIG + +#ifndef __QNXNTO__ +extern "C" { +#endif + +#include +#include +#include +#include + +#ifndef __QNXNTO__ +} +#endif + +#include "osdep.h" +#include "param_names.h" +#include "textconfig.h" +#include "siminterface.h" +#include "extplugin.h" + +#define CI_PATH_LENGTH 512 + +//DanceOS Richard Hellwig +#ifdef DANCEOS_RESTORE +bool raus = false; +#endif + +/* functions for changing particular options */ +void bx_config_interface_init(); +int bx_read_rc(char *rc); +int bx_write_rc(char *rc); +void bx_log_options(int individual); +int bx_atexit(); +#if BX_DEBUGGER +void bx_dbg_exit(int code); +#endif + +/******************************************************************/ +/* lots of code stolen from bximage.c */ +/* remove leading spaces, newline junk at end. returns pointer to + cleaned string, which is between s0 and the null */ +char *clean_string(char *s0) +{ + char *s = s0; + char *ptr; + /* find first nonblank */ + while (isspace(*s)) + s++; + /* truncate string at first non-alphanumeric */ + ptr = s; + while (isprint(*ptr)) + ptr++; + *ptr = 0; + return s; +} + +/* returns 0 on success, -1 on failure. The value goes into out. */ +int ask_uint(const char *prompt, const char *help, Bit32u min, Bit32u max, Bit32u the_default, Bit32u *out, int base) +{ + Bit32u n = max + 1; + char buffer[1024]; + char *clean; + int illegal; + assert(base==10 || base==16); + while (1) { + printf(prompt, the_default); + if (!fgets(buffer, sizeof(buffer), stdin)) + return -1; + clean = clean_string(buffer); + if (strlen(clean) < 1) { + // empty line, use the default + *out = the_default; + return 0; + } + if ((clean[0] == '?') && (strlen(help) > 0)) { + printf("\n%s\n", help); + if (base == 10) { + printf("Your choice must be an integer between %u and %u.\n\n", min, max); + } else { + printf("Your choice must be an integer between 0x%x and 0x%x.\n\n", min, max); + } + continue; + } + const char *format = (base==10) ? "%d" : "%x"; + illegal = (1 != sscanf(buffer, format, &n)); + if (illegal || nmax) { + if (base == 10) { + printf("Your choice (%s) was not an integer between %u and %u.\n\n", + clean, min, max); + } else { + printf("Your choice (%s) was not an integer between 0x%x and 0x%x.\n\n", + clean, min, max); + } + } else { + // choice is okay + *out = n; + return 0; + } + } +} + +// identical to ask_uint, but uses signed comparisons +int ask_int(const char *prompt, const char *help, Bit32s min, Bit32s max, Bit32s the_default, Bit32s *out) +{ + int n = max + 1; + char buffer[1024]; + char *clean; + int illegal; + while (1) { + printf(prompt, the_default); + if (!fgets(buffer, sizeof(buffer), stdin)) + return -1; + clean = clean_string(buffer); + if (strlen(clean) < 1) { + // empty line, use the default + *out = the_default; + return 0; + } + if ((clean[0] == '?') && (strlen(help) > 0)) { + printf("\n%s\n", help); + printf("Your choice must be an integer between %u and %u.\n\n", min, max); + continue; + } + illegal = (1 != sscanf(buffer, "%d", &n)); + if (illegal || nmax) { + printf("Your choice (%s) was not an integer between %d and %d.\n\n", + clean, min, max); + } else { + // choice is okay + *out = n; + return 0; + } + } +} + +int ask_menu(const char *prompt, const char *help, int n_choices, const char *choice[], int the_default, int *out) +{ + char buffer[1024]; + char *clean; + int i; + *out = -1; + while (1) { + printf(prompt, choice[the_default]); + if (!fgets(buffer, sizeof(buffer), stdin)) + return -1; + clean = clean_string(buffer); + if (strlen(clean) < 1) { + // empty line, use the default + *out = the_default; + return 0; + } + for (i=0; i 0) { + printf("\n%s\nValid values are: ", help); + } + for (i=0; i0) printf(", "); + printf("%s", choice[i]); + } + printf("\n"); + } +} + +int ask_yn(const char *prompt, const char *help, Bit32u the_default, Bit32u *out) +{ + char buffer[16]; + char *clean; + *out = 1<<31; + while (1) { + // if there's a %s field, substitute in the default yes/no. + printf(prompt, the_default ? "yes" : "no"); + if (!fgets(buffer, sizeof(buffer), stdin)) + return -1; + clean = clean_string(buffer); + if (strlen(clean) < 1) { + // empty line, use the default + *out = the_default; + return 0; + } + switch (tolower(clean[0])) { + case 'y': *out=1; return 0; + case 'n': *out=0; return 0; + case '?': + if (strlen(help) > 0) { + printf("\n%s\n", help); + } + break; + } + printf("Please type either yes or no.\n"); + } +} + +// returns -1 on error (stream closed or something) +// returns 0 if default was taken +// returns 1 if value changed +// returns -2 if help requested +int ask_string(const char *prompt, const char *the_default, char *out) +{ + char buffer[1024]; + char *clean; + assert(the_default != out); + out[0] = 0; + printf(prompt, the_default); + if (fgets(buffer, sizeof(buffer), stdin) == NULL) + return -1; + clean = clean_string(buffer); + if (clean[0] == '?') + return -2; + if (strlen(clean) < 1) { + // empty line, use the default + strcpy(out, the_default); + return 0; + } + strcpy(out, clean); + return 1; +} + +/******************************************************************/ + +static const char *startup_menu_prompt = +"------------------------------\n" +"Bochs Configuration: Main Menu\n" +"------------------------------\n" +"\n" +"This is the Bochs Configuration Interface, where you can describe the\n" +"machine that you want to simulate. Bochs has already searched for a\n" +"configuration file (typically called bochsrc.txt) and loaded it if it\n" +"could be found. When you are satisfied with the configuration, go\n" +"ahead and start the simulation.\n" +"\n" +"You can also start bochs with the -q option to skip these menus.\n" +"\n" +"1. Restore factory default configuration\n" +"2. Read options from...\n" +"3. Edit options\n" +"4. Save options to...\n" +"5. Restore the Bochs state from...\n" +"6. Begin simulation\n" +"7. Quit now\n" +"\n" +"Please choose one: [%d] "; + +static const char *startup_options_prompt = +"------------------\n" +"Bochs Options Menu\n" +"------------------\n" +"0. Return to previous menu\n" +"1. Logfile options\n" +"2. Log options for all devices\n" +"3. Log options for individual devices\n" +"4. CPU options\n" +"5. CPUID options\n" +"6. Memory options\n" +"7. Clock & CMOS options\n" +"8. PCI options\n" +"9. Bochs Display & Interface options\n" +"10. Keyboard & Mouse options\n" +"11. Disk & Boot options\n" +"12. Serial / Parallel / USB options\n" +"13. Network card options\n" +"14. Sound Blaster 16 options\n" +"15. Other options\n" +#if BX_PLUGINS +"16. User-defined options\n" +#endif +"\n" +"Please choose one: [0] "; + +static const char *runtime_menu_prompt = +"---------------------\n" +"Bochs Runtime Options\n" +"---------------------\n" +"1. Floppy disk 0: %s\n" +"2. Floppy disk 1: %s\n" +"3. 1st CDROM: %s\n" +"4. 2nd CDROM: %s\n" +"5. 3rd CDROM: %s\n" +"6. 4th CDROM: %s\n" +"7. (not implemented)\n" +"8. Log options for all devices\n" +"9. Log options for individual devices\n" +"10. Instruction tracing: off (doesn't exist yet)\n" +"11. USB runtime options\n" +"12. Misc runtime options\n" +"13. Continue simulation\n" +"14. Quit now\n" +"\n" +"Please choose one: [13] "; + +#define NOT_IMPLEMENTED(choice) \ + fprintf(stderr, "ERROR: choice %d not implemented\n", choice); + +#define BAD_OPTION(menu,choice) \ + do {fprintf(stderr, "ERROR: menu %d has no choice %d\n", menu, choice); \ + assert(0); } while (0) + +void build_runtime_options_prompt(const char *format, char *buf, int size) +{ + bx_list_c *floppyop; + bx_list_c *cdromop = NULL; + char pname[80]; + char buffer[6][128]; + + for (int i=0; i<2; i++) { + sprintf(pname, "floppy.%d", i); + floppyop = (bx_list_c*) SIM->get_param(pname); + if (SIM->get_param_enum("devtype", floppyop)->get() == BX_FDD_NONE) + strcpy(buffer[i], "(not present)"); + else { + sprintf(buffer[i], "%s, size=%s, %s", SIM->get_param_string("path", floppyop)->getptr(), + SIM->get_param_enum("type", floppyop)->get_selected(), + SIM->get_param_bool("status", floppyop)->get() ? "inserted":"ejected"); + if (!SIM->get_param_string("path", floppyop)->getptr()[0]) strcpy(buffer[i], "none"); + } + } + + // 4 cdroms supported at run time + int device; + for (Bit8u cdrom=0; cdrom<4; cdrom++) { + if (!SIM->get_cdrom_options(cdrom, &cdromop, &device) || !SIM->get_param_bool("present", cdromop)->get()) + sprintf(buffer[2+cdrom], "(not present)"); + else + sprintf(buffer[2+cdrom], "(%s on ata%d) %s, %s", + device&1?"slave":"master", device/2, SIM->get_param_string("path", cdromop)->getptr(), + (SIM->get_param_bool("status", cdromop)->get()) ? "inserted" : "ejected"); + } + + snprintf(buf, size, format, buffer[0], buffer[1], buffer[2], + buffer[3], buffer[4], buffer[5]); +} + +int do_menu(const char *pname) +{ + bx_list_c *menu = (bx_list_c *)SIM->get_param(pname, NULL); + while (1) { + menu->get_choice()->set(0); + int status = menu->text_ask(stdin, stderr); + if (status < 0) return status; + bx_param_num_c *choice = menu->get_choice(); + if (choice->get() < 1) + return choice->get(); + else { + int index = choice->get() - 1; // choosing 1 means list[0] + bx_param_c *chosen = menu->get(index); + assert(chosen != NULL); + if (chosen->get_enabled()) { + if (SIM->get_init_done() && !chosen->get_runtime_param()) { + fprintf(stderr, "\nWARNING: parameter not available at runtime!\n"); + } else if (chosen->get_type() == BXT_LIST) { + char chosen_pname[80]; + chosen->get_param_path(chosen_pname, 80); + do_menu(chosen_pname); + } else { + chosen->text_ask(stdin, stderr); + } + } + } + } +} + +void askparam(char *pname) +{ + bx_param_c *param = SIM->get_param(pname); + param->text_ask(stdin, stderr); +} + +int bx_config_interface(int menu) +{ + Bit32u choice; + + + char sr_path[CI_PATH_LENGTH]; + while (1) { + switch (menu) { + case BX_CI_INIT: + bx_config_interface_init(); + return 0; + case BX_CI_START_SIMULATION: + // we don't expect it to return, but if it does, quit + //DanceOS Richard Hellwig +#ifdef DANCEOS_RESTORE + if(SIM->begin_simulation(bx_startup_flags.argc, bx_startup_flags.argv)){ + raus = true; + break; + }else{ + SIM->quit_sim(1); + } +#else + SIM->begin_simulation(bx_startup_flags.argc, bx_startup_flags.argv); + SIM->quit_sim(1); +#endif + + break; + case BX_CI_START_MENU: + { + Bit32u n_choices = 7; + Bit32u default_choice; + switch (SIM->get_param_enum(BXPN_BOCHS_START)->get()) { + case BX_LOAD_START: + default_choice = 2; break; + case BX_EDIT_START: + default_choice = 3; break; + default: + default_choice = 6; break; + } + if (ask_uint(startup_menu_prompt, "", 1, n_choices, default_choice, &choice, 10) < 0) return -1; + switch (choice) { + case 1: + fprintf(stderr, "I reset all options back to their factory defaults.\n\n"); + SIM->reset_all_param(); + SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_EDIT_START); + break; + case 2: + // Before reading a new configuration, reset every option to its + // original state. + SIM->reset_all_param(); + if (bx_read_rc(NULL) >= 0) + SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_RUN_START); + break; + case 3: + bx_config_interface(BX_CI_START_OPTS); + SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_RUN_START); + break; + case 4: bx_write_rc(NULL); break; + case 5: + if (ask_string("\nWhat is the path to restore the Bochs state from?\nTo cancel, type 'none'. [%s] ", "none", sr_path) >= 0) { + if (strcmp(sr_path, "none")) { + SIM->get_param_bool(BXPN_RESTORE_FLAG)->set(1); + SIM->get_param_string(BXPN_RESTORE_PATH)->set(sr_path); + bx_config_interface(BX_CI_START_SIMULATION); + } + } + break; + case 6: bx_config_interface(BX_CI_START_SIMULATION); break; + case 7: SIM->quit_sim(1); return -1; + default: BAD_OPTION(menu, choice); + } + } + break; + case BX_CI_START_OPTS: + if (ask_uint(startup_options_prompt, "", 0, 15+BX_PLUGINS, 0, &choice, 10) < 0) return -1; + switch (choice) { + case 0: return 0; + case 2: bx_log_options(0); break; + case 3: bx_log_options(1); break; + case 1: do_menu("log"); break; + case 4: do_menu("cpu"); break; + case 5: do_menu("cpuid"); break; + case 6: do_menu("memory"); break; + case 7: do_menu("clock_cmos"); break; + case 8: do_menu("pci"); break; + case 9: do_menu("display"); break; + case 10: do_menu("keyboard_mouse"); break; + case 11: do_menu(BXPN_MENU_DISK); break; + case 12: do_menu("ports"); break; + case 13: do_menu("network"); break; + case 14: do_menu(BXPN_SB16); break; + case 15: do_menu("misc"); break; +#if BX_PLUGINS + case 16: do_menu("user"); break; +#endif + default: BAD_OPTION(menu, choice); + } + break; + case BX_CI_RUNTIME: + { + bx_list_c *cdromop = NULL; + char pname[80]; + char prompt[1024]; + build_runtime_options_prompt(runtime_menu_prompt, prompt, 1024); + if (ask_uint(prompt, "", 1, BX_CI_RT_QUIT, BX_CI_RT_CONT, &choice, 10) < 0) return -1; + switch (choice) { + case BX_CI_RT_FLOPPYA: + if (SIM->get_param_enum(BXPN_FLOPPYA_DEVTYPE)->get() != BX_FDD_NONE) do_menu(BXPN_FLOPPYA); + break; + case BX_CI_RT_FLOPPYB: + if (SIM->get_param_enum(BXPN_FLOPPYB_DEVTYPE)->get() != BX_FDD_NONE) do_menu(BXPN_FLOPPYB); + break; + case BX_CI_RT_CDROM1: + case BX_CI_RT_CDROM2: + case BX_CI_RT_CDROM3: + case BX_CI_RT_CDROM4: + int device; + if (SIM->get_cdrom_options(choice - BX_CI_RT_CDROM1, &cdromop, &device) && SIM->get_param_bool("present", cdromop)->get()) { + cdromop->get_param_path(pname, 80); + do_menu(pname); + } + break; + case BX_CI_RT_IPS: + // not implemented yet because I would have to mess with + // resetting timers and pits and everything on the fly. + // askparam(BXPN_IPS); + break; + case BX_CI_RT_LOGOPTS1: bx_log_options(0); break; + case BX_CI_RT_LOGOPTS2: bx_log_options(1); break; + case BX_CI_RT_INST_TR: NOT_IMPLEMENTED(choice); break; + case BX_CI_RT_USB: do_menu(BXPN_MENU_RUNTIME_USB); break; + case BX_CI_RT_MISC: do_menu(BXPN_MENU_RUNTIME_MISC); break; + case BX_CI_RT_CONT: fprintf(stderr, "Continuing simulation\n"); return 0; + case BX_CI_RT_QUIT: + fprintf(stderr, "You chose quit on the configuration interface.\n"); + bx_user_quit = 1; +#if !BX_DEBUGGER + bx_atexit(); + SIM->quit_sim(1); +#else + bx_dbg_exit(1); +#endif + return -1; + default: fprintf(stderr, "Menu choice %d not implemented.\n", choice); + } + } + break; + default: + fprintf(stderr, "Unknown config interface menu type.\n"); + assert(menu >=0 && menu < BX_CI_N_MENUS); + } + //DanceOS Richard Hellwig +#ifdef DANCEOS_RESTORE + if(raus){ + return 1; + } +#endif + } +} + +static void bx_print_log_action_table() +{ + // just try to print all the prefixes first. + fprintf(stderr, "Current log settings:\n"); + fprintf(stderr, " Debug Info Error Panic Pass\n"); + fprintf(stderr, "ID Device Action Action Action Action Action\n"); + fprintf(stderr, "---- --------- --------- --------- ---------- ---------- ----------\n"); + int i, j, imax=SIM->get_n_log_modules(); + for (i=0; iget_prefix(i), "[ ]")) { + fprintf(stderr, "%3d. %s ", i, SIM->get_prefix(i)); + for (j=0; jget_max_log_level(); j++) { + fprintf(stderr, "%10s ", SIM->get_action_name(SIM->get_log_action(i, j))); + } + fprintf(stderr, "\n"); + } + } +} + +static const char *log_options_prompt1 = "Enter the ID of the device to edit, or -1 to return: [-1] "; +static const char *log_level_choices[] = { "ignore", "report", "ask", "fatal", "no change" }; +static int log_level_n_choices_normal = 4; + +void bx_log_options(int individual) +{ + if (individual) { + int done = 0; + while (!done) { + bx_print_log_action_table(); + Bit32s id, level, action; + Bit32s maxid = SIM->get_n_log_modules(); + if (ask_int(log_options_prompt1, "", -1, maxid-1, -1, &id) < 0) + return; + if (id < 0) return; + fprintf(stderr, "Editing log options for the device %s\n", SIM->get_prefix(id)); + for (level=0; levelget_max_log_level(); level++) { + char prompt[1024]; + int default_action = SIM->get_log_action(id, level); + sprintf(prompt, "Enter action for %s event: [%s] ", SIM->get_log_level_name(level), SIM->get_action_name(default_action)); + // don't show the no change choice (choices=3) + if (ask_menu(prompt, "", log_level_n_choices_normal, log_level_choices, default_action, &action)<0) + return; + SIM->set_log_action(id, level, action); + } + } + } else { + // provide an easy way to set log options for all devices at once + bx_print_log_action_table(); + for (int level=0; levelget_max_log_level(); level++) { + char prompt[1024]; + int action, default_action = 3; // default to no change + sprintf(prompt, "Enter action for %s event on all devices: [no change] ", SIM->get_log_level_name(level)); + // do show the no change choice (choices=4) + if (ask_menu(prompt, "", log_level_n_choices_normal+1, log_level_choices, default_action, &action)<0) + return; + if (action < 3) { + SIM->set_default_log_action(level, action); + SIM->set_log_action(-1, level, action); + } + } + } +} + +int bx_read_rc(char *rc) +{ + if (rc && SIM->read_rc(rc) >= 0) return 0; + char oldrc[CI_PATH_LENGTH]; + if (SIM->get_default_rc(oldrc, CI_PATH_LENGTH) < 0) + strcpy(oldrc, "none"); + char newrc[CI_PATH_LENGTH]; + while (1) { + if (ask_string("\nWhat is the configuration file name?\nTo cancel, type 'none'. [%s] ", oldrc, newrc) < 0) return -1; + if (!strcmp(newrc, "none")) return -1; + if (SIM->read_rc(newrc) >= 0) return 0; + fprintf(stderr, "The file '%s' could not be found.\n", newrc); + } +} + +int bx_write_rc(char *rc) +{ + char oldrc[CI_PATH_LENGTH], newrc[CI_PATH_LENGTH]; + if (rc == NULL) { + if (SIM->get_default_rc(oldrc, CI_PATH_LENGTH) < 0) + strcpy(oldrc, "none"); + } else { + strncpy(oldrc, rc, CI_PATH_LENGTH); + } + while (1) { + if (ask_string("Save configuration to what file? To cancel, type 'none'.\n[%s] ", oldrc, newrc) < 0) return -1; + if (!strcmp(newrc, "none")) return 0; + // try with overwrite off first + int status = SIM->write_rc(newrc, 0); + if (status >= 0) { + fprintf(stderr, "Wrote configuration to '%s'.\n", newrc); + return 0; + } else if (status == -2) { + // return code -2 indicates the file already exists, and overwrite + // confirmation is required. + Bit32u overwrite = 0; + char prompt[256]; + sprintf(prompt, "Configuration file '%s' already exists. Overwrite it? [no] ", newrc); + if (ask_yn(prompt, "", 0, &overwrite) < 0) return -1; + if (!overwrite) continue; // if "no", start loop over, asking for a different file + // they confirmed, so try again with overwrite bit set + if (SIM->write_rc(newrc, 1) >= 0) { + fprintf(stderr, "Overwriting existing configuration '%s'.\n", newrc); + return 0; + } else { + fprintf(stderr, "Write failed to '%s'.\n", newrc); + } + } + } +} + +const char *log_action_ask_choices[] = { "cont", "alwayscont", "die", "abort", "debug" }; +int log_action_n_choices = 4 + (BX_DEBUGGER||BX_GDBSTUB?1:0); + +BxEvent * +config_interface_notify_callback(void *unused, BxEvent *event) +{ + event->retcode = -1; + switch (event->type) + { + case BX_SYNC_EVT_TICK: + event->retcode = 0; + return event; + case BX_SYNC_EVT_ASK_PARAM: + event->retcode = event->u.param.param->text_ask(stdin, stderr); + return event; + case BX_SYNC_EVT_LOG_ASK: + { + int level = event->u.logmsg.level; + fprintf(stderr, "========================================================================\n"); + fprintf(stderr, "Event type: %s\n", SIM->get_log_level_name (level)); + fprintf(stderr, "Device: %s\n", event->u.logmsg.prefix); + fprintf(stderr, "Message: %s\n\n", event->u.logmsg.msg); + fprintf(stderr, "A %s has occurred. Do you want to:\n", SIM->get_log_level_name (level)); + fprintf(stderr, " cont - continue execution\n"); + fprintf(stderr, " alwayscont - continue execution, and don't ask again.\n"); + fprintf(stderr, " This affects only %s events from device %s\n", SIM->get_log_level_name (level), event->u.logmsg.prefix); + fprintf(stderr, " die - stop execution now\n"); + fprintf(stderr, " abort - dump core %s\n", + BX_HAVE_ABORT ? "" : "(Disabled)"); +#if BX_DEBUGGER + fprintf(stderr, " debug - continue and return to bochs debugger\n"); +#endif +#if BX_GDBSTUB + fprintf(stderr, " debug - hand control to gdb\n"); +#endif + + int choice; +ask: + if (ask_menu("Choose one of the actions above: [%s] ", "", + log_action_n_choices, log_action_ask_choices, 2, &choice) < 0) + event->retcode = -1; + // return 0 for continue, 1 for alwayscontinue, 2 for die, 3 for debug. + if (!BX_HAVE_ABORT && choice==BX_LOG_ASK_CHOICE_DUMP_CORE) goto ask; + fflush(stdout); + fflush(stderr); + event->retcode = choice; + } + return event; + case BX_ASYNC_EVT_REFRESH: + case BX_ASYNC_EVT_DBG_MSG: + // The text mode interface does not use these events, so just ignore + // them. + return event; + default: + fprintf(stderr, "Control panel: notify callback called with event type %04x\n", event->type); + return event; + } + assert(0); // switch statement should return +} + +void bx_config_interface_init() +{ + SIM->set_notify_callback(config_interface_notify_callback, NULL); +} + +///////////////////////////////////////////////////////////////////// +// implement the text_* methods for bx_param types. + +void bx_param_num_c::text_print(FILE *fp) +{ + if (get_long_format()) { + fprintf(fp, get_long_format(), get()); + } else { + const char *format = "%s: %d"; + assert(base==10 || base==16); + if (base==16) format = "%s: 0x%x"; + if (get_label()) { + fprintf(fp, format, get_label(), get()); + } else { + fprintf(fp, format, get_name(), get()); + } + } +} + +void bx_param_bool_c::text_print(FILE *fp) +{ + if (get_format()) { + fprintf(fp, get_format(), get() ? "yes" : "no"); + } else { + const char *format = "%s: %s"; + if (get_label()) { + fprintf(fp, format, get_label(), get() ? "yes" : "no"); + } else { + fprintf(fp, format, get_name(), get() ? "yes" : "no"); + } + } +} + +void bx_param_enum_c::text_print(FILE *fp) +{ + int n = get(); + assert(n >= min && n <= max); + const char *choice = choices[n - min]; + if (get_format()) { + fprintf(fp, get_format(), choice); + } else { + const char *format = "%s: %s"; + if (get_label()) { + fprintf(fp, format, get_label(), choice); + } else { + fprintf(fp, format, get_name(), choice); + } + } +} + +void bx_param_string_c::text_print(FILE *fp) +{ + char *value = getptr(); + int opts = options; + if (opts & RAW_BYTES) { + char buffer[1024]; + buffer[0] = 0; + char sep_string[2]; + sep_string[0] = separator; + sep_string[1] = 0; + for (int i=0; i0)?sep_string : "", (unsigned int)0xff&val[i]); + strncat(buffer, eachbyte, sizeof(eachbyte)); + } + if (strlen(buffer) > sizeof(buffer)-4) { + assert(0); // raw byte print buffer is probably overflowing. increase the max or make it dynamic + } + value = buffer; + } + if (get_format()) { + fprintf(fp, get_format(), value); + } else { + if (get_label()) { + fprintf(fp, "%s: %s", get_label(), value); + } else { + fprintf(fp, "%s: %s", get_name(), value); + } + } +} + +void bx_list_c::text_print(FILE *fp) +{ + fprintf(fp, "%s: ", get_name()); + for (int i=0; iget_enabled()) { + if ((i>0) && (options & SERIES_ASK)) + fprintf(fp, ", "); + list[i]->text_print(fp); + if (!(options & SERIES_ASK)) + fprintf(fp, "\n"); + } + } +} + +int bx_param_num_c::text_ask(FILE *fpin, FILE *fpout) +{ + fprintf(fpout, "\n"); + int status; + const char *prompt = get_ask_format(); + const char *help = get_description(); + if (prompt == NULL) { + // default prompt, if they didn't set an ask format string + text_print(fpout); + fprintf(fpout, "\n"); + prompt = "Enter new value or '?' for help: [%d] "; + if (base==16) + prompt = "Enter new value in hex or '?' for help: [%x] "; + } + Bit32u n = get(); + status = ask_uint(prompt, help, (Bit32u)min, (Bit32u)max, n, &n, base); + if (status < 0) return status; + set(n); + return 0; +} + +int bx_param_bool_c::text_ask(FILE *fpin, FILE *fpout) +{ + fprintf(fpout, "\n"); + int status; + const char *prompt = get_ask_format(); + const char *help = get_description(); + char buffer[512]; + if (prompt == NULL) { + if (get_label() != NULL) { + sprintf(buffer, "%s? [%%s] ", get_label()); + prompt = buffer; + } else { + // default prompt, if they didn't set an ask format or label string + sprintf(buffer, "%s? [%%s] ", get_name()); + prompt = buffer; + } + } + Bit32u n = get(); + status = ask_yn(prompt, help, n, &n); + if (status < 0) return status; + set(n); + return 0; +} + +int bx_param_enum_c::text_ask(FILE *fpin, FILE *fpout) +{ + fprintf(fpout, "\n"); + const char *prompt = get_ask_format(); + const char *help = get_description(); + if (prompt == NULL) { + // default prompt, if they didn't set an ask format string + fprintf(fpout, "%s = ", get_name()); + text_print(fpout); + fprintf(fpout, "\n"); + prompt = "Enter new value or '?' for help: [%s] "; + } + Bit32s n = (Bit32s)(get() - min); + int status = ask_menu(prompt, help, (Bit32u)(max-min+1), choices, n, &n); + if (status < 0) return status; + n += (Bit32s)min; + set(n); + return 0; +} + +int parse_raw_bytes(char *dest, char *src, int destsize, char separator) +{ + int i; + unsigned int n; + for (i=0; igetptr(); + fprintf(fpout, "\n"); + int i, imax = strlen(my_title); + for (i=0; iget_enabled()) { + if (!SIM->get_init_done() || list[i]->get_runtime_param()) { + list[i]->text_ask(fpin, fpout); + } + } + } + } else { + if (options & SHOW_PARENT) + fprintf(fpout, "0. Return to previous menu\n"); + for (int i=0; iget_enabled()) && + (!SIM->get_init_done() || list[i]->get_runtime_param())) { + if (list[i]->get_type() == BXT_LIST) { + child = (bx_list_c*)list[i]; + fprintf(fpout, "%s\n", child->get_title()->getptr()); + } else { + if ((options & SHOW_GROUP_NAME) && (list[i]->get_group() != NULL)) + fprintf(fpout, "%s ", list[i]->get_group()); + list[i]->text_print(fpout); + fprintf(fpout, "\n"); + } + } else { + if (list[i]->get_type() == BXT_LIST) { + child = (bx_list_c*)list[i]; + fprintf(fpout, "%s (disabled)\n", child->get_title()->getptr()); + } else { + fprintf(fpout, "(disabled)\n"); + } + } + } + fprintf(fpout, "\n"); + Bit32u n = choice->get(); + int min = (options & SHOW_PARENT) ? 0 : 1; + int max = size; + int status = ask_uint("Please choose one: [%d] ", "", min, max, n, &n, 10); + if (status < 0) return status; + choice->set(n); + } + return 0; +} + +static int ci_callback(void *userdata, ci_command_t command) +{ + switch (command) + { + case CI_START: + bx_config_interface_init(); + if (SIM->get_param_enum(BXPN_BOCHS_START)->get() == BX_QUICK_START) + bx_config_interface(BX_CI_START_SIMULATION); + else { + if (!SIM->test_for_text_console()) + return CI_ERR_NO_TEXT_CONSOLE; + bx_config_interface(BX_CI_START_MENU); + } + break; + case CI_RUNTIME_CONFIG: + bx_config_interface(BX_CI_RUNTIME); + break; + case CI_SHUTDOWN: + break; + } + return 0; +} + +// if I can make things compile without this module linked in, then +// this file can become a plugin too. +int init_text_config_interface() +{ + SIM->register_configuration_interface("textconfig", ci_callback, NULL); + return 0; // success +} + +#endif diff --git a/bochs/gui/textconfig.h b/bochs/gui/textconfig.h new file mode 100644 index 00000000..40871345 --- /dev/null +++ b/bochs/gui/textconfig.h @@ -0,0 +1,58 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#include "config.h" + +#if BX_USE_TEXTCONFIG + +enum { + BX_CI_INIT, + BX_CI_START_MENU, + BX_CI_START_OPTS, + BX_CI_START_OPTS_MEM, + BX_CI_START_OPTS_INTERFACE, + BX_CI_START_OPTS_DISK, + BX_CI_START_OPTS_SOUND, + BX_CI_START_OPTS_MISC, + BX_CI_START_SIMULATION, + BX_CI_RUNTIME, + BX_CI_N_MENUS +}; + +enum { + BX_CI_RT_FLOPPYA = 1, + BX_CI_RT_FLOPPYB, + BX_CI_RT_CDROM1, + BX_CI_RT_CDROM2, + BX_CI_RT_CDROM3, + BX_CI_RT_CDROM4, + BX_CI_RT_IPS, + BX_CI_RT_LOGOPTS1, + BX_CI_RT_LOGOPTS2, + BX_CI_RT_INST_TR, + BX_CI_RT_USB, + BX_CI_RT_MISC, + BX_CI_RT_CONT, + BX_CI_RT_QUIT +}; + +int init_text_config_interface(); + +#endif diff --git a/bochs/gui/wenhdbg_res.h b/bochs/gui/wenhdbg_res.h new file mode 100755 index 00000000..07bb56b5 --- /dev/null +++ b/bochs/gui/wenhdbg_res.h @@ -0,0 +1,79 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// BOCHS ENHANCED DEBUGGER Ver 1.2 +// (C) Chourdakis Michael, 2008 +// http://www.turboirc.com +// +// Modified by Bruce Ewing +// + +#ifndef BX_ENH_DBG_RES_H +#define BX_ENH_DBG_RES_H + +// The menuIDs should not have big "gaps" -- so the switch works well. +// A few small gaps is OK. +#define CMD_CONT 101 +#define CMD_STEP1 102 +#define CMD_STEPN 103 +#define CMD_BREAK 104 + +#define CMD_BRKPT 107 +#define CMD_WPTWR 108 +#define CMD_WPTRD 109 +#define CMD_FIND 110 +#define CMD_RFRSH 111 +// View Menu: +#define CMD_PHYDMP 113 +#define CMD_LINDMP 114 +#define CMD_STACK 115 +#define CMD_GDTV 116 +#define CMD_IDTV 117 +#define CMD_PAGEV 118 +#define CMD_VBRK 120 +#define CMD_CMEM 121 +#define CMD_PTREE 122 +#define CMD_DISASM 123 +// Options Menu: +#define CMD_MODEB 125 +#define CMD_XCEPT 126 +#define CMD_ONECPU 127 +#define CMD_DADEF 128 +#define CMD_ATTI 129 +#define CMD_FONT 130 +#define CMD_UCASE 131 +#define CMD_IOWIN 132 +#define CMD_SBTN 133 +#define CMD_MHEX 134 +#define CMD_MASCII 135 +#define CMD_LEND 136 + +#define CMD_IGNSA 139 +#define CMD_IGNNT 140 +#define CMD_RCLR 141 +// The next 8 menuID's must be strictly "contiguous" and in-order +#define CMD_EREG 142 +#define CMD_SREG 143 +#define CMD_SYSR 144 +#define CMD_CREG 145 +#define CMD_FPUR 146 +#define CMD_XMMR 147 +#define CMD_DREG 148 +#define CMD_TREG 149 + +#define CMD_ABOUT 150 + +// The CMD_WS popup menuID's must be strictly "contiguous" and in-order +#define CMD_WS_1 160 +#define CMD_WS_2 161 +#define CMD_WS_4 162 +#define CMD_WS_8 163 +#define CMD_WS16 164 + +#define MI_FIRST_VIEWITEM CMD_PHYDMP +#define MI_FIRST_OPTITEM CMD_MODEB +#define CMD_IDX_HI CMD_WS16 +#define CMD_IDX_LO CMD_CONT + +#endif diff --git a/bochs/gui/win32.cc b/bochs/gui/win32.cc new file mode 100644 index 00000000..d1e211a4 --- /dev/null +++ b/bochs/gui/win32.cc @@ -0,0 +1,2388 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Much of this file was written by: +// David Ross +// dross@pobox.com + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "bochs.h" +#include "param_names.h" +#include "keymap.h" +#include "iodev/iodev.h" +#include "iodev/vga.h" +#if BX_WITH_WIN32 + +#include "zmouse.h" +#include "win32dialog.h" +#include "win32res.h" +#include "font/vga.bitmap.h" +// windows.h is included by bochs.h +#include +#include + +class bx_win32_gui_c : public bx_gui_c { +public: + bx_win32_gui_c (void) {} + DECLARE_GUI_VIRTUAL_METHODS(); + virtual void statusbar_setitem(int element, bx_bool active, bx_bool w=0); + virtual void get_capabilities(Bit16u *xres, Bit16u *yres, Bit16u *bpp); + virtual void set_tooltip(unsigned hbar_id, const char *tip); +#if BX_SHOW_IPS + virtual void show_ips(Bit32u ips_count); +#endif +}; + +// declare one instance of the gui object and call macro to insert the +// plugin code +static bx_win32_gui_c *theGui = NULL; +IMPLEMENT_GUI_PLUGIN_CODE(win32) + +#define LOG_THIS theGui-> + +#define EXIT_GUI_SHUTDOWN 1 +#define EXIT_GMH_FAILURE 2 +#define EXIT_FONT_BITMAP_ERROR 3 +#define EXIT_NORMAL 4 +#define EXIT_HEADER_BITMAP_ERROR 5 + +#ifndef TBSTYLE_FLAT +#define TBSTYLE_FLAT 0x0800 +#endif + +/* FIXME: Should we add a bochsrc option to control the font usage? */ +#define BX_USE_WINDOWS_FONTS 0 + +// Keyboard/mouse stuff +#define SCANCODE_BUFSIZE 20 +#define MOUSE_PRESSED 0x20000000 +#define HEADERBAR_CLICKED 0x08000000 +#define MOUSE_MOTION 0x22000000 +#define BX_SYSKEY (KF_UP|KF_REPEAT|KF_ALTDOWN) +void enq_key_event(Bit32u, Bit32u); +void enq_mouse_event(void); + +struct QueueEvent { + Bit32u key_event; + int mouse_x; + int mouse_y; + int mouse_z; + int mouse_button_state; +}; +QueueEvent* deq_key_event(void); + +static QueueEvent keyevents[SCANCODE_BUFSIZE]; +static unsigned head=0, tail=0; +static int mouse_button_state = 0; +static int ms_xdelta=0, ms_ydelta=0, ms_zdelta=0; +static int ms_lastx=0, ms_lasty=0; +static int ms_savedx=0, ms_savedy=0; +static BOOL mouseCaptureMode, mouseCaptureNew, mouseToggleReq; +static UINT_PTR workerThread = 0; +static DWORD workerThreadID = 0; +static int mouse_buttons = 3; + +// Graphics screen stuff +static unsigned x_tilesize = 0, y_tilesize = 0; +static BITMAPINFO* bitmap_info=(BITMAPINFO*)0; +static RGBQUAD* cmap_index; // indeces into system colormap +static HBITMAP MemoryBitmap = NULL; +static HDC MemoryDC = NULL; +static RECT updated_area; +static BOOL updated_area_valid = FALSE; +static HWND desktopWindow; +static RECT desktop; +static BOOL queryFullScreen = FALSE; +static int desktop_x, desktop_y; +static BOOL toolbarVisible, statusVisible; + +// Text mode screen stuff +static unsigned prev_cursor_x = 0; +static unsigned prev_cursor_y = 0; +static HBITMAP vgafont[256]; +static int xChar = 8, yChar = 16; +static unsigned int text_rows=25, text_cols=80; +static Bit8u text_pal_idx[16]; +#if !BX_USE_WINDOWS_FONTS +static Bit8u h_panning = 0, v_panning = 0; +static Bit16u line_compare = 1023; +#else +static HFONT hFont[3]; +static int FontId = 2; +#endif + +// Headerbar stuff +HWND hwndTB, hwndSB; +static unsigned bx_bitmap_entries; +static struct { + HBITMAP bmap; + unsigned xdim; + unsigned ydim; +} bx_bitmaps[BX_MAX_PIXMAPS]; + +static struct { + unsigned bmap_id; + void (*f)(void); + const char *tooltip; +} bx_headerbar_entry[BX_MAX_HEADERBAR_ENTRIES]; + +static int bx_headerbar_entries; +static unsigned bx_hb_separator; + +// Status Bar stuff +#if BX_SHOW_IPS +static BOOL ipsUpdate = FALSE; +static char ipsText[20]; +#define BX_SB_TEXT_ELEMENTS 2 +#else +#define BX_SB_TEXT_ELEMENTS 1 +#endif +#define SIZE_OF_SB_ELEMENT 40 +#define SIZE_OF_SB_MOUSE_MESSAGE 170 +#define SIZE_OF_SB_IPS_MESSAGE 90 +long SB_Edges[BX_MAX_STATUSITEMS+BX_SB_TEXT_ELEMENTS+1]; +char SB_Text[BX_MAX_STATUSITEMS][10]; +bx_bool SB_Active[BX_MAX_STATUSITEMS]; +bx_bool SB_ActiveW[BX_MAX_STATUSITEMS]; + +// Misc stuff +static unsigned dimension_x, dimension_y, current_bpp; +static unsigned stretched_x, stretched_y; +static unsigned stretch_factor=1; +static BOOL BxTextMode = TRUE; +static BOOL fix_size = FALSE; +#if BX_DEBUGGER && BX_DEBUGGER_GUI +static BOOL gui_debug = FALSE; +#endif +static HWND hotKeyReceiver = NULL; +static HWND saveParent = NULL; + +static char szMouseEnable[40]; +static char szMouseDisable[40]; +static char szMouseTooltip[64]; + +static const char szAppName[] = "Bochs for Windows"; +static const char szWindowName[] = "Bochs for Windows - Display"; + +typedef struct { + HINSTANCE hInstance; + + CRITICAL_SECTION drawCS; + CRITICAL_SECTION keyCS; + CRITICAL_SECTION mouseCS; + + int kill; // reason for terminateEmul(int) + BOOL UIinited; + HWND mainWnd; + HWND simWnd; +} sharedThreadInfo; + +sharedThreadInfo stInfo; + +LRESULT CALLBACK mainWndProc (HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK simWndProc (HWND, UINT, WPARAM, LPARAM); +VOID CDECL UIThread(PVOID); +void SetStatusText(int Num, const char *Text, bx_bool active, bx_bool w=0); +void terminateEmul(int); +void create_vga_font(void); +static unsigned char reverse_bitorder(unsigned char); +void DrawBitmap (HDC, HBITMAP, int, int, int, int, int, int, DWORD, unsigned char); +void DrawChar (HDC, unsigned char, int, int, unsigned char cColor, int, int); +void updateUpdated(int,int,int,int); +static void headerbar_click(int x); +#if BX_USE_WINDOWS_FONTS +void InitFont(void); +void DestroyFont(void); +#endif + + +Bit32u win32_to_bx_key[2][0x100] = +{ + { /* normal-keys */ + /* 0x00 - 0x0f */ + 0, + BX_KEY_ESC, + BX_KEY_1, + BX_KEY_2, + BX_KEY_3, + BX_KEY_4, + BX_KEY_5, + BX_KEY_6, + BX_KEY_7, + BX_KEY_8, + BX_KEY_9, + BX_KEY_0, + BX_KEY_MINUS, + BX_KEY_EQUALS, + BX_KEY_BACKSPACE, + BX_KEY_TAB, + /* 0x10 - 0x1f */ + BX_KEY_Q, + BX_KEY_W, + BX_KEY_E, + BX_KEY_R, + BX_KEY_T, + BX_KEY_Y, + BX_KEY_U, + BX_KEY_I, + BX_KEY_O, + BX_KEY_P, + BX_KEY_LEFT_BRACKET, + BX_KEY_RIGHT_BRACKET, + BX_KEY_ENTER, + BX_KEY_CTRL_L, + BX_KEY_A, + BX_KEY_S, + /* 0x20 - 0x2f */ + BX_KEY_D, + BX_KEY_F, + BX_KEY_G, + BX_KEY_H, + BX_KEY_J, + BX_KEY_K, + BX_KEY_L, + BX_KEY_SEMICOLON, + BX_KEY_SINGLE_QUOTE, + BX_KEY_GRAVE, + BX_KEY_SHIFT_L, + BX_KEY_BACKSLASH, + BX_KEY_Z, + BX_KEY_X, + BX_KEY_C, + BX_KEY_V, + /* 0x30 - 0x3f */ + BX_KEY_B, + BX_KEY_N, + BX_KEY_M, + BX_KEY_COMMA, + BX_KEY_PERIOD, + BX_KEY_SLASH, + BX_KEY_SHIFT_R, + BX_KEY_KP_MULTIPLY, + BX_KEY_ALT_L, + BX_KEY_SPACE, + BX_KEY_CAPS_LOCK, + BX_KEY_F1, + BX_KEY_F2, + BX_KEY_F3, + BX_KEY_F4, + BX_KEY_F5, + /* 0x40 - 0x4f */ + BX_KEY_F6, + BX_KEY_F7, + BX_KEY_F8, + BX_KEY_F9, + BX_KEY_F10, + BX_KEY_PAUSE, + BX_KEY_SCRL_LOCK, + BX_KEY_KP_HOME, + BX_KEY_KP_UP, + BX_KEY_KP_PAGE_UP, + BX_KEY_KP_SUBTRACT, + BX_KEY_KP_LEFT, + BX_KEY_KP_5, + BX_KEY_KP_RIGHT, + BX_KEY_KP_ADD, + BX_KEY_KP_END, + /* 0x50 - 0x5f */ + BX_KEY_KP_DOWN, + BX_KEY_KP_PAGE_DOWN, + BX_KEY_KP_INSERT, + BX_KEY_KP_DELETE, + 0, + 0, + BX_KEY_LEFT_BACKSLASH, + BX_KEY_F11, + BX_KEY_F12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + /* 0x60 - 0x6f */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + /* 0x70 - 0x7f */ + 0, /* Todo: "Katakana" key (ibm 133) for Japanese 106 keyboard */ + 0, + 0, + 0, /* Todo: "Ro" key (ibm 56) for Japanese 106 keyboard */ + 0, + 0, + 0, + 0, + 0, + 0, /* Todo: "convert" key (ibm 132) for Japanese 106 keyboard */ + 0, + 0, /* Todo: "non-convert" key (ibm 131) for Japanese 106 keyboard */ + 0, + 0, /* Todo: "Yen" key (ibm 14) for Japanese 106 keyboard */ + 0, + 0, + }, + { /* extended-keys */ + /* 0x00 - 0x0f */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + /* 0x10 - 0x1f */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + BX_KEY_KP_ENTER, + BX_KEY_CTRL_R, + 0, + 0, + /* 0x20 - 0x2f */ + 0, + BX_KEY_POWER_CALC, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + /* 0x30 - 0x3f */ + 0, + 0, + BX_KEY_INT_HOME, + 0, + 0, + BX_KEY_KP_DIVIDE, + 0, + BX_KEY_PRINT, + BX_KEY_ALT_R, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + /* 0x40 - 0x4f */ + 0, + 0, + 0, + 0, + 0, + BX_KEY_NUM_LOCK, + 0, + BX_KEY_HOME, + BX_KEY_UP, + BX_KEY_PAGE_UP, + 0, + BX_KEY_LEFT, + 0, + BX_KEY_RIGHT, + 0, + BX_KEY_END, + /* 0x50 - 0x5f */ + BX_KEY_DOWN, + BX_KEY_PAGE_DOWN, + BX_KEY_INSERT, + BX_KEY_DELETE, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + BX_KEY_WIN_L, + BX_KEY_WIN_R, + BX_KEY_MENU, + BX_KEY_POWER_POWER, + BX_KEY_POWER_SLEEP, + /* 0x60 - 0x6f */ + 0, + 0, + 0, + BX_KEY_POWER_WAKE, + 0, + BX_KEY_INT_SEARCH, + BX_KEY_INT_FAV, + 0, + BX_KEY_INT_STOP, + BX_KEY_INT_FORWARD, + BX_KEY_INT_BACK, + BX_KEY_POWER_MYCOMP, + BX_KEY_INT_MAIL, + 0, + 0, + 0, + } +}; + +/* Macro to convert WM_ button state to BX button state */ + +#if BX_SHOW_IPS +VOID CALLBACK MyTimer(HWND,UINT,UINT,DWORD); +#endif + +static void processMouseXY(int x, int y, int z, int windows_state, int implied_state_change) +{ + int bx_state; + int old_bx_state; + EnterCriticalSection(&stInfo.mouseCS); + bx_state=((windows_state & MK_LBUTTON) ? 1 : 0) + ((windows_state & MK_RBUTTON) ? 2 : 0) + + ((windows_state & MK_MBUTTON) ? 4 : 0); + old_bx_state=bx_state ^ implied_state_change; + if (old_bx_state!=mouse_button_state) + { + /* Make up for missing message */ + BX_INFO(("&&&missing mouse state change")); + EnterCriticalSection(&stInfo.keyCS); + enq_mouse_event(); + mouse_button_state=old_bx_state; + enq_key_event(mouse_button_state, MOUSE_PRESSED); + LeaveCriticalSection(&stInfo.keyCS); + } + ms_ydelta=ms_savedy-y; + ms_xdelta=x-ms_savedx; + ms_zdelta=z; + ms_lastx=x; + ms_lasty=y; + if (bx_state!=mouse_button_state) + { + EnterCriticalSection(&stInfo.keyCS); + enq_mouse_event(); + mouse_button_state=bx_state; + enq_key_event(mouse_button_state, MOUSE_PRESSED); + LeaveCriticalSection(&stInfo.keyCS); + } + LeaveCriticalSection(&stInfo.mouseCS); +} + +static void resetDelta() +{ + EnterCriticalSection(&stInfo.mouseCS); + ms_savedx=ms_lastx; + ms_savedy=ms_lasty; + ms_ydelta=ms_xdelta=ms_zdelta=0; + LeaveCriticalSection(&stInfo.mouseCS); +} + +static void cursorWarped() +{ + EnterCriticalSection(&stInfo.mouseCS); + EnterCriticalSection(&stInfo.keyCS); + enq_mouse_event(); + LeaveCriticalSection(&stInfo.keyCS); + ms_lastx=stretched_x/2; + ms_lasty=stretched_y/2; + ms_savedx=ms_lastx; + ms_savedy=ms_lasty; + LeaveCriticalSection(&stInfo.mouseCS); +} + +// GUI thread must be dead/done in order to call terminateEmul +void terminateEmul(int reason) +{ + // We know that Critical Sections were inited when x_tilesize has been set + // See bx_win32_gui_c::specific_init + if (x_tilesize != 0) { + DeleteCriticalSection (&stInfo.drawCS); + DeleteCriticalSection (&stInfo.keyCS); + DeleteCriticalSection (&stInfo.mouseCS); + } + x_tilesize = 0; + + if (MemoryDC) DeleteDC (MemoryDC); + if (MemoryBitmap) DeleteObject (MemoryBitmap); + + if (bitmap_info) delete[] (char*)bitmap_info; + + for (unsigned b=0; bget_param_enum(BXPN_SEL_CONFIG_INTERFACE)->get_selected(), "win32config"); + put("WGUI"); + + // prepare for possible fullscreen mode + desktopWindow = GetDesktopWindow(); + GetWindowRect(desktopWindow, &desktop); + desktop_x = desktop.right - desktop.left; + desktop_y = desktop.bottom - desktop.top; + hotKeyReceiver = stInfo.simWnd; + BX_INFO(("Desktop Window dimensions: %d x %d", desktop_x, desktop_y)); + + static RGBQUAD black_quad={ 0, 0, 0, 0}; + stInfo.kill = 0; + stInfo.UIinited = FALSE; + InitializeCriticalSection(&stInfo.drawCS); + InitializeCriticalSection(&stInfo.keyCS); + InitializeCriticalSection(&stInfo.mouseCS); + + x_tilesize = tilewidth; + y_tilesize = tileheight; + + bx_bitmap_entries = 0; + bx_headerbar_entries = 0; + bx_hb_separator = 0; + mouseCaptureMode = FALSE; + mouseCaptureNew = FALSE; + mouseToggleReq = FALSE; + + // parse win32 specific options + if (argc > 1) { + for (i = 1; i < argc; i++) { + BX_INFO(("option %d: %s", i, argv[i])); + if (!strcmp(argv[i], "legacyF12")) { + BX_PANIC(("The option 'legacyF12' is now deprecated - use 'mouse: toggle=f12' instead")); +#if BX_DEBUGGER && BX_DEBUGGER_GUI + } else if (!strcmp(argv[i], "gui_debug")) { + if (gui_ci) { + gui_debug = TRUE; + SIM->set_debug_gui(1); + } else { + BX_PANIC(("Config interface 'win32config' is required for gui debugger")); + } +#endif + } else { + BX_PANIC(("Unknown win32 option '%s'", argv[i])); + } + } + } + + mouse_buttons = GetSystemMetrics(SM_CMOUSEBUTTONS); + BX_INFO(("Number of Mouse Buttons = %d", mouse_buttons)); + if ((SIM->get_param_enum(BXPN_MOUSE_TOGGLE)->get() == BX_MOUSE_TOGGLE_CTRL_MB) && + (mouse_buttons == 2)) { + lstrcpy(szMouseEnable, "CTRL + Lbutton + Rbutton enables mouse "); + lstrcpy(szMouseDisable, "CTRL + Lbutton + Rbutton disables mouse"); + lstrcpy(szMouseTooltip, "Enable mouse capture\nUse CTRL + Lbutton + Rbutton to release"); + } else { + wsprintf(szMouseEnable, "%s enables mouse ", get_toggle_info()); + wsprintf(szMouseDisable, "%s disables mouse", get_toggle_info()); + wsprintf(szMouseTooltip, "Enable mouse capture\nUse %s to release", get_toggle_info()); + } + + stInfo.hInstance = GetModuleHandle(NULL); + + UNUSED(headerbar_y); + dimension_x = 640; + dimension_y = 480; + current_bpp = 8; + stretched_x = dimension_x; + stretched_y = dimension_y; + stretch_factor = 1; + + for(unsigned c=0; c<256; c++) vgafont[c] = NULL; + create_vga_font(); + + bitmap_info=(BITMAPINFO*)new char[sizeof(BITMAPINFOHEADER)+ + 259*sizeof(RGBQUAD)]; // 256 + 3 entries for 16 bpp mode + bitmap_info->bmiHeader.biSize=sizeof(BITMAPINFOHEADER); + bitmap_info->bmiHeader.biWidth=x_tilesize; + // Height is negative for top-down bitmap + bitmap_info->bmiHeader.biHeight= -(LONG)y_tilesize; + bitmap_info->bmiHeader.biPlanes=1; + bitmap_info->bmiHeader.biBitCount=8; + bitmap_info->bmiHeader.biCompression=BI_RGB; + bitmap_info->bmiHeader.biSizeImage=x_tilesize*y_tilesize*4; + // I think these next two figures don't matter; saying 45 pixels/centimeter + bitmap_info->bmiHeader.biXPelsPerMeter=4500; + bitmap_info->bmiHeader.biYPelsPerMeter=4500; + bitmap_info->bmiHeader.biClrUsed=256; + bitmap_info->bmiHeader.biClrImportant=0; + cmap_index=bitmap_info->bmiColors; + // start out with all color map indeces pointing to Black + cmap_index[0] = black_quad; + for (i=1; i<259; i++) { + cmap_index[i] = cmap_index[0]; + } + + if (stInfo.hInstance) + workerThread = _beginthread (UIThread, 0, NULL); + else + terminateEmul(EXIT_GMH_FAILURE); + + // Wait for a window before continuing + if ((stInfo.kill == 0) && (FindWindow(szAppName, NULL) == NULL)) + Sleep(500); + + // Now set this thread's priority to below normal because this is where + // the emulated CPU runs, and it hogs the real CPU + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL); + + if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) + BX_INFO(("private_colormap option ignored.")); + + // load keymap tables + if (SIM->get_param_bool(BXPN_KBD_USEMAPPING)->get()) { + bx_keymap.loadKeymap(NULL); // I have no function to convert X windows symbols + } + + if (gui_ci) { + dialog_caps = BX_GUI_DLG_ALL; + } +} + +void resize_main_window() +{ + RECT R; + int toolbar_y = 0; + int statusbar_y = 0; + unsigned long mainStyle; + + if (IsWindowVisible(hwndTB)) { + toolbarVisible = TRUE; + GetWindowRect(hwndTB, &R); + toolbar_y = R.bottom - R.top; + } + + if (IsWindowVisible(hwndSB)) { + statusVisible = TRUE; + GetWindowRect(hwndSB, &R); + statusbar_y = R.bottom - R.top; + } + + // stretched_x and stretched_y were set in dimension_update() + // if we need to do any additional resizing, do it now + if ((desktop_y > 0) && (stretched_y >= (unsigned)desktop_y)) { + if (!queryFullScreen) { + MessageBox(NULL, + "Going into fullscreen mode -- Alt-Enter to revert", + "Going fullscreen", + MB_APPLMODAL); + queryFullScreen = TRUE; + } + // hide toolbar and status bars to get some additional space + ShowWindow(hwndTB, SW_HIDE); + ShowWindow(hwndSB, SW_HIDE); + // hide title bar + mainStyle = GetWindowLong(stInfo.mainWnd, GWL_STYLE); + mainStyle &= ~(WS_CAPTION | WS_BORDER); + SetWindowLong(stInfo.mainWnd, GWL_STYLE, mainStyle); + // maybe need to adjust stInfo.simWnd here also? + saveParent = SetParent(stInfo.mainWnd, desktopWindow); + if (saveParent) { + BX_DEBUG(("Saved parent window")); + SetWindowPos(stInfo.mainWnd, HWND_TOPMOST, desktop.left, desktop.top, + desktop.right, desktop.bottom, SWP_SHOWWINDOW); + } + } else { + if (saveParent) { + BX_DEBUG(("Restoring parent window")); + SetParent(stInfo.mainWnd, saveParent); + saveParent = NULL; + } + // put back the title bar, border, etc... + mainStyle = GetWindowLong(stInfo.mainWnd, GWL_STYLE); + mainStyle |= WS_CAPTION | WS_BORDER; + SetWindowLong(stInfo.mainWnd, GWL_STYLE, mainStyle); + if (toolbarVisible) ShowWindow(hwndTB, SW_SHOW); + if (statusVisible) ShowWindow(hwndSB, SW_SHOW); + SetRect(&R, 0, 0, stretched_x, stretched_y); + DWORD style = GetWindowLong(stInfo.simWnd, GWL_STYLE); + DWORD exstyle = GetWindowLong(stInfo.simWnd, GWL_EXSTYLE); + AdjustWindowRectEx(&R, style, FALSE, exstyle); + style = GetWindowLong(stInfo.mainWnd, GWL_STYLE); + AdjustWindowRect(&R, style, FALSE); + SetWindowPos(stInfo.mainWnd, HWND_TOP, 0, 0, R.right - R.left, + R.bottom - R.top + toolbar_y + statusbar_y, + SWP_NOMOVE | SWP_NOZORDER); + } + fix_size = FALSE; +} + +// This thread controls the GUI window. +VOID CDECL UIThread(PVOID pvoid) +{ + MSG msg; + HDC hdc; + WNDCLASS wndclass; + RECT wndRect; + + workerThreadID = GetCurrentThreadId(); + + GetClassInfo(NULL, WC_DIALOG, &wndclass); + wndclass.style = CS_HREDRAW | CS_VREDRAW; + wndclass.lpfnWndProc = mainWndProc; + wndclass.cbClsExtra = 0; + wndclass.cbWndExtra = 0; + wndclass.hInstance = stInfo.hInstance; + wndclass.hIcon = LoadIcon (stInfo.hInstance, MAKEINTRESOURCE(ICON_BOCHS)); + wndclass.lpszMenuName = NULL; + wndclass.lpszClassName = szAppName; + + RegisterClass (&wndclass); + + wndclass.style = CS_HREDRAW | CS_VREDRAW; + wndclass.lpfnWndProc = simWndProc; + wndclass.cbClsExtra = 0; + wndclass.cbWndExtra = 0; + wndclass.hInstance = stInfo.hInstance; + wndclass.hIcon = NULL; + wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); + wndclass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH); + wndclass.lpszMenuName = NULL; + wndclass.lpszClassName = "SIMWINDOW"; + + RegisterClass (&wndclass); + + SetRect(&wndRect, 0, 0, stretched_x, stretched_y); + DWORD sim_style = WS_CHILD; + DWORD sim_exstyle = WS_EX_CLIENTEDGE; + AdjustWindowRectEx(&wndRect, sim_style, FALSE, sim_exstyle); + DWORD main_style = WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX; + AdjustWindowRect(&wndRect, main_style, FALSE); + stInfo.mainWnd = CreateWindow (szAppName, + szWindowName, + main_style, + CW_USEDEFAULT, + CW_USEDEFAULT, + wndRect.right - wndRect.left, + wndRect.bottom - wndRect.top, + NULL, + NULL, + stInfo.hInstance, + NULL); + + if (stInfo.mainWnd) { + + InitCommonControls(); + hwndTB = CreateWindowEx(0, TOOLBARCLASSNAME, (LPSTR) NULL, + WS_CHILD | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT, 0, 0, 0, 0, stInfo.mainWnd, + (HMENU) 100, stInfo.hInstance, NULL); + SendMessage(hwndTB, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof(TBBUTTON), 0); + SendMessage(hwndTB, TB_SETBITMAPSIZE, 0, (LPARAM)MAKELONG(32, 32)); + + hwndSB = CreateStatusWindow(WS_CHILD | WS_VISIBLE, "", + stInfo.mainWnd, 0x7712); + if (hwndSB) { + int elements; + SB_Edges[0] = SIZE_OF_SB_MOUSE_MESSAGE + SIZE_OF_SB_ELEMENT; +#if BX_SHOW_IPS + SB_Edges[1] = SB_Edges[0] + SIZE_OF_SB_IPS_MESSAGE; +#endif + for (elements = BX_SB_TEXT_ELEMENTS; elements < (BX_MAX_STATUSITEMS+BX_SB_TEXT_ELEMENTS); elements++) + SB_Edges[elements] = SB_Edges[elements-1] + SIZE_OF_SB_ELEMENT; + SB_Edges[elements] = -1; + SendMessage(hwndSB, SB_SETPARTS, BX_MAX_STATUSITEMS+BX_SB_TEXT_ELEMENTS+1, (LPARAM)&SB_Edges); + } + SetStatusText(0, szMouseEnable, TRUE); + + stInfo.simWnd = CreateWindowEx(sim_exstyle, + "SIMWINDOW", + "", + sim_style, + 0, + 0, + 0, + 0, + stInfo.mainWnd, + NULL, + stInfo.hInstance, + NULL); + + /* needed for the Japanese versions of Windows */ + if (stInfo.simWnd) { + HMODULE hm; + hm = GetModuleHandle("USER32"); + if (hm) { + BOOL (WINAPI *enableime)(HWND, BOOL); + enableime = (BOOL (WINAPI *)(HWND, BOOL))GetProcAddress(hm, "WINNLSEnableIME"); + if (enableime) { + enableime(stInfo.simWnd, FALSE); + BX_INFO(("IME disabled")); + } + } + } + + ShowWindow(stInfo.simWnd, SW_SHOW); + SetFocus(stInfo.simWnd); + + ShowCursor(!mouseCaptureMode); + POINT pt = { 0, 0 }; + ClientToScreen(stInfo.simWnd, &pt); + SetCursorPos(pt.x + stretched_x/2, pt.y + stretched_y/2); + cursorWarped(); + + hdc = GetDC(stInfo.simWnd); + MemoryBitmap = CreateCompatibleBitmap(hdc, BX_MAX_XRES, BX_MAX_YRES); + MemoryDC = CreateCompatibleDC(hdc); + ReleaseDC(stInfo.simWnd, hdc); + + if (MemoryBitmap && MemoryDC) { + resize_main_window(); + ShowWindow(stInfo.mainWnd, SW_SHOW); +#if BX_DEBUGGER && BX_DEBUGGER_GUI + if (gui_debug) { + InitDebugDialog(); + } +#endif +#if BX_SHOW_IPS + UINT idTimer = 2; + SetTimer(stInfo.simWnd, idTimer, 1000, (TIMERPROC)MyTimer); +#endif + stInfo.UIinited = TRUE; + + bx_gui->clear_screen(); + + while (GetMessage (&msg, NULL, 0, 0)) { + TranslateMessage (&msg); + DispatchMessage (&msg); + } + } + } + + stInfo.kill = EXIT_GUI_SHUTDOWN; + + _endthread(); +} + +void SetStatusText(int Num, const char *Text, bx_bool active, bx_bool w) +{ + char StatText[MAX_PATH]; + + if ((Num < BX_SB_TEXT_ELEMENTS) || (Num > (BX_MAX_STATUSITEMS+BX_SB_TEXT_ELEMENTS))) { + StatText[0] = ' '; // Add space to text in 1st and last items + lstrcpy(StatText+1, Text); + SendMessage(hwndSB, SB_SETTEXT, Num, (LPARAM)StatText); + } else { + StatText[0] = 9; // Center the rest + lstrcpy(StatText+1, Text); + lstrcpy(SB_Text[Num-BX_SB_TEXT_ELEMENTS], StatText); + SB_Active[Num-BX_SB_TEXT_ELEMENTS] = active; + SB_ActiveW[Num-BX_SB_TEXT_ELEMENTS] = w; + SendMessage(hwndSB, SB_SETTEXT, Num | SBT_OWNERDRAW, (LPARAM)SB_Text[Num-BX_SB_TEXT_ELEMENTS]); + } + UpdateWindow(hwndSB); +} + +void bx_win32_gui_c::statusbar_setitem(int element, bx_bool active, bx_bool w) +{ + if (element < 0) { + for (int i = 0; i < (int)statusitem_count; i++) { + SetStatusText(i+BX_SB_TEXT_ELEMENTS, statusitem_text[i], active, w); + } + } else if (element < (int)statusitem_count) { + SetStatusText(element+BX_SB_TEXT_ELEMENTS, statusitem_text[element], active, w); + } +} + +LRESULT CALLBACK mainWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) +{ + DRAWITEMSTRUCT *lpdis; + char *sbtext; + NMHDR *lpnmh; + TOOLTIPTEXT *lpttt; + int idTT, hbar_id; + + switch (iMsg) { + case WM_CREATE: + SetStatusText(0, szMouseEnable, TRUE); + return 0; + + case WM_COMMAND: + if (LOWORD(wParam) >= 101) { + EnterCriticalSection(&stInfo.keyCS); + enq_key_event(LOWORD(wParam)-101, HEADERBAR_CLICKED); + LeaveCriticalSection(&stInfo.keyCS); + } + break; + + case WM_SETFOCUS: + SetFocus(stInfo.simWnd); + return 0; + + case WM_CLOSE: + SendMessage(stInfo.simWnd, WM_CLOSE, 0, 0); + break; + + case WM_DESTROY: + PostQuitMessage (0); + return 0; + + case WM_SIZE: + { + int x, y; + SendMessage(hwndTB, TB_AUTOSIZE, 0, 0); + SendMessage(hwndSB, WM_SIZE, 0, 0); + // now fit simWindow to mainWindow + int rect_data[] = { 1, 0, IsWindowVisible(hwndTB), + 100, IsWindowVisible(hwndSB), 0x7712, 0, 0 }; + RECT R; + GetEffectiveClientRect(hwnd, &R, rect_data); + x = R.right - R.left; + y = R.bottom - R.top; + MoveWindow(stInfo.simWnd, R.left, R.top, x, y, TRUE); + GetClientRect(stInfo.simWnd, &R); + x = R.right - R.left; + y = R.bottom - R.top; + if ((x != (int)stretched_x) || (y != (int)stretched_y)) { + BX_ERROR(("Sim client size(%d, %d) != stretched size(%d, %d)!", + x, y, stretched_x, stretched_y)); + if (!saveParent) fix_size = TRUE; // no fixing if fullscreen + } + } + break; + + case WM_DRAWITEM: + lpdis = (DRAWITEMSTRUCT *)lParam; + if (lpdis->hwndItem == hwndSB) { + sbtext = (char *)lpdis->itemData; + if (SB_Active[lpdis->itemID-BX_SB_TEXT_ELEMENTS]) { + if (SB_ActiveW[lpdis->itemID-BX_SB_TEXT_ELEMENTS]) + SetBkColor(lpdis->hDC, 0x000040FF); + else + SetBkColor(lpdis->hDC, 0x0000FF00); + } else { + SetBkMode(lpdis->hDC, TRANSPARENT); + SetTextColor(lpdis->hDC, 0x00808080); + } + DrawText(lpdis->hDC, sbtext+1, lstrlen(sbtext)-1, &lpdis->rcItem, DT_SINGLELINE | DT_CENTER | DT_VCENTER); + return TRUE; + } + break; + + case WM_NOTIFY: + lpnmh = (LPNMHDR)lParam; + if (lpnmh->code == TTN_NEEDTEXT) { + lpttt = (LPTOOLTIPTEXT)lParam; + idTT = (int)wParam; + hbar_id = idTT - 101; + if (SendMessage(hwndTB, TB_GETSTATE, idTT, 0) && bx_headerbar_entry[hbar_id].tooltip != NULL) { + lstrcpy(lpttt->szText, bx_headerbar_entry[hbar_id].tooltip); + } + } + return FALSE; + break; + + } + return DefWindowProc(hwnd, iMsg, wParam, lParam); +} + +void SetMouseCapture() +{ + POINT pt = {0, 0}; + + if (mouseToggleReq) { + mouseCaptureMode = mouseCaptureNew; + mouseToggleReq = FALSE; + } else { + SIM->get_param_bool(BXPN_MOUSE_ENABLED)->set(mouseCaptureMode); + } + ShowCursor(!mouseCaptureMode); + ShowCursor(!mouseCaptureMode); // somehow one didn't do the trick (win98) + ClientToScreen(stInfo.simWnd, &pt); + SetCursorPos(pt.x + stretched_x/2, pt.y + stretched_y/2); + cursorWarped(); + if (mouseCaptureMode) + SetStatusText(0, szMouseDisable, TRUE); + else + SetStatusText(0, szMouseEnable, TRUE); +} + +LRESULT CALLBACK simWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) +{ + HDC hdc, hdcMem; + PAINTSTRUCT ps; + POINT pt; + bx_bool mouse_toggle = 0; + static BOOL mouseModeChange = FALSE; + + switch (iMsg) { + + case WM_CREATE: +#if BX_USE_WINDOWS_FONTS + InitFont(); +#endif + SetTimer (hwnd, 1, 330, NULL); + return 0; + + case WM_TIMER: + if (mouseToggleReq && (GetActiveWindow() == stInfo.mainWnd)) { + SetMouseCapture(); + } + // If mouse escaped, bring it back + if (mouseCaptureMode) + { + pt.x = 0; + pt.y = 0; + ClientToScreen(hwnd, &pt); + SetCursorPos(pt.x + stretched_x/2, pt.y + stretched_y/2); + cursorWarped(); + } + if (fix_size) { + resize_main_window(); + } + return 0; + + case WM_PAINT: + EnterCriticalSection(&stInfo.drawCS); + hdc = BeginPaint (hwnd, &ps); + + hdcMem = CreateCompatibleDC (hdc); + SelectObject (hdcMem, MemoryBitmap); + + if (stretch_factor == 1) { + BitBlt(hdc, ps.rcPaint.left, ps.rcPaint.top, + ps.rcPaint.right - ps.rcPaint.left + 1, + ps.rcPaint.bottom - ps.rcPaint.top + 1, hdcMem, + ps.rcPaint.left, ps.rcPaint.top, SRCCOPY); + } else { + StretchBlt(hdc, ps.rcPaint.left, ps.rcPaint.top, + ps.rcPaint.right - ps.rcPaint.left + 1, + ps.rcPaint.bottom - ps.rcPaint.top + 1, hdcMem, + ps.rcPaint.left/stretch_factor, ps.rcPaint.top, + (ps.rcPaint.right - ps.rcPaint.left+1)/stretch_factor, + (ps.rcPaint.bottom - ps.rcPaint.top+1), SRCCOPY); + } + DeleteDC (hdcMem); + EndPaint (hwnd, &ps); + LeaveCriticalSection(&stInfo.drawCS); + return 0; + + case WM_MOUSEMOVE: + if (!mouseModeChange) { + processMouseXY(LOWORD(lParam), HIWORD(lParam), 0, wParam, 0); + } + return 0; + + case WM_MOUSEWHEEL: + if (!mouseModeChange) { + // WM_MOUSEWHEEL returns x and y relative to the main screen. + // WM_MOUSEMOVE below returns x and y relative to the current view. + POINT pt; + pt.x = LOWORD(lParam); + pt.y = HIWORD(lParam); + ScreenToClient(stInfo.simWnd, &pt); + processMouseXY(pt.x, pt.y, (Bit16s) HIWORD(wParam) / 120, LOWORD(wParam), 0); + } + return 0; + + case WM_LBUTTONDOWN: + case WM_LBUTTONDBLCLK: + case WM_LBUTTONUP: + if (mouse_buttons == 2) { + if ((wParam & MK_LBUTTON) == MK_LBUTTON) { + if (bx_gui->mouse_toggle_check(BX_MT_LBUTTON, 1)) { + mouseCaptureMode = !mouseCaptureMode; + SetMouseCapture(); + mouseModeChange = TRUE; + } + } else if (mouseModeChange && (iMsg == WM_LBUTTONUP)) { + bx_gui->mouse_toggle_check(BX_MT_LBUTTON, 0); + mouseModeChange = FALSE; + } else { + processMouseXY(LOWORD(lParam), HIWORD(lParam), 0, wParam, 1); + } + return 0; + } + processMouseXY(LOWORD(lParam), HIWORD(lParam), 0, wParam, 1); + return 0; + + case WM_MBUTTONDOWN: + case WM_MBUTTONDBLCLK: + case WM_MBUTTONUP: + if ((wParam & MK_MBUTTON) == MK_MBUTTON) { + if (bx_gui->mouse_toggle_check(BX_MT_MBUTTON, 1)) { + mouseCaptureMode = !mouseCaptureMode; + SetMouseCapture(); + mouseModeChange = TRUE; + } + } else if (mouseModeChange && (iMsg == WM_MBUTTONUP)) { + bx_gui->mouse_toggle_check(BX_MT_MBUTTON, 0); + mouseModeChange = FALSE; + } else { + processMouseXY(LOWORD(lParam), HIWORD(lParam), 0, wParam, 4); + } + return 0; + + case WM_RBUTTONDOWN: + case WM_RBUTTONDBLCLK: + case WM_RBUTTONUP: + if (mouse_buttons == 2) { + if ((wParam & MK_RBUTTON) == MK_RBUTTON) { + if (bx_gui->mouse_toggle_check(BX_MT_RBUTTON, 1)) { + mouseCaptureMode = !mouseCaptureMode; + SetMouseCapture(); + mouseModeChange = TRUE; + } + } else if (mouseModeChange && (iMsg == WM_RBUTTONUP)) { + bx_gui->mouse_toggle_check(BX_MT_RBUTTON, 0); + mouseModeChange = FALSE; + } else { + processMouseXY(LOWORD(lParam), HIWORD(lParam), 0, wParam, 2); + } + return 0; + } + processMouseXY(LOWORD(lParam), HIWORD(lParam), 0, wParam, 2); + return 0; + + case WM_CLOSE: + return DefWindowProc (hwnd, iMsg, wParam, lParam); + + case WM_DESTROY: + KillTimer (hwnd, 1); + stInfo.UIinited = FALSE; +#if BX_USE_WINDOWS_FONTS + DestroyFont(); +#endif + return 0; + + case WM_KEYDOWN: + case WM_SYSKEYDOWN: + if (wParam == VK_CONTROL) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_CTRL, 1); + } else if (wParam == VK_MENU) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_ALT, 1); + } else if (wParam == VK_F10) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_F10, 1); + } else if (wParam == VK_F12) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_F12, 1); + } + if (mouse_toggle) { + mouseCaptureMode = !mouseCaptureMode; + SetMouseCapture(); + return 0; + } + EnterCriticalSection(&stInfo.keyCS); + enq_key_event(HIWORD (lParam) & 0x01FF, BX_KEY_PRESSED); + LeaveCriticalSection(&stInfo.keyCS); + return 0; + + case WM_KEYUP: + case WM_SYSKEYUP: + // check if it's keyup, alt key, non-repeat + // see http://msdn2.microsoft.com/en-us/library/ms646267.aspx + if ((wParam == VK_RETURN) && + ((HIWORD(lParam) & BX_SYSKEY) == (KF_ALTDOWN | KF_UP))) { + if (!saveParent) { + BX_INFO(("entering fullscreen mode")); + theGui->dimension_update(desktop_x, desktop_y, + 0, 0, current_bpp); + } else { + BX_INFO(("leaving fullscreen mode")); + theGui->dimension_update(dimension_x, desktop_y - 1, + 0, 0, current_bpp); + } + } else { + if (wParam == VK_CONTROL) { + bx_gui->mouse_toggle_check(BX_MT_KEY_CTRL, 0); + } else if (wParam == VK_MENU) { + bx_gui->mouse_toggle_check(BX_MT_KEY_ALT, 0); + } else if (wParam == VK_F10) { + bx_gui->mouse_toggle_check(BX_MT_KEY_F10, 0); + } else if (wParam == VK_F12) { + bx_gui->mouse_toggle_check(BX_MT_KEY_F12, 0); + } + EnterCriticalSection(&stInfo.keyCS); + enq_key_event(HIWORD (lParam) & 0x01FF, BX_KEY_RELEASED); + LeaveCriticalSection(&stInfo.keyCS); + } + return 0; + + case WM_SYSCHAR: + // check if it's keydown, alt key, non-repeat + // see http://msdn2.microsoft.com/en-us/library/ms646267.aspx + if (wParam == VK_RETURN) { + if ((HIWORD(lParam) & BX_SYSKEY) == KF_ALTDOWN) { + if (!saveParent) { + BX_INFO(("entering fullscreen mode")); + theGui->dimension_update(desktop_x, desktop_y, + 0, 0, current_bpp); + } else { + BX_INFO(("leaving fullscreen mode")); + theGui->dimension_update(dimension_x, desktop_y - 1, + 0, 0, current_bpp); + } + } + } + case WM_CHAR: + case WM_DEADCHAR: + case WM_SYSDEADCHAR: + return 0; + } + return DefWindowProc (hwnd, iMsg, wParam, lParam); +} + + +void enq_key_event(Bit32u key, Bit32u press_release) +{ + static BOOL alt_pressed_l = FALSE; + static BOOL alt_pressed_r = FALSE; + static BOOL ctrl_pressed_l = FALSE; + static BOOL ctrl_pressed_r = FALSE; + static BOOL shift_pressed_l = FALSE; + static BOOL shift_pressed_r = FALSE; + + // Windows generates multiple keypresses when holding down these keys + if (press_release == BX_KEY_PRESSED) { + switch (key) { + case 0x1d: + if (ctrl_pressed_l) + return; + ctrl_pressed_l = TRUE; + break; + case 0x2a: + if (shift_pressed_l) + return; + shift_pressed_l = TRUE; + break; + case 0x36: + if (shift_pressed_r) + return; + shift_pressed_r = TRUE; + break; + case 0x38: + if (alt_pressed_l) + return; + alt_pressed_l = TRUE; + break; + case 0x011d: + if (ctrl_pressed_r) + return; + ctrl_pressed_r = TRUE; + break; + case 0x0138: + if (alt_pressed_r) + return; + // This makes the "AltGr" key on European keyboards work + if (ctrl_pressed_l) { + enq_key_event(0x1d, BX_KEY_RELEASED); + } + alt_pressed_r = TRUE; + break; + } + } else { + switch (key) { + case 0x1d: + if (!ctrl_pressed_l) + return; + ctrl_pressed_l = FALSE; + break; + case 0x2a: + shift_pressed_l = FALSE; + break; + case 0x36: + shift_pressed_r = FALSE; + break; + case 0x38: + alt_pressed_l = FALSE; + break; + case 0x011d: + ctrl_pressed_r = FALSE; + break; + case 0x0138: + alt_pressed_r = FALSE; + break; + } + } + if (((tail+1) % SCANCODE_BUFSIZE) == head) { + BX_ERROR(("enq_scancode: buffer full")); + return; + } + keyevents[tail].key_event = key | press_release; + tail = (tail + 1) % SCANCODE_BUFSIZE; +} + +void enq_mouse_event(void) +{ + EnterCriticalSection(&stInfo.mouseCS); + if (ms_xdelta || ms_ydelta || ms_zdelta) + { + if (((tail+1) % SCANCODE_BUFSIZE) == head) { + LeaveCriticalSection(&stInfo.mouseCS); + BX_ERROR(("enq_scancode: buffer full")); + return; + } + QueueEvent& current=keyevents[tail]; + current.key_event=MOUSE_MOTION; + current.mouse_x=ms_xdelta; + current.mouse_y=ms_ydelta; + current.mouse_z=ms_zdelta; + current.mouse_button_state=mouse_button_state; + resetDelta(); + tail = (tail + 1) % SCANCODE_BUFSIZE; + } + LeaveCriticalSection(&stInfo.mouseCS); +} + +QueueEvent* deq_key_event(void) +{ + QueueEvent* key; + + if (head == tail) { + BX_ERROR(("deq_scancode: buffer empty")); + return((QueueEvent*)0); + } + key = &keyevents[head]; + head = (head + 1) % SCANCODE_BUFSIZE; + + return(key); +} + + +// ::HANDLE_EVENTS() +// +// Called periodically (vga_update_interval in .bochsrc) so the +// the gui code can poll for keyboard, mouse, and other +// relevant events. + +void bx_win32_gui_c::handle_events(void) +{ + Bit32u key; + Bit32u key_event; + + if (stInfo.kill) terminateEmul(stInfo.kill); + + // Handle mouse moves + enq_mouse_event(); + + // Handle keyboard and mouse clicks + EnterCriticalSection(&stInfo.keyCS); + while (head != tail) { + QueueEvent* queue_event=deq_key_event(); + if (! queue_event) + break; + key = queue_event->key_event; + if (key==MOUSE_MOTION) + { + DEV_mouse_motion_ext(queue_event->mouse_x, + queue_event->mouse_y, queue_event->mouse_z, queue_event->mouse_button_state); + } + // Check for mouse buttons first + else if (key & MOUSE_PRESSED) { + DEV_mouse_motion_ext(0, 0, 0, LOWORD(key)); + } + else if (key & HEADERBAR_CLICKED) { + headerbar_click(LOWORD(key)); + } + else { + key_event = win32_to_bx_key[(key & 0x100) ? 1 : 0][key & 0xff]; + if (key & BX_KEY_RELEASED) key_event |= BX_KEY_RELEASED; + DEV_kbd_gen_scancode(key_event); + } + } + LeaveCriticalSection(&stInfo.keyCS); +#if BX_SHOW_IPS + if (ipsUpdate) { + SetStatusText(1, ipsText, 1); + ipsUpdate = FALSE; + } +#endif +} + + +// ::FLUSH() +// +// Called periodically, requesting that the gui code flush all pending +// screen update requests. + +void bx_win32_gui_c::flush(void) +{ + EnterCriticalSection(&stInfo.drawCS); + if (updated_area_valid) { + // slight bugfix + updated_area.right++; + updated_area.bottom++; + InvalidateRect(stInfo.simWnd, &updated_area, FALSE); + updated_area_valid = FALSE; + } + LeaveCriticalSection(&stInfo.drawCS); +} + +// ::CLEAR_SCREEN() +// +// Called to request that the VGA region is cleared. Don't +// clear the area that defines the headerbar. + +void bx_win32_gui_c::clear_screen(void) +{ + HGDIOBJ oldObj; + + if (!stInfo.UIinited) return; + + EnterCriticalSection(&stInfo.drawCS); + + oldObj = SelectObject(MemoryDC, MemoryBitmap); + PatBlt(MemoryDC, 0, 0, stretched_x, stretched_y, BLACKNESS); + SelectObject(MemoryDC, oldObj); + + updateUpdated(0, 0, dimension_x-1, dimension_y-1); + + LeaveCriticalSection(&stInfo.drawCS); +} + + +// ::TEXT_UPDATE() +// +// Called in a VGA text mode, to update the screen with +// new content. +// +// old_text: array of character/attributes making up the contents +// of the screen from the last call. See below +// new_text: array of character/attributes making up the current +// contents, which should now be displayed. See below +// +// format of old_text & new_text: each is tm_info.line_offset*text_rows +// bytes long. Each character consists of 2 bytes. The first by is +// the character value, the second is the attribute byte. +// +// cursor_x: new x location of cursor +// cursor_y: new y location of cursor +// tm_info: this structure contains information for additional +// features in text mode (cursor shape, line offset,...) + +void bx_win32_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, + unsigned long cursor_x, unsigned long cursor_y, + bx_vga_tminfo_t tm_info) +{ + HDC hdc; + unsigned char data[64]; + Bit8u *old_line, *new_line; + Bit8u cAttr, cChar; + unsigned int curs, hchars, i, offset, rows, x, y, xc, yc; + BOOL forceUpdate = FALSE, blink_state, blink_mode; +#if !BX_USE_WINDOWS_FONTS + Bit8u *text_base; + Bit8u cfwidth, cfheight, cfheight2, font_col, font_row, font_row2; + Bit8u split_textrow, split_fontrows; + unsigned int yc2, cs_y; + BOOL split_screen; +#endif + + if (!stInfo.UIinited) return; + + EnterCriticalSection(&stInfo.drawCS); + + blink_mode = (tm_info.blink_flags & BX_TEXT_BLINK_MODE) > 0; + blink_state = (tm_info.blink_flags & BX_TEXT_BLINK_STATE) > 0; + if (blink_mode) { + if (tm_info.blink_flags & BX_TEXT_BLINK_TOGGLE) + forceUpdate = 1; + } + if (charmap_updated) { + for (unsigned c = 0; c<256; c++) { + if (char_changed[c]) { + memset(data, 0, sizeof(data)); + BOOL gfxchar = tm_info.line_graphics && ((c & 0xE0) == 0xC0); + for (i=0; i<(unsigned)yChar; i++) { + data[i*2] = vga_charmap[c*32+i]; + if (gfxchar) { + data[i*2+1] = (data[i*2] << 7); + } + } + SetBitmapBits(vgafont[c], 64, data); + char_changed[c] = 0; + } + } + forceUpdate = TRUE; + charmap_updated = 0; + } + for (i=0; i<16; i++) { + text_pal_idx[i] = DEV_vga_get_actl_pal_idx(i); + } + + hdc = GetDC(stInfo.simWnd); + +#if !BX_USE_WINDOWS_FONTS + if((tm_info.h_panning != h_panning) || (tm_info.v_panning != v_panning)) { + forceUpdate = 1; + h_panning = tm_info.h_panning; + v_panning = tm_info.v_panning; + } + if(tm_info.line_compare != line_compare) { + forceUpdate = 1; + line_compare = tm_info.line_compare; + } +#endif + + // first invalidate character at previous and new cursor location + if((prev_cursor_y < text_rows) && (prev_cursor_x < text_cols)) { + curs = prev_cursor_y * tm_info.line_offset + prev_cursor_x * 2; + old_text[curs] = ~new_text[curs]; + } + if((tm_info.cs_start <= tm_info.cs_end) && (tm_info.cs_start < yChar) && + (cursor_y < text_rows) && (cursor_x < text_cols)) { + curs = cursor_y * tm_info.line_offset + cursor_x * 2; + old_text[curs] = ~new_text[curs]; + } else { + curs = 0xffff; + } + +#if !BX_USE_WINDOWS_FONTS + rows = text_rows; + if (v_panning) rows++; + y = 0; + cs_y = 0; + text_base = new_text - tm_info.start_address; + if (line_compare < dimension_y) { + split_textrow = (line_compare + v_panning) / yChar; + split_fontrows = ((line_compare + v_panning) % yChar) + 1; + } else { + split_textrow = rows + 1; + split_fontrows = 0; + } + split_screen = 0; + do { + hchars = text_cols; + if (h_panning) hchars++; + if (split_screen) { + yc = line_compare + cs_y * yChar + 1; + font_row = 0; + if (rows == 1) { + cfheight = (dimension_y - line_compare - 1) % yChar; + if (cfheight == 0) cfheight = yChar; + } else { + cfheight = yChar; + } + } else if (v_panning) { + if (y == 0) { + yc = 0; + font_row = v_panning; + cfheight = yChar - v_panning; + } else { + yc = y * yChar - v_panning; + font_row = 0; + if (rows == 1) { + cfheight = v_panning; + } else { + cfheight = yChar; + } + } + } else { + yc = y * yChar; + font_row = 0; + cfheight = yChar; + } + if (!split_screen && (y == split_textrow)) { + if (split_fontrows < cfheight) cfheight = split_fontrows; + } + new_line = new_text; + old_line = old_text; + x = 0; + offset = cs_y * tm_info.line_offset; + do { + if (h_panning) { + if (hchars > text_cols) { + xc = 0; + font_col = h_panning; + cfwidth = xChar - h_panning; + } else { + xc = x * xChar - h_panning; + font_col = 0; + if (hchars == 1) { + cfwidth = h_panning; + } else { + cfwidth = xChar; + } + } + } else { + xc = x * xChar; + font_col = 0; + cfwidth = xChar; + } + if (forceUpdate || (old_text[0] != new_text[0]) + || (old_text[1] != new_text[1])) { + cChar = new_text[0]; + if (blink_mode) { + cAttr = new_text[1] & 0x7F; + if (!blink_state && (new_text[1] & 0x80)) + cAttr = (cAttr & 0x70) | (cAttr >> 4); + } else { + cAttr = new_text[1]; + } + DrawBitmap(hdc, vgafont[cChar], xc, yc, cfwidth, cfheight, font_col, + font_row, SRCCOPY, cAttr); + if (offset == curs) { + if (font_row == 0) { + yc2 = yc + tm_info.cs_start; + font_row2 = tm_info.cs_start; + cfheight2 = tm_info.cs_end - tm_info.cs_start + 1; + } else { + if (v_panning > tm_info.cs_start) { + yc2 = yc; + font_row2 = font_row; + cfheight2 = tm_info.cs_end - v_panning + 1; + } else { + yc2 = yc + tm_info.cs_start - v_panning; + font_row2 = tm_info.cs_start; + cfheight2 = tm_info.cs_end - tm_info.cs_start + 1; + } + } + cAttr = ((cAttr >> 4) & 0xF) + ((cAttr & 0xF) << 4); + DrawBitmap(hdc, vgafont[cChar], xc, yc2, cfwidth, cfheight2, font_col, + font_row2, SRCCOPY, cAttr); + } + } + x++; + new_text+=2; + old_text+=2; + offset+=2; + } while (--hchars); + if (!split_screen && (y == split_textrow)) { + new_text = text_base; + forceUpdate = 1; + cs_y = 0; + if (tm_info.split_hpanning) h_panning = 0; + rows = ((dimension_y - line_compare + yChar - 2) / yChar) + 1; + split_screen = 1; + } else { + y++; + cs_y++; + new_text = new_line + tm_info.line_offset; + old_text = old_line + tm_info.line_offset; + } + } while (--rows); + + h_panning = tm_info.h_panning; +#else + rows = text_rows; + y = 0; + do { + hchars = text_cols; + yc = y * yChar; + new_line = new_text; + old_line = old_text; + x = 0; + offset = y * tm_info.line_offset; + do { + xc = x * xChar; + if (forceUpdate || (old_text[0] != new_text[0]) + || (old_text[1] != new_text[1])) { + cChar = new_text[0]; + if (blink_mode) { + cAttr = new_text[1] & 0x7F; + if (!blink_state && (new_text[1] & 0x80)) + cAttr = (cAttr & 0x70) | (cAttr >> 4); + } else { + cAttr = new_text[1]; + } + DrawChar(hdc, cChar, xc, yc, cAttr, 1, 0); + if (offset == curs) { + DrawChar(hdc, cChar, xc, yc, cAttr, tm_info.cs_start, tm_info.cs_end); + } + } + x++; + new_text+=2; + old_text+=2; + offset+=2; + } while (--hchars); + y++; + new_text = new_line + tm_info.line_offset; + old_text = old_line + tm_info.line_offset; + } while (--rows); +#endif + + prev_cursor_x = cursor_x; + prev_cursor_y = cursor_y; + + ReleaseDC(stInfo.simWnd, hdc); + + LeaveCriticalSection(&stInfo.drawCS); +} + +int bx_win32_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) +{ + if (OpenClipboard(stInfo.simWnd)) { + HGLOBAL hg = GetClipboardData(CF_TEXT); + char *data = (char *)GlobalLock(hg); + *nbytes = strlen(data); + *bytes = new Bit8u[1 + *nbytes]; + BX_INFO (("found %d bytes on the clipboard", *nbytes)); + memcpy (*bytes, data, *nbytes+1); + BX_INFO (("first byte is 0x%02x", *bytes[0])); + GlobalUnlock(hg); + CloseClipboard(); + return 1; + // *bytes will be freed in bx_keyb_c::paste_bytes or + // bx_keyb_c::service_paste_buf, using delete []. + } else { + BX_ERROR (("paste: could not open clipboard")); + return 0; + } +} + +int bx_win32_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) +{ + if (OpenClipboard(stInfo.simWnd)) { + HANDLE hMem = GlobalAlloc(GMEM_ZEROINIT, len); + EmptyClipboard(); + lstrcpy((char *)hMem, text_snapshot); + SetClipboardData(CF_TEXT, hMem); + CloseClipboard(); + GlobalFree(hMem); + return 1; + } else { + BX_ERROR (("copy: could not open clipboard")); + return 0; + } +} + + +// ::PALETTE_CHANGE() +// +// Allocate a color in the native GUI, for this color, and put +// it in the colormap location 'index'. +// returns: 0=no screen update needed (color map change has direct effect) +// 1=screen updated needed (redraw using current colormap) + +bx_bool bx_win32_gui_c::palette_change(unsigned index, unsigned red, + unsigned green, unsigned blue) { + if ((current_bpp == 16) && (index < 3)) { + cmap_index[256+index].rgbRed = red; + cmap_index[256+index].rgbBlue = blue; + cmap_index[256+index].rgbGreen = green; + return 0; + } else { + cmap_index[index].rgbRed = red; + cmap_index[index].rgbBlue = blue; + cmap_index[index].rgbGreen = green; + } + return(1); +} + + +// ::GRAPHICS_TILE_UPDATE() +// +// Called to request that a tile of graphics be drawn to the +// screen, since info in this region has changed. +// +// tile: array of 8bit values representing a block of pixels with +// dimension equal to the 'tilewidth' & 'tileheight' parameters to +// ::specific_init(). Each value specifies an index into the +// array of colors you allocated for ::palette_change() +// x0: x origin of tile +// y0: y origin of tile +// +// note: origin of tile and of window based on (0,0) being in the upper +// left of the window. + +void bx_win32_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) +{ + HDC hdc; + HGDIOBJ oldObj; + + EnterCriticalSection(&stInfo.drawCS); + hdc = GetDC(stInfo.simWnd); + + oldObj = SelectObject(MemoryDC, MemoryBitmap); + + StretchDIBits(MemoryDC, x0, y0, x_tilesize, y_tilesize, 0, 0, + x_tilesize, y_tilesize, tile, bitmap_info, DIB_RGB_COLORS, SRCCOPY); + + SelectObject(MemoryDC, oldObj); + + updateUpdated(x0, y0, x0 + x_tilesize - 1, y0 + y_tilesize - 1); + + ReleaseDC(stInfo.simWnd, hdc); + LeaveCriticalSection(&stInfo.drawCS); +} + + + +// ::DIMENSION_UPDATE() +// +// Called when the VGA mode changes it's X,Y dimensions. +// Resize the window to this size, but you need to add on +// the height of the headerbar to the Y value. +// +// x: new VGA x size +// y: new VGA y size (add headerbar_y parameter from ::specific_init(). +// fheight: new VGA character height in text mode +// fwidth : new VGA character width in text mode +// bpp : bits per pixel in graphics mode + +void bx_win32_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight, unsigned fwidth, unsigned bpp) +{ + BxTextMode = (fheight > 0); + if (BxTextMode) { + text_cols = x / fwidth; + text_rows = y / fheight; +#if BX_USE_WINDOWS_FONTS + if (fheight >= 14) { + FontId = 2; + xChar = 8; + yChar = 16; + } else if (fheight >= 12) { + FontId = 1; + xChar = 8; + yChar = 14; + } else { + FontId = 0; + xChar = 8; + yChar = 12; + } + if (fwidth != xChar) { + x = x * 8 / fwidth; + } + if (fheight != yChar) { + y = y * yChar / fheight; + } +#else + xChar = fwidth; + yChar = fheight; +#endif + } + + if (x==dimension_x && y==dimension_y && bpp==current_bpp) + return; + dimension_x = x; + dimension_y = y; + stretched_x = dimension_x; + stretched_y = dimension_y; + stretch_factor = 1; + if (BxTextMode && (stretched_x<400)) { + stretched_x *= 2; + stretch_factor *= 2; + } + + bitmap_info->bmiHeader.biBitCount = bpp; + if (bpp == 16) + { + bitmap_info->bmiHeader.biCompression = BI_BITFIELDS; + static RGBQUAD red_mask = {0x00, 0xF8, 0x00, 0x00}; + static RGBQUAD green_mask = {0xE0, 0x07, 0x00, 0x00}; + static RGBQUAD blue_mask = {0x1F, 0x00, 0x00, 0x00}; + bitmap_info->bmiColors[256] = bitmap_info->bmiColors[0]; + bitmap_info->bmiColors[257] = bitmap_info->bmiColors[1]; + bitmap_info->bmiColors[258] = bitmap_info->bmiColors[2]; + bitmap_info->bmiColors[0] = red_mask; + bitmap_info->bmiColors[1] = green_mask; + bitmap_info->bmiColors[2] = blue_mask; + } + else + { + if (current_bpp == 16) + { + bitmap_info->bmiColors[0] = bitmap_info->bmiColors[256]; + bitmap_info->bmiColors[1] = bitmap_info->bmiColors[257]; + bitmap_info->bmiColors[2] = bitmap_info->bmiColors[258]; + } + bitmap_info->bmiHeader.biCompression = BI_RGB; + if (bpp == 15) + { + bitmap_info->bmiHeader.biBitCount = 16; + } + } + current_bpp = bpp; + + resize_main_window(); + + BX_INFO(("dimension update x=%d y=%d fontheight=%d fontwidth=%d bpp=%d", x, y, fheight, fwidth, bpp)); + + host_xres = x; + host_yres = y; + host_bpp = bpp; +} + + +// ::CREATE_BITMAP() +// +// Create a monochrome bitmap of size 'xdim' by 'ydim', which will +// be drawn in the headerbar. Return an integer ID to the bitmap, +// with which the bitmap can be referenced later. +// +// bmap: packed 8 pixels-per-byte bitmap. The pixel order is: +// bit0 is the left most pixel, bit7 is the right most pixel. +// xdim: x dimension of bitmap +// ydim: y dimension of bitmap + +unsigned bx_win32_gui_c::create_bitmap(const unsigned char *bmap, unsigned xdim, + unsigned ydim) +{ + unsigned char *data; + TBADDBITMAP tbab; + + if (bx_bitmap_entries >= BX_MAX_PIXMAPS) + terminateEmul(EXIT_HEADER_BITMAP_ERROR); + + bx_bitmaps[bx_bitmap_entries].bmap = CreateBitmap(xdim,ydim,1,1,NULL); + if (!bx_bitmaps[bx_bitmap_entries].bmap) + terminateEmul(EXIT_HEADER_BITMAP_ERROR); + + data = new unsigned char[ydim * xdim/8]; + for (unsigned i=0; i BX_MAX_HEADERBAR_ENTRIES) + terminateEmul(EXIT_HEADER_BITMAP_ERROR); + + bx_headerbar_entries++; + hb_index = bx_headerbar_entries - 1; + + memset(tbb,0,sizeof(tbb)); + if (bx_hb_separator==0) { + tbb[0].iBitmap = 0; + tbb[0].idCommand = 0; + tbb[0].fsState = 0; + tbb[0].fsStyle = TBSTYLE_SEP; + SendMessage(hwndTB, TB_ADDBUTTONS, 1,(LPARAM)(LPTBBUTTON)&tbb); + } + tbb[0].iBitmap = bmap_id; + tbb[0].idCommand = hb_index + 101; + tbb[0].fsState = TBSTATE_ENABLED; + tbb[0].fsStyle = TBSTYLE_BUTTON; + if (alignment == BX_GRAVITY_LEFT) { + SendMessage(hwndTB, TB_INSERTBUTTON, bx_hb_separator,(LPARAM)(LPTBBUTTON)&tbb); + bx_hb_separator++; + } else { // BX_GRAVITY_RIGHT + SendMessage(hwndTB, TB_INSERTBUTTON, bx_hb_separator+1, (LPARAM)(LPTBBUTTON)&tbb); + } + + bx_headerbar_entry[hb_index].bmap_id = bmap_id; + bx_headerbar_entry[hb_index].f = f; + bx_headerbar_entry[hb_index].tooltip = NULL; + + return(hb_index); +} + + +// ::SHOW_HEADERBAR() +// +// Show (redraw) the current headerbar, which is composed of +// currently installed bitmaps. + +void bx_win32_gui_c::show_headerbar(void) +{ + if (!IsWindowVisible(hwndTB)) { + SendMessage(hwndTB, TB_AUTOSIZE, 0, 0); + ShowWindow(hwndTB, SW_SHOW); + resize_main_window(); + bx_gui->set_tooltip(bx_gui->get_mouse_headerbar_id(), szMouseTooltip); + } +} + + +// ::REPLACE_BITMAP() +// +// Replace the bitmap installed in the headerbar ID slot 'hbar_id', +// with the one specified by 'bmap_id'. 'bmap_id' will have +// been generated by ::create_bitmap(). The old and new bitmap +// must be of the same size. This allows the bitmap the user +// sees to change, when some action occurs. For example when +// the user presses on the floppy icon, it then displays +// the ejected status. +// +// hbar_id: headerbar slot ID +// bmap_id: bitmap ID + +void bx_win32_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) +{ + if (bmap_id != bx_headerbar_entry[hbar_id].bmap_id) { + bx_headerbar_entry[hbar_id].bmap_id = bmap_id; + bx_bool is_visible = IsWindowVisible(hwndTB); + if (is_visible) { + ShowWindow(hwndTB, SW_HIDE); + } + SendMessage(hwndTB, TB_CHANGEBITMAP, (WPARAM)hbar_id+101, (LPARAM) + MAKELPARAM(bmap_id, 0)); + SendMessage(hwndTB, TB_AUTOSIZE, 0, 0); + if (is_visible) { + ShowWindow(hwndTB, SW_SHOW); + } + } +} + + +// ::EXIT() +// +// Called before bochs terminates, to allow for a graceful +// exit from the native GUI mechanism. +void bx_win32_gui_c::exit(void) +{ + printf("# In bx_win32_gui_c::exit(void)!\n"); + + // kill thread first... + PostMessage(stInfo.mainWnd, WM_CLOSE, 0, 0); + + // Wait until it dies + while ((stInfo.kill == 0) && (workerThreadID != 0)) Sleep(500); + + if (!stInfo.kill) terminateEmul(EXIT_NORMAL); +} + + +void create_vga_font(void) +{ + unsigned char data[64]; + + // VGA font is 8 or 9 wide and up to 32 high + for (unsigned c = 0; c<256; c++) { + vgafont[c] = CreateBitmap(9,32,1,1,NULL); + if (!vgafont[c]) terminateEmul(EXIT_FONT_BITMAP_ERROR); + memset(data, 0, sizeof(data)); + for (unsigned i=0; i<16; i++) + data[i*2] = reverse_bitorder(bx_vgafont[c].data[i]); + SetBitmapBits(vgafont[c], 64, data); + } +} + + +unsigned char reverse_bitorder(unsigned char b) +{ + unsigned char ret=0; + + for (unsigned i=0; i<8; i++) { + ret |= (b & 0x01) << (7-i); + b >>= 1; + } + + return(ret); +} + + +COLORREF GetColorRef(unsigned char attr) +{ + Bit8u pal_idx = text_pal_idx[attr]; + return RGB(cmap_index[pal_idx].rgbRed, cmap_index[pal_idx].rgbGreen, + cmap_index[pal_idx].rgbBlue); +} + + +void DrawBitmap(HDC hdc, HBITMAP hBitmap, int xStart, int yStart, int width, + int height, int fcol, int frow, DWORD dwRop, unsigned char cColor) +{ + BITMAP bm; + HDC hdcMem; + POINT ptSize, ptOrg; + HGDIOBJ oldObj; + + hdcMem = CreateCompatibleDC (hdc); + SelectObject (hdcMem, hBitmap); + SetMapMode (hdcMem, GetMapMode (hdc)); + + GetObject (hBitmap, sizeof (BITMAP), (LPVOID) &bm); + + ptSize.x = width; + ptSize.y = height; + + DPtoLP (hdc, &ptSize, 1); + + ptOrg.x = fcol; + ptOrg.y = frow; + DPtoLP (hdcMem, &ptOrg, 1); + + oldObj = SelectObject(MemoryDC, MemoryBitmap); + + COLORREF crFore = SetTextColor(MemoryDC, GetColorRef((cColor>>4)&0xf)); + COLORREF crBack = SetBkColor(MemoryDC, GetColorRef(cColor&0xf)); + BitBlt(MemoryDC, xStart, yStart, ptSize.x, ptSize.y, hdcMem, ptOrg.x, + ptOrg.y, dwRop); + SetBkColor(MemoryDC, crBack); + SetTextColor(MemoryDC, crFore); + + SelectObject(MemoryDC, oldObj); + + updateUpdated(xStart, yStart, ptSize.x + xStart - 1, ptSize.y + yStart - 1); + + DeleteDC (hdcMem); +} + + +void updateUpdated(int x1, int y1, int x2, int y2) +{ + x1*=stretch_factor; + x2*=stretch_factor; + if (!updated_area_valid) { + updated_area.left = x1 ; + updated_area.top = y1 ; + updated_area.right = x2 ; + updated_area.bottom = y2 ; + } else { + if (x1 < updated_area.left) updated_area.left = x1 ; + if (y1 < updated_area.top) updated_area.top = y1 ; + if (x2 > updated_area.right) updated_area.right = x2 ; + if (y2 > updated_area.bottom) updated_area.bottom = y2; + } + + updated_area_valid = TRUE; +} + + +void headerbar_click(int x) +{ + if (x < bx_headerbar_entries) { + bx_headerbar_entry[x].f(); + } +} + +void bx_win32_gui_c::mouse_enabled_changed_specific(bx_bool val) +{ + if ((val != (bx_bool)mouseCaptureMode) && !mouseToggleReq) { + mouseToggleReq = TRUE; + mouseCaptureNew = val; + } +} + +void bx_win32_gui_c::get_capabilities(Bit16u *xres, Bit16u *yres, Bit16u *bpp) +{ + if (desktop_y > 0) { + *xres = desktop_x; + *yres = desktop_y; + *bpp = 32; + } else { + *xres = 1024; + *yres = 768; + *bpp = 32; + } +} + +void bx_win32_gui_c::set_tooltip(unsigned hbar_id, const char *tip) +{ + bx_headerbar_entry[hbar_id].tooltip = tip; +} + +#if BX_SHOW_IPS +VOID CALLBACK MyTimer(HWND hwnd,UINT uMsg, UINT idEvent, DWORD dwTime) +{ + bx_signal_handler(SIGALRM); +} + +void bx_win32_gui_c::show_ips(Bit32u ips_count) +{ + if (!ipsUpdate) { + sprintf(ipsText, "IPS: %9u", ips_count); + ipsUpdate = TRUE; + } +} +#endif + +#if BX_USE_WINDOWS_FONTS + +void DrawChar (HDC hdc, unsigned char c, int xStart, int yStart, + unsigned char cColor, int cs_start, int cs_end) +{ + HDC hdcMem; + POINT ptSize, ptOrg; + HGDIOBJ oldObj; + char str[2]; + HFONT hFontOld; + + hdcMem = CreateCompatibleDC (hdc); + SetMapMode (hdcMem, GetMapMode (hdc)); + ptSize.x = xChar; + ptSize.y = yChar; + + DPtoLP (hdc, &ptSize, 1); + + ptOrg.x = 0; + ptOrg.y = 0; + + DPtoLP (hdcMem, &ptOrg, 1); + + oldObj = SelectObject(MemoryDC, MemoryBitmap); + hFontOld=(HFONT)SelectObject(MemoryDC, hFont[FontId]); + + COLORREF crFore = SetTextColor(MemoryDC, GetColorRef(cColor&0xf)); + COLORREF crBack = SetBkColor(MemoryDC, GetColorRef((cColor>>4)&0xf)); + str[0]=c; + str[1]=0; + + int y = FontId == 2 ? 16 : 8; + + TextOut(MemoryDC, xStart, yStart, str, 1); + if (cs_start <= cs_end && cs_start < y) + { + RECT rc; + SetBkColor(MemoryDC, GetColorRef(cColor&0xf)); + SetTextColor(MemoryDC, GetColorRef((cColor>>4)&0xf)); + rc.left = xStart+0; + rc.right = xStart+xChar; + if (cs_end >= y) + cs_end = y-1; + rc.top = yStart+cs_start*yChar/y; + rc.bottom = yStart+(cs_end+1)*yChar/y; + ExtTextOut(MemoryDC, xStart, yStart, ETO_CLIPPED|ETO_OPAQUE, &rc, str, 1, NULL); + } + + SetBkColor(MemoryDC, crBack); + SetTextColor(MemoryDC, crFore); + + SelectObject(MemoryDC, hFontOld); + SelectObject(MemoryDC, oldObj); + + updateUpdated(xStart, yStart, ptSize.x + xStart - 1, ptSize.y + yStart - 1); + + DeleteDC (hdcMem); +} + +void InitFont(void) +{ + LOGFONT lf; + + lf.lfWidth = 8; + lf.lfEscapement = 0; + lf.lfOrientation = 0; + lf.lfWeight = FW_MEDIUM; + lf.lfItalic = FALSE; + lf.lfUnderline=FALSE; + lf.lfStrikeOut=FALSE; + lf.lfCharSet=OEM_CHARSET; + lf.lfOutPrecision=OUT_DEFAULT_PRECIS; + lf.lfClipPrecision=CLIP_DEFAULT_PRECIS; + lf.lfQuality=DEFAULT_QUALITY; + lf.lfPitchAndFamily=FIXED_PITCH | FF_DONTCARE; + wsprintf(lf.lfFaceName, "Lucida Console"); + + for (int i=0; i < 3; i++) + { + lf.lfHeight = 12 + i * 2; + hFont[i]=CreateFontIndirect(&lf); + } +} + +void DestroyFont(void) +{ + for(int i = 0; i < 3; i++) + { + DeleteObject(hFont[i]); + } +} + +#endif /* if BX_USE_WINDOWS_FONTS */ + +#endif /* if BX_WITH_WIN32 */ diff --git a/bochs/gui/win32_enh_dbg_osdep.cc b/bochs/gui/win32_enh_dbg_osdep.cc new file mode 100755 index 00000000..7ad766ae --- /dev/null +++ b/bochs/gui/win32_enh_dbg_osdep.cc @@ -0,0 +1,1877 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// BOCHS ENHANCED DEBUGGER Ver 1.2 +// (C) Chourdakis Michael, 2008 +// http://www.turboirc.com +// +// Modified by Bruce Ewing +// + +#include "config.h" + +#if BX_DEBUGGER && BX_DEBUGGER_GUI + +#include "bochs.h" +#include "win32dialog.h" +#include "enh_dbg.h" + +// Important Note! All the string manipulation functions assume one byte chars -- ie. "ascii", +// instead of "wide" chars. If there exists a compiler that automatically assumes wide chars +// (ie. 2 byte), then all the function names in here need to be changed to FORCE the compiler +// to use the "A" functions instead of the "W" functions. That is, strcpyA(), sprintfA(), etc. +// This will require setting macros for the non-os-specific code, too. + +#include +#include + +// User Customizable initial settings: + +// the Register color table +COLORREF ColorList[16] = { // background "register type" colors indexed by RegColor value + RGB(255,255,255), // white + RGB(200,255,255), // blue (aqua) + RGB(230,230,230), // gray + RGB(248,255,200), // yellow + RGB(216,216,255), // purple + RGB(200,255,200), // green + RGB(255,230,200), // orange + RGB(255,255,255), // user definable + RGB(255,255,255), + RGB(255,255,255), + RGB(255,255,255), + RGB(255,255,255), + RGB(255,255,255), + RGB(255,255,255), + RGB(255,255,255), + RGB(255,255,255) +}; + +#define STATUS_WIN_OVERLAP 4 // # of "extra" pixels at the top of a Status window + +// END of User Customizable settings + +COLORREF AsmColors[4] = { + RGB(0,0,0), // text foreground color is normally black + RGB(0,100,0), // current opcode is dark green and bold + RGB(150,0,0), // a breakpoint is red and italic + RGB(0,0,200) // both = blue, bold, AND italic +}; + +#ifndef LVIF_GROUPID +#define IS_WIN98 +// this define may not exist in some compilers +#define LVIF_GROUPID 0 +#endif + +#ifndef IS_WIN98 +// workaround broken code if IS_WIN98 not defined +#define IS_WIN98 +#endif + +// The wordsize popup is the 15th entry in the Opt menu -- COUNTING SEPARATORS +// Index = (entry number - 1) -- if the Opt menu is modified, then update this value +// -- or else the popup checkmarks won't work +#define WS_POPUP_IDX 14 + +void DockResize (int j, Bit32u x); // need some function prototypes +void SetHorzLimits(void); +void ParseIDText(const char *x); +void ShowData(); +void UpdateStatus(); +void doUpdate(); +void RefreshDataWin(); +void OnBreak(); +void ParseBkpt(); +void SetBreak(int i); +void ChangeReg(); +int HotKey (int ww, int Alt, int Shift, int Control); +void ActivateMenuItem (int LW); +void SetMemLine (int L); +void MakeBL(HTREEITEM *h_P, bx_param_c *p); + +static unsigned LstTop = 0; +static Bit32u CurTimeStamp = 0; // last mousedown time + +// Handles to Windows and global stuff +HWND hY = NULL; // complete parent window +HWND hL[3]; // 0=registers, 1=Asm, 2=MemDump +HWND hE_I; // command input window +HWND hS_S; // "status" window at bottom +HWND hE_O; // debugger text output +HWND hT; // param_tree window +HWND hBTN[5]; // button row +HWND hCPUt[BX_MAX_SMP_THREADS_SUPPORTED]; // "tabs" for the individual CPUs +HFONT CustomFont[4]; +HFONT DefFont; +LOGFONT mylf; +HMENU hOptMenu; // "Options" popup menu (needed to set check marks) +HMENU hViewMenu; // "View" popup menu (needed to gray entries) +HMENU hCmdMenu; // "Command" popup menu (needed to gray entries) +// one "defualtProc" for each edit window (Input and Output) +WNDPROC wEdit[2]; +WNDPROC wBtn; // all the buttons have the same Proc +WNDPROC wTreeView; +WNDPROC wListView; // all the lists use the same Proc + +//HANDLE hTCevent[BX_MAX_SMP_THREADS_SUPPORTED]; // Start/Sleep Control for cpu_loop threads + +// window resizing/docking variables +unsigned CurXSize = 0; // last known size of main client window +unsigned CurYSize = 0; +HCURSOR hCursResize; +HCURSOR hCursDock; +HCURSOR hCursArrow; + +int SelectedEntry; // keeps track of "clicks" on list entries + +// base window "styles" for the 3 listviews. +long LVStyle[3] = { + LVS_REPORT | WS_CHILD, + LVS_SHOWSELALWAYS | LVS_REPORT | WS_CHILD, + LVS_SHOWSELALWAYS | LVS_REPORT | WS_CHILD | WS_VISIBLE +}; + +TVINSERTSTRUCT tvis; // tree-view generic item + +Bit32u SelectedBID; + +#define BTN_BASE 1024 +#define MULTICPU_BTN_BASE 1030 + +bx_bool UpdInProgress[3]; // flag -- list update incomplete (not OK to paint) + +INT_PTR CALLBACK A_DP(HWND hh,UINT mm,WPARAM ww,LPARAM ll) +{ + switch(mm) + { + case WM_INITDIALOG: + SetWindowText(hh,ask_str.title); + SetWindowText(GetDlgItem(hh,101),ask_str.prompt); + SetWindowText(GetDlgItem(hh,102),ask_str.reply); + return TRUE; + + case WM_COMMAND: + if (LOWORD(ww) == IDOK) + { + GetWindowText(GetDlgItem(hh,102),ask_str.reply,100); + EndDialog(hh,IDOK); + return 0; + } + if (LOWORD(ww) == IDCANCEL) + { + EndDialog(hh,IDCANCEL); + return 0; + } + } + return 0; +} + +bx_bool ShowAskDialog() +{ + bx_bool ret = FALSE; + // The dialog box needs a caret, and will destroy the one in hE_I. + // So destroy it myself, cleanly, and let it be recreated cleanly. + CallWindowProc(*wEdit, hE_I,WM_KILLFOCUS,(WPARAM) 0,0); + if (DialogBoxParam(GetModuleHandle(0),"DIALOG_AT",hY,A_DP,(LPARAM) 0) == IDOK) + ret = TRUE; + // recreate the caret in the Input window -- KILL and SET focus only work in pairs! + CallWindowProc(*wEdit, hE_I,WM_SETFOCUS,(WPARAM) 0,0); + return ret; +} + +// Subclass the edit controls +LRESULT CALLBACK ThisEditProc(HWND hh, UINT mm, WPARAM ww, LPARAM ll) +{ + int i = 0; + if (hh == hE_O) i = 1; // easy way to detect which edit window + switch (mm) + { + case WM_MOUSEMOVE: + // turn off any sizing operation if the cursor strays off the listviews + Sizing = 0; + // also turn off any half-completed mouseclicks + xClick = -1; + break; + case WM_KILLFOCUS: + case WM_SETFOCUS: // force the Input window to always have the caret + return 0; // SETFOCUS/KILLFOCUS commands should be sent directly to the hE_I defProc + + case WM_CHAR: + case WM_SYSCHAR: + // throw away all Enter keys (bell problems) + if (ww == VK_RETURN) + return 0; + // force all typed input to the Input window (wEdit[0] = Input) + CallWindowProc(*wEdit, hE_I, mm, ww, ll); + return 0; + case WM_KEYDOWN: + case WM_SYSKEYDOWN: + // simply let parent know about all keydowns in these edit boxes + SendMessage(GetParent(hh),mm,ww,ll); + // the following keys cause annoying "bells" if sent on to the Original proc + // -- so throw them away (return 0) + if (ww == VK_RETURN || ww == VK_DOWN || ww == VK_UP) + return 0; + } + return (CallWindowProc(wEdit[i], hh, mm, ww, ll)); +} + +// Subclass all the button controls together +LRESULT CALLBACK BtnProc(HWND hh, UINT mm, WPARAM ww, LPARAM ll) +{ + switch (mm) + { + case WM_MOUSEMOVE: + // turn off any sizing operation if the cursor strays off the listviews + Sizing = 0; + // also turn off any half-completed mouseclicks + xClick = -1; + break; + case WM_CHAR: + // throw away any Enter keys (potential bell problems?) + if (ww == VK_RETURN) + return 0; + // force any typed input to the Input window + CallWindowProc((WNDPROC) *wEdit, hE_I, mm, ww, ll); + return 0; + case WM_KEYDOWN: + case WM_SYSKEYDOWN: + // pass to parent any keys + SendMessage(GetParent(hh),mm,ww,ll); + if (ww == ' ') // space chars cause buttons to activate + return 0; + } + return (CallWindowProc(wBtn, hh, mm, ww, ll)); +} + +// the subclassed tree-view uses the same handler that the listview does +// subclass all the listviews at once +// Note: the Sizing varaible keeps track of whether the program is in resize or dock mode, and +// which windows are involved. It's complicated. If you don't like how I use the variable, tough. +LRESULT CALLBACK LVProc(HWND hh, UINT mm, WPARAM ww, LPARAM ll) +{ + int i; + POINT pt; + pt.y = HIWORD(ll); + pt.x = LOWORD(ll); // get coordinates of the mouse (assume a mouse message) + + // some compilers generate buggy code if this 'if' is put inside the switch! + if (mm == WM_PAINT) + { + i = 2; + if (hh == hL[ASM_WND]) i=1; + else if (hh == hL[REG_WND]) i=0; + if (UpdInProgress[i] != FALSE) // if list is not complete, don't paint it + { + PAINTSTRUCT ps; + BeginPaint (hh, &ps); + EndPaint (hh, &ps); + return 0; + } + } + + switch (mm) + { + case WM_CHAR: + // throw away all Enter keys (or use them for something) + if (ww != VK_RETURN && *wEdit != NULL) + // force all typed input to the Input window + CallWindowProc(*wEdit, hE_I, mm, ww, ll); + return 0; + + case WM_MOUSEMOVE: // need to play with the cursor during resize/dock operations + // mouse position is in listview client's coordinates + if (xClick >= 0) // saw a lbutton mousedown recently? (pre-dock mode) + { + // cancel an impending "click" and go to dock (drag) mode if mouse is moving too much + i= (OneCharWide >> 1); + if (pt.x > xClick + i || pt.x < xClick - i) + xClick = -1; + else if (pt.y > yClick + i || pt.y < yClick - i) + xClick = -1; + // go into dock mode (without canceling the click) on a .5s time delay + i = CurTimeStamp + 500; + if (xClick < 0 || GetMessageTime() > i) // Start a "dock" operation? + Sizing = SizeList; // Sizing tells which ListView is being moved + + // if "drag" did not turn off, then I will get only one mousemove, with VK_LBUTTON showing UP + i = GetKeyState(VK_LBUTTON); + if (i >= 0 && Sizing != 0) // this could be EITHER a dock or resize + { + int j = 2; + if (hh == hL[REG_WND]) + j = 0; // j = ListView destination index + else if (hh == hL[ASM_WND]) + j = 1; + + ClientToScreen(hh,&pt); + ScreenToClient(hY,&pt); // convert to parent's coordinates + DockResize (j, (Bit32u)pt.x); + Sizing = 0; + } + } + if (Sizing != 0) + { + ClientToScreen(hh,&pt); + ScreenToClient(hY,&pt); // convert to parent's coordinates + i = GetKeyState(VK_LBUTTON); + // verify horizontal limits of the current resize or dock operation + if (pt.x > Resize_HiX || pt.x < Resize_LoX) + Sizing = 0; + else if (i >= 0 && Sizing > 0) + { + int j = DUMP_WND; + if (hh == hL[REG_WND]) + j = REG_WND; // j = ListView destination index + else if (hh == hL[ASM_WND]) + j = ASM_WND; + DockResize (j, (Bit32u)pt.x); + Sizing = 0; + } + else if (Sizing > 5) + SetCursor(hCursDock); + else + SetCursor(hCursResize); + } + break; + + case WM_NCMOUSEMOVE: // more cursor games + ScreenToClient(hY,&pt); // convert to parent's coordinates + if (Sizing == 0) + { + if (ww == HTBORDER) // mouse is hovering over a resize bar or border + { + if (pt.x < BarClix[0] + 10) // is it the left or right bar? + { + Sizing = -2; + Resize_LoX = BarClix[0] - OneCharWide; // set horizontal limits + Resize_HiX = BarClix[0] + OneCharWide; + } + else if (pt.x > BarClix[1] - 10) + { + Sizing = -1; + Resize_LoX = BarClix[1] - OneCharWide; // set horizontal limits + Resize_HiX = BarClix[1] + OneCharWide; + } + } + } + else if (Sizing >= 10) // continuing docking operation? + SetCursor(hCursDock); + else + { + // verify horizontal limits of the current resize operation + if (pt.x > Resize_HiX || pt.x < Resize_LoX) + Sizing = 0; + else + SetCursor(hCursResize); + } + break; + + case WM_NCLBUTTONDOWN: // NC messages are in Screen coordinates + ScreenToClient(hY,&pt); // convert to parent's coordinates + if (Sizing < 0) // doing a presize? -- enter full resize mode + { + SetHorzLimits(); + SetCursor(hCursResize); + return 0; // important to eat the mousedown (for scrollbars) + } + break; + + case WM_NCLBUTTONUP: + i = Sizing; + Sizing = 0; // a mouseup on a border can't be interpreted -- cancel everything + xClick = -1; + if (i > 0) + return 0; // eat the mouseup if a sizing op is ending (for scrollbars) + + case WM_LBUTTONDOWN: + if (Sizing < 0) // doing a presize? + { + SetHorzLimits(); + SetCursor(hCursResize); + } + else // set "pre-dock" mode + { + if (hh == hL[REG_WND]) + SizeList = 10; // remember which list to dock + else if (hh == hL[ASM_WND]) + SizeList = 11; + else + SizeList = 12; + Resize_LoX = OneCharWide << 2; // set horizontal limits + i = ListWidthPix[0] + ListWidthPix[1] + ListWidthPix[2]; + Resize_HiX = i - (OneCharWide << 2); + CurTimeStamp = GetMessageTime(); + xClick = pt.x; + yClick = pt.y; + } + // prevent default drag operations by returning 0 + // unfortunately, this also prevents clicks from happening automatically + return 0; + + case WM_LBUTTONUP: + // the mouseup COMPLETES a "click" or drag + if (Sizing > 0) + { + int j = DUMP_WND; + if (hh == hL[REG_WND]) + j = REG_WND; // j = ListView destination index + else if (hh == hL[ASM_WND]) + j = ASM_WND; + GetCursorPos(&pt); // Screen coordinates + ScreenToClient(hY,&pt); // convert to parent's coordinates + DockResize (j, (Bit32u) pt.x); + Sizing = 0; + } + else if (xClick >= 0) + { + // verify the mouseup was within a tight circle of the mousedown + i= (OneCharWide >> 1) +1; + if (pt.x < xClick + i && pt.x > xClick - i && pt.y < yClick + i && pt.y > yClick - i) + { + LV_ITEM lvi; + lvi.stateMask = LVIS_SELECTED; + lvi.state = 0; + + // emulate a regular click, for Trees or Lists + if (hh == hT) + { + TV_HITTESTINFO TreeHT; + TreeHT.pt.x = pt.x; // find out which tree button got clicked + TreeHT.pt.y = pt.y; + HTREEITEM hTreeEnt; + hTreeEnt = (HTREEITEM) CallWindowProc(wTreeView,hT,TVM_HITTEST,(WPARAM) 0,(LPARAM) &TreeHT); + // then simulate a click on that button + if (hTreeEnt != NULL) // make sure the click is actually on an entry + CallWindowProc(wTreeView,hT,TVM_EXPAND,(WPARAM) TVE_TOGGLE,(LPARAM) hTreeEnt); + xClick = -1; + Sizing = 0; + return 0; // eat all the Tree mouseups + } + i = REG_WND; // deal with List Focus + DumpHasFocus = FALSE; + if (hh == hL[ASM_WND]) + i = ASM_WND; + else if (hh != hL[REG_WND]) + { + DumpHasFocus = TRUE; + i = DUMP_WND; + EnableMenuItem (hCmdMenu, CMD_BRKPT, MF_GRAYED); + if (LinearDump == FALSE) + { + EnableMenuItem (hCmdMenu, CMD_WPTWR, MF_ENABLED); + EnableMenuItem (hCmdMenu, CMD_WPTRD, MF_ENABLED); + } + else + { + EnableMenuItem (hCmdMenu, CMD_WPTWR, MF_GRAYED); + EnableMenuItem (hCmdMenu, CMD_WPTRD, MF_GRAYED); + } + } + if (DumpHasFocus == FALSE) + { + EnableMenuItem (hCmdMenu, CMD_BRKPT, MF_ENABLED); + EnableMenuItem (hCmdMenu, CMD_WPTWR, MF_GRAYED); + EnableMenuItem (hCmdMenu, CMD_WPTRD, MF_GRAYED); + } + if (GetFocus() != hh) + { + CallWindowProc(wListView, hh, WM_SETFOCUS, (WPARAM) 0, (LPARAM) 0); + if (i != REG_WND) + CallWindowProc(wListView, hL[REG_WND], WM_KILLFOCUS, (WPARAM) 0, (LPARAM) 0); + if (i != ASM_WND) + CallWindowProc(wListView, hL[ASM_WND], WM_KILLFOCUS, (WPARAM) 0, (LPARAM) 0); + if (i != DUMP_WND) + CallWindowProc(wListView, hL[DUMP_WND], WM_KILLFOCUS, (WPARAM) 0, (LPARAM) 0); + } + + LVHITTESTINFO lvht; // do a hit test to get the iItem to select + lvht.pt.y = HIWORD(ll); + lvht.pt.x = LOWORD(ll); // make sure to do any subitem test on the RIGHT point! + SelectedEntry = CallWindowProc(wListView, hh, LVM_SUBITEMHITTEST, (WPARAM) 0, (LPARAM) &lvht); + // SelectedEntry is a copy of the iItem number -- ignore anything <= 0 + int Control = GetKeyState(VK_CONTROL); // key is down if val is negative + if (Control >= 0) + { + // if no control key, deselect anyything that's selected + int j = CallWindowProc(wListView, hh, LVM_GETNEXTITEM, (WPARAM) -1, MAKELPARAM(LVNI_SELECTED, 0)); + while (j >= 0) + { + // cancel the item's "selection" + CallWindowProc(wListView, hh, LVM_SETITEMSTATE, (WPARAM)j, (LPARAM)&lvi); + // and get the next one + j = CallWindowProc(wListView, hh, LVM_GETNEXTITEM, (WPARAM) -1, MAKELPARAM(LVNI_SELECTED, 0)); + } + } + if (SelectedEntry >= 0) // then select the one that got clicked + { + lvi.state = LVIS_SELECTED; + CallWindowProc(wListView, hh, LVM_SETITEMSTATE, (WPARAM)SelectedEntry, (LPARAM)&lvi); + if (hh == hL[DUMP_WND] && DViewMode == VIEW_MEMDUMP && LinearDump == FALSE) + { + // if this was a PhysDump click -- need to get the "Selected Address" + SA_valid = TRUE; + SelectedDataAddress = DumpStart + (SelectedEntry<<4); + // Clicked a Subitem? column numbers = byte offsets + 1 + if (lvht.iSubItem > 0) + SelectedDataAddress += lvht.iSubItem - 1; + } + else if (hh == hL[DUMP_WND] && DViewMode == VIEW_BREAK) + { + // breakpoint or watchpoint click -- figure out WHICH breakpoint! + // SelectedBID is the breakpoint ID, if a breakpoint was clicked + if (SelectedEntry < WWP_BaseEntry && SelectedEntry < 256) + { + i = 0; + if (SelectedEntry > EndPhyEntry) + i = 0x10000; // bit flag for Virtual Brk + else if (SelectedEntry > EndLinEntry) + i = 0x20000; // bit flag for Phy Brkpt + SelectedBID = BrkpIDMap[SelectedEntry] | i; + } + else if (SelectedEntry >= WWP_BaseEntry && SelectedEntry < WWP_BaseEntry + WWPSnapCount) + { + // if a watchpoint was clicked, get its index (0 to 15) + // and save the address for later verification + i = SelectedEntry - WWP_BaseEntry; + SelectedBID = 0x40000 | i; + } + else if (SelectedEntry >= RWP_BaseEntry && SelectedEntry < RWP_BaseEntry + RWPSnapCount) + { + i = SelectedEntry - RWP_BaseEntry; + SelectedBID = 0x80000 | i; + } + } + } + } + } + xClick = -1; // all drags/clicks have been processed, so reset + Sizing = 0; + return 0; // eat all the mouseups + } // end the switch + if (hh == hT) // if this is a param_tree message, use the proper windowProc + return (CallWindowProc(wTreeView, hh, mm, ww, ll)); + else + return (CallWindowProc(wListView, hh, mm, ww, ll)); +} + + +bx_bool SpListView() // Superclasses a ListView control +{ + WNDCLASS wClass; + GetClassInfo(GetModuleHandle(0), WC_LISTVIEW, &wClass); + wListView = wClass.lpfnWndProc; + wClass.hInstance = GetModuleHandle(0); + wClass.lpszClassName = "sLV"; + wClass.lpfnWndProc = LVProc; + if (RegisterClass(&wClass) == 0) + return FALSE; + return TRUE; +} + +bx_bool SpBtn() // Superclasses a button control +{ + WNDCLASS wClass; + GetClassInfo(GetModuleHandle(0), "button", &wClass); + wBtn = wClass.lpfnWndProc; + wClass.hInstance = GetModuleHandle(0); + wClass.lpszClassName = "sBtn"; + wClass.lpfnWndProc = BtnProc; + if (RegisterClass(&wClass) == 0) + return FALSE; + return TRUE; +} + +// set all TRUE flags to checked in the Options menu, gray out unsupported features +void SpecialInit() +{ + int i = 8; + doOneTimeInit = FALSE; + EnableMenuItem (hOptMenu, CMD_EREG, MF_GRAYED); + EnableMenuItem (hCmdMenu, CMD_WPTWR, MF_GRAYED); + EnableMenuItem (hCmdMenu, CMD_WPTRD, MF_GRAYED); + EnableMenuItem (hOptMenu, CMD_XCEPT, MF_GRAYED); + // 32bit registers are always displayed until longmode is active + while (--i >= 0) + { + if (SeeReg[i] != FALSE) + CheckMenuItem (hOptMenu, i + CMD_EREG, MF_CHECKED); + } + if (SingleCPU != FALSE) + CheckMenuItem (hOptMenu, CMD_ONECPU, MF_CHECKED); + if (BX_SMP_PROCESSORS == 1) + EnableMenuItem (hOptMenu, CMD_ONECPU, MF_GRAYED); + if (ShowButtons != FALSE) + CheckMenuItem (hOptMenu, CMD_SBTN, MF_CHECKED); + if (UprCase != 0) + CheckMenuItem (hOptMenu, CMD_UCASE, MF_CHECKED); + if (isLittleEndian != FALSE) + CheckMenuItem (hOptMenu, CMD_LEND, MF_CHECKED); + if (ignSSDisasm != FALSE) + CheckMenuItem (hOptMenu, CMD_IGNSA, MF_CHECKED); + if (ignoreNxtT != FALSE) + CheckMenuItem (hOptMenu, CMD_IGNNT, MF_CHECKED); + if (SeeRegColors != FALSE) + CheckMenuItem (hOptMenu, CMD_RCLR, MF_CHECKED); + if (DumpInAsciiMode == 0) // prevent an illegal value + DumpInAsciiMode = 3; + if ((DumpInAsciiMode & 2) != 0) + CheckMenuItem (hOptMenu, CMD_MHEX, MF_CHECKED); + else // one or the other MemDump mode must always be left on! (unchangeable) + EnableMenuItem (hOptMenu, CMD_MASCII, MF_GRAYED); + if ((DumpInAsciiMode & 1) != 0) + CheckMenuItem (hOptMenu, CMD_MASCII, MF_CHECKED); + else + EnableMenuItem (hOptMenu, CMD_MHEX, MF_GRAYED); + if (ShowIOWindows != FALSE) + CheckMenuItem (hOptMenu, CMD_IOWIN, MF_CHECKED); + + HMENU wsMenu = GetSubMenu (hOptMenu, WS_POPUP_IDX); + CheckMenuItem (wsMenu, CMD_WS_1, MF_CHECKED); + EnableMenuItem (hOptMenu, CMD_TREG, MF_GRAYED); // not currently supported by bochs + EnableMenuItem (hViewMenu, CMD_PAGEV, MF_GRAYED); +#if BX_SUPPORT_FPU == 0 + EnableMenuItem (hOptMenu, CMD_FPUR, MF_GRAYED); +#endif + + if (! CpuSupportSSE) + EnableMenuItem (hOptMenu, CMD_XMMR, MF_GRAYED); +} + +// append a whole row of text into a ListView, all at once +// Note: LineCount should start at 0 +void InsertListRow(char *ColumnText[], int ColumnCount, int listnum, int LineCount, int grouping) +{ + LV_ITEM lvi = {LVIF_TEXT,LineCount,0,0,0,(LPSTR) *ColumnText,80,0,0}; + +//#ifndef IS_WIN98 +// lvi.iGroupId = grouping; +//#endif + + // insert data for the first column + CallWindowProc(wListView,hL[listnum],LVM_INSERTITEM,(WPARAM) 0,(LPARAM) &lvi); + + // loop over, and insert data for all additional columns + lvi.mask = LVIF_TEXT; + int i = 0; + while (++i < ColumnCount) + { + lvi.iSubItem = i; + lvi.pszText = ColumnText[i]; + CallWindowProc(wListView,hL[listnum],LVM_SETITEMTEXT,(WPARAM) LineCount,(LPARAM) &lvi); + } +} + +void SetSizeIOS(int WinSizeX, int WinSizeY) +{ + int i, j; + TEXTMETRIC tm; + // calculate the height/width of typical "glyphs" in the font + HDC hdc = GetDC (hS_S); + GetTextMetrics (hdc, &tm); + ReleaseDC (hS_S, hdc); + OneCharWide = tm.tmAveCharWidth; + j= tm.tmAveCharWidth * 72; // status bar contains about 72 char positions (without eflags) + if (j > WinSizeX/2) // leave half the status bar for the eflags + j = WinSizeX/2; + i = j*5 / 12; // predefined proportions of Status "subwindows" = 2:5:5 + int modepos = j/6; + int ptimepos = modepos + i; + int eflpos = ptimepos + i; + int p[4] = {modepos,ptimepos,eflpos,-1}; + + // then set the dimensions of the I, O, and S child windows + j = tm.tmHeight + tm.tmExternalLeading; // input window is the height of a char + i = j >> 1; + int sY = j + i; // status window and buttons are 50% taller + LstTop = 0; + if (ShowButtons != FALSE) + { + // position the 5 command buttons + LstTop = sY; + i = WinSizeX / 5; + SetWindowPos(hBTN[0],0,0,0,i,LstTop,SWP_SHOWWINDOW); + SetWindowPos(hBTN[1],0,i,0,i,LstTop,SWP_SHOWWINDOW); + SetWindowPos(hBTN[2],0,i*2,0,i,LstTop,SWP_SHOWWINDOW); + SetWindowPos(hBTN[3],0,i*3,0,i,LstTop,SWP_SHOWWINDOW); + SetWindowPos(hBTN[4],0,i*4,0,WinSizeX - 4*i,LstTop,SWP_SHOWWINDOW); + } + else + { + ShowWindow(hBTN[0],SW_HIDE); + ShowWindow(hBTN[1],SW_HIDE); + ShowWindow(hBTN[2],SW_HIDE); + ShowWindow(hBTN[3],SW_HIDE); + ShowWindow(hBTN[4],SW_HIDE); + } + if (TotCPUs > 1) + { + // MultiCPU simulation -- need CPU button row, too. + int HorPos = 0; + unsigned int CPUn = 0; + i = WinSizeX / TotCPUs; + while (CPUn < TotCPUs - 1) + { + SetWindowPos(hCPUt[CPUn],0,HorPos,LstTop,i,sY,SWP_SHOWWINDOW); + ++CPUn; + HorPos += i; + } + // use up any extra pixels on the last button + SetWindowPos(hCPUt[CPUn],0,HorPos,LstTop,WinSizeX-HorPos,sY,SWP_SHOWWINDOW); + LstTop += sY; + } + else if (BX_SMP_PROCESSORS > 1) // only showing CPU0 on a SMP simulation + { + i = BX_SMP_PROCESSORS; // so hide all the other CPU buttons + while (--i >= 0) + ShowWindow(hCPUt[i],SW_HIDE); + } + // The status win may not use all of its space: overlap lists or Input by STATUS_WIN_OVERLAP pixels + i = WinSizeY - sY - j; + if (ShowIOWindows == FALSE) + { + // caret functions will be ignored if sent multiple times (which is what is desired) + CallWindowProc(*wEdit, hE_I,WM_KILLFOCUS,(WPARAM) 0,0); // destroy Input caret + ShowWindow(hE_I,SW_HIDE); + ShowWindow(hE_O,SW_HIDE); + ListVerticalPix = WinSizeY - sY - LstTop + STATUS_WIN_OVERLAP; + } + else + { + CallWindowProc(*wEdit, hE_I,WM_SETFOCUS,(WPARAM) 0,0); // create Input caret + ListVerticalPix = (WinSizeY * 3) >> 2; // 3/4 height + SetWindowPos(hE_I,0,2,i + STATUS_WIN_OVERLAP,WinSizeX,j,SWP_SHOWWINDOW); + SetWindowPos(hE_O,0,0,ListVerticalPix + LstTop,WinSizeX, + i - ListVerticalPix - LstTop + (STATUS_WIN_OVERLAP/2),SWP_SHOWWINDOW); + } + SetWindowPos(hS_S,0,0,WinSizeY - sY,WinSizeX,sY,SWP_SHOWWINDOW); + SendMessage(hS_S,SB_SETPARTS,4,(LPARAM)p); +} + +void MoveLists() +{ + int i, j, k; + unsigned int StrtCol[3] = {0,0,0}; + // use DockOrder to figure out the start columns of each list + // starting column of 2nd list = width of first list + i = ListWidthPix[(DockOrder >> 8) -1]; + j = ((DockOrder>>4)& 3) -1; // index of 2nd list + StrtCol[j] = i; + BarClix[0] = i; + k = i + ListWidthPix[j]; // width of first + second + StrtCol[(DockOrder & 3) -1] = k; + BarClix[1] = k; + // the center listview must be the only one with a border + if (CurCenterList != j) + { + // remove the border on the previous center list, and put it on the new one + SetWindowLong ( hL[CurCenterList], GWL_STYLE, LVStyle[CurCenterList]); + SetWindowLong ( hL[j], GWL_STYLE, LVStyle[j] | WS_BORDER ); + CurCenterList = j; + // the tree window should have the same border as the data window -- + // but unfortunately, SetWindowLong does not work properly on a treeview! +// if (j == 2) +// k=SetWindowLong ( hT, GWL_STYLE, TVS_DISABLEDRAGDROP | TVS_HASLINES | TVS_HASBUTTONS | WS_CHILD | WS_BORDER ); +// else +// k=SetWindowLong ( hT, GWL_STYLE, TVS_DISABLEDRAGDROP | TVS_HASLINES | TVS_HASBUTTONS | WS_CHILD ); + } + + // On at least some versions of Win, you cannot mess with the positions + // of subclassed ListView controls that still HAVE DATA IN THEM. + // Therefore, delete all ListView data -- + // then refresh the 3 main ListView windows afterward + + CallWindowProc(wListView,hL[DUMP_WND],LVM_DELETEALLITEMS,(WPARAM) 0,(LPARAM) 0); + CallWindowProc(wListView,hL[ASM_WND],LVM_DELETEALLITEMS,(WPARAM) 0,(LPARAM) 0); + CallWindowProc(wListView,hL[REG_WND],LVM_DELETEALLITEMS,(WPARAM) 0,(LPARAM) 0); + + SetWindowPos(hL[REG_WND],0,StrtCol[0],LstTop,ListWidthPix[0],ListVerticalPix,SWP_HIDEWINDOW); + SetWindowPos(hL[ASM_WND],0,StrtCol[1],LstTop,ListWidthPix[1],ListVerticalPix,SWP_HIDEWINDOW); + SetWindowPos(hL[DUMP_WND],0,StrtCol[2],LstTop,ListWidthPix[2],ListVerticalPix,SWP_HIDEWINDOW); + // tree window = same size/position as dump window + SetWindowPos(hT,0,StrtCol[2],LstTop,ListWidthPix[2],ListVerticalPix,SWP_HIDEWINDOW); + + // size the last column of each list = total width of that list + CallWindowProc(wListView, hL[REG_WND], LVM_SETCOLUMNWIDTH, 2, ListWidthPix[0]); + CallWindowProc(wListView, hL[ASM_WND], LVM_SETCOLUMNWIDTH, 2, ListWidthPix[1]); + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, 17, ListWidthPix[2]); + BottomAsmLA = ~0; // force an ASM autoload next time, to resize it + doDumpRefresh = TRUE; // force a data window refresh on a break + if (AtBreak != FALSE) // can't refresh the windows until a break! + { + doUpdate(); // refresh the ASM and Register windows + RefreshDataWin(); // and whichever data window is up + } +} + +// redraw/recalculate everything if the vertical window sizes are invalid +void VSizeChange() +{ + RECT rc; + GetClientRect(hY,&rc); + SetSizeIOS((int)rc.right,(int)rc.bottom); // window sizes are font-dependent + MoveLists(); +} + +// kludgy function to remove column header/autosizing from Fill routines +void RedrawColumns(int listnum) +{ + static bx_bool DumpCResize = FALSE; // flag to force column resize/autosize + static int PrevDV = -1; // type of previous Dump window that was displayed + // ResizeColmns says whether font or 64bit mode has changed, + // but the Dump windows need to "remember" seeing the flag + if (ResizeColmns != FALSE) + DumpCResize = TRUE; + if (listnum == REG_WND) + { + if (ResizeColmns != FALSE) + CallWindowProc(wListView, hL[REG_WND], LVM_SETCOLUMNWIDTH, 1, LVSCW_AUTOSIZE); + } + else if (listnum == ASM_WND) + { + // recalculate # of list items per page for all list windows + AsmPgSize = CallWindowProc(wListView,hL[ASM_WND],LVM_GETCOUNTPERPAGE,(WPARAM) 0,(LPARAM) 0); + if (AsmPgSize != 0) + ListLineRatio = ListVerticalPix / AsmPgSize; + CallWindowProc(wListView, hL[ASM_WND], LVM_SETCOLUMNWIDTH, 0, LVSCW_AUTOSIZE); + } + else + { + char tmpc[32]; + int i = 17; + // MemDump resizes/uses ALL columns -- there ARE no unused ones + if (DViewMode != VIEW_MEMDUMP && PrevDV != DViewMode) + { + // force the widths of unused columns to 0, by squishing ALL the columns to 0 width + while (--i > 0) + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, i, 0); + } + + LV_COLUMN lvgc = {LVCF_TEXT,0,0,tmpc}; + switch (DViewMode) + { + case VIEW_MEMDUMP: + if (DumpInitted == FALSE) + { + CallWindowProc(wListView,hL[DUMP_WND],LVM_DELETEALLITEMS,(WPARAM) 0,(LPARAM) 0); + strcpy (tmpc,"Address"); // "generic" header for col 0 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 0,(LPARAM) &lvgc); + while (--i >= 0) // (i always equals 17) + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, i, LVSCW_AUTOSIZE_USEHEADER); + } + else + { + if (DumpCResize != FALSE || PrevDV != DViewMode) + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, 0, LVSCW_AUTOSIZE); + if (PrevDAD != DumpAlign || PrevDV != DViewMode) + { + PrevDAD = DumpAlign; + for(i = 1 ; i < 17 ; i++) + { + // if dumping ONLY in ascii, 0 out ALL the other columns + if (((i - 1) & (DumpAlign - 1)) == 0 && (DumpInAsciiMode & 2) != 0) + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, i, LVSCW_AUTOSIZE); + else // force the width of unused columns to 0 + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, i, 0); + } + } + } + break; + + case VIEW_GDT: + // 2 of the GDT columns are too narrow with a regular Autosize + if (PrevDV == DViewMode && DumpCResize == FALSE) + return; + strcpy (tmpc,"Index"); // header for col 0 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 0,(LPARAM) &lvgc); + strcpy (tmpc,"Base Address"); // header for col 1 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 1,(LPARAM) &lvgc); + strcpy (tmpc,"Size"); // header for col 2 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 2,(LPARAM) &lvgc); + strcpy (tmpc,"DPL"); // header for col 3 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 3,(LPARAM) &lvgc); + strcpy (tmpc,"Info"); // header for col 4 (17) + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 17,(LPARAM) &lvgc); + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, 1, LVSCW_AUTOSIZE_USEHEADER); + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, 3, LVSCW_AUTOSIZE_USEHEADER); + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, 0, LVSCW_AUTOSIZE); + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, 2, LVSCW_AUTOSIZE); + break; + + case VIEW_IDT: + if (PrevDV == DViewMode && DumpCResize == FALSE) + return; + strcpy (tmpc,"Interrupt"); // header for col 0 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 0,(LPARAM) &lvgc); + strcpy (tmpc,"L.Address"); // header for col 1 (17) + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 17,(LPARAM) &lvgc); + // redo col0 to handle the wide header + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, 0, LVSCW_AUTOSIZE_USEHEADER); + break; + + case VIEW_PAGING: + if (PrevDV == DViewMode && DumpCResize == FALSE) + return; + strcpy (tmpc,"L.Address"); // header for col 0 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 0,(LPARAM) &lvgc); + strcpy (tmpc,"is mapped to P.Address"); // header for col 1 (17) + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 17,(LPARAM) &lvgc); + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, 0, LVSCW_AUTOSIZE); + break; + + case VIEW_STACK: + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, 0, LVSCW_AUTOSIZE); + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, 1, LVSCW_AUTOSIZE); + if (PrevDV == DViewMode && DumpCResize == FALSE) + return; + strcpy (tmpc,"L.Address"); // header for col 0 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 0,(LPARAM) &lvgc); + strcpy (tmpc,"Value"); // header for col 1 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 1,(LPARAM) &lvgc); + strcpy (tmpc,"(dec.)"); // header for col 2 (17) + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 17,(LPARAM) &lvgc); + break; + + case VIEW_BREAK: + if (PrevDV == DViewMode && DumpCResize == FALSE) + return; + strcpy (tmpc,"Address"); // header for col 0 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 0,(LPARAM) &lvgc); + strcpy (tmpc,"Enabled"); // header for col 1 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 1,(LPARAM) &lvgc); + strcpy (tmpc,"ID"); // header for col 2 (17) + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 17,(LPARAM) &lvgc); + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, 0, LVSCW_AUTOSIZE); + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, 1, LVSCW_AUTOSIZE_USEHEADER); + } + DumpCResize = FALSE; + PrevDV = DViewMode; + } +} + +// hide/clear param_tree window when showing a different MemDump window (GDT, IDT, etc.) +void HideTree() +{ + ShowWindow(hT,SW_HIDE); + CallWindowProc(wTreeView,hT,TVM_DELETEITEM,(WPARAM) 0,(LPARAM) TVI_ROOT); +} + +void ShowFW() +{ + FWflag = TRUE; + MessageBox(hY,"With more than 1000 lines in the ASM window, be careful not to minimize the app.\r\nIt will be very slow to reopen.", + "Friendly warning:",MB_ICONINFORMATION); +} + +void Invalidate(int i) +{ + InvalidateRect(hL[i],0,TRUE); +} + +void SetStatusText(int column, const char *buf) +{ + SendMessage(hS_S,SB_SETTEXT, column,(LPARAM) buf); +} + +void GetLIText(int listnum, int itemnum, int column, char *buf) +{ + LV_ITEM lvi = {LVIF_TEXT,itemnum,column,0,0,(LPSTR) buf,100,0,0}; + CallWindowProc(wListView, hL[listnum], LVM_GETITEMTEXT,(WPARAM) itemnum,(LPARAM) &lvi); +} + +void TakeInputFocus() +{ + SetFocus(hY); // get the focus back from the VGA window +} + +void GetInputEntry(char *buf) +{ + GetWindowText(hE_I,buf,200); +} + +void SetLIState(int listnum, int itemnum, bx_bool Select) +{ + // assume selected + LV_ITEM lvi = {LVIF_STATE,itemnum,2,LVIS_SELECTED,LVIS_SELECTED,(LPSTR) 0,0,0,0}; + if (Select == FALSE) + lvi.state = 0; + CallWindowProc(wListView,hL[listnum],LVM_SETITEMSTATE,(WPARAM) itemnum,(LPARAM) &lvi); +} + +int GetNextSelectedLI(int listnum, int StartPt) +{ + int L = (int) CallWindowProc(wListView, hL[listnum], LVM_GETNEXTITEM, + (WPARAM) StartPt, MAKELPARAM(LVNI_SELECTED, 0)); + return L; +} + +int GetASMTopIdx() +{ + int i = (int) CallWindowProc(wListView,hL[ASM_WND],LVM_GETTOPINDEX,(WPARAM) 0,(LPARAM) 0); + return i; +} + +void ScrollASM(int pixels) +{ + CallWindowProc(wListView,hL[ASM_WND],LVM_SCROLL,(WPARAM) 0,(LPARAM) pixels); +} + +void ToggleWSchecks(int newWS, int oldWS) +{ + // the wordsize popup is the WS_POPUP_IDXth entry in the Opt menu -- COUNTING SEPARATORS + HMENU wsMenu = GetSubMenu (hOptMenu, WS_POPUP_IDX); + CheckMenuItem (wsMenu, oldWS, MF_UNCHECKED | MF_BYPOSITION); + CheckMenuItem (wsMenu, newWS, MF_CHECKED | MF_BYPOSITION); +} + +void MakeListsGray() +{ + COLORREF c = RGB(255,255,255); + if (AtBreak == FALSE) + { + SetStatusText(0, "Running"); + c = RGB(210,210,210); // emulation running -> gui inactive + } + else + SetStatusText(0, "Break"); + + // this sets the background color OUTSIDE the area of the list, for A, D, R + CallWindowProc(wListView, hL[DUMP_WND],LVM_SETBKCOLOR,0,c); + CallWindowProc(wListView, hL[ASM_WND],LVM_SETBKCOLOR,0,c); + CallWindowProc(wListView, hL[REG_WND],LVM_SETBKCOLOR,0,c); + + InvalidateRect(hL[REG_WND],0,TRUE); // Invalidate all 3 of the ListViews -- + InvalidateRect(hL[ASM_WND],0,TRUE); // to force a redraw with the new background + InvalidateRect(hL[DUMP_WND],0,TRUE); +} + +// the following routine needs to replace the entire window's text, +// and then scroll the window to the end of the text +void SetOutWinTxt() +{ + SetWindowText(hE_O,OutWindow); // replace all text with modified buffer +// SendMessage(hE_O,EM_SETSEL,0,-1); // invisibly selects all, sets caret to end + CallWindowProc(wEdit[1], hE_O,EM_SETSEL,OutWinSIZE,OutWinSIZE+1); // sets caret to end only + CallWindowProc(wEdit[1], hE_O,EM_SCROLLCARET,0,0); // scrolls window vertically to caret + // Note: the caret is never actually visible in the Output window +} + +// as it stands, the caret is placed at the beginning of each selected history line, +// but the exact functionality is not important -- just do what is easy +void SelectHistory(int UpDown) +{ + // the History buffer is circular, so wrap 64 to 0, and -1 to 63 + CommandHistoryIdx = (CommandHistoryIdx + UpDown) & 63; + SetWindowText(hE_I,CmdHistory[(CmdHInsert + CommandHistoryIdx) & 63]); + CallWindowProc(*wEdit, hE_I, EM_SETSEL,(WPARAM) -1,(LPARAM) -1); +} + +void ClearInputWindow() +{ + SetWindowText(hE_I,""); +} + +void SetMenuCheckmark (int flag, int CmdIndex) +{ + // only the OptMenu has checkmarks, so don't need to "calculate" the hMenu + if (flag != 0) + CheckMenuItem (hOptMenu, CmdIndex, MF_CHECKED); + else + CheckMenuItem (hOptMenu, CmdIndex, MF_UNCHECKED); +} + +// do a quickie job of converting a menu Command Index into its "parent" menu handle +// -- this doesn't handle the Help menu (nothing there should ever need to be grayed or checked) +HMENU MenuFromIdx (int CmdIndex) +{ + if (CmdIndex < MI_FIRST_VIEWITEM) + return hCmdMenu; + if (CmdIndex < MI_FIRST_OPTITEM) + return hViewMenu; +// if (CmdIndex >= CMD_WS_1 && CmdIndex <= CMD_WS16) HIHI currently the submenu DOES NOT HAVE a global HMENU +// return h???Menu; + return hOptMenu; +} + +// pass in FALSE or 0 to gray out a menu item +void GrayMenuItem (int flag, int CmdIndex) +{ + HMENU hm = MenuFromIdx (CmdIndex); + if (flag != 0) + EnableMenuItem (hm, CmdIndex, MF_ENABLED); + else + EnableMenuItem (hm, CmdIndex, MF_GRAYED); +} + +// kludgy thing to remove OS-dependent code from the front of Fill routines +void StartListUpdate(int listnum) +{ +// ShowWindow(hL[listnum],SW_HIDE); // Hiding the windows causes way too much flicker + UpdInProgress[listnum] = TRUE; + CallWindowProc(wListView,hL[listnum],LVM_DELETEALLITEMS,(WPARAM) 0,(LPARAM) 0); + // then set a flag that list[listnum] is being updated -- prevent paint messages, cpu_loop calls, duplicate calls +} + +void EndListUpdate(int listnum) +{ + UpdInProgress[listnum] = FALSE; // It's OK to paint the listview now + Invalidate(listnum); // -- but the window needs one last paint message + ShowWindow(hL[listnum],SW_SHOW); +} + +void DispMessage(const char *msg, const char *title) +{ + MessageBox (hY, msg, title, MB_OK); +} + +// exit GDT/IDT/Paging/Stack/Tree -- back to the MemDump window +void ShowMemData(bx_bool initting) +{ + int i = 1; + if (LinearDump == FALSE) + i = 0; + LV_COLUMN lvgc = {LVCF_TEXT,0,0,(LPSTR)DC0txt[i]}; + if (initting != FALSE) + { + GrayMenuItem (0, CMD_WPTWR); + GrayMenuItem (0, CMD_WPTRD); + // update column 0 to say whether its physmem or linear + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 0,(LPARAM) &lvgc); + } + lvgc.pszText = tmpcb; + HideTree(); + ShowWindow(hL[DUMP_WND],SW_SHOW); + DViewMode = VIEW_MEMDUMP; // returning to MemDump mode + // need to fix the MemDump column "names" + strcpy (tmpcb,"0"); // rebuild header for col 1 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 1,(LPARAM) &lvgc); + // headers for cols 1 to 3, are just numbers 0 to 2 + *tmpcb = '1'; + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 2,(LPARAM) &lvgc); + *tmpcb = '2'; + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 3,(LPARAM) &lvgc); + strcpy (tmpcb,"Ascii"); // rebuild header for col 17 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 17,(LPARAM) &lvgc); + if (DumpInitted == FALSE) + RedrawColumns(DUMP_WND); + else + { + strcpy (tmpcb,DC0txt[i]); // "real" header for col 0 + CallWindowProc(wListView,hL[DUMP_WND],LVM_SETCOLUMN,(WPARAM) 0,(LPARAM) &lvgc); + PrevDAD = 0; // force a column resize HIHI getting rid of this line? + if (AtBreak == FALSE) + doDumpRefresh = TRUE; + else + ShowData(); // repopulates & resizes all columns + } +} + + +// create the top layer of a parameter tree TreeView +void FillPTree() +{ + HTREEITEM h_PTroot; + extern bx_list_c *root_param; + // Note: don't multithread this display -- the user expects it to complete + doDumpRefresh = FALSE; + ShowWindow(hL[DUMP_WND],SW_HIDE); + TreeView_DeleteAllItems(hT); + // Note: all tree strings are hardcoded to be in tmpcb -- don't change! + strcpy (tmpcb, "bochs parameter tree"); + tvis.hParent = NULL; // create the root node + tvis.item.mask = TVIF_TEXT | TVIF_CHILDREN | TVIF_STATE; + tvis.hInsertAfter = (HTREEITEM)TVI_FIRST; + tvis.item.pszText = tmpcb; + tvis.item.cchTextMax = 250; + tvis.item.cChildren = 1; + tvis.item.state = TVIS_EXPANDED; // it must be expanded to show the first layer + tvis.item.stateMask = TVIS_EXPANDED; + h_PTroot = TreeView_InsertItem(hT,&tvis); + tvis.item.mask = TVIF_TEXT | TVIF_CHILDREN; // don't expand any other layers + int i = root_param->get_size(); + while (--i >= 0) + MakeBL(&h_PTroot, root_param->get(i)); + ShowWindow(hT,SW_SHOW); +} + +void MakeTreeChild (HTREEITEM *h_P, int ChildCount, HTREEITEM *h_TC) +{ + tvis.item.cChildren = 0; + if (ChildCount > 0) + tvis.item.cChildren = 1; + tvis.hParent = *h_P; // create leaves/recurse branches + *h_TC = (HTREEITEM) CallWindowProc(wTreeView,hT,TVM_INSERTITEM,(WPARAM) 0,(LPARAM) &tvis); +} + +bx_bool NewFont() +{ + LOGFONT lf; + if (AtBreak == FALSE) + return FALSE; + GetObject(DefFont,sizeof(lf),&lf); + CHOOSEFONT cF = {0}; + cF.lStructSize = sizeof(cF); + cF.hwndOwner = hY; + cF.lpLogFont = &lf; + cF.Flags = CF_SCREENFONTS | CF_EFFECTS | CF_INITTOLOGFONTSTRUCT; + if (ChooseFont(&cF) == FALSE) + return FALSE; + + ShowWindow(hL[REG_WND],SW_HIDE); // font is changed before MoveLists is called + ShowWindow(hL[ASM_WND],SW_HIDE); + ShowWindow(hL[DUMP_WND],SW_HIDE); + ShowWindow(hS_S,SW_HIDE); + ShowWindow(hE_I,SW_HIDE); + if (*CustomFont != DefFont) // destroy all variations of the prev. font + DeleteObject (*CustomFont); + DeleteObject (CustomFont[1]); + DeleteObject (CustomFont[2]); + DeleteObject (CustomFont[3]); + *CustomFont = CreateFontIndirect(&lf); + // create a bold version of the deffont + lf.lfWeight = FW_BOLD; + CustomFont[1] = CreateFontIndirect (&lf); + // create a bold + italic version of the deffont + lf.lfItalic = 1; + CustomFont[3] = CreateFontIndirect (&lf); + // create an italic version of the deffont (turn off bold) + lf.lfWeight = FW_NORMAL; + CustomFont[2] = CreateFontIndirect (&lf); + + CallWindowProc(wListView,hL[REG_WND],WM_SETFONT,(WPARAM)*CustomFont,MAKELPARAM(TRUE,0)); + CallWindowProc(wListView,hL[ASM_WND],WM_SETFONT,(WPARAM)*CustomFont,MAKELPARAM(TRUE,0)); + CallWindowProc(wListView,hL[DUMP_WND],WM_SETFONT,(WPARAM)*CustomFont,MAKELPARAM(TRUE,0)); + CallWindowProc(*wEdit,hE_I,WM_SETFONT,(WPARAM)*CustomFont,MAKELPARAM(TRUE,0)); + SendMessage(hS_S,WM_SETFONT,(WPARAM)*CustomFont,MAKELPARAM(TRUE,0)); + return TRUE; +} + +// Main Window Proc for our Dialog +LRESULT CALLBACK B_WP(HWND hh,UINT mm,WPARAM ww,LPARAM ll) +{ + unsigned i; + extern bx_bool vgaw_refresh; + + switch(mm) + { + case WM_CREATE: + { + HFONT hF = (HFONT)GetStockObject(OEM_FIXED_FONT); + DefFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); + + // Register Window + char* txt0[] = {"Reg Name","Hex Value","Decimal"}; + LV_COLUMN lvc = {LVCF_SUBITEM | LVCF_TEXT,LVCFMT_LEFT,0,txt0[0]}; + hL[REG_WND] = CreateWindowEx(0,"sLV","",LVStyle[0],0,0,100,100,hh,(HMENU)1001,GetModuleHandle(0),0); + // Note; WM_CREATE only happens once, so don't bother eliminating these SendMessage macros + ListView_InsertColumn(hL[REG_WND],0,&lvc); + lvc.pszText = txt0[1]; + ListView_InsertColumn(hL[REG_WND],1,&lvc); + lvc.pszText = txt0[2]; + ListView_InsertColumn(hL[REG_WND],2,&lvc); + + // Enable the groupID's for the register window +#ifndef IS_WIN98 + // GroupID's are only supported on XP or higher -- verify Win Version + // the group stuff may COMPILE correctly, but still may fail at runtime + Bit8u MajWinVer, MinWinVer; + Bit32u PackedVer = GetVersion(); + bx_bool Group_OK = TRUE; + MajWinVer = (Bit8u)(PackedVer & 0xff); // Major version # is in the LOW byte + MinWinVer = (Bit8u)((PackedVer>>8) & 0xff); + if (MajWinVer > 5 || (MajWinVer == 5 && MinWinVer >= 1)) // is it XP or higher? + { + wchar_t* txt[] = {L"General Purpose",L"Segment",L"Control",L"MMX",L"SSE",L"Debug",L"Test",L"Other"}; + ListView_EnableGroupView(hL[REG_WND],TRUE); + for(i = 0 ; i < 8 ; i++) + { + LVGROUP group1 = {0}; + group1.cbSize = sizeof(LVGROUP); + group1.mask = LVGF_HEADER | LVGF_GROUPID; + group1.pszHeader = txt[i]; + group1.iGroupId = i; + ListView_InsertGroup(hL[REG_WND], -1, &group1); + } + } + else + Group_OK = FALSE; +#endif + SendMessage(hL[REG_WND], LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT); + + // Asm Window + hL[ASM_WND] = CreateWindowEx(0,"sLV","",LVStyle[1] | WS_BORDER,0,0,1,1,hh,(HMENU)1000,GetModuleHandle(0),0); + CurCenterList = 1; // ASM window starts with the border + char* txt3[] = {"L.Address","Bytes","Mnemonic"}; + + lvc.pszText = txt3[0]; + ListView_InsertColumn(hL[ASM_WND],0,&lvc); + lvc.pszText = txt3[1]; + ListView_InsertColumn(hL[ASM_WND],1,&lvc); + lvc.pszText = txt3[2]; + ListView_InsertColumn(hL[ASM_WND],2,&lvc); +// SendMessage(hL[ASM_WND], LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER, +// LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER); + + // Input / Output + hE_I = CreateWindowEx(0,"edit","",WS_CHILD | WS_VISIBLE,0,0,1,1,hh,(HMENU)1004,GetModuleHandle(0),0); + // without AUTOHSCROLL, output window text is always supposed to wordwrap + hE_O = CreateWindowEx(0,"edit","",WS_VSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | ES_MULTILINE,0,0,1,1,hh,(HMENU)1003,GetModuleHandle(0),0); + SendMessage(hE_I,WM_SETFONT,(WPARAM)DefFont, MAKELPARAM(TRUE,0)); + SendMessage(hE_O,WM_SETFONT,(WPARAM)hF,MAKELPARAM(TRUE,0)); + // subclass both the edit windows together + *wEdit = (WNDPROC) SetWindowLong (hE_I,GWL_WNDPROC,(WPARAM) ThisEditProc); + wEdit[1] = (WNDPROC) SetWindowLong (hE_O,GWL_WNDPROC,(WPARAM) ThisEditProc); + + // Status + hS_S = CreateWindowEx(0,STATUSCLASSNAME,"",WS_CHILD | WS_VISIBLE,0,0,1,1,hh,(HMENU)1006,GetModuleHandle(0),0); + SendMessage(hS_S,WM_SETFONT,(WPARAM)DefFont,MAKELPARAM(TRUE,0)); + int p[4] = {100,250,400,-1}; + SendMessage(hS_S,SB_SETPARTS,4,(LPARAM)p); + + // Dump Window + hL[DUMP_WND] = CreateWindowEx(0,"sLV","",LVStyle[2],0,0,100,100,hh,(HMENU)1002,GetModuleHandle(0),0); + //SendMessage(hL[DUMP_WND],WM_SETFONT,(WPARAM)DefFont,MAKELPARAM(TRUE,0)); + strcpy (bigbuf, "Address"); + lvc.pszText = bigbuf; + ListView_InsertColumn(hL[DUMP_WND],0,&lvc); + bigbuf[1] = 0; // use bigbuf to create 1 byte "strings" + for(i = 1 ; i < 17 ; i++) + { + if (i < 11) + *bigbuf = i - 1 + '0'; + else + *bigbuf = i - 11 + 'A'; + ListView_InsertColumn(hL[DUMP_WND],i,&lvc); + } + strcpy (bigbuf, "Ascii"); + ListView_InsertColumn(hL[DUMP_WND],17,&lvc); +// SendMessage(hL[DUMP_WND], LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER, HIHI +// LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER); + +#ifndef IS_WIN98 + if (Group_OK) + { + wchar_t* txt5[] = {L"16-bit code",L"64-bit code",L"32-bit code",L"16-bit data",L"64-bit data",L"32-bit data",L"Illegal"}; + ListView_EnableGroupView(hL[DUMP_WND],TRUE); + LVGROUP group1 = {0}; + group1.cbSize = sizeof(LVGROUP); + group1.mask = LVGF_HEADER | LVGF_GROUPID; + for(int i = 0 ; i < 9 ; i++) + { + group1.pszHeader = txt5[i]; + group1.iGroupId = i; + ListView_InsertGroup(hL[DUMP_WND], -1, &group1); + } + } +#endif + hT = CreateWindowEx(0,WC_TREEVIEW,"",TVS_DISABLEDRAGDROP | TVS_HASLINES | TVS_HASBUTTONS | WS_CHILD | WS_BORDER, + 0,0,1,1,hh,(HMENU)1010,GetModuleHandle(0),0); + //SendMessage(hT,WM_SETFONT,(WPARAM)DefFont,MAKELPARAM(TRUE,0)); + // Use the same messagehandler for the tree window as for ListViews + wTreeView = (WNDPROC) SetWindowLong (hT,GWL_WNDPROC,(WPARAM) LVProc); + + // create button rows + int j = BX_SMP_PROCESSORS; + Bit32u WStyle = WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON; + if (j > 1) + { + while (--j > 0) + { + sprintf (bigbuf, "cpu%d",j); // number all the CPU buttons + hCPUt[j] = CreateWindowEx(0,"sBtn",bigbuf,WStyle,0,0,1,1,hh,(HMENU)(1030+j),GetModuleHandle(0),0); + } + strcpy (bigbuf, "CPU0"); // Handle CPU0 specially -- it is "selected" + hCPUt[0] = CreateWindowEx(0,"sBtn",bigbuf,WStyle,0,0,1,1,hh,(HMENU)MULTICPU_BTN_BASE,GetModuleHandle(0),0); + } + j = 5; + while (--j >= 0) + hBTN[j] = CreateWindowEx(0,"sBtn",BTxt[j],WStyle,0,0,1,1,hh,(HMENU)(BTN_BASE+j),GetModuleHandle(0),0); + + // any other OS-specific GUI initialization goes here: + // Autosize a few columns once + // RegName column + CallWindowProc(wListView, hL[REG_WND], LVM_SETCOLUMNWIDTH, 0, LVSCW_AUTOSIZE_USEHEADER); + // "bytes" column + CallWindowProc(wListView, hL[ASM_WND], LVM_SETCOLUMNWIDTH, 1, LVSCW_AUTOSIZE_USEHEADER); + // and the empty MemDump columns + for (int i = 0; i < 17; i++) + CallWindowProc(wListView, hL[DUMP_WND], LVM_SETCOLUMNWIDTH, i, LVSCW_AUTOSIZE_USEHEADER); + // load the extra resizing/docking cursors + hCursResize = LoadCursor (NULL,IDC_SIZEWE); + hCursDock = LoadCursor (NULL,IDC_CROSS); + SetTimer(hh,2,500,NULL); // request timer ticks every half a second (to update VGAW) + UpdInProgress[0] = FALSE; + UpdInProgress[1] = FALSE; + UpdInProgress[2] = FALSE; + ResizeColmns = TRUE; // do the initial resize on hex, address columns + // Input window caret is created in SetSizeIOS, when the WM_SIZE message arrives + break; + } + + case WM_SIZE: + { + RECT rc; + int i, j, k; + bx_bool unchanged = FALSE; + + if (hY == NULL) // sometimes WM_SIZE is called before OSInit completes! + hY = hh; + // Mapping mode is MM_TEXT (Def), so Yvalues increase DOWN, all values are in pixels. + GetClientRect(hY,&rc); + // don't "resize" on minimize, if window is too small, or "unchanged" + if (CurYSize == (unsigned int)rc.bottom && CurXSize == (unsigned int)rc.right) + unchanged = TRUE; + if (rc.bottom > 100 && rc.right > 150 && unchanged == FALSE) + { + // set up the Input/Output/Status windows + CurYSize = rc.bottom; + CurXSize = rc.right; + SetSizeIOS(CurXSize,CurYSize); + + // need to recalculate List widths, with the same proportions as before + i = ListWidthPix[0] + ListWidthPix[1] + ListWidthPix[2]; + if (i == 0) + i = 1; + j = (ListWidthPix[2] * CurXSize) / i; + k = (ListWidthPix[1] * CurXSize) / i; + ListWidthPix[0] = CurXSize - k - j; // Register list + ListWidthPix[1] = k; // Asm + ListWidthPix[2] = j; // MemDump + MoveLists(); + } + break; + } + + case WM_CHAR: + { + if (ww != VK_RETURN) + CallWindowProc(*wEdit, hE_I, WM_CHAR, (WPARAM) ww, (LPARAM) ll); + break; + } + + case WM_SYSKEYDOWN: // ww == key + ALT + { + HotKey ((int)ww, -1, 0, 0); // currently, no hotkeys have both Alt and something else + break; + } + + case WM_KEYDOWN: + { + int Control = GetKeyState(VK_CONTROL); // key is down if val is negative + int Shift = GetKeyState(VK_SHIFT); + if (HotKey ((int)ww, 0, Shift, Control) < 0) + CallWindowProc (*wEdit, hE_I, WM_KEYDOWN, (LPARAM) ww, (LPARAM) ll); + return 0; + } + case WM_COMMAND: + { + int LW = LOWORD(ww); + + if (LW >= BTN_BASE && LW <= BTN_BASE +4) // convert button IDs to command IDs + LW = BtnLkup [LW - BTN_BASE]; + else if (LW >= MULTICPU_BTN_BASE && LW < MULTICPU_BTN_BASE + BX_MAX_SMP_THREADS_SUPPORTED) + { + unsigned int newCPU = LW - MULTICPU_BTN_BASE; + if (CurrentCPU != newCPU) + { + // change text on CurrentCPU button to lowercase + strcpy (tmpcb, "cpu0"); + tmpcb[3] = CurrentCPU + '0'; + SendMessage (hCPUt[CurrentCPU],WM_SETTEXT,(WPARAM) 0 ,(LPARAM) tmpcb); + // change text on newCPU button to UPPERCASE + strcpy (tmpcb, "CPU0"); + tmpcb[3] = newCPU + '0'; + SendMessage (hCPUt[newCPU],WM_SETTEXT,(WPARAM) 0 ,(LPARAM) tmpcb); + CurrentCPU = newCPU; + BottomAsmLA = ~0; // force an ASM autoload, to repaint + PrevPtime = 0; // force a full update + if (AtBreak != FALSE) // if at a break, pretend it just happened + OnBreak(); // refresh the ASM and Register windows + } + return 0; + } + if (LW >= CMD_BREAK && LW < CMD_MODEB) // Does not include "Step"s or Options + { + if (AtBreak == FALSE) + { + SIM->debug_break(); // On a menu click always break (with some exceptions) + } + } + ActivateMenuItem (LW); // run the code to perform the selected menu task + + return 0; + } + case WM_NOTIFY: + { + // key down + NMHDR* n = (NMHDR*)ll; + if (n->code == LVN_KEYDOWN) + { + NMLVKEYDOWN* key = (NMLVKEYDOWN*)ll; // pass any keystrokes from listview up to parent + SendMessage(hh,WM_KEYDOWN,key->wVKey,0); + } + if (n->code == NM_CUSTOMDRAW && n->hwndFrom == hL[ASM_WND]) // custom drawing of ASM window + { + // highlight the breakpoints, and current opcode, if any + NMLVCUSTOMDRAW *d = (NMLVCUSTOMDRAW *) ll; + if (d->nmcd.dwDrawStage == CDDS_PREPAINT) + return CDRF_NOTIFYITEMDRAW; + + if (d->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) // select the "active" ASM line + { + unsigned int fgclr = 0; // normal text color is black + d->clrTextBk = RGB(255,255,255); // background is white + if (!AtBreak) + d->clrTextBk = RGB(210,210,210); // unless sim is "running" + + bx_address h = (bx_address) AsmLA[d->nmcd.dwItemSpec]; + if (h == CurrentAsmLA) + fgclr = 1; // current opcode is colored dark green + int j= BreakCount; + while (--j >= 0) // loop over all breakpoints + { + // brk list is sorted -- if the value goes too low, end the loop + // And I know for a fact that some complers are soooo stupid that they + // will repeat the following test twice, unless you force them not to. + bx_address i = BrkLAddr[j] - h; +// if (BrkLAddr[j] < h) + if (i < 0) + j = 0; // force the loop to end if it goes too far +// else if (BrkLAddr[j] == h) + else if (i == 0) + fgclr |= 2; // change color if on a breakpoint + } + d->clrText = AsmColors[fgclr]; + if (fgclr != 0) // if this row has color, process its subitems further + { + SetWindowLong(hh, DWL_MSGRESULT, CDRF_NOTIFYSUBITEMDRAW); + return CDRF_NOTIFYSUBITEMDRAW; + } + } + else if (d->nmcd.dwDrawStage == (CDDS_SUBITEM | CDDS_ITEMPREPAINT) && d->iSubItem == 2) + { + // add extra visual feedback to a "colored" ASM mnemonic cell + // -- but don't try to recalculate breakpoints! Just "guess" from the color. + int fontattrib = 3; + if (d->clrText == AsmColors[1]) // green = current RIP = bold + fontattrib = 1; + else if (d->clrText == AsmColors[2]) // red = brkpt = italic + fontattrib = 2; + SelectObject (d->nmcd.hdc, CustomFont[fontattrib]); + return CDRF_NEWFONT | CDRF_DODEFAULT; + } + break; + } + if (n->code == NM_CUSTOMDRAW && n->hwndFrom == hL[DUMP_WND]) // custom drawing of data window + { + NMLVCUSTOMDRAW *d = (NMLVCUSTOMDRAW *) ll; + if (d->nmcd.dwDrawStage == CDDS_PREPAINT) + return CDRF_NOTIFYITEMDRAW; + + d->clrTextBk = RGB(255,255,255); // background is white + if (!AtBreak) + d->clrTextBk = RGB(210,210,210); // unless sim is "running" + + else if (DViewMode == VIEW_STACK && d->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) + { + // highlight changed lines in stack + int j = d->nmcd.dwItemSpec; + if (j < 0 || j >= STACK_ENTRIES) // make sure the line # is legal + ; + else if (StackEntChg[j] != FALSE) + d->clrText = RGB(255,0,0); // changed entry = red + } + + if (DumpAlign != 1 || LinearDump != FALSE || DViewMode != VIEW_MEMDUMP) + break; + + // highlight any physical watchpoints in physdump mode + if (d->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) + { + SetWindowLong(hh, DWL_MSGRESULT, CDRF_NOTIFYSUBITEMDRAW); + return CDRF_NOTIFYSUBITEMDRAW; + } + + if (d->nmcd.dwDrawStage == (CDDS_SUBITEM | CDDS_ITEMPREPAINT)) + { + d->clrText = RGB(0,0,0); // assume black text + if (d->iSubItem != 0) + { + // For each subitem, calculate its equivalent physmem address + bx_phy_address h = (bx_phy_address) DumpStart + + 16*(d->nmcd.dwItemSpec) + d->iSubItem -1; + int j = num_write_watchpoints; + int i = num_read_watchpoints; + while (j > 0) + { + if (write_watchpoint[--j].addr == h) + { + d->clrTextBk = RGB(0,0,0); // black background + d->clrText = RGB(255,0,150); // write watchpoint + j = -1; // on a match j<0 -- else j == 0 + } + } + while (--i >= 0) + { + if (read_watchpoint[i].addr == h) + { + if (j < 0) // BOTH read and write + d->clrText = RGB(0,170,255); + else + { + d->clrTextBk = RGB(0,0,0); // black background + d->clrText = RGB(130,255,0); // read watchpoint + } + i = 0; // end the loop on a match + } + } + } + } + break; + } + if (n->code == NM_CUSTOMDRAW && n->hwndFrom == hL[REG_WND]) // custom drawing of register window + { + // highlight changed registers + NMLVCUSTOMDRAW *d = (NMLVCUSTOMDRAW *) ll; + if (d->nmcd.dwDrawStage == CDDS_PREPAINT) + return CDRF_NOTIFYITEMDRAW; + + if (d->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) + { + int i = d->nmcd.dwItemSpec; + Bit8u ClrFlgs = RegColor[ RitemToRnum[i] ]; + d->clrText = RGB(0,0,0); + d->clrTextBk = RGB(255,255,255); + + // RitemToRnum converts a ListView row number to the corresponding Register number. + // RegColor has the 0x80 bit set if the register is supposed to be red. + // Background color index is in the low nibble of ClrFlgs/RegColor. + if (SeeRegColors != FALSE) + d->clrTextBk = ColorList[ClrFlgs &7]; + if ((ClrFlgs & 0x80) != 0) // should this register be red? + d->clrText = RGB(255,0,0); + if (!AtBreak) + d->clrTextBk = RGB(210,210,210); // gray out the background if "running" + + } + break; + } + if (n->code == NM_DBLCLK) + { + if (AtBreak == FALSE) + break; + + if (n->hwndFrom == hL[REG_WND]) + ChangeReg(); + else if (n->hwndFrom == hL[ASM_WND]) // doubleclick a breakpoint on ASM window + SetBreak(SelectedEntry); + + else if (n->hwndFrom == hL[DUMP_WND]) + { + if (DViewMode == VIEW_MEMDUMP) // Change values in memory locations + { + if (GetKeyState(VK_SHIFT) < 0) + SetWatchpoint(&num_write_watchpoints,write_watchpoint); + + else if (GetKeyState(VK_MENU) < 0) // ALT keys + SetWatchpoint(&num_read_watchpoints,read_watchpoint); + + else + { + int L = CallWindowProc(wListView, hL[DUMP_WND], LVM_GETNEXTITEM,(WPARAM) -1,MAKELPARAM(LVNI_SELECTED, 0)); + if (L >= 0) + SetMemLine(L); + } + } + else if (DViewMode == VIEW_BREAK) // delete breakpoint in Break window + { + // HIHI I should be using SelectedEntry, instead of SelectedBID, I think + // HIHI -- the BID variable is not making my life easier + i = SelectedBID & 0xf; + if (SelectedBID >= 0x80000) // read watchpoint + { + if (RWP_Snapshot[i] == read_watchpoint[i].addr) + DelWatchpoint(read_watchpoint, &num_read_watchpoints, i); + } + else if (SelectedBID >= 0x40000) // write watchpoint + { + if (WWP_Snapshot[i] == write_watchpoint[i].addr) + DelWatchpoint(write_watchpoint, &num_write_watchpoints, i); + } + else + { + i = SelectedBID & 0xffff; + if (i != 0) // determine the breakpoint TYPE + { + if (SelectedBID > 0x20000) + bx_dbg_del_pbreak(i); + else if (SelectedBID > 0x10000) + bx_dbg_del_vbreak(i); + else // linear brkpt + bx_dbg_del_lbreak(SelectedBID); + } + ParseBkpt(); + InvalidateRect(hL[ASM_WND],0,TRUE); // breakpoint colors may have changed + } + RefreshDataWin(); + } + } + } + break; + } + case WM_TIMER: + { + if (PO_Tdelay > 0) // output window is delaying display of a partial line? + { + if (--PO_Tdelay == 0) // on a timeout, add a lf to complete the line + ParseIDText ("\n"); + } + UpdateStatus(); + vgaw_refresh = TRUE; // ask bochs to update its own VGA window + break; + } + case WM_NCMOUSEMOVE: + { + // turn off any sizing operation if the cursor strays off the listviews + Sizing = 0; + // also turn off any half-completed mouseclicks + xClick = -1; + break; + } + case WM_CLOSE: + { + bx_user_quit = 1; + SIM->debug_break(); + KillTimer(hh,2); + if (*CustomFont != DefFont) + DeleteObject (*CustomFont); + DeleteObject (CustomFont[1]); + DeleteObject (CustomFont[2]); + DeleteObject (CustomFont[3]); + DestroyWindow(hY); + break; + } + } + return DefWindowProc(hh,mm,ww,ll); +} + +void HitBreak() +{ + // Sim is at a "break". + if (AtBreak == FALSE) + { + AtBreak = TRUE; + StatusChange = TRUE; + } + if (doDumpRefresh != FALSE) + RefreshDataWin(); + OnBreak(); +} + +// This function must be called immediately after bochs starts +bx_bool OSInit() +{ + TEXTMETRIC tm; + InitCommonControls(); // start the common control dll + SpListView(); // create superclass for listviews to use when they are created + SpBtn(); // same for buttons + WNDCLASSEX wC = {0}; + wC.cbSize = sizeof(wC); + wC.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); + hCursArrow = LoadCursor(NULL,IDC_ARROW); + wC.hCursor = hCursArrow; + wC.hInstance = GetModuleHandle(0); + wC.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS | CS_DBLCLKS; + wC.lpfnWndProc = B_WP; + wC.cbWndExtra = sizeof(void*); + wC.lpszClassName = "bochs_dbg_x"; + wC.hIcon = LoadIcon(GetModuleHandle(0),"ICON_D"); + wC.hIconSm = LoadIcon(GetModuleHandle(0),"ICON_D"); + RegisterClassEx(&wC); + HMENU hTopMenu = LoadMenu(GetModuleHandle(0),"MENU_1"); // build the menus from the resource + hOptMenu = GetSubMenu (hTopMenu, 2); // need the main menu handles + hViewMenu = GetSubMenu (hTopMenu, 1); + hCmdMenu = GetSubMenu (hTopMenu, 0); + hY = CreateWindowEx(0,"bochs_dbg_x","Bochs Enhanced Debugger", + WS_OVERLAPPEDWINDOW | WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, + 0,hTopMenu,GetModuleHandle(0),0); + if (hY == NULL) + return FALSE; + HDC hdc = GetDC (hY); + *CustomFont = DefFont; // create the deffont with modded attributes (bold, italic) + GetTextFace(hdc, LF_FULLFACESIZE, mylf.lfFaceName); // (constant is max length of a fontname) + GetTextMetrics (hdc, &tm); + ReleaseDC (hY, hdc); + mylf.lfHeight = -(tm.tmHeight); // request a TOTAL font height of tmHeight + // create a bold version of the deffont + mylf.lfWeight = FW_BOLD; + CustomFont[1] = CreateFontIndirect (&mylf); + // create a bold + italic version of the deffont + mylf.lfItalic = 1; + CustomFont[3] = CreateFontIndirect (&mylf); + // create an italic version of the deffont (turn off bold) + mylf.lfWeight = FW_NORMAL; + CustomFont[2] = CreateFontIndirect (&mylf); + return TRUE; +} + +// recurse displaying each leaf/branch of param_tree -- with values for each leaf +void MakeBL(HTREEITEM *h_P, bx_param_c *p) +{ + HTREEITEM h_new; + bx_list_c *as_list = NULL; + int i = 0; + strcpy (tmpcb, p->get_name()); + int j = strlen (tmpcb); + switch (p->get_type()) + { + case BXT_PARAM_NUM: + if (((bx_param_num_c*)p)->get_base() == BASE_DEC) + sprintf (tmpcb + j,": " FMT_LL "d",((bx_param_num_c*)p)->get64()); + else + sprintf (tmpcb + j,": 0x" FMT_LL "X",((bx_param_num_c*)p)->get64()); + break; + case BXT_LIST: + as_list = (bx_list_c *)p; + i = as_list->get_size(); + break; + case BXT_PARAM_BOOL: + sprintf (tmpcb + j,": %s",((bx_param_bool_c*)p)->get()?"true":"false"); + break; + case BXT_PARAM_ENUM: + sprintf (tmpcb + j,": %s",((bx_param_enum_c*)p)->get_selected()); + break; + case BXT_PARAM_STRING: + if (((bx_param_string_c*)p)->get_options() & bx_param_string_c::RAW_BYTES) + { + char *cp = tmpcb + j; + unsigned char *rp = (unsigned char *)((bx_param_string_c*)p)->getptr(); + char sc = ((bx_param_string_c*)p)->get_separator(); + int k = ((bx_param_string_c*)p)->get_maxsize(); + *(cp++) = ':'; + *(cp++) = ' '; + while (k-- > 0) + { + *(cp++) = AsciiHex[2* *rp]; + *(cp++) = AsciiHex[2* *rp + 1]; + *(cp++) = sc; + } + *--cp = 0; // overwrite the last separator char + } + else + sprintf (tmpcb + j,": %s",((bx_param_string_c*)p)->getptr()); + break; + case BXT_PARAM_DATA: + sprintf (tmpcb + j,": binary data, size=%d",((bx_shadow_data_c*)p)->get_size()); + } + MakeTreeChild (h_P, i, &h_new); + if (i > 0) + { + while (--i >= 0) + MakeBL(&h_new, as_list->get(i)); // recurse for all children that are lists + } +} + +#endif diff --git a/bochs/gui/win32dialog.cc b/bochs/gui/win32dialog.cc new file mode 100644 index 00000000..f0eb837e --- /dev/null +++ b/bochs/gui/win32dialog.cc @@ -0,0 +1,791 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#include "win32dialog.h" + +#if BX_USE_TEXTCONFIG && defined(WIN32) && (BX_WITH_WIN32 || BX_WITH_SDL) + +#include "bochs.h" +#include "param_names.h" +#include "win32res.h" +#include "win32paramdlg.h" + +const char log_choices[5][16] = {"ignore", "log", "ask user", "end simulation", "no change"}; +#if BX_DEBUGGER +extern char *debug_cmd; +extern bx_bool debug_cmd_ready; +extern bx_bool vgaw_refresh; +#endif + +char *backslashes(char *s) +{ + if (s != NULL) { + while (*s != 0) { + if (*s == '/') *s = '\\'; + s++; + } + } + return s; +} + +HWND GetBochsWindow() +{ + HWND hwnd; + + hwnd = FindWindow("Bochs for Windows", NULL); + if (hwnd == NULL) { + hwnd = GetForegroundWindow(); + } + return hwnd; +} + +BOOL CreateImage(HWND hDlg, int sectors, const char *filename) +{ + if (sectors < 1) { + MessageBox(hDlg, "The disk size is invalid.", "Invalid size", MB_ICONERROR); + return FALSE; + } + if (lstrlen(filename) < 1) { + MessageBox(hDlg, "You must type a file name for the new disk image.", "Bad filename", MB_ICONERROR); + return FALSE; + } + int ret = SIM->create_disk_image (filename, sectors, 0); + if (ret == -1) { // already exists + int answer = MessageBox(hDlg, "File exists. Do you want to overwrite it?", + "File exists", MB_YESNO); + if (answer == IDYES) + ret = SIM->create_disk_image (filename, sectors, 1); + else + return FALSE; + } + if (ret == -2) { + MessageBox(hDlg, "I could not create the disk image. Check for permission problems or available disk space.", "Failed", MB_ICONERROR); + return FALSE; + } + return TRUE; +} + +int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) +{ + char path[MAX_PATH]; + + if (uMsg == BFFM_INITIALIZED) { + GetCurrentDirectory(MAX_PATH, path); + SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)path); + } + return 0; +} + +#ifndef BIF_NEWDIALOGSTYLE +#define BIF_NEWDIALOGSTYLE 0 +#endif + +int BrowseDir(const char *Title, char *result) +{ + BROWSEINFO browseInfo; + LPITEMIDLIST ItemIDList; + int r = -1; + + memset(&browseInfo,0,sizeof(BROWSEINFO)); + browseInfo.hwndOwner = GetBochsWindow(); + browseInfo.pszDisplayName = result; + browseInfo.lpszTitle = (LPCSTR)Title; + browseInfo.ulFlags = BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS; + browseInfo.lpfn = BrowseCallbackProc; + ItemIDList = SHBrowseForFolder(&browseInfo); + if (ItemIDList != NULL) { + *result = 0; + if (SHGetPathFromIDList(ItemIDList, result)) { + if (result[0]) r = 0; + } + // free memory used + IMalloc * imalloc = 0; + if (SUCCEEDED(SHGetMalloc(&imalloc))) { + imalloc->Free(ItemIDList); + imalloc->Release(); + } + } + return r; +} + +static BOOL CALLBACK LogAskProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + BxEvent *event; + int level; + + switch (msg) { + case WM_INITDIALOG: + event = (BxEvent*)lParam; + level = event->u.logmsg.level; + SetWindowText(hDlg, SIM->get_log_level_name(level)); + SetWindowText(GetDlgItem(hDlg, IDASKDEV), event->u.logmsg.prefix); + SetWindowText(GetDlgItem(hDlg, IDASKMSG), event->u.logmsg.msg); + SendMessage(GetDlgItem(hDlg, IDASKLIST), LB_ADDSTRING, 0, (LPARAM)"Continue"); + SendMessage(GetDlgItem(hDlg, IDASKLIST), LB_ADDSTRING, 0, (LPARAM)"Continue and don't ask again"); + SendMessage(GetDlgItem(hDlg, IDASKLIST), LB_ADDSTRING, 0, (LPARAM)"Kill simulation"); + SendMessage(GetDlgItem(hDlg, IDASKLIST), LB_ADDSTRING, 0, (LPARAM)"Abort (dump core)"); +#if BX_DEBUGGER + SendMessage(GetDlgItem(hDlg, IDASKLIST), LB_ADDSTRING, 0, (LPARAM)"Continue and return to debugger"); +#endif + SendMessage(GetDlgItem(hDlg, IDASKLIST), LB_SETCURSEL, 2, 0); + SetFocus(GetDlgItem(hDlg, IDASKLIST)); + return FALSE; + case WM_CLOSE: + EndDialog(hDlg, BX_LOG_ASK_CHOICE_DIE); + break; + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDOK: + EndDialog(hDlg, SendMessage(GetDlgItem(hDlg, IDASKLIST), LB_GETCURSEL, 0, 0)); + break; + case IDCANCEL: + EndDialog(hDlg, BX_LOG_ASK_CHOICE_DIE); + break; + } + } + return FALSE; +} + +static BOOL CALLBACK StringParamProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + static bx_param_string_c *param; + char buffer[512]; + const char *title; + + switch (msg) { + case WM_INITDIALOG: + param = (bx_param_string_c *)lParam; + title = param->get_label(); + if ((title == NULL) || (strlen(title) == 0)) { + title = param->get_name(); + } + SetWindowText(hDlg, title); + SetWindowText(GetDlgItem(hDlg, IDSTRING), param->getptr()); + SendMessage(GetDlgItem(hDlg, IDSTRING), EM_SETLIMITTEXT, param->get_maxsize(), 0); + return TRUE; + break; + case WM_CLOSE: + EndDialog(hDlg, -1); + break; + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDOK: + GetDlgItemText(hDlg, IDSTRING, buffer, param->get_maxsize() + 1); + param->set(buffer); + EndDialog(hDlg, 1); + break; + case IDCANCEL: + EndDialog(hDlg, -1); + break; + } + } + return FALSE; +} + +static BOOL CALLBACK FloppyDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + static bx_param_filename_c *param; + static bx_param_bool_c *status, *readonly; + static bx_param_enum_c *devtype; + static bx_param_enum_c *mediatype; + char mesg[MAX_PATH]; + char path[MAX_PATH]; + char pname[80]; + const char *title; + int i, cap; + + switch (msg) { + case WM_INITDIALOG: + param = (bx_param_filename_c *)lParam; + param->get_param_path(pname, 80); + if (!strcmp(pname, BXPN_FLOPPYA_PATH)) { + status = SIM->get_param_bool(BXPN_FLOPPYA_STATUS); + readonly = SIM->get_param_bool(BXPN_FLOPPYA_READONLY); + devtype = SIM->get_param_enum(BXPN_FLOPPYA_DEVTYPE); + mediatype = SIM->get_param_enum(BXPN_FLOPPYA_TYPE); + } else { + status = SIM->get_param_bool(BXPN_FLOPPYB_STATUS); + readonly = SIM->get_param_bool(BXPN_FLOPPYB_READONLY); + devtype = SIM->get_param_enum(BXPN_FLOPPYB_DEVTYPE); + mediatype = SIM->get_param_enum(BXPN_FLOPPYB_TYPE); + } + cap = devtype->get() - (int)devtype->get_min(); + SetWindowText(GetDlgItem(hDlg, IDDEVTYPE), floppy_devtype_names[cap]); + i = 0; + while (floppy_type_names[i] != NULL) { + SendMessage(GetDlgItem(hDlg, IDMEDIATYPE), CB_ADDSTRING, 0, (LPARAM)floppy_type_names[i]); + SendMessage(GetDlgItem(hDlg, IDMEDIATYPE), CB_SETITEMDATA, i, (LPARAM)(mediatype->get_min() + i)); + i++; + } + cap = mediatype->get() - (int)mediatype->get_min(); + SendMessage(GetDlgItem(hDlg, IDMEDIATYPE), CB_SETCURSEL, cap, 0); + if (status->get()) { + SendMessage(GetDlgItem(hDlg, IDSTATUS), BM_SETCHECK, BST_CHECKED, 0); + } + if (readonly->get()) { + SendMessage(GetDlgItem(hDlg, IDREADONLY), BM_SETCHECK, BST_CHECKED, 0); + } + lstrcpy(path, param->getptr()); + title = param->get_label(); + if (!title) title = param->get_name(); + SetWindowText(hDlg, title); + if (lstrlen(path) && lstrcmp(path, "none")) { + SetWindowText(GetDlgItem(hDlg, IDPATH), path); + } + return TRUE; + break; + case WM_CLOSE: + EndDialog(hDlg, -1); + return TRUE; + break; + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDBROWSE: + GetDlgItemText(hDlg, IDPATH, path, MAX_PATH); + if (AskFilename(hDlg, param, path) > 0) { + SetWindowText(GetDlgItem(hDlg, IDPATH), path); + SendMessage(GetDlgItem(hDlg, IDSTATUS), BM_SETCHECK, BST_CHECKED, 0); + SendMessage(GetDlgItem(hDlg, IDMEDIATYPE), CB_SELECTSTRING, (WPARAM)-1, (LPARAM)"auto"); + EnableWindow(GetDlgItem(hDlg, IDCREATE), FALSE); + } + return TRUE; + break; + case IDOK: + status->set(0); + if (SendMessage(GetDlgItem(hDlg, IDSTATUS), BM_GETCHECK, 0, 0) == BST_CHECKED) { + GetDlgItemText(hDlg, IDPATH, path, MAX_PATH); + if (lstrlen(path) == 0) { + lstrcpy(path, "none"); + } + } else { + lstrcpy(path, "none"); + } + readonly->set(SendMessage(GetDlgItem(hDlg, IDREADONLY), BM_GETCHECK, 0, 0) == BST_CHECKED); + param->set(path); + i = SendMessage(GetDlgItem(hDlg, IDMEDIATYPE), CB_GETCURSEL, 0, 0); + cap = SendMessage(GetDlgItem(hDlg, IDMEDIATYPE), CB_GETITEMDATA, i, 0); + mediatype->set(cap); + if (lstrcmp(path, "none")) { + status->set(1); + } + EndDialog(hDlg, 1); + return TRUE; + break; + case IDCANCEL: + EndDialog(hDlg, -1); + return TRUE; + break; + case IDMEDIATYPE: + if (HIWORD(wParam) == CBN_SELCHANGE) { + i = SendMessage(GetDlgItem(hDlg, IDMEDIATYPE), CB_GETCURSEL, 0, 0); + EnableWindow(GetDlgItem(hDlg, IDCREATE), (floppy_type_n_sectors[i] > 0)); + } + break; + case IDCREATE: + GetDlgItemText(hDlg, IDPATH, path, MAX_PATH); + backslashes(path); + i = SendMessage(GetDlgItem(hDlg, IDMEDIATYPE), CB_GETCURSEL, 0, 0); + if (CreateImage(hDlg, floppy_type_n_sectors[i], path)) { + wsprintf(mesg, "Created a %s disk image called %s", floppy_type_names[i], path); + MessageBox(hDlg, mesg, "Image created", MB_OK); + } + return TRUE; + break; + } + } + return FALSE; +} + +void SetStandardLogOptions(HWND hDlg) +{ + int level, idx; + int defchoice[5]; + + for (level=0; level<5; level++) { + int mod = 0; + int first = SIM->get_log_action (mod, level); + BOOL consensus = true; + // now compare all others to first. If all match, then use "first" as + // the initial value. + for (mod=1; modget_n_log_modules(); mod++) { + if (first != SIM->get_log_action (mod, level)) { + consensus = false; + break; + } + } + if (consensus) + defchoice[level] = first; + else + defchoice[level] = 4; + } + for (level=0; level<5; level++) { + idx = 0; + SendMessage(GetDlgItem(hDlg, IDLOGEVT1+level), CB_RESETCONTENT, 0, 0); + for (int action=0; action<5; action++) { + if (((level > 1) && (action > 0)) || ((level < 2) && ((action < 2) || (action > 3)))) { + SendMessage(GetDlgItem(hDlg, IDLOGEVT1+level), CB_ADDSTRING, 0, (LPARAM)log_choices[action]); + SendMessage(GetDlgItem(hDlg, IDLOGEVT1+level), CB_SETITEMDATA, idx, action); + if (action == defchoice[level]) { + SendMessage(GetDlgItem(hDlg, IDLOGEVT1+level), CB_SETCURSEL, idx, 0); + } + idx++; + } + } + } + EnableWindow(GetDlgItem(hDlg, IDDEVLIST), FALSE); +} + +void SetAdvancedLogOptions(HWND hDlg) +{ + int idx, level, mod; + + idx = SendMessage(GetDlgItem(hDlg, IDDEVLIST), LB_GETCURSEL, 0, 0); + mod = SendMessage(GetDlgItem(hDlg, IDDEVLIST), LB_GETITEMDATA, idx, 0); + for (level=0; level<5; level++) { + idx = 0; + SendMessage(GetDlgItem(hDlg, IDLOGEVT1+level), CB_RESETCONTENT, 0, 0); + for (int action=0; action<4; action++) { + if (((level > 1) && (action > 0)) || ((level < 2) && (action < 2))) { + SendMessage(GetDlgItem(hDlg, IDLOGEVT1+level), CB_ADDSTRING, 0, (LPARAM)log_choices[action]); + SendMessage(GetDlgItem(hDlg, IDLOGEVT1+level), CB_SETITEMDATA, idx, action); + if (action == SIM->get_log_action (mod, level)) { + SendMessage(GetDlgItem(hDlg, IDLOGEVT1+level), CB_SETCURSEL, idx, 0); + } + idx++; + } + } + } +} + +void InitLogOptionsDialog(HWND hDlg) +{ + int idx, mod; + char prefix[8]; + + for (mod=0; modget_n_log_modules(); mod++) { + if (strcmp(SIM->get_prefix(mod), "[ ]")) { + lstrcpyn(prefix, SIM->get_prefix(mod), sizeof(prefix)); + lstrcpy(prefix, prefix+1); + prefix[5] = 0; + idx = SendMessage(GetDlgItem(hDlg, IDDEVLIST), LB_ADDSTRING, 0, (LPARAM)prefix); + SendMessage(GetDlgItem(hDlg, IDDEVLIST), LB_SETITEMDATA, idx, mod); + } + } + SetStandardLogOptions(hDlg); +} + +void ApplyLogOptions(HWND hDlg, BOOL advanced) +{ + int idx, level, mod, value; + + if (advanced) { + idx = SendMessage(GetDlgItem(hDlg, IDDEVLIST), LB_GETCURSEL, 0, 0); + mod = SendMessage(GetDlgItem(hDlg, IDDEVLIST), LB_GETITEMDATA, idx, 0); + for (level=0; level<5; level++) { + idx = SendMessage(GetDlgItem(hDlg, IDLOGEVT1+level), CB_GETCURSEL, 0, 0); + value = SendMessage(GetDlgItem(hDlg, IDLOGEVT1+level), CB_GETITEMDATA, idx, 0); + SIM->set_log_action (mod, level, value); + } + EnableWindow(GetDlgItem(hDlg, IDDEVLIST), TRUE); + } else { + for (level=0; level<5; level++) { + idx = SendMessage(GetDlgItem(hDlg, IDLOGEVT1+level), CB_GETCURSEL, 0, 0); + value = SendMessage(GetDlgItem(hDlg, IDLOGEVT1+level), CB_GETITEMDATA, idx, 0); + if (value < 4) { + // set new default + SIM->set_default_log_action (level, value); + // apply that action to all modules (devices) + SIM->set_log_action (-1, level, value); + } + } + } + EnableWindow(GetDlgItem(hDlg, IDADVLOGOPT), TRUE); +} + +static BOOL CALLBACK LogOptDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + static BOOL advanced; + static BOOL changed; + long noticode; + + switch (msg) { + case WM_INITDIALOG: + InitLogOptionsDialog(hDlg); + advanced = FALSE; + changed = FALSE; + EnableWindow(GetDlgItem(hDlg, IDAPPLY), FALSE); + return TRUE; + case WM_CLOSE: + EndDialog(hDlg, 0); + break; + case WM_COMMAND: + noticode = HIWORD(wParam); + switch(noticode) { + case CBN_SELCHANGE: /* LBN_SELCHANGE is the same value */ + switch (LOWORD(wParam)) { + case IDDEVLIST: + SetAdvancedLogOptions(hDlg); + break; + case IDLOGEVT1: + case IDLOGEVT2: + case IDLOGEVT3: + case IDLOGEVT4: + case IDLOGEVT5: + if (!changed) { + EnableWindow(GetDlgItem(hDlg, IDADVLOGOPT), FALSE); + if (advanced) { + EnableWindow(GetDlgItem(hDlg, IDDEVLIST), FALSE); + } + changed = TRUE; + EnableWindow(GetDlgItem(hDlg, IDAPPLY), TRUE); + } + break; + } + break; + default: + switch (LOWORD(wParam)) { + case IDADVLOGOPT: + if (SendMessage(GetDlgItem(hDlg, IDADVLOGOPT), BM_GETCHECK, 0, 0) == BST_CHECKED) { + EnableWindow(GetDlgItem(hDlg, IDDEVLIST), TRUE); + SendMessage(GetDlgItem(hDlg, IDDEVLIST), LB_SETCURSEL, 0, 0); + SetAdvancedLogOptions(hDlg); + advanced = TRUE; + } else { + SendMessage(GetDlgItem(hDlg, IDDEVLIST), LB_SETCURSEL, (WPARAM)-1, 0); + SetStandardLogOptions(hDlg); + advanced = FALSE; + } + break; + case IDAPPLY: + ApplyLogOptions(hDlg, advanced); + EnableWindow(GetDlgItem(hDlg, IDAPPLY), FALSE); + changed = FALSE; + break; + case IDOK: + if (changed) { + ApplyLogOptions(hDlg, advanced); + } + EndDialog(hDlg, 1); + break; + case IDCANCEL: + EndDialog(hDlg, 0); + break; + } + } + break; + } + return FALSE; +} + +void LogOptionsDialog(HWND hwnd) +{ + DialogBox(NULL, MAKEINTRESOURCE(LOGOPT_DLG), hwnd, (DLGPROC)LogOptDlgProc); +} + +typedef struct { + const char *label; + const char *param; +} edit_opts_t; + +edit_opts_t start_options[] = { + {"Logfile", "log"}, + {"Log Options", "*"}, + {"CPU", "cpu"}, + {"CPUID", "cpuid"}, + {"Memory", "memory"}, + {"Clock & CMOS", "clock_cmos"}, + {"PCI", "pci"}, + {"Display & Interface", "display"}, + {"Keyboard & Mouse", "keyboard_mouse"}, + {"Disk & Boot", BXPN_MENU_DISK_WIN32}, + {"Serial / Parallel / USB", "ports"}, + {"Network card", "network"}, + {"Sound Blaster 16", BXPN_SB16}, + {"Other", "misc"}, +#if BX_PLUGINS + {"User-defined Options", "user"}, +#endif + {NULL, NULL} +}; + +edit_opts_t runtime_options[] = { + {"CD-ROM", BXPN_MENU_RUNTIME_CDROM}, + {"USB", BXPN_MENU_RUNTIME_USB}, + {"Misc", BXPN_MENU_RUNTIME_MISC}, + {"Log Options", "*"}, + {NULL, NULL} +}; +static BOOL CALLBACK MainMenuDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + static bx_bool runtime; + int choice, code, i; + bx_param_filename_c *rcfile; + char path[BX_PATHNAME_LEN]; + const char *pname; + + switch (msg) { + case WM_INITDIALOG: + runtime = (bx_bool)lParam; + EnableWindow(GetDlgItem(hDlg, IDEDITCFG), FALSE); + if (runtime) { + SetWindowText(hDlg, "Bochs Runtime Menu"); + EnableWindow(GetDlgItem(hDlg, IDREADRC), FALSE); + EnableWindow(GetDlgItem(hDlg, IDRESETCFG), FALSE); + EnableWindow(GetDlgItem(hDlg, IDRESTORE), FALSE); + SetWindowText(GetDlgItem(hDlg, IDOK), "&Continue"); + i = 0; + while (runtime_options[i].label != NULL) { + SendMessage(GetDlgItem(hDlg, IDEDITBOX), LB_ADDSTRING, 0, (LPARAM)runtime_options[i].label); + i++; + } + choice = IDOK; + } else { + i = 0; + while (start_options[i].label != NULL) { + SendMessage(GetDlgItem(hDlg, IDEDITBOX), LB_ADDSTRING, 0, (LPARAM)start_options[i].label); + i++; + } + if (SIM->get_param_enum(BXPN_BOCHS_START)->get() == BX_LOAD_START) { + choice = IDREADRC; + } else { + choice = IDOK; + } + } + SetFocus(GetDlgItem(hDlg, choice)); + return FALSE; + case WM_CLOSE: + EndDialog(hDlg, -1); + break; + case WM_COMMAND: + code = HIWORD(wParam); + switch (LOWORD(wParam)) { + case IDREADRC: + rcfile = new bx_param_filename_c(NULL, "rcfile", "Load Bochs Config File", + "", "bochsrc.bxrc", BX_PATHNAME_LEN); + rcfile->set_extension("bxrc"); + if (AskFilename(hDlg, rcfile, NULL) > 0) { + SIM->reset_all_param(); + SIM->read_rc(rcfile->getptr()); + } + delete rcfile; + break; + case IDWRITERC: + rcfile = new bx_param_filename_c(NULL, "rcfile", "Save Bochs Config File", + "", "bochsrc.bxrc", BX_PATHNAME_LEN); + rcfile->set_extension("bxrc"); + rcfile->set_options(rcfile->SAVE_FILE_DIALOG); + if (AskFilename(hDlg, rcfile, NULL) > 0) { + SIM->write_rc(rcfile->getptr(), 1); + } + delete rcfile; + break; + case IDEDITBOX: + if ((code == LBN_SELCHANGE) || + (code == LBN_DBLCLK)) { + EnableWindow(GetDlgItem(hDlg, IDEDITCFG), TRUE); + } + if (code != LBN_DBLCLK) { + break; + } + case IDEDITCFG: + i = SendMessage(GetDlgItem(hDlg, IDEDITBOX), LB_GETCURSEL, 0, 0); + if (runtime) { + pname = runtime_options[i].param; + } else { + pname = start_options[i].param; + } + if (lstrcmp(pname, "*")) { + if (((bx_list_c*)SIM->get_param(pname))->get_size() > 0) { + win32ParamDialog(hDlg, pname); + } else { + MessageBox(hDlg, "Nothing to configure in this section", "Warning", MB_ICONEXCLAMATION); + } + } else { + LogOptionsDialog(hDlg); + } + break; + case IDRESETCFG: + if (MessageBox(hDlg, "Reset all options back to their factory defaults ?", + "Reset Configuration", MB_ICONEXCLAMATION | MB_YESNO) == IDYES) { + SIM->reset_all_param(); + } + break; + case IDRESTORE: + path[0] = 0; + if (BrowseDir("Restore Bochs state from...", path) >= 0) { + SIM->get_param_bool(BXPN_RESTORE_FLAG)->set(1); + SIM->get_param_string(BXPN_RESTORE_PATH)->set(path); + EndDialog(hDlg, 1); + } + break; + case IDOK: + EndDialog(hDlg, 1); + break; + case IDCANCEL: + bx_user_quit = 1; + EndDialog(hDlg, -1); + break; + } + } + return FALSE; +} + +void LogAskDialog(BxEvent *event) +{ + event->retcode = DialogBoxParam(NULL, MAKEINTRESOURCE(ASK_DLG), GetBochsWindow(), + (DLGPROC)LogAskProc, (LPARAM)event); +} + +int AskString(bx_param_string_c *param) +{ + return DialogBoxParam(NULL, MAKEINTRESOURCE(STRING_DLG), GetBochsWindow(), + (DLGPROC)StringParamProc, (LPARAM)param); +} + +int FloppyDialog(bx_param_filename_c *param) +{ + return DialogBoxParam(NULL, MAKEINTRESOURCE(FLOPPY_DLG), GetBochsWindow(), + (DLGPROC)FloppyDlgProc, (LPARAM)param); +} + +int MainMenuDialog(HWND hwnd, bx_bool runtime) +{ + return DialogBoxParam(NULL, MAKEINTRESOURCE(MAINMENU_DLG), hwnd, + (DLGPROC)MainMenuDlgProc, (LPARAM)runtime); +} + +BxEvent* win32_notify_callback(void *unused, BxEvent *event) +{ + int opts; + bx_param_c *param; + bx_param_string_c *sparam; + char pname[BX_PATHNAME_LEN]; + + event->retcode = -1; + switch (event->type) + { + case BX_SYNC_EVT_LOG_ASK: + LogAskDialog(event); + return event; +#if BX_DEBUGGER && BX_DEBUGGER_GUI + case BX_SYNC_EVT_GET_DBG_COMMAND: + { + // sim is at a "break" -- internal debugger is ready for a command + debug_cmd = new char[512]; + debug_cmd_ready = FALSE; + HitBreak(); + while (debug_cmd_ready == FALSE && bx_user_quit == 0) + { + if (vgaw_refresh != FALSE) // is the GUI frontend requesting a VGAW refresh? + SIM->refresh_vga(); + vgaw_refresh = FALSE; + Sleep(10); + } + if (bx_user_quit != 0) + BX_EXIT(0); + event->u.debugcmd.command = debug_cmd; + event->retcode = 1; + return event; + } + case BX_ASYNC_EVT_DBG_MSG: + ParseIDText (event->u.logmsg.msg); + return event; +#endif + case BX_SYNC_EVT_ASK_PARAM: + param = event->u.param.param; + if (param->get_type() == BXT_PARAM_STRING) { + sparam = (bx_param_string_c *)param; + opts = sparam->get_options(); + if (opts & sparam->IS_FILENAME) { + if (opts & sparam->SELECT_FOLDER_DLG) { + event->retcode = BrowseDir(sparam->get_label(), sparam->getptr()); + } else if (param->get_parent() == NULL) { + event->retcode = AskFilename(GetBochsWindow(), (bx_param_filename_c *)sparam, NULL); + } else { + event->retcode = FloppyDialog((bx_param_filename_c *)sparam); + } + return event; + } else { + event->retcode = AskString(sparam); + return event; + } + } else if (param->get_type() == BXT_LIST) { + SIM->get_first_cdrom()->get_param_path(pname, BX_PATHNAME_LEN); + event->retcode = win32ParamDialog(GetBochsWindow(), pname); + return event; + } else if (param->get_type() == BXT_PARAM_BOOL) { + UINT flag = MB_YESNO | MB_SETFOREGROUND; + if (((bx_param_bool_c *)param)->get() == 0) { + flag |= MB_DEFBUTTON2; + } + ((bx_param_bool_c *)param)->set(MessageBox(GetActiveWindow(), param->get_description(), param->get_label(), flag) == IDYES); + event->retcode = 0; + return event; + } + case BX_SYNC_EVT_TICK: // called periodically by siminterface. + event->retcode = 0; + // fall into default case + default: + return event; + } +} + +static int win32_ci_callback(void *userdata, ci_command_t command) +{ + switch (command) + { + case CI_START: + SIM->set_notify_callback(win32_notify_callback, NULL); + if (SIM->get_param_enum(BXPN_BOCHS_START)->get() == BX_QUICK_START) { + SIM->begin_simulation(bx_startup_flags.argc, bx_startup_flags.argv); + // we don't expect it to return, but if it does, quit + SIM->quit_sim(1); + } else { + if (MainMenuDialog(GetActiveWindow(), 0) == 1) { + SIM->begin_simulation(bx_startup_flags.argc, bx_startup_flags.argv); + } + SIM->quit_sim(1); + } + break; + case CI_RUNTIME_CONFIG: + if (MainMenuDialog(GetBochsWindow(), 1) < 0) { + bx_user_quit = 1; +#if !BX_DEBUGGER + bx_atexit(); + SIM->quit_sim(1); +#else + bx_dbg_exit(1); +#endif + return -1; + } + break; + case CI_SHUTDOWN: + break; + } + return 0; +} + +int init_win32_config_interface() +{ + SIM->register_configuration_interface("win32config", win32_ci_callback, NULL); + return 0; // success +} + +#endif // BX_USE_TEXTCONFIG && defined(WIN32) diff --git a/bochs/gui/win32dialog.h b/bochs/gui/win32dialog.h new file mode 100644 index 00000000..87a1ff24 --- /dev/null +++ b/bochs/gui/win32dialog.h @@ -0,0 +1,60 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_WIN32_DIALOGS_H +#define BX_WIN32_DIALOGS_H + +#include "config.h" + +// Compilation for WIN64 native require minimum 0x0500 +#ifndef _WIN32_IE +#define _WIN32_IE 0x0500 /* Force a minimum "OS level" for commctrl.h */ +#endif +#if _WIN32_IE < 0x0500 +#undef _WIN32_IE +#define _WIN32_IE 0x0500 +#endif + +extern "C" { +#include +#include +#include +#include +#include +#include +} + +// 64-bit windows env misses this define +#ifndef GWL_WNDPROC +#define GWL_WNDPROC (-4) +#endif + +#if BX_USE_TEXTCONFIG && defined(WIN32) + +#if BX_DEBUGGER && BX_DEBUGGER_GUI +void InitDebugDialog(); +void ParseIDText(const char *p); +void HitBreak(); +#endif +int init_win32_config_interface(); + +#endif + +#endif // BX_WIN32_DIALOGS_H diff --git a/bochs/gui/win32paramdlg.cc b/bochs/gui/win32paramdlg.cc new file mode 100644 index 00000000..0367f2f0 --- /dev/null +++ b/bochs/gui/win32paramdlg.cc @@ -0,0 +1,846 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 Volker Ruppert +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#include "win32dialog.h" + +#if BX_USE_TEXTCONFIG && defined(WIN32) && (BX_WITH_WIN32 || BX_WITH_SDL) + +#include "bochs.h" +#include "win32res.h" + +#define ID_LABEL 100 +#define ID_PARAM 1000 +#define ID_BROWSE 2000 +#define ID_UPDOWN 3000 + +typedef struct _dlg_list_t { + bx_list_c *list; + UINT dlg_list_id; + UINT dlg_base_id; + struct _dlg_list_t *next; +} dlg_list_t; + +HFONT DlgFont; +WNDPROC DefEditWndProc; +UINT nextDlgID; +dlg_list_t *dlg_lists = NULL; + + +bx_bool registerDlgList(UINT lid, bx_list_c *list) +{ + dlg_list_t *dlg_list; + int items; + + dlg_list = (dlg_list_t *)malloc(sizeof(dlg_list_t)); + if (dlg_list == NULL) { + return 0; + } + + dlg_list->list = list; + dlg_list->dlg_list_id = lid; + dlg_list->dlg_base_id = nextDlgID; + items = list->get_size(); + nextDlgID += items; + dlg_list->next = NULL; + + if (dlg_lists == NULL) { + dlg_lists = dlg_list; + } else { + dlg_list_t *temp = dlg_lists; + + while (temp->next) { + if (temp->list == dlg_list->list) { + free(dlg_list); + return 0; + } + temp = temp->next; + } + temp->next = dlg_list; + } + return dlg_list->dlg_base_id; +} + +UINT findDlgListBaseID(bx_list_c *list) +{ + dlg_list_t *dlg_list; + + for (dlg_list = dlg_lists; dlg_list; dlg_list = dlg_list->next) { + if (list == dlg_list->list) { + return dlg_list->dlg_base_id; + } + } + return 0; +} + +bx_param_c *findParamFromDlgID(UINT cid) +{ + dlg_list_t *dlg_list; + int i; + + for (dlg_list = dlg_lists; dlg_list; dlg_list = dlg_list->next) { + if ((cid >= dlg_list->dlg_base_id) && (cid < (dlg_list->dlg_base_id + dlg_list->list->get_size()))) { + i = cid - dlg_list->dlg_base_id; + return dlg_list->list->get(i); + } + if (cid == dlg_list->dlg_list_id) { + return dlg_list->list; + } + } + return NULL; +} + +UINT findDlgIDFromParam(bx_param_c *param) +{ + dlg_list_t *dlg_list; + bx_list_c *list; + UINT cid; + int i; + + list = (bx_list_c*)param->get_parent(); + for (dlg_list = dlg_lists; dlg_list; dlg_list = dlg_list->next) { + if (list == dlg_list->list) { + cid = dlg_list->dlg_base_id; + for (i = 0; i < list->get_size(); i++) { + if (param == list->get(i)) { + return (cid + i); + } + } + } + } + return 0; +} + +void cleanupDlgLists() +{ + dlg_list_t *d, *next; + + if (dlg_lists) { + d = dlg_lists; + while (d != NULL) { + next = d->next; + free(d); + d = next; + } + dlg_lists = NULL; + } +} + +int AskFilename(HWND hwnd, bx_param_filename_c *param, char *buffer) +{ + OPENFILENAME ofn; + int ret; + DWORD errcode; + char filename[BX_PATHNAME_LEN]; + const char *title, *ext; + char errtext[80]; + + if (buffer != NULL) { + lstrcpyn(filename, buffer, BX_PATHNAME_LEN); + } else { + param->get(filename, BX_PATHNAME_LEN); + } + // common file dialogs don't accept raw device names + if ((isalpha(filename[0])) && (filename[1] == ':') && (strlen(filename) == 2)) { + filename[0] = 0; + } + title = param->get_label(); + ext = param->get_extension(); + if (!title) title = param->get_name(); + memset(&ofn, 0, sizeof(OPENFILENAME)); + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.hwndOwner = hwnd; + ofn.lpstrFile = filename; + ofn.nMaxFile = MAX_PATH; + ofn.lpstrInitialDir = bx_startup_flags.initial_dir; + ofn.lpstrTitle = title; + ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY; + ofn.lpstrDefExt = ext; + if (!lstrcmp(ext, "bxrc")) { + ofn.lpstrFilter = "Bochs config files (*.bxrc)\0*.bxrc\0All files (*.*)\0*.*\0"; + } else if (!lstrcmp(ext, "img")) { + ofn.lpstrFilter = "Disk image files (*.img)\0*.img\0All files (*.*)\0*.*\0"; + } else if (!lstrcmp(ext, "iso")) { + ofn.lpstrFilter = "CD-ROM image files (*.iso)\0*.iso\0All files (*.*)\0*.*\0"; + } else if (!lstrcmp(ext, "log")) { + ofn.lpstrFilter = "Log files (*.log)\0*.log\0All files (*.*)\0*.*\0"; + } else if (!lstrcmp(ext, "map")) { + ofn.lpstrFilter = "Keymap files (*.map)\0*.map\0All files (*.*)\0*.*\0"; + } else if (!lstrcmp(ext, "txt")) { + ofn.lpstrFilter = "Text files (*.txt)\0*.txt\0All files (*.*)\0*.*\0"; + } else { + ofn.lpstrFilter = "All files (*.*)\0*.*\0"; + } + if (param->get_options() & param->SAVE_FILE_DIALOG) { + ofn.Flags |= OFN_OVERWRITEPROMPT; + ret = GetSaveFileName(&ofn); + } else { + ofn.Flags |= OFN_FILEMUSTEXIST; + ret = GetOpenFileName(&ofn); + } + if (buffer != NULL) { + lstrcpyn(buffer, filename, BX_PATHNAME_LEN); + } else { + param->set(filename); + } + if (ret == 0) { + errcode = CommDlgExtendedError(); + if (errcode == 0) { + ret = -1; + } else { + if (errcode == 0x3002) { + wsprintf(errtext, "CommDlgExtendedError: invalid filename"); + } else { + wsprintf(errtext, "CommDlgExtendedError returns 0x%04x", errcode); + } + MessageBox(hwnd, errtext, "Error", MB_ICONERROR); + } + } + return ret; +} + +void InitDlgFont(void) +{ + LOGFONT LFont; + + LFont.lfHeight = 8; // Default logical height of font + LFont.lfWidth = 0; // Default logical average character width + LFont.lfEscapement = 0; // angle of escapement + LFont.lfOrientation = 0; // base-line orientation angle + LFont.lfWeight = FW_NORMAL; // font weight + LFont.lfItalic = 0; // italic attribute flag + LFont.lfUnderline = 0; // underline attribute flag + LFont.lfStrikeOut = 0; // strikeout attribute flag + LFont.lfCharSet = DEFAULT_CHARSET; // character set identifier + LFont.lfOutPrecision = OUT_DEFAULT_PRECIS; // output precision + LFont.lfClipPrecision = CLIP_DEFAULT_PRECIS; // clipping precision + LFont.lfQuality = DEFAULT_QUALITY; // output quality + LFont.lfPitchAndFamily = DEFAULT_PITCH; // pitch and family + lstrcpy(LFont.lfFaceName, "Helv"); // pointer to typeface name string + DlgFont = CreateFontIndirect(&LFont); +} + +LRESULT CALLBACK EditHexWndProc(HWND Window, UINT msg, WPARAM wParam, LPARAM lParam) +{ + if (msg == WM_CHAR) { + switch (wParam) { + case 0x08: + break; + case 'x': + break; + default: + if ((wParam < '0') || ((wParam > '9') && (wParam < 'A')) || + ((wParam > 'F') && (wParam < 'a')) || (wParam > 'f')) { + MessageBeep(MB_OK); + return 0; + } + } + } + return CallWindowProc(DefEditWndProc, Window, msg, wParam, lParam); +} + +HWND CreateLabel(HWND hDlg, UINT cid, UINT xpos, UINT ypos, BOOL hide, const char *text) +{ + HWND Label; + RECT r; + int code; + + code = ID_LABEL + cid; + r.left = xpos; + r.top = ypos + 2; + r.right = r.left + 78; + r.bottom = r.top + 15; + MapDialogRect(hDlg, &r); + Label = CreateWindow("STATIC", text, WS_CHILD, r.left, r.top, r.right-r.left+1, r.bottom-r.top+1, hDlg, (HMENU)code, NULL, NULL); + SendMessage(Label, WM_SETFONT, (WPARAM)DlgFont, TRUE); + ShowWindow(Label, hide ? SW_HIDE : SW_SHOW); + return Label; +} + +HWND CreateGroupbox(HWND hDlg, UINT cid, UINT xpos, UINT ypos, SIZE size, BOOL hide, bx_list_c *list) +{ + HWND Groupbox; + RECT r; + int code; + const char *title = NULL; + + code = ID_PARAM + cid; + r.left = xpos; + r.top = ypos; + r.right = r.left + size.cx; + r.bottom = r.top + size.cy; + MapDialogRect(hDlg, &r); + if (list->get_options() & list->USE_BOX_TITLE) { + title = list->get_title()->getptr(); + } + Groupbox = CreateWindow("BUTTON", title, BS_GROUPBOX | WS_CHILD, r.left, r.top, + r.right-r.left+1, r.bottom-r.top+1, hDlg, (HMENU)code, NULL, NULL); + SendMessage(Groupbox, WM_SETFONT, (WPARAM)DlgFont, TRUE); + ShowWindow(Groupbox, hide ? SW_HIDE : SW_SHOW); + return Groupbox; +} + +HWND CreateTabControl(HWND hDlg, UINT cid, UINT xpos, UINT ypos, SIZE size, BOOL hide, bx_list_c *list) +{ + HWND TabControl; + TC_ITEM tie; + RECT r; + int code, i; + bx_param_c *item; + + code = ID_PARAM + cid; + r.left = xpos; + r.top = ypos; + r.right = r.left + size.cx; + r.bottom = r.top + size.cy; + MapDialogRect(hDlg, &r); + TabControl = CreateWindow(WC_TABCONTROL, "", WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE, + r.left, r.top, r.right-r.left+1, r.bottom-r.top+1, hDlg, (HMENU)code, NULL, NULL); + for (i = 0; i < list->get_size(); i++) { + item = list->get(i); + if (item->get_type() == BXT_LIST) { + tie.mask = TCIF_TEXT; + tie.pszText = ((bx_list_c*)item)->get_title()->getptr(); + TabCtrl_InsertItem(TabControl, i, &tie); + } + } + TabCtrl_SetCurSel(TabControl, 0); + SendMessage(TabControl, WM_SETFONT, (WPARAM)DlgFont, TRUE); + ShowWindow(TabControl, hide ? SW_HIDE : SW_SHOW); + return TabControl; +} + + +HWND CreateBrowseButton(HWND hDlg, UINT cid, UINT xpos, UINT ypos, BOOL hide) +{ + HWND Button; + RECT r; + int code; + + code = ID_BROWSE + cid; + r.left = xpos + 190; + r.top = ypos; + r.right = r.left + 50; + r.bottom = r.top + 14; + MapDialogRect(hDlg, &r); + Button = CreateWindow("BUTTON", "Browse...", WS_CHILD, r.left, r.top, r.right-r.left+1, r.bottom-r.top+1, hDlg, (HMENU)code, NULL, NULL); + SendMessage(Button, WM_SETFONT, (WPARAM)DlgFont, TRUE); + ShowWindow(Button, hide ? SW_HIDE : SW_SHOW); + return Button; +} + +HWND CreateCheckbox(HWND hDlg, UINT cid, UINT xpos, UINT ypos, BOOL hide, bx_param_bool_c *bparam) +{ + HWND Checkbox; + RECT r; + int code, val; + + code = ID_PARAM + cid; + r.left = xpos + 80; + r.top = ypos; + r.right = r.left + 20; + r.bottom = r.top + 14; + MapDialogRect(hDlg, &r); + Checkbox = CreateWindow("BUTTON", "", BS_AUTOCHECKBOX | WS_CHILD | WS_TABSTOP, + r.left, r.top, r.right-r.left+1, r.bottom-r.top+1, + hDlg, (HMENU)code, NULL, NULL); + val = bparam->get(); + SendMessage(Checkbox, BM_SETCHECK, val ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage(Checkbox, WM_SETFONT, (WPARAM)DlgFont, TRUE); + ShowWindow(Checkbox, hide ? SW_HIDE : SW_SHOW); + return Checkbox; +} + +HWND CreateInput(HWND hDlg, UINT cid, UINT xpos, UINT ypos, BOOL hide, bx_param_c *param) +{ + HWND Input, Updown; + RECT r; + int code, i, style; + bx_param_num_c *nparam = NULL; + bx_param_string_c *sparam; + char buffer[512]; + char eachbyte[16]; + char sep_string[2]; + char *val; + BOOL spinctrl = FALSE, hexedit = FALSE; + + code = ID_PARAM + cid; + style = WS_CHILD | WS_TABSTOP; + if (param->get_type() == BXT_PARAM_STRING) { + sparam = (bx_param_string_c*)param; + val = sparam->getptr(); + if (sparam->get_options() & sparam->RAW_BYTES) { + buffer[0] = 0; + sep_string[0] = sparam->get_separator(); + sep_string[1] = 0; + for (i = 0; i < sparam->get_maxsize(); i++) { + wsprintf(eachbyte, "%s%02x", (i>0)?sep_string : "", (Bit8u)0xff&val[i]); + strncat(buffer, eachbyte, sizeof(buffer)); + } + } else { + lstrcpyn(buffer, val, 512); + style |= ES_AUTOHSCROLL; + } + } else { + nparam = (bx_param_num_c*)param; + if (nparam->get_base() == BASE_HEX) { + wsprintf(buffer, "0x%x", nparam->get()); + hexedit = TRUE; + } else { + wsprintf(buffer, "%d", nparam->get()); + style |= ES_NUMBER; + } + if (nparam->get_options() & nparam->USE_SPIN_CONTROL) { + spinctrl = TRUE; + } + } + r.left = xpos + 80; + r.top = ypos; + r.right = r.left + 100; + r.bottom = r.top + 14; + MapDialogRect(hDlg, &r); + Input = CreateWindowEx(WS_EX_CLIENTEDGE | WS_EX_NOPARENTNOTIFY, "EDIT", buffer, + style, r.left, r.top, r.right-r.left+1, + r.bottom-r.top+1, hDlg, (HMENU)code, NULL, NULL); + if (hexedit) { +#ifndef _WIN64 + DefEditWndProc = (WNDPROC)SetWindowLong(Input, GWL_WNDPROC, (long)EditHexWndProc); +#else + DefEditWndProc = (WNDPROC)SetWindowLongPtr(Input, GWLP_WNDPROC, (LONG_PTR)EditHexWndProc); +#endif + } + if (spinctrl) { + style = WS_CHILD | WS_BORDER | WS_VISIBLE | UDS_NOTHOUSANDS | UDS_ARROWKEYS | + UDS_ALIGNRIGHT | UDS_SETBUDDYINT; + Updown = CreateUpDownControl(style, 0, 0, 0, 0, hDlg, ID_UPDOWN + cid, NULL, Input, + (int)nparam->get_max(), (int)nparam->get_min(), (int)nparam->get()); + ShowWindow(Updown, hide ? SW_HIDE : SW_SHOW); + } + SendMessage(Input, WM_SETFONT, (WPARAM)DlgFont, TRUE); + ShowWindow(Input, hide ? SW_HIDE : SW_SHOW); + return Input; +} + +HWND CreateCombobox(HWND hDlg, UINT cid, UINT xpos, UINT ypos, BOOL hide, bx_param_enum_c *eparam) +{ + HWND Combo; + RECT r; + int code, j; + const char *choice; + + code = ID_PARAM + cid; + r.left = xpos + 80; + r.top = ypos; + r.right = r.left + 100; + r.bottom = r.top + 14; + MapDialogRect(hDlg, &r); + Combo = CreateWindow("COMBOBOX", "", WS_CHILD | WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST, + r.left, r.top, r.right-r.left+1, r.bottom-r.top+1, hDlg, (HMENU)code, NULL, NULL); + j = 0; + do { + choice = eparam->get_choice(j); + SendMessage(Combo, CB_ADDSTRING, 0, (LPARAM)choice); + j++; + } while (choice != NULL); + SendMessage(Combo, CB_SETCURSEL, (WPARAM)(eparam->get()-eparam->get_min()), 0); + SendMessage(Combo, WM_SETFONT, (WPARAM)DlgFont, TRUE); + ShowWindow(Combo, hide ? SW_HIDE : SW_SHOW); + return Combo; +} + +void EnableParam(HWND hDlg, UINT cid, bx_param_c *param, BOOL val) +{ + HWND Button, Updown; + + if (cid == 0) { + cid = findDlgIDFromParam(param); + } + if (param->get_type() != BXT_LIST) { + EnableWindow(GetDlgItem(hDlg, ID_LABEL + cid), val); + EnableWindow(GetDlgItem(hDlg, ID_PARAM + cid), val); + Button = GetDlgItem(hDlg, ID_BROWSE + cid); + if (Button != NULL) { + EnableWindow(Button, val); + } + Updown = GetDlgItem(hDlg, ID_UPDOWN + cid); + if (Updown != NULL) { + EnableWindow(Updown, val); + } + } +} + +SIZE CreateParamList(HWND hDlg, UINT lid, UINT xpos, UINT ypos, BOOL hide, bx_list_c *list) +{ + HWND ltext, control = NULL, browse; + SIZE size, lsize; + bx_param_c *param; + bx_param_string_c *sparam; + const char *label; + char buffer[512]; + int options; + UINT cid, i, items, x, y; + BOOL ihide; + + items = list->get_size(); + options = list->get_options(); + cid = registerDlgList(lid, list); + x = xpos + 5; + size.cx = 195; + if (options & list->USE_TAB_WINDOW) { + y = ypos + 15; + size.cy = 18; + } else { + y = ypos + 10; + size.cy = 13; + } + for (i = 0; i < items; i++) { + param = list->get(i); + if (!SIM->get_init_done() || (param->get_enabled() && param->get_runtime_param())) { + ltext = NULL; + browse = NULL; + ihide = hide || ((i != 0) && (options & list->USE_TAB_WINDOW)); + if (param->get_type() == BXT_LIST) { + lsize = CreateParamList(hDlg, cid, x + 4, y + 1, ihide, (bx_list_c*)param); + if ((lsize.cx + 18) > size.cx) { + size.cx = lsize.cx + 18; + } + if (!(options & list->USE_TAB_WINDOW)) { + y += (lsize.cy + 6); + size.cy += (lsize.cy + 6); + } else { + if ((lsize.cy + 24) > size.cy) { + size.cy = lsize.cy + 24; + } + } + } else { + label = param->get_label(); + if (label == NULL) { + label = param->get_name(); + } + if ((options & list->SHOW_GROUP_NAME) && (param->get_group() != NULL)) { + wsprintf(buffer, "%s %s", param->get_group(), label); + } else { + lstrcpyn(buffer, label, 512); + } + ltext = CreateLabel(hDlg, cid, x, y, hide, buffer); + if (param->get_type() == BXT_PARAM_BOOL) { + control = CreateCheckbox(hDlg, cid, x, y, hide, (bx_param_bool_c*)param); + } else if (param->get_type() == BXT_PARAM_ENUM) { + control = CreateCombobox(hDlg, cid, x, y, hide, (bx_param_enum_c*)param); + } else if (param->get_type() == BXT_PARAM_NUM) { + control = CreateInput(hDlg, cid, x, y, hide, param); + } else if (param->get_type() == BXT_PARAM_STRING) { + control = CreateInput(hDlg, cid, x, y, hide, param); + sparam = (bx_param_string_c*)param; + if (sparam->get_options() & sparam->IS_FILENAME) { + browse = CreateBrowseButton(hDlg, cid, x, y, hide); + if (size.cx < 255) size.cx = 255; + } + } + if (!param->get_enabled()) { + EnableParam(hDlg, cid, param, FALSE); + } + y += 20; + size.cy += 20; + } + } + cid++; + } + if (options & list->USE_TAB_WINDOW) { + CreateTabControl(hDlg, lid, xpos, ypos, size, hide, list); + } else { + CreateGroupbox(hDlg, lid, xpos, ypos, size, hide, list); + } + return size; +} + +void SetParamList(HWND hDlg, bx_list_c *list) +{ + bx_param_c *param; + bx_param_num_c *nparam; + bx_param_enum_c *eparam; + bx_param_string_c *sparam; + int j; + LRESULT val; + const char *src; + char buffer[512], rawbuf[512]; + UINT cid, i, items, lid; + + lid = findDlgListBaseID(list); + items = list->get_size(); + for (i = 0; i < items; i++) { + cid = lid + i; + param = list->get(i); + if (param->get_enabled() && (!SIM->get_init_done() || (SIM->get_init_done() && param->get_runtime_param()))) { + if (param->get_type() == BXT_LIST) { + SetParamList(hDlg, (bx_list_c*)param); + } else if (param->get_type() == BXT_PARAM_BOOL) { + val = SendMessage(GetDlgItem(hDlg, ID_PARAM + cid), BM_GETCHECK, 0, 0); + ((bx_param_bool_c*)param)->set(val == BST_CHECKED); + } else if (param->get_type() == BXT_PARAM_ENUM) { + val = SendMessage(GetDlgItem(hDlg, ID_PARAM + cid), CB_GETCURSEL, 0, 0); + eparam = (bx_param_enum_c*)param; + eparam->set(val + eparam->get_min()); + } else { + if (SendMessage(GetDlgItem(hDlg, ID_PARAM + cid), EM_GETMODIFY, 0, 0)) { + if (param->get_type() == BXT_PARAM_NUM) { + nparam = (bx_param_num_c*)param; + if (nparam->get_base() == BASE_HEX) { + GetWindowText(GetDlgItem(hDlg, ID_PARAM + cid), buffer, 511); + sscanf(buffer, "%x", &val); + } else { + val = GetDlgItemInt(hDlg, ID_PARAM + cid, NULL, FALSE); + } + nparam->set(val); + } else if (param->get_type() == BXT_PARAM_STRING) { + GetWindowText(GetDlgItem(hDlg, ID_PARAM + cid), buffer, 511); + sparam = (bx_param_string_c*)param; + if (sparam->get_options() & sparam->RAW_BYTES) { + src = &buffer[0]; + memset(rawbuf, 0, sparam->get_maxsize()); + for (j = 0; j < sparam->get_maxsize(); j++) { + while (*src == sparam->get_separator()) + src++; + if (*src == 0) break; + if (sscanf(src, "%02x", &val)) { + rawbuf[j] = (char) val; + src += 2; + } else { + break; + } + } + sparam->set(rawbuf); + } else { + sparam->set(buffer); + } + } + } + } + } + if ((i + 1) >= (UINT)list->get_size()) break; + } +} + +void ShowParamList(HWND hDlg, UINT lid, BOOL show, bx_list_c *list) +{ + UINT cid; + int i; + HWND Button, Updown; + BOOL ishow; + + ShowWindow(GetDlgItem(hDlg, ID_PARAM + lid), show ? SW_SHOW : SW_HIDE); + cid = findDlgListBaseID(list); + for (i = 0; i < list->get_size(); i++) { + if (list->get(i)->get_type() == BXT_LIST) { + ishow = show; + if (list->get_options() & list->USE_TAB_WINDOW) { + ishow &= (i == 0); + } + ShowParamList(hDlg, cid + i, ishow, (bx_list_c*)list->get(i)); + } else { + ShowWindow(GetDlgItem(hDlg, ID_LABEL + cid + i), show ? SW_SHOW : SW_HIDE); + ShowWindow(GetDlgItem(hDlg, ID_PARAM + cid + i), show ? SW_SHOW : SW_HIDE); + Button = GetDlgItem(hDlg, ID_BROWSE + cid + i); + if (Button != NULL) { + ShowWindow(Button, show ? SW_SHOW : SW_HIDE); + } + Updown = GetDlgItem(hDlg, ID_UPDOWN + cid + i); + if (Updown != NULL) { + ShowWindow(Updown, show ? SW_SHOW : SW_HIDE); + } + } + } +} + +void ProcessDependentList(HWND hDlg, bx_param_c *param, BOOL enabled) +{ + UINT cid; + bx_list_c *deplist; + bx_param_c *dparam; + bx_param_enum_c *eparam; + Bit64s value; + Bit64u enable_bitmap, mask; + char buffer[BX_PATHNAME_LEN]; + int i; + BOOL en; + + deplist = param->get_dependent_list(); + if (deplist != NULL) { + cid = findDlgIDFromParam(param); + if (param->get_type() == BXT_PARAM_ENUM) { + eparam = (bx_param_enum_c*)param; + value = SendMessage(GetDlgItem(hDlg, ID_PARAM + cid), CB_GETCURSEL, 0, 0); + enable_bitmap = eparam->get_dependent_bitmap(value + eparam->get_min()); + mask = 0x1; + for (i = 0; i < deplist->get_size(); i++) { + dparam = deplist->get(i); + if (dparam != param) { + en = (enable_bitmap & mask) && enabled; + cid = findDlgIDFromParam(dparam); + if (en != IsWindowEnabled(GetDlgItem(hDlg, ID_PARAM + cid))) { + ProcessDependentList(hDlg, dparam, en); + EnableParam(hDlg, 0, dparam, en); + } + } + mask <<= 1; + } + } else if ((param->get_type() == BXT_PARAM_BOOL) || + (param->get_type() == BXT_PARAM_NUM) || + (param->get_type() == BXT_PARAM_STRING)) { + if (param->get_type() == BXT_PARAM_BOOL) { + value = SendMessage(GetDlgItem(hDlg, ID_PARAM + cid), BM_GETCHECK, 0, 0); + } else if (param->get_type() == BXT_PARAM_NUM) { + value = GetDlgItemInt(hDlg, ID_PARAM + cid, NULL, FALSE); + } else { + GetWindowText(GetDlgItem(hDlg, ID_PARAM + cid), buffer, BX_PATHNAME_LEN); + value = (lstrlen(buffer) > 0) && (strcmp(buffer, "none")); + } + for (i = 0; i < deplist->get_size(); i++) { + dparam = deplist->get(i); + if (dparam != param) { + en = (value && enabled); + cid = findDlgIDFromParam(dparam); + if (en != IsWindowEnabled(GetDlgItem(hDlg, ID_PARAM + cid))) { + ProcessDependentList(hDlg, dparam, en); + EnableParam(hDlg, 0, dparam, en); + } + } + } + } + } +} + +static INT_PTR CALLBACK ParamDlgProc(HWND Window, UINT AMessage, WPARAM wParam, LPARAM lParam) +{ + static bx_list_c *list = NULL; + static int items = 0; + bx_param_c *param; + bx_param_string_c *sparam; + bx_list_c *tmplist; + int cid; + UINT_PTR code, id; + UINT i, j, k; + RECT r, r2; + SIZE size; + NMHDR nmhdr; + char fname[BX_PATHNAME_LEN]; + + switch (AMessage) { + case WM_CLOSE: + cleanupDlgLists(); + EndDialog(Window, -1); + break; + case WM_INITDIALOG: + list = (bx_list_c*)SIM->get_param((const char*)lParam); + items = list->get_size(); + SetWindowText(Window, list->get_title()->getptr()); + nextDlgID = 1; + size = CreateParamList(Window, 0, 6, 6, FALSE, list); + r.left = size.cx / 2 - 50; + r.top = size.cy + 12; + r.right = r.left + 50; + r.bottom = r.top + 14; + MapDialogRect(Window, &r); + MoveWindow(GetDlgItem(Window, IDOK), r.left, r.top, r.right-r.left+1, r.bottom-r.top+1, FALSE); + r.left = size.cx / 2 + 10; + r.top = size.cy + 12; + r.right = r.left + 50; + r.bottom = r.top + 14; + MapDialogRect(Window, &r); + MoveWindow(GetDlgItem(Window, IDCANCEL), r.left, r.top, r.right-r.left+1, r.bottom-r.top+1, FALSE); + GetWindowRect(Window, &r2); + r.left = 0; + r.top = 0; + r.right = size.cx + 18; + r.bottom = size.cy + 52; + MapDialogRect(Window, &r); + MoveWindow(Window, r2.left, r2.top, r.right, r.bottom, TRUE); + return TRUE; + case WM_COMMAND: + code = LOWORD(wParam); + switch (code) { + case IDCANCEL: + cleanupDlgLists(); + EndDialog(Window, -1); + break; + case IDOK: + SetParamList(Window, list); + cleanupDlgLists(); + EndDialog(Window, 1); + break; + default: + if ((code >= ID_BROWSE) && (code < (int)(ID_BROWSE + nextDlgID))) { + i = (UINT)(code - ID_BROWSE); + sparam = (bx_param_string_c *)findParamFromDlgID(i); + if (sparam != NULL) { + GetDlgItemText(Window, ID_PARAM + i, fname, BX_PATHNAME_LEN); + if (AskFilename(Window, (bx_param_filename_c *)sparam, fname) > 0) { + SetWindowText(GetDlgItem(Window, ID_PARAM + i), fname); + SendMessage(GetDlgItem(Window, ID_PARAM + i), EM_SETMODIFY, 1, 0); + SetFocus(GetDlgItem(Window, ID_PARAM + i)); + } + } + } else if ((code >= ID_PARAM) && (code < (int)(ID_PARAM + nextDlgID))) { + i = (UINT)(code - ID_PARAM); + param = findParamFromDlgID(i); + if (param != NULL) { + ProcessDependentList(Window, param, TRUE); + } + } + } + break; + case WM_NOTIFY: + nmhdr = *(LPNMHDR)lParam; + code = nmhdr.code; + id = nmhdr.idFrom; + if (code == (UINT)TCN_SELCHANGE) { + j = (UINT)(id - ID_PARAM); + tmplist = (bx_list_c *)findParamFromDlgID(j); + if (tmplist != NULL) { + k = (UINT)TabCtrl_GetCurSel(GetDlgItem(Window, id)); + cid = findDlgListBaseID(tmplist); + for (i = 0; i < (UINT)tmplist->get_size(); i++) { + ShowParamList(Window, cid + i, (i == k), (bx_list_c*)tmplist->get(i)); + } + } + } else if (code == (UINT)UDN_DELTAPOS) { + if (id >= ID_UPDOWN) { + PostMessage(GetDlgItem(Window, ID_PARAM + (id - ID_UPDOWN)), EM_SETMODIFY, TRUE, 0); + } + } + break; + case WM_CTLCOLOREDIT: + SetTextColor((HDC)wParam, GetSysColor(COLOR_WINDOWTEXT)); + return (INT_PTR)GetSysColorBrush(COLOR_WINDOW); + break; + } + return 0; +} + +int win32ParamDialog(HWND parent, const char *menu) +{ + INT_PTR ret; + + InitDlgFont(); + ret = DialogBoxParam(NULL, MAKEINTRESOURCE(PARAM_DLG), parent, (DLGPROC)ParamDlgProc, (LPARAM)menu); + DeleteObject(DlgFont); + return ret; +} + +#endif // BX_USE_TEXTCONFIG && defined(WIN32) diff --git a/bochs/gui/win32paramdlg.h b/bochs/gui/win32paramdlg.h new file mode 100644 index 00000000..a82e3610 --- /dev/null +++ b/bochs/gui/win32paramdlg.h @@ -0,0 +1,33 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 Volker Ruppert +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_WIN32_PARAMDLG_H +#define BX_WIN32_PARAMDLG_H + +#include "config.h" + +#if BX_USE_TEXTCONFIG && defined(WIN32) + +int AskFilename(HWND hwnd, bx_param_filename_c *param, char *buffer); +int win32ParamDialog(HWND parent, const char *menu); + +#endif + +#endif // BX_WIN32_PARAMDLG_H diff --git a/bochs/gui/win32res.h b/bochs/gui/win32res.h new file mode 100644 index 00000000..7fa3e11b --- /dev/null +++ b/bochs/gui/win32res.h @@ -0,0 +1,47 @@ +#define ICON_BOCHS 1000 + +#define MAINMENU_DLG 1100 +#define IDCONFIG 1110 +#define IDREADRC 1120 +#define IDWRITERC 1130 +#define IDEDITCFG 1140 +#define IDRESETCFG 1150 +#define IDEDITGRP 1160 +#define IDEDITBOX 1170 +#define IDSIMU 1180 +#define IDRESTORE 1190 +#define LOGOPT_DLG 1200 +#define IDDEVLIST 1210 +#define IDLOGLBL1 1221 +#define IDLOGLBL2 1222 +#define IDLOGLBL3 1223 +#define IDLOGLBL4 1224 +#define IDLOGLBL5 1225 +#define IDLOGEVT1 1231 +#define IDLOGEVT2 1232 +#define IDLOGEVT3 1233 +#define IDLOGEVT4 1234 +#define IDLOGEVT5 1235 +#define IDADVLOGOPT 1240 +#define IDAPPLY 1250 +#define ASK_DLG 2000 +#define IDASKTX1 2010 +#define IDASKDEV 2020 +#define IDASKTX2 2030 +#define IDASKMSG 2040 +#define IDASKLIST 2050 +#define STRING_DLG 2100 +#define IDSTRING 2110 +#define FLOPPY_DLG 2200 +#define IDDEVTX 2205 +#define IDDEVTYPE 2210 +#define IDPATHTX 2215 +#define IDPATH 2220 +#define IDBROWSE 2230 +#define IDMEDIATX 2235 +#define IDMEDIATYPE 2240 +#define IDSTATUS 2250 +#define IDREADONLY 2255 +#define IDCREATE 2260 +#define IDCHANGETX 2265 +#define PARAM_DLG 2800 diff --git a/bochs/gui/wx.cc b/bochs/gui/wx.cc new file mode 100644 index 00000000..f34f9eb5 --- /dev/null +++ b/bochs/gui/wx.cc @@ -0,0 +1,1708 @@ +///////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 The Bochs Project +// +// wxWidgets VGA display for Bochs. wx.cc implements a custom +// wxPanel called a MyPanel, which has methods to display +// text and VGA graphics on the panel. Normally, a MyPanel +// is instantiated within a MyFrame created by wxmain.cc, but +// this is not a requirement. +// +// The separation between wxmain.cc and wx.cc is as follows: +// - wxmain.cc implements a Bochs configuration interface (CI), +// which is the wxWidgets equivalent of textconfig.cc. wxmain creates +// a frame with several menus and a toolbar, and allows the user to +// choose the machine configuration and start the simulation. Note +// that wxmain.cc does NOT include bochs.h. All interactions +// between the CI and the simulator are through the siminterface +// object. +// - wx.cc implements a VGA display screen using wxWidgets. It is +// is the wxWidgets equivalent of x.cc, win32.cc, macos.cc, etc. +// wx.cc includes bochs.h and has access to all Bochs devices. +// The VGA panel accepts only paint, key, and mouse events. As it +// receives events, it builds BxEvents and places them into a +// thread-safe BxEvent queue. The simulation thread periodically +// processes events from the BxEvent queue (bx_wx_gui_c::handle_events) +// and notifies the appropriate emulated I/O device. +// +///////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "bochs.h" +#include "param_names.h" +#include "keymap.h" +#include "iodev.h" +#if BX_WITH_WX + +// For compilers that support precompilation, includes . +#include +#ifdef __BORLANDC__ +#pragma hdrstop +#endif +#ifndef WX_PRECOMP +#include +#endif +#include +#include + +//#include "gui/icon_bochs.h" +#include "osdep.h" +#include "font/vga.bitmap.h" + +// shared elements between wxmain.cc and this file +#include "wxmain.h" + + +////////////////////////////////////////////////////////////// +// plugin support +////////////////////////////////////////////////////////////// +class bx_wx_gui_c : public bx_gui_c { +public: + bx_wx_gui_c (void) {} + DECLARE_GUI_VIRTUAL_METHODS() + DECLARE_GUI_NEW_VIRTUAL_METHODS() + void statusbar_setitem(int element, bx_bool active, bx_bool w=0); +#if BX_SHOW_IPS + void show_ips(Bit32u ips_count); +#endif +}; + +// declare one instance of the gui object and call macro to insert the +// plugin code +static bx_wx_gui_c *theGui = NULL; + +void MyPanel::OnPluginInit () { + theGui = new bx_wx_gui_c (); + bx_gui = theGui; +} + +#define LOG_THIS theGui-> + +////////////////////////////////////////////////////////////// +// data for wx gui +////////////////////////////////////////////////////////////// +// The bits to be displayed on the VGA screen are stored in wxScreen. +// wxScreen is an array (size=width*height*3) of RGB values. Each +// pixel is represented by three bytes, one for red, green, and blue. +static char *wxScreen = NULL; +wxCriticalSection wxScreen_lock; +static long wxScreenX = 0; +static long wxScreenY = 0; +static bx_bool wxScreenCheckSize = 0; +static unsigned wxTileX = 0; +static unsigned wxTileY = 0; +static unsigned long wxCursorX = 0; +static unsigned long wxCursorY = 0; +static unsigned long wxFontX = 0; +static unsigned long wxFontY = 0; +static unsigned int text_rows=25, text_cols=80; +static Bit8u h_panning = 0, v_panning = 0; +static Bit16u line_compare = 1023; +static unsigned vga_bpp=8; +static struct { + unsigned char red; + unsigned char green; + unsigned char blue; +} wxBochsPalette[256]; +wxCriticalSection event_thread_lock; +BxEvent event_queue[MAX_EVENTS]; +unsigned long num_events = 0; +static bx_bool mouse_captured = 0; +#if defined (wxHAS_RAW_KEY_CODES) && defined(__WXGTK__) +static Bit32u convertStringToGDKKey (const char *string); +#endif + + +////////////////////////////////////////////////////////////// +// and now, the code +////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////// +// define the MyPanel which implements the VGA screen +////////////////////////////////////////////////////////////// + +BEGIN_EVENT_TABLE(MyPanel, wxPanel) + EVT_KEY_DOWN(MyPanel::OnKeyDown) + EVT_KEY_UP(MyPanel::OnKeyUp) + EVT_TIMER(-1, MyPanel::OnTimer) + EVT_PAINT(MyPanel::OnPaint) + EVT_MOUSE_EVENTS(MyPanel::OnMouse) +END_EVENT_TABLE() + +MyPanel::MyPanel(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) + : wxPanel (parent, id, pos, size, style, name) +{ + wxLogDebug (wxT ("MyPanel constructor")); + refreshTimer.SetOwner (this); + refreshTimer.Start (100); + needRefresh = true; + const char bits[1] = { 0 }; + blankCursor = new wxCursor (bits, 1, 1, -1, -1, bits); + thePanel = this; +} + +MyPanel::~MyPanel () +{ + delete blankCursor; + thePanel = NULL; +} + +void MyPanel::OnTimer(wxTimerEvent& WXUNUSED(event)) +{ + int cx, cy; + + if (wxScreenCheckSize) { + theFrame->GetClientSize(&cx, &cy); + if ((cx != wxScreenX) || (cy != wxScreenY)) { + theFrame->SetClientSize(wxScreenX, wxScreenY); + } + wxScreenCheckSize = 0; + } + IFDBG_VGA(wxLogDebug(wxT("timer"))); + if (needRefresh) { + IFDBG_VGA(wxLogDebug(wxT("calling refresh"))); + Refresh(FALSE); + } +#if BX_SHOW_IPS && defined(WIN32) + static int i = 10; + if (--i <= 0) { + bx_signal_handler(SIGALRM); + i = 10; + } +#endif +} + +void MyPanel::OnPaint(wxPaintEvent& WXUNUSED(event)) +{ + wxPaintDC dc(this); + IFDBG_VGA (wxLogDebug (wxT ("OnPaint"))); + //PrepareDC(dc); + + IFDBG_VGA(wxLogDebug (wxT ("MyPanel::OnPaint trying to get lock. wxScreen=%p", wxScreen))); + wxCriticalSectionLocker lock(wxScreen_lock); + IFDBG_VGA(wxLogDebug (wxT ("MyPanel::OnPaint got lock. wxScreen=%p", wxScreen))); + if(wxScreen != NULL) { + wxPoint pt = GetClientAreaOrigin(); + wxImage screenImage(wxScreenX, wxScreenY, (unsigned char *)wxScreen, TRUE); + IFDBG_VGA(wxLogDebug (wxT ("drawBitmap"))); + dc.DrawBitmap(wxBitmap(screenImage), pt.x, pt.y, FALSE); + } + needRefresh = false; +} + +void MyPanel::ToggleMouse (bool fromToolbar) +{ + static bool first_enable = true; + bx_param_bool_c *enable = SIM->get_param_bool(BXPN_MOUSE_ENABLED); + bool en = ! enable->get(); + bool is_main_thread = wxThread::IsMain (); + bool needmutex = !is_main_thread && SIM->is_sim_thread (); + if (needmutex) wxMutexGuiEnter(); + if (fromToolbar && first_enable && en) { + // only show this help if you click on the toolbar. If they already + // know the shortcut, don't annoy them with the message. + wxString msg = wxT( + "You have enabled the mouse in Bochs, so now your mouse actions will\n" + "be sent into the simulator. The usual mouse cursor will be trapped\n" + "inside the Bochs window until you press a CTRL key + the middle button\n" + "to turn mouse capture off."); + wxMessageBox(msg, wxT("Mouse Capture Enabled"), wxOK | wxICON_INFORMATION); + first_enable = false; + } + enable->set (en); + IFDBG_MOUSE (wxLogDebug (wxT ("now mouse is %sabled", en ? "en" : "dis"))); + if (en) { + mouseSavedX = wxScreenX / 2; + mouseSavedY = wxScreenY / 2; + WarpPointer (mouseSavedX, mouseSavedY); + SetCursor (*blankCursor); + } else { + SetCursor (wxNullCursor); + } + if (needmutex) wxMutexGuiLeave(); +} + +void MyPanel::OnMouse(wxMouseEvent& event) +{ + long x,y; + event.GetPosition (&x, &y); + IFDBG_MOUSE ( + if (event.IsButton ()) { + wxLogDebug (wxT ("mouse button event at %d,%d", x, y)); + } else if (event.Entering ()) { + wxLogDebug (wxT ("mouse entering at %d,%d", x, y)); + } else if (event.Leaving ()) { + wxLogDebug (wxT ("mouse leaving at %d,%d", x, y)); + } else if (event.Moving() || event.Dragging ()) { + wxLogDebug (wxT ("mouse moved to %d,%d", x, y)); + } else { + wxLogDebug (wxT ("other mouse event at %d,%d", x, y)); + } + ) + + if (event.MiddleDown()) { + if (bx_gui->mouse_toggle_check(BX_MT_MBUTTON, 1)) { + ToggleMouse(false); + return; + } + } else if (event.MiddleUp()) { + bx_gui->mouse_toggle_check(BX_MT_MBUTTON, 0); + } + + if (!mouse_captured) + return; // mouse disabled, ignore the event + + // process buttons and motion together + Bit32u buttons; + buttons = event.LeftIsDown() ? 1 : 0; + buttons |= event.RightIsDown() ? 2 : 0; + buttons |= event.MiddleIsDown() ? 4 : 0; + if (x==mouseSavedX && y==mouseSavedY && !event.IsButton ()) { + // nothing happened. This could have been generated by the WarpPointer. + return; + } else { + if(num_events < MAX_EVENTS) { + wxCriticalSectionLocker lock(event_thread_lock); + Bit16s dx = x - mouseSavedX; + Bit16s dy = y - mouseSavedY; + IFDBG_MOUSE (wxLogDebug (wxT ("mouse moved by delta %d,%d", dx, dy))); + event_queue[num_events].type = BX_ASYNC_EVT_MOUSE; + event_queue[num_events].u.mouse.dx = dx; + event_queue[num_events].u.mouse.dy = -dy; + event_queue[num_events].u.mouse.buttons = buttons; + num_events++; + mouseSavedX = x; + mouseSavedY = y; + } else { + wxLogDebug (wxT ("mouse event skipped because event queue full")); + } + } + + mouseSavedX = wxScreenX / 2; + mouseSavedY = wxScreenY / 2; + WarpPointer (mouseSavedX, mouseSavedY); + // The WarpPointer moves the pointer back to the middle of the + // screen. This WILL produce another mouse motion event, which needs + // to be ignored. It will be ignored because the new motion event + // will move the cursor to (mouseSavedX, mouseSavedY). +} + +void MyPanel::MyRefresh () +{ + IFDBG_VGA (wxLogDebug (wxT ("set needRefresh=true"))); + needRefresh = true; +} + +void MyPanel::OnKeyDown(wxKeyEvent& event) +{ + wxCriticalSectionLocker lock(event_thread_lock); + if(num_events < MAX_EVENTS) { + event_queue[num_events].type = BX_ASYNC_EVT_KEY; + fillBxKeyEvent (event, event_queue[num_events].u.key, false); + num_events++; + } +} + + +void MyPanel::OnKeyUp(wxKeyEvent& event) +{ + wxCriticalSectionLocker lock(event_thread_lock); + if(num_events < MAX_EVENTS) { + event_queue[num_events].type = BX_ASYNC_EVT_KEY; + fillBxKeyEvent (event, event_queue[num_events].u.key, true); + num_events++; + } +} + +/// copied right out of gui/x.cc +static char wxAsciiKey[0x5f] = { + // !"#$%&' + BX_KEY_SPACE, + BX_KEY_1, + BX_KEY_SINGLE_QUOTE, + BX_KEY_3, + BX_KEY_4, + BX_KEY_5, + BX_KEY_7, + BX_KEY_SINGLE_QUOTE, + + // ()*+,-./ + BX_KEY_9, + BX_KEY_0, + BX_KEY_8, + BX_KEY_EQUALS, + BX_KEY_COMMA, + BX_KEY_MINUS, + BX_KEY_PERIOD, + BX_KEY_SLASH, + + // 01234567 + BX_KEY_0, + BX_KEY_1, + BX_KEY_2, + BX_KEY_3, + BX_KEY_4, + BX_KEY_5, + BX_KEY_6, + BX_KEY_7, + + // 89:;<=>? + BX_KEY_8, + BX_KEY_9, + BX_KEY_SEMICOLON, + BX_KEY_SEMICOLON, + BX_KEY_COMMA, + BX_KEY_EQUALS, + BX_KEY_PERIOD, + BX_KEY_SLASH, + + // @ABCDEFG + BX_KEY_2, + BX_KEY_A, + BX_KEY_B, + BX_KEY_C, + BX_KEY_D, + BX_KEY_E, + BX_KEY_F, + BX_KEY_G, + + + // HIJKLMNO + BX_KEY_H, + BX_KEY_I, + BX_KEY_J, + BX_KEY_K, + BX_KEY_L, + BX_KEY_M, + BX_KEY_N, + BX_KEY_O, + + + // PQRSTUVW + BX_KEY_P, + BX_KEY_Q, + BX_KEY_R, + BX_KEY_S, + BX_KEY_T, + BX_KEY_U, + BX_KEY_V, + BX_KEY_W, + + // XYZ[\]^_ + BX_KEY_X, + BX_KEY_Y, + BX_KEY_Z, + BX_KEY_LEFT_BRACKET, + BX_KEY_BACKSLASH, + BX_KEY_RIGHT_BRACKET, + BX_KEY_6, + BX_KEY_MINUS, + + // `abcdefg + BX_KEY_GRAVE, + BX_KEY_A, + BX_KEY_B, + BX_KEY_C, + BX_KEY_D, + BX_KEY_E, + BX_KEY_F, + BX_KEY_G, + + // hijklmno + BX_KEY_H, + BX_KEY_I, + BX_KEY_J, + BX_KEY_K, + BX_KEY_L, + BX_KEY_M, + BX_KEY_N, + BX_KEY_O, + + // pqrstuvw + BX_KEY_P, + BX_KEY_Q, + BX_KEY_R, + BX_KEY_S, + BX_KEY_T, + BX_KEY_U, + BX_KEY_V, + BX_KEY_W, + + // xyz{|}~ + BX_KEY_X, + BX_KEY_Y, + BX_KEY_Z, + BX_KEY_LEFT_BRACKET, + BX_KEY_BACKSLASH, + BX_KEY_RIGHT_BRACKET, + BX_KEY_GRAVE +}; + +// copied from gui/win32.cc +Bit32u wxMSW_to_bx_key[0x59] = { + /* 0x00 - 0x0f */ + 0, + BX_KEY_ESC, + BX_KEY_1, + BX_KEY_2, + BX_KEY_3, + BX_KEY_4, + BX_KEY_5, + BX_KEY_6, + BX_KEY_7, + BX_KEY_8, + BX_KEY_9, + BX_KEY_0, + BX_KEY_MINUS, + BX_KEY_EQUALS, + BX_KEY_BACKSPACE, + BX_KEY_TAB, + /* 0x10 - 0x1f */ + BX_KEY_Q, + BX_KEY_W, + BX_KEY_E, + BX_KEY_R, + BX_KEY_T, + BX_KEY_Y, + BX_KEY_U, + BX_KEY_I, + BX_KEY_O, + BX_KEY_P, + BX_KEY_LEFT_BRACKET, + BX_KEY_RIGHT_BRACKET, + BX_KEY_ENTER, + BX_KEY_CTRL_L, + BX_KEY_A, + BX_KEY_S, + /* 0x20 - 0x2f */ + BX_KEY_D, + BX_KEY_F, + BX_KEY_G, + BX_KEY_H, + BX_KEY_J, + BX_KEY_K, + BX_KEY_L, + BX_KEY_SEMICOLON, + BX_KEY_SINGLE_QUOTE, + BX_KEY_GRAVE, + BX_KEY_SHIFT_L, + BX_KEY_BACKSLASH, + BX_KEY_Z, + BX_KEY_X, + BX_KEY_C, + BX_KEY_V, + /* 0x30 - 0x3f */ + BX_KEY_B, + BX_KEY_N, + BX_KEY_M, + BX_KEY_COMMA, + BX_KEY_PERIOD, + BX_KEY_SLASH, + BX_KEY_SHIFT_R, + BX_KEY_KP_MULTIPLY, + BX_KEY_ALT_L, + BX_KEY_SPACE, + BX_KEY_CAPS_LOCK, + BX_KEY_F1, + BX_KEY_F2, + BX_KEY_F3, + BX_KEY_F4, + BX_KEY_F5, + /* 0x40 - 0x4f */ + BX_KEY_F6, + BX_KEY_F7, + BX_KEY_F8, + BX_KEY_F9, + BX_KEY_F10, + BX_KEY_PAUSE, + BX_KEY_SCRL_LOCK, + BX_KEY_KP_HOME, + BX_KEY_KP_UP, + BX_KEY_KP_PAGE_UP, + BX_KEY_KP_SUBTRACT, + BX_KEY_KP_LEFT, + BX_KEY_KP_5, + BX_KEY_KP_RIGHT, + BX_KEY_KP_ADD, + BX_KEY_KP_END, + /* 0x50 - 0x58 */ + BX_KEY_KP_DOWN, + BX_KEY_KP_PAGE_DOWN, + BX_KEY_KP_INSERT, + BX_KEY_KP_DELETE, + 0, + 0, + BX_KEY_LEFT_BACKSLASH, + BX_KEY_F11, + BX_KEY_F12 +}; + +#if defined (wxHAS_RAW_KEY_CODES) && defined(__WXMSW__) +// get windows specific definitions. At present the only thing needed +// is the definition of HIWORD. + +// windows.h included by bochs.h, so nothing extra is required here. +#endif + +// MS Windows specific key mapping, which uses wxKeyEvent::m_rawCode & 2. +bx_bool MyPanel::fillBxKeyEvent_MSW (wxKeyEvent& wxev, BxKeyEvent& bxev, bx_bool release) +{ +#if defined(wxHAS_RAW_KEY_CODES) && defined(__WXMSW__) + IFDBG_KEY(wxLogDebug (wxT ("fillBxKeyEvent_MSW. key code %d, raw codes %d %d", wxev.m_keyCode, wxev.m_rawCode, wxev.m_rawFlags))); + // this code was grabbed from gui/win32.cpp + Bit32u lParam = wxev.m_rawFlags; + Bit32u key = HIWORD (lParam) & 0x01FF; + bxev.bx_key = 0x0000; + if (key & 0x0100) { + // Its an extended key + bxev.bx_key = 0xE000; + } + // Its a key + bxev.bx_key |= (key & 0x00FF) | (release? 0x80 : 0x00); + bxev.raw_scancode = true; + return true; +#else + return false; +#endif +} + +#if defined (wxHAS_RAW_KEY_CODES) && defined(__WXGTK__) +// get those keysym definitions +#include +#endif + +// GTK specific key mapping, which uses wxKeyEvent::m_rawCode. +bx_bool MyPanel::fillBxKeyEvent_GTK (wxKeyEvent& wxev, BxKeyEvent& bxev, bx_bool release) +{ +#if defined (wxHAS_RAW_KEY_CODES) && defined(__WXGTK__) + IFDBG_KEY(wxLogDebug (wxT ("fillBxKeyEvent_GTK. key code %ld, raw codes %d %d", wxev.m_keyCode, wxev.m_rawCode, wxev.m_rawFlags))); + // GTK has only 16bit key codes + Bit16u keysym = (Bit32u) wxev.m_rawCode; + Bit32u key_event = 0; + // since the GDK_* symbols are very much like the X11 symbols (possibly + // identical), I'm using code that is copied from gui/x.cc. + if(!SIM->get_param_bool(BXPN_KBD_USEMAPPING)->get()) { + if (keysym >= GDK_space && keysym < GDK_asciitilde) { + // use nice ASCII conversion table, based on x.cc + key_event = wxAsciiKey[keysym - GDK_space]; + } else switch (keysym) { + case GDK_KP_1: +#ifdef GDK_KP_End + case GDK_KP_End: +#endif + key_event = BX_KEY_KP_END; break; + + case GDK_KP_2: +#ifdef GDK_KP_Down + case GDK_KP_Down: +#endif + key_event = BX_KEY_KP_DOWN; break; + + case GDK_KP_3: +#ifdef GDK_KP_Page_Down + case GDK_KP_Page_Down: +#endif + key_event = BX_KEY_KP_PAGE_DOWN; break; + + case GDK_KP_4: +#ifdef GDK_KP_Left + case GDK_KP_Left: +#endif + key_event = BX_KEY_KP_LEFT; break; + + case GDK_KP_5: +#ifdef GDK_KP_Begin + case GDK_KP_Begin: +#endif + key_event = BX_KEY_KP_5; break; + + case GDK_KP_6: +#ifdef GDK_KP_Right + case GDK_KP_Right: +#endif + key_event = BX_KEY_KP_RIGHT; break; + + case GDK_KP_7: +#ifdef GDK_KP_Home + case GDK_KP_Home: +#endif + key_event = BX_KEY_KP_HOME; break; + + case GDK_KP_8: +#ifdef GDK_KP_Up + case GDK_KP_Up: +#endif + key_event = BX_KEY_KP_UP; break; + + case GDK_KP_9: +#ifdef GDK_KP_Page_Up + case GDK_KP_Page_Up: +#endif + key_event = BX_KEY_KP_PAGE_UP; break; + + case GDK_KP_0: +#ifdef GDK_KP_Insert + case GDK_KP_Insert: +#endif + key_event = BX_KEY_KP_INSERT; break; + + case GDK_KP_Decimal: +#ifdef GDK_KP_Delete + case GDK_KP_Delete: +#endif + key_event = BX_KEY_KP_DELETE; break; + +#ifdef GDK_KP_Enter + case GDK_KP_Enter: key_event = BX_KEY_KP_ENTER; break; +#endif + + case GDK_KP_Subtract: key_event = BX_KEY_KP_SUBTRACT; break; + case GDK_KP_Add: key_event = BX_KEY_KP_ADD; break; + + case GDK_KP_Multiply: key_event = BX_KEY_KP_MULTIPLY; break; + case GDK_KP_Divide: key_event = BX_KEY_KP_DIVIDE; break; + + + case GDK_Up: key_event = BX_KEY_UP; break; + case GDK_Down: key_event = BX_KEY_DOWN; break; + case GDK_Left: key_event = BX_KEY_LEFT; break; + case GDK_Right: key_event = BX_KEY_RIGHT; break; + + + case GDK_Delete: key_event = BX_KEY_DELETE; break; + case GDK_BackSpace: key_event = BX_KEY_BACKSPACE; break; + case GDK_Tab: key_event = BX_KEY_TAB; break; +#ifdef GDK_ISO_Left_Tab + case GDK_ISO_Left_Tab: key_event = BX_KEY_TAB; break; +#endif + case GDK_Return: key_event = BX_KEY_ENTER; break; + case GDK_Escape: key_event = BX_KEY_ESC; break; + case GDK_F1: key_event = BX_KEY_F1; break; + case GDK_F2: key_event = BX_KEY_F2; break; + case GDK_F3: key_event = BX_KEY_F3; break; + case GDK_F4: key_event = BX_KEY_F4; break; + case GDK_F5: key_event = BX_KEY_F5; break; + case GDK_F6: key_event = BX_KEY_F6; break; + case GDK_F7: key_event = BX_KEY_F7; break; + case GDK_F8: key_event = BX_KEY_F8; break; + case GDK_F9: key_event = BX_KEY_F9; break; + case GDK_F10: key_event = BX_KEY_F10; break; + case GDK_F11: key_event = BX_KEY_F11; break; + case GDK_F12: key_event = BX_KEY_F12; break; + case GDK_Control_L: key_event = BX_KEY_CTRL_L; break; +#ifdef GDK_Control_R + case GDK_Control_R: key_event = BX_KEY_CTRL_R; break; +#endif + case GDK_Shift_L: key_event = BX_KEY_SHIFT_L; break; + case GDK_Shift_R: key_event = BX_KEY_SHIFT_R; break; + case GDK_Alt_L: key_event = BX_KEY_ALT_L; break; +#ifdef GDK_Alt_R + case GDK_Alt_R: key_event = BX_KEY_ALT_R; break; +#endif + case GDK_Caps_Lock: key_event = BX_KEY_CAPS_LOCK; break; + case GDK_Num_Lock: key_event = BX_KEY_NUM_LOCK; break; +#ifdef GDK_Scroll_Lock + case GDK_Scroll_Lock: key_event = BX_KEY_SCRL_LOCK; break; +#endif +#ifdef GDK_Print + case GDK_Print: key_event = BX_KEY_PRINT; break; +#endif +#ifdef GDK_Pause + case GDK_Pause: key_event = BX_KEY_PAUSE; break; +#endif + + case GDK_Insert: key_event = BX_KEY_INSERT; break; + case GDK_Home: key_event = BX_KEY_HOME; break; + case GDK_End: key_event = BX_KEY_END; break; + case GDK_Page_Up: key_event = BX_KEY_PAGE_UP; break; + case GDK_Page_Down: key_event = BX_KEY_PAGE_DOWN; break; + +#ifdef GDK_Menu + case GDK_Menu: key_event = BX_KEY_MENU; break; +#endif +#ifdef GDK_Super_L + case GDK_Super_L: key_event = BX_KEY_WIN_L; break; +#endif +#ifdef GDK_Super_R + case GDK_Super_R: key_event = BX_KEY_WIN_R; break; +#endif + + default: + wxLogError(wxT("fillBxKeyEvent_GTK(): keysym %x unhandled!"), (unsigned) keysym); + return BX_KEY_UNHANDLED; + } + } else { + /* use mapping */ + BXKeyEntry *entry = bx_keymap.findHostKey (keysym); + if (!entry) { + BX_ERROR(("fillBxKeyEvent_GTK(): keysym %x unhandled!", (unsigned) keysym)); + return BX_KEY_UNHANDLED; + } + key_event = entry->baseKey; + } + bxev.bx_key = key_event | (release? BX_KEY_RELEASED : BX_KEY_PRESSED); + bxev.raw_scancode = false; + return true; +#else // if GTK toolkit + return false; +#endif +} + +bx_bool MyPanel::fillBxKeyEvent(wxKeyEvent& wxev, BxKeyEvent& bxev, bx_bool release) +{ + Bit32u key = wxev.m_keyCode; + bx_bool mouse_toggle = 0; + + if (key == WXK_CONTROL) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_CTRL, !release); + } else if (key == WXK_ALT) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_ALT, !release); + } else if (key == WXK_F10) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_F10, !release); + } else if (key == WXK_F12) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_F12, !release); + } + if (mouse_toggle) { + ToggleMouse(false); + return false; + } + + // Use raw codes if they are available. Raw codes are an addition to the + // wxWidgets library introduced in version 2.3.3. + +#if defined (wxHAS_RAW_KEY_CODES) && defined(__WXMSW__) + return fillBxKeyEvent_MSW(wxev, bxev, release); +#endif + +#if defined (wxHAS_RAW_KEY_CODES) && defined(__WXGTK__) + return fillBxKeyEvent_GTK(wxev, bxev, release); +#endif + + // otherwise fall back to using portable WXK_* keycodes. Not all keys + // can be mapped correctly using WXK_* codes but it should be usable. + IFDBG_KEY (wxLogDebug (wxT ("fillBxKeyEvent. key code %ld", wxev.m_keyCode))); + Bit32u bx_key; + + if(key >= WXK_SPACE && key < WXK_DELETE) { + bx_key = wxAsciiKey[key - WXK_SPACE]; + } else { + // handle extended keys here + switch(key) { + case WXK_BACK: bx_key = BX_KEY_BACKSPACE; break; + case WXK_TAB: bx_key = BX_KEY_TAB; break; + case WXK_RETURN: bx_key = BX_KEY_ENTER; break; + case WXK_ESCAPE: bx_key = BX_KEY_ESC; break; + case WXK_DELETE: bx_key = BX_KEY_DELETE; break; + case WXK_SHIFT: bx_key = BX_KEY_SHIFT_L; break; + case WXK_CONTROL: bx_key = BX_KEY_CTRL_L; break; + case WXK_ALT: bx_key = BX_KEY_ALT_L; break; + case WXK_MENU: bx_key = BX_KEY_MENU; break; + case WXK_PAUSE: bx_key = BX_KEY_PAUSE; break; + case WXK_PRIOR: bx_key = BX_KEY_PAGE_UP; break; + case WXK_NEXT: bx_key = BX_KEY_PAGE_DOWN; break; + case WXK_END: bx_key = BX_KEY_END; break; + case WXK_HOME: bx_key = BX_KEY_HOME; break; + case WXK_LEFT: bx_key = BX_KEY_LEFT; break; + case WXK_UP: bx_key = BX_KEY_UP; break; + case WXK_RIGHT: bx_key = BX_KEY_RIGHT; break; + case WXK_DOWN: bx_key = BX_KEY_DOWN; break; + case WXK_INSERT: bx_key = BX_KEY_INSERT; break; + case WXK_NUMPAD0: bx_key = BX_KEY_KP_INSERT; break; + case WXK_NUMPAD1: bx_key = BX_KEY_KP_END; break; + case WXK_NUMPAD2: bx_key = BX_KEY_KP_DOWN; break; + case WXK_NUMPAD3: bx_key = BX_KEY_KP_PAGE_DOWN; break; + case WXK_NUMPAD4: bx_key = BX_KEY_KP_LEFT; break; + case WXK_NUMPAD5: bx_key = BX_KEY_KP_5; break; + case WXK_NUMPAD6: bx_key = BX_KEY_KP_RIGHT; break; + case WXK_NUMPAD7: bx_key = BX_KEY_KP_HOME; break; + case WXK_NUMPAD8: bx_key = BX_KEY_KP_UP; break; + case WXK_NUMPAD9: bx_key = BX_KEY_KP_PAGE_UP; break; + case WXK_F1: bx_key = BX_KEY_F1; break; + case WXK_F2: bx_key = BX_KEY_F2; break; + case WXK_F3: bx_key = BX_KEY_F3; break; + case WXK_F4: bx_key = BX_KEY_F4; break; + case WXK_F5: bx_key = BX_KEY_F5; break; + case WXK_F6: bx_key = BX_KEY_F6; break; + case WXK_F7: bx_key = BX_KEY_F7; break; + case WXK_F8: bx_key = BX_KEY_F8; break; + case WXK_F9: bx_key = BX_KEY_F9; break; + case WXK_F10: bx_key = BX_KEY_F10; break; + case WXK_F11: bx_key = BX_KEY_F11; break; + case WXK_F12: bx_key = BX_KEY_F12; break; + case WXK_NUMLOCK: bx_key = BX_KEY_NUM_LOCK; break; + case WXK_SCROLL: bx_key = BX_KEY_SCRL_LOCK; break; + case WXK_DECIMAL: bx_key = BX_KEY_PERIOD; break; + case WXK_SUBTRACT: bx_key = BX_KEY_MINUS; break; + case WXK_ADD: bx_key = BX_KEY_EQUALS; break; + case WXK_MULTIPLY: bx_key = BX_KEY_KP_MULTIPLY; break; + case WXK_DIVIDE: bx_key = BX_KEY_KP_DIVIDE; break; + + case WXK_NUMPAD_ENTER: bx_key = BX_KEY_KP_ENTER; break; + case WXK_NUMPAD_HOME: bx_key = BX_KEY_KP_HOME; break; + case WXK_NUMPAD_LEFT: bx_key = BX_KEY_KP_LEFT; break; + case WXK_NUMPAD_UP: bx_key = BX_KEY_KP_UP; break; + case WXK_NUMPAD_RIGHT: bx_key = BX_KEY_KP_RIGHT; break; + case WXK_NUMPAD_DOWN: bx_key = BX_KEY_KP_DOWN; break; + case WXK_NUMPAD_PRIOR: bx_key = BX_KEY_KP_PAGE_UP; break; +#if WXK_NUMPAD_PAGEUP != WXK_NUMPAD_PRIOR + case WXK_NUMPAD_PAGEUP: bx_key = BX_KEY_KP_PAGE_UP; break; +#endif + case WXK_NUMPAD_NEXT: bx_key = BX_KEY_KP_PAGE_DOWN; break; +#if WXK_NUMPAD_PAGEDOWN != WXK_NUMPAD_NEXT + case WXK_NUMPAD_PAGEDOWN: bx_key = BX_KEY_KP_PAGE_DOWN; break; +#endif + case WXK_NUMPAD_END: bx_key = BX_KEY_KP_END; break; + case WXK_NUMPAD_BEGIN: bx_key = BX_KEY_KP_HOME; break; + case WXK_NUMPAD_INSERT: bx_key = BX_KEY_KP_INSERT; break; + case WXK_NUMPAD_DELETE: bx_key = BX_KEY_KP_DELETE; break; + case WXK_NUMPAD_EQUAL: bx_key = BX_KEY_KP_ENTER; break; + case WXK_NUMPAD_MULTIPLY: bx_key = BX_KEY_KP_MULTIPLY; break; + case WXK_NUMPAD_SUBTRACT: bx_key = BX_KEY_KP_SUBTRACT; break; + case WXK_NUMPAD_DECIMAL: bx_key = BX_KEY_KP_DELETE; break; + case WXK_NUMPAD_DIVIDE: bx_key = BX_KEY_KP_DIVIDE; break; + + // Keys not handled by wxMSW + case 20: bx_key = BX_KEY_CAPS_LOCK; break; // =+ + case 186: bx_key = BX_KEY_SEMICOLON; break; // ;: + case 187: bx_key = BX_KEY_EQUALS; break; // =+ + case 188: bx_key = BX_KEY_COMMA; break; // ,< + case 189: bx_key = BX_KEY_MINUS; break; // -_ + case 190: bx_key = BX_KEY_PERIOD; break; // .> + case 191: bx_key = BX_KEY_SLASH; break; // /? + case 192: bx_key = BX_KEY_GRAVE; break; // `~ + case 219: bx_key = BX_KEY_LEFT_BRACKET; break; // [{ + case 221: bx_key = BX_KEY_RIGHT_BRACKET; break; // ]} + case 220: bx_key = BX_KEY_BACKSLASH; break; // \| + case 222: bx_key = BX_KEY_SINGLE_QUOTE; break; // '" + case 305: bx_key = BX_KEY_KP_5; break; // keypad 5 +//#if defined(WXK_NUMPAD_ADD) + case WXK_NUMPAD_ADD: bx_key = BX_KEY_KP_ADD; break; // keypad plus +//#else +// case 392: bx_key = BX_KEY_KP_ADD; break; // keypad plus +//#endif + + default: + wxLogMessage(wxT ("Unhandled key event: %i (0x%x)"), key, key); + return 0; + } + } + IFDBG_KEY (wxLogDebug (wxT ("fillBxKeyEvent: after remapping, key=%d"), bx_key)); + bxev.bx_key = bx_key | (release? BX_KEY_RELEASED : BX_KEY_PRESSED); + bxev.raw_scancode = false; + return true; +} + +////////////////////////////////////////////////////////////// +// fill in methods of bx_gui +////////////////////////////////////////////////////////////// + +void bx_wx_gui_c::specific_init(int argc, char **argv, unsigned tilewidth, unsigned tileheight, + unsigned headerbar_y) +{ + int b,i,j; + unsigned char fc, vc; + + put("WX"); + if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) { + BX_INFO(("private_colormap option ignored.")); + } + + for(i = 0; i < 256; i++) { + wxBochsPalette[i].red = 0; + wxBochsPalette[i].green = 0; + wxBochsPalette[i].blue = 0; + } + + for(i = 0; i < 256; i++) { + for(j = 0; j < 16; j++) { + vc = bx_vgafont[i].data[j]; + fc = 0; + for (b = 0; b < 8; b++) { + fc |= (vc & 0x01) << (7 - b); + vc >>= 1; + } + vga_charmap[i*32+j] = fc; + } + } + + wxScreenX = 640; + wxScreenY = 480; + IFDBG_VGA(wxLogDebug (wxT ("MyPanel::specific_init trying to get lock. wxScreen=%p", wxScreen))); + wxCriticalSectionLocker lock(wxScreen_lock); + IFDBG_VGA(wxLogDebug (wxT ("MyPanel::specific_init got lock. wxScreen=%p", wxScreen))); + if (wxScreen == NULL) { + wxScreen = (char *)malloc(wxScreenX * wxScreenY * 3); + } else { + wxScreen = (char *)realloc(wxScreen, wxScreenX * wxScreenY * 3); + } + memset(wxScreen, 0, wxScreenX * wxScreenY * 3); + + wxTileX = tilewidth; + wxTileY = tileheight; + + // load keymap tables + if (SIM->get_param_bool(BXPN_KBD_USEMAPPING)->get()) +#if defined (wxHAS_RAW_KEY_CODES) && defined(__WXGTK__) + bx_keymap.loadKeymap(convertStringToGDKKey); +#else + bx_keymap.loadKeymap(NULL); +#endif + + new_gfx_api = 1; + dialog_caps = BX_GUI_DLG_USER | BX_GUI_DLG_SNAPSHOT | BX_GUI_DLG_SAVE_RESTORE; +} + +// ::HANDLE_EVENTS() +// +// Called periodically (vga_update_interval in .bochsrc) so the +// the gui code can poll for keyboard, mouse, and other +// relevant events. + +void bx_wx_gui_c::handle_events(void) +{ + wxCriticalSectionLocker lock(event_thread_lock); + Bit32u bx_key = 0; + for(unsigned int i = 0; i < num_events; i++) { + switch(event_queue[i].type) { + case BX_ASYNC_EVT_TOOLBAR: + switch (event_queue[i].u.toolbar.button) { + case BX_TOOLBAR_FLOPPYA: floppyA_handler(); break; + case BX_TOOLBAR_FLOPPYB: floppyB_handler(); break; + case BX_TOOLBAR_CDROMD: cdromD_handler(); break; + case BX_TOOLBAR_RESET: reset_handler(); break; + case BX_TOOLBAR_POWER: power_handler(); break; + case BX_TOOLBAR_SAVE_RESTORE: save_restore_handler(); break; + case BX_TOOLBAR_COPY: copy_handler(); break; + case BX_TOOLBAR_PASTE: paste_handler(); break; + case BX_TOOLBAR_SNAPSHOT: snapshot_handler(); break; + case BX_TOOLBAR_CONFIG: config_handler(); break; + case BX_TOOLBAR_MOUSE_EN: thePanel->ToggleMouse(true); break; + case BX_TOOLBAR_USER: userbutton_handler(); break; + default: + wxLogDebug (wxT ("unknown toolbar id %d"), event_queue[i].u.toolbar.button); + } + break; + case BX_ASYNC_EVT_KEY: + bx_key = event_queue[i].u.key.bx_key; + if (event_queue[i].u.key.raw_scancode) { + // event contains raw scancodes: convert to BX_KEY values first + bx_bool released = ((bx_key & 0x80) > 0); + if (bx_key & 0xFF00) { // for extended keys + switch (bx_key & 0x7f) { + case 0x1C: + bx_key = BX_KEY_KP_ENTER; + break; + case 0x1D: + bx_key = BX_KEY_CTRL_R; + break; + case 0x35: + bx_key = BX_KEY_KP_DIVIDE; + break; + case 0x38: + // This makes the "AltGr" key on European keyboards work + DEV_kbd_gen_scancode(BX_KEY_CTRL_L | BX_KEY_RELEASED); + bx_key = BX_KEY_ALT_R; + break; + case 0x45: + bx_key = BX_KEY_NUM_LOCK; + break; + case 0x47: + bx_key = BX_KEY_HOME; + break; + case 0x48: + bx_key = BX_KEY_UP; + break; + case 0x49: + bx_key = BX_KEY_PAGE_UP; + break; + case 0x4B: + bx_key = BX_KEY_LEFT; + break; + case 0x4D: + bx_key = BX_KEY_RIGHT; + break; + case 0x4F: + bx_key = BX_KEY_END; + break; + case 0x50: + bx_key = BX_KEY_DOWN; + break; + case 0x51: + bx_key = BX_KEY_PAGE_DOWN; + break; + case 0x52: + bx_key = BX_KEY_INSERT; + break; + case 0x53: + bx_key = BX_KEY_DELETE; + break; + case 0x5B: + bx_key = BX_KEY_WIN_L; + break; + case 0x5C: + bx_key = BX_KEY_WIN_R; + break; + case 0x5D: + bx_key = BX_KEY_MENU; + break; + } + } else { + bx_key = wxMSW_to_bx_key[bx_key & 0x7f]; + } + if (released) bx_key |= BX_KEY_RELEASED; + } + // event contains BX_KEY_* codes: use gen_scancode + IFDBG_KEY (wxLogDebug (wxT ("sending key event 0x%02x", bx_key))); + DEV_kbd_gen_scancode(bx_key); + break; + case BX_ASYNC_EVT_MOUSE: + DEV_mouse_motion( + event_queue[i].u.mouse.dx, + event_queue[i].u.mouse.dy, + event_queue[i].u.mouse.buttons); + break; + default: + wxLogError (wxT ("handle_events received unhandled event type %d in queue"), (int)event_queue[i].type); + } + } + num_events = 0; +} + +void bx_wx_gui_c::statusbar_setitem(int element, bx_bool active, bx_bool w) +{ +#if defined(__WXMSW__) + char status_text[10]; +#endif + + wxMutexGuiEnter(); + if (element < 0) { + for (unsigned i = 0; i < statusitem_count; i++) { + if (active) { +#if defined(__WXMSW__) + status_text[0] = 9; + strcpy(status_text+1, statusitem_text[i]); + theFrame->SetStatusText(status_text, i+1); +#else + theFrame->SetStatusText(wxString(statusitem_text[i], wxConvUTF8), i+1); +#endif + } else { + theFrame->SetStatusText(wxT(""), i+1); + } + } + } else if ((unsigned)element < statusitem_count) { + if (active) { +#if defined(__WXMSW__) + status_text[0] = 9; + strcpy(status_text+1, statusitem_text[element]); + theFrame->SetStatusText(status_text, element+1); +#else + theFrame->SetStatusText(wxString(statusitem_text[element], wxConvUTF8), + element+1); +#endif + } else { + theFrame->SetStatusText(wxT(""), element+1); + } + } + wxMutexGuiLeave(); +} + +// ::FLUSH() +// +// Called periodically, requesting that the gui code flush all pending +// screen update requests. + +void bx_wx_gui_c::flush(void) +{ +} + +// ::CLEAR_SCREEN() +// +// Called to request that the VGA region is cleared. Don't +// clear the area that defines the headerbar. + +void bx_wx_gui_c::clear_screen(void) +{ + IFDBG_VGA(wxLogDebug (wxT ("MyPanel::clear_screen trying to get lock. wxScreen=%p", wxScreen))); + wxCriticalSectionLocker lock(wxScreen_lock); + IFDBG_VGA(wxLogDebug (wxT ("MyPanel::clear_screen got lock. wxScreen=%p", wxScreen))); + memset(wxScreen, 0, wxScreenX * wxScreenY * 3); + thePanel->MyRefresh (); +} + +static void UpdateScreen(unsigned char *newBits, int x, int y, int width, int height) +{ + IFDBG_VGA(wxLogDebug (wxT ("MyPanel::UpdateScreen trying to get lock. wxScreen=%p", wxScreen))); + wxCriticalSectionLocker lock(wxScreen_lock); + IFDBG_VGA(wxLogDebug (wxT ("MyPanel::UpdateScreen got lock. wxScreen=%p", wxScreen))); + if(wxScreen != NULL) { + switch (vga_bpp) { + case 8: /* 8 bpp */ + for(int i = 0; i < height; i++) { + char *pwxScreen = &wxScreen[(y * wxScreenX * 3) + (x * 3)]; + for(int c = 0; c < width; c++) { + unsigned pixel = (i * width) + c; + pwxScreen[0] = wxBochsPalette[newBits[pixel]].red; + pwxScreen[1] = wxBochsPalette[newBits[pixel]].green; + pwxScreen[2] = wxBochsPalette[newBits[pixel]].blue; + pwxScreen += 3; + } + y++; + if(y >= wxScreenY) break; + } + break; + default: + BX_PANIC(("%u bpp modes handled by new graphics API", vga_bpp)); + return; + } + } else { + IFDBG_VGA (wxLogDebug (wxT ("UpdateScreen with null wxScreen"))); + } +} + +static void DrawBochsBitmap(int x, int y, int width, int height, char *bmap, char color, int fontx, int fonty, bx_bool gfxchar) +{ + static unsigned char newBits[9 * 32]; + unsigned char mask; + int bytes = width * height; + char bgcolor = DEV_vga_get_actl_pal_idx((color >> 4) & 0xF); + char fgcolor = DEV_vga_get_actl_pal_idx(color & 0xF); + + if (y > wxScreenY) return; + + for(int i = 0; i < bytes; i+=width) { + mask = 0x80 >> fontx; + for(int j = 0; j < width; j++) { + if (mask > 0) { + newBits[i + j] = (bmap[fonty] & mask) ? fgcolor : bgcolor; + } else { + if (gfxchar) { + newBits[i + j] = (bmap[fonty] & 0x01) ? fgcolor : bgcolor; + } else { + newBits[i + j] = bgcolor; + } + } + mask >>= 1; + } + fonty++; + } + UpdateScreen(newBits, x, y, width, height); +} + + +// ::TEXT_UPDATE() +// +// Called in a VGA text mode, to update the screen with +// new content. +// +// old_text: array of character/attributes making up the contents +// of the screen from the last call. See below +// new_text: array of character/attributes making up the current +// contents, which should now be displayed. See below +// +// format of old_text & new_text: each is tm_info.line_offset*text_rows +// bytes long. Each character consists of 2 bytes. The first by is +// the character value, the second is the attribute byte. +// +// cursor_x: new x location of cursor +// cursor_y: new y location of cursor +// tm_info: this structure contains information for additional +// features in text mode (cursor shape, line offset,...) + +void bx_wx_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, + unsigned long cursor_x, unsigned long cursor_y, + bx_vga_tminfo_t tm_info) +{ + IFDBG_VGA(wxLogDebug (wxT ("text_update"))); + + Bit8u *old_line, *new_line, *text_base; + Bit8u cAttr, cChar; + unsigned int curs, hchars, offset, rows, x, y, xc, yc, yc2, cs_y; + Bit8u cfwidth, cfheight, cfheight2, font_col, font_row, font_row2; + Bit8u split_textrow, split_fontrows; + bx_bool forceUpdate = 0, gfxchar, split_screen, blink_state, blink_mode; + + // first check if the screen needs to be redrawn completely + blink_mode = (tm_info.blink_flags & BX_TEXT_BLINK_MODE) > 0; + blink_state = (tm_info.blink_flags & BX_TEXT_BLINK_STATE) > 0; + if (blink_mode) { + if (tm_info.blink_flags & BX_TEXT_BLINK_TOGGLE) + forceUpdate = 1; + } + if(charmap_updated) { + forceUpdate = 1; + charmap_updated = 0; + } + if((tm_info.h_panning != h_panning) || (tm_info.v_panning != v_panning)) { + forceUpdate = 1; + h_panning = tm_info.h_panning; + v_panning = tm_info.v_panning; + } + if(tm_info.line_compare != line_compare) { + forceUpdate = 1; + line_compare = tm_info.line_compare; + } + + // invalidate character at previous and new cursor location + if((wxCursorY < text_rows) && (wxCursorX < text_cols)) { + curs = wxCursorY * tm_info.line_offset + wxCursorX * 2; + old_text[curs] = ~new_text[curs]; + } + if((tm_info.cs_start <= tm_info.cs_end) && (tm_info.cs_start < wxFontY) && + (cursor_y < text_rows) && (cursor_x < text_cols)) { + curs = cursor_y * tm_info.line_offset + cursor_x * 2; + old_text[curs] = ~new_text[curs]; + } else { + curs = 0xffff; + } + + rows = text_rows; + if (v_panning) rows++; + y = 0; + cs_y = 0; + text_base = new_text - tm_info.start_address; + if (line_compare < wxScreenY) { + split_textrow = (line_compare + v_panning) / wxFontY; + split_fontrows = ((line_compare + v_panning) % wxFontY) + 1; + } else { + split_textrow = rows + 1; + split_fontrows = 0; + } + split_screen = 0; + do { + hchars = text_cols; + if (h_panning) hchars++; + if (split_screen) { + yc = line_compare + cs_y * wxFontY + 1; + font_row = 0; + if (rows == 1) { + cfheight = (wxScreenY - line_compare - 1) % wxFontY; + if (cfheight == 0) cfheight = wxFontY; + } else { + cfheight = wxFontY; + } + } else if (v_panning) { + if (y == 0) { + yc = 0; + font_row = v_panning; + cfheight = wxFontY - v_panning; + } else { + yc = y * wxFontY - v_panning; + font_row = 0; + if (rows == 1) { + cfheight = v_panning; + } else { + cfheight = wxFontY; + } + } + } else { + yc = y * wxFontY; + font_row = 0; + cfheight = wxFontY; + } + if (!split_screen && (y == split_textrow)) { + if (split_fontrows < cfheight) cfheight = split_fontrows; + } + new_line = new_text; + old_line = old_text; + x = 0; + offset = cs_y * tm_info.line_offset; + do { + if (h_panning) { + if (hchars > text_cols) { + xc = 0; + font_col = h_panning; + cfwidth = wxFontX - h_panning; + } else { + xc = x * wxFontX - h_panning; + font_col = 0; + if (hchars == 1) { + cfwidth = h_panning; + } else { + cfwidth = wxFontX; + } + } + } else { + xc = x * wxFontX; + font_col = 0; + cfwidth = wxFontX; + } + if(forceUpdate || (old_text[0] != new_text[0]) + || (old_text[1] != new_text[1])) { + cChar = new_text[0]; + if (blink_mode) { + cAttr = new_text[1] & 0x7F; + if (!blink_state && (new_text[1] & 0x80)) + cAttr = (cAttr & 0x70) | (cAttr >> 4); + } else { + cAttr = new_text[1]; + } + gfxchar = tm_info.line_graphics && ((cChar & 0xE0) == 0xC0); + DrawBochsBitmap(xc, yc, cfwidth, cfheight, (char *)&vga_charmap[cChar<<5], + cAttr, font_col, font_row, gfxchar); + if (offset == curs) { + if (font_row == 0) { + yc2 = yc + tm_info.cs_start; + font_row2 = tm_info.cs_start; + cfheight2 = tm_info.cs_end - tm_info.cs_start + 1; + } else { + if (v_panning > tm_info.cs_start) { + yc2 = yc; + font_row2 = font_row; + cfheight2 = tm_info.cs_end - v_panning + 1; + } else { + yc2 = yc + tm_info.cs_start - v_panning; + font_row2 = tm_info.cs_start; + cfheight2 = tm_info.cs_end - tm_info.cs_start + 1; + } + } + cAttr = ((cAttr >> 4) & 0xF) + ((cAttr & 0xF) << 4); + DrawBochsBitmap(xc, yc2, cfwidth, cfheight2, (char *)&vga_charmap[cChar<<5], + cAttr, font_col, font_row2, gfxchar); + } + } + x++; + new_text+=2; + old_text+=2; + offset+=2; + } while (--hchars); + if (!split_screen && (y == split_textrow)) { + new_text = text_base; + forceUpdate = 1; + cs_y = 0; + if (tm_info.split_hpanning) h_panning = 0; + rows = ((wxScreenY - line_compare + wxFontY - 2) / wxFontY) + 1; + split_screen = 1; + } else { + y++; + cs_y++; + new_text = new_line + tm_info.line_offset; + old_text = old_line + tm_info.line_offset; + } + } while (--rows); + + h_panning = tm_info.h_panning; + wxCursorX = cursor_x; + wxCursorY = cursor_y; + + thePanel->MyRefresh(); +} + +// ::PALETTE_CHANGE() +// +// Allocate a color in the native GUI, for this color, and put +// it in the colormap location 'index'. +// returns: 0=no screen update needed (color map change has direct effect) +// 1=screen update needed (redraw using current colormap) + +bx_bool bx_wx_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) +{ + IFDBG_VGA(wxLogDebug (wxT ("palette_change"))); + wxBochsPalette[index].red = red; + wxBochsPalette[index].green = green; + wxBochsPalette[index].blue = blue; + return(1); // screen update needed +} + + +// ::GRAPHICS_TILE_UPDATE() +// +// Called to request that a tile of graphics be drawn to the +// screen, since info in this region has changed. +// +// tile: array of 8bit values representing a block of pixels with +// dimension equal to the 'tilewidth' & 'tileheight' parameters to +// ::specific_init(). Each value specifies an index into the +// array of colors you allocated for ::palette_change() +// x0: x origin of tile +// y0: y origin of tile +// +// note: origin of tile and of window based on (0,0) being in the upper +// left of the window. + +void bx_wx_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) +{ + IFDBG_VGA (wxLogDebug (wxT ("graphics_tile_update"))); + UpdateScreen(tile, x0, y0, wxTileX, wxTileY); + thePanel->MyRefresh(); +} + +bx_svga_tileinfo_t *bx_wx_gui_c::graphics_tile_info(bx_svga_tileinfo_t *info) +{ + if (!info) { + info = (bx_svga_tileinfo_t *)malloc(sizeof(bx_svga_tileinfo_t)); + if (!info) { + return NULL; + } + } + + info->bpp = 24; + info->pitch = wxScreenX * 3; + info->red_shift = 8; + info->green_shift = 16; + info->blue_shift = 24; + info->red_mask = 0x0000ff; + info->green_mask = 0x00ff00; + info->blue_mask = 0xff0000; + info->is_indexed = 0; +#ifdef BX_LITTLE_ENDIAN + info->is_little_endian = 1; +#else + info->is_little_endian = 0; +#endif + + return info; +} + +Bit8u *bx_wx_gui_c::graphics_tile_get(unsigned x0, unsigned y0, + unsigned *w, unsigned *h) +{ + if (x0+wxTileX > (unsigned)wxScreenX) { + *w = wxScreenX - x0; + } + else { + *w = wxTileX; + } + + if (y0+wxTileY > (unsigned)wxScreenY) { + *h = wxScreenY - y0; + } + else { + *h = wxTileY; + } + + return (Bit8u *)wxScreen + y0 * wxScreenX * 3 + x0 * 3; +} + +void bx_wx_gui_c::graphics_tile_update_in_place(unsigned x0, unsigned y0, + unsigned w, unsigned h) +{ + thePanel->MyRefresh(); +} + +// ::DIMENSION_UPDATE() +// +// Called from the simulator when the VGA mode changes it's X,Y dimensions. +// Resize the window to this size, but you need to add on +// the height of the headerbar to the Y value. +// +// x: new VGA x size +// y: new VGA y size +// fheight: new VGA character height in text mode +// fwidth : new VGA character width in text mode +// bpp : bits per pixel in graphics mode + +void bx_wx_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight, unsigned fwidth, unsigned bpp) +{ + IFDBG_VGA(wxLogDebug (wxT ("MyPanel::dimension_update trying to get lock. wxScreen=%p", wxScreen))); + wxScreen_lock.Enter (); + IFDBG_VGA(wxLogDebug (wxT ("MyPanel::dimension_update got lock. wxScreen=%p", wxScreen))); + BX_INFO (("dimension update x=%d y=%d fontheight=%d fontwidth=%d bpp=%d", x, y, fheight, fwidth, bpp)); + if ((bpp == 8) || (bpp == 15) || (bpp == 16) || (bpp == 24) || (bpp == 32)) { + if (bpp == 32) BX_INFO(("wxWidgets ignores bit 24..31 in 32bpp mode")); + vga_bpp = bpp; + } + else + { + BX_PANIC(("%d bpp graphics mode not supported", bpp)); + } + if (fheight > 0) { + wxFontX = fwidth; + wxFontY = fheight; + text_cols = x / wxFontX; + text_rows = y / wxFontY; + } + wxScreenX = x; + wxScreenY = y; + wxScreen = (char *)realloc(wxScreen, wxScreenX * wxScreenY * 3); + wxASSERT (wxScreen != NULL); + wxScreen_lock.Leave (); + IFDBG_VGA(wxLogDebug (wxT ("MyPanel::dimension_update gave up lock. wxScreen=%p", wxScreen))); + // Note: give up wxScreen_lock before calling SetClientSize. I did + // this because I was sometimes seeing thread deadlock in win32, apparantly + // related to wxStreen_lock. The wxWidgets GUI thread was sitting in OnPaint + // trying to get the wxScreen_lock, and the simulation thread was stuck in some + // native win32 function called by SetClientSize (below). As with many + // thread problems, it happened sporadically so it's hard to prove that this + // really fixed it. -bbd + + // this method is called from the simulation thread, so we must get the GUI + // thread mutex first to be safe. + wxMutexGuiEnter(); + theFrame->SetClientSize(wxScreenX, wxScreenY); + theFrame->Layout(); + wxMutexGuiLeave(); + thePanel->MyRefresh(); + wxScreenCheckSize = 1; +} + + +// ::CREATE_BITMAP() +// +// Create a monochrome bitmap of size 'xdim' by 'ydim', which will +// be drawn in the headerbar. Return an integer ID to the bitmap, +// with which the bitmap can be referenced later. +// +// bmap: packed 8 pixels-per-byte bitmap. The pixel order is: +// bit0 is the left most pixel, bit7 is the right most pixel. +// xdim: x dimension of bitmap +// ydim: y dimension of bitmap + +unsigned bx_wx_gui_c::create_bitmap(const unsigned char *bmap, unsigned xdim, unsigned ydim) +{ + UNUSED(bmap); + UNUSED(xdim); + UNUSED(ydim); + return(0); +} + + +// ::HEADERBAR_BITMAP() +// +// Called to install a bitmap in the bochs headerbar (toolbar). +// +// bmap_id: will correspond to an ID returned from +// ::create_bitmap(). 'alignment' is either BX_GRAVITY_LEFT +// or BX_GRAVITY_RIGHT, meaning install the bitmap in the next +// available leftmost or rightmost space. +// alignment: is either BX_GRAVITY_LEFT or BX_GRAVITY_RIGHT, +// meaning install the bitmap in the next +// available leftmost or rightmost space. +// f: a 'C' function pointer to callback when the mouse is clicked in +// the boundaries of this bitmap. + +unsigned bx_wx_gui_c::headerbar_bitmap(unsigned bmap_id, unsigned alignment, void (*f)(void)) +{ + UNUSED(bmap_id); + UNUSED(alignment); + UNUSED(f); + return(0); +} + +// ::SHOW_HEADERBAR() +// +// Show (redraw) the current headerbar, which is composed of +// currently installed bitmaps. + +void bx_wx_gui_c::show_headerbar(void) +{ +} + +// ::REPLACE_BITMAP() +// +// Replace the bitmap installed in the headerbar ID slot 'hbar_id', +// with the one specified by 'bmap_id'. 'bmap_id' will have +// been generated by ::create_bitmap(). The old and new bitmap +// must be of the same size. This allows the bitmap the user +// sees to change, when some action occurs. For example when +// the user presses on the floppy icon, it then displays +// the ejected status. +// +// hbar_id: headerbar slot ID +// bmap_id: bitmap ID + + void +bx_wx_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) +{ + UNUSED(hbar_id); + UNUSED(bmap_id); +} + + +// ::EXIT() +// +// Called before bochs terminates, to allow for a graceful +// exit from the native GUI mechanism. + +void bx_wx_gui_c::exit(void) +{ + clear_screen(); +} + +void bx_wx_gui_c::mouse_enabled_changed_specific(bx_bool val) +{ + mouse_captured = val; +} + +int bx_wx_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) +{ + int ret = 0; + wxMutexGuiEnter(); + if (wxTheClipboard->Open()) { + if (wxTheClipboard->IsSupported(wxDF_TEXT)) { + wxTextDataObject data; + wxTheClipboard->GetData(data); + wxString str = data.GetText(); + int len = str.Len(); + Bit8u *buf = new Bit8u[len]; + memcpy(buf, str.mb_str(wxConvUTF8), len); + *bytes = buf; + *nbytes = len; + ret = 1; + // buf will be freed in bx_keyb_c::paste_bytes or + // bx_keyb_c::service_paste_buf, using delete []. + } else { + BX_ERROR (("paste: could not open wxWidgets clipboard")); + } + wxTheClipboard->Close(); + } + wxMutexGuiLeave(); + return ret; +} + +int bx_wx_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) +{ + wxMutexGuiEnter(); + int ret = 0; + if (wxTheClipboard->Open()) { + wxString string(text_snapshot, wxConvUTF8, len); + wxTheClipboard->SetData(new wxTextDataObject (string)); + wxTheClipboard->Close(); + ret = 1; + } + wxMutexGuiLeave(); + return ret; +} + +#if BX_SHOW_IPS +void bx_wx_gui_c::show_ips(Bit32u ips_count) +{ + char ips_text[40]; + bx_bool is_main_thread = wxThread::IsMain(); + bx_bool needmutex = !is_main_thread && SIM->is_sim_thread(); + if (needmutex) wxMutexGuiEnter(); + sprintf(ips_text, "IPS: %9u", ips_count); + theFrame->SetStatusText(wxString(ips_text, wxConvUTF8), 0); + if (needmutex) wxMutexGuiLeave(); +} +#endif + +#if defined (wxHAS_RAW_KEY_CODES) && defined(__WXGTK__) +/* we can use the X keysyms for GTK too */ +#include +#include +/* convertStringToGDKKey is a keymap callback + * used when reading the keymap file. + * It converts a Symblic String to a GUI Constant + * + * It returns a Bit32u constant or BX_KEYMAP_UNKNOWN if it fails + */ +static Bit32u convertStringToGDKKey (const char *string) +{ + if (strncmp ("XK_", string, 3) != 0) + return BX_KEYMAP_UNKNOWN; + KeySym keysym=XStringToKeysym(string+3); + + // failure, return unknown + if(keysym==NoSymbol) return BX_KEYMAP_UNKNOWN; + + return((Bit32u)keysym); +} +#endif + +#endif /* if BX_WITH_WX */ diff --git a/bochs/gui/wxdialog.cc b/bochs/gui/wxdialog.cc new file mode 100644 index 00000000..33e4fba4 --- /dev/null +++ b/bochs/gui/wxdialog.cc @@ -0,0 +1,1667 @@ +///////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "config.h" // definitions based on configure script +#include "param_names.h" + +#if BX_WITH_WX + +// For compilers that support precompilation, includes . +#include +#ifdef __BORLANDC__ +#pragma hdrstop +#endif +#ifndef WX_PRECOMP +#include +#endif +#include +#include +#include +#include + +#include "osdep.h" // workarounds for missing stuff +#include "gui/siminterface.h" // interface to the simulator +#include "bxversion.h" // get version string +#include "wxdialog.h" // custom dialog boxes +#include "wxmain.h" // wxwidgets shared stuff + +////////////////////////////////////////////////////////////////////// +// constants, prototypes +////////////////////////////////////////////////////////////////////// + +enum { + ID_ShowDialog_1 = 1, + ID_ShowDialog_2, + ID_ShowDialog_3, + ID_Button1, + ID_Button2, + ID_MY_LAST_ID +}; + +wxSize longTextSize (300, -1); // width=300, height=default +wxSize normalTextSize (180, -1); // width=200, height=default + +////////////////////////////////////////////////////////////////////// +// LogMsgAskDialog implementation +////////////////////////////////////////////////////////////////////// +// Structure: +// vertSizer: +// context text field, +// message text field +// don't-ask checkbox +// buttonSizer: +// continue button +// die button +// dumpcore button +// debugger button +// help button +// + +// all events go to OnEvent method +BEGIN_EVENT_TABLE(LogMsgAskDialog, wxDialog) + EVT_BUTTON(ID_Continue, LogMsgAskDialog::OnEvent) + EVT_BUTTON(ID_Die, LogMsgAskDialog::OnEvent) + EVT_BUTTON(ID_DumpCore, LogMsgAskDialog::OnEvent) + EVT_BUTTON(ID_Debugger, LogMsgAskDialog::OnEvent) + EVT_BUTTON(wxID_HELP, LogMsgAskDialog::OnEvent) +END_EVENT_TABLE() + + +LogMsgAskDialog::LogMsgAskDialog( + wxWindow* parent, + wxWindowID id, + const wxString& title) + : wxDialog (parent, id, title, wxDefaultPosition, wxDefaultSize, + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +{ + for (int i=0; iGetFont (); + font.SetWeight (wxBOLD); + font.SetPointSize (2 + font.GetPointSize ()); + context->SetFont (font); + message = new wxStaticText (this, -1, wxT("")); + message->SetFont (font); + dontAsk = new wxCheckBox (this, -1, LOG_MSG_DONT_ASK_STRING); + btnSizer = new wxBoxSizer(wxHORIZONTAL); + // fill vertical sizer + vertSizer->Add (context, 0, wxGROW|wxALIGN_LEFT|wxLEFT|wxTOP, 30); + vertSizer->Add (message, 0, wxGROW|wxALIGN_LEFT|wxLEFT, 30); + vertSizer->Add (dontAsk, 0, wxALIGN_CENTER|wxTOP, 30); + vertSizer->Add (btnSizer, 0, wxALIGN_CENTER|wxTOP, 30); + // Some object creation and layout is postponed until Init() + // so that caller has time to configure the dialog. +} + +void LogMsgAskDialog::SetContext(wxString s) +{ + ChangeStaticText(vertSizer, context, wxString(LOG_MSG_CONTEXT) + s); +} + +void LogMsgAskDialog::SetMessage(wxString s) +{ + ChangeStaticText(vertSizer, message, wxString(LOG_MSG_MSG) + s); +} + +void LogMsgAskDialog::Init() +{ + static const int ids[N_BUTTONS] = LOG_MSG_ASK_IDS; + static const wxString names[N_BUTTONS] = LOG_MSG_ASK_NAMES; + for (int i=0; iAdd(btn, 1, wxALL, 5); + } + wxSize ms = message->GetSize(); + SetAutoLayout(TRUE); + SetSizer(vertSizer); + vertSizer->Fit(this); + wxSize size = vertSizer->GetMinSize(); + int margin = 10; + SetSizeHints (size.GetWidth () + margin, size.GetHeight () + margin); + Center (); +} + +// Event handler for dialog buttons. Just translate the wx ids into +// enum values and return them with EndModal() to make the dialog +// go away. +void LogMsgAskDialog::OnEvent(wxCommandEvent& event) +{ + int id = event.GetId(); + int ret = -1; + switch (id) { + case ID_Continue: ret = BX_LOG_ASK_CHOICE_CONTINUE; break; + case ID_Die: ret = BX_LOG_ASK_CHOICE_DIE; break; + case ID_DumpCore: ret = BX_LOG_ASK_CHOICE_DUMP_CORE; break; + case ID_Debugger: ret = BX_LOG_ASK_CHOICE_ENTER_DEBUG; break; + case wxID_HELP: ShowHelp(); return; + default: + return; // without EndModal + } + EndModal(ret); +} + +void LogMsgAskDialog::ShowHelp() +{ + wxMessageBox(MSG_NO_HELP, MSG_NO_HELP_CAPTION, wxOK | wxICON_ERROR, this); +} + +////////////////////////////////////////////////////////////////////// +// AdvancedLogOptionsDialog implementation +////////////////////////////////////////////////////////////////////// +// Structure: +// vertSizer: +// logfileSizer +// prompt +// logfile +// browse button +// prompt (multiline) +// applyDefault button +// scrollWin +// scrollpanel +// gridSizer 5 columns +// device +// debug +// info +// error +// panic +// etc. +// buttonSizer: +// help +// cancel +// ok + +// all events go to OnEvent method +BEGIN_EVENT_TABLE(AdvancedLogOptionsDialog, wxDialog) + EVT_BUTTON(-1, AdvancedLogOptionsDialog::OnEvent) + EVT_CHECKBOX(-1, AdvancedLogOptionsDialog::OnEvent) + EVT_TEXT(-1, AdvancedLogOptionsDialog::OnEvent) +END_EVENT_TABLE() + +AdvancedLogOptionsDialog::AdvancedLogOptionsDialog( + wxWindow* parent, + wxWindowID id) + : wxDialog(parent, id, wxT(""), wxDefaultPosition, wxDefaultSize, + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +{ + //static int integers[LOG_OPTS_N_CHOICES_NORMAL] = {0, 1, 2, 3}; + static wxString names[] = ADVLOG_OPTS_TYPE_NAMES; + SetTitle(ADVLOG_OPTS_TITLE); + vertSizer = new wxBoxSizer(wxVERTICAL); + // top level objects + logfileSizer = new wxBoxSizer(wxHORIZONTAL); + vertSizer->Add(logfileSizer, 0, wxTOP|wxLEFT, 20); + wxStaticText *text = new wxStaticText(this, -1, ADVLOG_OPTS_PROMPT); + vertSizer->Add(text, 0, wxALL, 10); + applyDefault = new wxButton(this, ID_ApplyDefault, ADVLOG_DEFAULTS); + vertSizer->Add(applyDefault, 0, wxALL|wxALIGN_RIGHT, 10); + headerSizer = new wxGridSizer(ADVLOG_OPTS_N_TYPES + 1); + vertSizer->Add(headerSizer, 0, wxALL|wxGROW, 10); + scrollWin = new wxScrolledWindow(this, -1); + vertSizer->Add(scrollWin, 1, wxALL|wxGROW, 10); + buttonSizer = new wxBoxSizer(wxHORIZONTAL); + vertSizer->Add(buttonSizer, 0, wxALIGN_RIGHT); + + // logfileSizer contents + text = new wxStaticText(this, -1, ADVLOG_OPTS_LOGFILE); + logfileSizer->Add(text); + logfile = new wxTextCtrl(this, -1, wxT(""), wxDefaultPosition, longTextSize); + logfileSizer->Add(logfile); + wxButton *btn = new wxButton(this, ID_Browse, BTNLABEL_BROWSE); + logfileSizer->Add(btn, 0, wxALL, 5); + + // to get the scrollWin geometry right, first build everything on a wxPanel, + // with gridSizer as the main sizer. + scrollPanel = new wxPanel(scrollWin, -1); + gridSizer = new wxGridSizer(ADVLOG_OPTS_N_TYPES + 1); + // add title row + int typemax = ADVLOG_OPTS_N_TYPES; + text = new wxStaticText(this, -1, wxT("Device")); + headerSizer->Add(text, 0, wxALIGN_LEFT); + int type; + for (type=0; type < typemax; type++) { + text = new wxStaticText(this, -1, names[type]); + headerSizer->Add(text, 0, wxALIGN_LEFT); + } + // add rows of choice boxes, one for each device + int devmax = SIM->get_n_log_modules(); + action = new wxChoice** [devmax]; // array of pointers + for (int dev=0; devget_prefix(dev), "[ ]")) { + action[dev] = new wxChoice* [ADVLOG_OPTS_N_TYPES]; + // name of device in first column + gridSizer->Add(new wxStaticText(scrollPanel, -1, wxString(SIM->get_prefix(dev), wxConvUTF8))); + // wxChoice in every other column + for (type=0; type < typemax; type++) { + action[dev][type] = makeLogOptionChoiceBox(scrollPanel, -1, type); + gridSizer->Add(action[dev][type], 1, wxALL|wxGROW|wxADJUST_MINSIZE, 2); + } + } else { + action[dev] = NULL; + } + } + headerSizer->Fit(this); + headerSizer->SetSizeHints(this); + scrollPanel->SetAutoLayout(TRUE); + scrollPanel->SetSizer(gridSizer); + gridSizer->Fit(scrollPanel); + gridSizer->SetSizeHints(scrollPanel); + wxSize size = scrollPanel->GetBestSize(); + // now we know how big the panel wants to be, and we can set the scrollbar + // and scrollWin size accordingly + + // finally set up the scroll window outside + scrollWin->SetScrollbars(1, 1, size.GetWidth(), size.GetHeight()); + + // now that we know the desired width of the panel, use it to set the + // width of the scrollWin. I tried several things before arriving at + // a solution, and I'll list them for educational purposes. + // + // failure #1: this had no effect at all. sizer took precedence. + // scrollWin->SetSize(500, 500); + // failure #2: this changed scrollWin size but sizer was not notified so + // the overall window didn't expand to make space for it. + // scrollWin->SetSizeHints(500, 500); + // success: tell the sizer to change the scrollWin's size, and it works + vertSizer->SetItemMinSize(scrollWin, size.GetWidth()+30, 400); + + // buttonSizer contents + btn = new wxButton(this, wxID_HELP, BTNLABEL_HELP); + buttonSizer->Add(btn, 0, wxALL, 5); + // use wxID_CANCEL because pressing ESC produces this same code + btn = new wxButton(this, wxID_CANCEL, BTNLABEL_CANCEL); + buttonSizer->Add(btn, 0, wxALL, 5); + btn = new wxButton(this, wxID_OK, BTNLABEL_OK); + buttonSizer->Add(btn, 0, wxALL, 5); +} + +AdvancedLogOptionsDialog::~AdvancedLogOptionsDialog() +{ + int dev, ndev = SIM->get_n_log_modules(); + for (dev=0; devFit(this); + wxSize size = vertSizer->GetMinSize(); + int margin = 5; + SetSizeHints(size.GetWidth() + margin, size.GetHeight() + margin); + Center(); +} + +void AdvancedLogOptionsDialog::CopyParamToGui() { + bx_param_string_c *logfile = SIM->get_param_string(BXPN_LOG_FILENAME); + SetLogfile(wxString(logfile->getptr(), wxConvUTF8)); + // copy log action settings from siminterface to gui + int dev, ndev = SIM->get_n_log_modules(); + int type, ntype = SIM->get_max_log_level(); + for (dev=0; devget_log_action(dev, type)); + } + } +} + +void AdvancedLogOptionsDialog::CopyGuiToParam() { + char buf[1024]; + safeWxStrcpy(buf, GetLogfile(), sizeof(buf)); + bx_param_string_c *logfile = SIM->get_param_string(BXPN_LOG_FILENAME); + logfile->set(buf); + // copy log action settings from gui to siminterface + int dev, ndev = SIM->get_n_log_modules(); + int type, ntype = SIM->get_max_log_level(); + for (dev=0; devset_log_action(dev, type, GetAction(dev, type)); + } + } +} + +void AdvancedLogOptionsDialog::SetAction(int dev, int evtype, int act) { + if (action[dev] == NULL) return; + // find the choice whose client data matches "act". + int *ptr; + // wxLogDebug(wxT("SetAction dev=%d type=%d act=%d"), dev, evtype, act); + wxChoice *control = action[dev][evtype]; + for (int i=0; i < (int)control->GetCount(); i++) { + // wxLogDebug(wxT("reading action[%d][%d]->GetClientData(%d)"), dev, evtype, i); + ptr = (int*) control->GetClientData(i); + if (ptr == NULL) continue; + if (act == *ptr) { // found it! + control->SetSelection(i); + return; + } + } + // this can happen if one of the choices that is excluded by + // ADVLOG_OPTS_EXCLUDE() is used, for example. + wxLogDebug(wxT("warning: SetAction type=%d act=%d not found"), evtype, act); +} + +int AdvancedLogOptionsDialog::GetAction(int dev, int evtype) { + if (action[dev] == NULL) return LOG_OPTS_NO_CHANGE; + int sel = action[dev][evtype]->GetSelection(); + int *ptrToChoice = (int*)action[dev][evtype]->GetClientData(sel); + wxASSERT(ptrToChoice != NULL); + return *ptrToChoice; +} + +void AdvancedLogOptionsDialog::OnEvent(wxCommandEvent& event) +{ + int id = event.GetId(); + switch (id) { + case ID_Browse: + BrowseTextCtrl(logfile); + break; + case ID_ApplyDefault: { + int lev, nlev = SIM->get_max_log_level(); + // copy default settings to every device + for (lev=0; levget_default_log_action(lev); + int dev, ndev = SIM->get_n_log_modules(); + for (dev=0; devAdd (log, 1, wxALL|wxGROW, 10); + wxStaticText *text = new wxStaticText (this, -1, DEBUG_CMD_PROMPT); + mainSizer->Add (text, 0, wxTOP|wxLEFT, 10); + commandSizer = new wxBoxSizer (wxHORIZONTAL); + mainSizer->Add (commandSizer, 0, wxALL|wxGROW, 5); + buttonSizer = new wxBoxSizer (wxHORIZONTAL); + mainSizer->Add (buttonSizer, 0, wxALIGN_RIGHT); + + // commandSizer contents + command = new wxTextCtrl (this, ID_DebugCommand, wxT(""), + wxDefaultPosition, wxDefaultSize, + wxTE_PROCESS_ENTER); + commandSizer->Add (command, 1, wxGROW); + wxButton *btn; + btn = new wxButton (this, ID_Execute, BTNLABEL_EXECUTE); + commandSizer->Add (btn, 0, wxALL, 5); + + // buttonSizer contents + btn = new wxButton (this, wxID_OK, BTNLABEL_CLOSE); + buttonSizer->Add (btn, 0, wxALL, 5); +} + +void DebugLogDialog::Init() +{ + // lay it out! + SetAutoLayout(TRUE); + SetSizer(mainSizer); + mainSizer->Fit(this); + wxSize size = mainSizer->GetMinSize(); + int margin = 5; + SetSizeHints(size.GetWidth() + margin, size.GetHeight() + margin); + Center(); +} + +void DebugLogDialog::Execute(bool clear) +{ + // send to debugger + theFrame->DebugCommand (command->GetValue ()); + // display what they typed on the log screen + if (clear) command->Clear (); +} + +void DebugLogDialog::CheckLogLength () +{ + // truncate the text control periodically to avoid a + // serious memory leak. + wxString str = log->GetValue (); + Bit32u len = str.Length (); + if (len > lengthMax + lengthTolerance) { + // Truncate the string. Start from length - lengthMax, search + // forward until we find the first \n. + for (int i = len - lengthMax; i<(int)(len-1); i++) { + if (str.GetChar (i) == '\n') { + // remove the \n and everything before it. Done. + //printf ("truncating from 0 to %d\n", i+1); + //printf ("\n"); + log->Remove (0, i+1); + return; + } + } + // no newline found?! + //printf ("no newline found! truncating from 0 to %d", len - lengthMax); + //printf ("\n"); + log->Remove (0, len - lengthMax); + } else { + //printf ("log length is %d, no truncation yet", len); + //printf ("\n"); + } +} + +void DebugLogDialog::AppendCommand (const char *cmd) +{ + log->AppendText(wxT(">>> ")); + log->AppendText(wxString(cmd, wxConvUTF8)); + log->AppendText(wxT("\n")); + int n = log->GetLastPosition(); + if (n>0) n--; + log->ShowPosition(n); + CheckLogLength(); +} + +void DebugLogDialog::AppendText (wxString text) { + log->AppendText (text); + int n = log->GetLastPosition (); + if (n>0) n--; + log->ShowPosition (n); + CheckLogLength (); +} + +void DebugLogDialog::OnEvent(wxCommandEvent& event) +{ + int id = event.GetId(); + switch (id) { + case wxID_OK: + Show(FALSE); + break; + case ID_Execute: // pressed execute button + Execute(false); + break; + default: + event.Skip(); + } +} + +void DebugLogDialog::OnKeyEvent(wxKeyEvent& event) +{ + wxLogDebug(wxT("key event")); +} +#endif + +///////////////////////////////////////////////////////////////// +// ParamDialog +///////////////////////////////////////////////////////////////// + +// all events go to OnEvent method +BEGIN_EVENT_TABLE(ParamDialog, wxDialog) + EVT_BUTTON(-1, ParamDialog::OnEvent) + EVT_CHECKBOX(-1, ParamDialog::OnEvent) + EVT_CHOICE(-1, ParamDialog::OnEvent) + EVT_TEXT(-1, ParamDialog::OnEvent) +END_EVENT_TABLE() + +ParamDialog::ParamDialog( + wxWindow* parent, + wxWindowID id) + : wxDialog (parent, id, wxT(""), wxDefaultPosition, wxDefaultSize, + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +{ + idHash = new wxHashTable (wxKEY_INTEGER); + paramHash = new wxHashTable (wxKEY_INTEGER); + nbuttons = 0; + runtime = 0; + + // top level objects + mainSizer = new wxBoxSizer (wxVERTICAL); + + // create buttonSizer, which will hold all the buttons. + buttonSizer = new wxBoxSizer (wxHORIZONTAL); +} + +ParamDialog::~ParamDialog() +{ + paramHash->BeginFind(); + wxNode *node; + while ((node = (wxNode*)paramHash->Next()) != NULL) { + // assume that no ParamStruct appears in the hash table under multiple + // keys. If so, we will delete it twice and corrupt memory. + ParamStruct *pstr = (ParamStruct*) node->GetData(); + // wxLogDebug(wxT("deleting ParamStruct id=%d for param %s"), pstr->id, pstr->param->get_name()); + delete pstr; + } + delete idHash; + delete paramHash; +} + +wxButton* +ParamDialog::AddButton (int id, wxString label) +{ + wxButton *btn = new wxButton (this, id, label); + buttonSizer->Add (btn, 0, wxALL, 5); + nbuttons++; + return btn; +} + +// add the standard HELP, CANCEL, OK buttons. +void ParamDialog::AddDefaultButtons () +{ + AddButton (wxID_HELP, BTNLABEL_HELP); + AddButton (wxID_CANCEL, BTNLABEL_CANCEL); + AddButton (wxID_OK, BTNLABEL_OK); +} + +void ParamDialog::Init() +{ + // if nobody has made any buttons, then create some now + if (nbuttons==0) AddDefaultButtons(); + mainSizer->Add(buttonSizer, 0, wxALIGN_RIGHT); + EnableChanged(); + // lay it out! + SetAutoLayout(TRUE); + SetSizer(mainSizer); + mainSizer->Fit(this); + wxSize size = mainSizer->GetMinSize(); + int margin = 5; + SetSizeHints(size.GetWidth() + margin, size.GetHeight() + margin); + Center(); +} + +static int _next_id = ID_LAST_USER_DEFINED; + +int ParamDialog::genId () { + return ++_next_id; +} + +bool ParamDialog::isGeneratedId (int id) { + return (id >= ID_LAST_USER_DEFINED && id < _next_id); +} + +void ParamDialog::AddParamList(const char *nameList[], bx_param_c *base, wxFlexGridSizer *sizer, bool plain) +{ + int i = 0; + while (nameList[i] != NULL) { + bx_param_c *param = SIM->get_param(nameList[i], base); + if (param != NULL) { + AddParam(param, sizer, plain); + } + i++; + } +} + +// support "legacy" addparam functions. Easier than changing them. +void ParamDialog::AddParam (bx_param_c *param, wxFlexGridSizer *sizer, bool plain) +{ + AddParamContext context; + context.depth = 0; + context.parent = this; + context.vertSizer = mainSizer; + context.gridSizer = sizer; + AddParam (param, plain, &context); +} + +void ParamDialog::AddParam ( + bx_param_c *param_generic, + bool plain, + AddParamContext *context) +{ + AddParamContext defaultContext; + if (context == NULL) { + context = &defaultContext; + context->depth = 0; + context->parent = this; + context->vertSizer = mainSizer; + context->gridSizer = NULL; + } + wxASSERT (context->parent != NULL); + wxASSERT (context->vertSizer != NULL); + if (param_generic == NULL) + return; // param not registered, probably this option was not compiled in + wxLogDebug(wxT("AddParam for param '%s'"), param_generic->get_name()); + if (context->gridSizer == NULL) { + // create a gridSizer if none exists yet. add it to default vertSizer. + context->gridSizer = new wxFlexGridSizer (3); + context->vertSizer->Add (context->gridSizer); + } + wxFlexGridSizer *sizer = context->gridSizer; + + ParamStruct *pstr = new ParamStruct (); + pstr->param = param_generic; + pstr->id = genId (); + pstr->label = NULL; + pstr->u.window = NULL; + pstr->browseButton = NULL; + int type = param_generic->get_type(); + const char *prompt; + if (type == BXT_LIST) { + bx_list_c *list = (bx_list_c*)pstr->param; + prompt = list->get_title()->getptr(); + } else { + prompt = pstr->param->get_label(); + } + if (!prompt) prompt = pstr->param->get_name(); + const char *description = pstr->param->get_description(); + wxASSERT (prompt != NULL); +#define ADD_LABEL(x) sizer->Add(pstr->label = new wxStaticText(context->parent, -1, wxString(x, wxConvUTF8)), 0, wxALIGN_RIGHT|wxALL, 3) + switch (type) { + case BXT_PARAM_BOOL: { + bx_param_bool_c *param = (bx_param_bool_c*) param_generic; + if (!plain) ADD_LABEL(prompt); + wxCheckBox *ckbx = new wxCheckBox (context->parent, pstr->id, wxT("")); + ckbx->SetValue (param->get ()); + if (description) ckbx->SetToolTip(wxString(description, wxConvUTF8)); + sizer->Add (ckbx, 0, wxALL, 2); + if (!plain) sizer->Add (1, 1); // spacer + pstr->u.checkbox = ckbx; + idHash->Put (pstr->id, pstr); + paramHash->Put (pstr->param->get_id (), pstr); + break; + } + case BXT_PARAM_NUM: { + bx_param_num_c *param = (bx_param_num_c*) param_generic; + if (!plain) ADD_LABEL (prompt); + if (param->get_options () & param->USE_SPIN_CONTROL) { + wxSpinCtrl *spinctrl = new wxSpinCtrl (context->parent, pstr->id); + spinctrl->SetValue (param->get ()); + int max = (param->get_max () < (1<<24))?param->get_max ():(1<<24)-1; + spinctrl->SetRange (param->get_min (), SPINCTRL_FIX_MAX (max)); + if (description) spinctrl->SetToolTip(wxString(description, wxConvUTF8)); + sizer->Add (spinctrl, 0, wxALL, 2); + if (!plain) sizer->Add (1, 1); // spacer + pstr->u.spin = spinctrl; + } else { + wxTextCtrl *textctrl = new wxTextCtrl (context->parent, pstr->id, wxT(""), wxDefaultPosition, normalTextSize); + const char *format = param->get_format (); + if (!format) + format = strdup(param->get_base () == 16 ? "0x%X" : "%d"); + SetTextCtrl (textctrl, format, param->get ()); + if (description) textctrl->SetToolTip(wxString(description, wxConvUTF8)); + sizer->Add (textctrl, 0, wxALL, 2); + if (!plain) sizer->Add (1, 1); // spacer + pstr->u.text = textctrl; + } + idHash->Put (pstr->id, pstr); + paramHash->Put (pstr->param->get_id (), pstr); + break; + } + case BXT_PARAM_ENUM: { + bx_param_enum_c *param = (bx_param_enum_c*) param_generic; + if (!plain) ADD_LABEL (prompt); + wxChoice *choice = new wxChoice (context->parent, pstr->id); + if (description) choice->SetToolTip(wxString(description, wxConvUTF8)); + sizer->Add (choice, 0, wxADJUST_MINSIZE, 2); + if (!plain) sizer->Add (1, 1); // spacer + // fill in the choices + int i=0; + const char *ptr; + while (NULL != (ptr = param->get_choice(i++))) + choice->Append(wxString(ptr, wxConvUTF8)); + choice->SetSelection (param->get() - param->get_min()); + pstr->u.choice = choice; + idHash->Put(pstr->id, pstr); + paramHash->Put(pstr->param->get_id(), pstr); + break; + } + case BXT_PARAM_STRING: { + bx_param_string_c *param = (bx_param_string_c*) param_generic; + if (!plain) ADD_LABEL (prompt); + bool isFilename = param->get_options() & param->IS_FILENAME; + wxTextCtrl *txtctrl = new wxTextCtrl (context->parent, pstr->id, wxT(""), wxDefaultPosition, isFilename? longTextSize : normalTextSize); + if (description) txtctrl->SetToolTip(wxString(description, wxConvUTF8)); + if (param->get_options() & param->RAW_BYTES) { + char *value = param->getptr(); + wxString buffer; + char sep_string[2]; + sep_string[0] = param->get_separator(); + sep_string[1] = 0; + for (int i=0; iget_maxsize(); i++) { + wxString eachbyte; + eachbyte.Printf(wxT("%02x"), (unsigned int)0xff&value[i]); + if (i > 0) + buffer += wxString(sep_string, wxConvUTF8); + buffer += eachbyte; + } + txtctrl->SetValue(buffer); + } else { + txtctrl->SetValue(wxString(param->getptr(), wxConvUTF8)); + txtctrl->SetMaxLength(param->get_maxsize()); + } + sizer->Add (txtctrl, 0, wxALL, 2); + if (!plain) { + if (isFilename) { + // create Browse button + pstr->browseButtonId = genId (); + pstr->browseButton = new wxButton (context->parent, + pstr->browseButtonId, BTNLABEL_BROWSE); + sizer->Add (pstr->browseButton, 0, wxALL, 2); + idHash->Put (pstr->browseButtonId, pstr); // register under button id + } else { + sizer->Add (1, 1); // spacer + } + } + pstr->u.text = txtctrl; + idHash->Put (pstr->id, pstr); + paramHash->Put (pstr->param->get_id (), pstr); + break; + } + case BXT_LIST: { + bx_list_c *list = (bx_list_c*) param_generic; + if (list->get_options() & bx_list_c::USE_TAB_WINDOW) { + // put each item in a separate tab of a tabbed window + wxNotebook *notebook = new wxNotebook(context->parent, -1); +#if wxMAJOR_VERSION == 2 && wxMINOR_VERSION < 6 + wxNotebookSizer *nbsizer = new wxNotebookSizer(notebook); +#endif + // put all items in the list into a separate page of the notebook. + for (int i=0; iget_size (); i++) { + bx_list_c *child = (bx_list_c*)list->get(i); + wxASSERT (child->get_type() == BXT_LIST); + // the child must be a list! I could support other things but + // I don't see any reason to. It wouldn't make sense to devote + // a whole tab to a single parameter. + wxPanel *panel = new wxPanel(notebook); + wxBoxSizer *boxsz = new wxBoxSizer(wxVERTICAL); + AddParamContext newcontext; + newcontext.depth = 1 + context->depth; + newcontext.parent = panel; + newcontext.vertSizer = boxsz; + newcontext.gridSizer = NULL; // will be created if needed + // the child itself is a list. Add the child's children in + // this new context. + bx_list_c *childl = (bx_list_c *)child; + for (int j=0; jget_size(); j++) + AddParam (childl->get(j), plain, &newcontext); + const char *pagename = child->get_title()->getptr(); + if (!pagename) pagename = child->get_name(); + panel->SetAutoLayout(TRUE); + panel->SetSizer(boxsz); + notebook->AddPage(panel, wxString(pagename, wxConvUTF8)); + } +#if wxMAJOR_VERSION == 2 && wxMINOR_VERSION < 6 + context->vertSizer->Add(nbsizer, 0, wxALL|wxGROW, 10); +#else + context->vertSizer->Add(notebook, 0, wxALL|wxGROW, 10); +#endif + // clear gridSizer variable so that any future parameters force + // creation of a new one. + context->gridSizer = NULL; + // add to hashes + pstr->u.notebook = notebook; + idHash->Put(pstr->id, pstr); + paramHash->Put(pstr->param->get_id(), pstr); + } else { + wxString boxTitle; + if (list->get_options() & bx_list_c::USE_BOX_TITLE) { + boxTitle = wxString(prompt, wxConvUTF8); + } else { + boxTitle = wxT(""); + } + wxStaticBox *box = new wxStaticBox(context->parent, -1, boxTitle); + wxStaticBoxSizer *boxsz = new wxStaticBoxSizer(box, wxVERTICAL); + AddParamContext newcontext; + newcontext.depth = 1 + context->depth; + newcontext.parent = context->parent; + newcontext.gridSizer = NULL; // it will be created if necessary + newcontext.vertSizer = boxsz; + // put all items in the list inside the boxsz sizer. + for (int i=0; iget_size (); i++) { + bx_param_c *child = list->get (i); + AddParam (child, plain, &newcontext); + } + // add the boxsz to vertSizer + context->vertSizer->Add (boxsz, 0, wxALL|wxGROW, 10); + // clear gridSizer variable so that any future parameters force + // creation of a new one. + context->gridSizer = NULL; + // add to hashes + pstr->u.staticbox = box; + idHash->Put (pstr->id, pstr); + paramHash->Put (pstr->param->get_id (), pstr); + } + break; + } + default: + wxLogError(wxT("ParamDialog::AddParam called with unsupported param type id=%d"), (int)type); + } + if (pstr->label) pstr->label->Enable(pstr->param->get_enabled()); + if (pstr->u.window) pstr->u.window->Enable(pstr->param->get_enabled()); + if (pstr->browseButton) pstr->browseButton->Enable(pstr->param->get_enabled()); +} + +bool ParamDialog::CopyGuiToParam() +{ + // loop through all the parameters + idHash->BeginFind(); + wxNode *node; + while ((node = (wxNode*)idHash->Next()) != NULL) { + ParamStruct *pstr = (ParamStruct*) node->GetData(); + wxLogDebug(wxT("commit changes for param %s"), pstr->param->get_name()); + CopyGuiToParam(pstr->param); + if (pstr->param->get_type() == BXT_LIST) break; + } + return true; +} + +bool ParamDialog::CopyGuiToParam(bx_param_c *param) +{ + int i; + + if (param == NULL) return false; + ParamStruct *pstr = (ParamStruct*) paramHash->Get(param->get_id()); + wxLogDebug(wxT("commit changes for param %s"), param->get_name()); + int type = param->get_type(); + switch (type) { + case BXT_PARAM_BOOL: { + bx_param_bool_c *boolp = (bx_param_bool_c*) pstr->param; + bool val = pstr->u.checkbox->GetValue(); + if (val != boolp->get()) boolp->set(val); + break; + } + case BXT_PARAM_NUM: { + bx_param_num_c *nump = (bx_param_num_c*) pstr->param; + bool valid; + int n; + wxString complaint(wxT("Invalid integer for '")); + complaint += wxString(pstr->param->get_name(), wxConvUTF8); + complaint += wxT("'."); + if (nump->get_options() & nump->USE_SPIN_CONTROL) { + n = pstr->u.spin->GetValue(); + } else { + n = GetTextCtrlInt(pstr->u.text, &valid, true, complaint); + } + if ((n < nump->get_min()) || (n > nump->get_max())) { + wxMessageBox(wxT("Numerical parameter out of range"), wxT("Error"), wxOK | wxICON_ERROR, this); + return false; + } + if (n != nump->get()) nump->set(n); + break; + } + case BXT_PARAM_ENUM: { + bx_param_enum_c *enump = (bx_param_enum_c*) pstr->param; + int value = pstr->u.choice->GetSelection() + enump->get_min(); + if (value != enump->get()) enump->set(value); + break; + } + case BXT_PARAM_STRING: { + bx_param_string_c *stringp = (bx_param_string_c*) pstr->param; + char buf[1024]; + wxString tmp(pstr->u.text->GetValue()); + if (stringp->get_options() & stringp->RAW_BYTES) { + char src[1024]; + int p = 0; + unsigned int n; + strcpy(src, tmp.mb_str(wxConvUTF8)); + for (i=0; iget_maxsize(); i++) + buf[i] = 0; + for (i=0; iget_maxsize(); i++) { + while (src[p] == stringp->get_separator()) + p++; + if (src[p] == 0) break; + // try to read a byte of hex + if (sscanf (src+p, "%02x", &n) == 1) { + buf[i] = n; + p+=2; + } else { + wxMessageBox(wxT("Illegal raw byte format"), wxT("Error"), wxOK | wxICON_ERROR, this); + return false; + } + } + } else { + strncpy(buf, tmp.mb_str(wxConvUTF8), sizeof(buf)); + } + buf[sizeof(buf)-1] = 0; + if (!stringp->equals(buf)) stringp->set(buf); + break; + } + case BXT_LIST: { + bx_list_c *list = (bx_list_c*) param; + for (i = 0; i < list->get_size(); i++) { + bx_param_c *item = list->get(i); + if (!CopyGuiToParam(item)) break; + } + break; + } + default: + wxLogError(wxT("ParamDialog::CopyGuiToParam: unsupported param type id=%d"), (int)type); + } + return true; +} + +void ParamDialog::EnableChanged() +{ + idHash->BeginFind(); + wxNode *node; + while ((node = (wxNode*)idHash->Next ()) != NULL) { + ParamStruct *pstr = (ParamStruct*) node->GetData(); + if (runtime) { + if ((pstr->param->get_type() != BXT_LIST) && !pstr->param->get_runtime_param()) + EnableParam(pstr->param->get_id(), false); + } + // special cases that can't be handled in the usual way + } +} + +void ParamDialog::EnableChanged(ParamStruct *pstr) +{ + wxLogDebug(wxT("EnableChanged on param %s"), pstr->param->get_name()); + ProcessDependentList(pstr, true); +} + +void ParamDialog::EnableParam(int param_id, bool enabled) +{ + ParamStruct *pstr = (ParamStruct*) paramHash->Get(param_id); + if (!pstr) return; + if (pstr->label) pstr->label->Enable(enabled); + if (pstr->browseButton) pstr->browseButton->Enable(enabled); + if (pstr->u.window) pstr->u.window->Enable(enabled); +} + +void ParamDialog::ProcessDependentList(ParamStruct *pstrChanged, bool enabled) +{ + bx_param_c *dparam; + ParamStruct *pstr; + Bit64s value; + bool en; + int i; + + bx_list_c *list = pstrChanged->param->get_dependent_list(); + if (list) { + if (pstrChanged->param->get_type() == BXT_PARAM_ENUM) { + bx_param_enum_c *enump = (bx_param_enum_c*)pstrChanged->param; + value = pstrChanged->u.choice->GetSelection() + enump->get_min(); + Bit64u enable_bitmap = enump->get_dependent_bitmap(value); + Bit64u mask = 0x1; + for (i = 0; i < list->get_size(); i++) { + dparam = list->get(i); + if (dparam != enump) { + en = (enable_bitmap & mask) && enabled; + pstr = (ParamStruct*) paramHash->Get(dparam->get_id()); + if (pstr) { + if (en != pstr->u.window->IsEnabled()) { + EnableParam(dparam->get_id(), en); + ProcessDependentList(pstr, en); + } + } + } + mask <<= 1; + } + } else if ((pstrChanged->param->get_type() == BXT_PARAM_BOOL) || + (pstrChanged->param->get_type() == BXT_PARAM_NUM) || + (pstrChanged->param->get_type() == BXT_PARAM_STRING)) { + bx_param_c *param = pstrChanged->param; + if (param->get_type() == BXT_PARAM_BOOL) { + value = pstrChanged->u.checkbox->GetValue(); + } else if (param->get_type() == BXT_PARAM_NUM) { + bx_param_num_c *nump = (bx_param_num_c*)param; + if (nump->get_options() & nump->USE_SPIN_CONTROL) { + value = (pstrChanged->u.spin->GetValue() > 0); + } else { + bool valid; + value = (GetTextCtrlInt(pstrChanged->u.text, &valid, true, wxT("")) > 0); + } + } else { + wxString tmp(pstrChanged->u.text->GetValue()); + value = !tmp.IsEmpty() && tmp.compare(wxT("none")); + } + for (i = 0; i < list->get_size(); i++) { + dparam = list->get(i); + if (dparam != param) { + en = (value && enabled); + pstr = (ParamStruct*) paramHash->Get(dparam->get_id()); + if (pstr) { + if (en != pstr->u.window->IsEnabled()) { + EnableParam(dparam->get_id(), en); + ProcessDependentList(pstr, en); + } + } + } + } + } + } +} + +// if any parameters changed, update the associated control +void ParamDialog::CopyParamToGui() +{ + // loop through all the parameters + idHash->BeginFind (); + wxNode *node; + while ((node = (wxNode*)idHash->Next ()) != NULL) { + ParamStruct *pstr = (ParamStruct*) node->GetData (); + IFDBG_DLG(wxLogDebug(wxT("refresh param %s"), pstr->param->get_name())); + int type = pstr->param->get_type (); + switch (type) { + case BXT_PARAM_BOOL: { + bx_param_bool_c *boolp = (bx_param_bool_c*) pstr->param; + pstr->u.checkbox->SetValue(boolp->get()); + break; + } + case BXT_PARAM_NUM: { + bx_param_num_c *nump = (bx_param_num_c*) pstr->param; + const char *format = nump->get_format(); + if (!format) + format = strdup(nump->get_base() == 16 ? "0x%X" : "%d"); + SetTextCtrl(pstr->u.text, format, nump->get()); + break; + } + case BXT_PARAM_ENUM: { + bx_param_enum_c *enump = (bx_param_enum_c*) pstr->param; + pstr->u.choice->SetSelection(enump->get() - enump->get_min()); + break; + } + case BXT_PARAM_STRING: { + bx_param_string_c *stringp = (bx_param_string_c*) pstr->param; + pstr->u.text->SetValue(wxString(stringp->getptr(), wxConvUTF8)); + break; + } + case BXT_LIST: + break; + default: + wxLogError(wxT("ParamDialog::CopyParamToGui(): unsupported param type id=%d"), (int)type); + } + } +} + +void ParamDialog::OnEvent(wxCommandEvent& event) +{ + int id = event.GetId(); + if (isGeneratedId(id)) { + ParamStruct *pstr = (ParamStruct*) idHash->Get(id); + if (pstr == NULL) { + wxLogDebug(wxT("ParamStruct not found for id=%d"), id); + return; + } + if (id == pstr->id) { + IFDBG_DLG(wxLogDebug(wxT("event came from window %p (id=%d) controlled by parameter '%s'"), pstr->u.window, id, pstr->param->get_name())); + switch (pstr->param->get_type ()) { + case BXT_PARAM_BOOL: + case BXT_PARAM_NUM: + case BXT_PARAM_ENUM: + case BXT_PARAM_STRING: + EnableChanged(pstr); + break; + } + return; + } + if (id == pstr->browseButtonId) { + wxLogDebug(wxT("browse button id=%d attached to wxTextCtrl %p"), id, pstr->u.text); + BrowseTextCtrl(pstr->u.text); + return; + } + wxLogDebug(wxT("id was key to ParamStruct but doesn't match either id inside")); + } + switch (id) { + case wxID_OK: + if (IsModal()) { + if (CopyGuiToParam()) + EndModal (wxID_OK); + } else { + CopyParamToGui(); + } + break; + case wxID_CANCEL: + if (IsModal ()) + EndModal (wxID_CANCEL); + else + Show (FALSE); + break; + case wxID_HELP: + ShowHelp(); + break; + default: + event.Skip (); + } +} + +void ParamDialog::ShowHelp() +{ + wxMessageBox(MSG_NO_HELP, MSG_NO_HELP_CAPTION, wxOK | wxICON_ERROR, this); +} + +///////////////////////////////////////////////////////////////// +// CpuRegistersDialog +///////////////////////////////////////////////////////////////// +// Structure: +// - mainSizer +// - mainRegsSizer (grid or flexgrid) +// - col0: flexgrid +// - params from EAX to ESP +// - col1: flexgrid +// - params from EIP to EFLAGS +// - col2: flexgrid +// - params from LDTR to IDTR limit +// - flagsSizer +// - extRegsSizer +// - col0: flexgrid +// - DR* params +// - col1: flexgrid +// - TR* params +// - col2: flexgrid +// - CR* params + +// all events go to OnEvent method +BEGIN_EVENT_TABLE(CpuRegistersDialog, wxDialog) + EVT_BUTTON(-1, CpuRegistersDialog::OnEvent) + EVT_CHECKBOX(-1, CpuRegistersDialog::OnEvent) + EVT_TEXT(-1, CpuRegistersDialog::OnEvent) +END_EVENT_TABLE() + +CpuRegistersDialog::CpuRegistersDialog( + wxWindow* parent, + wxWindowID id) + : ParamDialog(parent, id) +{ + wxFlexGridSizer *column; + nflags = 0; + const char *mainRegList1[] = CPU_REGS_MAIN_REGS1; + const char *mainRegList2[] = CPU_REGS_MAIN_REGS2; + const char *mainRegList3[] = CPU_REGS_MAIN_REGS3; + const char *flagList[] = CPU_REGS_FLAGS; + const char *controlList[] = CPU_REGS_CONTROL_REGS; + const char *debugList[] = CPU_REGS_DEBUG_REGS; + const char *testList[] = CPU_REGS_TEST_REGS; + bx_list_c *base = (bx_list_c*)SIM->get_param(BXPN_WX_CPU0_STATE); + + // top level objects + wxStaticBox *mainRegsBox = new wxStaticBox(this, -1, wxT("Basic Registers")); + wxStaticBoxSizer *mainRegsBoxSizer = + new wxStaticBoxSizer(mainRegsBox, wxVERTICAL); + mainSizer->Add(mainRegsBoxSizer, 0, wxALL|wxGROW, 10); + + wxStaticBox *flagsBox = new wxStaticBox(this, -1, wxT("EFLAGS Bits")); + wxStaticBoxSizer *flagsBoxSizer = + new wxStaticBoxSizer(flagsBox, wxVERTICAL); + mainSizer->Add(flagsBoxSizer, 0, wxALL|wxGROW, 10); + + wxStaticBox *otherBox = new wxStaticBox(this, -1, wxT("Other Registers")); + wxStaticBoxSizer *otherBoxSizer = + new wxStaticBoxSizer(otherBox, wxVERTICAL); + mainSizer->Add(otherBoxSizer, 0, wxALL|wxGROW, 10); + + // mainRegsSizer contents + mainRegsSizer = new wxFlexGridSizer(3); + mainRegsBoxSizer->Add(mainRegsSizer, 0, wxALL, 3); + column = new wxFlexGridSizer(3); + mainRegsSizer->Add(column, 0, wxALL, 10); + AddParamList(mainRegList1, base, column); + + column = new wxFlexGridSizer(3); + mainRegsSizer->Add(column, 0, wxALL, 10); + AddParamList(mainRegList2, base, column); + + column = new wxFlexGridSizer(3); + mainRegsSizer->Add(column, 0, wxALL, 10); + AddParamList(mainRegList3, base, column); + + // add flag parameters + flagsSizer = new wxFlexGridSizer(CPU_REGS_MAX_FLAGS); + flagsBoxSizer->Add(flagsSizer, 0, wxALL | wxALIGN_CENTER, 3); + int i = 0; + while (flagList[i] != NULL) { + bx_param_c *param = SIM->get_param(flagList[i], base); + if (param != NULL) { + AddFlag(param); + } + i++; + } + + // extRegsSizer contents + extRegsSizer = new wxFlexGridSizer(3); + otherBoxSizer->Add(extRegsSizer, 0, wxALL, 3); + + column = new wxFlexGridSizer(3); + extRegsSizer->Add(column, 0, wxALL, 10); + AddParamList(controlList, base, column); + + column = new wxFlexGridSizer(3); + extRegsSizer->Add(column, 0, wxALL, 10); + AddParamList(debugList, base, column); + + column = new wxFlexGridSizer(3); + extRegsSizer->Add(column, 0, wxALL, 10); + AddParamList(testList, base, column); + + // add buttons +#if BX_DEBUGGER + // only show these if debugger is enabled + contButton = AddButton(ID_Debug_Continue, BTNLABEL_DEBUG_CONTINUE); + stopButton = AddButton(ID_Debug_Stop, BTNLABEL_DEBUG_STOP); + stepButton = AddButton(ID_Debug_Step, BTNLABEL_DEBUG_STEP); + //commitButton = AddButton(ID_Debug_Commit, BTNLABEL_DEBUG_COMMIT); +#endif + AddButton(ID_Close, BTNLABEL_CLOSE); +} + +void CpuRegistersDialog::AddFlag(bx_param_c *param) +{ + if (param == NULL) { + wxLogDebug(wxT("AddFlag on undefined param")); + return; + } + wxASSERT(nflags < CPU_REGS_MAX_FLAGS); + flagptr[nflags++] = param; +} + +void CpuRegistersDialog::Init() +{ + int i; + for (i=0; iAdd(new wxStaticText(this, -1, wxString(param->get_label(), wxConvUTF8)), 0, wxALL|wxALIGN_LEFT, 4); + } else { + flagsSizer->Add(0, 0); // spacer + } + } + for (i=0; iGet(SIM->get_param(BXPN_WX_CPU0_EFLAGS_IOPL)->get_id()); + if (pstr != NULL) { + wxSize size = pstr->u.text->GetSize(); + size.SetWidth (size.GetWidth() / 2); + pstr->u.text->SetSize(size); + flagsSizer->SetItemMinSize(pstr->u.text, size.GetWidth(), size.GetHeight()); + } + ParamDialog::Init(); + stateChanged(false); +} + +void CpuRegistersDialog::stateChanged (bool simRunning) +{ +#if BX_DEBUGGER + contButton->Enable (!simRunning); + stepButton->Enable (!simRunning); + stopButton->Enable (simRunning); +#endif +} + +void CpuRegistersDialog::CopyParamToGui () +{ + ParamDialog::CopyParamToGui (); +#if BX_DEBUGGER + stateChanged (SIM->get_param_bool(BXPN_DEBUG_RUNNING)->get()); +#endif +} + +// How am I going to communicate with the debugger? +// +// The current model is that the debugger asks you for a command, and +// blocks forever until you press return. Then it interprets the command, +// however long it takes, and returns to the input loop when the command +// is done. A control-C can stop a command prematurely. +// +// To extend this into wxWidgets multithreaded space, I will create a +// synchronous event called BX_SYNC_GET_DBG_COMMAND which is sent from +// the simulation thread to wxWidgets. When the user chooses a debugger +// action (step, continue, breakpoint, etc.) the simulation awakens and +// interprets the event by calling a function in bx_debug/dbg_main.cc. +// +// The equivalent of a control-C is pressing the "Stop" button during +// a long step or continue command. This can be implemented by setting +// bx_guard.interrupt_requested = 1, just like the SIGINT handler in +// bx_debug/dbg_main.cc does. +// +// input loop model is good. Create a debugger input loop, possibly in +// siminterface. +// in the simulation thread. This loop waits for a command from the +// wxWidgets debugger +// +// For example, if you press the "Step" button 5 +// times, with each click it should call bx_dbg_stepN_command(1) in the +// simulator thread. When it returns, it goes back to +// +void CpuRegistersDialog::OnEvent(wxCommandEvent& event) +{ + int id = event.GetId (); + switch (id) { + case ID_Close: + Show(FALSE); + break; +#if BX_DEBUGGER + case ID_Debug_Stop: + wxLogDebug(wxT("wxWidgets triggered a break")); + theFrame->DebugBreak(); + break; + case ID_Debug_Continue: + wxLogDebug(wxT("before calling DebugCommand")); + theFrame->DebugCommand("continue"); + wxLogDebug(wxT("after calling DebugCommand")); + break; + case ID_Debug_Step: + theFrame->DebugCommand("step 1"); + break; + case ID_Debug_Commit: + CopyGuiToParam(); + break; +#endif + default: + ParamDialog::OnEvent(event); + } +} + +////////////////////////////////////////////////////////////////////// +// FloppyConfigDialog implementation +////////////////////////////////////////////////////////////////////// + +// all events go to OnEvent method +BEGIN_EVENT_TABLE(FloppyConfigDialog, wxDialog) + EVT_BUTTON(-1, FloppyConfigDialog::OnEvent) + EVT_CHECKBOX(-1, FloppyConfigDialog::OnEvent) + EVT_CHOICE(-1, FloppyConfigDialog::OnEvent) + EVT_TEXT(-1, FloppyConfigDialog::OnEvent) +END_EVENT_TABLE() + +FloppyConfigDialog::FloppyConfigDialog( + wxWindow* parent, + wxWindowID id) + : ParamDialog(parent, id) +{ + createButton = AddButton(ID_Create, wxT("Create Image")); + AddDefaultButtons(); +} + +void FloppyConfigDialog::Setup(bx_list_c *list) +{ + int devtype_id, path_id, media_id, status_id, readonly_id; + + devtype_id = list->get_by_name("devtype")->get_id(); + path_id = list->get_by_name("path")->get_id(); + media_id = list->get_by_name("type")->get_id(); + status_id = list->get_by_name("status")->get_id(); + readonly_id = list->get_by_name("readonly")->get_id(); + AddParam(list); + pstrDevice = (ParamStruct*) paramHash->Get(devtype_id); + pstrPath = (ParamStruct*) paramHash->Get(path_id); + pstrMedia = (ParamStruct*) paramHash->Get(media_id); + pstrStatus = (ParamStruct*) paramHash->Get(status_id); + pstrReadonly = (ParamStruct*) paramHash->Get(readonly_id); +} + +void FloppyConfigDialog::OnEvent(wxCommandEvent& event) +{ + int id = event.GetId(); + if (isGeneratedId(id)) { + ParamStruct *pstr = (ParamStruct*) idHash->Get(id); + if (pstr == NULL) { + wxLogDebug(wxT("ParamStruct not found for id=%d"), id); + return; + } + if (id == pstr->id) { + if ((pstr == pstrDevice) || (pstr == pstrMedia)) { + int val1 = pstrDevice->u.choice->GetSelection() + ((bx_param_num_c*)pstrDevice->param)->get_min(); + int val2 = pstrMedia->u.choice->GetSelection() + ((bx_param_num_c*)pstrMedia->param)->get_min(); + createButton->Enable((val1 != BX_FDD_NONE) && (val2 != BX_FLOPPY_NONE)); + } else if ((pstr == pstrPath) && (!pstrPath->u.text->IsModified())) { + pstrMedia->u.choice->SetSelection(pstrMedia->u.choice->FindString(wxT("auto"))); + pstrStatus->u.checkbox->SetValue(1); + } + } + ParamDialog::OnEvent(event); + } else { + switch (id) { + case ID_Create: + { + int cap = pstrMedia->u.choice->GetSelection(); + char name[1024]; + strncpy(name, pstrPath->u.text->GetValue().mb_str(wxConvUTF8), sizeof(name)); + if ((floppy_type_n_sectors[cap] > 0) && (strlen(name) > 0) && (strcmp(name, "none"))) { + if (CreateImage (0, floppy_type_n_sectors[cap], name)) { + wxString msg(wxT("Created a ")); + msg += pstrMedia->u.choice->GetString(cap); + msg += wxT(" disk image called '"); + msg += pstrPath->u.text->GetValue(); + msg += wxT("'."); + wxMessageBox(msg, wxT("Image Created"), wxOK | wxICON_INFORMATION, this); + } + } + } + break; + default: + ParamDialog::OnEvent(event); + } + } +} + +////////////////////////////////////////////////////////////////////// +// LogOptionsDialog implementation +////////////////////////////////////////////////////////////////////// + +// all events go to OnEvent method +BEGIN_EVENT_TABLE(LogOptionsDialog, wxDialog) + EVT_BUTTON(-1, LogOptionsDialog::OnEvent) + EVT_CHECKBOX(-1, LogOptionsDialog::OnEvent) + EVT_TEXT(-1, LogOptionsDialog::OnEvent) +END_EVENT_TABLE() + +LogOptionsDialog::LogOptionsDialog( + wxWindow* parent, + wxWindowID id) + : ParamDialog(parent, id) +{ + static wxString names[] = LOG_OPTS_TYPE_NAMES; + SetTitle(LOG_OPTS_TITLE); + AddParam(SIM->get_param("log")); + wxStaticText *text = new wxStaticText(this, -1, LOG_OPTS_PROMPT); + mainSizer->Add(text, 0, wxALL, 10); + gridSizer = new wxFlexGridSizer (2); + mainSizer->Add(gridSizer, 1, wxLEFT, 40); + text = new wxStaticText (this, -1, LOG_OPTS_ADV); + mainSizer->Add(text, 0, wxTOP|wxLEFT, 20); + + // gridSizer contents + gridSizer->AddGrowableCol(1); + for (int evtype=0; evtypeAdd(new wxStaticText (this, -1, names[evtype]), 0, wxALL, 5); + action[evtype] = makeLogOptionChoiceBox(this, -1, evtype, true); + gridSizer->Add(action[evtype], 1, wxALL|wxGROW|wxADJUST_MINSIZE, 5); + } +} + +void LogOptionsDialog::SetAction(int evtype, int a) +{ + // find the choice whose client data matches "a". + int *ptr; + //wxLogDebug ("SetAction type=%d a=%d", evtype, a); + for (int i=0; i < (int)action[evtype]->GetCount(); i++) { + //wxLogDebug ("reading action[%d]->GetClientData(%d)", evtype, i); + ptr = (int*) action[evtype]->GetClientData(i); + if (ptr == NULL) continue; + if (a == *ptr) { // found it! + action[evtype]->SetSelection(i); + return; + } + } + // this can happen if one of the choices that is excluded by + // LOG_OPTS_EXCLUDE() is used, for example. + wxLogDebug(wxT("SetAction type=%d a=%d not found"), evtype, a); +} + +int LogOptionsDialog::GetAction(int evtype) +{ + int sel = action[evtype]->GetSelection(); + int *ptrToChoice = (int*)action[evtype]->GetClientData(sel); + wxASSERT(ptrToChoice != NULL); + return *ptrToChoice; +} + + +///////////////////////////////////////////////////////////////// +// utility +///////////////////////////////////////////////////////////////// + +// Unfortunately this step is necessary if you change the text of +// a wxStaticText. Otherwise the sizer that contains the text never realizes +// that the size has changed, and the layout is never updated. The +// SetItemMinSize trick was reported on comp.soft-sys.wxwindows by +// Dirk Birnhardt. +void ChangeStaticText (wxSizer *sizer, wxStaticText *win, wxString newtext) +{ + win->SetLabel(newtext); + wxSize sz = win->GetSize(); + sizer->SetItemMinSize(win, sz.GetWidth(), sz.GetHeight()); +} + +// CreateImage produces a disk image. It's in the utility function +// area because it's used by both floppy and hard disk image creation. +bool CreateImage (int harddisk, int sectors, const char *filename) +{ + if (sectors<1) { + wxMessageBox(wxT("The disk size is invalid."), wxT("Invalid Size"), wxOK | wxICON_ERROR); + return false; + } + wxLogDebug(wxT("filename = '%s'\n"), filename); + if (strlen (filename) < 1) { + wxMessageBox(wxT("You must type a file name for the new disk image."), wxT("Bad Filename"), wxOK | wxICON_ERROR); + return false; + } + // create disk image with name and capacity determined by the filename + // and sector args. Call SIM->create_image (filename, sectors, overwrite=0) + // first which will create the file if it doesn't already exist. If it + // exists, it will instead return -1, and we can ask the user "are you sure + // you want to overwrite?". If yes, call again with overwrite=1. + int ret = SIM->create_disk_image (filename, sectors, 0); + if (ret == -1) { // already exists + int answer = wxMessageBox(wxT("File exists. Do you want to overwrite it?"), + wxT("File exists"), wxYES_NO | wxCENTER); + if (answer == wxYES) + ret = SIM->create_disk_image (filename, sectors, 1); + else + return false; // wxNO + } + if (ret == -2) { + wxMessageBox(wxT("I could not create the disk image. Check for permission problems or available disk space."), wxT("Failed"), wxOK | wxICON_ERROR); + return false; + } + wxASSERT (ret==0); + return true; +} + +void SetTextCtrl(wxTextCtrl *ctrl, const char *format, int val) +{ + wxString tmp; + tmp.Printf(wxString(format, wxConvUTF8), val); + ctrl->SetValue(tmp); +} + +int GetTextCtrlInt (wxTextCtrl *ctrl, + bool *valid, + bool complain, + wxString complaint) +{ + wxString tmp (ctrl->GetValue()); + char buf[1024]; + strncpy(buf, tmp.mb_str(wxConvUTF8), sizeof(buf)); + int n = strtol(buf, NULL, 0); + if (n != LONG_MIN && n != LONG_MAX) { + if (valid) *valid = true; + return n; + } + if (valid) *valid = false; + if (complain) { + wxMessageBox(complaint, wxT("Invalid"), wxOK | wxICON_ERROR); + ctrl->SetFocus(); + } + return -1; +} + +bool BrowseTextCtrl(wxTextCtrl *text, wxString prompt, long style) +{ + // try to configure the dialog to show hidden files + wxConfigBase::Get() ->Write(wxT("/wxWidgets/wxFileDialog/ShowHidden"), true); + wxFileDialog *fdialog = new wxFileDialog (text->GetParent(), prompt, wxT(""), text->GetValue(), wxT("*.*"), style); + int result = fdialog->ShowModal(); + if (result == wxID_OK) + text->SetValue(fdialog->GetPath()); + delete fdialog; + return (result == wxID_OK); +} + +wxChoice *makeLogOptionChoiceBox (wxWindow *parent, + wxWindowID id, + int evtype, + bool includeNoChange) +{ + static wxString choices[] = LOG_OPTS_CHOICES; + static int integers[LOG_OPTS_N_CHOICES] = {0, 1, 2, 3, 4}; + wxChoice *control = new wxChoice(parent, id, wxDefaultPosition, wxDefaultSize); + int lastChoice = 0; // remember index of last choice + int nchoice = includeNoChange? LOG_OPTS_N_CHOICES : LOG_OPTS_N_CHOICES_NORMAL; + for (int choice=0; choiceAppend(choices[choice], &integers[choice]); + // the client data is an int* that points to the choice number. + // This is what will be returned by GetAction(). + lastChoice++; + } + } + control->SetSelection (lastChoice-1); + return control; +} + +#endif /* if BX_WITH_WX */ diff --git a/bochs/gui/wxdialog.h b/bochs/gui/wxdialog.h new file mode 100644 index 00000000..122ac5ce --- /dev/null +++ b/bochs/gui/wxdialog.h @@ -0,0 +1,896 @@ +//////////////////////////////////////////////////////////////////// +// $Id$ +//////////////////////////////////////////////////////////////////// + +// wxWidgets dialogs for Bochs + +#include +#include + +//////////////////////////////////////////////////////////////////// +// text messages used in several places +//////////////////////////////////////////////////////////////////// +#define MSG_NO_HELP wxT("No help is available yet.") +#define MSG_NO_HELP_CAPTION wxT("No help") +#define MSG_ENABLED wxT("Enabled") +#define BTNLABEL_HELP wxT("Help") +#define BTNLABEL_CANCEL wxT("Cancel") +#define BTNLABEL_OK wxT("Ok") +#define BTNLABEL_CREATE_IMG wxT("Create Image") +#define BTNLABEL_BROWSE wxT("<--Browse") +#define BTNLABEL_DEBUG_CONTINUE wxT("Continue") +#define BTNLABEL_DEBUG_STOP wxT("Stop") +#define BTNLABEL_DEBUG_STEP wxT("Step") +#define BTNLABEL_DEBUG_COMMIT wxT("Commit") +#define BTNLABEL_CLOSE wxT("Close") +#define BTNLABEL_EXECUTE wxT("Execute") + +#if defined(WIN32) +// On win32, apparantly the spinctrl depends on a native control which only +// has a 16bit signed value. If you try to set the max above 32767, it +// overflows and does stupid things. +#define SPINCTRL_FIX_MAX(x) ((x)>32767 ? 32767 : (x)) +#else +#define SPINCTRL_FIX_MAX(x) x +#endif + +// utility function prototype +void ChangeStaticText(wxSizer *sizer, wxStaticText *win, wxString newtext); +bool CreateImage(int harddisk, int sectors, const char *filename); +void SetTextCtrl(wxTextCtrl *text, const char *format, int val); +int GetTextCtrlInt(wxTextCtrl *text, bool *valid = NULL, bool complain=false, wxString complaint = wxT("Invalid integer!")); +bool BrowseTextCtrl(wxTextCtrl *text, + wxString prompt= wxT("Choose a file"), + long style=wxOPEN); +wxChoice *makeLogOptionChoiceBox(wxWindow *parent, wxWindowID id, int evtype, bool includeNoChange = false); + +//////////////////////////////////////////////////////////////////// +// LogMsgAskDialog is a modal dialog box that shows the user a +// simulation error message and asks if they want to continue or +// not. It looks something like this: +// +// +----- PANIC ---------------------------------------------------+ +// | | +// | Context: Hard Drive | +// | Message: could not open hard drive image file '30M.sample' | +// | | +// | [ ] Don't ask about future messages like this | +// | | +// | [Continue] [Die] [Dump Core] [Debugger] [Help] | +// +---------------------------------------------------------------+ +// +// To use this dialog: +// After constructor, use SetContext, SetMessage, EnableButton to +// determine what will be displayed. Then call n = ShowModal(). The return +// value tells which button was pressed (button_t types). Call GetDontAsk() +// to see if they checked "Don't ask about..." or not. +////////////////////////////////////////////////////////////////////// + +class LogMsgAskDialog: public wxDialog +{ +public: + enum button_t { + CONT=0, DIE, DUMP, DEBUG, HELP, + N_BUTTONS /* number of entries in enum */ + }; +#define LOG_MSG_ASK_IDS \ + { ID_Continue, ID_Die, ID_DumpCore, ID_Debugger, wxHELP } +#define LOG_MSG_ASK_NAMES \ + { wxT("Continue"), wxT("Kill Sim"), wxT("Dump Core"), wxT("Debugger"), wxT("Help") } +#define LOG_MSG_DONT_ASK_STRING \ + wxT("Don't ask about future messages like this") +#define LOG_MSG_CONTEXT wxT("Context: ") +#define LOG_MSG_MSG wxT("Message: ") +private: + wxStaticText *context, *message; + wxCheckBox *dontAsk; + bool enabled[N_BUTTONS]; + wxBoxSizer *btnSizer, *vertSizer; + void Init(); // called automatically by ShowModal() + void ShowHelp(); +public: + LogMsgAskDialog(wxWindow* parent, + wxWindowID id, + const wxString& title); + void EnableButton(button_t btn, bool en) { enabled[(int)btn] = en; } + void SetContext(wxString s); + void SetMessage(wxString s); + bool GetDontAsk() { return dontAsk->GetValue(); } + void OnEvent(wxCommandEvent& event); + int ShowModal() { Init(); return wxDialog::ShowModal(); } +DECLARE_EVENT_TABLE() +}; + +//////////////////////////////////////////////////////////////////////////// +// AdvancedLogOptionsDialog +//////////////////////////////////////////////////////////////////////////// +// +---- Advanced event configuration -----------------------+ +// | | +// | Log file is [_____________________________] [ Browse ] | +// | | +// | This table determines how Bochs will respond to each | +// | kind of event coming from a particular source. For | +// | example if you are having problems with the keyboard, | +// | you could ask for debug and info events from the | +// | keyboard to be reported. | +// | | +// | [Use defaults for all devices] | +// | | +// | +---------------------------------------------------+-+ | +// | |Device Debug Info Error Panic |^| | +// | |-------- -------- ------- -------- --------- ||| | +// | |Keyboard [ignore] [ignore] [report] [report] ||| | +// | |VGA [ignore] [ignore] [report] [report] ||| | +// | |NE2000 [ignore] [ignore] [report] [report] ||| | +// | |Sound [ignore] [ignore] [report] [report] |v| | +// | +-----------------------------------------------------+ | +// | | +// | [ Help ] [ Cancel ] [ Ok ] | +// +-------------------------------------------------------+-+ +// +class AdvancedLogOptionsDialog: public wxDialog +{ +private: +#define ADVLOG_OPTS_TITLE wxT("Configure Log Events") +#define ADVLOG_OPTS_LOGFILE wxT("Log file") +#define ADVLOG_OPTS_PROMPT wxT( \ +"This table determines how Bochs will respond to each kind of event coming\n" \ +"from a particular source. For example if you are having problems with\n" \ +"the keyboard, you could ask for debug and info events from the keyboard\n" \ +"to be reported.") +#define ADVLOG_OPTS_TYPE_NAMES { wxT("Debug"), wxT("Info"), wxT("Error"), wxT("Panic"), wxT("Pass") } +#define ADVLOG_OPTS_N_TYPES 5 +#define ADVLOG_DEFAULTS wxT("Use defaults for all devices") + void Init(); // called automatically by ShowModal() + void ShowHelp(); + wxBoxSizer *vertSizer, *logfileSizer, *buttonSizer; + wxScrolledWindow *scrollWin; + wxPanel *scrollPanel; + wxGridSizer *headerSizer, *gridSizer; + wxTextCtrl *logfile; + wxButton *applyDefault; + // 2d array of wxChoice pointers. Each wxChoice* is action[dev][type]. + wxChoice* **action; +public: + AdvancedLogOptionsDialog(wxWindow* parent, wxWindowID id); + ~AdvancedLogOptionsDialog(); + void OnEvent(wxCommandEvent& event); + int ShowModal() { Init(); return wxDialog::ShowModal(); } + void SetLogfile(wxString f) { logfile->SetValue(f); } + wxString GetLogfile() { return logfile->GetValue(); } + void CopyParamToGui(); + void CopyGuiToParam(); + void SetAction(int dev, int evtype, int act); + int GetAction(int dev, int evtype); +DECLARE_EVENT_TABLE() +}; + + +#if BX_DEBUGGER +//////////////////////////////////////////////////////////////////////////// +// DebugLogDialog +//////////////////////////////////////////////////////////////////////////// +// DebugLogDialog allows the user to decide how Bochs will +// behave for each type of log event. +// +// +---- Debugger log ---------------------------------------+ +// | | +// | +--------------------------------------------------+ | +// | |(0) f000:fff0: ea5be000f0: jmp f000:e05b | | +// | |(0) 0010:00001868: 83fb10: cmp EBX, #10 | | +// | | | | +// | | | | +// | | | | +// | | | | +// | +--------------------------------------------------+ | +// | Type a debugger command: | +// | +----------------------------------------+ +-------+ | +// | | step 1000 | |Execute| | +// | +----------------------------------------+ +-------+ | +// | | +// | [ Close ] | +// +---------------------------------------------------------+ +class DebugLogDialog: public wxDialog +{ +private: +#define DEBUG_LOG_TITLE wxT("Debugger log") +#define DEBUG_CMD_PROMPT wxT("Type a debugger command:") + wxBoxSizer *mainSizer, *commandSizer, *buttonSizer; + wxTextCtrl *log, *command; + Bit32u lengthMax; + Bit32u lengthTolerance; +#define DEBUG_LOG_DEFAULT_LENGTH_MAX (400*80) +#define DEBUG_LOG_DEFAULT_TOLERANCE (200*80) +public: + DebugLogDialog(wxWindow* parent, wxWindowID id); + void Init(); // called automatically by ShowModal() + void OnEvent(wxCommandEvent& event); + void OnEnterEvent(wxCommandEvent& event) { Execute(true); } + void OnKeyEvent(wxKeyEvent& event); + int ShowModal() { Init(); return wxDialog::ShowModal(); } + void Execute(bool clearCommand); + void CheckLogLength(); + void AppendCommand(const char *); + void AppendText(wxString text); + void CopyParamToGui() { /* empty for now */ } +DECLARE_EVENT_TABLE() +}; +#endif + +//////////////////////////////////////////////////////////////////////////// +// ParamDialog is a general purpose dialog box that displays and edits +// any combination of parameters. It's always made up of a +// wxFlexGridSizer with three columns. Each parameter takes up one row. +// Column 1 shows the name of the parameter, column 2 shows the value of +// the parameter in some sort of control that can be edited. Column 3 +// is used for anything that needs to appear to the right of the data, for +// example a Browse button on a filename control. Several buttons including +// Cancel and Ok will appear at the bottom. +// +// This will allow editing of all the miscellaneous parameters which do +// not need to be laid out by hand. +// +// NOTES: +// Right now, there is always one wxFlexGridSizer with three columns +// where the fields go. It is possible to create a new wxFlexGridSizer +// and make that one the default. This is used when handling a bx_list_c +// parameter. +//////////////////////////////////////////////////////////////////////////// + +struct ParamStruct : public wxObject { + bx_param_c *param; + int id; + wxStaticText *label; + union _u_tag { + void *ptr; + wxWindow *window; + wxChoice *choice; + wxTextCtrl *text; + wxSpinCtrl *spin; + wxCheckBox *checkbox; + wxStaticBox *staticbox; + wxNotebook *notebook; + } u; + int browseButtonId; // only for filename params + wxButton *browseButton; // only for filename params + ParamStruct() { param = NULL; u.window = NULL; browseButton = NULL; } +}; + +// This context structure is used by AddParam to keep track of where the +// next parameter's controls should be added. When AddParam is called on +// a list of parameters (bx_list_c), it calls itself recursively to add +// the child parameters, which in turn could be lists as well. When it +// calls itself recursively, it will create a new AddParamContext so that +// the various children can be added in the right place. +struct AddParamContext { + int depth; + wxWindow *parent; + wxBoxSizer *vertSizer; + wxFlexGridSizer *gridSizer; +}; + + +class ParamDialog: public wxDialog +{ +private: + void ShowHelp(); + wxChoice *type; + wxTextCtrl *serialDelay, *pasteDelay, *mappingFile; + wxCheckBox *enableKeymap; + int genId(); + bool isShowing; + int nbuttons; + bool runtime; +protected: + wxBoxSizer *mainSizer, *buttonSizer; + // hash table that maps the ID of a wxWidgets control (e.g. wxChoice, + // wxTextCtrl) to the associated ParamStruct object. Data in the hash table + // is of ParamStruct*. + wxHashTable *idHash; + // map parameter ID onto ParamStruct. + wxHashTable *paramHash; + virtual void EnableChanged(); + void EnableChanged(ParamStruct *pstr); + void EnableParam(int param_id, bool enabled); + void ProcessDependentList(ParamStruct *pstrChanged, bool enabled); + bool CopyGuiToParam(); + bool CopyGuiToParam(bx_param_c *param); + bool isGeneratedId(int id); +public: + ParamDialog(wxWindow* parent, wxWindowID id); + virtual ~ParamDialog(); + void OnEvent(wxCommandEvent& event); + wxButton* AddButton(int id, wxString label); + virtual void AddDefaultButtons(); + virtual void Init(); // called automatically by ShowModal() + int ShowModal() { + Init(); + isShowing = true; + int ret = wxDialog::ShowModal(); + isShowing = false; + return ret; + } + bool Show(bool val) { isShowing = val; return wxDialog::Show(val); } + void AddParam(bx_param_c *param, wxFlexGridSizer *sizer, bool plain = false); + void AddParam(bx_param_c *param, bool plain = false, AddParamContext *context = NULL); + void AddParamList(const char *nameList[], bx_param_c *base, wxFlexGridSizer *sizer = NULL, bool plain = false); + virtual void CopyParamToGui(); + bool IsShowing() { return isShowing; } + void SetRuntimeFlag(bool val) { runtime = val; } +DECLARE_EVENT_TABLE() +}; + +//////////////////////////////////////////////////////////////////////////// +// FloppyConfigDialog +//////////////////////////////////////////////////////////////////////////// +// +// the new FloppyConfigDialog is based on ParamDialog. It allows the user to +// configure the floppy settings and to create a floppy image if necessary. +class FloppyConfigDialog : public ParamDialog +{ +private: + wxButton *createButton; + ParamStruct *pstrDevice, *pstrPath, *pstrMedia, *pstrStatus, *pstrReadonly; +public: + FloppyConfigDialog(wxWindow* parent, wxWindowID id); + void Setup(bx_list_c *list); + void OnEvent(wxCommandEvent& event); + DECLARE_EVENT_TABLE() +}; + +//////////////////////////////////////////////////////////////////////////// +// LogOptionsDialog +//////////////////////////////////////////////////////////////////////////// +// +// the new LogOptionsDialog is based on ParamDialog. It allows the user to +// configure the log file settings and to decide how Bochs will behave for +// each type of log event. +class LogOptionsDialog : public ParamDialog +{ +private: +#define LOG_OPTS_TITLE wxT("Configure Log Events") +#define LOG_OPTS_PROMPT wxT("How should Bochs respond to each type of event?") +#define LOG_OPTS_TYPE_NAMES { wxT("Debug events: "), wxT("Info events: "), wxT("Error events: "), wxT("Panic events: "), wxT("Pass events: ") } +#define LOG_OPTS_N_TYPES 5 +#define LOG_OPTS_CHOICES { wxT("ignore"), wxT("log"), wxT("ask user"), wxT("end simulation"), wxT("no change") } +#define LOG_OPTS_N_CHOICES_NORMAL 4 +#define LOG_OPTS_N_CHOICES 5 // number of choices, including "no change" +#define LOG_OPTS_NO_CHANGE 4 // index of "no change" +// normally all choices are available for all event types. The exclude +// expression allows some choices to be eliminated if they don't make any +// sense. For example, it would be stupid to ignore a panic. +#define LOG_OPTS_EXCLUDE(type,choice) ( \ + /* can't die or ask, on debug or info events */ \ + (type <= 1 && (choice==2 || choice==3)) \ + /* can't ignore panics or errors */ \ + || (type >= 2 && choice==0) \ + ) +#define LOG_OPTS_ADV wxT("For additional control over how each device responds to events, use the menu option \"Log ... By Device\".") + wxFlexGridSizer *gridSizer; + wxChoice *action[LOG_OPTS_N_TYPES]; +public: + LogOptionsDialog(wxWindow* parent, wxWindowID id); + int GetAction(int evtype); + void SetAction(int evtype, int action); + DECLARE_EVENT_TABLE() +}; + +//////////////////////////////////////////////////////////////////////////// +// CpuRegistersDialog +//////////////////////////////////////////////////////////////////////////// +// +// this would display the current values of all CPU registers, possibly you can +// enable different groups like debug, FPU, MMX registers. Certainly if you +// interrupt the simulation, these would be updated. we could update +// periodically during simulation if it was useful. If we get the debugger +// integrated with wxwidgets, you could single step and update the cpu +// registers, with regs that change marked in a different color. Modeless +// dialog. +// +// +--- CPU Registers ---------------------------------------+ +// | | +// | EAX 0x00000000 EIP 0xffff LDTR 0x00000000 | +// | EBX 0x00000000 CS 0x0018 TR 0x00000000 | +// | ECX 0x00000000 SS 0x0018 GDTR 0x00000000 | +// | EDX 0x00000000 DS 0x0018 lim 0x00000000 | +// | EBP 0x00000000 ES 0x0018 IDTR 0x00000000 | +// | ESI 0x00000000 FS 0x0018 lim 0x00000000 | +// | EDI 0x00000000 GS 0x0018 | +// | ESP 0x00000000 EFLAGS 0x0012 | +// | | +// | ID AC VM RF NT IOPL CF PF AF ZF SF TF IF DF OF | +// | [] [] [] [] [] [0] [] [] [] [] [] [] [] [] [] | +// | | +// | DR0 0x00000000 TR3 0x00000000 CR0 0x00000000 | +// | DR1 0x00000000 TR4 0x00000000 CR1 0x00000000 | +// | DR2 0x00000000 TR5 0x00000000 CR2 0x00000000 | +// | DR3 0x00000000 TR6 0x00000000 CR3 0x00000000 | +// | DR6 0x00000000 TR7 0x00000000 CR4 0x00000000 | +// | DR7 0x00000000 | +// | | +// | [Go] [Stop] [Step] [Step N] N=[____] | +// +---------------------------------------------------------+ +// +// +--- CPU Extended Registers ------------------------------+ +// | | +// | | +// | [Go] [Stop] [Step] [Step N] N=[____] | +// +---------------------------------------------------------+ +// +class CpuRegistersDialog : public ParamDialog +{ + +#define CPU_REGS_MAIN_REGS1 \ + { "EAX", "EBX", "ECX", "EDX", \ + "EBP", "ESI", "EDI", "ESP", \ + NULL } +#define CPU_REGS_MAIN_REGS2 \ + { "EIP", "CS", "SS", "DS", \ + "ES", "FS", "GS", "EFLAGS", \ + NULL } +#define CPU_REGS_MAIN_REGS3 \ + { "LDTR", "TR", \ + "GDTR_base", "IDTR_limit", \ + "IDTR_base", "GDTR_limit", \ + NULL } +#define CPU_REGS_FLAGS \ + { "ID", "VIP", "VIF", \ + "AC", "VM", "RF", \ + "NT", "IOPL", "OF", \ + "DF", "IF", "TF", \ + "SF", "ZF", "AF", \ + "PF", "CF", \ + NULL } +#define CPU_REGS_DEBUG_REGS \ + { "DR0", "DR1", "DR2", \ + "DR3", "DR6", "DR7", \ + NULL } +#define CPU_REGS_TEST_REGS \ + { "TR3", "TR4", "TR5", "TR6", "TR7", \ + NULL } +#define CPU_REGS_CONTROL_REGS \ + { "CR0", "CR2", "CR3", "CR4", \ + NULL } + + void Init(); // called automatically by ShowModal() + wxFlexGridSizer *mainRegsSizer, *flagsSizer, *extRegsSizer; +#define CPU_REGS_MAX_FLAGS 17 + bx_param_c *flagptr[CPU_REGS_MAX_FLAGS]; + int nflags; +#if BX_DEBUGGER + wxButton *contButton, *stopButton, *stepButton, *commitButton; +#endif + void stateChanged(bool simRunning); +public: + CpuRegistersDialog(wxWindow* parent, wxWindowID id); + int ShowModal() { Init(); return wxDialog::ShowModal(); } + void AddFlag(bx_param_c *param); + void OnEvent(wxCommandEvent& event); + virtual void CopyParamToGui(); + DECLARE_EVENT_TABLE() +}; + + +/************************************************************************** +Everything else in here is a comment! + + + + +//////////////////////////////////////////////////////////////////////////// +// proposed dialogs, not implemented +//////////////////////////////////////////////////////////////////////////// + +Here are some quick sketches of what different parts of the interface +could look like. None of these is implemented yet, and everything is +open for debate. Whoever writes the wxwidgets code for any of these +screens gets several thousand votes! + + + +Idea for large configuration dialog, based on Netscape's Edit:Preferences +dialog box. Here's a sketch of a dialog with all the components that can be +configured in a list on the left, and the details of the selected component +on the right. This is a pretty familiar structure that's used in a lot of +applications these days. In the first sketch, "IDE Interface" is selected on +the left, and the details of the IDE devices are shown on the right. + ++-----Configure Bochs-------------------------------------------------------+ +| | +| +--------------------+ +-- IDE Controller ---------------------------+ | +| | |-CPU | | | | +| | | | | Master device: | | +| | |-Memory | | [X] Enable Hard Disk 0 | | +| | | | | | | +| | |-Video | | Slave device (choose one): | | +| | | | | [ ] No slave device | | +| | |-Floppy disks | | [ ] Hard Disk 1 | | +| | | |-Drive 0 | | [X] CD-ROM | | +| | | |-Drive 1 | | | | +| | | | +---------------------------------------------+ | +| |***IDE controller***| | +| | | |-Hard Drive 0 | | +| | | |-CD-ROM drive | | +| | | | | +| | |-Keyboard | | +| | | | | +| | |-Networking | | +| | | | | +| | |-Sound | | +| | | | +| +--------------------+ | +| [Help] [Cancel] [Ok] | ++---------------------------------------------------------------------------+ + +If you click on Hard Drive 0 in the component list (left), then the +whole right panel changes to show the details of the hard drive. + ++-----Configure Bochs-------------------------------------------------------+ +| | +| +--------------------+ +---- Configure Hard Drive 0 ----------------+ | +| | |-CPU | | | | +| | | | | [X] Enabled | | +| | |-Memory | | | | +| | | | +--------------------------------------------+ | +| | |-Video | | +| | | | +---- Disk Image ----------------------------+ | +| | |-Floppy disks | | | | +| | | |-Drive 0 | | File name: [___________________] [Browse] | | +| | | |-Drive 1 | | Geometry: cylinders [____] | | +| | | | | heads [____] | | +| | |-IDE controller | | sectors/track [____] | | +| | |***Hard Drive 0***| | | | +| | | |-CD-ROM drive | | Size in Megabytes: 38.2 | | +| | | | | [Enter size/Compute Geometry] | | +| | |-Keyboard | | | | +| | | | | [Create Image] | | +| | |-Networking | +--------------------------------------------+ | +| | | | | +| | |-Sound | | +| | | | +| +--------------------+ | +| [Help] [Cancel] [Ok] | ++---------------------------------------------------------------------------+ + +Or if you choose the CD-ROM, you get to edit the settings for it. + ++---- Configure Bochs ------------------------------------------------------+ +| | +| +--------------------+ +-- CD-ROM Device ----------------------------+ | +| | |-CPU | | | | +| | | | | [ ] Enable Emulated CD-ROM | | +| | |-Memory | | | | +| | | | +---------------------------------------------+ | +| | |-Video | | +| | | | +-- CD-ROM Media -----------------------------+ | +| | |-Floppy disks | | | | +| | | |-Drive 0 | | Bochs can use a physical CD-ROM drive as | | +| | | |-Drive 1 | | the data source, or use an image file. | | +| | | | | | | +| | |-IDE controller | | [X] Ejected | | +| | | |-Hard Drive 0 | | [ ] Physical CD-ROM drive /dev/cdrom | | +| |*****CD-ROM drive***| | [ ] Disk image: [_____________] [Browse] | | +| | | | | | | +| | |-Keyboard | +---------------------------------------------+ | +| | | | | +| | |-Networking | | +| | | | | +| | |-Sound | | +| | | | +| +--------------------+ | +| [Help] [Cancel] [Ok] | ++---------------------------------------------------------------------------+ + +The CD-ROM media can still be configured during the simulation. In this +context we can just show the Media section. The same code can be written to +serve both purposes. This is the dialog that would appear when you click the +CD-ROM button on the toolbar at runtime. + ++-- CD-ROM Media -----------------------------+ +| | +| Bochs can use a physical CD-ROM drive as | +| the data source, or use an image file. | +| | +| [X] Ejected | +| [ ] Physical CD-ROM drive /dev/cdrom | +| [ ] Disk image: [_____________] [Browse] | +| | +| | +| [Help] [Cancel] [Ok] | ++---------------------------------------------+ + + +//////////////////////////////////////////////////////////////////////////// +// ChooseConfigDialog +//////////////////////////////////////////////////////////////////////////// +The idea is that you could choose from a set of configurations +(individual bochsrc files, basically). When you first install +Bochs, it would just have DLX Linux Demo, and Create New. +As you create new configurations and save them, the list +could grow. ++--------------------------------------------------------+ +| | +| Choose a configuration for the Bochs simulator: | +| | +| +---+ | +| | O | DLX Linux Demo | +| | | | Boot 10MB Hard Disk | +| +---+ | +| | +| +---+ | +| | O | Redhat Linux Image | +| | | | Boot 10MB Hard Disk | +| +---+ | +| | +| +---+ | +| | O | FreeDOS | +| | | | Boot 40MB Hard Disk | +| +---+ | +| | +| ?? Create new configuration | +| | ++--------------------------------------------------------+ + + +//////////////////////////////////////////////////////////////////////////// +// ChooseBootDialog +//////////////////////////////////////////////////////////////////////////// + +This dialog basically lets you choose which disk you want to boot: floppy A, +disk c, or cdrom. The boot selection could be as simple as ++-------------------------------------------+ +| Choose boot drive | +| [ ] Floppy A | +| [X] Hard Disk C | +| [ ] CD-ROM | +| [ Help ] [ Cancel ] [ Ok ] | ++-------------------------------------------+ +or fancier with icons for the device types, and Edit buttons that +let you go right to the configure screen for that disk drive. ++---------------------------------------------------------------+ +| | +| /----+ | +| |= =| A Drive +----+ | +| [ ] | __ | Raw Floppy Drive |Edit| | +| || || A: +----+ | +| ++--++ | +| | +| /----+ | +| |= =| B Drive +----+ | +| [ ] | __ | Floppy Disk Image |Edit| | +| || || C:\Bochs\Images\A.img +----+ | +| ++--++ | +| | +| +-----+ C Drive | +| |=====| Hard Disk Image +----+ | +| [BOOT] | o| C:\Bochs\Images\HD30meg.img |Edit| | +| +-----+ +----+ | +| | +| ___ | +| / \ D Drive +----+ | +| [ ] | O | ISO CD Image |Edit| | +| \___/ C:\Bochs\Images\BootCD.img +----+ | +| | +| [ Help ] [ Cancel ] [ Ok ] | ++---------------------------------------------------------------+ + +//////////////////////////////////////////////////////////////////////////// +// KeymappingDialog +//////////////////////////////////////////////////////////////////////////// +more ambitious: create a button for each key on a standard keyboard, so that +you can view/edit/load/save key mappings, produce any combination of keys +(esp. ones that your OS or window manager won't allow) + +//////////////////////////////////////////////////////////////////////////// +// ConfigTimeDialog +//////////////////////////////////////////////////////////////////////////// + +choose IPS +select starting time for CMOS clock +turn on real time PIT or not (?) +VGA update interval + +This dialog can easily allow people to tune the IPS setting, or +various other speed-related values, at runtime. If you're running +some time-sensitive program you could adjust IPS until it's the right +speed, or if Bochs is wasting all of your CPU's cycles you could turn +a dial to some periodic delays to allow other processes a chance to +complete. + +Suggestions from Greg Alexander: +> I'm using O for radio buttons and [ ] for check boxes. +> +> ---------Basic Configure Timing Dialog-------- +> +> Instructions per second: [_________] (maybe have some default options +> and an "other") +> +> Select timing behavior desired: +> +> O Full Speed, Real Time +> (NOT Reproducible) +> O Minimize CPU Use, Real Time +> O Full speed, NOT Real Time +> +> [Advanced] +> +> ----------------------------------------------- +> The logic for the above would look like this: +> All options get the New PIT. +> Option 1 Gets you the Realtime PIT. +> Option 2 Gets you the Slowdown Timer. +> Option 3 Gets you neither. +> +> -------Advanced Configure Timing Dialog-------- +> +> Instructions per second: [_________] +> +> Select PIT Model: +> O Old Model +> O New Model +> O Realtime PIT (not reproducible) +> +> Select Optional Realtime Hacks: +> [ ] Slowdown Timer Maxmult setting [_________] +> [ ] Idle Hack (X Windows Only) +> +> ---------------------------------------------- + +//////////////////////////////////////////////////////////////////////////// +// OtherOptionsDialog +//////////////////////////////////////////////////////////////////////////// + +everything in the bochsrc that doesn't fit into some other category, +or that is used so rarely (e.g. floppy command delay) that it's not worth +laying out manually in a dialog box. This will probably be done in +sort of a grid with parameter name, and value(editable) in different columns + +//////////////////////////////////////////////////////////////////////////// +// LogOptionsDialog +//////////////////////////////////////////////////////////////////////////// +lets you choose which events you want to write to the log, which you +want to ignore, etc. You can do this at a high level, like + ++---- Configure events -----------------------------------+ +| | +| How should Bochs respond to each type of event? | +| | +| Debug events: [ignore] | +| Info events: [ignore] | +| Error events: [report] | +| Panic events: [ask ] | +| | +| For additional control over how each device responds | +| to events, press the "Advanced" button. | +| | +| [ Advanced ] [ Help ] [ Cancel ] [ Ok ] | ++---------------------------------------------------------+ +This sets up the default actions for all devices. The advanced +dialog lets you set different actions per device. I have two +attempts at the advanced dialog. The first creates a large +grid of wxChoice controls which choose between +ignore/report/ask/die. There will be enough rows in this +table that a scrolling subwindow will be needed to fit +all the devices. + ++---- Advanced event configuration -----------------------+ +| | +| This table determines how Bochs will respond to each | +| kind of event coming from a particular source. For | +| example if you are having problems with the keyboard, | +| you could ask for debug and info events from the | +| keyboard to be reported. | +| | +| [Use defaults for all devices] | ++-------------------------------------------------------+-+ +| Device Debug Info Error Panic |^| +| -------- -------- ------- -------- --------- ||| +| Keyboard [ignore] [ignore] [report] [report] ||| +| VGA [ignore] [ignore] [report] [report] ||| +| NE2000 [ignore] [ignore] [report] [report] ||| +| Sound [ignore] [ignore] [report] [report] |v| ++---------------------------------------------------------+ +| [ Help ] [ Cancel ] [ Ok ] | ++-------------------------------------------------------+-+ + +Try #2 for the advanced event configuration dialog. +It shows the selection of the default actions again +at the top, with some explanation. Then at bottom, you +can select a device in the list box and edit the settings +for that device individually. It would be possible to +allow selection of multiple devices and then edit several +devices at once. + ++---- Advanced event configuration ---------------------+-+ +| | +| +--- Default Actions -------------+ | +| First choose the | | | +| default actions | Debug events: [ignore] | | +| that apply to all | Info events: [ignore] | | +| event sources. | Error events: [report] | | +| | Panic events: [ask ] | | +| | | | +| | [Copy to All Devices] | | +| +---------------------------------+ | +| | +| Then, if you want you can edit the actions for | +| individual devices. For example if you are having | +| problems with the keyboard, you could ask for debug | +| and info events from the keyboard to be reported. | +| | +| Select Device: | +| +-------------+-+ +--- Actions for VGA -------------+ | +| | CPU |^| | | | +| | Interrupts ||| | Debug events: [ignore] | | +| |*VGA*********||| | Info events: [ignore] | | +| | Keyboard ||| | Error events: [report] | | +| | Mouse ||| | Panic events: [ask ] | | +| | Floppy Disk |v| | | | +| +-------------+-+ +---------------------------------+ | +| | +| [ Help ] [ Cancel ] [ Ok ] | ++---------------------------------------------------------+ + ++---- Configure events -------------------------------------+ +| __________ ____________ | +| | Default \ | Per Device \ | +| | \------------------------------------------+ | +| | | | +| | Event log file [_______________________] [Browse] | | +| | | | +| | How should Bochs respond to each type of event? | | +| | | | +| | Debug events: [ignore] | | +| | Info events: [ignore] | | +| | Error events: [report] | | +| | Panic events: [ask ] | | +| | | | +| | For additional control over how each device responds | | +| | to events, click the "Per Device" tab above. | | +| | | | +| +------------------------------------------------------+ | +| [ Help ] [ Cancel ] [ Ok ] | ++-----------------------------------------------------------+ + ++---- Configure events -------------------------------------+ +| __________ ____________ | +| | Default \ | Per Device \ | +| +-------------| \--------------------------+ | +| | | | +| | This table determines how Bochs will respond to each | | +| | kind of event coming from a particular source. For | | +| | example if you are having problems with the keyboard,| | +| | you could ask for debug and info events from the | | +| | keyboard to be reported. | | +| | | | +| | +------------------------------------------------+-+ | | +| | |Device Debug Info Error Panic |^| | | +| | |-------- -------- ------- -------- --------- ||| | | +| | |Keyboard [ignore] [ignore] [report] [report] ||| | | +| | |VGA [ignore] [ignore] [report] [report] ||| | | +| | |NE2000 [ignore] [ignore] [report] [report] ||| | | +| | |Sound [ignore] [ignore] [report] [report] |v| | | +| | +--------------------------------------------------+ | | +| | [Set defaults for all devices] | | +| +------------------------------------------------------+ | +| [ Help ] [ Cancel ] [ Ok ] | ++-----------------------------------------------------------+ + + + +//////////////////////////////////////////////////////////////////////////// +// ViewMemoryDialog +//////////////////////////////////////////////////////////////////////////// + +shows portions of memory, in hex or hex+ASCII or disassembled. updates +whenever simulation stops (after single steps for example), or we could +update periodically. Modeless dialog, and there could be many +of them at once, showing different regions of memory. + +//////////////////////////////////////////////////////////////////////////// +// DebugControlDialog +//////////////////////////////////////////////////////////////////////////// +has buttons for most common debugger commands such as step, breakpoint, +display registers, or whatever. + +*****************************************************************/ diff --git a/bochs/gui/wxmain.cc b/bochs/gui/wxmain.cc new file mode 100644 index 00000000..ebc0bcec --- /dev/null +++ b/bochs/gui/wxmain.cc @@ -0,0 +1,1553 @@ +///////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 The Bochs Project +// +// wxmain.cc implements the wxWidgets frame, toolbar, menus, and dialogs. +// When the application starts, the user is given a chance to choose/edit/save +// a configuration. When they decide to start the simulation, functions in +// main.cc are called in a separate thread to initialize and run the Bochs +// simulator. +// +// Most ports to different platforms implement only the VGA window and +// toolbar buttons. The wxWidgets port is the first to implement both +// the VGA display and the configuration interface, so the boundaries +// between them are somewhat blurry. See the extensive comments at +// the top of siminterface for the rationale behind this separation. +// +// The separation between wxmain.cc and wx.cc is as follows: +// - wxmain.cc implements a Bochs configuration interface (CI), +// which is the wxWidgets equivalent of textconfig.cc. wxmain creates +// a frame with several menus and a toolbar, and allows the user to +// choose the machine configuration and start the simulation. Note +// that wxmain.cc does NOT include bochs.h. All interactions +// between the CI and the simulator are through the siminterface +// object. +// - wx.cc implements a VGA display screen using wxWidgets. It is +// is the wxWidgets equivalent of x.cc, win32.cc, macos.cc, etc. +// wx.cc includes bochs.h and has access to all Bochs devices. +// The VGA panel accepts only paint, key, and mouse events. As it +// receives events, it builds BxEvents and places them into a +// thread-safe BxEvent queue. The simulation thread periodically +// processes events from the BxEvent queue (bx_gui_c::handle_events) +// and notifies the appropriate emulated I/O device. +// +////////////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "config.h" // definitions based on configure script +#include "param_names.h" + +#if BX_WITH_WX + +// For compilers that support precompilation, includes "wx/wx.h". +#include +#ifdef __BORLANDC__ +#pragma hdrstop +#endif +#ifndef WX_PRECOMP +#include +#endif +#include +#include + +#include "osdep.h" // workarounds for missing stuff +#include "gui/siminterface.h" // interface to the simulator +#include "bxversion.h" // get version string +#include "wxdialog.h" // custom dialog boxes +#include "wxmain.h" // wxwidgets shared stuff +#include "extplugin.h" + +// include XPM icons +#include "bitmaps/cdromd.xpm" +#include "bitmaps/copy.xpm" +#include "bitmaps/floppya.xpm" +#include "bitmaps/floppyb.xpm" +#include "bitmaps/paste.xpm" +#include "bitmaps/power.xpm" +#include "bitmaps/reset.xpm" +#include "bitmaps/snapshot.xpm" +#include "bitmaps/mouse.xpm" +//#include "bitmaps/configbutton.xpm" +#include "bitmaps/userbutton.xpm" +#include "bitmaps/saverestore.xpm" +#ifdef __WXGTK__ +#include "icon_bochs.xpm" +#endif + +// FIXME: ugly global variables that the bx_gui_c object in wx.cc can use +// to access the MyFrame and the MyPanel. +MyFrame *theFrame = NULL; +MyPanel *thePanel = NULL; + +// The wxBochsClosing flag is used to keep track of when the wxWidgets GUI is +// shutting down. Shutting down can be somewhat complicated because the +// simulation may be running for a while in another thread before it realizes +// that it should shut down. The wxBochsClosing flag is a global variable, as +// opposed to a field of some C++ object, so that it will be valid at any stage +// of the program. wxBochsClosing starts out false (not wxBochsClosing). When +// the GUI decides to shut down, it sets wxBochsClosing=true. If there +// is not a simulation running, everything is quite simple and it can just +// call Close(TRUE). If a simulation is running, it calls OnKillSim to +// ask the simulation to stop. When the simulation thread stops, it calls +// Close(TRUE) on the frame. During the time that the simulation is +// still running and afterward, the wxBochsClosing flag is used to suppress +// any events that might reference parts of the GUI or create new dialogs. +bool wxBochsClosing = false; + +// The wxBochsStopSim flag is used to select the right way when the simulation +// thread stops. It is set to 'true' when the stop simulation menu item is +// clicked instead of the power button. +bool wxBochsStopSim = false; + +bool isSimThread() { + if (wxThread::IsMain()) return false; + wxThread *current = wxThread::This(); + if (current == (wxThread*) theFrame->GetSimThread()) { + // wxLogDebug("isSimThread? yes"); + return true; + } + // wxLogDebug("isSimThread? no"); + return false; +} + +////////////////////////////////////////////////////////////////////// +// class declarations +////////////////////////////////////////////////////////////////////// + +class MyApp: public wxApp +{ +virtual bool OnInit(); +virtual int OnExit(); + public: + // This default callback is installed when the simthread is NOT running, + // so that events coming from the simulator code can be handled. + // The primary culprit is panics which cause an BX_SYNC_EVT_LOG_ASK. + static BxEvent *DefaultCallback(void *thisptr, BxEvent *event); +}; + +// SimThread is the thread in which the Bochs simulator runs. It is created +// by MyFrame::OnStartSim(). The SimThread::Entry() function calls a +// function in main.cc called bx_continue_after_config_interface() which +// initializes the devices and starts up the simulation. All events from +// the simulator +class SimThread: public wxThread +{ + MyFrame *frame; + + // when the sim thread sends a synchronous event to the GUI thread, the + // response is stored in sim2gui_mailbox. + // FIXME: this would be cleaner and more reusable if I made a general + // thread-safe mailbox class. + BxEvent *sim2gui_mailbox; + wxCriticalSection sim2gui_mailbox_lock; + +public: + SimThread(MyFrame *_frame) { frame = _frame; sim2gui_mailbox = NULL; } + virtual ExitCode Entry(); + void OnExit(); + // called by the siminterface code, with the pointer to the sim thread + // in the thisptr arg. + static BxEvent *SiminterfaceCallback(void *thisptr, BxEvent *event); + BxEvent *SiminterfaceCallback2(BxEvent *event); + // methods to coordinate synchronous response mailbox + void ClearSyncResponse(); + void SendSyncResponse(BxEvent *); + BxEvent *GetSyncResponse(); +}; + + +////////////////////////////////////////////////////////////////////// +// wxWidgets startup +////////////////////////////////////////////////////////////////////// + +static int ci_callback(void *userdata, ci_command_t command) +{ + switch (command) + { + case CI_START: +#ifdef __WXMSW__ + // on Windows only, wxEntry needs some data that is passed into WinMain. + // So, in main.cc we define WinMain and fill in the bx_startup_flags + // structure with the data, so that when we're ready to call wxEntry + // it has access to the data. + wxEntry( + bx_startup_flags.hInstance, + bx_startup_flags.hPrevInstance, + bx_startup_flags.m_lpCmdLine, + bx_startup_flags.nCmdShow); +#else + wxEntry(bx_startup_flags.argc, bx_startup_flags.argv); +#endif + break; + case CI_RUNTIME_CONFIG: + fprintf(stderr, "wxmain.cc: runtime config not implemented\n"); + break; + case CI_SHUTDOWN: + fprintf(stderr, "wxmain.cc: shutdown not implemented\n"); + break; + } + return 0; +} + +extern "C" int libwx_LTX_plugin_init(plugin_t *plugin, plugintype_t type, + int argc, char *argv[]) +{ + wxLogDebug(wxT("plugin_init for wxmain.cc")); + wxLogDebug(wxT("installing wxWidgets as the configuration interface")); + SIM->register_configuration_interface("wx", ci_callback, NULL); + wxLogDebug(wxT("installing %s as the Bochs GUI"), wxT("wxWidgets")); + SIM->get_param_enum(BXPN_SEL_DISPLAY_LIBRARY)->set_enabled(0); + MyPanel::OnPluginInit(); + bx_list_c *list = new bx_list_c(SIM->get_param("."), + "wxdebug", + "subtree for the wx debugger", + 30); + bx_list_c *cpu = new bx_list_c(list, + "cpu", + "CPU State", + BX_MAX_SMP_THREADS_SUPPORTED); + cpu->set_options(bx_list_c::USE_TAB_WINDOW); + return 0; // success +} + +extern "C" void libwx_LTX_plugin_fini() +{ + // fprintf(stderr, "plugin_fini for wxmain.cc\n"); +} + + +////////////////////////////////////////////////////////////////////// +// MyApp: the wxWidgets application +////////////////////////////////////////////////////////////////////// + +IMPLEMENT_APP_NO_MAIN(MyApp) + +// this is the entry point of the wxWidgets code. It is called as follows: +// 1. main() loads the wxWidgets plugin (if necessary) and calls +// libwx_LTX_plugin_init, which installs a function pointer to the +// ci_callback() function. +// 2. main() calls SIM->configuration_interface. +// 3. bx_real_sim_c::configuration_interface calls the function pointer that +// points to ci_callback() in this file, with command=CI_START. +// 4. ci_callback() calls wxEntry() in the wxWidgets library +// 5. wxWidgets library creates the app and calls OnInit(). +// +// Before this code is called, the command line has already been parsed, and a +// .bochsrc has been loaded if it could be found. See main() for details. +bool MyApp::OnInit() +{ + // wxLog::AddTraceMask(wxT("mime")); + wxLog::SetActiveTarget(new wxLogStderr()); + bx_init_siminterface(); + // Install callback function to handle anything that occurs before the + // simulation begins. This is responsible for displaying any error + // dialogs during bochsrc and command line processing. + SIM->set_notify_callback(&MyApp::DefaultCallback, this); + MyFrame *frame = new MyFrame(wxT("Bochs x86 Emulator"), wxPoint(50,50), wxSize(450,340), wxMINIMIZE_BOX | wxSYSTEM_MENU | wxCAPTION); + theFrame = frame; // hack alert + frame->Show(TRUE); + SetTopWindow(frame); + wxTheClipboard->UsePrimarySelection(true); + // if quickstart is enabled, kick off the simulation + if (SIM->get_param_enum(BXPN_BOCHS_START)->get() == BX_QUICK_START) { + wxCommandEvent unusedEvent; + frame->OnStartSim(unusedEvent); + } + return TRUE; +} + +int MyApp::OnExit() +{ + return 0; +} + +// these are only called when the simthread is not running. +BxEvent *MyApp::DefaultCallback(void *thisptr, BxEvent *event) +{ + wxLogDebug(wxT("DefaultCallback: event type %d"), event->type); + event->retcode = -1; // default return code + switch (event->type) + { + case BX_ASYNC_EVT_LOG_MSG: + case BX_SYNC_EVT_LOG_ASK: { + wxLogDebug(wxT("DefaultCallback: log ask event")); + wxString text; + text.Printf(wxT("Error: %s"), event->u.logmsg.msg); + if (wxBochsClosing) { + // gui closing down, do something simple and nongraphical. + fprintf(stderr, "%s\n", (const char *)text.mb_str(wxConvUTF8)); + } else { + wxMessageBox(text, wxT("Error"), wxOK | wxICON_ERROR); + // maybe I can make OnLogMsg display something that looks appropriate. + // theFrame->OnLogMsg(event); + } + event->retcode = BX_LOG_ASK_CHOICE_DIE; + // There is only one thread at this point. if I choose DIE here, it will + // call fatal() and kill the whole app. + break; + } + case BX_SYNC_EVT_TICK: + if (wxBochsClosing) + event->retcode = -1; + break; + case BX_ASYNC_EVT_REFRESH: + case BX_ASYNC_EVT_DBG_MSG: + break; // ignore + case BX_SYNC_EVT_ASK_PARAM: + case BX_SYNC_EVT_GET_DBG_COMMAND: + break; // ignore + default: + wxLogDebug(wxT("DefaultCallback: unknown event type %d"), event->type); + } + if (BX_EVT_IS_ASYNC(event->type)) { + delete event; + event = NULL; + } + return event; +} + +////////////////////////////////////////////////////////////////////// +// MyFrame: the top level frame for the Bochs application +////////////////////////////////////////////////////////////////////// + +BEGIN_EVENT_TABLE(MyFrame, wxFrame) + EVT_MENU(ID_Config_New, MyFrame::OnConfigNew) + EVT_MENU(ID_Config_Read, MyFrame::OnConfigRead) + EVT_MENU(ID_Config_Save, MyFrame::OnConfigSave) + EVT_MENU(ID_State_Restore, MyFrame::OnStateRestore) + EVT_MENU(ID_Quit, MyFrame::OnQuit) + EVT_MENU(ID_Help_About, MyFrame::OnAbout) + EVT_MENU(ID_Simulate_Start, MyFrame::OnStartSim) + EVT_MENU(ID_Simulate_PauseResume, MyFrame::OnPauseResumeSim) + EVT_MENU(ID_Simulate_Stop, MyFrame::OnKillSim) + EVT_MENU(ID_Sim2CI_Event, MyFrame::OnSim2CIEvent) + EVT_MENU(ID_Edit_ATA0, MyFrame::OnEditATA) + EVT_MENU(ID_Edit_ATA1, MyFrame::OnEditATA) + EVT_MENU(ID_Edit_ATA2, MyFrame::OnEditATA) + EVT_MENU(ID_Edit_ATA3, MyFrame::OnEditATA) + EVT_MENU(ID_Edit_CPU, MyFrame::OnEditCPU) + EVT_MENU(ID_Edit_Memory, MyFrame::OnEditMemory) + EVT_MENU(ID_Edit_Clock_Cmos, MyFrame::OnEditClockCmos) + EVT_MENU(ID_Edit_PCI, MyFrame::OnEditPCI) + EVT_MENU(ID_Edit_Display, MyFrame::OnEditDisplay) + EVT_MENU(ID_Edit_Keyboard, MyFrame::OnEditKeyboard) + EVT_MENU(ID_Edit_Boot, MyFrame::OnEditBoot) + EVT_MENU(ID_Edit_Serial_Parallel, MyFrame::OnEditSerialParallel) + EVT_MENU(ID_Edit_Network, MyFrame::OnEditNet) + EVT_MENU(ID_Edit_Sound, MyFrame::OnEditSound) + EVT_MENU(ID_Edit_Other, MyFrame::OnEditOther) + EVT_MENU(ID_Log_Prefs, MyFrame::OnLogPrefs) + EVT_MENU(ID_Log_PrefsDevice, MyFrame::OnLogPrefsDevice) + EVT_MENU(ID_Debug_ShowCpu, MyFrame::OnShowCpu) + EVT_MENU(ID_Debug_ShowKeyboard, MyFrame::OnShowKeyboard) +#if BX_DEBUGGER + EVT_MENU(ID_Debug_Console, MyFrame::OnDebugLog) +#endif + // toolbar events + EVT_TOOL(ID_Edit_FD_0, MyFrame::OnToolbarClick) + EVT_TOOL(ID_Edit_FD_1, MyFrame::OnToolbarClick) + EVT_TOOL(ID_Edit_Cdrom, MyFrame::OnToolbarClick) + EVT_TOOL(ID_Toolbar_Reset, MyFrame::OnToolbarClick) + EVT_TOOL(ID_Toolbar_Power, MyFrame::OnToolbarClick) + EVT_TOOL(ID_Toolbar_SaveRestore, MyFrame::OnToolbarClick) + EVT_TOOL(ID_Toolbar_Copy, MyFrame::OnToolbarClick) + EVT_TOOL(ID_Toolbar_Paste, MyFrame::OnToolbarClick) + EVT_TOOL(ID_Toolbar_Snapshot, MyFrame::OnToolbarClick) + EVT_TOOL(ID_Toolbar_Config, MyFrame::OnToolbarClick) + EVT_TOOL(ID_Toolbar_Mouse_en, MyFrame::OnToolbarClick) + EVT_TOOL(ID_Toolbar_User, MyFrame::OnToolbarClick) +END_EVENT_TABLE() + +////////////////////////////////////////////////////////////////// +// Menu layout (approximate) +// +// The actual menus will be changing so this probably isn't up +// to date, but having it in text form was useful in planning. +////////////////////////////////////////////////////////////////// +// - File +// +----------------------+ +// | New Configuration | +// | Read Configuration | +// | Save Configuration | +// +----------------------+ +// | Quit | +// +----------------------+ +// - Edit +// +----------------------+ +// | Floppy Disk 0... | +// | Floppy Disk 1... | +// | Hard Disk 0... | +// | Hard Disk 1... | +// | Cdrom... | +// | Boot... | +// | VGA... | +// | Memory... | +// | Sound... | +// | Networking... | +// | Keyboard... | +// | Other... | +// +----------------------+ +// - Simulate +// +----------------------+ +// | Start | +// | Pause/Resume | +// | Stop | +// +----------------------| +// - Debug +// +----------------------| +// | Show CPU | +// | Show Memory | +// | ? what else ? | +// +----------------------| +// - Event Log +// +----------------------+ +// | View | +// | Preferences... | +// | By Device... | +// +----------------------+ +// - Help +// +----------------------+ +// | About Bochs... | +// +----------------------+ +////////////////////////////////////////////////////////////////// + +MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, const long style) +: wxFrame((wxFrame *)NULL, -1, title, pos, size, style) +{ + SetIcon(wxICON(icon_bochs)); + + // init variables + sim_thread = NULL; + start_bochs_times = 0; + showCpu = NULL; + showKbd = NULL; + debugCommand = NULL; + debugCommandEvent = NULL; + + // set up the gui + menuConfiguration = new wxMenu; + menuConfiguration->Append(ID_Config_New, wxT("&New Configuration")); + menuConfiguration->Append(ID_Config_Read, wxT("&Read Configuration")); + menuConfiguration->Append(ID_Config_Save, wxT("&Save Configuration")); + menuConfiguration->AppendSeparator(); + menuConfiguration->Append(ID_State_Restore, wxT("&Restore State")); + menuConfiguration->AppendSeparator(); + menuConfiguration->Append(ID_Quit, wxT("&Quit")); + + menuEdit = new wxMenu; + menuEdit->Append(ID_Edit_FD_0, wxT("Floppy Disk &0...")); + menuEdit->Append(ID_Edit_FD_1, wxT("Floppy Disk &1...")); + menuEdit->Append(ID_Edit_ATA0, wxT("ATA Channel 0...")); + menuEdit->Append(ID_Edit_ATA1, wxT("ATA Channel 1...")); + menuEdit->Append(ID_Edit_ATA2, wxT("ATA Channel 2...")); + menuEdit->Append(ID_Edit_ATA3, wxT("ATA Channel 3...")); + menuEdit->Append(ID_Edit_CPU, wxT("&CPU...")); + menuEdit->Append(ID_Edit_Memory, wxT("&Memory...")); + menuEdit->Append(ID_Edit_Clock_Cmos, wxT("C&lock/Cmos...")); + menuEdit->Append(ID_Edit_PCI, wxT("&PCI...")); + menuEdit->Append(ID_Edit_Display, wxT("&Display + Interface...")); + menuEdit->Append(ID_Edit_Keyboard, wxT("&Keyboard + Mouse...")); + menuEdit->Append(ID_Edit_Boot, wxT("&Boot...")); + menuEdit->Append(ID_Edit_Serial_Parallel, wxT("&Serial/Parallel/USB...")); + menuEdit->Append(ID_Edit_Network, wxT("&Network...")); + menuEdit->Append(ID_Edit_Sound, wxT("S&ound...")); + menuEdit->Append(ID_Edit_Other, wxT("&Other...")); + + menuSimulate = new wxMenu; + menuSimulate->Append(ID_Simulate_Start, wxT("&Start...")); + menuSimulate->Append(ID_Simulate_PauseResume, wxT("&Pause...")); + menuSimulate->Append(ID_Simulate_Stop, wxT("S&top...")); + menuSimulate->AppendSeparator(); + menuSimulate->Enable(ID_Simulate_PauseResume, FALSE); + menuSimulate->Enable(ID_Simulate_Stop, FALSE); + + menuDebug = new wxMenu; + menuDebug->Append(ID_Debug_ShowCpu, wxT("Show &CPU")); + menuDebug->Append(ID_Debug_ShowKeyboard, wxT("Show &Keyboard")); +#if BX_DEBUGGER + menuDebug->Append(ID_Debug_Console, wxT("Debug Console")); +#endif + menuDebug->Append(ID_Debug_ShowMemory, wxT("Show &memory")); + + menuLog = new wxMenu; + menuLog->Append(ID_Log_View, wxT("&View")); + menuLog->Append(ID_Log_Prefs, wxT("&Preferences...")); + menuLog->Append(ID_Log_PrefsDevice, wxT("By &Device...")); + + menuHelp = new wxMenu; + menuHelp->Append(ID_Help_About, wxT("&About...")); + + wxMenuBar *menuBar = new wxMenuBar; + menuBar->Append(menuConfiguration, wxT("&File")); + menuBar->Append(menuEdit, wxT("&Edit")); + menuBar->Append(menuSimulate, wxT("&Simulate")); + menuBar->Append(menuDebug, wxT("&Debug")); + menuBar->Append(menuLog, wxT("&Log")); + menuBar->Append(menuHelp, wxT("&Help")); + SetMenuBar(menuBar); + + // disable things that don't work yet + menuDebug->Enable(ID_Debug_ShowMemory, FALSE); // not implemented + menuLog->Enable(ID_Log_View, FALSE); // not implemented + // enable ATA channels in menu + menuEdit->Enable(ID_Edit_ATA1, BX_MAX_ATA_CHANNEL > 1); + menuEdit->Enable(ID_Edit_ATA2, BX_MAX_ATA_CHANNEL > 2); + menuEdit->Enable(ID_Edit_ATA3, BX_MAX_ATA_CHANNEL > 3); + // enable restore state if present + menuConfiguration->Enable(ID_State_Restore, TRUE); + + CreateStatusBar(); + wxStatusBar *sb = GetStatusBar(); + sb->SetFieldsCount(12); + const int sbwidth[12] = {160, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, -1}; + sb->SetStatusWidths(12, sbwidth); + + CreateToolBar(wxNO_BORDER|wxHORIZONTAL|wxTB_FLAT); + bxToolBar = GetToolBar(); + bxToolBar->SetToolBitmapSize(wxSize(32, 32)); + +#define BX_ADD_TOOL(id, xpm_name, tooltip) do { \ + bxToolBar->AddTool(id, wxBitmap(xpm_name), tooltip); \ + } while (0) + + BX_ADD_TOOL(ID_Edit_FD_0, floppya_xpm, wxT("Change Floppy A")); + BX_ADD_TOOL(ID_Edit_FD_1, floppyb_xpm, wxT("Change Floppy B")); + BX_ADD_TOOL(ID_Edit_Cdrom, cdromd_xpm, wxT("Change CDROM")); + BX_ADD_TOOL(ID_Toolbar_Reset, reset_xpm, wxT("Reset the system")); + BX_ADD_TOOL(ID_Toolbar_Power, power_xpm, wxT("Turn power on/off")); + BX_ADD_TOOL(ID_Toolbar_SaveRestore, saverestore_xpm, wxT("Save simulation state")); + + BX_ADD_TOOL(ID_Toolbar_Copy, copy_xpm, wxT("Copy to clipboard")); + BX_ADD_TOOL(ID_Toolbar_Paste, paste_xpm, wxT("Paste from clipboard")); + BX_ADD_TOOL(ID_Toolbar_Snapshot, snapshot_xpm, wxT("Save screen snapshot")); + // Omit config button because the whole wxWidgets interface is like + // one really big config button. + //BX_ADD_TOOL(ID_Toolbar_Config, configbutton_xpm, "Runtime Configuration"); + BX_ADD_TOOL(ID_Toolbar_Mouse_en, mouse_xpm, wxT("Enable/disable mouse capture\nThere is also a shortcut for this: a CTRL key + the middle mouse button.")); + BX_ADD_TOOL(ID_Toolbar_User, userbutton_xpm, wxT("Keyboard shortcut")); + + bxToolBar->Realize(); + + // create a MyPanel that covers the whole frame + panel = new MyPanel(this, -1); + panel->SetBackgroundColour(wxColour(0,0,0)); + panel->SetFocus(); + wxGridSizer *sz = new wxGridSizer(1, 1); + sz->Add(panel, 0, wxGROW); + SetAutoLayout(TRUE); + SetSizer(sz); + +#if BX_DEBUGGER + // create the debug log dialog box immediately so that we can write output + // to it. + showDebugLog = new DebugLogDialog(this, -1); + showDebugLog->Init(); +#endif +} + +MyFrame::~MyFrame() +{ + delete panel; + wxLogDebug(wxT("MyFrame destructor")); + theFrame = NULL; +} + +void MyFrame::OnConfigNew(wxCommandEvent& WXUNUSED(event)) +{ + int answer = wxMessageBox(wxT("This will reset all settings back to their default values.\nAre you sure you want to do this?"), + wxT("Are you sure?"), wxYES_NO | wxCENTER, this); + if (answer == wxYES) SIM->reset_all_param(); +} + +void MyFrame::OnConfigRead(wxCommandEvent& WXUNUSED(event)) +{ + char bochsrc[512]; + long style = wxOPEN; + wxFileDialog *fdialog = new wxFileDialog(this, wxT("Read configuration"), wxT(""), wxT(""), wxT("*.*"), style); + if (fdialog->ShowModal() == wxID_OK) { + strncpy(bochsrc, fdialog->GetPath().mb_str(wxConvUTF8), sizeof(bochsrc)); + SIM->reset_all_param(); + SIM->read_rc(bochsrc); + } + delete fdialog; +} + +void MyFrame::OnConfigSave(wxCommandEvent& WXUNUSED(event)) +{ + char bochsrc[512]; + long style = wxSAVE | wxOVERWRITE_PROMPT; + wxFileDialog *fdialog = new wxFileDialog(this, wxT("Save configuration"), wxT(""), wxT(""), wxT("*.*"), style); + if (fdialog->ShowModal() == wxID_OK) { + strncpy(bochsrc, fdialog->GetPath().mb_str(wxConvUTF8), sizeof(bochsrc)); + SIM->write_rc(bochsrc, 1); + } + delete fdialog; +} + +void MyFrame::OnStateRestore(wxCommandEvent& WXUNUSED(event)) +{ + char sr_path[512]; + // pass some initial dir to wxDirDialog + wxString dirSaveRestore; + + wxGetHomeDir(&dirSaveRestore); + wxDirDialog ddialog(this, wxT("Select folder with save/restore data"), dirSaveRestore, wxDD_DEFAULT_STYLE); + + if (ddialog.ShowModal() == wxID_OK) { + strncpy(sr_path, ddialog.GetPath().mb_str(wxConvUTF8), sizeof(sr_path)); + SIM->get_param_bool(BXPN_RESTORE_FLAG)->set(1); + SIM->get_param_string(BXPN_RESTORE_PATH)->set(sr_path); + } +} + +void MyFrame::OnEditCPU(wxCommandEvent& WXUNUSED(event)) +{ + ParamDialog dlg(this, -1); + bx_list_c *list = (bx_list_c*) SIM->get_param("cpu"); + dlg.SetTitle(wxString(list->get_title()->getptr(), wxConvUTF8)); + dlg.AddParam(list); + dlg.ShowModal(); +} + +void MyFrame::OnEditMemory(wxCommandEvent& WXUNUSED(event)) +{ + ParamDialog dlg(this, -1); + bx_list_c *list = (bx_list_c*) SIM->get_param("memory"); + dlg.SetTitle(wxString(list->get_title()->getptr(), wxConvUTF8)); + dlg.AddParam(list); + dlg.ShowModal(); +} + +void MyFrame::OnEditClockCmos(wxCommandEvent& WXUNUSED(event)) +{ + ParamDialog dlg(this, -1); + bx_list_c *list = (bx_list_c*) SIM->get_param("clock_cmos"); + dlg.SetTitle(wxString(list->get_title()->getptr(), wxConvUTF8)); + dlg.AddParam(list); + dlg.ShowModal(); +} + +void MyFrame::OnEditPCI(wxCommandEvent& WXUNUSED(event)) +{ + ParamDialog dlg(this, -1); + bx_list_c *list = (bx_list_c*) SIM->get_param("pci"); + dlg.SetTitle(wxString(list->get_title()->getptr(), wxConvUTF8)); + dlg.AddParam(list); + dlg.ShowModal(); +} + +void MyFrame::OnEditDisplay(wxCommandEvent& WXUNUSED(event)) +{ + ParamDialog dlg(this, -1); + bx_list_c *list = (bx_list_c*) SIM->get_param("display"); + dlg.SetTitle(wxString(list->get_title()->getptr(), wxConvUTF8)); + dlg.AddParam(list); + dlg.SetRuntimeFlag(sim_thread != NULL); + dlg.ShowModal(); +} + +void MyFrame::OnEditKeyboard(wxCommandEvent& WXUNUSED(event)) +{ + ParamDialog dlg(this, -1); + bx_list_c *list = (bx_list_c*) SIM->get_param("keyboard_mouse"); + dlg.SetTitle(wxString(list->get_title()->getptr(), wxConvUTF8)); + dlg.AddParam(list); + dlg.SetRuntimeFlag(sim_thread != NULL); + dlg.ShowModal(); +} + +void MyFrame::OnEditBoot(wxCommandEvent& WXUNUSED(event)) +{ + int bootDevices = 0; + bx_param_enum_c *floppy = SIM->get_param_enum(BXPN_FLOPPYA_DEVTYPE); + if (floppy->get() != BX_FDD_NONE) { + bootDevices++; + } + bx_param_c *firsthd = SIM->get_first_hd(); + if (firsthd != NULL) { + bootDevices++; + } + bx_param_c *firstcd = SIM->get_first_cdrom(); + if (firstcd != NULL) { + bootDevices++; + } + if (bootDevices == 0) { + wxMessageBox(wxT("All the possible boot devices are disabled right now!\nYou must enable the first floppy drive, a hard drive, or a CD-ROM."), + wxT("None enabled"), wxOK | wxICON_ERROR, this); + return; + } + ParamDialog dlg(this, -1); + bx_list_c *list = (bx_list_c*) SIM->get_param("boot_params"); + dlg.SetTitle(wxString(list->get_title()->getptr(), wxConvUTF8)); + dlg.AddParam(list); + dlg.ShowModal(); +} + +void MyFrame::OnEditSerialParallel(wxCommandEvent& WXUNUSED(event)) +{ + ParamDialog dlg(this, -1); + bx_list_c *list = (bx_list_c*) SIM->get_param("ports"); + dlg.SetTitle(wxString(list->get_title()->getptr(), wxConvUTF8)); + dlg.AddParam(list); + dlg.SetRuntimeFlag(sim_thread != NULL); + dlg.ShowModal(); +} + +void MyFrame::OnEditNet(wxCommandEvent& WXUNUSED(event)) +{ + ParamDialog dlg(this, -1); + bx_list_c *list = (bx_list_c*) SIM->get_param("network"); + dlg.SetTitle(wxString(list->get_title()->getptr(), wxConvUTF8)); + dlg.AddParam(list); + dlg.ShowModal(); +} + +void MyFrame::OnEditSound(wxCommandEvent& WXUNUSED(event)) +{ + ParamDialog dlg(this, -1); + bx_list_c *list = (bx_list_c*) SIM->get_param(BXPN_SB16); + dlg.SetTitle(wxString(list->get_title()->getptr(), wxConvUTF8)); + dlg.AddParam(list); + dlg.SetRuntimeFlag(sim_thread != NULL); + dlg.ShowModal(); +} + +void MyFrame::OnEditOther(wxCommandEvent& WXUNUSED(event)) +{ + ParamDialog dlg(this, -1); + bx_list_c *list = (bx_list_c*) SIM->get_param("misc"); + dlg.SetTitle(wxString(list->get_title()->getptr(), wxConvUTF8)); + dlg.AddParam(list); + dlg.SetRuntimeFlag(sim_thread != NULL); + dlg.ShowModal(); +} + +void MyFrame::OnLogPrefs(wxCommandEvent& WXUNUSED(event)) +{ + // Ideally I would use the siminterface methods to fill in the fields + // of the LogOptionsDialog, but in fact several things are hardcoded. + // At least I can verify that the expected numbers are the same. + wxASSERT(SIM->get_max_log_level() == LOG_OPTS_N_TYPES); + LogOptionsDialog dlg(this, -1); + + // The inital values of the dialog are complicated. If the panic action + // for all modules is "ask", then clearly the inital value in the dialog + // for panic action should be "ask". This informs the user what the + // previous value was, and if they click Ok it won't do any harm. But if + // some devices are set to "ask" and others are set to "report", then the + // initial value should be "no change". With "no change", clicking on Ok + // will not destroy the settings for individual devices. You would only + // start to see "no change" if you've been messing around in the advanced + // menu already. + int level, nlevel = SIM->get_max_log_level(); + for (level=0; levelget_log_action(mod, level); + bool consensus = true; + // now compare all others to first. If all match, then use "first" as + // the initial value. + for (mod=1; modget_n_log_modules(); mod++) { + if (first != SIM->get_log_action(mod, level)) { + consensus = false; + break; + } + } + if (consensus) + dlg.SetAction(level, first); + else + dlg.SetAction(level, LOG_OPTS_NO_CHANGE); + } + int n = dlg.ShowModal(); // show the dialog! + if (n == wxID_OK) { + for (level=0; levelset_default_log_action(level, action); + // apply that action to all modules (devices) + SIM->set_log_action(-1, level, action); + } + } + } +} + +void MyFrame::OnLogPrefsDevice(wxCommandEvent& WXUNUSED(event)) +{ + wxASSERT(SIM->get_max_log_level() == ADVLOG_OPTS_N_TYPES); + AdvancedLogOptionsDialog dlg(this, -1); + dlg.ShowModal(); +} + +// How is this going to work? +// The dialog box shows the value of CPU registers, which will be changing +// all the time. What causes the dialog to reread the register value and +// display it? Brainstorm: +// 1) The update could be controlled by a real-time timer. +// 2) It could be triggered by periodic BX_SYNC_EVT_TICK events. +// 3) It could be triggered by changes in the actual value. This is +// good for values that rarely change, but horrible for values like +// EIP that change constantly. +// 4) An update can be forced by explictly calling an update function. For +// example after a single-step you would want to force an update. If you +// interrupt the simulation, you want to force an update. If you manually +// change a parameter, you would force an update. +// When simulation is free running, #1 or #2 might make sense. Try #2. +void MyFrame::OnShowCpu(wxCommandEvent& WXUNUSED(event)) +{ + if (SIM->get_param(BXPN_WX_CPU0_STATE) == NULL) { + // if params not initialized yet, then give up + wxMessageBox(wxT("Cannot show the debugger window until the simulation has begun."), + wxT("Sim not started"), wxOK | wxICON_ERROR, this); + return; + } + if (showCpu == NULL) { + showCpu = new CpuRegistersDialog(this, -1); +#if BX_DEBUGGER + showCpu->SetTitle(wxT("Bochs Debugger")); +#else + showCpu->SetTitle(wxT("CPU Registers")); +#endif + showCpu->Init(); + } else { + showCpu->CopyParamToGui(); + } + showCpu->Show(TRUE); +} + +void MyFrame::OnShowKeyboard(wxCommandEvent& WXUNUSED(event)) +{ + bx_list_c *list = (bx_list_c*)SIM->get_param(BXPN_WX_KBD_STATE); + int list_size = 0; + + if (list != NULL) { + list_size = list->get_size(); + } + if (list_size == 0) { + // if params not initialized yet, then give up + wxMessageBox(wxT("Cannot show the debugger window until the simulation has begun."), + wxT("Sim not running"), wxOK | wxICON_ERROR, this); + return; + } + if (showKbd == NULL) { + showKbd = new ParamDialog(this, -1); + showKbd->SetTitle(wxT("Keyboard State (incomplete, this is a demo)")); + showKbd->AddParam(SIM->get_param(BXPN_WX_KBD_STATE)); + showKbd->Init(); + } else { + showKbd->CopyParamToGui(); + } + showKbd->Show(TRUE); +} + +#if BX_DEBUGGER +void MyFrame::OnDebugLog(wxCommandEvent& WXUNUSED(event)) +{ + wxASSERT(showDebugLog != NULL); + showDebugLog->CopyParamToGui(); + showDebugLog->Show(TRUE); +} + +void MyFrame::DebugBreak() +{ + if (debugCommand) { + delete [] debugCommand; + debugCommand = NULL; + } + wxASSERT(showDebugLog != NULL); + showDebugLog->AppendCommand("*** break ***"); + SIM->debug_break(); +} + +void MyFrame::DebugCommand(wxString cmd) +{ + char buf[1024]; + safeWxStrcpy(buf, cmd, sizeof(buf)); + DebugCommand(buf); +} + +void MyFrame::DebugCommand(const char *cmd) +{ + wxLogDebug(wxT("debugger command: %s"), cmd); + wxASSERT(showDebugLog != NULL); + showDebugLog->AppendCommand(cmd); + if (debugCommand != NULL) { + // one is already waiting + wxLogDebug(wxT("multiple debugger commands, discarding the earlier one")); + delete [] debugCommand; + debugCommand = NULL; + } + int len = strlen(cmd); + char *tmp = new char[len+1]; + strncpy(tmp, cmd, len+1); + // if an event is waiting for us, fill it an send back to sim_thread. + if (debugCommandEvent != NULL) { + wxLogDebug(wxT("sim_thread was waiting for this command '%s'"), tmp); + wxASSERT(debugCommandEvent->type == BX_SYNC_EVT_GET_DBG_COMMAND); + debugCommandEvent->u.debugcmd.command = tmp; + debugCommandEvent->retcode = 1; + sim_thread->SendSyncResponse(debugCommandEvent); + wxASSERT(debugCommand == NULL); + debugCommandEvent = NULL; + } else { + // store this command in debugCommand for the future + wxLogDebug(wxT("storing debugger command '%s'"), tmp); + debugCommand = tmp; + } +} +#endif + +void MyFrame::OnQuit(wxCommandEvent& event) +{ + wxBochsClosing = true; + bx_user_quit = 1; + if (!sim_thread) { + // no simulation thread is running. Just close the window. + Close(TRUE); + } else { + SIM->set_notify_callback(&MyApp::DefaultCallback, this); + // ask the simulator to stop. When it stops it will close this frame. + SetStatusText(wxT("Waiting for simulation to stop...")); + OnKillSim(event); + } +} + +void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) +{ + wxString str(wxT("Bochs x86 Emulator version ")); + str += wxString(VER_STRING, wxConvUTF8); + str += wxT(" (wxWidgets port)"); + wxMessageBox(str, wxT("About Bochs"), wxOK | wxICON_INFORMATION, this); +} + +// update the menu items, status bar, etc. +void MyFrame::simStatusChanged(StatusChange change, bx_bool popupNotify) { + char ata_name[20]; + bx_list_c *base; + + switch (change) { + case Start: // running + wxLogStatus(wxT("Starting Bochs simulation")); + menuSimulate->Enable(ID_Simulate_Start, FALSE); + menuSimulate->Enable(ID_Simulate_PauseResume, TRUE); + menuSimulate->Enable(ID_Simulate_Stop, TRUE); + menuSimulate->SetLabel(ID_Simulate_PauseResume, wxT("&Pause")); + break; + case Stop: // not running + wxLogStatus(wxT("Simulation stopped")); + menuSimulate->Enable(ID_Simulate_Start, TRUE); + menuSimulate->Enable(ID_Simulate_PauseResume, FALSE); + menuSimulate->Enable(ID_Simulate_Stop, FALSE); + menuSimulate->SetLabel(ID_Simulate_PauseResume, wxT("&Pause")); +#if BX_DEBUGGER + showDebugLog->Show(FALSE); +#endif + // This should only be used if the simulation stops due to error. + // Obviously if the user asked it to stop, they don't need to be told. + if (popupNotify) + wxMessageBox(wxT("Bochs simulation has stopped."), wxT("Bochs Stopped"), + wxOK | wxICON_INFORMATION, this); + break; + case Pause: // pause + wxLogStatus(wxT("Pausing simulation")); + menuSimulate->SetLabel(ID_Simulate_PauseResume, wxT("&Resume")); + break; + case Resume: // resume + wxLogStatus(wxT("Resuming simulation")); + menuSimulate->SetLabel(ID_Simulate_PauseResume, wxT("&Pause")); + break; + } + bool canConfigure = (change == Stop); + menuConfiguration->Enable(ID_Config_New, canConfigure); + menuConfiguration->Enable(ID_Config_Read, canConfigure); + menuConfiguration->Enable(ID_State_Restore, canConfigure); + + // only enabled ATA channels with a cdrom connected are available at runtime + for (unsigned i=0; iget_param(ata_name); + if (!SIM->get_param_bool("enabled", base)->get()) { + menuEdit->Enable(ID_Edit_ATA0+i, canConfigure); + } else { + sprintf(ata_name, "ata.%d.master", i); + base = (bx_list_c*) SIM->get_param(ata_name); + if (SIM->get_param_enum("type", base)->get() != BX_ATA_DEVICE_CDROM) { + sprintf(ata_name, "ata.%d.slave", i); + base = (bx_list_c*) SIM->get_param(ata_name); + if (SIM->get_param_enum("type", base)->get() != BX_ATA_DEVICE_CDROM) { + menuEdit->Enable(ID_Edit_ATA0+i, canConfigure); + } + } + } + } + menuEdit->Enable(ID_Edit_CPU, canConfigure); + menuEdit->Enable(ID_Edit_Memory, canConfigure); + menuEdit->Enable(ID_Edit_Clock_Cmos, canConfigure); + menuEdit->Enable(ID_Edit_PCI, canConfigure); + menuEdit->Enable(ID_Edit_Boot, canConfigure); + menuEdit->Enable(ID_Edit_Network, canConfigure); + // during simulation, certain menu options like the floppy disk + // can be modified under some circumstances. A floppy drive can + // only be edited if it was enabled at boot time. + Bit64u value; + value = SIM->get_param_enum(BXPN_FLOPPYA_DEVTYPE)->get(); + menuEdit->Enable(ID_Edit_FD_0, canConfigure || (value != BX_FDD_NONE)); + bxToolBar->EnableTool(ID_Edit_FD_0, canConfigure || (value != BX_FDD_NONE)); + value = SIM->get_param_enum(BXPN_FLOPPYB_DEVTYPE)->get(); + menuEdit->Enable(ID_Edit_FD_1, canConfigure || (value != BX_FDD_NONE)); + bxToolBar->EnableTool(ID_Edit_FD_1, canConfigure || (value != BX_FDD_NONE)); + bxToolBar->EnableTool(ID_Edit_Cdrom, canConfigure || (SIM->get_first_cdrom() != NULL)); +} + +void MyFrame::OnStartSim(wxCommandEvent& event) +{ + wxCriticalSectionLocker lock(sim_thread_lock); + if (sim_thread != NULL) { + wxMessageBox( + wxT("Can't start Bochs simulator, because it is already running"), + wxT("Already Running"), wxOK | wxICON_ERROR, this); + return; + } + // check that display library is set to wx. If not, give a warning and + // change it to wx. It is technically possible to use other vga libraries + // with the wx config interface, but there are still some significant + // problems. + bx_param_enum_c *gui_param = SIM->get_param_enum(BXPN_SEL_DISPLAY_LIBRARY); + const char *gui_name = gui_param->get_selected(); + if (strcmp(gui_name, "wx") != 0) { + wxMessageBox(wxT( + "The display library was not set to wxWidgets. When you use the\n" + "wxWidgets configuration interface, you must also select the wxWidgets\n" + "display library. I will change it to 'wx' now."), + wxT("display library error"), wxOK | wxICON_WARNING, this); + if (!gui_param->set_by_name("wx")) { + wxASSERT(0 && "Could not set display library setting to 'wx"); + } + } + // give warning about restarting the simulation + start_bochs_times++; + if (start_bochs_times>1) { + wxMessageBox(wxT( + "You have already started the simulator once this session. Due to memory leaks and bugs in init code, you may get unstable behavior."), + wxT("2nd time warning"), wxOK | wxICON_WARNING, this); + } + num_events = 0; // clear the queue of events for bochs to handle + wxBochsStopSim = false; + sim_thread = new SimThread(this); + sim_thread->Create(); + sim_thread->Run(); + wxLogDebug(wxT("Simulator thread has started.")); + // set up callback for events from simulator thread + SIM->set_notify_callback(&SimThread::SiminterfaceCallback, sim_thread); + simStatusChanged(Start); +} + +void MyFrame::OnPauseResumeSim(wxCommandEvent& WXUNUSED(event)) +{ + wxCriticalSectionLocker lock(sim_thread_lock); + if (sim_thread) { + if (sim_thread->IsPaused()) { + simStatusChanged(Resume); + sim_thread->Resume(); + } else { + simStatusChanged(Pause); + sim_thread->Pause(); + } + } +} + +void MyFrame::OnKillSim(wxCommandEvent& WXUNUSED(event)) +{ + // DON'T use a critical section here. Delete implicitly calls + // OnSimThreadExit, which also tries to lock sim_thread_lock. + // If we grab the lock at this level, deadlock results. + wxLogDebug(wxT("OnKillSim()")); +#if BX_DEBUGGER + // the sim_thread may be waiting for a debugger command. If so, send + // it a "quit" + DebugCommand("quit"); + debugCommand = NULL; +#endif + if (sim_thread) { + wxBochsStopSim = true; + sim_thread->Delete(); + // Next time the simulator reaches bx_real_sim_c::periodic() it + // will quit. This is better than killing the thread because it + // gives it a chance to clean up after itself. + } + if (!wxBochsClosing) { + theFrame->simStatusChanged(theFrame->Stop, true); + } +} + +void MyFrame::OnSimThreadExit() +{ + wxCriticalSectionLocker lock(sim_thread_lock); + sim_thread = NULL; +} + +int MyFrame::HandleAskParamString(bx_param_string_c *param) +{ + wxLogDebug(wxT("HandleAskParamString start")); + int n_opt = param->get_options(); + const char *msg = param->get_label(); + if ((msg == NULL) || (strlen(msg) == 0)) { + msg = param->get_name(); + } + char newval[512]; + newval[0] = 0; + wxDialog *dialog = NULL; + if (n_opt & param->SELECT_FOLDER_DLG) { + // pass some initial dir to wxDirDialog + wxString homeDir; + + wxGetHomeDir(&homeDir); + wxDirDialog *ddialog = new wxDirDialog(this, wxString(msg, wxConvUTF8), homeDir, wxDD_DEFAULT_STYLE); + + if (ddialog->ShowModal() == wxID_OK) + strncpy(newval, ddialog->GetPath().mb_str(wxConvUTF8), sizeof(newval)); + dialog = ddialog; // so I can delete it + } else if (n_opt & param->IS_FILENAME) { + // use file open dialog + long style = + (n_opt & param->SAVE_FILE_DIALOG) ? wxSAVE|wxOVERWRITE_PROMPT : wxOPEN; + wxFileDialog *fdialog = new wxFileDialog(this, wxString(msg, wxConvUTF8), wxT(""), wxString(param->getptr(), wxConvUTF8), wxT("*.*"), style); + if (fdialog->ShowModal() == wxID_OK) + strncpy(newval, fdialog->GetPath().mb_str(wxConvUTF8), sizeof(newval)); + dialog = fdialog; // so I can delete it + } else { + // use simple string dialog + long style = wxOK|wxCANCEL; + wxTextEntryDialog *tdialog = new wxTextEntryDialog(this, wxString(msg, wxConvUTF8), wxT("Enter new value"), wxString(param->getptr(), wxConvUTF8), style); + if (tdialog->ShowModal() == wxID_OK) + strncpy(newval, tdialog->GetValue().mb_str(wxConvUTF8), sizeof(newval)); + dialog = tdialog; // so I can delete it + } + if (strlen(newval) > 0) { + // change floppy path to this value. + wxLogDebug(wxT("Setting param %s to '%s'"), param->get_name(), newval); + param->set(newval); + delete dialog; + return 1; + } + delete dialog; + return -1; +} + +// This is called when the simulator needs to ask the user to choose +// a value or setting. For example, when the user indicates that he wants +// to change the floppy disk image for drive A, an ask-param event is created +// with the parameter id set to BXP_FLOPPYA_PATH. The simulator blocks until +// the gui has displayed a dialog and received a selection from the user. +// In the current implemention, the GUI will look up the parameter's +// data structure using SIM->get_param() and then call the set method on the +// parameter to change the param. The return value only needs to return +// success or failure (failure = cancelled, or not implemented). +// Returns 1 if the user chose a value and the param was modified. +// Returns 0 if the user cancelled. +// Returns -1 if the gui doesn't know how to ask for that param. +int MyFrame::HandleAskParam(BxEvent *event) +{ + wxASSERT(event->type == BX_SYNC_EVT_ASK_PARAM); + + bx_param_c *param = event->u.param.param; + Raise(); // bring window to front so that you will see the dialog + switch (param->get_type()) + { + case BXT_PARAM_STRING: + return HandleAskParamString((bx_param_string_c *)param); + case BXT_PARAM_BOOL: + { + long style = wxYES_NO; + if (((bx_param_bool_c *)param)->get() == 0) style |= wxNO_DEFAULT; + ((bx_param_bool_c *)param)->set(wxMessageBox(wxString(param->get_description(), wxConvUTF8), + wxString(param->get_label(), wxConvUTF8), style, this) == wxYES); + return 0; + } + default: + { + wxString msg; + msg.Printf(wxT("ask param for parameter type %d is not implemented in wxWidgets"), + param->get_type()); + wxMessageBox(msg, wxT("not implemented"), wxOK | wxICON_ERROR, this); + return -1; + } + } + return -1; // could not display +} + +// This is called from the wxWidgets GUI thread, when a Sim2CI event +// is found. (It got there via wxPostEvent in SiminterfaceCallback2, which is +// executed in the simulator Thread.) +void MyFrame::OnSim2CIEvent(wxCommandEvent& event) +{ + IFDBG_EVENT(wxLogDebug(wxT("received a bochs event in the GUI thread"))); + BxEvent *be = (BxEvent *) event.GetEventObject(); + IFDBG_EVENT(wxLogDebug(wxT("event type = %d"), (int)be->type)); + // all cases should return. sync event handlers MUST send back a + // response. async event handlers MUST delete the event. + switch (be->type) { + case BX_ASYNC_EVT_REFRESH: + RefreshDialogs(); + break; + case BX_SYNC_EVT_ASK_PARAM: + wxLogDebug(wxT("before HandleAskParam")); + be->retcode = HandleAskParam(be); + wxLogDebug(wxT("after HandleAskParam")); + // return a copy of the event back to the sender. + sim_thread->SendSyncResponse(be); + wxLogDebug(wxT("after SendSyncResponse")); + break; +#if BX_DEBUGGER + case BX_ASYNC_EVT_DBG_MSG: + showDebugLog->AppendText(wxString(be->u.logmsg.msg, wxConvUTF8)); + break; +#endif + case BX_SYNC_EVT_LOG_ASK: + case BX_ASYNC_EVT_LOG_MSG: + OnLogMsg(be); + break; + case BX_SYNC_EVT_GET_DBG_COMMAND: + wxLogDebug(wxT("BX_SYNC_EVT_GET_DBG_COMMAND received")); + if (debugCommand == NULL) { + // no debugger command is ready to send, so don't send a response yet. + // When a command is issued, MyFrame::DebugCommand will fill in the + // event and call SendSyncResponse() so that the simulation thread can + // continue. + debugCommandEvent = be; + // + if (showCpu == NULL || !showCpu->IsShowing()) { + wxCommandEvent unused; + OnShowCpu(unused); + } + } else { + // a debugger command is waiting for us! + wxLogDebug(wxT("sending debugger command '%s' that was waiting"), debugCommand); + be->u.debugcmd.command = debugCommand; + debugCommand = NULL; // ready for the next one + debugCommandEvent = NULL; + be->retcode = 1; + sim_thread->SendSyncResponse(be); + } + break; + default: + wxLogDebug(wxT("OnSim2CIEvent: event type %d ignored"), (int)be->type); + if (!BX_EVT_IS_ASYNC(be->type)) { + // if it's a synchronous event, and we fail to send back a response, + // the sim thread will wait forever. So send something! + sim_thread->SendSyncResponse(be); + } + break; + } + if (BX_EVT_IS_ASYNC(be->type)) + delete be; +} + +void MyFrame::OnLogMsg(BxEvent *be) +{ + wxLogDebug(wxT("log msg: level=%d, prefix='%s', msg='%s'"), + be->u.logmsg.level, + be->u.logmsg.prefix, + be->u.logmsg.msg); + if (be->type == BX_ASYNC_EVT_LOG_MSG) + return; // we don't have any place to display log messages + else + wxASSERT(be->type == BX_SYNC_EVT_LOG_ASK); + wxString levelName(SIM->get_log_level_name(be->u.logmsg.level), wxConvUTF8); + LogMsgAskDialog dlg(this, -1, levelName); // panic, error, etc. +#if !BX_DEBUGGER && !BX_GDBSTUB + dlg.EnableButton(dlg.DEBUG, FALSE); +#endif + dlg.SetContext(wxString(be->u.logmsg.prefix, wxConvUTF8)); + dlg.SetMessage(wxString(be->u.logmsg.msg, wxConvUTF8)); + int n = dlg.ShowModal(); + // turn the return value into the constant that logfunctions::ask is + // expecting. 0=continue, 1=continue but ignore future messages from this + // device, 2=die, 3=dump core, 4=debugger. + if (n==BX_LOG_ASK_CHOICE_CONTINUE) { + if (dlg.GetDontAsk()) n = BX_LOG_ASK_CHOICE_CONTINUE_ALWAYS; + } + be->retcode = n; + wxLogDebug(wxT("you chose %d"), n); + // This can be called from two different contexts: + // 1) before sim_thread starts, the default application callback can + // call OnLogMsg to display messages. + // 2) after the sim_thread starts, the sim_thread callback can call + // OnLogMsg to display messages + if (sim_thread) + sim_thread->SendSyncResponse(be); // only for case #2 +} + +void MyFrame::editFloppyConfig(int drive) +{ + FloppyConfigDialog dlg(this, -1); + dlg.SetTitle(wxString(drive==0? BX_FLOPPY0_NAME : BX_FLOPPY1_NAME, wxConvUTF8)); + bx_list_c *list = (bx_list_c*) SIM->get_param((drive==0)? BXPN_FLOPPYA : BXPN_FLOPPYB); + dlg.Setup(list); + dlg.SetRuntimeFlag(sim_thread != NULL); + dlg.ShowModal(); +} + +void MyFrame::editFirstCdrom() +{ + bx_param_c *firstcd = SIM->get_first_cdrom(); + if (!firstcd) { + wxMessageBox(wxT("No CDROM drive is enabled. Use Edit:ATA to set one up."), + wxT("No CDROM"), wxOK | wxICON_ERROR, this); + return; + } + ParamDialog dlg(this, -1); + dlg.SetTitle(wxT("Configure CDROM")); + dlg.AddParam(firstcd); + dlg.SetRuntimeFlag(sim_thread != NULL); + dlg.ShowModal(); +} + +void MyFrame::OnEditATA(wxCommandEvent& event) +{ + int id = event.GetId(); + int channel = id - ID_Edit_ATA0; + char ata_name[10]; + sprintf(ata_name, "ata.%d", channel); + ParamDialog dlg(this, -1); + bx_list_c *list = (bx_list_c*) SIM->get_param(ata_name); + dlg.SetTitle(wxString(list->get_title()->getptr(), wxConvUTF8)); + dlg.AddParam(list); + dlg.SetRuntimeFlag(sim_thread != NULL); + dlg.ShowModal(); +} + +void MyFrame::OnToolbarClick(wxCommandEvent& event) +{ + wxLogDebug(wxT("clicked toolbar thingy")); + bx_toolbar_buttons which = BX_TOOLBAR_UNDEFINED; + int id = event.GetId(); + switch (id) { + case ID_Toolbar_Power: which = BX_TOOLBAR_POWER; wxBochsStopSim = false; break; + case ID_Toolbar_Reset: which = BX_TOOLBAR_RESET; break; + case ID_Toolbar_SaveRestore: which = BX_TOOLBAR_SAVE_RESTORE; break; + case ID_Edit_FD_0: + // floppy config dialog box + editFloppyConfig(0); + break; + case ID_Edit_FD_1: + // floppy config dialog box + editFloppyConfig(1); + break; + case ID_Edit_Cdrom: + // cdrom config dialog box (first cd only) + editFirstCdrom(); + break; + case ID_Toolbar_Copy: which = BX_TOOLBAR_COPY; break; + case ID_Toolbar_Paste: which = BX_TOOLBAR_PASTE; break; + case ID_Toolbar_Snapshot: which = BX_TOOLBAR_SNAPSHOT; break; + case ID_Toolbar_Config: which = BX_TOOLBAR_CONFIG; break; + case ID_Toolbar_Mouse_en: which = BX_TOOLBAR_MOUSE_EN; break; + case ID_Toolbar_User: which = BX_TOOLBAR_USER; break; + default: + wxLogError(wxT("unknown toolbar id %d"), id); + } + if (num_events < MAX_EVENTS) { + event_queue[num_events].type = BX_ASYNC_EVT_TOOLBAR; + event_queue[num_events].u.toolbar.button = which; + num_events++; + } +} + +// warning: This can be called from the simulator thread!!! +bool MyFrame::WantRefresh() +{ + bool anyShowing = false; + if (showCpu!=NULL && showCpu->IsShowing()) anyShowing = true; + if (showKbd!=NULL && showKbd->IsShowing()) anyShowing = true; + return anyShowing; +} + +void MyFrame::RefreshDialogs() +{ + if (showCpu!=NULL && showCpu->IsShowing()) showCpu->CopyParamToGui(); + if (showKbd!=NULL && showKbd->IsShowing()) showKbd->CopyParamToGui(); +} + +////////////////////////////////////////////////////////////////////// +// Simulation Thread +////////////////////////////////////////////////////////////////////// + +void *SimThread::Entry(void) +{ + // run all the rest of the Bochs simulator code. This function will + // run forever, unless a "kill_bochs_request" is issued. The shutdown + // procedure is as follows: + // - user selects "Kill Simulation" or GUI decides to kill bochs + // - GUI calls sim_thread->Delete() + // - sim continues to run until the next time it reaches SIM->periodic(). + // - SIM->periodic() sends a synchronous tick event to the GUI, which + // finally calls TestDestroy() and realizes it needs to stop. It + // sets the sync event return code to -1. SIM->periodic() notices + // the -1 and calls quit_sim, which longjumps to quit_context, which is + // right here in SimThread::Entry. + // - Entry() exits and the thread stops. Whew. + wxLogDebug(wxT("in SimThread, starting at bx_continue_after_config_interface")); + static jmp_buf context; // this must not go out of scope. maybe static not needed + if (setjmp(context) == 0) { + SIM->set_quit_context(&context); + SIM->begin_simulation(bx_startup_flags.argc, bx_startup_flags.argv); + wxLogDebug(wxT("in SimThread, SIM->begin_simulation() exited normally")); + } else { + wxLogDebug(wxT("in SimThread, SIM->begin_simulation() exited by longjmp")); + } + SIM->set_quit_context(NULL); + // it is possible that the whole interface has already been shut down. + // If so, we must end immediately. + // we're in the sim thread, so we must get a gui mutex before calling + // wxwidgets methods. + wxLogDebug(wxT("SimThread::Entry: get gui mutex")); + wxMutexGuiEnter(); + if (!wxBochsClosing) { + if (!wxBochsStopSim) { + wxLogDebug(wxT("SimThread::Entry: sim thread ending. call simStatusChanged")); + theFrame->simStatusChanged(theFrame->Stop, true); + } + } else { + wxLogMessage(wxT("SimThread::Entry: the gui is waiting for sim to finish. Now that it has finished, I will close the frame.")); + theFrame->Close(TRUE); + } + wxMutexGuiLeave(); + return NULL; +} + +void SimThread::OnExit() +{ + // notify the MyFrame that the bochs thread has died. I can't adjust + // the sim_thread directly because it's private. + frame->OnSimThreadExit(); + // don't use this SimThread's callback function anymore. Use the + // application default callback. + SIM->set_notify_callback(&MyApp::DefaultCallback, this); +} + +// Event handler function for BxEvents coming from the simulator. +// This function is declared static so that I can get a usable +// function pointer for it. The function pointer is passed to +// SIM->set_notify_callback so that the siminterface can call this +// function when it needs to contact the gui. It will always be +// called with a pointer to the SimThread as the first argument, and +// it will be called from the simulator thread, not the GUI thread. +BxEvent *SimThread::SiminterfaceCallback(void *thisptr, BxEvent *event) +{ + SimThread *me = (SimThread *)thisptr; + // call the normal non-static method now that we know the this pointer. + return me->SiminterfaceCallback2(event); +} + +// callback function for sim thread events. This is called from +// the sim thread, not the GUI thread. So any GUI actions must be +// thread safe. Most events are handled by packaging up the event +// in a wxEvent of some kind, and posting it to the GUI thread for +// processing. +BxEvent *SimThread::SiminterfaceCallback2(BxEvent *event) +{ + // wxLogDebug(wxT("SiminterfaceCallback with event type=%d"), (int)event->type); + event->retcode = 0; // default return code + int async = BX_EVT_IS_ASYNC(event->type); + if (!async) { + // for synchronous events, clear away any previous response. There + // can only be one synchronous event pending at a time. + ClearSyncResponse(); + event->retcode = -1; // default to error + } + + // tick event must be handled right here in the bochs thread. + if (event->type == BX_SYNC_EVT_TICK) { + if (TestDestroy()) { + // tell simulator to quit + event->retcode = -1; + } else { + event->retcode = 0; + } + return event; + } + + // prune refresh events if the frame is going to ignore them anyway + if (event->type == BX_ASYNC_EVT_REFRESH && !theFrame->WantRefresh()) { + delete event; + return NULL; + } + + //encapsulate the bxevent in a wxwidgets event + wxCommandEvent wxevent(wxEVT_COMMAND_MENU_SELECTED, ID_Sim2CI_Event); + wxevent.SetEventObject((wxEvent *)event); + if (isSimThread()) { + IFDBG_EVENT(wxLogDebug(wxT("Sending an event to the window"))); + wxPostEvent(frame, wxevent); + // if it is an asynchronous event, return immediately. The event will be + // freed by the recipient in the GUI thread. + if (async) return NULL; + wxLogDebug(wxT("SiminterfaceCallback2: synchronous event; waiting for response")); + // now wait forever for the GUI to post a response. + BxEvent *response = NULL; + while (response == NULL) { + response = GetSyncResponse(); + if (!response) { + //wxLogDebug ("no sync response yet, waiting"); + this->Sleep(20); + } + // don't get stuck here if the gui is trying to close. + if (wxBochsClosing) { + wxLogDebug(wxT("breaking out of sync event wait because gui is closing")); + event->retcode = -1; + return event; + } + } + wxASSERT(response != NULL); + return response; + } else { + wxLogDebug(wxT("sim2ci event sent from the GUI thread. calling handler directly")); + theFrame->OnSim2CIEvent(wxevent); + return event; + } +} + +void SimThread::ClearSyncResponse() +{ + wxCriticalSectionLocker lock(sim2gui_mailbox_lock); + if (sim2gui_mailbox != NULL) { + wxLogDebug(wxT("WARNING: ClearSyncResponse is throwing away an event that was previously in the mailbox")); + } + sim2gui_mailbox = NULL; +} + +void SimThread::SendSyncResponse(BxEvent *event) +{ + wxCriticalSectionLocker lock(sim2gui_mailbox_lock); + if (sim2gui_mailbox != NULL) { + wxLogDebug(wxT("WARNING: SendSyncResponse is throwing away an event that was previously in the mailbox")); + } + sim2gui_mailbox = event; +} + +BxEvent *SimThread::GetSyncResponse() +{ + wxCriticalSectionLocker lock(sim2gui_mailbox_lock); + BxEvent *event = sim2gui_mailbox; + sim2gui_mailbox = NULL; + return event; +} + +/////////////////////////////////////////////////////////////////// +// utility +/////////////////////////////////////////////////////////////////// +void safeWxStrcpy(char *dest, wxString src, int destlen) +{ + wxString tmp(src); + strncpy(dest, tmp.mb_str(wxConvUTF8), destlen); + dest[destlen-1] = 0; +} + +#endif /* if BX_WITH_WX */ diff --git a/bochs/gui/wxmain.h b/bochs/gui/wxmain.h new file mode 100644 index 00000000..a092f428 --- /dev/null +++ b/bochs/gui/wxmain.h @@ -0,0 +1,226 @@ +///////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////// + +// This file defines variables and classes that the wxWidgets .cc files +// share. It should be included only by wx.cc and wxmain.cc. + +// forward class declaration so that each class can have a pointer to +// the others. +class MyFrame; +class MyPanel; +class SimThread; +class ParamDialog; +#if BX_DEBUGGER +class DebugLogDialog; +#endif + +//hack alert; yuck; FIXME +extern MyFrame *theFrame; +extern MyPanel *thePanel; + +// wxBochsClosing flag, see comments in wxmain.h +extern bool wxBochsClosing; + +#define MAX_EVENTS 256 +extern unsigned long num_events; +extern BxEvent event_queue[MAX_EVENTS]; + +enum +{ + ID_Quit = 1, + ID_Config_New, + ID_Config_Read, + ID_Config_Save, + ID_State_Restore, + ID_Edit_FD_0, + ID_Edit_FD_1, + ID_Edit_ATA0, + ID_Edit_ATA1, + ID_Edit_ATA2, + ID_Edit_ATA3, + ID_Edit_Cdrom, // for toolbar. FIXME: toolbar can't handle >1 cdrom + ID_Edit_CPU, + ID_Edit_Memory, + ID_Edit_Clock_Cmos, + ID_Edit_PCI, + ID_Edit_Display, + ID_Edit_Keyboard, + ID_Edit_Boot, + ID_Edit_Serial_Parallel, + ID_Edit_Network, + ID_Edit_Sound, + ID_Edit_Other, + ID_Simulate_Start, + ID_Simulate_PauseResume, + ID_Simulate_Stop, + ID_Debug_ShowCpu, + ID_Debug_ShowKeyboard, + ID_Debug_Console, + ID_Debug_ShowMemory, + ID_Log_View, + ID_Log_Prefs, + ID_Log_PrefsDevice, + ID_Help_About, + ID_Sim2CI_Event, + // ids for Bochs toolbar + ID_Toolbar_FloppyA, + ID_Toolbar_FloppyB, + ID_Toolbar_CdromD, + ID_Toolbar_Reset, + ID_Toolbar_Power, + ID_Toolbar_Copy, + ID_Toolbar_Paste, + ID_Toolbar_Snapshot, + ID_Toolbar_Config, + ID_Toolbar_Mouse_en, + ID_Toolbar_User, + ID_Toolbar_SaveRestore, + // dialog box: LogMsgAskDialog + ID_Continue, + ID_Die, + ID_DumpCore, + ID_Debugger, + ID_Help, + // dialog box: FloppyConfigDialog + ID_Create, + // dialog box: LogOptions + ID_Browse, + // dialog box: CpuRegistersDialog + ID_Debug_Continue, + ID_Debug_Stop, + ID_Debug_Step, + ID_Debug_Commit, + ID_Close, + ID_Execute, + ID_DebugCommand, + // advanced log options + ID_ApplyDefault, + // that's all + ID_LAST_USER_DEFINED +}; + + +// to compile in debug messages, change these defines to x. To remove them, +// change the defines to return nothing. +#define IFDBG_VGA(x) /* nothing */ +//#define IFDBG_VGA(x) x + +#define IFDBG_KEY(x) /* nothing */ +//#define IFDBG_KEY(x) x + +#define IFDBG_MOUSE(x) /* nothing */ +//#define IFDBG_MOUSE(x) x + +#define IFDBG_EVENT(x) /* nothing */ +//#define IFDBG_EVENT(x) x + +#define IFDBG_DLG(x) /* nothing */ +//#define IFDBG_DLG(x) x + + +// defined in wxmain.cc +void safeWxStrcpy(char *dest, wxString src, int destlen); + +/// the MyPanel methods are defined in wx.cc +class MyPanel: public wxPanel +{ + bx_bool fillBxKeyEvent(wxKeyEvent& event, BxKeyEvent& bxev, bx_bool release); // for all platforms + bx_bool fillBxKeyEvent_MSW(wxKeyEvent& event, BxKeyEvent& bxev, bx_bool release); + bx_bool fillBxKeyEvent_GTK(wxKeyEvent& event, BxKeyEvent& bxev, bx_bool release); +public: + MyPanel(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = wxT("panel")); + ~MyPanel(); + void OnKeyDown(wxKeyEvent& event); + void OnKeyUp(wxKeyEvent& event); + void OnTimer(wxTimerEvent& event); + void OnPaint(wxPaintEvent& event); + void OnMouse(wxMouseEvent& event); + void MyRefresh(); + static void OnPluginInit(); + void ToggleMouse(bool fromToolbar); +private: + wxCursor *blankCursor; + bool needRefresh; + wxTimer refreshTimer; + Bit16s mouseSavedX, mouseSavedY; + Bit32u centerX, centerY; + DECLARE_EVENT_TABLE() +}; + +/// the MyFrame methods are defined in wxmain.cc +class MyFrame: public wxFrame +{ + MyPanel *panel; +public: + MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, const long style); + ~MyFrame(); + enum StatusChange { Start, Stop, Pause, Resume }; + void simStatusChanged(StatusChange change, bx_bool popupNotify=false); + void OnConfigNew(wxCommandEvent& event); + void OnConfigRead(wxCommandEvent& event); + void OnConfigSave(wxCommandEvent& event); + void OnStateRestore(wxCommandEvent& event); + void OnQuit(wxCommandEvent& event); + void OnAbout(wxCommandEvent& event); + void OnStartSim(wxCommandEvent& event); + void OnPauseResumeSim(wxCommandEvent& event); + void OnKillSim(wxCommandEvent& event); + void OnSim2CIEvent(wxCommandEvent& event); + void OnLogMsg(BxEvent *logMsgEvent); + void OnEditCPU(wxCommandEvent& event); + void OnEditMemory(wxCommandEvent& event); + void OnEditClockCmos(wxCommandEvent& event); + void OnEditPCI(wxCommandEvent& event); + void OnEditDisplay(wxCommandEvent& event); + void OnEditKeyboard(wxCommandEvent& event); + void OnEditBoot(wxCommandEvent& event); + void OnEditSerialParallel(wxCommandEvent& event); + void OnEditNet(wxCommandEvent& event); + void OnEditSound(wxCommandEvent& event); + void OnEditOther(wxCommandEvent& event); + void OnLogPrefs(wxCommandEvent& event); + void OnLogPrefsDevice(wxCommandEvent& event); + void OnEditATA(wxCommandEvent& event); + void OnShowCpu(wxCommandEvent& event); + void OnShowKeyboard(wxCommandEvent& event); +#if BX_DEBUGGER + void OnDebugLog(wxCommandEvent& event); + void DebugBreak(); + void DebugCommand(wxString string); + void DebugCommand(const char *cmd); +#endif + void editFloppyConfig(int drive); + void editFirstCdrom(); + void OnToolbarClick(wxCommandEvent& event); + int HandleAskParam(BxEvent *event); + int HandleAskParamString(bx_param_string_c *param); + + // called from the sim thread's OnExit() method. + void OnSimThreadExit(); + SimThread *GetSimThread() { return sim_thread; } + +private: + wxCriticalSection sim_thread_lock; + SimThread *sim_thread; // get the lock before accessing sim_thread + int start_bochs_times; + wxMenu *menuConfiguration; + wxMenu *menuEdit; + wxMenu *menuSimulate; + wxMenu *menuDebug; + wxMenu *menuLog; + wxMenu *menuHelp; + wxToolBar *bxToolBar; + ParamDialog *showCpu, *showKbd; +#if BX_DEBUGGER + DebugLogDialog *showDebugLog; +#endif + void RefreshDialogs(); + char *debugCommand; // maybe need lock on this + BxEvent *debugCommandEvent; // maybe need lock on this +public: + bool WantRefresh(); + +DECLARE_EVENT_TABLE() +}; + diff --git a/bochs/gui/x.cc b/bochs/gui/x.cc new file mode 100644 index 00000000..d1f5f046 --- /dev/null +++ b/bochs/gui/x.cc @@ -0,0 +1,2626 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#define XK_PUBLISHING +#define XK_TECHNICAL + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "bochs.h" +#include "param_names.h" +#include "keymap.h" +#include "iodev.h" +#include "enh_dbg.h" +#if BX_WITH_X11 + +extern "C" { +#include +#include +#include +#include +#include +#include +#if BX_HAVE_XPM_H +#include +#endif +} + +#if BX_HAVE_XPM_H +#include "icon_bochs.xpm" +#else +#include "icon_bochs.h" +#endif + +#include "font/vga.bitmap.h" + +class bx_x_gui_c : public bx_gui_c { +public: + bx_x_gui_c (void); + DECLARE_GUI_VIRTUAL_METHODS() + DECLARE_GUI_NEW_VIRTUAL_METHODS() +#if BX_USE_IDLE_HACK + virtual void sim_is_idle(void); +#endif + virtual void beep_on(float frequency); + virtual void beep_off(); + virtual void statusbar_setitem(int element, bx_bool active, bx_bool w=0); + virtual void get_capabilities(Bit16u *xres, Bit16u *yres, Bit16u *bpp); +#if BX_SHOW_IPS + virtual void show_ips(Bit32u ips_count); +#endif +}; + +// declare one instance of the gui object and call macro to insert the +// plugin code +static bx_x_gui_c *theGui = NULL; +IMPLEMENT_GUI_PLUGIN_CODE(x) + +#define LOG_THIS theGui-> + +#define MAX_MAPPED_STRING_LENGTH 10 + +/* These are used as arguments to nearly every Xlib routine, so it saves + * routine arguments to declare them global. If there were + * additional source files, they would be declared extern there. */ +Display *bx_x_display; +int bx_x_screen_num; +static Visual *default_visual; +static Colormap default_cmap; +static unsigned long white_pixel=0, black_pixel=0; + +static char *progname; /* name this program was invoked by */ + +static unsigned int text_rows=25, text_cols=80; +static Bit8u h_panning = 0, v_panning = 0; +static Bit16u line_compare = 1023; + +static Window win; +static GC gc, gc_inv, gc_headerbar, gc_headerbar_inv; +static unsigned font_width, font_height; +static unsigned dimension_x=0, dimension_y=0; +static unsigned vga_bpp=8; + +static XImage *ximage = NULL; +static unsigned imDepth, imWide, imBPP; + +// current cursor coordinates +static int prev_x=-1, prev_y=-1; +static int current_x=-1, current_y=-1, current_z=0; +static unsigned mouse_button_state = 0; + +static unsigned prev_cursor_x=0; +static unsigned prev_cursor_y=0; + +static int warp_home_x = 200; +static int warp_home_y = 200; +static int mouse_enable_x = 0; +static int mouse_enable_y = 0; +static int warp_dx = 0; +static int warp_dy = 0; + +static void warp_cursor(int dx, int dy); +static void disable_cursor(); +static void enable_cursor(); + +static Bit32u convertStringToXKeysym (const char *string); + +static bx_bool x_init_done = false; + +static Pixmap vgafont[256]; + +static unsigned bx_bitmap_entries = 0; +static struct { + Pixmap bmap; + unsigned xdim; + unsigned ydim; +} bx_bitmaps[BX_MAX_PIXMAPS]; + +static struct { + Pixmap bitmap; + unsigned xdim; + unsigned ydim; + unsigned xorigin; + unsigned yorigin; + unsigned alignment; + void (*f)(void); +} bx_headerbar_entry[BX_MAX_HEADERBAR_ENTRIES]; + +static unsigned bx_headerbar_y = 0; +static unsigned bx_headerbar_entries = 0; +static unsigned bx_bitmap_left_xorigin = 0; // pixels from left +static unsigned bx_bitmap_right_xorigin = 0; // pixels from right + +static unsigned bx_statusbar_y = 18; +static unsigned bx_statusitem_pos[12] = { + 0, 200, 240, 280, 320, 360, 400, 440, 480, 520, 560, 600 +}; +static bx_bool bx_statusitem_active[12]; +static long bx_status_led_green, bx_status_led_red, bx_status_graytext; +static char bx_status_info_text[34]; +#if BX_SHOW_IPS +static bx_bool x11_ips_update = 0, x11_hide_ips = 0; +static char x11_ips_text[20]; +static Bit8u x11_mouse_msg_counter = 0; +#endif + +static void headerbar_click(int x, int y); +static void send_keyboard_mouse_status(void); +static void set_status_text(int element, const char *text, bx_bool active, bx_bool w=0); + + +Bit32u ascii_to_key_event[0x5f] = { + // !"#$%&' + BX_KEY_SPACE, + BX_KEY_1, + BX_KEY_SINGLE_QUOTE, + BX_KEY_3, + BX_KEY_4, + BX_KEY_5, + BX_KEY_7, + BX_KEY_SINGLE_QUOTE, + + // ()*+,-./ + BX_KEY_9, + BX_KEY_0, + BX_KEY_8, + BX_KEY_EQUALS, + BX_KEY_COMMA, + BX_KEY_MINUS, + BX_KEY_PERIOD, + BX_KEY_SLASH, + + // 01234567 + BX_KEY_0, + BX_KEY_1, + BX_KEY_2, + BX_KEY_3, + BX_KEY_4, + BX_KEY_5, + BX_KEY_6, + BX_KEY_7, + + // 89:;<=>? + BX_KEY_8, + BX_KEY_9, + BX_KEY_SEMICOLON, + BX_KEY_SEMICOLON, + BX_KEY_COMMA, + BX_KEY_EQUALS, + BX_KEY_PERIOD, + BX_KEY_SLASH, + + // @ABCDEFG + BX_KEY_2, + BX_KEY_A, + BX_KEY_B, + BX_KEY_C, + BX_KEY_D, + BX_KEY_E, + BX_KEY_F, + BX_KEY_G, + + + // HIJKLMNO + BX_KEY_H, + BX_KEY_I, + BX_KEY_J, + BX_KEY_K, + BX_KEY_L, + BX_KEY_M, + BX_KEY_N, + BX_KEY_O, + + + // PQRSTUVW + BX_KEY_P, + BX_KEY_Q, + BX_KEY_R, + BX_KEY_S, + BX_KEY_T, + BX_KEY_U, + BX_KEY_V, + BX_KEY_W, + + // XYZ[\]^_ + BX_KEY_X, + BX_KEY_Y, + BX_KEY_Z, + BX_KEY_LEFT_BRACKET, + BX_KEY_BACKSLASH, + BX_KEY_RIGHT_BRACKET, + BX_KEY_6, + BX_KEY_MINUS, + + // `abcdefg + BX_KEY_GRAVE, + BX_KEY_A, + BX_KEY_B, + BX_KEY_C, + BX_KEY_D, + BX_KEY_E, + BX_KEY_F, + BX_KEY_G, + + // hijklmno + BX_KEY_H, + BX_KEY_I, + BX_KEY_J, + BX_KEY_K, + BX_KEY_L, + BX_KEY_M, + BX_KEY_N, + BX_KEY_O, + + // pqrstuvw + BX_KEY_P, + BX_KEY_Q, + BX_KEY_R, + BX_KEY_S, + BX_KEY_T, + BX_KEY_U, + BX_KEY_V, + BX_KEY_W, + + // xyz{|}~ + BX_KEY_X, + BX_KEY_Y, + BX_KEY_Z, + BX_KEY_LEFT_BRACKET, + BX_KEY_BACKSLASH, + BX_KEY_RIGHT_BRACKET, + BX_KEY_GRAVE +}; + +extern Bit8u graphics_snapshot[32 * 1024]; + +static void create_internal_vga_font(void); +static void xkeypress(KeySym keysym, int press_release); +// extern "C" void select_visual(void); + +#define ROUNDUP(nbytes, pad) ((((nbytes) + ((pad)-1)) / (pad)) * ((pad)>>3)) + + +#define MAX_VGA_COLORS 256 + +unsigned long col_vals[MAX_VGA_COLORS]; // 256 VGA colors +unsigned curr_foreground, curr_background; + +static unsigned x_tilesize, y_tilesize; + +BxEvent *x11_notify_callback (void *unused, BxEvent *event); +static bxevent_handler old_callback = NULL; +static void *old_callback_arg = NULL; + + +// Try to allocate NCOLORS at once in the colormap provided. If it can +// be done, return true. If not, return false. (In either case, free +// up the color cells so that we don't add to the problem!) This is used +// to determine whether Bochs should use a private colormap even when the +// user did not specify it. +static bx_bool +test_alloc_colors (Colormap cmap, Bit32u n_tries) { + XColor color; + unsigned long pixel[MAX_VGA_COLORS]; + bx_bool pixel_valid[MAX_VGA_COLORS]; + Bit32u n_allocated = 0; + Bit32u i; + color.flags = DoRed | DoGreen | DoBlue; + for (i=0; iget_param_bool(BXPN_PRIVATE_COLORMAP)->get()) { + default_cmap = DefaultColormap(bx_x_display, bx_x_screen_num); + // try to use default colormap. If not enough colors are available, + // then switch to private colormap despite the user setting. There + // are too many cases when no colors are available and Bochs simply + // draws everything in black on black. + if (!test_alloc_colors (default_cmap, 16)) { + BX_ERROR (("I can't even allocate 16 colors! Switching to a private colormap")); + SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->set(1); + } + col_vals[0] = BlackPixel(bx_x_display, bx_x_screen_num); + col_vals[15] = WhitePixel(bx_x_display, bx_x_screen_num); + for (i = 1; i < MAX_VGA_COLORS; i++) { + if (i==15) continue; + col_vals[i] = col_vals[0]; + } + } + + if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) { + default_cmap = XCreateColormap(bx_x_display, DefaultRootWindow(bx_x_display), + default_visual, AllocNone); + if (XAllocColorCells(bx_x_display, default_cmap, False, + plane_masks_return, 0, col_vals, MAX_VGA_COLORS) == 0) { + BX_PANIC(("XAllocColorCells returns error. Maybe your screen does not support a private colormap?")); + } + + win_attr.colormap = default_cmap; + XChangeWindowAttributes(bx_x_display, win, CWColormap, &win_attr); + + color.flags = DoRed | DoGreen | DoBlue; + + for (i=0; i < MAX_VGA_COLORS; i++) { + color.pixel = i; + if (i==15) { + color.red = 0xffff; + color.green = 0xffff; + color.blue = 0xffff; + } + else { + color.red = 0; + color.green = 0; + color.blue = 0; + } + XStoreColor(bx_x_display, default_cmap, &color); + } + } + + // convenience variables which hold the black & white color indeces + black_pixel = col_vals[0]; + white_pixel = col_vals[15]; + + BX_INFO(("font %u wide x %u high, display depth = %d", + (unsigned) font_width, (unsigned) font_height, default_depth)); + + //select_visual(); + + /* Get available icon sizes from Window manager */ + +#if BX_HAVE_XPM_H + /* Create pixmap from XPM for icon */ + XCreatePixmapFromData(bx_x_display, win, (char **)icon_bochs_xpm, &icon_pixmap, &icon_mask, NULL); +#else + /* Create pixmap of depth 1 (bitmap) for icon */ + icon_pixmap = XCreateBitmapFromData(bx_x_display, win, + (char *)bochs_icon_bits, bochs_icon_width, bochs_icon_height); +#endif + + /* Set size hints for window manager. The window manager may + * override these settings. Note that in a real + * application if size or position were set by the user + * the flags would be UPosition and USize, and these would + * override the window manager's preferences for this window. */ + /* x, y, width, and height hints are now taken from + * the actual settings of the window when mapped. Note + * that PPosition and PSize must be specified anyway. */ + + size_hints.flags = PPosition | PSize | PMinSize | PMaxSize; + size_hints.max_width = size_hints.min_width = dimension_x; + size_hints.max_height = size_hints.min_height = dimension_y + bx_headerbar_y + + bx_statusbar_y; + + { + XWMHints wm_hints; + XClassHint class_hints; + + /* format of the window name and icon name + * arguments has changed in R4 */ + XTextProperty windowName, iconName; + + /* These calls store window_name and icon_name into + * XTextProperty structures and set their other + * fields properly. */ + if (XStringListToTextProperty((char **)&window_name, 1, &windowName) == 0) { + BX_PANIC(("%s: structure allocation for windowName failed.", + progname)); + } + + if (XStringListToTextProperty((char **)&icon_name, 1, &iconName) == 0) { + BX_PANIC(("%s: structure allocation for iconName failed.", + progname)); + } + + wm_hints.initial_state = NormalState; + wm_hints.input = True; + wm_hints.icon_pixmap = icon_pixmap; +#if BX_HAVE_XPM_H + wm_hints.icon_mask = icon_mask; + wm_hints.flags = StateHint | IconPixmapHint | IconMaskHint | InputHint; +#else + wm_hints.flags = StateHint | IconPixmapHint | InputHint; +#endif + class_hints.res_name = progname; + class_hints.res_class = (char *)"Bochs"; + + XSetWMProperties(bx_x_display, win, &windowName, &iconName, + argv, argc, &size_hints, &wm_hints, + &class_hints); + XFree(windowName.value); + XFree(iconName.value); + Atom wm_delete = XInternAtom(bx_x_display, "WM_DELETE_WINDOW", 1); + XSetWMProtocols(bx_x_display, win, &wm_delete, 1); + } + + /* Select event types wanted */ + XSelectInput(bx_x_display, win, ExposureMask | KeyPressMask | KeyReleaseMask | + ButtonPressMask | ButtonReleaseMask | StructureNotifyMask | PointerMotionMask | + EnterWindowMask | LeaveWindowMask); + + /* Create default Graphics Context */ + gc = XCreateGC(bx_x_display, win, valuemask, &values); + gc_inv = XCreateGC(bx_x_display, win, valuemask, &values); + gc_headerbar = XCreateGC(bx_x_display, win, valuemask, &values); + gc_headerbar_inv = XCreateGC(bx_x_display, win, valuemask, &values); + + XSetState(bx_x_display, gc, white_pixel, black_pixel, GXcopy,AllPlanes); + + XSetState(bx_x_display, gc_inv, black_pixel, white_pixel, GXinvert,AllPlanes); + + XSetState(bx_x_display, gc_headerbar, black_pixel, white_pixel, GXcopy,AllPlanes); + + XSetState(bx_x_display, gc_headerbar_inv, white_pixel, black_pixel, GXcopy,AllPlanes); + + + /* Display window */ + XMapWindow(bx_x_display, win); + XSync(bx_x_display, /* no discard */ 0); + + BX_DEBUG(("waiting for MapNotify")); + while (1) { + XNextEvent(bx_x_display, &report); + if (report.type == MapNotify) break; + } + BX_DEBUG(("MapNotify found.")); + + // Create the VGA font + create_internal_vga_font(); + + { + char *imagedata; + + ximage = XCreateImage(bx_x_display, default_visual, + default_depth, // depth of image (bitplanes) + ZPixmap, + 0, // offset + NULL, // malloc() space after + x_tilesize, y_tilesize, // x & y size of image + 32, // # bits of padding + 0); // bytes_per_line, let X11 calculate + if (!ximage) + BX_PANIC(("vga: couldn't XCreateImage()")); + + imDepth = default_depth; + imWide = ximage->bytes_per_line; + imBPP = ximage->bits_per_pixel; + + imagedata = (char *) malloc((size_t) (ximage->bytes_per_line * y_tilesize)); + if (!imagedata) BX_PANIC(("imagedata: malloc returned error")); + + ximage->data = imagedata; + + if (imBPP < imDepth) { + BX_PANIC(("vga_x: bits_per_pixel < depth ?")); + } + + for (i=0; i<12; i++) bx_statusitem_active[i] = 0; + switch (imBPP) { + case 16: + bx_status_led_green = 0x07e0; + bx_status_led_red = 0xf900; + bx_status_graytext = 0x8410; + break; + case 24: + case 32: + bx_status_led_green = 0x00ff00; + bx_status_led_red = 0xff4000; + bx_status_graytext = 0x808080; + break; + default: + bx_status_led_green = 0; + bx_status_graytext = 0; + } + sprintf(bx_status_info_text, "%s enables mouse", get_toggle_info()); + + x_init_done = true; + } + + curr_background = 0; + XSetBackground(bx_x_display, gc, col_vals[curr_background]); + curr_foreground = 1; + XSetForeground(bx_x_display, gc, col_vals[curr_foreground]); +//XGrabPointer(bx_x_display, win, True, 0, GrabModeAsync, GrabModeAsync, +// win, None, CurrentTime); + + XFlush(bx_x_display); + + // redirect notify callback to X11 specific code + SIM->get_notify_callback (&old_callback, &old_callback_arg); + assert (old_callback != NULL); + SIM->set_notify_callback (x11_notify_callback, NULL); + + // loads keymap for x11 + if (SIM->get_param_bool(BXPN_KBD_USEMAPPING)->get()) { + bx_keymap.loadKeymap(convertStringToXKeysym); + } + + // parse x11 specific options + if (argc > 1) { + for (i = 1; i < argc; i++) { +#if BX_DEBUGGER && BX_DEBUGGER_GUI + if (!strcmp(argv[i], "gui_debug")) { + void InitDebugDialog(); + SIM->set_debug_gui(1); + InitDebugDialog(); + } + else +#endif +#if BX_SHOW_IPS + if (!strcmp(argv[i], "hideIPS")) { + x11_hide_ips = 1; + } + else +#endif + { + BX_PANIC(("Unknown x11 option '%s'", argv[i])); + } + } + } + + new_gfx_api = 1; + dialog_caps |= (BX_GUI_DLG_USER | BX_GUI_DLG_SNAPSHOT | BX_GUI_DLG_CDROM); +} + +void set_status_text(int element, const char *text, bx_bool active, bx_bool w) +{ + int xleft, xsize, sb_ypos; + + xleft = bx_statusitem_pos[element] + 2; + xsize = bx_statusitem_pos[element+1] - xleft; + sb_ypos = dimension_y + bx_headerbar_y; + if (element < 1) { + if (strcmp(bx_status_info_text, text)) { + strcpy(bx_status_info_text, text); + } + XFillRectangle(bx_x_display, win, gc_headerbar_inv, xleft, sb_ypos+2, xsize, + bx_statusbar_y-2); + XDrawString(bx_x_display, win, gc_headerbar, xleft, sb_ypos+bx_statusbar_y-2, + text, strlen(text)); + } else if (element <= BX_MAX_STATUSITEMS) { + bx_statusitem_active[element] = active; + if (active) { + if (w) + XSetForeground(bx_x_display, gc_headerbar, bx_status_led_red); + else + XSetForeground(bx_x_display, gc_headerbar, bx_status_led_green); + XFillRectangle(bx_x_display, win, gc_headerbar, xleft, sb_ypos+2, xsize-1, bx_statusbar_y-2); + XSetForeground(bx_x_display, gc_headerbar, black_pixel); + } else { + XFillRectangle(bx_x_display, win, gc_headerbar_inv, xleft, sb_ypos+2, xsize-1, bx_statusbar_y-2); + XSetForeground(bx_x_display, gc_headerbar, bx_status_graytext); + } + XDrawString(bx_x_display, win, gc_headerbar, xleft, sb_ypos+bx_statusbar_y-2, + text, strlen(text)); + XSetForeground(bx_x_display, gc_headerbar, black_pixel); + } +} + +void bx_x_gui_c::statusbar_setitem(int element, bx_bool active, bx_bool w) +{ + if (element < 0) { + for (unsigned i = 0; i < statusitem_count; i++) { + set_status_text(i+1, statusitem_text[i], active, w); + } + } else if ((unsigned)element < statusitem_count) { + set_status_text(element+1, statusitem_text[element], active, w); + } +} + +// This is called whenever the mouse_enabled parameter changes. It +// can change because of a gui event such as clicking on the mouse-enable +// bitmap or pressing the middle button, or from the configuration interface. +// In all those cases, setting the parameter value will get you here. +void bx_x_gui_c::mouse_enabled_changed_specific (bx_bool val) +{ + BX_DEBUG (("mouse_enabled=%d, x11 specific code", val?1:0)); + if (val) { + BX_INFO(("[x] Mouse on")); + sprintf(bx_status_info_text, "%s disables mouse", get_toggle_info()); + set_status_text(0, bx_status_info_text, 0); + mouse_enable_x = current_x; + mouse_enable_y = current_y; + disable_cursor(); + // Move the cursor to a 'safe' place + warp_cursor(warp_home_x-current_x, warp_home_y-current_y); + } else { + BX_INFO(("[x] Mouse off")); + sprintf(bx_status_info_text, "%s enables mouse", get_toggle_info()); + set_status_text(0, bx_status_info_text, 0); + enable_cursor(); + warp_cursor(mouse_enable_x-current_x, mouse_enable_y-current_y); + } +#if BX_SHOW_IPS + x11_mouse_msg_counter = 3; +#endif +} + +void create_internal_vga_font(void) +{ + // Default values + font_width=8; + font_height=16; + + for(int i=0; i<256; i++) { + vgafont[i]=XCreateBitmapFromData(bx_x_display, win, (const char*)bx_vgafont[i].data, + font_width, font_height); + if(vgafont[i] == None) + BX_PANIC(("Can't create vga font [%d]", i)); + } +} + +void bx_x_gui_c::handle_events(void) +{ + XEvent report; + XKeyEvent *key_event; + KeySym keysym; + XComposeStatus compose; + char buffer[MAX_MAPPED_STRING_LENGTH]; + int bufsize = MAX_MAPPED_STRING_LENGTH; + int charcount; + bx_bool mouse_update; + int y, height; + + XPointerMovedEvent *pointer_event; + XEnterWindowEvent *enter_event; + XLeaveWindowEvent *leave_event; + XButtonEvent *button_event; + XExposeEvent *expose_event; + + //current_x = -1; + //current_y = -1; + mouse_update = 0; + + while (XPending(bx_x_display) > 0) { + XNextEvent(bx_x_display, &report); + current_z = 0; + switch (report.type) { + + case Expose: + expose_event = &report.xexpose; + /* Adjust y, and reduce height if it overlaps headerbar. */ + y = expose_event->y - BX_HEADER_BAR_Y; + height = expose_event->height; + if (y < 0) { + height += y; + y = 0; + } + + DEV_vga_redraw_area( + (unsigned) expose_event->x, + y, + (unsigned) expose_event->width, + height); + + /* Always draw headerbar, even if not touched by expose event. + * As a small optimization, only do it on last contigous expose. + */ + if (expose_event->count == 0) { + show_headerbar(); + } + break; + + case ConfigureNotify: + BX_DEBUG(("ConfigureNotify Xevent")); + /* FIXME: It's not clear why we have to show the headerbar here. + * This should be forced by the following expose events. + */ + show_headerbar(); + break; + + case ButtonPress: + button_event = (XButtonEvent *) &report; + BX_DEBUG(("xxx: buttonpress")); + if (button_event->y < BX_HEADER_BAR_Y) { + BX_DEBUG(("xxx: in headerbar")); + if (mouse_update) { + BX_DEBUG(("xxx: mouse_update=1")); + send_keyboard_mouse_status(); + mouse_update = 0; + } + prev_x = current_x = -1; + prev_y = current_y = -1; + headerbar_click(button_event->x, button_event->y); + break; + } + current_x = button_event->x; + current_y = button_event->y; + mouse_update = 1; + BX_DEBUG(("xxx: x,y=(%d,%d)", current_x, current_y)); + switch (button_event->button) { + case Button1: + mouse_button_state |= 0x01; + send_keyboard_mouse_status(); + mouse_update = 0; + break; + case Button2: + if (mouse_toggle_check(BX_MT_MBUTTON, 1)) { + toggle_mouse_enable(); + } else { + mouse_button_state |= 0x04; + send_keyboard_mouse_status(); + mouse_update = 0; + } + break; + case Button3: + mouse_button_state |= 0x02; + send_keyboard_mouse_status(); + mouse_update = 0; + break; + } + break; + + case ButtonRelease: + button_event = (XButtonEvent *) &report; + if (button_event->y < BX_HEADER_BAR_Y) { + if (mouse_update) { + send_keyboard_mouse_status(); + mouse_update = 0; + } + prev_x = current_x = -1; + prev_y = current_y = -1; + // ignore, in headerbar area + break; + } + current_x = button_event->x; + current_y = button_event->y; + mouse_update = 1; + switch (button_event->button) { + case Button1: + mouse_button_state &= ~0x01; + send_keyboard_mouse_status(); + mouse_update = 0; + break; + case Button2: + mouse_toggle_check(BX_MT_MBUTTON, 0); + mouse_button_state &= ~0x04; + send_keyboard_mouse_status(); + mouse_update = 0; + break; + case Button3: + mouse_button_state &= ~0x02; + send_keyboard_mouse_status(); + mouse_update = 0; + break; + case Button4: + current_z = 1; + send_keyboard_mouse_status(); + mouse_update = 0; + break; + case Button5: + current_z = -1; + send_keyboard_mouse_status(); + mouse_update = 0; + break; + } + break; + + case KeyPress: + key_event = (XKeyEvent *) &report; + charcount = XLookupString(key_event, buffer, bufsize, &keysym, &compose); + xkeypress(keysym, 0); + break; + + case KeyRelease: + key_event = (XKeyEvent *) &report; + charcount = XLookupString(key_event, buffer, bufsize, &keysym, &compose); + xkeypress(keysym, 1); + break; + + case MotionNotify: + pointer_event = (XPointerMovedEvent *) &report; + current_x = pointer_event->x; + current_y = pointer_event->y; + mouse_update = 1; + break; + + case EnterNotify: + enter_event = (XEnterWindowEvent *) &report; + prev_x = current_x = enter_event->x; + prev_y = current_y = enter_event->y; + break; + + case LeaveNotify: + leave_event = (XLeaveWindowEvent *) &report; + prev_x = current_x = -1; + prev_y = current_y = -1; + break; + + case MapNotify: + /* screen needs redraw, since X would have tossed previous + * requests before window mapped + */ + //retval = 1; + break; + + case ClientMessage: + if (!strcmp(XGetAtomName(bx_x_display, report.xclient.message_type), "WM_PROTOCOLS")) { + bx_stop_simulation(); + } + break; + + default: + // (mch) Ignore... + BX_DEBUG(("XXX: default Xevent type")); + /* all events selected by StructureNotifyMask are thrown away here, + * since nothing is done with them */ + break; + } /* end switch */ + } /* end while */ + + if (mouse_update) { + BX_DEBUG(("handle_events(): send mouse status")); + send_keyboard_mouse_status(); + } +#if BX_SHOW_IPS + if (x11_ips_update) { + x11_ips_update = 0; + set_status_text(0, x11_ips_text, 1); + } +#endif +} + +void send_keyboard_mouse_status(void) +{ + BX_DEBUG(("XXX: prev=(%d,%d) curr=(%d,%d)", + prev_x, prev_y, current_x, current_y)); + + if (((prev_x!=-1) && (current_x!=-1) && (prev_y!=-1) && (current_y!=-1)) || + (current_z != 0)) { + int dx, dy, dz; + + // (mch) consider warping here + dx = current_x - prev_x - warp_dx; + dy = -(current_y - prev_y - warp_dy); + dz = current_z; + warp_cursor(warp_home_x-current_x, warp_home_y-current_y); + + DEV_mouse_motion_ext (dx, dy, dz, mouse_button_state); + //if (warped) { + // prev_x = current_x = -1; + // prev_y = current_y = -1; + //} + //else { + prev_x = current_x; + prev_y = current_y; + //} + } + else { + if ((current_x!=-1) && (current_y!=-1)) { + prev_x = current_x; + prev_y = current_y; + } + else { + prev_x = current_x = -1; + prev_y = current_y = -1; + } + } +} + +void bx_x_gui_c::flush(void) +{ + if (bx_x_display) + XFlush(bx_x_display); +} + +void xkeypress(KeySym keysym, int press_release) +{ + Bit32u key_event; + bx_bool mouse_toggle = 0; + + if ((keysym == XK_Control_L) || (keysym == XK_Control_R)) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_CTRL, !press_release); + } else if (keysym == XK_Alt_L) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_ALT, !press_release); + } else if (keysym == XK_F10) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_F10, !press_release); + } else if (keysym == XK_F12) { + mouse_toggle = bx_gui->mouse_toggle_check(BX_MT_KEY_F12, !press_release); + } + if (mouse_toggle) { + bx_gui->toggle_mouse_enable(); + return; + } + + /* Old (no mapping) behavior */ + if (!SIM->get_param_bool(BXPN_KBD_USEMAPPING)->get()) { + + // this depends on the fact that the X11 keysyms which + // correspond to the ascii characters space .. tilde + // are in consequtive order. + if ((keysym >= XK_space) && (keysym <= XK_asciitilde)) { + key_event = ascii_to_key_event[keysym - XK_space]; + } + else switch (keysym) { + case XK_KP_1: +#ifdef XK_KP_End + case XK_KP_End: +#endif + key_event = BX_KEY_KP_END; break; + + case XK_KP_2: +#ifdef XK_KP_Down + case XK_KP_Down: +#endif + key_event = BX_KEY_KP_DOWN; break; + + case XK_KP_3: +#ifdef XK_KP_Page_Down + case XK_KP_Page_Down: +#endif + key_event = BX_KEY_KP_PAGE_DOWN; break; + + case XK_KP_4: +#ifdef XK_KP_Left + case XK_KP_Left: +#endif + key_event = BX_KEY_KP_LEFT; break; + + case XK_KP_5: +#ifdef XK_KP_Begin + case XK_KP_Begin: +#endif + key_event = BX_KEY_KP_5; break; + + case XK_KP_6: +#ifdef XK_KP_Right + case XK_KP_Right: +#endif + key_event = BX_KEY_KP_RIGHT; break; + + case XK_KP_7: +#ifdef XK_KP_Home + case XK_KP_Home: +#endif + key_event = BX_KEY_KP_HOME; break; + + case XK_KP_8: +#ifdef XK_KP_Up + case XK_KP_Up: +#endif + key_event = BX_KEY_KP_UP; break; + + case XK_KP_9: +#ifdef XK_KP_Page_Up + case XK_KP_Page_Up: +#endif + key_event = BX_KEY_KP_PAGE_UP; break; + + case XK_KP_0: +#ifdef XK_KP_Insert + case XK_KP_Insert: +#endif + key_event = BX_KEY_KP_INSERT; break; + + case XK_KP_Decimal: +#ifdef XK_KP_Delete + case XK_KP_Delete: +#endif + key_event = BX_KEY_KP_DELETE; break; + +#ifdef XK_KP_Enter + case XK_KP_Enter: key_event = BX_KEY_KP_ENTER; break; +#endif + + case XK_KP_Subtract: key_event = BX_KEY_KP_SUBTRACT; break; + case XK_KP_Add: key_event = BX_KEY_KP_ADD; break; + + case XK_KP_Multiply: key_event = BX_KEY_KP_MULTIPLY; break; + case XK_KP_Divide: key_event = BX_KEY_KP_DIVIDE; break; + + + case XK_Up: key_event = BX_KEY_UP; break; + case XK_Down: key_event = BX_KEY_DOWN; break; + case XK_Left: key_event = BX_KEY_LEFT; break; + case XK_Right: key_event = BX_KEY_RIGHT; break; + + + case XK_Delete: key_event = BX_KEY_DELETE; break; + case XK_BackSpace: key_event = BX_KEY_BACKSPACE; break; + case XK_Tab: key_event = BX_KEY_TAB; break; +#ifdef XK_ISO_Left_Tab + case XK_ISO_Left_Tab: key_event = BX_KEY_TAB; break; +#endif + case XK_Return: key_event = BX_KEY_ENTER; break; + case XK_Escape: key_event = BX_KEY_ESC; break; + case XK_F1: key_event = BX_KEY_F1; break; + case XK_F2: key_event = BX_KEY_F2; break; + case XK_F3: key_event = BX_KEY_F3; break; + case XK_F4: key_event = BX_KEY_F4; break; + case XK_F5: key_event = BX_KEY_F5; break; + case XK_F6: key_event = BX_KEY_F6; break; + case XK_F7: key_event = BX_KEY_F7; break; + case XK_F8: key_event = BX_KEY_F8; break; + case XK_F9: key_event = BX_KEY_F9; break; + case XK_F10: key_event = BX_KEY_F10; break; + case XK_F11: key_event = BX_KEY_F11; break; + case XK_F12: key_event = BX_KEY_F12; break; + case XK_Control_L: key_event = BX_KEY_CTRL_L; break; +#ifdef XK_Control_R + case XK_Control_R: key_event = BX_KEY_CTRL_R; break; +#endif + case XK_Shift_L: key_event = BX_KEY_SHIFT_L; break; + case XK_Shift_R: key_event = BX_KEY_SHIFT_R; break; + case XK_Alt_L: key_event = BX_KEY_ALT_L; break; +#ifdef XK_Alt_R + case XK_Alt_R: key_event = BX_KEY_ALT_R; break; +#endif + case XK_Caps_Lock: key_event = BX_KEY_CAPS_LOCK; break; + case XK_Num_Lock: key_event = BX_KEY_NUM_LOCK; break; +#ifdef XK_Scroll_Lock + case XK_Scroll_Lock: key_event = BX_KEY_SCRL_LOCK; break; +#endif +#ifdef XK_Print + case XK_Print: key_event = BX_KEY_PRINT; break; +#endif +#ifdef XK_Pause + case XK_Pause: key_event = BX_KEY_PAUSE; break; +#endif + + case XK_Insert: key_event = BX_KEY_INSERT; break; + case XK_Home: key_event = BX_KEY_HOME; break; + case XK_End: key_event = BX_KEY_END; break; + case XK_Page_Up: key_event = BX_KEY_PAGE_UP; break; + case XK_Page_Down: key_event = BX_KEY_PAGE_DOWN; break; + + default: + BX_ERROR(("xkeypress(): keysym %x unhandled!", (unsigned) keysym)); + return; + break; + } + } + else { + /* use mapping */ + BXKeyEntry *entry = bx_keymap.findHostKey (keysym); + if (!entry) { + BX_ERROR(("xkeypress(): keysym %x unhandled!", (unsigned) keysym)); + return; + } + key_event = entry->baseKey; + } + + if (press_release) + key_event |= BX_KEY_RELEASED; + + DEV_kbd_gen_scancode(key_event); +} + +void bx_x_gui_c::clear_screen(void) +{ + XClearArea(bx_x_display, win, 0, bx_headerbar_y, dimension_x, dimension_y, 0); +} + +void bx_x_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, + unsigned long cursor_x, unsigned long cursor_y, + bx_vga_tminfo_t tm_info) +{ + Bit8u *old_line, *new_line, *text_base; + Bit8u cChar; + unsigned int curs, hchars, i, j, offset, rows, x, y, xc, yc, yc2, cs_y; + unsigned new_foreground, new_background; + Bit8u cfwidth, cfheight, cfheight2, font_col, font_row, font_row2; + Bit8u split_textrow, split_fontrows; + bx_bool forceUpdate = 0, split_screen; + bx_bool blink_state, blink_mode; + unsigned char cell[64]; + unsigned long text_palette[16]; + + blink_mode = (tm_info.blink_flags & BX_TEXT_BLINK_MODE) > 0; + blink_state = (tm_info.blink_flags & BX_TEXT_BLINK_STATE) > 0; + if (blink_mode) { + if (tm_info.blink_flags & BX_TEXT_BLINK_TOGGLE) + forceUpdate = 1; + } + if (charmap_updated) { + BX_INFO(("charmap update. Font Height is %d",font_height)); + for (unsigned c = 0; c<256; c++) { + if (char_changed[c]) { + XFreePixmap(bx_x_display, vgafont[c]); + bx_bool gfxchar = tm_info.line_graphics && ((c & 0xE0) == 0xC0); + j = 0; + memset(cell, 0, sizeof(cell)); + for(i=0; i>1); + cell[i] |= ((vga_charmap[(c<<5)+j] & 0x20)>>3); + cell[i] |= ((vga_charmap[(c<<5)+j] & 0x40)>>5); + cell[i] |= ((vga_charmap[(c<<5)+j] & 0x80)>>7); + if (gfxchar) { + cell[i+1] = (vga_charmap[(c<<5)+j] & 0x01); + } + j++; + } + + vgafont[c]=XCreateBitmapFromData(bx_x_display, win, + (const char*)cell, 9, font_height); + if(vgafont[c] == None) + BX_PANIC(("Can't create vga font [%d]", c)); + char_changed[c] = 0; + } + } + forceUpdate = 1; + charmap_updated = 0; + } + for (i=0; i<16; i++) { + text_palette[i] = col_vals[DEV_vga_get_actl_pal_idx(i)]; + } + + if((tm_info.h_panning != h_panning) || (tm_info.v_panning != v_panning)) { + forceUpdate = 1; + h_panning = tm_info.h_panning; + v_panning = tm_info.v_panning; + } + if(tm_info.line_compare != line_compare) { + forceUpdate = 1; + line_compare = tm_info.line_compare; + } + + // first invalidate character at previous and new cursor location + if ((prev_cursor_y < text_rows) && (prev_cursor_x < text_cols)) { + curs = prev_cursor_y * tm_info.line_offset + prev_cursor_x * 2; + old_text[curs] = ~new_text[curs]; + } + if((tm_info.cs_start <= tm_info.cs_end) && (tm_info.cs_start < font_height) && + (cursor_y < text_rows) && (cursor_x < text_cols)) { + curs = cursor_y * tm_info.line_offset + cursor_x * 2; + old_text[curs] = ~new_text[curs]; + } else { + curs = 0xffff; + } + + rows = text_rows; + if (v_panning) rows++; + y = 0; + cs_y = 0; + text_base = new_text - tm_info.start_address; + if (line_compare < dimension_y) { + split_textrow = (line_compare + v_panning) / font_height; + split_fontrows = ((line_compare + v_panning) % font_height) + 1; + } else { + split_textrow = rows + 1; + split_fontrows = 0; + } + split_screen = 0; + do { + hchars = text_cols; + if (h_panning) hchars++; + if (split_screen) { + yc = bx_headerbar_y + line_compare + cs_y * font_height + 1; + font_row = 0; + if (rows == 1) { + cfheight = (dimension_y - line_compare - 1) % font_height; + if (cfheight == 0) cfheight = font_height; + } else { + cfheight = font_height; + } + } else if (v_panning) { + if (y == 0) { + yc = bx_headerbar_y; + font_row = v_panning; + cfheight = font_height - v_panning; + } else { + yc = y * font_height + bx_headerbar_y - v_panning; + font_row = 0; + if (rows == 1) { + cfheight = v_panning; + } else { + cfheight = font_height; + } + } + } else { + yc = y * font_height + bx_headerbar_y; + font_row = 0; + cfheight = font_height; + } + if (!split_screen && (y == split_textrow)) { + if (split_fontrows < cfheight) cfheight = split_fontrows; + } + new_line = new_text; + old_line = old_text; + x = 0; + offset = cs_y * tm_info.line_offset; + do { + if (h_panning) { + if (hchars > text_cols) { + xc = 0; + font_col = h_panning; + cfwidth = font_width - h_panning; + } else { + xc = x * font_width - h_panning; + font_col = 0; + if (hchars == 1) { + cfwidth = h_panning; + } else { + cfwidth = font_width; + } + } + } else { + xc = x * font_width; + font_col = 0; + cfwidth = font_width; + } + if (forceUpdate || (old_text[0] != new_text[0]) + || (old_text[1] != new_text[1])) { + + cChar = new_text[0]; + new_foreground = new_text[1] & 0x0f; + if (blink_mode) { + new_background = (new_text[1] & 0x70) >> 4; + if (!blink_state && (new_text[1] & 0x80)) + new_foreground = new_background; + } else { + new_background = (new_text[1] & 0xf0) >> 4; + } + XSetForeground(bx_x_display, gc, text_palette[new_foreground]); + XSetBackground(bx_x_display, gc, text_palette[new_background]); + + XCopyPlane(bx_x_display, vgafont[cChar], win, gc, font_col, font_row, cfwidth, cfheight, + xc, yc, 1); + if (offset == curs) { + XSetForeground(bx_x_display, gc, text_palette[new_background]); + XSetBackground(bx_x_display, gc, text_palette[new_foreground]); + if (font_row == 0) { + yc2 = yc + tm_info.cs_start; + font_row2 = tm_info.cs_start; + cfheight2 = tm_info.cs_end - tm_info.cs_start + 1; + if ((yc2 + cfheight2) > (dimension_y + bx_headerbar_y)) { + cfheight2 = dimension_y + bx_headerbar_y - yc2; + } + } else { + if (v_panning > tm_info.cs_start) { + yc2 = yc; + font_row2 = font_row; + cfheight2 = tm_info.cs_end - v_panning + 1; + } else { + yc2 = yc + tm_info.cs_start - v_panning; + font_row2 = tm_info.cs_start; + cfheight2 = tm_info.cs_end - tm_info.cs_start + 1; + } + } + if (yc2 < (dimension_y + bx_headerbar_y)) { + XCopyPlane(bx_x_display, vgafont[cChar], win, gc, font_col, font_row2, cfwidth, + cfheight2, xc, yc2, 1); + } + } + } + x++; + new_text+=2; + old_text+=2; + offset+=2; + } while (--hchars); + if (!split_screen && (y == split_textrow)) { + new_text = text_base; + forceUpdate = 1; + cs_y = 0; + if (tm_info.split_hpanning) h_panning = 0; + rows = ((dimension_y - line_compare + font_height - 2) / font_height) + 1; + split_screen = 1; + } else { + y++; + cs_y++; + new_text = new_line + tm_info.line_offset; + old_text = old_line + tm_info.line_offset; + } + } while (--rows); + + h_panning = tm_info.h_panning; + prev_cursor_x = cursor_x; + prev_cursor_y = cursor_y; + + XFlush(bx_x_display); +} + +int bx_x_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) +{ + int len; + Bit8u *tmp = (Bit8u *)XFetchBytes (bx_x_display, &len); + // according to man XFetchBytes, tmp must be freed by XFree(). So allocate + // a new buffer with "new". The keyboard code will free it with delete [] + // when the paste is done. + Bit8u *buf = new Bit8u[len]; + memcpy (buf, tmp, len); + *bytes = buf; + *nbytes = len; + XFree (tmp); + return 1; +} + +int bx_x_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) +{ + // this writes data to the clipboard. + BX_INFO (("storing %d bytes to X windows clipboard", len)); + XSetSelectionOwner(bx_x_display, XA_PRIMARY, None, CurrentTime); + XStoreBytes (bx_x_display, (char *)text_snapshot, len); + return 1; +} + +void bx_x_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) +{ + unsigned x, y, y_size; + unsigned color, offset; + Bit8u b0, b1, b2, b3; + + if ((y0 + y_tilesize) > dimension_y) { + y_size = dimension_y - y0; + } else { + y_size = y_tilesize; + } + switch (vga_bpp) { + case 8: // 8 bits per pixel + for (y=0; ydata[imWide*y + x] = color; + break; + case 16: // 16 bits per pixel + offset = imWide*y + 2*x; + b0 = color >> 0; + b1 = color >> 8; + if (ximage->byte_order == LSBFirst) { + ximage->data[offset + 0] = b0; + ximage->data[offset + 1] = b1; + } + else { // MSBFirst + ximage->data[offset + 0] = b1; + ximage->data[offset + 1] = b0; + } + break; + case 24: // 24 bits per pixel + offset = imWide*y + 3*x; + b0 = color >> 0; + b1 = color >> 8; + b2 = color >> 16; + if (ximage->byte_order == LSBFirst) { + ximage->data[offset + 0] = b0; + ximage->data[offset + 1] = b1; + ximage->data[offset + 2] = b2; + } + else { // MSBFirst + ximage->data[offset + 0] = b2; + ximage->data[offset + 1] = b1; + ximage->data[offset + 2] = b0; + } + break; + case 32: // 32 bits per pixel + offset = imWide*y + 4*x; + b0 = color >> 0; + b1 = color >> 8; + b2 = color >> 16; + b3 = color >> 24; + if (ximage->byte_order == LSBFirst) { + ximage->data[offset + 0] = b0; + ximage->data[offset + 1] = b1; + ximage->data[offset + 2] = b2; + ximage->data[offset + 3] = b3; + } + else { // MSBFirst + ximage->data[offset + 0] = b3; + ximage->data[offset + 1] = b2; + ximage->data[offset + 2] = b1; + ximage->data[offset + 3] = b0; + } + break; + default: + BX_PANIC(("X_graphics_tile_update: bits_per_pixel %u not implemented", + (unsigned) imBPP)); + return; + } + } + } + break; + default: + BX_PANIC(("X_graphics_tile_update: bits_per_pixel %u handled by new graphics API", + (unsigned) vga_bpp)); + return; + } + XPutImage(bx_x_display, win, gc, ximage, 0, 0, x0, y0+bx_headerbar_y, + x_tilesize, y_size); +} + +bx_svga_tileinfo_t *bx_x_gui_c::graphics_tile_info(bx_svga_tileinfo_t *info) +{ + if (!info) { + info = (bx_svga_tileinfo_t *)malloc(sizeof(bx_svga_tileinfo_t)); + if (!info) { + return NULL; + } + } + + info->bpp = ximage->bits_per_pixel; + info->pitch = ximage->bytes_per_line; + info->red_shift = 0; + info->green_shift = 0; + info->blue_shift = 0; + info->red_mask = ximage->red_mask; + info->green_mask = ximage->green_mask; + info->blue_mask = ximage->blue_mask; + + int i, rf, gf, bf; + unsigned long red, green, blue; + + i = rf = gf = bf = 0; + red = ximage->red_mask; + green = ximage->green_mask; + blue = ximage->blue_mask; + + while (red || rf || green || gf || blue || bf) { + if (rf) { + if (!(red & 1)) { + info->red_shift = i; + rf = 0; + } + } + else { + if (red & 1) { + rf = 1; + } + } + + if (gf) { + if (!(green & 1)) { + info->green_shift = i; + gf = 0; + } + } + else { + if (green & 1) { + gf = 1; + } + } + + if (bf) { + if (!(blue & 1)) { + info->blue_shift = i; + bf = 0; + } + } + else { + if (blue & 1) { + bf = 1; + } + } + + i++; + red >>= 1; + green >>= 1; + blue >>= 1; + } + + info->is_indexed = (default_visual->c_class != TrueColor) && + (default_visual->c_class != DirectColor); + info->is_little_endian = (ximage->byte_order == LSBFirst); + + return info; +} + +Bit8u *bx_x_gui_c::graphics_tile_get(unsigned x0, unsigned y0, + unsigned *w, unsigned *h) +{ + if (x0+x_tilesize > dimension_x) { + *w = dimension_x - x0; + } + else { + *w = x_tilesize; + } + + if (y0+y_tilesize > dimension_y) { + *h = dimension_y - y0; + } + else { + *h = y_tilesize; + } + + return (Bit8u *)ximage->data + ximage->xoffset*ximage->bits_per_pixel/8; +} + +void bx_x_gui_c::graphics_tile_update_in_place(unsigned x0, unsigned y0, + unsigned w, unsigned h) +{ + XPutImage(bx_x_display, win, gc, ximage, 0, 0, + x0, y0+bx_headerbar_y, w, h); +} + +bx_bool bx_x_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) +{ + // returns: 0=no screen update needed (color map change has direct effect) + // 1=screen updated needed (redraw using current colormap) + XColor color; + + color.flags = DoRed | DoGreen | DoBlue; + color.red = red << 8; + color.green = green << 8; + color.blue = blue << 8; + + if (SIM->get_param_bool(BXPN_PRIVATE_COLORMAP)->get()) { + color.pixel = index; + XStoreColor(bx_x_display, default_cmap, &color); + return(0); // no screen update needed + } + else { + XAllocColor(bx_x_display, DefaultColormap(bx_x_display, bx_x_screen_num), + &color); + col_vals[index] = color.pixel; + return(1); // screen update needed + } +} + +void bx_x_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight, unsigned fwidth, unsigned bpp) +{ + if ((bpp == 8) || (bpp == 15) || (bpp == 16) || (bpp == 24) || (bpp == 32)) { + vga_bpp = bpp; + } else { + BX_PANIC(("%d bpp graphics mode not supported", bpp)); + } + if (fheight > 0) { + font_height = fheight; + font_width = fwidth; + text_cols = x / font_width; + text_rows = y / font_height; + } + if ((x != dimension_x) || (y != dimension_y)) { + XSizeHints hints; + long supplied_return; + + if (XGetWMNormalHints(bx_x_display, win, &hints, &supplied_return) && + supplied_return & PMaxSize) { + hints.max_width = hints.min_width = x; + hints.max_height = hints.min_height = y+bx_headerbar_y+bx_statusbar_y; + XSetWMNormalHints(bx_x_display, win, &hints); + } + XResizeWindow(bx_x_display, win, x, y+bx_headerbar_y+bx_statusbar_y); + dimension_x = x; + dimension_y = y; + } +} + +void bx_x_gui_c::show_headerbar(void) +{ + unsigned xorigin; + int xleft, xright, sb_ypos; + + sb_ypos = dimension_y + bx_headerbar_y; + // clear header bar and status bar area to white + XFillRectangle(bx_x_display, win, gc_headerbar_inv, 0,0, dimension_x, bx_headerbar_y); + XFillRectangle(bx_x_display, win, gc_headerbar_inv, 0,sb_ypos, dimension_x, bx_statusbar_y); + + xleft = 0; + xright = dimension_x; + for (unsigned i=0; i 0) { + XDrawLine(bx_x_display, win, gc_inv, xleft, sb_ypos+1, xleft, + sb_ypos+bx_statusbar_y); + if (i <= statusitem_count) { + set_status_text(i, statusitem_text[i-1], bx_statusitem_active[i]); + } + } else { + set_status_text(0, bx_status_info_text, 0); + } + } +} + +unsigned bx_x_gui_c::create_bitmap(const unsigned char *bmap, unsigned xdim, unsigned ydim) +{ + if (bx_bitmap_entries >= BX_MAX_PIXMAPS) { + BX_PANIC(("x: too many pixmaps, increase BX_MAX_PIXMAPS")); + } + + bx_bitmaps[bx_bitmap_entries].bmap = + XCreateBitmapFromData(bx_x_display, win, (const char *) bmap, xdim, ydim); + bx_bitmaps[bx_bitmap_entries].xdim = xdim; + bx_bitmaps[bx_bitmap_entries].ydim = ydim; + if (!bx_bitmaps[bx_bitmap_entries].bmap) { + BX_PANIC(("x: could not create bitmap")); + } + bx_bitmap_entries++; + return(bx_bitmap_entries-1); // return index as handle +} + +unsigned bx_x_gui_c::headerbar_bitmap(unsigned bmap_id, unsigned alignment, void (*f)(void)) +{ + unsigned hb_index; + + if ((bx_headerbar_entries+1) > BX_MAX_HEADERBAR_ENTRIES) + BX_PANIC(("x: too many headerbar entries, increase BX_MAX_HEADERBAR_ENTRIES")); + + bx_headerbar_entries++; + hb_index = bx_headerbar_entries - 1; + + bx_headerbar_entry[hb_index].bitmap = bx_bitmaps[bmap_id].bmap; + bx_headerbar_entry[hb_index].xdim = bx_bitmaps[bmap_id].xdim; + bx_headerbar_entry[hb_index].ydim = bx_bitmaps[bmap_id].ydim; + bx_headerbar_entry[hb_index].alignment = alignment; + bx_headerbar_entry[hb_index].f = f; + if (alignment == BX_GRAVITY_LEFT) { + bx_headerbar_entry[hb_index].xorigin = bx_bitmap_left_xorigin; + bx_headerbar_entry[hb_index].yorigin = 0; + bx_bitmap_left_xorigin += bx_bitmaps[bmap_id].xdim; + } + else { // BX_GRAVITY_RIGHT + bx_bitmap_right_xorigin += bx_bitmaps[bmap_id].xdim; + bx_headerbar_entry[hb_index].xorigin = bx_bitmap_right_xorigin; + bx_headerbar_entry[hb_index].yorigin = 0; + } + return(hb_index); +} + +void bx_x_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) +{ + unsigned xorigin; + + bx_headerbar_entry[hbar_id].bitmap = bx_bitmaps[bmap_id].bmap; + + if (bx_headerbar_entry[hbar_id].alignment == BX_GRAVITY_LEFT) + xorigin = bx_headerbar_entry[hbar_id].xorigin; + else + xorigin = dimension_x - bx_headerbar_entry[hbar_id].xorigin; + XCopyPlane(bx_x_display, bx_headerbar_entry[hbar_id].bitmap, win, gc_headerbar, + 0,0, bx_headerbar_entry[hbar_id].xdim, bx_headerbar_entry[hbar_id].ydim, + xorigin, 0, 1); +} + +void headerbar_click(int x, int y) +{ + int xorigin; + + // assuming y is in bounds + UNUSED(y); + for (unsigned i=0; i=xorigin) && (x<(xorigin+int(bx_headerbar_entry[i].xdim)))) { + bx_headerbar_entry[i].f(); + return; + } + } +} + +void bx_x_gui_c::exit(void) +{ + if (!x_init_done) return; + + // Delete the font bitmaps + for (int i=0; i<256; i++) { + //if (vgafont[i] != NULL) + XFreePixmap(bx_x_display,vgafont[i]); + } + + if (bx_x_display) + XCloseDisplay (bx_x_display); + + //DanceOS Richard Hellwig +#ifdef DANCEOS_RESTORE + + bx_bitmap_left_xorigin = 0; + bx_bitmap_right_xorigin = 0; + bx_bitmap_entries = 0; + bx_headerbar_entries = 0; + +#endif + + BX_INFO(("Exit")); +} + +static void warp_cursor (int dx, int dy) +{ + if (SIM->get_param_bool(BXPN_MOUSE_ENABLED)->get() && + (warp_dx || warp_dy || dx || dy) + ) { + warp_dx = dx; + warp_dy = dy; + XWarpPointer(bx_x_display, None, None, 0, 0, 0, 0, dx, dy); + } +} + +static void disable_cursor() +{ + static Cursor cursor; + static unsigned cursor_created = 0; + + static int shape_width = 16, + shape_height = 16, + mask_width = 16, + mask_height = 16; + + static Bit32u shape_bits[(16*16)/32] = { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + }; + static Bit32u mask_bits[(16*16)/32] = { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + }; + + if (!cursor_created) { + Pixmap shape, mask; + XColor white, black; + shape = XCreatePixmapFromBitmapData(bx_x_display, + RootWindow(bx_x_display,bx_x_screen_num), + (char*)shape_bits, + shape_width, + shape_height, + 1, 0, 1); + mask = XCreatePixmapFromBitmapData(bx_x_display, + RootWindow(bx_x_display,bx_x_screen_num), + (char*)mask_bits, + mask_width, + mask_height, + 1, 0, 1); + XParseColor(bx_x_display, default_cmap, "black", &black); + XParseColor(bx_x_display, default_cmap, "white", &white); + cursor = XCreatePixmapCursor(bx_x_display, shape, mask, + &white, &black, 1, 1); + cursor_created = 1; + } + + XDefineCursor(bx_x_display, win, cursor); +} + +static void enable_cursor() +{ + XUndefineCursor(bx_x_display, win); +} + +/* convertStringToXKeysym is a keymap callback + * used when reading the keymap file. + * It converts a Symblic String to a GUI Constant + * + * It returns a Bit32u constant or BX_KEYMAP_UNKNOWN if it fails + */ +static Bit32u convertStringToXKeysym (const char *string) +{ + if (strncmp ("XK_", string, 3) != 0) + return BX_KEYMAP_UNKNOWN; + KeySym keysym=XStringToKeysym(string+3); + + // failure, return unknown + if(keysym==NoSymbol) return BX_KEYMAP_UNKNOWN; + + return((Bit32u)keysym); +} + +#if BX_USE_IDLE_HACK + +/* BX_USE_IDLE_HACK: a small idle hack by + * Roland.Mainz@informatik.med.uni-giessen.de to prevent bochs + * from consuming 100% CPU time even when it is not required (for + * example, the OS in the emulator calls HLT to wait for an interupt) + * pro: + * - no more 100% CPU usage + * contra: + * - we're sleeping too long + * - bochs still consumes ~10%-20% CPU time while executing an idle + * linux kernel + * - this is an hack + */ + +/* XPeekEvent() with timeout + * (adopted from mozilla/gfx/src/xprint/xprintutil_printtofile.c#XNextEventTimeout()) + */ +static +Bool XPeekEventTimeout(Display *display, XEvent *event_return, struct timeval *timeout) +{ + int res; + fd_set readfds; + int display_fd = XConnectionNumber(display); + + /* small shortcut... */ + if(timeout == NULL) + { + XPeekEvent(display, event_return); + return(True); + } + + FD_ZERO(&readfds); + FD_SET(display_fd, &readfds); + + /* Note/bug: In the case of internal X events (like used to trigger callbacks + * registered by XpGetDocumentData()&co.) select() will return with "new info" + * - but XNextEvent() below processes these _internal_ events silently - and + * will block if there are no other non-internal events. + * The workaround here is to check with XEventsQueued() if there are non-internal + * events queued - if not select() will be called again - unfortunately we use + * the old timeout here instead of the "remaining" time... (this only would hurt + * if the timeout would be really long - but for current use with values below + * 1/2 secs it does not hurt... =:-) + */ + while(XEventsQueued(display, QueuedAfterFlush) == 0) + { + res = select(display_fd+1, &readfds, NULL, NULL, timeout); + + switch(res) + { + case -1: /* select() error - should not happen */ + if (errno == EINTR) + break; // caused e.g. by alarm(3) + perror("XPeekEventTimeout: select() failure"); + return(False); + + case 0: /* timeout */ + return(False); + } + } + + XPeekEvent(display, event_return); + return(True); +} + +void bx_x_gui_c::sim_is_idle() +{ + XEvent dummy; + struct timeval timeout; + timeout.tv_sec = 0; + timeout.tv_usec = 1000; /* 1/1000 s */ + XPeekEventTimeout(bx_x_display, &dummy, &timeout); +} +#endif /* BX_USE_IDLE_HACK */ + +void bx_x_gui_c::beep_on(float frequency) +{ + BX_INFO(("X11 Beep ON (frequency=%.2f)",frequency)); +} + +void bx_x_gui_c::beep_off() +{ + BX_INFO(("X11 Beep OFF")); +} + +void bx_x_gui_c::get_capabilities(Bit16u *xres, Bit16u *yres, Bit16u *bpp) +{ + int num_sizes; + Rotation original_rotation; + + Display *dpy = XOpenDisplay(NULL); + Window root = RootWindow(dpy, 0); + XRRScreenSize *xrrs = XRRSizes(dpy, 0, &num_sizes); + XRRScreenConfiguration *conf = XRRGetScreenInfo(dpy, root); + SizeID original_size_id = XRRConfigCurrentConfiguration(conf, &original_rotation); + *xres = xrrs[original_size_id].width; + *yres = xrrs[original_size_id].height; + XCloseDisplay(dpy); + // always return 32 bit depth + *bpp = 32; +} + +#if BX_SHOW_IPS +void bx_x_gui_c::show_ips(Bit32u ips_count) +{ + if (x11_mouse_msg_counter == 0) { + if (!x11_ips_update && !x11_hide_ips) { + sprintf(x11_ips_text, "IPS: %9u", ips_count); + x11_ips_update = 1; + } + } else { + x11_mouse_msg_counter--; + } +} +#endif + +// X11 dialog box functions + +typedef struct { + Window dialog; + GC gc, gc_inv; +} x11_dialog_t; + +typedef struct { + int xmin, xmax, ymin, ymax; +} x11_control_t; + +void x11_create_dialog(x11_dialog_t *xdlg, char *name, int width, int height) +{ + Window dialog; + GC gc, gc_inv; + XSizeHints hint; + unsigned long black_pixel, white_pixel; + + hint.flags = PPosition | PSize | PMinSize | PMaxSize; + hint.x = 100; + hint.y = 100; + hint.width = hint.min_width = hint.max_width = width; + hint.height = hint.min_height = hint.max_height = height; + black_pixel = BlackPixel(bx_x_display, bx_x_screen_num); + white_pixel = WhitePixel(bx_x_display, bx_x_screen_num); + dialog = XCreateSimpleWindow(bx_x_display, RootWindow(bx_x_display,bx_x_screen_num), + hint.x, hint.y, hint.width, hint.height, 4, black_pixel, white_pixel); + XSetStandardProperties(bx_x_display, dialog, name, name, None, NULL, 0, &hint); + Atom wm_delete = XInternAtom(bx_x_display, "WM_DELETE_WINDOW", 1); + XSetWMProtocols(bx_x_display, dialog, &wm_delete, 1); + + gc = XCreateGC(bx_x_display, dialog, 0, 0); + gc_inv = XCreateGC(bx_x_display, dialog, 0, 0); + XSetState(bx_x_display, gc_inv, white_pixel, black_pixel, GXcopy, AllPlanes); + XSetBackground(bx_x_display,gc,WhitePixel(bx_x_display, bx_x_screen_num)); + XSetForeground(bx_x_display,gc,BlackPixel(bx_x_display, bx_x_screen_num)); + + XSelectInput(bx_x_display, dialog, ButtonPressMask + | ButtonReleaseMask + | KeyPressMask + | KeyReleaseMask + | ExposureMask + | PointerMotionMask + | EnterWindowMask + | LeaveWindowMask); + XMapWindow(bx_x_display, dialog); + XFlush(bx_x_display); + xdlg->dialog = dialog; + xdlg->gc = gc; + xdlg->gc_inv = gc_inv; +} + +void x11_create_button(x11_control_t *xbutton, Display *display, x11_dialog_t *xdlg, + int x, int y, unsigned int width, unsigned int height, + const char *text) +{ + xbutton->xmin = x; + xbutton->ymin = y; + xbutton->xmax = x + width; + xbutton->ymax = y + height; + XDrawRectangle(display, xdlg->dialog, xdlg->gc, x, y, width, height); + XDrawImageString(display, xdlg->dialog, xdlg->gc, x+4, y+14, (char *)text, strlen(text)); +} + +int x11_test_control(x11_control_t *xbutton, XButtonEvent *bev) +{ + if ((bev->y > xbutton->ymin) && (bev->y < xbutton->ymax)) { + if ((bev->x > xbutton->xmin) && (bev->x < xbutton->xmax)) { + return 1; + } + } + return 0; +} + +int x11_ask_dialog(BxEvent *event) +{ +#if BX_DEBUGGER || BX_GDBSTUB + const int button_x[4] = { 36, 121, 206, 291 }; + const int ask_code[4] = { BX_LOG_ASK_CHOICE_CONTINUE, + BX_LOG_ASK_CHOICE_CONTINUE_ALWAYS, + BX_LOG_ASK_CHOICE_ENTER_DEBUG, + BX_LOG_ASK_CHOICE_DIE }; + const int num_ctrls = 4; + x11_control_t xbtn_cont, xbtn_acont, xbtn_debug, xbtn_quit; +#else + const int button_x[3] = { 81, 166, 251 }; + const int ask_code[3] = { BX_LOG_ASK_CHOICE_CONTINUE, + BX_LOG_ASK_CHOICE_CONTINUE_ALWAYS, + BX_LOG_ASK_CHOICE_DIE }; + const int num_ctrls = 3; + x11_control_t xbtn_cont, xbtn_acont, xbtn_quit; +#endif + x11_dialog_t xdlg; + XEvent xevent; + KeySym key; + int done, i, level, cpos; + int retcode = -1; + int valid = 0, control = num_ctrls - 1, oldctrl = -1; + char name[16], text[10], device[16], message[512]; + + level = event->u.logmsg.level; + strcpy(name, SIM->get_log_level_name(level)); + sprintf(device, "Device: %s", event->u.logmsg.prefix); + sprintf(message, "Message: %s", event->u.logmsg.msg); + x11_create_dialog(&xdlg, name, 400, 115); + done = 0; + while (!done) { + XNextEvent(bx_x_display, &xevent); + switch (xevent.type) { + case Expose: + if (xevent.xexpose.count == 0) { + XDrawImageString(xevent.xexpose.display, xdlg.dialog, + xdlg.gc, 20, 25, device, strlen(device)); + if (strlen(message) > 62) { + cpos = 62; + while ((cpos > 0) && (!isspace(message[cpos]))) cpos--; + XDrawImageString(xevent.xexpose.display, xdlg.dialog, + xdlg.gc, 20, 45, message, cpos); + XDrawImageString(xevent.xexpose.display, xdlg.dialog, + xdlg.gc, 74, 63, message+cpos+1, strlen(message)-cpos-1); + } else { + XDrawImageString(xevent.xexpose.display, xdlg.dialog, + xdlg.gc, 20, 45, message, strlen(message)); + } + x11_create_button(&xbtn_cont, xevent.xexpose.display, &xdlg, + button_x[0] + 2, 80, 65, 20, "Continue"); + x11_create_button(&xbtn_acont, xevent.xexpose.display, &xdlg, + button_x[1] + 2, 80, 65, 20, "Alwayscont"); +#if BX_DEBUGGER || BX_GDBSTUB + x11_create_button(&xbtn_debug, xevent.xexpose.display, &xdlg, + button_x[2] + 2, 80, 65, 20, "Debugger"); +#endif + x11_create_button(&xbtn_quit, xevent.xexpose.display, &xdlg, + button_x[num_ctrls-1] + 2, 80, 65, 20, "Quit"); + oldctrl = control - 1; + if (oldctrl < 0) oldctrl = 1; + } + break; + case ButtonPress: + if (xevent.xbutton.button == Button1) { + if (x11_test_control(&xbtn_cont, &xevent.xbutton)) { + control = 0; + valid = 1; + } else if (x11_test_control(&xbtn_acont, &xevent.xbutton)) { + control = 1; + valid = 1; + } else if (x11_test_control(&xbtn_quit, &xevent.xbutton)) { + control = num_ctrls - 1; + valid = 1; +#if BX_DEBUGGER || BX_GDBSTUB + } else if (x11_test_control(&xbtn_debug, &xevent.xbutton)) { + control = 2; + valid = 1; +#endif + } + } + break; + case ButtonRelease: + if ((xevent.xbutton.button == Button1) && (valid == 1)) { + done = 1; + } + break; + case KeyPress: + i = XLookupString((XKeyEvent *)&xevent, text, 10, &key, 0); + if (key == XK_Tab) { + control++; + if (control >= num_ctrls) control = 0; + } else if (key == XK_Escape) { + control = num_ctrls - 1; + done = 1; + } else if ((key == XK_space) || (key == XK_Return)) { + done = 1; + } + break; + case ClientMessage: + if (!strcmp(XGetAtomName(bx_x_display, xevent.xclient.message_type), "WM_PROTOCOLS")) { + control = num_ctrls - 1; + done = 1; + } + break; + case LeaveNotify: + valid = 0; + break; + } + if (control != oldctrl) { + XDrawRectangle(bx_x_display, xdlg.dialog, xdlg.gc_inv, button_x[oldctrl], 78, 69, 24); + XDrawRectangle(bx_x_display, xdlg.dialog, xdlg.gc, button_x[control], 78, 69, 24); + oldctrl = control; + } + } + retcode = ask_code[control]; + XFreeGC(bx_x_display, xdlg.gc); + XFreeGC(bx_x_display, xdlg.gc_inv); + XDestroyWindow(bx_x_display, xdlg.dialog); + return retcode; +} + +int x11_string_dialog(bx_param_string_c *param, bx_param_bool_c *param2) +{ + x11_dialog_t xdlg; + x11_control_t xctl_edit, xbtn_ok, xbtn_cancel, xbtn_status; + XEvent xevent; + KeySym key; + int valid = 0, control = 0, oldctrl = -1, num_ctrls; + int done, h, i, ok_button, status = 0; + unsigned int len, max, pos = 0; + char editstr[26], name[80], text[10], value[BX_PATHNAME_LEN]; + + if (param2 != NULL) { + strcpy(name, "First CD-ROM image/device"); + status = param2->get(); + h = 110; + ok_button = 2; + num_ctrls = 4; + } else { + if (param->get_label() != NULL) { + strcpy(name, param->get_label()); + } else { + strcpy(name, param->get_name()); + } + h = 90; + ok_button = 1; + num_ctrls = 3; + } + strcpy(value, param->getptr()); + len = strlen(value); + max = param->get_maxsize(); + x11_create_dialog(&xdlg, name, 250, h); + done = 0; + while (!done) { + XNextEvent(bx_x_display, &xevent); + switch (xevent.type) { + case Expose: + if (xevent.xexpose.count == 0) { + if (len < 25) { + sprintf(editstr, "%s%s", value, "_ "); + } else { + pos = len - 24; + strncpy(editstr, value+pos, 24); + editstr[24] = 0; + strcat(editstr, "_"); + } + x11_create_button(&xctl_edit, xevent.xexpose.display, &xdlg, 45, 20, 160, 20, + editstr); + x11_create_button(&xbtn_ok, xevent.xexpose.display, &xdlg, 55, h - 30, 65, 20, + "OK"); + x11_create_button(&xbtn_cancel, xevent.xexpose.display, &xdlg, 130, h - 30, 65, 20, + "Cancel"); + if (param2 != NULL) { + if (status == 1) { + strcpy(text, "X"); + } else { + strcpy(text, " "); + } + x11_create_button(&xbtn_status, xevent.xexpose.display, &xdlg, 45, 50, 15, 16, + text); + XDrawImageString(bx_x_display, xdlg.dialog, xdlg.gc, 70, 62, "Inserted", 8); + } + oldctrl = control - 1; + if (oldctrl < 0) oldctrl = 1; + } + break; + case ButtonPress: + if (xevent.xbutton.button == Button1) { + if (x11_test_control(&xctl_edit, &xevent.xbutton)) { + control = 0; + valid = 1; + } else if (x11_test_control(&xbtn_status, &xevent.xbutton)) { + control = 1; + valid = 1; + status ^= 1; + if (status == 1) { + strcpy(text, "X"); + } else { + strcpy(text, " "); + } + XDrawImageString(bx_x_display, xdlg.dialog, xdlg.gc, 49, 64, text, 1); + } else if (x11_test_control(&xbtn_ok, &xevent.xbutton)) { + control = ok_button; + valid = 1; + } else if (x11_test_control(&xbtn_cancel, &xevent.xbutton)) { + control = num_ctrls - 1; + valid = 1; + } + } + break; + case ButtonRelease: + if ((xevent.xbutton.button == Button1) && (valid == 1)) { + if (control >= ok_button) { + done = 1; + } + } + break; + case KeyPress: + i = XLookupString((XKeyEvent *)&xevent, text, 10, &key, 0); + if (key == XK_Tab) { + control++; + if (control >= num_ctrls) control = 0; + } else if (key == XK_Escape) { + control = num_ctrls - 1; + done = 1; + } else if (control == 0) { + if (key == XK_Return) { + control = ok_button; + done = 1; + } else if (key == XK_BackSpace) { + if (len > 0) { + value[--len] = 0; + if (pos > 0) pos--; + oldctrl = -1; + } + } else if ((i == 1) && (len < max)) { + strcat(value, text); + len = strlen(value); + if (len > 24) pos++; + oldctrl = -1; + } + } else if (control >= ok_button) { + if ((key == XK_space) || (key == XK_Return)) { + done = 1; + } + } else { + if (key == XK_space) { + status ^= 1; + if (status == 1) { + strcpy(text, "X"); + } else { + strcpy(text, " "); + } + XDrawImageString(bx_x_display, xdlg.dialog, xdlg.gc, 49, 64, text, 1); + } else if (key == XK_Return) { + control = ok_button; + done = 1; + } + } + break; + case ClientMessage: + if (!strcmp(XGetAtomName(bx_x_display, xevent.xclient.message_type), "WM_PROTOCOLS")) { + control = 2; + done = 1; + } + break; + case LeaveNotify: + valid = 0; + break; + } + if (control != oldctrl) { + if (oldctrl >= ok_button) { + XDrawRectangle(bx_x_display, xdlg.dialog, xdlg.gc_inv, oldctrl==ok_button?53:128, h - 32, 69, 24); + } else if (oldctrl == 1) { + XDrawRectangle(bx_x_display, xdlg.dialog, xdlg.gc_inv, 43, 48, 19, 20); + } else if (oldctrl == 0) { + if (len < 25) { + sprintf(editstr, "%s%s", value, " "); + } else { + strncpy(editstr, value+pos, 24); + editstr[24] = 0; + strcat(editstr, " "); + } + XDrawImageString(bx_x_display, xdlg.dialog, xdlg.gc, 49, 34, editstr, strlen(editstr)); + } + if (control >= ok_button) { + XDrawRectangle(bx_x_display, xdlg.dialog, xdlg.gc, control==ok_button?53:128, h - 32, 69, 24); + } else if (control == 1) { + XDrawRectangle(bx_x_display, xdlg.dialog, xdlg.gc, 43, 48, 19, 20); + } else if (control == 0) { + if (len < 25) { + sprintf(editstr, "%s%s", value, "_ "); + } else { + strncpy(editstr, value+pos, 24); + editstr[24] = 0; + strcat(editstr, "_"); + } + XDrawImageString(bx_x_display, xdlg.dialog, xdlg.gc, 49, 34, editstr, strlen(editstr)); + } + oldctrl = control; + } + } + if (control == ok_button) { + if (param2 != NULL) { + if (status == 1) { + if (len > 0) { + param->set(value); + param2->set(1); + } else { + param2->set(0); + } + } else { + param2->set(0); + } + } else { + param->set(value); + } + } + XFreeGC(bx_x_display, xdlg.gc); + XFreeGC(bx_x_display, xdlg.gc_inv); + XDestroyWindow(bx_x_display, xdlg.dialog); + if (control == ok_button) { + return 1; + } else { + return -1; + } +} + +int x11_yesno_dialog(bx_param_bool_c *param) +{ + x11_dialog_t xdlg; + x11_control_t xbtn_yes, xbtn_no; + XEvent xevent; + KeySym key; + int button_x[2], size_x, size_y; + int valid = 0, oldctrl = -1; + int control, done, i, ypos; + unsigned int cpos1, cpos2, len, maxlen, lines; + char name[80], text[10], message[512]; + + if (param->get_label() != NULL) { + strcpy(name, param->get_label()); + } else { + strcpy(name, param->get_name()); + } + strcpy(message, param->get_description()); + cpos1 = 0; + cpos2 = 0; + ypos = 34; + lines = 0; + maxlen = 0; + while (cpos2 < strlen(message)) { + lines++; + while ((cpos2 < strlen(message)) && (message[cpos2] != 0x0a)) cpos2++; + len = cpos2 - cpos1; + if (len > maxlen) maxlen = len; + cpos1 = cpos2 + 1; + cpos2++; + } + if (maxlen < 36) { + size_x = 250; + button_x[0] = 55; + button_x[1] = 130; + } else { + size_x = 10 + maxlen * 7; + button_x[0] = (size_x / 2) - 70; + button_x[1] = (size_x / 2) + 5; + } + if (lines < 3) { + size_y = 90; + } else { + size_y = 60 + lines * 15; + } + control = 1 - param->get(); + x11_create_dialog(&xdlg, name, size_x, size_y); + done = 0; + while (!done) { + XNextEvent(bx_x_display, &xevent); + switch (xevent.type) { + case Expose: + if (xevent.xexpose.count == 0) { + cpos1 = 0; + cpos2 = 0; + ypos = 34; + while (cpos2 < strlen(message)) { + while ((cpos2 < strlen(message)) && (message[cpos2] != 0x0a)) cpos2++; + len = cpos2 - cpos1; + XDrawImageString(bx_x_display, xdlg.dialog, + xdlg.gc, 20, ypos, message+cpos1, len); + cpos1 = cpos2 + 1; + cpos2++; + ypos += 15; + } + x11_create_button(&xbtn_yes, xevent.xexpose.display, &xdlg, button_x[0], size_y - 30, 65, 20, + "Yes"); + x11_create_button(&xbtn_no, xevent.xexpose.display, &xdlg, button_x[1], size_y - 30, 65, 20, + "No"); + oldctrl = control - 1; + if (oldctrl < 0) oldctrl = 1; + } + break; + case ButtonPress: + if (xevent.xbutton.button == Button1) { + if (x11_test_control(&xbtn_yes, &xevent.xbutton)) { + control = 0; + valid = 1; + } else if (x11_test_control(&xbtn_no, &xevent.xbutton)) { + control = 1; + valid = 1; + } + } + break; + case ButtonRelease: + if ((xevent.xbutton.button == Button1) && (valid == 1)) { + done = 1; + } + break; + case KeyPress: + i = XLookupString((XKeyEvent *)&xevent, text, 10, &key, 0); + if (key == XK_Tab) { + control++; + if (control > 1) control = 0; + } else if (key == XK_Escape) { + control = 1; + done = 1; + } else if ((key == XK_space) || (key == XK_Return)) { + done = 1; + } + break; + case ClientMessage: + if (!strcmp(XGetAtomName(bx_x_display, xevent.xclient.message_type), "WM_PROTOCOLS")) { + control = 1; + done = 1; + } + break; + case LeaveNotify: + valid = 0; + break; + } + if (control != oldctrl) { + XDrawRectangle(bx_x_display, xdlg.dialog, xdlg.gc_inv, button_x[oldctrl] - 2, size_y - 32, 69, 24); + XDrawRectangle(bx_x_display, xdlg.dialog, xdlg.gc, button_x[control] - 2, size_y - 32, 69, 24); + oldctrl = control; + } + } + param->set(1 - control); + XFreeGC(bx_x_display, xdlg.gc); + XFreeGC(bx_x_display, xdlg.gc_inv); + XDestroyWindow(bx_x_display, xdlg.dialog); + return control; +} + +BxEvent *x11_notify_callback (void *unused, BxEvent *event) +{ + int opts; + bx_param_c *param; + bx_param_string_c *sparam; + bx_param_bool_c *bparam; + bx_list_c *list; + + switch (event->type) + { + case BX_SYNC_EVT_LOG_ASK: + event->retcode = x11_ask_dialog(event); + return event; + case BX_SYNC_EVT_ASK_PARAM: + param = event->u.param.param; + if (param->get_type() == BXT_PARAM_STRING) { + sparam = (bx_param_string_c *)param; + opts = sparam->get_options(); + if ((opts & sparam->IS_FILENAME) == 0) { + event->retcode = x11_string_dialog(sparam, NULL); + return event; + } else if ((opts & sparam->SAVE_FILE_DIALOG) || + (opts & sparam->SELECT_FOLDER_DLG)) { + event->retcode = x11_string_dialog(sparam, NULL); + return event; + } + } else if (param->get_type() == BXT_LIST) { + list = (bx_list_c *)param; + sparam = (bx_param_string_c *)list->get_by_name("path"); + bparam = (bx_param_bool_c *)list->get_by_name("status"); + event->retcode = x11_string_dialog(sparam, bparam); + return event; + } else if (param->get_type() == BXT_PARAM_BOOL) { + event->retcode = x11_yesno_dialog((bx_param_bool_c *)param); + return event; + } +#if BX_DEBUGGER && BX_DEBUGGER_GUI + case BX_SYNC_EVT_GET_DBG_COMMAND: + { + debug_cmd = new char[512]; + debug_cmd_ready = 0; + HitBreak(); + while (debug_cmd_ready == 0 && bx_user_quit == 0) + { + if (vgaw_refresh != 0) // is the GUI frontend requesting a VGAW refresh? + DEV_vga_refresh(); + vgaw_refresh = 0; + sleep(1); + } + if (bx_user_quit != 0) + BX_EXIT(0); + + event->u.debugcmd.command = debug_cmd; + event->retcode = 1; + return event; + } + case BX_ASYNC_EVT_DBG_MSG: + { + ParseIDText (event->u.logmsg.msg); + return event; + } +#endif + case BX_SYNC_EVT_TICK: // called periodically by siminterface. + case BX_ASYNC_EVT_REFRESH: // called when some bx_param_c parameters have changed. + // fall into default case + default: + return (*old_callback)(old_callback_arg, event); + } +} + +#endif /* if BX_WITH_X11 */ diff --git a/bochs/host/linux/pcidev/Make.kbuild b/bochs/host/linux/pcidev/Make.kbuild new file mode 100644 index 00000000..9e212f1f --- /dev/null +++ b/bochs/host/linux/pcidev/Make.kbuild @@ -0,0 +1,2 @@ +obj-m += pcidev.o + diff --git a/bochs/host/linux/pcidev/Makefile.in b/bochs/host/linux/pcidev/Makefile.in new file mode 100644 index 00000000..f9a39f50 --- /dev/null +++ b/bochs/host/linux/pcidev/Makefile.in @@ -0,0 +1,75 @@ +ifneq ($(KERNELRELEASE), ) +# linux kernel 2.6 kbuild invocation +include $(src)/Make.kbuild +else +# command prompt invocation or linux kernel 2.4 build + +KERNELDIR = @KERNELDIR@ +CC = @CC@ +LSMOD = @LSMOD@ +INSMOD = @INSMOD@ +RMMOD = @RMMOD@ +DEPMOD = @DEPMOD@ +KERNEL_MODULE_SUFFIX = @KERNEL_MODULE_SUFFIX@ + +MODULE_NAME = pcidev +MODULE_FILE = $(MODULE_NAME).$(KERNEL_MODULE_SUFFIX) + +PCIDEV_MODULE_MAKE_ALL = @PCIDEV_MODULE_MAKE_ALL@ + +CFLAGS = -Wstrict-prototypes -Wno-trigraphs -g -fno-strict-aliasing -fno-common -D__KERNEL__ -DMODULE -I$(KERNELDIR)/include -O -Wall + + +.PHONY : all +all : $(PCIDEV_MODULE_MAKE_ALL) + + +.PHONY : all-kernel24 +all-kernel24 : $(MODULE_FILE) + +$(MODULE_FILE) : pcidev.c kernel_pcidev.h + + +.PHONY : all-kernel26 +all-kernel26 : + $(MAKE) -C $(KERNELDIR) SUBDIRS=$(shell pwd) modules + + +.PHONY : clean +clean : + @RMCOMMAND@ *.o *~ core *.mod.* .*.cmd *.ko + +.PHONY : dist-clean +dist-clean: clean + @RMCOMMAND@ Makefile + + +.PHONY : devices +devices: + @DEVICE="/dev/pcidev" ; \ + if test \! -c $$DEVICE ; then \ + echo "Adding $$DEVICE ..." ; \ + mknod $$DEVICE c 240 0 ; \ + chmod a+wr $$DEVICE ; \ + ls -l $$DEVICE ; \ + else \ + echo "Device $$DEVICE already exists." ; \ + fi + + +# works only under linux of course +.PHONY : install +install: + @if test $$USER != "root" ; then \ + echo "Only root can install." ; \ + exit 1 ; \ + fi ; \ + if $(LSMOD) | grep -q $(MODULE_NAME) ; then \ + echo "Unloading $(MODULE_NAME) ..." ; \ + $(RMMOD) $(MODULE_NAME) ; \ + fi ; \ + echo "Loading $(MODULE_NAME) ..." ; \ + $(INSMOD) $(MODULE_FILE) ; \ + echo "Done." + +endif diff --git a/bochs/host/linux/pcidev/kernel_pcidev.h b/bochs/host/linux/pcidev/kernel_pcidev.h new file mode 100644 index 00000000..bec92379 --- /dev/null +++ b/bochs/host/linux/pcidev/kernel_pcidev.h @@ -0,0 +1,93 @@ +/* + * PCIDEV: PCI host device mapping + * Copyright (C) 2003 Frank Cornelis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +#ifndef _KERNEL_PCIDEV_H +#define _KERNEL_PCIDEV_H + +#define PCIDEV_MAJOR 240 +#define PCIDEV_NAME "pcidev" + +#define PCIDEV_COUNT_RESOURCES 6 + +struct pcidev_find_struct { + unsigned long vendorID; + unsigned long deviceID; + unsigned long bus; + unsigned long device; + unsigned long func; + struct { + unsigned long start; + unsigned long end; + unsigned long flags; // see linux/ioport.h + } resources [PCIDEV_COUNT_RESOURCES]; +}; + +// we copied these values from linux/ioport.h since these +// are not accessible from within user space code +#define PCIDEV_RESOURCE_IO 0x100 +#define PCIDEV_RESOURCE_MEM 0x200 + +struct pcidev_io_struct { + unsigned long address; + unsigned long value; +}; + +#define PCIDEV_IOCTL_MAGIC 'p' +#define PCIDEV_IOCTL_FIND _IOWR(PCIDEV_IOCTL_MAGIC, 0, struct pcidev_find_struct) + +#define PCIDEV_IOCTL_READ_CONFIG_BYTE _IOWR(PCIDEV_IOCTL_MAGIC, 1, struct pcidev_io_struct) +#define PCIDEV_IOCTL_READ_CONFIG_WORD _IOWR(PCIDEV_IOCTL_MAGIC, 2, struct pcidev_io_struct) +#define PCIDEV_IOCTL_READ_CONFIG_DWORD _IOWR(PCIDEV_IOCTL_MAGIC, 3, struct pcidev_io_struct) + +#define PCIDEV_IOCTL_WRITE_CONFIG_BYTE _IOR(PCIDEV_IOCTL_MAGIC, 4, struct pcidev_io_struct) +#define PCIDEV_IOCTL_WRITE_CONFIG_WORD _IOR(PCIDEV_IOCTL_MAGIC, 5, struct pcidev_io_struct) +#define PCIDEV_IOCTL_WRITE_CONFIG_DWORD _IOR(PCIDEV_IOCTL_MAGIC, 6, struct pcidev_io_struct) + +#define PCIDEV_IOCTL_INTERRUPT _IO(PCIDEV_IOCTL_MAGIC, 7) +#define PCIDEV_IOCTL_INTERRUPT_TEST _IO(PCIDEV_IOCTL_MAGIC, 8) + +#define PCIDEV_IOCTL_READ_IO_BYTE _IOWR(PCIDEV_IOCTL_MAGIC, 9, struct pcidev_io_struct) +#define PCIDEV_IOCTL_READ_IO_WORD _IOWR(PCIDEV_IOCTL_MAGIC, 10, struct pcidev_io_struct) +#define PCIDEV_IOCTL_READ_IO_DWORD _IOWR(PCIDEV_IOCTL_MAGIC, 11, struct pcidev_io_struct) + +#define PCIDEV_IOCTL_WRITE_IO_BYTE _IOR(PCIDEV_IOCTL_MAGIC, 12, struct pcidev_io_struct) +#define PCIDEV_IOCTL_WRITE_IO_WORD _IOR(PCIDEV_IOCTL_MAGIC, 13, struct pcidev_io_struct) +#define PCIDEV_IOCTL_WRITE_IO_DWORD _IOR(PCIDEV_IOCTL_MAGIC, 14, struct pcidev_io_struct) + +#define PCIDEV_IOCTL_READ_MEM_BYTE _IOWR(PCIDEV_IOCTL_MAGIC, 15, struct pcidev_io_struct) +#define PCIDEV_IOCTL_READ_MEM_WORD _IOWR(PCIDEV_IOCTL_MAGIC, 16, struct pcidev_io_struct) +#define PCIDEV_IOCTL_READ_MEM_DWORD _IOWR(PCIDEV_IOCTL_MAGIC, 17, struct pcidev_io_struct) + +#define PCIDEV_IOCTL_WRITE_MEM_BYTE _IOR(PCIDEV_IOCTL_MAGIC, 18, struct pcidev_io_struct) +#define PCIDEV_IOCTL_WRITE_MEM_WORD _IOR(PCIDEV_IOCTL_MAGIC, 19, struct pcidev_io_struct) +#define PCIDEV_IOCTL_WRITE_MEM_DWORD _IOR(PCIDEV_IOCTL_MAGIC, 20, struct pcidev_io_struct) + +#define PCIDEV_IOCTL_PROBE_CONFIG_DWORD _IOWR(PCIDEV_IOCTL_MAGIC, 21, struct pcidev_io_struct) + + +#ifdef __KERNEL__ + +struct pcidev_struct { + struct pci_dev *dev; + int pid; // send irq signals to this task + struct timer_list irq_timer; // for testing the irq signals + void *mapped_mem [PCIDEV_COUNT_RESOURCES]; +}; + +#endif // __KERNEL__ + +#endif // _KERNEL_PCIDEV_H diff --git a/bochs/host/linux/pcidev/pcidev.c b/bochs/host/linux/pcidev/pcidev.c new file mode 100644 index 00000000..5dafca88 --- /dev/null +++ b/bochs/host/linux/pcidev/pcidev.c @@ -0,0 +1,481 @@ +/* + * PCIDEV: PCI host device mapping + * Copyright (C) 2003, 2004 Frank Cornelis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +/* + * Create the PCIDEV using: + * mknod /dev/pcidev c 240 0 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kernel_pcidev.h" + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Frank Cornelis "); +MODULE_DESCRIPTION("PCI Host Device Mapper Driver"); +MODULE_SUPPORTED_DEVICE("pcidev"); + +//EXPORT_NO_SYMBOLS; + + +static char *pcidev_name = PCIDEV_NAME; + +static int pcidev_open(struct inode *inode, struct file *file) +{ + struct pcidev_struct *pcidev = kmalloc(sizeof(struct pcidev_struct), GFP_KERNEL); + int idx; + if (!pcidev) + goto out; + pcidev->dev = NULL; + pcidev->pid = 0; + for (idx = 0; idx < PCIDEV_COUNT_RESOURCES; idx++) + pcidev->mapped_mem[idx] = NULL; + init_timer(&pcidev->irq_timer); + pcidev->irq_timer.function = NULL; // no test irq signaling +out: + file->private_data = pcidev; + return 0; +} + + +static int pcidev_release(struct inode *inode, struct file *file) +{ + struct pcidev_struct *pcidev = (struct pcidev_struct *)file->private_data; + int idx; + if (!pcidev) + return 0; + if (!pcidev->dev) + goto out; + if (pcidev->irq_timer.function) + del_timer_sync(&pcidev->irq_timer); + if (pcidev->pid) { + u8 irq; + pci_read_config_byte(pcidev->dev, PCI_INTERRUPT_PIN, &irq); + pci_read_config_byte(pcidev->dev, PCI_INTERRUPT_LINE, &irq); + free_irq(irq, (void *)pcidev->pid); + } + for (idx = 0; idx < PCIDEV_COUNT_RESOURCES; idx++) + if (pcidev->mapped_mem[idx]) + iounmap(pcidev->mapped_mem[idx]); + pci_release_regions(pcidev->dev); +out: + kfree(file->private_data); + return 0; +} + + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)) +// linux kernel 2.4 +typedef void irqreturn_t; +#define IRQ_NONE +#endif + + +static irqreturn_t pcidev_irqhandler(int irq, void *dev_id, struct pt_regs *regs) +{ + int pid = (int)dev_id; + struct task_struct *task; + read_lock(&tasklist_lock); + task = find_task_by_pid(pid); + if (task) + send_sig_info(SIGUSR1, (struct siginfo *)1, task); // XXX: should be converted to real-time signals + read_unlock(&tasklist_lock); + return IRQ_NONE; + /* + * we cannot possible say IRQ_HANDLED because we simply + * don't know yet... only bochs could tell + */ +} + + +static void irq_test_timer(unsigned long data) +{ + struct task_struct *task; + struct pcidev_struct *pcidev = (struct pcidev_struct *)data; + read_lock(&tasklist_lock); + task = find_task_by_pid(pcidev->pid); + if (task) + send_sig_info(SIGUSR1, (struct siginfo *)1, task); + read_unlock(&tasklist_lock); + + //printk(KERN_INFO "irq_test_timer\n"); + init_timer(&pcidev->irq_timer); + pcidev->irq_timer.data = data; + pcidev->irq_timer.function = irq_test_timer; + pcidev->irq_timer.expires = jiffies + HZ; + add_timer(&pcidev->irq_timer); +} + + +static int pcidev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) +{ + int ret = 0; + struct pcidev_struct *pcidev = (struct pcidev_struct *)file->private_data; + if (!pcidev) + return -EIO; + switch(cmd) { + case PCIDEV_IOCTL_FIND: { + struct pcidev_find_struct *find; + struct pci_dev *dev; + unsigned long vendorID, deviceID; + int idx; + if (pcidev->dev) + return -EIO; // only alloc once for now + if (!access_ok(VERIFY_WRITE, (void *)arg, sizeof(struct pcidev_find_struct))) + return -EFAULT; + find = (struct pcidev_find_struct *)arg; + __get_user(vendorID, &find->vendorID); + __get_user(deviceID, &find->deviceID); + __put_user(-1, &find->bus); + __put_user(-1, &find->device); + __put_user(-1, &find->func); + dev = pci_find_device(vendorID, deviceID, NULL); + if (!dev) + return -ENOENT; + if (pci_enable_device(dev)) { + printk(KERN_WARNING "pcidev: Could not enable the PCI device.\n"); + return -EIO; + } + if (pci_set_dma_mask(dev, 0xffffffff)) + printk(KERN_WARNING "pcidev: only limited PCI busmaster DMA support.\n"); + pci_set_master(dev); + printk(KERN_INFO "pcidev: device found at %x:%x.%d\n", + dev->bus->number, PCI_SLOT(dev->devfn), + PCI_FUNC(dev->devfn)); + ret = pci_request_regions(dev, pcidev_name); + if (ret < 0) + break; + for (idx = 0; idx < PCIDEV_COUNT_RESOURCES; idx++) { + if (pci_resource_flags(dev, idx) & IORESOURCE_MEM) { + long len = pci_resource_len(dev, idx); + unsigned long mapped_start = (unsigned long)ioremap(pci_resource_start(dev, idx), len); + __put_user(mapped_start, &find->resources[idx].start); + __put_user(mapped_start + len - 1, &find->resources[idx].end); + pcidev->mapped_mem[idx] = (void *)mapped_start; + } + else { + pcidev->mapped_mem[idx] = NULL; + __put_user(pci_resource_start(dev, idx), &find->resources[idx].start); + __put_user(pci_resource_end(dev, idx), &find->resources[idx].end); + } + __put_user(pci_resource_flags(dev, idx), &find->resources[idx].flags); + } + pcidev->dev = dev; + __put_user(dev->bus->number, &find->bus); + __put_user(PCI_SLOT(dev->devfn), &find->device); + __put_user(PCI_FUNC(dev->devfn), &find->func); + ret = 0; + break; + } + case PCIDEV_IOCTL_READ_CONFIG_BYTE: + case PCIDEV_IOCTL_READ_CONFIG_WORD: + case PCIDEV_IOCTL_READ_CONFIG_DWORD: { + struct pcidev_io_struct *io; + unsigned long address, value; + if (!pcidev->dev) + return -EIO; + if (!access_ok(VERIFY_WRITE, (void *)arg, sizeof(struct pcidev_io_struct))) + return -EFAULT; + io = (struct pcidev_io_struct *)arg; + __get_user(address, &io->address); + __put_user(-1, &io->value); + printk(KERN_DEBUG "pcidev: reading config address %#x\n", (int)address); + switch(cmd) { + case PCIDEV_IOCTL_READ_CONFIG_BYTE: + ret = pci_read_config_byte(pcidev->dev, address, (u8 *)&value); + break; + case PCIDEV_IOCTL_READ_CONFIG_WORD: + ret = pci_read_config_word(pcidev->dev, address, (u16 *)&value); + break; + case PCIDEV_IOCTL_READ_CONFIG_DWORD: + ret = pci_read_config_dword(pcidev->dev, address, (u32 *)&value); + break; + } + if (ret < 0) + return ret; + __put_user(value, &io->value); + break; + } + case PCIDEV_IOCTL_WRITE_CONFIG_BYTE: + case PCIDEV_IOCTL_WRITE_CONFIG_WORD: + case PCIDEV_IOCTL_WRITE_CONFIG_DWORD: { + struct pcidev_io_struct *io; + unsigned long address, value; + if (!pcidev->dev) + return -EIO; + if (!access_ok(VERIFY_READ, (void *)arg, sizeof(struct pcidev_io_struct))) + return -EFAULT; + io = (struct pcidev_io_struct *)arg; + __get_user(address, &io->address); + __get_user(value, &io->value); + /* + * Next tests prevent the pcidev user from remapping + * the PCI host device since this could cause great + * trouble because we don't own those I/O resources. + * If the pcidev wants to remap a device he needs to + * emulate the mapping himself and not bother the host + * kernel about it. + */ + if (address == PCI_INTERRUPT_PIN) { + printk(KERN_WARNING "pcidev: not allowed to set irq pin!\n"); + return -EIO; + } + if (address == PCI_INTERRUPT_LINE) { + printk(KERN_WARNING "pcidev: not allowed to set irq line!\n"); + return -EIO; + } + if (PCI_BASE_ADDRESS_0 <= address && (address & ~3UL) <= PCI_BASE_ADDRESS_5) { + printk(KERN_WARNING "pcidev: now allowed to change base address %d\n", + (int)((address & ~3UL) - PCI_BASE_ADDRESS_0) / 4); + return -EIO; + } + printk(KERN_DEBUG "pcidev: writing config address %#x\n", (int)address); + switch(cmd) { + case PCIDEV_IOCTL_WRITE_CONFIG_BYTE: + ret = pci_write_config_byte(pcidev->dev, address, (u8)value); + break; + case PCIDEV_IOCTL_WRITE_CONFIG_WORD: + ret = pci_write_config_word(pcidev->dev, address, (u16)value); + break; + case PCIDEV_IOCTL_WRITE_CONFIG_DWORD: + ret = pci_write_config_dword(pcidev->dev, address, (u32)value); + break; + } + break; + } + case PCIDEV_IOCTL_INTERRUPT: { + u8 irq; + if (!pcidev->dev) + return -EIO; + ret = pci_read_config_byte(pcidev->dev, PCI_INTERRUPT_PIN, &irq); + if (ret < 0) + break; + if (!irq) + return -EIO; + ret = pci_read_config_byte(pcidev->dev, PCI_INTERRUPT_LINE, &irq); + if (ret < 0) + break; + if (arg & 1) { + pcidev->pid = current->pid; // our dev_id + printk(KERN_INFO "pcidev: enabling IRQ %d\n", irq); + ret = request_irq(irq, pcidev_irqhandler, SA_SHIRQ, + pcidev_name, (void *)current->pid); + } + else { + if (!pcidev->pid) + return -EIO; + printk(KERN_INFO "pcidev: disabling IRQ %d\n", irq); + free_irq(irq, (void *)pcidev->pid); + pcidev->pid = 0; + ret = 0; + } + break; + } + /* + * Next ioctl is only for testing purposes. + */ + case PCIDEV_IOCTL_INTERRUPT_TEST: { + ret = -EIO; + if (!pcidev->dev) + break; + if (!pcidev->pid) + break; + if (pcidev->irq_timer.function) + del_timer_sync(&pcidev->irq_timer); + pcidev->irq_timer.function = NULL; + if (arg & 1) { + init_timer(&pcidev->irq_timer); + pcidev->irq_timer.function = irq_test_timer; + pcidev->irq_timer.data = (unsigned long)pcidev; + pcidev->irq_timer.expires = jiffies + HZ; + add_timer(&pcidev->irq_timer); + } + ret = 0; + break; + } + case PCIDEV_IOCTL_READ_IO_BYTE: + case PCIDEV_IOCTL_READ_IO_WORD: + case PCIDEV_IOCTL_READ_IO_DWORD: { + /* + * We should probably check access rights against + * the PCI resource list... but who cares for a + * security hole more or less :) + */ + struct pcidev_io_struct *io; + unsigned long address, value = -1; + if (!access_ok(VERIFY_WRITE, (void *)arg, sizeof(struct pcidev_io_struct))) + return -EFAULT; + io = (struct pcidev_io_struct *)arg; + __get_user(address, &io->address); + printk(KERN_DEBUG "pcidev: reading I/O port %#x\n", (int)address); + switch(cmd) { + case PCIDEV_IOCTL_READ_IO_BYTE: + value = inb(address); + break; + case PCIDEV_IOCTL_READ_IO_WORD: + value = inw(address); + break; + case PCIDEV_IOCTL_READ_IO_DWORD: + value = inl(address); + break; + } + __put_user(value, &io->value); + ret = 0; + break; + } + case PCIDEV_IOCTL_WRITE_IO_BYTE: + case PCIDEV_IOCTL_WRITE_IO_WORD: + case PCIDEV_IOCTL_WRITE_IO_DWORD: { + struct pcidev_io_struct *io; + unsigned long address, value; + if (!access_ok(VERIFY_READ, (void *)arg, sizeof(struct pcidev_io_struct))) + return -EFAULT; + io = (struct pcidev_io_struct *)arg; + __get_user(address, &io->address); + __get_user(value, &io->value); + printk(KERN_DEBUG "pcidev: writing I/O port %#x\n", (int)address); + switch(cmd) { + case PCIDEV_IOCTL_WRITE_IO_BYTE: + outb(value, address); + break; + case PCIDEV_IOCTL_WRITE_IO_WORD: + outw(value, address); + break; + case PCIDEV_IOCTL_WRITE_IO_DWORD: + outl(value, address); + break; + } + ret = 0; + break; + } + case PCIDEV_IOCTL_READ_MEM_BYTE: + case PCIDEV_IOCTL_READ_MEM_WORD: + case PCIDEV_IOCTL_READ_MEM_DWORD: { + struct pcidev_io_struct *io; + unsigned long address, value = -1; + if (!access_ok(VERIFY_WRITE, (void *)arg, sizeof(struct pcidev_io_struct))) + return -EFAULT; + io = (struct pcidev_io_struct *)arg; + __get_user(address, &io->address); + printk(KERN_DEBUG "pcidev: reading memory %#x\n", (int)address); + switch(cmd) { + case PCIDEV_IOCTL_READ_MEM_BYTE: + value = readb((unsigned char *)address); + break; + case PCIDEV_IOCTL_READ_MEM_WORD: + value = readw((unsigned short *)address); + break; + case PCIDEV_IOCTL_READ_MEM_DWORD: + value = readl((unsigned int *)address); + break; + } + __put_user(value, &io->value); + ret = 0; + break; + } + case PCIDEV_IOCTL_WRITE_MEM_BYTE: + case PCIDEV_IOCTL_WRITE_MEM_WORD: + case PCIDEV_IOCTL_WRITE_MEM_DWORD: { + struct pcidev_io_struct *io; + unsigned long address, value; + if (!access_ok(VERIFY_READ, (void *)arg, sizeof(struct pcidev_io_struct))) + return -EFAULT; + io = (struct pcidev_io_struct *)arg; + __get_user(address, &io->address); + __get_user(value, &io->value); + printk(KERN_DEBUG "pcidev: writing memory %#x\n", (int)address); + switch(cmd) { + case PCIDEV_IOCTL_WRITE_MEM_BYTE: + writeb(value, (unsigned char *)address); + break; + case PCIDEV_IOCTL_WRITE_MEM_WORD: + writew(value, (unsigned short *)address); + break; + case PCIDEV_IOCTL_WRITE_MEM_DWORD: + writel(value, (unsigned int *)address); + break; + } + ret = 0; + break; + } + case PCIDEV_IOCTL_PROBE_CONFIG_DWORD: { + /* + * This ioctl allows for probing a config space value. + * This can be used for base address size probing + */ + struct pcidev_io_struct *io; + unsigned long address, value, orig_value; + if (!pcidev->dev) + return -EIO; + if (!access_ok(VERIFY_WRITE, (void *)arg, sizeof(struct pcidev_io_struct))) + return -EFAULT; + io = (struct pcidev_io_struct *)arg; + __get_user(address, &io->address); + __get_user(value, &io->value); + __put_user(-1, &io->value); + printk(KERN_INFO "pcidev: probing config space address: %#x\n", (int)address); + ret = pci_read_config_dword(pcidev->dev, address, (u32 *)&orig_value); + if (ret < 0) + break; + pci_write_config_dword(pcidev->dev, address, (u32)value); + pci_read_config_dword(pcidev->dev, address, (u32 *)&value); + ret = pci_write_config_dword(pcidev->dev, address, (u32)orig_value); + if (ret < 0) + break; + __put_user(value, &io->value); + break; + } + default: + ret = -ENOTTY; + } + return ret; +} + + +static struct file_operations pcidev_fops = { + open: pcidev_open, + release: pcidev_release, + ioctl: pcidev_ioctl, + owner: THIS_MODULE +}; + + + +int __init init_module(void) +{ + int result; + printk(KERN_INFO "pcidev init\n"); + if ((result = register_chrdev(PCIDEV_MAJOR, pcidev_name, &pcidev_fops)) < 0) + printk(KERN_WARNING "Could not register pcidev.\n"); + return result; +} + + +void __exit cleanup_module(void) +{ + if (unregister_chrdev(PCIDEV_MAJOR, pcidev_name) < 0) + printk(KERN_WARNING "Could not unregister pcidev.\n"); + printk(KERN_INFO "pcidev cleanup\n"); +} diff --git a/bochs/install-sh b/bochs/install-sh new file mode 100755 index 00000000..e9de2384 --- /dev/null +++ b/bochs/install-sh @@ -0,0 +1,251 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + chmodcmd="" + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/bochs/instrument/example0/Makefile.in b/bochs/instrument/example0/Makefile.in new file mode 100644 index 00000000..d3b019cc --- /dev/null +++ b/bochs/instrument/example0/Makefile.in @@ -0,0 +1,71 @@ +# Copyright (C) 2001 The Bochs Project +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +@SUFFIX_LINE@ + +srcdir = @srcdir@ +VPATH = @srcdir@ + +SHELL = /bin/sh + +@SET_MAKE@ + +CC = @CC@ +CFLAGS = @CFLAGS@ +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +RANLIB = @RANLIB@ + + +# =========================================================== +# end of configurable options +# =========================================================== + + +BX_OBJS = \ + instrument.o + +BX_INCLUDES = + +BX_INCDIRS = -I../.. -I$(srcdir)/../.. -I. -I$(srcdir)/. + +.@CPP_SUFFIX@.o: + $(CXX) -c $(CXXFLAGS) $(BX_INCDIRS) @CXXFP@$< @OFP@$@ + + +.c.o: + $(CC) -c $(CFLAGS) $(BX_INCDIRS) @CFP@$< @OFP@$@ + + + +libinstrument.a: $(BX_OBJS) + @RMCOMMAND@ libinstrument.a + @MAKELIB@ $(BX_OBJS) + $(RANLIB) libinstrument.a + +$(BX_OBJS): $(BX_INCLUDES) + + +clean: + @RMCOMMAND@ *.o + @RMCOMMAND@ *.a + +dist-clean: clean + @RMCOMMAND@ Makefile diff --git a/bochs/instrument/example0/instrument.cc b/bochs/instrument/example0/instrument.cc new file mode 100644 index 00000000..756a4108 --- /dev/null +++ b/bochs/instrument/example0/instrument.cc @@ -0,0 +1,231 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2006-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +#include + +#include "bochs.h" +#include "cpu/cpu.h" +#include "disasm/disasm.h" + +// maximum size of an instruction +#define MAX_OPCODE_SIZE 16 + +// maximum physical addresses an instruction can generate +#define MAX_DATA_ACCESSES 1024 + +// Use this variable to turn on/off collection of instrumentation data +// If you are not using the debugger to turn this on/off, then possibly +// start this at 1 instead of 0. +static bx_bool active = 1; + +static disassembler bx_disassembler; + +static struct instruction_t { + bx_bool valid; // is current instruction valid + unsigned opcode_size; + Bit8u opcode[MAX_OPCODE_SIZE]; + bx_bool is32, is64; + unsigned num_data_accesses; + struct { + bx_address laddr; // linear address + bx_phy_address paddr; // physical address + unsigned op; // BX_READ, BX_WRITE or BX_RW + unsigned size; // 1 .. 8 + } data_access[MAX_DATA_ACCESSES]; + bx_bool is_branch; + bx_bool is_taken; + bx_address target_linear; +} *instruction; + +static logfunctions *instrument_log = new logfunctions (); +#define LOG_THIS instrument_log-> + +void bx_instr_init_env(void) {} +void bx_instr_exit_env(void) {} + +void bx_instr_initialize(unsigned cpu) +{ + assert(cpu < BX_SMP_PROCESSORS); + + if (instruction == NULL) + instruction = new struct instruction_t[BX_SMP_PROCESSORS]; + + fprintf(stderr, "Initialize cpu %d\n", cpu); +} + +void bx_instr_reset(unsigned cpu, unsigned type) +{ + instruction[cpu].valid = 0; + instruction[cpu].num_data_accesses = 0; + instruction[cpu].is_branch = 0; +} + +void bx_instr_new_instruction(unsigned cpu) +{ + if (!active) return; + + instruction_t *i = &instruction[cpu]; + + if (i->valid) + { + char disasm_tbuf[512]; // buffer for instruction disassembly + unsigned length = i->opcode_size, n; + + bx_disassembler.disasm(i->is32, i->is64, 0, 0, i->opcode, disasm_tbuf); + + if(length != 0) + { + fprintf(stderr, "----------------------------------------------------------\n"); + fprintf(stderr, "CPU: %d: %s\n", cpu, disasm_tbuf); + fprintf(stderr, "LEN: %d\tBYTES: ", length); + for(n=0;nopcode[n]); + if(i->is_branch) + { + fprintf(stderr, "\tBRANCH "); + + if(i->is_taken) + fprintf(stderr, "TARGET " FMT_ADDRX " (TAKEN)", i->target_linear); + else + fprintf(stderr, "(NOT TAKEN)"); + } + fprintf(stderr, "\n"); + for(n=0;nnum_data_accesses;n++) + { + fprintf(stderr, "MEM ACCESS[%u]: " FMT_ADDRX " (linear) 0x%08x (physical) %s SIZE: %d\n", n, + i->data_access[n].laddr, + i->data_access[n].paddr, + i->data_access[n].op == BX_READ ? "RD":"WR", + i->data_access[n].size); + } + fprintf(stderr, "\n"); + } + } + + instruction[cpu].valid = 0; + instruction[cpu].num_data_accesses = 0; + instruction[cpu].is_branch = 0; +} + +static void branch_taken(unsigned cpu, bx_address new_eip) +{ + if (!active || !instruction[cpu].valid) return; + + // find linear address + bx_address laddr = BX_CPU(cpu)->get_laddr(BX_SEG_REG_CS, new_eip); + + instruction[cpu].is_branch = 1; + instruction[cpu].is_taken = 1; + instruction[cpu].target_linear = laddr; +} + +void bx_instr_cnear_branch_taken(unsigned cpu, bx_address new_eip) +{ + branch_taken(cpu, new_eip); +} + +void bx_instr_cnear_branch_not_taken(unsigned cpu) +{ + if (!active || !instruction[cpu].valid) return; + + instruction[cpu].is_branch = 1; + instruction[cpu].is_taken = 0; +} + +void bx_instr_ucnear_branch(unsigned cpu, unsigned what, bx_address new_eip) +{ + branch_taken(cpu, new_eip); +} + +void bx_instr_far_branch(unsigned cpu, unsigned what, Bit16u new_cs, bx_address new_eip) +{ + branch_taken(cpu, new_eip); +} + +void bx_instr_opcode(unsigned cpu, const Bit8u *opcode, unsigned len, bx_bool is32, bx_bool is64) +{ + if (!active) return; + + for(unsigned i=0;i= MAX_DATA_ACCESSES) + { + return; + } + + bx_address lin = BX_CPU(cpu)->get_laddr(seg, offset); + bx_bool page_valid = BX_CPU(cpu)->dbg_xlate_linear2phy(lin, &phy); + phy = A20ADDR(phy); + + // If linear translation doesn't exist, a paging exception will occur. + // Invalidate physical address data for now. + if (!page_valid) + { + phy = 0; + } + + index = instruction[cpu].num_data_accesses; + instruction[cpu].data_access[index].laddr = lin; + instruction[cpu].data_access[index].paddr = phy; + instruction[cpu].data_access[index].op = rw; + instruction[cpu].data_access[index].size = size; + instruction[cpu].num_data_accesses++; +} diff --git a/bochs/instrument/example0/instrument.h b/bochs/instrument/example0/instrument.h new file mode 100644 index 00000000..7dac314a --- /dev/null +++ b/bochs/instrument/example0/instrument.h @@ -0,0 +1,200 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2006-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +// possible types passed to BX_INSTR_TLB_CNTRL() +#define BX_INSTR_MOV_CR3 10 +#define BX_INSTR_INVLPG 11 +#define BX_INSTR_TASKSWITCH 12 + +// possible types passed to BX_INSTR_CACHE_CNTRL() +#define BX_INSTR_INVD 20 +#define BX_INSTR_WBINVD 21 + +// possible types passed to BX_INSTR_FAR_BRANCH() +#define BX_INSTR_IS_CALL 10 +#define BX_INSTR_IS_RET 11 +#define BX_INSTR_IS_IRET 12 +#define BX_INSTR_IS_JMP 13 +#define BX_INSTR_IS_INT 14 +#define BX_INSTR_IS_SYSCALL 15 +#define BX_INSTR_IS_SYSRET 16 +#define BX_INSTR_IS_SYSENTER 17 +#define BX_INSTR_IS_SYSEXIT 18 + +// possible types passed to BX_INSTR_PREFETCH_HINT() +#define BX_INSTR_PREFETCH_NTA 0 +#define BX_INSTR_PREFETCH_T0 1 +#define BX_INSTR_PREFETCH_T1 2 +#define BX_INSTR_PREFETCH_T2 3 + + +#if BX_INSTRUMENTATION + +class bxInstruction_c; + +void bx_instr_init_env(void); +void bx_instr_exit_env(void); + +// called from the CPU core + +void bx_instr_initialize(unsigned cpu); +void bx_instr_reset(unsigned cpu, unsigned type); +void bx_instr_new_instruction(unsigned cpu); + +void bx_instr_cnear_branch_taken(unsigned cpu, bx_address new_eip); +void bx_instr_cnear_branch_not_taken(unsigned cpu); +void bx_instr_ucnear_branch(unsigned cpu, unsigned what, bx_address new_eip); +void bx_instr_far_branch(unsigned cpu, unsigned what, Bit16u new_cs, bx_address new_eip); + +void bx_instr_opcode(unsigned cpu, const Bit8u *opcode, unsigned len, bx_bool is32, bx_bool is64); + +void bx_instr_interrupt(unsigned cpu, unsigned vector); +void bx_instr_exception(unsigned cpu, unsigned vector, unsigned error_code); +void bx_instr_hwinterrupt(unsigned cpu, unsigned vector, Bit16u cs, bx_address eip); + +void bx_instr_mem_data_access(unsigned cpu, unsigned seg, bx_address offset, unsigned len, unsigned rw); + +/* initialization/deinitialization of instrumentalization*/ +#define BX_INSTR_INIT_ENV() bx_instr_init_env() +#define BX_INSTR_EXIT_ENV() bx_instr_exit_env() + +/* simulation init, shutdown, reset */ +#define BX_INSTR_INITIALIZE(cpu_id) bx_instr_initialize(cpu_id) +#define BX_INSTR_EXIT(cpu_id) +#define BX_INSTR_RESET(cpu_id, type) bx_instr_reset(cpu_id, type) +#define BX_INSTR_HLT(cpu_id) +#define BX_INSTR_MWAIT(cpu_id, addr, len, flags) +#define BX_INSTR_NEW_INSTRUCTION(cpu_id) bx_instr_new_instruction(cpu_id) + +/* called from command line debugger */ +#define BX_INSTR_DEBUG_PROMPT() +#define BX_INSTR_DEBUG_CMD(cmd) + +/* branch resoultion */ +#define BX_INSTR_CNEAR_BRANCH_TAKEN(cpu_id, new_eip) bx_instr_cnear_branch_taken(cpu_id, new_eip) +#define BX_INSTR_CNEAR_BRANCH_NOT_TAKEN(cpu_id) bx_instr_cnear_branch_not_taken(cpu_id) +#define BX_INSTR_UCNEAR_BRANCH(cpu_id, what, new_eip) bx_instr_ucnear_branch(cpu_id, what, new_eip) +#define BX_INSTR_FAR_BRANCH(cpu_id, what, new_cs, new_eip) bx_instr_far_branch(cpu_id, what, new_cs, new_eip) + +/* decoding completed */ +#define BX_INSTR_OPCODE(cpu_id, opcode, len, is32, is64) \ + bx_instr_opcode(cpu_id, opcode, len, is32, is64) + +/* exceptional case and interrupt */ +#define BX_INSTR_EXCEPTION(cpu_id, vector, error_code) \ + bx_instr_exception(cpu_id, vector, error_code) + +#define BX_INSTR_INTERRUPT(cpu_id, vector) bx_instr_interrupt(cpu_id, vector) +#define BX_INSTR_HWINTERRUPT(cpu_id, vector, cs, eip) bx_instr_hwinterrupt(cpu_id, vector, cs, eip) + +/* TLB/CACHE control instruction executed */ +#define BX_INSTR_CLFLUSH(cpu_id, laddr, paddr) +#define BX_INSTR_CACHE_CNTRL(cpu_id, what) +#define BX_INSTR_TLB_CNTRL(cpu_id, what, new_cr3) +#define BX_INSTR_PREFETCH_HINT(cpu_id, what, seg, offset) + +/* execution */ +#define BX_INSTR_BEFORE_EXECUTION(cpu_id, i) +#define BX_INSTR_AFTER_EXECUTION(cpu_id, i) +#define BX_INSTR_REPEAT_ITERATION(cpu_id, i) + +/* memory access */ +#define BX_INSTR_LIN_ACCESS(cpu_id, lin, phy, len, rw) + +/* memory access */ +#define BX_INSTR_MEM_DATA_ACCESS(cpu_id, seg, offset, len, rw) \ + bx_instr_mem_data_access(cpu_id, seg, offset, len, rw) + +/* called from memory object */ +#define BX_INSTR_PHY_WRITE(cpu_id, addr, len) +#define BX_INSTR_PHY_READ(cpu_id, addr, len) + +/* feedback from device units */ +#define BX_INSTR_INP(addr, len) +#define BX_INSTR_INP2(addr, len, val) +#define BX_INSTR_OUTP(addr, len, val) + +/* wrmsr callback */ +#define BX_INSTR_WRMSR(cpu_id, addr, value) + +#else // BX_INSTRUMENTATION + +/* initialization/deinitialization of instrumentalization */ +#define BX_INSTR_INIT_ENV() +#define BX_INSTR_EXIT_ENV() + +/* simulation init, shutdown, reset */ +#define BX_INSTR_INITIALIZE(cpu_id) +#define BX_INSTR_EXIT(cpu_id) +#define BX_INSTR_RESET(cpu_id, type) +#define BX_INSTR_HLT(cpu_id) +#define BX_INSTR_MWAIT(cpu_id, addr, len, flags) +#define BX_INSTR_NEW_INSTRUCTION(cpu_id) + +/* called from command line debugger */ +#define BX_INSTR_DEBUG_PROMPT() +#define BX_INSTR_DEBUG_CMD(cmd) + +/* branch resoultion */ +#define BX_INSTR_CNEAR_BRANCH_TAKEN(cpu_id, new_eip) +#define BX_INSTR_CNEAR_BRANCH_NOT_TAKEN(cpu_id) +#define BX_INSTR_UCNEAR_BRANCH(cpu_id, what, new_eip) +#define BX_INSTR_FAR_BRANCH(cpu_id, what, new_cs, new_eip) + +/* decoding completed */ +#define BX_INSTR_OPCODE(cpu_id, opcode, len, is32, is64) + +/* exceptional case and interrupt */ +#define BX_INSTR_EXCEPTION(cpu_id, vector, error_code) +#define BX_INSTR_INTERRUPT(cpu_id, vector) +#define BX_INSTR_HWINTERRUPT(cpu_id, vector, cs, eip) + +/* TLB/CACHE control instruction executed */ +#define BX_INSTR_CLFLUSH(cpu_id, laddr, paddr) +#define BX_INSTR_CACHE_CNTRL(cpu_id, what) +#define BX_INSTR_TLB_CNTRL(cpu_id, what, new_cr3) +#define BX_INSTR_PREFETCH_HINT(cpu_id, what, seg, offset) + +/* execution */ +#define BX_INSTR_BEFORE_EXECUTION(cpu_id, i) +#define BX_INSTR_AFTER_EXECUTION(cpu_id, i) +#define BX_INSTR_REPEAT_ITERATION(cpu_id, i) + +/* memory access */ +#define BX_INSTR_LIN_ACCESS(cpu_id, lin, phy, len, rw) + +/* memory access */ +#define BX_INSTR_MEM_DATA_ACCESS(cpu_id, seg, offset, len, rw) + +/* called from memory object */ +#define BX_INSTR_PHY_WRITE(cpu_id, addr, len) +#define BX_INSTR_PHY_READ(cpu_id, addr, len) + +/* feedback from device units */ +#define BX_INSTR_INP(addr, len) +#define BX_INSTR_INP2(addr, len, val) +#define BX_INSTR_OUTP(addr, len, val) + +/* wrmsr callback */ +#define BX_INSTR_WRMSR(cpu_id, addr, value) + +#endif // BX_INSTRUMENTATION diff --git a/bochs/instrument/example1/Makefile.in b/bochs/instrument/example1/Makefile.in new file mode 100644 index 00000000..d1d5e758 --- /dev/null +++ b/bochs/instrument/example1/Makefile.in @@ -0,0 +1,72 @@ +# Copyright (C) 2001 The Bochs Project +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + + +@SUFFIX_LINE@ + +srcdir = @srcdir@ +VPATH = @srcdir@ + +SHELL = /bin/sh + +@SET_MAKE@ + +CC = @CC@ +CFLAGS = @CFLAGS@ +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +RANLIB = @RANLIB@ + + +# =========================================================== +# end of configurable options +# =========================================================== + + +BX_OBJS = \ + instrument.o + +BX_INCLUDES = + +BX_INCDIRS = -I../.. -I$(srcdir)/../.. -I. -I$(srcdir)/. + +.@CPP_SUFFIX@.o: + $(CXX) -c $(CXXFLAGS) $(BX_INCDIRS) @CXXFP@$< @OFP@$@ + + +.c.o: + $(CC) -c $(CFLAGS) $(BX_INCDIRS) @CFP@$< @OFP@$@ + + + +libinstrument.a: $(BX_OBJS) + @RMCOMMAND@ libinstrument.a + @MAKELIB@ $(BX_OBJS) + $(RANLIB) libinstrument.a + +$(BX_OBJS): $(BX_INCLUDES) + + +clean: + @RMCOMMAND@ *.o + @RMCOMMAND@ *.a + +dist-clean: clean + @RMCOMMAND@ Makefile diff --git a/bochs/instrument/example1/instrument.cc b/bochs/instrument/example1/instrument.cc new file mode 100644 index 00000000..17dee2ec --- /dev/null +++ b/bochs/instrument/example1/instrument.cc @@ -0,0 +1,197 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2006-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#include + +#include "bochs.h" +#include "cpu/cpu.h" +#include "disasm/disasm.h" + +bxInstrumentation *icpu = NULL; + +static disassembler bx_disassembler; + + +void bx_instr_init_env(void) {} +void bx_instr_exit_env(void) {} + +void bx_instr_initialize(unsigned cpu) +{ + assert(cpu < BX_SMP_PROCESSORS); + + if (icpu == NULL) + icpu = new bxInstrumentation[BX_SMP_PROCESSORS]; + + icpu[cpu].set_cpu_id(cpu); + + fprintf(stderr, "Initialize cpu %d\n", cpu); +} + +void bxInstrumentation::bx_instr_reset(unsigned type) +{ + valid = is_branch = 0; + num_data_accesses = 0; + active = 1; +} + +void bxInstrumentation::bx_instr_new_instruction() +{ + if (!active) return; + + if (valid) + { + char disasm_tbuf[512]; // buffer for instruction disassembly + unsigned length = opcode_size, n; + bx_disassembler.disasm(is32, is64, 0, 0, opcode, disasm_tbuf); + if(length != 0) + { + fprintf(stderr, "----------------------------------------------------------\n"); + fprintf(stderr, "CPU: %d: %s\n", cpu_id, disasm_tbuf); + fprintf(stderr, "LEN: %d\tBYTES: ", length); + for(n=0;nget_laddr(BX_SEG_REG_CS, new_eip); + + is_branch = 1; + is_taken = 1; + target_linear = laddr; +} + +void bxInstrumentation::bx_instr_cnear_branch_taken(bx_address new_eip) +{ + branch_taken(new_eip); +} + +void bxInstrumentation::bx_instr_cnear_branch_not_taken() +{ + if (!active || !valid) return; + + is_branch = 1; + is_taken = 0; +} + +void bxInstrumentation::bx_instr_ucnear_branch(unsigned what, bx_address new_eip) +{ + branch_taken(new_eip); +} + +void bxInstrumentation::bx_instr_far_branch(unsigned what, Bit16u new_cs, bx_address new_eip) +{ + branch_taken(new_eip); +} + +void bxInstrumentation::bx_instr_opcode(const Bit8u *opcode_bytes, unsigned len, bx_bool is32, bx_bool is64) +{ + if (!active) return; + + for(unsigned i=0;i= MAX_DATA_ACCESSES) + { + return; + } + + bx_address lin = BX_CPU(cpu_id)->get_laddr(seg, offset); + bx_bool page_valid = BX_CPU(cpu_id)->dbg_xlate_linear2phy(lin, &phy); + phy = A20ADDR(phy); + + // If linear translation doesn't exist, a paging exception will occur. + // Invalidate physical address data for now. + if (!page_valid) + { + phy = 0; + } + + data_access[num_data_accesses].laddr = lin; + data_access[num_data_accesses].paddr = phy; + data_access[num_data_accesses].op = rw; + data_access[num_data_accesses].size = len; + num_data_accesses++; +} diff --git a/bochs/instrument/example1/instrument.h b/bochs/instrument/example1/instrument.h new file mode 100644 index 00000000..d0a32016 --- /dev/null +++ b/bochs/instrument/example1/instrument.h @@ -0,0 +1,249 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2006-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +// possible types passed to BX_INSTR_TLB_CNTRL() +#define BX_INSTR_MOV_CR3 10 +#define BX_INSTR_INVLPG 11 +#define BX_INSTR_TASKSWITCH 12 + +// possible types passed to BX_INSTR_CACHE_CNTRL() +#define BX_INSTR_INVD 20 +#define BX_INSTR_WBINVD 21 + +// possible types passed to BX_INSTR_FAR_BRANCH() +#define BX_INSTR_IS_CALL 10 +#define BX_INSTR_IS_RET 11 +#define BX_INSTR_IS_IRET 12 +#define BX_INSTR_IS_JMP 13 +#define BX_INSTR_IS_INT 14 +#define BX_INSTR_IS_SYSCALL 15 +#define BX_INSTR_IS_SYSRET 16 +#define BX_INSTR_IS_SYSENTER 17 +#define BX_INSTR_IS_SYSEXIT 18 + +// possible types passed to BX_INSTR_PREFETCH_HINT() +#define BX_INSTR_PREFETCH_NTA 0 +#define BX_INSTR_PREFETCH_T0 1 +#define BX_INSTR_PREFETCH_T1 2 +#define BX_INSTR_PREFETCH_T2 3 + + +#if BX_INSTRUMENTATION + +class bxInstruction_c; + +void bx_instr_init_env(void); +void bx_instr_exit_env(void); +void bx_instr_initialize(unsigned cpu); + +// maximum size of an instruction +#define MAX_OPCODE_SIZE 16 + +// maximum physical addresses an instruction can generate +#define MAX_DATA_ACCESSES 1024 + +class bxInstrumentation { +public: + + bx_bool valid; // is current instruction valid + bx_bool active; // is active + + unsigned cpu_id; + + /* decoding */ + unsigned opcode_size; + Bit8u opcode[MAX_OPCODE_SIZE]; + bx_bool is32, is64; + + /* memory accesses */ + unsigned num_data_accesses; + struct { + bx_address laddr; // linear address + bx_phy_address paddr; // physical address + unsigned op; // BX_READ, BX_WRITE or BX_RW + unsigned size; // 1 .. 8 + } data_access[MAX_DATA_ACCESSES]; + + /* branch resolution and target */ + bx_bool is_branch; + bx_bool is_taken; + bx_address target_linear; + +public: + bxInstrumentation(): valid(0), active(0) {} + + void set_cpu_id(unsigned cpu) { cpu_id = cpu; } + + void activate() { active = 1; } + void deactivate() { active = 0; } + void toggle_active() { active = !active; } + bx_bool is_active() const { return active; } + + void bx_instr_reset(unsigned type); + void bx_instr_new_instruction(); + + void bx_instr_cnear_branch_taken(bx_address new_eip); + void bx_instr_cnear_branch_not_taken(); + void bx_instr_ucnear_branch(unsigned what, bx_address new_eip); + void bx_instr_far_branch(unsigned what, Bit16u new_cs, bx_address new_eip); + + void bx_instr_opcode(const Bit8u *opcode, unsigned len, bx_bool is32, bx_bool is64); + + void bx_instr_interrupt(unsigned vector); + void bx_instr_exception(unsigned vector, unsigned error_code); + void bx_instr_hwinterrupt(unsigned vector, Bit16u cs, bx_address eip); + + void bx_instr_mem_data_access(unsigned seg, bx_address offset, unsigned len, unsigned rw); + +private: + void branch_taken(bx_address new_eip); +}; + +void bx_instr_init(unsigned cpu); + +extern bxInstrumentation *icpu; + +/* initialization/deinitialization of instrumentalization*/ +#define BX_INSTR_INIT_ENV() bx_instr_init_env() +#define BX_INSTR_EXIT_ENV() bx_instr_exit_env() + +/* simulation init, shutdown, reset */ +#define BX_INSTR_INITIALIZE(cpu_id) bx_instr_initialize(cpu_id); +#define BX_INSTR_EXIT(cpu_id) +#define BX_INSTR_RESET(cpu_id, type) icpu[cpu_id].bx_instr_reset(type) +#define BX_INSTR_HLT(cpu_id) +#define BX_INSTR_MWAIT(cpu_id, addr, len, flags) + +#define BX_INSTR_NEW_INSTRUCTION(cpu_id) icpu[cpu_id].bx_instr_new_instruction() + +/* called from command line debugger */ +#define BX_INSTR_DEBUG_PROMPT() +#define BX_INSTR_DEBUG_CMD(cmd) + +/* branch resoultion */ +#define BX_INSTR_CNEAR_BRANCH_TAKEN(cpu_id, new_eip) icpu[cpu_id].bx_instr_cnear_branch_taken(new_eip) +#define BX_INSTR_CNEAR_BRANCH_NOT_TAKEN(cpu_id) icpu[cpu_id].bx_instr_cnear_branch_not_taken() +#define BX_INSTR_UCNEAR_BRANCH(cpu_id, what, new_eip) icpu[cpu_id].bx_instr_ucnear_branch(what, new_eip) +#define BX_INSTR_FAR_BRANCH(cpu_id, what, new_cs, new_eip) icpu[cpu_id].bx_instr_far_branch(what, new_cs, new_eip) + +/* decoding completed */ +#define BX_INSTR_OPCODE(cpu_id, opcode, len, is32, is64) \ + icpu[cpu_id].bx_instr_opcode(opcode, len, is32, is64) + +/* exceptional case and interrupt */ +#define BX_INSTR_EXCEPTION(cpu_id, vector, error_code) \ + icpu[cpu_id].bx_instr_exception(vector, error_code) + +#define BX_INSTR_INTERRUPT(cpu_id, vector) icpu[cpu_id].bx_instr_interrupt(vector) +#define BX_INSTR_HWINTERRUPT(cpu_id, vector, cs, eip) icpu[cpu_id].bx_instr_hwinterrupt(vector, cs, eip) + +/* TLB/CACHE control instruction executed */ +#define BX_INSTR_CLFLUSH(cpu_id, laddr, paddr) +#define BX_INSTR_CACHE_CNTRL(cpu_id, what) +#define BX_INSTR_TLB_CNTRL(cpu_id, what, new_cr3) +#define BX_INSTR_PREFETCH_HINT(cpu_id, what, seg, offset) + +/* execution */ +#define BX_INSTR_BEFORE_EXECUTION(cpu_id, i) +#define BX_INSTR_AFTER_EXECUTION(cpu_id, i) +#define BX_INSTR_REPEAT_ITERATION(cpu_id, i) + +/* memory access */ +#define BX_INSTR_LIN_ACCESS(cpu_id, lin, phy, len, rw) + +#define BX_INSTR_MEM_DATA_ACCESS(cpu_id, seg, offset, len, rw) \ + icpu[cpu_id].bx_instr_mem_data_access(seg, offset, len, rw) + +/* called from memory object */ +#define BX_INSTR_PHY_WRITE(cpu_id, addr, len) +#define BX_INSTR_PHY_READ(cpu_id, addr, len) + +/* feedback from device units */ +#define BX_INSTR_INP(addr, len) +#define BX_INSTR_INP2(addr, len, val) +#define BX_INSTR_OUTP(addr, len, val) + +/* wrmsr callback */ +#define BX_INSTR_WRMSR(cpu_id, addr, value) + +#else // BX_INSTRUMENTATION + +/* initialization/deinitialization of instrumentalization */ +#define BX_INSTR_INIT_ENV() +#define BX_INSTR_EXIT_ENV() + +/* simulation init, shutdown, reset */ +#define BX_INSTR_INITIALIZE(cpu_id) +#define BX_INSTR_EXIT(cpu_id) +#define BX_INSTR_RESET(cpu_id, type) +#define BX_INSTR_HLT(cpu_id) +#define BX_INSTR_MWAIT(cpu_id, addr, len, flags) +#define BX_INSTR_NEW_INSTRUCTION(cpu_id) + +/* called from command line debugger */ +#define BX_INSTR_DEBUG_PROMPT() +#define BX_INSTR_DEBUG_CMD(cmd) + +/* branch resoultion */ +#define BX_INSTR_CNEAR_BRANCH_TAKEN(cpu_id, new_eip) +#define BX_INSTR_CNEAR_BRANCH_NOT_TAKEN(cpu_id) +#define BX_INSTR_UCNEAR_BRANCH(cpu_id, what, new_eip) +#define BX_INSTR_FAR_BRANCH(cpu_id, what, new_cs, new_eip) + +/* decoding completed */ +#define BX_INSTR_OPCODE(cpu_id, opcode, len, is32, is64) + +/* exceptional case and interrupt */ +#define BX_INSTR_EXCEPTION(cpu_id, vector, error_code) +#define BX_INSTR_INTERRUPT(cpu_id, vector) +#define BX_INSTR_HWINTERRUPT(cpu_id, vector, cs, eip) + +/* TLB/CACHE control instruction executed */ +#define BX_INSTR_CLFLUSH(cpu_id, laddr, paddr) +#define BX_INSTR_CACHE_CNTRL(cpu_id, what) +#define BX_INSTR_TLB_CNTRL(cpu_id, what, new_cr3) +#define BX_INSTR_PREFETCH_HINT(cpu_id, what, seg, offset) + +/* execution */ +#define BX_INSTR_BEFORE_EXECUTION(cpu_id, i) +#define BX_INSTR_AFTER_EXECUTION(cpu_id, i) +#define BX_INSTR_REPEAT_ITERATION(cpu_id, i) + +/* memory access */ +#define BX_INSTR_LIN_ACCESS(cpu_id, lin, phy, len, rw) + +/* memory access */ +#define BX_INSTR_MEM_DATA_ACCESS(cpu_id, seg, offset, len, rw) + +/* called from memory object */ +#define BX_INSTR_PHY_WRITE(cpu_id, addr, len) +#define BX_INSTR_PHY_READ(cpu_id, addr, len) + +/* feedback from device units */ +#define BX_INSTR_INP(addr, len) +#define BX_INSTR_INP2(addr, len, val) +#define BX_INSTR_OUTP(addr, len, val) + +/* wrmsr callback */ +#define BX_INSTR_WRMSR(cpu_id, addr, value) + +#endif // BX_INSTRUMENTATION diff --git a/bochs/instrument/example2/Makefile.in b/bochs/instrument/example2/Makefile.in new file mode 100755 index 00000000..d1d5e758 --- /dev/null +++ b/bochs/instrument/example2/Makefile.in @@ -0,0 +1,72 @@ +# Copyright (C) 2001 The Bochs Project +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + + +@SUFFIX_LINE@ + +srcdir = @srcdir@ +VPATH = @srcdir@ + +SHELL = /bin/sh + +@SET_MAKE@ + +CC = @CC@ +CFLAGS = @CFLAGS@ +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +RANLIB = @RANLIB@ + + +# =========================================================== +# end of configurable options +# =========================================================== + + +BX_OBJS = \ + instrument.o + +BX_INCLUDES = + +BX_INCDIRS = -I../.. -I$(srcdir)/../.. -I. -I$(srcdir)/. + +.@CPP_SUFFIX@.o: + $(CXX) -c $(CXXFLAGS) $(BX_INCDIRS) @CXXFP@$< @OFP@$@ + + +.c.o: + $(CC) -c $(CFLAGS) $(BX_INCDIRS) @CFP@$< @OFP@$@ + + + +libinstrument.a: $(BX_OBJS) + @RMCOMMAND@ libinstrument.a + @MAKELIB@ $(BX_OBJS) + $(RANLIB) libinstrument.a + +$(BX_OBJS): $(BX_INCLUDES) + + +clean: + @RMCOMMAND@ *.o + @RMCOMMAND@ *.a + +dist-clean: clean + @RMCOMMAND@ Makefile diff --git a/bochs/instrument/example2/instrument.cc b/bochs/instrument/example2/instrument.cc new file mode 100755 index 00000000..d7979207 --- /dev/null +++ b/bochs/instrument/example2/instrument.cc @@ -0,0 +1,98 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +#include + +#include "bochs.h" +#include "cpu/cpu.h" + +struct bx_instr_ia_stats { + bx_bool active; + Bit32u ia_cnt[BX_IA_LAST]; + Bit32u total_cnt; + Bit32u interrupts; + Bit32u exceptions; +} *ia_stats; + +static logfunctions *instrument_log = new logfunctions (); +#define LOG_THIS instrument_log-> + +void bx_instr_initialize(unsigned cpu) +{ + assert(cpu < BX_SMP_PROCESSORS); + + if (ia_stats == NULL) + ia_stats = new bx_instr_ia_stats[BX_SMP_PROCESSORS]; + + ia_stats[cpu].active = 0; + + fprintf(stderr, "Initialize cpu %d instrumentation module\n", cpu); +} + +void bx_instr_reset(unsigned cpu, unsigned type) +{ + ia_stats[cpu].active = 1; + ia_stats[cpu].total_cnt = 0; + + for(int n=0; n < BX_IA_LAST; n++) + ia_stats[cpu].ia_cnt[n] = 0; + + ia_stats[cpu].interrupts = ia_stats[cpu].exceptions = 0; +} + +void bx_instr_interrupt(unsigned cpu, unsigned vector) +{ + if(ia_stats[cpu].active) ia_stats[cpu].interrupts++; +} + +void bx_instr_exception(unsigned cpu, unsigned vector, unsigned error_code) +{ + if(ia_stats[cpu].active) ia_stats[cpu].exceptions++; +} + +void bx_instr_hwinterrupt(unsigned cpu, unsigned vector, Bit16u cs, bx_address eip) +{ + if(ia_stats[cpu].active) ia_stats[cpu].interrupts++; +} + +#define IA_CNT_DUMP_THRESHOLD 100000000 /* 100M */ + +void bx_instr_before_execution(unsigned cpu, bxInstruction_c *i) +{ + if(ia_stats[cpu].active) { + ia_stats[cpu].ia_cnt[i->getIaOpcode()]++; + ia_stats[cpu].total_cnt++; + + if (ia_stats[cpu].total_cnt > IA_CNT_DUMP_THRESHOLD) { + printf("Dump IA stats for CPU %d\n", cpu); + printf("----------------------------------------------------------\n"); + printf("Interrupts: %d, Exceptions: %d\n", ia_stats[cpu].interrupts, ia_stats[cpu].exceptions); + for (int n=0;n < BX_IA_LAST; n++) { + if (ia_stats[cpu].ia_cnt[n] > 0) { + printf("%s: %f%%\n", get_bx_opcode_name(n), ia_stats[cpu].ia_cnt[n] * 100.0 / ia_stats[cpu].total_cnt); + ia_stats[cpu].ia_cnt[n] = 0; + } + } + ia_stats[cpu].interrupts = ia_stats[cpu].exceptions = ia_stats[cpu].total_cnt = 0; + } + } +} diff --git a/bochs/instrument/example2/instrument.h b/bochs/instrument/example2/instrument.h new file mode 100755 index 00000000..add72758 --- /dev/null +++ b/bochs/instrument/example2/instrument.h @@ -0,0 +1,187 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +// possible types passed to BX_INSTR_TLB_CNTRL() +#define BX_INSTR_MOV_CR3 10 +#define BX_INSTR_INVLPG 11 +#define BX_INSTR_TASKSWITCH 12 + +// possible types passed to BX_INSTR_CACHE_CNTRL() +#define BX_INSTR_INVD 20 +#define BX_INSTR_WBINVD 21 + +// possible types passed to BX_INSTR_FAR_BRANCH() +#define BX_INSTR_IS_CALL 10 +#define BX_INSTR_IS_RET 11 +#define BX_INSTR_IS_IRET 12 +#define BX_INSTR_IS_JMP 13 +#define BX_INSTR_IS_INT 14 +#define BX_INSTR_IS_SYSCALL 15 +#define BX_INSTR_IS_SYSRET 16 +#define BX_INSTR_IS_SYSENTER 17 +#define BX_INSTR_IS_SYSEXIT 18 + +// possible types passed to BX_INSTR_PREFETCH_HINT() +#define BX_INSTR_PREFETCH_NTA 0 +#define BX_INSTR_PREFETCH_T0 1 +#define BX_INSTR_PREFETCH_T1 2 +#define BX_INSTR_PREFETCH_T2 3 + +#if BX_INSTRUMENTATION + +class bxInstruction_c; + +// called from the CPU core + +void bx_instr_initialize(unsigned cpu); +void bx_instr_reset(unsigned cpu, unsigned type); + +void bx_instr_interrupt(unsigned cpu, unsigned vector); +void bx_instr_exception(unsigned cpu, unsigned vector, unsigned error_code); +void bx_instr_hwinterrupt(unsigned cpu, unsigned vector, Bit16u cs, bx_address eip); + +void bx_instr_before_execution(unsigned cpu, bxInstruction_c *i); + +/* initialization/deinitialization of instrumentalization*/ +#define BX_INSTR_INIT_ENV() +#define BX_INSTR_EXIT_ENV() + +/* simulation init, shutdown, reset */ +#define BX_INSTR_INITIALIZE(cpu_id) bx_instr_initialize(cpu_id) +#define BX_INSTR_EXIT(cpu_id) +#define BX_INSTR_RESET(cpu_id, type) bx_instr_reset(cpu_id, type) +#define BX_INSTR_HLT(cpu_id) +#define BX_INSTR_MWAIT(cpu_id, addr, len, flags) +#define BX_INSTR_NEW_INSTRUCTION(cpu_id) + +/* called from command line debugger */ +#define BX_INSTR_DEBUG_PROMPT() +#define BX_INSTR_DEBUG_CMD(cmd) + +/* branch resoultion */ +#define BX_INSTR_CNEAR_BRANCH_TAKEN(cpu_id, new_eip) +#define BX_INSTR_CNEAR_BRANCH_NOT_TAKEN(cpu_id) +#define BX_INSTR_UCNEAR_BRANCH(cpu_id, what, new_eip) +#define BX_INSTR_FAR_BRANCH(cpu_id, what, new_cs, new_eip) + +/* decoding completed */ +#define BX_INSTR_OPCODE(cpu_id, opcode, len, is32, is64) + +/* exceptional case and interrupt */ +#define BX_INSTR_EXCEPTION(cpu_id, vector, error_code) \ + bx_instr_exception(cpu_id, vector, error_code) + +#define BX_INSTR_INTERRUPT(cpu_id, vector) bx_instr_interrupt(cpu_id, vector) +#define BX_INSTR_HWINTERRUPT(cpu_id, vector, cs, eip) bx_instr_hwinterrupt(cpu_id, vector, cs, eip) + +/* TLB/CACHE control instruction executed */ +#define BX_INSTR_CLFLUSH(cpu_id, laddr, paddr) +#define BX_INSTR_CACHE_CNTRL(cpu_id, what) +#define BX_INSTR_TLB_CNTRL(cpu_id, what, new_cr3) +#define BX_INSTR_PREFETCH_HINT(cpu_id, what, seg, offset) + +/* execution */ +#define BX_INSTR_BEFORE_EXECUTION(cpu_id, i) bx_instr_before_execution(cpu_id, i) + +#define BX_INSTR_AFTER_EXECUTION(cpu_id, i) +#define BX_INSTR_REPEAT_ITERATION(cpu_id, i) + +/* memory access */ +#define BX_INSTR_LIN_ACCESS(cpu_id, lin, phy, len, rw) + +/* memory access */ +#define BX_INSTR_MEM_DATA_ACCESS(cpu_id, seg, offset, len, rw) + +/* called from memory object */ +#define BX_INSTR_PHY_WRITE(cpu_id, addr, len) +#define BX_INSTR_PHY_READ(cpu_id, addr, len) + +/* feedback from device units */ +#define BX_INSTR_INP(addr, len) +#define BX_INSTR_INP2(addr, len, val) +#define BX_INSTR_OUTP(addr, len, val) + +/* wrmsr callback */ +#define BX_INSTR_WRMSR(cpu_id, addr, value) + +#else // BX_INSTRUMENTATION + +/* initialization/deinitialization of instrumentalization */ +#define BX_INSTR_INIT_ENV() +#define BX_INSTR_EXIT_ENV() + +/* simulation init, shutdown, reset */ +#define BX_INSTR_INITIALIZE(cpu_id) +#define BX_INSTR_EXIT(cpu_id) +#define BX_INSTR_RESET(cpu_id, type) +#define BX_INSTR_HLT(cpu_id) +#define BX_INSTR_MWAIT(cpu_id, addr, len, flags) +#define BX_INSTR_NEW_INSTRUCTION(cpu_id) + +/* called from command line debugger */ +#define BX_INSTR_DEBUG_PROMPT() +#define BX_INSTR_DEBUG_CMD(cmd) + +/* branch resoultion */ +#define BX_INSTR_CNEAR_BRANCH_TAKEN(cpu_id, new_eip) +#define BX_INSTR_CNEAR_BRANCH_NOT_TAKEN(cpu_id) +#define BX_INSTR_UCNEAR_BRANCH(cpu_id, what, new_eip) +#define BX_INSTR_FAR_BRANCH(cpu_id, what, new_cs, new_eip) + +/* decoding completed */ +#define BX_INSTR_OPCODE(cpu_id, opcode, len, is32, is64) + +/* exceptional case and interrupt */ +#define BX_INSTR_EXCEPTION(cpu_id, vector, error_code) +#define BX_INSTR_INTERRUPT(cpu_id, vector) +#define BX_INSTR_HWINTERRUPT(cpu_id, vector, cs, eip) + +/* TLB/CACHE control instruction executed */ +#define BX_INSTR_CLFLUSH(cpu_id, laddr, paddr) +#define BX_INSTR_CACHE_CNTRL(cpu_id, what) +#define BX_INSTR_TLB_CNTRL(cpu_id, what, new_cr3) +#define BX_INSTR_PREFETCH_HINT(cpu_id, what, seg, offset) + +/* execution */ +#define BX_INSTR_BEFORE_EXECUTION(cpu_id, i) +#define BX_INSTR_AFTER_EXECUTION(cpu_id, i) +#define BX_INSTR_REPEAT_ITERATION(cpu_id, i) + +/* memory access */ +#define BX_INSTR_LIN_ACCESS(cpu_id, lin, phy, len, rw) + +/* memory access */ +#define BX_INSTR_MEM_DATA_ACCESS(cpu_id, seg, offset, len, rw) + +/* called from memory object */ +#define BX_INSTR_PHY_WRITE(cpu_id, addr, len) +#define BX_INSTR_PHY_READ(cpu_id, addr, len) + +/* feedback from device units */ +#define BX_INSTR_INP(addr, len) +#define BX_INSTR_INP2(addr, len, val) +#define BX_INSTR_OUTP(addr, len, val) + +/* wrmsr callback */ +#define BX_INSTR_WRMSR(cpu_id, addr, value) + +#endif // BX_INSTRUMENTATION diff --git a/bochs/instrument/instrumentation.txt b/bochs/instrument/instrumentation.txt new file mode 100755 index 00000000..ad5ef55a --- /dev/null +++ b/bochs/instrument/instrumentation.txt @@ -0,0 +1,254 @@ +README-instrumentation + +To use instrumentation features in bochs, you must compile in support for it. +You should build a custom instrumentation library in a separate directory in +the "instrument/" directory. To tell configure which instrumentation library +you want to use, use the "--enable-instrumentation" option. The default +library consists of a set of stubs, and the following are equivalent: + + ./configure [...] --enable-instrumentation + ./configure [...] --enable-instrumentation="instrument/stubs" + +You could make a separate directory with your custom library, for example +"instrument/myinstrument", copy the contents of the "instrument/stubs" +directory to it, then customize it. Use: + + ./configure [...] --enable-instrumentation="instrument/myinstrument" + +----------------------------------------------------------------------------- +BOCHS instrumentation callbacks + + + void bx_instr_init_env(); + +The callback is called when Bochs is initialized, before of reading .bochsrc. +It can be used for registration of parameters in siminterface. Then +when bx_instr_init() is called it can access configuration parameters defined +by bx_instr_init_env(), so instrumentalization module can use additional +options in .bochsrc. + + + void bx_instr_exit_env(); + +The callback is called each time Bochs exits. + + + void bx_instr_initialize(unsigned cpu); + +The callback is called each time, when Bochs initializes the CPU object. It +can be used for initialization of user's data, dynamic memory allocation and +etc. + + + void bx_instr_exit(unsigned cpu); + +The callback is called each time, when Bochs destructs the CPU object. It can +be used for destruction of user's data, allocated by bx_instr_init callback. + + + void bx_instr_reset(unsigned cpu, unsigned type); + +The callback is called each time, when Bochs resets the CPU object. It would +be executed once at the start of simulation and each time that user presses +RESET BUTTON on the simulator's control panel. + + + void bx_instr_hlt(unsigned cpu); + +The callback is called each time, when Bochs' emulated CPU enters HALT or +SHUTDOWN state. + + + void bx_instr_mwait(unsigned cpu, bx_phy_address addr, unsigned len, Bit32u flags); + +The callback is called each time, when Bochs' emulated CPU enters to the MWAIT +state. The callback receives monitored memory range and MWAIT flags as a +parameters. + + + void bx_instr_new_instruction(unsigned cpu); + +The callback is called each time, when Bochs completes (commits) already +finished instruction and starts a new one. + + + void bx_instr_cnear_branch_taken(unsigned cpu, bx_address new_eip); + +The callback is called each time, when currently executed instruction is a +conditional near branch and it is taken. + + + void bx_instr_cnear_branch_not_taken(unsigned cpu); + +The callback is called each time, when currently executed instruction is a +conditional near branch and it is not taken. + + + void bx_instr_ucnear_branch(unsigned cpu, unsigned what, bx_address new_eip); + +The callback is called each time, when currently executed instruction is an +unconditional near branch (always taken). + + + void bx_instr_far_branch(unsigned cpu, unsigned what, Bit16u new_cs, bx_address new_eip); + +The callback is called each time, when currently executed instruction is an +unconditional far branch (always taken). + + + void bx_instr_opcode(unsigned cpu, const Bit8u *opcode, unsigned len, bx_bool is32, bx_bool is64); + +The callback is called each time, when Bochs completes to decode a new +instruction. Through this callback function Bochs could provide an opcode of +the instruction, opcode length and an execution mode (16/32/64). + +Please note, that Bochs uses translation caches so each simulated instruction +might be executed multiple times but decoded only once. + + + void bx_instr_interrupt(unsigned cpu, unsigned vector); + +The callback is called each time, when Bochs simulator executes an interrupt +(software interrupt, hardware interrupt or an exception). + + + void bx_instr_exception(unsigned cpu, unsigned vector, unsigned error_code); + +The callback is called each time, when Bochs simulator executes an exception. + + + void bx_instr_hwinterrupt(unsigned cpu, unsigned vector, Bit16u cs, bx_address eip); + +The callback is called each time, when Bochs simulator executes a hardware +interrupt. + + + void bx_instr_clflush(unsigned cpu, bx_address laddr, bx_phy_address paddr); + +The callback is called each time the CLFLUSH instruction is executed. + + + void bx_instr_tlb_cntrl(unsigned cpu, unsigned what, bx_phy_address new_cr3); + void bx_instr_cache_cntrl(unsigned cpu, unsigned what); + +The callback is called each time, when Bochs simulator executes a cache/tlb +control instruction. + +Possible instruction types, passed through bx_instr_tlb_cntrl: + + #define BX_INSTR_MOV_CR3 10 + #define BX_INSTR_INVLPG 11 + #define BX_INSTR_TASKSWITCH 12 + +Possible instruction types, passed through bx_instr_cache_cntrl: + + #define BX_INSTR_INVD 20 + #define BX_INSTR_WBINVD 21 + + + void bx_instr_prefetch_hint(unsigned cpu, unsigned what, unsigned seg, bx_address offset); + +The callback is called each time, when Bochs simulator executes a PREFETCH +instruction. + +Possible PREFETCH types: + + #define BX_INSTR_PREFETCH_NTA 00 + #define BX_INSTR_PREFETCH_T0 01 + #define BX_INSTR_PREFETCH_T1 02 + #define BX_INSTR_PREFETCH_T2 03 + +The seg/offset arguments indicate the address of the requested prefetch. + + + void bx_instr_wrmsr(unsigned cpu, unsigned msr, Bit64u value); + +This callback is called each time when WRMSR instruction is executed. +MSR number and written value passed as parameters to the callback function. + + + void bx_instr_repeat_iteration(unsigned cpu, bxInstruction_c *i); + +The callback is called each time, when Bochs simulator starts a new repeat +iteration. + + + void bx_instr_before_execution(unsigned cpu, bxInstruction_c *i); + +The callback is called each time, when Bochs simulator starts a new +instruction execution. In case of repeat instruction the callback will +be called only once before the first iteration will be started. + + + void bx_instr_after_execution(unsigned cpu, bxInstruction_c *i); + +The callback is called each time, when Bochs simulator finishes any +instruction execution. In case of repeat instruction the callback will +be called only once after all repeat iterations. + + + void bx_instr_lin_access(unsigned cpu, bx_address lin, bx_address phy, unsigned len, unsigned rw); + +The callback is called each time, when Bochs simulator executes a linear +memory access. Note that no page split accesses will be generated because +Bochs splits page split accesses to two different memory accesses during its +execution flow. The callback also will not be generated in case of direct +physical memory access like in SMM, VMM or SVM modes. + +Possible access types are: BX_READ, BX_WRITE and BX_RW. + +Currently the callback is not supported when repeat-speedups optimization is +enabled. + + + void bx_instr_mem_data_access(unsigned cpu, unsigned seg, bx_address offset, unsigned len, unsigned rw); + +The callback is called each time, when Bochs simulator executes segment based +linear memory access. In contrast to previous callback it will be called even +if memory access fails because of any reason (for example segment protection +failure or page fault). + +The callback will not be called for system memory accesses like sys desriptor +tables reads/writes or new stack pushes during far call or exception. + + + void bx_instr_phy_read(unsigned cpu, bx_address addr, unsigned len); + void bx_instr_phy_write(unsigned cpu, bx_address addr, unsigned len); + +These callback functions are the feedback from external memory system. + + + void bx_instr_inp(Bit16u addr, unsigned len); + void bx_instr_inp2(Bit16u addr, unsigned len, unsigned val); + void bx_instr_outp(Bit16u addr, unsigned len, unsigned val); + +These callback functions are a feedback from various system devices. + +----------------------------------------------------------------------------- +Known problems: + +1. BX_INSTR_LIN_ACCESS doesn't work when repeat-speedups feature is enabled. + +2. BX_INSTR_MEM_DATA doesn't work when repeat-speedups feature is enabled. + +Feature requests: + +1. BX_INSTR_CNEAR_BRANCH_NOT_TAKEN callback should have an additional + 'not taken' new_EIP parameter. + +2. BX_INSTR_SMI, BX_INSTR_NMI, BX_INSTR_SIPI and other external events + callbacks + +3. ??? + +While using Bochs as a reference model for simulations, the simulator needs +information about what loads/stores are taking place with each instruction. +Presumably, that is what the BX_INSTR_MEM_DATA() instrumentation macros +cover (which is the place where our simulator hooks up). + +The RETnear_xxx() functions call access_linear() directly, rather than call +read_virtual_xxx() functions. This is a problem for code making use of the +BX_INSTR_MEM_DATA() hook because it does not get called for these +instructions. Should this be changed along with some other instructions +that exhibit this? + Brian Slechta diff --git a/bochs/instrument/stubs/Makefile.in b/bochs/instrument/stubs/Makefile.in new file mode 100644 index 00000000..d1d5e758 --- /dev/null +++ b/bochs/instrument/stubs/Makefile.in @@ -0,0 +1,72 @@ +# Copyright (C) 2001 The Bochs Project +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + + +@SUFFIX_LINE@ + +srcdir = @srcdir@ +VPATH = @srcdir@ + +SHELL = /bin/sh + +@SET_MAKE@ + +CC = @CC@ +CFLAGS = @CFLAGS@ +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +RANLIB = @RANLIB@ + + +# =========================================================== +# end of configurable options +# =========================================================== + + +BX_OBJS = \ + instrument.o + +BX_INCLUDES = + +BX_INCDIRS = -I../.. -I$(srcdir)/../.. -I. -I$(srcdir)/. + +.@CPP_SUFFIX@.o: + $(CXX) -c $(CXXFLAGS) $(BX_INCDIRS) @CXXFP@$< @OFP@$@ + + +.c.o: + $(CC) -c $(CFLAGS) $(BX_INCDIRS) @CFP@$< @OFP@$@ + + + +libinstrument.a: $(BX_OBJS) + @RMCOMMAND@ libinstrument.a + @MAKELIB@ $(BX_OBJS) + $(RANLIB) libinstrument.a + +$(BX_OBJS): $(BX_INCLUDES) + + +clean: + @RMCOMMAND@ *.o + @RMCOMMAND@ *.a + +dist-clean: clean + @RMCOMMAND@ Makefile diff --git a/bochs/instrument/stubs/instrument.cc b/bochs/instrument/stubs/instrument.cc new file mode 100644 index 00000000..852b8dad --- /dev/null +++ b/bochs/instrument/stubs/instrument.cc @@ -0,0 +1,72 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2006-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +#include "bochs.h" + +#if BX_INSTRUMENTATION + +void bx_instr_init_env(void) {} +void bx_instr_exit_env(void) {} + +void bx_instr_initialize(unsigned cpu) {} +void bx_instr_exit(unsigned cpu) {} +void bx_instr_reset(unsigned cpu, unsigned type) {} +void bx_instr_hlt(unsigned cpu) {} +void bx_instr_mwait(unsigned cpu, bx_phy_address addr, unsigned len, Bit32u flags) {} +void bx_instr_new_instruction(unsigned cpu) {} + +void bx_instr_debug_promt() {} +void bx_instr_debug_cmd(const char *cmd) {} + +void bx_instr_cnear_branch_taken(unsigned cpu, bx_address new_eip) {} +void bx_instr_cnear_branch_not_taken(unsigned cpu) {} +void bx_instr_ucnear_branch(unsigned cpu, unsigned what, bx_address new_eip) {} +void bx_instr_far_branch(unsigned cpu, unsigned what, Bit16u new_cs, bx_address new_eip) {} + +void bx_instr_opcode(unsigned cpu, const Bit8u *opcode, unsigned len, bx_bool is32, bx_bool is64) {} + +void bx_instr_interrupt(unsigned cpu, unsigned vector) {} +void bx_instr_exception(unsigned cpu, unsigned vector, unsigned error_code) {} +void bx_instr_hwinterrupt(unsigned cpu, unsigned vector, Bit16u cs, bx_address eip) {} + +void bx_instr_tlb_cntrl(unsigned cpu, unsigned what, bx_phy_address new_cr3) {} +void bx_instr_clflush(unsigned cpu, bx_address laddr, bx_phy_address paddr) {} +void bx_instr_cache_cntrl(unsigned cpu, unsigned what) {} +void bx_instr_prefetch_hint(unsigned cpu, unsigned what, unsigned seg, bx_address offset) {} + +void bx_instr_before_execution(unsigned cpu, bxInstruction_c *i) {} +void bx_instr_after_execution(unsigned cpu, bxInstruction_c *i) {} +void bx_instr_repeat_iteration(unsigned cpu, bxInstruction_c *i) {} + +void bx_instr_inp(Bit16u addr, unsigned len) {} +void bx_instr_inp2(Bit16u addr, unsigned len, unsigned val) {} +void bx_instr_outp(Bit16u addr, unsigned len, unsigned val) {} + +void bx_instr_mem_data_access(unsigned cpu, unsigned seg, bx_address offset, unsigned len, unsigned rw) {} +void bx_instr_lin_access(unsigned cpu, bx_address lin, bx_address phy, unsigned len, unsigned rw) {} + +void bx_instr_phy_write(unsigned cpu, bx_address addr, unsigned len) {} +void bx_instr_phy_read(unsigned cpu, bx_address addr, unsigned len) {} + +void bx_instr_wrmsr(unsigned cpu, unsigned addr, Bit64u value) {} + +#endif diff --git a/bochs/instrument/stubs/instrument.h b/bochs/instrument/stubs/instrument.h new file mode 100644 index 00000000..b214adf2 --- /dev/null +++ b/bochs/instrument/stubs/instrument.h @@ -0,0 +1,228 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2006-2009 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +// possible types passed to BX_INSTR_TLB_CNTRL() +#define BX_INSTR_MOV_CR3 10 +#define BX_INSTR_INVLPG 11 +#define BX_INSTR_TASKSWITCH 12 + +// possible types passed to BX_INSTR_CACHE_CNTRL() +#define BX_INSTR_INVD 20 +#define BX_INSTR_WBINVD 21 + +// possible types passed to BX_INSTR_FAR_BRANCH() +#define BX_INSTR_IS_CALL 10 +#define BX_INSTR_IS_RET 11 +#define BX_INSTR_IS_IRET 12 +#define BX_INSTR_IS_JMP 13 +#define BX_INSTR_IS_INT 14 +#define BX_INSTR_IS_SYSCALL 15 +#define BX_INSTR_IS_SYSRET 16 +#define BX_INSTR_IS_SYSENTER 17 +#define BX_INSTR_IS_SYSEXIT 18 + +// possible types passed to BX_INSTR_PREFETCH_HINT() +#define BX_INSTR_PREFETCH_NTA 0 +#define BX_INSTR_PREFETCH_T0 1 +#define BX_INSTR_PREFETCH_T1 2 +#define BX_INSTR_PREFETCH_T2 3 + + +#if BX_INSTRUMENTATION + +class bxInstruction_c; + +void bx_instr_init_env(void); +void bx_instr_exit_env(void); + +// called from the CPU core + +void bx_instr_initialize(unsigned cpu); +void bx_instr_exit(unsigned cpu); +void bx_instr_reset(unsigned cpu, unsigned type); +void bx_instr_hlt(unsigned cpu); +void bx_instr_mwait(unsigned cpu, bx_phy_address addr, unsigned len, Bit32u flags); +void bx_instr_new_instruction(unsigned cpu); + +void bx_instr_debug_promt(); +void bx_instr_debug_cmd(const char *cmd); + +void bx_instr_cnear_branch_taken(unsigned cpu, bx_address new_eip); +void bx_instr_cnear_branch_not_taken(unsigned cpu); +void bx_instr_ucnear_branch(unsigned cpu, unsigned what, bx_address new_eip); +void bx_instr_far_branch(unsigned cpu, unsigned what, Bit16u new_cs, bx_address new_eip); + +void bx_instr_opcode(unsigned cpu, const Bit8u *opcode, unsigned len, bx_bool is32, bx_bool is64); + +void bx_instr_interrupt(unsigned cpu, unsigned vector); +void bx_instr_exception(unsigned cpu, unsigned vector, unsigned error_code); +void bx_instr_hwinterrupt(unsigned cpu, unsigned vector, Bit16u cs, bx_address eip); + +void bx_instr_tlb_cntrl(unsigned cpu, unsigned what, bx_phy_address new_cr3); +void bx_instr_cache_cntrl(unsigned cpu, unsigned what); +void bx_instr_prefetch_hint(unsigned cpu, unsigned what, unsigned seg, bx_address offset); +void bx_instr_clflush(unsigned cpu, bx_address laddr, bx_phy_address paddr); + +void bx_instr_before_execution(unsigned cpu, bxInstruction_c *i); +void bx_instr_after_execution(unsigned cpu, bxInstruction_c *i); +void bx_instr_repeat_iteration(unsigned cpu, bxInstruction_c *i); + +void bx_instr_inp(Bit16u addr, unsigned len); +void bx_instr_inp2(Bit16u addr, unsigned len, unsigned val); +void bx_instr_outp(Bit16u addr, unsigned len, unsigned val); + +void bx_instr_mem_data_access(unsigned cpu, unsigned seg, bx_address offset, unsigned len, unsigned rw); +void bx_instr_lin_access(unsigned cpu, bx_address lin, bx_address phy, unsigned len, unsigned rw); + +void bx_instr_phy_write(unsigned cpu, bx_address addr, unsigned len); +void bx_instr_phy_read(unsigned cpu, bx_address addr, unsigned len); + +void bx_instr_wrmsr(unsigned cpu, unsigned addr, Bit64u value); + +/* initialization/deinitialization of instrumentalization*/ +#define BX_INSTR_INIT_ENV() bx_instr_init_env() +#define BX_INSTR_EXIT_ENV() bx_instr_exit_env() + +/* simulation init, shutdown, reset */ +#define BX_INSTR_INITIALIZE(cpu_id) bx_instr_initialize(cpu_id) +#define BX_INSTR_EXIT(cpu_id) bx_instr_exit(cpu_id) +#define BX_INSTR_RESET(cpu_id, type) bx_instr_reset(cpu_id, type) +#define BX_INSTR_HLT(cpu_id) bx_instr_hlt(cpu_id) + +#define BX_INSTR_MWAIT(cpu_id, addr, len, flags) \ + bx_instr_mwait(cpu_id, addr, len, flags) + +#define BX_INSTR_NEW_INSTRUCTION(cpu_id) bx_instr_new_instruction(cpu_id) + +/* called from command line debugger */ +#define BX_INSTR_DEBUG_PROMPT() bx_instr_debug_promt() +#define BX_INSTR_DEBUG_CMD(cmd) bx_instr_debug_cmd(cmd) + +/* branch resoultion */ +#define BX_INSTR_CNEAR_BRANCH_TAKEN(cpu_id, new_eip) bx_instr_cnear_branch_taken(cpu_id, new_eip) +#define BX_INSTR_CNEAR_BRANCH_NOT_TAKEN(cpu_id) bx_instr_cnear_branch_not_taken(cpu_id) +#define BX_INSTR_UCNEAR_BRANCH(cpu_id, what, new_eip) bx_instr_ucnear_branch(cpu_id, what, new_eip) +#define BX_INSTR_FAR_BRANCH(cpu_id, what, new_cs, new_eip) bx_instr_far_branch(cpu_id, what, new_cs, new_eip) + +/* decoding completed */ +#define BX_INSTR_OPCODE(cpu_id, opcode, len, is32, is64) \ + bx_instr_opcode(cpu_id, opcode, len, is32, is64) + +/* exceptional case and interrupt */ +#define BX_INSTR_EXCEPTION(cpu_id, vector, error_code) \ + bx_instr_exception(cpu_id, vector, error_code) + +#define BX_INSTR_INTERRUPT(cpu_id, vector) bx_instr_interrupt(cpu_id, vector) +#define BX_INSTR_HWINTERRUPT(cpu_id, vector, cs, eip) bx_instr_hwinterrupt(cpu_id, vector, cs, eip) + +/* TLB/CACHE control instruction executed */ +#define BX_INSTR_CLFLUSH(cpu_id, laddr, paddr) bx_instr_clflush(cpu_id, laddr, paddr) +#define BX_INSTR_CACHE_CNTRL(cpu_id, what) bx_instr_cache_cntrl(cpu_id, what) +#define BX_INSTR_TLB_CNTRL(cpu_id, what, new_cr3) bx_instr_tlb_cntrl(cpu_id, what, new_cr3) +#define BX_INSTR_PREFETCH_HINT(cpu_id, what, seg, offset) \ + bx_instr_prefetch_hint(cpu_id, what, seg, offset) + +/* execution */ +#define BX_INSTR_BEFORE_EXECUTION(cpu_id, i) bx_instr_before_execution(cpu_id, i) +#define BX_INSTR_AFTER_EXECUTION(cpu_id, i) bx_instr_after_execution(cpu_id, i) +#define BX_INSTR_REPEAT_ITERATION(cpu_id, i) bx_instr_repeat_iteration(cpu_id, i) + +/* memory access */ +#define BX_INSTR_LIN_ACCESS(cpu_id, lin, phy, len, rw) bx_instr_lin_access(cpu_id, lin, phy, len, rw) + +/* memory access */ +#define BX_INSTR_MEM_DATA_ACCESS(cpu_id, seg, offset, len, rw) bx_instr_mem_data_access(cpu_id, seg, offset, len, rw) + +/* called from memory object */ +#define BX_INSTR_PHY_WRITE(cpu_id, addr, len) bx_instr_phy_write(cpu_id, addr, len) +#define BX_INSTR_PHY_READ(cpu_id, addr, len) bx_instr_phy_read(cpu_id, addr, len) + +/* feedback from device units */ +#define BX_INSTR_INP(addr, len) bx_instr_inp(addr, len) +#define BX_INSTR_INP2(addr, len, val) bx_instr_inp2(addr, len, val) +#define BX_INSTR_OUTP(addr, len, val) bx_instr_outp(addr, len, val) + +/* wrmsr callback */ +#define BX_INSTR_WRMSR(cpu_id, addr, value) bx_instr_wrmsr(cpu_id, addr, value) + +#else + +/* initialization/deinitialization of instrumentalization */ +#define BX_INSTR_INIT_ENV() +#define BX_INSTR_EXIT_ENV() + +/* simulation init, shutdown, reset */ +#define BX_INSTR_INITIALIZE(cpu_id) +#define BX_INSTR_EXIT(cpu_id) +#define BX_INSTR_RESET(cpu_id, type) +#define BX_INSTR_HLT(cpu_id) +#define BX_INSTR_MWAIT(cpu_id, addr, len, flags) +#define BX_INSTR_NEW_INSTRUCTION(cpu_id) + +/* called from command line debugger */ +#define BX_INSTR_DEBUG_PROMPT() +#define BX_INSTR_DEBUG_CMD(cmd) + +/* branch resoultion */ +#define BX_INSTR_CNEAR_BRANCH_TAKEN(cpu_id, new_eip) +#define BX_INSTR_CNEAR_BRANCH_NOT_TAKEN(cpu_id) +#define BX_INSTR_UCNEAR_BRANCH(cpu_id, what, new_eip) +#define BX_INSTR_FAR_BRANCH(cpu_id, what, new_cs, new_eip) + +/* decoding completed */ +#define BX_INSTR_OPCODE(cpu_id, opcode, len, is32, is64) + +/* exceptional case and interrupt */ +#define BX_INSTR_EXCEPTION(cpu_id, vector, error_code) +#define BX_INSTR_INTERRUPT(cpu_id, vector) +#define BX_INSTR_HWINTERRUPT(cpu_id, vector, cs, eip) + +/* TLB/CACHE control instruction executed */ +#define BX_INSTR_CLFLUSH(cpu_id, laddr, paddr) +#define BX_INSTR_CACHE_CNTRL(cpu_id, what) +#define BX_INSTR_TLB_CNTRL(cpu_id, what, new_cr3) +#define BX_INSTR_PREFETCH_HINT(cpu_id, what, seg, offset) + +/* execution */ +#define BX_INSTR_BEFORE_EXECUTION(cpu_id, i) +#define BX_INSTR_AFTER_EXECUTION(cpu_id, i) +#define BX_INSTR_REPEAT_ITERATION(cpu_id, i) + +/* memory access */ +#define BX_INSTR_LIN_ACCESS(cpu_id, lin, phy, len, rw) + +/* memory access */ +#define BX_INSTR_MEM_DATA_ACCESS(cpu_id, seg, offset, len, rw) + +/* called from memory object */ +#define BX_INSTR_PHY_WRITE(cpu_id, addr, len) +#define BX_INSTR_PHY_READ(cpu_id, addr, len) + +/* feedback from device units */ +#define BX_INSTR_INP(addr, len) +#define BX_INSTR_INP2(addr, len, val) +#define BX_INSTR_OUTP(addr, len, val) + +/* wrmsr callback */ +#define BX_INSTR_WRMSR(cpu_id, addr, value) + +#endif diff --git a/bochs/iodev/Makefile.in b/bochs/iodev/Makefile.in new file mode 100644 index 00000000..8ef3da7a --- /dev/null +++ b/bochs/iodev/Makefile.in @@ -0,0 +1,899 @@ +# Copyright (C) 2001 The Bochs Project +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Makefile for the iodev component of bochs + + +@SUFFIX_LINE@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +srcdir = @srcdir@ +VPATH = @srcdir@ +bindir = @bindir@ +libdir = @libdir@ +datarootdir = @datarootdir@ +mandir = @mandir@ +man1dir = $(mandir)/man1 +man5dir = $(mandir)/man5 +docdir = $(datarootdir)/doc/bochs +sharedir = $(datarootdir)/bochs +top_builddir = .. +top_srcdir = @top_srcdir@ + +SHELL = /bin/sh + +@SET_MAKE@ + +CXX = @CXX@ +CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@ @GUI_CXXFLAGS@ + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +RANLIB = @RANLIB@ +PLUGIN_PATH=@libdir@ +top_builddir = .. +LIBTOOL=@LIBTOOL@ +WIN32_DLL_IMPORT_LIBRARY=../dllexports.a + +CDROM_OBJS = @CDROM_OBJS@ +SOUNDLOW_OBJS = @SOUNDLOW_OBJS@ +NETLOW_OBJS = @NETLOW_OBJS@ +USBDEV_OBJS = @USBDEV_OBJS@ +SCSI_OBJS = @SCSI_OBJS@ + +BX_INCDIRS = -I.. -I$(srcdir)/.. -I../@INSTRUMENT_DIR@ -I$(srcdir)/../@INSTRUMENT_DIR@ +LOCAL_CXXFLAGS = $(MCH_CFLAGS) + +PCIDEV_CXXFLAGS = -I$(srcdir)/../host/linux/pcidev + +OBJS_THAT_CANNOT_BE_PLUGINS = \ + devices.o \ + virt_timer.o \ + slowdown_timer.o \ + $(MCH_OBJS) + +OBJS_THAT_CAN_BE_PLUGINS = \ + pic.o \ + pit_wrap.o \ + serial.o \ + parallel.o \ + floppy.o \ + keyboard.o \ + vga.o \ + biosdev.o \ + cmos.o \ + harddrv.o \ + hdimage.o \ + dma.o \ + unmapped.o \ + extfpuirq.o \ + speaker.o \ + busmouse.o \ + ioapic.o \ + soundmod.o \ + @GAME_OBJS@ \ + @PCI_OBJ@ \ + @USBCORE_OBJ@ \ + @SB16_OBJS@ \ + @NE2K_OBJS@ \ + @IODEBUG_OBJS@ + +OBJS_THAT_SUPPORT_OTHER_PLUGINS = \ + pit82c54.o \ + scancodes.o \ + serial_raw.o \ + svga_cirrus.o \ + vmware3.o \ + vmware4.o \ + vvfat.o \ + $(CDROM_OBJS) \ + $(SOUNDLOW_OBJS) \ + $(NETLOW_OBJS) \ + $(USBDEV_OBJS) \ + $(SCSI_OBJS) + +NONPLUGIN_OBJS = @IODEV_NON_PLUGIN_OBJS@ +PLUGIN_OBJS = @IODEV_PLUGIN_OBJS@ +SOUND_LINK_OPTS = @SOUND_LINK_OPTS@ + +all: libiodev.a + +plugins: $(PLUGIN_OBJS:@PLUGIN_LIBNAME_TRANSFORMATION@) + +libiodev.a: $(NONPLUGIN_OBJS) + @RMCOMMAND@ libiodev.a + @MAKELIB@ $(NONPLUGIN_OBJS) + @RANLIB@ libiodev.a + +# standard compile rule for C++ files +.@CPP_SUFFIX@.o: + $(CXX) @DASH@c $(CXXFLAGS) $(LOCAL_CXXFLAGS) @CXXFP@$< @OFP@$@ + +pcidev.o : pcidev.@CPP_SUFFIX@ + $(CXX) @DASH@c $(CXXFLAGS) $(LOCAL_CXXFLAGS) $(PCIDEV_CXXFLAGS) @CXXFP@$< @OFP@$@ + +##### building plugins with libtool +%.lo: %.@CPP_SUFFIX@ + $(LIBTOOL) --mode=compile $(CXX) -c $(CXXFLAGS) $(LOCAL_CXXFLAGS) $< -o $@ + +pcidev.lo : pcidev.@CPP_SUFFIX@ + $(LIBTOOL) --mode=compile $(CXX) -c $(CXXFLAGS) $(LOCAL_CXXFLAGS) $(PCIDEV_CXXFLAGS) $< -o $@ + +libbx_%.la: %.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) + +# special link rules for plugins that require more than one object file +libbx_harddrv.la: harddrv.lo $(CDROM_OBJS:.o=.lo) + $(LIBTOOL) --mode=link $(CXX) -module harddrv.lo $(CDROM_OBJS:.o=.lo) -o libbx_harddrv.la -rpath $(PLUGIN_PATH) + +libbx_hdimage.la: hdimage.lo vmware3.lo vmware4.lo vvfat.lo + $(LIBTOOL) --mode=link $(CXX) -module hdimage.lo vmware3.lo vmware4.lo vvfat.lo -o libbx_hdimage.la -rpath $(PLUGIN_PATH) + +libbx_keyboard.la: keyboard.lo scancodes.lo + $(LIBTOOL) --mode=link $(CXX) -module keyboard.lo scancodes.lo -o libbx_keyboard.la -rpath $(PLUGIN_PATH) + +libbx_pit_wrap.la: pit82c54.lo pit_wrap.lo + $(LIBTOOL) --mode=link $(CXX) -module pit82c54.lo pit_wrap.lo -o libbx_pit.la -rpath $(PLUGIN_PATH) + +libbx_soundmod.la: soundmod.lo $(SOUNDLOW_OBJS:.o=.lo) + $(LIBTOOL) --mode=link $(CXX) -module soundmod.lo $(SOUNDLOW_OBJS:.o=.lo) -o libbx_soundmod.la -rpath $(PLUGIN_PATH) $(SOUND_LINK_OPTS) + +libbx_ne2k.la: ne2k.lo $(NETLOW_OBJS:.o=.lo) + $(LIBTOOL) --mode=link $(CXX) -module ne2k.lo $(NETLOW_OBJS:.o=.lo) -o libbx_ne2k.la -rpath $(PLUGIN_PATH) + +libbx_pcipnic.la: pcipnic.lo $(NETLOW_OBJS:.o=.lo) + $(LIBTOOL) --mode=link $(CXX) -module pcipnic.lo $(NETLOW_OBJS:.o=.lo) -o libbx_pcipnic.la -rpath $(PLUGIN_PATH) + +libbx_serial.la: serial.lo serial_raw.lo + $(LIBTOOL) --mode=link $(CXX) -module serial.lo serial_raw.lo -o libbx_serial.la -rpath $(PLUGIN_PATH) + +libbx_vga.la: vga.lo svga_cirrus.lo + $(LIBTOOL) --mode=link $(CXX) -module vga.lo svga_cirrus.lo -o libbx_vga.la -rpath $(PLUGIN_PATH) + +libbx_usb_common.la: usb_common.lo $(USBDEV_OBJS:.o=.lo) scsi_device.lo $(CDROM_OBJS:.o=.lo) + $(LIBTOOL) --mode=link $(CXX) -module usb_common.lo $(USBDEV_OBJS:.o=.lo) scsi_device.lo $(CDROM_OBJS:.o=.lo) -o libbx_usb_common.la -rpath $(PLUGIN_PATH) + +#### building DLLs for win32 (tested on cygwin only) +bx_%.dll: %.o + $(CXX) $(CXXFLAGS) -shared -o $@ $< $(WIN32_DLL_IMPORT_LIBRARY) + +# special link rules for plugins that require more than one object file +bx_harddrv.dll: harddrv.o $(CDROM_OBJS) + $(CXX) $(CXXFLAGS) -shared -o bx_harddrv.dll harddrv.o $(CDROM_OBJS) $(WIN32_DLL_IMPORT_LIBRARY) + +bx_hdimage.dll: hdimage.o vmware3.o vmware4.o vvfat.o + $(CXX) $(CXXFLAGS) -shared -o bx_hdimage.dll hdimage.o vmware3.o vmware4.o vvfat.o $(WIN32_DLL_IMPORT_LIBRARY) + +bx_keyboard.dll: keyboard.o scancodes.o + $(CXX) $(CXXFLAGS) -shared -o bx_keyboard.dll keyboard.o scancodes.o $(WIN32_DLL_IMPORT_LIBRARY) + +bx_pit_wrap.dll: pit82c54.o pit_wrap.o + $(CXX) $(CXXFLAGS) -shared -o bx_pit.dll pit82c54.o pit_wrap.o $(WIN32_DLL_IMPORT_LIBRARY) + +bx_soundmod.dll: soundmod.o $(SOUNDLOW_OBJS) + $(CXX) $(CXXFLAGS) -shared -o bx_soundmod.dll soundmod.o $(SOUNDLOW_OBJS) $(WIN32_DLL_IMPORT_LIBRARY) -lwinmm + +bx_ne2k.dll: ne2k.o $(NETLOW_OBJS) + $(CXX) $(CXXFLAGS) -shared -o bx_ne2k.dll ne2k.o $(NETLOW_OBJS) $(WIN32_DLL_IMPORT_LIBRARY) + +bx_pcipnic.dll: pcipnic.o $(NETLOW_OBJS) + $(CXX) $(CXXFLAGS) -shared -o bx_pcipnic.dll pcipnic.o $(NETLOW_OBJS) $(WIN32_DLL_IMPORT_LIBRARY) + +bx_gameport.dll: gameport.o + $(CXX) $(CXXFLAGS) -shared -o bx_gameport.dll gameport.o $(WIN32_DLL_IMPORT_LIBRARY) -lwinmm + +bx_serial.dll: serial.o serial_raw.o + $(CXX) $(CXXFLAGS) -shared -o bx_serial.dll serial.o serial_raw.o $(WIN32_DLL_IMPORT_LIBRARY) -lwsock32 + +bx_vga.dll: vga.o svga_cirrus.o + $(CXX) $(CXXFLAGS) -shared -o bx_vga.dll vga.o svga_cirrus.o $(WIN32_DLL_IMPORT_LIBRARY) + +bx_usb_common.dll: usb_common.o $(USBDEV_OBJS) scsi_device.o $(CDROM_OBJS) + $(CXX) $(CXXFLAGS) -shared -o bx_usb_common.dll usb_common.o $(USBDEV_OBJS) scsi_device.o $(CDROM_OBJS) $(WIN32_DLL_IMPORT_LIBRARY) + +##### end DLL section + +clean: + @RMCOMMAND@ -rf .libs *.lo *.o *.la *.a *.dll + +dist-clean: clean + @RMCOMMAND@ Makefile + +########################################### +# dependencies generated by +# gcc -MM -I.. -I../instrument/stubs *.cc | sed -e 's/\.cc/.@CPP_SUFFIX@/g' +# gcc -MM -I.. -I../instrument/stubs *.cc | \ +# sed -e 's/\.cc/.@CPP_SUFFIX@/g' -e 's/\.o:/.lo:/g' +# +# This means that every source file is listed twice, once with a .o rule +# and then again with an identical .lo rule. The .lo rules are used when +# building plugins. +########################################### +acpi.o: acpi.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h acpi.h +biosdev.o: biosdev.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h biosdev.h +busmouse.o: busmouse.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h busmouse.h +cdrom_amigaos.o: cdrom_amigaos.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h scsi_commands.h cdrom.h +cdrom_beos.o: cdrom_beos.@CPP_SUFFIX@ cdrom_beos.h +cdrom.o: cdrom.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + cdrom.h +cmos.o: cmos.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h cmos.h +crc32.o: crc32.@CPP_SUFFIX@ crc32.h ../config.h +devices.o: devices.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h ../iodev/virt_timer.h \ + ../iodev/slowdown_timer.h +dma.o: dma.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h dma.h +eth_arpback.o: eth_arpback.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +eth.o: eth.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_fbsd.o: eth_fbsd.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +eth_linux.o: eth_linux.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_null.o: eth_null.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_packetmaker.o: eth_packetmaker.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h \ + ../osdep.h ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +eth_tap.o: eth_tap.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_tuntap.o: eth_tuntap.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_vde.o: eth_vde.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_vnet.o: eth_vnet.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_win32.o: eth_win32.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +extfpuirq.o: extfpuirq.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h extfpuirq.h +floppy.o: floppy.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h hdimage.h floppy.h +gameport.o: gameport.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h gameport.h +guest2host.o: guest2host.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h guest2host.h +harddrv.o: harddrv.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h harddrv.h hdimage.h \ + cdrom.h +hdimage.o: hdimage.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h hdimage.h vmware3.h \ + vmware4.h vvfat.h +ioapic.o: ioapic.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h ioapic.h +iodebug.o: iodebug.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +keyboard.o: keyboard.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h ../gui/keymap.h \ + keyboard.h scancodes.h +ne2k.o: ne2k.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h ne2k.h eth.h +parallel.o: parallel.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h parallel.h +pci2isa.o: pci2isa.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h pci2isa.h +pci.o: pci.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h +pcidev.o: pcidev.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +pci_ide.o: pci_ide.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h pci_ide.h +pcipnic.o: pcipnic.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +pcivga.o: pcivga.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h pcivga.h +pic.o: pic.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pic.h +pit82c54.o: pit82c54.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pit82c54.h +pit_wrap.o: pit_wrap.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pit_wrap.h pit82c54.h \ + virt_timer.h speaker.h +sb16.o: sb16.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h sb16.h soundmod.h \ + soundlnx.h soundwin.h soundosx.h +scancodes.o: scancodes.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h scancodes.h +scsi_device.o: scsi_device.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h hdimage.h cdrom.h \ + scsi_device.h +serial.o: serial.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h serial.h +serial_raw.o: serial_raw.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +slowdown_timer.o: slowdown_timer.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h slowdown_timer.h +soundlnx.o: soundlnx.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h soundmod.h soundlnx.h +soundmod.o: soundmod.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h soundmod.h soundlnx.h \ + soundosx.h soundwin.h +soundosx.o: soundosx.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h soundmod.h soundosx.h +soundwin.o: soundwin.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h soundmod.h soundwin.h +speaker.o: speaker.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h speaker.h +svga_cirrus.o: svga_cirrus.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h vga.h svga_cirrus.h +unmapped.o: unmapped.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h unmapped.h +usb_common.o: usb_common.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h usb_common.h \ + usb_hid.h usb_hub.h usb_msd.h usb_printer.h +usb_hid.o: usb_hid.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h usb_common.h \ + usb_hid.h +usb_hub.o: usb_hub.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h usb_common.h \ + usb_hub.h +usb_msd.o: usb_msd.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h usb_common.h cdrom.h \ + hdimage.h scsi_device.h usb_msd.h +usb_ohci.o: usb_ohci.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h usb_common.h \ + usb_ohci.h +usb_printer.o: usb_printer.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h usb_common.h \ + usb_printer.h +usb_uhci.o: usb_uhci.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h usb_common.h \ + usb_uhci.h +vga.o: vga.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h vga.h +virt_timer.o: virt_timer.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h virt_timer.h +vmware3.o: vmware3.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h hdimage.h vmware3.h +vmware4.o: vmware4.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h hdimage.h vmware4.h +vvfat.o: vvfat.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h hdimage.h vvfat.h +acpi.lo: acpi.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h acpi.h +biosdev.lo: biosdev.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h biosdev.h +busmouse.lo: busmouse.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h busmouse.h +cdrom_amigaos.lo: cdrom_amigaos.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h scsi_commands.h cdrom.h +cdrom_beos.lo: cdrom_beos.@CPP_SUFFIX@ cdrom_beos.h +cdrom.lo: cdrom.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + cdrom.h +cmos.lo: cmos.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h cmos.h +crc32.lo: crc32.@CPP_SUFFIX@ crc32.h ../config.h +devices.lo: devices.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h ../iodev/virt_timer.h \ + ../iodev/slowdown_timer.h +dma.lo: dma.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h dma.h +eth_arpback.lo: eth_arpback.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +eth.lo: eth.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_fbsd.lo: eth_fbsd.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +eth_linux.lo: eth_linux.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_null.lo: eth_null.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_packetmaker.lo: eth_packetmaker.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h \ + ../osdep.h ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +eth_tap.lo: eth_tap.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_tuntap.lo: eth_tuntap.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_vde.lo: eth_vde.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_vnet.lo: eth_vnet.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h eth.h +eth_win32.lo: eth_win32.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +extfpuirq.lo: extfpuirq.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h extfpuirq.h +floppy.lo: floppy.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h hdimage.h floppy.h +gameport.lo: gameport.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h gameport.h +guest2host.lo: guest2host.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h guest2host.h +harddrv.lo: harddrv.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h harddrv.h hdimage.h \ + cdrom.h +hdimage.lo: hdimage.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h hdimage.h vmware3.h \ + vmware4.h vvfat.h +ioapic.lo: ioapic.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h ioapic.h +iodebug.lo: iodebug.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +keyboard.lo: keyboard.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h ../gui/keymap.h \ + keyboard.h scancodes.h +ne2k.lo: ne2k.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h ne2k.h eth.h +parallel.lo: parallel.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h parallel.h +pci2isa.lo: pci2isa.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h pci2isa.h +pci.lo: pci.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h +pcidev.lo: pcidev.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +pci_ide.lo: pci_ide.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h pci_ide.h +pcipnic.lo: pcipnic.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +pcivga.lo: pcivga.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h pcivga.h +pic.lo: pic.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pic.h +pit82c54.lo: pit82c54.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pit82c54.h +pit_wrap.lo: pit_wrap.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pit_wrap.h pit82c54.h \ + virt_timer.h speaker.h +sb16.lo: sb16.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h sb16.h soundmod.h \ + soundlnx.h soundwin.h soundosx.h +scancodes.lo: scancodes.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h scancodes.h +scsi_device.lo: scsi_device.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h hdimage.h cdrom.h \ + scsi_device.h +serial.lo: serial.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h serial.h +serial_raw.lo: serial_raw.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h +slowdown_timer.lo: slowdown_timer.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h slowdown_timer.h +soundlnx.lo: soundlnx.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h soundmod.h soundlnx.h +soundmod.lo: soundmod.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h soundmod.h soundlnx.h \ + soundosx.h soundwin.h +soundosx.lo: soundosx.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h soundmod.h soundosx.h +soundwin.lo: soundwin.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h soundmod.h soundwin.h +speaker.lo: speaker.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h speaker.h +svga_cirrus.lo: svga_cirrus.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h vga.h svga_cirrus.h +unmapped.lo: unmapped.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h unmapped.h +usb_common.lo: usb_common.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h usb_common.h \ + usb_hid.h usb_hub.h usb_msd.h usb_printer.h +usb_hid.lo: usb_hid.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h usb_common.h \ + usb_hid.h +usb_hub.lo: usb_hub.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h usb_common.h \ + usb_hub.h +usb_msd.lo: usb_msd.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h usb_common.h cdrom.h \ + hdimage.h scsi_device.h usb_msd.h +usb_ohci.lo: usb_ohci.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h usb_common.h \ + usb_ohci.h +usb_printer.lo: usb_printer.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h usb_common.h \ + usb_printer.h +usb_uhci.lo: usb_uhci.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h pci.h usb_common.h \ + usb_uhci.h +vga.lo: vga.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h vga.h +virt_timer.lo: virt_timer.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h virt_timer.h +vmware3.lo: vmware3.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h hdimage.h vmware3.h +vmware4.lo: vmware4.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h hdimage.h vmware4.h +vvfat.lo: vvfat.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h hdimage.h vvfat.h diff --git a/bochs/iodev/acpi.cc b/bochs/iodev/acpi.cc new file mode 100644 index 00000000..4db0a7e5 --- /dev/null +++ b/bochs/iodev/acpi.cc @@ -0,0 +1,586 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2006 Volker Ruppert +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// +// PIIX4 ACPI support +// + + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_PCI && BX_SUPPORT_ACPI + +#include "pci.h" +#include "acpi.h" + +#define LOG_THIS theACPIController-> + +bx_acpi_ctrl_c* theACPIController = NULL; + +// FIXME +const Bit8u acpi_pm_iomask[64] = {2, 0, 2, 0, 2, 0, 0, 0, 4, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 1, 1, 0, 0, 7, 7, 0, 0, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}; +const Bit8u acpi_sm_iomask[16] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 2, 0, 0, 0}; + +#define PM_FREQ 3579545 + +#define ACPI_DBG_IO_ADDR 0xb044 + +#define RSM_STS (1 << 15) +#define PWRBTN_STS (1 << 8) + +#define RTC_EN (1 << 10) +#define PWRBTN_EN (1 << 8) +#define GBL_EN (1 << 5) +#define TMROF_EN (1 << 0) + +#define SCI_EN (1 << 0) + +#define SUS_EN (1 << 13) + +#define ACPI_ENABLE 0xf1 +#define ACPI_DISABLE 0xf0 + +extern void apic_bus_deliver_smi(void); + +int libacpi_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theACPIController = new bx_acpi_ctrl_c(); + bx_devices.pluginACPIController = theACPIController; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theACPIController, BX_PLUGIN_ACPI); + return 0; // Success +} + +void libacpi_LTX_plugin_fini(void) +{ + delete theACPIController; +} + +/* ported from QEMU: compute with 96 bit intermediate result: (a*b)/c */ +Bit64u muldiv64(Bit64u a, Bit32u b, Bit32u c) +{ + union { + Bit64u ll; + struct { +#ifdef WORDS_BIGENDIAN + Bit32u high, low; +#else + Bit32u low, high; +#endif + } l; + } u, res; + Bit64u rl, rh; + + u.ll = a; + rl = (Bit64u)u.l.low * (Bit64u)b; + rh = (Bit64u)u.l.high * (Bit64u)b; + rh += (rl >> 32); + res.l.high = (Bit32u)(rh / c); + res.l.low = (Bit32u)(((rh % c) << 32) + (rl & 0xffffffff)) / c; + return res.ll; +} + +bx_acpi_ctrl_c::bx_acpi_ctrl_c() +{ + put("ACPI"); + s.timer_index = BX_NULL_TIMER_HANDLE; +} + +bx_acpi_ctrl_c::~bx_acpi_ctrl_c() +{ + BX_DEBUG(("Exit")); +} + +void bx_acpi_ctrl_c::init(void) +{ + // called once when bochs initializes + + unsigned i; + + BX_ACPI_THIS s.devfunc = BX_PCI_DEVICE(1, 3); + DEV_register_pci_handlers(this, &BX_ACPI_THIS s.devfunc, BX_PLUGIN_ACPI, + "ACPI Controller"); + + if (BX_ACPI_THIS s.timer_index == BX_NULL_TIMER_HANDLE) { + BX_ACPI_THIS s.timer_index = + bx_pc_system.register_timer(this, timer_handler, 1000, 0, 0, "ACPI"); + } + DEV_register_iowrite_handler(this, write_handler, ACPI_DBG_IO_ADDR, "ACPI", 4); + + for (i=0; i<256; i++) { + BX_ACPI_THIS s.pci_conf[i] = 0x0; + } + BX_ACPI_THIS s.pm_base = 0x0; + BX_ACPI_THIS s.sm_base = 0x0; + + // readonly registers + static const struct init_vals_t { + unsigned addr; + unsigned char val; + } init_vals[] = { + { 0x00, 0x86 }, { 0x01, 0x80 }, + { 0x02, 0x13 }, { 0x03, 0x71 }, + { 0x08, 0x03 }, // revision number + { 0x0a, 0x80 }, // other bridge device + { 0x0b, 0x06 }, // bridge device + { 0x0e, 0x00 }, // header type + { 0x3d, BX_PCI_INTA } // interrupt pin #1 + }; + for (i = 0; i < sizeof(init_vals) / sizeof(*init_vals); ++i) { + BX_ACPI_THIS s.pci_conf[init_vals[i].addr] = init_vals[i].val; + } +} + +void bx_acpi_ctrl_c::reset(unsigned type) +{ + BX_ACPI_THIS s.pci_conf[0x04] = 0x00; // command_io + command_mem + BX_ACPI_THIS s.pci_conf[0x05] = 0x00; + BX_ACPI_THIS s.pci_conf[0x06] = 0x80; // status_devsel_medium + BX_ACPI_THIS s.pci_conf[0x07] = 0x02; + BX_ACPI_THIS s.pci_conf[0x3c] = 0x00; // IRQ + + // PM base 0x40 - 0x43 + BX_ACPI_THIS s.pci_conf[0x40] = 0x01; + BX_ACPI_THIS s.pci_conf[0x41] = 0x00; + BX_ACPI_THIS s.pci_conf[0x42] = 0x00; + BX_ACPI_THIS s.pci_conf[0x43] = 0x00; + + // clear DEVACTB register on PIIX4 ACPI reset + BX_ACPI_THIS s.pci_conf[0x58] = 0x00; + BX_ACPI_THIS s.pci_conf[0x59] = 0x00; + + // device resources + BX_ACPI_THIS s.pci_conf[0x5a] = 0x00; + BX_ACPI_THIS s.pci_conf[0x5b] = 0x00; + BX_ACPI_THIS s.pci_conf[0x5f] = 0x90; + BX_ACPI_THIS s.pci_conf[0x63] = 0x60; + BX_ACPI_THIS s.pci_conf[0x67] = 0x98; + + // SM base 0x90 - 0x93 + BX_ACPI_THIS s.pci_conf[0x90] = 0x01; + BX_ACPI_THIS s.pci_conf[0x91] = 0x00; + BX_ACPI_THIS s.pci_conf[0x92] = 0x00; + BX_ACPI_THIS s.pci_conf[0x93] = 0x00; + + BX_ACPI_THIS s.pmsts = 0; + BX_ACPI_THIS s.pmen = 0; + BX_ACPI_THIS s.pmcntrl = 0; + BX_ACPI_THIS s.tmr_overflow_time = 0xffffff; + + BX_ACPI_THIS s.smbus.stat = 0; + BX_ACPI_THIS s.smbus.ctl = 0; + BX_ACPI_THIS s.smbus.cmd = 0; + BX_ACPI_THIS s.smbus.addr = 0; + BX_ACPI_THIS s.smbus.data0 = 0; + BX_ACPI_THIS s.smbus.data1 = 0; + BX_ACPI_THIS s.smbus.index = 0; + + for (unsigned i = 0; i < 32; i++) { + BX_ACPI_THIS s.smbus.data[i] = 0; + } +} + +void bx_acpi_ctrl_c::register_state(void) +{ + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "acpi", "ACPI Controller State", 6); + BXRS_HEX_PARAM_FIELD(list, pmsts, BX_ACPI_THIS s.pmsts); + BXRS_HEX_PARAM_FIELD(list, pmen, BX_ACPI_THIS s.pmen); + BXRS_HEX_PARAM_FIELD(list, pmcntrl, BX_ACPI_THIS s.pmcntrl); + BXRS_HEX_PARAM_FIELD(list, tmr_overflow_time, BX_ACPI_THIS s.tmr_overflow_time); + bx_list_c *smbus = new bx_list_c(list, "smbus", "ACPI SMBus", 8); + BXRS_HEX_PARAM_FIELD(smbus, stat, BX_ACPI_THIS s.smbus.stat); + BXRS_HEX_PARAM_FIELD(smbus, ctl, BX_ACPI_THIS s.smbus.ctl); + BXRS_HEX_PARAM_FIELD(smbus, cmd, BX_ACPI_THIS s.smbus.cmd); + BXRS_HEX_PARAM_FIELD(smbus, addr, BX_ACPI_THIS s.smbus.addr); + BXRS_HEX_PARAM_FIELD(smbus, data0, BX_ACPI_THIS s.smbus.data0); + BXRS_HEX_PARAM_FIELD(smbus, data1, BX_ACPI_THIS s.smbus.data1); + BXRS_HEX_PARAM_FIELD(smbus, index, BX_ACPI_THIS s.smbus.index); + bx_list_c *data = new bx_list_c(smbus, "data", "ACPI SMBus data", 32); + for (unsigned i = 0; i < 32; i++) { + char name[6]; + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(data, name, &BX_ACPI_THIS s.smbus.data[i], BASE_HEX); + } + register_pci_state(list, BX_ACPI_THIS s.pci_conf); +} + +void bx_acpi_ctrl_c::after_restore_state(void) +{ + if (DEV_pci_set_base_io(BX_ACPI_THIS_PTR, read_handler, write_handler, + &BX_ACPI_THIS s.pm_base, + &BX_ACPI_THIS s.pci_conf[0x40], + 64, &acpi_pm_iomask[0], "ACPI PM base")) + { + BX_INFO(("new PM base address: 0x%04x", BX_ACPI_THIS s.pm_base)); + } + if (DEV_pci_set_base_io(BX_ACPI_THIS_PTR, read_handler, write_handler, + &BX_ACPI_THIS s.sm_base, + &BX_ACPI_THIS s.pci_conf[0x90], + 16, &acpi_sm_iomask[0], "ACPI SM base")) + { + BX_INFO(("new SM base address: 0x%04x", BX_ACPI_THIS s.sm_base)); + } +} + +void bx_acpi_ctrl_c::set_irq_level(bx_bool level) +{ + DEV_pci_set_irq(BX_ACPI_THIS s.devfunc, BX_ACPI_THIS s.pci_conf[0x3d], level); +} + +Bit32u bx_acpi_ctrl_c::get_pmtmr(void) +{ + Bit64u value = muldiv64(bx_pc_system.time_usec(), PM_FREQ, 1000000); + return (Bit32u)(value & 0xffffff); +} + +Bit16u bx_acpi_ctrl_c::get_pmsts(void) +{ + Bit16u pmsts = BX_ACPI_THIS s.pmsts; + Bit64u value = muldiv64(bx_pc_system.time_usec(), PM_FREQ, 1000000); + if (value >= BX_ACPI_THIS s.tmr_overflow_time) + BX_ACPI_THIS s.pmsts |= TMROF_EN; + return pmsts; +} + +void bx_acpi_ctrl_c::pm_update_sci(void) +{ + Bit16u pmsts = get_pmsts(); + bx_bool sci_level = (((pmsts & BX_ACPI_THIS s.pmen) & + (RTC_EN | PWRBTN_EN | GBL_EN | TMROF_EN)) != 0); + BX_ACPI_THIS set_irq_level(sci_level); + // schedule a timer interruption if needed + if ((BX_ACPI_THIS s.pmen & TMROF_EN) && !(pmsts & TMROF_EN)) { + Bit64u expire_time = muldiv64(BX_ACPI_THIS s.tmr_overflow_time, 1000000, PM_FREQ); + bx_pc_system.activate_timer(BX_ACPI_THIS s.timer_index, (Bit32u)expire_time, 0); + } else { + bx_pc_system.deactivate_timer(BX_ACPI_THIS s.timer_index); + } +} + +void bx_acpi_ctrl_c::generate_smi(Bit8u value) +{ + /* ACPI specs 3.0, 4.7.2.5 */ + if (value == ACPI_ENABLE) { + BX_ACPI_THIS s.pmcntrl |= SCI_EN; + } else if (value == ACPI_DISABLE) { + BX_ACPI_THIS s.pmcntrl &= ~SCI_EN; + } + + if (BX_ACPI_THIS s.pci_conf[0x5b] & 0x02) { + apic_bus_deliver_smi(); + } +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +Bit32u bx_acpi_ctrl_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_ACPI_SMF + bx_acpi_ctrl_c *class_ptr = (bx_acpi_ctrl_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_acpi_ctrl_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_ACPI_SMF + Bit8u reg = address & 0x3f; + Bit32u value = 0xffffffff; + + if ((address & 0xffc0) == BX_ACPI_THIS s.pm_base) { + if ((BX_ACPI_THIS s.pci_conf[0x80] & 0x01) == 0) { + return value; + } + switch (reg) { + case 0x00: + value = BX_ACPI_THIS get_pmsts(); + break; + case 0x02: + value = BX_ACPI_THIS s.pmen; + break; + case 0x04: + value = BX_ACPI_THIS s.pmcntrl; + break; + case 0x08: + value = BX_ACPI_THIS get_pmtmr(); + break; + default: + BX_INFO(("ACPI read from PM register 0x%02x not implemented yet", reg)); + } + BX_DEBUG(("ACPI read from PM register 0x%02x returns 0x%08x", reg, value)); + } else { + if (((BX_ACPI_THIS s.pci_conf[0x04] & 0x01) == 0) && + ((BX_ACPI_THIS s.pci_conf[0xd2] & 0x01) == 0)) { + return value; + } + switch (reg) { + case 0x00: + value = BX_ACPI_THIS s.smbus.stat; + break; + case 0x02: + BX_ACPI_THIS s.smbus.index = 0; + value = BX_ACPI_THIS s.smbus.ctl & 0x1f; + break; + case 0x03: + value = BX_ACPI_THIS s.smbus.cmd; + break; + case 0x04: + value = BX_ACPI_THIS s.smbus.addr; + break; + case 0x05: + value = BX_ACPI_THIS s.smbus.data0; + break; + case 0x06: + value = BX_ACPI_THIS s.smbus.data1; + break; + case 0x07: + value = BX_ACPI_THIS s.smbus.data[BX_ACPI_THIS s.smbus.index++]; + if (BX_ACPI_THIS s.smbus.index > 31) { + BX_ACPI_THIS s.smbus.index = 0; + } + break; + default: + value = 0; + BX_INFO(("ACPI read from SMBus register 0x%02x not implemented yet", reg)); + } + BX_DEBUG(("ACPI read from SMBus register 0x%02x returns 0x%08x", reg, value)); + } + return value; +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_acpi_ctrl_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_ACPI_SMF + bx_acpi_ctrl_c *class_ptr = (bx_acpi_ctrl_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_acpi_ctrl_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_ACPI_SMF + Bit8u reg = address & 0x3f; + + if ((address & 0xffc0) == BX_ACPI_THIS s.pm_base) { + if ((BX_ACPI_THIS s.pci_conf[0x80] & 0x01) == 0) { + return; + } + BX_DEBUG(("ACPI write to PM register 0x%02x, value = 0x%04x", reg, value)); + switch (reg) { + case 0x00: + { + Bit16u pmsts = BX_ACPI_THIS get_pmsts(); + if (pmsts & value & TMROF_EN) { + // if TMRSTS is reset, then compute the new overflow time + Bit64u d = muldiv64(bx_pc_system.time_usec(), PM_FREQ, 1000000); + BX_ACPI_THIS s.tmr_overflow_time = (d + BX_CONST64(0x800000)) & ~BX_CONST64(0x7fffff); + } + BX_ACPI_THIS s.pmsts &= ~value; + BX_ACPI_THIS pm_update_sci(); + } + break; + case 0x02: + BX_ACPI_THIS s.pmen = value; + BX_ACPI_THIS pm_update_sci(); + break; + case 0x04: + { + BX_ACPI_THIS s.pmcntrl = value & ~(SUS_EN); + if (value & SUS_EN) { + // change suspend type + Bit16u sus_typ = (value >> 10) & 7; + switch (sus_typ) { + case 0: // soft power off + bx_user_quit = 1; + LOG_THIS setonoff(LOGLEV_PANIC, ACT_FATAL); + BX_PANIC(("ACPI control: soft power off")); + break; + case 1: + BX_INFO(("ACPI control: suspend to ram")); + BX_ACPI_THIS s.pmsts |= (RSM_STS | PWRBTN_STS); + DEV_cmos_set_reg(0xF, 0xFE); + bx_pc_system.Reset(BX_RESET_HARDWARE); + break; + default: + break; + } + } + } + break; + default: + BX_INFO(("ACPI write to PM register 0x%02x not implemented yet", reg)); + } + } else if ((address & 0xfff0) == BX_ACPI_THIS s.sm_base) { + if (((BX_ACPI_THIS s.pci_conf[0x04] & 0x01) == 0) && + ((BX_ACPI_THIS s.pci_conf[0xd2] & 0x01) == 0)) { + return; + } + BX_DEBUG(("ACPI write to SMBus register 0x%02x, value = 0x%04x", reg, value)); + switch (reg) { + case 0x00: + BX_ACPI_THIS s.smbus.stat = 0; + BX_ACPI_THIS s.smbus.index = 0; + break; + case 0x02: + BX_ACPI_THIS s.smbus.ctl = 0; + // TODO: execute SMBus command + break; + case 0x03: + BX_ACPI_THIS s.smbus.cmd = 0; + break; + case 0x04: + BX_ACPI_THIS s.smbus.addr = 0; + break; + case 0x05: + BX_ACPI_THIS s.smbus.data0 = 0; + break; + case 0x06: + BX_ACPI_THIS s.smbus.data1 = 0; + break; + case 0x07: + BX_ACPI_THIS s.smbus.data[BX_ACPI_THIS s.smbus.index++] = value; + if (BX_ACPI_THIS s.smbus.index > 31) { + BX_ACPI_THIS s.smbus.index = 0; + } + break; + default: + BX_INFO(("ACPI write to SMBus register 0x%02x not implemented yet", reg)); + } + } else { + BX_DEBUG(("DBG: 0x%08x", value)); + } +} + +void bx_acpi_ctrl_c::timer_handler(void *this_ptr) +{ + bx_acpi_ctrl_c *class_ptr = (bx_acpi_ctrl_c *) this_ptr; + class_ptr->timer(); +} + +void bx_acpi_ctrl_c::timer() +{ + BX_ACPI_THIS pm_update_sci(); +} + +// pci configuration space read callback handler +Bit32u bx_acpi_ctrl_c::pci_read_handler(Bit8u address, unsigned io_len) +{ + Bit32u value = 0; + + for (unsigned i=0; i= 0x10) && (address < 0x34)) + return; + + for (unsigned i=0; i> (i*8)) & 0xFF; + oldval = BX_ACPI_THIS s.pci_conf[address+i]; + switch (address+i) { + case 0x04: + value8 = (value8 & 0xfe) | (value & 0x01); + goto set_value; + break; + case 0x06: // disallowing write to status lo-byte (is that expected?) + break; + case 0x3c: + if (value8 != oldval) { + BX_INFO(("new irq line = %d", value8)); + } + goto set_value; + break; + case 0x40: + value8 = (value8 & 0xc0) | 0x01; + case 0x41: + case 0x42: + case 0x43: + pm_base_change |= (value8 != oldval); + goto set_value; + break; + case 0x90: + value8 = (value8 & 0xf0) | 0x01; + case 0x91: + case 0x92: + case 0x93: + sm_base_change |= (value8 != oldval); + default: +set_value: + BX_ACPI_THIS s.pci_conf[address+i] = value8; + } + } + if (pm_base_change) { + if (DEV_pci_set_base_io(BX_ACPI_THIS_PTR, read_handler, write_handler, + &BX_ACPI_THIS s.pm_base, + &BX_ACPI_THIS s.pci_conf[0x40], + 64, &acpi_pm_iomask[0], "ACPI PM base")) + { + BX_INFO(("new PM base address: 0x%04x", BX_ACPI_THIS s.pm_base)); + } + } + if (sm_base_change) { + if (DEV_pci_set_base_io(BX_ACPI_THIS_PTR, read_handler, write_handler, + &BX_ACPI_THIS s.sm_base, + &BX_ACPI_THIS s.pci_conf[0x90], + 16, &acpi_sm_iomask[0], "ACPI SM base")) + { + BX_INFO(("new SM base address: 0x%04x", BX_ACPI_THIS s.sm_base)); + } + } + + if (io_len == 1) + BX_DEBUG(("write PCI register 0x%02x value 0x%02x", address, value)); + else if (io_len == 2) + BX_DEBUG(("write PCI register 0x%02x value 0x%04x", address, value)); + else if (io_len == 4) + BX_DEBUG(("write PCI register 0x%02x value 0x%08x", address, value)); +} + +#endif // BX_SUPPORT_PCI diff --git a/bochs/iodev/acpi.h b/bochs/iodev/acpi.h new file mode 100644 index 00000000..590b3982 --- /dev/null +++ b/bochs/iodev/acpi.h @@ -0,0 +1,86 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2006 Volker Ruppert +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef BX_IODEV_ACPI_H +#define BX_IODEV_ACPI_H + +#if BX_USE_ACPI_SMF +# define BX_ACPI_SMF static +# define BX_ACPI_THIS theACPIController-> +# define BX_ACPI_THIS_PTR theACPIController +#else +# define BX_ACPI_SMF +# define BX_ACPI_THIS this-> +# define BX_ACPI_THIS_PTR this +#endif + +class bx_acpi_ctrl_c : public bx_acpi_ctrl_stub_c { +public: + bx_acpi_ctrl_c(); + virtual ~bx_acpi_ctrl_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual void generate_smi(Bit8u value); + virtual void register_state(void); + virtual void after_restore_state(void); + + virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len); + virtual void pci_write_handler(Bit8u address, Bit32u value, unsigned io_len); + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_ACPI_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif + BX_ACPI_SMF void timer(void); + +private: + BX_ACPI_SMF void set_irq_level(bx_bool level); + BX_ACPI_SMF Bit32u get_pmtmr(void); + BX_ACPI_SMF Bit16u get_pmsts(void); + BX_ACPI_SMF void pm_update_sci(void); + static void timer_handler(void *); + + struct { + Bit8u pci_conf[256]; + Bit8u devfunc; + Bit32u pm_base; + Bit32u sm_base; + Bit16u pmsts; + Bit16u pmen; + Bit16u pmcntrl; + Bit64u tmr_overflow_time; + int timer_index; + struct { + Bit8u stat; + Bit8u ctl; + Bit8u cmd; + Bit8u addr; + Bit8u data0; + Bit8u data1; + Bit8u index; + Bit8u data[32]; + } smbus; + } s; +}; + +#endif diff --git a/bochs/iodev/aspi-win32.h b/bochs/iodev/aspi-win32.h new file mode 100644 index 00000000..d6b11db7 --- /dev/null +++ b/bochs/iodev/aspi-win32.h @@ -0,0 +1,210 @@ +// +// iodev/aspi-win32.h +// $Id$ +// +// This file was copied from cdrecord 1.9 under libscg/scg/aspi-win32.h. +// The only modification is related to use of the PACKED keyword. +// + +#ifndef __ASPI_WIN32_H_ +#define __ASPI_WIN32_H_ + +#include + +#ifndef PACKED +// It seems that VC++ has no PACKED keyword but Cygwin does. We can just +// define PACKED to be empty if it's not already defined by the system +// headers. +#define PACKED /* empty */ +#endif + +/*************************************************************************** + ** SCSI MISCELLANEOUS EQUATES + ***************************************************************************/ +#define SENSE_LEN 14 /* Default sense buffer length */ +#define SRB_DIR_SCSI 0x00 /* Direction determined by SCSI */ +#define SRB_POSTING 0x01 /* Enable ASPI posting */ +#define SRB_ENABLE_RESIDUAL_COUNT 0x04 /* Enable residual byte count */ + /* reporting */ +#define SRB_DIR_IN 0x08 /* Transfer from SCSI target to */ + /* host */ +#define SRB_DIR_OUT 0x10 /* Transfer from host to SCSI */ + /* target */ +#define SRB_EVENT_NOTIFY 0x40 /* Enable ASPI event notification */ +#define RESIDUAL_COUNT_SUPPORTED 0x02 /* Extended buffer flag */ +#define MAX_SRB_TIMEOUT 1080001u /* 30 hour maximum timeout in sec */ +#define DEFAULT_SRB_TIMEOUT 1080001u /* use max.timeout by default */ + +/*************************************************************************** + ** ASPI command definitions + ***************************************************************************/ +#define SC_HA_INQUIRY 0x00 /* Host adapter inquiry */ +#define SC_GET_DEV_TYPE 0x01 /* Get device type */ +#define SC_EXEC_SCSI_CMD 0x02 /* Execute SCSI command */ +#define SC_ABORT_SRB 0x03 /* Abort an SRB */ +#define SC_RESET_DEV 0x04 /* SCSI bus device reset */ +#define SC_SET_HA_PARMS 0x05 /* Set HA parameters */ +#define SC_GET_DISK_INFO 0x06 /* Get Disk */ +#define SC_RESCAN_SCSI_BUS 0x07 /* Rebuild SCSI device map */ +#define SC_GETSET_TIMEOUTS 0x08 /* Get/Set target timeouts */ + + +/*************************************************************************** + ** SRB Status + ***************************************************************************/ +#define SS_PENDING 0x00 /* SRB being processed */ +#define SS_COMP 0x01 /* SRB completed without error */ +#define SS_ABORTED 0x02 /* SRB aborted */ +#define SS_ABORT_FAIL 0x03 /* Unable to abort SRB */ +#define SS_ERR 0x04 /* SRB completed with error */ +#define SS_INVALID_CMD 0x80 /* Invalid ASPI command */ +#define SS_INVALID_HA 0x81 /* Invalid host adapter number */ +#define SS_NO_DEVICE 0x82 /* SCSI device not installed */ +#define SS_INVALID_SRB 0xE0 /* Invalid parameter set in SRB */ +#define SS_OLD_MANAGER 0xE1 /* ASPI manager doesn't support */ + /* windows */ +#define SS_BUFFER_ALIGN 0xE1 /* Buffer not aligned (replaces */ + /* SS_OLD_MANAGER in Win32) */ +#define SS_ILLEGAL_MODE 0xE2 /* Unsupported Windows mode */ +#define SS_NO_ASPI 0xE3 /* No ASPI managers */ +#define SS_FAILED_INIT 0xE4 /* ASPI for windows failed init */ +#define SS_ASPI_IS_BUSY 0xE5 /* No resources available to */ + /* execute command */ +#define SS_BUFFER_TO_BIG 0xE6 /* Buffer size too big to handle */ +#define SS_BUFFER_TOO_BIG 0xE6 /* Correct spelling of 'too' */ +#define SS_MISMATCHED_COMPONENTS 0xE7 /* The DLLs/EXEs of ASPI don't */ + /* version check */ +#define SS_NO_ADAPTERS 0xE8 /* No host adapters to manager */ +#define SS_INSUFFICIENT_RESOURCES 0xE9 /* Couldn't allocate resources */ + /* needed to init */ +#define SS_ASPI_IS_SHUTDOWN 0xEA /* Call came to ASPI after */ + /* PROCESS_DETACH */ +#define SS_BAD_INSTALL 0xEB /* The DLL or other components */ + /* are installed wrong */ + +/*************************************************************************** + ** Host Adapter Status + ***************************************************************************/ +#define HASTAT_OK 0x00 /* No error detected by HA */ +#define HASTAT_SEL_TO 0x11 /* Selection Timeout */ +#define HASTAT_DO_DU 0x12 /* Data overrun/data underrun */ +#define HASTAT_BUS_FREE 0x13 /* Unexpected bus free */ +#define HASTAT_PHASE_ERR 0x14 /* Target bus phase sequence */ +#define HASTAT_TIMEOUT 0x09 /* Timed out while SRB was */ + /* waiting to be processed */ +#define HASTAT_COMMAND_TIMEOUT 0x0B /* Adapter timed out while */ + /* processing SRB */ +#define HASTAT_MESSAGE_REJECT 0x0D /* While processing the SRB, the */ + /* adapter received a MESSAGE */ +#define HASTAT_BUS_RESET 0x0E /* A bus reset was detected */ +#define HASTAT_PARITY_ERROR 0x0F /* A parity error was detected */ +#define HASTAT_REQUEST_SENSE_FAILED 0x10 /* The adapter failed in issuing */ + +/*************************************************************************** + ** SRB - HOST ADAPTER INQUIRIY - SC_HA_INQUIRY (0) + ***************************************************************************/ +typedef struct { + BYTE SRB_Cmd; /* 00/000 ASPI command code == SC_HA_INQUIRY */ + BYTE SRB_Status; /* 01/001 ASPI command status byte */ + BYTE SRB_HaId; /* 02/002 ASPI host adapter number */ + BYTE SRB_Flags; /* 03/003 ASPI request flags */ + DWORD SRB_Hdr_Rsvd; /* 04/004 Reserved, must = 0 */ + BYTE HA_Count; /* 08/008 Number of host adapters present */ + BYTE HA_SCSI_ID; /* 09/009 SCSI ID of host adapter */ + BYTE HA_ManagerId[16]; /* 0a/010 String describing the manager */ + BYTE HA_Identifier[16]; /* 1a/026 String describing the host adapter */ + BYTE HA_Unique[16]; /* 2a/042 Host Adapter Unique parameters */ + WORD HA_Rsvd1; /* 3a/058 Reserved, must = 0 */ +} PACKED SRB_HAInquiry, *PSRB_HAInquiry, FAR *LPSRB_HAInquiry; + + +/*************************************************************************** + ** SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE (1) + ***************************************************************************/ +typedef struct +{ + BYTE SRB_Cmd; /* 00/000 ASPI cmd code == SC_GET_DEV_TYPE */ + BYTE SRB_Status; /* 01/001 ASPI command status byte */ + BYTE SRB_HaId; /* 02/002 ASPI host adapter number */ + BYTE SRB_Flags; /* 03/003 Reserved, must = 0 */ + DWORD SRB_Hdr_Rsvd; /* 04/004 Reserved, must = 0 */ + BYTE SRB_Target; /* 08/008 Target's SCSI ID */ + BYTE SRB_Lun; /* 09/009 Target's LUN number */ + BYTE SRB_DeviceType; /* 0a/010 Target's peripheral device type */ + BYTE SRB_Rsvd1; /* 0b/011 Reserved, must = 0 */ +} PACKED SRB_GDEVBlock, *PSRB_GDEVBlock, FAR *LPSRB_GDEVBlock; + + +/*************************************************************************** + ** SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD (2) + ***************************************************************************/ +typedef struct +{ + BYTE SRB_Cmd; /* 00/000 ASPI cmd code == SC_EXEC_SCSI_CMD */ + BYTE SRB_Status; /* 01/001 ASPI command status byte */ + BYTE SRB_HaId; /* 02/002 ASPI host adapter number */ + BYTE SRB_Flags; /* 03/003 Reserved, must = 0 */ + DWORD SRB_Hdr_Rsvd; /* 04/004 Reserved, must = 0 */ + BYTE SRB_Target; /* 08/008 Target's SCSI ID */ + BYTE SRB_Lun; /* 09/009 Target's LUN */ + WORD SRB_Rsvd1; /* 0a/010 Reserved for alignment */ + DWORD SRB_BufLen; /* 0c/012 Data Allocation Length */ + BYTE FAR *SRB_BufPointer; /* 10/016 Data Buffer Pointer */ + BYTE SRB_SenseLen; /* 14/020 Sense Allocation Length */ + BYTE SRB_CDBLen; /* 15/021 CDB Length */ + BYTE SRB_HaStat; /* 16/022 Host Adapter Status */ + BYTE SRB_TargStat; /* 17/023 Target Status */ + VOID FAR *SRB_PostProc; /* 18/024 Post routine */ + BYTE SRB_Rsvd2[20]; /* 1c/028 Reserved, must = 0 */ + BYTE CDBByte[16]; /* 30/048 SCSI CDB */ + BYTE SenseArea[SENSE_LEN+2]; /* 40/064 Request Sense buffer */ +} PACKED SRB_ExecSCSICmd, *PSRB_ExecSCSICmd, FAR *LPSRB_ExecSCSICmd; + + +typedef struct +{ + BYTE SRB_Cmd; /* 00/000 ASPI cmd code == SC_ABORT_SRB */ + BYTE SRB_Status; /* 01/001 ASPI command status byte */ + BYTE SRB_HaId; /* 02/002 ASPI host adapter number */ + BYTE SRB_Flags; /* 03/003 Reserved, must = 0 */ + DWORD SRB_Hdr_Rsvd; /* 04/004 Reserved, must = 0 */ + void *SRB_ToAbort; /* 08/008 Pointer to SRB to abort */ +} PACKED SRB_Abort, *PSRB_Abort, FAR *LPSRB_Abort; + + +/*************************************************************************** + ** SRB - BUS DEVICE RESET - SC_RESET_DEV (4) + ***************************************************************************/ +typedef struct +{ + BYTE SRB_Cmd; /* 00/000 ASPI cmd code == SC_RESET_DEV */ + BYTE SRB_Status; /* 01/001 ASPI command status byte */ + BYTE SRB_HaId; /* 02/002 ASPI host adapter number */ + DWORD SRB_Flags; /* 04/004 Reserved */ + BYTE SRB_Target; /* 08/008 Target's SCSI ID */ + BYTE SRB_Lun; /* 09/009 Target's LUN number */ + BYTE SRB_Rsvd1[12]; /* 0A/010 Reserved for alignment */ + BYTE SRB_HaStat; /* 16/022 Host Adapter Status */ + BYTE SRB_TargStat; /* 17/023 Target Status */ + VOID FAR *SRB_PostProc; /* 18/024 Post routine */ + BYTE SRB_Rsvd2[36]; /* 1C/028 Reserved, must = 0 */ +} SRB_BusDeviceReset, *PSRB_BusDeviceReset, FAR *LPSRB_BusDeviceReset; + +typedef struct tag_ASPI32BUFF +{ + PBYTE AB_BufPointer; + DWORD AB_BufLen; + DWORD AB_ZeroFill; + DWORD AB_Reserved; +} PACKED ASPI32BUFF, *PASPI32BUFF, FAR *LPASPI32BUFF; + +typedef struct +{ + BYTE SRB_Cmd; + BYTE SRB_Status; + BYTE SRB_HaId; + BYTE SRB_Flags; + DWORD SRB_Hdr_Rsvd; +} SRB, *PSRB, FAR *LPSRB; + +#endif diff --git a/bochs/iodev/biosdev.cc b/bochs/iodev/biosdev.cc new file mode 100644 index 00000000..66d504de --- /dev/null +++ b/bochs/iodev/biosdev.cc @@ -0,0 +1,219 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +// Here are the virtual ports use to display messages from the bioses : +// +// 0x0400 : rombios Panic port with line number +// 0x0401 : rombios Panic port with message, panic flag or line number +// 0x0402 : rombios Info port with message +// 0x0403 : rombios Debug port with message +// +// 0x0500 : vgabios Info port with message +// 0x0501 : vgabios Panic port with line number +// 0x0502 : vgabios Panic port with message, panic flag or line number +// 0x0503 : vgabios Debug port with message + + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "biosdev.h" + +bx_biosdev_c *theBiosDevice = NULL; + +logfunctions *bioslog; +logfunctions *vgabioslog; + +int libbiosdev_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theBiosDevice = new bx_biosdev_c(); + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theBiosDevice, BX_PLUGIN_BIOSDEV); + return(0); // Success +} + +void libbiosdev_LTX_plugin_fini(void) +{ + delete theBiosDevice; +} + +bx_biosdev_c::bx_biosdev_c(void) +{ + bioslog = new logfunctions(); + bioslog->put("BIOS"); + + vgabioslog = new logfunctions(); + vgabioslog->put("VBIOS"); +} + +bx_biosdev_c::~bx_biosdev_c(void) +{ + bioslog->ldebug("Exit"); + if (bioslog != NULL) { + delete bioslog; + bioslog = NULL; + } + if (vgabioslog != NULL) { + delete vgabioslog; + vgabioslog = NULL; + } +} + +void bx_biosdev_c::init(void) +{ + DEV_register_iowrite_handler(this, write_handler, 0x0400, "Bios Panic Port 1", 3); + DEV_register_iowrite_handler(this, write_handler, 0x0401, "Bios Panic Port 2", 3); + DEV_register_iowrite_handler(this, write_handler, 0x0402, "Bios Info Port", 1); + DEV_register_iowrite_handler(this, write_handler, 0x0403, "Bios Debug Port", 1); + + DEV_register_iowrite_handler(this, write_handler, 0x0500, "VGABios Info Port", 1); + DEV_register_iowrite_handler(this, write_handler, 0x0501, "VGABios Panic Port 1", 3); + DEV_register_iowrite_handler(this, write_handler, 0x0502, "VGABios Panic Port 2", 3); + DEV_register_iowrite_handler(this, write_handler, 0x0503, "VGABios Debug Port", 1); + + s.bios_message_i = 0; + s.bios_panic_flag = 0; + s.vgabios_message_i = 0; + s.vgabios_panic_flag = 0; +} + + // static IO port write callback handler + // redirects to non-static class handler to avoid virtual functions + +void bx_biosdev_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_BIOS_SMF + bx_biosdev_c *class_ptr = (bx_biosdev_c *) this_ptr; + + class_ptr->write(address, value, io_len); +} + +void bx_biosdev_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_BIOS_SMF + UNUSED(io_len); + + + switch (address) { + // 0x400-0x401 are used as panic ports for the rombios + case 0x0401: + if (value==0) { + // The next message sent to the info port will cause a panic + BX_BIOS_THIS s.bios_panic_flag = 1; + break; + } else if (BX_BIOS_THIS s.bios_message_i > 0) { + // if there are bits of message in the buffer, print them as the + // panic message. Otherwise fall into the next case. + if (BX_BIOS_THIS s.bios_message_i >= BX_BIOS_MESSAGE_SIZE) + BX_BIOS_THIS s.bios_message_i = BX_BIOS_MESSAGE_SIZE-1; + BX_BIOS_THIS s.bios_message[ BX_BIOS_THIS s.bios_message_i] = 0; + BX_BIOS_THIS s.bios_message_i = 0; + bioslog->panic("%s", BX_BIOS_THIS s.bios_message); + break; + } + case 0x0400: + if (value > 0) { + bioslog->panic("BIOS panic at rombios.c, line %d", value); + } + break; + + // 0x0402 is used as the info port for the rombios + // 0x0403 is used as the debug port for the rombios + case 0x0402: + case 0x0403: + BX_BIOS_THIS s.bios_message[BX_BIOS_THIS s.bios_message_i] = + (Bit8u) value; + BX_BIOS_THIS s.bios_message_i ++; + if (BX_BIOS_THIS s.bios_message_i >= BX_BIOS_MESSAGE_SIZE) { + BX_BIOS_THIS s.bios_message[ BX_BIOS_MESSAGE_SIZE - 1] = 0; + BX_BIOS_THIS s.bios_message_i = 0; + if (address==0x403) + bioslog->ldebug("%s", BX_BIOS_THIS s.bios_message); + else + bioslog->info("%s", BX_BIOS_THIS s.bios_message); + } else if ((value & 0xff) == '\n') { + BX_BIOS_THIS s.bios_message[ BX_BIOS_THIS s.bios_message_i - 1 ] = 0; + BX_BIOS_THIS s.bios_message_i = 0; + if (BX_BIOS_THIS s.bios_panic_flag==1) + bioslog->panic("%s", BX_BIOS_THIS s.bios_message); + else if (address==0x403) + bioslog->ldebug("%s", BX_BIOS_THIS s.bios_message); + else + bioslog->info("%s", BX_BIOS_THIS s.bios_message); + BX_BIOS_THIS s.bios_panic_flag = 0; + } + break; + + // 0x501-0x502 are used as panic ports for the vgabios + case 0x0502: + if (value==0) { + BX_BIOS_THIS s.vgabios_panic_flag = 1; + break; + } else if (BX_BIOS_THIS s.vgabios_message_i > 0) { + // if there are bits of message in the buffer, print them as the + // panic message. Otherwise fall into the next case. + if (BX_BIOS_THIS s.vgabios_message_i >= BX_BIOS_MESSAGE_SIZE) + BX_BIOS_THIS s.vgabios_message_i = BX_BIOS_MESSAGE_SIZE-1; + BX_BIOS_THIS s.vgabios_message[ BX_BIOS_THIS s.vgabios_message_i] = 0; + BX_BIOS_THIS s.vgabios_message_i = 0; + vgabioslog->panic("%s", BX_BIOS_THIS s.vgabios_message); + break; + } + case 0x0501: + if (value > 0) { + vgabioslog->panic("VGABIOS panic at vgabios.c, line %d", value); + } + break; + + // 0x0500 is used as the message port for the vgabios + case 0x0500: + case 0x0503: + BX_BIOS_THIS s.vgabios_message[BX_BIOS_THIS s.vgabios_message_i] = + (Bit8u) value; + BX_BIOS_THIS s.vgabios_message_i ++; + if (BX_BIOS_THIS s.vgabios_message_i >= BX_BIOS_MESSAGE_SIZE) { + BX_BIOS_THIS s.vgabios_message[ BX_BIOS_MESSAGE_SIZE - 1] = 0; + BX_BIOS_THIS s.vgabios_message_i = 0; + if (address==0x503) + vgabioslog->ldebug("%s", BX_BIOS_THIS s.vgabios_message); + else + vgabioslog->info("%s", BX_BIOS_THIS s.vgabios_message); + } else if ((value & 0xff) == '\n') { + BX_BIOS_THIS s.vgabios_message[ BX_BIOS_THIS s.vgabios_message_i - 1 ] = 0; + BX_BIOS_THIS s.vgabios_message_i = 0; + if (BX_BIOS_THIS s.vgabios_panic_flag==1) + vgabioslog->panic("%s", BX_BIOS_THIS s.vgabios_message); + else if (address==0x503) + vgabioslog->ldebug("%s", BX_BIOS_THIS s.vgabios_message); + else + vgabioslog->info("%s", BX_BIOS_THIS s.vgabios_message); + BX_BIOS_THIS s.vgabios_panic_flag = 0; + } + break; + + default: + break; + } +} diff --git a/bochs/iodev/biosdev.h b/bochs/iodev/biosdev.h new file mode 100644 index 00000000..59dbbe3d --- /dev/null +++ b/bochs/iodev/biosdev.h @@ -0,0 +1,61 @@ +//////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +#ifndef BX_IODEV_BIOSDEV_H +#define BX_IODEV_BIOSDEV_H + +#define BX_BIOS_MESSAGE_SIZE 80 + +#if BX_USE_BIOS_SMF +# define BX_BIOS_SMF static +# define BX_BIOS_THIS theBiosDevice-> +#else +# define BX_BIOS_SMF +# define BX_BIOS_THIS this-> +#endif + +class bx_biosdev_c : public bx_devmodel_c { +public: + bx_biosdev_c(); + virtual ~bx_biosdev_c(); + + virtual void init(void); + virtual void reset(unsigned type) {} + +private: + + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_BIOS_SMF + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif + + struct { + Bit8u bios_message[BX_BIOS_MESSAGE_SIZE]; + unsigned int bios_message_i; + bx_bool bios_panic_flag; + + Bit8u vgabios_message[BX_BIOS_MESSAGE_SIZE]; + unsigned int vgabios_message_i; + bx_bool vgabios_panic_flag; + } s; // state information +}; + +#endif diff --git a/bochs/iodev/busmouse.cc b/bochs/iodev/busmouse.cc new file mode 100644 index 00000000..fe819fc7 --- /dev/null +++ b/bochs/iodev/busmouse.cc @@ -0,0 +1,331 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2004-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +// Initial code by Ben Lunt 'fys frontiernet net' + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "busmouse.h" + +#if BX_SUPPORT_BUSMOUSE + +#define LOG_THIS theBusMouse-> + +bx_busm_c *theBusMouse = NULL; + +int libbusmouse_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + // Create one instance of the busmouse device object. + theBusMouse = new bx_busm_c(); + // Register this device. + BX_REGISTER_DEVICE_DEVMODEL (plugin, type, theBusMouse, BX_PLUGIN_BUSMOUSE); + return(0); // Success +} + +void libbusmouse_LTX_plugin_fini(void) +{ + delete theBusMouse; +} + +bx_busm_c::bx_busm_c() +{ + put("BUSM"); +} + +bx_busm_c::~bx_busm_c() +{ + BX_DEBUG(("Exit")); +} + +void bx_busm_c::init(void) +{ + BX_DEBUG(("Init $Id$")); + + DEV_register_irq(BUS_MOUSE_IRQ, "Bus Mouse"); + + // Call our timer routine at 30hz + BX_BUSM_THIS timer_index = + bx_pc_system.register_timer(this, timer_handler, 33334, 1, 1, "bus mouse timer"); + + for (int i=0x23C; i<=0x23F; i++) { + DEV_register_ioread_handler(this, read_handler, i, "Bus Mouse", 1); + DEV_register_iowrite_handler(this, write_handler, i, "Bus Mouse", 1); + } + DEV_register_default_mouse(this, mouse_enq_static, NULL); + + BX_BUSM_THIS mouse_delayed_dx = 0; + BX_BUSM_THIS mouse_delayed_dy = 0; + BX_BUSM_THIS current_x = + BX_BUSM_THIS current_y = + BX_BUSM_THIS current_b = 0; + + BX_BUSM_THIS sig_port_sequ = 0; + BX_BUSM_THIS interrupts = 0; // interrupts off + BX_BUSM_THIS command_val = 0; // command byte + BX_BUSM_THIS cur_command = 0; + + // the control port values + BX_BUSM_THIS control_val = + BX_BUSM_THIS control.mode_set = + BX_BUSM_THIS control.modeA_select = + BX_BUSM_THIS control.portA_dir = + BX_BUSM_THIS control.portC_upper_dir = + BX_BUSM_THIS control.modeBC_select = + BX_BUSM_THIS control.portB_dir = + BX_BUSM_THIS control.portC_lower_dir = + BX_BUSM_THIS control_val = 0; + + BX_INFO(("Initialized BusMouse")); +} + +void bx_busm_c::register_state(void) +{ + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "busmouse", "Busmouse State", 12); + BXRS_HEX_PARAM_FIELD(list, mouse_delayed_dx, BX_BUSM_THIS mouse_delayed_dx); + BXRS_HEX_PARAM_FIELD(list, mouse_delayed_dx, BX_BUSM_THIS mouse_delayed_dy); + BXRS_HEX_PARAM_FIELD(list, current_x, BX_BUSM_THIS current_x); + BXRS_HEX_PARAM_FIELD(list, current_y, BX_BUSM_THIS current_y); + BXRS_HEX_PARAM_FIELD(list, current_b, BX_BUSM_THIS current_b); + BXRS_HEX_PARAM_FIELD(list, sig_port_sequ, BX_BUSM_THIS sig_port_sequ); + BXRS_HEX_PARAM_FIELD(list, control_val, BX_BUSM_THIS control_val); + + bx_list_c *ctrl = new bx_list_c(list, "control", 7); + BXRS_PARAM_BOOL(ctrl, mode_set, BX_BUSM_THIS control.mode_set); + BXRS_HEX_PARAM_FIELD(ctrl, modeA_select, BX_BUSM_THIS control.modeA_select); + BXRS_PARAM_BOOL(ctrl, portA_dir, BX_BUSM_THIS control.portA_dir); + BXRS_PARAM_BOOL(ctrl, portC_upper_dir, BX_BUSM_THIS control.portC_upper_dir); + BXRS_PARAM_BOOL(ctrl, modeBC_select, BX_BUSM_THIS control.modeBC_select); + BXRS_PARAM_BOOL(ctrl, portB_dir, BX_BUSM_THIS control.portB_dir); + BXRS_PARAM_BOOL(ctrl, portC_lower_dir, BX_BUSM_THIS control.portC_lower_dir); + + BXRS_PARAM_BOOL(list, interrupts, BX_BUSM_THIS interrupts); + BXRS_PARAM_BOOL(list, packet_update, BX_BUSM_THIS packet_update); + BXRS_HEX_PARAM_FIELD(list, cur_command, BX_BUSM_THIS cur_command); + BXRS_HEX_PARAM_FIELD(list, command_val, BX_BUSM_THIS command_val); +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions +Bit32u bx_busm_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_BUSM_SMF + bx_busm_c *class_ptr = (bx_busm_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_busm_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_BUSM_SMF + + Bit8u value = 0; + + switch (address) { + case 0x023C: + value = BX_BUSM_THIS control_val; +/* value = (BX_BUSM_THIS control.mode_set ? 1<<7 : 0) + * | (BX_BUSM_THIS control.modeA_select <<5) + * | (BX_BUSM_THIS control.portA_dir ? 1<<4 : 0) + * | (BX_BUSM_THIS control.portC_upper_dir ? 1<<3 : 0) + * | (BX_BUSM_THIS control.modeBC_select ? 1<<2 : 0) + * | (BX_BUSM_THIS control.portB_dir ? 1<<1 : 0) + * | (BX_BUSM_THIS control.portC_lower_dir ? 1<<0 : 0); + */ break; + case 0x023D: // data + switch (BX_BUSM_THIS cur_command) { + case 0x00: // read buttons + value = BX_BUSM_THIS current_b; + break; + case 0x01: // read x + value = BX_BUSM_THIS current_x; + break; + case 0x02: // read y + value = BX_BUSM_THIS current_y; + break; + case 0x07: // command mode + value = BX_BUSM_THIS command_val; + break; + default: + BX_PANIC(("Unknown command to data port: %x", BX_BUSM_THIS cur_command)); + } + break; + case 0x023E: // sig + if (!(BX_BUSM_THIS sig_port_sequ & 1)) + value = 0xDE; + else + value = 0x22; // Manufacture id? + BX_BUSM_THIS sig_port_sequ++; + break; + case 0x023F: + BX_PANIC(("Read from port 0x023F")); + break; + } + + BX_INFO(("read from address 0x%04x, value = 0x%02x ", address, value)); + + return value; +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_busm_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_BUSM_SMF + bx_busm_c *class_ptr = (bx_busm_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_busm_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_BUSM_SMF + + BX_INFO(("write to address 0x%04x, value = 0x%02x ", address, value)); + + switch (address) { + case 0x023C: // control + BX_BUSM_THIS control.mode_set = (value & 0x80) ? 1 : 0; + BX_BUSM_THIS control.modeA_select = (value & 0x60) >> 5; + BX_BUSM_THIS control.portA_dir = (value & 0x10) ? 1 : 0; + BX_BUSM_THIS control.portC_upper_dir = (value & 0x08) ? 1 : 0; + BX_BUSM_THIS control.modeBC_select = (value & 0x04) ? 1 : 0; + BX_BUSM_THIS control.portB_dir = (value & 0x02) ? 1 : 0; + BX_BUSM_THIS control.portC_lower_dir = (value & 0x01) ? 1 : 0; + BX_BUSM_THIS control_val = value; + +/* + switch (value) { + case 0x00: // read buttons + case 0x01: // read x + case 0x02: // read y + case 0x07: + BX_BUSM_THIS cur_command = (Bit8u) value; + break; + case 0x80: // reset + BX_BUSM_THIS cur_command = 0x00; + BX_BUSM_THIS command_val = 0x80; + break; + default: + BX_PANIC(("Unknown command to control port %x", value)); + } +*/ + break; + case 0x023D: // data port + switch (BX_BUSM_THIS cur_command) { + case 0x07: // command mode + switch (value) { + case 0x10: // interrupts off + BX_BUSM_THIS interrupts = 0; + break; + case 0x11: // interrupts on + BX_BUSM_THIS interrupts = 1; + break; + default: + BX_BUSM_THIS command_val = value; + if ((value & 0x20) == 0) + DEV_pic_lower_irq(BUS_MOUSE_IRQ); + } + break; + default: + BX_PANIC(("Unknown command written to data port: %x", BX_BUSM_THIS cur_command)); + } + break; + case 0x023E: + BX_PANIC(("Write to port 0x023E")); + break; + case 0x023F: + BX_PANIC(("Write to port 0x023F")); + break; + } +} + +void bx_busm_c::mouse_enq_static(void *dev, int delta_x, int delta_y, int delta_z, unsigned button_state) +{ + ((bx_busm_c*)dev)->mouse_enq(delta_x, delta_y, delta_z, button_state); +} + +void bx_busm_c::mouse_enq(int delta_x, int delta_y, int delta_z, unsigned button_state) +{ + // scale down the motion + if ((delta_x < -1) || (delta_x > 1)) + delta_x /= 2; + if ((delta_y < -1) || (delta_y > 1)) + delta_y /= 2; + + if(delta_x>127) delta_x=127; + if(delta_y>127) delta_y=127; + if(delta_x<-128) delta_x=-128; + if(delta_y<-128) delta_y=-128; + + BX_BUSM_THIS mouse_delayed_dx+=delta_x; + BX_BUSM_THIS mouse_delayed_dy-=delta_y; + + if (BX_BUSM_THIS mouse_delayed_dx > 127) { + delta_x = 127; + BX_BUSM_THIS mouse_delayed_dx -= 127; + } else if (BX_BUSM_THIS mouse_delayed_dx < -128) { + delta_x = -128; + BX_BUSM_THIS mouse_delayed_dx += 128; + } else { + delta_x = BX_BUSM_THIS mouse_delayed_dx; + BX_BUSM_THIS mouse_delayed_dx = 0; + } + if (BX_BUSM_THIS mouse_delayed_dy > 127) { + delta_y = 127; + BX_BUSM_THIS mouse_delayed_dy -= 127; + } else if (BX_BUSM_THIS mouse_delayed_dy < -128) { + delta_y = -128; + BX_BUSM_THIS mouse_delayed_dy += 128; + } else { + delta_y = BX_BUSM_THIS mouse_delayed_dy; + BX_BUSM_THIS mouse_delayed_dy = 0; + } + + if ((BX_BUSM_THIS cur_command & 0x20) == 0x00) { + BX_BUSM_THIS current_x = (Bit8u) delta_x; + BX_BUSM_THIS current_y = (Bit8u) delta_y; + BX_BUSM_THIS current_b = (Bit8u) ~(((button_state & 0x01)<<2) | ((button_state & 0x02) >> 1)); + } +} + +void bx_busm_c::timer_handler(void *this_ptr) +{ + bx_busm_c *class_ptr = (bx_busm_c *) this_ptr; + class_ptr->busm_timer(); +} + +// Called at 30hz +void bx_busm_c::busm_timer(void) +{ + // if interrupts are on, fire the interrupt + if (BX_BUSM_THIS interrupts) { + DEV_pic_raise_irq(BUS_MOUSE_IRQ); + } +} + +#endif // BX_SUPPORT_BUSMOUSE diff --git a/bochs/iodev/busmouse.h b/bochs/iodev/busmouse.h new file mode 100644 index 00000000..534efbae --- /dev/null +++ b/bochs/iodev/busmouse.h @@ -0,0 +1,108 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2004-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +#if BX_SUPPORT_BUSMOUSE + +#ifndef _PCBUSM_H +#define _PCBUSM_H + +// these keywords should only be used in busmouse.cc +#if BX_USE_BUSM_SMF +# define BX_BUSM_SMF static +# define BX_BUSM_THIS theBusMouse-> +#else +# define BX_BUSM_SMF +# define BX_BUSM_THIS +#endif + +#define BUS_MOUSE_IRQ 5 + +#define PORT_CONTROL 0x023C +#define PORT_DATA 0x023D +#define PORT_SIGNATURE 0x023E +#define PORT_CONFIG 0x023F + +class bx_busm_c : public bx_devmodel_c { +public: + bx_busm_c(); + virtual ~bx_busm_c(); + + virtual void init(void); + virtual void reset(unsigned type) {} + virtual void register_state(void); + +private: + static void timer_handler(void *); + void busm_timer(void); + static void mouse_enq_static(void *dev, int delta_x, int delta_y, int delta_z, unsigned button_state); + void mouse_enq(int delta_x, int delta_y, int delta_z, unsigned button_state); + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_BUSM_SMF + void write(Bit32u address, Bit32u value, unsigned io_len); + Bit32u read(Bit32u address, unsigned io_len); +#endif + + int timer_index; // our timer index + + int mouse_delayed_dx; + int mouse_delayed_dy; + Bit8u current_x, current_y, current_b; + + // signature port + Bit8u sig_port_sequ; // bit0: 0 or 1. A register read rotates between two values? 0xDE and Hardware ID? + + // D7 = Mode set flag (1 = active) + // D6,D5 = Mode selection (port A) + // 00 = Mode 0 = Basic I/O + // 01 = Mode 1 = Strobed I/O + // 10 = Mode 2 = Bi-dir bus + // D4 = Port A direction (1 = input) + // D3 = Port C (upper 4 bits) + // direction. (1 = input) + // D2 = Mode selection (port B & C) + // 0 = Mode 0 = Basic I/O + // 1 = Mode 1 = Strobed I/O + // D1 = Port B direction (1 = input) + // D0 = Port C (lower 4 bits) + // direction. (1 = input) + Bit8u control_val; + struct { + bx_bool mode_set; + Bit8u modeA_select; + bx_bool portA_dir; // 1 = input + bx_bool portC_upper_dir; // 1 = input + bx_bool modeBC_select; + bx_bool portB_dir; // 1 = input + bx_bool portC_lower_dir; // 1 = input + } control; + + + bx_bool interrupts; // 0 or 1. interrupts off or on. + bx_bool packet_update; // 0 or 1. allow the mouse to update the packet? + + Bit8u cur_command; // current command + Bit8u command_val; // current command val +}; + +#endif // #ifndef _PCBUSM_H + +#endif // BX_SUPPORT_BUSMOUSE diff --git a/bochs/iodev/cdrom.cc b/bochs/iodev/cdrom.cc new file mode 100644 index 00000000..d21b75f1 --- /dev/null +++ b/bochs/iodev/cdrom.cc @@ -0,0 +1,1471 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// These are the low-level CDROM functions which are called +// from 'harddrv.cc'. They effect the OS specific functionality +// needed by the CDROM emulation in 'harddrv.cc'. Mostly, just +// ioctl() calls and such. Should be fairly easy to add support +// for your OS if it is not supported yet. + +#ifndef BX_IODEV_CDROM_H +#define BX_IODEV_CDROM_H + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "bochs.h" +#if BX_SUPPORT_CDROM + +#include "cdrom.h" + +#define LOG_THIS /* no SMF tricks here, not needed */ + +extern "C" { +#include +} + +#ifdef __linux__ +extern "C" { +#include +#include +// I use the framesize in non OS specific code too +#define BX_CD_FRAMESIZE CD_FRAMESIZE +} + +#elif defined(__GNU__) || (defined(__CYGWIN32__) && !defined(WIN32)) +extern "C" { +#include +#define BX_CD_FRAMESIZE 2048 +#define CD_FRAMESIZE 2048 +} + +#elif BX_WITH_MACOS +#define BX_CD_FRAMESIZE 2048 +#define CD_FRAMESIZE 2048 + +#elif defined(__sun) +extern "C" { +#include +#include +#include +#include +#define BX_CD_FRAMESIZE CDROM_BLK_2048 +} + +#elif defined(__DJGPP__) +extern "C" { +#include +#define BX_CD_FRAMESIZE 2048 +#define CD_FRAMESIZE 2048 +} + +#elif defined(__BEOS__) +#include "cdrom_beos.h" +#define BX_CD_FRAMESIZE 2048 + +#elif (defined(__NetBSD__) || defined(__NetBSD_kernel__) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) +// OpenBSD pre version 2.7 may require extern "C" { } structure around +// all the includes, because the i386 sys/disklabel.h contains code which +// c++ considers invalid. +#include +#include +#include +#include +#include +#include +// ntohl(x) et al have been moved out of sys/param.h in FreeBSD 5 +#include + +// XXX +#define BX_CD_FRAMESIZE 2048 +#define CD_FRAMESIZE 2048 + +#elif defined(__APPLE__) +#include +#include +#include +#include +#if defined (__GNUC__) && (__GNUC__ >= 4) +#include +#else +#include +#endif +#include +#include +#include + +#define Float32 KLUDGE_Float32 +#define Float64 KLUDGE_Float64 +#include +#include +#include +#include +#include +#include +#undef Float32 +#undef Float64 + +// These definitions were taken from mount_cd9660.c +// There are some similar definitions in IOCDTypes.h +// however there seems to be some dissagreement in +// the definition of CDTOC.length +struct _CDMSF { + u_char minute; + u_char second; + u_char frame; +}; + +#define MSF_TO_LBA(msf) \ + (((((msf).minute * 60UL) + (msf).second) * 75UL) + (msf).frame - 150) + +struct _CDTOC_Desc { + u_char session; + u_char ctrl_adr; /* typed to be machine and compiler independent */ + u_char tno; + u_char point; + struct _CDMSF address; + u_char zero; + struct _CDMSF p; +}; + +struct _CDTOC { + u_short length; /* in native cpu endian */ + u_char first_session; + u_char last_session; + struct _CDTOC_Desc trackdesc[1]; +}; + +static kern_return_t FindEjectableCDMedia(io_iterator_t *mediaIterator, mach_port_t *masterPort); +static kern_return_t GetDeviceFilePath(io_iterator_t mediaIterator, char *deviceFilePath, CFIndex maxPathSize); +//int OpenDrive(const char *deviceFilePath); +static struct _CDTOC *ReadTOC(const char *devpath); + +static char CDDevicePath[MAXPATHLEN]; + +#define BX_CD_FRAMESIZE 2048 +#define CD_FRAMESIZE 2048 + +#elif defined(WIN32) +// windows.h included by bochs.h +#include +#include "aspi-win32.h" +#include "scsidefs.h" + +DWORD (*GetASPI32SupportInfo)(void); +DWORD (*SendASPI32Command)(LPSRB); +BOOL (*GetASPI32Buffer)(PASPI32BUFF); +BOOL (*FreeASPI32Buffer)(PASPI32BUFF); +BOOL (*TranslateASPI32Address)(PDWORD,PDWORD); +DWORD (*GetASPI32DLLVersion)(void); + + +static OSVERSIONINFO osinfo; +static BOOL isWindowsXP; +static BOOL bHaveDev; +static UINT cdromCount = 0; +static HINSTANCE hASPI = NULL; + +#define BX_CD_FRAMESIZE 2048 +#define CD_FRAMESIZE 2048 + +// READ_TOC_EX structure(s) and #defines + +#define CDROM_READ_TOC_EX_FORMAT_TOC 0x00 +#define CDROM_READ_TOC_EX_FORMAT_SESSION 0x01 +#define CDROM_READ_TOC_EX_FORMAT_FULL_TOC 0x02 +#define CDROM_READ_TOC_EX_FORMAT_PMA 0x03 +#define CDROM_READ_TOC_EX_FORMAT_ATIP 0x04 +#define CDROM_READ_TOC_EX_FORMAT_CDTEXT 0x05 + +#define IOCTL_CDROM_BASE FILE_DEVICE_CD_ROM +#define IOCTL_CDROM_READ_TOC_EX CTL_CODE(IOCTL_CDROM_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS) +#ifndef IOCTL_DISK_GET_LENGTH_INFO +#define IOCTL_DISK_GET_LENGTH_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0017, METHOD_BUFFERED, FILE_READ_ACCESS) +#endif + +typedef struct _CDROM_READ_TOC_EX { + UCHAR Format : 4; + UCHAR Reserved1 : 3; // future expansion + UCHAR Msf : 1; + UCHAR SessionTrack; + UCHAR Reserved2; // future expansion + UCHAR Reserved3; // future expansion +} CDROM_READ_TOC_EX, *PCDROM_READ_TOC_EX; + +typedef struct _TRACK_DATA { + UCHAR Reserved; + UCHAR Control : 4; + UCHAR Adr : 4; + UCHAR TrackNumber; + UCHAR Reserved1; + UCHAR Address[4]; +} TRACK_DATA, *PTRACK_DATA; + +typedef struct _CDROM_TOC_SESSION_DATA { + // Header + UCHAR Length[2]; // add two bytes for this field + UCHAR FirstCompleteSession; + UCHAR LastCompleteSession; + // One track, representing the first track + // of the last finished session + TRACK_DATA TrackData[1]; +} CDROM_TOC_SESSION_DATA, *PCDROM_TOC_SESSION_DATA; + +// End READ_TOC_EX structure(s) and #defines + +#else // all others (Irix, Tru64) +#include +#include +#include +#define BX_CD_FRAMESIZE 2048 +#define CD_FRAMESIZE 2048 +#endif + +#include + +#ifdef __APPLE__ +static kern_return_t FindEjectableCDMedia(io_iterator_t *mediaIterator, + mach_port_t *masterPort) +{ + kern_return_t kernResult; + CFMutableDictionaryRef classesToMatch; + kernResult = IOMasterPort(bootstrap_port, masterPort); + if (kernResult != KERN_SUCCESS) + { + fprintf (stderr, "IOMasterPort returned %d\n", kernResult); + return kernResult; + } + // CD media are instances of class kIOCDMediaClass. + classesToMatch = IOServiceMatching(kIOCDMediaClass); + if (classesToMatch == NULL) + fprintf (stderr, "IOServiceMatching returned a NULL dictionary.\n"); + else + { + // Each IOMedia object has a property with key kIOMediaEjectableKey + // which is true if the media is indeed ejectable. So add property + // to CFDictionary for matching. + CFDictionarySetValue(classesToMatch, + CFSTR(kIOMediaEjectableKey), kCFBooleanTrue); + } + kernResult = IOServiceGetMatchingServices(*masterPort, + classesToMatch, mediaIterator); + if ((kernResult != KERN_SUCCESS) || (*mediaIterator == NULL)) + fprintf(stderr, "No ejectable CD media found.\n kernResult = %d\n", kernResult); + + return kernResult; +} + +static kern_return_t GetDeviceFilePath(io_iterator_t mediaIterator, + char *deviceFilePath, CFIndex maxPathSize) +{ + io_object_t nextMedia; + kern_return_t kernResult = KERN_FAILURE; + nextMedia = IOIteratorNext(mediaIterator); + if (nextMedia == NULL) + { + *deviceFilePath = '\0'; + } + else + { + CFTypeRef deviceFilePathAsCFString; + deviceFilePathAsCFString = IORegistryEntryCreateCFProperty(nextMedia, CFSTR(kIOBSDNameKey), + kCFAllocatorDefault, 0); + *deviceFilePath = '\0'; + if (deviceFilePathAsCFString) + { + size_t devPathLength = strlen(_PATH_DEV); + strcpy(deviceFilePath, _PATH_DEV); + if (CFStringGetCString((const __CFString *) deviceFilePathAsCFString, + deviceFilePath + devPathLength, + maxPathSize - devPathLength, + kCFStringEncodingASCII)) + { + // fprintf(stderr, "BSD path: %s\n", deviceFilePath); + kernResult = KERN_SUCCESS; + } + CFRelease(deviceFilePathAsCFString); + } + } + + IOObjectRelease(nextMedia); + return kernResult; +} + +static int OpenDrive(const char *deviceFilePath) +{ + int fileDescriptor = open(deviceFilePath, O_RDONLY); + if (fileDescriptor == -1) + fprintf(stderr, "Error %d opening device %s.\n", errno, deviceFilePath); + return fileDescriptor; +} + +static struct _CDTOC * ReadTOC(const char *devpath) +{ + struct _CDTOC * toc_p = NULL; + io_iterator_t iterator = 0; + io_registry_entry_t service = 0; + CFDictionaryRef properties = 0; + CFDataRef data = 0; + mach_port_t port = 0; + char *devname; + + if ((devname = strrchr(devpath, '/')) != NULL) { + ++devname; + } + else { + devname = (char *) devpath; + } + + if (IOMasterPort(bootstrap_port, &port) != KERN_SUCCESS) { + fprintf(stderr, "IOMasterPort failed\n"); + goto Exit; + } + + if (IOServiceGetMatchingServices(port, IOBSDNameMatching(port, 0, devname), + &iterator) != KERN_SUCCESS) { + fprintf(stderr, "IOServiceGetMatchingServices failed\n"); + goto Exit; + } + + service = IOIteratorNext(iterator); + + IOObjectRelease(iterator); + + iterator = 0; + + while (service && !IOObjectConformsTo(service, "IOCDMedia")) { + if (IORegistryEntryGetParentIterator(service, kIOServicePlane, + &iterator) != KERN_SUCCESS) + { + fprintf(stderr, "IORegistryEntryGetParentIterator failed\n"); + goto Exit; + } + + IOObjectRelease(service); + service = IOIteratorNext(iterator); + IOObjectRelease(iterator); + } + + if (service == NULL) { + fprintf(stderr, "CD media not found\n"); + goto Exit; + } + + if (IORegistryEntryCreateCFProperties(service, (__CFDictionary **) &properties, + kCFAllocatorDefault, + kNilOptions) != KERN_SUCCESS) + { + fprintf(stderr, "IORegistryEntryGetParentIterator failed\n"); + goto Exit; + } + + data = (CFDataRef) CFDictionaryGetValue(properties, CFSTR(kIOCDMediaTOCKey)); + if (data == NULL) { + fprintf(stderr, "CFDictionaryGetValue failed\n"); + goto Exit; + } + else { + CFRange range; + CFIndex buflen; + + buflen = CFDataGetLength(data) + 1; + range = CFRangeMake(0, buflen); + toc_p = (struct _CDTOC *) malloc(buflen); + if (toc_p == NULL) { + fprintf(stderr, "Out of memory\n"); + goto Exit; + } + else { + CFDataGetBytes(data, range, (unsigned char *) toc_p); + } + + /* + fprintf(stderr, "Table of contents\n length %d first %d last %d\n", + toc_p->length, toc_p->first_session, toc_p->last_session); + */ + + CFRelease(properties); + } + +Exit: + + if (service) { + IOObjectRelease(service); + } + + return toc_p; +} +#endif + +#ifdef WIN32 + +bool ReadCDSector(unsigned int hid, unsigned int tid, unsigned int lun, unsigned long frame, unsigned char *buf, int bufsize) +{ + HANDLE hEventSRB; + SRB_ExecSCSICmd srb; + DWORD dwStatus; + + hEventSRB = CreateEvent(NULL, TRUE, FALSE, NULL); + + memset(&srb,0,sizeof(SRB_ExecSCSICmd)); + srb.SRB_Cmd = SC_EXEC_SCSI_CMD; + srb.SRB_HaId = hid; + srb.SRB_Target = tid; + srb.SRB_Lun = lun; + srb.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY; + srb.SRB_SenseLen = SENSE_LEN; + srb.SRB_PostProc = hEventSRB; + srb.SRB_BufPointer = buf; + srb.SRB_BufLen = bufsize; + srb.SRB_CDBLen = 10; + srb.CDBByte[0] = SCSI_READ10; + srb.CDBByte[2] = (unsigned char) (frame>>24); + srb.CDBByte[3] = (unsigned char) (frame>>16); + srb.CDBByte[4] = (unsigned char) (frame>>8); + srb.CDBByte[5] = (unsigned char) (frame); + srb.CDBByte[7] = 0; + srb.CDBByte[8] = 1; /* read 1 frames */ + + ResetEvent(hEventSRB); + dwStatus = SendASPI32Command((SRB *)&srb); + if(dwStatus == SS_PENDING) { + WaitForSingleObject(hEventSRB, 100000); + } + CloseHandle(hEventSRB); + return (srb.SRB_TargStat == STATUS_GOOD); +} + +int GetCDCapacity(unsigned int hid, unsigned int tid, unsigned int lun) +{ + HANDLE hEventSRB; + SRB_ExecSCSICmd srb; + DWORD dwStatus; + unsigned char buf[8]; + + hEventSRB = CreateEvent(NULL, TRUE, FALSE, NULL); + + memset(&buf, 0, sizeof(buf)); + memset(&srb,0,sizeof(SRB_ExecSCSICmd)); + srb.SRB_Cmd = SC_EXEC_SCSI_CMD; + srb.SRB_HaId = hid; + srb.SRB_Target = tid; + srb.SRB_Lun = lun; + srb.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY; + srb.SRB_SenseLen = SENSE_LEN; + srb.SRB_PostProc = hEventSRB; + srb.SRB_BufPointer = (unsigned char *)buf; + srb.SRB_BufLen = 8; + srb.SRB_CDBLen = 10; + srb.CDBByte[0] = SCSI_READCDCAP; + srb.CDBByte[2] = 0; + srb.CDBByte[3] = 0; + srb.CDBByte[4] = 0; + srb.CDBByte[5] = 0; + srb.CDBByte[8] = 0; + + ResetEvent(hEventSRB); + dwStatus = SendASPI32Command((SRB *)&srb); + if(dwStatus == SS_PENDING) { + WaitForSingleObject(hEventSRB, 100000); + } + + CloseHandle(hEventSRB); + return ((buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3]) * ((buf[4] << 24) + (buf[5] << 16) + (buf[6] << 8) + buf[7]); +} + +#endif + +static unsigned int cdrom_count = 0; + +cdrom_interface::cdrom_interface(const char *dev) +{ + char prefix[6]; + + sprintf(prefix, "CD%d", ++cdrom_count); + put(prefix); + fd = -1; // File descriptor not yet allocated + + if (dev == NULL) { + path = NULL; + } else { + path = strdup(dev); + } + using_file=0; +#ifdef WIN32 + bUseASPI = FALSE; + osinfo.dwOSVersionInfoSize = sizeof(osinfo); + GetVersionEx(&osinfo); + isWindowsXP = (osinfo.dwMajorVersion >= 5) && (osinfo.dwMinorVersion >= 1); +#endif +} + +void cdrom_interface::init(void) +{ + BX_DEBUG(("Init $Id$")); + BX_INFO(("file = '%s'",path)); +} + +cdrom_interface::~cdrom_interface(void) +{ +#ifdef WIN32 +#else + if (fd >= 0) + close(fd); +#endif + if (path) + free(path); + BX_DEBUG(("Exit")); +} + +bx_bool cdrom_interface::insert_cdrom(const char *dev) +{ + unsigned char buffer[BX_CD_FRAMESIZE]; +#ifndef WIN32 + ssize_t ret; +#endif + + // Load CD-ROM. Returns 0 if CD is not ready. + if (dev != NULL) path = strdup(dev); + BX_INFO (("load cdrom with path=%s", path)); +#ifdef WIN32 + char drive[256]; + if ((path[1] == ':') && (strlen(path) == 2)) + { + if(osinfo.dwPlatformId == VER_PLATFORM_WIN32_NT) { + // Use direct device access under windows NT/2k/XP + + // With all the backslashes it's hard to see, but to open D: drive + // the name would be: \\.\d: + sprintf(drive, "\\\\.\\%s", path); + BX_INFO (("Using direct access for cdrom.")); + // This trick only works for Win2k and WinNT, so warn the user of that. + } else { + BX_INFO(("Using ASPI for cdrom. Drive letters are unused yet.")); + bUseASPI = TRUE; + } + using_file = 0; + } + else + { + strcpy(drive,path); + using_file = 1; + BX_INFO (("Opening image file as a cd")); + } + if(bUseASPI) { + DWORD d; + UINT cdr, cnt, max; + UINT i, j, k; + SRB_HAInquiry sh; + SRB_GDEVBlock sd; + if (!hASPI) { + hASPI = LoadLibrary("WNASPI32.DLL"); + if (hASPI) { + SendASPI32Command = (DWORD(*)(LPSRB))GetProcAddress(hASPI, "SendASPI32Command"); + GetASPI32DLLVersion = (DWORD(*)(void))GetProcAddress(hASPI, "GetASPI32DLLVersion"); + GetASPI32SupportInfo = (DWORD(*)(void))GetProcAddress(hASPI, "GetASPI32SupportInfo"); + d = GetASPI32DLLVersion(); + BX_INFO(("WNASPI32.DLL version %d.%02d initialized", d & 0xff, (d >> 8) & 0xff)); + } else { + BX_PANIC(("Could not load ASPI drivers, so cdrom access will fail")); + return 0; + } + } + cdr = 0; + bHaveDev = FALSE; + d = GetASPI32SupportInfo(); + cnt = LOBYTE(LOWORD(d)); + for(i = 0; i < cnt; i++) { + memset(&sh, 0, sizeof(sh)); + sh.SRB_Cmd = SC_HA_INQUIRY; + sh.SRB_HaId = i; + SendASPI32Command((LPSRB)&sh); + if(sh.SRB_Status != SS_COMP) + continue; + + max = (int)sh.HA_Unique[3]; + for(j = 0; j < max; j++) { + for(k = 0; k < 8; k++) { + memset(&sd, 0, sizeof(sd)); + sd.SRB_Cmd = SC_GET_DEV_TYPE; + sd.SRB_HaId = i; + sd.SRB_Target = j; + sd.SRB_Lun = k; + SendASPI32Command((LPSRB)&sd); + if(sd.SRB_Status == SS_COMP) { + if(sd.SRB_DeviceType == DTYPE_CDROM) { + cdr++; + if(cdr > cdromCount) { + hid = i; + tid = j; + lun = k; + cdromCount++; + bHaveDev = TRUE; + } + } + } + if(bHaveDev) break; + } + if(bHaveDev) break; + } + } + fd=1; + } else { + hFile=CreateFile((char *)&drive, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL); + if (hFile !=(void *)0xFFFFFFFF) + fd=1; + if (!using_file) { + DWORD lpBytesReturned; + DeviceIoControl(hFile, IOCTL_STORAGE_LOAD_MEDIA, NULL, 0, NULL, 0, &lpBytesReturned, NULL); + } + } +#elif defined(__APPLE__) + if(strcmp(path, "drive") == 0) + { + mach_port_t masterPort = NULL; + io_iterator_t mediaIterator; + kern_return_t kernResult; + + BX_INFO(("Insert CDROM")); + + kernResult = FindEjectableCDMedia(&mediaIterator, &masterPort); + if (kernResult != KERN_SUCCESS) { + BX_INFO(("Unable to find CDROM")); + return 0; + } + + kernResult = GetDeviceFilePath(mediaIterator, CDDevicePath, sizeof(CDDevicePath)); + if (kernResult != KERN_SUCCESS) { + BX_INFO(("Unable to get CDROM device file path")); + return 0; + } + + // Here a cdrom was found so see if we can read from it. + // At this point a failure will result in panic. + if (strlen(CDDevicePath)) { + fd = open(CDDevicePath, O_RDONLY); + } + } + else { + fd = open(path, O_RDONLY); + } +#else + // all platforms except win32 + fd = open(path, O_RDONLY); +#endif + if (fd < 0) { + BX_ERROR(("open cd failed for %s: %s", path, strerror(errno))); + return 0; + } +#ifndef WIN32 + // do fstat to determine if it's a file or a device, then set using_file. + struct stat stat_buf; + ret = fstat (fd, &stat_buf); + if (ret) { + BX_PANIC (("fstat cdrom file returned error: %s", strerror (errno))); + } + if (S_ISREG (stat_buf.st_mode)) { + using_file = 1; + BX_INFO (("Opening image file as a cd.")); + } else { + using_file = 0; + BX_INFO (("Using direct access for cdrom.")); + } +#endif + + // I just see if I can read a sector to verify that a + // CD is in the drive and readable. + return read_block(buffer, 0, 2048); +} + +bx_bool cdrom_interface::start_cdrom() +{ + // Spin up the cdrom drive. + + if (fd >= 0) { +#if defined(__NetBSD__) || defined(__NetBSD_kernel__) + if (ioctl (fd, CDIOCSTART) < 0) + BX_DEBUG(("start_cdrom: start returns error: %s", strerror (errno))); + return 1; +#else + BX_INFO(("start_cdrom: your OS is not supported yet")); + return 0; // OS not supported yet, return 0 always +#endif + } + return 0; +} + +void cdrom_interface::eject_cdrom() +{ + // Logically eject the CD. I suppose we could stick in + // some ioctl() calls to really eject the CD as well. + + if (fd >= 0) { +#if (defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) + (void) ioctl (fd, CDIOCALLOW); + if (ioctl (fd, CDIOCEJECT) < 0) + BX_DEBUG(("eject_cdrom: eject returns error")); +#endif + +#ifdef WIN32 + if (using_file == 0) + { + if(bUseASPI) { + } else { + DWORD lpBytesReturned; + DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA, NULL, 0, NULL, 0, &lpBytesReturned, NULL); + } + } +#else // WIN32 + +#if __linux__ + if (!using_file) + ioctl (fd, CDROMEJECT, NULL); +#endif + + close(fd); +#endif // WIN32 + fd = -1; + } +} + + +bx_bool cdrom_interface::read_toc(Bit8u* buf, int* length, bx_bool msf, int start_track, int format) +{ + unsigned i; + // Read CD TOC. Returns 0 if start track is out of bounds. + + if (fd < 0) { + BX_PANIC(("cdrom: read_toc: file not open.")); + return 0; + } + + // This is a hack and works okay if there's one rom track only +#if defined(WIN32) + if (!isWindowsXP || using_file) { +#else + if (using_file || (format != 0)) { +#endif + Bit32u blocks; + int len = 4; + + switch (format) { + case 0: + // From atapi specs : start track can be 0-63, AA + if ((start_track > 1) && (start_track != 0xaa)) + return 0; + + buf[2] = 1; + buf[3] = 1; + + if (start_track <= 1) { + buf[len++] = 0; // Reserved + buf[len++] = 0x14; // ADR, control + buf[len++] = 1; // Track number + buf[len++] = 0; // Reserved + + // Start address + if (msf) { + buf[len++] = 0; // reserved + buf[len++] = 0; // minute + buf[len++] = 2; // second + buf[len++] = 0; // frame + } else { + buf[len++] = 0; + buf[len++] = 0; + buf[len++] = 0; + buf[len++] = 0; // logical sector 0 + } + } + + // Lead out track + buf[len++] = 0; // Reserved + buf[len++] = 0x16; // ADR, control + buf[len++] = 0xaa; // Track number + buf[len++] = 0; // Reserved + + blocks = capacity(); + + // Start address + if (msf) { + buf[len++] = 0; // reserved + buf[len++] = (Bit8u)(((blocks + 150) / 75) / 60); // minute + buf[len++] = (Bit8u)(((blocks + 150) / 75) % 60); // second + buf[len++] = (Bit8u)((blocks + 150) % 75); // frame; + } else { + buf[len++] = (blocks >> 24) & 0xff; + buf[len++] = (blocks >> 16) & 0xff; + buf[len++] = (blocks >> 8) & 0xff; + buf[len++] = (blocks >> 0) & 0xff; + } + buf[0] = ((len-2) >> 8) & 0xff; + buf[1] = (len-2) & 0xff; + break; + + case 1: + // multi session stuff - emulate a single session only + buf[0] = 0; + buf[1] = 0x0a; + buf[2] = 1; + buf[3] = 1; + for (i = 0; i < 8; i++) + buf[4+i] = 0; + len = 12; + break; + + case 2: + // raw toc - emulate a single session only (ported from qemu) + buf[2] = 1; + buf[3] = 1; + + for (i = 0; i < 4; i++) { + buf[len++] = 1; + buf[len++] = 0x14; + buf[len++] = 0; + if (i < 3) { + buf[len++] = 0xa0 + i; + } else { + buf[len++] = 1; + } + buf[len++] = 0; + buf[len++] = 0; + buf[len++] = 0; + if (i < 2) { + buf[len++] = 0; + buf[len++] = 1; + buf[len++] = 0; + buf[len++] = 0; + } else if (i == 2) { + blocks = capacity(); + if (msf) { + buf[len++] = 0; // reserved + buf[len++] = (Bit8u)(((blocks + 150) / 75) / 60); // minute + buf[len++] = (Bit8u)(((blocks + 150) / 75) % 60); // second + buf[len++] = (Bit8u)((blocks + 150) % 75); // frame; + } else { + buf[len++] = (blocks >> 24) & 0xff; + buf[len++] = (blocks >> 16) & 0xff; + buf[len++] = (blocks >> 8) & 0xff; + buf[len++] = (blocks >> 0) & 0xff; + } + } else { + buf[len++] = 0; + buf[len++] = 0; + buf[len++] = 0; + buf[len++] = 0; + } + } + buf[0] = ((len-2) >> 8) & 0xff; + buf[1] = (len-2) & 0xff; + break; + + default: + BX_PANIC(("cdrom: read_toc: unknown format")); + return 0; + } + + *length = len; + + return 1; + } + // all these implementations below are the platform-dependent code required + // to read the TOC from a physical cdrom. +#ifdef WIN32 + if (isWindowsXP) + { + // This only works with WinXP + CDROM_READ_TOC_EX input; + memset(&input, 0, sizeof(input)); + input.Format = format; + input.Msf = msf; + input.SessionTrack = start_track; + + // We have to allocate a chunk of memory to make sure it is aligned on a sector base. + UCHAR *data = (UCHAR *) VirtualAlloc(NULL, 2048*2, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE); + unsigned long iBytesReturned; + DeviceIoControl(hFile, IOCTL_CDROM_READ_TOC_EX, &input, sizeof(input), data, 804, &iBytesReturned, NULL); + // now copy it to the users buffer and free our buffer + *length = data[1] + (data[0] << 8) + 2; + memcpy(buf, data, *length); + VirtualFree(data, 0, MEM_RELEASE); + + return 1; + } else { + return 0; + } +#elif __linux__ || defined(__sun) + { + struct cdrom_tochdr tochdr; + if (ioctl(fd, CDROMREADTOCHDR, &tochdr)) + BX_PANIC(("cdrom: read_toc: READTOCHDR failed.")); + + if ((start_track > tochdr.cdth_trk1) && (start_track != 0xaa)) + return 0; + + buf[2] = tochdr.cdth_trk0; + buf[3] = tochdr.cdth_trk1; + + if (start_track < tochdr.cdth_trk0) + start_track = tochdr.cdth_trk0; + + int len = 4; + for (int i = start_track; i <= tochdr.cdth_trk1; i++) { + struct cdrom_tocentry tocentry; + tocentry.cdte_format = (msf) ? CDROM_MSF : CDROM_LBA; + tocentry.cdte_track = i; + if (ioctl(fd, CDROMREADTOCENTRY, &tocentry)) + BX_PANIC(("cdrom: read_toc: READTOCENTRY failed.")); + buf[len++] = 0; // Reserved + buf[len++] = (tocentry.cdte_adr << 4) | tocentry.cdte_ctrl ; // ADR, control + buf[len++] = i; // Track number + buf[len++] = 0; // Reserved + + // Start address + if (msf) { + buf[len++] = 0; // reserved + buf[len++] = tocentry.cdte_addr.msf.minute; + buf[len++] = tocentry.cdte_addr.msf.second; + buf[len++] = tocentry.cdte_addr.msf.frame; + } else { + buf[len++] = (((unsigned)tocentry.cdte_addr.lba) >> 24) & 0xff; + buf[len++] = (((unsigned)tocentry.cdte_addr.lba) >> 16) & 0xff; + buf[len++] = (((unsigned)tocentry.cdte_addr.lba) >> 8) & 0xff; + buf[len++] = (((unsigned)tocentry.cdte_addr.lba) >> 0) & 0xff; + } + } + + // Lead out track + struct cdrom_tocentry tocentry; + tocentry.cdte_format = (msf) ? CDROM_MSF : CDROM_LBA; +#ifdef CDROM_LEADOUT + tocentry.cdte_track = CDROM_LEADOUT; +#else + tocentry.cdte_track = 0xaa; +#endif + if (ioctl(fd, CDROMREADTOCENTRY, &tocentry)) + BX_PANIC(("cdrom: read_toc: READTOCENTRY lead-out failed.")); + buf[len++] = 0; // Reserved + buf[len++] = (tocentry.cdte_adr << 4) | tocentry.cdte_ctrl ; // ADR, control + buf[len++] = 0xaa; // Track number + buf[len++] = 0; // Reserved + + // Start address + if (msf) { + buf[len++] = 0; // reserved + buf[len++] = tocentry.cdte_addr.msf.minute; + buf[len++] = tocentry.cdte_addr.msf.second; + buf[len++] = tocentry.cdte_addr.msf.frame; + } else { + buf[len++] = (((unsigned)tocentry.cdte_addr.lba) >> 24) & 0xff; + buf[len++] = (((unsigned)tocentry.cdte_addr.lba) >> 16) & 0xff; + buf[len++] = (((unsigned)tocentry.cdte_addr.lba) >> 8) & 0xff; + buf[len++] = (((unsigned)tocentry.cdte_addr.lba) >> 0) & 0xff; + } + + buf[0] = ((len-2) >> 8) & 0xff; + buf[1] = (len-2) & 0xff; + + *length = len; + + return 1; + } +#elif (defined(__NetBSD__) || defined(__NetBSD_kernel__) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) + { + struct ioc_toc_header h; + struct ioc_read_toc_entry t; + + if (ioctl (fd, CDIOREADTOCHEADER, &h) < 0) + BX_PANIC(("cdrom: read_toc: READTOCHDR failed.")); + + if ((start_track > h.ending_track) && (start_track != 0xaa)) + return 0; + + buf[2] = h.starting_track; + buf[3] = h.ending_track; + + if (start_track < h.starting_track) + start_track = h.starting_track; + + int len = 4; + for (int i = start_track; i <= h.ending_track; i++) { + struct cd_toc_entry tocentry; + t.address_format = (msf) ? CD_MSF_FORMAT : CD_LBA_FORMAT; + t.starting_track = i; + t.data_len = sizeof(tocentry); + t.data = &tocentry; + + if (ioctl (fd, CDIOREADTOCENTRYS, &t) < 0) + BX_PANIC(("cdrom: read_toc: READTOCENTRY failed.")); + + buf[len++] = 0; // Reserved + buf[len++] = (tocentry.addr_type << 4) | tocentry.control ; // ADR, control + buf[len++] = i; // Track number + buf[len++] = 0; // Reserved + + // Start address + if (msf) { + buf[len++] = 0; // reserved + buf[len++] = tocentry.addr.msf.minute; + buf[len++] = tocentry.addr.msf.second; + buf[len++] = tocentry.addr.msf.frame; + } else { + buf[len++] = (((unsigned)tocentry.addr.lba) >> 24) & 0xff; + buf[len++] = (((unsigned)tocentry.addr.lba) >> 16) & 0xff; + buf[len++] = (((unsigned)tocentry.addr.lba) >> 8) & 0xff; + buf[len++] = (((unsigned)tocentry.addr.lba) >> 0) & 0xff; + } + } + + // Lead out track + struct cd_toc_entry tocentry; + t.address_format = (msf) ? CD_MSF_FORMAT : CD_LBA_FORMAT; + t.starting_track = 0xaa; + t.data_len = sizeof(tocentry); + t.data = &tocentry; + + if (ioctl (fd, CDIOREADTOCENTRYS, &t) < 0) + BX_PANIC(("cdrom: read_toc: READTOCENTRY lead-out failed.")); + + buf[len++] = 0; // Reserved + buf[len++] = (tocentry.addr_type << 4) | tocentry.control ; // ADR, control + buf[len++] = 0xaa; // Track number + buf[len++] = 0; // Reserved + + // Start address + if (msf) { + buf[len++] = 0; // reserved + buf[len++] = tocentry.addr.msf.minute; + buf[len++] = tocentry.addr.msf.second; + buf[len++] = tocentry.addr.msf.frame; + } else { + buf[len++] = (((unsigned)tocentry.addr.lba) >> 24) & 0xff; + buf[len++] = (((unsigned)tocentry.addr.lba) >> 16) & 0xff; + buf[len++] = (((unsigned)tocentry.addr.lba) >> 8) & 0xff; + buf[len++] = (((unsigned)tocentry.addr.lba) >> 0) & 0xff; + } + + buf[0] = ((len-2) >> 8) & 0xff; + buf[1] = (len-2) & 0xff; + + *length = len; + + return 1; + } +#elif defined(__APPLE__) + // Read CD TOC. Returns 0 if start track is out of bounds. + +#if 1 + { + struct _CDTOC *toc = ReadTOC(CDDevicePath); + + if ((start_track > toc->last_session) && (start_track != 0xaa)) + return 0; + + buf[2] = toc->first_session; + buf[3] = toc->last_session; + + if (start_track < toc->first_session) + start_track = toc->first_session; + + int len = 4; + for (int i = start_track; i <= toc->last_session; i++) { + buf[len++] = 0; // Reserved + buf[len++] = toc->trackdesc[i].ctrl_adr ; // ADR, control + buf[len++] = i; // Track number + buf[len++] = 0; // Reserved + + // Start address + if (msf) { + buf[len++] = 0; // reserved + buf[len++] = toc->trackdesc[i].address.minute; + buf[len++] = toc->trackdesc[i].address.second; + buf[len++] = toc->trackdesc[i].address.frame; + } else { + unsigned lba = (unsigned)(MSF_TO_LBA(toc->trackdesc[i].address)); + buf[len++] = (lba >> 24) & 0xff; + buf[len++] = (lba >> 16) & 0xff; + buf[len++] = (lba >> 8) & 0xff; + buf[len++] = (lba >> 0) & 0xff; + } + } + + // Lead out track + buf[len++] = 0; // Reserved + buf[len++] = 0x16; // ADR, control + buf[len++] = 0xaa; // Track number + buf[len++] = 0; // Reserved + + Bit32u blocks = capacity(); + + // Start address + if (msf) { + buf[len++] = 0; // reserved + buf[len++] = (Bit8u)(((blocks + 150) / 75) / 60); // minute + buf[len++] = (Bit8u)(((blocks + 150) / 75) % 60); // second + buf[len++] = (Bit8u)((blocks + 150) % 75); // frame; + } else { + buf[len++] = (blocks >> 24) & 0xff; + buf[len++] = (blocks >> 16) & 0xff; + buf[len++] = (blocks >> 8) & 0xff; + buf[len++] = (blocks >> 0) & 0xff; + } + + buf[0] = ((len-2) >> 8) & 0xff; + buf[1] = (len-2) & 0xff; + + *length = len; + + return 1; + } +#else + BX_INFO(("Read TOC - Not Implemented")); + return 0; +#endif +#else + BX_INFO(("read_toc: your OS is not supported yet")); + return 0; // OS not supported yet, return 0 always. +#endif +} + +Bit32u cdrom_interface::capacity() +{ + // Return CD-ROM capacity. I believe you want to return + // the number of blocks of capacity the actual media has. + +#if !defined WIN32 + // win32 has its own way of doing this + if (using_file) { + // return length of the image file + struct stat stat_buf; + int ret = fstat (fd, &stat_buf); + if (ret) { + BX_PANIC (("fstat on cdrom image returned err: %s", strerror(errno))); + } + if ((stat_buf.st_size % 2048) != 0) { + BX_ERROR (("expected cdrom image to be a multiple of 2048 bytes")); + } + return (stat_buf.st_size / 2048); + } +#endif + +#ifdef __BEOS__ + return GetNumDeviceBlocks(fd, BX_CD_FRAMESIZE); +#elif defined(__sun) + { + struct stat buf = {0}; + + if (fd < 0) { + BX_PANIC(("cdrom: capacity: file not open.")); + } + + if(fstat(fd, &buf) != 0) + BX_PANIC(("cdrom: capacity: stat() failed.")); + + return(buf.st_size); + } +#elif (defined(__NetBSD__) || defined(__NetBSD_kernel__) || defined(__OpenBSD__)) + { + // We just read the disklabel, imagine that... + struct disklabel lp; + + if (fd < 0) + BX_PANIC(("cdrom: capacity: file not open.")); + + if (ioctl(fd, DIOCGDINFO, &lp) < 0) + BX_PANIC(("cdrom: ioctl(DIOCGDINFO) failed")); + + BX_DEBUG(("capacity: %u", lp.d_secperunit)); + return(lp.d_secperunit); + } +#elif defined(__linux__) + { + // Read the TOC to get the data size, since BLKGETSIZE doesn't work on + // non-ATAPI drives. This is based on Keith Jones code below. + // 21 June 2001 + + int i, dtrk_lba, num_sectors; + int dtrk = 0; + struct cdrom_tochdr td; + struct cdrom_tocentry te; + + if (fd < 0) + BX_PANIC(("cdrom: capacity: file not open.")); + + if (ioctl(fd, CDROMREADTOCHDR, &td) < 0) + BX_PANIC(("cdrom: ioctl(CDROMREADTOCHDR) failed")); + + num_sectors = -1; + dtrk_lba = -1; + + for (i = td.cdth_trk0; i <= td.cdth_trk1; i++) { + te.cdte_track = i; + te.cdte_format = CDROM_LBA; + if (ioctl(fd, CDROMREADTOCENTRY, &te) < 0) + BX_PANIC(("cdrom: ioctl(CDROMREADTOCENTRY) failed")); + + if (dtrk_lba != -1) { + num_sectors = te.cdte_addr.lba - dtrk_lba; + break; + } + if (te.cdte_ctrl & CDROM_DATA_TRACK) { + dtrk = i; + dtrk_lba = te.cdte_addr.lba; + } + } + + if (num_sectors < 0) { + if (dtrk_lba != -1) { + te.cdte_track = CDROM_LEADOUT; + te.cdte_format = CDROM_LBA; + if (ioctl(fd, CDROMREADTOCENTRY, &te) < 0) + BX_PANIC(("cdrom: ioctl(CDROMREADTOCENTRY) failed")); + num_sectors = te.cdte_addr.lba - dtrk_lba; + } else + BX_PANIC(("cdrom: no data track found")); + } + + BX_INFO(("cdrom: Data track %d, length %d", dtrk, num_sectors)); + + return(num_sectors); + + } +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + { + // Read the TOC to get the size of the data track. + // Keith Jones , 16 January 2000 + +#define MAX_TRACKS 100 + + int i, num_tracks, num_sectors; + struct ioc_toc_header td; + struct ioc_read_toc_entry rte; + struct cd_toc_entry toc_buffer[MAX_TRACKS + 1]; + + if (fd < 0) + BX_PANIC(("cdrom: capacity: file not open.")); + + if (ioctl(fd, CDIOREADTOCHEADER, &td) < 0) + BX_PANIC(("cdrom: ioctl(CDIOREADTOCHEADER) failed")); + + num_tracks = (td.ending_track - td.starting_track) + 1; + if (num_tracks > MAX_TRACKS) + BX_PANIC(("cdrom: TOC is too large")); + + rte.address_format = CD_LBA_FORMAT; + rte.starting_track = td.starting_track; + rte.data_len = (num_tracks + 1) * sizeof(struct cd_toc_entry); + rte.data = toc_buffer; + if (ioctl(fd, CDIOREADTOCENTRYS, &rte) < 0) + BX_PANIC(("cdrom: ioctl(CDIOREADTOCENTRYS) failed")); + + num_sectors = -1; + for (i = 0; i < num_tracks; i++) { + if (rte.data[i].control & 4) { /* data track */ + num_sectors = ntohl(rte.data[i + 1].addr.lba) + - ntohl(rte.data[i].addr.lba); + BX_INFO(("cdrom: Data track %d, length %d", + rte.data[i].track, num_sectors)); + break; + } + } + + if (num_sectors < 0) + BX_PANIC(("cdrom: no data track found")); + + return(num_sectors); + + } +#elif defined WIN32 + { + if (bUseASPI) { + return ((GetCDCapacity(hid, tid, lun) / 2352) + 1); + } else if (using_file) { + ULARGE_INTEGER FileSize; + FileSize.LowPart = GetFileSize(hFile, &FileSize.HighPart); + return (Bit32u)(FileSize.QuadPart / 2048); + } else { /* direct device access */ + if (isWindowsXP) { + LARGE_INTEGER length; + DWORD iBytesReturned; + DeviceIoControl(hFile, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &length, sizeof(length), &iBytesReturned, NULL); + return (Bit32u)(length.QuadPart / 2048); + } else { + ULARGE_INTEGER FreeBytesForCaller; + ULARGE_INTEGER TotalNumOfBytes; + ULARGE_INTEGER TotalFreeBytes; + GetDiskFreeSpaceEx(path, &FreeBytesForCaller, &TotalNumOfBytes, &TotalFreeBytes); + return (Bit32u)(TotalNumOfBytes.QuadPart / 2048); + } + } + } +#elif defined __APPLE__ +// Find the size of the first data track on the cd. This has produced +// the same results as the linux version on every cd I have tried, about +// 5. The differences here seem to be that the entries in the TOC when +// retrieved from the IOKit interface appear in a reversed order when +// compared with the linux READTOCENTRY ioctl. + { + // Return CD-ROM capacity. I believe you want to return + // the number of bytes of capacity the actual media has. + + BX_INFO(("Capacity")); + + struct _CDTOC *toc = ReadTOC(CDDevicePath); + + if (toc == NULL) { + BX_PANIC(("capacity: Failed to read toc")); + } + + size_t toc_entries = (toc->length - 2) / sizeof(struct _CDTOC_Desc); + + BX_DEBUG(("reading %d toc entries\n", toc_entries)); + + int start_sector = -1; + int data_track = -1; + + // Iterate through the list backward. Pick the first data track and + // get the address of the immediately previous (or following depending + // on how you look at it). The difference in the sector numbers + // is returned as the sized of the data track. + for (int i=toc_entries - 1; i>=0; i--) { + BX_DEBUG(("session %d ctl_adr %d tno %d point %d lba %d z %d p lba %d\n", + (int)toc->trackdesc[i].session, + (int)toc->trackdesc[i].ctrl_adr, + (int)toc->trackdesc[i].tno, + (int)toc->trackdesc[i].point, + MSF_TO_LBA(toc->trackdesc[i].address), + (int)toc->trackdesc[i].zero, + MSF_TO_LBA(toc->trackdesc[i].p))); + + if (start_sector != -1) { + start_sector = MSF_TO_LBA(toc->trackdesc[i].p) - start_sector; + break; + } + + if ((toc->trackdesc[i].ctrl_adr >> 4) != 1) continue; + + if (toc->trackdesc[i].ctrl_adr & 0x04) { + data_track = toc->trackdesc[i].point; + start_sector = MSF_TO_LBA(toc->trackdesc[i].p); + } + } + + free(toc); + + if (start_sector == -1) { + start_sector = 0; + } + + BX_INFO(("first data track %d data size is %d", data_track, start_sector)); + + return start_sector; + } +#else + BX_ERROR(("capacity: your OS is not supported yet")); + return(0); +#endif +} + +bx_bool BX_CPP_AttrRegparmN(3) cdrom_interface::read_block(Bit8u* buf, Bit32u lba, int blocksize) +{ + // Read a single block from the CD + +#ifdef WIN32 + LARGE_INTEGER pos; +#else + off_t pos; +#endif + ssize_t n = 0; + Bit8u try_count = 3; + Bit8u* buf1; + + if (blocksize == 2352) { + memset(buf, 0, 2352); + memset(buf+1, 0xff, 10); + Bit32u raw_block = lba + 150; + buf[12] = (raw_block / 75) / 60; + buf[13] = (raw_block / 75) % 60; + buf[14] = (raw_block % 75); + buf[15] = 0x01; + buf1 = buf + 16; + } else { + buf1 = buf; + } + do { +#ifdef WIN32 + if(bUseASPI) { + ReadCDSector(hid, tid, lun, lba, buf1, BX_CD_FRAMESIZE); + n = BX_CD_FRAMESIZE; + } else { + pos.QuadPart = (LONGLONG)lba*BX_CD_FRAMESIZE; + pos.LowPart = SetFilePointer(hFile, pos.LowPart, &pos.HighPart, SEEK_SET); + if ((pos.LowPart == 0xffffffff) && (GetLastError() != NO_ERROR)) { + BX_PANIC(("cdrom: read_block: SetFilePointer returned error.")); + } else { + ReadFile(hFile, (void *) buf1, BX_CD_FRAMESIZE, (unsigned long *) &n, NULL); + } + } +#elif defined(__APPLE__) +#define CD_SEEK_DISTANCE kCDSectorSizeWhole + if(using_file) + { + pos = lseek(fd, (off_t) lba * BX_CD_FRAMESIZE, SEEK_SET); + if (pos < 0) { + BX_PANIC(("cdrom: read_block: lseek returned error.")); + } else { + n = read(fd, buf1, BX_CD_FRAMESIZE); + } + } + else + { + // This seek will leave us 16 bytes from the start of the data + // hence the magic number. + pos = lseek(fd, (off_t) lba * CD_SEEK_DISTANCE + 16, SEEK_SET); + if (pos < 0) { + BX_PANIC(("cdrom: read_block: lseek returned error.")); + } else { + n = read(fd, buf1, CD_FRAMESIZE); + } + } +#else + pos = lseek(fd, (off_t) lba * BX_CD_FRAMESIZE, SEEK_SET); + if (pos < 0) { + BX_PANIC(("cdrom: read_block: lseek returned error.")); + } else { + n = read(fd, (char*) buf1, BX_CD_FRAMESIZE); + } +#endif + } while ((n != BX_CD_FRAMESIZE) && (--try_count > 0)); + + return (n == BX_CD_FRAMESIZE); +} + +void cdrom_interface::seek(Bit32u lba) +{ + unsigned char buffer[BX_CD_FRAMESIZE]; + + read_block(buffer, lba, BX_CD_FRAMESIZE); +} + +#endif /* if BX_SUPPORT_CDROM */ + +#endif diff --git a/bochs/iodev/cdrom.h b/bochs/iodev/cdrom.h new file mode 100644 index 00000000..4176a87f --- /dev/null +++ b/bochs/iodev/cdrom.h @@ -0,0 +1,65 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +// Header file for low-level OS specific CDROM emulation + + +class cdrom_interface : public logfunctions { +public: + cdrom_interface(const char *dev); + virtual ~cdrom_interface(void); + void init(void); + + // Load CD-ROM. Returns 0 if CD is not ready. + bx_bool insert_cdrom(const char *dev = NULL); + + // Logically eject the CD. + void eject_cdrom(); + + // Read CD TOC. Returns 0 if start track is out of bounds. + bx_bool read_toc(Bit8u* buf, int* length, bx_bool msf, int start_track, int format); + + // Return CD-ROM capacity (in 2048 byte frames) + Bit32u capacity(); + + // Read a single block from the CD. Returns 0 on failure. + bx_bool read_block(Bit8u* buf, Bit32u lba, int blocksize) BX_CPP_AttrRegparmN(3); + + // Start (spin up) the CD. + bx_bool start_cdrom(); + + // Seek for new block address. + void seek(Bit32u lba); + +private: + int fd; + char *path; + + int using_file; +#ifdef WIN32 + BOOL bUseASPI; + HANDLE hFile; + int hid; + int tid; + int lun; +#endif + }; + diff --git a/bochs/iodev/cdrom_amigaos.cc b/bochs/iodev/cdrom_amigaos.cc new file mode 100644 index 00000000..39958bd0 --- /dev/null +++ b/bochs/iodev/cdrom_amigaos.cc @@ -0,0 +1,271 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2000-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +// These are the low-level CDROM functions which are called +// from 'harddrv.cc'. They effect the OS specific functionality +// needed by the CDROM emulation in 'harddrv.cc'. Mostly, just +// ioctl() calls and such. Should be fairly easy to add support +// for your OS if it is not supported yet. + + +#include "bochs.h" +#include "scsi_commands.h" +#include "cdrom.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define LOG_THIS /* no SMF tricks here, not needed */ + +#define BX_CD_FRAMESIZE 2048 +#define CD_FRAMESIZE 2048 +#define SENSELEN 32 +#define MAX_DATA_LEN 252 + +int amiga_cd_unit; +char amiga_cd_device[256]; + +struct MsgPort *CDMP; /* Pointer for message port */ +struct IOExtTD *CDIO; /* Pointer for IORequest */ +int cd_error; + +typedef struct { + UBYTE pad0; + UBYTE trackType; + UBYTE trackNum; + UBYTE pad1; + ULONG startFrame; +} TOCENTRY; + +typedef struct { + UWORD length; + UBYTE firstTrack; + UBYTE lastTrack; + TOCENTRY tocs[100]; +} TOC; + +typedef struct { + ULONG sectors; + ULONG blocksize; +} CAPACITY; + +unsigned char sensebuf[SENSELEN]; + +int DoSCSI (UBYTE * data, int datasize, UBYTE * cmd, int cmdsize, UBYTE flags); + +cdrom_interface::cdrom_interface(char *dev) +{ + char buf[256]; + + sscanf(dev, "%s%s", amiga_cd_device, buf); + amiga_cd_unit = atoi(buf); + + CDMP = CreateMsgPort(); + if (CDMP != NULL) { + CDIO = (struct IOExtTD *)CreateIORequest(CDMP, sizeof(struct IOExtTD)); + if (CDIO != NULL) { + cd_error = OpenDevice(amiga_cd_device, amiga_cd_unit, (struct IORequest *)CDIO, 0); + if (cd_error != 0) + BX_PANIC(("CD_Open: could not open device %s unit %d\n", amiga_cd_device, amiga_cd_unit)); + } + } +} + +cdrom_interface::~cdrom_interface(void) +{ + if (cd_error == 0) { + CloseDevice((struct IORequest *)CDIO); + } + if (CDIO != NULL) { + DeleteIORequest((struct IORequest *)CDIO); + } + if (CDMP != NULL) { + DeleteMsgPort(CDMP); + } +} + + bx_bool +cdrom_interface::insert_cdrom(char *dev) +{ + Bit8u cdb[6]; + Bit8u buf[2*BX_CD_FRAMESIZE]; + Bit8u i = 0; + + memset(cdb,0,sizeof(cdb)); + + cdb[0] = SCSI_DA_START_STOP_UNIT; + cdb[4] = 1 | 2; + + DoSCSI(0, 0,cdb,sizeof(cdb),SCSIF_READ); + + /*Check if there's a valid media present in the drive*/ + CDIO->iotd_Req.io_Data = buf; + CDIO->iotd_Req.io_Command = CMD_READ; + CDIO->iotd_Req.io_Length = BX_CD_FRAMESIZE; + CDIO->iotd_Req.io_Offset = BX_CD_FRAMESIZE; + + for(i = 0; i < 200; i++) /*it takes a while for the cdrom to validate*/ + { + DoIO((struct IORequest *)CDIO); + if (CDIO->iotd_Req.io_Error == 0) + break; + Delay (10); + } + + if (CDIO->iotd_Req.io_Error != 0) + return false; + else + return true; +} + + + void +cdrom_interface::eject_cdrom() +{ + Bit8u cdb[6]; + + memset(cdb,0,sizeof(cdb)); + + cdb[0] = SCSI_DA_START_STOP_UNIT; + cdb[4] = 0 | 2; + + DoSCSI(0, 0,cdb,sizeof(cdb),SCSIF_READ); +} + + + bx_bool +cdrom_interface::read_toc(Bit8u* buf, int* length, bx_bool msf, int start_track, int format) +{ + Bit8u cdb[10]; + TOC *toc; + toc = (TOC*) buf; + + if (format != 0) + return false; + + memset(cdb,0,sizeof(cdb)); + + cdb[0] = SCSI_CD_READ_TOC; + + if (msf) + cdb[1] = 2; + else + cdb[1] = 0; + + cdb[6] = start_track; + cdb[7] = sizeof(TOC)>>8; + cdb[8] = sizeof(TOC)&0xFF; + + DoSCSI((UBYTE *)buf, sizeof(TOC), cdb, sizeof(cdb), SCSIF_READ); + + *length = toc->length + 4; + + return true; +} + + + Bit32u +cdrom_interface::capacity() +{ + CAPACITY cap; + Bit8u cdb[10]; + + memset(cdb,0,sizeof(cdb)); + cdb[0] = SCSI_DA_READ_CAPACITY; + + int err; + + if ((err = DoSCSI((UBYTE *)&cap, sizeof(cap), + cdb, sizeof (cdb), + (SCSIF_READ | SCSIF_AUTOSENSE))) == 0) + return(cap.sectors); + else + BX_PANIC (("Couldn't get media capacity")); +} + + bx_bool +cdrom_interface::read_block(Bit8u* buf, int lba, int blocksize) +{ + CDIO->iotd_Req.io_Data = buf; + CDIO->iotd_Req.io_Command = CMD_READ; + CDIO->iotd_Req.io_Length = BX_CD_FRAMESIZE; + CDIO->iotd_Req.io_Offset = lba * BX_CD_FRAMESIZE; + DoIO((struct IORequest *)CDIO); + + if (CDIO->iotd_Req.io_Error != 0) { + BX_PANIC(("Error %d reading CD data sector: %ld", CDIO->iotd_Req.io_Error, lba)); + return 0; + } + return 1; +} + + bx_bool +cdrom_interface::start_cdrom() +{ + // Spin up the cdrom drive. + + if (fd >= 0) { + BX_INFO(("start_cdrom: your OS is not supported yet.")); + return 0; // OS not supported yet, return 0 always. + } + return 0; +} + + +int DoSCSI(UBYTE *data, int datasize, Bit8u *cmd,int cmdsize, UBYTE direction) +{ + struct SCSICmd scmd; + + CDIO->iotd_Req.io_Command = HD_SCSICMD; + CDIO->iotd_Req.io_Data = &scmd; + CDIO->iotd_Req.io_Length = sizeof(scmd); + + scmd.scsi_Data = (UWORD *)data; + scmd.scsi_Length = datasize; + scmd.scsi_SenseActual = 0; + scmd.scsi_SenseData = sensebuf; + scmd.scsi_SenseLength = SENSELEN; + scmd.scsi_Command = cmd; + scmd.scsi_CmdLength = cmdsize; + scmd.scsi_Flags = SCSIF_AUTOSENSE | direction; + + DoIO((struct IORequest *)CDIO); + + if (CDIO->iotd_Req.io_Error != 0) { + BX_PANIC(("DoSCSI: error %d", CDIO->iotd_Req.io_Error)); + } + + return CDIO->iotd_Req.io_Error; +} + +void cdrom_interface::seek(int lba) +{ + unsigned char buffer[BX_CD_FRAMESIZE]; + + read_block(buffer, lba, BX_CD_FRAMESIZE); +} diff --git a/bochs/iodev/cdrom_beos.cc b/bochs/iodev/cdrom_beos.cc new file mode 100644 index 00000000..6a4d1988 --- /dev/null +++ b/bochs/iodev/cdrom_beos.cc @@ -0,0 +1,74 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2000-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#include +#include + +#include +#include + +#include "cdrom_beos.h" + +int GetLogicalBlockSize(int fd) +{ + partition_info p_info; + + if (ioctl(fd, B_GET_PARTITION_INFO, &p_info) == B_NO_ERROR) + { + //dprintf("GetLogicalBlockSize: ioctl suceed\n"); + return p_info.logical_block_size; + } + else //dprintf("GetLogicalBlockSize = ioctl returned error\n"); + return 0; +} + +int GetDeviceBlockSize(int fd) +{ + struct stat st; + device_geometry dg; + + if (ioctl(fd, B_GET_GEOMETRY, &dg) < 0) + { + if (fstat(fd, &st) < 0 || S_ISDIR(st.st_mode)) + return 0; + return 512; /* just assume it's a plain old file or something */ + } + + return dg.bytes_per_sector; +} + +off_t GetNumDeviceBlocks(int fd, int block_size) +{ + struct stat st; + device_geometry dg; + + if (ioctl(fd, B_GET_GEOMETRY, &dg) >= 0) + { + return (off_t)dg.cylinder_count * + (off_t)dg.sectors_per_track * + (off_t)dg.head_count; + } + + /* if the ioctl fails, try just stat'ing in case it's a regular file */ + if (fstat(fd, &st) < 0) + return 0; + + return st.st_size / block_size; +} diff --git a/bochs/iodev/cdrom_beos.h b/bochs/iodev/cdrom_beos.h new file mode 100644 index 00000000..1d96df42 --- /dev/null +++ b/bochs/iodev/cdrom_beos.h @@ -0,0 +1,33 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2000-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + + +#ifndef CDROM_BEOS_H +#define CDROM_BEOS_H + +#include // for off_t + +off_t GetNumDeviceBlocks(int fd, int block_size); +int GetLogicalBlockSize(int fd); +int GetDeviceBlockSize(int fd); + +#endif diff --git a/bochs/iodev/cmos.cc b/bochs/iodev/cmos.cc new file mode 100644 index 00000000..505db7d0 --- /dev/null +++ b/bochs/iodev/cmos.cc @@ -0,0 +1,828 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "cmos.h" + +#define LOG_THIS theCmosDevice-> + +bx_cmos_c *theCmosDevice = NULL; + +// CMOS register definitions from Ralf Brown's interrupt list v6.1, in a file +// called cmos.lst. In cases where there are multiple uses for a given +// register in the interrupt list, I only listed the purpose that Bochs +// actually uses it for, but I wrote "alternatives" next to it. +#define REG_SEC 0x00 +#define REG_SEC_ALARM 0x01 +#define REG_MIN 0x02 +#define REG_MIN_ALARM 0x03 +#define REG_HOUR 0x04 +#define REG_HOUR_ALARM 0x05 +#define REG_WEEK_DAY 0x06 +#define REG_MONTH_DAY 0x07 +#define REG_MONTH 0x08 +#define REG_YEAR 0x09 +#define REG_STAT_A 0x0a +#define REG_STAT_B 0x0b +#define REG_STAT_C 0x0c +#define REG_STAT_D 0x0d +#define REG_DIAGNOSTIC_STATUS 0x0e /* alternatives */ +#define REG_SHUTDOWN_STATUS 0x0f +#define REG_EQUIPMENT_BYTE 0x14 +#define REG_CSUM_HIGH 0x2e +#define REG_CSUM_LOW 0x2f +#define REG_IBM_CENTURY_BYTE 0x32 /* alternatives */ +#define REG_IBM_PS2_CENTURY_BYTE 0x37 /* alternatives */ + +// Bochs CMOS map +// +// Idx Len Description +// 0x10 1 floppy drive types +// 0x11 1 configuration bits +// 0x12 1 harddisk types +// 0x13 1 advanced configuration bits +// 0x15 2 base memory in 1k +// 0x17 2 memory size above 1M in 1k +// 0x19 2 extended harddisk types +// 0x1b 9 harddisk configuration (hd0) +// 0x24 9 harddisk configuration (hd1) +// 0x2d 1 boot sequence (fd/hd) +// 0x30 2 memory size above 1M in 1k +// 0x34 2 memory size above 16M in 64k +// 0x38 1 eltorito boot sequence (#3) + bootsig check +// 0x39 2 ata translation policy (ata0...ata3) +// 0x3d 1 eltorito boot sequence (#1 + #2) +// +// Qemu CMOS map +// +// Idx Len Description +// 0x5b 3 extra memory above 4GB +// 0x5f 1 number of processors + + +Bit8u bcd_to_bin(Bit8u value, bx_bool is_binary) +{ + if (is_binary) + return value; + else + return ((value >> 4) * 10) + (value & 0x0f); +} + +Bit8u bin_to_bcd(Bit8u value, bx_bool is_binary) +{ + if (is_binary) + return value; + else + return ((value / 10) << 4) | (value % 10); +} + +int libcmos_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theCmosDevice = new bx_cmos_c(); + bx_devices.pluginCmosDevice = theCmosDevice; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theCmosDevice, BX_PLUGIN_CMOS); + return(0); // Success +} + +void libcmos_LTX_plugin_fini(void) +{ if (theCmosDevice != NULL) + { delete theCmosDevice; + theCmosDevice = NULL; + } +} + +bx_cmos_c::bx_cmos_c(void) +{ + put("CMOS"); + + for (unsigned i=0; i<128; i++) s.reg[i] = 0; + + s.periodic_timer_index = BX_NULL_TIMER_HANDLE; + s.one_second_timer_index = BX_NULL_TIMER_HANDLE; + s.uip_timer_index = BX_NULL_TIMER_HANDLE; +} + +bx_cmos_c::~bx_cmos_c(void) +{ + save_image(); + char *tmptime; + if ((tmptime = strdup(ctime(&(BX_CMOS_THIS s.timeval)))) != NULL) { + tmptime[strlen(tmptime)-1]='\0'; + BX_INFO(("Last time is %u (%s)", (unsigned) get_timeval(), tmptime)); + free(tmptime); + } + BX_DEBUG(("Exit")); +} + +void bx_cmos_c::init(void) +{ + BX_DEBUG(("Init $Id$")); + // CMOS RAM & RTC + + DEV_register_ioread_handler(this, read_handler, 0x0070, "CMOS RAM", 1); + DEV_register_ioread_handler(this, read_handler, 0x0071, "CMOS RAM", 1); + DEV_register_iowrite_handler(this, write_handler, 0x0070, "CMOS RAM", 1); + DEV_register_iowrite_handler(this, write_handler, 0x0071, "CMOS RAM", 1); + DEV_register_irq(8, "CMOS RTC"); + if (BX_CMOS_THIS s.periodic_timer_index == BX_NULL_TIMER_HANDLE) { + BX_CMOS_THIS s.periodic_timer_index = + DEV_register_timer(this, periodic_timer_handler, + 1000000, 1,0, "cmos"); // continuous, not-active + } + if (BX_CMOS_THIS s.one_second_timer_index == BX_NULL_TIMER_HANDLE) { + BX_CMOS_THIS s.one_second_timer_index = + DEV_register_timer(this, one_second_timer_handler, + 1000000, 1,0, "cmos"); // continuous, not-active + } + if (BX_CMOS_THIS s.uip_timer_index == BX_NULL_TIMER_HANDLE) { + BX_CMOS_THIS s.uip_timer_index = + DEV_register_timer(this, uip_timer_handler, + 244, 0, 0, "cmos"); // one-shot, not-active + } + + if (SIM->get_param_num(BXPN_CLOCK_TIME0)->get() == BX_CLOCK_TIME0_LOCAL) { + BX_INFO(("Using local time for initial clock")); + BX_CMOS_THIS s.timeval = time(NULL); + } else if (SIM->get_param_num(BXPN_CLOCK_TIME0)->get() == BX_CLOCK_TIME0_UTC) { + bx_bool utc_ok = 0; + + BX_INFO(("Using utc time for initial clock")); + + BX_CMOS_THIS s.timeval = time(NULL); + +#if BX_HAVE_GMTIME +#if BX_HAVE_MKTIME + struct tm *utc_holder = gmtime(&BX_CMOS_THIS s.timeval); + utc_holder->tm_isdst = -1; + utc_ok = 1; + BX_CMOS_THIS s.timeval = mktime(utc_holder); +#elif BX_HAVE_TIMELOCAL + struct tm *utc_holder = gmtime(&BX_CMOS_THIS s.timeval); + utc_holder->tm_isdst = 0; // XXX Is this correct??? + utc_ok = 1; + BX_CMOS_THIS s.timeval = timelocal(utc_holder); +#endif //BX_HAVE_MKTIME +#endif //BX_HAVE_GMTIME + + if (!utc_ok) { + BX_ERROR(("UTC time is not supported on your platform. Using current time(NULL)")); + } + } else { + BX_INFO(("Using specified time for initial clock")); + BX_CMOS_THIS s.timeval = SIM->get_param_num(BXPN_CLOCK_TIME0)->get(); + } + + // load CMOS from image file if requested. + if (SIM->get_param_bool(BXPN_CMOSIMAGE_ENABLED)->get()) { + int fd, ret; + struct stat stat_buf; + + fd = open(SIM->get_param_string(BXPN_CMOSIMAGE_PATH)->getptr(), O_RDONLY +#ifdef O_BINARY + | O_BINARY +#endif + ); + if (fd < 0) { + BX_PANIC(("trying to open cmos image file '%s'", + SIM->get_param_string(BXPN_CMOSIMAGE_PATH)->getptr())); + } + ret = fstat(fd, &stat_buf); + if (ret) { + BX_PANIC(("CMOS: could not fstat() image file.")); + } + if ((stat_buf.st_size != 64) && (stat_buf.st_size != 128)) { + BX_PANIC(("CMOS: image file size must be 64 or 128")); + } + + ret = ::read(fd, (bx_ptr_t) BX_CMOS_THIS s.reg, (unsigned)stat_buf.st_size); + if (ret != stat_buf.st_size) { + BX_PANIC(("CMOS: error reading cmos file.")); + } + close(fd); + BX_INFO(("successfuly read from image file '%s'.", + SIM->get_param_string(BXPN_CMOSIMAGE_PATH)->getptr())); + BX_CMOS_THIS s.rtc_mode_12hour = ((BX_CMOS_THIS s.reg[REG_STAT_B] & 0x02) == 0); + BX_CMOS_THIS s.rtc_mode_binary = ((BX_CMOS_THIS s.reg[REG_STAT_B] & 0x04) != 0); + if (SIM->get_param_bool(BXPN_CMOSIMAGE_RTC_INIT)->get()) { + update_timeval(); + } else { + update_clock(); + } + } else { + // CMOS values generated + BX_CMOS_THIS s.reg[REG_STAT_A] = 0x26; + BX_CMOS_THIS s.reg[REG_STAT_B] = 0x02; + BX_CMOS_THIS s.reg[REG_STAT_C] = 0x00; + BX_CMOS_THIS s.reg[REG_STAT_D] = 0x80; +#if BX_SUPPORT_FPU == 1 + BX_CMOS_THIS s.reg[REG_EQUIPMENT_BYTE] |= 0x02; +#endif + BX_CMOS_THIS s.rtc_mode_12hour = 0; + BX_CMOS_THIS s.rtc_mode_binary = 0; + update_clock(); + } + + char *tmptime; + while((tmptime = strdup(ctime(&(BX_CMOS_THIS s.timeval)))) == NULL) { + BX_PANIC(("Out of memory.")); + } + tmptime[strlen(tmptime)-1]='\0'; + BX_INFO(("Setting initial clock to: %s (time0=%u)", tmptime, (Bit32u)BX_CMOS_THIS s.timeval)); + free(tmptime); + + BX_CMOS_THIS s.timeval_change = 0; +} + +void bx_cmos_c::reset(unsigned type) +{ + BX_CMOS_THIS s.cmos_mem_address = 0; + + // RESET affects the following registers: + // CRA: no effects + // CRB: bits 4,5,6 forced to 0 + // CRC: bits 4,5,6,7 forced to 0 + // CRD: no effects + BX_CMOS_THIS s.reg[REG_STAT_B] &= 0x8f; + BX_CMOS_THIS s.reg[REG_STAT_C] = 0; + + // One second timer for updating clock & alarm functions + bx_pc_system.activate_timer(BX_CMOS_THIS s.one_second_timer_index, + 1000000, 1); + + // handle periodic interrupt rate select + BX_CMOS_THIS CRA_change(); +} + +void bx_cmos_c::save_image(void) +{ + int fd, ret; + + // save CMOS to image file if requested. + if (SIM->get_param_bool(BXPN_CMOSIMAGE_ENABLED)->get()) { + fd = open(SIM->get_param_string(BXPN_CMOSIMAGE_PATH)->getptr(), O_WRONLY +#ifdef O_BINARY + | O_BINARY +#endif + ); + ret = ::write(fd, (bx_ptr_t) BX_CMOS_THIS s.reg, 128); + if (ret != 128) { + BX_PANIC(("CMOS: error writing cmos file.")); + } + close(fd); + } +} + +void bx_cmos_c::register_state(void) +{ + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "cmos", "CMOS State", 2); + BXRS_HEX_PARAM_FIELD(list, mem_address, BX_CMOS_THIS s.cmos_mem_address); + bx_list_c *ram = new bx_list_c(list, "ram", 128); + for (unsigned i=0; i<128; i++) { + char name[6]; + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(ram, name, &BX_CMOS_THIS s.reg[i], BASE_HEX); + } +} + +void bx_cmos_c::after_restore_state(void) +{ + BX_CMOS_THIS s.rtc_mode_12hour = ((BX_CMOS_THIS s.reg[REG_STAT_B] & 0x02) == 0); + BX_CMOS_THIS s.rtc_mode_binary = ((BX_CMOS_THIS s.reg[REG_STAT_B] & 0x04) != 0); + BX_CMOS_THIS update_timeval(); + BX_CMOS_THIS CRA_change(); +} + +void bx_cmos_c::CRA_change(void) +{ + Bit8u nibble, dcc; + + // Periodic Interrupt timer + nibble = BX_CMOS_THIS s.reg[REG_STAT_A] & 0x0f; + dcc = (BX_CMOS_THIS s.reg[REG_STAT_A] >> 4) & 0x07; + if ((nibble == 0) || ((dcc & 0x06) == 0)) { + // No Periodic Interrupt Rate when 0, deactivate timer + bx_pc_system.deactivate_timer(BX_CMOS_THIS s.periodic_timer_index); + BX_CMOS_THIS s.periodic_interval_usec = (Bit32u) -1; // max value + } else { + // values 0001b and 0010b are the same as 1000b and 1001b + if (nibble <= 2) + nibble += 7; + BX_CMOS_THIS s.periodic_interval_usec = (unsigned) (1000000.0L / + (32768.0L / (1 << (nibble - 1)))); + + // if Periodic Interrupt Enable bit set, activate timer + if (BX_CMOS_THIS s.reg[REG_STAT_B] & 0x40) + bx_pc_system.activate_timer(BX_CMOS_THIS s.periodic_timer_index, + BX_CMOS_THIS s.periodic_interval_usec, 1); + else + bx_pc_system.deactivate_timer(BX_CMOS_THIS s.periodic_timer_index); + } +} + + + // static IO port read callback handler + // redirects to non-static class handler to avoid virtual functions + +Bit32u bx_cmos_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_CMOS_SMF + bx_cmos_c *class_ptr = (bx_cmos_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_cmos_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif + Bit8u ret8; + + BX_DEBUG(("CMOS read of CMOS register 0x%02x", (unsigned) BX_CMOS_THIS s.cmos_mem_address)); + + switch (address) { + case 0x0070: + // this register is write-only on most machines + BX_DEBUG(("read of index port 0x70. returning 0xff")); + return(0xff); + case 0x0071: + ret8 = BX_CMOS_THIS s.reg[BX_CMOS_THIS s.cmos_mem_address]; + // all bits of Register C are cleared after a read occurs. + if (BX_CMOS_THIS s.cmos_mem_address == REG_STAT_C) { + BX_CMOS_THIS s.reg[REG_STAT_C] = 0x00; + DEV_pic_lower_irq(8); + } + return(ret8); + + default: + BX_PANIC(("unsupported cmos read, address=0x%04x!", (unsigned) address)); + return(0); + } +} + + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions +void bx_cmos_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_CMOS_SMF + bx_cmos_c *class_ptr = (bx_cmos_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_cmos_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_CMOS_SMF + + BX_DEBUG(("CMOS write to address: 0x%04x = 0x%02x", address, value)); + + switch (address) { + case 0x0070: + BX_CMOS_THIS s.cmos_mem_address = value & 0x7F; + break; + + case 0x0071: + switch (BX_CMOS_THIS s.cmos_mem_address) { + case REG_SEC_ALARM: // seconds alarm + case REG_MIN_ALARM: // minutes alarm + case REG_HOUR_ALARM: // hours alarm + BX_CMOS_THIS s.reg[BX_CMOS_THIS s.cmos_mem_address] = value; + BX_DEBUG(("alarm time changed to %02x:%02x:%02x", BX_CMOS_THIS s.reg[REG_HOUR_ALARM], + BX_CMOS_THIS s.reg[REG_MIN_ALARM], BX_CMOS_THIS s.reg[REG_SEC_ALARM])); + break; + + case REG_SEC: // seconds + case REG_MIN: // minutes + case REG_HOUR: // hours + case REG_WEEK_DAY: // day of the week + case REG_MONTH_DAY: // day of the month + case REG_MONTH: // month + case REG_YEAR: // year + case REG_IBM_CENTURY_BYTE: // century + case REG_IBM_PS2_CENTURY_BYTE: // century (PS/2) + BX_CMOS_THIS s.reg[BX_CMOS_THIS s.cmos_mem_address] = value; + if (BX_CMOS_THIS s.cmos_mem_address == REG_IBM_PS2_CENTURY_BYTE) { + BX_CMOS_THIS s.reg[REG_IBM_CENTURY_BYTE] = value; + } + if (BX_CMOS_THIS s.reg[REG_STAT_B] & 0x80) { + BX_CMOS_THIS s.timeval_change = 1; + } else { + update_timeval(); + } + break; + + case REG_STAT_A: // Control Register A + // bit 7: Update in Progress (read-only) + // 1 = signifies time registers will be updated within 244us + // 0 = time registers will not occur before 244us + // note: this bit reads 0 when CRB bit 7 is 1 + // bit 6..4: Divider Chain Control + // 000 oscillator disabled + // 001 oscillator disabled + // 010 Normal operation + // 011 TEST + // 100 TEST + // 101 TEST + // 110 Divider Chain RESET + // 111 Divider Chain RESET + // bit 3..0: Periodic Interrupt Rate Select + // 0000 None + // 0001 3.90625 ms + // 0010 7.8125 ms + // 0011 122.070 us + // 0100 244.141 us + // 0101 488.281 us + // 0110 976.562 us + // 0111 1.953125 ms + // 1000 3.90625 ms + // 1001 7.8125 ms + // 1010 15.625 ms + // 1011 31.25 ms + // 1100 62.5 ms + // 1101 125 ms + // 1110 250 ms + // 1111 500 ms + + unsigned dcc; + dcc = (value >> 4) & 0x07; + if ((dcc & 0x06) == 0x06) { + BX_INFO(("CRA: divider chain RESET")); + } else if (dcc > 0x02) { + BX_PANIC(("CRA: divider chain control 0x%02x", dcc)); + } + BX_CMOS_THIS s.reg[REG_STAT_A] &= 0x80; + BX_CMOS_THIS s.reg[REG_STAT_A] |= (value & 0x7f); + BX_CMOS_THIS CRA_change(); + break; + + case REG_STAT_B: // Control Register B + // bit 0: Daylight Savings Enable + // 1 = enable daylight savings + // 0 = disable daylight savings + // bit 1: 24/12 hour mode + // 1 = 24 hour format + // 0 = 12 hour format + // bit 2: Data Mode + // 1 = binary format + // 0 = BCD format + // bit 3: "square wave enable" + // Not supported and always read as 0 + // bit 4: Update Ended Interrupt Enable + // 1 = enable generation of update ended interrupt + // 0 = disable + // bit 5: Alarm Interrupt Enable + // 1 = enable generation of alarm interrupt + // 0 = disable + // bit 6: Periodic Interrupt Enable + // 1 = enable generation of periodic interrupt + // 0 = disable + // bit 7: Set mode + // 1 = user copy of time is "frozen" allowing time registers + // to be accessed without regard for an occurance of an update + // 0 = time updates occur normally + + if (value & 0x01) + BX_ERROR(("write status reg B, daylight savings unsupported")); + + value &= 0xf7; // bit3 always 0 + // Note: setting bit 7 clears bit 4 + if (value & 0x80) + value &= 0xef; + + unsigned prev_CRB; + prev_CRB = BX_CMOS_THIS s.reg[REG_STAT_B]; + BX_CMOS_THIS s.reg[REG_STAT_B] = value; + if ((prev_CRB & 0x02) != (value & 0x02)) { + BX_CMOS_THIS s.rtc_mode_12hour = ((value & 0x02) == 0); + update_clock(); + } + if ((prev_CRB & 0x04) != (value & 0x04)) { + BX_CMOS_THIS s.rtc_mode_binary = ((value & 0x04) != 0); + update_clock(); + } + if ((prev_CRB & 0x40) != (value & 0x40)) { + // Periodic Interrupt Enabled changed + if (prev_CRB & 0x40) { + // transition from 1 to 0, deactivate timer + bx_pc_system.deactivate_timer(BX_CMOS_THIS s.periodic_timer_index); + } else { + // transition from 0 to 1 + // if rate select is not 0, activate timer + if ((BX_CMOS_THIS s.reg[REG_STAT_A] & 0x0f) != 0) { + bx_pc_system.activate_timer( + BX_CMOS_THIS s.periodic_timer_index, + BX_CMOS_THIS s.periodic_interval_usec, 1); + } + } + } + if ((prev_CRB >= 0x80) && (value < 0x80) && BX_CMOS_THIS s.timeval_change) { + update_timeval(); + BX_CMOS_THIS s.timeval_change = 0; + } + break; + + case REG_STAT_C: // Control Register C + case REG_STAT_D: // Control Register D + BX_ERROR(("write to control register 0x%02x ignored (read-only)", + BX_CMOS_THIS s.cmos_mem_address)); + break; + + case REG_DIAGNOSTIC_STATUS: + BX_DEBUG(("write register 0x0e: 0x%02x", value)); + BX_CMOS_THIS s.reg[REG_DIAGNOSTIC_STATUS] = value; + break; + + case REG_SHUTDOWN_STATUS: + switch (value) { + case 0x00: /* proceed with normal POST (soft reset) */ + BX_DEBUG(("Reg 0Fh(00): shutdown action = normal POST")); + break; + case 0x01: /* shutdown after memory size check */ + BX_DEBUG(("Reg 0Fh(01): request to change shutdown action" + " to shutdown after memory size check")); + break; + case 0x02: /* shutdown after successful memory test */ + BX_DEBUG(("Reg 0Fh(02): request to change shutdown action" + " to shutdown after successful memory test")); + break; + case 0x03: /* shutdown after failed memory test */ + BX_DEBUG(("Reg 0Fh(03): request to change shutdown action" + " to shutdown after successful memory test")); + break; + case 0x04: /* jump to disk bootstrap routine */ + BX_DEBUG(("Reg 0Fh(04): request to change shutdown action " + "to jump to disk bootstrap routine.")); + break; + case 0x05: /* flush keyboard (issue EOI) and jump via 40h:0067h */ + BX_DEBUG(("Reg 0Fh(05): request to change shutdown action " + "to flush keyboard (issue EOI) and jump via 40h:0067h.")); + break; + case 0x06: + BX_DEBUG(("Reg 0Fh(06): Shutdown after memory test !")); + break; + case 0x07: /* reset (after failed test in virtual mode) */ + BX_DEBUG(("Reg 0Fh(07): request to change shutdown action " + "to reset (after failed test in virtual mode).")); + break; + case 0x08: /* used by POST during protected-mode RAM test (return to POST) */ + BX_DEBUG(("Reg 0Fh(08): request to change shutdown action " + "to return to POST (used by POST during protected-mode RAM test).")); + break; + case 0x09: /* return to BIOS extended memory block move + (interrupt 15h, func 87h was in progress) */ + BX_DEBUG(("Reg 0Fh(09): request to change shutdown action " + "to return to BIOS extended memory block move.")); + break; + case 0x0a: /* jump to DWORD pointer at 40:67 */ + BX_DEBUG(("Reg 0Fh(0a): request to change shutdown action" + " to jump to DWORD at 40:67")); + break; + case 0x0b: /* iret to DWORD pointer at 40:67 */ + BX_DEBUG(("Reg 0Fh(0b): request to change shutdown action" + " to iret to DWORD at 40:67")); + break; + case 0x0c: /* retf to DWORD pointer at 40:67 */ + BX_DEBUG(("Reg 0Fh(0c): request to change shutdown action" + " to retf to DWORD at 40:67")); + break; + default: + BX_ERROR(("unsupported shutdown status: 0x%02x!", value)); + } + BX_CMOS_THIS s.reg[REG_SHUTDOWN_STATUS] = value; + break; + + default: + BX_DEBUG(("write reg 0x%02x: value = 0x%02x", + BX_CMOS_THIS s.cmos_mem_address, value)); + BX_CMOS_THIS s.reg[BX_CMOS_THIS s.cmos_mem_address] = value; + } + break; + } +} + +void bx_cmos_c::checksum_cmos(void) +{ + Bit16u sum = 0; + for (unsigned i=0x10; i<=0x2d; i++) + sum += BX_CMOS_THIS s.reg[i]; + BX_CMOS_THIS s.reg[REG_CSUM_HIGH] = (sum >> 8) & 0xff; /* checksum high */ + BX_CMOS_THIS s.reg[REG_CSUM_LOW] = (sum & 0xff); /* checksum low */ +} + +void bx_cmos_c::periodic_timer_handler(void *this_ptr) +{ + bx_cmos_c *class_ptr = (bx_cmos_c *) this_ptr; + class_ptr->periodic_timer(); +} + +void bx_cmos_c::periodic_timer() +{ + // if periodic interrupts are enabled, trip IRQ 8, and + // update status register C + if (BX_CMOS_THIS s.reg[REG_STAT_B] & 0x40) { + BX_CMOS_THIS s.reg[REG_STAT_C] |= 0xc0; // Interrupt Request, Periodic Int + DEV_pic_raise_irq(8); + } +} + +void bx_cmos_c::one_second_timer_handler(void *this_ptr) +{ + bx_cmos_c *class_ptr = (bx_cmos_c *) this_ptr; + class_ptr->one_second_timer(); +} + +void bx_cmos_c::one_second_timer() +{ + // divider chain reset - RTC stopped + if ((BX_CMOS_THIS s.reg[REG_STAT_A] & 0x60) == 0x60) + return; + + // update internal time/date buffer + BX_CMOS_THIS s.timeval++; + + // Dont update CMOS user copy of time/date if CRB bit7 is 1 + // Nothing else do to + if (BX_CMOS_THIS s.reg[REG_STAT_B] & 0x80) + return; + + BX_CMOS_THIS s.reg[REG_STAT_A] |= 0x80; // set UIP bit + + // UIP timer for updating clock & alarm functions + bx_pc_system.activate_timer(BX_CMOS_THIS s.uip_timer_index, 244, 0); +} + +void bx_cmos_c::uip_timer_handler(void *this_ptr) +{ + bx_cmos_c *class_ptr = (bx_cmos_c *) this_ptr; + class_ptr->uip_timer(); +} + +void bx_cmos_c::uip_timer() +{ + update_clock(); + + // if update interrupts are enabled, trip IRQ 8, and + // update status register C + if (BX_CMOS_THIS s.reg[REG_STAT_B] & 0x10) { + BX_CMOS_THIS s.reg[REG_STAT_C] |= 0x90; // Interrupt Request, Update Ended + DEV_pic_raise_irq(8); + } + + // compare CMOS user copy of time/date to alarm time/date here + if (BX_CMOS_THIS s.reg[REG_STAT_B] & 0x20) { + // Alarm interrupts enabled + bx_bool alarm_match = 1; + if ((BX_CMOS_THIS s.reg[REG_SEC_ALARM] & 0xc0) != 0xc0) { + // seconds alarm not in dont care mode + if (BX_CMOS_THIS s.reg[REG_SEC] != BX_CMOS_THIS s.reg[REG_SEC_ALARM]) + alarm_match = 0; + } + if ((BX_CMOS_THIS s.reg[REG_MIN_ALARM] & 0xc0) != 0xc0) { + // minutes alarm not in dont care mode + if (BX_CMOS_THIS s.reg[REG_MIN] != BX_CMOS_THIS s.reg[REG_MIN_ALARM]) + alarm_match = 0; + } + if ((BX_CMOS_THIS s.reg[REG_HOUR_ALARM] & 0xc0) != 0xc0) { + // hours alarm not in dont care mode + if (BX_CMOS_THIS s.reg[REG_HOUR] != BX_CMOS_THIS s.reg[REG_HOUR_ALARM]) + alarm_match = 0; + } + if (alarm_match) { + BX_CMOS_THIS s.reg[REG_STAT_C] |= 0xa0; // Interrupt Request, Alarm Int + DEV_pic_raise_irq(8); + } + } + BX_CMOS_THIS s.reg[REG_STAT_A] &= 0x7f; // clear UIP bit +} + +void bx_cmos_c::update_clock() +{ + struct tm *time_calendar; + unsigned year, month, day, century; + Bit8u val_bcd, hour; + + time_calendar = localtime(& BX_CMOS_THIS s.timeval); + + // update seconds + BX_CMOS_THIS s.reg[REG_SEC] = bin_to_bcd(time_calendar->tm_sec, + BX_CMOS_THIS s.rtc_mode_binary); + + // update minutes + BX_CMOS_THIS s.reg[REG_MIN] = bin_to_bcd(time_calendar->tm_min, + BX_CMOS_THIS s.rtc_mode_binary); + + // update hours + if (BX_CMOS_THIS s.rtc_mode_12hour) { + hour = time_calendar->tm_hour; + val_bcd = (hour > 11) ? 0x80 : 0x00; + if (hour > 11) hour -= 12; + if (hour == 0) hour = 12; + val_bcd |= bin_to_bcd(hour, BX_CMOS_THIS s.rtc_mode_binary); + BX_CMOS_THIS s.reg[REG_HOUR] = val_bcd; + } else { + BX_CMOS_THIS s.reg[REG_HOUR] = bin_to_bcd(time_calendar->tm_hour, + BX_CMOS_THIS s.rtc_mode_binary); + } + + // update day of the week + day = time_calendar->tm_wday + 1; // 0..6 to 1..7 + BX_CMOS_THIS s.reg[REG_WEEK_DAY] = bin_to_bcd(day, + BX_CMOS_THIS s.rtc_mode_binary); + + // update day of the month + day = time_calendar->tm_mday; + BX_CMOS_THIS s.reg[REG_MONTH_DAY] = bin_to_bcd(day, + BX_CMOS_THIS s.rtc_mode_binary); + + // update month + month = time_calendar->tm_mon + 1; + BX_CMOS_THIS s.reg[REG_MONTH] = bin_to_bcd(month, + BX_CMOS_THIS s.rtc_mode_binary); + + // update year + year = time_calendar->tm_year % 100; + BX_CMOS_THIS s.reg[REG_YEAR] = bin_to_bcd(year, + BX_CMOS_THIS s.rtc_mode_binary); + + // update century + century = (time_calendar->tm_year / 100) + 19; + BX_CMOS_THIS s.reg[REG_IBM_CENTURY_BYTE] = bin_to_bcd(century, + BX_CMOS_THIS s.rtc_mode_binary); + + // Raul Hudea pointed out that some bioses also use reg 0x37 for the + // century byte. Tony Heller says this is critical in getting WinXP to run. + BX_CMOS_THIS s.reg[REG_IBM_PS2_CENTURY_BYTE] = + BX_CMOS_THIS s.reg[REG_IBM_CENTURY_BYTE]; +} + +void bx_cmos_c::update_timeval() +{ + struct tm time_calendar; + Bit8u val_bin, pm_flag; + + // update seconds + time_calendar.tm_sec = bcd_to_bin(BX_CMOS_THIS s.reg[REG_SEC], + BX_CMOS_THIS s.rtc_mode_binary); + + // update minutes + time_calendar.tm_min = bcd_to_bin(BX_CMOS_THIS s.reg[REG_MIN], + BX_CMOS_THIS s.rtc_mode_binary); + + // update hours + if (BX_CMOS_THIS s.rtc_mode_12hour) { + pm_flag = BX_CMOS_THIS s.reg[REG_HOUR] & 0x80; + val_bin = bcd_to_bin(BX_CMOS_THIS s.reg[REG_HOUR] & 0x70, + BX_CMOS_THIS s.rtc_mode_binary); + if ((val_bin < 12) & (pm_flag > 0)) { + val_bin += 12; + } else if ((val_bin == 12) & (pm_flag == 0)) { + val_bin = 0; + } + time_calendar.tm_hour = val_bin; + } else { + time_calendar.tm_hour = bcd_to_bin(BX_CMOS_THIS s.reg[REG_HOUR], + BX_CMOS_THIS s.rtc_mode_binary); + } + + // update day of the month + time_calendar.tm_mday = bcd_to_bin(BX_CMOS_THIS s.reg[REG_MONTH_DAY], + BX_CMOS_THIS s.rtc_mode_binary); + + // update month + time_calendar.tm_mon = bcd_to_bin(BX_CMOS_THIS s.reg[REG_MONTH], + BX_CMOS_THIS s.rtc_mode_binary) - 1; + + // update year + val_bin = bcd_to_bin(BX_CMOS_THIS s.reg[REG_IBM_CENTURY_BYTE], + BX_CMOS_THIS s.rtc_mode_binary); + val_bin = (val_bin - 19) * 100; + val_bin += bcd_to_bin(BX_CMOS_THIS s.reg[REG_YEAR], + BX_CMOS_THIS s.rtc_mode_binary); + time_calendar.tm_year = val_bin; + + BX_CMOS_THIS s.timeval = mktime(& time_calendar); +} diff --git a/bochs/iodev/cmos.h b/bochs/iodev/cmos.h new file mode 100644 index 00000000..8bbeb02d --- /dev/null +++ b/bochs/iodev/cmos.h @@ -0,0 +1,91 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef BX_IODEV_CMOS_H +#define BX_IODEV_CMOS_H + +#if BX_USE_CMOS_SMF +# define BX_CMOS_SMF static +# define BX_CMOS_THIS theCmosDevice-> +#else +# define BX_CMOS_SMF +# define BX_CMOS_THIS this-> +#endif + + +class bx_cmos_c : public bx_cmos_stub_c { +public: + bx_cmos_c(); + virtual ~bx_cmos_c(); + + virtual void init(void); + virtual void checksum_cmos(void); + virtual void reset(unsigned type); + virtual void save_image(void); + virtual void register_state(void); + virtual void after_restore_state(void); + + virtual Bit32u get_reg(unsigned reg) { + return s.reg[reg]; + } + virtual void set_reg(unsigned reg, Bit32u val) { + s.reg[reg] = val; + } + virtual time_t get_timeval() { + return s.timeval; + } + + struct { + int periodic_timer_index; + Bit32u periodic_interval_usec; + int one_second_timer_index; + int uip_timer_index; + time_t timeval; + Bit8u cmos_mem_address; + bx_bool timeval_change; + bx_bool rtc_mode_12hour; + bx_bool rtc_mode_binary; + + Bit8u reg[128]; + } s; // state information + +private: + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_CMOS_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned len); +#endif + +public: + static void periodic_timer_handler(void *); + static void one_second_timer_handler(void *); + static void uip_timer_handler(void *); + BX_CMOS_SMF void periodic_timer(void); + BX_CMOS_SMF void one_second_timer(void); + BX_CMOS_SMF void uip_timer(void); +private: + BX_CMOS_SMF void update_clock(void); + BX_CMOS_SMF void update_timeval(void); + BX_CMOS_SMF void CRA_change(void); +}; + +#endif diff --git a/bochs/iodev/crc32.cc b/bochs/iodev/crc32.cc new file mode 100644 index 00000000..dc788090 --- /dev/null +++ b/bochs/iodev/crc32.cc @@ -0,0 +1,52 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +/* CRC-32 calculator + * Adapted from http://www.createwindow.org/programming/crc32/ + */ + +#include "crc32.h" + +CRC_Generator::CRC_Generator() { + init(); +} + +void CRC_Generator::init(void) +{ + Bit32u POLYNOMIAL = 0x04c11db7; + int i; + + for(i = 0; i<0xFF; i++) { + int j; + crc32_table[i]=reflect(i,8) << 24; + for(j=0; j<8; j++) + crc32_table[i] = (crc32_table[i]<<1)^(crc32_table[i] & (1<<31) ? POLYNOMIAL : 0); + crc32_table[i] = reflect(crc32_table[i], 32); + } +} + +Bit32u CRC_Generator::reflect(Bit32u ref, Bit8u ch) +{ + Bit32u value(0); + int i; + + for(i=1; i<(ch+1); i++) { + if(ref & 1) + value |= 1 << (ch-i); + ref >>= 1; + } + return value; +} + +Bit32u CRC_Generator::get_CRC(Bit8u * buf, Bit32u buflen) +{ + Bit32u ulCRC(0xFFFFFFFF); + Bit32u len(buflen); + Bit8u * buffer=(Bit8u *) buf; + + while(len--) + ulCRC=(ulCRC>>8)^crc32_table[(ulCRC & 0xFF)^*buffer++]; + return ulCRC ^ 0xFFFFFFFF; +} + diff --git a/bochs/iodev/crc32.h b/bochs/iodev/crc32.h new file mode 100644 index 00000000..974aaea8 --- /dev/null +++ b/bochs/iodev/crc32.h @@ -0,0 +1,25 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +/* CRC-32 calculator + * Adapted from http://www.createwindow.org/programming/crc32/ + */ + +#ifndef _CRC_32_H_ +#define _CRC_32_H_ + +#include "config.h" + +class CRC_Generator { +private: + Bit32u crc32_table[256]; + Bit32u reflect(Bit32u ref, Bit8u ch); +public: + void init(void); + CRC_Generator(); + Bit32u get_CRC(Bit8u * buf, Bit32u buflen); +}; + +#endif //_CRC_32_H_ + diff --git a/bochs/iodev/devices.cc b/bochs/iodev/devices.cc new file mode 100644 index 00000000..86b0d3ba --- /dev/null +++ b/bochs/iodev/devices.cc @@ -0,0 +1,1212 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2011 The Bochs Project +// +// I/O port handlers API Copyright (C) 2003 by Frank Cornelis +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + + +#include "iodev.h" + +#include "iodev/virt_timer.h" +#include "iodev/slowdown_timer.h" + +#define LOG_THIS bx_devices. + +/* main memory size (in Kbytes) + * subtract 1k for extended BIOS area + * report only base memory, not extended mem + */ +#define BASE_MEMORY_IN_K 640 + + +bx_devices_c bx_devices; + + +// constructor for bx_devices_c +bx_devices_c::bx_devices_c() +{ + put("DEV"); + + read_port_to_handler = NULL; + write_port_to_handler = NULL; + io_read_handlers.next = NULL; + io_read_handlers.handler_name = NULL; + io_write_handlers.next = NULL; + io_write_handlers.handler_name = NULL; + init_stubs(); + + for (unsigned i=0; i < BX_MAX_IRQS; i++) { + irq_handler_name[i] = NULL; + } +} + +bx_devices_c::~bx_devices_c() +{ + // nothing needed for now + timer_handle = BX_NULL_TIMER_HANDLE; +} + +void bx_devices_c::init_stubs() +{ +#if BX_SUPPORT_PCI + pluginPciBridge = &stubPci; + pluginPci2IsaBridge = &stubPci2Isa; + pluginPciIdeController = &stubPciIde; +#if BX_SUPPORT_ACPI + pluginACPIController = &stubACPIController; +#endif +#endif + pluginKeyboard = &stubKeyboard; + pluginDmaDevice = &stubDma; + pluginFloppyDevice = &stubFloppy; + pluginCmosDevice = &stubCmos; + pluginVgaDevice = &stubVga; + pluginPicDevice = &stubPic; + pluginHardDrive = &stubHardDrive; + pluginNE2kDevice[0] =&stubNE2k; + pluginNE2kDevice[1] =&stubNE2k; + pluginNE2kDevice[2] =&stubNE2k; + pluginNE2kDevice[3] =&stubNE2k; + pluginSpeaker = &stubSpeaker; +#if BX_SUPPORT_IODEBUG + pluginIODebug = &stubIODebug; +#endif +#if BX_SUPPORT_APIC + pluginIOAPIC = &stubIOAPIC; +#endif +#if BX_SUPPORT_PCIUSB + pluginUsbDevCtl = &stubUsbDevCtl; +#endif +#if BX_SUPPORT_SB16 + pluginSoundModCtl = &stubSoundModCtl; +#endif +#if 0 + g2h = NULL; +#endif +} + + +#if !BX_PLUGINS +// We need a forward-declaration of these functions since the compiler doesn't find them +// otherwise. With the original Bochs, it finds the function. But I don't know +// why. +int libne2k0_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]); +int libne2k1_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]); +int libne2k2_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]); +int libne2k3_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]); +#endif + +void bx_devices_c::init(BX_MEM_C *newmem) +{ + unsigned i; + const char def_name[] = "Default"; + bx_list_c *plugin_ctrl; + bx_param_bool_c *plugin; +#if !BX_PLUGINS + const char *plugname; +#endif + + BX_DEBUG(("Init $Id$")); + mem = newmem; + + /* set builtin default handlers, will be overwritten by the real default handler */ + register_default_io_read_handler(NULL, &default_read_handler, def_name, 7); + io_read_handlers.next = &io_read_handlers; + io_read_handlers.prev = &io_read_handlers; + io_read_handlers.usage_count = 0; // not used with the default handler + + register_default_io_write_handler(NULL, &default_write_handler, def_name, 7); + io_write_handlers.next = &io_write_handlers; + io_write_handlers.prev = &io_write_handlers; + io_write_handlers.usage_count = 0; // not used with the default handler + + if (read_port_to_handler) + delete [] read_port_to_handler; + if (write_port_to_handler) + delete [] write_port_to_handler; + read_port_to_handler = new struct io_handler_struct *[PORTS]; + write_port_to_handler = new struct io_handler_struct *[PORTS]; + + /* set handlers to the default one */ + for (i=0; i < PORTS; i++) { + read_port_to_handler[i] = &io_read_handlers; + write_port_to_handler[i] = &io_write_handlers; + } + + for (i=0; i < BX_MAX_IRQS; i++) { + delete [] irq_handler_name[i]; + irq_handler_name[i] = NULL; + } + + // removable devices init + bx_keyboard.dev = NULL; + bx_keyboard.enq_event = NULL; + for (i=0; i < 2; i++) { + bx_mouse[i].dev = NULL; + bx_mouse[i].enq_event = NULL; + bx_mouse[i].enabled_changed = NULL; + } + // common mouse settings + mouse_captured = SIM->get_param_bool(BXPN_MOUSE_ENABLED)->get(); + mouse_type = SIM->get_param_enum(BXPN_MOUSE_TYPE)->get(); + + // register as soon as possible - the devices want to have their timers ! + bx_virt_timer.init(); + bx_slowdown_timer.init(); + + // BBD: At present, the only difference between "core" and "optional" + // plugins is that initialization and reset of optional plugins is handled + // by the plugin device list (). Init and reset of core plugins is done + // "by hand" in this file. Basically, we're using core plugins when we + // want to control the init order. + // + PLUG_load_plugin(cmos, PLUGTYPE_CORE); + PLUG_load_plugin(dma, PLUGTYPE_CORE); + PLUG_load_plugin(pic, PLUGTYPE_CORE); + PLUG_load_plugin(pit, PLUGTYPE_CORE); + PLUG_load_plugin(vga, PLUGTYPE_CORE); + PLUG_load_plugin(hdimage, PLUGTYPE_CORE); + PLUG_load_plugin(floppy, PLUGTYPE_CORE); +#if BX_SUPPORT_SB16 + PLUG_load_plugin(soundmod, PLUGTYPE_CORE); +#endif + + // PCI logic (i440FX) + if (SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get()) { +#if BX_SUPPORT_PCI + PLUG_load_plugin(pci, PLUGTYPE_CORE); + PLUG_load_plugin(pci2isa, PLUGTYPE_CORE); +#if BX_SUPPORT_PCIUSB + PLUG_load_plugin(usb_common, PLUGTYPE_CORE); +#endif + } else { + plugin_ctrl = (bx_list_c*)SIM->get_param(BXPN_PLUGIN_CTRL); + SIM->get_param_bool(BX_PLUGIN_PCI_IDE, plugin_ctrl)->set(0); + SIM->get_param_bool(BX_PLUGIN_ACPI, plugin_ctrl)->set(0); + } +#else + BX_ERROR(("Bochs is not compiled with PCI support")); + } +#endif + + // optional plugins not controlled by separate option + plugin_ctrl = (bx_list_c*)SIM->get_param(BXPN_PLUGIN_CTRL); + for (i = 0; i < (unsigned)plugin_ctrl->get_size(); i++) { + plugin = (bx_param_bool_c*)(plugin_ctrl->get(i)); + if (plugin->get()) { +#if BX_PLUGINS + PLUG_load_opt_plugin(plugin->get_name()); +#else + // workaround in case of plugins disabled + plugname = plugin->get_name(); + if (!strcmp(plugname, BX_PLUGIN_UNMAPPED)) { + PLUG_load_plugin(unmapped, PLUGTYPE_OPTIONAL); + } + else if (!strcmp(plugname, BX_PLUGIN_BIOSDEV)) { + PLUG_load_plugin(biosdev, PLUGTYPE_OPTIONAL); + } + else if (!strcmp(plugname, BX_PLUGIN_SPEAKER)) { + PLUG_load_plugin(speaker, PLUGTYPE_OPTIONAL); + } + else if (!strcmp(plugname, BX_PLUGIN_EXTFPUIRQ)) { + PLUG_load_plugin(extfpuirq, PLUGTYPE_OPTIONAL); + } +#if BX_SUPPORT_GAMEPORT + else if (!strcmp(plugname, BX_PLUGIN_GAMEPORT)) { + PLUG_load_plugin(gameport, PLUGTYPE_OPTIONAL); + } +#endif +#if BX_SUPPORT_IODEBUG + else if (!strcmp(plugname, BX_PLUGIN_IODEBUG)) { + PLUG_load_plugin(iodebug, PLUGTYPE_OPTIONAL); + } +#endif +#if BX_SUPPORT_PCI + else if (!strcmp(plugname, BX_PLUGIN_PCI_IDE)) { + PLUG_load_plugin(pci_ide, PLUGTYPE_OPTIONAL); + } +#endif +#if BX_SUPPORT_ACPI + else if (!strcmp(plugname, BX_PLUGIN_ACPI)) { + PLUG_load_plugin(acpi, PLUGTYPE_OPTIONAL); + } +#endif +#if BX_SUPPORT_APIC + else if (!strcmp(plugname, BX_PLUGIN_IOAPIC)) { + PLUG_load_plugin(ioapic, PLUGTYPE_OPTIONAL); + } +#endif +#endif + } + } + + PLUG_load_plugin(keyboard, PLUGTYPE_OPTIONAL); +#if BX_SUPPORT_BUSMOUSE + if (mouse_type == BX_MOUSE_TYPE_BUS) { + PLUG_load_plugin(busmouse, PLUGTYPE_OPTIONAL); + } +#endif + if (is_harddrv_enabled()) + PLUG_load_plugin(harddrv, PLUGTYPE_OPTIONAL); + if (is_serial_enabled()) + PLUG_load_plugin(serial, PLUGTYPE_OPTIONAL); + if (is_parallel_enabled()) + PLUG_load_plugin(parallel, PLUGTYPE_OPTIONAL); + +#if BX_SUPPORT_PCI + if (SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get()) { +#if BX_SUPPORT_PCIVGA && BX_SUPPORT_VBE + if ((DEV_is_pci_device("pcivga")) && + (!strcmp(SIM->get_param_string(BXPN_VGA_EXTENSION)->getptr(), "vbe"))) { + PLUG_load_plugin(pcivga, PLUGTYPE_OPTIONAL); + } +#endif +#if BX_SUPPORT_USB_UHCI + if (is_usb_uhci_enabled()) { + PLUG_load_plugin(usb_uhci, PLUGTYPE_OPTIONAL); + } +#endif +#if BX_SUPPORT_USB_OHCI + if (is_usb_ohci_enabled()) { + PLUG_load_plugin(usb_ohci, PLUGTYPE_OPTIONAL); + } +#endif +#if BX_SUPPORT_PCIDEV + if (SIM->get_param_num(BXPN_PCIDEV_VENDOR)->get() != 0xffff) { + PLUG_load_plugin(pcidev, PLUGTYPE_OPTIONAL); + } +#endif +#if BX_SUPPORT_PCIPNIC + if (SIM->get_param_bool(BXPN_PNIC_ENABLED)->get()) { + PLUG_load_plugin(pcipnic, PLUGTYPE_OPTIONAL); + } +#endif + } +#endif + +// NE2000 NIC +#if BX_SUPPORT_NE2K + if (SIM->get_param_bool(BXPN_NE2K0_ENABLED)->get()){ + PLUG_load_plugin(ne2k0, PLUGTYPE_OPTIONAL); + } + if (SIM->get_param_bool(BXPN_NE2K1_ENABLED)->get()){ + PLUG_load_plugin(ne2k1, PLUGTYPE_OPTIONAL); + } + if (SIM->get_param_bool(BXPN_NE2K2_ENABLED)->get()){ + PLUG_load_plugin(ne2k2, PLUGTYPE_OPTIONAL); + } + if (SIM->get_param_bool(BXPN_NE2K3_ENABLED)->get()){ + PLUG_load_plugin(ne2k3, PLUGTYPE_OPTIONAL); + } +#else +char pname[24]; +bool enabled = false; +for (int i=0; i<4; i++) { + sprintf(pname, "network.ne2k.%d.enabled", i); + + if (SIM->get_param_bool(pname)->get()) + enabled |= true; +} +if(enabled) BX_ERROR(("Bochs is not compiled with NE2K support")); +#endif + + + +// // NE2000 NIC +// if (SIM->get_param_bool(BXPN_NE2K_ENABLED)->get()) { +//#if BX_SUPPORT_NE2K +// PLUG_load_plugin(ne2k, PLUGTYPE_OPTIONAL); +//#else +// BX_ERROR(("Bochs is not compiled with NE2K support")); +//#endif +// } + + //--- SOUND --- + if (SIM->get_param_bool(BXPN_SB16_ENABLED)->get()) { +#if BX_SUPPORT_SB16 + PLUG_load_plugin(sb16, PLUGTYPE_OPTIONAL); +#else + BX_ERROR(("Bochs is not compiled with SB16 support")); +#endif + } + + // CMOS RAM & RTC + pluginCmosDevice->init(); + + /*--- 8237 DMA ---*/ + pluginDmaDevice->init(); + + //--- FLOPPY --- + pluginFloppyDevice->init(); + +#if BX_SUPPORT_PCI + pluginPciBridge->init(); + pluginPci2IsaBridge->init(); +#endif + + /*--- VGA adapter ---*/ + pluginVgaDevice->init(); + + /*--- 8259A PIC ---*/ + pluginPicDevice->init(); + + /*--- 82C54 PIT ---*/ + pluginPitDevice->init(); + +#if 0 + // Guest to Host interface. Used with special guest drivers + // which move data to/from the host environment. + g2h = &bx_g2h; + g2h->init(); +#endif + + // system hardware + register_io_read_handler(this, &read_handler, 0x0092, + "Port 92h System Control", 1); + register_io_write_handler(this, &write_handler, 0x0092, + "Port 92h System Control", 1); + + // misc. CMOS + Bit32u memory_in_k = (Bit32u)mem->get_memory_len() / 1024; + Bit32u extended_memory_in_k = memory_in_k > 1024 ? (memory_in_k - 1024) : 0; + if (extended_memory_in_k > 0xfc00) extended_memory_in_k = 0xfc00; + + DEV_cmos_set_reg(0x15, (Bit8u) BASE_MEMORY_IN_K); + DEV_cmos_set_reg(0x16, (Bit8u) (BASE_MEMORY_IN_K >> 8)); + DEV_cmos_set_reg(0x17, (Bit8u) (extended_memory_in_k & 0xff)); + DEV_cmos_set_reg(0x18, (Bit8u) ((extended_memory_in_k >> 8) & 0xff)); + DEV_cmos_set_reg(0x30, (Bit8u) (extended_memory_in_k & 0xff)); + DEV_cmos_set_reg(0x31, (Bit8u) ((extended_memory_in_k >> 8) & 0xff)); + + Bit32u extended_memory_in_64k = memory_in_k > 16384 ? (memory_in_k - 16384) / 64 : 0; + if (extended_memory_in_64k > 0xffff) extended_memory_in_64k = 0xffff; + + DEV_cmos_set_reg(0x34, (Bit8u) (extended_memory_in_64k & 0xff)); + DEV_cmos_set_reg(0x35, (Bit8u) ((extended_memory_in_64k >> 8) & 0xff)); + + if (timer_handle != BX_NULL_TIMER_HANDLE) { + timer_handle = bx_pc_system.register_timer(this, timer_handler, + (unsigned) BX_IODEV_HANDLER_PERIOD, 1, 1, "devices.cc"); + } + + // Clear fields for bulk IO acceleration transfers. + bulkIOHostAddr = 0; + bulkIOQuantumsRequested = 0; + bulkIOQuantumsTransferred = 0; + + bx_init_plugins(); + + /* now perform checksum of CMOS memory */ + DEV_cmos_checksum(); +} + +void bx_devices_c::reset(unsigned type) +{ + mem->disable_smram(); +#if BX_SUPPORT_PCI + if (SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get()) { + pluginPciBridge->reset(type); + pluginPci2IsaBridge->reset(type); + } +#endif + pluginCmosDevice->reset(type); + pluginDmaDevice->reset(type); + pluginFloppyDevice->reset(type); + pluginVgaDevice->reset(type); + pluginPicDevice->reset(type); + pluginPitDevice->reset(type); + // now reset optional plugins + bx_reset_plugins(type); +} + +void bx_devices_c::register_state() +{ + bx_virt_timer.register_state(); +#if BX_SUPPORT_PCI + if (SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get()) { + pluginPciBridge->register_state(); + pluginPci2IsaBridge->register_state(); + } +#endif + pluginCmosDevice->register_state(); + pluginDmaDevice->register_state(); + pluginFloppyDevice->register_state(); + pluginVgaDevice->register_state(); + pluginPicDevice->register_state(); + pluginPitDevice->register_state(); + // now register state of optional plugins + bx_plugins_register_state(); +} + +void bx_devices_c::after_restore_state() +{ + bx_slowdown_timer.after_restore_state(); +#if BX_SUPPORT_PCI + if (SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get()) { + pluginPciBridge->after_restore_state(); + pluginPci2IsaBridge->after_restore_state(); + } +#endif + pluginCmosDevice->after_restore_state(); + pluginVgaDevice->after_restore_state(); + bx_plugins_after_restore_state(); +} + +void bx_devices_c::exit() +{ + // delete i/o handlers before unloading plugins + struct io_handler_struct *io_read_handler = io_read_handlers.next; + struct io_handler_struct *curr = NULL; + while (io_read_handler != &io_read_handlers) { + io_read_handler->prev->next = io_read_handler->next; + io_read_handler->next->prev = io_read_handler->prev; + curr = io_read_handler; + io_read_handler = io_read_handler->next; + delete [] curr->handler_name; + delete curr; + } + struct io_handler_struct *io_write_handler = io_write_handlers.next; + while (io_write_handler != &io_write_handlers) { + io_write_handler->prev->next = io_write_handler->next; + io_write_handler->next->prev = io_write_handler->prev; + curr = io_write_handler; + io_write_handler = io_write_handler->next; + delete [] curr->handler_name; + delete curr; + } + + bx_virt_timer.setup(); + bx_slowdown_timer.exit(); + + PLUG_unload_plugin(pit); + PLUG_unload_plugin(cmos); + PLUG_unload_plugin(dma); + PLUG_unload_plugin(pic); + PLUG_unload_plugin(vga); + PLUG_unload_plugin(floppy); +#if BX_SUPPORT_PCI + PLUG_unload_plugin(pci); + PLUG_unload_plugin(pci2isa); +#endif + bx_unload_plugins(); + init_stubs(); +} + +Bit32u bx_devices_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_DEV_SMF + bx_devices_c *class_ptr = (bx_devices_c *) this_ptr; + return class_ptr->port92_read(address, io_len); +} + +Bit32u bx_devices_c::port92_read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_DEV_SMF + + BX_DEBUG(("port92h read partially supported!!!")); + BX_DEBUG((" returning %02x", (unsigned) (BX_GET_ENABLE_A20() << 1))); + return(BX_GET_ENABLE_A20() << 1); +} + +void bx_devices_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_DEV_SMF + bx_devices_c *class_ptr = (bx_devices_c *) this_ptr; + class_ptr->port92_write(address, value, io_len); +} + +void bx_devices_c::port92_write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_DEV_SMF + + BX_DEBUG(("port92h write of %02x partially supported!!!", (unsigned) value)); + BX_DEBUG(("A20: set_enable_a20() called")); + BX_SET_ENABLE_A20((value & 0x02) >> 1); + BX_DEBUG(("A20: now %u", (unsigned) BX_GET_ENABLE_A20())); + if (value & 0x01) { /* high speed reset */ + BX_INFO(("iowrite to port0x92 : reset resquested")); + bx_pc_system.Reset(BX_RESET_SOFTWARE); + } +} + +// This defines the builtin default read handler, +// so Bochs does not segfault if unmapped is not loaded +Bit32u bx_devices_c::default_read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ + UNUSED(this_ptr); + return 0xffffffff; +} + +// This defines the builtin default write handler, +// so Bochs does not segfault if unmapped is not loaded +void bx_devices_c::default_write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ + UNUSED(this_ptr); +} + +void bx_devices_c::timer_handler(void *this_ptr) +{ + bx_devices_c *class_ptr = (bx_devices_c *) this_ptr; + class_ptr->timer(); +} + +void bx_devices_c::timer() +{ + // separate calls to bx_gui->handle_events from the keyboard code. + { + static int multiple=0; + if (++multiple==10) + { + multiple=0; + SIM->periodic(); + if (! bx_pc_system.kill_bochs_request) + bx_gui->handle_events(); + } + } +} + +bx_bool bx_devices_c::register_irq(unsigned irq, const char *name) +{ + if (irq >= BX_MAX_IRQS) { + BX_PANIC(("IO device %s registered with IRQ=%d above %u", + name, irq, (unsigned) BX_MAX_IRQS-1)); + return 0; + } + if (irq_handler_name[irq]) { + BX_PANIC(("IRQ %u conflict, %s with %s", irq, irq_handler_name[irq], name)); + return 0; + } + irq_handler_name[irq] = new char[strlen(name)+1]; + strcpy(irq_handler_name[irq], name); + return 1; +} + +bx_bool bx_devices_c::unregister_irq(unsigned irq, const char *name) +{ + if (irq >= BX_MAX_IRQS) { + BX_PANIC(("IO device %s tried to unregister IRQ %d above %u", + name, irq, (unsigned) BX_MAX_IRQS-1)); + return 0; + } + if (!irq_handler_name[irq]) { + BX_INFO(("IO device %s tried to unregister IRQ %d, not registered", + name, irq)); + return 0; + } + + if (strcmp(irq_handler_name[irq], name)) { + BX_INFO(("IRQ %u not registered to %s but to %s", irq, + name, irq_handler_name[irq])); + return 0; + } + delete [] irq_handler_name[irq]; + irq_handler_name[irq] = NULL; + return 1; +} + +bx_bool bx_devices_c::register_io_read_handler(void *this_ptr, bx_read_handler_t f, + Bit32u addr, const char *name, Bit8u mask) +{ + addr &= 0xffff; + + if (!f) + return 0; + + /* first check if the port already has a handlers != the default handler */ + if (read_port_to_handler[addr] && + read_port_to_handler[addr] != &io_read_handlers) { // the default + BX_ERROR(("IO device address conflict(read) at IO address %Xh", + (unsigned) addr)); + BX_ERROR((" conflicting devices: %s & %s", + read_port_to_handler[addr]->handler_name, name)); + return 0; + } + + /* first find existing handle for function or create new one */ + struct io_handler_struct *curr = &io_read_handlers; + struct io_handler_struct *io_read_handler = NULL; + do { + if (curr->funct == f && + curr->mask == mask && + curr->this_ptr == this_ptr && + !strcmp(curr->handler_name, name)) { // really want the same name too + io_read_handler = curr; + break; + } + curr = curr->next; + } while (curr->next != &io_read_handlers); + + if (!io_read_handler) { + io_read_handler = new struct io_handler_struct; + io_read_handler->funct = (void *)f; + io_read_handler->this_ptr = this_ptr; + io_read_handler->handler_name = new char[strlen(name)+1]; + strcpy(io_read_handler->handler_name, name); + io_read_handler->mask = mask; + io_read_handler->usage_count = 0; + // add the handler to the double linked list of handlers + io_read_handlers.prev->next = io_read_handler; + io_read_handler->next = &io_read_handlers; + io_read_handler->prev = io_read_handlers.prev; + io_read_handlers.prev = io_read_handler; + } + + io_read_handler->usage_count++; + read_port_to_handler[addr] = io_read_handler; + return 1; // address mapped successfully +} + +bx_bool bx_devices_c::register_io_write_handler(void *this_ptr, bx_write_handler_t f, + Bit32u addr, const char *name, Bit8u mask) +{ + addr &= 0xffff; + + if (!f) + return 0; + + /* first check if the port already has a handlers != the default handler */ + if (write_port_to_handler[addr] && + write_port_to_handler[addr] != &io_write_handlers) { // the default + BX_ERROR(("IO device address conflict(write) at IO address %Xh", + (unsigned) addr)); + BX_ERROR((" conflicting devices: %s & %s", + write_port_to_handler[addr]->handler_name, name)); + return 0; + } + + /* first find existing handle for function or create new one */ + struct io_handler_struct *curr = &io_write_handlers; + struct io_handler_struct *io_write_handler = NULL; + do { + if (curr->funct == f && + curr->mask == mask && + curr->this_ptr == this_ptr && + !strcmp(curr->handler_name, name)) { // really want the same name too + io_write_handler = curr; + break; + } + curr = curr->next; + } while (curr->next != &io_write_handlers); + + if (!io_write_handler) { + io_write_handler = new struct io_handler_struct; + io_write_handler->funct = (void *)f; + io_write_handler->this_ptr = this_ptr; + io_write_handler->handler_name = new char[strlen(name)+1]; + strcpy(io_write_handler->handler_name, name); + io_write_handler->mask = mask; + io_write_handler->usage_count = 0; + // add the handler to the double linked list of handlers + io_write_handlers.prev->next = io_write_handler; + io_write_handler->next = &io_write_handlers; + io_write_handler->prev = io_write_handlers.prev; + io_write_handlers.prev = io_write_handler; + } + + io_write_handler->usage_count++; + write_port_to_handler[addr] = io_write_handler; + return 1; // address mapped successfully +} + +bx_bool bx_devices_c::register_io_read_handler_range(void *this_ptr, bx_read_handler_t f, + Bit32u begin_addr, Bit32u end_addr, + const char *name, Bit8u mask) +{ + Bit32u addr; + begin_addr &= 0xffff; + end_addr &= 0xffff; + + if (end_addr < begin_addr) { + BX_ERROR(("!!! end_addr < begin_addr !!!")); + return 0; + } + + if (!f) { + BX_ERROR(("!!! f == NULL !!!")); + return 0; + } + + /* first check if the port already has a handlers != the default handler */ + for (addr = begin_addr; addr <= end_addr; addr++) + if (read_port_to_handler[addr] && + read_port_to_handler[addr] != &io_read_handlers) { // the default + BX_ERROR(("IO device address conflict(read) at IO address %Xh", + (unsigned) addr)); + BX_ERROR((" conflicting devices: %s & %s", + read_port_to_handler[addr]->handler_name, name)); + return 0; + } + + /* first find existing handle for function or create new one */ + struct io_handler_struct *curr = &io_read_handlers; + struct io_handler_struct *io_read_handler = NULL; + do { + if (curr->funct == f && + curr->mask == mask && + curr->this_ptr == this_ptr && + !strcmp(curr->handler_name, name)) { + io_read_handler = curr; + break; + } + curr = curr->next; + } while (curr->next != &io_read_handlers); + + if (!io_read_handler) { + io_read_handler = new struct io_handler_struct; + io_read_handler->funct = (void *)f; + io_read_handler->this_ptr = this_ptr; + io_read_handler->handler_name = new char[strlen(name)+1]; + strcpy(io_read_handler->handler_name, name); + io_read_handler->mask = mask; + io_read_handler->usage_count = 0; + // add the handler to the double linked list of handlers + io_read_handlers.prev->next = io_read_handler; + io_read_handler->next = &io_read_handlers; + io_read_handler->prev = io_read_handlers.prev; + io_read_handlers.prev = io_read_handler; + } + + io_read_handler->usage_count += end_addr - begin_addr + 1; + for (addr = begin_addr; addr <= end_addr; addr++) + read_port_to_handler[addr] = io_read_handler; + return 1; // address mapped successfully +} + +bx_bool bx_devices_c::register_io_write_handler_range(void *this_ptr, bx_write_handler_t f, + Bit32u begin_addr, Bit32u end_addr, + const char *name, Bit8u mask) +{ + Bit32u addr; + begin_addr &= 0xffff; + end_addr &= 0xffff; + + if (end_addr < begin_addr) { + BX_ERROR(("!!! end_addr < begin_addr !!!")); + return 0; + } + + if (!f) { + BX_ERROR(("!!! f == NULL !!!")); + return 0; + } + + /* first check if the port already has a handlers != the default handler */ + for (addr = begin_addr; addr <= end_addr; addr++) + if (write_port_to_handler[addr] && + write_port_to_handler[addr] != &io_write_handlers) { // the default + BX_ERROR(("IO device address conflict(read) at IO address %Xh", + (unsigned) addr)); + BX_ERROR((" conflicting devices: %s & %s", + write_port_to_handler[addr]->handler_name, name)); + return 0; + } + + /* first find existing handle for function or create new one */ + struct io_handler_struct *curr = &io_write_handlers; + struct io_handler_struct *io_write_handler = NULL; + do { + if (curr->funct == f && + curr->mask == mask && + curr->this_ptr == this_ptr && + !strcmp(curr->handler_name, name)) { + io_write_handler = curr; + break; + } + curr = curr->next; + } while (curr->next != &io_write_handlers); + + if (!io_write_handler) { + io_write_handler = new struct io_handler_struct; + io_write_handler->funct = (void *)f; + io_write_handler->this_ptr = this_ptr; + io_write_handler->handler_name = new char[strlen(name)+1]; + strcpy(io_write_handler->handler_name, name); + io_write_handler->mask = mask; + io_write_handler->usage_count = 0; + // add the handler to the double linked list of handlers + io_write_handlers.prev->next = io_write_handler; + io_write_handler->next = &io_write_handlers; + io_write_handler->prev = io_write_handlers.prev; + io_write_handlers.prev = io_write_handler; + } + + io_write_handler->usage_count += end_addr - begin_addr + 1; + for (addr = begin_addr; addr <= end_addr; addr++) + write_port_to_handler[addr] = io_write_handler; + return 1; // address mapped successfully +} + + +// Registration of default handlers (mainly be the unmapped device) +bx_bool bx_devices_c::register_default_io_read_handler(void *this_ptr, bx_read_handler_t f, + const char *name, Bit8u mask) +{ + io_read_handlers.funct = (void *)f; + io_read_handlers.this_ptr = this_ptr; + if (io_read_handlers.handler_name) { + delete [] io_read_handlers.handler_name; + } + io_read_handlers.handler_name = new char[strlen(name)+1]; + strcpy(io_read_handlers.handler_name, name); + io_read_handlers.mask = mask; + + return 1; +} + +bx_bool bx_devices_c::register_default_io_write_handler(void *this_ptr, bx_write_handler_t f, + const char *name, Bit8u mask) +{ + io_write_handlers.funct = (void *)f; + io_write_handlers.this_ptr = this_ptr; + if (io_write_handlers.handler_name) { + delete [] io_write_handlers.handler_name; + } + io_write_handlers.handler_name = new char[strlen(name)+1]; + strcpy(io_write_handlers.handler_name, name); + io_write_handlers.mask = mask; + + return 1; +} + +bx_bool bx_devices_c::unregister_io_read_handler(void *this_ptr, bx_read_handler_t f, + Bit32u addr, Bit8u mask) +{ + addr &= 0xffff; + + struct io_handler_struct *io_read_handler = read_port_to_handler[addr]; + + //BX_INFO(("Unregistering I/O read handler at %#x", addr)); + + if (!io_read_handler) { + BX_ERROR((">>> NO IO_READ_HANDLER <<<")); + return 0; + } + + if (io_read_handler == &io_read_handlers) { + BX_ERROR((">>> CANNOT UNREGISTER THE DEFAULT IO_READ_HANDLER <<<")); + return 0; // cannot unregister the default handler + } + + if (io_read_handler->funct != f) { + BX_ERROR((">>> NOT THE SAME IO_READ_HANDLER FUNC <<<")); + return 0; + } + + if (io_read_handler->this_ptr != this_ptr) { + BX_ERROR((">>> NOT THE SAME IO_READ_HANDLER THIS_PTR <<<")); + return 0; + } + + if (io_read_handler->mask != mask) { + BX_ERROR((">>> NOT THE SAME IO_READ_HANDLER MASK <<<")); + return 0; + } + + read_port_to_handler[addr] = &io_read_handlers; // reset to default + io_read_handler->usage_count--; + + if (!io_read_handler->usage_count) { // kill this handler entry + io_read_handler->prev->next = io_read_handler->next; + io_read_handler->next->prev = io_read_handler->prev; + delete [] io_read_handler->handler_name; + delete io_read_handler; + } + return 1; +} + +bx_bool bx_devices_c::unregister_io_write_handler(void *this_ptr, bx_write_handler_t f, + Bit32u addr, Bit8u mask) +{ + addr &= 0xffff; + + struct io_handler_struct *io_write_handler = write_port_to_handler[addr]; + + if (!io_write_handler) + return 0; + + if (io_write_handler == &io_write_handlers) + return 0; // cannot unregister the default handler + + if (io_write_handler->funct != f) + return 0; + + if (io_write_handler->this_ptr != this_ptr) + return 0; + + if (io_write_handler->mask != mask) + return 0; + + write_port_to_handler[addr] = &io_write_handlers; // reset to default + io_write_handler->usage_count--; + + if (!io_write_handler->usage_count) { // kill this handler entry + io_write_handler->prev->next = io_write_handler->next; + io_write_handler->next->prev = io_write_handler->prev; + delete [] io_write_handler->handler_name; + delete io_write_handler; + } + return 1; +} + +bx_bool bx_devices_c::unregister_io_read_handler_range(void *this_ptr, bx_read_handler_t f, + Bit32u begin, Bit32u end, Bit8u mask) +{ + begin &= 0xffff; + end &= 0xffff; + Bit32u addr; + bx_bool ret = 1; + + /* + * the easy way this time + */ + for (addr = begin; addr <= end; addr++) + if (!unregister_io_read_handler(this_ptr, f, addr, mask)) + ret = 0; + + return ret; +} + +bx_bool bx_devices_c::unregister_io_write_handler_range(void *this_ptr, bx_write_handler_t f, + Bit32u begin, Bit32u end, Bit8u mask) +{ + begin &= 0xffff; + end &= 0xffff; + Bit32u addr; + bx_bool ret = 1; + + /* + * the easy way this time + */ + for (addr = begin; addr <= end; addr++) + if (!unregister_io_write_handler(this_ptr, f, addr, mask)) + ret = 0; + + return ret; +} + + +/* + * Read a byte of data from the IO memory address space + */ + + Bit32u BX_CPP_AttrRegparmN(2) +bx_devices_c::inp(Bit16u addr, unsigned io_len) +{ + struct io_handler_struct *io_read_handler; + Bit32u ret; + + BX_INSTR_INP(addr, io_len); + + io_read_handler = read_port_to_handler[addr]; + if (io_read_handler->mask & io_len) { + ret = ((bx_read_handler_t)io_read_handler->funct)(io_read_handler->this_ptr, (Bit32u)addr, io_len); + } else { + switch (io_len) { + case 1: ret = 0xff; break; + case 2: ret = 0xffff; break; + default: ret = 0xffffffff; break; + } + if (addr != 0x0cf8) { // don't flood the logfile when probing PCI + BX_ERROR(("read from port 0x%04x with len %d returns 0x%x", addr, io_len, ret)); + } + } + + BX_INSTR_INP2(addr, io_len, ret); + BX_DBG_IO_REPORT(addr, io_len, BX_READ, ret); + + return(ret); +} + + +/* + * Write a byte of data to the IO memory address space. + */ + + void BX_CPP_AttrRegparmN(3) +bx_devices_c::outp(Bit16u addr, Bit32u value, unsigned io_len) +{ + struct io_handler_struct *io_write_handler; + + BX_INSTR_OUTP(addr, io_len, value); + BX_DBG_IO_REPORT(addr, io_len, BX_WRITE, value); + + io_write_handler = write_port_to_handler[addr]; + if (io_write_handler->mask & io_len) { + ((bx_write_handler_t)io_write_handler->funct)(io_write_handler->this_ptr, (Bit32u)addr, value, io_len); + } else if (addr != 0x0cf8) { // don't flood the logfile when probing PCI + BX_ERROR(("write to port 0x%04x with len %d ignored", addr, io_len)); + } +} + +bx_bool bx_devices_c::is_harddrv_enabled(void) +{ + char pname[24]; + + for (int i=0; iget_param_bool(pname)->get()) + return 1; + } + return 0; +} + +bx_bool bx_devices_c::is_serial_enabled(void) +{ + char pname[24]; + + for (int i=0; iget_param_bool(pname)->get()) + return 1; + } + return 0; +} + +bx_bool bx_devices_c::is_parallel_enabled(void) +{ + char pname[26]; + + for (int i=0; iget_param_bool(pname)->get()) + return 1; + } + return 0; +} + +bx_bool bx_devices_c::is_usb_ohci_enabled(void) +{ + if (SIM->get_param_bool(BXPN_OHCI_ENABLED)->get()) { + return 1; + } + return 0; +} + +bx_bool bx_devices_c::is_usb_uhci_enabled(void) +{ + if (SIM->get_param_bool(BXPN_UHCI_ENABLED)->get()) { + return 1; + } + return 0; +} + +// removable keyboard/mouse registration +void bx_devices_c::register_removable_keyboard(void *dev, bx_keyb_enq_t keyb_enq) +{ + if (bx_keyboard.dev == NULL) { + bx_keyboard.dev = dev; + bx_keyboard.enq_event = keyb_enq; + } +} + +void bx_devices_c::unregister_removable_keyboard(void *dev) +{ + if (dev == bx_keyboard.dev) { + bx_keyboard.dev = NULL; + bx_keyboard.enq_event = NULL; + } +} + +void bx_devices_c::register_default_mouse(void *dev, bx_mouse_enq_t mouse_enq, + bx_mouse_enabled_changed_t mouse_enabled_changed) +{ + if (bx_mouse[0].dev == NULL) { + bx_mouse[0].dev = dev; + bx_mouse[0].enq_event = mouse_enq; + bx_mouse[0].enabled_changed = mouse_enabled_changed; + } +} + +void bx_devices_c::register_removable_mouse(void *dev, bx_mouse_enq_t mouse_enq, + bx_mouse_enabled_changed_t mouse_enabled_changed) +{ + if (bx_mouse[1].dev == NULL) { + bx_mouse[1].dev = dev; + bx_mouse[1].enq_event = mouse_enq; + bx_mouse[1].enabled_changed = mouse_enabled_changed; + } +} + +void bx_devices_c::unregister_removable_mouse(void *dev) +{ + if (dev == bx_mouse[1].dev) { + bx_mouse[1].dev = NULL; + bx_mouse[1].enq_event = NULL; + bx_mouse[1].enabled_changed = NULL; + } +} + +bx_bool bx_devices_c::optional_key_enq(Bit8u *scan_code) +{ + if (bx_keyboard.dev != NULL) { + return bx_keyboard.enq_event(bx_keyboard.dev, scan_code); + } + return 0; +} + +// common mouse device handlers +void bx_devices_c::mouse_enabled_changed(bx_bool enabled) +{ + mouse_captured = enabled; + + if ((bx_mouse[1].dev != NULL) && (bx_mouse[1].enabled_changed != NULL)) { + bx_mouse[1].enabled_changed(bx_mouse[1].dev, enabled); + return; + } + + if ((bx_mouse[0].dev != NULL) && (bx_mouse[0].enabled_changed != NULL)) { + bx_mouse[0].enabled_changed(bx_mouse[0].dev, enabled); + } +} + +void bx_devices_c::mouse_motion(int delta_x, int delta_y, int delta_z, unsigned button_state) +{ + // If mouse events are disabled on the GUI headerbar, don't + // generate any mouse data + if (!mouse_captured) + return; + + // if a removable mouse is connected, redirect mouse data to the device + if (bx_mouse[1].dev != NULL) { + bx_mouse[1].enq_event(bx_mouse[1].dev, delta_x, delta_y, delta_z, button_state); + return; + } + + // if a mouse is connected, direct mouse data to the device + if (bx_mouse[0].dev != NULL) { + bx_mouse[0].enq_event(bx_mouse[0].dev, delta_x, delta_y, delta_z, button_state); + } +} + +void bx_pci_device_stub_c::register_pci_state(bx_list_c *list, Bit8u *pci_conf) +{ + char name[6]; + + bx_list_c *pci = new bx_list_c(list, "pci_conf", 256); + for (unsigned i=0; i<256; i++) { + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(pci, name, &pci_conf[i], BASE_HEX); + } +} diff --git a/bochs/iodev/devices.txt b/bochs/iodev/devices.txt new file mode 100755 index 00000000..08883276 --- /dev/null +++ b/bochs/iodev/devices.txt @@ -0,0 +1,109 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +MOTHER BOARD (i440FX Support) devices.cc + | + +---- 82441FX (PMC) and 82442 (DBX) emulation pci.cc + | + +---- 82371SB (PIIX3) PCI ISA IDE XCELERATOR + | | + | +---- PCI-to-ISA bridge pci2isa.cc + | +---- PCI IDE controller pci_ide.cc + | | + | +---- PIIX4 ACPI support acpi.cc + | + +---- PCI host device mapping (Linux only) pcidev.cc + | + +---- Integrated peripherals + | | + | +---- 8259A PIC pic.cc + | +---- 82093AA I/O APIC ioapic.cc + | +---- 8254/82C54 Programmable Interval Timer pit_wrap.cc, pit82c54.cc + | | | + | | +---- PC Speaker (lowlevel) speaker.cc + | + | +---- 8237 DMA controller dma.cc + | +---- 82077A Floppy Drive Controller (*) floppy.cc + | +---- CMOS device cmos.cc + | +---- External circuit for #FERR pin extfpuirq.cc + | +---- Parallel ports emulation parallel.cc + | +---- UART 16550A Serial Port serial.cc + | | | + | | +---- Host specific Modules serial_raw.cc + | | + | +---- Standard PC gameport gameport.cc + | + +-------------- Debugging/Instrumentation biosdev.cc, iodebug.cc, unmapped.cc + +Attached devices + | + +---- PS/2 Keyboard and Mouse keyboard.cc, scancodes.cc + | + +---- Bus Mouse (not complete) busmouse.cc + | + +---- Hard Drive + ATA controller harddrv.cc + | | + | +---- Hard Drive image support (*) hdimage.cc + | | | + | | +---- Additional Modules vmware3.cc, vmware4.cc, vvfat.cc + | | + | +---- CD/DVD-ROM image / device access (*) cdrom.cc + | | + | +---- Host specific Modules cdrom_amigaos.cc, cdrom_beos.cc + +---- Network Support + | | + | +---- Network Devices + | | | + | | +---- NE2000 (ISA/PCI) ne2k.cc, pcipnic.cc + | | +---- PCI Pseudo NIC pcipnic.cc + | | + | +---- Networking Modules eth.cc + | | | + | | +-- Host specific Modules eth_fbsd.cc, eth_linux.cc, eth_win32.cc + | | + | +---- Dummy module eth_null.cc + | +---- ARP simulator eth_arpback.cc, eth_packetmaker.cc, crc32.cc + | +---- TAP Interface eth_tap.cc + | +---- TUN/TAP Interface eth_tuntap.cc + | +---- VDE Interface eth_vde.cc + | +---- virtual Ethernet locator eth_vnet.cc + | + +---- Graphics + | | + | +---- VGA, PCI VGA adapter vga.cc, pci_vga.cc + | +---- Cirrus Logic PCI/ISA CLGD5446 SVGA adapter svga_cirrus.cc + | + +---- Sound support + | | + | +---- Sound Blaster SB16 sb16.cc + | | | + | | +-- Dummy / Control Module soundmod.cc + | | + | +---- Host specific Modules soundlnx.cc, soundosx.cc, soundwin.cc + | + +---- PCI USB adapter usb_common.cc + | + +---- Host Controllers + | | + | +---- USB OHCI adapter usb_ohci.cc + | +---- USB UHCI adapter (PIIX3) usb_uhci.cc + | + +---- Attached USB devices + | | + | +-- Control Module usb_common.cc + | + +---- USB HID emulation usb_hid.cc + +---- USB external HUB usb_hub.cc + +---- USB mass storage device (*) usb_msd.cc, scsi_device.cc + +---- USB HP DeskJet 920C printer usb_printer.cc + +(*) USB MSD uses hdimage code and cdrom.cc for image / device access + Floppy uses hdimage code for VVFAT support + +BOCHS timer sycronisation modules + | + +---- Slowdown timer slowdown_timer.cc + +---- Virtual timer virt_timer.cc + +TODO: diff --git a/bochs/iodev/dma.cc b/bochs/iodev/dma.cc new file mode 100644 index 00000000..a74200e9 --- /dev/null +++ b/bochs/iodev/dma.cc @@ -0,0 +1,812 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "dma.h" + +#define LOG_THIS theDmaDevice-> + +#define DMA_MODE_DEMAND 0 +#define DMA_MODE_SINGLE 1 +#define DMA_MODE_BLOCK 2 +#define DMA_MODE_CASCADE 3 + +bx_dma_c *theDmaDevice = NULL; + +int libdma_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theDmaDevice = new bx_dma_c (); + bx_devices.pluginDmaDevice = theDmaDevice; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theDmaDevice, BX_PLUGIN_DMA); + return(0); // Success +} + +void libdma_LTX_plugin_fini(void) +{ + delete theDmaDevice; +} + +bx_dma_c::bx_dma_c() +{ + put("DMA"); +} + +bx_dma_c::~bx_dma_c() +{ + BX_DEBUG(("Exit")); +} + +unsigned bx_dma_c::registerDMA8Channel(unsigned channel, + void (* dmaRead)(Bit8u *data_byte), + void (* dmaWrite)(Bit8u *data_byte), + const char *name) +{ + if (channel > 3) { + BX_PANIC(("registerDMA8Channel: invalid channel number(%u).", channel)); + return 0; // Fail + } + if (BX_DMA_THIS s[0].chan[channel].used) { + BX_PANIC(("registerDMA8Channel: channel(%u) already in use.", channel)); + return 0; // Fail + } + BX_INFO(("channel %u used by %s", channel, name)); + BX_DMA_THIS h[channel].dmaRead8 = dmaRead; + BX_DMA_THIS h[channel].dmaWrite8 = dmaWrite; + BX_DMA_THIS s[0].chan[channel].used = 1; + return 1; // OK +} + +unsigned bx_dma_c::registerDMA16Channel(unsigned channel, + void (* dmaRead)(Bit16u *data_word), + void (* dmaWrite)(Bit16u *data_word), + const char *name) +{ + if ((channel < 4) || (channel > 7)) { + BX_PANIC(("registerDMA16Channel: invalid channel number(%u).", channel)); + return 0; // Fail + } + if (BX_DMA_THIS s[1].chan[channel & 0x03].used) { + BX_PANIC(("registerDMA16Channel: channel(%u) already in use.", channel)); + return 0; // Fail + } + BX_INFO(("channel %u used by %s", channel, name)); + channel &= 0x03; + BX_DMA_THIS h[channel].dmaRead16 = dmaRead; + BX_DMA_THIS h[channel].dmaWrite16 = dmaWrite; + BX_DMA_THIS s[1].chan[channel].used = 1; + return 1; // OK +} + +unsigned bx_dma_c::unregisterDMAChannel(unsigned channel) +{ + bx_bool ma_sl = (channel > 3); + BX_DMA_THIS s[ma_sl].chan[channel & 0x03].used = 0; + BX_INFO(("channel %u no longer used", channel)); + return 1; +} + +unsigned bx_dma_c::get_TC(void) +{ + return BX_DMA_THIS TC; +} + +void bx_dma_c::init(void) +{ + unsigned c, i, j; + BX_DEBUG(("Init $Id$")); + + /* 8237 DMA controller */ + + for (i=0; i < 2; i++) { + for (j=0; j < 4; j++) { + BX_DMA_THIS s[i].DRQ[j] = 0; + BX_DMA_THIS s[i].DACK[j] = 0; + } + } + BX_DMA_THIS HLDA = 0; + BX_DMA_THIS TC = 0; + + // 0000..000F + for (i=0x0000; i<=0x000F; i++) { + DEV_register_ioread_handler(this, read_handler, i, "DMA controller", 1); + DEV_register_iowrite_handler(this, write_handler, i, "DMA controller", 3); + } + + // 00080..008F + for (i=0x0080; i<=0x008F; i++) { + DEV_register_ioread_handler(this, read_handler, i, "DMA controller", 1); + DEV_register_iowrite_handler(this, write_handler, i, "DMA controller", 3); + } + + // 000C0..00DE + for (i=0x00C0; i<=0x00DE; i+=2) { + DEV_register_ioread_handler(this, read_handler, i, "DMA controller", 1); + DEV_register_iowrite_handler(this, write_handler, i, "DMA controller", 3); + } + + for (i=0; i<2; i++) { + for (c=0; c<4; c++) { + BX_DMA_THIS s[i].chan[c].mode.mode_type = 0; // demand mode + BX_DMA_THIS s[i].chan[c].mode.address_decrement = 0; // address increment + BX_DMA_THIS s[i].chan[c].mode.autoinit_enable = 0; // autoinit disable + BX_DMA_THIS s[i].chan[c].mode.transfer_type = 0; // verify + BX_DMA_THIS s[i].chan[c].base_address = 0; + BX_DMA_THIS s[i].chan[c].current_address = 0; + BX_DMA_THIS s[i].chan[c].base_count = 0; + BX_DMA_THIS s[i].chan[c].current_count = 0; + BX_DMA_THIS s[i].chan[c].page_reg = 0; + BX_DMA_THIS s[i].chan[c].used = 0; + } + } + memset(&BX_DMA_THIS ext_page_reg[0], 0, 16); + BX_DMA_THIS s[1].chan[0].used = 1; // cascade channel in use + BX_INFO(("channel 4 used by cascade")); +} + +void bx_dma_c::reset(unsigned type) +{ + reset_controller(0); + reset_controller(1); +} + +void bx_dma_c::reset_controller(unsigned num) +{ + BX_DMA_THIS s[num].mask[0] = 1; + BX_DMA_THIS s[num].mask[1] = 1; + BX_DMA_THIS s[num].mask[2] = 1; + BX_DMA_THIS s[num].mask[3] = 1; + BX_DMA_THIS s[num].ctrl_disabled = 0; + BX_DMA_THIS s[num].command_reg = 0; + BX_DMA_THIS s[num].status_reg = 0; + BX_DMA_THIS s[num].flip_flop = 0; +} + +void bx_dma_c::register_state(void) +{ + unsigned i, c; + char name[6]; + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "dma", "DMA State", 3); + for (i=0; i<2; i++) { + sprintf(name, "%d", i); + bx_list_c *ctrl = new bx_list_c(list, name, 8); + BXRS_PARAM_BOOL(ctrl, flip_flop, BX_DMA_THIS s[i].flip_flop); + BXRS_HEX_PARAM_FIELD(ctrl, status_reg, BX_DMA_THIS s[i].status_reg); + BXRS_HEX_PARAM_FIELD(ctrl, command_reg, BX_DMA_THIS s[i].command_reg); + BXRS_PARAM_BOOL(ctrl, ctrl_disabled, BX_DMA_THIS s[i].ctrl_disabled); + for (c=0; c<4; c++) { + sprintf(name, "%d", c); + bx_list_c *chan = new bx_list_c(ctrl, name, 12); + BXRS_PARAM_BOOL(chan, DRQ, BX_DMA_THIS s[i].DRQ[c]); + BXRS_PARAM_BOOL(chan, DACK, BX_DMA_THIS s[i].DACK[c]); + BXRS_PARAM_BOOL(chan, mask, BX_DMA_THIS s[i].mask[c]); + BXRS_DEC_PARAM_FIELD(chan, mode_type, BX_DMA_THIS s[i].chan[c].mode.mode_type); + BXRS_DEC_PARAM_FIELD(chan, address_decrement, BX_DMA_THIS s[i].chan[c].mode.address_decrement); + BXRS_DEC_PARAM_FIELD(chan, autoinit_enable, BX_DMA_THIS s[i].chan[c].mode.autoinit_enable); + BXRS_DEC_PARAM_FIELD(chan, transfer_type, BX_DMA_THIS s[i].chan[c].mode.transfer_type); + BXRS_HEX_PARAM_FIELD(chan, base_address, BX_DMA_THIS s[i].chan[c].base_address); + BXRS_HEX_PARAM_FIELD(chan, current_address, BX_DMA_THIS s[i].chan[c].current_address); + BXRS_HEX_PARAM_FIELD(chan, base_count, BX_DMA_THIS s[i].chan[c].base_count); + BXRS_HEX_PARAM_FIELD(chan, current_count, BX_DMA_THIS s[i].chan[c].current_count); + BXRS_HEX_PARAM_FIELD(chan, page_reg, BX_DMA_THIS s[i].chan[c].page_reg); + } + } + bx_list_c *extpg = new bx_list_c(list, "ext_page", 16); + for (i=0; i<16; i++) { + sprintf(name, "0x%02x", 0x80+i); + new bx_shadow_num_c(extpg, name, &BX_DMA_THIS ext_page_reg[i], BASE_HEX); + } +} + +// index to find channel from register number (only [0],[1],[2],[6] used) +Bit8u channelindex[7] = {2, 3, 1, 0, 0, 0, 0}; + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions +Bit32u bx_dma_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_DMA_SMF + bx_dma_c *class_ptr = (bx_dma_c *) this_ptr; + return class_ptr->read(address, io_len); +} + + /* 8237 DMA controller */ + Bit32u BX_CPP_AttrRegparmN(2) +bx_dma_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_DMA_SMF + + Bit8u retval; + Bit8u channel; + + BX_DEBUG(("read addr=%04x", (unsigned) address)); + +#if BX_DMA_FLOPPY_IO < 1 + /* if we're not supporting DMA/floppy IO just return a bogus value */ + return(0xff); +#endif + + bx_bool ma_sl = (address >= 0xc0); + + switch (address) { + case 0x00: /* DMA-1 current address, channel 0 */ + case 0x02: /* DMA-1 current address, channel 1 */ + case 0x04: /* DMA-1 current address, channel 2 */ + case 0x06: /* DMA-1 current address, channel 3 */ + case 0xc0: /* DMA-2 current address, channel 0 */ + case 0xc4: /* DMA-2 current address, channel 1 */ + case 0xc8: /* DMA-2 current address, channel 2 */ + case 0xcc: /* DMA-2 current address, channel 3 */ + channel = (address >> (1 + ma_sl)) & 0x03; + if (BX_DMA_THIS s[ma_sl].flip_flop==0) { + BX_DMA_THIS s[ma_sl].flip_flop = !BX_DMA_THIS s[ma_sl].flip_flop; + return (BX_DMA_THIS s[ma_sl].chan[channel].current_address & 0xff); + } else { + BX_DMA_THIS s[ma_sl].flip_flop = !BX_DMA_THIS s[ma_sl].flip_flop; + return (BX_DMA_THIS s[ma_sl].chan[channel].current_address >> 8); + } + + case 0x01: /* DMA-1 current count, channel 0 */ + case 0x03: /* DMA-1 current count, channel 1 */ + case 0x05: /* DMA-1 current count, channel 2 */ + case 0x07: /* DMA-1 current count, channel 3 */ + case 0xc2: /* DMA-2 current count, channel 0 */ + case 0xc6: /* DMA-2 current count, channel 1 */ + case 0xca: /* DMA-2 current count, channel 2 */ + case 0xce: /* DMA-2 current count, channel 3 */ + channel = (address >> (1 + ma_sl)) & 0x03; + if (BX_DMA_THIS s[ma_sl].flip_flop==0) { + BX_DMA_THIS s[ma_sl].flip_flop = !BX_DMA_THIS s[ma_sl].flip_flop; + return (BX_DMA_THIS s[ma_sl].chan[channel].current_count & 0xff); + } else { + BX_DMA_THIS s[ma_sl].flip_flop = !BX_DMA_THIS s[ma_sl].flip_flop; + return (BX_DMA_THIS s[ma_sl].chan[channel].current_count >> 8); + } + + case 0x08: // DMA-1 Status Register + case 0xd0: // DMA-2 Status Register + // bit 7: 1 = channel 3 request + // bit 6: 1 = channel 2 request + // bit 5: 1 = channel 1 request + // bit 4: 1 = channel 0 request + // bit 3: 1 = channel 3 has reached terminal count + // bit 2: 1 = channel 2 has reached terminal count + // bit 1: 1 = channel 1 has reached terminal count + // bit 0: 1 = channel 0 has reached terminal count + // reading this register clears lower 4 bits (hold flags) + retval = BX_DMA_THIS s[ma_sl].status_reg; + BX_DMA_THIS s[ma_sl].status_reg &= 0xf0; + return retval; + + case 0x0d: // DMA-1: temporary register + case 0xda: // DMA-2: temporary register + // only used for memory-to-memory transfers + // write to 0x0d / 0xda clears temporary register + BX_ERROR(("DMA-%d: read of temporary register always returns 0", ma_sl+1)); + return 0; + + case 0x0081: // DMA-1 page register, channel 2 + case 0x0082: // DMA-1 page register, channel 3 + case 0x0083: // DMA-1 page register, channel 1 + case 0x0087: // DMA-1 page register, channel 0 + channel = channelindex[address - 0x81]; + return BX_DMA_THIS s[0].chan[channel].page_reg; + + case 0x0089: // DMA-2 page register, channel 2 + case 0x008a: // DMA-2 page register, channel 3 + case 0x008b: // DMA-2 page register, channel 1 + case 0x008f: // DMA-2 page register, channel 0 + channel = channelindex[address - 0x89]; + return BX_DMA_THIS s[1].chan[channel].page_reg; + + case 0x0080: + case 0x0084: + case 0x0085: + case 0x0086: + case 0x0088: + case 0x008c: + case 0x008d: + case 0x008e: + BX_DEBUG(("read: extra page register 0x%04x (unused)", (unsigned) address)); + return BX_DMA_THIS ext_page_reg[address & 0x0f]; + + case 0x0f: // DMA-1: undocumented: read all mask bits + case 0xde: // DMA-2: undocumented: read all mask bits + retval = BX_DMA_THIS s[ma_sl].mask[0] | + (BX_DMA_THIS s[ma_sl].mask[1] << 1) | + (BX_DMA_THIS s[ma_sl].mask[2] << 2) | + (BX_DMA_THIS s[ma_sl].mask[3] << 3); + return (0xf0 | retval); + + default: + BX_ERROR(("read: unsupported address=%04x", (unsigned) address)); + return 0; + } +} + + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_dma_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_DMA_SMF + bx_dma_c *class_ptr = (bx_dma_c *) this_ptr; + + class_ptr->write(address, value, io_len); +} + + + /* 8237 DMA controller */ + void BX_CPP_AttrRegparmN(3) +bx_dma_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_DMA_SMF + Bit8u set_mask_bit; + Bit8u channel; + + if (io_len > 1) { + if ((io_len == 2) && (address == 0x0b)) { +#if BX_USE_DMA_SMF + BX_DMA_THIS write_handler(NULL, address, value & 0xff, 1); + BX_DMA_THIS write_handler(NULL, address+1, value >> 8, 1); +#else + BX_DMA_THIS write(address, value & 0xff, 1); + BX_DMA_THIS write(address+1, value >> 8, 1); +#endif + return; + } + + BX_ERROR(("io write to address %08x, len=%u", + (unsigned) address, (unsigned) io_len)); + return; + } + + BX_DEBUG(("write: address=%04x value=%02x", + (unsigned) address, (unsigned) value)); + +#if BX_DMA_FLOPPY_IO < 1 + /* if we're not supporting DMA/floppy IO just return */ + return; +#endif + + bx_bool ma_sl = (address >= 0xc0); + + switch (address) { + case 0x00: + case 0x02: + case 0x04: + case 0x06: + case 0xc0: + case 0xc4: + case 0xc8: + case 0xcc: + channel = (address >> (1 + ma_sl)) & 0x03; + BX_DEBUG((" DMA-%d base and current address, channel %d", ma_sl+1, channel)); + if (BX_DMA_THIS s[ma_sl].flip_flop==0) { /* 1st byte */ + BX_DMA_THIS s[ma_sl].chan[channel].base_address = value; + BX_DMA_THIS s[ma_sl].chan[channel].current_address = value; + } else { /* 2nd byte */ + BX_DMA_THIS s[ma_sl].chan[channel].base_address |= (value << 8); + BX_DMA_THIS s[ma_sl].chan[channel].current_address |= (value << 8); + BX_DEBUG((" base = %04x", + (unsigned) BX_DMA_THIS s[ma_sl].chan[channel].base_address)); + BX_DEBUG((" curr = %04x", + (unsigned) BX_DMA_THIS s[ma_sl].chan[channel].current_address)); + } + BX_DMA_THIS s[ma_sl].flip_flop = !BX_DMA_THIS s[ma_sl].flip_flop; + break; + + case 0x01: + case 0x03: + case 0x05: + case 0x07: + case 0xc2: + case 0xc6: + case 0xca: + case 0xce: + channel = (address >> (1 + ma_sl)) & 0x03; + BX_DEBUG((" DMA-%d base and current count, channel %d", ma_sl+1, channel)); + if (BX_DMA_THIS s[ma_sl].flip_flop==0) { /* 1st byte */ + BX_DMA_THIS s[ma_sl].chan[channel].base_count = value; + BX_DMA_THIS s[ma_sl].chan[channel].current_count = value; + } else { /* 2nd byte */ + BX_DMA_THIS s[ma_sl].chan[channel].base_count |= (value << 8); + BX_DMA_THIS s[ma_sl].chan[channel].current_count |= (value << 8); + BX_DEBUG((" base = %04x", + (unsigned) BX_DMA_THIS s[ma_sl].chan[channel].base_count)); + BX_DEBUG((" curr = %04x", + (unsigned) BX_DMA_THIS s[ma_sl].chan[channel].current_count)); + } + BX_DMA_THIS s[ma_sl].flip_flop = !BX_DMA_THIS s[ma_sl].flip_flop; + break; + + case 0x08: /* DMA-1: command register */ + case 0xd0: /* DMA-2: command register */ + if ((value & 0xfb) != 0x00) + BX_ERROR(("write to command register: value 0x%02x not supported", + (unsigned) value)); + BX_DMA_THIS s[ma_sl].command_reg = value; + BX_DMA_THIS s[ma_sl].ctrl_disabled = (value >> 2) & 0x01; + control_HRQ(ma_sl); + break; + + case 0x09: // DMA-1: request register + case 0xd2: // DMA-2: request register + channel = value & 0x03; + // note: write to 0x0d / 0xda clears this register + if (value & 0x04) { + // set request bit + BX_DMA_THIS s[ma_sl].status_reg |= (1 << (channel+4)); + BX_DEBUG(("DMA-%d: set request bit for channel %u", ma_sl+1, (unsigned) channel)); + } else { + // clear request bit + BX_DMA_THIS s[ma_sl].status_reg &= ~(1 << (channel+4)); + BX_DEBUG(("DMA-%d: cleared request bit for channel %u", ma_sl+1, (unsigned) channel)); + } + control_HRQ(ma_sl); + break; + + case 0x0a: + case 0xd4: + set_mask_bit = value & 0x04; + channel = value & 0x03; + BX_DMA_THIS s[ma_sl].mask[channel] = (set_mask_bit > 0); + BX_DEBUG(("DMA-%d: set_mask_bit=%u, channel=%u, mask now=%02xh", ma_sl+1, + (unsigned) set_mask_bit, (unsigned) channel, (unsigned) BX_DMA_THIS s[ma_sl].mask[channel])); + control_HRQ(ma_sl); + break; + + case 0x0b: /* DMA-1 mode register */ + case 0xd6: /* DMA-2 mode register */ + channel = value & 0x03; + BX_DMA_THIS s[ma_sl].chan[channel].mode.mode_type = (value >> 6) & 0x03; + BX_DMA_THIS s[ma_sl].chan[channel].mode.address_decrement = (value >> 5) & 0x01; + BX_DMA_THIS s[ma_sl].chan[channel].mode.autoinit_enable = (value >> 4) & 0x01; + BX_DMA_THIS s[ma_sl].chan[channel].mode.transfer_type = (value >> 2) & 0x03; + BX_DEBUG(("DMA-%d: mode register[%u] = %02x", ma_sl+1, + (unsigned) channel, (unsigned) value)); + break; + + case 0x0c: /* DMA-1 clear byte flip/flop */ + case 0xd8: /* DMA-2 clear byte flip/flop */ + BX_DEBUG(("DMA-%d: clear flip/flop", ma_sl+1)); + BX_DMA_THIS s[ma_sl].flip_flop = 0; + break; + + case 0x0d: // DMA-1: master clear + case 0xda: // DMA-2: master clear + BX_DEBUG(("DMA-%d: master clear", ma_sl+1)); + // writing any value to this port resets DMA controller 1 / 2 + // same action as a hardware reset + // mask register is set (chan 0..3 disabled) + // command, status, request, temporary, and byte flip-flop are all cleared + reset_controller(ma_sl); + break; + + case 0x0e: // DMA-1: clear mask register + case 0xdc: // DMA-2: clear mask register + BX_DEBUG(("DMA-%d: clear mask register", ma_sl+1)); + BX_DMA_THIS s[ma_sl].mask[0] = 0; + BX_DMA_THIS s[ma_sl].mask[1] = 0; + BX_DMA_THIS s[ma_sl].mask[2] = 0; + BX_DMA_THIS s[ma_sl].mask[3] = 0; + control_HRQ(ma_sl); + break; + + case 0x0f: // DMA-1: write all mask bits + case 0xde: // DMA-2: write all mask bits + BX_DEBUG(("DMA-%d: write all mask bits", ma_sl+1)); + BX_DMA_THIS s[ma_sl].mask[0] = value & 0x01; value >>= 1; + BX_DMA_THIS s[ma_sl].mask[1] = value & 0x01; value >>= 1; + BX_DMA_THIS s[ma_sl].mask[2] = value & 0x01; value >>= 1; + BX_DMA_THIS s[ma_sl].mask[3] = value & 0x01; + control_HRQ(ma_sl); + break; + + case 0x81: /* DMA-1 page register, channel 2 */ + case 0x82: /* DMA-1 page register, channel 3 */ + case 0x83: /* DMA-1 page register, channel 1 */ + case 0x87: /* DMA-1 page register, channel 0 */ + /* address bits A16-A23 for DMA channel */ + channel = channelindex[address - 0x81]; + BX_DMA_THIS s[0].chan[channel].page_reg = value; + BX_DEBUG(("DMA-1: page register %d = %02x", channel, (unsigned) value)); + break; + + case 0x89: /* DMA-2 page register, channel 2 */ + case 0x8a: /* DMA-2 page register, channel 3 */ + case 0x8b: /* DMA-2 page register, channel 1 */ + case 0x8f: /* DMA-2 page register, channel 0 */ + /* address bits A16-A23 for DMA channel */ + channel = channelindex[address - 0x89]; + BX_DMA_THIS s[1].chan[channel].page_reg = value; + BX_DEBUG(("DMA-2: page register %d = %02x", channel + 4, (unsigned) value)); + break; + + case 0x0080: + case 0x0084: + case 0x0085: + case 0x0086: + case 0x0088: + case 0x008c: + case 0x008d: + case 0x008e: + BX_DEBUG(("write: extra page register 0x%04x (unused)", (unsigned) address)); + BX_DMA_THIS ext_page_reg[address & 0x0f] = value; + break; + + default: + BX_ERROR(("write ignored: %04xh = %02xh", + (unsigned) address, (unsigned) value)); + } +} + +void bx_dma_c::set_DRQ(unsigned channel, bx_bool val) +{ + Bit32u dma_base, dma_roof; + bx_bool ma_sl; + + if (channel > 7) { + BX_PANIC(("set_DRQ() channel > 7")); + return; + } + ma_sl = (channel > 3); + BX_DMA_THIS s[ma_sl].DRQ[channel & 0x03] = val; + if (!BX_DMA_THIS s[ma_sl].chan[channel & 0x03].used) { + BX_PANIC(("set_DRQ(): channel %d not connected to device", channel)); + return; + } + channel &= 0x03; + if (!val) { + //BX_DEBUG(("bx_dma_c::DRQ(): val == 0")); + // clear bit in status reg + BX_DMA_THIS s[ma_sl].status_reg &= ~(1 << (channel+4)); + + control_HRQ(ma_sl); + return; + } + +#if 0 + BX_INFO(("mask[%d]: %02x", channel, (unsigned) BX_DMA_THIS s[0].mask[channel])); + BX_INFO(("flip_flop: %u", (unsigned) BX_DMA_THIS s[0].flip_flop)); + BX_INFO(("status_reg: %02x", (unsigned) BX_DMA_THIS s[0].status_reg)); + BX_INFO(("mode_type: %02x", (unsigned) BX_DMA_THIS s[0].chan[channel].mode.mode_type)); + BX_INFO(("address_decrement: %02x", (unsigned) BX_DMA_THIS s[0].chan[channel].mode.address_decrement)); + BX_INFO(("autoinit_enable: %02x", (unsigned) BX_DMA_THIS s[0].chan[channel].mode.autoinit_enable)); + BX_INFO(("transfer_type: %02x", (unsigned) BX_DMA_THIS s[0].chan[channel].mode.transfer_type)); + BX_INFO(("base_address: %04x", (unsigned) BX_DMA_THIS s[0].chan[channel].base_address)); + BX_INFO(("current_address: %04x", (unsigned) BX_DMA_THIS s[0].chan[channel].current_address)); + BX_INFO(("base_count: %04x", (unsigned) BX_DMA_THIS s[0].chan[channel].base_count)); + BX_INFO(("current_count: %04x", (unsigned) BX_DMA_THIS s[0].chan[channel].current_count)); + BX_INFO(("page_reg: %02x", (unsigned) BX_DMA_THIS s[0].chan[channel].page_reg)); +#endif + + BX_DMA_THIS s[ma_sl].status_reg |= (1 << (channel+4)); + + if ((BX_DMA_THIS s[ma_sl].chan[channel].mode.mode_type != DMA_MODE_SINGLE) && + (BX_DMA_THIS s[ma_sl].chan[channel].mode.mode_type != DMA_MODE_DEMAND) && + (BX_DMA_THIS s[ma_sl].chan[channel].mode.mode_type != DMA_MODE_CASCADE)) + { + BX_PANIC(("set_DRQ: mode_type(%02x) not handled", + (unsigned) BX_DMA_THIS s[ma_sl].chan[channel].mode.mode_type)); + } + + dma_base = (BX_DMA_THIS s[ma_sl].chan[channel].page_reg << 16) | + (BX_DMA_THIS s[ma_sl].chan[channel].base_address << ma_sl); + if (BX_DMA_THIS s[ma_sl].chan[channel].mode.address_decrement==0) { + dma_roof = dma_base + (BX_DMA_THIS s[ma_sl].chan[channel].base_count << ma_sl); + } else { + dma_roof = dma_base - (BX_DMA_THIS s[ma_sl].chan[channel].base_count << ma_sl); + } + if ((dma_base & (0x7fff0000 << ma_sl)) != (dma_roof & (0x7fff0000 << ma_sl))) { + BX_INFO(("dma_base = %08x", (unsigned) dma_base)); + BX_INFO(("dma_base_count = %08x", (unsigned) BX_DMA_THIS s[ma_sl].chan[channel].base_count)); + BX_INFO(("dma_roof = %08x", (unsigned) dma_roof)); + BX_PANIC(("request outside %dk boundary", 64 << ma_sl)); + } + + control_HRQ(ma_sl); +} + +void bx_dma_c::control_HRQ(bx_bool ma_sl) +{ + unsigned channel; + + // do nothing if controller is disabled + if (BX_DMA_THIS s[ma_sl].ctrl_disabled) + return; + + // deassert HRQ if no DRQ is pending + if ((BX_DMA_THIS s[ma_sl].status_reg & 0xf0) == 0) { + if (ma_sl) { + bx_pc_system.set_HRQ(0); + } else { + BX_DMA_THIS set_DRQ(4, 0); + } + return; + } + // find highest priority channel + for (channel=0; channel<4; channel++) { + if ((BX_DMA_THIS s[ma_sl].status_reg & (1 << (channel+4))) && + (BX_DMA_THIS s[ma_sl].mask[channel]==0)) { + if (ma_sl) { + // assert Hold ReQuest line to CPU + bx_pc_system.set_HRQ(1); + } else { + // send DRQ to cascade channel of the master + BX_DMA_THIS set_DRQ(4, 1); + } + break; + } + } +} + +void bx_dma_c::raise_HLDA(void) +{ + unsigned channel; + bx_phy_address phy_addr; + bx_bool count_expired = 0; + bx_bool ma_sl = 0; + + BX_DMA_THIS HLDA = 1; + // find highest priority channel + for (channel=0; channel<4; channel++) { + if ((BX_DMA_THIS s[1].status_reg & (1 << (channel+4))) && + (BX_DMA_THIS s[1].mask[channel]==0)) { + ma_sl = 1; + break; + } + } + if (channel == 0) { // master cascade channel + BX_DMA_THIS s[1].DACK[0] = 1; + for (channel=0; channel<4; channel++) { + if ((BX_DMA_THIS s[0].status_reg & (1 << (channel+4))) && + (BX_DMA_THIS s[0].mask[channel]==0)) { + ma_sl = 0; + break; + } + } + } + if (channel >= 4) { + // wait till they're unmasked + return; + } + + //BX_DEBUG(("hlda: OK in response to DRQ(%u)", (unsigned) channel)); + phy_addr = (BX_DMA_THIS s[ma_sl].chan[channel].page_reg << 16) | + (BX_DMA_THIS s[ma_sl].chan[channel].current_address << ma_sl); + + BX_DMA_THIS s[ma_sl].DACK[channel] = 1; + // check for expiration of count, so we can signal TC and DACK(n) + // at the same time. + if (BX_DMA_THIS s[ma_sl].chan[channel].mode.address_decrement==0) + BX_DMA_THIS s[ma_sl].chan[channel].current_address++; + else + BX_DMA_THIS s[ma_sl].chan[channel].current_address--; + BX_DMA_THIS s[ma_sl].chan[channel].current_count--; + if (BX_DMA_THIS s[ma_sl].chan[channel].current_count == 0xffff) { + // count expired, done with transfer + // assert TC, deassert HRQ & DACK(n) lines + BX_DMA_THIS s[ma_sl].status_reg |= (1 << channel); // hold TC in status reg + BX_DMA_THIS TC = 1; + count_expired = 1; + if (BX_DMA_THIS s[ma_sl].chan[channel].mode.autoinit_enable == 0) { + // set mask bit if not in autoinit mode + BX_DMA_THIS s[ma_sl].mask[channel] = 1; + } + else { + // count expired, but in autoinit mode + // reload count and base address + BX_DMA_THIS s[ma_sl].chan[channel].current_address = + BX_DMA_THIS s[ma_sl].chan[channel].base_address; + BX_DMA_THIS s[ma_sl].chan[channel].current_count = + BX_DMA_THIS s[ma_sl].chan[channel].base_count; + } + } + + Bit8u data_byte; + Bit16u data_word; + + if (BX_DMA_THIS s[ma_sl].chan[channel].mode.transfer_type == 1) { // write + // DMA controlled xfer of byte from I/O to Memory + + if (!ma_sl) { + if (BX_DMA_THIS h[channel].dmaWrite8) + BX_DMA_THIS h[channel].dmaWrite8(&data_byte); + else + BX_PANIC(("no dmaWrite handler for channel %u.", channel)); + + DEV_MEM_WRITE_PHYSICAL(phy_addr, 1, &data_byte); + + BX_DBG_DMA_REPORT(phy_addr, 1, BX_WRITE, data_byte); + } + else { + if (BX_DMA_THIS h[channel].dmaWrite16) + BX_DMA_THIS h[channel].dmaWrite16(&data_word); + else + BX_PANIC(("no dmaWrite handler for channel %u.", channel)); + + DEV_MEM_WRITE_PHYSICAL(phy_addr, 2, (Bit8u*) &data_word); + + BX_DBG_DMA_REPORT(phy_addr, 2, BX_WRITE, data_word); + } + } + else if (BX_DMA_THIS s[ma_sl].chan[channel].mode.transfer_type == 2) { // read + // DMA controlled xfer of byte from Memory to I/O + + if (!ma_sl) { + DEV_MEM_READ_PHYSICAL(phy_addr, 1, &data_byte); + + if (BX_DMA_THIS h[channel].dmaRead8) + BX_DMA_THIS h[channel].dmaRead8(&data_byte); + + BX_DBG_DMA_REPORT(phy_addr, 1, BX_READ, data_byte); + } + else { + DEV_MEM_READ_PHYSICAL(phy_addr, 2, (Bit8u*) &data_word); + + if (BX_DMA_THIS h[channel].dmaRead16) + BX_DMA_THIS h[channel].dmaRead16(&data_word); + + BX_DBG_DMA_REPORT(phy_addr, 2, BX_READ, data_word); + } + } + else if (BX_DMA_THIS s[ma_sl].chan[channel].mode.transfer_type == 0) { + // verify + + if (!ma_sl) { + if (BX_DMA_THIS h[channel].dmaWrite8) + BX_DMA_THIS h[channel].dmaWrite8(&data_byte); + else + BX_PANIC(("no dmaWrite handler for channel %u.", channel)); + } + else { + if (BX_DMA_THIS h[channel].dmaWrite16) + BX_DMA_THIS h[channel].dmaWrite16(&data_word); + else + BX_PANIC(("no dmaWrite handler for channel %u.", channel)); + } + } + else { + BX_PANIC(("hlda: transfer_type 3 is undefined")); + } + + if (count_expired) { + BX_DMA_THIS TC = 0; // clear TC, adapter card already notified + BX_DMA_THIS HLDA = 0; + bx_pc_system.set_HRQ(0); // clear HRQ to CPU + BX_DMA_THIS s[ma_sl].DACK[channel] = 0; // clear DACK to adapter card + if (!ma_sl) { + BX_DMA_THIS set_DRQ(4, 0); // clear DRQ to cascade + BX_DMA_THIS s[1].DACK[0] = 0; // clear DACK to cascade + } + } +} diff --git a/bochs/iodev/dma.h b/bochs/iodev/dma.h new file mode 100644 index 00000000..d20ad08f --- /dev/null +++ b/bochs/iodev/dma.h @@ -0,0 +1,104 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef _PCDMA_H +#define _PCDMA_H + +#if BX_USE_DMA_SMF +# define BX_DMA_SMF static +# define BX_DMA_THIS theDmaDevice-> +#else +# define BX_DMA_SMF +# define BX_DMA_THIS this-> +#endif + +class bx_dma_c : public bx_dma_stub_c { +public: + bx_dma_c(); + virtual ~bx_dma_c(); + + virtual void init(void); + virtual void reset(unsigned type); + virtual void raise_HLDA(void); + virtual void set_DRQ(unsigned channel, bx_bool val); + virtual unsigned get_TC(void); + virtual void register_state(void); + + virtual unsigned registerDMA8Channel(unsigned channel, + void (* dmaRead)(Bit8u *data_byte), + void (* dmaWrite)(Bit8u *data_byte), + const char *name); + virtual unsigned registerDMA16Channel(unsigned channel, + void (* dmaRead)(Bit16u *data_word), + void (* dmaWrite)(Bit16u *data_word), + const char *name); + virtual unsigned unregisterDMAChannel(unsigned channel); + +private: + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_DMA_SMF + Bit32u read (Bit32u address, unsigned io_len) BX_CPP_AttrRegparmN(2); + void write(Bit32u address, Bit32u value, unsigned io_len) BX_CPP_AttrRegparmN(3); +#endif + BX_DMA_SMF void control_HRQ(bx_bool ma_sl); + BX_DMA_SMF void reset_controller(unsigned num); + + struct { + bx_bool DRQ[4]; // DMA Request + bx_bool DACK[4]; // DMA Acknowlege + + bx_bool mask[4]; + bx_bool flip_flop; + Bit8u status_reg; + Bit8u command_reg; + bx_bool ctrl_disabled; + struct { + struct { + Bit8u mode_type; + Bit8u address_decrement; + Bit8u autoinit_enable; + Bit8u transfer_type; + } mode; + Bit16u base_address; + Bit16u current_address; + Bit16u base_count; + Bit16u current_count; + Bit8u page_reg; + bx_bool used; + } chan[4]; /* DMA channels 0..3 */ + } s[2]; // state information DMA-1 / DMA-2 + + bx_bool HLDA; // Hold Acknowlege + bx_bool TC; // Terminal Count + + Bit8u ext_page_reg[16]; // Extra page registers (unused) + + struct { + void (* dmaRead8)(Bit8u *data_byte); + void (* dmaWrite8)(Bit8u *data_byte); + void (* dmaRead16)(Bit16u *data_word); + void (* dmaWrite16)(Bit16u *data_word); + } h[4]; // DMA read and write handlers +}; + +#endif // #ifndef _PCDMA_H diff --git a/bochs/iodev/eth.cc b/bochs/iodev/eth.cc new file mode 100644 index 00000000..dc0e9f3f --- /dev/null +++ b/bochs/iodev/eth.cc @@ -0,0 +1,214 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +// eth.cc - helper code to find and create pktmover classes + +// Peter Grehan (grehan@iprg.nokia.com) coded all of this +// NE2000/ether stuff. + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_NETWORKING + +#include "eth.h" + +#define LOG_THIS /* not needed */ + +eth_locator_c *eth_locator_c::all; + +// +// Each pktmover module has a static locator class that registers +// here +// +eth_locator_c::eth_locator_c(const char *type) +{ + next = all; + all = this; + this->type = type; +} + +#ifdef ETH_NULL +extern class bx_null_locator_c bx_null_match; +#endif +#ifdef ETH_FBSD +extern class bx_fbsd_locator_c bx_fbsd_match; +#endif +#ifdef ETH_LINUX +extern class bx_linux_locator_c bx_linux_match; +#endif +#ifdef ETH_WIN32 +extern class bx_win32_locator_c bx_win32_match; +#endif +#if HAVE_ETHERTAP +extern class bx_tap_locator_c bx_tap_match; +#endif +#if HAVE_TUNTAP +extern class bx_tuntap_locator_c bx_tuntap_match; +#endif +#if HAVE_VDE +extern class bx_vde_locator_c bx_vde_match; +#endif +#ifdef ETH_ARPBACK +extern class bx_arpback_locator_c bx_arpback_match; +#endif +extern class bx_vnet_locator_c bx_vnet_match; + +// +// Called by ethernet chip emulations to locate and create a pktmover +// object +// +eth_pktmover_c * +eth_locator_c::create(const char *type, const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, bx_devmodel_c *dev, + const char *script) +{ +#ifdef eth_static_constructors + for (eth_locator_c *p = all; p != NULL; p = p->next) { + if (strcmp(type, p->type) == 0) + return (p->allocate(netif, macaddr, rxh, dev, script)); + } +#else + eth_locator_c *ptr = 0; + +#ifdef ETH_ARPBACK + { + if (!strcmp(type, "arpback")) + ptr = (eth_locator_c *) &bx_arpback_match; + } +#endif +#ifdef ETH_NULL + { + if (!strcmp(type, "null")) + ptr = (eth_locator_c *) &bx_null_match; + } +#endif +#ifdef ETH_FBSD + { + if (!strcmp(type, "fbsd")) + ptr = (eth_locator_c *) &bx_fbsd_match; + } +#endif +#ifdef ETH_LINUX + { + if (!strcmp(type, "linux")) + ptr = (eth_locator_c *) &bx_linux_match; + } +#endif +#if HAVE_TUNTAP + { + if (!strcmp(type, "tuntap")) + ptr = (eth_locator_c *) &bx_tuntap_match; + } +#endif +#if HAVE_VDE + { + if (!strcmp(type, "vde")) + ptr = (eth_locator_c *) &bx_vde_match; + } +#endif +#if HAVE_ETHERTAP + { + if (!strcmp(type, "tap")) + ptr = (eth_locator_c *) &bx_tap_match; + } +#endif +#ifdef ETH_WIN32 + { + if(!strcmp(type, "win32")) + ptr = (eth_locator_c *) &bx_win32_match; + } +#endif + { + if (!strcmp(type, "vnet")) + ptr = (eth_locator_c *) &bx_vnet_match; + } + if (ptr) + return (ptr->allocate(netif, macaddr, rxh, dev, script)); +#endif + + return (NULL); +} + +#if (HAVE_ETHERTAP==1) || (HAVE_TUNTAP==1) || (HAVE_VDE==1) + +extern "C" { +#include +}; + +// This is a utility script used for tuntap or ethertap +int execute_script(bx_devmodel_c *netdev, const char* scriptname, char* arg1) +{ + int pid,status; + + if (!(pid=fork())) { + char filename[BX_PATHNAME_LEN]; + if (scriptname[0]=='/') { + strcpy(filename, scriptname); + } + else { + getcwd(filename, BX_PATHNAME_LEN); + strcat(filename, "/"); + strcat(filename, scriptname); + } + + // execute the script + netdev->info("Executing script '%s %s'",filename,arg1); + execle(filename, scriptname, arg1, NULL, NULL); + + // if we get here there has been a problem + exit(-1); + } + + wait (&status); + if (!WIFEXITED(status)) { + return -1; + } + return WEXITSTATUS(status); +} + +#endif // (HAVE_ETHERTAP==1) || (HAVE_TUNTAP==1) + +void write_pktlog_txt(FILE *pktlog_txt, const Bit8u *buf, unsigned len, bx_bool host_to_guest) +{ + Bit8u *charbuf = (Bit8u *)buf; + unsigned n; + + if (!host_to_guest) { + fprintf(pktlog_txt, "a packet from guest to host, length %u\n", len); + } else { + fprintf(pktlog_txt, "a packet from host to guest, length %u\n", len); + } + for (n = 0; n < len; n++) { + if (((n % 16) == 0) && (n > 0)) + fprintf(pktlog_txt, "\n"); + fprintf(pktlog_txt, "%02x ", (unsigned)charbuf[n]); + } + fprintf(pktlog_txt, "\n--\n"); + fflush(pktlog_txt); +} + +#endif /* if BX_NETWORKING */ diff --git a/bochs/iodev/eth.h b/bochs/iodev/eth.h new file mode 100644 index 00000000..52c675a3 --- /dev/null +++ b/bochs/iodev/eth.h @@ -0,0 +1,83 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +// Peter Grehan (grehan@iprg.nokia.com) coded all of this +// NE2000/ether stuff. + +// eth.h - see eth_null.cc for implementation details + +#ifndef BX_ETH_H +#define BX_ETH_H + +#define BX_PACKET_BUFSIZE 2048 // Enough for an ether frame + +typedef void (*eth_rx_handler_t)(void *arg, const void *buf, unsigned len); + +static const Bit8u broadcast_macaddr[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; + +int execute_script(bx_devmodel_c *netdev, const char *name, char* arg1); +void write_pktlog_txt(FILE *pktlog_txt, const Bit8u *buf, unsigned len, bx_bool host_to_guest); + +// +// The eth_pktmover class is used by ethernet chip emulations +// to interface to the outside world. An instance of this +// would allow frames to be sent to and received from some +// entity. An example would be the packet filter on a Unix +// system, an NDIS driver in promisc mode on WinNT, or maybe +// a simulated network that talks to another process. +// +class eth_pktmover_c { +public: + virtual void sendpkt(void *buf, unsigned io_len) = 0; + virtual ~eth_pktmover_c () {} +protected: + bx_devmodel_c *netdev; + eth_rx_handler_t rxh; // receive callback +}; + + +// +// The eth_locator class is used by pktmover classes to register +// their name. Chip emulations use the static 'create' method +// to locate and instantiate a pktmover class. +// +class eth_locator_c { +public: + static eth_pktmover_c *create(const char *type, const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, + const char *script); +protected: + eth_locator_c(const char *type); + virtual ~eth_locator_c() {} + virtual eth_pktmover_c *allocate(const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, + const char *script) = 0; +private: + static eth_locator_c *all; + eth_locator_c *next; + const char *type; +}; + +#endif diff --git a/bochs/iodev/eth_arpback.cc b/bochs/iodev/eth_arpback.cc new file mode 100644 index 00000000..401a3256 --- /dev/null +++ b/bochs/iodev/eth_arpback.cc @@ -0,0 +1,188 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +// eth_arpback.cc - basic ethernet packetmover, only responds to ARP + +// Various networking docs: +// http://www.graphcomp.com/info/rfc/ +// rfc0826: arp +// rfc0903: rarp + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_NETWORKING && defined(ETH_ARPBACK) + +#include "eth.h" +#include "crc32.h" +#include "eth_packetmaker.h" +#define LOG_THIS netdev-> + + +//static const Bit8u external_mac[]={0xB0, 0xC4, 0x20, 0x20, 0x00, 0x00, 0x00}; +//static const Bit8u internal_mac[]={0xB0, 0xC4, 0x20, 0x00, 0x00, 0x00, 0x00}; +//static const Bit8u external_ip[]={ 192, 168, 0, 2, 0x00 }; +//static const Bit8u ethtype_arp[]={0x08, 0x06, 0x00}; + + +// +// Define the class. This is private to this module +// +class bx_arpback_pktmover_c : public eth_pktmover_c { +public: + bx_arpback_pktmover_c(const char *netif, const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev); + void sendpkt(void *buf, unsigned io_len); +private: + int rx_timer_index; + static void rx_timer_handler(void *); + void rx_timer(void); + FILE *pktlog, *pktlog_txt; + //Bit8u arpbuf[MAX_FRAME_SIZE]; + //Bit32u buflen; + //bx_bool bufvalid; + //CRC_Generator mycrc; + eth_ETHmaker packetmaker; +}; + + +// +// Define the static class that registers the derived pktmover class, +// and allocates one on request. +// +class bx_arpback_locator_c : public eth_locator_c { +public: + bx_arpback_locator_c(void) : eth_locator_c("arpback") {} +protected: + eth_pktmover_c *allocate(const char *netif, const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script) { + return (new bx_arpback_pktmover_c(netif, macaddr, rxh, dev, script)); + } +} bx_arpback_match; + + +// +// Define the methods for the bx_arpback_pktmover derived class +// + +// the constructor +bx_arpback_pktmover_c::bx_arpback_pktmover_c(const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, + const char *script) +{ + this->netdev = dev; + BX_INFO(("arpback network driver")); + this->rx_timer_index = + bx_pc_system.register_timer(this, this->rx_timer_handler, 1000, + 1, 1, "eth_arpback"); // continuous, active + this->rxh = rxh; + //bufvalid=0; + packetmaker.init(); +#if BX_ETH_NULL_LOGGING + // Start the rx poll + // eventually Bryce wants txlog to dump in pcap format so that + // tcpdump -r FILE can read it and interpret packets. + pktlog = fopen("ne2k-pkt.log", "wb"); + if (!pktlog) BX_PANIC(("open ne2k-pkt.log failed")); + pktlog_txt = fopen("ne2k-pktlog.txt", "wb"); + if (!pktlog_txt) BX_PANIC(("open ne2k-pktlog.txt failed")); + fprintf(pktlog_txt, "arpback packetmover readable log file\n"); + fprintf(pktlog_txt, "net IF = %s\n", netif); + fprintf(pktlog_txt, "MAC address = "); + for (int i=0; i<6; i++) + fprintf(pktlog_txt, "%02x%s", 0xff & macaddr[i], i<5?":" : ""); + fprintf(pktlog_txt, "\n--\n"); + fflush(pktlog_txt); +#endif +} + +void +bx_arpback_pktmover_c::sendpkt(void *buf, unsigned io_len) +{ + if(io_lenrx_timer(); +} + +void bx_arpback_pktmover_c::rx_timer (void) +{ + eth_packet rubble; + + if (packetmaker.getpacket(rubble)) { +#if BX_ETH_NULL_LOGGING + write_pktlog_txt(pktlog_txt, rubble.buf, rubble.len, 1); +#endif + (*rxh)(this->netdev, rubble.buf, rubble.len); + } +} + +#endif /* if BX_NETWORKING && defined(ETH_ARPBACK) */ diff --git a/bochs/iodev/eth_fbsd.cc b/bochs/iodev/eth_fbsd.cc new file mode 100644 index 00000000..e1608270 --- /dev/null +++ b/bochs/iodev/eth_fbsd.cc @@ -0,0 +1,373 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +// Peter Grehan (grehan@iprg.nokia.com) coded all of this +// NE2000/ether stuff. + +// eth_fbsd.cc - A FreeBSD packet filter implementation of +// an ethernet pktmover. There are some problems and limitations +// with FreeBSD: +// - the source address of the frame is overwritten by +// the hosts's source address. This causes problems with +// learning bridges - since they cannot determine where +// BOCHS 'is', they broadcast the frame to all ports. +// - packets cannot be sent from BOCHS to the host +// - TCP performance seems to be abysmal; I think this is +// a timing problem somewhere. +// - I haven't handled the case where multiple frames arrive +// in a single BPF read. +// +// The /dev/bpf* devices need to be set up with the appropriate +// permissions for this to work. +// +// The config line in .bochsrc should look something like: +// +// ne2k: ioaddr=0x280, irq=9, mac=00:a:b:c:1:2, ethmod=fbsd, ethdev=fxp0 +// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_NETWORKING && defined(ETH_FBSD) + +#include "eth.h" + +#define LOG_THIS netdev-> + +extern "C" { +#include +#include +#include +#include +#include +#include +}; + +#define BX_BPF_POLL 1000 // Poll for a frame every 250 usecs + +#define BX_BPF_INSNSIZ 8 // number of bpf insns + +// template filter for a unicast mac address and all +// multicast/broadcast frames +static const struct bpf_insn macfilter[] = { + BPF_STMT(BPF_LD|BPF_W|BPF_ABS, 2), // A <- P[2:4] + BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 0xaaaaaaaa, 0, 2), // if A != 0xaaaaaaa GOTO LABEL-1 + BPF_STMT(BPF_LD|BPF_H|BPF_ABS, 0), // A <- P[0:2] + BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 0x0000aaaa, 2, 0), // if A == 0xaaaa GOTO ACCEPT + // LABEL-1 + BPF_STMT(BPF_LD|BPF_B|BPF_ABS, 0), // A <- P[0:1] + BPF_JUMP(BPF_JMP|BPF_JSET|BPF_K, 0x01, 0, 1), // if !(A & 1) GOTO LABEL-REJECT + // LABEL-ACCEPT + BPF_STMT(BPF_RET, 1514), // Accept packet + // LABEL-REJECT + BPF_STMT(BPF_RET, 0), // Reject packet +}; + +// template filter for all frames +static const struct bpf_insn promiscfilter[] = { + BPF_STMT(BPF_RET, 1514) +}; + +// +// Define the class. This is private to this module +// +class bx_fbsd_pktmover_c : public eth_pktmover_c { +public: + bx_fbsd_pktmover_c(const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script); + void sendpkt(void *buf, unsigned io_len); + +private: + char *fbsd_macaddr[6]; + int bpf_fd; + static void rx_timer_handler(void *); + void rx_timer(void); + int rx_timer_index; + struct bpf_insn filter[BX_BPF_INSNSIZ]; + FILE *ne2klog, *ne2klog_txt; +}; + + +// +// Define the static class that registers the derived pktmover class, +// and allocates one on request. +// +class bx_fbsd_locator_c : public eth_locator_c { +public: + bx_fbsd_locator_c(void) : eth_locator_c("fbsd") {} +protected: + eth_pktmover_c *allocate(const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script) { + return (new bx_fbsd_pktmover_c(netif, macaddr, rxh, dev, script)); + } +} bx_fbsd_match; + + +// +// Define the methods for the bx_fbsd_pktmover derived class +// + +// the constructor +// +// Open a bpf file descriptor, and attempt to bind to +// the specified netif (Replicates libpcap open code) +// +bx_fbsd_pktmover_c::bx_fbsd_pktmover_c(const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, + const char *script) +{ + char device[sizeof "/dev/bpf000"]; + int tmpfd; + int n = 0; + struct ifreq ifr; + struct bpf_version bv; + struct bpf_program bp; + u_int v; + + this->netdev = dev; + BX_INFO(("freebsd network driver")); + memcpy(fbsd_macaddr, macaddr, 6); + + do { + (void)sprintf(device, "/dev/bpf%d", n++); + this->bpf_fd = open(device, O_RDWR); + BX_DEBUG(("tried %s, returned %d (%s)",device,this->bpf_fd,strerror(errno))); + if(errno == EACCES) + break; + } while (this->bpf_fd == -1); + + if (this->bpf_fd == -1) { + BX_PANIC(("eth_freebsd: could not open packet filter: %s", strerror(errno))); + return; + } + + if (ioctl(this->bpf_fd, BIOCVERSION, (caddr_t)&bv) < 0) { + BX_PANIC(("eth_freebsd: could not retrieve bpf version")); + close(this->bpf_fd); + this->bpf_fd = -1; + return; + } + if (bv.bv_major != BPF_MAJOR_VERSION || bv.bv_minor < BPF_MINOR_VERSION) { + BX_PANIC(("eth_freebsd: bpf version mismatch between compilation and runtime")); + close(this->bpf_fd); + this->bpf_fd = -1; + return; + } + + // Set buffer size + v = BX_PACKET_BUFSIZE; + if (ioctl(this->bpf_fd, BIOCSBLEN, (caddr_t)&v) < 0) { + BX_PANIC(("eth_freebsd: could not set buffer size: %s", strerror(errno))); + close(this->bpf_fd); + this->bpf_fd = -1; + return; + } + + (void)strncpy(ifr.ifr_name, netif, sizeof(ifr.ifr_name)); + if (ioctl(this->bpf_fd, BIOCSETIF, (caddr_t)&ifr) < 0) { + BX_PANIC(("eth_freebsd: could not enable interface '%s': %s", netif, strerror(errno))); + close(this->bpf_fd); + this->bpf_fd == -1; + } + + // Verify that the device is an ethernet. + if (ioctl(this->bpf_fd, BIOCGDLT, (caddr_t)&v) < 0) { + BX_PANIC(("eth_freebsd: could not retrieve datalink type: %s", strerror(errno))); + close(this->bpf_fd); + this->bpf_fd = -1; + return; + } + if (v != DLT_EN10MB) { + BX_PANIC(("eth_freebsd: incorrect datalink type %d, expected 10mb ethernet", v)); + close(this->bpf_fd); + this->bpf_fd = -1; + return; + } + + // Put the device into promisc mode. This could be optimised + // to filter on a MAC address, broadcast, and all-multi, + // but this will do for now. + // + if (ioctl(this->bpf_fd, BIOCPROMISC, NULL) < 0) { + BX_PANIC(("eth_freebsd: could not enable promisc mode: %s", strerror(errno))); + close(this->bpf_fd); + this->bpf_fd = -1; + return; + } + + v = 1; + if (ioctl(this->bpf_fd, BIOCIMMEDIATE, &v) < 0) { + BX_PANIC(("eth_freebsd: could not enable immediate mode")); + close(this->bpf_fd); + this->bpf_fd = -1; + return; + } + + // Set up non-blocking i/o + v = 1; + if (ioctl(this->bpf_fd, FIONBIO, &v) < 0) { + BX_PANIC(("eth_freebsd: could not enable non-blocking i/o: %s", strerror(errno))); + close(this->bpf_fd); + this->bpf_fd = -1; + return; + } + + // Install a filter +#ifdef notdef + memcpy(&this->filter, promiscfilter, sizeof(promiscfilter)); + bp.bf_len = 1; +#else + memcpy(&this->filter, macfilter, sizeof(macfilter)); + this->filter[1].k = + (macaddr[2] & 0xff) << 24 | + (macaddr[3] & 0xff) << 16 | + (macaddr[4] & 0xff) << 8 | + (macaddr[5] & 0xff); + this->filter[3].k = + (macaddr[0] & 0xff) << 8 | + (macaddr[1] & 0xff); + bp.bf_len = 8; +#endif + bp.bf_insns = &this->filter[0]; + if (ioctl(this->bpf_fd, BIOCSETF, &bp) < 0) { + BX_PANIC(("eth_freebsd: could not set filter: %s", strerror(errno))); + close(this->bpf_fd); + this->bpf_fd = -1; + return; + } + + // Start the rx poll + this->rx_timer_index = + bx_pc_system.register_timer(this, this->rx_timer_handler, BX_BPF_POLL, + 1, 1, "eth_fbsd"); // continuous, active + + this->rxh = rxh; + +#if BX_ETH_FBSD_LOGGING + // eventually Bryce wants ne2klog to dump in pcap format so that + // tcpdump -r FILE can read it and interpret packets. + ne2klog = fopen("ne2k.raw", "wb"); + if (!ne2klog) BX_PANIC(("open ne2k-tx.log failed")); + ne2klog_txt = fopen("ne2k.txt", "wb"); + if (!ne2klog_txt) BX_PANIC(("open ne2k-txdump.txt failed")); + fprintf(ne2klog_txt, "null packetmover readable log file\n"); + fprintf(ne2klog_txt, "net IF = %s\n", netif); + fprintf(ne2klog_txt, "MAC address = "); + for (int i=0; i<6; i++) + fprintf(ne2klog_txt, "%02x%s", 0xff & macaddr[i], i<5?":" : ""); + fprintf(ne2klog_txt, "\n--\n"); + fflush(ne2klog_txt); +#endif +} + +// the output routine - called with pre-formatted ethernet frame. +void +bx_fbsd_pktmover_c::sendpkt(void *buf, unsigned io_len) +{ +#if BX_ETH_FBSD_LOGGING + BX_DEBUG(("sendpkt length %u", io_len)); + // dump raw bytes to a file, eventually dump in pcap format so that + // tcpdump -r FILE can interpret them for us. + int n = fwrite(buf, io_len, 1, ne2klog); + if (n != 1) BX_ERROR(("fwrite to ne2klog failed", io_len)); + // dump packet in hex into an ascii log file + write_pktlog_txt(ne2klog_txt, (const Bit8u *)buf, io_len, 0); + // flush log so that we see the packets as they arrive w/o buffering + fflush(ne2klog); +#endif + int status; + + if (this->bpf_fd != -1) + status = write(this->bpf_fd, buf, io_len); +} + +// The receive poll process +void +bx_fbsd_pktmover_c::rx_timer_handler(void *this_ptr) +{ + bx_fbsd_pktmover_c *class_ptr = (bx_fbsd_pktmover_c *) this_ptr; + + class_ptr->rx_timer(); +} + + +void +bx_fbsd_pktmover_c::rx_timer(void) +{ + int nbytes = 0; + unsigned char rxbuf[BX_PACKET_BUFSIZE]; + struct bpf_hdr *bhdr; + struct bpf_stat bstat; + static struct bpf_stat previous_bstat; + int counter = 10; +#define phdr ((unsigned char*)bhdr) + + bhdr = (struct bpf_hdr *) rxbuf; + nbytes = read(this->bpf_fd, rxbuf, sizeof(rxbuf)); + + while (phdr < (rxbuf + nbytes)) { + if (ioctl(this->bpf_fd, BIOCGSTATS, &bstat) < 0) { + BX_PANIC(("eth_freebsd: could not stat filter: %s", strerror(errno))); + } + if (bstat.bs_drop > previous_bstat.bs_drop) { + BX_INFO(("eth_freebsd: %d packets dropped by the kernel.", + bstat.bs_drop - previous_bstat.bs_drop)); + } + previous_bstat = bstat; + if (bhdr->bh_caplen < 20 || bhdr->bh_caplen > 1514) { + BX_ERROR(("eth_freebsd: received too weird packet length: %d", bhdr->bh_caplen)); + } + + // filter out packets sourced from this node + if (memcmp(bhdr + bhdr->bh_hdrlen + 6, this->fbsd_macaddr, 6)) { + (*rxh)(this->netdev, phdr + bhdr->bh_hdrlen, bhdr->bh_caplen); + } + +#if BX_ETH_FBSD_LOGGING + BX_DEBUG(("receive packet length %u", nbytes)); + // dump raw bytes to a file, eventually dump in pcap format so that + // tcpdump -r FILE can interpret them for us. + if (1 != fwrite(bhdr, bhdr->bh_caplen, 1, ne2klog)) { + BX_PANIC(("fwrite to ne2klog failed: %s", strerror(errno))); + } + // dump packet in hex into an ascii log file + write_pktlog_txt(ne2klog_txt, rxbuf, bhdr->bh_caplen, 1); + // flush log so that we see the packets as they arrive w/o buffering + fflush (this->ne2klog); +#endif + + // Advance bhdr and phdr pointers to next packet + bhdr = (struct bpf_hdr*) ((char*) bhdr + BPF_WORDALIGN(bhdr->bh_hdrlen + bhdr->bh_caplen)); + } +} + +#endif /* if BX_NETWORKING && defined(ETH_FBSD) */ + diff --git a/bochs/iodev/eth_linux.cc b/bochs/iodev/eth_linux.cc new file mode 100644 index 00000000..f75895de --- /dev/null +++ b/bochs/iodev/eth_linux.cc @@ -0,0 +1,284 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +// Peter Grehan (grehan@iprg.nokia.com) coded all of this +// NE2000/ether stuff. + +// eth_linux.cc - A Linux socket filter adaptation of the FreeBSD BPF driver +// 21 June 2001 +// +// Problems and limitations: +// - packets cannot be sent from BOCHS to the host +// - Linux kernel sometimes gets network watchdog timeouts under emulation +// - author doesn't know C++ +// +// The config line in .bochsrc should look something like: +// +// ne2k: ioaddr=0x280, irq=10, mac=00:a:b:c:1:2, ethmod=linux, ethdev=eth0 +// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_NETWORKING && defined (ETH_LINUX) + +#include "eth.h" + +#define LOG_THIS netdev-> + +extern "C" { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +}; + +#define BX_PACKET_POLL 1000 // Poll for a frame every 1000 usecs + +// template filter for a unicast mac address and all +// multicast/broadcast frames +static const struct sock_filter macfilter[] = { + BPF_STMT(BPF_LD|BPF_W|BPF_ABS, 2), + BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 0xaaaaaaaa, 0, 2), + BPF_STMT(BPF_LD|BPF_H|BPF_ABS, 0), + BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 0x0000aaaa, 2, 0), + BPF_STMT(BPF_LD|BPF_B|BPF_ABS, 0), + BPF_JUMP(BPF_JMP|BPF_JSET|BPF_K, 0x01, 0, 1), + BPF_STMT(BPF_RET, 1514), + BPF_STMT(BPF_RET, 0), +}; +#define BX_LSF_ICNT 8 // number of lsf instructions in macfilter + +#if 0 +// template filter for all frames +static const struct sock_filter promiscfilter[] = { + BPF_STMT(BPF_RET, 1514) +}; +#endif + +// +// Define the class. This is private to this module +// +class bx_linux_pktmover_c : public eth_pktmover_c { +public: + bx_linux_pktmover_c(const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, + const char *script); + void sendpkt(void *buf, unsigned io_len); + +private: + unsigned char *linux_macaddr[6]; + int fd; + int ifindex; + static void rx_timer_handler(void *); + void rx_timer(void); + int rx_timer_index; + struct sock_filter filter[BX_LSF_ICNT]; +}; + + +// +// Define the static class that registers the derived pktmover class, +// and allocates one on request. +// +class bx_linux_locator_c : public eth_locator_c { +public: + bx_linux_locator_c(void) : eth_locator_c("linux") {} +protected: + eth_pktmover_c *allocate(const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script) { + return (new bx_linux_pktmover_c(netif, macaddr, rxh, dev, script)); + } +} bx_linux_match; + + +// +// Define the methods for the bx_linux_pktmover derived class +// + +// the constructor +// +bx_linux_pktmover_c::bx_linux_pktmover_c(const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, + const char *script) +{ + struct sockaddr_ll sll; + struct packet_mreq mr; + struct ifreq ifr; + struct sock_fprog fp; + + this->netdev = dev; + memcpy(linux_macaddr, macaddr, 6); + + // Open packet socket + // + if ((this->fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) == -1) { + if (errno == EACCES) + BX_PANIC(("eth_linux: must be root or have CAP_NET_RAW capability to open socket")); + else + BX_PANIC(("eth_linux: could not open socket: %s", strerror(errno))); + this->fd = -1; + return; + } + + // Translate interface name to index + // + memset(&ifr, 0, sizeof(ifr)); + strcpy(ifr.ifr_name, netif); + if (ioctl(this->fd, SIOCGIFINDEX, &ifr) == -1) { + BX_PANIC(("eth_linux: could not get index for interface '%s'\n", netif)); + close(fd); + this->fd = -1; + return; + } + this->ifindex = ifr.ifr_ifindex; + + + // Bind to given interface + // + memset(&sll, 0, sizeof(sll)); + sll.sll_family = AF_PACKET; + sll.sll_ifindex = this->ifindex; + if (bind(fd, (struct sockaddr *)&sll, (socklen_t)sizeof(sll)) == -1) { + BX_PANIC(("eth_linux: could not bind to interface '%s': %s\n", netif, strerror(errno))); + close(fd); + this->fd = -1; + return; + } + + // Put the device into promisc mode. + // + memset(&mr, 0, sizeof(mr)); + mr.mr_ifindex = this->ifindex; + mr.mr_type = PACKET_MR_PROMISC; + if (setsockopt(this->fd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, (void *)&mr, (socklen_t)sizeof(mr)) == -1) { + BX_PANIC(("eth_linux: could not enable promisc mode: %s\n", strerror(errno))); + close(this->fd); + this->fd = -1; + return; + } + + // Set up non-blocking i/o + if (fcntl(this->fd, F_SETFL, O_NONBLOCK) == -1) { + BX_PANIC(("eth_linux: could not set non-blocking i/o on socket")); + close(this->fd); + this->fd = -1; + return; + } + + // Install a filter +#ifdef notdef + memcpy(&this->filter, promiscfilter, sizeof(promiscfilter)); + fp.len = 1; +#endif + memcpy(&this->filter, macfilter, sizeof(macfilter)); + this->filter[1].k = (macaddr[2] & 0xff) << 24 | (macaddr[3] & 0xff) << 16 | + (macaddr[4] & 0xff) << 8 | (macaddr[5] & 0xff); + this->filter[3].k = (macaddr[0] & 0xff) << 8 | (macaddr[1] & 0xff); + fp.len = BX_LSF_ICNT; + fp.filter = this->filter; + BX_INFO(("eth_linux: fp.len=%d fp.filter=%lx", fp.len, (unsigned long) fp.filter)); + if (setsockopt(this->fd, SOL_SOCKET, SO_ATTACH_FILTER, &fp, sizeof(fp)) < 0) { + BX_PANIC(("eth_linux: could not set socket filter: %s", strerror(errno))); + close(this->fd); + this->fd = -1; + return; + } + + // Start the rx poll + this->rx_timer_index = + bx_pc_system.register_timer(this, this->rx_timer_handler, BX_PACKET_POLL, + 1, 1, "eth_linux"); // continuous, active + + this->rxh = rxh; + BX_INFO(("linux network driver initialized: using interface %s", netif)); +} + +// the output routine - called with pre-formatted ethernet frame. +void +bx_linux_pktmover_c::sendpkt(void *buf, unsigned io_len) +{ + int status; + + if (this->fd != -1) { + status = write(this->fd, buf, io_len); + if (status == -1) + BX_INFO(("eth_linux: write failed: %s", strerror(errno))); + } +} + +// The receive poll process +void +bx_linux_pktmover_c::rx_timer_handler(void *this_ptr) +{ + bx_linux_pktmover_c *class_ptr = (bx_linux_pktmover_c *) this_ptr; + + class_ptr->rx_timer(); +} + +void +bx_linux_pktmover_c::rx_timer(void) +{ + int nbytes = 0; + Bit8u rxbuf[BX_PACKET_BUFSIZE]; + struct sockaddr_ll sll; + socklen_t fromlen; + + if (this->fd == -1) + return; + + fromlen = sizeof(sll); + nbytes = recvfrom(this->fd, rxbuf, sizeof(rxbuf), 0, (struct sockaddr *)&sll, &fromlen); + + if (nbytes == -1) { + if (errno != EAGAIN) + BX_INFO(("eth_linux: error receiving packet: %s\n", strerror(errno))); + return; + } + + // this should be done with LSF someday + // filter out packets sourced by us + if (memcmp(sll.sll_addr, this->linux_macaddr, 6) == 0) + return; + // let through broadcast, multicast, and our mac address +// if ((memcmp(rxbuf, broadcast_macaddr, 6) == 0) || (memcmp(rxbuf, this->linux_macaddr, 6) == 0) || rxbuf[0] & 0x01) { + BX_DEBUG(("eth_linux: got packet: %d bytes, dst=%x:%x:%x:%x:%x:%x, src=%x:%x:%x:%x:%x:%x\n", nbytes, rxbuf[0], rxbuf[1], rxbuf[2], rxbuf[3], rxbuf[4], rxbuf[5], rxbuf[6], rxbuf[7], rxbuf[8], rxbuf[9], rxbuf[10], rxbuf[11])); + (*rxh)(netdev, rxbuf, nbytes); +// } +} +#endif /* if BX_NETWORKING && defined ETH_LINUX */ diff --git a/bochs/iodev/eth_null.cc b/bochs/iodev/eth_null.cc new file mode 100644 index 00000000..60c9bd88 --- /dev/null +++ b/bochs/iodev/eth_null.cc @@ -0,0 +1,148 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +// eth_null.cc - skeleton code for an ethernet pktmover + +// Various networking docs: +// http://www.graphcomp.com/info/rfc/ +// rfc0826: arp +// rfc0903: rarp + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_NETWORKING + +#include "eth.h" + +#define LOG_THIS netdev-> + + +// +// Define the class. This is private to this module +// +class bx_null_pktmover_c : public eth_pktmover_c { +public: + bx_null_pktmover_c(const char *netif, const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script); + void sendpkt(void *buf, unsigned io_len); +private: + int rx_timer_index; + static void rx_timer_handler(void *); + FILE *txlog, *txlog_txt, *rxlog, *rxlog_txt; +}; + + +// +// Define the static class that registers the derived pktmover class, +// and allocates one on request. +// +class bx_null_locator_c : public eth_locator_c { +public: + bx_null_locator_c(void) : eth_locator_c("null") {} +protected: + eth_pktmover_c *allocate(const char *netif, const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script) { + return (new bx_null_pktmover_c(netif, macaddr, rxh, dev, script)); + } +} bx_null_match; + + +// +// Define the methods for the bx_null_pktmover derived class +// + +// the constructor +bx_null_pktmover_c::bx_null_pktmover_c(const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, + const char *script) +{ + this->netdev = dev; + BX_INFO(("null network driver")); +#if BX_ETH_NULL_LOGGING + // Start the rx poll + this->rx_timer_index = + bx_pc_system.register_timer(this, this->rx_timer_handler, 1000, + 1, 1, "eth_null"); // continuous, active + this->rxh = rxh; + // eventually Bryce wants txlog to dump in pcap format so that + // tcpdump -r FILE can read it and interpret packets. + txlog = fopen("ne2k-tx.log", "wb"); + if (!txlog) BX_PANIC(("open ne2k-tx.log failed")); + txlog_txt = fopen("ne2k-txdump.txt", "wb"); + if (!txlog_txt) BX_PANIC(("open ne2k-txdump.txt failed")); + fprintf(txlog_txt, "null packetmover readable log file\n"); + fprintf(txlog_txt, "net IF = %s\n", netif); + fprintf(txlog_txt, "MAC address = "); + for (int i=0; i<6; i++) + fprintf(txlog_txt, "%02x%s", 0xff & macaddr[i], i<5?":" : ""); + fprintf(txlog_txt, "\n--\n"); + fflush(txlog_txt); +#endif +} + +void bx_null_pktmover_c::sendpkt(void *buf, unsigned io_len) +{ +#if BX_ETH_NULL_LOGGING + BX_DEBUG (("sendpkt length %u", io_len)); + // dump raw bytes to a file, eventually dump in pcap format so that + // tcpdump -r FILE can interpret them for us. + size_t n = fwrite (buf, io_len, 1, txlog); + if (n != 1) BX_ERROR(("fwrite to txlog failed, io_len = %u", io_len)); + // dump packet in hex into an ascii log file + write_pktlog_txt(txlog_txt, (const Bit8u *)buf, io_len, 0); + // flush log so that we see the packets as they arrive w/o buffering + fflush(txlog); +#endif +} + +void bx_null_pktmover_c::rx_timer_handler (void *this_ptr) +{ +#if BX_ETH_NULL_LOGGING + /// hey wait there is no receive data with a NULL ethernet, is there.... + + int io_len = 0; + Bit8u buf[1]; + bx_null_pktmover_c *class_ptr = (bx_null_pktmover_c *) this_ptr; + bx_devmodel_c *netdev = class_ptr->netdev; + if (io_len > 0) { + BX_DEBUG(("receive packet length %u", io_len)); + // dump raw bytes to a file, eventually dump in pcap format so that + // tcpdump -r FILE can interpret them for us. + size_t n = fwrite (buf, io_len, 1, class_ptr->rxlog); + if (n != 1) BX_ERROR(("fwrite to rxlog failed, io_len = %u", io_len)); + // dump packet in hex into an ascii log file + write_pktlog_txt(class_ptr->rxlog_txt, buf, io_len, 1); + // flush log so that we see the packets as they arrive w/o buffering + fflush(class_ptr->rxlog); + } +#endif +} + +#endif /* if BX_NETWORKING */ diff --git a/bochs/iodev/eth_packetmaker.cc b/bochs/iodev/eth_packetmaker.cc new file mode 100644 index 00000000..452797ba --- /dev/null +++ b/bochs/iodev/eth_packetmaker.cc @@ -0,0 +1,202 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2000-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_NETWORKING && defined(ETH_ARPBACK) + +#include "eth_packetmaker.h" + +bx_bool sendable(const eth_packet& outpacket) { + //FINISH ME! + return 0; +} + +Bit32u eth_IPmaker::datalen(const eth_packet& outpacket) +{ + Bit32u out; + out=((outpacket.buf[16]<<8)+outpacket.buf[17])-(4*(0xF & outpacket.buf[14])); + return out; +} + +const Bit8u *eth_IPmaker::datagram(const eth_packet& outpacket) +{ + const Bit8u *out; + out=outpacket.buf+14+(4*(0xF & outpacket.buf[14])); + return out; +} + +Bit32u eth_IPmaker::build_packet_header(Bit32u source, Bit32u dest, Bit8u protocol, Bit32u datalen) +{ + Bit32u temp; + Bit32u i; + memcpy(pending.buf,internal_mac,6); + memcpy(pending.buf+6,external_mac,6); + memcpy(pending.buf+12,ethtype_ip,2); + pending.buf[14]=0x45; + pending.buf[15]=0; + temp=datalen+20; + pending.buf[16]=(temp>>8) & 0xFF; + pending.buf[17]=temp & 0xFF; + pending.buf[18]=0; + pending.buf[19]=0; + pending.buf[20]=0; + pending.buf[21]=0; + pending.buf[22]=30; + pending.buf[23]=protocol; + pending.buf[24]=0; + pending.buf[25]=0; + pending.buf[26]=(source>>24) & 0xFF; + pending.buf[27]=(source>>16) & 0xFF; + pending.buf[28]=(source>>8) & 0xFF; + pending.buf[29]=(source) & 0xFF; + pending.buf[30]=(dest>>24) & 0xFF; + pending.buf[31]=(dest>>16) & 0xFF; + pending.buf[32]=(dest>>8) & 0xFF; + pending.buf[33]=(dest) & 0xFF; + //Compute Checksum + temp=0; + for(i=14;i<34;i=i+2) { + Bit32u addee=pending.buf[i]; + addee=(addee<<8) & pending.buf[i+1]; + temp=temp+addee; + } + temp=(temp>>16)+(temp&0xFFFF); + temp=(temp>>16)+(temp&0xFFFF); + pending.buf[24]=~(Bit8u)((temp>>8) & 0xFF); + pending.buf[25]=~(Bit8u)(temp & 0xFF); + return(34); +} + +Bit8u eth_IPmaker::protocol(const eth_packet& outpacket) +{ + return (*(outpacket.buf+23) & 0xff); +} + +Bit32u eth_IPmaker::source(const eth_packet& outpacket) +{ + Bit32u out=0xFF & *(outpacket.buf+26); + out=(out<<8) | (0xFF & *(outpacket.buf+27)); + out=(out<<8) | (0xFF & *(outpacket.buf+28)); + out=(out<<8) | (0xFF & *(outpacket.buf+29)); + return out; +} + +Bit32u eth_IPmaker::destination(const eth_packet& outpacket) +{ + Bit32u out=0xFF & *(outpacket.buf+30); + out=(out<<8) | (0xFF & *(outpacket.buf+31)); + out=(out<<8) | (0xFF & *(outpacket.buf+32)); + out=(out<<8) | (0xFF & *(outpacket.buf+33)); + return out; +} + +void eth_IPmaker::init(void) +{ + is_pending=0; +} + +void eth_ETHmaker::init(void) +{ + arper.init(); +} + +bx_bool eth_ETHmaker::getpacket(eth_packet& inpacket) +{ + return arper.getpacket(inpacket); +} + +bx_bool eth_ETHmaker::ishandler(const eth_packet& outpacket) +{ + if((outpacket.len>=60) && + ( (!memcmp(outpacket.buf, external_mac, 6)) + || (!memcmp(outpacket.buf, broadcast_macaddr, 6))) && + ( (!memcmp(outpacket.buf+12, ethtype_arp, 2)) || + (!memcmp(outpacket.buf+12, ethtype_ip, 2))) && + (outpacket.len=60) && + (!memcmp(outpacket.buf+12, ethtype_arp, 2)) && + (outpacket.len 10.0.0.2: icmp: echo request +// 4500 0054 2800 0000 4001 3ea7 0a00 0001 +// 0a00 0002 0800 09d3 a53e 0400 9765 893c +// 3949 0000 0809 0a0b 0c0d 0e0f 1011 1213 +// 1415 1617 1819 +// 20:29:59.023017 fe:fd:0:0:0:1 fe:fd:0:0:0:0 0800 98: 10.0.0.2 > 10.0.0.1: icmp: echo reply +// 4500 0054 004a 0000 4001 665d 0a00 0002 +// 0a00 0001 0000 11d3 a53e 0400 9765 893c +// 3949 0000 0809 0a0b 0c0d 0e0f 1011 1213 +// 1415 1617 1819 +// +// I suspect it may be related to the fact that ping 10.0.0.1 from the +// host also doesn't work. Why wouldn't the host respond to its own IP +// address on the tap0 device? +// +// Theoretically, if you set up packet forwarding (with masquerading) on the +// host, you should be able to get Bochs talking to anyone on the internet. +// + +// Pavel Dufek (PD), CZ, 2008 - quick & dirty hack for Solaris 10 sparc tap +// ala Qemu. + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_NETWORKING && defined(HAVE_ETHERTAP) + +#include "eth.h" + +#define LOG_THIS netdev-> + +#include +#include +#include +#ifndef __APPLE__ +#include +#endif +#include +#include +#include +#include +#include +#if defined(__linux__) +#include +#include +#include +#elif BX_HAVE_NET_IF_H +#include +#endif +#include +#include +#include +#if defined(__sun__) +// Sun/Solaris specific defines/includes +#define TUNNEWPPA (('T'<<16) | 0x0001) +#include +#endif + +#define BX_ETH_TAP_LOGGING 0 + +// +// Define the class. This is private to this module +// +class bx_tap_pktmover_c : public eth_pktmover_c { +public: + bx_tap_pktmover_c(const char *netif, const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script); + void sendpkt(void *buf, unsigned io_len); +private: + int fd; + int rx_timer_index; + static void rx_timer_handler(void *); + void rx_timer (); + Bit8u guest_macaddr[6]; +#if BX_ETH_TAP_LOGGING + FILE *txlog, *txlog_txt, *rxlog, *rxlog_txt; +#endif +}; + + +// +// Define the static class that registers the derived pktmover class, +// and allocates one on request. +// +class bx_tap_locator_c : public eth_locator_c { +public: + bx_tap_locator_c(void) : eth_locator_c("tap") {} +protected: + eth_pktmover_c *allocate(const char *netif, const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script) { + return (new bx_tap_pktmover_c(netif, macaddr, rxh, dev, script)); + } +} bx_tap_match; + + +// +// Define the methods for the bx_tap_pktmover derived class +// + +// the constructor +bx_tap_pktmover_c::bx_tap_pktmover_c(const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, + const char *script) +{ + int flags; + char filename[BX_PATHNAME_LEN]; + + this->netdev = dev; + if (strncmp (netif, "tap", 3) != 0) { + BX_PANIC(("eth_tap: interface name (%s) must be tap0..tap15", netif)); + } +#if defined(__sun__) + strcpy(filename,"/dev/tap"); /* PD - device on Solaris is always the same */ +#else + sprintf(filename, "/dev/%s", netif); +#endif + +#if defined(__linux__) + // check if the TAP devices is running, and turn on ARP. This is based + // on code from the Mac-On-Linux project. http://http://www.maconlinux.org/ + int sock = socket(AF_INET, SOCK_DGRAM, 0); + if (sock < 0) { + BX_PANIC(("socket creation: %s", strerror(errno))); + return; + } + struct ifreq ifr; + memset(&ifr, 0, sizeof(ifr)); + strncpy(ifr.ifr_name, netif, sizeof(ifr.ifr_name)); + if(ioctl(sock, SIOCGIFFLAGS, &ifr) < 0) { + BX_PANIC(("SIOCGIFFLAGS on %s: %s", netif, strerror(errno))); + close(sock); + return; + } + if (!(ifr.ifr_flags & IFF_RUNNING)) { + BX_PANIC(("%s device is not running", netif)); + close(sock); + return; + } + if ((ifr.ifr_flags & IFF_NOARP)){ + BX_INFO(("turn on ARP for %s device", netif)); + ifr.ifr_flags &= ~IFF_NOARP; + if (ioctl(sock, SIOCSIFFLAGS, &ifr) < 0) { + BX_PANIC(("SIOCSIFFLAGS: %s", strerror(errno))); + close(sock); + return; + } + } + close(sock); +#endif + + fd = open (filename, O_RDWR); + if (fd < 0) { + BX_PANIC(("open failed on TAP %s: %s", netif, strerror(errno))); + return; + } + +#if defined(__sun__) + char *ptr; /* PD - ppa allocation ala qemu */ + char my_dev[10]; /* enough ... */ + int ppa=-1; + struct strioctl strioc_ppa; + + my_dev[10-1]=0; + strncpy(my_dev,netif,10); /* following ptr= does not work with const char* */ + if( *my_dev ) { /* find the ppa number X from string tapX */ + ptr = my_dev; + while( *ptr && !isdigit((int)*ptr) ) ptr++; + ppa = atoi(ptr); + } + /* Assign a new PPA and get its unit number. */ + strioc_ppa.ic_cmd = TUNNEWPPA; + strioc_ppa.ic_timout = 0; + strioc_ppa.ic_len = sizeof(ppa); + strioc_ppa.ic_dp = (char *)&ppa; + if ((ppa = ioctl (fd, I_STR, &strioc_ppa)) < 0) + BX_PANIC(("Can't assign new interface tap%d !",ppa)); +#endif + + /* set O_ASYNC flag so that we can poll with read() */ + if ((flags = fcntl(fd, F_GETFL)) < 0) { + BX_PANIC(("getflags on tap device: %s", strerror(errno))); + } + flags |= O_NONBLOCK; + if (fcntl(fd, F_SETFL, flags) < 0) { + BX_PANIC(("set tap device flags: %s", strerror(errno))); + } + + BX_INFO(("tap network drive: opened %s device", netif)); + + /* Execute the configuration script */ + char intname[IFNAMSIZ]; + strcpy(intname,netif); + if((script != NULL) && (strcmp(script, "") != 0) && (strcmp(script, "none") != 0)) + { + if (execute_script(this->netdev, script, intname) < 0) + BX_ERROR(("execute script '%s' on %s failed", script, intname)); + } + + // Start the rx poll + this->rx_timer_index = + bx_pc_system.register_timer(this, this->rx_timer_handler, 1000, + 1, 1, "eth_tap"); // continuous, active + this->rxh = rxh; + memcpy(&guest_macaddr[0], macaddr, 6); +#if BX_ETH_TAP_LOGGING + // eventually Bryce wants txlog to dump in pcap format so that + // tcpdump -r FILE can read it and interpret packets. + txlog = fopen("ne2k-tx.log", "wb"); + if (!txlog) BX_PANIC(("open ne2k-tx.log failed")); + txlog_txt = fopen("ne2k-txdump.txt", "wb"); + if (!txlog_txt) BX_PANIC(("open ne2k-txdump.txt failed")); + fprintf(txlog_txt, "tap packetmover readable log file\n"); + fprintf(txlog_txt, "net IF = %s\n", netif); + fprintf(txlog_txt, "MAC address = "); + for (int i=0; i<6; i++) + fprintf(txlog_txt, "%02x%s", 0xff & macaddr[i], i<5?":" : ""); + fprintf(txlog_txt, "\n--\n"); + fflush(txlog_txt); + + rxlog = fopen("ne2k-rx.log", "wb"); + if (!rxlog) BX_PANIC(("open ne2k-rx.log failed")); + rxlog_txt = fopen("ne2k-rxdump.txt", "wb"); + if (!rxlog_txt) BX_PANIC(("open ne2k-rxdump.txt failed")); + fprintf(rxlog_txt, "tap packetmover readable log file\n"); + fprintf(rxlog_txt, "net IF = %s\n", netif); + fprintf(rxlog_txt, "MAC address = "); + for (int i=0; i<6; i++) + fprintf(rxlog_txt, "%02x%s", 0xff & macaddr[i], i<5?":" : ""); + fprintf(rxlog_txt, "\n--\n"); + fflush(rxlog_txt); + +#endif +} + +void bx_tap_pktmover_c::sendpkt(void *buf, unsigned io_len) +{ + Bit8u txbuf[BX_PACKET_BUFSIZE]; + txbuf[0] = 0; + txbuf[1] = 0; + unsigned int size; +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ + defined(__APPLE__) || defined(__OpenBSD__) || defined(__sun__) // Should be fixed for other *BSD + memcpy(txbuf, buf, io_len); + /* PD - for Sun variant the retry cycle from qemu - mainly to be sure packet + is really out */ +#if defined(__sun__) + int ret; + for(;;) { + ret=write(fd, txbuf, io_len); + if (ret < 0 && (errno == EINTR || errno == EAGAIN)) { + } else { + size=ret; + break; + } + } +#else /* not defined __sun__ */ + size = write(fd, txbuf, io_len); +#endif /* whole condition about defined __sun__ */ + if (size != io_len) { +#else /* not bsd/apple/sun style */ + memcpy(txbuf+2, buf, io_len); + size = write(fd, txbuf, io_len+2); + if (size != io_len+2) { +#endif + BX_PANIC(("write on tap device: %s", strerror(errno))); + } else { + BX_DEBUG(("wrote %d bytes + ev. 2 byte pad on tap", io_len)); + } +#if BX_ETH_TAP_LOGGING + BX_DEBUG(("sendpkt length %u", io_len)); + // dump raw bytes to a file, eventually dump in pcap format so that + // tcpdump -r FILE can interpret them for us. + int n = fwrite(buf, io_len, 1, txlog); + if (n != 1) BX_ERROR(("fwrite to txlog failed, io_len = %u", io_len)); + // dump packet in hex into an ascii log file + write_pktlog_txt(txlog_txt, (const Bit8u *)buf, io_len, 0); + // flush log so that we see the packets as they arrive w/o buffering + fflush(txlog); +#endif +} + +void bx_tap_pktmover_c::rx_timer_handler(void *this_ptr) +{ + bx_tap_pktmover_c *class_ptr = (bx_tap_pktmover_c *) this_ptr; + class_ptr->rx_timer(); +} + +void bx_tap_pktmover_c::rx_timer() +{ + int nbytes; + Bit8u buf[BX_PACKET_BUFSIZE]; + Bit8u *rxbuf; + if (fd<0) return; +#if defined(__sun__) + struct strbuf sbuf; + int f = 0; + sbuf.maxlen = sizeof(buf); + sbuf.buf = (char *)buf; + nbytes = getmsg(fd, NULL, &sbuf, &f) >=0 ? sbuf.len : -1; +#else + nbytes = read (fd, buf, sizeof(buf)); +#endif + + // hack: discard first two bytes +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__APPLE__) || defined(__sun__) // Should be fixed for other *BSD + rxbuf = buf; +#else + rxbuf = buf+2; + nbytes-=2; +#endif + +#if defined(__linux__) + // hack: TAP device likes to create an ethernet header which has + // the same source and destination address FE:FD:00:00:00:00. + // Change the dest address to FE:FD:00:00:00:01. + if (!memcmp(&rxbuf[0], &rxbuf[6], 6)) { + rxbuf[5] = guest_macaddr[5]; + } +#endif + + if (nbytes>0) + BX_DEBUG(("tap read returned %d bytes", nbytes)); + if (nbytes<0) { + if (errno != EAGAIN) + BX_ERROR(("tap read error: %s", strerror(errno))); + return; + } +#if BX_ETH_TAP_LOGGING + if (nbytes > 0) { + BX_DEBUG(("receive packet length %u", nbytes)); + // dump raw bytes to a file, eventually dump in pcap format so that + // tcpdump -r FILE can interpret them for us. + int n = fwrite(rxbuf, nbytes, 1, rxlog); + if (n != 1) BX_ERROR(("fwrite to rxlog failed, nbytes = %d", nbytes)); + // dump packet in hex into an ascii log file + write_pktlog_txt(rxlog_txt, rxbuf, nbytes, 1); + // flush log so that we see the packets as they arrive w/o buffering + fflush(rxlog); + } +#endif + BX_DEBUG(("eth_tap: got packet: %d bytes, dst=%x:%x:%x:%x:%x:%x, src=%x:%x:%x:%x:%x:%x\n", nbytes, rxbuf[0], rxbuf[1], rxbuf[2], rxbuf[3], rxbuf[4], rxbuf[5], rxbuf[6], rxbuf[7], rxbuf[8], rxbuf[9], rxbuf[10], rxbuf[11])); + if (nbytes < 60) { + BX_INFO(("packet too short (%d), padding to 60", nbytes)); + nbytes = 60; + } + (*rxh)(netdev, rxbuf, nbytes); +} + +#endif /* if BX_NETWORKING && defined HAVE_ETHERTAP */ diff --git a/bochs/iodev/eth_tuntap.cc b/bochs/iodev/eth_tuntap.cc new file mode 100644 index 00000000..0ef42832 --- /dev/null +++ b/bochs/iodev/eth_tuntap.cc @@ -0,0 +1,381 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// eth_tuntap.cc - TUN/TAP interface by Renzo Davoli + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_NETWORKING && defined(HAVE_TUNTAP) + +#include "eth.h" + +#define DIFNAMSIZ (IFNAMSIZ*2) + +#define LOG_THIS netdev-> + +#include +#include +#include +#ifndef __APPLE__ +#include +#endif +#include +#include +#ifdef __linux__ +#include +#else +#include +#endif +#include +#include +#include +#ifdef __linux__ +#include +#include +#include +#else +#include +#if !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__NetBSD__) +#include +#endif +#endif +#include +#include +#include + +#define BX_ETH_TUNTAP_LOGGING 0 + +int tun_alloc(char *dev); + +// +// Define the class. This is private to this module +// +class bx_tuntap_pktmover_c : public eth_pktmover_c { +public: + bx_tuntap_pktmover_c(const char *netif, const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script); + void sendpkt(void *buf, unsigned io_len); +private: + int fd; + int rx_timer_index; + static void rx_timer_handler(void *); + void rx_timer (); + Bit8u guest_macaddr[6]; +#if BX_ETH_TUNTAP_LOGGING + FILE *txlog, *txlog_txt, *rxlog, *rxlog_txt; +#endif +}; + + +// +// Define the static class that registers the derived pktmover class, +// and allocates one on request. +// +class bx_tuntap_locator_c : public eth_locator_c { +public: + bx_tuntap_locator_c(void) : eth_locator_c("tuntap") {} +protected: + eth_pktmover_c *allocate(const char *netif, const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script) { + return (new bx_tuntap_pktmover_c(netif, macaddr, rxh, dev, script)); + } +} bx_tuntap_match; + + +// +// Define the methods for the bx_tuntap_pktmover derived class +// + +// the constructor +bx_tuntap_pktmover_c::bx_tuntap_pktmover_c(const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, + const char *script) +{ + int flags; + + this->netdev = dev; +#ifdef NEVERDEF + if (strncmp (netif, "tun", 3) != 0) { + BX_PANIC(("eth_tuntap: interface name (%s) must be tun", netif)); + } + char filename[BX_PATHNAME_LEN]; + sprintf(filename, "/dev/net/%s", netif); + + // check if the TUN/TAP devices is running, and turn on ARP. This is based + // on code from the Mac-On-Linux project. http://http://www.maconlinux.org/ + int sock = socket(AF_INET, SOCK_DGRAM, 0); + if (sock < 0) { + BX_PANIC(("socket creation: %s", strerror(errno))); + return; + } + struct ifreq ifr; + memset(&ifr, 0, sizeof(ifr)); + strncpy(ifr.ifr_name, netif, sizeof(ifr.ifr_name)); + if (ioctl(sock, SIOCGIFFLAGS, &ifr) < 0) { + BX_PANIC(("SIOCGIFFLAGS on %s: %s", netif, strerror (errno))); + close(sock); + return; + } + if (!(ifr.ifr_flags & IFF_RUNNING)) { + BX_PANIC(("%s device is not running", netif)); + close(sock); + return; + } + if ((ifr.ifr_flags & IFF_NOARP)) { + BX_INFO(("turn on ARP for %s device", netif)); + ifr.ifr_flags &= ~IFF_NOARP; + if (ioctl(sock, SIOCSIFFLAGS, &ifr) < 0) { + BX_PANIC(("SIOCSIFFLAGS: %s", strerror(errno))); + close(sock); + return; + } + } + close(sock); + + fd = open (filename, O_RDWR); +#endif + char intname[DIFNAMSIZ]; + strncpy(intname,netif, DIFNAMSIZ); + fd=tun_alloc(intname); + if (fd < 0) { + BX_PANIC(("open failed on %s: %s", netif, strerror (errno))); + return; + } + + /* set O_ASYNC flag so that we can poll with read() */ + if ((flags = fcntl(fd, F_GETFL)) < 0) { + BX_PANIC(("getflags on tun device: %s", strerror (errno))); + } + flags |= O_NONBLOCK; + if (fcntl(fd, F_SETFL, flags) < 0) { + BX_PANIC(("set tun device flags: %s", strerror (errno))); + } + + BX_INFO(("tuntap network driver: opened %s device", netif)); + + /* Execute the configuration script */ + if((script != NULL) && (strcmp(script, "") != 0) && (strcmp(script, "none") != 0)) + { + if (execute_script(this->netdev, script, intname) < 0) + BX_ERROR(("execute script '%s' on %s failed", script, intname)); + } + + // Start the rx poll + this->rx_timer_index = + bx_pc_system.register_timer(this, this->rx_timer_handler, 1000, + 1, 1, "eth_tuntap"); // continuous, active + this->rxh = rxh; + memcpy(&guest_macaddr[0], macaddr, 6); +#if BX_ETH_TUNTAP_LOGGING + // eventually Bryce wants txlog to dump in pcap format so that + // tcpdump -r FILE can read it and interpret packets. + txlog = fopen("ne2k-tx.log", "wb"); + if (!txlog) BX_PANIC(("open ne2k-tx.log failed")); + txlog_txt = fopen("ne2k-txdump.txt", "wb"); + if (!txlog_txt) BX_PANIC(("open ne2k-txdump.txt failed")); + fprintf(txlog_txt, "tuntap packetmover readable log file\n"); + fprintf(txlog_txt, "net IF = %s\n", netif); + fprintf(txlog_txt, "MAC address = "); + for (int i=0; i<6; i++) + fprintf(txlog_txt, "%02x%s", 0xff & macaddr[i], i<5?":" : ""); + fprintf(txlog_txt, "\n--\n"); + fflush(txlog_txt); + + rxlog = fopen("ne2k-rx.log", "wb"); + if (!rxlog) BX_PANIC(("open ne2k-rx.log failed")); + rxlog_txt = fopen("ne2k-rxdump.txt", "wb"); + if (!rxlog_txt) BX_PANIC(("open ne2k-rxdump.txt failed")); + fprintf(rxlog_txt, "tuntap packetmover readable log file\n"); + fprintf(rxlog_txt, "net IF = %s\n", netif); + fprintf(rxlog_txt, "MAC address = "); + for (int i=0; i<6; i++) + fprintf(rxlog_txt, "%02x%s", 0xff & macaddr[i], i<5?":" : ""); + fprintf(rxlog_txt, "\n--\n"); + fflush(rxlog_txt); + +#endif +} + +void bx_tuntap_pktmover_c::sendpkt(void *buf, unsigned io_len) +{ +#ifdef __APPLE__ //FIXME + unsigned int size = write (fd, (char*)buf+14, io_len-14); + if (size != io_len-14) { + BX_PANIC(("write on tuntap device: %s", strerror (errno))); + } else { + BX_DEBUG(("wrote %d bytes on tuntap - 14 bytes Ethernet header", io_len)); + } +#elif NEVERDEF + Bit8u txbuf[BX_PACKET_BUFSIZE]; + txbuf[0] = 0; + txbuf[1] = 0; + memcpy (txbuf+2, buf, io_len); + unsigned int size = write (fd, txbuf, io_len+2); + if (size != io_len+2) { + BX_PANIC(("write on tuntap device: %s", strerror (errno))); + } else { + BX_DEBUG(("wrote %d bytes + 2 byte pad on tuntap", io_len)); + } +#else + unsigned int size = write (fd, buf, io_len); + if (size != io_len) { + BX_PANIC(("write on tuntap device: %s", strerror (errno))); + } else { + BX_DEBUG(("wrote %d bytes on tuntap", io_len)); + } +#endif +#if BX_ETH_TUNTAP_LOGGING + BX_DEBUG(("sendpkt length %u", io_len)); + // dump raw bytes to a file, eventually dump in pcap format so that + // tcpdump -r FILE can interpret them for us. + int n = fwrite(buf, io_len, 1, txlog); + if (n != 1) BX_ERROR(("fwrite to txlog failed")); + // dump packet in hex into an ascii log file + write_pktlog_txt(txlog_txt, (const Bit8u *)buf, io_len, 0); + // flush log so that we see the packets as they arrive w/o buffering + fflush(txlog); +#endif +} + +void bx_tuntap_pktmover_c::rx_timer_handler (void *this_ptr) +{ + bx_tuntap_pktmover_c *class_ptr = (bx_tuntap_pktmover_c *) this_ptr; + class_ptr->rx_timer(); +} + +void bx_tuntap_pktmover_c::rx_timer() +{ + int nbytes; + Bit8u buf[BX_PACKET_BUFSIZE]; + Bit8u *rxbuf; + if (fd<0) return; + +#ifdef __APPLE__ //FIXME:hack + nbytes = 14; + bzero(buf, nbytes); + buf[0] = buf[6] = 0xFE; + buf[1] = buf[7] = 0xFD; + buf[12] = 8; + nbytes += read (fd, buf+nbytes, sizeof(buf)-nbytes); + rxbuf=buf; +#elif NEVERDEF + nbytes = read (fd, buf, sizeof(buf)); + // hack: discard first two bytes + rxbuf = buf+2; + nbytes-=2; +#else + nbytes = read (fd, buf, sizeof(buf)); + rxbuf=buf; +#endif + + // hack: TUN/TAP device likes to create an ethernet header which has + // the same source and destination address FE:FD:00:00:00:00. + // Change the dest address to FE:FD:00:00:00:01. + if (!memcmp(&rxbuf[0], &rxbuf[6], 6)) { + rxbuf[5] = guest_macaddr[5]; + } + +#ifdef __APPLE__ //FIXME:hack + if (nbytes>14) +#else + if (nbytes>0) +#endif + BX_DEBUG(("tuntap read returned %d bytes", nbytes)); +#ifdef __APPLE__ //FIXME:hack + if (nbytes<14) { +#else + if (nbytes<0) { +#endif + if (errno != EAGAIN) + BX_ERROR(("tuntap read error: %s", strerror(errno))); + return; + } +#if BX_ETH_TUNTAP_LOGGING + if (nbytes > 0) { + BX_DEBUG(("receive packet length %u", nbytes)); + // dump raw bytes to a file, eventually dump in pcap format so that + // tcpdump -r FILE can interpret them for us. + int n = fwrite(rxbuf, nbytes, 1, rxlog); + if (n != 1) BX_ERROR (("fwrite to rxlog failed")); + // dump packet in hex into an ascii log file + write_pktlog_txt(rxlog_txt, rxbuf, nbytes, 1); + // flush log so that we see the packets as they arrive w/o buffering + fflush(rxlog); + } +#endif + BX_DEBUG(("eth_tuntap: got packet: %d bytes, dst=%02x:%02x:%02x:%02x:%02x:%02x, src=%02x:%02x:%02x:%02x:%02x:%02x", nbytes, rxbuf[0], rxbuf[1], rxbuf[2], rxbuf[3], rxbuf[4], rxbuf[5], rxbuf[6], rxbuf[7], rxbuf[8], rxbuf[9], rxbuf[10], rxbuf[11])); + if (nbytes < 60) { + BX_INFO(("packet too short (%d), padding to 60", nbytes)); + nbytes = 60; + } + (*rxh)(this->netdev, rxbuf, nbytes); +} + +int tun_alloc(char *dev) +{ + struct ifreq ifr; + char *ifname; + int fd, err; + + // split name into device:ifname if applicable, to allow for opening + // persistent tuntap devices + for (ifname = dev; *ifname; ifname++) { + if (*ifname == ':') { + *(ifname++) = '\0'; + break; + } + } + if ((fd = open(dev, O_RDWR)) < 0) + return -1; +#ifdef __linux__ + memset(&ifr, 0, sizeof(ifr)); + + /* Flags: IFF_TUN - TUN device (no Ethernet headers) + * IFF_TAP - TAP device + * + * IFF_NO_PI - Do not provide packet information + */ + ifr.ifr_flags = IFF_TAP | IFF_NO_PI; + strncpy(ifr.ifr_name, ifname, IFNAMSIZ); + if ((err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0) { + close(fd); + return err; + } + strncpy(dev, ifr.ifr_name, IFNAMSIZ); + dev[IFNAMSIZ-1]=0; + + ioctl(fd, TUNSETNOCSUM, 1); +#endif + + return fd; +} + +#endif /* if BX_NETWORKING && defined HAVE_TUNTAP */ diff --git a/bochs/iodev/eth_vde.cc b/bochs/iodev/eth_vde.cc new file mode 100644 index 00000000..4e3d74ec --- /dev/null +++ b/bochs/iodev/eth_vde.cc @@ -0,0 +1,327 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2003 Renzo Davoli +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// eth_vde.cc - Virtual Distributed Ethernet interface by Renzo Davoli +// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_NETWORKING && defined(HAVE_VDE) + +#include "eth.h" + +#define LOG_THIS netdev-> + +#include +#include +#include +#include +#include +#include +#include +#if defined(__linux__) +#include +#include +#include +#elif BX_HAVE_NET_IF_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#define SWITCH_MAGIC 0xfeedface + +#define BX_ETH_VDE_LOGGING 0 + +int vde_alloc(char *dev,int *fdp,struct sockaddr_un *pdataout); + +// +// Define the class. This is private to this module +// +class bx_vde_pktmover_c : public eth_pktmover_c { +public: + bx_vde_pktmover_c(const char *netif, const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script); + void sendpkt(void *buf, unsigned io_len); +private: + int fd; + int rx_timer_index; + static void rx_timer_handler(void *); + void rx_timer(); + FILE *txlog, *txlog_txt, *rxlog, *rxlog_txt; + int fddata; + struct sockaddr_un dataout; +}; + + +// +// Define the static class that registers the derived pktmover class, +// and allocates one on request. +// +class bx_vde_locator_c : public eth_locator_c { +public: + bx_vde_locator_c(void) : eth_locator_c("vde") {} +protected: + eth_pktmover_c *allocate(const char *netif, const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script) { + return (new bx_vde_pktmover_c(netif, macaddr, rxh, dev, script)); + } +} bx_vde_match; + + +// +// Define the methods for the bx_vde_pktmover derived class +// + +// the constructor +bx_vde_pktmover_c::bx_vde_pktmover_c(const char *netif, + const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, + const char *script) +{ + int flags; + + this->netdev = dev; + //if (strncmp (netif, "vde", 3) != 0) { + // BX_PANIC (("eth_vde: interface name (%s) must be vde", netif)); + //} + char intname[IFNAMSIZ]; + if (netif == NULL || strcmp(netif,"") == 0) + strcpy(intname,"/tmp/vde.ctl"); + else + strcpy(intname,netif); + fd=vde_alloc(intname,&fddata,&dataout); + if (fd < 0) { + BX_PANIC(("open failed on %s: %s", netif, strerror (errno))); + return; + } + + /* set O_ASYNC flag so that we can poll with read() */ + if ((flags = fcntl(fd, F_GETFL)) < 0) { + BX_PANIC(("getflags on vde device: %s", strerror (errno))); + } + flags |= O_NONBLOCK; + if (fcntl(fd, F_SETFL, flags) < 0) { + BX_PANIC(("set vde device flags: %s", strerror (errno))); + } + + BX_INFO(("eth_vde: opened %s device", netif)); + + /* Execute the configuration script */ + if((script != NULL) && (strcmp(script, "") != 0) && (strcmp(script, "none") != 0)) + { + if (execute_script(this->netdev, script, intname) < 0) + BX_ERROR(("execute script '%s' on %s failed", script, intname)); + } + + // Start the rx poll + this->rx_timer_index = + bx_pc_system.register_timer(this, this->rx_timer_handler, 1000, + 1, 1, "eth_vde"); // continuous, active + this->rxh = rxh; +#if BX_ETH_VDE_LOGGING + // eventually Bryce wants txlog to dump in pcap format so that + // tcpdump -r FILE can read it and interpret packets. + txlog = fopen("ne2k-tx.log", "wb"); + if (!txlog) BX_PANIC(("open ne2k-tx.log failed")); + txlog_txt = fopen("ne2k-txdump.txt", "wb"); + if (!txlog_txt) BX_PANIC(("open ne2k-txdump.txt failed")); + fprintf(txlog_txt, "vde packetmover readable log file\n"); + fprintf(txlog_txt, "net IF = %s\n", netif); + fprintf(txlog_txt, "MAC address = "); + for (int i=0; i<6; i++) + fprintf(txlog_txt, "%02x%s", 0xff & macaddr[i], i<5?":" : ""); + fprintf(txlog_txt, "\n--\n"); + fflush(txlog_txt); + + rxlog = fopen("ne2k-rx.log", "wb"); + if (!rxlog) BX_PANIC(("open ne2k-rx.log failed")); + rxlog_txt = fopen("ne2k-rxdump.txt", "wb"); + if (!rxlog_txt) BX_PANIC(("open ne2k-rxdump.txt failed")); + fprintf(rxlog_txt, "vde packetmover readable log file\n"); + fprintf(rxlog_txt, "net IF = %s\n", netif); + fprintf(rxlog_txt, "MAC address = "); + for (int i=0; i<6; i++) + fprintf(rxlog_txt, "%02x%s", 0xff & macaddr[i], i<5?":" : ""); + fprintf(rxlog_txt, "\n--\n"); + fflush(rxlog_txt); + +#endif +} + +void bx_vde_pktmover_c::sendpkt(void *buf, unsigned io_len) +{ + unsigned int size; + //size = write (fd, buf, io_len); + //size=send(fd,buf,io_len,0); + size=sendto(fddata,buf,io_len,0,(struct sockaddr *) &dataout, sizeof(struct sockaddr_un)); + if (size != io_len) { + BX_PANIC(("write on vde device: %s", strerror (errno))); + } else { + BX_INFO(("wrote %d bytes on vde", io_len)); + } +#if BX_ETH_VDE_LOGGING + BX_DEBUG(("sendpkt length %u", io_len)); + // dump raw bytes to a file, eventually dump in pcap format so that + // tcpdump -r FILE can interpret them for us. + int n = fwrite(buf, io_len, 1, txlog); + if (n != 1) BX_ERROR(("fwrite to txlog failed")); + // dump packet in hex into an ascii log file + write_pktlog_txt(txlog_txt, (const Bit8u *)buf, io_len, 0); + // flush log so that we see the packets as they arrive w/o buffering + fflush(txlog); +#endif +} + +void bx_vde_pktmover_c::rx_timer_handler(void *this_ptr) +{ + bx_vde_pktmover_c *class_ptr = (bx_vde_pktmover_c *) this_ptr; + class_ptr->rx_timer(); +} + +void bx_vde_pktmover_c::rx_timer() +{ + int nbytes; + Bit8u buf[BX_PACKET_BUFSIZE]; + Bit8u *rxbuf; + struct sockaddr_un datain; + socklen_t datainsize; + + if (fd<0) return; + //nbytes = read (fd, buf, sizeof(buf)); + nbytes=recvfrom(fddata,buf,sizeof(buf),MSG_DONTWAIT|MSG_WAITALL,(struct sockaddr *) &datain, &datainsize); + + rxbuf=buf; + + if (nbytes>0) + BX_INFO(("vde read returned %d bytes", nbytes)); + if (nbytes<0) { + if (errno != EAGAIN) + BX_ERROR(("vde read error: %s", strerror(errno))); + return; + } +#if BX_ETH_VDE_LOGGING + if (nbytes > 0) { + BX_DEBUG(("receive packet length %u", nbytes)); + // dump raw bytes to a file, eventually dump in pcap format so that + // tcpdump -r FILE can interpret them for us. + int n = fwrite(rxbuf, nbytes, 1, rxlog); + if (n != 1) BX_ERROR(("fwrite to rxlog failed")); + // dump packet in hex into an ascii log file + write_pktlog_txt(rxlog_txt, rxbuf, nbytes, 1); + + // flush log so that we see the packets as they arrive w/o buffering + fflush(rxlog); + } +#endif + BX_DEBUG(("eth_vde: got packet: %d bytes, dst=%x:%x:%x:%x:%x:%x, src=%x:%x:%x:%x:%x:%x\n", nbytes, rxbuf[0], rxbuf[1], rxbuf[2], rxbuf[3], rxbuf[4], rxbuf[5], rxbuf[6], rxbuf[7], rxbuf[8], rxbuf[9], rxbuf[10], rxbuf[11])); + if (nbytes < 60) { + BX_INFO(("packet too short (%d), padding to 60", nbytes)); + nbytes = 60; + } + (*rxh)(this->netdev, rxbuf, nbytes); +} + +//enum request_type { REQ_NEW_CONTROL }; +#define REQ_NEW_CONTROL 0 + +struct request_v3 { + Bit32u magic; + Bit32u version; + //enum request_type type; + int type; + struct sockaddr_un sock; +}; + +static int send_fd(char *name, int fddata, struct sockaddr_un *datasock, int group) +{ + int pid = getpid(); + struct request_v3 req; + int fdctl; + struct sockaddr_un sock; + + if((fdctl = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { + perror("socket"); + return(-1); + } + sock.sun_family = AF_UNIX; + snprintf(sock.sun_path, sizeof(sock.sun_path), "%s", name); + if(connect(fdctl, (struct sockaddr *) &sock, sizeof(sock))) { + perror("connect"); + return(-1); + } + + req.magic=SWITCH_MAGIC; + req.version=3; + req.type=((int)REQ_NEW_CONTROL)+((group > 0)?((geteuid()<<8) + group) << 8:0); + req.sock.sun_family=AF_UNIX; + memset(req.sock.sun_path, 0, sizeof(req.sock.sun_path)); + sprintf(&req.sock.sun_path[1], "%5d", pid); + + if(bind(fddata, (struct sockaddr *) &req.sock, sizeof(req.sock)) < 0) { + perror("bind"); + return(-1); + } + if (send(fdctl,&req,sizeof(req),0) < 0) { + perror("send"); + return(-1); + } + if (recv(fdctl,datasock,sizeof(struct sockaddr_un),0) < 0) { + perror("recv"); + return(-1); + } + return fdctl; +} + +int vde_alloc(char *dev, int *fdp, struct sockaddr_un *pdataout) +{ + //struct ifreq ifr; + //int err; + int fd, fddata; + + if ((fddata = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) + return -1; + + if ((fd = send_fd(dev, fddata, pdataout, 0)) < 0) + return -1; + + //memset(&ifr, 0, sizeof(ifr)); + *fdp=fddata; + + return fd; +} + +#endif /* if BX_NETWORKING && defined HAVE_VDE */ diff --git a/bochs/iodev/eth_vnet.cc b/bochs/iodev/eth_vnet.cc new file mode 100644 index 00000000..54013bc4 --- /dev/null +++ b/bochs/iodev/eth_vnet.cc @@ -0,0 +1,1422 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// virtual Ethernet locator +// +// An implementation of ARP, ping(ICMP-echo), DHCP and read/write TFTP. +// Virtual host acts as a DHCP server for guest. +// There are no connections between the virtual host and real ethernets. +// +// Virtual host name: vnet +// Virtual host IP: 192.168.10.1 +// Guest IP: 192.168.10.2 +// Guest netmask: 255.255.255.0 +// Guest broadcast: 192.168.10.255 +// TFTP server uses ethdev value for the root directory and doesn't overwrite files + +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_NETWORKING + +#include "eth.h" + +#define LOG_THIS netdev-> + +#define BX_ETH_VNET_LOGGING 1 +#define BX_ETH_VNET_PCAP_LOGGING 0 + +#if BX_ETH_VNET_PCAP_LOGGING +#include +#endif + +///////////////////////////////////////////////////////////////////////// +// handler to send/receive packets +///////////////////////////////////////////////////////////////////////// + +static const Bit8u default_host_ipv4addr[4] = {192,168,10,1}; +static const Bit8u subnetmask_ipv4addr[4] = {0xff,0xff,0xff,0x00}; +static const Bit8u default_guest_ipv4addr[4] = {192,168,10,2}; +static const Bit8u broadcast_ipv4addr[3][4] = +{ + { 0, 0, 0, 0}, + {255,255,255,255}, + {192,168, 10,255}, +}; + +#define ICMP_ECHO_PACKET_MAX 128 +#define LAYER4_LISTEN_MAX 128 +#define DEFAULT_LEASE_TIME 28800 + +static Bit8u packet_buffer[BX_PACKET_BUFSIZE]; +static unsigned packet_len; + +typedef void (*layer4_handler_t)( + void *this_ptr, + const Bit8u *ipheader, + unsigned ipheader_len, + unsigned sourceport, + unsigned targetport, + const Bit8u *data, + unsigned data_len + ); + +#define INET_PORT_FTPDATA 20 +#define INET_PORT_FTP 21 +#define INET_PORT_TIME 37 +#define INET_PORT_NAME 42 +#define INET_PORT_DOMAIN 53 +#define INET_PORT_BOOTP_SERVER 67 +#define INET_PORT_BOOTP_CLIENT 68 +#define INET_PORT_HTTP 80 +#define INET_PORT_NTP 123 + +// TFTP server support by EaseWay + +#define INET_PORT_TFTP_SERVER 69 + +#define TFTP_RRQ 1 +#define TFTP_WRQ 2 +#define TFTP_DATA 3 +#define TFTP_ACK 4 +#define TFTP_ERROR 5 +#define TFTP_OPTACK 6 + +#define TFTP_BUFFER_SIZE 512 + +#define BOOTREQUEST 1 +#define BOOTREPLY 2 + +#define BOOTPOPT_PADDING 0 +#define BOOTPOPT_END 255 +#define BOOTPOPT_SUBNETMASK 1 +#define BOOTPOPT_TIMEOFFSET 2 +#define BOOTPOPT_ROUTER_OPTION 3 +#define BOOTPOPT_DOMAIN_NAMESERVER 6 +#define BOOTPOPT_HOST_NAME 12 +#define BOOTPOPT_DOMAIN_NAME 15 +#define BOOTPOPT_MAX_DATAGRAM_SIZE 22 +#define BOOTPOPT_DEFAULT_IP_TTL 23 +#define BOOTPOPT_BROADCAST_ADDRESS 28 +#define BOOTPOPT_ARPCACHE_TIMEOUT 35 +#define BOOTPOPT_DEFAULT_TCP_TTL 37 +#define BOOTPOPT_NTP_SERVER 42 +#define BOOTPOPT_NETBIOS_NAMESERVER 44 +#define BOOTPOPT_X_FONTSERVER 48 +#define BOOTPOPT_REQUESTED_IP_ADDRESS 50 +#define BOOTPOPT_IP_ADDRESS_LEASE_TIME 51 +#define BOOTPOPT_OPTION_OVRLOAD 52 +#define BOOTPOPT_DHCP_MESSAGETYPE 53 +#define BOOTPOPT_SERVER_IDENTIFIER 54 +#define BOOTPOPT_PARAMETER_REQUEST_LIST 55 +#define BOOTPOPT_MAX_DHCP_MESSAGE_SIZE 57 +#define BOOTPOPT_RENEWAL_TIME 58 +#define BOOTPOPT_REBINDING_TIME 59 +#define BOOTPOPT_CLASS_IDENTIFIER 60 +#define BOOTPOPT_CLIENT_IDENTIFIER 61 + +#define DHCPDISCOVER 1 +#define DHCPOFFER 2 +#define DHCPREQUEST 3 +#define DHCPDECLINE 4 +#define DHCPACK 5 +#define DHCPNAK 6 +#define DHCPRELEASE 7 +#define DHCPINFORM 8 + +class bx_vnet_pktmover_c : public eth_pktmover_c { +public: + bx_vnet_pktmover_c(); + void pktmover_init( + const char *netif, const char *macaddr, + eth_rx_handler_t rxh, bx_devmodel_c *dev, const char *script); + void sendpkt(void *buf, unsigned io_len); +private: + void guest_to_host(const Bit8u *buf, unsigned io_len); + void host_to_guest(Bit8u *buf, unsigned io_len); + void process_arp(const Bit8u *buf, unsigned io_len); + void host_to_guest_arp(Bit8u *buf, unsigned io_len); + void process_ipv4(const Bit8u *buf, unsigned io_len); + void host_to_guest_ipv4(Bit8u *buf, unsigned io_len); + + layer4_handler_t get_layer4_handler( + unsigned ipprotocol, unsigned port); + bx_bool register_layer4_handler( + unsigned ipprotocol, unsigned port,layer4_handler_t func); + bx_bool unregister_layer4_handler( + unsigned ipprotocol, unsigned port); + + void process_icmpipv4( + const Bit8u *ipheader, unsigned ipheader_len, + const Bit8u *l4pkt, unsigned l4pkt_len); + void process_tcpipv4( + const Bit8u *ipheader, unsigned ipheader_len, + const Bit8u *l4pkt, unsigned l4pkt_len); + void process_udpipv4( + const Bit8u *ipheader, unsigned ipheader_len, + const Bit8u *l4pkt, unsigned l4pkt_len); + void host_to_guest_udpipv4_packet( + unsigned target_port, unsigned source_port, + const Bit8u *udpdata, unsigned udpdata_len); + + void process_icmpipv4_echo( + const Bit8u *ipheader, unsigned ipheader_len, + const Bit8u *l4pkt, unsigned l4pkt_len); + + static void udpipv4_dhcp_handler( + void *this_ptr, + const Bit8u *ipheader, unsigned ipheader_len, + unsigned sourceport, unsigned targetport, + const Bit8u *data, unsigned data_len); + void udpipv4_dhcp_handler_ns( + const Bit8u *ipheader, unsigned ipheader_len, + unsigned sourceport, unsigned targetport, + const Bit8u *data, unsigned data_len); + static void udpipv4_tftp_handler( + void *this_ptr, + const Bit8u *ipheader, unsigned ipheader_len, + unsigned sourceport, unsigned targetport, + const Bit8u *data, unsigned data_len); + void udpipv4_tftp_handler_ns( + const Bit8u *ipheader, unsigned ipheader_len, + unsigned sourceport, unsigned targetport, + const Bit8u *data, unsigned data_len); + void tftp_send_error( + Bit8u *buffer, + unsigned sourceport, unsigned targetport, + unsigned code, const char *msg); + void tftp_send_data( + Bit8u *buffer, + unsigned sourceport, unsigned targetport, + unsigned block_nr); + void tftp_send_ack( + Bit8u *buffer, + unsigned sourceport, unsigned targetport, + unsigned block_nr); + void tftp_send_optack( + Bit8u *buffer, + unsigned sourceport, unsigned targetport, + size_t tsize_option, unsigned blksize_option); + + char tftp_filename[BX_PATHNAME_LEN]; + char tftp_rootdir[BX_PATHNAME_LEN]; + bx_bool tftp_write; + Bit16u tftp_tid; + + Bit8u host_macaddr[6]; + Bit8u guest_macaddr[6]; + Bit8u host_ipv4addr[4]; + Bit8u guest_ipv4addr[4]; + + struct { + unsigned ipprotocol; + unsigned port; + layer4_handler_t func; + } l4data[LAYER4_LISTEN_MAX]; + unsigned l4data_used; + + static void rx_timer_handler(void *); + void rx_timer(void); + int rx_timer_index; + unsigned tx_time; + +#if BX_ETH_VNET_LOGGING + FILE *pktlog_txt; +#endif // BX_ETH_VNET_LOGGING +#if BX_ETH_VNET_PCAP_LOGGING + pcap_t *pcapp; + pcap_dumper_t *pktlog_pcap; + struct pcap_pkthdr pcaphdr; +#endif // BX_ETH_VNET_PCAP_LOGGING +}; + +class bx_vnet_locator_c : public eth_locator_c { +public: + bx_vnet_locator_c(void) : eth_locator_c("vnet") {} +protected: + eth_pktmover_c *allocate( + const char *netif, const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script) { + bx_vnet_pktmover_c *pktmover; + pktmover = new bx_vnet_pktmover_c(); + pktmover->pktmover_init(netif, macaddr, rxh, dev, script); + return pktmover; + } +} bx_vnet_match; + +static void put_net2(Bit8u *buf,Bit16u data) +{ + *buf = (Bit8u)(data >> 8); + *(buf+1) = (Bit8u)(data & 0xff); +} + +static void put_net4(Bit8u *buf,Bit32u data) +{ + *buf = (Bit8u)((data >> 24) & 0xff); + *(buf+1) = (Bit8u)((data >> 16) & 0xff); + *(buf+2) = (Bit8u)((data >> 8) & 0xff); + *(buf+3) = (Bit8u)(data & 0xff); +} + +static Bit16u get_net2(const Bit8u *buf) +{ + return (((Bit16u)*buf) << 8) | + ((Bit16u)*(buf+1)); +} + +static Bit32u get_net4(const Bit8u *buf) +{ + return (((Bit32u)*buf) << 24) | + (((Bit32u)*(buf+1)) << 16) | + (((Bit32u)*(buf+2)) << 8) | + ((Bit32u)*(buf+3)); +} + +static Bit16u ip_checksum(const Bit8u *buf, unsigned buf_len) +{ + Bit32u sum = 0; + unsigned n; + + for (n = 0; n < buf_len; n++) { + if (n & 1) { + sum += (Bit32u)(*buf++); + } else { + sum += (Bit32u)(*buf++) << 8; + } + } + while (sum > 0xffff) { + sum = (sum >> 16) + (sum & 0xffff); + } + + return (Bit16u)sum; +} + + +// duplicate the part of tftp_send_data() that constructs the filename +// but ignore errors since tftp_send_data() will respond for us +static size_t get_file_size(bx_devmodel_c *netdev, const char *tpath, const char *tname) +{ + struct stat stbuf; + char path[BX_PATHNAME_LEN]; + + if (strlen(tname) == 0) + return 0; + + if ((strlen(tpath) + strlen(tname)) > BX_PATHNAME_LEN) + return 0; + + sprintf(path, "%s/%s", tpath, tname); + if (stat(path, &stbuf) < 0) + return 0; + + BX_INFO(("tftp filesize: %lu", (unsigned long)stbuf.st_size)); + return (size_t)stbuf.st_size; +} + + +bx_vnet_pktmover_c::bx_vnet_pktmover_c() +{ +} + +void bx_vnet_pktmover_c::pktmover_init( + const char *netif, const char *macaddr, + eth_rx_handler_t rxh, bx_devmodel_c *dev, const char *script) +{ + this->netdev = dev; + BX_INFO(("vnet network driver")); + this->rxh = rxh; + strcpy(this->tftp_rootdir, netif); + this->tftp_tid = 0; + this->tftp_write = 0; + + memcpy(&host_macaddr[0], macaddr, 6); + memcpy(&guest_macaddr[0], macaddr, 6); + host_macaddr[5] = (host_macaddr[5] & (~0x01)) ^ 0x02; + + memcpy(&host_ipv4addr[0], &default_host_ipv4addr[0], 4); + memcpy(&guest_ipv4addr[0], &broadcast_ipv4addr[1][0], 4); + + l4data_used = 0; + + register_layer4_handler(0x11,INET_PORT_BOOTP_SERVER,udpipv4_dhcp_handler); + register_layer4_handler(0x11,INET_PORT_TFTP_SERVER,udpipv4_tftp_handler); + + this->rx_timer_index = + bx_pc_system.register_timer(this, this->rx_timer_handler, 1000, + 0, 0, "eth_vnet"); + +#if BX_ETH_VNET_LOGGING + pktlog_txt = fopen("ne2k-pktlog.txt", "wb"); + if (!pktlog_txt) BX_PANIC(("ne2k-pktlog.txt failed")); + fprintf(pktlog_txt, "vnet packetmover readable log file\n"); + fprintf(pktlog_txt, "TFTP root = %s\n", netif); + fprintf(pktlog_txt, "host MAC address = "); + int i; + for (i=0; i<6; i++) + fprintf(pktlog_txt, "%02x%s", 0xff & host_macaddr[i], i<5?":" : "\n"); + fprintf(pktlog_txt, "guest MAC address = "); + for (i=0; i<6; i++) + fprintf(pktlog_txt, "%02x%s", 0xff & guest_macaddr[i], i<5?":" : "\n"); + fprintf(pktlog_txt, "--\n"); + fflush(pktlog_txt); +#endif +#if BX_ETH_VNET_PCAP_LOGGING + pcapp = pcap_open_dead(DLT_EN10MB, BX_PACKET_BUFSIZE); + pktlog_pcap = pcap_dump_open(pcapp, "ne2k-pktlog.pcap"); + if (pktlog_pcap == NULL) BX_PANIC(("ne2k-pktlog.pcap failed")); +#endif +} + +void bx_vnet_pktmover_c::sendpkt(void *buf, unsigned io_len) +{ + guest_to_host((const Bit8u *)buf,io_len); +} + +void bx_vnet_pktmover_c::guest_to_host(const Bit8u *buf, unsigned io_len) +{ +#if BX_ETH_VNET_LOGGING + write_pktlog_txt(pktlog_txt, buf, io_len, 0); +#endif +#if BX_ETH_VNET_PCAP_LOGGING + if (pktlog_pcap && !ferror((FILE *)pktlog_pcap)) { + Bit64u time = bx_pc_system.time_usec(); + pcaphdr.ts.tv_usec = time % 1000000; + pcaphdr.ts.tv_sec = time / 1000000; + pcaphdr.caplen = io_len; + pcaphdr.len = io_len; + pcap_dump((u_char *)pktlog_pcap, &pcaphdr, buf); + fflush((FILE *)pktlog_pcap); + } +#endif + + this->tx_time = (64 + 96 + 4 * 8 + io_len * 8) / 10; + if ((io_len >= 14) && + (!memcmp(&buf[6],&this->guest_macaddr[0],6)) && + (!memcmp(&buf[0],&this->host_macaddr[0],6) || + !memcmp(&buf[0],&broadcast_macaddr[0],6))) { + switch (get_net2(&buf[12])) { + case 0x0800: // IPv4. + process_ipv4(buf, io_len); + break; + case 0x0806: // ARP. + process_arp(buf, io_len); + break; + default: // unknown packet type. + break; + } + } +} + +// The receive poll process +void bx_vnet_pktmover_c::rx_timer_handler(void *this_ptr) +{ + bx_vnet_pktmover_c *class_ptr = (bx_vnet_pktmover_c *) this_ptr; + + class_ptr->rx_timer(); +} + +void bx_vnet_pktmover_c::rx_timer(void) +{ + this->rxh(this->netdev, (void *)packet_buffer, packet_len); +#if BX_ETH_VNET_LOGGING + write_pktlog_txt(pktlog_txt, packet_buffer, packet_len, 1); +#endif +#if BX_ETH_VNET_PCAP_LOGGING + if (pktlog_pcap && !ferror((FILE *)pktlog_pcap)) { + Bit64u time = bx_pc_system.time_usec(); + pcaphdr.ts.tv_usec = time % 1000000; + pcaphdr.ts.tv_sec = time / 1000000; + pcaphdr.caplen = packet_len; + pcaphdr.len = packet_len; + pcap_dump((u_char *)pktlog_pcap, &pcaphdr, packet_buffer); + fflush((FILE *)pktlog_pcap); + } +#endif +} + +void bx_vnet_pktmover_c::host_to_guest(Bit8u *buf, unsigned io_len) +{ + Bit8u localbuf[60]; + + if (io_len < 14) { + BX_PANIC(("host_to_guest: io_len < 14!")); + return; + } + + if (io_len < 60) { + memcpy(&localbuf[0],&buf[0],io_len); + memset(&localbuf[io_len],0,60-io_len); + buf=localbuf; + io_len=60; + } + + packet_len = io_len; + memcpy(&packet_buffer, &buf[0], io_len); + unsigned rx_time = (64 + 96 + 4 * 8 + io_len * 8) / 10; + bx_pc_system.activate_timer(this->rx_timer_index, this->tx_time + rx_time + 100, 0); +} + +///////////////////////////////////////////////////////////////////////// +// ARP +///////////////////////////////////////////////////////////////////////// + +void bx_vnet_pktmover_c::process_arp(const Bit8u *buf, unsigned io_len) +{ + unsigned opcode; + unsigned protocol; + Bit8u replybuf[60]; + + if (io_len < 22) return; + if (io_len < (unsigned)(22+buf[18]*2+buf[19]*2)) return; + // hardware:Ethernet + if (buf[14] != 0x00 || buf[15] != 0x01 || buf[18] != 0x06) return; + opcode = get_net2(&buf[20]); + protocol = get_net2(&buf[16]); + memset(&replybuf[0],0,60); + + // protocol + switch (protocol) { + case 0x0800: // IPv4 + if (buf[19] == 0x04) { + switch (opcode) { + case 0x0001: // ARP REQUEST + if (!memcmp(&buf[22],&this->guest_macaddr[0],6)) { + memcpy(&this->guest_ipv4addr[0],&buf[28],4); + if (!memcmp(&buf[38],&this->host_ipv4addr[0],4)) { + memcpy(&replybuf[14],&buf[14],6); + replybuf[20]=0x00; + replybuf[21]=0x02; + memcpy(&replybuf[22],&this->host_macaddr[0],6); + memcpy(&replybuf[28],&this->host_ipv4addr[0],4); + memcpy(&replybuf[32],&this->guest_macaddr[0],6); + memcpy(&replybuf[38],&this->guest_ipv4addr[0],4); + + host_to_guest_arp(replybuf,60); + } + } + break; + case 0x0002: // ARP REPLY + BX_INFO(("unexpected ARP REPLY")); + break; + case 0x0003: // RARP REQUEST + BX_ERROR(("RARP is not implemented")); + break; + case 0x0004: // RARP REPLY + BX_INFO(("unexpected RARP REPLY")); + break; + default: + BX_INFO(("arp: unknown ARP opcode %04x",opcode)); + break; + } + } + else + { + BX_INFO(("arp: unknown address length %u",(unsigned)buf[19])); + } + break; + default: + BX_INFO(("arp: unknown protocol 0x%04x",protocol)); + break; + } +} + +void bx_vnet_pktmover_c::host_to_guest_arp(Bit8u *buf, unsigned io_len) +{ + memcpy(&buf[0],&this->guest_macaddr[0],6); + memcpy(&buf[6],&this->host_macaddr[0],6); + buf[12]=0x08; + buf[13]=0x06; + host_to_guest(buf,io_len); +} + +///////////////////////////////////////////////////////////////////////// +// IPv4 +///////////////////////////////////////////////////////////////////////// + +void bx_vnet_pktmover_c::process_ipv4(const Bit8u *buf, unsigned io_len) +{ + unsigned total_len; + unsigned packet_id; + unsigned fragment_flags; + unsigned fragment_offset; + unsigned ipproto; + unsigned l3header_len; + const Bit8u *l4pkt; + unsigned l4pkt_len; + + if (io_len < (14U+20U)) { + BX_INFO(("ip packet - too small packet")); + return; + } + if ((buf[14+0] & 0xf0) != 0x40) { + BX_INFO(("ipv%u packet - not implemented",((unsigned)buf[14+0] >> 4))); + return; + } + l3header_len = ((unsigned)(buf[14+0] & 0x0f) << 2); + if (l3header_len != 20) { + BX_ERROR(("ip: option header is not implemented")); + return; + } + if (io_len < (14U+l3header_len)) return; + if (ip_checksum(&buf[14],l3header_len) != (Bit16u)0xffff) { + BX_INFO(("ip: invalid checksum")); + return; + } + + total_len = get_net2(&buf[14+2]); + // FIXED By EaseWay + // Ignore this check to tolerant some cases + //if (io_len > (14U+total_len)) return; + + if (memcmp(&buf[14+16],host_ipv4addr,4) && + memcmp(&buf[14+16],broadcast_ipv4addr[0],4) && + memcmp(&buf[14+16],broadcast_ipv4addr[1],4) && + memcmp(&buf[14+16],broadcast_ipv4addr[2],4)) + { + BX_INFO(("target IP address %u.%u.%u.%u is unknown", + (unsigned)buf[14+16],(unsigned)buf[14+17], + (unsigned)buf[14+18],(unsigned)buf[14+19])); + return; + } + + packet_id = get_net2(&buf[14+4]); + fragment_flags = (unsigned)buf[14+6] >> 5; + fragment_offset = ((unsigned)get_net2(&buf[14+6]) & 0x1fff) << 3; + ipproto = buf[14+9]; + + if ((fragment_flags & 0x1) || (fragment_offset != 0)) { + BX_INFO(("ignore fragmented packet!")); + return; + } else { + l4pkt = &buf[14 + l3header_len]; + l4pkt_len = total_len - l3header_len; + } + + switch (ipproto) { + case 0x01: // ICMP + process_icmpipv4(&buf[14],l3header_len,l4pkt,l4pkt_len); + break; + case 0x06: // TCP + process_tcpipv4(&buf[14],l3header_len,l4pkt,l4pkt_len); + break; + case 0x11: // UDP + process_udpipv4(&buf[14],l3header_len,l4pkt,l4pkt_len); + break; + default: + BX_INFO(("unknown IP protocol %02x",ipproto)); + break; + } +} + +void bx_vnet_pktmover_c::host_to_guest_ipv4(Bit8u *buf, unsigned io_len) +{ + unsigned l3header_len; + + memcpy(&buf[0],&this->guest_macaddr[0],6); + memcpy(&buf[6],&this->host_macaddr[0],6); + buf[12]=0x08; + buf[13]=0x00; + buf[14+0] = (buf[14+0] & 0x0f) | 0x40; + l3header_len = ((unsigned)(buf[14+0] & 0x0f) << 2); + memcpy(&buf[14+12],&this->host_ipv4addr[0],4); + memcpy(&buf[14+16],&this->guest_ipv4addr[0],4); + put_net2(&buf[14+10], 0); + put_net2(&buf[14+10], ip_checksum(&buf[14],l3header_len) ^ (Bit16u)0xffff); + + host_to_guest(buf,io_len); +} + +layer4_handler_t bx_vnet_pktmover_c::get_layer4_handler( + unsigned ipprotocol, unsigned port) +{ + unsigned n; + + for (n = 0; n < l4data_used; n++) { + if (l4data[n].ipprotocol == ipprotocol && l4data[n].port == port) + return l4data[n].func; + } + + return (layer4_handler_t)NULL; +} + +bx_bool bx_vnet_pktmover_c::register_layer4_handler( + unsigned ipprotocol, unsigned port,layer4_handler_t func) +{ + if (get_layer4_handler(ipprotocol,port) != (layer4_handler_t)NULL) { + BX_INFO(("IP protocol 0x%02x port %u is already in use", + ipprotocol,port)); + return false; + } + + unsigned n; + + for (n = 0; n < l4data_used; n++) { + if (l4data[n].func == (layer4_handler_t)NULL) { + break; + } + } + + if (n == l4data_used) { + if (n >= LAYER4_LISTEN_MAX) { + BX_ERROR(("vnet: LAYER4_LISTEN_MAX is too small")); + return false; + } + l4data_used++; + } + + l4data[n].ipprotocol = ipprotocol; + l4data[n].port = port; + l4data[n].func = func; + + return true; +} + +bx_bool bx_vnet_pktmover_c::unregister_layer4_handler( + unsigned ipprotocol, unsigned port) +{ + unsigned n; + + for (n = 0; n < l4data_used; n++) { + if (l4data[n].ipprotocol == ipprotocol && l4data[n].port == port) { + l4data[n].func = (layer4_handler_t)NULL; + return true; + } + } + + BX_ERROR(("IP protocol 0x%02x port %u is not registered", + ipprotocol,port)); + return false; +} + +void bx_vnet_pktmover_c::process_icmpipv4( + const Bit8u *ipheader, unsigned ipheader_len, + const Bit8u *l4pkt, unsigned l4pkt_len) +{ + unsigned icmptype; + unsigned icmpcode; + + if (l4pkt_len < 8) return; + icmptype = l4pkt[0]; + icmpcode = l4pkt[1]; + if (ip_checksum(l4pkt,l4pkt_len) != (Bit16u)0xffff) { + BX_INFO(("icmp: invalid checksum")); + return; + } + + switch (icmptype) { + case 0x08: // ECHO + if (icmpcode == 0) { + process_icmpipv4_echo(ipheader,ipheader_len,l4pkt,l4pkt_len); + } + break; + default: + BX_INFO(("unhandled icmp packet: type=%u code=%u", + icmptype, icmpcode)); + break; + } +} + +void bx_vnet_pktmover_c::process_tcpipv4( + const Bit8u *ipheader, unsigned ipheader_len, + const Bit8u *l4pkt, unsigned l4pkt_len) +{ + if (l4pkt_len < 20) return; + + BX_INFO(("tcp packet - not implemented")); +} + +void bx_vnet_pktmover_c::process_udpipv4( + const Bit8u *ipheader, unsigned ipheader_len, + const Bit8u *l4pkt, unsigned l4pkt_len) +{ + unsigned udp_targetport; + unsigned udp_sourceport; + unsigned udp_len; + layer4_handler_t func; + + if (l4pkt_len < 8) return; + udp_sourceport = get_net2(&l4pkt[0]); + udp_targetport = get_net2(&l4pkt[2]); + udp_len = get_net2(&l4pkt[4]); + + func = get_layer4_handler(0x11,udp_targetport); + if (func != (layer4_handler_t)NULL) { + (*func)((void *)this,ipheader,ipheader_len, + udp_sourceport,udp_targetport,&l4pkt[8],l4pkt_len-8); + } else { + BX_INFO(("udp - unhandled port %u",udp_targetport)); + } +} + +void bx_vnet_pktmover_c::host_to_guest_udpipv4_packet( + unsigned target_port, unsigned source_port, + const Bit8u *udpdata, unsigned udpdata_len) +{ + Bit8u ipbuf[BX_PACKET_BUFSIZE]; + + if ((udpdata_len + 42U) > BX_PACKET_BUFSIZE) { + BX_PANIC(("generated udp data is too long")); + return; + } + + // udp pseudo-header + ipbuf[34U-12U]=0; + ipbuf[34U-11U]=0x11; // UDP + put_net2(&ipbuf[34U-10U],8U+udpdata_len); + memcpy(&ipbuf[34U-8U],host_ipv4addr,4); + memcpy(&ipbuf[34U-4U],guest_ipv4addr,4); + // udp header + put_net2(&ipbuf[34U+0],source_port); + put_net2(&ipbuf[34U+2],target_port); + put_net2(&ipbuf[34U+4],8U+udpdata_len); + put_net2(&ipbuf[34U+6],0); + memcpy(&ipbuf[42U],udpdata,udpdata_len); + put_net2(&ipbuf[34U+6], ip_checksum(&ipbuf[34U-12U],12U+8U+udpdata_len) ^ (Bit16u)0xffff); + // ip header + memset(&ipbuf[14U],0,20U); + ipbuf[14U+0] = 0x45; + ipbuf[14U+1] = 0x00; + put_net2(&ipbuf[14U+2],20U+8U+udpdata_len); + put_net2(&ipbuf[14U+4],1); + ipbuf[14U+6] = 0x00; + ipbuf[14U+7] = 0x00; + ipbuf[14U+8] = 0x07; // TTL + ipbuf[14U+9] = 0x11; // UDP + + host_to_guest_ipv4(ipbuf,udpdata_len + 42U); +} + +///////////////////////////////////////////////////////////////////////// +// ICMP/IPv4 +///////////////////////////////////////////////////////////////////////// + +void bx_vnet_pktmover_c::process_icmpipv4_echo( + const Bit8u *ipheader, unsigned ipheader_len, + const Bit8u *l4pkt, unsigned l4pkt_len) +{ + Bit8u replybuf[ICMP_ECHO_PACKET_MAX]; + + if ((14U+ipheader_len+l4pkt_len) > ICMP_ECHO_PACKET_MAX) { + BX_ERROR(("icmp echo: size of an echo packet is too long")); + return; + } + + memcpy(&replybuf[14],ipheader,ipheader_len); + memcpy(&replybuf[14+ipheader_len],l4pkt,l4pkt_len); + + replybuf[14+ipheader_len+0] = 0x00; // echo reply + put_net2(&replybuf[14+ipheader_len+2],0); + put_net2(&replybuf[14+ipheader_len+2], + ip_checksum(&replybuf[14+ipheader_len],l4pkt_len) ^ (Bit16u)0xffff); + + host_to_guest_ipv4(replybuf,14U+ipheader_len+l4pkt_len); +} + +///////////////////////////////////////////////////////////////////////// +// DHCP/UDP/IPv4 +///////////////////////////////////////////////////////////////////////// + +void bx_vnet_pktmover_c::udpipv4_dhcp_handler( + void *this_ptr, + const Bit8u *ipheader, unsigned ipheader_len, + unsigned sourceport, unsigned targetport, + const Bit8u *data, unsigned data_len) +{ + ((bx_vnet_pktmover_c *)this_ptr)->udpipv4_dhcp_handler_ns( + ipheader,ipheader_len,sourceport,targetport,data,data_len); +} + +void bx_vnet_pktmover_c::udpipv4_dhcp_handler_ns( + const Bit8u *ipheader, unsigned ipheader_len, + unsigned sourceport, unsigned targetport, + const Bit8u *data, unsigned data_len) +{ + const Bit8u *opts; + unsigned opts_len; + unsigned extcode; + unsigned extlen; + const Bit8u *extdata; + unsigned dhcpmsgtype = 0; + bx_bool found_serverid = false; + bx_bool found_leasetime = false; + bx_bool found_guest_ipaddr = false; + bx_bool found_host_name = false; + Bit32u leasetime = BX_MAX_BIT32U; + const Bit8u *dhcpreqparams = NULL; + unsigned dhcpreqparams_len = 0; + Bit8u dhcpreqparam_default[8]; + bx_bool dhcpreqparam_default_validflag = false; + unsigned dhcpreqparams_default_len = 0; + Bit8u *replyopts; + Bit8u replybuf[576]; + char *hostname = NULL; + unsigned hostname_len = 0; + + if (data_len < (236U+4U)) return; + if (data[0] != BOOTREQUEST) return; + if (data[1] != 1 || data[2] != 6) return; + if (memcmp(&data[28U],guest_macaddr,6)) return; + if (data[236] != 0x63 || data[237] != 0x82 || + data[238] != 0x53 || data[239] != 0x63) return; + + opts = &data[240]; + opts_len = data_len - 240U; + + while (1) { + if (opts_len < 1) { + BX_ERROR(("dhcp: invalid request")); + return; + } + extcode = *opts++; + opts_len--; + + if (extcode == BOOTPOPT_PADDING) continue; + if (extcode == BOOTPOPT_END) break; + if (opts_len < 1) { + BX_ERROR(("dhcp: invalid request")); + return; + } + extlen = *opts++; + opts_len--; + if (opts_len < extlen) { + BX_ERROR(("dhcp: invalid request")); + return; + } + extdata = opts; + opts += extlen; + opts_len -= extlen; + + switch (extcode) + { + case BOOTPOPT_DHCP_MESSAGETYPE: + if (extlen != 1) + break; + dhcpmsgtype = *extdata; + break; + case BOOTPOPT_PARAMETER_REQUEST_LIST: + if (extlen < 1) + break; + dhcpreqparams = extdata; + dhcpreqparams_len = extlen; + break; + case BOOTPOPT_SERVER_IDENTIFIER: + if (extlen != 4) + break; + if (memcmp(extdata,host_ipv4addr,4)) { + BX_INFO(("dhcp: request to another server")); + return; + } + found_serverid = true; + break; + case BOOTPOPT_IP_ADDRESS_LEASE_TIME: + if (extlen != 4) + break; + leasetime = get_net4(&extdata[0]); + found_leasetime = true; + break; + case BOOTPOPT_REQUESTED_IP_ADDRESS: + if (extlen != 4) + break; + if (!memcmp(extdata,default_guest_ipv4addr,4)) { + found_guest_ipaddr = true; + memcpy(guest_ipv4addr,default_guest_ipv4addr,4); + } + break; + case BOOTPOPT_HOST_NAME: + if (extlen < 1) + break; + hostname = (char*)malloc(extlen); + memcpy(hostname, extdata, extlen); + hostname_len = extlen; + found_host_name = true; + break; + default: + BX_ERROR(("extcode %d not supported yet", extcode)); + break; + } + } + + memset(&dhcpreqparam_default,0,sizeof(dhcpreqparam_default)); + memset(&replybuf[0],0,sizeof(replybuf)); + replybuf[0] = BOOTREPLY; + replybuf[1] = 1; + replybuf[2] = 6; + memcpy(&replybuf[4],&data[4],4); + memcpy(&replybuf[16],default_guest_ipv4addr,4); + memcpy(&replybuf[20],host_ipv4addr,4); + memcpy(&replybuf[28],&data[28],6); + memcpy(&replybuf[44],"vnet",4); + memcpy(&replybuf[108],"pxelinux.0",10); + replybuf[236] = 0x63; + replybuf[237] = 0x82; + replybuf[238] = 0x53; + replybuf[239] = 0x63; + replyopts = &replybuf[240]; + opts_len = sizeof(replybuf)/sizeof(replybuf[0])-240; + switch (dhcpmsgtype) { + case DHCPDISCOVER: + BX_INFO(("dhcp server: DHCPDISCOVER")); + // reset guest address; answer must be broadcasted to unconfigured IP + memcpy(guest_ipv4addr,broadcast_ipv4addr[1],4); + *replyopts ++ = BOOTPOPT_DHCP_MESSAGETYPE; + *replyopts ++ = 1; + *replyopts ++ = DHCPOFFER; + opts_len -= 3; + dhcpreqparam_default[0] = BOOTPOPT_IP_ADDRESS_LEASE_TIME; + dhcpreqparam_default[1] = BOOTPOPT_SERVER_IDENTIFIER; + if (found_host_name) { + dhcpreqparam_default[2] = BOOTPOPT_HOST_NAME; + } + dhcpreqparam_default_validflag = true; + break; + case DHCPREQUEST: + BX_INFO(("dhcp server: DHCPREQUEST")); + // check ciaddr. + if (found_serverid || found_guest_ipaddr || (!memcmp(&data[12],default_guest_ipv4addr,4))) { + *replyopts ++ = BOOTPOPT_DHCP_MESSAGETYPE; + *replyopts ++ = 1; + *replyopts ++ = DHCPACK; + opts_len -= 3; + dhcpreqparam_default[0] = BOOTPOPT_IP_ADDRESS_LEASE_TIME; + if (!found_serverid) { + dhcpreqparam_default[1] = BOOTPOPT_SERVER_IDENTIFIER; + } + dhcpreqparam_default_validflag = true; + } else { + *replyopts ++ = BOOTPOPT_DHCP_MESSAGETYPE; + *replyopts ++ = 1; + *replyopts ++ = DHCPNAK; + opts_len -= 3; + if (found_leasetime) { + dhcpreqparam_default[dhcpreqparams_default_len++] = BOOTPOPT_IP_ADDRESS_LEASE_TIME; + dhcpreqparam_default_validflag = true; + } + if (!found_serverid) { + dhcpreqparam_default[dhcpreqparams_default_len++] = BOOTPOPT_SERVER_IDENTIFIER; + dhcpreqparam_default_validflag = true; + } + } + break; + default: + BX_ERROR(("dhcp server: unsupported message type %u",dhcpmsgtype)); + return; + } + + while (1) { + while (dhcpreqparams_len-- > 0) { + switch (*dhcpreqparams++) { + case BOOTPOPT_SUBNETMASK: + BX_INFO(("provide BOOTPOPT_SUBNETMASK")); + if (opts_len < 6) { + BX_ERROR(("option buffer is insufficient")); + return; + } + opts_len -= 6; + *replyopts ++ = BOOTPOPT_SUBNETMASK; + *replyopts ++ = 4; + memcpy(replyopts,subnetmask_ipv4addr,4); + replyopts += 4; + break; + case BOOTPOPT_ROUTER_OPTION: + BX_INFO(("provide BOOTPOPT_ROUTER_OPTION")); + if (opts_len < 6) { + BX_ERROR(("option buffer is insufficient")); + return; + } + opts_len -= 6; + *replyopts ++ = BOOTPOPT_ROUTER_OPTION; + *replyopts ++ = 4; + memcpy(replyopts,host_ipv4addr,4); + replyopts += 4; + break; +#if 0 // DNS is not implemented. + case BOOTPOPT_DOMAIN_NAMESERVER: + BX_INFO(("provide BOOTPOPT_DOMAIN_NAMESERVER")); + if (opts_len < 6) { + BX_ERROR(("option buffer is insufficient")); + return; + } + opts_len -= 6; + *replyopts ++ = BOOTPOPT_DOMAIN_NAMESERVER; + *replyopts ++ = 4; + memcpy(replyopts,host_ipv4addr,4); + replyopts += 4; + break; +#endif + case BOOTPOPT_BROADCAST_ADDRESS: + BX_INFO(("provide BOOTPOPT_BROADCAST_ADDRESS")); + if (opts_len < 6) { + BX_ERROR(("option buffer is insufficient")); + return; + } + opts_len -= 6; + *replyopts ++ = BOOTPOPT_BROADCAST_ADDRESS; + *replyopts ++ = 4; + memcpy(replyopts,broadcast_ipv4addr[2],4); + replyopts += 4; + break; + case BOOTPOPT_IP_ADDRESS_LEASE_TIME: + BX_INFO(("provide BOOTPOPT_IP_ADDRESS_LEASE_TIME")); + if (opts_len < 6) { + BX_ERROR(("option buffer is insufficient")); + return; + } + opts_len -= 6; + *replyopts ++ = BOOTPOPT_IP_ADDRESS_LEASE_TIME; + *replyopts ++ = 4; + if (leasetime < DEFAULT_LEASE_TIME) { + put_net4(replyopts, leasetime); + } else { + put_net4(replyopts, DEFAULT_LEASE_TIME); + } + replyopts += 4; + break; + case BOOTPOPT_SERVER_IDENTIFIER: + BX_INFO(("provide BOOTPOPT_SERVER_IDENTIFIER")); + if (opts_len < 6) { + BX_ERROR(("option buffer is insufficient")); + return; + } + opts_len -= 6; + *replyopts ++ = BOOTPOPT_SERVER_IDENTIFIER; + *replyopts ++ = 4; + memcpy(replyopts,host_ipv4addr,4); + replyopts += 4; + break; + case BOOTPOPT_RENEWAL_TIME: + BX_INFO(("provide BOOTPOPT_RENEWAL_TIME")); + if (opts_len < 6) { + BX_ERROR(("option buffer is insufficient")); + return; + } + opts_len -= 6; + *replyopts ++ = BOOTPOPT_RENEWAL_TIME; + *replyopts ++ = 4; + put_net4(replyopts, 600); + replyopts += 4; + break; + case BOOTPOPT_REBINDING_TIME: + BX_INFO(("provide BOOTPOPT_REBINDING_TIME")); + if (opts_len < 6) { + BX_ERROR(("option buffer is insufficient")); + return; + } + opts_len -= 6; + *replyopts ++ = BOOTPOPT_REBINDING_TIME; + *replyopts ++ = 4; + put_net4(replyopts, 1800); + replyopts += 4; + break; + case BOOTPOPT_HOST_NAME: + if (hostname != NULL) { + BX_INFO(("provide BOOTPOPT_HOST_NAME")); + if (opts_len < (hostname_len + 2)) { + free(hostname); + BX_ERROR(("option buffer is insufficient")); + return; + } + opts_len -= (hostname_len + 2); + *replyopts ++ = BOOTPOPT_HOST_NAME; + *replyopts ++ = hostname_len; + memcpy(replyopts, hostname, hostname_len); + *replyopts += hostname_len; + free(hostname); + hostname = NULL; + break; + } + default: + if (*(dhcpreqparams-1) != 0) { + BX_ERROR(("dhcp server: requested parameter %u not supported yet",*(dhcpreqparams-1))); + } + break; + } + } + + if (!dhcpreqparam_default_validflag) break; + dhcpreqparams = &dhcpreqparam_default[0]; + dhcpreqparams_len = sizeof(dhcpreqparam_default); + dhcpreqparam_default_validflag = false; + } + + if (opts_len < 1) { + BX_ERROR(("option buffer is insufficient")); + return; + } + opts_len -= 2; + *replyopts ++ = BOOTPOPT_END; + + opts_len = replyopts - &replybuf[0]; + if (opts_len < (236U+64U)) { + opts_len = (236U+64U); // BOOTP + } + if (opts_len < (548U)) { + opts_len = 548U; // DHCP + } + host_to_guest_udpipv4_packet( + sourceport, targetport, + replybuf, opts_len); +} + +void bx_vnet_pktmover_c::udpipv4_tftp_handler( + void *this_ptr, + const Bit8u *ipheader, unsigned ipheader_len, + unsigned sourceport, unsigned targetport, + const Bit8u *data, unsigned data_len) +{ + ((bx_vnet_pktmover_c *)this_ptr)->udpipv4_tftp_handler_ns( + ipheader,ipheader_len,sourceport,targetport,data,data_len); +} + +void bx_vnet_pktmover_c::udpipv4_tftp_handler_ns( + const Bit8u *ipheader, unsigned ipheader_len, + unsigned sourceport, unsigned targetport, + const Bit8u *data, unsigned data_len) +{ + Bit8u buffer[TFTP_BUFFER_SIZE + 4]; + char path[BX_PATHNAME_LEN]; + FILE *fp; + unsigned block_nr; + unsigned tftp_len; + + switch (get_net2(data)) { + case TFTP_RRQ: + if (tftp_tid == 0) { + strncpy((char*)buffer, (const char*)data + 2, data_len - 2); + buffer[data_len - 4] = 0; + + // options + size_t tsize_option = 0; + int blksize_option = 0; + if (strlen((char*)buffer) < data_len - 2) { + const char *mode = (const char*)data + 2 + strlen((char*)buffer) + 1; + int octet_option = 0; + while (mode < (const char*)data + data_len) { + if (memcmp(mode, "octet\0", 6) == 0) { + mode += 6; + octet_option = 1; + } else if (memcmp(mode, "tsize\0", 6) == 0) { + mode += 6; + tsize_option = 1; // size needed + mode += strlen(mode)+1; + } else if (memcmp(mode, "blksize\0", 8) == 0) { + mode += 8; + blksize_option = atoi(mode); + mode += strlen(mode)+1; + } else { + BX_INFO(("tftp req: unknown option %s", mode)); + break; + } + } + if (!octet_option) { + tftp_send_error(buffer, sourceport, targetport, 4, "Unsupported transfer mode"); + return; + } + } + + strcpy(tftp_filename, (char*)buffer); + BX_INFO(("tftp req: %s", tftp_filename)); + if (tsize_option) { + tsize_option = get_file_size(netdev, tftp_rootdir, tftp_filename); + if (tsize_option > 0) { + // if tsize requested and file exists, send optack and return + // optack ack will pick up where we leave off here. + // if blksize_option is less than TFTP_BUFFER_SIZE should + // probably use blksize_option... + tftp_send_optack(buffer, sourceport, targetport, tsize_option, TFTP_BUFFER_SIZE); + return; + } + } + tftp_tid = sourceport; + tftp_write = 0; + tftp_send_data(buffer, sourceport, targetport, 1); + } else { + tftp_send_error(buffer, sourceport, targetport, 4, "Illegal request"); + } + break; + case TFTP_WRQ: + if (tftp_tid == 0) { + strncpy((char*)buffer, (const char*)data + 2, data_len - 2); + buffer[data_len - 4] = 0; + + // transfer mode + if (strlen((char*)buffer) < data_len - 2) { + const char *mode = (const char*)data + 2 + strlen((char*)buffer) + 1; + if (memcmp(mode, "octet\0", 6) != 0) { + tftp_send_error(buffer, sourceport, targetport, 4, "Unsupported transfer mode"); + return; + } + } + + strcpy(tftp_filename, (char*)buffer); + sprintf(path, "%s/%s", tftp_rootdir, tftp_filename); + fp = fopen(path, "rb"); + if (fp) { + tftp_send_error(buffer, sourceport, targetport, 6, "File exists"); + fclose(fp); + return; + } + fp = fopen(path, "wb"); + if (!fp) { + tftp_send_error(buffer, sourceport, targetport, 2, "Access violation"); + return; + } + fclose(fp); + tftp_tid = sourceport; + tftp_write = 1; + + tftp_send_ack(buffer, sourceport, targetport, 0); + } else { + tftp_send_error(buffer, sourceport, targetport, 4, "Illegal request"); + } + break; + case TFTP_DATA: + if ((tftp_tid == sourceport) && (tftp_write == 1)) { + block_nr = get_net2(data + 2); + strncpy((char*)buffer, (const char*)data + 4, data_len - 4); + tftp_len = data_len - 4; + buffer[tftp_len] = 0; + if (tftp_len <= 512) { + sprintf(path, "%s/%s", tftp_rootdir, tftp_filename); + fp = fopen(path, "ab"); + if (!fp) { + tftp_send_error(buffer, sourceport, targetport, 2, "Access violation"); + return; + } + if (fseek(fp, (block_nr - 1) * TFTP_BUFFER_SIZE, SEEK_SET) < 0) { + tftp_send_error(buffer, sourceport, targetport, 3, "Block not seekable"); + return; + } + fwrite(buffer, 1, tftp_len, fp); + fclose(fp); + tftp_send_ack(buffer, sourceport, targetport, block_nr); + if (tftp_len < 512) { + tftp_tid = 0; + } + } else { + tftp_send_error(buffer, sourceport, targetport, 4, "Illegal request"); + } + } else { + tftp_send_error(buffer, sourceport, targetport, 4, "Illegal request"); + } + break; + case TFTP_ACK: + tftp_send_data(buffer, sourceport, targetport, get_net2(data + 2) + 1); + break; + case TFTP_ERROR: + // silently ignore error packets + break; + default: + BX_ERROR(("TFTP unknown opt %d", get_net2(data))); + } +} + +void bx_vnet_pktmover_c::tftp_send_error( + Bit8u *buffer, + unsigned sourceport, unsigned targetport, + unsigned code, const char *msg) +{ + put_net2(buffer, TFTP_ERROR); + put_net2(buffer + 2, code); + strcpy((char*)buffer + 4, msg); + host_to_guest_udpipv4_packet(sourceport, targetport, buffer, strlen(msg) + 5); + tftp_tid = 0; +} + +void bx_vnet_pktmover_c::tftp_send_data( + Bit8u *buffer, + unsigned sourceport, unsigned targetport, + unsigned block_nr) +{ + char path[BX_PATHNAME_LEN]; + char msg[BX_PATHNAME_LEN]; + int rd; + + if (strlen(tftp_filename) == 0) { + tftp_send_error(buffer, sourceport, targetport, 1, "File not found"); + return; + } + + if ((strlen(tftp_rootdir) + strlen(tftp_filename)) > BX_PATHNAME_LEN) { + tftp_send_error(buffer, sourceport, targetport, 1, "Path name too long"); + return; + } + + sprintf(path, "%s/%s", tftp_rootdir, tftp_filename); + FILE *fp = fopen(path, "rb"); + if (!fp) { + sprintf(msg, "File not found: %s", tftp_filename); + tftp_send_error(buffer, sourceport, targetport, 1, msg); + return; + } + + if (fseek(fp, (block_nr - 1) * TFTP_BUFFER_SIZE, SEEK_SET) < 0) { + tftp_send_error(buffer, sourceport, targetport, 3, "Block not seekable"); + return; + } + + rd = fread(buffer + 4, 1, TFTP_BUFFER_SIZE, fp); + fclose(fp); + + if (rd < 0) { + tftp_send_error(buffer, sourceport, targetport, 3, "Block not readable"); + return; + } + + put_net2(buffer, TFTP_DATA); + put_net2(buffer + 2, block_nr); + host_to_guest_udpipv4_packet(sourceport, targetport, buffer, rd + 4); + if (rd < TFTP_BUFFER_SIZE) { + tftp_tid = 0; + } +} + +void bx_vnet_pktmover_c::tftp_send_ack( + Bit8u *buffer, + unsigned sourceport, unsigned targetport, + unsigned block_nr) +{ + put_net2(buffer, TFTP_ACK); + put_net2(buffer + 2, block_nr); + host_to_guest_udpipv4_packet(sourceport, targetport, buffer, 4); +} + +void bx_vnet_pktmover_c::tftp_send_optack( + Bit8u *buffer, + unsigned sourceport, unsigned targetport, + size_t tsize_option, unsigned blksize_option) +{ + Bit8u *p = buffer; + put_net2(p, TFTP_OPTACK); + p += 2; + if (tsize_option > 0) { + *p++='t'; *p++='s'; *p++='i'; *p++='z'; *p++='e'; *p++='\0'; + sprintf((char *)p, "%lu", (unsigned long)tsize_option); + p += strlen((const char *)p) + 1; + } + if (blksize_option > 0) { + *p++='b'; *p++='l'; *p++='k'; *p++='s'; *p++='i'; *p++='z'; *p++='e'; *p++='\0'; + sprintf((char *)p, "%d", blksize_option); p += strlen((const char *)p) + 1; + } + host_to_guest_udpipv4_packet(sourceport, targetport, buffer, p - buffer); +} + +#endif /* if BX_NETWORKING */ diff --git a/bochs/iodev/eth_win32.cc b/bochs/iodev/eth_win32.cc new file mode 100644 index 00000000..44cb2e65 --- /dev/null +++ b/bochs/iodev/eth_win32.cc @@ -0,0 +1,386 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// eth_win32.cc - packet mover for win32 +// All win32 coding by Don Becker +// with patches from various sources +// +// Various networking docs: +// http://www.graphcomp.com/info/rfc/ +// rfc0826: arp +// rfc0903: rarp +// +// For ethernet support under win32 to work, you must install WinPCap. +// Download it from http://netgroup-serv.polito.it/winpcap + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_NETWORKING && defined(ETH_WIN32) + +#include "eth.h" + +// windows.h included by bochs.h +#define LOG_THIS netdev-> + +#define BX_ETH_WIN32_LOGGING 0 + +#define NDIS_PACKET_TYPE_PROMISCUOUS 0x0020 +#define Packet_ALIGNMENT sizeof(int) +#define Packet_WORDALIGN(x) (((x)+(Packet_ALIGNMENT-1))&~(Packet_ALIGNMENT-1)) + +typedef int bpf_int32; +typedef u_int bpf_u_int32; + +/* + * The instruction encondings. + */ + +/* instruction classes */ + +#define BPF_CLASS(code) ((code) & 0x07) +#define BPF_LD 0x00 +#define BPF_LDX 0x01 +#define BPF_ST 0x02 +#define BPF_STX 0x03 +#define BPF_ALU 0x04 +#define BPF_JMP 0x05 +#define BPF_RET 0x06 +#define BPF_MISC 0x07 + +/* ld/ldx fields */ +#define BPF_SIZE(code) ((code) & 0x18) +#define BPF_W 0x00 +#define BPF_H 0x08 +#define BPF_B 0x10 +#define BPF_MODE(code) ((code) & 0xe0) +#define BPF_IMM 0x00 +#define BPF_ABS 0x20 +#define BPF_IND 0x40 +#define BPF_MEM 0x60 +#define BPF_LEN 0x80 +#define BPF_MSH 0xa0 + +/* alu/jmp fields */ +#define BPF_OP(code) ((code) & 0xf0) +#define BPF_ADD 0x00 +#define BPF_SUB 0x10 +#define BPF_MUL 0x20 +#define BPF_DIV 0x30 +#define BPF_OR 0x40 +#define BPF_AND 0x50 +#define BPF_LSH 0x60 +#define BPF_RSH 0x70 +#define BPF_NEG 0x80 +#define BPF_JA 0x00 +#define BPF_JEQ 0x10 +#define BPF_JGT 0x20 +#define BPF_JGE 0x30 +#define BPF_JSET 0x40 +#define BPF_SRC(code) ((code) & 0x08) +#define BPF_K 0x00 +#define BPF_X 0x08 + +/* ret - BPF_K and BPF_X also apply */ +#define BPF_RVAL(code) ((code) & 0x18) +#define BPF_A 0x10 + +/* misc */ +#define BPF_MISCOP(code) ((code) & 0xf8) +#define BPF_TAX 0x00 +#define BPF_TXA 0x80 + +#define BPF_STMT(code, k) { (u_short)(code), 0, 0, k } +#define BPF_JUMP(code, k, jt, jf) { (u_short)(code), jt, jf, k } + +/* + * The instruction data structure. + */ +struct bpf_insn { + u_short code; + u_char jt; + u_char jf; + bpf_int32 k; +}; + +struct bpf_program { + u_int bf_len; + struct bpf_insn *bf_insns; +}; + +struct bpf_hdr { + struct timeval bh_tstamp; /* time stamp */ + UINT bh_caplen; /* length of captured portion */ + UINT bh_datalen; /* original length of packet */ + USHORT bh_hdrlen; /* length of bpf header (this struct + plus alignment padding) */ +}; + +#define MAX_LINK_NAME_LENGTH 64 + +// Why don't these definitions come from including winpcap.h or something? +// -Bryce +typedef struct _ADAPTER { + HANDLE hFile; + TCHAR SymbolicLink[MAX_LINK_NAME_LENGTH]; + int NumWrites; + HANDLE ReadEvent; + UINT ReadTimeOut; // WARNING: maybe invalid before winpcap 2.2 +} ADAPTER, *LPADAPTER; + +typedef struct _PACKET { + HANDLE hEvent; + OVERLAPPED OverLapped; + PVOID Buffer; + UINT Length; + UINT ulBytesReceived; + BOOLEAN bIoComplete; +} PACKET, *LPPACKET; + +HINSTANCE hPacket; +LPADAPTER lpAdapter = 0; +LPPACKET pkSend; +LPPACKET pkRecv; +char buffer[256000]; +DWORD dwVersion, dwMajorVersion; +char AdapterList[10][1024]; +char cMacAddr[6]; +char NetDev[512]; +BOOL IsNT = FALSE; + +LPADAPTER (*PacketOpenAdapter) (LPTSTR); +VOID (*PacketCloseAdapter) (LPADAPTER); +BOOLEAN (*PacketSetHwFilter) (LPADAPTER, ULONG); +BOOLEAN (*PacketSetBpf) (LPADAPTER, struct bpf_program *); +BOOLEAN (*PacketGetAdapterNames) (PTSTR, PULONG); +BOOLEAN (*PacketSendPacket) (LPADAPTER, LPPACKET, BOOLEAN); +BOOLEAN (*PacketReceivePacket) (LPADAPTER, LPPACKET, BOOLEAN); +BOOLEAN (*PacketSetBuff) (LPADAPTER, int); +BOOLEAN (*PacketSetReadTimeout) (LPADAPTER, int); +LPPACKET (*PacketAllocatePacket) (void); +VOID (*PacketInitPacket) (LPPACKET, PVOID, UINT); +VOID (*PacketFreePacket) (LPPACKET); + +// template filter for a unicast mac address and all +// multicast/broadcast frames +static const struct bpf_insn macfilter[] = { + BPF_STMT(BPF_LD|BPF_W|BPF_ABS, 2), + BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 0xaaaaaaaa, 0, 2), + BPF_STMT(BPF_LD|BPF_H|BPF_ABS, 0), + BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 0x0000aaaa, 2, 0), + BPF_STMT(BPF_LD|BPF_B|BPF_ABS, 0), + BPF_JUMP(BPF_JMP|BPF_JSET|BPF_K, 0x01, 0, 1), + BPF_STMT(BPF_RET, 1514), + BPF_STMT(BPF_RET, 0), +}; + +// +// Define the class. This is private to this module +// +class bx_win32_pktmover_c : public eth_pktmover_c { +public: + bx_win32_pktmover_c(const char *netif, const char *macaddr, + eth_rx_handler_t rxh, bx_devmodel_c *dev, + const char *script); + void sendpkt(void *buf, unsigned io_len); +private: + struct bpf_insn filter[8]; + int rx_timer_index; + static void rx_timer_handler(void *); + void rx_timer(void); +#if BX_ETH_WIN32_LOGGING + FILE *pktlog_txt; +#endif +}; + +// +// Define the static class that registers the derived pktmover class, +// and allocates one on request. +// +class bx_win32_locator_c : public eth_locator_c { +public: + bx_win32_locator_c(void) : eth_locator_c("win32") {} +protected: + eth_pktmover_c *allocate(const char *netif, const char *macaddr, + eth_rx_handler_t rxh, + bx_devmodel_c *dev, const char *script) { + return (new bx_win32_pktmover_c(netif, macaddr, rxh, dev, script)); + } +} bx_win32_match; + +// +// Define the methods for the bx_win32_pktmover derived class +// + +// the constructor +bx_win32_pktmover_c::bx_win32_pktmover_c( + const char *netif, const char *macaddr, + eth_rx_handler_t rxh, bx_devmodel_c *dev, const char *script) +{ + this->netdev = dev; + BX_INFO(("win32 network driver")); + // Open Packet Driver Here. + DWORD dwVersion; + DWORD dwWindowsMajorVersion; + + this->rxh = rxh; + + hPacket = LoadLibrary("PACKET.DLL"); + memcpy(cMacAddr, macaddr, 6); + if (hPacket) { + PacketOpenAdapter = (LPADAPTER (*)(LPTSTR)) GetProcAddress(hPacket, "PacketOpenAdapter"); + PacketCloseAdapter = (VOID (*)(LPADAPTER)) GetProcAddress(hPacket, "PacketCloseAdapter"); + PacketSetHwFilter = (BOOLEAN (*)(LPADAPTER, ULONG)) GetProcAddress(hPacket, "PacketSetHwFilter"); + PacketSetBpf = (BOOLEAN (*)(LPADAPTER, struct bpf_program *)) GetProcAddress(hPacket, "PacketSetBpf"); + PacketGetAdapterNames = (BOOLEAN (*)(PTSTR, PULONG)) GetProcAddress(hPacket, "PacketGetAdapterNames"); + PacketSendPacket = (BOOLEAN (*)(LPADAPTER, LPPACKET, BOOLEAN)) GetProcAddress(hPacket, "PacketSendPacket"); + PacketReceivePacket = (BOOLEAN (*)(LPADAPTER, LPPACKET, BOOLEAN)) GetProcAddress(hPacket, "PacketReceivePacket"); + PacketSetBuff = (BOOLEAN (*)(LPADAPTER, int)) GetProcAddress(hPacket, "PacketSetBuff"); + PacketSetReadTimeout = (BOOLEAN (*)(LPADAPTER, int)) GetProcAddress(hPacket, "PacketSetReadTimeout"); + PacketAllocatePacket = (LPPACKET (*)(void)) GetProcAddress(hPacket, "PacketAllocatePacket"); + PacketInitPacket = (VOID (*)(LPPACKET, PVOID, UINT)) GetProcAddress(hPacket, "PacketInitPacket"); + PacketFreePacket = (VOID (*)(LPPACKET)) GetProcAddress(hPacket, "PacketFreePacket"); + } else { + BX_PANIC(("Could not load WPCap Drivers for ethernet support!")); + } + + memset(&NetDev, 0, sizeof(NetDev)); + dwVersion=GetVersion(); + dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); + if (!(dwVersion >= 0x80000000 && dwWindowsMajorVersion >= 4)) + { // Windows NT/2k + int nLen = MultiByteToWideChar(CP_ACP, 0, netif, -1, NULL, 0); + MultiByteToWideChar(CP_ACP, 0, netif, -1, (WCHAR *)NetDev, nLen); + IsNT = TRUE; + } else { // Win9x + strcpy(NetDev, netif); + } + + lpAdapter = PacketOpenAdapter(NetDev); + if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) { + BX_PANIC(("Could not open adapter for ethernet reception")); + return; + } + PacketSetHwFilter(lpAdapter, NDIS_PACKET_TYPE_PROMISCUOUS); + +/* The code below sets a BPF mac address filter + that seems to really kill performance, for now + im just using code to filter, and it works + better +*/ + +// memcpy(&this->filter, macfilter, sizeof(macfilter)); +// this->filter[1].k = (macaddr[2] & 0xff) << 24 | (macaddr[3] & 0xff) << 16 | (macaddr[4] & 0xff) << 8 | (macaddr[5] & 0xff); +// this->filter[3].k = (macaddr[0] & 0xff) << 8 | (macaddr[1] & 0xff); +// bp.bf_len = 8; +// bp.bf_insns = &this->filter[0]; +// if (!PacketSetBpf(lpAdapter, &bp)) { +// BX_PANIC(("Could not set mac address BPF filter")); +// } + + PacketSetBuff(lpAdapter, 512000); + PacketSetReadTimeout(lpAdapter, -1); + + if ((pkSend = PacketAllocatePacket()) == NULL) { + BX_PANIC(("Could not allocate a send packet")); + } + + if ((pkRecv = PacketAllocatePacket()) == NULL) { + BX_PANIC(("Could not allocate a recv packet")); + } + rx_timer_index = + bx_pc_system.register_timer(this, this->rx_timer_handler, 10000, 1, 1, "eth_win32"); + +#if BX_ETH_WIN32_LOGGING + pktlog_txt = fopen("ne2k-pktlog.txt", "wb"); + if (!pktlog_txt) BX_PANIC(("ne2k-pktlog.txt failed")); + fprintf(pktlog_txt, "win32 packetmover readable log file\n"); + fprintf(pktlog_txt, "host adapter = %s\n", netif); + fprintf(pktlog_txt, "guest MAC address = "); + int i; + for (i=0; i<6; i++) + fprintf(pktlog_txt, "%02x%s", 0xff & macaddr[i], i<5?":" : "\n"); + fprintf(pktlog_txt, "--\n"); + fflush(pktlog_txt); +#endif +} + +void bx_win32_pktmover_c::sendpkt(void *buf, unsigned io_len) +{ +#if BX_ETH_WIN32_LOGGING + write_pktlog_txt(pktlog_txt, (const Bit8u *)buf, io_len, 0); +#endif + + // SendPacket Here. + PacketInitPacket(pkSend, (char *)buf, io_len); + + if (!PacketSendPacket(lpAdapter, pkSend, TRUE)) { + fprintf(stderr, "[ETH-WIN32] Error sending packet: %lu\n", GetLastError()); + } +} + +void bx_win32_pktmover_c::rx_timer_handler (void *this_ptr) +{ + bx_win32_pktmover_c *class_ptr = (bx_win32_pktmover_c *) this_ptr; + + class_ptr->rx_timer(); +} + +void bx_win32_pktmover_c::rx_timer(void) +{ + // Recieve Packet ???? + char *pBuf; + unsigned char *pPacket; + unsigned int iOffset = 0; + struct bpf_hdr *hdr; + int pktlen; + + PacketInitPacket(pkRecv, (char *)buffer, 256000); + if (WaitForSingleObject(lpAdapter->ReadEvent,0) == WAIT_OBJECT_0 || IsNT) { + PacketReceivePacket(lpAdapter, pkRecv, TRUE); + pBuf = (char *)pkRecv->Buffer; + iOffset = 0; + while(iOffset < pkRecv->ulBytesReceived) + { + hdr = (struct bpf_hdr *)(pBuf + iOffset); + pPacket = (unsigned char *)(pBuf + iOffset + hdr->bh_hdrlen); + if (memcmp(pPacket + 6, cMacAddr, 6) != 0) // src field != ours + { + if(memcmp(pPacket, cMacAddr, 6) == 0 || memcmp(pPacket, broadcast_macaddr, 6) == 0) + { + pktlen = hdr->bh_caplen; + if (pktlen < 60) pktlen = 60; +#if BX_ETH_WIN32_LOGGING + write_pktlog_txt(pktlog_txt, pPacket, pktlen, 1); +#endif + (*this->rxh)(this->netdev, pPacket, pktlen); + } + } + iOffset = Packet_WORDALIGN(iOffset + (hdr->bh_hdrlen + hdr->bh_caplen)); + } + } +} +#endif /* if BX_NETWORKING && defined ETH_WIN32 */ diff --git a/bochs/iodev/extfpuirq.cc b/bochs/iodev/extfpuirq.cc new file mode 100644 index 00000000..ee99296c --- /dev/null +++ b/bochs/iodev/extfpuirq.cc @@ -0,0 +1,90 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// +// External circuit for MSDOS compatible FPU exceptions +// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "extfpuirq.h" + +#define LOG_THIS theExternalFpuIrq-> + +bx_extfpuirq_c *theExternalFpuIrq = NULL; + +int libextfpuirq_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theExternalFpuIrq = new bx_extfpuirq_c(); + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theExternalFpuIrq, BX_PLUGIN_EXTFPUIRQ); + return(0); // Success +} + +void libextfpuirq_LTX_plugin_fini(void) +{ + delete theExternalFpuIrq; +} + +bx_extfpuirq_c::bx_extfpuirq_c(void) +{ + put("EFIRQ"); +} + +bx_extfpuirq_c::~bx_extfpuirq_c(void) +{ + BX_DEBUG(("Exit")); +} + +void bx_extfpuirq_c::init(void) +{ + // called once when bochs initializes + DEV_register_iowrite_handler(this, write_handler, 0x00F0, "External FPU IRQ", 1); + DEV_register_irq(13, "External FPU IRQ"); +} + +void bx_extfpuirq_c::reset(unsigned type) +{ + // We should handle IGNNE here + DEV_pic_lower_irq(13); +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_extfpuirq_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_EFI_SMF + bx_extfpuirq_c *class_ptr = (bx_extfpuirq_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_extfpuirq_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_EFI_SMF + + // We should handle IGNNE here + DEV_pic_lower_irq(13); +} diff --git a/bochs/iodev/extfpuirq.h b/bochs/iodev/extfpuirq.h new file mode 100644 index 00000000..b8b06d30 --- /dev/null +++ b/bochs/iodev/extfpuirq.h @@ -0,0 +1,50 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef BX_IODEV_EXTFPUIRQ_H +#define BX_IODEV_EXTFPUIRQ_H + + +#if BX_USE_EFI_SMF +# define BX_EXTFPUIRQ_SMF static +# define BX_EXTFPUIRQ_THIS theExternalFpuIrq-> +#else +# define BX_EXTFPUIRQ_SMF +# define BX_EXTFPUIRQ_THIS this-> +#endif + + +class bx_extfpuirq_c : public bx_devmodel_c { +public: + bx_extfpuirq_c(); + virtual ~bx_extfpuirq_c(); + virtual void init(void); + virtual void reset(unsigned type); + +private: + + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_EFI_SMF + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif +}; + +#endif diff --git a/bochs/iodev/floppy.cc b/bochs/iodev/floppy.cc new file mode 100644 index 00000000..684b4755 --- /dev/null +++ b/bochs/iodev/floppy.cc @@ -0,0 +1,1983 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// +// Floppy Disk Controller Docs: +// Intel 82077A Data sheet +// ftp://void-core.2y.net/pub/docs/fdc/82077AA_FloppyControllerDatasheet.pdf +// Intel 82078 Data sheet +// ftp://download.intel.com/design/periphrl/datashts/29047403.PDF +// Other FDC references +// http://debs.future.easyspace.com/Programming/Hardware/FDC/floppy.html +// And a port list: +// http://mudlist.eorbit.net/~adam/pickey/ports.html +// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + + +extern "C" { +#include +} + +#ifdef __linux__ +extern "C" { +#include +#include +} +#endif +#include "iodev.h" +#include "hdimage.h" +#include "floppy.h" +// windows.h included by bochs.h +#ifdef WIN32 +extern "C" { +#include +} +#endif +#define LOG_THIS theFloppyController-> + +bx_floppy_ctrl_c *theFloppyController; + +/* for main status register */ +#define FD_MS_MRQ 0x80 +#define FD_MS_DIO 0x40 +#define FD_MS_NDMA 0x20 +#define FD_MS_BUSY 0x10 +#define FD_MS_ACTD 0x08 +#define FD_MS_ACTC 0x04 +#define FD_MS_ACTB 0x02 +#define FD_MS_ACTA 0x01 + +#define FROM_FLOPPY 10 +#define TO_FLOPPY 11 + +#define FLOPPY_DMA_CHAN 2 + +#define FDRIVE_NONE 0x00 +#define FDRIVE_525DD 0x01 +#define FDRIVE_525HD 0x02 +#define FDRIVE_350DD 0x04 +#define FDRIVE_350HD 0x08 +#define FDRIVE_350ED 0x10 + +typedef struct { + unsigned id; + Bit8u trk; + Bit8u hd; + Bit8u spt; + unsigned sectors; + Bit8u drive_mask; +} floppy_type_t; + +static floppy_type_t floppy_type[8] = { + {BX_FLOPPY_160K, 40, 1, 8, 320, 0x03}, + {BX_FLOPPY_180K, 40, 1, 9, 360, 0x03}, + {BX_FLOPPY_320K, 40, 2, 8, 640, 0x03}, + {BX_FLOPPY_360K, 40, 2, 9, 720, 0x03}, + {BX_FLOPPY_720K, 80, 2, 9, 1440, 0x1f}, + {BX_FLOPPY_1_2, 80, 2, 15, 2400, 0x02}, + {BX_FLOPPY_1_44, 80, 2, 18, 2880, 0x18}, + {BX_FLOPPY_2_88, 80, 2, 36, 5760, 0x10} +}; + +static Bit16u drate_in_k[4] = { + 500, 300, 250, 1000 +}; + + +int libfloppy_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theFloppyController = new bx_floppy_ctrl_c(); + bx_devices.pluginFloppyDevice = theFloppyController; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theFloppyController, BX_PLUGIN_FLOPPY); + return(0); // Success +} + +void libfloppy_LTX_plugin_fini(void) +{ + delete theFloppyController; +} + +bx_floppy_ctrl_c::bx_floppy_ctrl_c() +{ + put("FDD"); + s.floppy_timer_index = BX_NULL_TIMER_HANDLE; +} + +bx_floppy_ctrl_c::~bx_floppy_ctrl_c() +{ + for (int i = 0; i < 4; i++) { + close_media(&BX_FD_THIS s.media[i]); + } + BX_DEBUG(("Exit")); +} + +void bx_floppy_ctrl_c::init(void) +{ + Bit8u i, devtype, cmos_value; + char pname[10]; + + BX_DEBUG(("Init $Id$")); + DEV_dma_register_8bit_channel(2, dma_read, dma_write, "Floppy Drive"); + DEV_register_irq(6, "Floppy Drive"); + for (unsigned addr=0x03F2; addr<=0x03F7; addr++) { + DEV_register_ioread_handler(this, read_handler, addr, "Floppy Drive", 1); + DEV_register_iowrite_handler(this, write_handler, addr, "Floppy Drive", 1); + } + + + cmos_value = 0x00; /* start out with: no drive 0, no drive 1 */ + + BX_FD_THIS s.num_supported_floppies = 0; + + for (i=0; i<4; i++) { + BX_FD_THIS s.media[i].type = BX_FLOPPY_NONE; + BX_FD_THIS s.media[i].sectors_per_track = 0; + BX_FD_THIS s.media[i].tracks = 0; + BX_FD_THIS s.media[i].heads = 0; + BX_FD_THIS s.media[i].sectors = 0; + BX_FD_THIS s.media[i].fd = -1; + BX_FD_THIS s.media[i].vvfat_floppy = 0; + BX_FD_THIS s.media_present[i] = 0; + BX_FD_THIS s.device_type[i] = FDRIVE_NONE; + } + + // + // Floppy A setup + // + + devtype = SIM->get_param_enum(BXPN_FLOPPYA_DEVTYPE)->get(); + cmos_value = (devtype << 4); + if (devtype != BX_FDD_NONE) { + BX_FD_THIS s.device_type[0] = 1 << (devtype - 1); + BX_FD_THIS s.num_supported_floppies++; + BX_FD_THIS s.statusbar_id[0] = bx_gui->register_statusitem(" A: "); + } else { + BX_FD_THIS s.statusbar_id[0] = -1; + } + + if (SIM->get_param_enum(BXPN_FLOPPYA_TYPE)->get() != BX_FLOPPY_NONE) { + if (SIM->get_param_bool(BXPN_FLOPPYA_STATUS)->get()) { + BX_FD_THIS s.media[0].write_protected = SIM->get_param_bool(BXPN_FLOPPYA_READONLY)->get(); + if (evaluate_media(BX_FD_THIS s.device_type[0], SIM->get_param_enum(BXPN_FLOPPYA_TYPE)->get(), + SIM->get_param_string(BXPN_FLOPPYA_PATH)->getptr(), & BX_FD_THIS s.media[0])) { + BX_FD_THIS s.media_present[0] = 1; +#define MED (BX_FD_THIS s.media[0]) + BX_INFO(("fd0: '%s' ro=%d, h=%d,t=%d,spt=%d", + SIM->get_param_string(BXPN_FLOPPYA_PATH)->getptr(), + MED.write_protected, MED.heads, MED.tracks, MED.sectors_per_track)); + if (MED.write_protected) + SIM->get_param_bool(BXPN_FLOPPYA_READONLY)->set(1); +#undef MED + } else { + SIM->get_param_bool(BXPN_FLOPPYA_STATUS)->set(0); + } + } + } + + // + // Floppy B setup + // + + devtype = SIM->get_param_enum(BXPN_FLOPPYB_DEVTYPE)->get(); + cmos_value |= devtype; + if (devtype != BX_FDD_NONE) { + BX_FD_THIS s.device_type[1] = 1 << (devtype - 1); + BX_FD_THIS s.num_supported_floppies++; + BX_FD_THIS s.statusbar_id[1] = bx_gui->register_statusitem(" B: "); + } else { + BX_FD_THIS s.statusbar_id[1] = -1; + } + + if (SIM->get_param_enum(BXPN_FLOPPYB_TYPE)->get() != BX_FLOPPY_NONE) { + if (SIM->get_param_bool(BXPN_FLOPPYB_STATUS)->get()) { + BX_FD_THIS s.media[1].write_protected = SIM->get_param_bool(BXPN_FLOPPYB_READONLY)->get(); + if (evaluate_media(BX_FD_THIS s.device_type[1], SIM->get_param_enum(BXPN_FLOPPYB_TYPE)->get(), + SIM->get_param_string(BXPN_FLOPPYB_PATH)->getptr(), & BX_FD_THIS s.media[1])) { + BX_FD_THIS s.media_present[1] = 1; +#define MED (BX_FD_THIS s.media[1]) + BX_INFO(("fd1: '%s' ro=%d, h=%d,t=%d,spt=%d", + SIM->get_param_string(BXPN_FLOPPYB_PATH)->getptr(), + MED.write_protected, MED.heads, MED.tracks, MED.sectors_per_track)); + if (MED.write_protected) + SIM->get_param_bool(BXPN_FLOPPYB_READONLY)->set(1); +#undef MED + } else { + SIM->get_param_bool(BXPN_FLOPPYB_STATUS)->set(0); + } + } + } + + /* CMOS Floppy Type and Equipment Byte register */ + DEV_cmos_set_reg(0x10, cmos_value); + if (BX_FD_THIS s.num_supported_floppies > 0) { + DEV_cmos_set_reg(0x14, (DEV_cmos_get_reg(0x14) & 0x3e) | + ((BX_FD_THIS s.num_supported_floppies-1) << 6) | 1); + } else { + DEV_cmos_set_reg(0x14, (DEV_cmos_get_reg(0x14) & 0x3e)); + } + + if (BX_FD_THIS s.floppy_timer_index == BX_NULL_TIMER_HANDLE) { + BX_FD_THIS s.floppy_timer_index = + bx_pc_system.register_timer(this, timer_handler, 250, 0, 0, "floppy"); + } + /* phase out s.non_dma in favor of using FD_MS_NDMA, more like hardware */ + BX_FD_THIS s.main_status_reg &= ~FD_MS_NDMA; // enable DMA from start + /* these registers are not cleared by reset */ + BX_FD_THIS s.SRT = 0; + BX_FD_THIS s.HUT = 0; + BX_FD_THIS s.HLT = 0; + + // runtime parameters + for (i = 0; i < 2; i++) { + sprintf(pname, "floppy.%d", i); + bx_list_c *floppy = (bx_list_c*)SIM->get_param(pname); + SIM->get_param_string("path", floppy)->set_handler(floppy_param_string_handler); + SIM->get_param_string("path", floppy)->set_runtime_param(1); + SIM->get_param_bool("readonly", floppy)->set_handler(floppy_param_handler); + SIM->get_param_bool("readonly", floppy)->set_runtime_param(1); + SIM->get_param_bool("status", floppy)->set_handler(floppy_param_handler); + SIM->get_param_bool("status", floppy)->set_runtime_param(1); + } +} + +void bx_floppy_ctrl_c::reset(unsigned type) +{ + Bit32u i; + + BX_FD_THIS s.pending_irq = 0; + BX_FD_THIS s.reset_sensei = 0; /* no reset result present */ + + BX_FD_THIS s.main_status_reg = 0; + BX_FD_THIS s.status_reg0 = 0; + BX_FD_THIS s.status_reg1 = 0; + BX_FD_THIS s.status_reg2 = 0; + BX_FD_THIS s.status_reg3 = 0; + + // software reset (via DOR port 0x3f2 bit 2) does not change DOR + if (type == BX_RESET_HARDWARE) { + BX_FD_THIS s.DOR = 0x0c; + // motor off, drive 3..0 + // DMA/INT enabled + // normal operation + // drive select 0 + + // DIR and CCR affected only by hard reset + for (i=0; i<4; i++) { + BX_FD_THIS s.DIR[i] |= 0x80; // disk changed + } + BX_FD_THIS s.data_rate = 2; /* 250 Kbps */ + BX_FD_THIS s.lock = 0; + } else { + BX_INFO(("controller reset in software")); + } + if (BX_FD_THIS s.lock == 0) { + BX_FD_THIS s.config = 0; + BX_FD_THIS s.pretrk = 0; + } + BX_FD_THIS s.perp_mode = 0; + + for (i=0; i<4; i++) { + BX_FD_THIS s.cylinder[i] = 0; + BX_FD_THIS s.head[i] = 0; + BX_FD_THIS s.sector[i] = 0; + BX_FD_THIS s.eot[i] = 0; + } + + DEV_pic_lower_irq(6); + if (!(BX_FD_THIS s.main_status_reg & FD_MS_NDMA)) { + DEV_dma_set_drq(FLOPPY_DMA_CHAN, 0); + } + enter_idle_phase(); +} + +void bx_floppy_ctrl_c::register_state(void) +{ + unsigned i; + char name[8]; + bx_list_c *drive; + + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "floppy", "Floppy State", 35); + new bx_shadow_num_c(list, "data_rate", &BX_FD_THIS s.data_rate); + bx_list_c *command = new bx_list_c(list, "command", 10); + for (i=0; i<10; i++) { + sprintf(name, "%d", i); + new bx_shadow_num_c(command, name, &BX_FD_THIS s.command[i], BASE_HEX); + } + new bx_shadow_num_c(list, "command_index", &BX_FD_THIS s.command_index); + new bx_shadow_num_c(list, "command_size", &BX_FD_THIS s.command_size); + new bx_shadow_bool_c(list, "command_complete", &BX_FD_THIS s.command_complete); + new bx_shadow_num_c(list, "pending_command", &BX_FD_THIS s.pending_command, BASE_HEX); + new bx_shadow_bool_c(list, "multi_track", &BX_FD_THIS s.multi_track); + new bx_shadow_bool_c(list, "pending_irq", &BX_FD_THIS s.pending_irq); + new bx_shadow_num_c(list, "reset_sensei", &BX_FD_THIS s.reset_sensei); + new bx_shadow_num_c(list, "format_count", &BX_FD_THIS s.format_count); + new bx_shadow_num_c(list, "format_fillbyte", &BX_FD_THIS s.format_fillbyte, BASE_HEX); + bx_list_c *result = new bx_list_c(list, "result", 10); + for (i=0; i<10; i++) { + sprintf(name, "%d", i); + new bx_shadow_num_c(result, name, &BX_FD_THIS s.result[i], BASE_HEX); + } + new bx_shadow_num_c(list, "result_index", &BX_FD_THIS s.result_index); + new bx_shadow_num_c(list, "result_size", &BX_FD_THIS s.result_size); + new bx_shadow_num_c(list, "DOR", &BX_FD_THIS s.DOR, BASE_HEX); + new bx_shadow_num_c(list, "TDR", &BX_FD_THIS s.TDR, BASE_HEX); + new bx_shadow_bool_c(list, "TC", &BX_FD_THIS s.TC); + new bx_shadow_num_c(list, "main_status_reg", &BX_FD_THIS s.main_status_reg, BASE_HEX); + new bx_shadow_num_c(list, "status_reg0", &BX_FD_THIS s.status_reg0, BASE_HEX); + new bx_shadow_num_c(list, "status_reg1", &BX_FD_THIS s.status_reg1, BASE_HEX); + new bx_shadow_num_c(list, "status_reg2", &BX_FD_THIS s.status_reg2, BASE_HEX); + new bx_shadow_num_c(list, "status_reg3", &BX_FD_THIS s.status_reg3, BASE_HEX); + new bx_shadow_num_c(list, "floppy_buffer_index", &BX_FD_THIS s.floppy_buffer_index); + new bx_shadow_bool_c(list, "lock", &BX_FD_THIS s.lock); + new bx_shadow_num_c(list, "SRT", &BX_FD_THIS s.SRT, BASE_HEX); + new bx_shadow_num_c(list, "HUT", &BX_FD_THIS s.HUT, BASE_HEX); + new bx_shadow_num_c(list, "HLT", &BX_FD_THIS s.HLT, BASE_HEX); + new bx_shadow_num_c(list, "config", &BX_FD_THIS s.config, BASE_HEX); + new bx_shadow_num_c(list, "pretrk", &BX_FD_THIS s.pretrk); + new bx_shadow_num_c(list, "perp_mode", &BX_FD_THIS s.perp_mode); + new bx_shadow_data_c(list, "buffer", BX_FD_THIS s.floppy_buffer, 512); + for (i=0; i<4; i++) { + sprintf(name, "drive%d", i); + drive = new bx_list_c(list, name, 6); + new bx_shadow_num_c(drive, "cylinder", &BX_FD_THIS s.cylinder[i]); + new bx_shadow_num_c(drive, "head", &BX_FD_THIS s.head[i]); + new bx_shadow_num_c(drive, "sector", &BX_FD_THIS s.sector[i]); + new bx_shadow_num_c(drive, "eot", &BX_FD_THIS s.eot[i]); + new bx_shadow_bool_c(drive, "media_present", &BX_FD_THIS s.media_present[i]); + new bx_shadow_num_c(drive, "DIR", &BX_FD_THIS s.DIR[i], BASE_HEX); + } +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +Bit32u bx_floppy_ctrl_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_FD_SMF + bx_floppy_ctrl_c *class_ptr = (bx_floppy_ctrl_c *) this_ptr; + + return class_ptr->read(address, io_len); +} + +/* reads from the floppy io ports */ +Bit32u bx_floppy_ctrl_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_FD_SMF + Bit8u value = 0, drive; + + Bit8u pending_command = BX_FD_THIS s.pending_command; + switch (address) { +#if BX_DMA_FLOPPY_IO + case 0x3F2: // diskette controller digital output register + value = BX_FD_THIS s.DOR; + break; + + case 0x3F4: /* diskette controller main status register */ + value = BX_FD_THIS s.main_status_reg; + break; + + case 0x3F5: /* diskette controller data */ + if ((BX_FD_THIS s.main_status_reg & FD_MS_NDMA) && + ((BX_FD_THIS s.pending_command & 0x4f) == 0x46)) { + dma_write(&value); + lower_interrupt(); + // don't enter idle phase until we've given CPU last data byte + if (BX_FD_THIS s.TC) enter_idle_phase(); + } else if (BX_FD_THIS s.result_size == 0) { + BX_ERROR(("port 0x3f5: no results to read")); + BX_FD_THIS s.main_status_reg &= FD_MS_NDMA; + value = BX_FD_THIS s.result[0]; + } else { + value = BX_FD_THIS s.result[BX_FD_THIS s.result_index++]; + BX_FD_THIS s.main_status_reg &= 0xF0; + BX_FD_THIS lower_interrupt(); + if (BX_FD_THIS s.result_index >= BX_FD_THIS s.result_size) { + enter_idle_phase(); + } + } + break; +#endif // #if BX_DMA_FLOPPY_IO + + case 0x3F3: // Tape Drive Register + drive = BX_FD_THIS s.DOR & 0x03; + if (BX_FD_THIS s.media_present[drive]) { + switch (BX_FD_THIS s.media[drive].type) { + case BX_FLOPPY_160K: + case BX_FLOPPY_180K: + case BX_FLOPPY_320K: + case BX_FLOPPY_360K: + case BX_FLOPPY_1_2: + value = 0x00; + break; + case BX_FLOPPY_720K: + value = 0xc0; + break; + case BX_FLOPPY_1_44: + value = 0x80; + break; + case BX_FLOPPY_2_88: + value = 0x40; + break; + default: // BX_FLOPPY_NONE + value = 0x20; + break; + } + } else { + value = 0x20; + } + break; + + case 0x3F6: // Reserved for future floppy controllers + // This address shared with the hard drive controller + value = DEV_hd_read_handler(bx_devices.pluginHardDrive, address, io_len); + break; + + case 0x3F7: // diskette controller digital input register + // This address shared with the hard drive controller: + // Bit 7 : floppy + // Bits 6..0: hard drive + value = DEV_hd_read_handler(bx_devices.pluginHardDrive, address, io_len); + value &= 0x7f; + // add in diskette change line if motor is on + drive = BX_FD_THIS s.DOR & 0x03; + if (BX_FD_THIS s.DOR & (1<<(drive+4))) { + value |= (BX_FD_THIS s.DIR[drive] & 0x80); + } + break; + + default: + BX_ERROR(("io_read: unsupported address 0x%04x", (unsigned) address)); + return(0); + break; + } + BX_DEBUG(("read(): during command 0x%02x, port 0x%04x returns 0x%02x", + pending_command, address, value)); + return (value); +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_floppy_ctrl_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_FD_SMF + bx_floppy_ctrl_c *class_ptr = (bx_floppy_ctrl_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +/* writes to the floppy io ports */ +void bx_floppy_ctrl_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_FD_SMF + Bit8u dma_and_interrupt_enable; + Bit8u normal_operation, prev_normal_operation; + Bit8u drive_select; + Bit8u motor_on_drive0, motor_on_drive1; + + BX_DEBUG(("write access to port 0x%04x, value=0x%02x", address, value)); + + switch (address) { +#if BX_DMA_FLOPPY_IO + case 0x3F2: /* diskette controller digital output register */ + motor_on_drive0 = value & 0x10; + motor_on_drive1 = value & 0x20; + /* set status bar conditions for Floppy 0 and Floppy 1 */ + if (BX_FD_THIS s.statusbar_id[0] >= 0) { + if (motor_on_drive0 != (BX_FD_THIS s.DOR & 0x10)) + bx_gui->statusbar_setitem(BX_FD_THIS s.statusbar_id[0], motor_on_drive0); + } + if (BX_FD_THIS s.statusbar_id[1] >= 0) { + if (motor_on_drive1 != (BX_FD_THIS s.DOR & 0x20)) + bx_gui->statusbar_setitem(BX_FD_THIS s.statusbar_id[1], motor_on_drive1); + } + dma_and_interrupt_enable = value & 0x08; + if (!dma_and_interrupt_enable) + BX_DEBUG(("DMA and interrupt capabilities disabled")); + normal_operation = value & 0x04; + drive_select = value & 0x03; + + prev_normal_operation = BX_FD_THIS s.DOR & 0x04; + BX_FD_THIS s.DOR = value; + + if (prev_normal_operation==0 && normal_operation) { + // transition from RESET to NORMAL + bx_pc_system.activate_timer(BX_FD_THIS s.floppy_timer_index, 250, 0); + } else if (prev_normal_operation && normal_operation==0) { + // transition from NORMAL to RESET + BX_FD_THIS s.main_status_reg &= FD_MS_NDMA; + BX_FD_THIS s.pending_command = 0xfe; // RESET pending + } + BX_DEBUG(("io_write: digital output register")); + BX_DEBUG((" motor on, drive1 = %d", motor_on_drive1 > 0)); + BX_DEBUG((" motor on, drive0 = %d", motor_on_drive0 > 0)); + BX_DEBUG((" dma_and_interrupt_enable=%02x", + (unsigned) dma_and_interrupt_enable)); + BX_DEBUG((" normal_operation=%02x", + (unsigned) normal_operation)); + BX_DEBUG((" drive_select=%02x", + (unsigned) drive_select)); + if (BX_FD_THIS s.device_type[drive_select] == FDRIVE_NONE) { + BX_DEBUG(("WARNING: non existing drive selected")); + } + break; + + case 0x3f4: /* diskette controller data rate select register */ + BX_FD_THIS s.data_rate = value & 0x03; + if (value & 0x80) { + BX_FD_THIS s.main_status_reg &= FD_MS_NDMA; + BX_FD_THIS s.pending_command = 0xfe; // RESET pending + bx_pc_system.activate_timer(BX_FD_THIS s.floppy_timer_index, 250, 0); + } + if ((value & 0x7c) > 0) { + BX_ERROR(("write to data rate select register: unsupported bits set")); + } + break; + + case 0x3F5: /* diskette controller data */ + BX_DEBUG(("command = 0x%02x", (unsigned) value)); + if ((BX_FD_THIS s.main_status_reg & FD_MS_NDMA) && ((BX_FD_THIS s.pending_command & 0x4f) == 0x45)) { + BX_FD_THIS dma_read((Bit8u *) &value); + BX_FD_THIS lower_interrupt(); + break; + } else if (BX_FD_THIS s.command_complete) { + if (BX_FD_THIS s.pending_command != 0) + BX_PANIC(("write 0x03f5: receiving new command 0x%02x, old one (0x%02x) pending", + value, BX_FD_THIS s.pending_command)); + BX_FD_THIS s.command[0] = value; + BX_FD_THIS s.command_complete = 0; + BX_FD_THIS s.command_index = 1; + /* read/write command in progress */ + BX_FD_THIS s.main_status_reg &= ~FD_MS_DIO; // leave drive status untouched + BX_FD_THIS s.main_status_reg |= FD_MS_MRQ | FD_MS_BUSY; + switch (value) { + case 0x03: /* specify */ + BX_FD_THIS s.command_size = 3; + break; + case 0x04: // get status + BX_FD_THIS s.command_size = 2; + break; + case 0x07: /* recalibrate */ + BX_FD_THIS s.command_size = 2; + break; + case 0x08: /* sense interrupt status */ + BX_FD_THIS s.command_size = 1; + break; + case 0x0f: /* seek */ + BX_FD_THIS s.command_size = 3; + break; + case 0x4a: /* read ID */ + BX_FD_THIS s.command_size = 2; + break; + case 0x4d: /* format track */ + BX_FD_THIS s.command_size = 6; + break; + case 0x45: + case 0xc5: /* write normal data */ + BX_FD_THIS s.command_size = 9; + break; + case 0x46: + case 0x66: + case 0xc6: + case 0xe6: /* read normal data */ + BX_FD_THIS s.command_size = 9; + break; + + case 0x0e: // dump registers (Enhanced drives) + case 0x10: // Version command, enhanced controller returns 0x90 + case 0x14: // Unlock command (Enhanced) + case 0x94: // Lock command (Enhanced) + BX_FD_THIS s.command_size = 0; + BX_FD_THIS s.pending_command = value; + enter_result_phase(); + break; + case 0x12: // Perpendicular mode (Enhanced) + BX_FD_THIS s.command_size = 2; + break; + case 0x13: // Configure command (Enhanced) + BX_FD_THIS s.command_size = 4; + break; + + case 0x18: // National Semiconductor version command; return 80h + // These commands are not implemented on the standard + // controller and return an error. They are available on + // the enhanced controller. + BX_DEBUG(("io_write: 0x3f5: unsupported floppy command 0x%02x", + (unsigned) value)); + BX_FD_THIS s.command_size = 0; // make sure we don't try to process this command + BX_FD_THIS s.status_reg0 = 0x80; // status: invalid command + enter_result_phase(); + break; + + default: + BX_ERROR(("io_write: 0x3f5: invalid floppy command 0x%02x", + (unsigned) value)); + BX_FD_THIS s.command_size = 0; // make sure we don't try to process this command + BX_FD_THIS s.status_reg0 = 0x80; // status: invalid command + enter_result_phase(); + break; + } + } else { + BX_FD_THIS s.command[BX_FD_THIS s.command_index++] = + value; + } + if (BX_FD_THIS s.command_index == + BX_FD_THIS s.command_size) { + /* read/write command not in progress any more */ + floppy_command(); + BX_FD_THIS s.command_complete = 1; + } + BX_DEBUG(("io_write: diskette controller data")); + return; + break; +#endif // #if BX_DMA_FLOPPY_IO + + case 0x3F6: /* diskette controller (reserved) */ + BX_DEBUG(("io_write: reserved register 0x3f6 unsupported")); + // this address shared with the hard drive controller + DEV_hd_write_handler(bx_devices.pluginHardDrive, address, value, io_len); + break; + +#if BX_DMA_FLOPPY_IO + case 0x3F7: /* diskette controller configuration control register */ + if ((value & 0x03) != BX_FD_THIS s.data_rate) + BX_INFO(("io_write: config control register: 0x%02x", value)); + BX_FD_THIS s.data_rate = value & 0x03; + switch (BX_FD_THIS s.data_rate) { + case 0: BX_DEBUG((" 500 Kbps")); break; + case 1: BX_DEBUG((" 300 Kbps")); break; + case 2: BX_DEBUG((" 250 Kbps")); break; + case 3: BX_DEBUG((" 1 Mbps")); break; + } + break; + + default: + BX_ERROR(("io_write ignored: 0x%04x = 0x%02x", (unsigned) address, (unsigned) value)); + break; +#endif // #if BX_DMA_FLOPPY_IO + } +} + +void bx_floppy_ctrl_c::floppy_command(void) +{ + unsigned i; + Bit8u motor_on; + Bit8u head, drive, cylinder, sector, eot; + Bit8u sector_size, data_length; + Bit32u logical_sector, sector_time, step_delay; + + // Print command + char buf[9+(9*5)+1], *p = buf; + p += sprintf(p, "COMMAND: "); + for (i=0; i> 4; + BX_FD_THIS s.HUT = BX_FD_THIS s.command[1] & 0x0f; + BX_FD_THIS s.HLT = BX_FD_THIS s.command[2] >> 1; + BX_FD_THIS s.main_status_reg |= (BX_FD_THIS s.command[2] & 0x01) ? FD_MS_NDMA : 0; + if (BX_FD_THIS s.main_status_reg & FD_MS_NDMA) + BX_ERROR(("non DMA mode not fully implemented yet")); + enter_idle_phase(); + return; + + case 0x04: // get status + drive = (BX_FD_THIS s.command[1] & 0x03); + BX_FD_THIS s.head[drive] = (BX_FD_THIS s.command[1] >> 2) & 0x01; + BX_FD_THIS s.status_reg3 = 0x28 | (BX_FD_THIS s.head[drive]<<2) | drive + | (BX_FD_THIS s.media[drive].write_protected ? 0x40 : 0x00); + if ((BX_FD_THIS s.device_type[drive] != FDRIVE_NONE) && + (BX_FD_THIS s.cylinder[drive] == 0)) + BX_FD_THIS s.status_reg3 |= 0x10; + enter_result_phase(); + return; + + case 0x07: // recalibrate + drive = (BX_FD_THIS s.command[1] & 0x03); + BX_FD_THIS s.DOR &= 0xfc; + BX_FD_THIS s.DOR |= drive; + BX_DEBUG(("floppy_command(): recalibrate drive %u", + (unsigned) drive)); + step_delay = calculate_step_delay(drive, 0); + bx_pc_system.activate_timer(BX_FD_THIS s.floppy_timer_index, step_delay, 0); + /* command head to track 0 + * controller set to non-busy + * error condition noted in Status reg 0's equipment check bit + * seek end bit set to 1 in Status reg 0 regardless of outcome + * The last two are taken care of in timer(). + */ + BX_FD_THIS s.cylinder[drive] = 0; + BX_FD_THIS s.main_status_reg &= FD_MS_NDMA; + BX_FD_THIS s.main_status_reg |= (1 << drive); + return; + + case 0x08: /* sense interrupt status */ + /* execution: + * get status + * result: + * no interupt + * byte0 = status reg0 + * byte1 = current cylinder number (0 to 79) + */ + if (BX_FD_THIS s.reset_sensei > 0) { + drive = 4 - BX_FD_THIS s.reset_sensei; + BX_FD_THIS s.status_reg0 &= 0xf8; + BX_FD_THIS s.status_reg0 |= (BX_FD_THIS s.head[drive] << 2) | drive; + BX_FD_THIS s.reset_sensei--; + } else if (!BX_FD_THIS s.pending_irq) { + BX_FD_THIS s.status_reg0 = 0x80; + } + BX_DEBUG(("sense interrupt status")); + enter_result_phase(); + return; + + case 0x0f: /* seek */ + /* command: + * byte0 = 0F + * byte1 = drive & head select + * byte2 = cylinder number + * execution: + * postion head over specified cylinder + * result: + * no result bytes, issues an interrupt + */ + drive = BX_FD_THIS s.command[1] & 0x03; + BX_FD_THIS s.DOR &= 0xfc; + BX_FD_THIS s.DOR |= drive; + + BX_FD_THIS s.head[drive] = (BX_FD_THIS s.command[1] >> 2) & 0x01; + step_delay = calculate_step_delay(drive, BX_FD_THIS s.command[2]); + bx_pc_system.activate_timer(BX_FD_THIS s.floppy_timer_index, step_delay, 0); + /* ??? should also check cylinder validity */ + BX_FD_THIS s.cylinder[drive] = BX_FD_THIS s.command[2]; + /* data reg not ready, drive not busy */ + BX_FD_THIS s.main_status_reg &= FD_MS_NDMA; + BX_FD_THIS s.main_status_reg |= (1 << drive); + return; + + case 0x13: // Configure + BX_DEBUG(("configure (eis = 0x%02x)", BX_FD_THIS s.command[2] & 0x40)); + BX_DEBUG(("configure (efifo = 0x%02x)", BX_FD_THIS s.command[2] & 0x20)); + BX_DEBUG(("configure (no poll = 0x%02x)", BX_FD_THIS s.command[2] & 0x10)); + BX_DEBUG(("configure (fifothr = 0x%02x)", BX_FD_THIS s.command[2] & 0x0f)); + BX_DEBUG(("configure (pretrk = 0x%02x)", BX_FD_THIS s.command[3])); + BX_FD_THIS s.config = BX_FD_THIS s.command[2]; + BX_FD_THIS s.pretrk = BX_FD_THIS s.command[3]; + enter_idle_phase(); + return; + + case 0x4a: // read ID + drive = BX_FD_THIS s.command[1] & 0x03; + BX_FD_THIS s.head[drive] = (BX_FD_THIS s.command[1] >> 2) & 0x01; + BX_FD_THIS s.DOR &= 0xfc; + BX_FD_THIS s.DOR |= drive; + + motor_on = (BX_FD_THIS s.DOR>>(drive+4)) & 0x01; + if (motor_on == 0) { + BX_ERROR(("floppy_command(): read ID: motor not on")); + BX_FD_THIS s.main_status_reg &= FD_MS_NDMA; + BX_FD_THIS s.main_status_reg |= FD_MS_BUSY; + return; // Hang controller + } + if (BX_FD_THIS s.device_type[drive] == FDRIVE_NONE) { + BX_ERROR(("floppy_command(): read ID: bad drive #%d", drive)); + BX_FD_THIS s.main_status_reg &= FD_MS_NDMA; + BX_FD_THIS s.main_status_reg |= FD_MS_BUSY; + return; // Hang controller + } + if (BX_FD_THIS s.media_present[drive] == 0) { + BX_INFO(("attempt to read sector ID with media not present")); + BX_FD_THIS s.main_status_reg &= FD_MS_NDMA; + BX_FD_THIS s.main_status_reg |= FD_MS_BUSY; + return; // Hang controller + } + BX_FD_THIS s.status_reg0 = (BX_FD_THIS s.head[drive]<<2) | drive; + // time to read one sector at 300 rpm + sector_time = 200000 / BX_FD_THIS s.media[drive].sectors_per_track; + bx_pc_system.activate_timer(BX_FD_THIS s.floppy_timer_index, sector_time, 0); + /* data reg not ready, controller busy */ + BX_FD_THIS s.main_status_reg &= FD_MS_NDMA; + BX_FD_THIS s.main_status_reg |= FD_MS_BUSY; + return; + + case 0x4d: // format track + drive = BX_FD_THIS s.command[1] & 0x03; + BX_FD_THIS s.DOR &= 0xfc; + BX_FD_THIS s.DOR |= drive; + + motor_on = (BX_FD_THIS s.DOR>>(drive+4)) & 0x01; + if (motor_on == 0) + BX_PANIC(("floppy_command(): format track: motor not on")); + BX_FD_THIS s.head[drive] = (BX_FD_THIS s.command[1] >> 2) & 0x01; + sector_size = BX_FD_THIS s.command[2]; + BX_FD_THIS s.format_count = BX_FD_THIS s.command[3]; + BX_FD_THIS s.format_fillbyte = BX_FD_THIS s.command[5]; + if (BX_FD_THIS s.device_type[drive] == FDRIVE_NONE) + BX_PANIC(("floppy_command(): format track: bad drive #%d", drive)); + + if (sector_size != 0x02) { // 512 bytes + BX_PANIC(("format track: sector size %d not supported", 128<> 7); + if ((BX_FD_THIS s.DOR & 0x08) == 0) + BX_PANIC(("read/write command with DMA and int disabled")); + drive = BX_FD_THIS s.command[1] & 0x03; + BX_FD_THIS s.DOR &= 0xfc; + BX_FD_THIS s.DOR |= drive; + + motor_on = (BX_FD_THIS s.DOR>>(drive+4)) & 0x01; + if (motor_on == 0) + BX_PANIC(("floppy_command(): read/write: motor not on")); + head = BX_FD_THIS s.command[3] & 0x01; + cylinder = BX_FD_THIS s.command[2]; /* 0..79 depending */ + sector = BX_FD_THIS s.command[4]; /* 1..36 depending */ + eot = BX_FD_THIS s.command[6]; /* 1..36 depending */ + sector_size = BX_FD_THIS s.command[5]; + data_length = BX_FD_THIS s.command[8]; + BX_DEBUG(("read/write normal data")); + BX_DEBUG(("BEFORE")); + BX_DEBUG((" drive = %u", (unsigned) drive)); + BX_DEBUG((" head = %u", (unsigned) head)); + BX_DEBUG((" cylinder = %u", (unsigned) cylinder)); + BX_DEBUG((" sector = %u", (unsigned) sector)); + BX_DEBUG((" eot = %u", (unsigned) eot)); + if (BX_FD_THIS s.device_type[drive] == FDRIVE_NONE) + BX_PANIC(("floppy_command(): read/write: bad drive #%d", drive)); + + // check that head number in command[1] bit two matches the head + // reported in the head number field. Real floppy drives are + // picky about this, as reported in SF bug #439945, (Floppy drive + // read input error checking). + if (head != ((BX_FD_THIS s.command[1]>>2)&1)) { + BX_ERROR(("head number in command[1] doesn't match head field")); + BX_FD_THIS s.status_reg0 = 0x40 | (BX_FD_THIS s.head[drive]<<2) | drive; // abnormal termination + BX_FD_THIS s.status_reg1 = 0x04; // 0000 0100 + BX_FD_THIS s.status_reg2 = 0x00; // 0000 0000 + enter_result_phase(); + return; + } + + if (BX_FD_THIS s.media_present[drive] == 0) { + BX_INFO(("attempt to read/write sector %u with media not present", (unsigned) sector)); + return; // Hang controller + } + + if (sector_size != 0x02) { // 512 bytes + BX_PANIC(("read/write command: sector size %d not supported", 128<= BX_FD_THIS s.media[drive].tracks) { + BX_PANIC(("io: norm r/w parms out of range: sec#%02xh cyl#%02xh eot#%02xh head#%02xh", + (unsigned) sector, (unsigned) cylinder, (unsigned) eot, + (unsigned) head)); + return; + } + + if (sector > BX_FD_THIS s.media[drive].sectors_per_track) { + BX_INFO(("attempt to read/write sector %u past last sector %u", + (unsigned) sector, + (unsigned) BX_FD_THIS s.media[drive].sectors_per_track)); + BX_FD_THIS s.cylinder[drive] = cylinder; + BX_FD_THIS s.head[drive] = head; + BX_FD_THIS s.sector[drive] = sector; + + BX_FD_THIS s.status_reg0 = 0x40 | (BX_FD_THIS s.head[drive]<<2) | drive; + BX_FD_THIS s.status_reg1 = 0x04; + BX_FD_THIS s.status_reg2 = 0x00; + enter_result_phase(); + return; + } + + if (cylinder != BX_FD_THIS s.cylinder[drive]) { + BX_DEBUG(("io: cylinder request != current cylinder")); + reset_changeline(); + } + + logical_sector = (cylinder * BX_FD_THIS s.media[drive].heads * BX_FD_THIS s.media[drive].sectors_per_track) + + (head * BX_FD_THIS s.media[drive].sectors_per_track) + + (sector - 1); + + if (logical_sector >= BX_FD_THIS s.media[drive].sectors) { + BX_PANIC(("io: logical sector out of bounds")); + } + // This hack makes older versions of the Bochs BIOS work + if (eot == 0) { + eot = BX_FD_THIS s.media[drive].sectors_per_track; + } + BX_FD_THIS s.cylinder[drive] = cylinder; + BX_FD_THIS s.head[drive] = head; + BX_FD_THIS s.sector[drive] = sector; + BX_FD_THIS s.eot[drive] = eot; + + if ((BX_FD_THIS s.command[0] & 0x4f) == 0x46) { // read + floppy_xfer(drive, logical_sector*512, BX_FD_THIS s.floppy_buffer, + 512, FROM_FLOPPY); + /* controller busy; if DMA mode, data reg not ready */ + BX_FD_THIS s.main_status_reg &= FD_MS_NDMA; + BX_FD_THIS s.main_status_reg |= FD_MS_BUSY; + if (BX_FD_THIS s.main_status_reg & FD_MS_NDMA) { + BX_FD_THIS s.main_status_reg |= (FD_MS_MRQ | FD_MS_DIO); + } + // time to read one sector at 300 rpm + sector_time = 200000 / BX_FD_THIS s.media[drive].sectors_per_track; + bx_pc_system.activate_timer(BX_FD_THIS s.floppy_timer_index, + sector_time , 0); + } else if ((BX_FD_THIS s.command[0] & 0x7f) == 0x45) { // write + /* controller busy; if DMA mode, data reg not ready */ + BX_FD_THIS s.main_status_reg &= FD_MS_NDMA; + BX_FD_THIS s.main_status_reg |= FD_MS_BUSY; + if (BX_FD_THIS s.main_status_reg & FD_MS_NDMA) { + BX_FD_THIS s.main_status_reg |= FD_MS_MRQ; + } else { + DEV_dma_set_drq(FLOPPY_DMA_CHAN, 1); + } + } else { + BX_PANIC(("floppy_command(): unknown read/write command")); + return; + } + break; + + case 0x12: // Perpendicular mode + BX_FD_THIS s.perp_mode = BX_FD_THIS s.command[1]; + BX_INFO(("perpendicular mode: config=0x%02x", BX_FD_THIS s.perp_mode)); + enter_idle_phase(); + break; + + default: // invalid or unsupported command; these are captured in write() above + BX_PANIC(("You should never get here! cmd = 0x%02x", + BX_FD_THIS s.command[0])); + } +} + +void bx_floppy_ctrl_c::floppy_xfer(Bit8u drive, Bit32u offset, Bit8u *buffer, + Bit32u bytes, Bit8u direction) +{ + int ret = 0; + + if (BX_FD_THIS s.device_type[drive] == FDRIVE_NONE) + BX_PANIC(("floppy_xfer: bad drive #%d", drive)); + + BX_DEBUG(("floppy_xfer: drive=%u, offset=%u, bytes=%u, direction=%s floppy", + drive, offset, bytes, (direction==FROM_FLOPPY)? "from" : "to")); + +#if BX_WITH_MACOS + if (strcmp(SIM->get_param_string(BXPN_FLOPPYA_PATH)->getptr(), SuperDrive)) +#endif + { + if (BX_FD_THIS s.media[drive].vvfat_floppy) { + ret = (int)BX_FD_THIS s.media[drive].vvfat->lseek(offset, SEEK_SET); + } else if (!BX_FD_THIS s.media[drive].raw_floppy_win95) { + // don't need to seek the file if we are using Win95 type direct access + ret = (int)lseek(BX_FD_THIS s.media[drive].fd, offset, SEEK_SET); + } + if (ret < 0) { + BX_PANIC(("could not perform lseek() to %d on floppy image file", offset)); + return; + } + } + + if (direction == FROM_FLOPPY) { + if (BX_FD_THIS s.media[drive].vvfat_floppy) { + ret = BX_FD_THIS s.media[drive].vvfat->read(buffer, bytes); +#if BX_WITH_MACOS + } else if (!strcmp(SIM->get_param_string(BXPN_FLOPPYA_PATH)->getptr(), SuperDrive)) + ret = fd_read((char *) buffer, offset, bytes); +#endif +#if defined(WIN32) && !defined(_WIN64) + } else if (BX_FD_THIS s.media[drive].raw_floppy_win95) { + // if using Win95 direct access + DWORD ret_cnt = 0; + DIOC_REGISTERS reg; + HANDLE hFile = CreateFile("\\\\.\\vwin32", 0, 0, NULL, 0, FILE_FLAG_DELETE_ON_CLOSE, NULL); + if (hFile == INVALID_HANDLE_VALUE) + BX_PANIC(("Could not open floppy device under Win95 for read")); + reg.reg_ECX = bytes >> 9; // / 512 + reg.reg_EDX = offset >> 9; // / 512 + reg.reg_EBX = (DWORD) buffer; + reg.reg_EAX = BX_FD_THIS s.media[drive].raw_floppy_win95_drv; + DeviceIoControl(hFile, VWIN32_DIOC_DOS_INT25, + ®, sizeof(reg), ®, sizeof(reg), &ret_cnt, NULL); + CloseHandle(hFile); + // I don't know why this returns 28 instead of 512, but it works + if (ret_cnt == 28) + ret = 512; +#endif + } else { + ret = ::read(BX_FD_THIS s.media[drive].fd, (bx_ptr_t) buffer, bytes); + } + if (ret < int(bytes)) { + /* ??? */ + if (ret > 0) { + BX_INFO(("partial read() on floppy image returns %u/%u", + (unsigned) ret, (unsigned) bytes)); + memset(buffer + ret, 0, bytes - ret); + } + else { + BX_INFO(("read() on floppy image returns 0")); + memset(buffer, 0, bytes); + } + } + } + + else { // TO_FLOPPY + BX_ASSERT (!BX_FD_THIS s.media[drive].write_protected); + if (BX_FD_THIS s.media[drive].vvfat_floppy) { + ret = BX_FD_THIS s.media[drive].vvfat->write(buffer, bytes); +#if BX_WITH_MACOS + } else if (!strcmp(SIM->get_param_string(BXPN_FLOPPYA_PATH)->getptr(), SuperDrive)) + ret = fd_write((char *) buffer, offset, bytes); +#endif +#if defined(WIN32) && !defined(_WIN64) + } else if (BX_FD_THIS s.media[drive].raw_floppy_win95) { + // if using Win95 direct access + DWORD ret_cnt = 0; + DIOC_REGISTERS reg; + HANDLE hFile = CreateFile("\\\\.\\vwin32", 0, 0, NULL, 0, FILE_FLAG_DELETE_ON_CLOSE, NULL); + if (hFile == INVALID_HANDLE_VALUE) + BX_PANIC(("Could not open floppy device under Win95")); + reg.reg_ECX = bytes >> 9; // / 512 + reg.reg_EDX = offset >> 9; // / 512 + reg.reg_EBX = (DWORD) buffer; + reg.reg_EAX = BX_FD_THIS s.media[drive].raw_floppy_win95_drv; + DeviceIoControl(hFile, VWIN32_DIOC_DOS_INT26, + ®, sizeof(reg), ®, sizeof(reg), (LPDWORD) &ret_cnt, NULL); + CloseHandle(hFile); + // I don't know why this returns 28 instead of 512, but it works + if (ret_cnt == 28) + ret = 512; +#endif + } else { + ret = ::write(BX_FD_THIS s.media[drive].fd, (bx_ptr_t) buffer, bytes); + } + if (ret < int(bytes)) { + BX_PANIC(("could not perform write() on floppy image file")); + } + } +} + +void bx_floppy_ctrl_c::timer_handler(void *this_ptr) +{ + bx_floppy_ctrl_c *class_ptr = (bx_floppy_ctrl_c *) this_ptr; + class_ptr->timer(); +} + +void bx_floppy_ctrl_c::timer() +{ + Bit8u drive, motor_on; + + drive = BX_FD_THIS s.DOR & 0x03; + switch (BX_FD_THIS s.pending_command) { + case 0x07: // recal + BX_FD_THIS s.status_reg0 = 0x20 | drive; + motor_on = ((BX_FD_THIS s.DOR>>(drive+4)) & 0x01); + if ((BX_FD_THIS s.device_type[drive] == FDRIVE_NONE) || (motor_on == 0)) { + BX_FD_THIS s.status_reg0 |= 0x50; + } + enter_idle_phase(); + BX_FD_THIS raise_interrupt(); + break; + + case 0x0f: // seek + BX_FD_THIS s.status_reg0 = 0x20 | (BX_FD_THIS s.head[drive]<<2) | drive; + enter_idle_phase(); + BX_FD_THIS raise_interrupt(); + break; + + case 0x4a: /* read ID */ + enter_result_phase(); + break; + + case 0x45: /* write normal data */ + case 0xc5: + if (BX_FD_THIS s.TC) { // Terminal Count line, done + BX_FD_THIS s.status_reg0 = (BX_FD_THIS s.head[drive] << 2) | drive; + BX_FD_THIS s.status_reg1 = 0; + BX_FD_THIS s.status_reg2 = 0; + + BX_DEBUG(("<>")); + BX_DEBUG(("AFTER")); + BX_DEBUG((" drive = %u", drive)); + BX_DEBUG((" head = %u", BX_FD_THIS s.head[drive])); + BX_DEBUG((" cylinder = %u", BX_FD_THIS s.cylinder[drive])); + BX_DEBUG((" sector = %u", BX_FD_THIS s.sector[drive])); + + enter_result_phase(); + } else { + // transfer next sector + if (!(BX_FD_THIS s.main_status_reg & FD_MS_NDMA)) { + DEV_dma_set_drq(FLOPPY_DMA_CHAN, 1); + } + } + break; + + case 0x46: /* read normal data */ + case 0x66: + case 0xc6: + case 0xe6: + // transfer next sector + if (BX_FD_THIS s.main_status_reg & FD_MS_NDMA) { + BX_FD_THIS s.main_status_reg &= ~FD_MS_BUSY; // clear busy bit + BX_FD_THIS s.main_status_reg |= FD_MS_MRQ | FD_MS_DIO; // data byte waiting + } else { + DEV_dma_set_drq(FLOPPY_DMA_CHAN, 1); + } + break; + + case 0x4d: /* format track */ + if ((BX_FD_THIS s.format_count == 0) || BX_FD_THIS s.TC) { + BX_FD_THIS s.format_count = 0; + BX_FD_THIS s.status_reg0 = (BX_FD_THIS s.head[drive] << 2) | drive; + enter_result_phase(); + } else { + // transfer next sector + if (!(BX_FD_THIS s.main_status_reg & FD_MS_NDMA)) { + DEV_dma_set_drq(FLOPPY_DMA_CHAN, 1); + } + } + break; + + case 0xfe: // (contrived) RESET + theFloppyController->reset(BX_RESET_SOFTWARE); + BX_FD_THIS s.pending_command = 0; + BX_FD_THIS s.status_reg0 = 0xc0; + BX_FD_THIS raise_interrupt(); + BX_FD_THIS s.reset_sensei = 4; + break; + + case 0x00: // nothing pending? + break; + + default: + BX_PANIC(("floppy:timer(): unknown case %02x", + (unsigned) BX_FD_THIS s.pending_command)); + } +} + +void bx_floppy_ctrl_c::dma_write(Bit8u *data_byte) +{ + // A DMA write is from I/O to Memory + // We need to return the next data byte from the floppy buffer + // to be transfered via the DMA to memory. (read block from floppy) + + Bit8u drive; + + drive = BX_FD_THIS s.DOR & 0x03; + *data_byte = BX_FD_THIS s.floppy_buffer[BX_FD_THIS s.floppy_buffer_index++]; + + BX_FD_THIS s.TC = get_tc(); + if ((BX_FD_THIS s.floppy_buffer_index >= 512) || (BX_FD_THIS s.TC)) { + + if (BX_FD_THIS s.floppy_buffer_index >= 512) { + increment_sector(); // increment to next sector before retrieving next one + BX_FD_THIS s.floppy_buffer_index = 0; + } + if (BX_FD_THIS s.TC) { // Terminal Count line, done + BX_FD_THIS s.status_reg0 = (BX_FD_THIS s.head[drive] << 2) | drive; + BX_FD_THIS s.status_reg1 = 0; + BX_FD_THIS s.status_reg2 = 0; + + BX_DEBUG(("<>")); + BX_DEBUG(("AFTER")); + BX_DEBUG((" drive = %u", drive)); + BX_DEBUG((" head = %u", BX_FD_THIS s.head[drive])); + BX_DEBUG((" cylinder = %u", BX_FD_THIS s.cylinder[drive])); + BX_DEBUG((" sector = %u", BX_FD_THIS s.sector[drive])); + + if (!(BX_FD_THIS s.main_status_reg & FD_MS_NDMA)) { + DEV_dma_set_drq(FLOPPY_DMA_CHAN, 0); + } + enter_result_phase(); + } else { // more data to transfer + Bit32u logical_sector, sector_time; + + // remember that not all floppies have two sides, multiply by s.head[drive] + logical_sector = (BX_FD_THIS s.cylinder[drive] * BX_FD_THIS s.media[drive].heads * + BX_FD_THIS s.media[drive].sectors_per_track) + + (BX_FD_THIS s.head[drive] * + BX_FD_THIS s.media[drive].sectors_per_track) + + (BX_FD_THIS s.sector[drive] - 1); + + floppy_xfer(drive, logical_sector*512, BX_FD_THIS s.floppy_buffer, + 512, FROM_FLOPPY); + if (!(BX_FD_THIS s.main_status_reg & FD_MS_NDMA)) { + DEV_dma_set_drq(FLOPPY_DMA_CHAN, 0); + } + // time to read one sector at 300 rpm + sector_time = 200000 / BX_FD_THIS s.media[drive].sectors_per_track; + bx_pc_system.activate_timer(BX_FD_THIS s.floppy_timer_index, + sector_time , 0); + } + } +} + +void bx_floppy_ctrl_c::dma_read(Bit8u *data_byte) +{ + // A DMA read is from Memory to I/O + // We need to write the data_byte which was already transfered from memory + // via DMA to I/O (write block to floppy) + + Bit8u drive; + Bit32u logical_sector, sector_time; + + drive = BX_FD_THIS s.DOR & 0x03; + if (BX_FD_THIS s.pending_command == 0x4d) { // format track in progress + BX_FD_THIS s.format_count--; + switch (3 - (BX_FD_THIS s.format_count & 0x03)) { + case 0: + BX_FD_THIS s.cylinder[drive] = *data_byte; + break; + case 1: + if (*data_byte != BX_FD_THIS s.head[drive]) + BX_ERROR(("head number does not match head field")); + break; + case 2: + BX_FD_THIS s.sector[drive] = *data_byte; + break; + case 3: + if (*data_byte != 2) BX_ERROR(("dma_read: sector size %d not supported", 128<<(*data_byte))); + BX_DEBUG(("formatting cylinder %u head %u sector %u", + BX_FD_THIS s.cylinder[drive], BX_FD_THIS s.head[drive], + BX_FD_THIS s.sector[drive])); + for (unsigned i = 0; i < 512; i++) { + BX_FD_THIS s.floppy_buffer[i] = BX_FD_THIS s.format_fillbyte; + } + logical_sector = (BX_FD_THIS s.cylinder[drive] * BX_FD_THIS s.media[drive].heads * BX_FD_THIS s.media[drive].sectors_per_track) + + (BX_FD_THIS s.head[drive] * BX_FD_THIS s.media[drive].sectors_per_track) + + (BX_FD_THIS s.sector[drive] - 1); + floppy_xfer(drive, logical_sector*512, BX_FD_THIS s.floppy_buffer, + 512, TO_FLOPPY); + if (!(BX_FD_THIS s.main_status_reg & FD_MS_NDMA)) { + DEV_dma_set_drq(FLOPPY_DMA_CHAN, 0); + } + // time to write one sector at 300 rpm + sector_time = 200000 / BX_FD_THIS s.media[drive].sectors_per_track; + bx_pc_system.activate_timer(BX_FD_THIS s.floppy_timer_index, + sector_time , 0); + break; + } + } else { // write normal data + BX_FD_THIS s.floppy_buffer[BX_FD_THIS s.floppy_buffer_index++] = *data_byte; + + BX_FD_THIS s.TC = get_tc(); + if ((BX_FD_THIS s.floppy_buffer_index >= 512) || (BX_FD_THIS s.TC)) { + logical_sector = (BX_FD_THIS s.cylinder[drive] * BX_FD_THIS s.media[drive].heads * BX_FD_THIS s.media[drive].sectors_per_track) + + (BX_FD_THIS s.head[drive] * BX_FD_THIS s.media[drive].sectors_per_track) + + (BX_FD_THIS s.sector[drive] - 1); + if (BX_FD_THIS s.media[drive].write_protected) { + // write protected error + BX_INFO(("tried to write disk %u, which is write-protected", drive)); + // ST0: IC1,0=01 (abnormal termination: started execution but failed) + BX_FD_THIS s.status_reg0 = 0x40 | (BX_FD_THIS s.head[drive]<<2) | drive; + // ST1: DataError=1, NDAT=1, NotWritable=1, NID=1 + BX_FD_THIS s.status_reg1 = 0x27; // 0010 0111 + // ST2: CRCE=1, SERR=1, BCYL=1, NDAM=1. + BX_FD_THIS s.status_reg2 = 0x31; // 0011 0001 + enter_result_phase(); + return; + } + floppy_xfer(drive, logical_sector*512, BX_FD_THIS s.floppy_buffer, + 512, TO_FLOPPY); + increment_sector(); // increment to next sector after writing current one + BX_FD_THIS s.floppy_buffer_index = 0; + if (!(BX_FD_THIS s.main_status_reg & FD_MS_NDMA)) { + DEV_dma_set_drq(FLOPPY_DMA_CHAN, 0); + } + // time to write one sector at 300 rpm + sector_time = 200000 / BX_FD_THIS s.media[drive].sectors_per_track; + bx_pc_system.activate_timer(BX_FD_THIS s.floppy_timer_index, + sector_time , 0); + // the following is a kludge; i (jc) don't know how to work with the timer + if ((BX_FD_THIS s.main_status_reg & FD_MS_NDMA) && BX_FD_THIS s.TC) { + enter_result_phase(); + } + } + } +} + +void bx_floppy_ctrl_c::raise_interrupt(void) +{ + DEV_pic_raise_irq(6); + BX_FD_THIS s.pending_irq = 1; + BX_FD_THIS s.reset_sensei = 0; +} + +void bx_floppy_ctrl_c::lower_interrupt(void) +{ + if (BX_FD_THIS s.pending_irq) { + DEV_pic_lower_irq(6); + BX_FD_THIS s.pending_irq = 0; + } +} + +void bx_floppy_ctrl_c::increment_sector(void) +{ + Bit8u drive; + + drive = BX_FD_THIS s.DOR & 0x03; + + // values after completion of data xfer + // ??? calculation depends on base_count being multiple of 512 + BX_FD_THIS s.sector[drive] ++; + if ((BX_FD_THIS s.sector[drive] > BX_FD_THIS s.eot[drive]) || + (BX_FD_THIS s.sector[drive] > BX_FD_THIS s.media[drive].sectors_per_track)) { + BX_FD_THIS s.sector[drive] = 1; + if (BX_FD_THIS s.multi_track) { + BX_FD_THIS s.head[drive] ++; + if (BX_FD_THIS s.head[drive] > 1) { + BX_FD_THIS s.head[drive] = 0; + BX_FD_THIS s.cylinder[drive] ++; + reset_changeline(); + } + } else { + BX_FD_THIS s.cylinder[drive] ++; + reset_changeline(); + } + if (BX_FD_THIS s.cylinder[drive] >= BX_FD_THIS s.media[drive].tracks) { + // Set to 1 past last possible cylinder value. + // I notice if I set it to tracks-1, prama linux won't boot. + BX_FD_THIS s.cylinder[drive] = BX_FD_THIS s.media[drive].tracks; + BX_INFO(("increment_sector: clamping cylinder to max")); + } + } +} + +unsigned bx_floppy_ctrl_c::set_media_status(unsigned drive, bx_bool status) +{ + char *path; + unsigned type; + + if (drive == 0) + type = SIM->get_param_enum(BXPN_FLOPPYA_TYPE)->get(); + else + type = SIM->get_param_enum(BXPN_FLOPPYB_TYPE)->get(); + + // if setting to the current value, nothing to do + if ((status == BX_FD_THIS s.media_present[drive]) && + ((status == 0) || (type == BX_FD_THIS s.media[drive].type))) + return(status); + + if (status == 0) { + // eject floppy + close_media(&BX_FD_THIS s.media[drive]); + BX_FD_THIS s.media_present[drive] = 0; + if (drive == 0) { + SIM->get_param_bool(BXPN_FLOPPYA_STATUS)->set(0); + } else { + SIM->get_param_bool(BXPN_FLOPPYB_STATUS)->set(0); + } + BX_FD_THIS s.DIR[drive] |= 0x80; // disk changed line + return(0); + } else { + // insert floppy + if (drive == 0) { + path = SIM->get_param_string(BXPN_FLOPPYA_PATH)->getptr(); + } else { + path = SIM->get_param_string(BXPN_FLOPPYB_PATH)->getptr(); + } + if (!strcmp(path, "none")) + return(0); + if (evaluate_media(BX_FD_THIS s.device_type[drive], type, path, & BX_FD_THIS s.media[drive])) { + BX_FD_THIS s.media_present[drive] = 1; + if (drive == 0) { +#define MED (BX_FD_THIS s.media[0]) + BX_INFO(("fd0: '%s' ro=%d, h=%d,t=%d,spt=%d", + SIM->get_param_string(BXPN_FLOPPYA_PATH)->getptr(), + MED.write_protected, MED.heads, MED.tracks, MED.sectors_per_track)); + if (MED.write_protected) + SIM->get_param_bool(BXPN_FLOPPYA_READONLY)->set(1); +#undef MED + SIM->get_param_bool(BXPN_FLOPPYA_STATUS)->set(1); + } else { +#define MED (BX_FD_THIS s.media[1]) + BX_INFO(("fd1: '%s' ro=%d, h=%d,t=%d,spt=%d", + SIM->get_param_string(BXPN_FLOPPYB_PATH)->getptr(), + MED.write_protected, MED.heads, MED.tracks, MED.sectors_per_track)); + if (MED.write_protected) + SIM->get_param_bool(BXPN_FLOPPYB_READONLY)->set(1); +#undef MED + SIM->get_param_bool(BXPN_FLOPPYB_STATUS)->set(1); + } + return(1); + } else { + BX_FD_THIS s.media_present[drive] = 0; + if (drive == 0) { + SIM->get_param_bool(BXPN_FLOPPYA_STATUS)->set(0); + SIM->get_param_enum(BXPN_FLOPPYA_TYPE)->set(BX_FLOPPY_NONE); + } else { + SIM->get_param_bool(BXPN_FLOPPYB_STATUS)->set(0); + SIM->get_param_enum(BXPN_FLOPPYB_TYPE)->set(BX_FLOPPY_NONE); + } + return(0); + } + } +} + +#ifdef O_BINARY +#define BX_RDONLY O_RDONLY | O_BINARY +#define BX_RDWR O_RDWR | O_BINARY +#else +#define BX_RDONLY O_RDONLY +#define BX_RDWR O_RDWR +#endif + +bx_bool bx_floppy_ctrl_c::evaluate_media(Bit8u devtype, Bit8u type, char *path, floppy_t *media) +{ + struct stat stat_buf; + int i, ret; + int type_idx = -1; +#ifdef __linux__ + struct floppy_struct floppy_geom; +#endif +#ifdef WIN32 + char sTemp[1024]; + bx_bool raw_floppy = 0; + HANDLE hFile; + DWORD bytes; + DISK_GEOMETRY dg; + unsigned tracks = 0, heads = 0, spt = 0; +#endif + + //If media file is already open, close it before reopening. + close_media(media); + + // check media type + if (type == BX_FLOPPY_NONE) { + return 0; + } + for (i = 0; i < 8; i++) { + if (type == floppy_type[i].id) type_idx = i; + } + if (type_idx == -1) { + BX_ERROR(("evaluate_media: unknown media type %d", type)); + return 0; + } + if ((floppy_type[type_idx].drive_mask & devtype) == 0) { + BX_ERROR(("evaluate_media: media type %d not valid for this floppy drive", type)); + return 0; + } + + // use virtual VFAT support if requested + if (!strncmp(path, "vvfat:", 6) && (devtype == FDRIVE_350HD)) { + media->vvfat = DEV_hdimage_init_image(BX_HDIMAGE_MODE_VVFAT, 1474560, ""); + if (media->vvfat != NULL) { + if (media->vvfat->open(path + 6) == 0) { + media->type = BX_FLOPPY_1_44; + media->tracks = media->vvfat->cylinders; + media->heads = media->vvfat->heads; + media->sectors_per_track = media->vvfat->sectors; + media->sectors = 2880; + media->vvfat_floppy = 1; + media->fd = 0; + } + } + if (media->vvfat_floppy) return 1; + } + // open media file (image file or device) + media->raw_floppy_win95 = 0; +#ifdef macintosh + media->fd = 0; + if (strcmp(SIM->get_param_string(BXPN_FLOPPYA_PATH)->getptr(), SuperDrive)) +#endif +#ifdef WIN32 + if ((isalpha(path[0])) && (path[1] == ':') && (strlen(path) == 2)) { + raw_floppy = 1; + wsprintf(sTemp, "\\\\.\\%s", path); + hFile = CreateFile(sTemp, GENERIC_READ, FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile == INVALID_HANDLE_VALUE) { +#ifndef _WIN64 + // try to open it with Win95 style + hFile = CreateFile("\\\\.\\vwin32", 0, 0, NULL, 0, FILE_FLAG_DELETE_ON_CLOSE, NULL); + if (hFile == INVALID_HANDLE_VALUE) { + BX_ERROR(("Cannot open floppy drive")); + return(0); + } + media->raw_floppy_win95 = 1; + media->raw_floppy_win95_drv = toupper(path[0]) - 'A'; +#else + BX_ERROR(("Cannot open floppy drive")); + return(0); +#endif + } +#ifndef _WIN64 + // if using Win95 direct access, get params this way + if (media->raw_floppy_win95) { + DWORD ret_cnt = 0; + DIOC_REGISTERS reg; + BLOCK_DEV_PARAMS params; + reg.reg_EAX = 0x440D; + reg.reg_ECX = 0x0860; + reg.reg_EDX = (DWORD) ¶ms; + reg.reg_EBX = media->raw_floppy_win95_drv+1; + //reg.reg_Flags = 0x0001; // assume error (carry flag is set) + if (DeviceIoControl(hFile, VWIN32_DIOC_DOS_IOCTL , + ®, sizeof(reg), ®, sizeof(reg), &ret_cnt, NULL)) { + tracks = params.cylinders; + heads = params.num_heads; + spt = params.sects_per_track; + } else { + CloseHandle(hFile); + return(0); + } + } + else +#endif + { + if (!DeviceIoControl(hFile, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &dg, sizeof(dg), &bytes, NULL)) { + BX_ERROR(("No media in floppy drive")); + CloseHandle(hFile); + return(0); + } else { + tracks = (unsigned)dg.Cylinders.QuadPart; + heads = (unsigned)dg.TracksPerCylinder; + spt = (unsigned)dg.SectorsPerTrack; + } + } + CloseHandle(hFile); + // if using Win95 direct access, don't open the file + if (!media->raw_floppy_win95) { + if (!media->write_protected) + media->fd = open(sTemp, BX_RDWR); + else + media->fd = open(sTemp, BX_RDONLY); + } + } + else +#endif + { + if (!media->write_protected) + media->fd = open(path, BX_RDWR); + else + media->fd = open(path, BX_RDONLY); + } + + // Don't open the handle if using Win95 style direct access + if (!media->raw_floppy_win95) { + if (!media->write_protected && (media->fd < 0)) { + BX_INFO(("tried to open '%s' read/write: %s",path,strerror(errno))); + // try opening the file read-only + media->write_protected = 1; +#ifdef macintosh + media->fd = 0; + if (strcmp(SIM->get_param_string(BXPN_FLOPPYA_PATH)->getptr(), SuperDrive)) +#endif +#ifdef WIN32 + if (raw_floppy == 1) + media->fd = open(sTemp, BX_RDONLY); + else +#endif + media->fd = open(path, BX_RDONLY); + + if (media->fd < 0) { + // failed to open read-only too + BX_INFO(("tried to open '%s' read only: %s",path,strerror(errno))); + media->type = type; + return(0); + } + } + } + +#if BX_WITH_MACOS + if (!strcmp(SIM->get_param_string(BXPN_FLOPPYA_PATH)->getptr(), SuperDrive)) + ret = fd_stat(&stat_buf); + else + ret = fstat(media->fd, &stat_buf); +#elif defined(WIN32) + if (raw_floppy) { + memset (&stat_buf, 0, sizeof(stat_buf)); + stat_buf.st_mode = S_IFCHR; + ret = 0; + } + else +#endif + { // unix + ret = fstat(media->fd, &stat_buf); + } + if (ret) { + BX_PANIC(("fstat floppy 0 drive image file returns error: %s", strerror(errno))); + return(0); + } + + if (S_ISREG(stat_buf.st_mode)) { + // regular file + switch (type) { + // use CMOS reserved types + case BX_FLOPPY_160K: // 160K 5.25" + case BX_FLOPPY_180K: // 180K 5.25" + case BX_FLOPPY_320K: // 320K 5.25" + // standard floppy types + case BX_FLOPPY_360K: // 360K 5.25" + case BX_FLOPPY_720K: // 720K 3.5" + case BX_FLOPPY_1_2: // 1.2M 5.25" + case BX_FLOPPY_2_88: // 2.88M 3.5" + media->type = type; + media->tracks = floppy_type[type_idx].trk; + media->heads = floppy_type[type_idx].hd; + media->sectors_per_track = floppy_type[type_idx].spt; + media->sectors = floppy_type[type_idx].sectors; + if (stat_buf.st_size > (int)(media->sectors * 512)) { + BX_ERROR(("evaluate_media: size of file '%s' (%lu) too large for selected type", + path, (unsigned long) stat_buf.st_size)); + return 0; + } + break; + default: // 1.44M 3.5" + media->type = type; + if (stat_buf.st_size <= 1474560) { + media->tracks = floppy_type[type_idx].trk; + media->heads = floppy_type[type_idx].hd; + media->sectors_per_track = floppy_type[type_idx].spt; + } + else if (stat_buf.st_size == 1720320) + { + media->sectors_per_track = 21; + media->tracks = 80; + media->heads = 2; + } + else if (stat_buf.st_size == 1763328) + { + media->sectors_per_track = 21; + media->tracks = 82; + media->heads = 2; + } + else if (stat_buf.st_size == 1884160) + { + media->sectors_per_track = 23; + media->tracks = 80; + media->heads = 2; + } + else + { + BX_ERROR(("evaluate_media: file '%s' of unknown size %lu", + path, (unsigned long) stat_buf.st_size)); + return 0; + } + media->sectors = media->heads * media->tracks * media->sectors_per_track; + } + return (media->sectors > 0); // success + } + + else if (S_ISCHR(stat_buf.st_mode) +#if BX_WITH_MACOS == 0 +#ifdef S_ISBLK + || S_ISBLK(stat_buf.st_mode) +#endif +#endif + ) { + // character or block device + // assume media is formatted to typical geometry for drive + media->type = type; +#ifdef __linux__ + if (ioctl(media->fd, FDGETPRM, &floppy_geom) < 0) { + BX_ERROR(("cannot determine media geometry, trying to use defaults")); + media->tracks = floppy_type[type_idx].trk; + media->heads = floppy_type[type_idx].hd; + media->sectors_per_track = floppy_type[type_idx].spt; + media->sectors = floppy_type[type_idx].sectors; + return (media->sectors > 0); + } + media->tracks = floppy_geom.track; + media->heads = floppy_geom.head; + media->sectors_per_track = floppy_geom.sect; + media->sectors = floppy_geom.size; +#elif defined(WIN32) + media->tracks = tracks; + media->heads = heads; + media->sectors_per_track = spt; + media->sectors = media->heads * media->tracks * media->sectors_per_track; +#else + media->tracks = floppy_type[type_idx].trk; + media->heads = floppy_type[type_idx].hd; + media->sectors_per_track = floppy_type[type_idx].spt; + media->sectors = floppy_type[type_idx].sectors; +#endif + return (media->sectors > 0); // success + } else { + // unknown file type + BX_ERROR(("unknown mode type")); + return 0; + } +} + +void bx_floppy_ctrl_c::close_media(floppy_t *media) +{ + if (media->fd >= 0) { + if (media->vvfat_floppy) { + media->vvfat->close(); + delete media->vvfat; + media->vvfat_floppy = 0; + } else if (!media->raw_floppy_win95) { + close(media->fd); + } + media->fd = -1; + } +} + +void bx_floppy_ctrl_c::enter_result_phase(void) +{ + Bit8u drive; + unsigned i; + + drive = BX_FD_THIS s.DOR & 0x03; + + /* these are always the same */ + BX_FD_THIS s.result_index = 0; + // not necessary to clear any status bits, we're about to set them all + BX_FD_THIS s.main_status_reg |= FD_MS_MRQ | FD_MS_DIO | FD_MS_BUSY; + + /* invalid command */ + if ((BX_FD_THIS s.status_reg0 & 0xc0) == 0x80) { + BX_FD_THIS s.result_size = 1; + BX_FD_THIS s.result[0] = BX_FD_THIS s.status_reg0; + return; + } + + switch (BX_FD_THIS s.pending_command) { + case 0x04: // get status + BX_FD_THIS s.result_size = 1; + BX_FD_THIS s.result[0] = BX_FD_THIS s.status_reg3; + break; + case 0x08: // sense interrupt + BX_FD_THIS s.result_size = 2; + BX_FD_THIS s.result[0] = BX_FD_THIS s.status_reg0; + BX_FD_THIS s.result[1] = BX_FD_THIS s.cylinder[drive]; + break; + case 0x0e: // dump registers + BX_FD_THIS s.result_size = 10; + for (i = 0; i < 4; i++) { + BX_FD_THIS s.result[i] = BX_FD_THIS s.cylinder[i]; + } + BX_FD_THIS s.result[4] = (BX_FD_THIS s.SRT << 4) | BX_FD_THIS s.HUT; + BX_FD_THIS s.result[5] = (BX_FD_THIS s.HLT << 1) | ((BX_FD_THIS s.main_status_reg & FD_MS_NDMA) ? 1 : 0); + BX_FD_THIS s.result[6] = BX_FD_THIS s.eot[drive]; + BX_FD_THIS s.result[7] = (BX_FD_THIS s.lock << 7) | (BX_FD_THIS s.perp_mode & 0x7f); + BX_FD_THIS s.result[8] = BX_FD_THIS s.config; + BX_FD_THIS s.result[9] = BX_FD_THIS s.pretrk; + break; + case 0x10: // version + BX_FD_THIS s.result_size = 1; + BX_FD_THIS s.result[0] = 0x90; + break; + case 0x14: // unlock + case 0x94: // lock + BX_FD_THIS s.lock = (BX_FD_THIS s.pending_command >> 7); + BX_FD_THIS s.result_size = 1; + BX_FD_THIS s.result[0] = (BX_FD_THIS s.lock << 4); + break; + case 0x4a: // read ID + case 0x4d: // format track + case 0x46: // read normal data + case 0x66: + case 0xc6: + case 0xe6: + case 0x45: // write normal data + case 0xc5: + BX_FD_THIS s.result_size = 7; + BX_FD_THIS s.result[0] = BX_FD_THIS s.status_reg0; + BX_FD_THIS s.result[1] = BX_FD_THIS s.status_reg1; + BX_FD_THIS s.result[2] = BX_FD_THIS s.status_reg2; + BX_FD_THIS s.result[3] = BX_FD_THIS s.cylinder[drive]; + BX_FD_THIS s.result[4] = BX_FD_THIS s.head[drive]; + BX_FD_THIS s.result[5] = BX_FD_THIS s.sector[drive]; + BX_FD_THIS s.result[6] = 2; /* sector size code */ + BX_FD_THIS raise_interrupt(); + break; + } + + // Print command result (max. 10 bytes) + char buf[8+(10*5)+1], *p = buf; + p += sprintf(p, "RESULT: "); + for (i=0; i= 512 makes it more robust, but allows for sloppy code... + * pick your poison? + * note: byte and head are 0-based; eot, sector, and heads are 1-based. */ + terminal_count = ((BX_FD_THIS s.floppy_buffer_index == 512) && + (BX_FD_THIS s.sector[drive] == BX_FD_THIS s.eot[drive]) && + (BX_FD_THIS s.head[drive] == (BX_FD_THIS s.media[drive].heads - 1))); + } else { + terminal_count = DEV_dma_get_tc(); + } + return terminal_count; +} + +Bit64s bx_floppy_ctrl_c::floppy_param_handler(bx_param_c *param, int set, Bit64s val) +{ + if (set) { + char pname[BX_PATHNAME_LEN]; + param->get_param_path(pname, BX_PATHNAME_LEN); + if (!strcmp(pname, BXPN_FLOPPYA_STATUS)) { + BX_FD_THIS set_media_status(0, (bx_bool)val); + bx_gui->update_drive_status_buttons(); + } else if (!strcmp(pname, BXPN_FLOPPYB_STATUS)) { + BX_FD_THIS set_media_status(1, (bx_bool)val); + bx_gui->update_drive_status_buttons(); + } else if (!strcmp(pname, BXPN_FLOPPYA_READONLY)) { + BX_FD_THIS s.media[0].write_protected = (bx_bool)val; + } else if (!strcmp(pname, BXPN_FLOPPYB_READONLY)) { + BX_FD_THIS s.media[1].write_protected = (bx_bool)val; + } + } + return val; +} + +const char* bx_floppy_ctrl_c::floppy_param_string_handler(bx_param_string_c *param, + int set, const char *oldval, const char *val, int maxlen) +{ + char pname[BX_PATHNAME_LEN]; + Bit8u device; + + bx_list_c *base = (bx_list_c*) param->get_parent(); + int empty = 0; + if ((strlen(val) < 1) || !strcmp ("none", val)) { + empty = 1; + val = "none"; + } + param->get_param_path(pname, BX_PATHNAME_LEN); + if ((!strcmp(pname, BXPN_FLOPPYA_PATH)) || + (!strcmp(pname, BXPN_FLOPPYB_PATH))) { + if (set==1) { + device = atoi(base->get_name()); + if (empty) { + BX_FD_THIS set_media_status(device, 0); + bx_gui->update_drive_status_buttons(); + } else { + if (SIM->get_param_enum("devtype", base)->get() == BX_FDD_NONE) { + BX_ERROR(("Cannot add a floppy drive at runtime")); + SIM->get_param_string("path", base)->set("none"); + } + } + if (SIM->get_param_bool("status", base)->get() == 1) { + // tell the device model that we removed, then inserted the disk + BX_FD_THIS set_media_status(device, 0); + BX_FD_THIS set_media_status(device, 1); + } + } + } else { + BX_PANIC(("floppy_param_string_handler called with unknown parameter '%s'", pname)); + } + return val; +} diff --git a/bochs/iodev/floppy.h b/bochs/iodev/floppy.h new file mode 100644 index 00000000..01cccfc2 --- /dev/null +++ b/bochs/iodev/floppy.h @@ -0,0 +1,201 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef BX_IODEV_FLOPPY_H +#define BX_IODEV_FLOPPY_H + +#define FROM_FLOPPY 10 +#define TO_FLOPPY 11 + +#if BX_USE_FD_SMF +# define BX_FD_SMF static +# define BX_FD_THIS theFloppyController-> +#else +# define BX_FD_SMF +# define BX_FD_THIS this-> +#endif + +typedef struct { + int fd; /* file descriptor of floppy image file */ + unsigned sectors_per_track; /* number of sectors/track */ + unsigned sectors; /* number of formatted sectors on diskette */ + unsigned tracks; /* number of tracks */ + unsigned heads; /* number of heads */ + unsigned type; + unsigned write_protected; + unsigned char raw_floppy_win95; +#ifdef WIN32 + unsigned char raw_floppy_win95_drv; +#endif + bx_bool vvfat_floppy; + device_image_t *vvfat; + } floppy_t; + +class bx_floppy_ctrl_c : public bx_floppy_stub_c { +public: + bx_floppy_ctrl_c(); + virtual ~bx_floppy_ctrl_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual unsigned set_media_status(unsigned drive, bx_bool status); + virtual void register_state(void); + +private: + + struct { + Bit8u data_rate; + + Bit8u command[10]; /* largest command size ??? */ + Bit8u command_index; + Bit8u command_size; + bx_bool command_complete; + Bit8u pending_command; + + bx_bool multi_track; + bx_bool pending_irq; + Bit8u reset_sensei; + Bit8u format_count; + Bit8u format_fillbyte; + + Bit8u result[10]; + Bit8u result_index; + Bit8u result_size; + + Bit8u DOR; // Digital Ouput Register + Bit8u TDR; // Tape Drive Register + Bit8u cylinder[4]; // really only using 2 drives + Bit8u head[4]; // really only using 2 drives + Bit8u sector[4]; // really only using 2 drives + Bit8u eot[4]; // really only using 2 drives + bx_bool TC; // Terminal Count status from DMA controller + + /* MAIN STATUS REGISTER + * b7: MRQ: main request 1=data register ready 0=data register not ready + * b6: DIO: data input/output: + * 1=controller->CPU (ready for data read) + * 0=CPU->controller (ready for data write) + * b5: NDMA: non-DMA mode: 1=controller not in DMA modes + * 0=controller in DMA mode + * b4: BUSY: instruction(device busy) 1=active 0=not active + * b3-0: ACTD, ACTC, ACTB, ACTA: + * drive D,C,B,A in positioning mode 1=active 0=not active + */ + Bit8u main_status_reg; + + Bit8u status_reg0; + Bit8u status_reg1; + Bit8u status_reg2; + Bit8u status_reg3; + + // drive field allows up to 4 drives, even though probably only 2 will + // ever be used. + floppy_t media[4]; + unsigned num_supported_floppies; + Bit8u floppy_buffer[512+2]; // 2 extra for good measure + unsigned floppy_buffer_index; + int floppy_timer_index; + bx_bool media_present[4]; + Bit8u device_type[4]; + Bit8u DIR[4]; // Digital Input Register: + // b7: 0=diskette is present and has not been changed + // 1=diskette missing or changed + bx_bool lock; // FDC lock status + Bit8u SRT; // step rate time + Bit8u HUT; // head unload time + Bit8u HLT; // head load time + Bit8u config; // configure byte #1 + Bit8u pretrk; // precompensation track + Bit8u perp_mode; // perpendicular mode + + int statusbar_id[2]; // IDs of the status LEDs + } s; // state information + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_FD_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif + BX_FD_SMF void dma_write(Bit8u *data_byte); + BX_FD_SMF void dma_read(Bit8u *data_byte); + BX_FD_SMF void floppy_command(void); + BX_FD_SMF void floppy_xfer(Bit8u drive, Bit32u offset, Bit8u *buffer, Bit32u bytes, Bit8u direction); + BX_FD_SMF void raise_interrupt(void); + BX_FD_SMF void lower_interrupt(void); + BX_FD_SMF void enter_idle_phase(void); + BX_FD_SMF void enter_result_phase(void); + BX_FD_SMF Bit32u calculate_step_delay(Bit8u drive, Bit8u new_cylinder); + BX_FD_SMF void reset_changeline(void); + BX_FD_SMF bx_bool get_tc(void); + static void timer_handler(void *); + BX_FD_SMF void timer(void); + BX_FD_SMF void increment_sector(void); + BX_FD_SMF bx_bool evaluate_media(Bit8u devtype, Bit8u type, char *path, floppy_t *media); + BX_FD_SMF void close_media(floppy_t *media); + // runtime options + static Bit64s floppy_param_handler(bx_param_c *param, int set, Bit64s val); + static const char* floppy_param_string_handler(bx_param_string_c *param, int set, const char *oldval, const char *val, int maxlen); +}; + + +#ifdef WIN32 + +// used for direct floppy access in Win95 +#define VWIN32_DIOC_DOS_IOCTL 1 +#define VWIN32_DIOC_DOS_INT25 2 +#define VWIN32_DIOC_DOS_INT26 3 + +typedef struct _DIOC_REGISTERS { + DWORD reg_EBX; + DWORD reg_EDX; + DWORD reg_ECX; + DWORD reg_EAX; + DWORD reg_EDI; + DWORD reg_ESI; + DWORD reg_Flags; +} DIOC_REGISTERS, *PDIOC_REGISTERS; + +#pragma pack(push, 1) +typedef struct _BLOCK_DEV_PARAMS { + BYTE features; + BYTE dev_type; + WORD attribs; + WORD cylinders; + BYTE media_type; + // BPB + WORD bytes_per_sector; + BYTE sect_per_cluster; + WORD reserved_sectors; + BYTE fats; + WORD root_entries; + WORD tot_sectors; + BYTE media_id; + WORD sects_per_fat; + WORD sects_per_track; + WORD num_heads; + WORD hidden_sectors; + BYTE remainder[5]; +} BLOCK_DEV_PARAMS, *PBLOCK_DEV_PARAMS; +#pragma pack(pop) + +#endif /* WIN32 */ + +#endif diff --git a/bochs/iodev/gameport.cc b/bochs/iodev/gameport.cc new file mode 100644 index 00000000..b4508022 --- /dev/null +++ b/bochs/iodev/gameport.cc @@ -0,0 +1,234 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2003-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// +// Standard PC gameport +// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "gameport.h" + +#ifdef __linux__ + +#include +#include +#include +#include +#include + +#elif defined(WIN32) + +#ifndef JOY_BUTTON1 +#define JOY_BUTTON1 1 +#define JOY_BUTTON2 2 +UINT STDCALL joyGetPos(UINT, LPJOYINFO); +#endif + +#define JOYSTICKID1 0 + +#endif + +#define LOG_THIS theGameport-> + +bx_gameport_c *theGameport = NULL; + +int libgameport_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theGameport = new bx_gameport_c(); + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theGameport, BX_PLUGIN_GAMEPORT); + return(0); // Success +} + +void libgameport_LTX_plugin_fini(void) +{ + delete theGameport; +} + +bx_gameport_c::bx_gameport_c() +{ + put("GAME"); + joyfd = -1; +} + +bx_gameport_c::~bx_gameport_c() +{ + if (joyfd >= 0) close(joyfd); + BX_DEBUG(("Exit")); +} + +void bx_gameport_c::init(void) +{ + // Allocate the gameport IO address range 0x200..0x207 + for (unsigned addr=0x200; addr<0x208; addr++) { + DEV_register_ioread_handler(this, read_handler, addr, "Gameport", 1); + DEV_register_iowrite_handler(this, write_handler, addr, "Gameport", 1); + } + + BX_GAMEPORT_THIS port = 0xf0; + BX_GAMEPORT_THIS write_usec = 0; + BX_GAMEPORT_THIS timer_x = 0; + BX_GAMEPORT_THIS timer_y = 0; + +#ifdef __linux__ + BX_GAMEPORT_THIS joyfd = open("/dev/input/js0", O_RDONLY); + if (BX_GAMEPORT_THIS joyfd >= 0) { + for (unsigned i=0; i<4; i++) poll_joydev(); + } +#elif defined(WIN32) + JOYINFO joypos; + if (joyGetPos(JOYSTICKID1, &joypos) == JOYERR_NOERROR) { + BX_GAMEPORT_THIS joyfd = 1; + } else { + BX_GAMEPORT_THIS joyfd = -1; + } +#else + BX_GAMEPORT_THIS joyfd = -1; +#endif +} + +void bx_gameport_c::reset(unsigned type) +{ + // nothing for now +} + +void bx_gameport_c::register_state(void) +{ + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "gameport", "Gameport State", 6); + BXRS_HEX_PARAM_FIELD(list, port, BX_GAMEPORT_THIS port); + BXRS_DEC_PARAM_FIELD(list, delay_x, BX_GAMEPORT_THIS delay_x); + BXRS_DEC_PARAM_FIELD(list, delay_y, BX_GAMEPORT_THIS delay_y); + BXRS_PARAM_BOOL(list, timer_x, BX_GAMEPORT_THIS timer_x); + BXRS_PARAM_BOOL(list, timer_y, BX_GAMEPORT_THIS timer_y); + BXRS_DEC_PARAM_FIELD(list, write_usec, BX_GAMEPORT_THIS write_usec); +} + +void bx_gameport_c::poll_joydev(void) +{ +#ifdef __linux__ + struct js_event e; + fd_set joyfds; + struct timeval tv; + + memset(&tv, 0, sizeof(tv)); + FD_ZERO(&joyfds); + FD_SET(BX_GAMEPORT_THIS joyfd, &joyfds); + e.type = 0; + if (select(BX_GAMEPORT_THIS joyfd+1, &joyfds, NULL, NULL, &tv)) { + read(BX_GAMEPORT_THIS joyfd, &e, sizeof(struct js_event)); + if (e.type & JS_EVENT_BUTTON) { + if (e.value == 1) { + BX_GAMEPORT_THIS port &= ~(0x10 << e.number); + } else { + BX_GAMEPORT_THIS port |= (0x10 << e.number); + } + } + if (e.type & JS_EVENT_AXIS) { + if (e.number == 0) { + BX_GAMEPORT_THIS delay_x = 25 + ((e.value + 0x8000) / 60); + } + if (e.number == 1) { + BX_GAMEPORT_THIS delay_y = 25 + ((e.value + 0x8000) / 62); + } + } + } +#elif defined(WIN32) + JOYINFO joypos; + if (joyGetPos(JOYSTICKID1, &joypos) == JOYERR_NOERROR) { + if (joypos.wButtons & JOY_BUTTON1) { + BX_GAMEPORT_THIS port &= ~0x10; + } else { + BX_GAMEPORT_THIS port |= 0x10; + } + if (joypos.wButtons & JOY_BUTTON2) { + BX_GAMEPORT_THIS port &= ~0x20; + } else { + BX_GAMEPORT_THIS port |= 0x20; + } + BX_GAMEPORT_THIS delay_x = 25 + (joypos.wXpos / 60); + BX_GAMEPORT_THIS delay_y = 25 + (joypos.wYpos / 60); + } +#endif +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +Bit32u bx_gameport_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_GAMEPORT_SMF + bx_gameport_c *class_ptr = (bx_gameport_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_gameport_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_GAMEPORT_SMF + Bit64u usec; + + if (BX_GAMEPORT_THIS joyfd >= 0) { + poll_joydev(); + usec = bx_pc_system.time_usec(); + if (BX_GAMEPORT_THIS timer_x) { + if ((usec - BX_GAMEPORT_THIS write_usec) >= BX_GAMEPORT_THIS delay_x) { + BX_GAMEPORT_THIS port &= 0xfe; + BX_GAMEPORT_THIS timer_x = 0; + } + } + if (BX_GAMEPORT_THIS timer_y) { + if ((usec - BX_GAMEPORT_THIS write_usec) >= BX_GAMEPORT_THIS delay_y) { + BX_GAMEPORT_THIS port &= 0xfd; + BX_GAMEPORT_THIS timer_y = 0; + } + } + } else { + BX_DEBUG(("read: joystick not present")); + } + return BX_GAMEPORT_THIS port; +} + + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_gameport_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_GAMEPORT_SMF + bx_gameport_c *class_ptr = (bx_gameport_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_gameport_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_GAMEPORT_SMF + + BX_GAMEPORT_THIS write_usec = bx_pc_system.time_usec(); + BX_GAMEPORT_THIS timer_x = 1; + BX_GAMEPORT_THIS timer_y = 1; + BX_GAMEPORT_THIS port |= 0x0f; +} diff --git a/bochs/iodev/gameport.h b/bochs/iodev/gameport.h new file mode 100644 index 00000000..a1dacfbc --- /dev/null +++ b/bochs/iodev/gameport.h @@ -0,0 +1,62 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2003-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef BX_IODEV_GAMEPORT_H +#define BX_IODEV_GAMEPORT_H + +#if BX_USE_GAMEPORT_SMF +# define BX_GAMEPORT_SMF static +# define BX_GAMEPORT_THIS theGameport-> +#else +# define BX_GAMEPORT_SMF +# define BX_GAMEPORT_THIS this-> +#endif + + +class bx_gameport_c : public bx_devmodel_c { +public: + bx_gameport_c(); + virtual ~bx_gameport_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual void register_state(void); + +private: + + int joyfd; + Bit8u port; + Bit16u delay_x; + Bit16u delay_y; + bx_bool timer_x; + bx_bool timer_y; + Bit64u write_usec; + + BX_GAMEPORT_SMF void poll_joydev(void); + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_GAMEPORT_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif +}; + +#endif diff --git a/bochs/iodev/guest2host.cc b/bochs/iodev/guest2host.cc new file mode 100644 index 00000000..38d5fe95 --- /dev/null +++ b/bochs/iodev/guest2host.cc @@ -0,0 +1,135 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +#include "iodev.h" +#include "guest2host.h" + +#define LOG_THIS bx_g2h. + +bx_g2h_c bx_g2h; + +bx_g2h_c::bx_g2h_c() +{ + put("G2H"); + unsigned i; + + for (i=0; i= BX_MAX_G2H_CHANNELS) || + (bx_g2h.s.callback[channel].used==0)) + { + BX_PANIC(("g2h: attempt to deacquire channel %u: not acquired", channel)); + } + bx_g2h.s.callback[channel].used = 0; + bx_g2h.s.callback[channel].f = NULL; + return 0; +} + + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +Bit32u bx_g2h_c::inp_handler(void *this_ptr, Bit32u addr, unsigned io_len) +{ + UNUSED(this_ptr); + + if (addr != BX_G2H_PORT) + BX_PANIC(("g2h: IO read not aligned on dword boundary.")); + if (io_len != 4) + BX_PANIC(("g2h: IO read not dword.")); + + BX_PANIC(("g2h: IO read not complete.")); + return(0); +} + +void bx_g2h_c::outp_handler(void *this_ptr, Bit32u addr, Bit32u val32, unsigned io_len) +{ + UNUSED(this_ptr); + + if (addr != BX_G2H_PORT) + BX_PANIC(("g2h: IO write not aligned on dword boundary.")); + if (io_len != 4) + BX_PANIC(("g2h: IO write not dword.")); + + if ((bx_g2h.s.packet_count==0) && (val32!=BX_G2H_MAGIC)) { + BX_INFO(("g2h: IO W: Not magic header.")); + return; + } + bx_g2h.s.guest_packet[bx_g2h.s.packet_count++] = val32; + if (bx_g2h.s.packet_count >= BX_G2H_PACKET_SIZE) { + unsigned channel; + + // Full packet received from guest. Pass on to the host code. + channel = bx_g2h.s.guest_packet[1]; + if (channel >= BX_MAX_G2H_CHANNELS) { + BX_PANIC(("g2h: channel (%u) out of bounds", channel)); + } + if (bx_g2h.s.callback[channel].used==0) { + BX_PANIC(("g2h: channel (%u) not active", channel)); + } + bx_g2h.s.callback[channel].f(&bx_g2h.s.guest_packet); + bx_g2h.s.packet_count = 0; // Ready for next packet + } +} diff --git a/bochs/iodev/guest2host.h b/bochs/iodev/guest2host.h new file mode 100644 index 00000000..c2ead161 --- /dev/null +++ b/bochs/iodev/guest2host.h @@ -0,0 +1,68 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#define BX_MAX_G2H_CHANNELS 8 +#define BX_G2H_ERROR ((unsigned) -1) + // IO port number for this interface. Align on dword boundary. +#define BX_G2H_PORT 0x2000 + // Magic number which is first dword passed by guest +#define BX_G2H_MAGIC 0xffeeddcc + // Number of dwords in packet from guest +#define BX_G2H_PACKET_SIZE 5 + + +typedef Bit32u bx_guest_packet_t[BX_G2H_PACKET_SIZE]; +typedef void (*bx_g2h_callback_t)(bx_guest_packet_t *); + + +class bx_g2h_c : public logfunctions { +public: + bx_g2h_c(); + virtual ~bx_g2h_c(); + static void init(void); + void reset(unsigned type); + unsigned acquire_channel(bx_g2h_callback_t); + unsigned deacquire_channel(unsigned channel); + +private: + + static Bit32u inp_handler(void *this_ptr, Bit32u addr, unsigned io_len); + static void outp_handler(void *this_ptr, Bit32u addr, + Bit32u value, unsigned io_len); + // state info + struct { + struct { + bx_g2h_callback_t f; + bx_bool used; + } callback[BX_MAX_G2H_CHANNELS]; + + // Define the data received from the guest OS. + // dword0: magic number, should be BX_G2H_MAGIC + // dword1: channel ID + // dword2: address of data structure in guest physical memory + // dword3: size of data structure in guest physical memory + // dword4: address of return data structure in guest physical memory + unsigned packet_count; + bx_guest_packet_t guest_packet; + } s; +}; + +extern bx_g2h_c bx_g2h; diff --git a/bochs/iodev/harddrv.cc b/bochs/iodev/harddrv.cc new file mode 100644 index 00000000..773ad0c6 --- /dev/null +++ b/bochs/iodev/harddrv.cc @@ -0,0 +1,3462 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Useful docs: +// AT Attachment with Packet Interface +// working draft by T13 at www.t13.org + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "harddrv.h" +#include "hdimage.h" +#include "cdrom.h" + +#define LOG_THIS theHardDrive-> + +#define INDEX_PULSE_CYCLE 10 + +#define PACKET_SIZE 12 + +// some packet handling macros +#define EXTRACT_FIELD(arr,byte,start,num_bits) (((arr)[(byte)] >> (start)) & ((1 << (num_bits)) - 1)) +#define get_packet_field(c,b,s,n) (EXTRACT_FIELD((BX_SELECTED_CONTROLLER((c)).buffer),(b),(s),(n))) +#define get_packet_byte(c,b) (BX_SELECTED_CONTROLLER((c)).buffer[(b)]) +#define get_packet_word(c,b) (((Bit16u)BX_SELECTED_CONTROLLER((c)).buffer[(b)] << 8) | BX_SELECTED_CONTROLLER((c)).buffer[(b)+1]) + + +#define BX_CONTROLLER(c,a) (BX_HD_THIS channels[(c)].drives[(a)]).controller +#define BX_DRIVE(c,a) (BX_HD_THIS channels[(c)].drives[(a)]) + +#define BX_DRIVE_IS_PRESENT(c,a) (BX_HD_THIS channels[(c)].drives[(a)].device_type != IDE_NONE) +#define BX_DRIVE_IS_HD(c,a) (BX_HD_THIS channels[(c)].drives[(a)].device_type == IDE_DISK) +#define BX_DRIVE_IS_CD(c,a) (BX_HD_THIS channels[(c)].drives[(a)].device_type == IDE_CDROM) + +#define BX_MASTER_IS_PRESENT(c) BX_DRIVE_IS_PRESENT((c),0) +#define BX_SLAVE_IS_PRESENT(c) BX_DRIVE_IS_PRESENT((c),1) +#define BX_ANY_IS_PRESENT(c) (BX_DRIVE_IS_PRESENT((c),0) || BX_DRIVE_IS_PRESENT((c),1)) + +#define BX_SELECTED_CONTROLLER(c) (BX_CONTROLLER((c),BX_HD_THIS channels[(c)].drive_select)) +#define BX_SELECTED_DRIVE(c) (BX_DRIVE((c),BX_HD_THIS channels[(c)].drive_select)) +#define BX_MASTER_SELECTED(c) (!BX_HD_THIS channels[(c)].drive_select) +#define BX_SLAVE_SELECTED(c) (BX_HD_THIS channels[(c)].drive_select) + +#define BX_SELECTED_IS_PRESENT(c) (BX_DRIVE_IS_PRESENT((c),BX_SLAVE_SELECTED((c)))) +#define BX_SELECTED_IS_HD(c) (BX_DRIVE_IS_HD((c),BX_SLAVE_SELECTED((c)))) +#define BX_SELECTED_IS_CD(c) (BX_DRIVE_IS_CD((c),BX_SLAVE_SELECTED((c)))) + +#define BX_SELECTED_MODEL(c) (BX_HD_THIS channels[(c)].drives[BX_HD_THIS channels[(c)].drive_select].model_no) +#define BX_SELECTED_TYPE_STRING(channel) ((BX_SELECTED_IS_CD(channel)) ? "CD-ROM" : "DISK") + +#define WRITE_FEATURES(c,a) do { Bit8u _a = a; \ + BX_CONTROLLER((c),0).hob.feature = BX_CONTROLLER((c),0).features; \ + BX_CONTROLLER((c),1).hob.feature = BX_CONTROLLER((c),1).features; \ + BX_CONTROLLER((c),0).features = _a; BX_CONTROLLER((c),1).features = _a; } while(0) +#define WRITE_SECTOR_COUNT(c,a) do { Bit8u _a = a; \ + BX_CONTROLLER((c),0).hob.nsector = BX_CONTROLLER((c),0).sector_count; \ + BX_CONTROLLER((c),1).hob.nsector = BX_CONTROLLER((c),1).sector_count; \ + BX_CONTROLLER((c),0).sector_count = _a; BX_CONTROLLER((c),1).sector_count = _a; } while(0) +#define WRITE_SECTOR_NUMBER(c,a) do { Bit8u _a = a; \ + BX_CONTROLLER((c),0).hob.sector = BX_CONTROLLER((c),0).sector_no; \ + BX_CONTROLLER((c),1).hob.sector = BX_CONTROLLER((c),1).sector_no; \ + BX_CONTROLLER((c),0).sector_no = _a; BX_CONTROLLER((c),1).sector_no = _a; } while(0) +#define WRITE_CYLINDER_LOW(c,a) do { Bit8u _a = a; \ + BX_CONTROLLER((c),0).hob.lcyl = (Bit8u)(BX_CONTROLLER((c),0).cylinder_no & 0xff); \ + BX_CONTROLLER((c),1).hob.lcyl = (Bit8u)(BX_CONTROLLER((c),1).cylinder_no & 0xff); \ + BX_CONTROLLER((c),0).cylinder_no = (BX_CONTROLLER((c),0).cylinder_no & 0xff00) | _a; \ + BX_CONTROLLER((c),1).cylinder_no = (BX_CONTROLLER((c),1).cylinder_no & 0xff00) | _a; } while(0) +#define WRITE_CYLINDER_HIGH(c,a) do { Bit16u _a = a; \ + BX_CONTROLLER((c),0).hob.hcyl = (Bit8u)(BX_CONTROLLER((c),0).cylinder_no >> 8); \ + BX_CONTROLLER((c),1).hob.hcyl = (Bit8u)(BX_CONTROLLER((c),1).cylinder_no >> 8); \ + BX_CONTROLLER((c),0).cylinder_no = (_a << 8) | (BX_CONTROLLER((c),0).cylinder_no & 0xff); \ + BX_CONTROLLER((c),1).cylinder_no = (_a << 8) | (BX_CONTROLLER((c),1).cylinder_no & 0xff); } while(0) +#define WRITE_HEAD_NO(c,a) do { Bit8u _a = a; BX_CONTROLLER((c),0).head_no = _a; BX_CONTROLLER((c),1).head_no = _a; } while(0) +#define WRITE_LBA_MODE(c,a) do { Bit8u _a = a; BX_CONTROLLER((c),0).lba_mode = _a; BX_CONTROLLER((c),1).lba_mode = _a; } while(0) + +BX_CPP_INLINE Bit16u read_16bit(const Bit8u* buf) +{ + return (buf[0] << 8) | buf[1]; +} + +BX_CPP_INLINE Bit32u read_32bit(const Bit8u* buf) +{ + return (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; +} + +bx_hard_drive_c *theHardDrive = NULL; + +int libharddrv_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theHardDrive = new bx_hard_drive_c(); + bx_devices.pluginHardDrive = theHardDrive; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theHardDrive, BX_PLUGIN_HARDDRV); + return(0); // Success +} + +void libharddrv_LTX_plugin_fini(void) +{ + delete theHardDrive; +} + +bx_hard_drive_c::bx_hard_drive_c() +{ +#if DLL_HD_SUPPORT +# error code must be fixed to use DLL_HD_SUPPORT and 4 ata channels +#endif + + put("HD"); + for (Bit8u channel=0; channelclose(); + delete channels[channel].drives[device].hdimage; + channels[channel].drives[device].hdimage = NULL; + } +#ifdef LOWLEVEL_CDROM + if (channels[channel].drives[device].cdrom.cd != NULL) { + delete channels[channel].drives[device].cdrom.cd; + channels[channel].drives[device].cdrom.cd = NULL; + } +#endif + } + } + BX_DEBUG(("Exit")); +} + +void bx_hard_drive_c::init(void) +{ + Bit8u channel, image_mode; + char string[5]; + char sbtext[8]; + char ata_name[20]; + bx_list_c *base; + + BX_DEBUG(("Init $Id$")); + + for (channel=0; channelget_param(ata_name); + if (SIM->get_param_bool("enabled", base)->get() == 1) { + BX_HD_THIS channels[channel].ioaddr1 = SIM->get_param_num("ioaddr1", base)->get(); + BX_HD_THIS channels[channel].ioaddr2 = SIM->get_param_num("ioaddr2", base)->get(); + BX_HD_THIS channels[channel].irq = SIM->get_param_num("irq", base)->get(); + + // Coherency check + if ((BX_HD_THIS channels[channel].ioaddr1 == 0) || + (BX_HD_THIS channels[channel].ioaddr2 == 0) || + (BX_HD_THIS channels[channel].irq == 0)) + { + BX_PANIC(("incoherency for ata channel %d: io1=0x%x, io2=%x, irq=%d", + channel, + BX_HD_THIS channels[channel].ioaddr1, + BX_HD_THIS channels[channel].ioaddr2, + BX_HD_THIS channels[channel].irq)); + } + } + else { + BX_HD_THIS channels[channel].ioaddr1 = 0; + BX_HD_THIS channels[channel].ioaddr2 = 0; + BX_HD_THIS channels[channel].irq = 0; + } + } + + for (channel=0; channelget_param(ata_name); + + // Initialize controller state, even if device is not present + BX_CONTROLLER(channel,device).status.busy = 0; + BX_CONTROLLER(channel,device).status.drive_ready = 1; + BX_CONTROLLER(channel,device).status.write_fault = 0; + BX_CONTROLLER(channel,device).status.seek_complete = 1; + BX_CONTROLLER(channel,device).status.drq = 0; + BX_CONTROLLER(channel,device).status.corrected_data = 0; + BX_CONTROLLER(channel,device).status.index_pulse = 0; + BX_CONTROLLER(channel,device).status.index_pulse_count = 0; + BX_CONTROLLER(channel,device).status.err = 0; + + BX_CONTROLLER(channel,device).error_register = 0x01; // diagnostic code: no error + BX_CONTROLLER(channel,device).head_no = 0; + BX_CONTROLLER(channel,device).sector_count = 1; + BX_CONTROLLER(channel,device).sector_no = 1; + BX_CONTROLLER(channel,device).cylinder_no = 0; + BX_CONTROLLER(channel,device).current_command = 0x00; + BX_CONTROLLER(channel,device).buffer_index = 0; + + BX_CONTROLLER(channel,device).control.reset = 0; + BX_CONTROLLER(channel,device).control.disable_irq = 0; + BX_CONTROLLER(channel,device).reset_in_progress = 0; + + BX_CONTROLLER(channel,device).multiple_sectors = 0; + BX_CONTROLLER(channel,device).lba_mode = 0; + + BX_CONTROLLER(channel,device).features = 0; + BX_CONTROLLER(channel,device).mdma_mode = 0; + BX_CONTROLLER(channel,device).udma_mode = 0; + + // If not present + BX_HD_THIS channels[channel].drives[device].device_type = IDE_NONE; + BX_HD_THIS channels[channel].drives[device].statusbar_id = -1; + BX_HD_THIS channels[channel].drives[device].iolight_counter = 0; + BX_HD_THIS channels[channel].drives[device].identify_set = 0; + if (!SIM->get_param_bool("present", base)->get()) continue; + + // Make model string + strncpy((char*)BX_HD_THIS channels[channel].drives[device].model_no, + SIM->get_param_string("model", base)->getptr(), 40); + while (strlen((char *)BX_HD_THIS channels[channel].drives[device].model_no) < 40) { + strcat((char*)BX_HD_THIS channels[channel].drives[device].model_no, " "); + } + BX_HD_THIS channels[channel].drives[device].model_no[40] = 0; + + if (SIM->get_param_enum("type", base)->get() == BX_ATA_DEVICE_DISK) { + BX_DEBUG(("Hard-Disk on target %d/%d",channel,device)); + BX_HD_THIS channels[channel].drives[device].device_type = IDE_DISK; + sprintf(sbtext, "HD:%d-%s", channel, device?"S":"M"); + BX_HD_THIS channels[channel].drives[device].statusbar_id = + bx_gui->register_statusitem(sbtext); + + int cyl = SIM->get_param_num("cylinders", base)->get(); + int heads = SIM->get_param_num("heads", base)->get(); + int spt = SIM->get_param_num("spt", base)->get(); + Bit64u disk_size = (Bit64u)cyl * heads * spt * 512; + + image_mode = SIM->get_param_enum("mode", base)->get(); + channels[channel].drives[device].hdimage = DEV_hdimage_init_image(image_mode, + disk_size, SIM->get_param_string("journal", base)->getptr()); + + if (channels[channel].drives[device].hdimage != NULL) { + BX_INFO(("HD on ata%d-%d: '%s', '%s' mode", channel, device, + SIM->get_param_string("path", base)->getptr(), + hdimage_mode_names[image_mode])); + } else { + // it's safe to return here on failure + return; + } + BX_HD_THIS channels[channel].drives[device].hdimage->cylinders = cyl; + BX_HD_THIS channels[channel].drives[device].hdimage->heads = heads; + BX_HD_THIS channels[channel].drives[device].hdimage->sectors = spt; + + /* open hard drive image file */ + if ((BX_HD_THIS channels[channel].drives[device].hdimage->open(SIM->get_param_string("path", base)->getptr())) < 0) { + BX_PANIC(("ata%d-%d: could not open hard drive image file '%s'", channel, device, SIM->get_param_string("path", base)->getptr())); + return; + } + bx_bool geometry_detect = 0; + Bit32u image_caps = BX_HD_THIS channels[channel].drives[device].hdimage->get_capabilities(); + + if ((image_caps & (HDIMAGE_AUTO_GEOMETRY | HDIMAGE_HAS_GEOMETRY)) != 0) { + geometry_detect = ((cyl == 0) || (image_caps & HDIMAGE_HAS_GEOMETRY)); + if ((heads == 0) || (spt == 0)) { + BX_PANIC(("ata%d-%d cannot have zero heads, or sectors/track", channel, device)); + } + } else { + if (cyl == 0 || heads == 0 || spt == 0) { + BX_PANIC(("ata%d-%d cannot have zero cylinders, heads, or sectors/track", channel, device)); + } + } + + if (BX_HD_THIS channels[channel].drives[device].hdimage->hd_size != 0) { + if (geometry_detect) { + // Autodetect number of cylinders + disk_size = BX_HD_THIS channels[channel].drives[device].hdimage->hd_size; + if ((image_caps & HDIMAGE_HAS_GEOMETRY) == 0) { + cyl = (int)(disk_size / (heads * spt * 512)); + if (disk_size != ((Bit64u)cyl * heads * spt * 512)) { + BX_PANIC(("ata%d-%d: geometry autodetection failed", channel, device)); + } + BX_HD_THIS channels[channel].drives[device].hdimage->cylinders = cyl; + BX_INFO(("ata%d-%d: autodetect geometry: CHS=%d/%d/%d", channel, device, cyl, heads, spt)); + } else { + cyl = BX_HD_THIS channels[channel].drives[device].hdimage->cylinders; + heads = BX_HD_THIS channels[channel].drives[device].hdimage->heads; + spt = BX_HD_THIS channels[channel].drives[device].hdimage->sectors; + BX_INFO(("ata%d-%d: image geometry: CHS=%d/%d/%d", channel, device, cyl, heads, spt)); + } + } else { + if (disk_size != BX_HD_THIS channels[channel].drives[device].hdimage->hd_size) { + BX_PANIC(("ata%d-%d disk size doesn't match specified geometry", channel, device)); + // workaround large files problem with diskimages + BX_HD_THIS channels[channel].drives[device].hdimage->hd_size = disk_size; + } + } + } else if (geometry_detect) { + BX_PANIC(("ata%d-%d image doesn't support geometry detection", channel, device)); + } + } else if (SIM->get_param_enum("type", base)->get() == BX_ATA_DEVICE_CDROM) { + bx_list_c *cdrom_rt = (bx_list_c*)SIM->get_param(BXPN_MENU_RUNTIME_CDROM); + cdrom_rt->add(base); + base->set_options(base->SERIES_ASK | base->USE_BOX_TITLE); + base->set_runtime_param(1); + SIM->get_param("path", base)->set_runtime_param(1); + SIM->get_param("status", base)->set_runtime_param(1); + BX_DEBUG(("CDROM on target %d/%d",channel,device)); + BX_HD_THIS channels[channel].drives[device].device_type = IDE_CDROM; + BX_HD_THIS channels[channel].drives[device].cdrom.locked = 0; + BX_HD_THIS channels[channel].drives[device].sense.sense_key = SENSE_NONE; + BX_HD_THIS channels[channel].drives[device].sense.asc = 0; + BX_HD_THIS channels[channel].drives[device].sense.ascq = 0; + sprintf(sbtext, "CD:%d-%s", channel, device?"S":"M"); + BX_HD_THIS channels[channel].drives[device].statusbar_id = + bx_gui->register_statusitem(sbtext); + BX_HD_THIS cdrom_count++; + BX_HD_THIS channels[channel].drives[device].device_num = BX_HD_THIS cdrom_count + 48; + + // Check bit fields + BX_CONTROLLER(channel,device).sector_count = 0; + BX_CONTROLLER(channel,device).interrupt_reason.c_d = 1; + if (BX_CONTROLLER(channel,device).sector_count != 0x01) + BX_PANIC(("interrupt reason bit field error")); + + BX_CONTROLLER(channel,device).sector_count = 0; + BX_CONTROLLER(channel,device).interrupt_reason.i_o = 1; + if (BX_CONTROLLER(channel,device).sector_count != 0x02) + BX_PANIC(("interrupt reason bit field error")); + + BX_CONTROLLER(channel,device).sector_count = 0; + BX_CONTROLLER(channel,device).interrupt_reason.rel = 1; + if (BX_CONTROLLER(channel,device).sector_count != 0x04) + BX_PANIC(("interrupt reason bit field error")); + + BX_CONTROLLER(channel,device).sector_count = 0; + BX_CONTROLLER(channel,device).interrupt_reason.tag = 3; + if (BX_CONTROLLER(channel,device).sector_count != 0x18) + BX_PANIC(("interrupt reason bit field error")); + BX_CONTROLLER(channel,device).sector_count = 0; + + // allocate low level driver +#ifdef LOWLEVEL_CDROM + BX_HD_THIS channels[channel].drives[device].cdrom.cd = new LOWLEVEL_CDROM(SIM->get_param_string("path", base)->getptr()); + BX_INFO(("CD on ata%d-%d: '%s'",channel, device, SIM->get_param_string("path", base)->getptr())); + + if (SIM->get_param_bool("status", base)->get()) { + if (BX_HD_THIS channels[channel].drives[device].cdrom.cd->insert_cdrom()) { + BX_INFO(("Media present in CD-ROM drive")); + BX_HD_THIS channels[channel].drives[device].cdrom.ready = 1; + Bit32u capacity = BX_HD_THIS channels[channel].drives[device].cdrom.cd->capacity(); + BX_HD_THIS channels[channel].drives[device].cdrom.capacity = capacity; + BX_INFO(("Capacity is %d sectors (%.2f MB)", capacity, (float)capacity / 512.0)); + } else { + BX_INFO(("Could not locate CD-ROM, continuing with media not present")); + BX_HD_THIS channels[channel].drives[device].cdrom.ready = 0; + SIM->get_param_bool("status", base)->set(0); + } + } + else +#endif + { + BX_INFO(("Media not present in CD-ROM drive")); + BX_HD_THIS channels[channel].drives[device].cdrom.ready = 0; + } + } + } + } + + // generate CMOS values for hard drive if not using a CMOS image + if (!SIM->get_param_bool(BXPN_CMOSIMAGE_ENABLED)->get()) { + DEV_cmos_set_reg(0x12, 0x00); // start out with: no drive 0, no drive 1 + + if (BX_DRIVE_IS_HD(0,0)) { + // Flag drive type as Fh, use extended CMOS location as real type + DEV_cmos_set_reg(0x12, (DEV_cmos_get_reg(0x12) & 0x0f) | 0xf0); + DEV_cmos_set_reg(0x19, 47); // user definable type + // AMI BIOS: 1st hard disk #cyl low byte + DEV_cmos_set_reg(0x1b, (BX_DRIVE(0,0).hdimage->cylinders & 0x00ff)); + // AMI BIOS: 1st hard disk #cyl high byte + DEV_cmos_set_reg(0x1c, (BX_DRIVE(0,0).hdimage->cylinders & 0xff00) >> 8); + // AMI BIOS: 1st hard disk #heads + DEV_cmos_set_reg(0x1d, BX_DRIVE(0,0).hdimage->heads); + // AMI BIOS: 1st hard disk write precompensation cylinder, low byte + DEV_cmos_set_reg(0x1e, 0xff); // -1 + // AMI BIOS: 1st hard disk write precompensation cylinder, high byte + DEV_cmos_set_reg(0x1f, 0xff); // -1 + // AMI BIOS: 1st hard disk control byte + DEV_cmos_set_reg(0x20, (0xc0 | ((BX_DRIVE(0,0).hdimage->heads > 8) << 3))); + // AMI BIOS: 1st hard disk landing zone, low byte + DEV_cmos_set_reg(0x21, DEV_cmos_get_reg(0x1b)); + // AMI BIOS: 1st hard disk landing zone, high byte + DEV_cmos_set_reg(0x22, DEV_cmos_get_reg(0x1c)); + // AMI BIOS: 1st hard disk sectors/track + DEV_cmos_set_reg(0x23, BX_DRIVE(0,0).hdimage->sectors); + } + + //set up cmos for second hard drive + if (BX_DRIVE_IS_HD(0,1)) { + // fill in lower 4 bits of 0x12 for second HD + DEV_cmos_set_reg(0x12, (DEV_cmos_get_reg(0x12) & 0xf0) | 0x0f); + DEV_cmos_set_reg(0x1a, 47); // user definable type + // AMI BIOS: 2nd hard disk #cyl low byte + DEV_cmos_set_reg(0x24, (BX_DRIVE(0,1).hdimage->cylinders & 0x00ff)); + // AMI BIOS: 2nd hard disk #cyl high byte + DEV_cmos_set_reg(0x25, (BX_DRIVE(0,1).hdimage->cylinders & 0xff00) >> 8); + // AMI BIOS: 2nd hard disk #heads + DEV_cmos_set_reg(0x26, BX_DRIVE(0,1).hdimage->heads); + // AMI BIOS: 2nd hard disk write precompensation cylinder, low byte + DEV_cmos_set_reg(0x27, 0xff); // -1 + // AMI BIOS: 2nd hard disk write precompensation cylinder, high byte + DEV_cmos_set_reg(0x28, 0xff); // -1 + // AMI BIOS: 2nd hard disk, 0x80 if heads>8 + DEV_cmos_set_reg(0x29, (BX_DRIVE(0,1).hdimage->heads > 8) ? 0x80 : 0x00); + // AMI BIOS: 2nd hard disk landing zone, low byte + DEV_cmos_set_reg(0x2a, DEV_cmos_get_reg(0x24)); + // AMI BIOS: 2nd hard disk landing zone, high byte + DEV_cmos_set_reg(0x2b, DEV_cmos_get_reg(0x25)); + // AMI BIOS: 2nd hard disk sectors/track + DEV_cmos_set_reg(0x2c, BX_DRIVE(0,1).hdimage->sectors); + } + + DEV_cmos_set_reg(0x39, 0); + DEV_cmos_set_reg(0x3a, 0); + for (channel=0; channelget_param(ata_name); + if (SIM->get_param_bool("present", base)->get()) { + if (BX_DRIVE_IS_HD(channel,device)) { + Bit16u cylinders = BX_DRIVE(channel,device).hdimage->cylinders; + Bit16u heads = BX_DRIVE(channel,device).hdimage->heads; + Bit16u spt = BX_DRIVE(channel,device).hdimage->sectors; + Bit8u translation = SIM->get_param_enum("translation", base)->get(); + + Bit8u reg = 0x39 + channel/2; + Bit8u bitshift = 2 * (device+(2 * (channel%2))); + + // Find the right translation if autodetect + if (translation == BX_ATA_TRANSLATION_AUTO) { + if((cylinders <= 1024) && (heads <= 16) && (spt <= 63)) { + translation = BX_ATA_TRANSLATION_NONE; + } + else if (((Bit32u)cylinders * (Bit32u)heads) <= 131072) { + translation = BX_ATA_TRANSLATION_LARGE; + } + else translation = BX_ATA_TRANSLATION_LBA; + + BX_INFO(("translation on ata%d-%d set to '%s'",channel, device, + translation==BX_ATA_TRANSLATION_NONE?"none": + translation==BX_ATA_TRANSLATION_LARGE?"large": + "lba")); + } + + // FIXME we should test and warn + // - if LBA and spt != 63 + // - if RECHS and heads != 16 + // - if NONE and size > 1024*16*SPT blocks + // - if LARGE and size > 8192*16*SPT blocks + // - if RECHS and size > 1024*240*SPT blocks + // - if LBA and size > 1024*255*63, not that we can do much about it + + switch(translation) { + case BX_ATA_TRANSLATION_NONE: + DEV_cmos_set_reg(reg, DEV_cmos_get_reg(reg) | (0 << bitshift)); + break; + case BX_ATA_TRANSLATION_LBA: + DEV_cmos_set_reg(reg, DEV_cmos_get_reg(reg) | (1 << bitshift)); + break; + case BX_ATA_TRANSLATION_LARGE: + DEV_cmos_set_reg(reg, DEV_cmos_get_reg(reg) | (2 << bitshift)); + break; + case BX_ATA_TRANSLATION_RECHS: + DEV_cmos_set_reg(reg, DEV_cmos_get_reg(reg) | (3 << bitshift)); + break; + } + } + } + } + } + + // Set the "non-extended" boot device. This will default to DISKC if cdrom + if (SIM->get_param_enum(BXPN_BOOTDRIVE1)->get() != BX_BOOT_FLOPPYA) { + // system boot sequence C:, A: + DEV_cmos_set_reg(0x2d, DEV_cmos_get_reg(0x2d) & 0xdf); + } else { // 'a' + // system boot sequence A:, C: + DEV_cmos_set_reg(0x2d, DEV_cmos_get_reg(0x2d) | 0x20); + } + + // Set the "extended" boot sequence, bytes 0x38 and 0x3D (needed for cdrom booting) + BX_INFO(("Using boot sequence %s, %s, %s", + SIM->get_param_enum(BXPN_BOOTDRIVE1)->get_selected(), + SIM->get_param_enum(BXPN_BOOTDRIVE2)->get_selected(), + SIM->get_param_enum(BXPN_BOOTDRIVE3)->get_selected())); + DEV_cmos_set_reg(0x3d, SIM->get_param_enum(BXPN_BOOTDRIVE1)->get() | + (SIM->get_param_enum(BXPN_BOOTDRIVE2)->get() << 4)); + + // Set the signature check flag in cmos, inverted for compatibility + DEV_cmos_set_reg(0x38, SIM->get_param_bool(BXPN_FLOPPYSIGCHECK)->get() | + (SIM->get_param_enum(BXPN_BOOTDRIVE3)->get() << 4)); + BX_INFO(("Floppy boot signature check is %sabled", + SIM->get_param_bool(BXPN_FLOPPYSIGCHECK)->get() ? "dis" : "en")); + } + + // register timer for HD/CD i/o light + if (BX_HD_THIS iolight_timer_index == BX_NULL_TIMER_HANDLE) { + BX_HD_THIS iolight_timer_index = + DEV_register_timer(this, iolight_timer_handler, 100000, 0,0, "HD/CD i/o light"); + } +} + +void bx_hard_drive_c::reset(unsigned type) +{ + for (unsigned channel=0; channelget_bochs_root(), "hard_drive", "Hard Drive State", BX_MAX_ATA_CHANNEL); + for (i=0; iiolight_timer(); +} + +void bx_hard_drive_c::iolight_timer() +{ + for (unsigned channel=0; channel 0) { + if (--BX_HD_THIS channels[channel].drives[device].iolight_counter) + bx_pc_system.activate_timer(BX_HD_THIS iolight_timer_index, 100000, 0); + else + bx_gui->statusbar_setitem(BX_HD_THIS channels[channel].drives[device].statusbar_id, 0); + } + } + } +} + +#define GOTO_RETURN_VALUE if(io_len==4) { \ + goto return_value32; \ + } \ + else if(io_len==2) { \ + value16=(Bit16u)value32; \ + goto return_value16; \ + } \ + else { \ + value8=(Bit8u)value32; \ + goto return_value8; \ + } + + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions +Bit32u bx_hard_drive_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_HD_SMF + bx_hard_drive_c *class_ptr = (bx_hard_drive_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_hard_drive_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_HD_SMF + Bit8u value8; + Bit16u value16; + Bit32u value32; + + Bit8u channel = BX_MAX_ATA_CHANNEL; + Bit32u port = 0xff; // undefined + + for (channel=0; channel 0x03f7)) { + BX_PANIC(("read: unable to find ATA channel, ioport=0x%04x", address)); + } else { + channel = 0; + port = address - 0x03e0; + } + } + + switch (port) { + case 0x00: // hard disk data (16bit) 0x1f0 + if (BX_SELECTED_CONTROLLER(channel).status.drq == 0) { + BX_ERROR(("IO read(0x%04x) with drq == 0: last command was %02xh", + address, (unsigned) BX_SELECTED_CONTROLLER(channel).current_command)); + return(0); + } + BX_DEBUG(("IO read(0x%04x): current command is %02xh", + address, (unsigned) BX_SELECTED_CONTROLLER(channel).current_command)); + switch (BX_SELECTED_CONTROLLER(channel).current_command) { + case 0x20: // READ SECTORS, with retries + case 0x21: // READ SECTORS, without retries + case 0xC4: // READ MULTIPLE SECTORS + case 0x24: // READ SECTORS EXT + case 0x29: // READ MULTIPLE EXT + if (BX_SELECTED_CONTROLLER(channel).buffer_index >= BX_SELECTED_CONTROLLER(channel).buffer_size) + BX_PANIC(("IO read(0x%04x): buffer_index >= %d", address, BX_SELECTED_CONTROLLER(channel).buffer_size)); + +#if BX_SupportRepeatSpeedups + if (DEV_bulk_io_quantum_requested()) { + unsigned transferLen, quantumsMax; + quantumsMax = (BX_SELECTED_CONTROLLER(channel).buffer_size - BX_SELECTED_CONTROLLER(channel).buffer_index) / io_len; + if (quantumsMax == 0) + BX_PANIC(("IO read(0x%04x): not enough space for read", address)); + DEV_bulk_io_quantum_transferred() = DEV_bulk_io_quantum_requested(); + if (quantumsMax < DEV_bulk_io_quantum_transferred()) + DEV_bulk_io_quantum_transferred() = quantumsMax; + transferLen = io_len * DEV_bulk_io_quantum_transferred(); + memcpy((Bit8u*) DEV_bulk_io_host_addr(), + &BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index], transferLen); + DEV_bulk_io_host_addr() += transferLen; + BX_SELECTED_CONTROLLER(channel).buffer_index += transferLen; + value32 = 0; // Value returned not important; + } + else +#endif + { + value32 = 0L; + switch(io_len){ + case 4: + value32 |= (BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index+3] << 24); + value32 |= (BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index+2] << 16); + case 2: + value32 |= (BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index+1] << 8); + value32 |= BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index]; + } + BX_SELECTED_CONTROLLER(channel).buffer_index += io_len; + } + + // if buffer completely read + if (BX_SELECTED_CONTROLLER(channel).buffer_index >= BX_SELECTED_CONTROLLER(channel).buffer_size) { + // update sector count, sector number, cylinder, + // drive, head, status + // if there are more sectors, read next one in... + // + if ((BX_SELECTED_CONTROLLER(channel).current_command == 0xC4) || + (BX_SELECTED_CONTROLLER(channel).current_command == 0x29)) { + if (BX_SELECTED_CONTROLLER(channel).num_sectors > BX_SELECTED_CONTROLLER(channel).multiple_sectors) { + BX_SELECTED_CONTROLLER(channel).buffer_size = BX_SELECTED_CONTROLLER(channel).multiple_sectors * 512; + } else { + BX_SELECTED_CONTROLLER(channel).buffer_size = BX_SELECTED_CONTROLLER(channel).num_sectors * 512; + } + } + + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.write_fault = 0; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + BX_SELECTED_CONTROLLER(channel).status.corrected_data = 0; + BX_SELECTED_CONTROLLER(channel).status.err = 0; + + if (BX_SELECTED_CONTROLLER(channel).num_sectors==0) { + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + } else { /* read next one into controller buffer */ + BX_SELECTED_CONTROLLER(channel).status.drq = 1; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + + if (ide_read_sector(channel, BX_SELECTED_CONTROLLER(channel).buffer, + BX_SELECTED_CONTROLLER(channel).buffer_size)) { + BX_SELECTED_CONTROLLER(channel).buffer_index = 0; + raise_interrupt(channel); + } + } + } + GOTO_RETURN_VALUE; + break; + + case 0xec: // IDENTIFY DEVICE + case 0xa1: + unsigned index; + + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.write_fault = 0; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + BX_SELECTED_CONTROLLER(channel).status.corrected_data = 0; + BX_SELECTED_CONTROLLER(channel).status.err = 0; + + index = BX_SELECTED_CONTROLLER(channel).buffer_index; + value32 = BX_SELECTED_CONTROLLER(channel).buffer[index]; + index++; + if (io_len >= 2) { + value32 |= (BX_SELECTED_CONTROLLER(channel).buffer[index] << 8); + index++; + } + if (io_len == 4) { + value32 |= (BX_SELECTED_CONTROLLER(channel).buffer[index] << 16); + value32 |= (BX_SELECTED_CONTROLLER(channel).buffer[index+1] << 24); + index += 2; + } + BX_SELECTED_CONTROLLER(channel).buffer_index = index; + + if (BX_SELECTED_CONTROLLER(channel).buffer_index >= 512) { + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + BX_DEBUG(("Read all drive ID Bytes ...")); + } + GOTO_RETURN_VALUE; + break; + + case 0xa0: + { + unsigned index = BX_SELECTED_CONTROLLER(channel).buffer_index; + unsigned increment = 0; + + // Load block if necessary + if (index >= BX_SELECTED_CONTROLLER(channel).buffer_size) { + if (index > BX_SELECTED_CONTROLLER(channel).buffer_size) + BX_PANIC(("index > %d : %d", BX_SELECTED_CONTROLLER(channel).buffer_size, index)); + switch (BX_SELECTED_DRIVE(channel).atapi.command) { + case 0x28: // read (10) + case 0xa8: // read (12) + case 0xbe: // read cd +#ifdef LOWLEVEL_CDROM + if (!BX_SELECTED_DRIVE(channel).cdrom.ready) { + BX_PANIC(("Read with CDROM not ready")); + } + /* set status bar conditions for device */ + if (!BX_SELECTED_DRIVE(channel).iolight_counter) + bx_gui->statusbar_setitem(BX_SELECTED_DRIVE(channel).statusbar_id, 1); + BX_SELECTED_DRIVE(channel).iolight_counter = 5; + bx_pc_system.activate_timer(BX_HD_THIS iolight_timer_index, 100000, 0); + if (!BX_SELECTED_DRIVE(channel).cdrom.cd->read_block(BX_SELECTED_CONTROLLER(channel).buffer, + BX_SELECTED_DRIVE(channel).cdrom.next_lba, + BX_SELECTED_CONTROLLER(channel).buffer_size)) + { + BX_PANIC(("CDROM: read block %d failed", BX_SELECTED_DRIVE(channel).cdrom.next_lba)); + } + BX_SELECTED_DRIVE(channel).cdrom.next_lba++; + BX_SELECTED_DRIVE(channel).cdrom.remaining_blocks--; + + if (!BX_SELECTED_DRIVE(channel).cdrom.remaining_blocks) { + BX_DEBUG(("CDROM: last READ block loaded")); + } else { + BX_DEBUG(("CDROM: READ block loaded (%d remaining)", + BX_SELECTED_DRIVE(channel).cdrom.remaining_blocks)); + } + // one block transfered, start at beginning + index = 0; +#else + BX_PANIC(("Read with no LOWLEVEL_CDROM")); +#endif + break; + + default: // no need to load a new block + break; + } + } + + value32 = BX_SELECTED_CONTROLLER(channel).buffer[index+increment]; + increment++; + if (io_len >= 2) { + value32 |= (BX_SELECTED_CONTROLLER(channel).buffer[index+increment] << 8); + increment++; + } + if (io_len == 4) { + value32 |= (BX_SELECTED_CONTROLLER(channel).buffer[index+increment] << 16); + value32 |= (BX_SELECTED_CONTROLLER(channel).buffer[index+increment+1] << 24); + increment += 2; + } + BX_SELECTED_CONTROLLER(channel).buffer_index = index + increment; + BX_SELECTED_CONTROLLER(channel).drq_index += increment; + + if (BX_SELECTED_CONTROLLER(channel).drq_index >= (unsigned)BX_SELECTED_DRIVE(channel).atapi.drq_bytes) { + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + BX_SELECTED_CONTROLLER(channel).drq_index = 0; + + BX_SELECTED_DRIVE(channel).atapi.total_bytes_remaining -= BX_SELECTED_DRIVE(channel).atapi.drq_bytes; + + if (BX_SELECTED_DRIVE(channel).atapi.total_bytes_remaining > 0) { + // one or more blocks remaining (works only for single block commands) + BX_DEBUG(("PACKET drq bytes read")); + BX_SELECTED_CONTROLLER(channel).interrupt_reason.i_o = 1; + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drq = 1; + BX_SELECTED_CONTROLLER(channel).interrupt_reason.c_d = 0; + + // set new byte count if last block + if (BX_SELECTED_DRIVE(channel).atapi.total_bytes_remaining < BX_SELECTED_CONTROLLER(channel).byte_count) { + BX_SELECTED_CONTROLLER(channel).byte_count = BX_SELECTED_DRIVE(channel).atapi.total_bytes_remaining; + } + BX_SELECTED_DRIVE(channel).atapi.drq_bytes = BX_SELECTED_CONTROLLER(channel).byte_count; + + raise_interrupt(channel); + } else { + // all bytes read + BX_DEBUG(("PACKET all bytes read")); + BX_SELECTED_CONTROLLER(channel).interrupt_reason.i_o = 1; + BX_SELECTED_CONTROLLER(channel).interrupt_reason.c_d = 1; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).interrupt_reason.rel = 0; + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + BX_SELECTED_CONTROLLER(channel).status.err = 0; + + raise_interrupt(channel); + } + } + GOTO_RETURN_VALUE; + } + break; + + // List all the read operations that are defined in the ATA/ATAPI spec + // that we don't support. Commands that are listed here will cause a + // BX_ERROR, which is non-fatal, and the command will be aborted. + case 0x08: BX_ERROR(("read cmd 0x08 (DEVICE RESET) not supported")); command_aborted(channel, 0x08); break; + case 0x10: BX_ERROR(("read cmd 0x10 (RECALIBRATE) not supported")); command_aborted(channel, 0x10); break; + case 0x22: BX_ERROR(("read cmd 0x22 (READ LONG) not supported")); command_aborted(channel, 0x22); break; + case 0x23: BX_ERROR(("read cmd 0x23 (READ LONG NO RETRY) not supported")); command_aborted(channel, 0x23); break; + case 0x25: BX_ERROR(("read cmd 0x25 (READ DMA EXT) not supported")); command_aborted(channel, 0x25); break; + case 0x26: BX_ERROR(("read cmd 0x26 (READ DMA QUEUED EXT) not supported")); command_aborted(channel, 0x26); break; + case 0x27: BX_ERROR(("read cmd 0x27 (READ NATIVE MAX ADDRESS EXT) not supported")); command_aborted(channel, 0x27); break; + case 0x2A: BX_ERROR(("read cmd 0x2A (READ STREAM DMA) not supported")); command_aborted(channel, 0x2A); break; + case 0x2B: BX_ERROR(("read cmd 0x2B (READ STREAM PIO) not supported")); command_aborted(channel, 0x2B); break; + case 0x2F: BX_ERROR(("read cmd 0x2F (READ LOG EXT) not supported")); command_aborted(channel, 0x2F); break; + case 0x30: BX_ERROR(("read cmd 0x30 (WRITE SECTORS) not supported")); command_aborted(channel, 0x30); break; + case 0x31: BX_ERROR(("read cmd 0x31 (WRITE SECTORS NO RETRY) not supported")); command_aborted(channel, 0x31); break; + case 0x32: BX_ERROR(("read cmd 0x32 (WRITE LONG) not supported")); command_aborted(channel, 0x32); break; + case 0x33: BX_ERROR(("read cmd 0x33 (WRITE LONG NO RETRY) not supported")); command_aborted(channel, 0x33); break; + case 0x34: BX_ERROR(("read cmd 0x34 (WRITE SECTORS EXT) not supported")); command_aborted(channel, 0x34); break; + case 0x35: BX_ERROR(("read cmd 0x35 (WRITE DMA EXT) not supported")); command_aborted(channel, 0x35); break; + case 0x36: BX_ERROR(("read cmd 0x36 (WRITE DMA QUEUED EXT) not supported")); command_aborted(channel, 0x36); break; + case 0x37: BX_ERROR(("read cmd 0x37 (SET MAX ADDRESS EXT) not supported")); command_aborted(channel, 0x37); break; + case 0x38: BX_ERROR(("read cmd 0x38 (CFA WRITE SECTORS W/OUT ERASE) not supported")); command_aborted(channel, 0x38); break; + case 0x39: BX_ERROR(("read cmd 0x39 (WRITE MULTIPLE EXT) not supported")); command_aborted(channel, 0x39); break; + case 0x3A: BX_ERROR(("read cmd 0x3A (WRITE STREAM DMA) not supported")); command_aborted(channel, 0x3A); break; + case 0x3B: BX_ERROR(("read cmd 0x3B (WRITE STREAM PIO) not supported")); command_aborted(channel, 0x3B); break; + case 0x3F: BX_ERROR(("read cmd 0x3F (WRITE LOG EXT) not supported")); command_aborted(channel, 0x3F); break; + case 0x40: BX_ERROR(("read cmd 0x40 (READ VERIFY SECTORS) not supported")); command_aborted(channel, 0x40); break; + case 0x41: BX_ERROR(("read cmd 0x41 (READ VERIFY SECTORS NO RETRY) not supported")); command_aborted(channel, 0x41); break; + case 0x42: BX_ERROR(("read cmd 0x42 (READ VERIFY SECTORS EXT) not supported")); command_aborted(channel, 0x42); break; + case 0x50: BX_ERROR(("read cmd 0x50 (FORMAT TRACK) not supported")); command_aborted(channel, 0x50); break; + case 0x51: BX_ERROR(("read cmd 0x51 (CONFIGURE STREAM) not supported")); command_aborted(channel, 0x51); break; + case 0x70: BX_ERROR(("read cmd 0x70 (SEEK) not supported")); command_aborted(channel, 0x70); break; + case 0x87: BX_ERROR(("read cmd 0x87 (CFA TRANSLATE SECTOR) not supported")); command_aborted(channel, 0x87); break; + case 0x90: BX_ERROR(("read cmd 0x90 (EXECUTE DEVICE DIAGNOSTIC) not supported")); command_aborted(channel, 0x90); break; + case 0x91: BX_ERROR(("read cmd 0x91 (INITIALIZE DEVICE PARAMETERS) not supported")); command_aborted(channel, 0x91); break; + case 0x92: BX_ERROR(("read cmd 0x92 (DOWNLOAD MICROCODE) not supported")); command_aborted(channel, 0x92); break; + case 0x94: BX_ERROR(("read cmd 0x94 (STANDBY IMMEDIATE) not supported")); command_aborted(channel, 0x94); break; + case 0x95: BX_ERROR(("read cmd 0x95 (IDLE IMMEDIATE) not supported")); command_aborted(channel, 0x95); break; + case 0x96: BX_ERROR(("read cmd 0x96 (STANDBY) not supported")); command_aborted(channel, 0x96); break; + case 0x97: BX_ERROR(("read cmd 0x97 (IDLE) not supported")); command_aborted(channel, 0x97); break; + case 0x98: BX_ERROR(("read cmd 0x98 (CHECK POWER MODE) not supported")); command_aborted(channel, 0x98); break; + case 0x99: BX_ERROR(("read cmd 0x99 (SLEEP) not supported")); command_aborted(channel, 0x99); break; + case 0xA2: BX_ERROR(("read cmd 0xA2 (SERVICE) not supported")); command_aborted(channel, 0xA2); break; + case 0xB0: BX_ERROR(("read cmd 0xB0 (SMART DISABLE OPERATIONS) not supported")); command_aborted(channel, 0xB0); break; + case 0xB1: BX_ERROR(("read cmd 0xB1 (DEVICE CONFIGURATION FREEZE LOCK) not supported")); command_aborted(channel, 0xB1); break; + case 0xC0: BX_ERROR(("read cmd 0xC0 (CFA ERASE SECTORS) not supported")); command_aborted(channel, 0xC0); break; + case 0xC5: BX_ERROR(("read cmd 0xC5 (WRITE MULTIPLE) not supported")); command_aborted(channel, 0xC5); break; + case 0xC6: BX_ERROR(("read cmd 0xC6 (SET MULTIPLE MODE) not supported")); command_aborted(channel, 0xC6); break; + case 0xC7: BX_ERROR(("read cmd 0xC7 (READ DMA QUEUED) not supported")); command_aborted(channel, 0xC7); break; + case 0xC8: BX_ERROR(("read cmd 0xC8 (READ DMA) not supported")); command_aborted(channel, 0xC8); break; + case 0xC9: BX_ERROR(("read cmd 0xC9 (READ DMA NO RETRY) not supported")); command_aborted(channel, 0xC9); break; + case 0xCA: BX_ERROR(("read cmd 0xCA (WRITE DMA) not supported")); command_aborted(channel, 0xCA); break; + case 0xCC: BX_ERROR(("read cmd 0xCC (WRITE DMA QUEUED) not supported")); command_aborted(channel, 0xCC); break; + case 0xCD: BX_ERROR(("read cmd 0xCD (CFA WRITE MULTIPLE W/OUT ERASE) not supported")); command_aborted(channel, 0xCD); break; + case 0xD1: BX_ERROR(("read cmd 0xD1 (CHECK MEDIA CARD TYPE) not supported")); command_aborted(channel, 0xD1); break; + case 0xDA: BX_ERROR(("read cmd 0xDA (GET MEDIA STATUS) not supported")); command_aborted(channel, 0xDA); break; + case 0xDE: BX_ERROR(("read cmd 0xDE (MEDIA LOCK) not supported")); command_aborted(channel, 0xDE); break; + case 0xDF: BX_ERROR(("read cmd 0xDF (MEDIA UNLOCK) not supported")); command_aborted(channel, 0xDF); break; + case 0xE0: BX_ERROR(("read cmd 0xE0 (STANDBY IMMEDIATE) not supported")); command_aborted(channel, 0xE0); break; + case 0xE1: BX_ERROR(("read cmd 0xE1 (IDLE IMMEDIATE) not supported")); command_aborted(channel, 0xE1); break; + case 0xE2: BX_ERROR(("read cmd 0xE2 (STANDBY) not supported")); command_aborted(channel, 0xE2); break; + case 0xE3: BX_ERROR(("read cmd 0xE3 (IDLE) not supported")); command_aborted(channel, 0xE3); break; + case 0xE4: BX_ERROR(("read cmd 0xE4 (READ BUFFER) not supported")); command_aborted(channel, 0xE4); break; + case 0xE5: BX_ERROR(("read cmd 0xE5 (CHECK POWER MODE) not supported")); command_aborted(channel, 0xE5); break; + case 0xE6: BX_ERROR(("read cmd 0xE6 (SLEEP) not supported")); command_aborted(channel, 0xE6); break; + case 0xE7: BX_ERROR(("read cmd 0xE7 (FLUSH CACHE) not supported")); command_aborted(channel, 0xE7); break; + case 0xE8: BX_ERROR(("read cmd 0xE8 (WRITE BUFFER) not supported")); command_aborted(channel, 0xE8); break; + case 0xEA: BX_ERROR(("read cmd 0xEA (FLUSH CACHE EXT) not supported")); command_aborted(channel, 0xEA); break; + case 0xED: BX_ERROR(("read cmd 0xED (MEDIA EJECT) not supported")); command_aborted(channel, 0xED); break; + case 0xEF: BX_ERROR(("read cmd 0xEF (SET FEATURES) not supported")); command_aborted(channel, 0xEF); break; + case 0xF1: BX_ERROR(("read cmd 0xF1 (SECURITY SET PASSWORD) not supported")); command_aborted(channel, 0xF1); break; + case 0xF2: BX_ERROR(("read cmd 0xF2 (SECURITY UNLOCK) not supported")); command_aborted(channel, 0xF2); break; + case 0xF3: BX_ERROR(("read cmd 0xF3 (SECURITY ERASE PREPARE) not supported")); command_aborted(channel, 0xF3); break; + case 0xF4: BX_ERROR(("read cmd 0xF4 (SECURITY ERASE UNIT) not supported")); command_aborted(channel, 0xF4); break; + case 0xF5: BX_ERROR(("read cmd 0xF5 (SECURITY FREEZE LOCK) not supported")); command_aborted(channel, 0xF5); break; + case 0xF6: BX_ERROR(("read cmd 0xF6 (SECURITY DISABLE PASSWORD) not supported")); command_aborted(channel, 0xF6); break; + case 0xF8: BX_ERROR(("read cmd 0xF8 (READ NATIVE MAX ADDRESS) not supported")); command_aborted(channel, 0xF8); break; + case 0xF9: BX_ERROR(("read cmd 0xF9 (SET MAX ADDRESS) not supported")); command_aborted(channel, 0xF9); break; + + default: + BX_PANIC(("IO read(0x%04x): current command is %02xh", address, + (unsigned) BX_SELECTED_CONTROLLER(channel).current_command)); + } + break; + + case 0x01: // hard disk error register 0x1f1 + // -- WARNING : On real hardware the controller registers are shared between drives. + // So we must respond even if the select device is not present. Some OS uses this fact + // to detect the disks.... minix2 for example + value8 = (!BX_ANY_IS_PRESENT(channel)) ? 0 : BX_SELECTED_CONTROLLER(channel).error_register; + goto return_value8; + case 0x02: // hard disk sector count / interrupt reason 0x1f2 + value8 = (!BX_ANY_IS_PRESENT(channel)) ? 0 : BX_SELECTED_CONTROLLER(channel).sector_count; + goto return_value8; + case 0x03: // sector number 0x1f3 + value8 = (!BX_ANY_IS_PRESENT(channel)) ? 0 : BX_SELECTED_CONTROLLER(channel).sector_no; + goto return_value8; + case 0x04: // cylinder low 0x1f4 + value8 = (!BX_ANY_IS_PRESENT(channel)) ? 0 : (BX_SELECTED_CONTROLLER(channel).cylinder_no & 0x00ff); + goto return_value8; + case 0x05: // cylinder high 0x1f5 + value8 = (!BX_ANY_IS_PRESENT(channel)) ? 0 : BX_SELECTED_CONTROLLER(channel).cylinder_no >> 8; + goto return_value8; + + case 0x06: // hard disk drive and head register 0x1f6 + // b7 Extended data field for ECC + // b6/b5: Used to be sector size. 00=256,01=512,10=1024,11=128 + // Since 512 was always used, bit 6 was taken to mean LBA mode: + // b6 1=LBA mode, 0=CHS mode + // b5 1 + // b4: DRV + // b3..0 HD3..HD0 + value8 = (1 << 7) | + ((BX_SELECTED_CONTROLLER(channel).lba_mode>0) << 6) | + (1 << 5) | // 01b = 512 sector size + (BX_HD_THIS channels[channel].drive_select << 4) | + (BX_SELECTED_CONTROLLER(channel).head_no << 0); + goto return_value8; + + case 0x07: // Hard Disk Status 0x1f7 + case 0x16: // Hard Disk Alternate Status 0x3f6 + if (!BX_SELECTED_IS_PRESENT(channel)) { + // (mch) Just return zero for these registers + value8 = 0; + } else { + value8 = ( + (BX_SELECTED_CONTROLLER(channel).status.busy << 7) | + (BX_SELECTED_CONTROLLER(channel).status.drive_ready << 6) | + (BX_SELECTED_CONTROLLER(channel).status.write_fault << 5) | + (BX_SELECTED_CONTROLLER(channel).status.seek_complete << 4) | + (BX_SELECTED_CONTROLLER(channel).status.drq << 3) | + (BX_SELECTED_CONTROLLER(channel).status.corrected_data << 2) | + (BX_SELECTED_CONTROLLER(channel).status.index_pulse << 1) | + (BX_SELECTED_CONTROLLER(channel).status.err)); + BX_SELECTED_CONTROLLER(channel).status.index_pulse_count++; + BX_SELECTED_CONTROLLER(channel).status.index_pulse = 0; + if (BX_SELECTED_CONTROLLER(channel).status.index_pulse_count >= INDEX_PULSE_CYCLE) { + BX_SELECTED_CONTROLLER(channel).status.index_pulse = 1; + BX_SELECTED_CONTROLLER(channel).status.index_pulse_count = 0; + } + } + if (port == 0x07) { + DEV_pic_lower_irq(BX_HD_THIS channels[channel].irq); + } + goto return_value8; + + case 0x17: // Hard Disk Address Register 0x3f7 + // Obsolete and unsupported register. Not driven by hard + // disk controller. Report all 1's. If floppy controller + // is handling this address, it will call this function + // set/clear D7 (the only bit it handles), then return + // the combined value + value8 = 0xff; + goto return_value8; + + default: + BX_PANIC(("hard drive: io read to address %x unsupported", + (unsigned) address)); + } + + BX_PANIC(("hard drive: shouldnt get here!")); + return(0); + +return_value32: + BX_DEBUG(("32-bit read from %04x = %08x {%s}", + (unsigned) address, value32, BX_SELECTED_TYPE_STRING(channel))); + return value32; + +return_value16: + BX_DEBUG(("16-bit read from %04x = %04x {%s}", + (unsigned) address, value16, BX_SELECTED_TYPE_STRING(channel))); + return value16; + +return_value8: + BX_DEBUG(("8-bit read from %04x = %02x {%s}", + (unsigned) address, value8, BX_SELECTED_TYPE_STRING(channel))); + return value8; +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_hard_drive_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_HD_SMF + bx_hard_drive_c *class_ptr = (bx_hard_drive_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_HD_SMF + Bit64s logical_sector; + bx_bool prev_control_reset; + bx_bool lba48 = 0; + + Bit8u channel = BX_MAX_ATA_CHANNEL; + Bit32u port = 0xff; // undefined + int i; + + for (channel=0; channel= BX_SELECTED_CONTROLLER(channel).buffer_size) + BX_PANIC(("IO write(0x%04x): buffer_index >= %d", address, BX_SELECTED_CONTROLLER(channel).buffer_size)); + +#if BX_SupportRepeatSpeedups + if (DEV_bulk_io_quantum_requested()) { + unsigned transferLen, quantumsMax; + quantumsMax = (BX_SELECTED_CONTROLLER(channel).buffer_size - BX_SELECTED_CONTROLLER(channel).buffer_index) / io_len; + if (quantumsMax == 0) + BX_PANIC(("IO write(0x%04x): not enough space for write", address)); + DEV_bulk_io_quantum_transferred() = DEV_bulk_io_quantum_requested(); + if (quantumsMax < DEV_bulk_io_quantum_transferred()) + DEV_bulk_io_quantum_transferred() = quantumsMax; + transferLen = io_len * DEV_bulk_io_quantum_transferred(); + memcpy(&BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index], + (Bit8u*) DEV_bulk_io_host_addr(), transferLen); + DEV_bulk_io_host_addr() += transferLen; + BX_SELECTED_CONTROLLER(channel).buffer_index += transferLen; + } + else +#endif + { + switch(io_len) { + case 4: + BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index+3] = (Bit8u)(value >> 24); + BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index+2] = (Bit8u)(value >> 16); + case 2: + BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index+1] = (Bit8u)(value >> 8); + BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index] = (Bit8u) value; + } + BX_SELECTED_CONTROLLER(channel).buffer_index += io_len; + } + + /* if buffer completely writtten */ + if (BX_SELECTED_CONTROLLER(channel).buffer_index >= BX_SELECTED_CONTROLLER(channel).buffer_size) { + if (ide_write_sector(channel, BX_SELECTED_CONTROLLER(channel).buffer, + BX_SELECTED_CONTROLLER(channel).buffer_size)) { + if ((BX_SELECTED_CONTROLLER(channel).current_command == 0xC5) || + (BX_SELECTED_CONTROLLER(channel).current_command == 0x39)) { + if (BX_SELECTED_CONTROLLER(channel).num_sectors > BX_SELECTED_CONTROLLER(channel).multiple_sectors) { + BX_SELECTED_CONTROLLER(channel).buffer_size = BX_SELECTED_CONTROLLER(channel).multiple_sectors * 512; + } else { + BX_SELECTED_CONTROLLER(channel).buffer_size = BX_SELECTED_CONTROLLER(channel).num_sectors * 512; + } + } + BX_SELECTED_CONTROLLER(channel).buffer_index = 0; + + /* When the write is complete, controller clears the DRQ bit and + * sets the BSY bit. + * If at least one more sector is to be written, controller sets DRQ bit, + * clears BSY bit, and issues IRQ + */ + + if (BX_SELECTED_CONTROLLER(channel).num_sectors != 0) { + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.drq = 1; + BX_SELECTED_CONTROLLER(channel).status.corrected_data = 0; + BX_SELECTED_CONTROLLER(channel).status.err = 0; + } else { /* no more sectors to write */ + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + BX_SELECTED_CONTROLLER(channel).status.err = 0; + BX_SELECTED_CONTROLLER(channel).status.corrected_data = 0; + } + raise_interrupt(channel); + } + } + break; + + case 0xa0: // PACKET + if (BX_SELECTED_CONTROLLER(channel).buffer_index >= PACKET_SIZE) + BX_PANIC(("IO write(0x%04x): buffer_index >= PACKET_SIZE", address)); + + switch (io_len) { + case 4: + BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index+3] = (Bit8u)(value >> 24); + BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index+2] = (Bit8u)(value >> 16); + case 2: + BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index+1] = (Bit8u)(value >> 8); + BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index] = (Bit8u) value; + } + BX_SELECTED_CONTROLLER(channel).buffer_index += io_len; + + /* if packet completely writtten */ + if (BX_SELECTED_CONTROLLER(channel).buffer_index >= PACKET_SIZE) { + // complete command received + Bit8u atapi_command = BX_SELECTED_CONTROLLER(channel).buffer[0]; + BX_SELECTED_CONTROLLER(channel).buffer_size = 2048; + + BX_DEBUG(("ata%d-%d: ATAPI command 0x%02x started", channel, + BX_SLAVE_SELECTED(channel), atapi_command)); + + switch (atapi_command) { + case 0x00: // test unit ready + if (BX_SELECTED_DRIVE(channel).cdrom.ready) { + atapi_cmd_nop(channel); + } else { + atapi_cmd_error(channel, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT, 0); + } + raise_interrupt(channel); + break; + + case 0x03: // request sense + { + int alloc_length = BX_SELECTED_CONTROLLER(channel).buffer[4]; + init_send_atapi_command(channel, atapi_command, 18, alloc_length); + + // sense data + BX_SELECTED_CONTROLLER(channel).buffer[0] = 0x70 | (1 << 7); + BX_SELECTED_CONTROLLER(channel).buffer[1] = 0; + BX_SELECTED_CONTROLLER(channel).buffer[2] = BX_SELECTED_DRIVE(channel).sense.sense_key; + BX_SELECTED_CONTROLLER(channel).buffer[3] = BX_SELECTED_DRIVE(channel).sense.information.arr[0]; + BX_SELECTED_CONTROLLER(channel).buffer[4] = BX_SELECTED_DRIVE(channel).sense.information.arr[1]; + BX_SELECTED_CONTROLLER(channel).buffer[5] = BX_SELECTED_DRIVE(channel).sense.information.arr[2]; + BX_SELECTED_CONTROLLER(channel).buffer[6] = BX_SELECTED_DRIVE(channel).sense.information.arr[3]; + BX_SELECTED_CONTROLLER(channel).buffer[7] = 17-7; + BX_SELECTED_CONTROLLER(channel).buffer[8] = BX_SELECTED_DRIVE(channel).sense.specific_inf.arr[0]; + BX_SELECTED_CONTROLLER(channel).buffer[9] = BX_SELECTED_DRIVE(channel).sense.specific_inf.arr[1]; + BX_SELECTED_CONTROLLER(channel).buffer[10] = BX_SELECTED_DRIVE(channel).sense.specific_inf.arr[2]; + BX_SELECTED_CONTROLLER(channel).buffer[11] = BX_SELECTED_DRIVE(channel).sense.specific_inf.arr[3]; + BX_SELECTED_CONTROLLER(channel).buffer[12] = BX_SELECTED_DRIVE(channel).sense.asc; + BX_SELECTED_CONTROLLER(channel).buffer[13] = BX_SELECTED_DRIVE(channel).sense.ascq; + BX_SELECTED_CONTROLLER(channel).buffer[14] = BX_SELECTED_DRIVE(channel).sense.fruc; + BX_SELECTED_CONTROLLER(channel).buffer[15] = BX_SELECTED_DRIVE(channel).sense.key_spec.arr[0]; + BX_SELECTED_CONTROLLER(channel).buffer[16] = BX_SELECTED_DRIVE(channel).sense.key_spec.arr[1]; + BX_SELECTED_CONTROLLER(channel).buffer[17] = BX_SELECTED_DRIVE(channel).sense.key_spec.arr[2]; + + if (BX_SELECTED_DRIVE(channel).sense.sense_key == SENSE_UNIT_ATTENTION) { + BX_SELECTED_DRIVE(channel).sense.sense_key = SENSE_NONE; + } + ready_to_send_atapi(channel); + } + break; + + case 0x1b: // start stop unit + { + char ata_name[20]; + //bx_bool Immed = (BX_SELECTED_CONTROLLER(channel).buffer[1] >> 0) & 1; + bx_bool LoEj = (BX_SELECTED_CONTROLLER(channel).buffer[4] >> 1) & 1; + bx_bool Start = (BX_SELECTED_CONTROLLER(channel).buffer[4] >> 0) & 1; + + if (!LoEj && !Start) { // stop the disc + BX_ERROR(("FIXME: Stop disc not implemented")); + atapi_cmd_nop(channel); + raise_interrupt(channel); + } else if (!LoEj && Start) { // start (spin up) the disc +#ifdef LOWLEVEL_CDROM + BX_SELECTED_DRIVE(channel).cdrom.cd->start_cdrom(); +#endif + BX_ERROR(("FIXME: ATAPI start disc not reading TOC")); + atapi_cmd_nop(channel); + raise_interrupt(channel); + } else if (LoEj && !Start) { // Eject the disc + atapi_cmd_nop(channel); + + if (BX_SELECTED_DRIVE(channel).cdrom.ready) { +#ifdef LOWLEVEL_CDROM + BX_SELECTED_DRIVE(channel).cdrom.cd->eject_cdrom(); +#endif + BX_SELECTED_DRIVE(channel).cdrom.ready = 0; + sprintf(ata_name, "ata.%d.%s", channel, BX_SLAVE_SELECTED(channel)?"slave":"master"); + bx_list_c *base = (bx_list_c*) SIM->get_param(ata_name); + SIM->get_param_bool("status", base)->set(0); + bx_gui->update_drive_status_buttons(); + } + raise_interrupt(channel); + } else { // Load the disc + // My guess is that this command only closes the tray, that's a no-op for us + atapi_cmd_nop(channel); + raise_interrupt(channel); + } + } + break; + + case 0xbd: // mechanism status + { + Bit16u alloc_length = read_16bit(BX_SELECTED_CONTROLLER(channel).buffer + 8); + + if (alloc_length == 0) + BX_PANIC(("Zero allocation length to MECHANISM STATUS not impl.")); + + init_send_atapi_command(channel, atapi_command, 8, alloc_length); + + BX_SELECTED_CONTROLLER(channel).buffer[0] = 0; // reserved for non changers + BX_SELECTED_CONTROLLER(channel).buffer[1] = 0; // reserved for non changers + + BX_SELECTED_CONTROLLER(channel).buffer[2] = 0; // Current LBA (TODO!) + BX_SELECTED_CONTROLLER(channel).buffer[3] = 0; // Current LBA (TODO!) + BX_SELECTED_CONTROLLER(channel).buffer[4] = 0; // Current LBA (TODO!) + + BX_SELECTED_CONTROLLER(channel).buffer[5] = 1; // one slot + + BX_SELECTED_CONTROLLER(channel).buffer[6] = 0; // slot table length + BX_SELECTED_CONTROLLER(channel).buffer[7] = 0; // slot table length + + ready_to_send_atapi(channel); + } + break; + + case 0x1a: // mode sense (6) + case 0x5a: // mode sense (10) + { + Bit16u alloc_length; + + if (atapi_command == 0x5a) { + alloc_length = read_16bit(BX_SELECTED_CONTROLLER(channel).buffer + 7); + } else { + alloc_length = BX_SELECTED_CONTROLLER(channel).buffer[4]; + } + Bit8u PC = BX_SELECTED_CONTROLLER(channel).buffer[2] >> 6; + Bit8u PageCode = BX_SELECTED_CONTROLLER(channel).buffer[2] & 0x3f; + + switch (PC) { + case 0x0: // current values + switch (PageCode) { + case 0x01: // error recovery + init_send_atapi_command(channel, atapi_command, sizeof(error_recovery_t) + 8, alloc_length); + + init_mode_sense_single(channel, &BX_SELECTED_DRIVE(channel).cdrom.current.error_recovery, + sizeof(error_recovery_t)); + ready_to_send_atapi(channel); + break; + + case 0x2a: // CD-ROM capabilities & mech. status + init_send_atapi_command(channel, atapi_command, 28, alloc_length); + init_mode_sense_single(channel, &BX_SELECTED_CONTROLLER(channel).buffer[8], 28); + BX_SELECTED_CONTROLLER(channel).buffer[8] = 0x2a; + BX_SELECTED_CONTROLLER(channel).buffer[9] = 0x12; + BX_SELECTED_CONTROLLER(channel).buffer[10] = 0x00; + BX_SELECTED_CONTROLLER(channel).buffer[11] = 0x00; + // Multisession, Mode 2 Form 2, Mode 2 Form 1 + BX_SELECTED_CONTROLLER(channel).buffer[12] = 0x70; + BX_SELECTED_CONTROLLER(channel).buffer[13] = (3 << 5); + BX_SELECTED_CONTROLLER(channel).buffer[14] = (unsigned char) (1 | + (BX_SELECTED_DRIVE(channel).cdrom.locked ? (1 << 1) : 0) | + (1 << 3) | + (1 << 5)); + BX_SELECTED_CONTROLLER(channel).buffer[15] = 0x00; + BX_SELECTED_CONTROLLER(channel).buffer[16] = (706 >> 8) & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[17] = 706 & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[18] = 0; + BX_SELECTED_CONTROLLER(channel).buffer[19] = 2; + BX_SELECTED_CONTROLLER(channel).buffer[20] = (512 >> 8) & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[21] = 512 & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[22] = (706 >> 8) & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[23] = 706 & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[24] = 0; + BX_SELECTED_CONTROLLER(channel).buffer[25] = 0; + BX_SELECTED_CONTROLLER(channel).buffer[26] = 0; + BX_SELECTED_CONTROLLER(channel).buffer[27] = 0; + ready_to_send_atapi(channel); + break; + + case 0x0d: // CD-ROM + case 0x0e: // CD-ROM audio control + case 0x3f: // all + BX_ERROR(("cdrom: MODE SENSE (curr), code=%x not implemented yet", + PageCode)); + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, + ASC_INV_FIELD_IN_CMD_PACKET, 1); + raise_interrupt(channel); + break; + + default: + // not implemeted by this device + BX_INFO(("cdrom: MODE SENSE PC=%x, PageCode=%x, not implemented by device", + PC, PageCode)); + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, + ASC_INV_FIELD_IN_CMD_PACKET, 1); + raise_interrupt(channel); + break; + } + break; + + case 0x1: // changeable values + switch (PageCode) { + case 0x01: // error recovery + case 0x0d: // CD-ROM + case 0x0e: // CD-ROM audio control + case 0x2a: // CD-ROM capabilities & mech. status + case 0x3f: // all + BX_ERROR(("cdrom: MODE SENSE (chg), code=%x not implemented yet", + PageCode)); + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, + ASC_INV_FIELD_IN_CMD_PACKET, 1); + raise_interrupt(channel); + break; + + default: + // not implemeted by this device + BX_INFO(("cdrom: MODE SENSE PC=%x, PageCode=%x, not implemented by device", + PC, PageCode)); + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, + ASC_INV_FIELD_IN_CMD_PACKET, 1); + raise_interrupt(channel); + break; + } + break; + + case 0x2: // default values + switch (PageCode) { + case 0x2a: // CD-ROM capabilities & mech. status, copied from current values + init_send_atapi_command(channel, atapi_command, 28, alloc_length); + init_mode_sense_single(channel, &BX_SELECTED_CONTROLLER(channel).buffer[8], 28); + BX_SELECTED_CONTROLLER(channel).buffer[8] = 0x2a; + BX_SELECTED_CONTROLLER(channel).buffer[9] = 0x12; + BX_SELECTED_CONTROLLER(channel).buffer[10] = 0x00; + BX_SELECTED_CONTROLLER(channel).buffer[11] = 0x00; + // Multisession, Mode 2 Form 2, Mode 2 Form 1 + BX_SELECTED_CONTROLLER(channel).buffer[12] = 0x70; + BX_SELECTED_CONTROLLER(channel).buffer[13] = (3 << 5); + BX_SELECTED_CONTROLLER(channel).buffer[14] = (unsigned char) (1 | + (BX_SELECTED_DRIVE(channel).cdrom.locked ? (1 << 1) : 0) | + (1 << 3) | + (1 << 5)); + BX_SELECTED_CONTROLLER(channel).buffer[15] = 0x00; + BX_SELECTED_CONTROLLER(channel).buffer[16] = (706 >> 8) & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[17] = 706 & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[18] = 0; + BX_SELECTED_CONTROLLER(channel).buffer[19] = 2; + BX_SELECTED_CONTROLLER(channel).buffer[20] = (512 >> 8) & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[21] = 512 & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[22] = (706 >> 8) & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[23] = 706 & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[24] = 0; + BX_SELECTED_CONTROLLER(channel).buffer[25] = 0; + BX_SELECTED_CONTROLLER(channel).buffer[26] = 0; + BX_SELECTED_CONTROLLER(channel).buffer[27] = 0; + ready_to_send_atapi(channel); + break; + + case 0x01: // error recovery + case 0x0d: // CD-ROM + case 0x0e: // CD-ROM audio control + case 0x3f: // all + BX_ERROR(("cdrom: MODE SENSE (dflt), code=%x not implemented", PageCode)); + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, + ASC_INV_FIELD_IN_CMD_PACKET, 1); + raise_interrupt(channel); + break; + + default: + // not implemeted by this device + BX_INFO(("cdrom: MODE SENSE PC=%x, PageCode=%x, not implemented by device", + PC, PageCode)); + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, + ASC_INV_FIELD_IN_CMD_PACKET, 1); + raise_interrupt(channel); + break; + } + break; + + case 0x3: // saved values not implemented + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_SAVING_PARAMETERS_NOT_SUPPORTED, 1); + raise_interrupt(channel); + break; + + default: + BX_PANIC(("Should not get here!")); + break; + } + } + break; + + case 0x12: // inquiry + { + Bit8u alloc_length = BX_SELECTED_CONTROLLER(channel).buffer[4]; + + init_send_atapi_command(channel, atapi_command, 36, alloc_length); + + BX_SELECTED_CONTROLLER(channel).buffer[0] = 0x05; // CD-ROM + BX_SELECTED_CONTROLLER(channel).buffer[1] = 0x80; // Removable + BX_SELECTED_CONTROLLER(channel).buffer[2] = 0x00; // ISO, ECMA, ANSI version + BX_SELECTED_CONTROLLER(channel).buffer[3] = 0x21; // ATAPI-2, as specified + BX_SELECTED_CONTROLLER(channel).buffer[4] = 31; // additional length (total 36) + BX_SELECTED_CONTROLLER(channel).buffer[5] = 0x00; // reserved + BX_SELECTED_CONTROLLER(channel).buffer[6] = 0x00; // reserved + BX_SELECTED_CONTROLLER(channel).buffer[7] = 0x00; // reserved + + // Vendor ID + const char* vendor_id = "BOCHS "; + for (i = 0; i < 8; i++) + BX_SELECTED_CONTROLLER(channel).buffer[8+i] = vendor_id[i]; + + // Product ID + const char* product_id = "Generic CD-ROM "; + for (i = 0; i < 16; i++) + BX_SELECTED_CONTROLLER(channel).buffer[16+i] = product_id[i]; + if (BX_HD_THIS cdrom_count > 1) { + BX_SELECTED_CONTROLLER(channel).buffer[31] = BX_SELECTED_DRIVE(channel).device_num; + } + + // Product Revision level + const char* rev_level = "1.0 "; + for (i = 0; i < 4; i++) + BX_SELECTED_CONTROLLER(channel).buffer[32+i] = rev_level[i]; + + ready_to_send_atapi(channel); + } + break; + + case 0x25: // read cd-rom capacity + { + // no allocation length??? + init_send_atapi_command(channel, atapi_command, 8, 8); + + if (BX_SELECTED_DRIVE(channel).cdrom.ready) { + Bit32u capacity = BX_SELECTED_DRIVE(channel).cdrom.capacity - 1; + BX_SELECTED_CONTROLLER(channel).buffer[0] = (capacity >> 24) & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[1] = (capacity >> 16) & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[2] = (capacity >> 8) & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[3] = (capacity >> 0) & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[4] = (2048 >> 24) & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[5] = (2048 >> 16) & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[6] = (2048 >> 8) & 0xff; + BX_SELECTED_CONTROLLER(channel).buffer[7] = (2048 >> 0) & 0xff; + ready_to_send_atapi(channel); + } else { + atapi_cmd_error(channel, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT, 1); + raise_interrupt(channel); + } + } + break; + + case 0xbe: // read cd + { + if (BX_SELECTED_DRIVE(channel).cdrom.ready) { + Bit32u lba = read_32bit(BX_SELECTED_CONTROLLER(channel).buffer + 2); + Bit32u transfer_length = BX_SELECTED_CONTROLLER(channel).buffer[8] | + (BX_SELECTED_CONTROLLER(channel).buffer[7] << 8) | + (BX_SELECTED_CONTROLLER(channel).buffer[6] << 16); + Bit8u transfer_req = BX_SELECTED_CONTROLLER(channel).buffer[9]; + if (transfer_length == 0) { + atapi_cmd_nop(channel); + raise_interrupt(channel); + break; + } + switch (transfer_req & 0xf8) { + case 0x00: + atapi_cmd_nop(channel); + raise_interrupt(channel); + break; + case 0xf8: + BX_SELECTED_CONTROLLER(channel).buffer_size = 2352; + case 0x10: + init_send_atapi_command(channel, atapi_command, + transfer_length * BX_SELECTED_CONTROLLER(channel).buffer_size, + transfer_length * BX_SELECTED_CONTROLLER(channel).buffer_size, 1); + BX_SELECTED_DRIVE(channel).cdrom.remaining_blocks = transfer_length; + BX_SELECTED_DRIVE(channel).cdrom.next_lba = lba; + ready_to_send_atapi(channel); + break; + default: + BX_ERROR(("Read CD: unknown format")); + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET, 1); + raise_interrupt(channel); + } + } else { + atapi_cmd_error(channel, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT, 1); + raise_interrupt(channel); + } + } + break; + + case 0x43: // read toc + if (BX_SELECTED_DRIVE(channel).cdrom.ready) { +#ifdef LOWLEVEL_CDROM + bx_bool msf = (BX_SELECTED_CONTROLLER(channel).buffer[1] >> 1) & 1; + Bit8u starting_track = BX_SELECTED_CONTROLLER(channel).buffer[6]; + int toc_length; +#endif + Bit16u alloc_length = read_16bit(BX_SELECTED_CONTROLLER(channel).buffer + 7); + Bit8u format = (BX_SELECTED_CONTROLLER(channel).buffer[9] >> 6); +// Win32: I just read the TOC using Win32's IOCTRL functions (Ben) +#if defined(WIN32) +#ifdef LOWLEVEL_CDROM + switch (format) { + case 2: + case 3: + case 4: + if (msf != 1) + BX_ERROR(("READ_TOC_EX: msf not set for format %i", format)); + case 0: + case 1: + case 5: + if (!(BX_SELECTED_DRIVE(channel).cdrom.cd->read_toc(BX_SELECTED_CONTROLLER(channel).buffer, + &toc_length, msf, starting_track, format))) { + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET, 1); + raise_interrupt(channel); + } else { + init_send_atapi_command(channel, atapi_command, toc_length, alloc_length); + ready_to_send_atapi(channel); + } + break; + default: + BX_ERROR(("(READ TOC) format %d not supported", format)); + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET, 1); + raise_interrupt(channel); + } +#else + BX_PANIC(("LOWLEVEL_CDROM not defined")); +#endif +#else // WIN32 + switch (format) { + case 0: + case 1: + case 2: +#ifdef LOWLEVEL_CDROM + if (!(BX_SELECTED_DRIVE(channel).cdrom.cd->read_toc(BX_SELECTED_CONTROLLER(channel).buffer, + &toc_length, msf, starting_track, format))) { + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET, 1); + raise_interrupt(channel); + } else { + init_send_atapi_command(channel, atapi_command, toc_length, alloc_length); + ready_to_send_atapi(channel); + } +#else + BX_PANIC(("LOWLEVEL_CDROM not defined")); +#endif + break; + + default: + BX_ERROR(("(READ TOC) format %d not supported", format)); + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET, 1); + raise_interrupt(channel); + break; + } +#endif // WIN32 + } else { + atapi_cmd_error(channel, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT, 1); + raise_interrupt(channel); + } + break; + + case 0x28: // read (10) + case 0xa8: // read (12) + { + Bit32s transfer_length; + + if (atapi_command == 0x28) + transfer_length = read_16bit(BX_SELECTED_CONTROLLER(channel).buffer + 7); + else + transfer_length = read_32bit(BX_SELECTED_CONTROLLER(channel).buffer + 6); + + Bit32u lba = read_32bit(BX_SELECTED_CONTROLLER(channel).buffer + 2); + + if (!BX_SELECTED_DRIVE(channel).cdrom.ready) { + atapi_cmd_error(channel, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT, 1); + raise_interrupt(channel); + break; + } + if (lba > BX_SELECTED_DRIVE(channel).cdrom.capacity) { + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_LOGICAL_BLOCK_OOR, 1); + raise_interrupt(channel); + break; + } + + // Ben: see comment below + if (lba + transfer_length > BX_SELECTED_DRIVE(channel).cdrom.capacity) { + transfer_length = (BX_SELECTED_DRIVE(channel).cdrom.capacity - lba); + } + if (transfer_length <= 0) { + atapi_cmd_nop(channel); + raise_interrupt(channel); + BX_INFO(("READ(%d) with transfer length <= 0, ok (%i)", atapi_command==0x28?10:12, transfer_length)); + break; + } + +/* Ben: I commented this out and added the three lines above. I am not sure this is the correct thing + to do, but it seems to work. + FIXME: I think that if the transfer_length is more than we can transfer, we should return + some sort of flag/error/bitrep stating so. I haven't read the atapi specs enough to know + what needs to be done though. + + if (lba + transfer_length > BX_SELECTED_DRIVE(channel).cdrom.capacity) { + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_LOGICAL_BLOCK_OOR, 1); + raise_interrupt(channel); + break; + } +*/ + BX_DEBUG(("cdrom: READ (%d) LBA=%d LEN=%d", atapi_command==0x28?10:12, lba, transfer_length)); + + // handle command + init_send_atapi_command(channel, atapi_command, transfer_length * 2048, + transfer_length * 2048, 1); + BX_SELECTED_DRIVE(channel).cdrom.remaining_blocks = transfer_length; + BX_SELECTED_DRIVE(channel).cdrom.next_lba = lba; + ready_to_send_atapi(channel); + } + break; + + case 0x2b: // seek + { + Bit32u lba = read_32bit(BX_SELECTED_CONTROLLER(channel).buffer + 2); + if (!BX_SELECTED_DRIVE(channel).cdrom.ready) { + atapi_cmd_error(channel, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT, 1); + raise_interrupt(channel); + break; + } + + if (lba > BX_SELECTED_DRIVE(channel).cdrom.capacity) { + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_LOGICAL_BLOCK_OOR, 1); + raise_interrupt(channel); + break; + } +#ifdef LOWLEVEL_CDROM + BX_SELECTED_DRIVE(channel).cdrom.cd->seek(lba); +#else + BX_PANIC(("Seek with no LOWLEVEL_CDROM")); +#endif + atapi_cmd_nop(channel); + raise_interrupt(channel); + } + break; + + case 0x1e: // prevent/allow medium removal + if (BX_SELECTED_DRIVE(channel).cdrom.ready) { + BX_SELECTED_DRIVE(channel).cdrom.locked = BX_SELECTED_CONTROLLER(channel).buffer[4] & 1; + atapi_cmd_nop(channel); + } else { + atapi_cmd_error(channel, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT, 1); + } + raise_interrupt(channel); + break; + + case 0x42: // read sub-channel + { + bx_bool msf = get_packet_field(channel,1, 1, 1); + bx_bool sub_q = get_packet_field(channel,2, 6, 1); + Bit8u data_format = get_packet_byte(channel,3); + Bit8u track_number = get_packet_byte(channel,6); + Bit16u alloc_length = get_packet_word(channel,7); + int ret_len = 4; // header size + UNUSED(msf); + UNUSED(track_number); + + if (!BX_SELECTED_DRIVE(channel).cdrom.ready) { + atapi_cmd_error(channel, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT, 1); + raise_interrupt(channel); + } else { + BX_SELECTED_CONTROLLER(channel).buffer[0] = 0; + BX_SELECTED_CONTROLLER(channel).buffer[1] = 0; // audio not supported + BX_SELECTED_CONTROLLER(channel).buffer[2] = 0; + BX_SELECTED_CONTROLLER(channel).buffer[3] = 0; + + if (sub_q) { // !sub_q == header only + if ((data_format == 2) || (data_format == 3)) { // UPC or ISRC + ret_len = 24; + BX_SELECTED_CONTROLLER(channel).buffer[4] = data_format; + if (data_format == 3) { + BX_SELECTED_CONTROLLER(channel).buffer[5] = 0x14; + BX_SELECTED_CONTROLLER(channel).buffer[6] = 1; + } + BX_SELECTED_CONTROLLER(channel).buffer[8] = 0; // no UPC, no ISRC + } else { + BX_ERROR(("Read sub-channel with SubQ not implemented (format=%d)", data_format)); + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, + ASC_INV_FIELD_IN_CMD_PACKET, 1); + raise_interrupt(channel); + break; + } + } + init_send_atapi_command(channel, atapi_command, ret_len, alloc_length); + ready_to_send_atapi(channel); + } + } + break; + + case 0x51: // read disc info + // no-op to keep the Linux CD-ROM driver happy + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET, 1); + raise_interrupt(channel); + break; + + case 0x55: // mode select + case 0xa6: // load/unload cd + case 0x4b: // pause/resume + case 0x45: // play audio + case 0x47: // play audio msf + case 0xbc: // play cd + case 0xb9: // read cd msf + case 0x44: // read header + case 0xba: // scan + case 0xbb: // set cd speed + case 0x4e: // stop play/scan + case 0x46: // get configuration + case 0x4a: // get event status notification + BX_DEBUG(("ATAPI command 0x%x not implemented yet", atapi_command)); + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_ILLEGAL_OPCODE, 0); + raise_interrupt(channel); + break; + + default: + BX_ERROR(("Unknown ATAPI command 0x%x (%d)", atapi_command, atapi_command)); + atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_ILLEGAL_OPCODE, 1); + raise_interrupt(channel); + break; + } + } + break; + + default: + BX_PANIC(("IO write(0x%04x): current command is %02xh", address, + (unsigned) BX_SELECTED_CONTROLLER(channel).current_command)); + } + break; + + case 0x01: // hard disk write precompensation 0x1f1 + WRITE_FEATURES(channel,value); + if (value == 0xff) + BX_DEBUG(("no precompensation {%s}", BX_SELECTED_TYPE_STRING(channel))); + else + BX_DEBUG(("precompensation value %02x {%s}", value, BX_SELECTED_TYPE_STRING(channel))); + break; + + case 0x02: // hard disk sector count 0x1f2 + WRITE_SECTOR_COUNT(channel,value); + BX_DEBUG(("sector count = %u {%s}", value, BX_SELECTED_TYPE_STRING(channel))); + break; + + case 0x03: // hard disk sector number 0x1f3 + WRITE_SECTOR_NUMBER(channel,value); + BX_DEBUG(("sector number = %u {%s}", value, BX_SELECTED_TYPE_STRING(channel))); + break; + + case 0x04: // hard disk cylinder low 0x1f4 + WRITE_CYLINDER_LOW(channel,value); + BX_DEBUG(("cylinder low = %02xh {%s}", value, BX_SELECTED_TYPE_STRING(channel))); + break; + + case 0x05: // hard disk cylinder high 0x1f5 + WRITE_CYLINDER_HIGH(channel,value); + BX_DEBUG(("cylinder high = %02xh {%s}", value, BX_SELECTED_TYPE_STRING(channel))); + break; + + case 0x06: // hard disk drive and head register 0x1f6 + // b7 Extended data field for ECC + // b6/b5: Used to be sector size. 00=256,01=512,10=1024,11=128 + // Since 512 was always used, bit 6 was taken to mean LBA mode: + // b6 1=LBA mode, 0=CHS mode + // b5 1 + // b4: DRV + // b3..0 HD3..HD0 + { + if ((value & 0xa0) != 0xa0) // 1x1xxxxx + BX_DEBUG(("IO write 0x%04x (%02x): not 1x1xxxxxb", address, (unsigned) value)); + Bit32u drvsel = BX_HD_THIS channels[channel].drive_select = (value >> 4) & 0x01; + WRITE_HEAD_NO(channel,value & 0xf); + if (BX_SELECTED_CONTROLLER(channel).lba_mode == 0 && ((value >> 6) & 1) == 1) + BX_DEBUG(("enabling LBA mode")); + WRITE_LBA_MODE(channel,(value >> 6) & 1); + if (!BX_SELECTED_IS_PRESENT(channel)) { + BX_DEBUG(("ata%d: device set to %d which does not exist", channel, drvsel)); + } + } + break; + + case 0x07: // hard disk command 0x1f7 + // (mch) Writes to the command register with drive_select != 0 + // are ignored if no secondary device is present + if ((BX_SLAVE_SELECTED(channel)) && (!BX_SLAVE_IS_PRESENT(channel))) + break; + // Writes to the command register clear the IRQ + DEV_pic_lower_irq(BX_HD_THIS channels[channel].irq); + + if (BX_SELECTED_CONTROLLER(channel).status.busy) { + BX_ERROR(("ata%d: command 0x%02x sent, controller BSY bit set", channel, value)); + break; + } + if ((value & 0xf0) == 0x10) + value = 0x10; + BX_SELECTED_CONTROLLER(channel).status.err = 0; + switch (value) { + + case 0x10: // CALIBRATE DRIVE + if (!BX_SELECTED_IS_HD(channel)) { + BX_INFO(("ata%d-%d: calibrate drive issued to non-disk", + channel, BX_SLAVE_SELECTED(channel))); + command_aborted(channel, value); + break; + } + + if (!BX_SELECTED_IS_PRESENT(channel)) { + BX_SELECTED_CONTROLLER(channel).error_register = 0x02; // Track 0 not found + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 0; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + BX_SELECTED_CONTROLLER(channel).status.err = 1; + raise_interrupt(channel); + BX_INFO(("calibrate drive: disk ata%d-%d not present", channel, BX_SLAVE_SELECTED(channel))); + break; + } + + /* move head to cylinder 0, issue IRQ */ + BX_SELECTED_CONTROLLER(channel).error_register = 0; + BX_SELECTED_CONTROLLER(channel).cylinder_no = 0; + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + raise_interrupt(channel); + break; + + case 0x24: // READ SECTORS EXT + case 0x29: // READ MULTIPLE EXT + lba48 = 1; + case 0x20: // READ SECTORS, with retries + case 0x21: // READ SECTORS, without retries + case 0xC4: // READ MULTIPLE SECTORS + /* update sector_no, always points to current sector + * after each sector is read to buffer, DRQ bit set and issue IRQ + * if interrupt handler transfers all data words into main memory, + * and more sectors to read, then set BSY bit again, clear DRQ and + * read next sector into buffer + * sector count of 0 means 256 sectors + */ + + if (!BX_SELECTED_IS_HD(channel)) { + BX_INFO(("ata%d-%d: read sectors issued to non-disk", + channel, BX_SLAVE_SELECTED(channel))); + command_aborted(channel, value); + break; + } + // Lose98 accesses 0/0/0 in CHS mode + if (!BX_SELECTED_CONTROLLER(channel).lba_mode && + !BX_SELECTED_CONTROLLER(channel).head_no && + !BX_SELECTED_CONTROLLER(channel).cylinder_no && + !BX_SELECTED_CONTROLLER(channel).sector_no) { + BX_INFO(("ata%d-%d: : read from 0/0/0, aborting command", + channel, BX_SLAVE_SELECTED(channel))); + command_aborted(channel, value); + break; + } + + lba48_transform(channel, lba48); + if ((value == 0xC4) || (value == 0x29)) { + if (BX_SELECTED_CONTROLLER(channel).multiple_sectors == 0) { + command_aborted(channel, value); + break; + } + if (BX_SELECTED_CONTROLLER(channel).num_sectors > BX_SELECTED_CONTROLLER(channel).multiple_sectors) { + BX_SELECTED_CONTROLLER(channel).buffer_size = BX_SELECTED_CONTROLLER(channel).multiple_sectors * 512; + } else { + BX_SELECTED_CONTROLLER(channel).buffer_size = BX_SELECTED_CONTROLLER(channel).num_sectors * 512; + } + } else { + BX_SELECTED_CONTROLLER(channel).buffer_size = 512; + } + BX_SELECTED_CONTROLLER(channel).current_command = value; + + if (ide_read_sector(channel, BX_SELECTED_CONTROLLER(channel).buffer, + BX_SELECTED_CONTROLLER(channel).buffer_size)) { + BX_SELECTED_CONTROLLER(channel).error_register = 0; + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + BX_SELECTED_CONTROLLER(channel).status.drq = 1; + BX_SELECTED_CONTROLLER(channel).status.corrected_data = 0; + BX_SELECTED_CONTROLLER(channel).buffer_index = 0; + raise_interrupt(channel); + } + break; + + case 0x34: // WRITE SECTORS EXT + case 0x39: // WRITE MULTIPLE EXT + lba48 = 1; + case 0x30: // WRITE SECTORS, with retries + case 0xC5: // WRITE MULTIPLE SECTORS + /* update sector_no, always points to current sector + * after each sector is read to buffer, DRQ bit set and issue IRQ + * if interrupt handler transfers all data words into main memory, + * and more sectors to read, then set BSY bit again, clear DRQ and + * read next sector into buffer + * sector count of 0 means 256 sectors + */ + + if (!BX_SELECTED_IS_HD(channel)) { + BX_INFO(("ata%d-%d: write sectors issued to non-disk", + channel, BX_SLAVE_SELECTED(channel))); + command_aborted(channel, value); + break; + } + lba48_transform(channel, lba48); + if ((value == 0xC5) || (value ==0x39)) { + if (BX_SELECTED_CONTROLLER(channel).multiple_sectors == 0) { + command_aborted(channel, value); + break; + } + if (BX_SELECTED_CONTROLLER(channel).num_sectors > BX_SELECTED_CONTROLLER(channel).multiple_sectors) { + BX_SELECTED_CONTROLLER(channel).buffer_size = BX_SELECTED_CONTROLLER(channel).multiple_sectors * 512; + } else { + BX_SELECTED_CONTROLLER(channel).buffer_size = BX_SELECTED_CONTROLLER(channel).num_sectors * 512; + } + } else { + BX_SELECTED_CONTROLLER(channel).buffer_size = 512; + } + BX_SELECTED_CONTROLLER(channel).current_command = value; + + // implicit seek done :^) + BX_SELECTED_CONTROLLER(channel).error_register = 0; + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + // BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + BX_SELECTED_CONTROLLER(channel).status.drq = 1; + BX_SELECTED_CONTROLLER(channel).buffer_index = 0; + break; + + case 0x90: // EXECUTE DEVICE DIAGNOSTIC + set_signature(channel, BX_SLAVE_SELECTED(channel)); + BX_SELECTED_CONTROLLER(channel).error_register = 0x01; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + raise_interrupt(channel); + break; + + case 0x91: // INITIALIZE DRIVE PARAMETERS + if (!BX_SELECTED_IS_HD(channel)) { + BX_INFO(("ata%d-%d: initialize drive parameters issued to non-disk", + channel, BX_SLAVE_SELECTED(channel))); + command_aborted(channel, value); + break; + } + // sets logical geometry of specified drive + BX_DEBUG(("ata%d-%d: init drive params: sec=%u, drive sel=%u, head=%u", + channel, BX_SLAVE_SELECTED(channel), + (unsigned) BX_SELECTED_CONTROLLER(channel).sector_count, + (unsigned) BX_HD_THIS channels[channel].drive_select, + (unsigned) BX_SELECTED_CONTROLLER(channel).head_no)); + if (!BX_SELECTED_IS_PRESENT(channel)) { + BX_PANIC(("init drive params: disk ata%d-%d not present", channel, BX_SLAVE_SELECTED(channel))); + //BX_SELECTED_CONTROLLER(channel).error_register = 0x12; + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + raise_interrupt(channel); + break; + } + if (BX_SELECTED_CONTROLLER(channel).sector_count != BX_SELECTED_DRIVE(channel).hdimage->sectors) { + BX_ERROR(("ata%d-%d: init drive params: logical sector count %d not supported", channel, BX_SLAVE_SELECTED(channel), + BX_SELECTED_CONTROLLER(channel).sector_count)); + command_aborted(channel, value); + break; + } + if (BX_SELECTED_CONTROLLER(channel).head_no == 0) { + // Linux 2.6.x kernels use this value and don't like aborting here + BX_ERROR(("ata%d-%d: init drive params: max. logical head number 0 not supported", channel, BX_SLAVE_SELECTED(channel))); + } else if (BX_SELECTED_CONTROLLER(channel).head_no != (BX_SELECTED_DRIVE(channel).hdimage->heads-1)) { + BX_ERROR(("ata%d-%d: init drive params: max. logical head number %d not supported", channel, BX_SLAVE_SELECTED(channel), + BX_SELECTED_CONTROLLER(channel).head_no)); + command_aborted(channel, value); + break; + } + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + raise_interrupt(channel); + break; + + case 0xec: // IDENTIFY DEVICE + { + Bit16u temp16; + + BX_DEBUG(("Drive ID Command issued : 0xec ")); + + if (!BX_SELECTED_IS_PRESENT(channel)) { + BX_INFO(("disk ata%d-%d not present, aborting",channel,BX_SLAVE_SELECTED(channel))); + command_aborted(channel, value); + break; + } + if (BX_SELECTED_IS_CD(channel)) { + set_signature(channel, BX_SLAVE_SELECTED(channel)); + command_aborted(channel, 0xec); + } else { + BX_SELECTED_CONTROLLER(channel).current_command = value; + BX_SELECTED_CONTROLLER(channel).error_register = 0; + + // See ATA/ATAPI-4, 8.12 + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.write_fault = 0; + BX_SELECTED_CONTROLLER(channel).status.drq = 1; + + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + BX_SELECTED_CONTROLLER(channel).status.corrected_data = 0; + + BX_SELECTED_CONTROLLER(channel).buffer_index = 0; + if (!BX_SELECTED_DRIVE(channel).identify_set) { + identify_drive(channel); + } + // now convert the id_drive array (native 256 word format) to + // the controller buffer (512 bytes) + for (i=0; i<=255; i++) { + temp16 = BX_SELECTED_DRIVE(channel).id_drive[i]; + BX_SELECTED_CONTROLLER(channel).buffer[i*2] = temp16 & 0x00ff; + BX_SELECTED_CONTROLLER(channel).buffer[i*2+1] = temp16 >> 8; + } + raise_interrupt(channel); + } + } + break; + + case 0xef: // SET FEATURES + switch(BX_SELECTED_CONTROLLER(channel).features) { + case 0x03: // Set Transfer Mode + { + Bit8u type = (BX_SELECTED_CONTROLLER(channel).sector_count >> 3); + Bit8u mode = BX_SELECTED_CONTROLLER(channel).sector_count & 0x07; + switch (type) { + case 0x00: // PIO default + case 0x01: // PIO mode + BX_INFO(("ata%d-%d: set transfer mode to PIO", channel, + BX_SLAVE_SELECTED(channel))); + BX_SELECTED_CONTROLLER(channel).mdma_mode = 0x00; + BX_SELECTED_CONTROLLER(channel).udma_mode = 0x00; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + raise_interrupt(channel); + break; + case 0x04: // MDMA mode + BX_INFO(("ata%d-%d: set transfer mode to MDMA%d", channel, + BX_SLAVE_SELECTED(channel), mode)); + BX_SELECTED_CONTROLLER(channel).mdma_mode = (1 << mode); + BX_SELECTED_CONTROLLER(channel).udma_mode = 0x00; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + raise_interrupt(channel); + break; + case 0x08: // UDMA mode + BX_SELECTED_CONTROLLER(channel).mdma_mode = 0x00; + BX_SELECTED_CONTROLLER(channel).udma_mode = (1 << mode); + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + raise_interrupt(channel); + break; + default: + BX_ERROR(("ata%d-%d: unknown transfer mode type 0x%02x", channel, + BX_SLAVE_SELECTED(channel), type)); + command_aborted(channel, value); + } + BX_SELECTED_DRIVE(channel).identify_set = 0; + } + break; + + case 0x02: // Enable and + case 0x82: // Disable write cache. + case 0xAA: // Enable and + case 0x55: // Disable look-ahead cache. + case 0xCC: // Enable and + case 0x66: // Disable reverting to power-on default + BX_INFO(("ata%d-%d: SET FEATURES subcommand 0x%02x not supported, but returning success", + channel,BX_SLAVE_SELECTED(channel),(unsigned) BX_SELECTED_CONTROLLER(channel).features)); + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + raise_interrupt(channel); + break; + + default: + BX_ERROR(("ata%d-%d: SET FEATURES with unknown subcommand: 0x%02x", + channel,BX_SLAVE_SELECTED(channel),(unsigned) BX_SELECTED_CONTROLLER(channel).features)); + command_aborted(channel, value); + } + break; + + case 0x42: // READ VERIFY SECTORS EXT + lba48 = 1; + case 0x40: // READ VERIFY SECTORS + case 0x41: // READ VERIFY SECTORS NO RETRY + if (!BX_SELECTED_IS_HD(channel)) { + BX_INFO(("ata%d-%d: read verify issued to non-disk", + channel,BX_SLAVE_SELECTED(channel))); + command_aborted(channel, value); + break; + } + lba48_transform(channel, lba48); + BX_INFO(("ata%d-%d: verify command : 0x%02x !", channel,BX_SLAVE_SELECTED(channel), value)); + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + raise_interrupt(channel); + break; + + case 0xc6: // SET MULTIPLE MODE + if (!BX_SELECTED_IS_HD(channel)) { + BX_INFO(("set multiple mode issued to non-disk")); + command_aborted(channel, value); + } else if ((BX_SELECTED_CONTROLLER(channel).sector_count > MAX_MULTIPLE_SECTORS) || + ((BX_SELECTED_CONTROLLER(channel).sector_count & (BX_SELECTED_CONTROLLER(channel).sector_count - 1)) != 0) || + (BX_SELECTED_CONTROLLER(channel).sector_count == 0)) { + command_aborted(channel, value); + } else { + BX_DEBUG(("set multiple mode: sectors=%d", BX_SELECTED_CONTROLLER(channel).sector_count)); + BX_SELECTED_CONTROLLER(channel).multiple_sectors = BX_SELECTED_CONTROLLER(channel).sector_count; + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.write_fault = 0; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + raise_interrupt(channel); + } + break; + + // ATAPI commands + case 0xa1: // IDENTIFY PACKET DEVICE + { + Bit16u temp16; + + if (BX_SELECTED_IS_CD(channel)) { + BX_SELECTED_CONTROLLER(channel).current_command = value; + BX_SELECTED_CONTROLLER(channel).error_register = 0; + + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.write_fault = 0; + BX_SELECTED_CONTROLLER(channel).status.drq = 1; + + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + BX_SELECTED_CONTROLLER(channel).status.corrected_data = 0; + + BX_SELECTED_CONTROLLER(channel).buffer_index = 0; + if (!BX_SELECTED_DRIVE(channel).identify_set) { + identify_ATAPI_drive(channel); + } + // now convert the id_drive array (native 256 word format) to + // the controller buffer (512 bytes) + for (i = 0; i <= 255; i++) { + temp16 = BX_SELECTED_DRIVE(channel).id_drive[i]; + BX_SELECTED_CONTROLLER(channel).buffer[i*2] = temp16 & 0x00ff; + BX_SELECTED_CONTROLLER(channel).buffer[i*2+1] = temp16 >> 8; + } + raise_interrupt(channel); + } else { + command_aborted(channel, 0xa1); + } + } + break; + + case 0x08: // DEVICE RESET (atapi) + if (BX_SELECTED_IS_CD(channel)) { + set_signature(channel, BX_SLAVE_SELECTED(channel)); + + BX_SELECTED_CONTROLLER(channel).status.busy = 1; + BX_SELECTED_CONTROLLER(channel).error_register &= ~(1 << 7); + + BX_SELECTED_CONTROLLER(channel).status.write_fault = 0; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + BX_SELECTED_CONTROLLER(channel).status.corrected_data = 0; + + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + } else { + BX_DEBUG(("ATAPI Device Reset on non-cd device")); + command_aborted(channel, 0x08); + } + break; + + case 0xa0: // SEND PACKET (atapi) + if (BX_SELECTED_IS_CD(channel)) { + // PACKET + BX_SELECTED_CONTROLLER(channel).packet_dma = (BX_SELECTED_CONTROLLER(channel).features & 1); + if (BX_SELECTED_CONTROLLER(channel).features & (1 << 1)) { + BX_ERROR(("PACKET-overlapped not supported")); + command_aborted (channel, 0xa0); + } else { + // We're already ready! + BX_SELECTED_CONTROLLER(channel).sector_count = 1; + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.write_fault = 0; + // serv bit?? + BX_SELECTED_CONTROLLER(channel).status.drq = 1; + + // NOTE: no interrupt here + BX_SELECTED_CONTROLLER(channel).current_command = value; + BX_SELECTED_CONTROLLER(channel).buffer_index = 0; + } + } else { + command_aborted (channel, 0xa0); + } + break; + + case 0xa2: // SERVICE (atapi), optional + if (BX_SELECTED_IS_CD(channel)) { + BX_PANIC(("ATAPI SERVICE not implemented")); + command_aborted(channel, 0xa2); + } else { + command_aborted(channel, 0xa2); + } + break; + + // power management & flush cache stubs + case 0xE0: // STANDBY NOW + case 0xE1: // IDLE IMMEDIATE + case 0xE7: // FLUSH CACHE + case 0xEA: // FLUSH CACHE EXT + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.write_fault = 0; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + raise_interrupt(channel); + break; + + case 0xe5: // CHECK POWER MODE + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.write_fault = 0; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + BX_SELECTED_CONTROLLER(channel).sector_count = 0xff; // Active or Idle mode + raise_interrupt(channel); + break; + + case 0x70: // SEEK (cgs) + if (BX_SELECTED_IS_HD(channel)) { + BX_DEBUG(("write cmd 0x70 (SEEK) executing")); + if (!calculate_logical_address(channel, &logical_sector)) { + BX_ERROR(("initial seek to sector %lu out of bounds, aborting", (unsigned long)logical_sector)); + command_aborted(channel, value); + break; + } + BX_SELECTED_CONTROLLER(channel).error_register = 0; + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + BX_SELECTED_CONTROLLER(channel).status.corrected_data = 0; + BX_SELECTED_CONTROLLER(channel).buffer_index = 0; + BX_DEBUG(("ata%d-%d: SEEK completed (IRQ %sabled)", channel, + BX_SLAVE_SELECTED(channel), BX_SELECTED_CONTROLLER(channel).control.disable_irq?"dis":"en")); + raise_interrupt(channel); + } else { + BX_INFO(("write cmd 0x70 (SEEK) not supported for non-disk")); + command_aborted(channel, 0x70); + } + break; + + case 0x25: // READ DMA EXT + lba48 = 1; + case 0xC8: // READ DMA + if (BX_SELECTED_IS_HD(channel) && BX_HD_THIS bmdma_present()) { + lba48_transform(channel, lba48); + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + BX_SELECTED_CONTROLLER(channel).status.drq = 1; + BX_SELECTED_CONTROLLER(channel).current_command = value; + } else { + BX_ERROR(("write cmd 0x%02x (READ DMA) not supported", value)); + command_aborted(channel, value); + } + break; + + case 0x35: // WRITE DMA EXT + lba48 = 1; + case 0xCA: // WRITE DMA + if (BX_SELECTED_IS_HD(channel) && BX_HD_THIS bmdma_present()) { + lba48_transform(channel, lba48); + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + BX_SELECTED_CONTROLLER(channel).status.drq = 1; + BX_SELECTED_CONTROLLER(channel).current_command = value; + } else { + BX_ERROR(("write cmd 0x%02x (WRITE DMA) not supported", value)); + command_aborted(channel, value); + } + break; + + // List all the write operations that are defined in the ATA/ATAPI spec + // that we don't support. Commands that are listed here will cause a + // BX_ERROR, which is non-fatal, and the command will be aborted. + case 0x22: BX_ERROR(("write cmd 0x22 (READ LONG) not supported")); command_aborted(channel, 0x22); break; + case 0x23: BX_ERROR(("write cmd 0x23 (READ LONG NO RETRY) not supported")); command_aborted(channel, 0x23); break; + case 0x26: BX_ERROR(("write cmd 0x26 (READ DMA QUEUED EXT) not supported"));command_aborted(channel, 0x26); break; + case 0x27: BX_ERROR(("write cmd 0x27 (READ NATIVE MAX ADDRESS EXT) not supported"));command_aborted(channel, 0x27); break; + case 0x2A: BX_ERROR(("write cmd 0x2A (READ STREAM DMA) not supported"));command_aborted(channel, 0x2A); break; + case 0x2B: BX_ERROR(("write cmd 0x2B (READ STREAM PIO) not supported"));command_aborted(channel, 0x2B); break; + case 0x2F: BX_ERROR(("write cmd 0x2F (READ LOG EXT) not supported"));command_aborted(channel, 0x2F); break; + case 0x31: BX_ERROR(("write cmd 0x31 (WRITE SECTORS NO RETRY) not supported")); command_aborted(channel, 0x31); break; + case 0x32: BX_ERROR(("write cmd 0x32 (WRITE LONG) not supported")); command_aborted(channel, 0x32); break; + case 0x33: BX_ERROR(("write cmd 0x33 (WRITE LONG NO RETRY) not supported")); command_aborted(channel, 0x33); break; + case 0x36: BX_ERROR(("write cmd 0x36 (WRITE DMA QUEUED EXT) not supported"));command_aborted(channel, 0x36); break; + case 0x37: BX_ERROR(("write cmd 0x37 (SET MAX ADDRESS EXT) not supported"));command_aborted(channel, 0x37); break; + case 0x38: BX_ERROR(("write cmd 0x38 (CFA WRITE SECTORS W/OUT ERASE) not supported"));command_aborted(channel, 0x38); break; + case 0x3A: BX_ERROR(("write cmd 0x3A (WRITE STREAM DMA) not supported"));command_aborted(channel, 0x3A); break; + case 0x3B: BX_ERROR(("write cmd 0x3B (WRITE STREAM PIO) not supported"));command_aborted(channel, 0x3B); break; + case 0x3F: BX_ERROR(("write cmd 0x3F (WRITE LOG EXT) not supported"));command_aborted(channel, 0x3F); break; + case 0x50: BX_ERROR(("write cmd 0x50 (FORMAT TRACK) not supported")); command_aborted(channel, 0x50); break; + case 0x51: BX_ERROR(("write cmd 0x51 (CONFIGURE STREAM) not supported"));command_aborted(channel, 0x51); break; + case 0x87: BX_ERROR(("write cmd 0x87 (CFA TRANSLATE SECTOR) not supported"));command_aborted(channel, 0x87); break; + case 0x92: BX_ERROR(("write cmd 0x92 (DOWNLOAD MICROCODE) not supported"));command_aborted(channel, 0x92); break; + case 0x94: BX_ERROR(("write cmd 0x94 (STANDBY IMMEDIATE) not supported")); command_aborted(channel, 0x94); break; + case 0x95: BX_ERROR(("write cmd 0x95 (IDLE IMMEDIATE) not supported")); command_aborted(channel, 0x95); break; + case 0x96: BX_ERROR(("write cmd 0x96 (STANDBY) not supported")); command_aborted(channel, 0x96); break; + case 0x97: BX_ERROR(("write cmd 0x97 (IDLE) not supported")); command_aborted(channel, 0x97); break; + case 0x98: BX_ERROR(("write cmd 0x98 (CHECK POWER MODE) not supported")); command_aborted(channel, 0x98); break; + case 0x99: BX_ERROR(("write cmd 0x99 (SLEEP) not supported")); command_aborted(channel, 0x99); break; + case 0xB0: BX_ERROR(("write cmd 0xB0 (SMART commands) not supported"));command_aborted(channel, 0xB0); break; + case 0xB1: BX_ERROR(("write cmd 0xB1 (DEVICE CONFIGURATION commands) not supported"));command_aborted(channel, 0xB1); break; + case 0xC0: BX_ERROR(("write cmd 0xC0 (CFA ERASE SECTORS) not supported"));command_aborted(channel, 0xC0); break; + case 0xC7: BX_ERROR(("write cmd 0xC7 (READ DMA QUEUED) not supported"));command_aborted(channel, 0xC7); break; + case 0xC9: BX_ERROR(("write cmd 0xC9 (READ DMA NO RETRY) not supported")); command_aborted(channel, 0xC9); break; + case 0xCC: BX_ERROR(("write cmd 0xCC (WRITE DMA QUEUED) not supported"));command_aborted(channel, 0xCC); break; + case 0xCD: BX_ERROR(("write cmd 0xCD (CFA WRITE MULTIPLE W/OUT ERASE) not supported"));command_aborted(channel, 0xCD); break; + case 0xD1: BX_ERROR(("write cmd 0xD1 (CHECK MEDIA CARD TYPE) not supported"));command_aborted(channel, 0xD1); break; + case 0xDA: BX_ERROR(("write cmd 0xDA (GET MEDIA STATUS) not supported"));command_aborted(channel, 0xDA); break; + case 0xDE: BX_ERROR(("write cmd 0xDE (MEDIA LOCK) not supported"));command_aborted(channel, 0xDE); break; + case 0xDF: BX_ERROR(("write cmd 0xDF (MEDIA UNLOCK) not supported"));command_aborted(channel, 0xDF); break; + case 0xE2: BX_ERROR(("write cmd 0xE2 (STANDBY) not supported"));command_aborted(channel, 0xE2); break; + case 0xE3: BX_ERROR(("write cmd 0xE3 (IDLE) not supported"));command_aborted(channel, 0xE3); break; + case 0xE4: BX_ERROR(("write cmd 0xE4 (READ BUFFER) not supported"));command_aborted(channel, 0xE4); break; + case 0xE6: BX_ERROR(("write cmd 0xE6 (SLEEP) not supported"));command_aborted(channel, 0xE6); break; + case 0xE8: BX_ERROR(("write cmd 0xE8 (WRITE BUFFER) not supported"));command_aborted(channel, 0xE8); break; + case 0xED: BX_ERROR(("write cmd 0xED (MEDIA EJECT) not supported"));command_aborted(channel, 0xED); break; + case 0xF1: BX_ERROR(("write cmd 0xF1 (SECURITY SET PASSWORD) not supported"));command_aborted(channel, 0xF1); break; + case 0xF2: BX_ERROR(("write cmd 0xF2 (SECURITY UNLOCK) not supported"));command_aborted(channel, 0xF2); break; + case 0xF3: BX_ERROR(("write cmd 0xF3 (SECURITY ERASE PREPARE) not supported"));command_aborted(channel, 0xF3); break; + case 0xF4: BX_ERROR(("write cmd 0xF4 (SECURITY ERASE UNIT) not supported"));command_aborted(channel, 0xF4); break; + case 0xF5: BX_ERROR(("write cmd 0xF5 (SECURITY FREEZE LOCK) not supported"));command_aborted(channel, 0xF5); break; + case 0xF6: BX_ERROR(("write cmd 0xF6 (SECURITY DISABLE PASSWORD) not supported"));command_aborted(channel, 0xF6); break; + case 0xF8: BX_ERROR(("write cmd 0xF8 (READ NATIVE MAX ADDRESS) not supported"));command_aborted(channel, 0xF8); break; + case 0xF9: BX_ERROR(("write cmd 0xF9 (SET MAX ADDRESS) not supported"));command_aborted(channel, 0xF9); break; + + default: + BX_ERROR(("IO write to 0x%04x: unknown command 0x%02x", address, value)); + command_aborted(channel, value); + } + break; + + case 0x16: // hard disk adapter control 0x3f6 + // (mch) Even if device 1 was selected, a write to this register + // goes to device 0 (if device 1 is absent) + + prev_control_reset = BX_SELECTED_CONTROLLER(channel).control.reset; + BX_HD_THIS channels[channel].drives[0].controller.control.reset = value & 0x04; + BX_HD_THIS channels[channel].drives[1].controller.control.reset = value & 0x04; + BX_HD_THIS channels[channel].drives[0].controller.control.disable_irq = value & 0x02; + BX_HD_THIS channels[channel].drives[1].controller.control.disable_irq = value & 0x02; + + BX_DEBUG(("ata%d: adapter control reg: reset controller = %d", channel, + (unsigned) (BX_SELECTED_CONTROLLER(channel).control.reset) ? 1 : 0)); + BX_DEBUG(("ata%d: adapter control reg: disable irq = %d", channel, + (unsigned) (BX_SELECTED_CONTROLLER(channel).control.disable_irq) ? 1 : 0)); + + if (!prev_control_reset && BX_SELECTED_CONTROLLER(channel).control.reset) { + // transition from 0 to 1 causes all drives to reset + BX_DEBUG(("Enter RESET mode")); + + // (mch) Set BSY, drive not ready + for (int id = 0; id < 2; id++) { + BX_CONTROLLER(channel,id).status.busy = 1; + BX_CONTROLLER(channel,id).status.drive_ready = 0; + BX_CONTROLLER(channel,id).reset_in_progress = 1; + + BX_CONTROLLER(channel,id).status.write_fault = 0; + BX_CONTROLLER(channel,id).status.seek_complete = 1; + BX_CONTROLLER(channel,id).status.drq = 0; + BX_CONTROLLER(channel,id).status.corrected_data = 0; + BX_CONTROLLER(channel,id).status.err = 0; + + BX_CONTROLLER(channel,id).error_register = 0x01; // diagnostic code: no error + + BX_CONTROLLER(channel,id).current_command = 0x00; + BX_CONTROLLER(channel,id).buffer_index = 0; + + BX_CONTROLLER(channel,id).multiple_sectors = 0; + BX_CONTROLLER(channel,id).lba_mode = 0; + + BX_CONTROLLER(channel,id).control.disable_irq = 0; + DEV_pic_lower_irq(BX_HD_THIS channels[channel].irq); + } + } else if (BX_SELECTED_CONTROLLER(channel).reset_in_progress && + !BX_SELECTED_CONTROLLER(channel).control.reset) { + // Clear BSY and DRDY + BX_DEBUG(("Reset complete {%s}", BX_SELECTED_TYPE_STRING(channel))); + for (int id = 0; id < 2; id++) { + BX_CONTROLLER(channel,id).status.busy = 0; + BX_CONTROLLER(channel,id).status.drive_ready = 1; + BX_CONTROLLER(channel,id).reset_in_progress = 0; + + set_signature(channel, id); + } + } + BX_DEBUG(("ata%d: adapter control reg: disable irq = %d", channel, + (unsigned) (BX_SELECTED_CONTROLLER(channel).control.disable_irq) ? 1 : 0)); + break; + + default: + BX_PANIC(("hard drive: io write to address %x = %02x", + (unsigned) address, (unsigned) value)); + } +} + + bx_bool BX_CPP_AttrRegparmN(2) +bx_hard_drive_c::calculate_logical_address(Bit8u channel, Bit64s *sector) +{ + Bit64s logical_sector; + + if (BX_SELECTED_CONTROLLER(channel).lba_mode) { + if (!BX_SELECTED_CONTROLLER(channel).lba48) { + logical_sector = ((Bit32u)BX_SELECTED_CONTROLLER(channel).head_no) << 24 | + ((Bit32u)BX_SELECTED_CONTROLLER(channel).cylinder_no) << 8 | + (Bit32u)BX_SELECTED_CONTROLLER(channel).sector_no; + } else { + logical_sector = ((Bit64u)BX_SELECTED_CONTROLLER(channel).hob.hcyl) << 40 | + ((Bit64u)BX_SELECTED_CONTROLLER(channel).hob.lcyl) << 32 | + ((Bit64u)BX_SELECTED_CONTROLLER(channel).hob.sector) << 24 | + ((Bit64u)BX_SELECTED_CONTROLLER(channel).cylinder_no) << 8 | + (Bit64u)BX_SELECTED_CONTROLLER(channel).sector_no; + } + } else { + logical_sector = ((Bit32u)BX_SELECTED_CONTROLLER(channel).cylinder_no * BX_SELECTED_DRIVE(channel).hdimage->heads * + BX_SELECTED_DRIVE(channel).hdimage->sectors) + + (Bit32u)(BX_SELECTED_CONTROLLER(channel).head_no * BX_SELECTED_DRIVE(channel).hdimage->sectors) + + (BX_SELECTED_CONTROLLER(channel).sector_no - 1); + } + Bit32u sector_count= + (Bit32u)BX_SELECTED_DRIVE(channel).hdimage->cylinders * + (Bit32u)BX_SELECTED_DRIVE(channel).hdimage->heads * + (Bit32u)BX_SELECTED_DRIVE(channel).hdimage->sectors; + + if (logical_sector >= sector_count) { + BX_ERROR (("calc_log_addr: out of bounds (%d/%d)", (Bit32u)logical_sector, sector_count)); + return 0; + } + *sector = logical_sector; + return 1; +} + + void BX_CPP_AttrRegparmN(1) +bx_hard_drive_c::increment_address(Bit8u channel) +{ + BX_SELECTED_CONTROLLER(channel).sector_count--; + BX_SELECTED_CONTROLLER(channel).num_sectors--; + + if (BX_SELECTED_CONTROLLER(channel).lba_mode) { + Bit64s current_address = 0; + calculate_logical_address(channel, ¤t_address); + current_address++; + if (!BX_SELECTED_CONTROLLER(channel).lba48) { + BX_SELECTED_CONTROLLER(channel).head_no = (Bit8u)((current_address >> 24) & 0xf); + BX_SELECTED_CONTROLLER(channel).cylinder_no = (Bit16u)((current_address >> 8) & 0xffff); + BX_SELECTED_CONTROLLER(channel).sector_no = (Bit8u)((current_address) & 0xff); + } else { + BX_SELECTED_CONTROLLER(channel).hob.hcyl = (Bit8u)((current_address >> 40) & 0xff); + BX_SELECTED_CONTROLLER(channel).hob.lcyl = (Bit8u)((current_address >> 32) & 0xff); + BX_SELECTED_CONTROLLER(channel).hob.sector = (Bit8u)((current_address >> 24) & 0xff); + BX_SELECTED_CONTROLLER(channel).cylinder_no = (Bit16u)((current_address >> 8) & 0xffff); + BX_SELECTED_CONTROLLER(channel).sector_no = (Bit8u)((current_address) & 0xff); + } + } else { + BX_SELECTED_CONTROLLER(channel).sector_no++; + if (BX_SELECTED_CONTROLLER(channel).sector_no > BX_SELECTED_DRIVE(channel).hdimage->sectors) { + BX_SELECTED_CONTROLLER(channel).sector_no = 1; + BX_SELECTED_CONTROLLER(channel).head_no++; + if (BX_SELECTED_CONTROLLER(channel).head_no >= BX_SELECTED_DRIVE(channel).hdimage->heads) { + BX_SELECTED_CONTROLLER(channel).head_no = 0; + BX_SELECTED_CONTROLLER(channel).cylinder_no++; + if (BX_SELECTED_CONTROLLER(channel).cylinder_no >= BX_SELECTED_DRIVE(channel).hdimage->cylinders) + BX_SELECTED_CONTROLLER(channel).cylinder_no = BX_SELECTED_DRIVE(channel).hdimage->cylinders - 1; + } + } + } +} + +void bx_hard_drive_c::identify_ATAPI_drive(Bit8u channel) +{ + unsigned i; + char serial_number[21]; + + memset(&BX_SELECTED_DRIVE(channel).id_drive, 0, 512); + + BX_SELECTED_DRIVE(channel).id_drive[0] = (2 << 14) | (5 << 8) | (1 << 7) | (2 << 5) | (0 << 0); // Removable CDROM, 50us response, 12 byte packets + + for (i = 1; i <= 9; i++) + BX_SELECTED_DRIVE(channel).id_drive[i] = 0; + + strcpy(serial_number, "BXCD00000 "); + serial_number[8] = BX_SELECTED_DRIVE(channel).device_num; + for (i = 0; i < 10; i++) { + BX_SELECTED_DRIVE(channel).id_drive[10+i] = (serial_number[i*2] << 8) | + serial_number[i*2 + 1]; + } + + for (i = 20; i <= 22; i++) + BX_SELECTED_DRIVE(channel).id_drive[i] = 0; + + const char* firmware = "ALPHA1 "; + for (i = 0; i < strlen(firmware)/2; i++) { + BX_SELECTED_DRIVE(channel).id_drive[23+i] = (firmware[i*2] << 8) | + firmware[i*2 + 1]; + } + BX_ASSERT((23+i) == 27); + + for (i = 0; i < strlen((char *) BX_SELECTED_MODEL(channel))/2; i++) { + BX_SELECTED_DRIVE(channel).id_drive[27+i] = (BX_SELECTED_MODEL(channel)[i*2] << 8) | + BX_SELECTED_MODEL(channel)[i*2 + 1]; + } + BX_ASSERT((27+i) == 47); + + BX_SELECTED_DRIVE(channel).id_drive[47] = 0; + BX_SELECTED_DRIVE(channel).id_drive[48] = 1; // 32 bits access + + if (BX_HD_THIS bmdma_present()) { + BX_SELECTED_DRIVE(channel).id_drive[49] = (1<<9) | (1<<8); // LBA and DMA + } else { + BX_SELECTED_DRIVE(channel).id_drive[49] = (1<<9); // LBA only supported + } + + BX_SELECTED_DRIVE(channel).id_drive[50] = 0; + BX_SELECTED_DRIVE(channel).id_drive[51] = 0; + BX_SELECTED_DRIVE(channel).id_drive[52] = 0; + + BX_SELECTED_DRIVE(channel).id_drive[53] = 3; // words 64-70, 54-58 valid + + for (i = 54; i <= 62; i++) + BX_SELECTED_DRIVE(channel).id_drive[i] = 0; + + // copied from CFA540A + BX_SELECTED_DRIVE(channel).id_drive[63] = 0x0103; // variable (DMA stuff) + BX_SELECTED_DRIVE(channel).id_drive[64] = 0x0001; // PIO + BX_SELECTED_DRIVE(channel).id_drive[65] = 0x00b4; + BX_SELECTED_DRIVE(channel).id_drive[66] = 0x00b4; + BX_SELECTED_DRIVE(channel).id_drive[67] = 0x012c; + BX_SELECTED_DRIVE(channel).id_drive[68] = 0x00b4; + + BX_SELECTED_DRIVE(channel).id_drive[69] = 0; + BX_SELECTED_DRIVE(channel).id_drive[70] = 0; + BX_SELECTED_DRIVE(channel).id_drive[71] = 30; // faked + BX_SELECTED_DRIVE(channel).id_drive[72] = 30; // faked + BX_SELECTED_DRIVE(channel).id_drive[73] = 0; + BX_SELECTED_DRIVE(channel).id_drive[74] = 0; + + BX_SELECTED_DRIVE(channel).id_drive[75] = 0; + + for (i = 76; i <= 79; i++) + BX_SELECTED_DRIVE(channel).id_drive[i] = 0; + + BX_SELECTED_DRIVE(channel).id_drive[80] = 0x1e; // supports up to ATA/ATAPI-4 + BX_SELECTED_DRIVE(channel).id_drive[81] = 0; + BX_SELECTED_DRIVE(channel).id_drive[82] = 0; + BX_SELECTED_DRIVE(channel).id_drive[83] = 0; + BX_SELECTED_DRIVE(channel).id_drive[84] = 0; + BX_SELECTED_DRIVE(channel).id_drive[85] = 0; + BX_SELECTED_DRIVE(channel).id_drive[86] = 0; + BX_SELECTED_DRIVE(channel).id_drive[87] = 0; + BX_SELECTED_DRIVE(channel).id_drive[88] = 0; + + BX_SELECTED_DRIVE(channel).identify_set = 1; +} + +void bx_hard_drive_c::identify_drive(Bit8u channel) +{ + unsigned i; + char serial_number[21]; + Bit32u temp32; + Bit64u num_sects; + + memset(&BX_SELECTED_DRIVE(channel).id_drive, 0, 512); + + // Identify Drive command return values definition + // + // This code is rehashed from some that was donated. + // I'm using ANSI X3.221-1994, AT Attachment Interface for Disk Drives + // and X3T10 2008D Working Draft for ATA-3 + + + // Word 0: general config bit-significant info + // Note: bits 1-5 and 8-14 are now "Vendor specific (obsolete)" + // bit 15: 0=ATA device + // 1=ATAPI device + // bit 14: 1=format speed tolerance gap required + // bit 13: 1=track offset option available + // bit 12: 1=data strobe offset option available + // bit 11: 1=rotational speed tolerance is > 0,5% (typo?) + // bit 10: 1=disk transfer rate > 10Mbs + // bit 9: 1=disk transfer rate > 5Mbs but <= 10Mbs + // bit 8: 1=disk transfer rate <= 5Mbs + // bit 7: 1=removable cartridge drive + // bit 6: 1=fixed drive + // bit 5: 1=spindle motor control option implemented + // bit 4: 1=head switch time > 15 usec + // bit 3: 1=not MFM encoded + // bit 2: 1=soft sectored + // bit 1: 1=hard sectored + // bit 0: 0=reserved + BX_SELECTED_DRIVE(channel).id_drive[0] = 0x0040; + + // Word 1: number of user-addressable cylinders in + // default translation mode. If the value in words 60-61 + // exceed 16,515,072, this word shall contain 16,383. + if (BX_SELECTED_DRIVE(channel).hdimage->cylinders > 16383) { + BX_SELECTED_DRIVE(channel).id_drive[1] = 16383; + } else { + BX_SELECTED_DRIVE(channel).id_drive[1] = BX_SELECTED_DRIVE(channel).hdimage->cylinders; + } + + // Word 2: reserved + + // Word 3: number of user-addressable heads in default + // translation mode + BX_SELECTED_DRIVE(channel).id_drive[3] = BX_SELECTED_DRIVE(channel).hdimage->heads; + + // Word 4: # unformatted bytes per translated track in default xlate mode + // Word 5: # unformatted bytes per sector in default xlated mode + // Word 6: # user-addressable sectors per track in default xlate mode + // Note: words 4,5 are now "Vendor specific (obsolete)" + BX_SELECTED_DRIVE(channel).id_drive[4] = (512 * BX_SELECTED_DRIVE(channel).hdimage->sectors); + BX_SELECTED_DRIVE(channel).id_drive[5] = 512; + BX_SELECTED_DRIVE(channel).id_drive[6] = BX_SELECTED_DRIVE(channel).hdimage->sectors; + + // Word 7-9: Vendor specific + + // Word 10-19: Serial number (20 ASCII characters, 0000h=not specified) + // This field is right justified and padded with spaces (20h). + strcpy(serial_number, "BXHD00000 "); + serial_number[7] = channel + 49; + serial_number[8] = BX_HD_THIS channels[channel].drive_select + 49; + for (i = 0; i < 10; i++) { + BX_SELECTED_DRIVE(channel).id_drive[10+i] = (serial_number[i*2] << 8) | + serial_number[i*2 + 1]; + } + + // Word 20: buffer type + // 0000h = not specified + // 0001h = single ported single sector buffer which is + // not capable of simulataneous data xfers to/from + // the host and the disk. + // 0002h = dual ported multi-sector buffer capable of + // simulatenous data xfers to/from the host and disk. + // 0003h = dual ported mutli-sector buffer capable of + // simulatenous data xfers with a read caching + // capability. + // 0004h-ffffh = reserved + BX_SELECTED_DRIVE(channel).id_drive[20] = 3; + + // Word 21: buffer size in 512 byte increments, 0000h = not specified + BX_SELECTED_DRIVE(channel).id_drive[21] = 512; // 512 Sectors = 256kB cache + + // Word 22: # of ECC bytes available on read/write long cmds + // 0000h = not specified + BX_SELECTED_DRIVE(channel).id_drive[22] = 4; + + // Word 23..26: Firmware revision (8 ascii chars, 0000h=not specified) + // This field is left justified and padded with spaces (20h) + for (i=23; i<=26; i++) + BX_SELECTED_DRIVE(channel).id_drive[i] = 0; + + // Word 27..46: Model number (40 ascii chars, 0000h=not specified) + // This field is left justified and padded with spaces (20h) + for (i=0; i<20; i++) { + BX_SELECTED_DRIVE(channel).id_drive[27+i] = (BX_SELECTED_MODEL(channel)[i*2] << 8) | + BX_SELECTED_MODEL(channel)[i*2 + 1]; + } + + // Word 47: 15-8 Vendor unique + // 7-0 00h= read/write multiple commands not implemented + // xxh= maximum # of sectors that can be transferred + // per interrupt on read and write multiple commands + BX_SELECTED_DRIVE(channel).id_drive[47] = MAX_MULTIPLE_SECTORS; + + // Word 48: 0000h = cannot perform dword IO + // 0001h = can perform dword IO + BX_SELECTED_DRIVE(channel).id_drive[48] = 1; + + // Word 49: Capabilities + // 15-10: 0 = reserved + // 9: 1 = LBA supported + // 8: 1 = DMA supported + // 7-0: Vendor unique + if (BX_HD_THIS bmdma_present()) { + BX_SELECTED_DRIVE(channel).id_drive[49] = (1<<9) | (1<<8); + } else { + BX_SELECTED_DRIVE(channel).id_drive[49] = 1<<9; + } + + // Word 50: Reserved + + // Word 51: 15-8 PIO data transfer cycle timing mode + // 7-0 Vendor unique + BX_SELECTED_DRIVE(channel).id_drive[51] = 0x200; + + // Word 52: 15-8 DMA data transfer cycle timing mode + // 7-0 Vendor unique + BX_SELECTED_DRIVE(channel).id_drive[52] = 0x200; + + // Word 53: 15-1 Reserved + // 2 1=the fields reported in word 88 are valid + // 1 1=the fields reported in words 64-70 are valid + // 0 1=the fields reported in words 54-58 are valid + BX_SELECTED_DRIVE(channel).id_drive[53] = 0x07; + + // Word 54: # of user-addressable cylinders in curr xlate mode + // Word 55: # of user-addressable heads in curr xlate mode + // Word 56: # of user-addressable sectors/track in curr xlate mode + if (BX_SELECTED_DRIVE(channel).hdimage->cylinders > 16383) { + BX_SELECTED_DRIVE(channel).id_drive[54] = 16383; + } else { + BX_SELECTED_DRIVE(channel).id_drive[54] = BX_SELECTED_DRIVE(channel).hdimage->cylinders; + } + BX_SELECTED_DRIVE(channel).id_drive[55] = BX_SELECTED_DRIVE(channel).hdimage->heads; + BX_SELECTED_DRIVE(channel).id_drive[56] = BX_SELECTED_DRIVE(channel).hdimage->sectors; + + // Word 57-58: Current capacity in sectors + // Excludes all sectors used for device specific purposes. + temp32 = + BX_SELECTED_DRIVE(channel).hdimage->cylinders * + BX_SELECTED_DRIVE(channel).hdimage->heads * + BX_SELECTED_DRIVE(channel).hdimage->sectors; + BX_SELECTED_DRIVE(channel).id_drive[57] = (temp32 & 0xffff); // LSW + BX_SELECTED_DRIVE(channel).id_drive[58] = (temp32 >> 16); // MSW + + // Word 59: 15-9 Reserved + // 8 1=multiple sector setting is valid + // 7-0 current setting for number of sectors that can be + // transferred per interrupt on R/W multiple commands + if (BX_SELECTED_CONTROLLER(channel).multiple_sectors > 0) + BX_SELECTED_DRIVE(channel).id_drive[59] = 0x0100 | BX_SELECTED_CONTROLLER(channel).multiple_sectors; + else + BX_SELECTED_DRIVE(channel).id_drive[59] = 0x0000; + + // Word 60-61: + // If drive supports LBA Mode, these words reflect total # of user + // addressable sectors. This value does not depend on the current + // drive geometry. If the drive does not support LBA mode, these + // words shall be set to 0. + if (BX_SELECTED_DRIVE(channel).hdimage->hd_size > 0) + num_sects = (BX_SELECTED_DRIVE(channel).hdimage->hd_size >> 9); + else + num_sects = BX_SELECTED_DRIVE(channel).hdimage->cylinders * BX_SELECTED_DRIVE(channel).hdimage->heads * BX_SELECTED_DRIVE(channel).hdimage->sectors; + BX_SELECTED_DRIVE(channel).id_drive[60] = (Bit16u)(num_sects & 0xffff); // LSW + BX_SELECTED_DRIVE(channel).id_drive[61] = (Bit16u)(num_sects >> 16); // MSW + + // Word 62: 15-8 single word DMA transfer mode active + // 7-0 single word DMA transfer modes supported + // The low order byte identifies by bit, all the Modes which are + // supported e.g., if Mode 0 is supported bit 0 is set. + // The high order byte contains a single bit set to indiciate + // which mode is active. + BX_SELECTED_DRIVE(channel).id_drive[62] = 0x0; + + // Word 63: 15-8 multiword DMA transfer mode active + // 7-0 multiword DMA transfer modes supported + // The low order byte identifies by bit, all the Modes which are + // supported e.g., if Mode 0 is supported bit 0 is set. + // The high order byte contains a single bit set to indiciate + // which mode is active. + if (BX_HD_THIS bmdma_present()) { + BX_SELECTED_DRIVE(channel).id_drive[63] = 0x07 | (BX_SELECTED_CONTROLLER(channel).mdma_mode << 8); + } else { + BX_SELECTED_DRIVE(channel).id_drive[63] = 0x0; + } + + // Word 64 PIO modes supported + BX_SELECTED_DRIVE(channel).id_drive[64] = 0x00; + + // Word 65-68 PIO/DMA cycle time (nanoseconds) + for (i=65; i<=68; i++) + BX_SELECTED_DRIVE(channel).id_drive[i] = 120; + + // Word 69-79 Reserved + + // Word 80: 15-5 reserved + // 6 supports ATA/ATAPI-6 + // 5 supports ATA/ATAPI-5 + // 4 supports ATA/ATAPI-4 + // 3 supports ATA-3 + // 2 supports ATA-2 + // 1 supports ATA-1 + // 0 reserved + BX_SELECTED_DRIVE(channel).id_drive[80] = 0x7e; + + // Word 81: Minor version number + BX_SELECTED_DRIVE(channel).id_drive[81] = 0x00; + + // Word 82: 15 obsolete + // 14 NOP command supported + // 13 READ BUFFER command supported + // 12 WRITE BUFFER command supported + // 11 obsolete + // 10 Host protected area feature set supported + // 9 DEVICE RESET command supported + // 8 SERVICE interrupt supported + // 7 release interrupt supported + // 6 look-ahead supported + // 5 write cache supported + // 4 supports PACKET command feature set + // 3 supports power management feature set + // 2 supports removable media feature set + // 1 supports securite mode feature set + // 0 support SMART feature set + BX_SELECTED_DRIVE(channel).id_drive[82] = 1 << 14; + + // Word 83: 15 shall be ZERO + // 14 shall be ONE + // 13 FLUSH CACHE EXT command supported + // 12 FLUSH CACHE command supported + // 11 Device configuration overlay supported + // 10 48-bit Address feature set supported + // 9 Automatic acoustic management supported + // 8 SET MAX security supported + // 7 reserved for 1407DT PARTIES + // 6 SetF sub-command Power-Up supported + // 5 Power-Up in standby feature set supported + // 4 Removable media notification supported + // 3 APM feature set supported + // 2 CFA feature set supported + // 1 READ/WRITE DMA QUEUED commands supported + // 0 Download MicroCode supported + BX_SELECTED_DRIVE(channel).id_drive[83] = (1 << 14) | (1 << 13) | (1 << 12) | (1 << 10); + BX_SELECTED_DRIVE(channel).id_drive[84] = 1 << 14; + BX_SELECTED_DRIVE(channel).id_drive[85] = 1 << 14; + + // Word 86: 15 shall be ZERO + // 14 shall be ONE + // 13 FLUSH CACHE EXT command enabled + // 12 FLUSH CACHE command enabled + // 11 Device configuration overlay enabled + // 10 48-bit Address feature set enabled + // 9 Automatic acoustic management enabled + // 8 SET MAX security enabled + // 7 reserved for 1407DT PARTIES + // 6 SetF sub-command Power-Up enabled + // 5 Power-Up in standby feature set enabled + // 4 Removable media notification enabled + // 3 APM feature set enabled + // 2 CFA feature set enabled + // 1 READ/WRITE DMA QUEUED commands enabled + // 0 Download MicroCode enabled + BX_SELECTED_DRIVE(channel).id_drive[86] = (1 << 14) | (1 << 13) | (1 << 12) | (1 << 10); + BX_SELECTED_DRIVE(channel).id_drive[87] = 1 << 14; + + if (BX_HD_THIS bmdma_present()) { + BX_SELECTED_DRIVE(channel).id_drive[88] = 0x3f | (BX_SELECTED_CONTROLLER(channel).udma_mode << 8); + } else { + BX_SELECTED_DRIVE(channel).id_drive[88] = 0x0; + } + BX_SELECTED_DRIVE(channel).id_drive[93] = 1 | (1 << 14) | 0x2000; + + // Word 100-103: 48-bit total number of sectors + BX_SELECTED_DRIVE(channel).id_drive[100] = (Bit16u)(num_sects & 0xffff); + BX_SELECTED_DRIVE(channel).id_drive[101] = (Bit16u)(num_sects >> 16); + BX_SELECTED_DRIVE(channel).id_drive[102] = (Bit16u)(num_sects >> 32); + BX_SELECTED_DRIVE(channel).id_drive[103] = (Bit16u)(num_sects >> 48); + + // Word 128-159 Vendor unique + // Word 160-255 Reserved + + BX_SELECTED_DRIVE(channel).identify_set = 1; +} + +void bx_hard_drive_c::init_send_atapi_command(Bit8u channel, Bit8u command, int req_length, int alloc_length, bx_bool lazy) +{ + // BX_SELECTED_CONTROLLER(channel).byte_count is a union of BX_SELECTED_CONTROLLER(channel).cylinder_no; + // lazy is used to force a data read in the buffer at the next read. + + if (BX_SELECTED_CONTROLLER(channel).byte_count == 0xffff) + BX_SELECTED_CONTROLLER(channel).byte_count = 0xfffe; + + if ((BX_SELECTED_CONTROLLER(channel).byte_count & 1) && + !(alloc_length <= BX_SELECTED_CONTROLLER(channel).byte_count)) + { + BX_INFO(("Odd byte count (0x%04x) to ATAPI command 0x%02x, using 0x%04x", + BX_SELECTED_CONTROLLER(channel).byte_count, command, BX_SELECTED_CONTROLLER(channel).byte_count - 1)); + BX_SELECTED_CONTROLLER(channel).byte_count -= 1; + } + + if (!BX_SELECTED_CONTROLLER(channel).packet_dma) { + if (BX_SELECTED_CONTROLLER(channel).byte_count == 0) + BX_PANIC(("ATAPI command 0x%02x with zero byte count", command)); + } + + if (alloc_length < 0) + BX_PANIC(("Allocation length < 0")); + if (alloc_length == 0) + alloc_length = BX_SELECTED_CONTROLLER(channel).byte_count; + + BX_SELECTED_CONTROLLER(channel).interrupt_reason.i_o = 1; + BX_SELECTED_CONTROLLER(channel).interrupt_reason.c_d = 0; + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drq = 1; + BX_SELECTED_CONTROLLER(channel).status.err = 0; + + // no bytes transfered yet + if (lazy) + BX_SELECTED_CONTROLLER(channel).buffer_index = BX_SELECTED_CONTROLLER(channel).buffer_size; + else + BX_SELECTED_CONTROLLER(channel).buffer_index = 0; + BX_SELECTED_CONTROLLER(channel).drq_index = 0; + + if (BX_SELECTED_CONTROLLER(channel).byte_count > req_length) + BX_SELECTED_CONTROLLER(channel).byte_count = req_length; + + if (BX_SELECTED_CONTROLLER(channel).byte_count > alloc_length) + BX_SELECTED_CONTROLLER(channel).byte_count = alloc_length; + + BX_SELECTED_DRIVE(channel).atapi.command = command; + BX_SELECTED_DRIVE(channel).atapi.drq_bytes = BX_SELECTED_CONTROLLER(channel).byte_count; + BX_SELECTED_DRIVE(channel).atapi.total_bytes_remaining = (req_length < alloc_length) ? req_length : alloc_length; +} + +void bx_hard_drive_c::atapi_cmd_error(Bit8u channel, sense_t sense_key, asc_t asc, bx_bool show) +{ + if (show) { + BX_ERROR(("ata%d-%d: atapi_cmd_error: key=%02x asc=%02x", channel, BX_SLAVE_SELECTED(channel), sense_key, asc)); + } else { + BX_DEBUG(("ata%d-%d: atapi_cmd_error: key=%02x asc=%02x", channel, BX_SLAVE_SELECTED(channel), sense_key, asc)); + } + + BX_SELECTED_CONTROLLER(channel).error_register = sense_key << 4; + BX_SELECTED_CONTROLLER(channel).interrupt_reason.i_o = 1; + BX_SELECTED_CONTROLLER(channel).interrupt_reason.c_d = 1; + BX_SELECTED_CONTROLLER(channel).interrupt_reason.rel = 0; + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.write_fault = 0; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + BX_SELECTED_CONTROLLER(channel).status.err = 1; + + BX_SELECTED_DRIVE(channel).sense.sense_key = sense_key; + BX_SELECTED_DRIVE(channel).sense.asc = asc; + BX_SELECTED_DRIVE(channel).sense.ascq = 0; +} + + void BX_CPP_AttrRegparmN(1) +bx_hard_drive_c::atapi_cmd_nop(Bit8u channel) +{ + BX_SELECTED_CONTROLLER(channel).interrupt_reason.i_o = 1; + BX_SELECTED_CONTROLLER(channel).interrupt_reason.c_d = 1; + BX_SELECTED_CONTROLLER(channel).interrupt_reason.rel = 0; + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + BX_SELECTED_CONTROLLER(channel).status.err = 0; +} + +void bx_hard_drive_c::init_mode_sense_single(Bit8u channel, const void* src, int size) +{ + // Header + BX_SELECTED_CONTROLLER(channel).buffer[0] = (size+6) >> 8; + BX_SELECTED_CONTROLLER(channel).buffer[1] = (size+6) & 0xff; + if (BX_SELECTED_DRIVE(channel).cdrom.ready) + BX_SELECTED_CONTROLLER(channel).buffer[2] = 0x12; // media present 120mm CD-ROM (CD-R) data/audio door closed + else + BX_SELECTED_CONTROLLER(channel).buffer[2] = 0x70; // no media present + BX_SELECTED_CONTROLLER(channel).buffer[3] = 0; // reserved + BX_SELECTED_CONTROLLER(channel).buffer[4] = 0; // reserved + BX_SELECTED_CONTROLLER(channel).buffer[5] = 0; // reserved + BX_SELECTED_CONTROLLER(channel).buffer[6] = 0; // reserved + BX_SELECTED_CONTROLLER(channel).buffer[7] = 0; // reserved + + // Data + memcpy(BX_SELECTED_CONTROLLER(channel).buffer + 8, src, size); +} + + void BX_CPP_AttrRegparmN(1) +bx_hard_drive_c::ready_to_send_atapi(Bit8u channel) +{ + if (!BX_SELECTED_CONTROLLER(channel).packet_dma) { + raise_interrupt(channel); + } +} + + void BX_CPP_AttrRegparmN(1) +bx_hard_drive_c::raise_interrupt(Bit8u channel) +{ + if (!BX_SELECTED_CONTROLLER(channel).control.disable_irq) { + Bit32u irq = BX_HD_THIS channels[channel].irq; + BX_DEBUG(("raising interrupt %d {%s}", irq, BX_SELECTED_TYPE_STRING(channel))); +#if BX_SUPPORT_PCI + DEV_ide_bmdma_set_irq(channel); +#endif + DEV_pic_raise_irq(irq); + } else { + BX_DEBUG(("not raising interrupt {%s}", BX_SELECTED_TYPE_STRING(channel))); + } +} + +void bx_hard_drive_c::command_aborted(Bit8u channel, unsigned value) +{ + BX_DEBUG(("aborting on command 0x%02x {%s}", value, BX_SELECTED_TYPE_STRING(channel))); + BX_SELECTED_CONTROLLER(channel).current_command = 0; + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.err = 1; + BX_SELECTED_CONTROLLER(channel).error_register = 0x04; // command ABORTED + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + BX_SELECTED_CONTROLLER(channel).status.corrected_data = 0; + BX_SELECTED_CONTROLLER(channel).buffer_index = 0; + raise_interrupt(channel); +} + +Bit32u bx_hard_drive_c::get_device_handle(Bit8u channel, Bit8u device) +{ + BX_DEBUG(("get_device_handle %d %d",channel, device)); + if ((channel < BX_MAX_ATA_CHANNEL) && (device < 2)) { + return ((channel*2) + device); + } + + return BX_MAX_ATA_CHANNEL*2; +} + +Bit32u bx_hard_drive_c::get_first_cd_handle(void) +{ + for (Bit8u channel=0; channel= BX_MAX_ATA_CHANNEL*2) return 0; + + Bit8u channel = handle / 2; + Bit8u device = handle % 2; + return BX_HD_THIS channels[channel].drives[device].cdrom.ready; +} + +unsigned bx_hard_drive_c::set_cd_media_status(Bit32u handle, unsigned status) +{ + char ata_name[20]; + + BX_DEBUG (("set_cd_media_status handle=%d status=%d", handle, status)); + if (handle >= BX_MAX_ATA_CHANNEL*2) return 0; + + Bit8u channel = handle / 2; + Bit8u device = handle % 2; + + sprintf(ata_name, "ata.%d.%s", channel, (device==0)?"master":"slave"); + bx_list_c *base = (bx_list_c*) SIM->get_param(ata_name); + // if setting to the current value, nothing to do + if (status == BX_HD_THIS channels[channel].drives[device].cdrom.ready) + return(status); + // return 0 if no cdromd is present + if (!BX_DRIVE_IS_CD(channel,device)) + return(0); + + if (status == 0) { + // eject cdrom if not locked by guest OS + if (BX_HD_THIS channels[channel].drives[device].cdrom.locked) return(1); + else { +#ifdef LOWLEVEL_CDROM + BX_HD_THIS channels[channel].drives[device].cdrom.cd->eject_cdrom(); +#endif + BX_HD_THIS channels[channel].drives[device].cdrom.ready = 0; + SIM->get_param_bool("status", base)->set(0); + } + } else { + // insert cdrom +#ifdef LOWLEVEL_CDROM + if (BX_HD_THIS channels[channel].drives[device].cdrom.cd->insert_cdrom(SIM->get_param_string("path", base)->getptr())) { + BX_INFO(("Media present in CD-ROM drive")); + BX_HD_THIS channels[channel].drives[device].cdrom.ready = 1; + Bit32u capacity = BX_HD_THIS channels[channel].drives[device].cdrom.cd->capacity(); + BX_HD_THIS channels[channel].drives[device].cdrom.capacity = capacity; + BX_INFO(("Capacity is %d sectors (%.2f MB)", capacity, (float)capacity / 512.0)); + SIM->get_param_bool("status", base)->set(1); + BX_SELECTED_DRIVE(channel).sense.sense_key = SENSE_UNIT_ATTENTION; + BX_SELECTED_DRIVE(channel).sense.asc = ASC_MEDIUM_MAY_HAVE_CHANGED; + BX_SELECTED_DRIVE(channel).sense.ascq = 0; + raise_interrupt(channel); + } + else +#endif + { + BX_INFO(("Could not locate CD-ROM, continuing with media not present")); + BX_HD_THIS channels[channel].drives[device].cdrom.ready = 0; + SIM->get_param_bool("status", base)->set(0); + } + } + return (BX_HD_THIS channels[channel].drives[device].cdrom.ready); +} + +bx_bool bx_hard_drive_c::bmdma_present(void) +{ +#if BX_SUPPORT_PCI + if (SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get()) { + return DEV_ide_bmdma_present(); + } +#endif + return 0; +} + +#if BX_SUPPORT_PCI +bx_bool bx_hard_drive_c::bmdma_read_sector(Bit8u channel, Bit8u *buffer, Bit32u *sector_size) +{ + if ((BX_SELECTED_CONTROLLER(channel).current_command == 0xC8) || + (BX_SELECTED_CONTROLLER(channel).current_command == 0x25)) { + *sector_size = 512; + if (!ide_read_sector(channel, buffer, 512)) { + return 0; + } + } else if (BX_SELECTED_CONTROLLER(channel).current_command == 0xA0) { + if (BX_SELECTED_CONTROLLER(channel).packet_dma) { + switch (BX_SELECTED_DRIVE(channel).atapi.command) { + case 0x28: // read (10) + case 0xa8: // read (12) + case 0xbe: // read cd + *sector_size = BX_SELECTED_CONTROLLER(channel).buffer_size; + if (!BX_SELECTED_DRIVE(channel).cdrom.ready) { + BX_PANIC(("Read with CDROM not ready")); + return 0; + } + /* set status bar conditions for device */ + if (!BX_SELECTED_DRIVE(channel).iolight_counter) + bx_gui->statusbar_setitem(BX_SELECTED_DRIVE(channel).statusbar_id, 1); + BX_SELECTED_DRIVE(channel).iolight_counter = 5; + bx_pc_system.activate_timer(BX_HD_THIS iolight_timer_index, 100000, 0); + if (!BX_SELECTED_DRIVE(channel).cdrom.cd->read_block(buffer, BX_SELECTED_DRIVE(channel).cdrom.next_lba, + BX_SELECTED_CONTROLLER(channel).buffer_size)) + { + BX_PANIC(("CDROM: read block %d failed", BX_SELECTED_DRIVE(channel).cdrom.next_lba)); + return 0; + } + BX_SELECTED_DRIVE(channel).cdrom.next_lba++; + BX_SELECTED_DRIVE(channel).cdrom.remaining_blocks--; + break; + default: + memcpy(buffer, BX_SELECTED_CONTROLLER(channel).buffer, *sector_size); + break; + } + } else { + BX_ERROR(("PACKET-DMA not active")); + command_aborted(channel, BX_SELECTED_CONTROLLER(channel).current_command); + return 0; + } + } else { + BX_ERROR(("DMA read not active")); + command_aborted (channel, BX_SELECTED_CONTROLLER(channel).current_command); + return 0; + } + return 1; +} + +bx_bool bx_hard_drive_c::bmdma_write_sector(Bit8u channel, Bit8u *buffer) +{ + if ((BX_SELECTED_CONTROLLER(channel).current_command != 0xCA) && + (BX_SELECTED_CONTROLLER(channel).current_command != 0x35)) { + BX_ERROR(("DMA write not active")); + command_aborted (channel, BX_SELECTED_CONTROLLER(channel).current_command); + return 0; + } + if (!ide_write_sector(channel, buffer, 512)) { + return 0; + } + return 1; +} + +void bx_hard_drive_c::bmdma_complete(Bit8u channel) +{ + BX_SELECTED_CONTROLLER(channel).status.busy = 0; + BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1; + BX_SELECTED_CONTROLLER(channel).status.drq = 0; + BX_SELECTED_CONTROLLER(channel).status.err = 0; + if (BX_SELECTED_IS_CD(channel)) { + BX_SELECTED_CONTROLLER(channel).interrupt_reason.i_o = 1; + BX_SELECTED_CONTROLLER(channel).interrupt_reason.c_d = 1; + BX_SELECTED_CONTROLLER(channel).interrupt_reason.rel = 0; + } else { + BX_SELECTED_CONTROLLER(channel).status.write_fault = 0; + BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1; + BX_SELECTED_CONTROLLER(channel).status.corrected_data = 0; + } + raise_interrupt(channel); +} +#endif + +void bx_hard_drive_c::set_signature(Bit8u channel, Bit8u id) +{ + // Device signature + BX_CONTROLLER(channel,id).head_no = 0; + BX_CONTROLLER(channel,id).sector_count = 1; + BX_CONTROLLER(channel,id).sector_no = 1; + if (BX_DRIVE_IS_HD(channel,id)) { + BX_CONTROLLER(channel,id).cylinder_no = 0; + BX_HD_THIS channels[channel].drive_select = 0; + } else if (BX_DRIVE_IS_CD(channel,id)) { + BX_CONTROLLER(channel,id).cylinder_no = 0xeb14; + } else { + BX_CONTROLLER(channel,id).cylinder_no = 0xffff; + } +} + +bx_bool bx_hard_drive_c::ide_read_sector(Bit8u channel, Bit8u *buffer, Bit32u buffer_size) +{ + Bit64s logical_sector = 0; + Bit64s ret; + + int sector_count = (buffer_size / 512); + Bit8u *bufptr = buffer; + do { + if (!calculate_logical_address(channel, &logical_sector)) { + BX_ERROR(("ide_read_sector() reached invalid sector %lu, aborting", (unsigned long)logical_sector)); + command_aborted(channel, BX_SELECTED_CONTROLLER(channel).current_command); + return 0; + } + ret = BX_SELECTED_DRIVE(channel).hdimage->lseek(logical_sector * 512, SEEK_SET); + if (ret < 0) { + BX_ERROR(("could not lseek() hard drive image file")); + command_aborted(channel, BX_SELECTED_CONTROLLER(channel).current_command); + return 0; + } + /* set status bar conditions for device */ + if (!BX_SELECTED_DRIVE(channel).iolight_counter) + bx_gui->statusbar_setitem(BX_SELECTED_DRIVE(channel).statusbar_id, 1); + BX_SELECTED_DRIVE(channel).iolight_counter = 5; + bx_pc_system.activate_timer(BX_HD_THIS iolight_timer_index, 100000, 0); + ret = BX_SELECTED_DRIVE(channel).hdimage->read((bx_ptr_t)bufptr, 512); + if (ret < 512) { + BX_ERROR(("could not read() hard drive image file at byte %lu", (unsigned long)logical_sector*512)); + command_aborted(channel, BX_SELECTED_CONTROLLER(channel).current_command); + return 0; + } + increment_address(channel); + bufptr += 512; + } while (--sector_count > 0); + + return 1; +} + +bx_bool bx_hard_drive_c::ide_write_sector(Bit8u channel, Bit8u *buffer, Bit32u buffer_size) +{ + Bit64s logical_sector = 0; + Bit64s ret; + + int sector_count = (buffer_size / 512); + Bit8u *bufptr = buffer; + do { + if (!calculate_logical_address(channel, &logical_sector)) { + BX_ERROR(("ide_write_sector() reached invalid sector %lu, aborting", (unsigned long)logical_sector)); + command_aborted(channel, BX_SELECTED_CONTROLLER(channel).current_command); + return 0; + } + ret = BX_SELECTED_DRIVE(channel).hdimage->lseek(logical_sector * 512, SEEK_SET); + if (ret < 0) { + BX_ERROR(("could not lseek() hard drive image file at byte %lu", (unsigned long)logical_sector * 512)); + command_aborted(channel, BX_SELECTED_CONTROLLER(channel).current_command); + return 0; + } + /* set status bar conditions for device */ + if (!BX_SELECTED_DRIVE(channel).iolight_counter) + bx_gui->statusbar_setitem(BX_SELECTED_DRIVE(channel).statusbar_id, 1, 1 /* write */); + BX_SELECTED_DRIVE(channel).iolight_counter = 5; + bx_pc_system.activate_timer(BX_HD_THIS iolight_timer_index, 100000, 0); + ret = BX_SELECTED_DRIVE(channel).hdimage->write((bx_ptr_t)bufptr, 512); + if (ret < 512) { + BX_ERROR(("could not write() hard drive image file at byte %lu", (unsigned long)logical_sector*512)); + command_aborted(channel, BX_SELECTED_CONTROLLER(channel).current_command); + return 0; + } + increment_address(channel); + bufptr += 512; + } while (--sector_count > 0); + + return 1; +} + +void bx_hard_drive_c::lba48_transform(Bit8u channel, bx_bool lba48) +{ + BX_SELECTED_CONTROLLER(channel).lba48 = lba48; + + if (!BX_SELECTED_CONTROLLER(channel).lba48) { + if (!BX_SELECTED_CONTROLLER(channel).sector_count) + BX_SELECTED_CONTROLLER(channel).num_sectors = 256; + else + BX_SELECTED_CONTROLLER(channel).num_sectors = BX_SELECTED_CONTROLLER(channel).sector_count; + } else { + if (!BX_SELECTED_CONTROLLER(channel).sector_count && !BX_SELECTED_CONTROLLER(channel).hob.nsector) + BX_SELECTED_CONTROLLER(channel).num_sectors = 65536; + else + BX_SELECTED_CONTROLLER(channel).num_sectors = (BX_SELECTED_CONTROLLER(channel).hob.nsector << 8) | + BX_SELECTED_CONTROLLER(channel).sector_count; + } +} + +error_recovery_t::error_recovery_t() +{ + if (sizeof(error_recovery_t) != 8) { + BX_PANIC(("error_recovery_t has size != 8")); + } + + data[0] = 0x01; + data[1] = 0x06; + data[2] = 0x00; + data[3] = 0x05; // Try to recover 5 times + data[4] = 0x00; + data[5] = 0x00; + data[6] = 0x00; + data[7] = 0x00; +} diff --git a/bochs/iodev/harddrv.h b/bochs/iodev/harddrv.h new file mode 100644 index 00000000..7bc01e14 --- /dev/null +++ b/bochs/iodev/harddrv.h @@ -0,0 +1,258 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2010 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_IODEV_HDDRIVE_H +#define BX_IODEV_HDDRIVE_H + +#define MAX_MULTIPLE_SECTORS 16 + +typedef enum _sense { + SENSE_NONE = 0, SENSE_NOT_READY = 2, SENSE_ILLEGAL_REQUEST = 5, + SENSE_UNIT_ATTENTION = 6 +} sense_t; + +typedef enum _asc { + ASC_ILLEGAL_OPCODE = 0x20, + ASC_LOGICAL_BLOCK_OOR = 0x21, + ASC_INV_FIELD_IN_CMD_PACKET = 0x24, + ASC_MEDIUM_MAY_HAVE_CHANGED = 0x28, + ASC_SAVING_PARAMETERS_NOT_SUPPORTED = 0x39, + ASC_MEDIUM_NOT_PRESENT = 0x3a +} asc_t; + +class device_image_t; +class LOWLEVEL_CDROM; + +typedef struct { + struct { + bx_bool busy; + bx_bool drive_ready; + bx_bool write_fault; + bx_bool seek_complete; + bx_bool drq; + bx_bool corrected_data; + bx_bool index_pulse; + unsigned index_pulse_count; + bx_bool err; + } status; + Bit8u error_register; + Bit8u head_no; + union { + Bit8u sector_count; + struct { +#ifdef BX_LITTLE_ENDIAN + unsigned c_d : 1; + unsigned i_o : 1; + unsigned rel : 1; + unsigned tag : 5; +#else /* BX_BIG_ENDIAN */ + unsigned tag : 5; + unsigned rel : 1; + unsigned i_o : 1; + unsigned c_d : 1; +#endif + } interrupt_reason; + }; + Bit8u sector_no; + union { + Bit16u cylinder_no; + Bit16u byte_count; + }; + Bit8u buffer[MAX_MULTIPLE_SECTORS*512 + 4]; + Bit32u buffer_size; + Bit32u buffer_index; + Bit32u drq_index; + Bit8u current_command; + Bit8u multiple_sectors; + Bit8u lba_mode; + bx_bool packet_dma; + Bit8u mdma_mode; + Bit8u udma_mode; + struct { + bx_bool reset; // 0=normal, 1=reset controller + bx_bool disable_irq; // 0=allow irq, 1=disable irq + } control; + Bit8u reset_in_progress; + Bit8u features; + struct { + Bit8u feature; + Bit8u nsector; + Bit8u sector; + Bit8u lcyl; + Bit8u hcyl; + } hob; + Bit32u num_sectors; + bx_bool lba48; +} controller_t; + +struct sense_info_t { + sense_t sense_key; + struct { + Bit8u arr[4]; + } information; + struct { + Bit8u arr[4]; + } specific_inf; + struct { + Bit8u arr[3]; + } key_spec; + Bit8u fruc; + Bit8u asc; + Bit8u ascq; +}; + +struct error_recovery_t { + unsigned char data[8]; + + error_recovery_t (); +}; + +Bit16u read_16bit(const Bit8u* buf) BX_CPP_AttrRegparmN(1); +Bit32u read_32bit(const Bit8u* buf) BX_CPP_AttrRegparmN(1); + + +struct cdrom_t +{ + bx_bool ready; + bx_bool locked; +#ifdef LOWLEVEL_CDROM + LOWLEVEL_CDROM* cd; +#endif + Bit32u capacity; + int next_lba; + int remaining_blocks; + struct currentStruct { + error_recovery_t error_recovery; + } current; +}; + +struct atapi_t +{ + Bit8u command; + int drq_bytes; + int total_bytes_remaining; +}; + +#if BX_USE_HD_SMF +# define BX_HD_SMF static +# define BX_HD_THIS theHardDrive-> +#else +# define BX_HD_SMF +# define BX_HD_THIS this-> +#endif + +typedef enum { + IDE_NONE, IDE_DISK, IDE_CDROM +} device_type_t; + +class bx_hard_drive_c : public bx_hard_drive_stub_c { +public: + bx_hard_drive_c(); + virtual ~bx_hard_drive_c(); + virtual void init(); + virtual void reset(unsigned type); + virtual Bit32u get_device_handle(Bit8u channel, Bit8u device); + virtual Bit32u get_first_cd_handle(void); + virtual unsigned get_cd_media_status(Bit32u handle); + virtual unsigned set_cd_media_status(Bit32u handle, unsigned status); +#if BX_SUPPORT_PCI + virtual bx_bool bmdma_read_sector(Bit8u channel, Bit8u *buffer, Bit32u *sector_size); + virtual bx_bool bmdma_write_sector(Bit8u channel, Bit8u *buffer); + virtual void bmdma_complete(Bit8u channel); +#endif + virtual void register_state(void); + + virtual Bit32u virt_read_handler(Bit32u address, unsigned io_len) + { + return read_handler(this, address, io_len); + } + virtual void virt_write_handler(Bit32u address, Bit32u value, unsigned io_len) + { + write_handler(this, address, value, io_len); + } + +#if !BX_USE_HD_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); + + static void iolight_timer_handler(void *); + BX_HD_SMF void iolight_timer(void); + +private: + + BX_HD_SMF bx_bool calculate_logical_address(Bit8u channel, Bit64s *sector) BX_CPP_AttrRegparmN(2); + BX_HD_SMF void increment_address(Bit8u channel) BX_CPP_AttrRegparmN(1); + BX_HD_SMF void identify_drive(Bit8u channel); + BX_HD_SMF void identify_ATAPI_drive(Bit8u channel); + BX_HD_SMF void command_aborted(Bit8u channel, unsigned command); + + BX_HD_SMF void init_send_atapi_command(Bit8u channel, Bit8u command, int req_length, int alloc_length, bx_bool lazy = 0); + BX_HD_SMF void ready_to_send_atapi(Bit8u channel) BX_CPP_AttrRegparmN(1); + BX_HD_SMF void raise_interrupt(Bit8u channel) BX_CPP_AttrRegparmN(1); + BX_HD_SMF void atapi_cmd_error(Bit8u channel, sense_t sense_key, asc_t asc, bx_bool show); + BX_HD_SMF void init_mode_sense_single(Bit8u channel, const void* src, int size); + BX_HD_SMF void atapi_cmd_nop(Bit8u channel) BX_CPP_AttrRegparmN(1); + BX_HD_SMF bx_bool bmdma_present(void); + BX_HD_SMF void set_signature(Bit8u channel, Bit8u id); + BX_HD_SMF bx_bool ide_read_sector(Bit8u channel, Bit8u *buffer, Bit32u buffer_size); + BX_HD_SMF bx_bool ide_write_sector(Bit8u channel, Bit8u *buffer, Bit32u buffer_size); + BX_HD_SMF void lba48_transform(Bit8u channel, bx_bool lba48); + + // FIXME: + // For each ATA channel we should have one controller struct + // and an array of two drive structs + struct channel_t { + struct drive_t { + device_image_t* hdimage; + device_type_t device_type; + // 512 byte buffer for ID drive command + // These words are stored in native word endian format, as + // they are fetched and returned via a return(), so + // there's no need to keep them in x86 endian format. + Bit16u id_drive[256]; + bx_bool identify_set; + + controller_t controller; + cdrom_t cdrom; + sense_info_t sense; + atapi_t atapi; + + Bit8u model_no[41]; + int statusbar_id; + int iolight_counter; + Bit8u device_num; // for ATAPI identify & inquiry + } drives[2]; + unsigned drive_select; + + Bit16u ioaddr1; + Bit16u ioaddr2; + Bit8u irq; + + } channels[BX_MAX_ATA_CHANNEL]; + + int iolight_timer_index; + Bit8u cdrom_count; +}; + +#endif diff --git a/bochs/iodev/hdimage.cc b/bochs/iodev/hdimage.cc new file mode 100644 index 00000000..518f8abe --- /dev/null +++ b/bochs/iodev/hdimage.cc @@ -0,0 +1,1897 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "hdimage.h" +#include "vmware3.h" +#include "vmware4.h" +#include "vvfat.h" + +#if BX_HAVE_SYS_MMAN_H +#include +#endif + +#define LOG_THIS theHDImageCtl-> + +bx_hdimage_ctl_c* theHDImageCtl = NULL; + +int libhdimage_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theHDImageCtl = new bx_hdimage_ctl_c; + bx_devices.pluginHDImageCtl = theHDImageCtl; + return(0); // Success +} + +void libhdimage_LTX_plugin_fini(void) +{ + delete theHDImageCtl; +} + +bx_hdimage_ctl_c::bx_hdimage_ctl_c() +{ + put("IMG"); +} + +device_image_t* bx_hdimage_ctl_c::init_image(Bit8u image_mode, Bit64u disk_size, const char *journal) +{ + device_image_t *hdimage = NULL; + + // instantiate the right class + switch (image_mode) { + + case BX_HDIMAGE_MODE_FLAT: + hdimage = new default_image_t(); + break; + + case BX_HDIMAGE_MODE_CONCAT: + hdimage = new concat_image_t(); + break; + +#if EXTERNAL_DISK_SIMULATOR + case BX_HDIMAGE_MODE_EXTDISKSIM: + hdimage = new EXTERNAL_DISK_SIMULATOR_CLASS(); + break; +#endif //EXTERNAL_DISK_SIMULATOR + +#if DLL_HD_SUPPORT + case BX_HDIMAGE_MODE_DLL_HD: + hdimage = new dll_image_t(); + break; +#endif //DLL_HD_SUPPORT + + case BX_HDIMAGE_MODE_SPARSE: + hdimage = new sparse_image_t(); + break; + + case BX_HDIMAGE_MODE_VMWARE3: + hdimage = new vmware3_image_t(); + break; + + case BX_HDIMAGE_MODE_VMWARE4: + hdimage = new vmware4_image_t(); + break; + + case BX_HDIMAGE_MODE_UNDOABLE: + hdimage = new undoable_image_t(journal); + break; + + case BX_HDIMAGE_MODE_GROWING: + hdimage = new growing_image_t(); + break; + + case BX_HDIMAGE_MODE_VOLATILE: + hdimage = new volatile_image_t(journal); + break; + +#if BX_COMPRESSED_HD_SUPPORT + case BX_HDIMAGE_MODE_Z_UNDOABLE: + BX_PANIC(("z-undoable disk support not implemented")); +#if 0 + hdimage = new z_undoable_image_t(disk_size, journal); +#endif + break; + + case BX_HDIMAGE_MODE_Z_VOLATILE: + BX_PANIC(("z-volatile disk support not implemented")); +#if 0 + hdimage = new z_volatile_image_t(disk_size, "journal"); +#endif + break; +#endif //BX_COMPRESSED_HD_SUPPORT + + case BX_HDIMAGE_MODE_VVFAT: + hdimage = new vvfat_image_t(disk_size, journal); + break; + + default: + BX_PANIC(("unsupported HD mode : '%s'", hdimage_mode_names[image_mode])); + break; + } + return hdimage; +} + +/*** base class device_image_t ***/ + +device_image_t::device_image_t() +{ + hd_size = 0; +} + +Bit32u device_image_t::get_capabilities() +{ + return (cylinders == 0) ? HDIMAGE_AUTO_GEOMETRY : 0; +} + +/*** default_image_t function definitions ***/ + +int default_image_t::open(const char* pathname) +{ + return open(pathname, O_RDWR); +} + +int default_image_t::open(const char* pathname, int flags) +{ +#ifdef WIN32 + HANDLE hFile = CreateFile(pathname, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL); + if (hFile != INVALID_HANDLE_VALUE) { + ULARGE_INTEGER FileSize; + FileSize.LowPart = GetFileSize(hFile, &FileSize.HighPart); + CloseHandle(hFile); + if ((FileSize.LowPart != INVALID_FILE_SIZE) || (GetLastError() == NO_ERROR)) { + hd_size = FileSize.QuadPart; + } else { + return -1; + } + } else { + return -1; + } +#endif + + fd = ::open(pathname, flags +#ifdef O_BINARY + | O_BINARY +#endif + ); + + if (fd < 0) { + return fd; + } + +#ifndef WIN32 + /* look at size of image file to calculate disk geometry */ + struct stat stat_buf; + int ret = fstat(fd, &stat_buf); + if (ret) { + BX_PANIC(("fstat() returns error!")); + } + hd_size = (Bit64u)stat_buf.st_size; +#endif + if ((hd_size % 512) != 0) { + BX_PANIC(("size of disk image must be multiple of 512 bytes")); + } + + return fd; +} + +void default_image_t::close() +{ + if (fd > -1) { + ::close(fd); + } +} + +Bit64s default_image_t::lseek(Bit64s offset, int whence) +{ + return (Bit64s)::lseek(fd, (off_t)offset, whence); +} + +ssize_t default_image_t::read(void* buf, size_t count) +{ + return ::read(fd, (char*) buf, count); +} + +ssize_t default_image_t::write(const void* buf, size_t count) +{ + return ::write(fd, (char*) buf, count); +} + +char increment_string(char *str, int diff) +{ + // find the last character of the string, and increment it. + char *p = str; + while (*p != 0) p++; + BX_ASSERT(p>str); // choke on zero length strings + p--; // point to last character of the string + (*p) += diff; // increment to next/previous ascii code. + BX_DEBUG(("increment string returning '%s'", str)); + return (*p); +} + +/*** concat_image_t function definitions ***/ + +concat_image_t::concat_image_t() +{ + fd = -1; +} + +void concat_image_t::increment_string(char *str) +{ + ::increment_string(str, +1); +} + +int concat_image_t::open(const char* pathname0) +{ + char *pathname = strdup(pathname0); + BX_DEBUG(("concat_image_t.open")); + Bit64s start_offset = 0; + for (int i=0; i -1) { + ::close(fd); + } +} + +Bit64s concat_image_t::lseek(Bit64s offset, int whence) +{ + if ((offset % 512) != 0) + BX_PANIC(("lseek HD with offset not multiple of 512")); + BX_DEBUG(("concat_image_t.lseek(%d)", whence)); + // is this offset in this disk image? + if (offset < thismin) { + // no, look at previous images + for (int i=index-1; i>=0; i--) { + if (offset >= start_offset_table[i]) { + index = i; + fd = fd_table[i]; + thismin = start_offset_table[i]; + thismax = thismin + length_table[i] - 1; + BX_DEBUG(("concat_image_t.lseek to earlier image, index=%d", index)); + break; + } + } + } else if (offset > thismax) { + // no, look at later images + for (int i=index+1; i= length_table[index]) { + BX_PANIC(("concat_image_t.lseek to byte %ld failed", (long)offset)); + return -1; + } + + seek_was_last_op = 1; + return (Bit64s)::lseek(fd, (off_t)offset, whence); +} + +ssize_t concat_image_t::read(void* buf, size_t count) +{ + BX_DEBUG(("concat_image_t.read %ld bytes", (long)count)); + // notice if anyone does sequential read or write without seek in between. + // This can be supported pretty easily, but needs additional checks for + // end of a partial image. + if (!seek_was_last_op) + BX_PANIC(("no seek before read")); + return ::read(fd, (char*) buf, count); +} + +ssize_t concat_image_t::write(const void* buf, size_t count) +{ + BX_DEBUG(("concat_image_t.write %ld bytes", (long)count)); + // notice if anyone does sequential read or write without seek in between. + // This can be supported pretty easily, but needs additional checks for + // end of a partial image. + if (!seek_was_last_op) + BX_PANIC(("no seek before write")); + return ::write(fd, (char*) buf, count); +} + +/*** sparse_image_t function definitions ***/ + +sparse_image_t::sparse_image_t () +{ + fd = -1; + pathname = NULL; +#ifdef _POSIX_MAPPED_FILES + mmap_header = NULL; +#endif + pagetable = NULL; +} + +/* +void showpagetable(Bit32u * pagetable, size_t numpages) +{ + printf("Non null pages: "); + for (int i = 0; i < numpages; i++) + { + if (pagetable[i] != 0xffffffff) + { + printf("%d ", i); + } + } + printf("\n"); +} +*/ + +void sparse_image_t::read_header() +{ + BX_ASSERT(sizeof(header) == SPARSE_HEADER_SIZE); + + int ret = ::read(fd, &header, sizeof(header)); + + if (-1 == ret) + { + panic(strerror(errno)); + } + + if (sizeof(header) != ret) + { + panic("could not read entire header"); + } + + if (dtoh32(header.magic) != SPARSE_HEADER_MAGIC) + { + panic("failed header magic check"); + } + + if ((dtoh32(header.version) != SPARSE_HEADER_VERSION) && + (dtoh32(header.version) != SPARSE_HEADER_V1)) + { + panic("unknown version in header"); + } + + pagesize = dtoh32(header.pagesize); + Bit32u numpages = dtoh32(header.numpages); + + total_size = pagesize; + total_size *= numpages; + + pagesize_shift = 0; + while ((pagesize >> pagesize_shift) > 1) pagesize_shift++; + + if ((Bit32u)(1 << pagesize_shift) != pagesize) + { + panic("failed block size header check"); + } + + pagesize_mask = pagesize - 1; + + size_t preamble_size = (sizeof(Bit32u) * numpages) + sizeof(header); + data_start = 0; + while ((size_t)data_start < preamble_size) data_start += pagesize; + + bx_bool did_mmap = 0; + +#ifdef _POSIX_MAPPED_FILES +// Try to memory map from the beginning of the file (0 is trivially a page multiple) + void * mmap_header = mmap(NULL, preamble_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (mmap_header == MAP_FAILED) + { + BX_INFO(("failed to mmap sparse disk file - using conventional file access")); + mmap_header = NULL; + } + else + { + mmap_length = preamble_size; + did_mmap = 1; + pagetable = ((Bit32u *) (((Bit8u *) mmap_header) + sizeof(header))); + system_pagesize_mask = getpagesize() - 1; + } +#endif + + if (!did_mmap) + { + pagetable = new Bit32u[numpages]; + + if (pagetable == NULL) + { + panic("could not allocate memory for sparse disk block table"); + } + + ret = ::read(fd, pagetable, sizeof(Bit32u) * numpages); + + if (-1 == ret) + { + panic(strerror(errno)); + } + + if ((int)(sizeof(Bit32u) * numpages) != ret) + { + panic("could not read entire block table"); + } + } +} + +int sparse_image_t::open (const char* pathname0) +{ + pathname = strdup(pathname0); + BX_DEBUG(("sparse_image_t.open")); + + fd = ::open(pathname, O_RDWR +#ifdef O_BINARY + | O_BINARY +#endif + ); + + if (fd < 0) + { + return -1; // open failed + } + BX_DEBUG(("sparse_image: open image %s", pathname)); + + read_header(); + + struct stat stat_buf; + if (fstat(fd, &stat_buf) != 0) panic(("fstat() returns error!")); + + underlying_filesize = stat_buf.st_size; + + if ((underlying_filesize % pagesize) != 0) + panic("size of sparse disk image is not multiple of page size"); + + underlying_current_filepos = 0; + if (-1 == ::lseek(fd, 0, SEEK_SET)) + panic("error while seeking to start of file"); + + lseek(0, SEEK_SET); + + //showpagetable(pagetable, header.numpages); + + char * parentpathname = strdup(pathname); + char lastchar = ::increment_string(parentpathname, -1); + + if ((lastchar >= '0') && (lastchar <= '9')) + { + struct stat stat_buf; + if (0 == stat(parentpathname, &stat_buf)) + { + parent_image = new sparse_image_t(); + int ret = parent_image->open(parentpathname); + if (ret != 0) return ret; + if ( (parent_image->pagesize != pagesize) + || (parent_image->total_size != total_size)) + { + panic("child drive image does not have same page count/page size configuration"); + } + } + } + + if (parentpathname != NULL) free(parentpathname); + + if (dtoh32(header.version) == SPARSE_HEADER_VERSION) { + hd_size = dtoh64(header.disk); + } + + return 0; // success +} + +void sparse_image_t::close() +{ + BX_DEBUG(("concat_image_t.close")); + if (pathname != NULL) + { + free(pathname); + } +#ifdef _POSIX_MAPPED_FILES + if (mmap_header != NULL) + { + int ret = munmap(mmap_header, mmap_length); + if (ret != 0) + BX_INFO(("failed to un-memory map sparse disk file")); + } + pagetable = NULL; // We didn't malloc it +#endif + if (fd > -1) { + ::close(fd); + } + if (pagetable != NULL) + { + delete [] pagetable; + } + if (parent_image != NULL) + { + delete parent_image; + } +} + +Bit64s sparse_image_t::lseek(Bit64s offset, int whence) +{ + //showpagetable(pagetable, header.numpages); + + if ((offset % 512) != 0) + BX_PANIC(("lseek HD with offset not multiple of 512")); + if (whence != SEEK_SET) + BX_PANIC(("lseek HD with whence not SEEK_SET")); + + BX_DEBUG(("sparse_image_t.lseek(%d)", whence)); + + if (offset > total_size) + { + BX_PANIC(("sparse_image_t.lseek to byte %ld failed", (long)offset)); + return -1; + } + + //printf("Seeking to position %ld\n", (long) offset); + + set_virtual_page((Bit32u)(offset >> pagesize_shift)); + position_page_offset = (Bit32u)(offset & pagesize_mask); + + return 0; +} + +inline Bit64s sparse_image_t::get_physical_offset() +{ + Bit64s physical_offset = data_start; + physical_offset += ((Bit64s)position_physical_page << pagesize_shift); + physical_offset += position_page_offset; + return physical_offset; +} + +void sparse_image_t::set_virtual_page(Bit32u new_virtual_page) +{ + position_virtual_page = new_virtual_page; + position_physical_page = dtoh32(pagetable[position_virtual_page]); +} + +ssize_t sparse_image_t::read_page_fragment(Bit32u read_virtual_page, Bit32u read_page_offset, size_t read_size, void * buf) +{ + if (read_virtual_page != position_virtual_page) + { + set_virtual_page(read_virtual_page); + } + + position_page_offset = read_page_offset; + + if (position_physical_page == SPARSE_PAGE_NOT_ALLOCATED) + { + if (parent_image != NULL) + { + return parent_image->read_page_fragment(read_virtual_page, read_page_offset, read_size, buf); + } + else + { + memset(buf, 0, read_size); + } + } + else + { + Bit64s physical_offset = get_physical_offset(); + + if (physical_offset != underlying_current_filepos) + { + off_t ret = ::lseek(fd, (off_t)physical_offset, SEEK_SET); + // underlying_current_filepos update deferred + if (ret == -1) + panic(strerror(errno)); + } + + //printf("Reading %s at position %ld size %d\n", pathname, (long) physical_offset, (long) read_size); + ssize_t readret = ::read(fd, buf, read_size); + + if (readret == -1) + { + panic(strerror(errno)); + } + + if ((size_t)readret != read_size) + { + panic("could not read block contents from file"); + } + + underlying_current_filepos = physical_offset + read_size; + } + + return read_size; +} + +ssize_t sparse_image_t::read(void* buf, size_t count) +{ + //showpagetable(pagetable, header.numpages); + ssize_t total_read = 0; + + BX_DEBUG(("sparse_image_t.read %ld bytes", (long)count)); + + while (count != 0) + { + size_t can_read = pagesize - position_page_offset; + if (count < can_read) can_read = count; + + BX_ASSERT (can_read != 0); + +#if BX_ASSERT_ENABLE + size_t was_read = read_page_fragment(position_virtual_page, position_page_offset, can_read, buf); +#endif + BX_ASSERT(was_read == can_read); + + total_read += can_read; + + position_page_offset += can_read; + if (position_page_offset == pagesize) + { + position_page_offset = 0; + set_virtual_page(position_virtual_page + 1); + } + + BX_ASSERT(position_page_offset < pagesize); + + buf = (((Bit8u *) buf) + can_read); + count -= can_read; + } + + return total_read; +} + +void sparse_image_t::panic(const char * message) +{ + char buffer[1024]; + if (message == NULL) + { + snprintf(buffer, sizeof(buffer), "error with sparse disk image %s", pathname); + } + else + { + snprintf(buffer, sizeof(buffer), "error with sparse disk image %s - %s", pathname, message); + } + BX_PANIC(("%s", buffer)); +} + +ssize_t sparse_image_t::write (const void* buf, size_t count) +{ + //showpagetable(pagetable, header.numpages); + + ssize_t total_written = 0; + + Bit32u update_pagetable_start = position_virtual_page; + Bit32u update_pagetable_count = 0; + + BX_DEBUG(("sparse_image_t.write %ld bytes", (long)count)); + + while (count != 0) + { + size_t can_write = pagesize - position_page_offset; + if (count < can_write) can_write = count; + + BX_ASSERT (can_write != 0); + + if (position_physical_page == SPARSE_PAGE_NOT_ALLOCATED) + { + // We just add on another page at the end of the file + // Reclamation, compaction etc should currently be done off-line + + Bit64s data_size = underlying_filesize - data_start; + BX_ASSERT((data_size % pagesize) == 0); + + Bit32u data_size_pages = (Bit32u)(data_size / pagesize); + Bit32u next_data_page = data_size_pages; + + pagetable[position_virtual_page] = htod32(next_data_page); + position_physical_page = next_data_page; + + Bit64s page_file_start = data_start + ((Bit64s)position_physical_page << pagesize_shift); + + if (parent_image != NULL) + { + // If we have a parent, we must merge our portion with the parent + void *writebuffer = NULL; + + if (can_write == pagesize) + { + writebuffer = (void *) buf; + } + else + { + writebuffer = malloc(pagesize); + if (writebuffer == NULL) + panic("Cannot allocate sufficient memory for page-merge in write"); + + // Read entire page - could optimize, but simple for now + parent_image->read_page_fragment(position_virtual_page, 0, pagesize, writebuffer); + + void *dest_start = ((Bit8u *) writebuffer) + position_page_offset; + memcpy(dest_start, buf, can_write); + } + + int ret = (int)::lseek(fd, page_file_start, SEEK_SET); + // underlying_current_filepos update deferred + if (ret == -1) panic(strerror(errno)); + + ret = ::write(fd, writebuffer, pagesize); + if (ret == -1) panic(strerror(errno)); + + if (pagesize != (Bit32u)ret) panic("failed to write entire merged page to disk"); + + if (can_write != pagesize) + { + free(writebuffer); + } + } + else + { + // We need to write a zero page because read has been returning zeroes + // We seek as close to the page end as possible, and then write a little + // This produces a sparse file which has blanks + // Also very quick, even when pagesize is massive + int ret = (int)::lseek(fd, page_file_start + pagesize - 4, SEEK_SET); + // underlying_current_filepos update deferred + if (ret == -1) panic(strerror(errno)); + + Bit32u zero = 0; + ret = ::write(fd, &zero, 4); + if (ret == -1) panic(strerror(errno)); + + if (ret != 4) panic("failed to write entire blank page to disk"); + } + + update_pagetable_count = (position_virtual_page - update_pagetable_start) + 1; + underlying_filesize = underlying_current_filepos = page_file_start + pagesize; + } + + BX_ASSERT(position_physical_page != SPARSE_PAGE_NOT_ALLOCATED); + + Bit64s physical_offset = get_physical_offset(); + + if (physical_offset != underlying_current_filepos) + { + off_t ret = ::lseek(fd, (off_t)physical_offset, SEEK_SET); + // underlying_current_filepos update deferred + if (ret == -1) + panic(strerror(errno)); + } + + //printf("Writing at position %ld size %d\n", (long) physical_offset, can_write); + ssize_t writeret = ::write(fd, buf, can_write); + + if (writeret == -1) + { + panic(strerror(errno)); + } + + if ((size_t)writeret != can_write) + { + panic("could not write block contents to file"); + } + + underlying_current_filepos = physical_offset + can_write; + + total_written += can_write; + + position_page_offset += can_write; + if (position_page_offset == pagesize) + { + position_page_offset = 0; + set_virtual_page(position_virtual_page + 1); + } + + BX_ASSERT(position_page_offset < pagesize); + + buf = (((Bit8u *) buf) + can_write); + count -= can_write; + } + + if (update_pagetable_count != 0) + { + bx_bool done = 0; + off_t pagetable_write_from = sizeof(header) + (sizeof(Bit32u) * update_pagetable_start); + size_t write_bytecount = update_pagetable_count * sizeof(Bit32u); + +#ifdef _POSIX_MAPPED_FILES + if (mmap_header != NULL) + { + // Sync from the beginning of the page + size_t system_page_offset = pagetable_write_from & system_pagesize_mask; + void *start = ((Bit8u *) mmap_header + pagetable_write_from - system_page_offset); + + int ret = msync(start, system_page_offset + write_bytecount, MS_ASYNC); + + if (ret != 0) + panic(strerror(errno)); + + done = 1; + } +#endif + + if (!done) + { + int ret = (int)::lseek(fd, pagetable_write_from, SEEK_SET); + // underlying_current_filepos update deferred + if (ret == -1) panic(strerror(errno)); + + //printf("Writing header at position %ld size %ld\n", (long) pagetable_write_from, (long) write_bytecount); + ret = ::write(fd, &pagetable[update_pagetable_start], write_bytecount); + if (ret == -1) panic(strerror(errno)); + if ((size_t)ret != write_bytecount) panic("could not write entire updated block header"); + + underlying_current_filepos = pagetable_write_from + write_bytecount; + } + } + + return total_written; +} + +#if DLL_HD_SUPPORT + +/*** dll_image_t function definitions ***/ + +/* +function vdisk_open(path:PChar;numclusters,clustersize:integer):integer; +procedure vdisk_read(vunit:integer;blk:integer;var buf:TBlock); +procedure vdisk_write(vunit:integer;blk:integer;var buf:TBlock); +procedure vdisk_close(vunit:integer); +*/ + +HINSTANCE hlib_vdisk = 0; + +int (*vdisk_open) (const char *path,int numclusters,int clustersize); +void (*vdisk_read) (int vunit,int blk,void *buf); +void (*vdisk_write) (int vunit,int blk,const void *buf); +void (*vdisk_close) (int vunit); + +int dll_image_t::open (const char* pathname) +{ + if (hlib_vdisk == 0) { + hlib_vdisk = LoadLibrary("vdisk.dll"); + if (hlib_vdisk != 0) { + vdisk_read = (void (*)(int,int,void*)) GetProcAddress(hlib_vdisk,"vdisk_read"); + vdisk_write = (void (*)(int,int,const void*)) GetProcAddress(hlib_vdisk,"vdisk_write"); + vdisk_open = (int (*)(const char *,int,int)) GetProcAddress(hlib_vdisk,"vdisk_open"); + vdisk_close = (void (*)(int)) GetProcAddress(hlib_vdisk,"vdisk_close"); + } + } + if (hlib_vdisk != 0) { + vunit = vdisk_open(pathname,0x10000,64); + vblk = 0; + } else { + vunit = -2; + } + return vunit; +} + +void dll_image_t::close () +{ + if (vunit >= 0 && hlib_vdisk != 0) { + vdisk_close(vunit); + } +} + +Bit64s dll_image_t::lseek(Bit64s offset, int whence) +{ + vblk = (int)(offset >> 9); + return 0; +} + +ssize_t dll_image_t::read (void* buf, size_t count) +{ + if (vunit >= 0 && hlib_vdisk != 0) { + vdisk_read(vunit,vblk,buf); + return count; + } else { + return -1; + } +} + +ssize_t dll_image_t::write (const void* buf, size_t count) +{ + if (vunit >= 0 && hlib_vdisk != 0) { + vdisk_write(vunit,vblk,buf); + return count; + } else { + return -1; + } +} +#endif // DLL_HD_SUPPORT + +// redolog implementation +redolog_t::redolog_t() +{ + fd = -1; + catalog = NULL; + bitmap = NULL; + extent_index = (Bit32u)0; + extent_offset = (Bit32u)0; + extent_next = (Bit32u)0; +} + +void redolog_t::print_header() +{ + BX_INFO(("redolog : Standard Header : magic='%s', type='%s', subtype='%s', version = %d.%d", + header.standard.magic, header.standard.type, header.standard.subtype, + dtoh32(header.standard.version)/0x10000, + dtoh32(header.standard.version)%0x10000)); + if (dtoh32(header.standard.version) == STANDARD_HEADER_VERSION) { + BX_INFO(("redolog : Specific Header : #entries=%d, bitmap size=%d, exent size = %d disk size = " FMT_LL "d", + dtoh32(header.specific.catalog), + dtoh32(header.specific.bitmap), + dtoh32(header.specific.extent), + dtoh64(header.specific.disk))); + } else if (dtoh32(header.standard.version) == STANDARD_HEADER_V1) { + redolog_header_v1_t header_v1; + memcpy(&header_v1, &header, STANDARD_HEADER_SIZE); + BX_INFO(("redolog : Specific Header : #entries=%d, bitmap size=%d, exent size = %d disk size = " FMT_LL "d", + dtoh32(header_v1.specific.catalog), + dtoh32(header_v1.specific.bitmap), + dtoh32(header_v1.specific.extent), + dtoh64(header_v1.specific.disk))); + } +} + +int redolog_t::make_header(const char* type, Bit64u size) +{ + Bit32u entries, extent_size, bitmap_size; + Bit64u maxsize; + Bit32u flip=0; + + // Set standard header values + strcpy((char*)header.standard.magic, STANDARD_HEADER_MAGIC); + strcpy((char*)header.standard.type, REDOLOG_TYPE); + strcpy((char*)header.standard.subtype, type); + header.standard.version = htod32(STANDARD_HEADER_VERSION); + header.standard.header = htod32(STANDARD_HEADER_SIZE); + + entries = 512; + bitmap_size = 1; + + // Compute #entries and extent size values + do { + extent_size = 8 * bitmap_size * 512; + + header.specific.catalog = htod32(entries); + header.specific.bitmap = htod32(bitmap_size); + header.specific.extent = htod32(extent_size); + + maxsize = (Bit64u)entries * (Bit64u)extent_size; + + flip++; + + if(flip&0x01) bitmap_size *= 2; + else entries *= 2; + } while (maxsize < size); + + header.specific.disk = htod64(size); + + print_header(); + + catalog = (Bit32u*)malloc(dtoh32(header.specific.catalog) * sizeof(Bit32u)); + bitmap = (Bit8u*)malloc(dtoh32(header.specific.bitmap)); + + if ((catalog == NULL) || (bitmap==NULL)) + BX_PANIC(("redolog : could not malloc catalog or bitmap")); + + for (Bit32u i=0; i= extent_next) + extent_next = dtoh32(catalog[i]) + 1; + } + } + BX_INFO(("redolog : next extent will be at index %d",extent_next)); + + // memory used for storing bitmaps + bitmap = (Bit8u *)malloc(dtoh32(header.specific.bitmap)); + + bitmap_blocks = 1 + (dtoh32(header.specific.bitmap) - 1) / 512; + extent_blocks = 1 + (dtoh32(header.specific.extent) - 1) / 512; + + BX_DEBUG(("redolog : each bitmap is %d blocks", bitmap_blocks)); + BX_DEBUG(("redolog : each extent is %d blocks", extent_blocks)); + + imagepos = 0; + + return 0; +} + +void redolog_t::close() +{ + if (fd >= 0) + ::close(fd); + + if (catalog != NULL) + free(catalog); + + if (bitmap != NULL) + free(bitmap); +} + +Bit64u redolog_t::get_size() +{ + return dtoh64(header.specific.disk); +} + +Bit64s redolog_t::lseek(Bit64s offset, int whence) +{ + if ((offset % 512) != 0) { + BX_PANIC(("redolog : lseek() offset not multiple of 512")); + return -1; + } + if (whence == SEEK_SET) { + imagepos = offset; + } else if (whence == SEEK_CUR) { + imagepos += offset; + } else { + BX_PANIC(("redolog: lseek() mode not supported yet")); + return -1; + } + if (imagepos > (Bit64s)dtoh64(header.specific.disk)) { + BX_PANIC(("redolog : lseek() to byte %ld failed", (long)offset)); + return -1; + } + + extent_index = (Bit32u)(imagepos / dtoh32(header.specific.extent)); + extent_offset = (Bit32u)((imagepos % dtoh32(header.specific.extent)) / 512); + + BX_DEBUG(("redolog : lseeking extent index %d, offset %d",extent_index, extent_offset)); + + return imagepos; +} + +ssize_t redolog_t::read(void* buf, size_t count) +{ + Bit64s block_offset, bitmap_offset; + ssize_t ret; + + if (count != 512) { + BX_PANIC(("redolog : read() with count not 512")); + return -1; + } + + BX_DEBUG(("redolog : reading index %d, mapping to %d", extent_index, dtoh32(catalog[extent_index]))); + + if (dtoh32(catalog[extent_index]) == REDOLOG_PAGE_NOT_ALLOCATED) { + // page not allocated + return 0; + } + + bitmap_offset = (Bit64s)STANDARD_HEADER_SIZE + (dtoh32(header.specific.catalog) * sizeof(Bit32u)); + bitmap_offset += (Bit64s)512 * dtoh32(catalog[extent_index]) * (extent_blocks + bitmap_blocks); + block_offset = bitmap_offset + ((Bit64s)512 * (bitmap_blocks + extent_offset)); + + BX_DEBUG(("redolog : bitmap offset is %x", (Bit32u)bitmap_offset)); + BX_DEBUG(("redolog : block offset is %x", (Bit32u)block_offset)); + + // FIXME if same extent_index as before we can skip bitmap read + + ::lseek(fd, (off_t)bitmap_offset, SEEK_SET); + + if (::read(fd, bitmap, dtoh32(header.specific.bitmap)) != (ssize_t)dtoh32(header.specific.bitmap)) { + BX_PANIC(("redolog : failed to read bitmap for extent %d", extent_index)); + return -1; + } + + if (((bitmap[extent_offset/8] >> (extent_offset%8)) & 0x01) == 0x00) { + BX_DEBUG(("read not in redolog")); + + // bitmap says block not in redolog + return 0; + } + + ::lseek(fd, (off_t)block_offset, SEEK_SET); + ret = ::read(fd, buf, count); + if (ret >= 0) lseek(512, SEEK_CUR); + + return ret; +} + +ssize_t redolog_t::write(const void* buf, size_t count) +{ + Bit32u i; + Bit64s block_offset, bitmap_offset, catalog_offset; + ssize_t written; + bx_bool update_catalog = 0; + + if (count != 512) { + BX_PANIC(("redolog : write() with count not 512")); + return -1; + } + + BX_DEBUG(("redolog : writing index %d, mapping to %d", extent_index, dtoh32(catalog[extent_index]))); + + if (dtoh32(catalog[extent_index]) == REDOLOG_PAGE_NOT_ALLOCATED) { + if (extent_next >= dtoh32(header.specific.catalog)) { + BX_PANIC(("redolog : can't allocate new extent... catalog is full")); + return -1; + } + + BX_DEBUG(("redolog : allocating new extent at %d", extent_next)); + + // Extent not allocated, allocate new + catalog[extent_index] = htod32(extent_next); + + extent_next += 1; + + char *zerobuffer = (char*)malloc(512); + memset(zerobuffer, 0, 512); + + // Write bitmap + bitmap_offset = (Bit64s)STANDARD_HEADER_SIZE + (dtoh32(header.specific.catalog) * sizeof(Bit32u)); + bitmap_offset += (Bit64s)512 * dtoh32(catalog[extent_index]) * (extent_blocks + bitmap_blocks); + ::lseek(fd, (off_t)bitmap_offset, SEEK_SET); + for (i=0; i> (extent_offset%8)) & 0x01) == 0x00) { + bitmap[extent_offset/8] |= 1 << (extent_offset%8); + ::lseek(fd, (off_t)bitmap_offset, SEEK_SET); + ::write(fd, bitmap, dtoh32(header.specific.bitmap)); + } + + // Write catalog + if (update_catalog) { + // FIXME if mmap + catalog_offset = (Bit64s)STANDARD_HEADER_SIZE + (extent_index * sizeof(Bit32u)); + + BX_DEBUG(("redolog : writing catalog at offset %x", (Bit32u)catalog_offset)); + + ::lseek(fd, (off_t)catalog_offset, SEEK_SET); + ::write(fd, &catalog[extent_index], sizeof(Bit32u)); + } + + if (written >= 0) lseek(512, SEEK_CUR); + + return written; +} + +/*** growing_image_t function definitions ***/ + +growing_image_t::growing_image_t() +{ + redolog = new redolog_t(); +} + +growing_image_t::~growing_image_t() +{ + delete redolog; +} + +int growing_image_t::open(const char* pathname) +{ + int filedes = redolog->open(pathname, REDOLOG_SUBTYPE_GROWING); + hd_size = redolog->get_size(); + BX_INFO(("'growing' disk opened, growing file is '%s'", pathname)); + return filedes; +} + +void growing_image_t::close() +{ + redolog->close(); +} + +Bit64s growing_image_t::lseek(Bit64s offset, int whence) +{ + return redolog->lseek(offset, whence); +} + +ssize_t growing_image_t::read(void* buf, size_t count) +{ + size_t n = 0; + ssize_t ret = 0; + + memset(buf, 0, count); + while (n < count) { + ret = redolog->read((char*) buf, 512); + if (ret < 0) break; + n += 512; + } + return (ret < 0) ? ret : count; +} + +ssize_t growing_image_t::write(const void* buf, size_t count) +{ + size_t n = 0; + ssize_t ret = 0; + + while (n < count) { + ret = redolog->write((char*) buf, 512); + if (ret < 0) break; + n += 512; + } + return (ret < 0) ? ret : count; +} + +/*** undoable_image_t function definitions ***/ + +undoable_image_t::undoable_image_t(const char* _redolog_name) +{ + redolog = new redolog_t(); + ro_disk = new default_image_t(); + redolog_name = NULL; + if (_redolog_name != NULL) { + if (strcmp(_redolog_name,"") != 0) { + redolog_name = strdup(_redolog_name); + } + } +} + +undoable_image_t::~undoable_image_t() +{ + delete redolog; + delete ro_disk; +} + +int undoable_image_t::open(const char* pathname) +{ + char *logname=NULL; + + if (ro_disk->open(pathname, O_RDONLY)<0) + return -1; + + hd_size = ro_disk->hd_size; + // if redolog name was set + if (redolog_name != NULL) { + if (strcmp(redolog_name, "") != 0) { + logname = (char*)malloc(strlen(redolog_name) + 1); + strcpy(logname, redolog_name); + } + } + + // Otherwise we make up the redolog filename from the pathname + if (logname == NULL) { + logname = (char*)malloc(strlen(pathname) + UNDOABLE_REDOLOG_EXTENSION_LENGTH + 1); + sprintf(logname, "%s%s", pathname, UNDOABLE_REDOLOG_EXTENSION); + } + + if (redolog->open(logname,REDOLOG_SUBTYPE_UNDOABLE) < 0) + { + if (redolog->create(logname, REDOLOG_SUBTYPE_UNDOABLE, hd_size) < 0) + { + BX_PANIC(("Can't open or create redolog '%s'",logname)); + return -1; + } + if (hd_size != redolog->get_size()) + { + BX_PANIC(("size reported by redolog doesn't match r/o disk size")); + free(logname); + return -1; + } + } + + BX_INFO(("'undoable' disk opened: ro-file is '%s', redolog is '%s'", pathname, logname)); + free(logname); + + return 0; +} + +void undoable_image_t::close () +{ + redolog->close(); + ro_disk->close(); + + if (redolog_name!=NULL) + free(redolog_name); +} + +Bit64s undoable_image_t::lseek(Bit64s offset, int whence) +{ + redolog->lseek(offset, whence); + return ro_disk->lseek(offset, whence); +} + +ssize_t undoable_image_t::read(void* buf, size_t count) +{ + size_t n = 0; + ssize_t ret = 0; + + while (n < count) { + if ((size_t)redolog->read((char*) buf, 512) != 512) { + ret = ro_disk->read((char*) buf, 512); + if (ret < 0) break; + } + n += 512; + } + return (ret < 0) ? ret : count; +} + +ssize_t undoable_image_t::write(const void* buf, size_t count) +{ + size_t n = 0; + ssize_t ret = 0; + + while (n < count) { + ret = redolog->write((char*) buf, 512); + if (ret < 0) break; + n += 512; + } + return (ret < 0) ? ret : count; +} + +/*** volatile_image_t function definitions ***/ + +volatile_image_t::volatile_image_t(const char* _redolog_name) +{ + redolog = new redolog_t(); + ro_disk = new default_image_t(); + redolog_temp = NULL; + redolog_name = NULL; + if (_redolog_name != NULL) { + if (strcmp(_redolog_name,"") != 0) { + redolog_name = strdup(_redolog_name); + } + } +} + +volatile_image_t::~volatile_image_t() +{ + delete redolog; + delete ro_disk; +} + +int volatile_image_t::open(const char* pathname) +{ + int filedes; + const char *logname=NULL; + + if (ro_disk->open(pathname, O_RDONLY)<0) + return -1; + + hd_size = ro_disk->hd_size; + // if redolog name was set + if (redolog_name != NULL) { + if (strcmp(redolog_name, "") != 0) { + logname = redolog_name; + } + } + + // otherwise use pathname as template + if (logname == NULL) { + logname = pathname; + } + + redolog_temp = (char*)malloc(strlen(logname) + VOLATILE_REDOLOG_EXTENSION_LENGTH + 1); + sprintf (redolog_temp, "%s%s", logname, VOLATILE_REDOLOG_EXTENSION); + + filedes = mkstemp (redolog_temp); + + if (filedes < 0) + { + BX_PANIC(("Can't create volatile redolog '%s'", redolog_temp)); + return -1; + } + if (redolog->create(filedes, REDOLOG_SUBTYPE_VOLATILE, hd_size) < 0) + { + BX_PANIC(("Can't create volatile redolog '%s'", redolog_temp)); + return -1; + } + +#if (!defined(WIN32)) && !BX_WITH_MACOS + // on unix it is legal to delete an open file + unlink(redolog_temp); +#endif + + BX_INFO(("'volatile' disk opened: ro-file is '%s', redolog is '%s'", pathname, redolog_temp)); + + return 0; +} + +void volatile_image_t::close() +{ + redolog->close(); + ro_disk->close(); + +#if defined(WIN32) || BX_WITH_MACOS + // on non-unix we have to wait till the file is closed to delete it + unlink(redolog_temp); +#endif + if (redolog_temp!=NULL) + free(redolog_temp); + + if (redolog_name!=NULL) + free(redolog_name); +} + +Bit64s volatile_image_t::lseek(Bit64s offset, int whence) +{ + redolog->lseek(offset, whence); + return ro_disk->lseek(offset, whence); +} + +ssize_t volatile_image_t::read(void* buf, size_t count) +{ + size_t n = 0; + ssize_t ret = 0; + + while (n < count) { + if ((size_t)redolog->read((char*) buf, 512) != 512) { + ret = ro_disk->read((char*) buf, 512); + if (ret < 0) break; + } + n += 512; + } + return (ret < 0) ? ret : count; +} + +ssize_t volatile_image_t::write(const void* buf, size_t count) +{ + size_t n = 0; + ssize_t ret = 0; + + while (n < count) { + ret = redolog->write((char*) buf, 512); + if (ret < 0) break; + n += 512; + } + return (ret < 0) ? ret : count; +} + +#if BX_COMPRESSED_HD_SUPPORT + +/*** z_ro_image_t function definitions ***/ + +z_ro_image_t::z_ro_image_t() +{ + offset = (Bit64s)0; +} + +int z_ro_image_t::open(const char* pathname) +{ + fd = ::open(pathname, O_RDONLY +#ifdef O_BINARY + | O_BINARY +#endif + ); + + if (fd < 0) + { + BX_PANIC(("Could not open '%s' file", pathname)); + return fd; + } + + gzfile = gzdopen(fd, "rb"); + return 0; +} + +void z_ro_image_t::close() +{ + if (fd > -1) { + gzclose(gzfile); + // ::close(fd); + } +} + +Bit64s z_ro_image_t::lseek(Bit64s _offset, int whence) +{ + // Only SEEK_SET supported + if (whence != SEEK_SET) + { + BX_PANIC(("lseek on compressed images : only SEEK_SET supported")); + } + + // Seeking is expensive on compressed files, so we do it + // only when necessary, at the latest moment + offset = _offset; + + return offset; +} + +ssize_t z_ro_image_t::read(void* buf, size_t count) +{ + gzseek(gzfile, offset, SEEK_SET); + return gzread(gzfile, buf, count); +} + +ssize_t z_ro_image_t::write(const void* buf, size_t count) +{ + BX_PANIC(("z_ro_image: write not supported")); + return 0; +} + + +/*** z_undoable_image_t function definitions ***/ + +z_undoable_image_t::z_undoable_image_t(Bit64u _size, const char* _redolog_name) +{ + redolog = new redolog_t(); + ro_disk = new z_ro_image_t(); + size = _size; + + redolog_name = NULL; + if (_redolog_name != NULL) { + if (strcmp(_redolog_name,"") != 0) { + redolog_name = strdup(_redolog_name); + } + } +} + +z_undoable_image_t::~z_undoable_image_t() +{ + delete redolog; + delete ro_disk; +} + +int z_undoable_image_t::open(const char* pathname) +{ + char *logname=NULL; + + if (ro_disk->open(pathname)<0) + return -1; + + // If redolog name was set + if (redolog_name != NULL) { + if (strcmp(redolog_name, "") != 0) { + logname = (char*)malloc(strlen(redolog_name) + 1); + strcpy (logname, redolog_name); + } + } + + // Otherwise we make up the redolog filename from the pathname + if (logname == NULL) { + logname = (char*)malloc(strlen(pathname) + UNDOABLE_REDOLOG_EXTENSION_LENGTH + 1); + sprintf (logname, "%s%s", pathname, UNDOABLE_REDOLOG_EXTENSION); + } + + if (redolog->open(logname, REDOLOG_SUBTYPE_UNDOABLE) < 0) + { + if (redolog->create(logname, REDOLOG_SUBTYPE_UNDOABLE, size) < 0) + { + BX_PANIC(("Can't open or create redolog '%s'",logname)); + return -1; + } + } + + BX_INFO(("'z-undoable' disk opened, z-ro-file is '%s', redolog is '%s'", pathname, logname)); + free(logname); + + return 0; +} + +void z_undoable_image_t::close() +{ + redolog->close(); + ro_disk->close(); + + if (redolog_name!=NULL) + free(redolog_name); +} + +Bit64s z_undoable_image_t::lseek(Bit64s offset, int whence) +{ + redolog->lseek(offset, whence); + return ro_disk->lseek(offset, whence); +} + +ssize_t z_undoable_image_t::read(void* buf, size_t count) +{ + // This should be fixed if count != 512 + if (redolog->read((char*) buf, count) != count) + return ro_disk->read((char*) buf, count); + else + return count; +} + +ssize_t z_undoable_image_t::write(const void* buf, size_t count) +{ + return redolog->write((char*) buf, count); +} + + +/*** z_volatile_image_t function definitions ***/ + +z_volatile_image_t::z_volatile_image_t(Bit64u _size, const char* _redolog_name) +{ + redolog = new redolog_t(); + ro_disk = new z_ro_image_t(); + size = _size; + + redolog_temp = NULL; + redolog_name = NULL; + if (_redolog_name != NULL) { + if (strcmp(_redolog_name,"") != 0) { + redolog_name = strdup(_redolog_name); + } + } +} + +z_volatile_image_t::~z_volatile_image_t() +{ + delete redolog; + delete ro_disk; +} + +int z_volatile_image_t::open(const char* pathname) +{ + int filedes; + const char *logname=NULL; + + if (ro_disk->open(pathname)<0) + return -1; + + // if redolog name was set + if (redolog_name != NULL) { + if (strcmp(redolog_name, "") != 0) { + logname = redolog_name; + } + } + + // otherwise use pathname as template + if (logname == NULL) { + logname = pathname; + } + + redolog_temp = (char*)malloc(strlen(logname) + VOLATILE_REDOLOG_EXTENSION_LENGTH + 1); + sprintf (redolog_temp, "%s%s", logname, VOLATILE_REDOLOG_EXTENSION); + + filedes = mkstemp (redolog_temp); + + if (filedes < 0) + { + BX_PANIC(("Can't create volatile redolog '%s'", redolog_temp)); + return -1; + } + if (redolog->create(filedes, REDOLOG_SUBTYPE_VOLATILE, size) < 0) + { + BX_PANIC(("Can't create volatile redolog '%s'", redolog_temp)); + return -1; + } + +#if (!defined(WIN32)) && !BX_WITH_MACOS + // on unix it is legal to delete an open file + unlink(redolog_temp); +#endif + + BX_INFO(("'z-volatile' disk opened: z-ro-file is '%s', redolog is '%s'", pathname, redolog_temp)); + + return 0; +} + +void z_volatile_image_t::close () +{ + redolog->close(); + ro_disk->close(); + +#if defined(WIN32) || BX_WITH_MACOS + // on non-unix we have to wait till the file is closed to delete it + unlink(redolog_temp); +#endif + + if (redolog_temp!=NULL) + free(redolog_temp); + + if (redolog_name!=NULL) + free(redolog_name); +} + +Bit64s z_volatile_image_t::lseek(Bit64s offset, int whence) +{ + redolog->lseek(offset, whence); + return ro_disk->lseek(offset, whence); +} + +ssize_t z_volatile_image_t::read (void* buf, size_t count) +{ + // This should be fixed if count != 512 + if (redolog->read((char*) buf, count) != count) + return ro_disk->read((char*) buf, count); + else + return count; +} + +ssize_t z_volatile_image_t::write (const void* buf, size_t count) +{ + return redolog->write((char*) buf, count); +} + +#endif diff --git a/bochs/iodev/hdimage.h b/bochs/iodev/hdimage.h new file mode 100644 index 00000000..06a6fea2 --- /dev/null +++ b/bochs/iodev/hdimage.h @@ -0,0 +1,590 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2005-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_HDIMAGE_H +#define BX_HDIMAGE_H + +// hdimage capabilities +#define HDIMAGE_READONLY 1 +#define HDIMAGE_HAS_GEOMETRY 2 +#define HDIMAGE_AUTO_GEOMETRY 4 + +// SPARSE IMAGES HEADER +#define SPARSE_HEADER_MAGIC (0x02468ace) +#define SPARSE_HEADER_VERSION 2 +#define SPARSE_HEADER_V1 1 +#define SPARSE_HEADER_SIZE (256) // Plenty of room for later +#define SPARSE_PAGE_NOT_ALLOCATED (0xffffffff) + + typedef struct + { + Bit32u magic; + Bit32u version; + Bit32u pagesize; + Bit32u numpages; + Bit64u disk; + + Bit32u padding[58]; + } sparse_header_t; + +#define STANDARD_HEADER_MAGIC "Bochs Virtual HD Image" +#define STANDARD_HEADER_V1 (0x00010000) +#define STANDARD_HEADER_VERSION (0x00020000) +#define STANDARD_HEADER_SIZE (512) + + + // WARNING : headers are kept in x86 (little) endianness + typedef struct + { + Bit8u magic[32]; + Bit8u type[16]; + Bit8u subtype[16]; + Bit32u version; + Bit32u header; + } standard_header_t; + +#define REDOLOG_TYPE "Redolog" +#define REDOLOG_SUBTYPE_UNDOABLE "Undoable" +#define REDOLOG_SUBTYPE_VOLATILE "Volatile" +#define REDOLOG_SUBTYPE_GROWING "Growing" +// #define REDOLOG_SUBTYPE_Z_UNDOABLE "z-Undoable" +// #define REDOLOG_SUBTYPE_Z_VOLATILE "z-Volatile" + +#define REDOLOG_PAGE_NOT_ALLOCATED (0xffffffff) + +#define UNDOABLE_REDOLOG_EXTENSION ".redolog" +#define UNDOABLE_REDOLOG_EXTENSION_LENGTH (strlen(UNDOABLE_REDOLOG_EXTENSION)) +#define VOLATILE_REDOLOG_EXTENSION ".XXXXXX" +#define VOLATILE_REDOLOG_EXTENSION_LENGTH (strlen(VOLATILE_REDOLOG_EXTENSION)) + + typedef struct + { + // the fields in the header are kept in little endian + Bit32u catalog; // #entries in the catalog + Bit32u bitmap; // bitmap size in bytes + Bit32u extent; // extent size in bytes + Bit32u reserved; // for data alignment + Bit64u disk; // disk size in bytes + } redolog_specific_header_t; + + typedef struct + { + // the fields in the header are kept in little endian + Bit32u catalog; // #entries in the catalog + Bit32u bitmap; // bitmap size in bytes + Bit32u extent; // extent size in bytes + Bit64u disk; // disk size in bytes + } redolog_specific_header_v1_t; + + typedef struct + { + standard_header_t standard; + redolog_specific_header_t specific; + + Bit8u padding[STANDARD_HEADER_SIZE - (sizeof (standard_header_t) + sizeof (redolog_specific_header_t))]; + } redolog_header_t; + + typedef struct + { + standard_header_t standard; + redolog_specific_header_v1_t specific; + + Bit8u padding[STANDARD_HEADER_SIZE - (sizeof (standard_header_t) + sizeof (redolog_specific_header_v1_t))]; + } redolog_header_v1_t; + +// htod : convert host to disk (little) endianness +// dtoh : convert disk (little) to host endianness +#if defined (BX_LITTLE_ENDIAN) +#define htod32(val) (val) +#define dtoh32(val) (val) +#define htod64(val) (val) +#define dtoh64(val) (val) +#else +#define htod32(val) ( (((val)&0xff000000)>>24) | (((val)&0xff0000)>>8) | (((val)&0xff00)<<8) | (((val)&0xff)<<24) ) +#define dtoh32(val) htod32(val) +#define htod64(val) ( (((val)&0xff00000000000000LL)>>56) | (((val)&0xff000000000000LL)>>40) | (((val)&0xff0000000000LL)>>24) | (((val)&0xff00000000LL)>>8) | (((val)&0xff000000LL)<<8) | (((val)&0xff0000LL)<<24) | (((val)&0xff00LL)<<40) | (((val)&0xffLL)<<56) ) +#define dtoh64(val) htod64(val) +#endif + +#ifndef HDIMAGE_HEADERS_ONLY + +class device_image_t +{ + public: + // Default constructor + device_image_t(); + virtual ~device_image_t() {} + + // Open a image. Returns non-negative if successful. + virtual int open(const char* pathname) = 0; + + // Close the image. + virtual void close() = 0; + + // Position ourselves. Return the resulting offset from the + // beginning of the file. + virtual Bit64s lseek(Bit64s offset, int whence) = 0; + + // Read count bytes to the buffer buf. Return the number of + // bytes read (count). + virtual ssize_t read(void* buf, size_t count) = 0; + + // Write count bytes from buf. Return the number of bytes + // written (count). + virtual ssize_t write(const void* buf, size_t count) = 0; + + // Get image capabilities + virtual Bit32u get_capabilities(); + + unsigned cylinders; + unsigned heads; + unsigned sectors; + Bit64u hd_size; +}; + +// FLAT MODE +class default_image_t : public device_image_t +{ + public: + // Open a image. Returns non-negative if successful. + int open(const char* pathname); + + // Open an image with specific flags. Returns non-negative if successful. + int open(const char* pathname, int flags); + + // Close the image. + void close(); + + // Position ourselves. Return the resulting offset from the + // beginning of the file. + Bit64s lseek(Bit64s offset, int whence); + + // Read count bytes to the buffer buf. Return the number of + // bytes read (count). + ssize_t read(void* buf, size_t count); + + // Write count bytes from buf. Return the number of bytes + // written (count). + ssize_t write(const void* buf, size_t count); + + private: + int fd; + +}; + +// CONCAT MODE +class concat_image_t : public device_image_t +{ + public: + // Default constructor + concat_image_t(); + + // Open a image. Returns non-negative if successful. + int open(const char* pathname); + + // Close the image. + void close(); + + // Position ourselves. Return the resulting offset from the + // beginning of the file. + Bit64s lseek(Bit64s offset, int whence); + + // Read count bytes to the buffer buf. Return the number of + // bytes read (count). + ssize_t read(void* buf, size_t count); + + // Write count bytes from buf. Return the number of bytes + // written (count). + ssize_t write(const void* buf, size_t count); + + private: +#define BX_CONCAT_MAX_IMAGES 8 + int fd_table[BX_CONCAT_MAX_IMAGES]; + Bit64s start_offset_table[BX_CONCAT_MAX_IMAGES]; + Bit64s length_table[BX_CONCAT_MAX_IMAGES]; + void increment_string(char *str); + int maxfd; // number of entries in tables that are valid + + // notice if anyone does sequential read or write without seek in between. + // This can be supported pretty easily, but needs additional checks. + // 0=something other than seek was last operation + // 1=seek was last operation + int seek_was_last_op; + + // the following variables tell which partial image file to use for + // the next read and write. + int index; // index into table + int fd; // fd to use for reads and writes + Bit64s thismin, thismax; // byte offset boundary of this image +}; + +// SPARSE MODE +class sparse_image_t : public device_image_t +{ + +// Format of a sparse file: +// 256 byte header, containing details such as page size and number of pages +// Page indirection table, mapping virtual pages to physical pages within file +// Physical pages till end of file + + public: + // Default constructor + sparse_image_t(); + + // Open a image. Returns non-negative if successful. + int open(const char* pathname); + + // Close the image. + void close(); + + // Position ourselves. Return the resulting offset from the + // beginning of the file. + Bit64s lseek(Bit64s offset, int whence); + + // Read count bytes to the buffer buf. Return the number of + // bytes read (count). + ssize_t read(void* buf, size_t count); + + // Write count bytes from buf. Return the number of bytes + // written (count). + ssize_t write(const void* buf, size_t count); + + private: + int fd; + +#ifdef _POSIX_MAPPED_FILES + void * mmap_header; + size_t mmap_length; + size_t system_pagesize_mask; +#endif + Bit32u * pagetable; + + // Header is written to disk in little-endian (x86) format + // Thus needs to be converted on big-endian systems before read + // The pagetable is also kept little endian + + sparse_header_t header; + + Bit32u pagesize; + int pagesize_shift; + Bit32u pagesize_mask; + + Bit64s data_start; + Bit64s underlying_filesize; + + char * pathname; + + Bit64s position; + + Bit32u position_virtual_page; + Bit32u position_physical_page; + Bit32u position_page_offset; + + Bit64s underlying_current_filepos; + + Bit64s total_size; + + void panic(const char * message); + Bit64s get_physical_offset(); + void set_virtual_page(Bit32u new_virtual_page); + void read_header(); + ssize_t read_page_fragment(Bit32u read_virtual_page, Bit32u read_page_offset, size_t read_size, void * buf); + + sparse_image_t * parent_image; +}; + +#if EXTERNAL_DISK_SIMULATOR +#include "external-disk-simulator.h" +#endif + +#if DLL_HD_SUPPORT +class dll_image_t : public device_image_t +{ + public: + // Open a image. Returns non-negative if successful. + int open(const char* pathname); + + // Close the image. + void close(); + + // Position ourselves. Return the resulting offset from the + // beginning of the file. + Bit64s lseek(Bit64s offset, int whence); + + // Read count bytes to the buffer buf. Return the number of + // bytes read (count). + ssize_t read(void* buf, size_t count); + + // Write count bytes from buf. Return the number of bytes + // written (count). + ssize_t write(const void* buf, size_t count); + + private: + int vunit,vblk; + +}; +#endif + +// REDOLOG class +class redolog_t +{ + public: + redolog_t(); + int make_header(const char* type, Bit64u size); + int create(const char* filename, const char* type, Bit64u size); + int create(int filedes, const char* type, Bit64u size); + int open(const char* filename, const char* type); + void close(); + Bit64u get_size(); + + Bit64s lseek(Bit64s offset, int whence); + ssize_t read(void* buf, size_t count); + ssize_t write(const void* buf, size_t count); + + private: + void print_header(); + int fd; + redolog_header_t header; // Header is kept in x86 (little) endianness + Bit32u *catalog; + Bit8u *bitmap; + Bit32u extent_index; + Bit32u extent_offset; + Bit32u extent_next; + + Bit32u bitmap_blocks; + Bit32u extent_blocks; + + Bit64s imagepos; +}; + +// GROWING MODE +class growing_image_t : public device_image_t +{ + public: + // Contructor + growing_image_t(); + virtual ~growing_image_t(); + + // Open a image. Returns non-negative if successful. + int open(const char* pathname); + + // Close the image. + void close(); + + // Position ourselves. Return the resulting offset from the + // beginning of the file. + Bit64s lseek(Bit64s offset, int whence); + + // Read count bytes to the buffer buf. Return the number of + // bytes read (count). + ssize_t read(void* buf, size_t count); + + // Write count bytes from buf. Return the number of bytes + // written (count). + ssize_t write(const void* buf, size_t count); + + private: + redolog_t *redolog; +}; + +// UNDOABLE MODE +class undoable_image_t : public device_image_t +{ + public: + // Contructor + undoable_image_t(const char* redolog_name); + virtual ~undoable_image_t(); + + // Open a image. Returns non-negative if successful. + int open(const char* pathname); + + // Close the image. + void close(); + + // Position ourselves. Return the resulting offset from the + // beginning of the file. + Bit64s lseek(Bit64s offset, int whence); + + // Read count bytes to the buffer buf. Return the number of + // bytes read (count). + ssize_t read(void* buf, size_t count); + + // Write count bytes from buf. Return the number of bytes + // written (count). + ssize_t write(const void* buf, size_t count); + + private: + redolog_t *redolog; // Redolog instance + default_image_t *ro_disk; // Read-only flat disk instance + char *redolog_name; // Redolog name +}; + + +// VOLATILE MODE +class volatile_image_t : public device_image_t +{ + public: + // Contructor + volatile_image_t(const char* redolog_name); + virtual ~volatile_image_t(); + + // Open a image. Returns non-negative if successful. + int open(const char* pathname); + + // Close the image. + void close(); + + // Position ourselves. Return the resulting offset from the + // beginning of the file. + Bit64s lseek(Bit64s offset, int whence); + + // Read count bytes to the buffer buf. Return the number of + // bytes read (count). + ssize_t read(void* buf, size_t count); + + // Write count bytes from buf. Return the number of bytes + // written (count). + ssize_t write(const void* buf, size_t count); + + private: + redolog_t *redolog; // Redolog instance + default_image_t *ro_disk; // Read-only flat disk instance + char *redolog_name; // Redolog name + char *redolog_temp; // Redolog temporary file name +}; + + +#if BX_COMPRESSED_HD_SUPPORT + +#include + + +// Default compressed READ-ONLY image class +class z_ro_image_t : public device_image_t +{ + public: + // Contructor + z_ro_image_t(); + + // Open a image. Returns non-negative if successful. + int open(const char* pathname); + + // Close the image. + void close(); + + // Position ourselves. Return the resulting offset from the + // beginning of the file. + Bit64s lseek(Bit64s offset, int whence); + + // Read count bytes to the buffer buf. Return the number of + // bytes read (count). + ssize_t read(void* buf, size_t count); + + // Write count bytes from buf. Return the number of bytes + // written (count). + ssize_t write(const void* buf, size_t count); + + private: + Bit64s offset; + int fd; + gzFile gzfile; + +}; + +// Z-UNDOABLE MODE +class z_undoable_image_t : public device_image_t +{ + public: + // Contructor + z_undoable_image_t(Bit64u size, const char* redolog_name); + virtual ~z_undoable_image_t(); + + // Open a image. Returns non-negative if successful. + int open(const char* pathname); + + // Close the image. + void close(); + + // Position ourselves. Return the resulting offset from the + // beginning of the file. + Bit64s lseek(Bit64s offset, int whence); + + // Read count bytes to the buffer buf. Return the number of + // bytes read (count). + ssize_t read(void* buf, size_t count); + + // Write count bytes from buf. Return the number of bytes + // written (count). + ssize_t write(const void* buf, size_t count); + + private: + redolog_t *redolog; // Redolog instance + z_ro_image_t *ro_disk; // Read-only compressed flat disk instance + Bit64u size; + char *redolog_name; // Redolog name +}; + +// Z-VOLATILE MODE +class z_volatile_image_t : public device_image_t +{ + public: + // Contructor + z_volatile_image_t(Bit64u size, const char* redolog_name); + virtual ~z_volatile_image_t(); + + // Open a image. Returns non-negative if successful. + int open(const char* pathname); + + // Close the image. + void close(); + + // Position ourselves. Return the resulting offset from the + // beginning of the file. + Bit64s lseek(Bit64s offset, int whence); + + // Read count bytes to the buffer buf. Return the number of + // bytes read (count). + ssize_t read(void* buf, size_t count); + + // Write count bytes from buf. Return the number of bytes + // written (count). + ssize_t write(const void* buf, size_t count); + + private: + redolog_t *redolog; // Redolog instance + z_ro_image_t *ro_disk; // Read-only compressed flat disk instance + Bit64u size; + char *redolog_name; // Redolog name + char *redolog_temp; // Redolog temporary file name +}; + +#endif + +class bx_hdimage_ctl_c : public bx_hdimage_ctl_stub_c { +public: + bx_hdimage_ctl_c(); + virtual ~bx_hdimage_ctl_c() {} + virtual device_image_t *init_image(Bit8u image_mode, Bit64u disk_size, const char *journal); +}; + + +#endif // HDIMAGE_HEADERS_ONLY + +#endif diff --git a/bochs/iodev/ioapic.cc b/bochs/iodev/ioapic.cc new file mode 100644 index 00000000..1c72d37f --- /dev/null +++ b/bochs/iodev/ioapic.cc @@ -0,0 +1,308 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_APIC + +#include "ioapic.h" + +#define LOG_THIS theIOAPIC-> + +bx_ioapic_c *theIOAPIC = NULL; + +int libioapic_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theIOAPIC = new bx_ioapic_c(); + bx_devices.pluginIOAPIC = theIOAPIC; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theIOAPIC, BX_PLUGIN_IOAPIC); + return(0); // Success +} + +void libioapic_LTX_plugin_fini(void) +{ + delete theIOAPIC; +} + +static bx_bool ioapic_read(bx_phy_address a20addr, unsigned len, void *data, void *param) +{ + if((a20addr & ~0x3) != ((a20addr+len-1) & ~0x3)) { + BX_PANIC(("I/O APIC read at address 0x" FMT_PHY_ADDRX " spans 32-bit boundary !", a20addr)); + return 1; + } + Bit32u value = theIOAPIC->read_aligned(a20addr & ~0x3); + if(len == 4) { // must be 32-bit aligned + *((Bit32u *)data) = value; + return 1; + } + // handle partial read, independent of endian-ness + value >>= (a20addr&3)*8; + if (len == 1) + *((Bit8u *) data) = value & 0xff; + else if (len == 2) + *((Bit16u *)data) = value & 0xffff; + else + BX_PANIC(("Unsupported I/O APIC read at address 0x" FMT_PHY_ADDRX ", len=%d", a20addr, len)); + + return 1; +} + +static bx_bool ioapic_write(bx_phy_address a20addr, unsigned len, void *data, void *param) +{ + if (len != 4) { + BX_PANIC(("I/O apic write with len=%d (should be 4)", len)); + return 1; + } + + if(a20addr & 0xf) { + BX_PANIC(("I/O apic write at unaligned address 0x" FMT_PHY_ADDRX, a20addr)); + return 1; + } + + theIOAPIC->write_aligned(a20addr, *((Bit32u*) data)); + return 1; +} + +void bx_io_redirect_entry_t::sprintf_self(char *buf) +{ + sprintf(buf, "dest=%02x, masked=%d, trig_mode=%d, remote_irr=%d, polarity=%d, delivery_status=%d, dest_mode=%d, delivery_mode=%d, vector=%02x", + (unsigned) destination(), + (unsigned) is_masked(), + (unsigned) trigger_mode(), + (unsigned) remote_irr(), + (unsigned) pin_polarity(), + (unsigned) delivery_status(), + (unsigned) destination_mode(), + (unsigned) delivery_mode(), + (unsigned) vector()); +} + +void bx_io_redirect_entry_t::register_state(bx_param_c *parent) +{ + BXRS_HEX_PARAM_SIMPLE(parent, lo); + BXRS_HEX_PARAM_SIMPLE(parent, hi); +} + +#define BX_IOAPIC_BASE_ADDR (0xfec00000) +#define BX_IOAPIC_DEFAULT_ID (BX_SMP_PROCESSORS) + +bx_ioapic_c::bx_ioapic_c(): base_addr(BX_IOAPIC_BASE_ADDR) +{ + set_id(BX_IOAPIC_DEFAULT_ID); + put("IOAP"); +} + +void bx_ioapic_c::init(void) +{ + BX_INFO(("initializing I/O APIC")); + DEV_register_memory_handlers(theIOAPIC, + ioapic_read, ioapic_write, base_addr, base_addr + 0xfff); + reset(BX_RESET_HARDWARE); +} + +void bx_ioapic_c::reset(unsigned type) +{ + // all interrupts masked + for (int i=0; i> 1; + if (index >= 0 && index < BX_IOAPIC_NUM_PINS) { + bx_io_redirect_entry_t *entry = ioredtbl + index; + data = (ioregsel&1) ? entry->get_hi_part() : entry->get_lo_part(); + break; + } + BX_PANIC(("IOAPIC: IOREGSEL points to undefined register %02x", ioregsel)); + } + + return data; +} + +void bx_ioapic_c::write_aligned(bx_phy_address address, Bit32u value) +{ + BX_DEBUG(("IOAPIC: write aligned addr=%08x, data=%08x", (unsigned) address, value)); + address &= 0xff; + if (address == 0x00) { + ioregsel = value; + return; + } else { + if (address != 0x10) + BX_PANIC(("IOAPIC: write to unsupported address")); + } + // only reached when writing data register + switch (ioregsel) { + case 0x00: // set APIC ID + { + Bit8u newid = (value >> 24) & apic_id_mask; + BX_INFO(("IOAPIC: setting id to 0x%x", newid)); + set_id (newid); + return; + } + case 0x01: // version + case 0x02: // arbitration id + BX_INFO(("IOAPIC: could not write, IOREGSEL=0x%02x", ioregsel)); + return; + default: + int index = (ioregsel - 0x10) >> 1; + if (index >= 0 && index < BX_IOAPIC_NUM_PINS) { + bx_io_redirect_entry_t *entry = ioredtbl + index; + if (ioregsel&1) + entry->set_hi_part(value); + else + entry->set_lo_part(value); + char buf[1024]; + entry->sprintf_self(buf); + BX_DEBUG(("IOAPIC: now entry[%d] is %s", index, buf)); + service_ioapic(); + return; + } + BX_PANIC(("IOAPIC: IOREGSEL points to undefined register %02x", ioregsel)); + } +} + +void bx_ioapic_c::set_irq_level(Bit8u int_in, bx_bool level) +{ + BX_DEBUG(("set_irq_level(): INTIN%d: level=%d", int_in, level)); + if (int_in < BX_IOAPIC_NUM_PINS) { + Bit32u bit = 1<trigger_mode()) { + // level triggered + if (level) { + intin |= bit; + irr |= bit; + service_ioapic(); + } else { + intin &= ~bit; + irr &= ~bit; + } + } else { + // edge triggered + if (level) { + intin |= bit; + irr |= bit; + service_ioapic(); + } else { + intin &= ~bit; + } + } + } + } +} + +void bx_ioapic_c::receive_eoi(Bit8u vector) +{ + BX_DEBUG(("IOAPIC: received EOI for vector %d", vector)); +} + +void bx_ioapic_c::service_ioapic() +{ + static unsigned int stuck = 0; + Bit8u vector = 0; + // look in IRR and deliver any interrupts that are not masked. + BX_DEBUG(("IOAPIC: servicing")); + for (unsigned bit=0; bit < BX_IOAPIC_NUM_PINS; bit++) { + Bit32u mask = 1<is_masked()) { + // clear irr bit and deliver + if (entry->delivery_mode() == 7) { + vector = DEV_pic_iac(); + } else { + vector = entry->vector(); + } + bx_bool done = apic_bus_deliver_interrupt(vector, entry->destination(), entry->delivery_mode(), entry->destination_mode(), entry->pin_polarity(), entry->trigger_mode()); + if (done) { + if (! entry->trigger_mode()) + irr &= ~mask; + entry->clear_delivery_status(); + stuck = 0; + } else { + entry->set_delivery_status(); + stuck++; + if (stuck > 5) + BX_INFO(("vector %#x stuck?", vector)); + } + } + else { + BX_DEBUG(("service_ioapic(): INTIN%d is masked", bit)); + } + } + } +} + +void bx_ioapic_c::register_state(void) +{ + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "ioapic", "IOAPIC State", 4); + + BXRS_HEX_PARAM_SIMPLE(list, ioregsel); + BXRS_HEX_PARAM_SIMPLE(list, intin); + BXRS_HEX_PARAM_SIMPLE(list, irr); + + bx_list_c *table = new bx_list_c(list, "ioredtbl", BX_IOAPIC_NUM_PINS); + for (unsigned i=0; i> 24); } + bx_bool is_masked() const { return (bx_bool)((lo >> 16) & 1); } + Bit8u trigger_mode() const { return (Bit8u)((lo >> 15) & 1); } + bx_bool remote_irr() const { return (bx_bool)((lo >> 14) & 1); } + Bit8u pin_polarity() const { return (Bit8u)((lo >> 13) & 1); } + bx_bool delivery_status() const { return (bx_bool)((lo >> 12) & 1); } + Bit8u destination_mode() const { return (Bit8u)((lo >> 11) & 1); } + Bit8u delivery_mode() const { return (Bit8u)((lo >> 8) & 7); } + Bit8u vector() const { return (Bit8u)(lo & 0xff); } + + void set_delivery_status() { lo |= (1<<12); } + void clear_delivery_status() { lo &= ~(1<<12); } + void set_remote_irr() { lo |= (1<<14); } + void clear_remote_irr() { lo &= ~(1<<14); } + + Bit32u get_lo_part () const { return lo; } + Bit32u get_hi_part () const { return hi; } + void set_lo_part (Bit32u val_lo_part) { + // keep high 32 bits of value, replace low 32, ignore R/O bits + lo = val_lo_part & 0xffffafff; + } + void set_hi_part (Bit32u val_hi_part) { + // keep low 32 bits of value, replace high 32 + hi = val_hi_part; + } + void sprintf_self(char *buf); + void register_state(bx_param_c *parent); +}; + +class bx_ioapic_c : public bx_ioapic_stub_c { +public: + bx_ioapic_c(); + virtual ~bx_ioapic_c() {} + virtual void init(); + virtual void reset(unsigned type); + virtual void register_state(void); + + virtual void receive_eoi(Bit8u vector); + virtual void set_irq_level(Bit8u int_in, bx_bool level); + + Bit32u read_aligned(bx_phy_address address); + void write_aligned(bx_phy_address address, Bit32u data); + +private: + bx_phy_address get_base(void) const { return base_addr; } + void set_id(Bit32u new_id) { id = new_id; } + Bit32u get_id() const { return id; } + + void service_ioapic(void); + + bx_phy_address base_addr; + Bit32u id; + + Bit32u ioregsel; // selects between various registers + Bit32u intin; + // interrupt request bitmask, not visible from the outside. Bits in the + // irr are set when trigger_irq is called, and cleared when the interrupt + // is delivered to the processor. If an interrupt is masked, the irr + // will still be set but delivery will not occur until it is unmasked. + // It's not clear if this is how the real device works. + Bit32u irr; + + bx_io_redirect_entry_t ioredtbl[BX_IOAPIC_NUM_PINS]; // table of redirections +}; + +#endif + +#endif diff --git a/bochs/iodev/iodebug.cc b/bochs/iodev/iodebug.cc new file mode 100644 index 00000000..0be25706 --- /dev/null +++ b/bochs/iodev/iodebug.cc @@ -0,0 +1,343 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_IODEBUG + +#include "cpu/cpu.h" +#include "iodebug.h" + +#define BX_IODEBUG_THIS this-> + +bx_iodebug_c *theIODebugDevice = NULL; + +int libiodebug_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theIODebugDevice = new bx_iodebug_c(); + bx_devices.pluginIODebug = theIODebugDevice; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theIODebugDevice, BX_PLUGIN_IODEBUG); + return(0); // Success +} + +void libiodebug_LTX_plugin_fini(void) +{ + delete theIODebugDevice; +} + +struct bx_iodebug_s_type { + bx_bool enabled; + unsigned register_select; + Bit32u registers[2]; + bx_phy_address monitored_mem_areas_start[BX_IODEBUG_MAX_AREAS]; + bx_phy_address monitored_mem_areas_end[BX_IODEBUG_MAX_AREAS]; +} bx_iodebug_s; + + +bx_iodebug_c::bx_iodebug_c() +{ + put("IODBG"); +} + +void bx_iodebug_c::init(void) +{ + DEV_register_ioread_handler(this, read_handler, 0x8A00,"BOCHS IODEBUG", 2); + DEV_register_iowrite_handler(this, write_handler, 0x8A00,"BOCHS IODEBUG", 2); + DEV_register_iowrite_handler(this, write_handler, 0x8A01,"BOCHS IODEBUG", 2); + + bx_iodebug_s.enabled = 0; + bx_iodebug_s.register_select = 0; + + for(int i=0;iread(addr, io_len); +} + +Bit32u bx_iodebug_c::read(Bit32u addr, unsigned io_len) +{ + if (bx_iodebug_s.enabled) return 0x8A00; + return(0); +} + +void bx_iodebug_c::write_handler(void *this_ptr, Bit32u addr, Bit32u dvalue, unsigned io_len) +{ + bx_iodebug_c *bx_iodebug_ptr = (bx_iodebug_c *) this_ptr; + bx_iodebug_ptr->write(addr, dvalue, io_len); +} + +void bx_iodebug_c::write(Bit32u addr, Bit32u dvalue, unsigned io_len) +{ +//fprintf(stderr, "IODEBUG addr: %4x\tdvalue: %8x\tio_len: %8x\n", (unsigned) addr, (unsigned) dvalue, io_len); + + if (addr == 0x8A01) + { + bx_iodebug_s.registers[bx_iodebug_s.register_select] = + (bx_iodebug_s.registers[bx_iodebug_s.register_select] << 16) + + (dvalue & 0xFFFF); + } + + if (addr != 0x8A00) return; + + if (!bx_iodebug_s.enabled) + { + if(dvalue == 0x8A00) + { + bx_iodebug_s.enabled = 1; +// fprintf(stderr, "IODEBUG enabled\n"); + bx_iodebug_s.registers[0] = 0; + bx_iodebug_s.registers[1] = 0; + } + return; + } + + switch(dvalue) + { + case 0x8A01: + bx_iodebug_s.register_select = 0; +// fprintf(stderr, "IODEBUG register 0 selected\n"); + break; + + case 0x8A02: + bx_iodebug_s.register_select = 1; +// fprintf(stderr, "IODEBUG register 1 selected\n"); + break; + + case 0x8A80: + bx_iodebug_s.register_select = 0; + bx_iodebug_c::add_range(bx_iodebug_s.registers[0], + bx_iodebug_s.registers[1]); + bx_iodebug_s.registers[0] = 0; + bx_iodebug_s.registers[1] = 0; + break; + +#if BX_DEBUGGER + case 0x8AE0: + fprintf(stderr, "request return to dbg prompt received, 0x8AE0 command (iodebug)\n"); + bx_guard.interrupt_requested=1; + break; + + case 0x8AE2: + fprintf(stderr, "request made by the guest os to disable tracing, iodebug port 0x8A00->0x8AE2\n"); + BX_CPU(dbg_cpu)->trace = 0; + break; + + case 0x8AE3: + fprintf(stderr, "request made by the guest os to enable tracing, iodebug port 0x8A00->0x8AE3\n"); + BX_CPU(dbg_cpu)->trace = 1; + break; + + case 0x8AE4: + fprintf(stderr, "request made by the guest os to disable register tracing, iodebug port 0x8A00->0x8AE4\n"); + BX_CPU(dbg_cpu)->trace_reg = 0; + break; + + case 0x8AE5: + fprintf(stderr, "request made by the guest os to enable register tracing, iodebug port 0x8A00->0x8AE5\n"); + BX_CPU(dbg_cpu)->trace_reg = 1; + break; +#endif + case 0x8AFF: + bx_iodebug_s.enabled = 0; +// fprintf(stderr, "IODEBUG device deactivated\n"); +// break; + +// default: +// fprintf(stderr,"IODEBUG unsupported register code\n"); + } +} + + +// Static function +void bx_iodebug_c::mem_write(BX_CPU_C *cpu, bx_phy_address addr, unsigned len, void *data) +{ + if(! bx_iodebug_s.enabled) return; + + unsigned area = bx_iodebug_c::range_test(addr, len); + // Device is enabled, testing address ranges + if(area) + { + area--; + +#if BX_DEBUGGER + if (cpu != NULL) { + fprintf(stdout, "IODEBUG CPU %d @ eip: " FMT_ADDRX " write at monitored memory location %8X\n", + cpu->bx_cpuid, cpu->get_instruction_pointer(), addr); + } + else { + fprintf(stdout, "IODEBUG write at monitored memory location %8X\n", addr); + } + bx_guard.interrupt_requested=1; +#else + fprintf(stderr, "IODEBUG write to monitored memory area: %2i\t", area); + + if (cpu != NULL) + fprintf(stderr, "by EIP:\t\t" FMT_ADDRX "\n\t", cpu->get_instruction_pointer()); + else + fprintf(stderr, "(device origin)\t"); + + fprintf(stderr, "range start: \t\t%08X\trange end:\t%08X\n\taddress accessed:\t%08X\tdata written:\t", + bx_iodebug_s.monitored_mem_areas_start[area], + bx_iodebug_s.monitored_mem_areas_end[area], + (unsigned) addr); + + switch(len) + { + case 1: { + Bit8u data8 = * ((Bit8u *) data); + fprintf(stderr,"%02X\n", (unsigned) data8); + break; + } + case 2: { + Bit16u data16 = * ((Bit16u *) data); + fprintf(stderr,"%04X\n", (unsigned) data16); + break; + } + case 4: { + Bit32u data32 = * ((Bit32u *) data); + fprintf(stderr,"%08X\n", (unsigned) data32); + break; + } + case 8: { + Bit64u data64 = * ((Bit64u *) data); + fprintf(stderr,"%08X%08x\n", + (unsigned) (data64 >> 32), + (unsigned) (data64 & 0xffffffff)); + break; + } + default: + fprintf(stderr, "unsupported write size\n"); + } +#endif + } +} + +void bx_iodebug_c::mem_read(BX_CPU_C *cpu, bx_phy_address addr, unsigned len, void *data) +{ + if(! bx_iodebug_s.enabled) return; + + unsigned area = bx_iodebug_c::range_test(addr, len); + // Device is enabled, testing address ranges + if(area) + { + area--; + +#if BX_DEBUGGER + if (cpu != NULL) { + fprintf(stdout, "IODEBUG CPU %d @ eip: " FMT_ADDRX " read at monitored memory location %8X\n", + cpu->bx_cpuid, cpu->get_instruction_pointer(), addr); + } + else { + fprintf(stdout, "IODEBUG read at monitored memory location %8X\n", addr); + } + bx_guard.interrupt_requested=1; +#else + fprintf(stderr, "IODEBUG read at monitored memory area: %2i\t", area); + + if (cpu != NULL) + fprintf(stderr, "by EIP:\t\t" FMT_ADDRX "\n\t", cpu->get_instruction_pointer()); + else + fprintf(stderr, "(device origin)\t"); + + fprintf(stderr, "range start: \t\t%08X\trange end:\t%08X\n\taddress accessed:\t%08X\tdata written:\t", + bx_iodebug_s.monitored_mem_areas_start[area], + bx_iodebug_s.monitored_mem_areas_end[area], + (unsigned) addr); + + switch(len) + { + case 1: { + Bit8u data8 = * ((Bit8u *) data); + fprintf(stderr,"%02X\n", (unsigned) data8); + break; + } + case 2: { + Bit16u data16 = * ((Bit16u *) data); + fprintf(stderr,"%04X\n", (unsigned) data16); + break; + } + case 4: { + Bit32u data32 = * ((Bit32u *) data); + fprintf(stderr,"%08X\n", (unsigned) data32); + break; + } + case 8: { + Bit64u data64 = * ((Bit64u *) data); + fprintf(stderr,"%08X%08x\n", + (unsigned) (data64 >> 32), + (unsigned) (data64 & 0xffffffff)); + break; + } + default: + fprintf(stderr, "unsupported read size\n"); + } +#endif + } +} + +unsigned bx_iodebug_c::range_test(bx_phy_address addr, unsigned len) +{ + for(unsigned i=0;i +#endif + +////////////////////////////////////////////////////////////////////// +// bx_devmodel_c declaration +////////////////////////////////////////////////////////////////////// + +// This class defines virtual methods that are common to all devices. +// Child classes do not need to implement all of them, because in this +// definition they are defined as empty, as opposed to being pure +// virtual (= 0). +class BOCHSAPI bx_devmodel_c : public logfunctions { + public: + virtual ~bx_devmodel_c() {} + virtual void init(void) {} + virtual void reset(unsigned type) {} + virtual void register_state(void) {} + virtual void after_restore_state(void) {} +#if BX_DEBUGGER + virtual void debug_dump(void) {} +#endif +}; + +////////////////////////////////////////////////////////////////////// +// declare stubs for PCI devices +////////////////////////////////////////////////////////////////////// + +class bx_list_c; +class device_image_t; + +// the best should be deriving of bx_pci_device_stub_c from bx_devmodel_c +// but it make serious problems for cirrus_svga device +class BOCHSAPI bx_pci_device_stub_c { +public: + virtual ~bx_pci_device_stub_c() {} + + virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len) { + return 0; + } + + virtual void pci_write_handler(Bit8u address, Bit32u value, unsigned io_len) {} + + void register_pci_state(bx_list_c *list, Bit8u *pci_conf); +}; + +////////////////////////////////////////////////////////////////////// +// declare stubs for devices +////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////// +#define STUBFUNC(dev,method) \ + pluginlog->panic("%s called in %s stub. you must not have loaded the %s plugin", #dev, #method, #dev) +////////////////////////////////////////////////////////////////////// + +class BOCHSAPI bx_keyb_stub_c : public bx_devmodel_c { +public: + virtual ~bx_keyb_stub_c() {} + // stubs for bx_keyb_c methods + virtual void gen_scancode(Bit32u key) { + STUBFUNC(keyboard, gen_scancode); + } + virtual void paste_bytes(Bit8u *data, Bit32s length) { + STUBFUNC(keyboard, paste_bytes); + } +}; + +class BOCHSAPI bx_hard_drive_stub_c : public bx_devmodel_c { +public: + virtual void init() { + STUBFUNC(HD, init); + } + virtual void reset(unsigned type) { + STUBFUNC(HD, reset); + } + virtual Bit32u get_device_handle(Bit8u channel, Bit8u device) { + STUBFUNC(HD, get_device_handle); return 0; + } + virtual Bit32u get_first_cd_handle(void) { + STUBFUNC(HD, get_first_cd_handle); return 0; + } + virtual unsigned get_cd_media_status(Bit32u handle) { + STUBFUNC(HD, get_cd_media_status); return 0; + } + virtual unsigned set_cd_media_status(Bit32u handle, unsigned status) { + STUBFUNC(HD, set_cd_media_status); return 0; + } + virtual Bit32u virt_read_handler(Bit32u address, unsigned io_len) + { + STUBFUNC(HD, virt_read_handler); return 0; + } + virtual void virt_write_handler(Bit32u address, + Bit32u value, unsigned io_len) + { + STUBFUNC(HD, virt_write_handler); + } + virtual bx_bool bmdma_read_sector(Bit8u channel, Bit8u *buffer, Bit32u *sector_size) { + STUBFUNC(HD, bmdma_read_sector); return 0; + } + virtual bx_bool bmdma_write_sector(Bit8u channel, Bit8u *buffer) { + STUBFUNC(HD, bmdma_write_sector); return 0; + } + virtual void bmdma_complete(Bit8u channel) { + STUBFUNC(HD, bmdma_complete); + } +}; + +class BOCHSAPI bx_floppy_stub_c : public bx_devmodel_c { +public: + virtual unsigned set_media_status(unsigned drive, unsigned status) { + STUBFUNC(floppy, set_media_status); return 0; + } +}; + +class BOCHSAPI bx_cmos_stub_c : public bx_devmodel_c { +public: + virtual Bit32u get_reg(unsigned reg) { + STUBFUNC(cmos, get_reg); return 0; + } + virtual void set_reg(unsigned reg, Bit32u val) { + STUBFUNC(cmos, set_reg); + } + virtual time_t get_timeval() { + return 0; + } + virtual void checksum_cmos(void) { + STUBFUNC(cmos, checksum); + } +}; + +class BOCHSAPI bx_dma_stub_c : public bx_devmodel_c { +public: + virtual unsigned registerDMA8Channel( + unsigned channel, + void (* dmaRead)(Bit8u *data_byte), + void (* dmaWrite)(Bit8u *data_byte), + const char *name) + { + STUBFUNC(dma, registerDMA8Channel); return 0; + } + virtual unsigned registerDMA16Channel( + unsigned channel, + void (* dmaRead)(Bit16u *data_word), + void (* dmaWrite)(Bit16u *data_word), + const char *name) + { + STUBFUNC(dma, registerDMA16Channel); return 0; + } + virtual unsigned unregisterDMAChannel(unsigned channel) { + STUBFUNC(dma, unregisterDMAChannel); return 0; + } + virtual unsigned get_TC(void) { + STUBFUNC(dma, get_TC); return 0; + } + virtual void set_DRQ(unsigned channel, bx_bool val) { + STUBFUNC(dma, set_DRQ); + } + virtual void raise_HLDA(void) { + STUBFUNC(dma, raise_HLDA); + } +}; + +class BOCHSAPI bx_pic_stub_c : public bx_devmodel_c { +public: + virtual void raise_irq(unsigned irq_no) { + STUBFUNC(pic, raise_irq); + } + virtual void lower_irq(unsigned irq_no) { + STUBFUNC(pic, lower_irq); + } + virtual void set_mode(bx_bool ma_sl, Bit8u mode) { + STUBFUNC(pic, set_mode); + } + virtual Bit8u IAC(void) { + STUBFUNC(pic, IAC); return 0; + } +}; + +class BOCHSAPI bx_vga_stub_c : public bx_devmodel_c { +public: + virtual void redraw_area(unsigned x0, unsigned y0, + unsigned width, unsigned height) { + STUBFUNC(vga, redraw_area); + } + virtual Bit8u mem_read(bx_phy_address addr) { + STUBFUNC(vga, mem_read); return 0; + } + virtual void mem_write(bx_phy_address addr, Bit8u value) { + STUBFUNC(vga, mem_write); + } + virtual void get_text_snapshot(Bit8u **text_snapshot, + unsigned *txHeight, unsigned *txWidth) { + STUBFUNC(vga, get_text_snapshot); + } + virtual void trigger_timer(void *this_ptr) { + STUBFUNC(vga, trigger_timer); + } + virtual Bit8u get_actl_palette_idx(Bit8u index) { + return 0; + } + virtual bx_bool vbe_set_base_addr(Bit32u *addr, Bit8u *pci_conf) { + return 0; + } +}; + +class BOCHSAPI bx_pci_bridge_stub_c : public bx_devmodel_c, public bx_pci_device_stub_c { +public: + virtual bx_bool register_pci_handlers(bx_pci_device_stub_c *device, + Bit8u *devfunc, const char *name, + const char *descr) + { + STUBFUNC(pci, register_pci_handlers); return 0; + } + virtual bx_bool is_pci_device(const char *name) { + return 0; + } + virtual bx_bool pci_set_base_mem(void *this_ptr, memory_handler_t f1, memory_handler_t f2, + Bit32u *addr, Bit8u *pci_conf, unsigned size) { + STUBFUNC(pci, pci_set_base_mem); + return 0; + } + + virtual bx_bool pci_set_base_io(void *this_ptr, bx_read_handler_t f1, bx_write_handler_t f2, + Bit32u *addr, Bit8u *pci_conf, unsigned size, + const Bit8u *iomask, const char *name) { + STUBFUNC(pci, pci_set_base_io); + return 0; + } + + virtual Bit8u rd_memType(Bit32u addr) { return 0; } + virtual Bit8u wr_memType(Bit32u addr) { return 0; } +}; + +class BOCHSAPI bx_pci2isa_stub_c : public bx_devmodel_c, public bx_pci_device_stub_c { +public: + virtual void pci_set_irq (Bit8u devfunc, unsigned line, bx_bool level) { + STUBFUNC(pci2isa, pci_set_irq); + } +}; + +class BOCHSAPI bx_pci_ide_stub_c : public bx_devmodel_c, public bx_pci_device_stub_c { +public: + virtual bx_bool bmdma_present(void) { + return 0; + } + virtual void bmdma_set_irq(Bit8u channel) {} +}; + +class BOCHSAPI bx_ne2k_stub_c : public bx_devmodel_c { +public: + virtual void print_info(FILE *file, int page, int reg, int nodups) {} +}; + +class BOCHSAPI bx_speaker_stub_c : public bx_devmodel_c { +public: + virtual void beep_on(float frequency) { + bx_gui->beep_on(frequency); + } + virtual void beep_off() { + bx_gui->beep_off(); + } +}; + +#if BX_SUPPORT_ACPI +class BOCHSAPI bx_acpi_ctrl_stub_c : public bx_devmodel_c, public bx_pci_device_stub_c { +public: + virtual void generate_smi(Bit8u value) {} +}; +#endif + +#if BX_SUPPORT_IODEBUG +class BOCHSAPI bx_iodebug_stub_c : public bx_devmodel_c { +public: + virtual void mem_write(BX_CPU_C *cpu, bx_phy_address addr, unsigned len, void *data) { + STUBFUNC(iodebug, mem_write); + } + virtual void mem_read(BX_CPU_C *cpu, bx_phy_address addr, unsigned len, void *data) { + STUBFUNC(iodebug, mem_read); + } +}; +#endif + +#if BX_SUPPORT_APIC +class BOCHSAPI bx_ioapic_stub_c : public bx_devmodel_c { +public: + virtual void receive_eoi(Bit8u vector) {} + virtual void set_irq_level(Bit8u int_in, bx_bool level) {} +}; +#endif + +#if BX_SUPPORT_PCIUSB +class BOCHSAPI bx_usb_devctl_stub_c : public bx_devmodel_c { +public: + virtual int init_device(bx_list_c *portconf, logfunctions *hub, void **dev, bx_list_c *sr_list) { + STUBFUNC(usb_devctl, init_device); return 0; + } + virtual void usb_send_msg(void *dev, int msg) {} +}; +#endif + +class BOCHSAPI bx_hdimage_ctl_stub_c : public bx_devmodel_c { +public: + virtual device_image_t* init_image(Bit8u image_mode, Bit64u disk_size, const char *journal) { + STUBFUNC(hdimage_ctl, init_image); return NULL; + } +}; + +#if BX_SUPPORT_SB16 +class BOCHSAPI bx_soundmod_ctl_stub_c : public bx_devmodel_c { +public: + virtual int init_module(const char *type, void **module, logfunctions *dev) { + STUBFUNC(soundmod_ctl, init_module); return 0; + } +}; +#endif + +class BOCHSAPI bx_devices_c : public logfunctions { +public: + bx_devices_c(); + ~bx_devices_c(); + + // Initialize the device stubs (in constructur and exit()) + void init_stubs(void); + // Register I/O addresses and IRQ lines. Initialize any internal + // structures. init() is called only once, even if the simulator + // reboots or is restarted. + void init(BX_MEM_C *); + // Enter reset state in response to a reset condition. + // The types of reset conditions are defined in bochs.h: + // power-on, hardware, or software. + void reset(unsigned type); + // Cleanup the devices when the simulation quits. + void exit(void); + void register_state(void); + void after_restore_state(void); + BX_MEM_C *mem; // address space associated with these devices + bx_bool register_io_read_handler(void *this_ptr, bx_read_handler_t f, + Bit32u addr, const char *name, Bit8u mask); + bx_bool unregister_io_read_handler(void *this_ptr, bx_read_handler_t f, + Bit32u addr, Bit8u mask); + bx_bool register_io_write_handler(void *this_ptr, bx_write_handler_t f, + Bit32u addr, const char *name, Bit8u mask); + bx_bool unregister_io_write_handler(void *this_ptr, bx_write_handler_t f, + Bit32u addr, Bit8u mask); + bx_bool register_io_read_handler_range(void *this_ptr, bx_read_handler_t f, + Bit32u begin_addr, Bit32u end_addr, + const char *name, Bit8u mask); + bx_bool register_io_write_handler_range(void *this_ptr, bx_write_handler_t f, + Bit32u begin_addr, Bit32u end_addr, + const char *name, Bit8u mask); + bx_bool unregister_io_read_handler_range(void *this_ptr, bx_read_handler_t f, + Bit32u begin, Bit32u end, Bit8u mask); + bx_bool unregister_io_write_handler_range(void *this_ptr, bx_write_handler_t f, + Bit32u begin, Bit32u end, Bit8u mask); + bx_bool register_default_io_read_handler(void *this_ptr, bx_read_handler_t f, const char *name, Bit8u mask); + bx_bool register_default_io_write_handler(void *this_ptr, bx_write_handler_t f, const char *name, Bit8u mask); + bx_bool register_irq(unsigned irq, const char *name); + bx_bool unregister_irq(unsigned irq, const char *name); + Bit32u inp(Bit16u addr, unsigned io_len) BX_CPP_AttrRegparmN(2); + void outp(Bit16u addr, Bit32u value, unsigned io_len) BX_CPP_AttrRegparmN(3); + + void register_removable_keyboard(void *dev, bx_keyb_enq_t keyb_enq); + void unregister_removable_keyboard(void *dev); + void register_default_mouse(void *dev, bx_mouse_enq_t mouse_enq, bx_mouse_enabled_changed_t mouse_enabled_changed); + void register_removable_mouse(void *dev, bx_mouse_enq_t mouse_enq, bx_mouse_enabled_changed_t mouse_enabled_changed); + void unregister_removable_mouse(void *dev); + bx_bool optional_key_enq(Bit8u *scan_code); + void mouse_enabled_changed(bx_bool enabled); + void mouse_motion(int delta_x, int delta_y, int delta_z, unsigned button_state); + + static void timer_handler(void *); + void timer(void); + + bx_pci_bridge_stub_c *pluginPciBridge; + bx_pci2isa_stub_c *pluginPci2IsaBridge; + bx_pci_ide_stub_c *pluginPciIdeController; +#if BX_SUPPORT_ACPI + bx_acpi_ctrl_stub_c *pluginACPIController; +#endif + bx_devmodel_c *pluginPitDevice; + bx_keyb_stub_c *pluginKeyboard; + bx_dma_stub_c *pluginDmaDevice; + bx_floppy_stub_c *pluginFloppyDevice; + bx_cmos_stub_c *pluginCmosDevice; + bx_vga_stub_c *pluginVgaDevice; + bx_pic_stub_c *pluginPicDevice; + bx_hard_drive_stub_c *pluginHardDrive; + bx_hdimage_ctl_stub_c *pluginHDImageCtl; + bx_ne2k_stub_c *pluginNE2kDevice[4]; + bx_speaker_stub_c *pluginSpeaker; +#if BX_SUPPORT_IODEBUG + bx_iodebug_stub_c *pluginIODebug; +#endif +#if BX_SUPPORT_APIC + bx_ioapic_stub_c *pluginIOAPIC; +#endif +#if BX_SUPPORT_PCIUSB + bx_usb_devctl_stub_c *pluginUsbDevCtl; +#endif +#if BX_SUPPORT_SB16 + bx_soundmod_ctl_stub_c *pluginSoundModCtl; +#endif +#if 0 + bx_g2h_c *g2h; +#endif + + // stub classes that the pointers (above) can point to until a plugin is + // loaded + bx_cmos_stub_c stubCmos; + bx_keyb_stub_c stubKeyboard; + bx_hard_drive_stub_c stubHardDrive; + bx_hdimage_ctl_stub_c stubHDImage; + bx_dma_stub_c stubDma; + bx_pic_stub_c stubPic; + bx_floppy_stub_c stubFloppy; + bx_vga_stub_c stubVga; + bx_pci_bridge_stub_c stubPci; + bx_pci2isa_stub_c stubPci2Isa; + bx_pci_ide_stub_c stubPciIde; + bx_ne2k_stub_c stubNE2k; + bx_speaker_stub_c stubSpeaker; +#if BX_SUPPORT_ACPI + bx_acpi_ctrl_stub_c stubACPIController; +#endif +#if BX_SUPPORT_IODEBUG + bx_iodebug_stub_c stubIODebug; +#endif +#if BX_SUPPORT_APIC + bx_ioapic_stub_c stubIOAPIC; +#endif +#if BX_SUPPORT_PCIUSB + bx_usb_devctl_stub_c stubUsbDevCtl; +#endif +#if BX_SUPPORT_SB16 + bx_soundmod_ctl_stub_c stubSoundModCtl; +#endif + + // Some info to pass to devices which can handled bulk IO. This allows + // the interface to remain the same for IO devices which can't handle + // bulk IO. We should probably implement special INPBulk() and OUTBulk() + // functions which stick these values in the bx_devices_c class, and + // then call the normal functions rather than having gross globals + // variables. + Bit8u* bulkIOHostAddr; + unsigned bulkIOQuantumsRequested; + unsigned bulkIOQuantumsTransferred; + +private: + + struct io_handler_struct { + struct io_handler_struct *next; + struct io_handler_struct *prev; + void *funct; // C++ type checking is great, but annoying + void *this_ptr; + char *handler_name; // name of device + int usage_count; + Bit8u mask; // io_len mask + }; + struct io_handler_struct io_read_handlers; + struct io_handler_struct io_write_handlers; +#define PORTS 0x10000 + struct io_handler_struct **read_port_to_handler; + struct io_handler_struct **write_port_to_handler; + + // more for informative purposes, the names of the devices which + // are use each of the IRQ 0..15 lines are stored here + char *irq_handler_name[BX_MAX_IRQS]; + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); + BX_DEV_SMF Bit32u port92_read(Bit32u address, unsigned io_len); + BX_DEV_SMF void port92_write(Bit32u address, Bit32u value, unsigned io_len); + + static Bit32u default_read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void default_write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); + + bx_bool mouse_captured; // host mouse capture enabled + Bit8u mouse_type; + struct { + void *dev; + bx_mouse_enq_t enq_event; + bx_mouse_enabled_changed_t enabled_changed; + } bx_mouse[2]; + struct { + void *dev; + bx_keyb_enq_t enq_event; + } bx_keyboard; + + int timer_handle; + + bx_bool is_harddrv_enabled(); + bx_bool is_serial_enabled(); + bx_bool is_parallel_enabled(); + bx_bool is_usb_ohci_enabled(); + bx_bool is_usb_uhci_enabled(); +}; + +// memory stub has an assumption that there are no memory accesses splitting 4K page +BX_CPP_INLINE void DEV_MEM_READ_PHYSICAL(bx_phy_address phy_addr, unsigned len, Bit8u *ptr) +{ + unsigned remainingInPage = 0x1000 - (phy_addr & 0xfff); + if (len <= remainingInPage) { + BX_MEM(0)->readPhysicalPage(NULL, phy_addr, len, ptr); + } + else { + BX_MEM(0)->readPhysicalPage(NULL, phy_addr, remainingInPage, ptr); + ptr += remainingInPage; + phy_addr += remainingInPage; + len -= remainingInPage; + BX_MEM(0)->readPhysicalPage(NULL, phy_addr, len, ptr); + } +} + +BX_CPP_INLINE void DEV_MEM_READ_PHYSICAL_BLOCK(bx_phy_address phy_addr, unsigned len, Bit8u *ptr) +{ + Bit8u *memptr; + + while(len > 0) { + unsigned remainingInPage = 0x1000 - (phy_addr & 0xfff); + if (len < remainingInPage) remainingInPage = len; + memptr = BX_MEM(0)->getHostMemAddr(NULL, phy_addr, BX_READ); + if (memptr != NULL) { + memcpy(ptr, memptr, remainingInPage); + } + ptr += remainingInPage; + phy_addr += remainingInPage; + len -= remainingInPage; + } +} + +// memory stub has an assumption that there are no memory accesses splitting 4K page +BX_CPP_INLINE void DEV_MEM_WRITE_PHYSICAL(bx_phy_address phy_addr, unsigned len, Bit8u *ptr) +{ + unsigned remainingInPage = 0x1000 - (phy_addr & 0xfff); + if (len <= remainingInPage) { + BX_MEM(0)->writePhysicalPage(NULL, phy_addr, len, ptr); + } + else { + BX_MEM(0)->writePhysicalPage(NULL, phy_addr, remainingInPage, ptr); + ptr += remainingInPage; + phy_addr += remainingInPage; + len -= remainingInPage; + BX_MEM(0)->writePhysicalPage(NULL, phy_addr, len, ptr); + } +} + +BX_CPP_INLINE void DEV_MEM_WRITE_PHYSICAL_BLOCK(bx_phy_address phy_addr, unsigned len, Bit8u *ptr) +{ + Bit8u *memptr; + + while(len > 0) { + unsigned remainingInPage = 0x1000 - (phy_addr & 0xfff); + if (len < remainingInPage) remainingInPage = len; + memptr = BX_MEM(0)->getHostMemAddr(NULL, phy_addr, BX_WRITE); + if (memptr != NULL) { + memcpy(memptr, ptr, remainingInPage); + } + ptr += remainingInPage; + phy_addr += remainingInPage; + len -= remainingInPage; + } +} + +BOCHSAPI extern bx_devices_c bx_devices; + +#endif /* IODEV_H */ diff --git a/bochs/iodev/keyboard.cc b/bochs/iodev/keyboard.cc new file mode 100644 index 00000000..0b74d187 --- /dev/null +++ b/bochs/iodev/keyboard.cc @@ -0,0 +1,1685 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Now features proper implementation of keyboard opcodes 0xF4 to 0xF6 +// Silently ignores PS/2 keyboard extensions (0xF7 to 0xFD) +// Explicit panic on resend (0xFE) +// +// Emmanuel Marty + +// NB: now the PS/2 mouse support is in, outb changes meaning +// in conjunction with auxb +// auxb == 0 && outb == 0 => both buffers empty (nothing to read) +// auxb == 0 && outb == 1 => keyboard controller output buffer full +// auxb == 1 && outb == 0 => not used +// auxb == 1 && outb == 1 => mouse output buffer full. +// (das) + +// Notes from Christophe Bothamy +// +// This file includes code from Ludovic Lange (http://ludovic.lange.free.fr) +// Implementation of 3 scancodes sets mf1,mf2,mf3 with or without translation. +// Default is mf2 with translation +// Ability to switch between scancodes sets +// Ability to turn translation on or off + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "gui/keymap.h" +#include +#include "keyboard.h" +#include "scancodes.h" + +#define LOG_THIS theKeyboard-> +#define VERBOSE_KBD_DEBUG 0 + + +bx_keyb_c *theKeyboard = NULL; + +int libkeyboard_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + // Create one instance of the keyboard device object. + theKeyboard = new bx_keyb_c(); + // Before this plugin was loaded, pluginKeyboard pointed to a stub. + // Now make it point to the real thing. + bx_devices.pluginKeyboard = theKeyboard; + // Register this device. + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theKeyboard, BX_PLUGIN_KEYBOARD); + return(0); // Success +} + +void libkeyboard_LTX_plugin_fini(void) +{ + delete theKeyboard; +} + +bx_keyb_c::bx_keyb_c() +{ + put("KBD"); + pastebuf = NULL; +} + +bx_keyb_c::~bx_keyb_c() +{ + // remove runtime parameter handler + SIM->get_param_num(BXPN_KBD_PASTE_DELAY)->set_handler(NULL); + if (pastebuf != NULL) { + delete [] pastebuf; + } +#if BX_WITH_WX + bx_list_c *list = (bx_list_c*)SIM->get_param(BXPN_WX_KBD_STATE); + if (list != NULL) { + list->clear(); + } +#endif + BX_DEBUG(("Exit")); +} + +// flush internal buffer and reset keyboard settings to power-up condition +void bx_keyb_c::resetinternals(bx_bool powerup) +{ + BX_KEY_THIS s.kbd_internal_buffer.num_elements = 0; + for (int i=0; iget_param_num(BXPN_KBD_SERIAL_DELAY)->get(), 1, 1, + "8042 Keyboard controller"); + + resetinternals(1); + + BX_KEY_THIS s.kbd_internal_buffer.led_status = 0; + BX_KEY_THIS s.kbd_internal_buffer.scanning_enabled = 1; + + BX_KEY_THIS s.mouse_internal_buffer.num_elements = 0; + for (i=0; iget_param_enum(BXPN_MOUSE_TYPE)->get(); + BX_KEY_THIS s.mouse.sample_rate = 100; // reports per second + BX_KEY_THIS s.mouse.resolution_cpmm = 4; // 4 counts per millimeter + BX_KEY_THIS s.mouse.scaling = 1; /* 1:1 (default) */ + BX_KEY_THIS s.mouse.mode = MOUSE_MODE_RESET; + BX_KEY_THIS s.mouse.enable = 0; + BX_KEY_THIS s.mouse.delayed_dx = 0; + BX_KEY_THIS s.mouse.delayed_dy = 0; + BX_KEY_THIS s.mouse.delayed_dz = 0; + BX_KEY_THIS s.mouse.im_request = 0; // wheel mouse mode request + BX_KEY_THIS s.mouse.im_mode = 0; // wheel mouse mode + + for (i=0; iget_param_num(BXPN_KBD_PASTE_DELAY)->get()); + BX_KEY_THIS paste_service = 0; + BX_KEY_THIS stop_paste = 0; + + // mouse port installed on system board + DEV_cmos_set_reg(0x14, DEV_cmos_get_reg(0x14) | 0x04); + + // add keyboard LEDs to the statusbar + BX_KEY_THIS statusbar_id[0] = bx_gui->register_statusitem("NUM"); + BX_KEY_THIS statusbar_id[1] = bx_gui->register_statusitem("CAPS"); + BX_KEY_THIS statusbar_id[2] = bx_gui->register_statusitem("SCRL"); + +#if BX_WITH_WX + bx_param_num_c *param; + bx_list_c *list; + if (SIM->get_param("wxdebug") != NULL) { + // register shadow params (Experimental, not a complete list by far) + list = (bx_list_c*)SIM->get_param(BXPN_WX_KBD_STATE); + if (list == NULL) { + list = new bx_list_c(SIM->get_param("wxdebug"), "keyboard", + "Keyboard State", 20); + } + new bx_shadow_bool_c(list, "irq1_req", + "Keyboard IRQ1 requested", + &BX_KEY_THIS s.kbd_controller.irq1_requested); + new bx_shadow_bool_c(list, "irq12_req", + "Keyboard IRQ12 requested", + &BX_KEY_THIS s.kbd_controller.irq12_requested); + param = new bx_shadow_num_c(list, "timer_pending", + &BX_KEY_THIS s.kbd_controller.timer_pending); + param->set_label("Keyboard timer pending"); + new bx_shadow_bool_c(list, "pare", + "Keyboard PARE", + &BX_KEY_THIS s.kbd_controller.pare); + new bx_shadow_bool_c(list, "tim", + "Keyboard TIM", + &BX_KEY_THIS s.kbd_controller.tim); + new bx_shadow_bool_c(list, "auxb", + "Keyboard AUXB", + &BX_KEY_THIS s.kbd_controller.auxb); + new bx_shadow_bool_c(list, "keyl", + "Keyboard KEYL", + &BX_KEY_THIS s.kbd_controller.keyl); + new bx_shadow_bool_c(list, "c_d", + "Keyboard C_D", + &BX_KEY_THIS s.kbd_controller.c_d); + new bx_shadow_bool_c(list, "sysf", + "Keyboard SYSF", + &BX_KEY_THIS s.kbd_controller.sysf); + new bx_shadow_bool_c(list, "inpb", + "Keyboard INPB", + &BX_KEY_THIS s.kbd_controller.inpb); + new bx_shadow_bool_c(list, "outb", + "Keyboard OUTB", + &BX_KEY_THIS s.kbd_controller.outb); + } +#endif + + if ((BX_KEY_THIS s.mouse.type == BX_MOUSE_TYPE_PS2) || + (BX_KEY_THIS s.mouse.type == BX_MOUSE_TYPE_IMPS2)) { + DEV_register_default_mouse(this, mouse_enq_static, mouse_enabled_changed_static); + } + + // init runtime parameter + SIM->get_param_num(BXPN_KBD_PASTE_DELAY)->set_handler(kbd_param_handler); + SIM->get_param_num(BXPN_KBD_PASTE_DELAY)->set_runtime_param(1); + SIM->get_param_num(BXPN_MOUSE_ENABLED)->set_handler(kbd_param_handler); + SIM->get_param_num(BXPN_MOUSE_ENABLED)->set_runtime_param(1); +} + +void bx_keyb_c::reset(unsigned type) +{ + if (BX_KEY_THIS pastebuf != NULL) { + BX_KEY_THIS stop_paste = 1; + } +} + +void bx_keyb_c::register_state(void) +{ + int i; + char name[4]; + bx_list_c *buffer; + + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "keyboard", "Keyboard State", 7); + bx_list_c *ctrl = new bx_list_c(list, "controller", 23); + BXRS_PARAM_BOOL(ctrl, tim, BX_KEY_THIS s.kbd_controller.tim); + BXRS_PARAM_BOOL(ctrl, auxb, BX_KEY_THIS s.kbd_controller.auxb); + BXRS_PARAM_BOOL(ctrl, c_d, BX_KEY_THIS s.kbd_controller.c_d); + BXRS_PARAM_BOOL(ctrl, sysf, BX_KEY_THIS s.kbd_controller.sysf); + BXRS_PARAM_BOOL(ctrl, inpb, BX_KEY_THIS s.kbd_controller.inpb); + BXRS_PARAM_BOOL(ctrl, outb, BX_KEY_THIS s.kbd_controller.outb); + BXRS_PARAM_BOOL(ctrl, kbd_clock_enabled, BX_KEY_THIS s.kbd_controller.kbd_clock_enabled); + BXRS_PARAM_BOOL(ctrl, aux_clock_enabled, BX_KEY_THIS s.kbd_controller.aux_clock_enabled); + BXRS_PARAM_BOOL(ctrl, allow_irq1, BX_KEY_THIS s.kbd_controller.allow_irq1); + BXRS_PARAM_BOOL(ctrl, allow_irq12, BX_KEY_THIS s.kbd_controller.allow_irq12); + BXRS_HEX_PARAM_FIELD(ctrl, kbd_output_buffer, BX_KEY_THIS s.kbd_controller.kbd_output_buffer); + BXRS_HEX_PARAM_FIELD(ctrl, aux_output_buffer, BX_KEY_THIS s.kbd_controller.aux_output_buffer); + BXRS_HEX_PARAM_FIELD(ctrl, last_comm, BX_KEY_THIS s.kbd_controller.last_comm); + BXRS_DEC_PARAM_FIELD(ctrl, expecting_port60h, BX_KEY_THIS s.kbd_controller.expecting_port60h); + BXRS_DEC_PARAM_FIELD(ctrl, expecting_mouse_parameter, BX_KEY_THIS s.kbd_controller.expecting_mouse_parameter); + BXRS_HEX_PARAM_FIELD(ctrl, last_mouse_command, BX_KEY_THIS s.kbd_controller.last_mouse_command); + BXRS_DEC_PARAM_FIELD(ctrl, timer_pending, BX_KEY_THIS s.kbd_controller.timer_pending); + BXRS_PARAM_BOOL(ctrl, irq1_requested, BX_KEY_THIS s.kbd_controller.irq1_requested); + BXRS_PARAM_BOOL(ctrl, irq12_requested, BX_KEY_THIS s.kbd_controller.irq12_requested); + BXRS_PARAM_BOOL(ctrl, scancodes_translate, BX_KEY_THIS s.kbd_controller.scancodes_translate); + BXRS_PARAM_BOOL(ctrl, expecting_scancodes_set, BX_KEY_THIS s.kbd_controller.expecting_scancodes_set); + BXRS_DEC_PARAM_FIELD(ctrl, current_scancodes_set, BX_KEY_THIS s.kbd_controller.current_scancodes_set); + BXRS_PARAM_BOOL(ctrl, bat_in_progress, BX_KEY_THIS s.kbd_controller.bat_in_progress); + bx_list_c *mouse = new bx_list_c(list, "mouse", 12); + BXRS_DEC_PARAM_FIELD(mouse, sample_rate, BX_KEY_THIS s.mouse.sample_rate); + BXRS_DEC_PARAM_FIELD(mouse, resolution_cpmm, BX_KEY_THIS s.mouse.resolution_cpmm); + BXRS_DEC_PARAM_FIELD(mouse, scaling, BX_KEY_THIS s.mouse.scaling); + BXRS_DEC_PARAM_FIELD(mouse, mode, BX_KEY_THIS s.mouse.mode); + BXRS_DEC_PARAM_FIELD(mouse, saved_mode, BX_KEY_THIS s.mouse.saved_mode); + BXRS_PARAM_BOOL(mouse, enable, BX_KEY_THIS s.mouse.enable); + BXRS_DEC_PARAM_FIELD(mouse, button_status, BX_KEY_THIS s.mouse.button_status); + BXRS_DEC_PARAM_FIELD(mouse, delayed_dx, BX_KEY_THIS s.mouse.delayed_dx); + BXRS_DEC_PARAM_FIELD(mouse, delayed_dy, BX_KEY_THIS s.mouse.delayed_dy); + BXRS_DEC_PARAM_FIELD(mouse, delayed_dz, BX_KEY_THIS s.mouse.delayed_dz); + BXRS_DEC_PARAM_FIELD(mouse, im_request, BX_KEY_THIS s.mouse.im_request); + BXRS_PARAM_BOOL(mouse, im_mode, BX_KEY_THIS s.mouse.im_mode); + bx_list_c *kbdbuf = new bx_list_c(list, "kbd_internal_buffer", 9); + BXRS_DEC_PARAM_FIELD(kbdbuf, num_elements, BX_KEY_THIS s.kbd_internal_buffer.num_elements); + buffer = new bx_list_c(kbdbuf, "buffer", BX_KBD_ELEMENTS); + for (i=0; istatusbar_setitem(BX_KEY_THIS statusbar_id[0], value & 0x02); + bx_gui->statusbar_setitem(BX_KEY_THIS statusbar_id[1], value & 0x04); + bx_gui->statusbar_setitem(BX_KEY_THIS statusbar_id[2], value & 0x01); + } +} + +Bit64s bx_keyb_c::kbd_param_handler(bx_param_c *param, int set, Bit64s val) +{ + if (set) { + char pname[BX_PATHNAME_LEN]; + param->get_param_path(pname, BX_PATHNAME_LEN); + if (!strcmp(pname, BXPN_KBD_PASTE_DELAY)) { + BX_KEY_THIS paste_delay_changed((Bit32u)val); + } else if (!strcmp(pname, BXPN_MOUSE_ENABLED)) { + if (set) { + bx_gui->mouse_enabled_changed(val!=0); + DEV_mouse_enabled_changed(val!=0); + } + } else { + BX_PANIC(("kbd_param_handler called with unexpected parameter '%s'", pname)); + } + } + return val; +} + +void bx_keyb_c::paste_delay_changed(Bit32u value) +{ + BX_KEY_THIS pastedelay = value / BX_IODEV_HANDLER_PERIOD; + BX_INFO(("will paste characters every %d keyboard ticks",BX_KEY_THIS pastedelay)); +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +// read function - the big picture: +// if address == data port then +// if byte for mouse then return it +// else if byte for keyboard then return it +// else address== status port +// assemble the status bits and return them. +// +Bit32u bx_keyb_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_KEY_SMF + bx_keyb_c *class_ptr = (bx_keyb_c *)this_ptr; + + return (class_ptr->read(address, io_len)); +} + +Bit32u bx_keyb_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_KEY_SMF + Bit8u val; + + if (address == 0x60) { /* output buffer */ + if (BX_KEY_THIS s.kbd_controller.auxb) { /* mouse byte available */ + val = BX_KEY_THIS s.kbd_controller.aux_output_buffer; + BX_KEY_THIS s.kbd_controller.aux_output_buffer = 0; + BX_KEY_THIS s.kbd_controller.outb = 0; + BX_KEY_THIS s.kbd_controller.auxb = 0; + BX_KEY_THIS s.kbd_controller.irq12_requested = 0; + + if (BX_KEY_THIS s.controller_Qsize) { + unsigned i; + BX_KEY_THIS s.kbd_controller.aux_output_buffer = BX_KEY_THIS s.controller_Q[0]; + BX_KEY_THIS s.kbd_controller.outb = 1; + BX_KEY_THIS s.kbd_controller.auxb = 1; + if (BX_KEY_THIS s.kbd_controller.allow_irq12) + BX_KEY_THIS s.kbd_controller.irq12_requested = 1; + for (i=0; i= 2 + else if (address == 0x64) { /* status register */ + val = (BX_KEY_THIS s.kbd_controller.pare << 7) | + (BX_KEY_THIS s.kbd_controller.tim << 6) | + (BX_KEY_THIS s.kbd_controller.auxb << 5) | + (BX_KEY_THIS s.kbd_controller.keyl << 4) | + (BX_KEY_THIS s.kbd_controller.c_d << 3) | + (BX_KEY_THIS s.kbd_controller.sysf << 2) | + (BX_KEY_THIS s.kbd_controller.inpb << 1) | + BX_KEY_THIS s.kbd_controller.outb; + BX_KEY_THIS s.kbd_controller.tim = 0; + return val; + } + +#else /* BX_CPU_LEVEL > 0 */ + /* XT MODE, System 8255 Mode Register */ + else if (address == 0x64) { /* status register */ + BX_DEBUG(("IO read from port 64h, system 8255 mode register")); + return BX_KEY_THIS s.kbd_controller.outb; + } +#endif /* BX_CPU_LEVEL > 0 */ + + BX_PANIC(("unknown address in io read to keyboard port %x", + (unsigned) address)); + return 0; /* keep compiler happy */ +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_keyb_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_KEY_SMF + bx_keyb_c *class_ptr = (bx_keyb_c *)this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_keyb_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_KEY_SMF + Bit8u command_byte; + static int kbd_initialized=0; + + BX_DEBUG(("keyboard: 8-bit write to %04x = %02x", (unsigned)address, (unsigned)value)); + + switch (address) { + case 0x60: // input buffer + // if expecting data byte from command last sent to port 64h + if (BX_KEY_THIS s.kbd_controller.expecting_port60h) { + BX_KEY_THIS s.kbd_controller.expecting_port60h = 0; + // data byte written last to 0x60 + BX_KEY_THIS s.kbd_controller.c_d = 0; + if (BX_KEY_THIS s.kbd_controller.inpb) { + BX_PANIC(("write to port 60h, not ready for write")); + } + switch (BX_KEY_THIS s.kbd_controller.last_comm) { + case 0x60: // write command byte + { + bx_bool scan_convert, disable_keyboard, + disable_aux; + + scan_convert = (value >> 6) & 0x01; + disable_aux = (value >> 5) & 0x01; + disable_keyboard = (value >> 4) & 0x01; + BX_KEY_THIS s.kbd_controller.sysf = (value >> 2) & 0x01; + BX_KEY_THIS s.kbd_controller.allow_irq1 = (value >> 0) & 0x01; + BX_KEY_THIS s.kbd_controller.allow_irq12 = (value >> 1) & 0x01; + set_kbd_clock_enable(!disable_keyboard); + set_aux_clock_enable(!disable_aux); + if (BX_KEY_THIS s.kbd_controller.allow_irq12 && BX_KEY_THIS s.kbd_controller.auxb) + BX_KEY_THIS s.kbd_controller.irq12_requested = 1; + else if (BX_KEY_THIS s.kbd_controller.allow_irq1 && BX_KEY_THIS s.kbd_controller.outb) + BX_KEY_THIS s.kbd_controller.irq1_requested = 1; + + BX_DEBUG((" allow_irq12 set to %u", + (unsigned) BX_KEY_THIS s.kbd_controller.allow_irq12)); + if (!scan_convert) + BX_INFO(("keyboard: scan convert turned off")); + + // (mch) NT needs this + BX_KEY_THIS s.kbd_controller.scancodes_translate = scan_convert; + } + break; + case 0xcb: // write keyboard controller mode + BX_DEBUG(("write keyboard controller mode with value %02xh", (unsigned) value)); + break; + case 0xd1: // write output port + BX_DEBUG(("write output port with value %02xh", (unsigned) value)); + BX_DEBUG(("write output port : %sable A20",(value & 0x02)?"en":"dis")); + BX_SET_ENABLE_A20((value & 0x02) != 0); + if (!(value & 0x01)) { + BX_INFO(("write output port : processor reset requested!")); + bx_pc_system.Reset(BX_RESET_SOFTWARE); + } + break; + case 0xd4: // Write to mouse + // I don't think this enables the AUX clock + //set_aux_clock_enable(1); // enable aux clock line + kbd_ctrl_to_mouse(value); + // ??? should I reset to previous value of aux enable? + break; + + case 0xd3: // write mouse output buffer + // Queue in mouse output buffer + controller_enQ(value, 1); + break; + + case 0xd2: + // Queue in keyboard output buffer + controller_enQ(value, 0); + break; + + default: + BX_PANIC(("=== unsupported write to port 60h(lastcomm=%02x): %02x", + (unsigned) BX_KEY_THIS s.kbd_controller.last_comm, (unsigned) value)); + } + } else { + // data byte written last to 0x60 + BX_KEY_THIS s.kbd_controller.c_d = 0; + BX_KEY_THIS s.kbd_controller.expecting_port60h = 0; + /* pass byte to keyboard */ + /* ??? should conditionally pass to mouse device here ??? */ + if (BX_KEY_THIS s.kbd_controller.kbd_clock_enabled==0) { + set_kbd_clock_enable(1); + } + kbd_ctrl_to_kbd(value); + } + break; + + case 0x64: // control register + // command byte written last to 0x64 + BX_KEY_THIS s.kbd_controller.c_d = 1; + BX_KEY_THIS s.kbd_controller.last_comm = value; + // most commands NOT expecting port60 write next + BX_KEY_THIS s.kbd_controller.expecting_port60h = 0; + + switch (value) { + case 0x20: // get keyboard command byte + BX_DEBUG(("get keyboard command byte")); + // controller output buffer must be empty + if (BX_KEY_THIS s.kbd_controller.outb) { + BX_ERROR(("kbd: OUTB set and command 0x%02x encountered", value)); + break; + } + command_byte = + (BX_KEY_THIS s.kbd_controller.scancodes_translate << 6) | + ((!BX_KEY_THIS s.kbd_controller.aux_clock_enabled) << 5) | + ((!BX_KEY_THIS s.kbd_controller.kbd_clock_enabled) << 4) | + (0 << 3) | + (BX_KEY_THIS s.kbd_controller.sysf << 2) | + (BX_KEY_THIS s.kbd_controller.allow_irq12 << 1) | + (BX_KEY_THIS s.kbd_controller.allow_irq1 << 0); + controller_enQ(command_byte, 0); + break; + case 0x60: // write command byte + BX_DEBUG(("write command byte")); + // following byte written to port 60h is command byte + BX_KEY_THIS s.kbd_controller.expecting_port60h = 1; + break; + + case 0xa0: + BX_DEBUG(("keyboard BIOS name not supported")); + break; + + case 0xa1: + BX_DEBUG(("keyboard BIOS version not supported")); + break; + + case 0xa7: // disable the aux device + set_aux_clock_enable(0); + BX_DEBUG(("aux device disabled")); + break; + case 0xa8: // enable the aux device + set_aux_clock_enable(1); + BX_DEBUG(("aux device enabled")); + break; + case 0xa9: // Test Mouse Port + // controller output buffer must be empty + if (BX_KEY_THIS s.kbd_controller.outb) { + BX_PANIC(("kbd: OUTB set and command 0x%02x encountered", value)); + break; + } + controller_enQ(0x00, 0); // no errors detected + break; + case 0xaa: // motherboard controller self test + BX_DEBUG(("Self Test")); + if (kbd_initialized == 0) { + BX_KEY_THIS s.controller_Qsize = 0; + BX_KEY_THIS s.kbd_controller.outb = 0; + kbd_initialized++; + } + // controller output buffer must be empty + if (BX_KEY_THIS s.kbd_controller.outb) { + BX_ERROR(("kbd: OUTB set and command 0x%02x encountered", value)); + break; + } + // (mch) Why is this commented out??? Enabling + BX_KEY_THIS s.kbd_controller.sysf = 1; // self test complete + controller_enQ(0x55, 0); // controller OK + break; + case 0xab: // Interface Test + // controller output buffer must be empty + if (BX_KEY_THIS s.kbd_controller.outb) { + BX_PANIC(("kbd: OUTB set and command 0x%02x encountered", value)); + break; + } + controller_enQ(0x00, 0); + break; + case 0xad: // disable keyboard + set_kbd_clock_enable(0); + BX_DEBUG(("keyboard disabled")); + break; + case 0xae: // enable keyboard + set_kbd_clock_enable(1); + BX_DEBUG(("keyboard enabled")); + break; + case 0xaf: // get controller version + BX_INFO(("'get controller version' not supported yet")); + break; + case 0xc0: // read input port + // controller output buffer must be empty + if (BX_KEY_THIS s.kbd_controller.outb) { + BX_PANIC(("kbd: OUTB set and command 0x%02x encountered", value)); + break; + } + // keyboard not inhibited + controller_enQ(0x80, 0); + break; + case 0xca: // read keyboard controller mode + controller_enQ(0x01, 0); // PS/2 (MCA)interface + break; + case 0xcb: // write keyboard controller mode + BX_DEBUG(("write keyboard controller mode")); + // write keyboard controller mode to bit 0 of port 0x60 + BX_KEY_THIS s.kbd_controller.expecting_port60h = 1; + break; + case 0xd0: // read output port: next byte read from port 60h + BX_DEBUG(("io write to port 64h, command d0h (partial)")); + // controller output buffer must be empty + if (BX_KEY_THIS s.kbd_controller.outb) { + BX_PANIC(("kbd: OUTB set and command 0x%02x encountered", value)); + break; + } + controller_enQ( + (BX_KEY_THIS s.kbd_controller.irq12_requested << 5) | + (BX_KEY_THIS s.kbd_controller.irq1_requested << 4) | + (BX_GET_ENABLE_A20() << 1) | + 0x01, 0); + break; + + case 0xd1: // write output port: next byte written to port 60h + BX_DEBUG(("write output port")); + // following byte to port 60h written to output port + BX_KEY_THIS s.kbd_controller.expecting_port60h = 1; + break; + + case 0xd3: // write mouse output buffer + //FIXME: Why was this a panic? + BX_DEBUG(("io write 0x64: command = 0xD3(write mouse outb)")); + // following byte to port 60h written to output port as mouse write. + BX_KEY_THIS s.kbd_controller.expecting_port60h = 1; + break; + + case 0xd4: // write to mouse + BX_DEBUG(("io write 0x64: command = 0xD4 (write to mouse)")); + // following byte written to port 60h + BX_KEY_THIS s.kbd_controller.expecting_port60h = 1; + break; + + case 0xd2: // write keyboard output buffer + BX_DEBUG(("io write 0x64: write keyboard output buffer")); + BX_KEY_THIS s.kbd_controller.expecting_port60h = 1; + break; + case 0xdd: // Disable A20 Address Line + BX_SET_ENABLE_A20(0); + break; + case 0xdf: // Enable A20 Address Line + BX_SET_ENABLE_A20(1); + break; + case 0xc1: // Continuous Input Port Poll, Low + case 0xc2: // Continuous Input Port Poll, High + case 0xe0: // Read Test Inputs + BX_PANIC(("io write 0x64: command = %02xh", (unsigned) value)); + break; + + case 0xfe: // System (cpu?) Reset, transition to real mode + BX_INFO(("io write 0x64: command 0xfe: reset cpu")); + bx_pc_system.Reset(BX_RESET_SOFTWARE); + break; + + default: + if (value==0xff || (value>=0xf0 && value<=0xfd)) { + /* useless pulse output bit commands ??? */ + BX_DEBUG(("io write to port 64h, useless command %02x", + (unsigned) value)); + return; + } + BX_ERROR(("unsupported io write to keyboard port %x, value = %x", + (unsigned) address, (unsigned) value)); + break; + } + break; + + default: + BX_PANIC(("unknown address in bx_keyb_c::write()")); + } +} + +// service_paste_buf() transfers data from the paste buffer to the hardware +// keyboard buffer. It tries to transfer as many chars as possible at a +// time, but because different chars require different numbers of scancodes +// we have to be conservative. Note that this process depends on the +// keymap tables to know what chars correspond to what keys, and which +// chars require a shift or other modifier. +void bx_keyb_c::service_paste_buf() +{ + if (!BX_KEY_THIS pastebuf) return; + BX_DEBUG(("service_paste_buf: ptr at %d out of %d", BX_KEY_THIS pastebuf_ptr, BX_KEY_THIS pastebuf_len)); + int fill_threshold = BX_KBD_ELEMENTS - 8; + BX_KEY_THIS paste_service = 1; + while ((BX_KEY_THIS pastebuf_ptr < BX_KEY_THIS pastebuf_len) && !BX_KEY_THIS stop_paste) { + if (BX_KEY_THIS s.kbd_internal_buffer.num_elements >= fill_threshold) { + BX_KEY_THIS paste_service = 0; + return; + } + // there room in the buffer for a keypress and a key release. + // send one keypress and a key release. + Bit8u byte = BX_KEY_THIS pastebuf[BX_KEY_THIS pastebuf_ptr]; + BXKeyEntry *entry = bx_keymap.findAsciiChar(byte); + if (!entry) { + BX_ERROR(("paste character 0x%02x ignored", byte)); + } else { + BX_DEBUG(("pasting character 0x%02x. baseKey is %04x", byte, entry->baseKey)); + if (entry->modKey != BX_KEYMAP_UNKNOWN) + BX_KEY_THIS gen_scancode(entry->modKey); + BX_KEY_THIS gen_scancode(entry->baseKey); + BX_KEY_THIS gen_scancode(entry->baseKey | BX_KEY_RELEASED); + if (entry->modKey != BX_KEYMAP_UNKNOWN) + BX_KEY_THIS gen_scancode(entry->modKey | BX_KEY_RELEASED); + } + BX_KEY_THIS pastebuf_ptr++; + } + // reached end of pastebuf. free the memory it was using. + delete [] BX_KEY_THIS pastebuf; + BX_KEY_THIS pastebuf = NULL; + BX_KEY_THIS stop_paste = 0; + BX_KEY_THIS paste_service = 0; +} + +// paste_bytes schedules an arbitrary number of ASCII characters to be +// inserted into the hardware queue as it become available. Any previous +// paste which is still in progress will be thrown out. BYTES is a pointer +// to a region of memory containing the chars to be pasted. When the paste +// is complete, the keyboard code will call delete [] bytes; +void bx_keyb_c::paste_bytes(Bit8u *bytes, Bit32s length) +{ + BX_DEBUG(("paste_bytes: %d bytes", length)); + if (BX_KEY_THIS pastebuf) { + BX_ERROR(("previous paste was not completed! %d chars lost", + BX_KEY_THIS pastebuf_len - BX_KEY_THIS pastebuf_ptr)); + delete [] BX_KEY_THIS pastebuf; // free the old paste buffer + } + BX_KEY_THIS pastebuf = bytes; + BX_KEY_THIS pastebuf_ptr = 0; + BX_KEY_THIS pastebuf_len = length; + BX_KEY_THIS service_paste_buf(); +} + +void bx_keyb_c::gen_scancode(Bit32u key) +{ + unsigned char *scancode; + Bit8u i; + + if ((BX_KEY_THIS pastebuf != NULL) && (!BX_KEY_THIS paste_service)) { + BX_KEY_THIS stop_paste = 1; + return; + } + + BX_DEBUG(("gen_scancode(): %s %s", bx_keymap.getBXKeyName(key), (key >> 31)?"released":"pressed")); + + if (!BX_KEY_THIS s.kbd_controller.scancodes_translate) + BX_DEBUG(("keyboard: gen_scancode with scancode_translate cleared")); + + // Ignore scancode if keyboard clock is driven low + if (BX_KEY_THIS s.kbd_controller.kbd_clock_enabled==0) + return; + + // Ignore scancode if scanning is disabled + if (BX_KEY_THIS s.kbd_internal_buffer.scanning_enabled==0) + return; + + // Switch between make and break code + if (key & BX_KEY_RELEASED) + scancode=(unsigned char *)scancodes[(key&0xFF)][BX_KEY_THIS s.kbd_controller.current_scancodes_set].brek; + else + scancode=(unsigned char *)scancodes[(key&0xFF)][BX_KEY_THIS s.kbd_controller.current_scancodes_set].make; + + // if we have a removable keyboard installed, we need to call its handler first + if (DEV_optional_key_enq(scancode)) { + return; + } + + if (BX_KEY_THIS s.kbd_controller.scancodes_translate) { + // Translate before send + Bit8u escaped=0x00; + + for (i=0; i= BX_KBD_CONTROLLER_QSIZE) + BX_PANIC(("controller_enq(): controller_Q full!")); + BX_KEY_THIS s.controller_Q[BX_KEY_THIS s.controller_Qsize++] = data; + BX_KEY_THIS s.controller_Qsource = source; + return; + } + + // the Q is empty + if (source == 0) { // keyboard + BX_KEY_THIS s.kbd_controller.kbd_output_buffer = data; + BX_KEY_THIS s.kbd_controller.outb = 1; + BX_KEY_THIS s.kbd_controller.auxb = 0; + BX_KEY_THIS s.kbd_controller.inpb = 0; + if (BX_KEY_THIS s.kbd_controller.allow_irq1) + BX_KEY_THIS s.kbd_controller.irq1_requested = 1; + } else { // mouse + BX_KEY_THIS s.kbd_controller.aux_output_buffer = data; + BX_KEY_THIS s.kbd_controller.outb = 1; + BX_KEY_THIS s.kbd_controller.auxb = 1; + BX_KEY_THIS s.kbd_controller.inpb = 0; + if (BX_KEY_THIS s.kbd_controller.allow_irq12) + BX_KEY_THIS s.kbd_controller.irq12_requested = 1; + } +} + +void bx_keyb_c::kbd_enQ_imm(Bit8u val) +{ + int tail; + + if (BX_KEY_THIS s.kbd_internal_buffer.num_elements >= BX_KBD_ELEMENTS) { + BX_PANIC(("internal keyboard buffer full (imm)")); + return; + } + + /* enqueue scancode in multibyte internal keyboard buffer */ + tail = (BX_KEY_THIS s.kbd_internal_buffer.head + BX_KEY_THIS s.kbd_internal_buffer.num_elements) % + BX_KBD_ELEMENTS; + + BX_KEY_THIS s.kbd_controller.kbd_output_buffer = val; + BX_KEY_THIS s.kbd_controller.outb = 1; + + if (BX_KEY_THIS s.kbd_controller.allow_irq1) + BX_KEY_THIS s.kbd_controller.irq1_requested = 1; +} + +void bx_keyb_c::kbd_enQ(Bit8u scancode) +{ + int tail; + + BX_DEBUG(("kbd_enQ(0x%02x)", (unsigned) scancode)); + + if (BX_KEY_THIS s.kbd_internal_buffer.num_elements >= BX_KBD_ELEMENTS) { + BX_INFO(("internal keyboard buffer full, ignoring scancode.(%02x)", + (unsigned) scancode)); + return; + } + + /* enqueue scancode in multibyte internal keyboard buffer */ + BX_DEBUG(("kbd_enQ: putting scancode 0x%02x in internal buffer", + (unsigned) scancode)); + tail = (BX_KEY_THIS s.kbd_internal_buffer.head + BX_KEY_THIS s.kbd_internal_buffer.num_elements) % + BX_KBD_ELEMENTS; + BX_KEY_THIS s.kbd_internal_buffer.buffer[tail] = scancode; + BX_KEY_THIS s.kbd_internal_buffer.num_elements++; + + if (!BX_KEY_THIS s.kbd_controller.outb && BX_KEY_THIS s.kbd_controller.kbd_clock_enabled) { + activate_timer(); + BX_DEBUG(("activating timer...")); + return; + } +} + +bx_bool bx_keyb_c::mouse_enQ_packet(Bit8u b1, Bit8u b2, Bit8u b3, Bit8u b4) +{ + int bytes = 3; + if (BX_KEY_THIS s.mouse.im_mode) bytes = 4; + + if ((BX_KEY_THIS s.mouse_internal_buffer.num_elements + bytes) >= BX_MOUSE_BUFF_SIZE) { + return(0); /* buffer doesn't have the space */ + } + + mouse_enQ(b1); + mouse_enQ(b2); + mouse_enQ(b3); + if (BX_KEY_THIS s.mouse.im_mode) mouse_enQ(b4); + + return(1); +} + +void bx_keyb_c::mouse_enQ(Bit8u mouse_data) +{ + int tail; + + BX_DEBUG(("mouse_enQ(%02x)", (unsigned) mouse_data)); + + if (BX_KEY_THIS s.mouse_internal_buffer.num_elements >= BX_MOUSE_BUFF_SIZE) { + BX_ERROR(("[mouse] internal mouse buffer full, ignoring mouse data.(%02x)", + (unsigned) mouse_data)); + return; + } + + /* enqueue mouse data in multibyte internal mouse buffer */ + tail = (BX_KEY_THIS s.mouse_internal_buffer.head + BX_KEY_THIS s.mouse_internal_buffer.num_elements) % + BX_MOUSE_BUFF_SIZE; + BX_KEY_THIS s.mouse_internal_buffer.buffer[tail] = mouse_data; + BX_KEY_THIS s.mouse_internal_buffer.num_elements++; + + if (!BX_KEY_THIS s.kbd_controller.outb && BX_KEY_THIS s.kbd_controller.aux_clock_enabled) { + activate_timer(); + return; + } +} + +void bx_keyb_c::kbd_ctrl_to_kbd(Bit8u value) +{ + + BX_DEBUG(("controller passed byte %02xh to keyboard", value)); + + if (BX_KEY_THIS s.kbd_internal_buffer.expecting_typematic) { + BX_KEY_THIS s.kbd_internal_buffer.expecting_typematic = 0; + BX_KEY_THIS s.kbd_internal_buffer.delay = (value >> 5) & 0x03; + switch (BX_KEY_THIS s.kbd_internal_buffer.delay) { + case 0: BX_INFO(("setting delay to 250 mS (unused)")); break; + case 1: BX_INFO(("setting delay to 500 mS (unused)")); break; + case 2: BX_INFO(("setting delay to 750 mS (unused)")); break; + case 3: BX_INFO(("setting delay to 1000 mS (unused)")); break; + } + BX_KEY_THIS s.kbd_internal_buffer.repeat_rate = value & 0x1f; + double cps = 1 /((double)(8 + (value & 0x07)) * (double)exp(log((double)2) * (double)((value >> 3) & 0x03)) * 0.00417); + BX_INFO(("setting repeat rate to %.1f cps (unused)", cps)); + kbd_enQ(0xFA); // send ACK + return; + } + + if (BX_KEY_THIS s.kbd_internal_buffer.expecting_led_write) { + BX_KEY_THIS s.kbd_internal_buffer.expecting_led_write = 0; + BX_KEY_THIS s.kbd_internal_buffer.led_status = value; + BX_DEBUG(("LED status set to %02x", + (unsigned) BX_KEY_THIS s.kbd_internal_buffer.led_status)); + bx_gui->statusbar_setitem(BX_KEY_THIS statusbar_id[0], value & 0x02); + bx_gui->statusbar_setitem(BX_KEY_THIS statusbar_id[1], value & 0x04); + bx_gui->statusbar_setitem(BX_KEY_THIS statusbar_id[2], value & 0x01); + kbd_enQ(0xFA); // send ACK %%% + return; + } + + if (BX_KEY_THIS s.kbd_controller.expecting_scancodes_set) { + BX_KEY_THIS s.kbd_controller.expecting_scancodes_set = 0; + if(value != 0) { + if(value < 4) { + BX_KEY_THIS s.kbd_controller.current_scancodes_set = (value-1); + BX_INFO(("Switched to scancode set %d", + (unsigned) BX_KEY_THIS s.kbd_controller.current_scancodes_set + 1)); + kbd_enQ(0xFA); + } else { + BX_ERROR(("Received scancodes set out of range: %d", value)); + kbd_enQ(0xFF); // send ERROR + } + } else { + // Send ACK (SF patch #1159626) + kbd_enQ(0xFA); + // Send current scancodes set to port 0x60 + kbd_enQ(1 + (BX_KEY_THIS s.kbd_controller.current_scancodes_set)); + } + return; + } + + switch (value) { + case 0x00: // ??? ignore and let OS timeout with no response + kbd_enQ(0xFA); // send ACK %%% + break; + + case 0x05: // ??? + // (mch) trying to get this to work... + BX_KEY_THIS s.kbd_controller.sysf = 1; + kbd_enQ_imm(0xfe); + break; + + case 0xed: // LED Write + BX_KEY_THIS s.kbd_internal_buffer.expecting_led_write = 1; + kbd_enQ_imm(0xFA); // send ACK %%% + break; + + case 0xee: // echo + kbd_enQ(0xEE); // return same byte (EEh) as echo diagnostic + break; + + case 0xf0: // Select alternate scan code set + BX_KEY_THIS s.kbd_controller.expecting_scancodes_set = 1; + BX_DEBUG(("Expecting scancode set info...")); + kbd_enQ(0xFA); // send ACK + break; + + case 0xf2: // identify keyboard + BX_INFO(("identify keyboard command received")); + + // XT sends nothing, AT sends ACK + // MFII with translation sends ACK+ABh+41h + // MFII without translation sends ACK+ABh+83h + if (SIM->get_param_enum(BXPN_KBD_TYPE)->get() != BX_KBD_XT_TYPE) { + kbd_enQ(0xFA); + if (SIM->get_param_enum(BXPN_KBD_TYPE)->get() == BX_KBD_MF_TYPE) { + kbd_enQ(0xAB); + + if(BX_KEY_THIS s.kbd_controller.scancodes_translate) + kbd_enQ(0x41); + else + kbd_enQ(0x83); + } + } + break; + + case 0xf3: // typematic info + BX_KEY_THIS s.kbd_internal_buffer.expecting_typematic = 1; + BX_INFO(("setting typematic info")); + kbd_enQ(0xFA); // send ACK + break; + + case 0xf4: // enable keyboard + BX_KEY_THIS s.kbd_internal_buffer.scanning_enabled = 1; + kbd_enQ(0xFA); // send ACK + break; + + case 0xf5: // reset keyboard to power-up settings and disable scanning + resetinternals(1); + kbd_enQ(0xFA); // send ACK + BX_KEY_THIS s.kbd_internal_buffer.scanning_enabled = 0; + BX_INFO(("reset-disable command received")); + break; + + case 0xf6: // reset keyboard to power-up settings and enable scanning + resetinternals(1); + kbd_enQ(0xFA); // send ACK + BX_KEY_THIS s.kbd_internal_buffer.scanning_enabled = 1; + BX_INFO(("reset-enable command received")); + break; + + case 0xfe: // resend. aiiee. + BX_PANIC(("got 0xFE (resend)")); + break; + + case 0xff: // reset: internal keyboard reset and afterwards the BAT + BX_DEBUG(("reset command received")); + resetinternals(1); + kbd_enQ(0xFA); // send ACK + BX_KEY_THIS s.kbd_controller.bat_in_progress = 1; + kbd_enQ(0xAA); // BAT test passed + break; + + case 0xd3: + kbd_enQ(0xfa); + break; + + case 0xf7: // PS/2 Set All Keys To Typematic + case 0xf8: // PS/2 Set All Keys to Make/Break + case 0xf9: // PS/2 PS/2 Set All Keys to Make + case 0xfa: // PS/2 Set All Keys to Typematic Make/Break + case 0xfb: // PS/2 Set Key Type to Typematic + case 0xfc: // PS/2 Set Key Type to Make/Break + case 0xfd: // PS/2 Set Key Type to Make + default: + BX_ERROR(("kbd_ctrl_to_kbd(): got value of 0x%02x", value)); + kbd_enQ(0xFE); /* send NACK */ + break; + } +} + +void bx_keyb_c::timer_handler(void *this_ptr) +{ + bx_keyb_c *class_ptr = (bx_keyb_c *)this_ptr; + unsigned retval; + + retval=class_ptr->periodic(1); + + if(retval&0x01) + DEV_pic_raise_irq(1); + if(retval&0x02) + DEV_pic_raise_irq(12); +} + +unsigned bx_keyb_c::periodic(Bit32u usec_delta) +{ +/* static int multiple=0; */ + static unsigned count_before_paste=0; + Bit8u retval; + + UNUSED(usec_delta); + + if (BX_KEY_THIS s.kbd_controller.kbd_clock_enabled) { + if(++count_before_paste>=BX_KEY_THIS pastedelay) { + // after the paste delay, consider adding moving more chars + // from the paste buffer to the keyboard buffer. + BX_KEY_THIS service_paste_buf(); + count_before_paste=0; + } + } + + retval = BX_KEY_THIS s.kbd_controller.irq1_requested | (BX_KEY_THIS s.kbd_controller.irq12_requested << 1); + BX_KEY_THIS s.kbd_controller.irq1_requested = 0; + BX_KEY_THIS s.kbd_controller.irq12_requested = 0; + + if (BX_KEY_THIS s.kbd_controller.timer_pending == 0) { + return(retval); + } + + if (usec_delta >= BX_KEY_THIS s.kbd_controller.timer_pending) { + BX_KEY_THIS s.kbd_controller.timer_pending = 0; + } else { + BX_KEY_THIS s.kbd_controller.timer_pending -= usec_delta; + return(retval); + } + + if (BX_KEY_THIS s.kbd_controller.outb) { + return(retval); + } + + /* nothing in outb, look for possible data xfer from keyboard or mouse */ + if (BX_KEY_THIS s.kbd_internal_buffer.num_elements && + (BX_KEY_THIS s.kbd_controller.kbd_clock_enabled || BX_KEY_THIS s.kbd_controller.bat_in_progress)) { + BX_DEBUG(("service_keyboard: key in internal buffer waiting")); + BX_KEY_THIS s.kbd_controller.kbd_output_buffer = + BX_KEY_THIS s.kbd_internal_buffer.buffer[BX_KEY_THIS s.kbd_internal_buffer.head]; + BX_KEY_THIS s.kbd_controller.outb = 1; + // commented out since this would override the current state of the + // mouse buffer flag - no bug seen - just seems wrong (das) + // BX_KEY_THIS s.kbd_controller.auxb = 0; + BX_KEY_THIS s.kbd_internal_buffer.head = (BX_KEY_THIS s.kbd_internal_buffer.head + 1) % + BX_KBD_ELEMENTS; + BX_KEY_THIS s.kbd_internal_buffer.num_elements--; + if (BX_KEY_THIS s.kbd_controller.allow_irq1) + BX_KEY_THIS s.kbd_controller.irq1_requested = 1; + } else { + create_mouse_packet(0); + if (BX_KEY_THIS s.kbd_controller.aux_clock_enabled && BX_KEY_THIS s.mouse_internal_buffer.num_elements) { + BX_DEBUG(("service_keyboard: key(from mouse) in internal buffer waiting")); + BX_KEY_THIS s.kbd_controller.aux_output_buffer = + BX_KEY_THIS s.mouse_internal_buffer.buffer[BX_KEY_THIS s.mouse_internal_buffer.head]; + + BX_KEY_THIS s.kbd_controller.outb = 1; + BX_KEY_THIS s.kbd_controller.auxb = 1; + BX_KEY_THIS s.mouse_internal_buffer.head = (BX_KEY_THIS s.mouse_internal_buffer.head + 1) % + BX_MOUSE_BUFF_SIZE; + BX_KEY_THIS s.mouse_internal_buffer.num_elements--; + if (BX_KEY_THIS s.kbd_controller.allow_irq12) + BX_KEY_THIS s.kbd_controller.irq12_requested = 1; + } else { + BX_DEBUG(("service_keyboard(): no keys waiting")); + } + } + return(retval); +} + +void bx_keyb_c::activate_timer(void) +{ + if (BX_KEY_THIS s.kbd_controller.timer_pending == 0) { + BX_KEY_THIS s.kbd_controller.timer_pending = 1; + } +} + +void bx_keyb_c::kbd_ctrl_to_mouse(Bit8u value) +{ + // if we are not using a ps2 mouse, some of the following commands need to return different values + bx_bool is_ps2 = 0; + if ((BX_KEY_THIS s.mouse.type == BX_MOUSE_TYPE_PS2) || + (BX_KEY_THIS s.mouse.type == BX_MOUSE_TYPE_IMPS2)) is_ps2 = 1; + + BX_DEBUG(("MOUSE: kbd_ctrl_to_mouse(%02xh)", (unsigned) value)); + BX_DEBUG((" enable = %u", (unsigned) BX_KEY_THIS s.mouse.enable)); + BX_DEBUG((" allow_irq12 = %u", + (unsigned) BX_KEY_THIS s.kbd_controller.allow_irq12)); + BX_DEBUG((" aux_clock_enabled = %u", + (unsigned) BX_KEY_THIS s.kbd_controller.aux_clock_enabled)); + + // an ACK (0xFA) is always the first response to any valid input + // received from the system other than Set-Wrap-Mode & Resend-Command + + if (BX_KEY_THIS s.kbd_controller.expecting_mouse_parameter) { + BX_KEY_THIS s.kbd_controller.expecting_mouse_parameter = 0; + switch (BX_KEY_THIS s.kbd_controller.last_mouse_command) { + case 0xf3: // Set Mouse Sample Rate + BX_KEY_THIS s.mouse.sample_rate = value; + BX_DEBUG(("mouse: sampling rate set: %d Hz", value)); + if ((value == 200) && (!BX_KEY_THIS s.mouse.im_request)) { + BX_KEY_THIS s.mouse.im_request = 1; + } else if ((value == 100) && (BX_KEY_THIS s.mouse.im_request == 1)) { + BX_KEY_THIS s.mouse.im_request = 2; + } else if ((value == 80) && (BX_KEY_THIS s.mouse.im_request == 2)) { + if (BX_KEY_THIS s.mouse.type == BX_MOUSE_TYPE_IMPS2) { + BX_INFO(("wheel mouse mode enabled")); + BX_KEY_THIS s.mouse.im_mode = 1; + } else { + BX_INFO(("wheel mouse mode request rejected")); + } + BX_KEY_THIS s.mouse.im_request = 0; + } else { + BX_KEY_THIS s.mouse.im_request = 0; + } + controller_enQ(0xFA, 1); // ack + break; + + case 0xe8: // Set Mouse Resolution + switch (value) { + case 0: + BX_KEY_THIS s.mouse.resolution_cpmm = 1; + break; + case 1: + BX_KEY_THIS s.mouse.resolution_cpmm = 2; + break; + case 2: + BX_KEY_THIS s.mouse.resolution_cpmm = 4; + break; + case 3: + BX_KEY_THIS s.mouse.resolution_cpmm = 8; + break; + default: + BX_PANIC(("mouse: unknown resolution %d", value)); + break; + } + BX_DEBUG(("mouse: resolution set to %d counts per mm", + BX_KEY_THIS s.mouse.resolution_cpmm)); + + controller_enQ(0xFA, 1); // ack + break; + + default: + BX_PANIC(("MOUSE: unknown last command (%02xh)", (unsigned) BX_KEY_THIS s.kbd_controller.last_mouse_command)); + } + } else { + BX_KEY_THIS s.kbd_controller.expecting_mouse_parameter = 0; + BX_KEY_THIS s.kbd_controller.last_mouse_command = value; + + // test for wrap mode first + if (BX_KEY_THIS s.mouse.mode == MOUSE_MODE_WRAP) { + // if not a reset command or reset wrap mode + // then just echo the byte. + if ((value != 0xff) && (value != 0xec)) { + BX_DEBUG(("mouse: wrap mode: ignoring command 0x%02x",value)); + controller_enQ(value, 1); + // bail out + return; + } + } + switch (value) { + case 0xe6: // Set Mouse Scaling to 1:1 + controller_enQ(0xFA, 1); // ACK + BX_KEY_THIS s.mouse.scaling = 2; + BX_DEBUG(("mouse: scaling set to 1:1")); + break; + + case 0xe7: // Set Mouse Scaling to 2:1 + controller_enQ(0xFA, 1); // ACK + BX_KEY_THIS s.mouse.scaling = 2; + BX_DEBUG(("mouse: scaling set to 2:1")); + break; + + case 0xe8: // Set Mouse Resolution + controller_enQ(0xFA, 1); // ACK + BX_KEY_THIS s.kbd_controller.expecting_mouse_parameter = 1; + break; + + case 0xea: // Set Stream Mode + BX_DEBUG(("mouse: stream mode on")); + BX_KEY_THIS s.mouse.mode = MOUSE_MODE_STREAM; + controller_enQ(0xFA, 1); // ACK + break; + + case 0xec: // Reset Wrap Mode + // unless we are in wrap mode ignore the command + if (BX_KEY_THIS s.mouse.mode == MOUSE_MODE_WRAP) { + BX_DEBUG(("mouse: wrap mode off")); + // restore previous mode except disable stream mode reporting. + // ### TODO disabling reporting in stream mode + BX_KEY_THIS s.mouse.mode = BX_KEY_THIS s.mouse.saved_mode; + controller_enQ(0xFA, 1); // ACK + } + break; + case 0xee: // Set Wrap Mode + // ### TODO flush output queue. + // ### TODO disable interrupts if in stream mode. + BX_DEBUG(("mouse: wrap mode on")); + BX_KEY_THIS s.mouse.saved_mode = BX_KEY_THIS s.mouse.mode; + BX_KEY_THIS s.mouse.mode = MOUSE_MODE_WRAP; + controller_enQ(0xFA, 1); // ACK + break; + + case 0xf0: // Set Remote Mode (polling mode, i.e. not stream mode.) + BX_DEBUG(("mouse: remote mode on")); + // ### TODO should we flush/discard/ignore any already queued packets? + BX_KEY_THIS s.mouse.mode = MOUSE_MODE_REMOTE; + controller_enQ(0xFA, 1); // ACK + break; + + case 0xf2: // Read Device Type + controller_enQ(0xFA, 1); // ACK + if (BX_KEY_THIS s.mouse.im_mode) + controller_enQ(0x03, 1); // Device ID (wheel z-mouse) + else + controller_enQ(0x00, 1); // Device ID (standard) + BX_DEBUG(("mouse: read mouse ID")); + break; + + case 0xf3: // Set Mouse Sample Rate (sample rate written to port 60h) + controller_enQ(0xFA, 1); // ACK + BX_KEY_THIS s.kbd_controller.expecting_mouse_parameter = 1; + break; + + case 0xf4: // Enable (in stream mode) + // is a mouse present? + if (is_ps2) { + BX_KEY_THIS s.mouse.enable = 1; + controller_enQ(0xFA, 1); // ACK + BX_DEBUG(("mouse enabled (stream mode)")); + } else { + // a mouse isn't present. We need to return a 0xFE (resend) instead of a 0xFA (ACK) + controller_enQ(0xFE, 1); // RESEND + BX_KEY_THIS s.kbd_controller.tim = 1; + } + break; + + case 0xf5: // Disable (in stream mode) + BX_KEY_THIS s.mouse.enable = 0; + controller_enQ(0xFA, 1); // ACK + BX_DEBUG(("mouse disabled (stream mode)")); + break; + + case 0xf6: // Set Defaults + BX_KEY_THIS s.mouse.sample_rate = 100; /* reports per second (default) */ + BX_KEY_THIS s.mouse.resolution_cpmm = 4; /* 4 counts per millimeter (default) */ + BX_KEY_THIS s.mouse.scaling = 1; /* 1:1 (default) */ + BX_KEY_THIS s.mouse.enable = 0; + BX_KEY_THIS s.mouse.mode = MOUSE_MODE_STREAM; + controller_enQ(0xFA, 1); // ACK + BX_DEBUG(("mouse: set defaults")); + break; + + case 0xff: // Reset + // is a mouse present? + if (is_ps2) { + BX_KEY_THIS s.mouse.sample_rate = 100; /* reports per second (default) */ + BX_KEY_THIS s.mouse.resolution_cpmm = 4; /* 4 counts per millimeter (default) */ + BX_KEY_THIS s.mouse.scaling = 1; /* 1:1 (default) */ + BX_KEY_THIS s.mouse.mode = MOUSE_MODE_RESET; + BX_KEY_THIS s.mouse.enable = 0; + if (BX_KEY_THIS s.mouse.im_mode) + BX_INFO(("wheel mouse mode disabled")); + BX_KEY_THIS s.mouse.im_mode = 0; + /* (mch) NT expects an ack here */ + controller_enQ(0xFA, 1); // ACK + controller_enQ(0xAA, 1); // completion code + controller_enQ(0x00, 1); // ID code (standard after reset) + BX_DEBUG(("mouse reset")); + } else { + // a mouse isn't present. We need to return a 0xFE (resend) instead of a 0xFA (ACK) + controller_enQ(0xFE, 1); // RESEND + BX_KEY_THIS s.kbd_controller.tim = 1; + } + break; + + case 0xe9: // Get mouse information + // should we ack here? (mch): Yes + controller_enQ(0xFA, 1); // ACK + controller_enQ(BX_KEY_THIS s.mouse.get_status_byte(), 1); // status + controller_enQ(BX_KEY_THIS s.mouse.get_resolution_byte(), 1); // resolution + controller_enQ(BX_KEY_THIS s.mouse.sample_rate, 1); // sample rate + BX_DEBUG(("mouse: get mouse information")); + break; + + case 0xeb: // Read Data (send a packet when in Remote Mode) + controller_enQ(0xFA, 1); // ACK + // perhaps we should be adding some movement here. + mouse_enQ_packet(((BX_KEY_THIS s.mouse.button_status & 0x0f) | 0x08), + 0x00, 0x00, 0x00); // bit3 of first byte always set + //assumed we really aren't in polling mode, a rather odd assumption. + BX_ERROR(("mouse: Warning: Read Data command partially supported.")); + break; + + case 0xbb: // OS/2 Warp 3 uses this command + BX_ERROR(("mouse: ignoring 0xbb command")); + break; + + default: + // If PS/2 mouse present, send NACK for unknown commands, otherwise ignore + if (is_ps2) { + BX_ERROR(("kbd_ctrl_to_mouse(): got value of 0x%02x", value)); + controller_enQ(0xFE, 1); /* send NACK */ + } + } + } +} + +void bx_keyb_c::create_mouse_packet(bx_bool force_enq) +{ + Bit8u b1, b2, b3, b4; + + if(BX_KEY_THIS s.mouse_internal_buffer.num_elements && !force_enq) + return; + + Bit16s delta_x = BX_KEY_THIS s.mouse.delayed_dx; + Bit16s delta_y = BX_KEY_THIS s.mouse.delayed_dy; + Bit8u button_state=BX_KEY_THIS s.mouse.button_status | 0x08; + + if(!force_enq && !delta_x && !delta_y) { + return; + } + + if(delta_x>254) delta_x=254; + if(delta_x<-254) delta_x=-254; + if(delta_y>254) delta_y=254; + if(delta_y<-254) delta_y=-254; + + b1 = (button_state & 0x0f) | 0x08; // bit3 always set + + if ((delta_x>=0) && (delta_x<=255)) { + b2 = (Bit8u) delta_x; + BX_KEY_THIS s.mouse.delayed_dx-=delta_x; + } + else if (delta_x > 255) { + b2 = (Bit8u) 0xff; + BX_KEY_THIS s.mouse.delayed_dx-=255; + } + else if (delta_x >= -256) { + b2 = (Bit8u) delta_x; + b1 |= 0x10; + BX_KEY_THIS s.mouse.delayed_dx-=delta_x; + } + else { + b2 = (Bit8u) 0x00; + b1 |= 0x10; + BX_KEY_THIS s.mouse.delayed_dx+=256; + } + + if ((delta_y>=0) && (delta_y<=255)) { + b3 = (Bit8u) delta_y; + BX_KEY_THIS s.mouse.delayed_dy-=delta_y; + } + else if (delta_y > 255) { + b3 = (Bit8u) 0xff; + BX_KEY_THIS s.mouse.delayed_dy-=255; + } + else if (delta_y >= -256) { + b3 = (Bit8u) delta_y; + b1 |= 0x20; + BX_KEY_THIS s.mouse.delayed_dy-=delta_y; + } + else { + b3 = (Bit8u) 0x00; + b1 |= 0x20; + BX_KEY_THIS s.mouse.delayed_dy+=256; + } + + b4 = (Bit8u) -BX_KEY_THIS s.mouse.delayed_dz; + + mouse_enQ_packet(b1, b2, b3, b4); +} + + +void bx_keyb_c::mouse_enabled_changed_static(void *dev, bx_bool enabled) +{ + ((bx_keyb_c*)dev)->mouse_enabled_changed(enabled); +} + +void bx_keyb_c::mouse_enabled_changed(bx_bool enabled) +{ + if (BX_KEY_THIS s.mouse.delayed_dx || BX_KEY_THIS s.mouse.delayed_dy || + BX_KEY_THIS s.mouse.delayed_dz) { + create_mouse_packet(1); + } + BX_KEY_THIS s.mouse.delayed_dx=0; + BX_KEY_THIS s.mouse.delayed_dy=0; + BX_KEY_THIS s.mouse.delayed_dz=0; + BX_DEBUG(("PS/2 mouse %s", enabled?"enabled":"disabled")); +} + +void bx_keyb_c::mouse_enq_static(void *dev, int delta_x, int delta_y, int delta_z, unsigned button_state) +{ + ((bx_keyb_c*)dev)->mouse_motion(delta_x, delta_y, delta_z, button_state); +} + +void bx_keyb_c::mouse_motion(int delta_x, int delta_y, int delta_z, unsigned button_state) +{ + bx_bool force_enq=0; + + // don't generate interrupts if we are in remote mode. + if (BX_KEY_THIS s.mouse.mode == MOUSE_MODE_REMOTE) + // is there any point in doing any work if we don't act on the result + // so go home. + return; + + // Note: enable only applies in STREAM MODE. + if (BX_KEY_THIS s.mouse.enable==0) + return; + + // scale down the motion + if ((delta_x < -1) || (delta_x > 1)) + delta_x /= 2; + if ((delta_y < -1) || (delta_y > 1)) + delta_y /= 2; + + if (!BX_KEY_THIS s.mouse.im_mode) + delta_z = 0; + +#ifdef VERBOSE_KBD_DEBUG + if (delta_x != 0 || delta_y != 0 || delta_z != 0) + BX_DEBUG(("[mouse] Dx=%d Dy=%d Dz=%d", delta_x, delta_y, delta_z)); +#endif /* ifdef VERBOSE_KBD_DEBUG */ + + if ((delta_x==0) && (delta_y==0) && (delta_z==0) && (BX_KEY_THIS s.mouse.button_status == (button_state & 0x7))) { + BX_DEBUG(("Ignoring useless mouse_motion call:")); + BX_DEBUG(("This should be fixed in the gui code.")); + return; + } + + if ((BX_KEY_THIS s.mouse.button_status != (button_state & 0x7)) || delta_z) { + force_enq=1; + } + + BX_KEY_THIS s.mouse.button_status = button_state & 0x7; + + if(delta_x>255) delta_x=255; + if(delta_y>255) delta_y=255; + if(delta_x<-256) delta_x=-256; + if(delta_y<-256) delta_y=-256; + + BX_KEY_THIS s.mouse.delayed_dx+=delta_x; + BX_KEY_THIS s.mouse.delayed_dy+=delta_y; + BX_KEY_THIS s.mouse.delayed_dz = delta_z; + + if((BX_KEY_THIS s.mouse.delayed_dx>255)|| + (BX_KEY_THIS s.mouse.delayed_dx<-256)|| + (BX_KEY_THIS s.mouse.delayed_dy>255)|| + (BX_KEY_THIS s.mouse.delayed_dy<-256)) { + force_enq=1; + } + + create_mouse_packet(force_enq); +} diff --git a/bochs/iodev/keyboard.h b/bochs/iodev/keyboard.h new file mode 100644 index 00000000..728ce1a8 --- /dev/null +++ b/bochs/iodev/keyboard.h @@ -0,0 +1,234 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef _PCKEY_H +#define _PCKEY_H + +#define BX_KBD_ELEMENTS 16 + +// these keywords should only be used in keyboard.cc +#if BX_USE_KEY_SMF +# define BX_KEY_SMF static +# define BX_KEY_THIS theKeyboard-> +#else +# define BX_KEY_SMF +# define BX_KEY_THIS this-> +#endif + +#define MOUSE_MODE_RESET 10 +#define MOUSE_MODE_STREAM 11 +#define MOUSE_MODE_REMOTE 12 +#define MOUSE_MODE_WRAP 13 + +class bx_keyb_c : public bx_keyb_stub_c { +public: + bx_keyb_c(); + virtual ~bx_keyb_c(); + // implement bx_devmodel_c interface + virtual void init(void); + virtual void reset(unsigned type); + // override stubs from bx_keyb_stub_c + virtual void gen_scancode(Bit32u key); + virtual void paste_bytes(Bit8u *data, Bit32s length); + virtual void register_state(void); + virtual void after_restore_state(void); + + // runtime options + static Bit64s kbd_param_handler(bx_param_c *param, int set, Bit64s val); + BX_KEY_SMF void paste_delay_changed(Bit32u value); + +private: + BX_KEY_SMF Bit8u get_kbd_enable(void); + BX_KEY_SMF void service_paste_buf (); + BX_KEY_SMF void create_mouse_packet(bx_bool force_enq); + BX_KEY_SMF unsigned periodic(Bit32u usec_delta); + + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_KEY_SMF + void write(Bit32u address, Bit32u value, unsigned io_len); + Bit32u read(Bit32u address, unsigned io_len); +#endif + + struct { + struct { + /* status bits matching the status port*/ + bx_bool pare; // Bit7, 1= parity error from keyboard/mouse - ignored. + bx_bool tim; // Bit6, 1= timeout from keyboard - ignored. + bx_bool auxb; // Bit5, 1= mouse data waiting for CPU to read. + bx_bool keyl; // Bit4, 1= keyswitch in lock position - ignored. + bx_bool c_d; /* Bit3, 1=command to port 64h, 0=data to port 60h */ + bx_bool sysf; // Bit2, + bx_bool inpb; // Bit1, + bx_bool outb; // Bit0, 1= keyboard data or mouse data ready for CPU + // check aux to see which. Or just keyboard + // data before AT style machines + + /* internal to our version of the keyboard controller */ + bx_bool kbd_clock_enabled; + bx_bool aux_clock_enabled; + bx_bool allow_irq1; + bx_bool allow_irq12; + Bit8u kbd_output_buffer; + Bit8u aux_output_buffer; + Bit8u last_comm; + Bit8u expecting_port60h; + Bit8u expecting_mouse_parameter; + Bit8u last_mouse_command; + Bit32u timer_pending; + bx_bool irq1_requested; + bx_bool irq12_requested; + bx_bool scancodes_translate; + bx_bool expecting_scancodes_set; + Bit8u current_scancodes_set; + bx_bool bat_in_progress; + } kbd_controller; + + struct mouseStruct { + Bit8u type; + Bit8u sample_rate; + Bit8u resolution_cpmm; // resolution in counts per mm + Bit8u scaling; + Bit8u mode; + Bit8u saved_mode; // the mode prior to entering wrap mode + bx_bool enable; + + Bit8u get_status_byte () + { + // top bit is 0 , bit 6 is 1 if remote mode. + Bit8u ret = (Bit8u) ((mode == MOUSE_MODE_REMOTE) ? 0x40 : 0); + ret |= (enable << 5); + ret |= (scaling == 1) ? 0 : (1 << 4); + ret |= ((button_status & 0x1) << 2); + ret |= ((button_status & 0x2) << 0); + return ret; + } + + Bit8u get_resolution_byte () + { + Bit8u ret = 0; + + switch (resolution_cpmm) { + case 1: + ret = 0; + break; + + case 2: + ret = 1; + break; + + case 4: + ret = 2; + break; + + case 8: + ret = 3; + break; + + default: + genlog->panic("mouse: invalid resolution_cpmm"); + }; + return ret; + } + + Bit8u button_status; + Bit16s delayed_dx; + Bit16s delayed_dy; + Bit16s delayed_dz; + Bit8u im_request; + bx_bool im_mode; + } mouse; + + struct { + int num_elements; + Bit8u buffer[BX_KBD_ELEMENTS]; + int head; + bx_bool expecting_typematic; + bx_bool expecting_led_write; + Bit8u delay; + Bit8u repeat_rate; + Bit8u led_status; + bx_bool scanning_enabled; + } kbd_internal_buffer; + + struct { + int num_elements; + Bit8u buffer[BX_MOUSE_BUFF_SIZE]; + int head; + } mouse_internal_buffer; +#define BX_KBD_CONTROLLER_QSIZE 5 + Bit8u controller_Q[BX_KBD_CONTROLLER_QSIZE]; + unsigned controller_Qsize; + unsigned controller_Qsource; // 0=keyboard, 1=mouse + } s; // State information for saving/loading + + // The paste buffer does NOT exist in the hardware. It is a bochs + // construction that allows the user to "paste" arbitrary length sequences of + // keystrokes into the emulated machine. Since the hardware buffer is only + // 16 bytes, a very small amount of data can be added to the hardware buffer + // at a time. The paste buffer keeps track of the bytes that have not yet + // been pasted. + // + // Lifetime of a paste buffer: The paste data comes from the system + // clipboard, which must be accessed using platform independent code in the + // gui. Because every gui has its own way of managing the clipboard memory + // (in X windows, you're supposed to call Xfree for example), in the platform + // specific code we make a copy of the clipboard buffer with + // "new Bit8u[length]". Then the pointer is passed into + // bx_keyb_c::paste_bytes, along with the length. The gui code never touches + // the pastebuf again, and does not free it. The keyboard code is + // responsible for deallocating the paste buffer using delete [] buf. The + // paste buffer is binary data, and it is probably NOT null terminated. + // + // Summary: A paste buffer is allocated (new) in the platform-specific gui + // code, passed to the keyboard model, and is freed (delete[]) when it is no + // longer needed. + Bit8u *pastebuf; // ptr to bytes to be pasted, or NULL if none in progress + Bit32u pastebuf_len; // length of pastebuf + Bit32u pastebuf_ptr; // ptr to next byte to be added to hw buffer + Bit32u pastedelay; // count before paste + bx_bool paste_service; // set to 1 when gen_scancode() is called from paste service + bx_bool stop_paste; // stop the current paste operation on keypress or hardware reset + + BX_KEY_SMF void resetinternals(bx_bool powerup); + BX_KEY_SMF void set_kbd_clock_enable(Bit8u value) BX_CPP_AttrRegparmN(1); + BX_KEY_SMF void set_aux_clock_enable(Bit8u value); + BX_KEY_SMF void kbd_ctrl_to_kbd(Bit8u value); + BX_KEY_SMF void kbd_ctrl_to_mouse(Bit8u value); + BX_KEY_SMF void kbd_enQ(Bit8u scancode); + BX_KEY_SMF void kbd_enQ_imm(Bit8u val); + BX_KEY_SMF void activate_timer(void); + BX_KEY_SMF void controller_enQ(Bit8u data, unsigned source); + BX_KEY_SMF bx_bool mouse_enQ_packet(Bit8u b1, Bit8u b2, Bit8u b3, Bit8u b4); + BX_KEY_SMF void mouse_enQ(Bit8u mouse_data); + + static void mouse_enabled_changed_static(void *dev, bx_bool enabled); + void mouse_enabled_changed(bx_bool enabled); + static void mouse_enq_static(void *dev, int delta_x, int delta_y, int delta_z, unsigned button_state); + void mouse_motion(int delta_x, int delta_y, int delta_z, unsigned button_state); + + static void timer_handler(void *); + void timer(void); + int timer_handle; + int statusbar_id[3]; +}; + +#endif // #ifndef _PCKEY_H diff --git a/bochs/iodev/ne2k.cc b/bochs/iodev/ne2k.cc new file mode 100644 index 00000000..70b1628d --- /dev/null +++ b/bochs/iodev/ne2k.cc @@ -0,0 +1,1931 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Peter Grehan (grehan@iprg.nokia.com) coded the initial version of this +// NE2000/ether stuff. + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_NE2K + +#if BX_SUPPORT_PCI +#include "pci.h" +#endif +#include "ne2k.h" +#include "eth.h" + +//Never completely fill the ne2k ring so that we never +// hit the unclear completely full buffer condition. +#define BX_NE2K_NEVER_FULL_RING (1) + +#if BX_USE_NE2K_SMF +// theNE2kDevice may only be a poinyer in the static case there +// there can only be one NIC installed. +#define LOG_THIS theNE2kDevice-> + +bx_ne2k_c *theNE2kDevice = NULL; +#else +// in the non-static case, there can be more than one NIC. +#define theNE2kDevice this +#define LOG_THIS this-> +#endif + +const Bit8u ne2k_iomask[32] = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; + +int libne2k_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[], const int cardNo) +{ +#if BX_USE_NE2K_SMF + theNE2kDevice = new bx_ne2k_c(); + bx_devices.pluginNE2kDevice = theNE2kDevice; + theNE2kDevice->interfaceNo = cardNo; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theNE2kDevice, BX_PLUGIN_NE2K); +#else + bx_ne2k_c *tempDevice = new bx_ne2k_c (); + tempDevice->interfaceNo = cardNo; + bx_devices.pluginNE2kDevice[cardNo] = tempDevice; + // BX_PLUGIN_NE2K has to contain %d. + // the % is replaced by the number, and the d by a \0 + // therefore the strlen is enough! + int nlen = strlen(BX_PLUGIN_NE2K)+2; + char *pluginName; + pluginName = (char*)malloc(nlen); + memset(pluginName, 0, nlen); + + // snprintf may only print nlen-1 chars, cause the last one will be set to \0 + strncat(pluginName, BX_PLUGIN_NE2K, nlen-1); + char nr[2]; + snprintf(nr, 2, "%d", cardNo); + strncat(pluginName, nr, nlen); + + //snprintf(pluginName, nlen-1, BX_PLUGIN_NE2K, cardNo); + /*-------------------------------------------------- + * pluginName[nlen-1] = '\0'; + *--------------------------------------------------*/ + printf("PLUGINNAME: %s<<\n", pluginName); + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, tempDevice, pluginName); + +#endif + return(0); // Success +} + + int libne2k0_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) + { + libne2k_LTX_plugin_init(plugin, type, argc, argv, 0); + } + int libne2k1_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) + { + libne2k_LTX_plugin_init(plugin, type, argc, argv, 1); + } + int libne2k2_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) + { + libne2k_LTX_plugin_init(plugin, type, argc, argv, 2); + } + int libne2k3_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) + { + libne2k_LTX_plugin_init(plugin, type, argc, argv, 3); + } + + +void libne2k_LTX_plugin_fini(void) +{ + #if BX_USE_NE2K_SMF + delete theNE2kDevice; + #else + //TODO: delete devices... + #endif +} + +bx_ne2k_c::bx_ne2k_c() +{ + put("NE2K"); + s.tx_timer_index = BX_NULL_TIMER_HANDLE; + ethdev = NULL; +} + + +bx_ne2k_c::~bx_ne2k_c() +{ + if (ethdev != NULL) { + delete ethdev; + } + BX_DEBUG(("Exit")); +} + +// +// reset - restore state to power-up, cancelling all i/o +// +void bx_ne2k_c::reset(unsigned type) +{ + if (type == BX_RESET_HARDWARE) { + // Zero out registers and memory + memset(&BX_NE2K_THIS s.CR, 0, sizeof(BX_NE2K_THIS s.CR)); + memset(&BX_NE2K_THIS s.IMR, 0, sizeof(BX_NE2K_THIS s.IMR)); + memset(&BX_NE2K_THIS s.DCR, 0, sizeof(BX_NE2K_THIS s.DCR)); + memset(&BX_NE2K_THIS s.TCR, 0, sizeof(BX_NE2K_THIS s.TCR)); + memset(&BX_NE2K_THIS s.TSR, 0, sizeof(BX_NE2K_THIS s.TSR)); + memset(&BX_NE2K_THIS s.RCR, 0, sizeof(BX_NE2K_THIS s.RCR)); + memset(&BX_NE2K_THIS s.RSR, 0, sizeof(BX_NE2K_THIS s.RSR)); + BX_NE2K_THIS s.local_dma = 0; + BX_NE2K_THIS s.page_start = 0; + BX_NE2K_THIS s.page_stop = 0; + BX_NE2K_THIS s.bound_ptr = 0; + BX_NE2K_THIS s.tx_page_start = 0; + BX_NE2K_THIS s.num_coll = 0; + BX_NE2K_THIS s.tx_bytes = 0; + BX_NE2K_THIS s.fifo = 0; + BX_NE2K_THIS s.remote_dma = 0; + BX_NE2K_THIS s.remote_start = 0; + BX_NE2K_THIS s.remote_bytes = 0; + BX_NE2K_THIS s.tallycnt_0 = 0; + BX_NE2K_THIS s.tallycnt_1 = 0; + BX_NE2K_THIS s.tallycnt_2 = 0; + + memset(&BX_NE2K_THIS s.physaddr, 0, sizeof(BX_NE2K_THIS s.physaddr)); + memset(&BX_NE2K_THIS s.mchash, 0, sizeof(BX_NE2K_THIS s.mchash)); + BX_NE2K_THIS s.curr_page = 0; + + BX_NE2K_THIS s.rempkt_ptr = 0; + BX_NE2K_THIS s.localpkt_ptr = 0; + BX_NE2K_THIS s.address_cnt = 0; + + memset(&BX_NE2K_THIS s.mem, 0, sizeof(BX_NE2K_THIS s.mem)); + + // Set power-up conditions + BX_NE2K_THIS s.CR.stop = 1; + BX_NE2K_THIS s.CR.rdma_cmd = 4; + BX_NE2K_THIS s.DCR.longaddr = 1; + + set_irq_level(0); + } + memset(&BX_NE2K_THIS s.ISR, 0, sizeof(BX_NE2K_THIS s.ISR)); + BX_NE2K_THIS s.ISR.reset = 1; +} + +void bx_ne2k_c::register_state(void) +{ + unsigned i; + char name[6]; + + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "ne2k", "NE2000 State", 31); + bx_list_c *CR = new bx_list_c(list, "CR", 5); + new bx_shadow_bool_c(CR, "stop", &BX_NE2K_THIS s.CR.stop); + new bx_shadow_bool_c(CR, "start", &BX_NE2K_THIS s.CR.start); + new bx_shadow_bool_c(CR, "tx_packet", &BX_NE2K_THIS s.CR.tx_packet); + new bx_shadow_num_c(CR, "rdma_cmd", &BX_NE2K_THIS s.CR.rdma_cmd); + new bx_shadow_num_c(CR, "pgsel", &BX_NE2K_THIS s.CR.pgsel); + bx_list_c *ISR = new bx_list_c(list, "ISR", 8); + new bx_shadow_bool_c(ISR, "pkt_rx", &BX_NE2K_THIS s.ISR.pkt_rx); + new bx_shadow_bool_c(ISR, "pkt_tx", &BX_NE2K_THIS s.ISR.pkt_tx); + new bx_shadow_bool_c(ISR, "rx_err", &BX_NE2K_THIS s.ISR.rx_err); + new bx_shadow_bool_c(ISR, "tx_err", &BX_NE2K_THIS s.ISR.tx_err); + new bx_shadow_bool_c(ISR, "overwrite", &BX_NE2K_THIS s.ISR.overwrite); + new bx_shadow_bool_c(ISR, "cnt_oflow", &BX_NE2K_THIS s.ISR.cnt_oflow); + new bx_shadow_bool_c(ISR, "rdma_done", &BX_NE2K_THIS s.ISR.rdma_done); + new bx_shadow_bool_c(ISR, "reset", &BX_NE2K_THIS s.ISR.reset); + bx_list_c *IMR = new bx_list_c(list, "IMR", 7); + new bx_shadow_bool_c(IMR, "rx_inte", &BX_NE2K_THIS s.IMR.rx_inte); + new bx_shadow_bool_c(IMR, "tx_inte", &BX_NE2K_THIS s.IMR.tx_inte); + new bx_shadow_bool_c(IMR, "rxerr_inte", &BX_NE2K_THIS s.IMR.rxerr_inte); + new bx_shadow_bool_c(IMR, "txerr_inte", &BX_NE2K_THIS s.IMR.txerr_inte); + new bx_shadow_bool_c(IMR, "overw_inte", &BX_NE2K_THIS s.IMR.overw_inte); + new bx_shadow_bool_c(IMR, "cofl_inte", &BX_NE2K_THIS s.IMR.cofl_inte); + new bx_shadow_bool_c(IMR, "rdma_inte", &BX_NE2K_THIS s.IMR.rdma_inte); + bx_list_c *DCR = new bx_list_c(list, "DCR", 6); + new bx_shadow_bool_c(DCR, "wdsize", &BX_NE2K_THIS s.DCR.wdsize); + new bx_shadow_bool_c(DCR, "endian", &BX_NE2K_THIS s.DCR.endian); + new bx_shadow_bool_c(DCR, "longaddr", &BX_NE2K_THIS s.DCR.longaddr); + new bx_shadow_bool_c(DCR, "loop", &BX_NE2K_THIS s.DCR.loop); + new bx_shadow_bool_c(DCR, "auto_rx", &BX_NE2K_THIS s.DCR.auto_rx); + new bx_shadow_num_c(DCR, "fifo_size", &BX_NE2K_THIS s.DCR.fifo_size); + bx_list_c *TCR = new bx_list_c(list, "TCR", 4); + new bx_shadow_bool_c(TCR, "crc_disable", &BX_NE2K_THIS s.TCR.crc_disable); + new bx_shadow_num_c(TCR, "loop_cntl", &BX_NE2K_THIS s.TCR.loop_cntl); + new bx_shadow_bool_c(TCR, "ext_stoptx", &BX_NE2K_THIS s.TCR.ext_stoptx); + new bx_shadow_bool_c(TCR, "coll_prio", &BX_NE2K_THIS s.TCR.coll_prio); + bx_list_c *TSR = new bx_list_c(list, "TSR", 7); + new bx_shadow_bool_c(TSR, "tx_ok", &BX_NE2K_THIS s.TSR.tx_ok); + new bx_shadow_bool_c(TSR, "collided", &BX_NE2K_THIS s.TSR.collided); + new bx_shadow_bool_c(TSR, "aborted", &BX_NE2K_THIS s.TSR.aborted); + new bx_shadow_bool_c(TSR, "no_carrier", &BX_NE2K_THIS s.TSR.no_carrier); + new bx_shadow_bool_c(TSR, "fifo_ur", &BX_NE2K_THIS s.TSR.fifo_ur); + new bx_shadow_bool_c(TSR, "cd_hbeat", &BX_NE2K_THIS s.TSR.cd_hbeat); + new bx_shadow_bool_c(TSR, "ow_coll", &BX_NE2K_THIS s.TSR.ow_coll); + bx_list_c *RCR = new bx_list_c(list, "RCR", 6); + new bx_shadow_bool_c(RCR, "errors_ok", &BX_NE2K_THIS s.RCR.errors_ok); + new bx_shadow_bool_c(RCR, "runts_ok", &BX_NE2K_THIS s.RCR.runts_ok); + new bx_shadow_bool_c(RCR, "broadcast", &BX_NE2K_THIS s.RCR.broadcast); + new bx_shadow_bool_c(RCR, "multicast", &BX_NE2K_THIS s.RCR.multicast); + new bx_shadow_bool_c(RCR, "promisc", &BX_NE2K_THIS s.RCR.promisc); + new bx_shadow_bool_c(RCR, "monitor", &BX_NE2K_THIS s.RCR.monitor); + bx_list_c *RSR = new bx_list_c(list, "RSR", 8); + new bx_shadow_bool_c(RSR, "rx_ok", &BX_NE2K_THIS s.RSR.rx_ok); + new bx_shadow_bool_c(RSR, "bad_crc", &BX_NE2K_THIS s.RSR.bad_crc); + new bx_shadow_bool_c(RSR, "bad_falign", &BX_NE2K_THIS s.RSR.bad_falign); + new bx_shadow_bool_c(RSR, "fifo_or", &BX_NE2K_THIS s.RSR.fifo_or); + new bx_shadow_bool_c(RSR, "rx_missed", &BX_NE2K_THIS s.RSR.rx_missed); + new bx_shadow_bool_c(RSR, "rx_mbit", &BX_NE2K_THIS s.RSR.rx_mbit); + new bx_shadow_bool_c(RSR, "rx_disabled", &BX_NE2K_THIS s.RSR.rx_disabled); + new bx_shadow_bool_c(RSR, "deferred", &BX_NE2K_THIS s.RSR.deferred); + new bx_shadow_num_c(list, "local_dma", &BX_NE2K_THIS s.local_dma, BASE_HEX); + new bx_shadow_num_c(list, "page_start", &BX_NE2K_THIS s.page_start, BASE_HEX); + new bx_shadow_num_c(list, "page_stop", &BX_NE2K_THIS s.page_stop, BASE_HEX); + new bx_shadow_num_c(list, "bound_ptr", &BX_NE2K_THIS s.bound_ptr, BASE_HEX); + new bx_shadow_num_c(list, "tx_page_start", &BX_NE2K_THIS s.tx_page_start, BASE_HEX); + new bx_shadow_num_c(list, "num_coll", &BX_NE2K_THIS s.num_coll, BASE_HEX); + new bx_shadow_num_c(list, "tx_bytes", &BX_NE2K_THIS s.tx_bytes, BASE_HEX); + new bx_shadow_num_c(list, "fifo", &BX_NE2K_THIS s.fifo, BASE_HEX); + new bx_shadow_num_c(list, "remote_dma", &BX_NE2K_THIS s.remote_dma, BASE_HEX); + new bx_shadow_num_c(list, "remote_start", &BX_NE2K_THIS s.remote_start, BASE_HEX); + new bx_shadow_num_c(list, "remote_bytes", &BX_NE2K_THIS s.remote_bytes, BASE_HEX); + new bx_shadow_num_c(list, "tallycnt_0", &BX_NE2K_THIS s.tallycnt_0, BASE_HEX); + new bx_shadow_num_c(list, "tallycnt_1", &BX_NE2K_THIS s.tallycnt_1, BASE_HEX); + new bx_shadow_num_c(list, "tallycnt_2", &BX_NE2K_THIS s.tallycnt_2, BASE_HEX); + bx_list_c *paddr = new bx_list_c(list, "physaddr", 6); + for (i=0; i<6; i++) { + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(paddr, name, &BX_NE2K_THIS s.physaddr[i], BASE_HEX); + } + new bx_shadow_num_c(list, "curr_page", &BX_NE2K_THIS s.curr_page, BASE_HEX); + bx_list_c *mchash = new bx_list_c(list, "mchash", 8); + for (i=0; i<8; i++) { + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(mchash, name, &BX_NE2K_THIS s.mchash[i], BASE_HEX); + } + new bx_shadow_num_c(list, "rempkt_ptr", &BX_NE2K_THIS s.rempkt_ptr, BASE_HEX); + new bx_shadow_num_c(list, "localpkt_ptr", &BX_NE2K_THIS s.localpkt_ptr, BASE_HEX); + new bx_shadow_num_c(list, "address_cnt", &BX_NE2K_THIS s.address_cnt, BASE_HEX); + new bx_shadow_data_c(list, "mem", BX_NE2K_THIS s.mem, BX_NE2K_MEMSIZ); + new bx_shadow_bool_c(list, "tx_timer_active", &BX_NE2K_THIS s.tx_timer_active); +#if BX_SUPPORT_PCI + if (BX_NE2K_THIS s.pci_enabled) { + register_pci_state(list, BX_NE2K_THIS s.pci_conf); + } +#endif +} + +#if BX_SUPPORT_PCI +void bx_ne2k_c::after_restore_state(void) +{ + if (BX_NE2K_THIS s.pci_enabled) { + if (DEV_pci_set_base_io(BX_NE2K_THIS_PTR, read_handler, write_handler, + &BX_NE2K_THIS s.base_address, + &BX_NE2K_THIS s.pci_conf[0x10], + 32, &ne2k_iomask[0], "NE2000 PCI NIC")) { + BX_INFO(("new base address: 0x%04x", BX_NE2K_THIS s.base_address)); + } + } +} +#endif + +// +// read_cr/write_cr - utility routines for handling reads/writes to +// the Command Register +// +Bit32u bx_ne2k_c::read_cr(void) +{ + Bit32u val = + (((BX_NE2K_THIS s.CR.pgsel & 0x03) << 6) | + ((BX_NE2K_THIS s.CR.rdma_cmd & 0x07) << 3) | + (BX_NE2K_THIS s.CR.tx_packet << 2) | + (BX_NE2K_THIS s.CR.start << 1) | + (BX_NE2K_THIS s.CR.stop)); + BX_DEBUG(("read CR returns 0x%02x", val)); + return val; +} + +void bx_ne2k_c::write_cr(Bit32u value) +{ + BX_DEBUG(("wrote 0x%02x to CR", value)); + + // Validate remote-DMA + if ((value & 0x38) == 0x00) { + BX_DEBUG(("CR write - invalid rDMA value 0")); + value |= 0x20; /* dma_cmd == 4 is a safe default */ + } + + // Check for s/w reset + if (value & 0x01) { + BX_NE2K_THIS s.ISR.reset = 1; + BX_NE2K_THIS s.CR.stop = 1; + } else { + BX_NE2K_THIS s.CR.stop = 0; + } + + BX_NE2K_THIS s.CR.rdma_cmd = (value & 0x38) >> 3; + + // If start command issued, the RST bit in the ISR + // must be cleared + if ((value & 0x02) && !BX_NE2K_THIS s.CR.start) { + BX_NE2K_THIS s.ISR.reset = 0; + } + + BX_NE2K_THIS s.CR.start = ((value & 0x02) == 0x02); + BX_NE2K_THIS s.CR.pgsel = (value & 0xc0) >> 6; + + // Check for send-packet command + if (BX_NE2K_THIS s.CR.rdma_cmd == 3) { + // Set up DMA read from receive ring + BX_NE2K_THIS s.remote_start = BX_NE2K_THIS s.remote_dma = BX_NE2K_THIS s.bound_ptr * 256; + BX_NE2K_THIS s.remote_bytes = (Bit16u) chipmem_read(BX_NE2K_THIS s.bound_ptr * 256 + 2, 2); + BX_INFO(("Sending buffer #x%x length %d", + BX_NE2K_THIS s.remote_start, + BX_NE2K_THIS s.remote_bytes)); + } + + // Check for start-tx + if ((value & 0x04) && BX_NE2K_THIS s.TCR.loop_cntl) { + if (BX_NE2K_THIS s.TCR.loop_cntl != 1) { + BX_INFO(("Loop mode %d not supported.", BX_NE2K_THIS s.TCR.loop_cntl)); + } else { + rx_frame (& BX_NE2K_THIS s.mem[BX_NE2K_THIS s.tx_page_start*256 - BX_NE2K_MEMSTART], + BX_NE2K_THIS s.tx_bytes); + } + } else if (value & 0x04) { + if (BX_NE2K_THIS s.CR.stop || (!BX_NE2K_THIS s.CR.start && !BX_NE2K_THIS s.pci_enabled)) { + if (BX_NE2K_THIS s.tx_bytes == 0) /* njh@bandsman.co.uk */ + return; /* Solaris9 probe */ + BX_PANIC(("CR write - tx start, dev in reset")); + } + + if (BX_NE2K_THIS s.tx_bytes == 0) + BX_PANIC(("CR write - tx start, tx bytes == 0")); + + // Send the packet to the system driver + BX_NE2K_THIS s.CR.tx_packet = 1; + BX_NE2K_THIS ethdev->sendpkt(& BX_NE2K_THIS s.mem[BX_NE2K_THIS s.tx_page_start*256 - BX_NE2K_MEMSTART], BX_NE2K_THIS s.tx_bytes); + + // some more debug + if (BX_NE2K_THIS s.tx_timer_active) + BX_ERROR(("CR write, tx timer still active")); + + // Schedule a timer to trigger a tx-complete interrupt + // The number of microseconds is the bit-time / 10. + // The bit-time is the preamble+sfd (64 bits), the + // inter-frame gap (96 bits), the CRC (4 bytes), and the + // the number of bits in the frame (s.tx_bytes * 8). + // + bx_pc_system.activate_timer(BX_NE2K_THIS s.tx_timer_index, + (64 + 96 + 4*8 + BX_NE2K_THIS s.tx_bytes*8)/10, + 0); // not continuous + BX_NE2K_THIS s.tx_timer_active = 1; + } + + // Linux probes for an interrupt by setting up a remote-DMA read + // of 0 bytes with remote-DMA completion interrupts enabled. + // Detect this here + if (BX_NE2K_THIS s.CR.rdma_cmd == 0x01 && + BX_NE2K_THIS s.CR.start && + BX_NE2K_THIS s.remote_bytes == 0) { + BX_NE2K_THIS s.ISR.rdma_done = 1; + if (BX_NE2K_THIS s.IMR.rdma_inte) { + set_irq_level(1); + } + } +} + +// +// chipmem_read/chipmem_write - access the 64K private RAM. +// The ne2000 memory is accessed through the data port of +// the asic (offset 0) after setting up a remote-DMA transfer. +// Both byte and word accesses are allowed. +// The first 16 bytes contains the MAC address at even locations, +// and there is 16K of buffer memory starting at 16K +// +Bit32u BX_CPP_AttrRegparmN(2) +bx_ne2k_c::chipmem_read(Bit32u address, unsigned int io_len) +{ + Bit32u retval = 0; + + if ((io_len == 2) && (address & 0x1)) + BX_PANIC(("unaligned chipmem word read")); + + // ROM'd MAC address + if ((address >=0) && (address <= 31)) { + retval = BX_NE2K_THIS s.macaddr[address]; + if ((io_len == 2) || (io_len == 4)) { + retval |= (BX_NE2K_THIS s.macaddr[address + 1] << 8); + } + if (io_len == 4) { + retval |= (BX_NE2K_THIS s.macaddr[address + 2] << 16); + retval |= (BX_NE2K_THIS s.macaddr[address + 3] << 24); + } + return (retval); + } + + if ((address >= BX_NE2K_MEMSTART) && (address < BX_NE2K_MEMEND)) { + retval = BX_NE2K_THIS s.mem[address - BX_NE2K_MEMSTART]; + if ((io_len == 2) || (io_len == 4)) { + retval |= (BX_NE2K_THIS s.mem[address - BX_NE2K_MEMSTART + 1] << 8); + } + if (io_len == 4) { + retval |= (BX_NE2K_THIS s.mem[address - BX_NE2K_MEMSTART + 2] << 16); + retval |= (BX_NE2K_THIS s.mem[address - BX_NE2K_MEMSTART + 3] << 24); + } + return (retval); + } + + BX_DEBUG(("out-of-bounds chipmem read, %04X", address)); + + return (0xff); +} + +void BX_CPP_AttrRegparmN(3) +bx_ne2k_c::chipmem_write(Bit32u address, Bit32u value, unsigned io_len) +{ + if ((io_len == 2) && (address & 0x1)) + BX_PANIC(("unaligned chipmem word write")); + + if ((address >= BX_NE2K_MEMSTART) && (address < BX_NE2K_MEMEND)) { + BX_NE2K_THIS s.mem[address - BX_NE2K_MEMSTART] = value & 0xff; + if ((io_len == 2) || (io_len == 4)) { + BX_NE2K_THIS s.mem[address - BX_NE2K_MEMSTART + 1] = value >> 8; + } + if (io_len == 4) { + BX_NE2K_THIS s.mem[address - BX_NE2K_MEMSTART + 2] = value >> 16; + BX_NE2K_THIS s.mem[address - BX_NE2K_MEMSTART + 3] = value >> 24; + } + } else + BX_DEBUG(("out-of-bounds chipmem write, %04X", address)); +} + +// +// asic_read/asic_write - This is the high 16 bytes of i/o space +// (the lower 16 bytes is for the DS8390). Only two locations +// are used: offset 0, which is used for data transfer, and +// offset 0xf, which is used to reset the device. +// The data transfer port is used to as 'external' DMA to the +// DS8390. The chip has to have the DMA registers set up, and +// after that, insw/outsw instructions can be used to move +// the appropriate number of bytes to/from the device. +// +Bit32u BX_CPP_AttrRegparmN(2) +bx_ne2k_c::asic_read(Bit32u offset, unsigned int io_len) +{ + Bit32u retval = 0; + + switch (offset) { + case 0x0: // Data register + // + // A read remote-DMA command must have been issued, + // and the source-address and length registers must + // have been initialised. + // + if (io_len > BX_NE2K_THIS s.remote_bytes) { + BX_ERROR(("ne2K: dma read underrun iolen=%d remote_bytes=%d",io_len,BX_NE2K_THIS s.remote_bytes)); + //return 0; + } + + //BX_INFO(("ne2k read DMA: addr=%4x remote_bytes=%d",BX_NE2K_THIS s.remote_dma,BX_NE2K_THIS s.remote_bytes)); + retval = chipmem_read(BX_NE2K_THIS s.remote_dma, io_len); + // + // The 8390 bumps the address and decreases the byte count + // by the selected word size after every access, not by + // the amount of data requested by the host (io_len). + // + if (io_len == 4) { + BX_NE2K_THIS s.remote_dma += io_len; + } else { + BX_NE2K_THIS s.remote_dma += (BX_NE2K_THIS s.DCR.wdsize + 1); + } + if (BX_NE2K_THIS s.remote_dma == BX_NE2K_THIS s.page_stop << 8) { + BX_NE2K_THIS s.remote_dma = BX_NE2K_THIS s.page_start << 8; + } + // keep s.remote_bytes from underflowing + if (BX_NE2K_THIS s.remote_bytes > BX_NE2K_THIS s.DCR.wdsize) + if (io_len == 4) { + BX_NE2K_THIS s.remote_bytes -= io_len; + } else { + BX_NE2K_THIS s.remote_bytes -= (BX_NE2K_THIS s.DCR.wdsize + 1); + } + else + BX_NE2K_THIS s.remote_bytes = 0; + + // If all bytes have been written, signal remote-DMA complete + if (BX_NE2K_THIS s.remote_bytes == 0) { + BX_NE2K_THIS s.ISR.rdma_done = 1; + if (BX_NE2K_THIS s.IMR.rdma_inte) { + set_irq_level(1); + } + } + break; + + case 0xf: // Reset register + theNE2kDevice->reset(BX_RESET_SOFTWARE); + break; + + default: + BX_INFO(("asic read invalid address %04x", (unsigned) offset)); + break; + } + + return (retval); +} + +void bx_ne2k_c::asic_write(Bit32u offset, Bit32u value, unsigned io_len) +{ + BX_DEBUG(("asic write addr=0x%02x, value=0x%04x", (unsigned) offset, (unsigned) value)); + switch (offset) { + case 0x0: // Data register - see asic_read for a description + + if ((io_len > 1) && (BX_NE2K_THIS s.DCR.wdsize == 0)) { + BX_PANIC(("dma write length %d on byte mode operation", io_len)); + break; + } + if (BX_NE2K_THIS s.remote_bytes == 0) { + BX_ERROR(("ne2K: dma write, byte count 0")); + } + + chipmem_write(BX_NE2K_THIS s.remote_dma, value, io_len); + if (io_len == 4) { + BX_NE2K_THIS s.remote_dma += io_len; + } else { + BX_NE2K_THIS s.remote_dma += (BX_NE2K_THIS s.DCR.wdsize + 1); + } + if (BX_NE2K_THIS s.remote_dma == BX_NE2K_THIS s.page_stop << 8) { + BX_NE2K_THIS s.remote_dma = BX_NE2K_THIS s.page_start << 8; + } + + if (io_len == 4) { + BX_NE2K_THIS s.remote_bytes -= io_len; + } else { + BX_NE2K_THIS s.remote_bytes -= (BX_NE2K_THIS s.DCR.wdsize + 1); + } + if (BX_NE2K_THIS s.remote_bytes > BX_NE2K_MEMSIZ) + BX_NE2K_THIS s.remote_bytes = 0; + + // If all bytes have been written, signal remote-DMA complete + if (BX_NE2K_THIS s.remote_bytes == 0) { + BX_NE2K_THIS s.ISR.rdma_done = 1; + if (BX_NE2K_THIS s.IMR.rdma_inte) { + set_irq_level(1); + } + } + break; + + case 0xf: // Reset register + // end of reset pulse + break; + + default: // this is invalid, but happens under win95 device detection + BX_INFO(("asic write invalid address %04x, ignoring", (unsigned) offset)); + break; + } +} + +// +// page0_read/page0_write - These routines handle reads/writes to +// the 'zeroth' page of the DS8390 register file +// +Bit32u bx_ne2k_c::page0_read(Bit32u offset, unsigned int io_len) +{ + Bit8u value = 0; + + if (io_len > 1) { + BX_ERROR(("bad length! page 0 read from register 0x%02x, len=%u", offset, + io_len)); /* encountered with win98 hardware probe */ + return value; + } + + switch (offset) { + case 0x1: // CLDA0 + value = (BX_NE2K_THIS s.local_dma & 0xff); + break; + + case 0x2: // CLDA1 + value = (BX_NE2K_THIS s.local_dma >> 8); + break; + + case 0x3: // BNRY + value = BX_NE2K_THIS s.bound_ptr; + break; + + case 0x4: // TSR + value = ((BX_NE2K_THIS s.TSR.ow_coll << 7) | + (BX_NE2K_THIS s.TSR.cd_hbeat << 6) | + (BX_NE2K_THIS s.TSR.fifo_ur << 5) | + (BX_NE2K_THIS s.TSR.no_carrier << 4) | + (BX_NE2K_THIS s.TSR.aborted << 3) | + (BX_NE2K_THIS s.TSR.collided << 2) | + (BX_NE2K_THIS s.TSR.tx_ok)); + break; + + case 0x5: // NCR + value = BX_NE2K_THIS s.num_coll; + break; + + case 0x6: // FIFO + // reading FIFO is only valid in loopback mode + BX_ERROR(("reading FIFO not supported yet")); + value = BX_NE2K_THIS s.fifo; + break; + + case 0x7: // ISR + value = ((BX_NE2K_THIS s.ISR.reset << 7) | + (BX_NE2K_THIS s.ISR.rdma_done << 6) | + (BX_NE2K_THIS s.ISR.cnt_oflow << 5) | + (BX_NE2K_THIS s.ISR.overwrite << 4) | + (BX_NE2K_THIS s.ISR.tx_err << 3) | + (BX_NE2K_THIS s.ISR.rx_err << 2) | + (BX_NE2K_THIS s.ISR.pkt_tx << 1) | + (BX_NE2K_THIS s.ISR.pkt_rx)); + break; + + case 0x8: // CRDA0 + value = (BX_NE2K_THIS s.remote_dma & 0xff); + break; + + case 0x9: // CRDA1 + value = (BX_NE2K_THIS s.remote_dma >> 8); + break; + + case 0xa: // reserved / RTL8029ID0 + if (BX_NE2K_THIS s.pci_enabled) { + value = 0x50; + } else { + BX_INFO(("reserved read - page 0, 0xa")); + value = 0xff; + } + break; + + case 0xb: // reserved / RTL8029ID1 + if (BX_NE2K_THIS s.pci_enabled) { + value = 0x43; + } else { + BX_INFO(("reserved read - page 0, 0xb")); + value = 0xff; + } + break; + + case 0xc: // RSR + value = ((BX_NE2K_THIS s.RSR.deferred << 7) | + (BX_NE2K_THIS s.RSR.rx_disabled << 6) | + (BX_NE2K_THIS s.RSR.rx_mbit << 5) | + (BX_NE2K_THIS s.RSR.rx_missed << 4) | + (BX_NE2K_THIS s.RSR.fifo_or << 3) | + (BX_NE2K_THIS s.RSR.bad_falign << 2) | + (BX_NE2K_THIS s.RSR.bad_crc << 1) | + (BX_NE2K_THIS s.RSR.rx_ok)); + break; + + case 0xd: // CNTR0 + value = BX_NE2K_THIS s.tallycnt_0; + break; + + case 0xe: // CNTR1 + value = BX_NE2K_THIS s.tallycnt_1; + break; + + case 0xf: // CNTR2 + value = BX_NE2K_THIS s.tallycnt_2; + break; + + default: + BX_PANIC(("page 0 register 0x%02x out of range", offset)); + } + + BX_DEBUG(("page 0 read from register 0x%02x, value=0x%02x", offset, value)); + return value; +} + +void bx_ne2k_c::page0_write(Bit32u offset, Bit32u value, unsigned io_len) +{ + Bit8u value2; + + // It appears to be a common practice to use outw on page0 regs... + + // break up outw into two outb's + if (io_len == 2) { + page0_write(offset, (value & 0xff), 1); + if (offset < 0x0f) { + page0_write(offset + 1, ((value >> 8) & 0xff), 1); + } + return; + } + + BX_DEBUG(("page 0 write to register 0x%02x, value=0x%02x", offset, value)); + + switch (offset) { + case 0x1: // PSTART + BX_NE2K_THIS s.page_start = value; + break; + + case 0x2: // PSTOP + BX_NE2K_THIS s.page_stop = value; + break; + + case 0x3: // BNRY + BX_NE2K_THIS s.bound_ptr = value; + break; + + case 0x4: // TPSR + BX_NE2K_THIS s.tx_page_start = value; + break; + + case 0x5: // TBCR0 + // Clear out low byte and re-insert + BX_NE2K_THIS s.tx_bytes &= 0xff00; + BX_NE2K_THIS s.tx_bytes |= (value & 0xff); + break; + + case 0x6: // TBCR1 + // Clear out high byte and re-insert + BX_NE2K_THIS s.tx_bytes &= 0x00ff; + BX_NE2K_THIS s.tx_bytes |= ((value & 0xff) << 8); + break; + + case 0x7: // ISR + value &= 0x7f; // clear RST bit - status-only bit + // All other values are cleared iff the ISR bit is 1 + BX_NE2K_THIS s.ISR.pkt_rx &= ~((bx_bool)((value & 0x01) == 0x01)); + BX_NE2K_THIS s.ISR.pkt_tx &= ~((bx_bool)((value & 0x02) == 0x02)); + BX_NE2K_THIS s.ISR.rx_err &= ~((bx_bool)((value & 0x04) == 0x04)); + BX_NE2K_THIS s.ISR.tx_err &= ~((bx_bool)((value & 0x08) == 0x08)); + BX_NE2K_THIS s.ISR.overwrite &= ~((bx_bool)((value & 0x10) == 0x10)); + BX_NE2K_THIS s.ISR.cnt_oflow &= ~((bx_bool)((value & 0x20) == 0x20)); + BX_NE2K_THIS s.ISR.rdma_done &= ~((bx_bool)((value & 0x40) == 0x40)); + value = ((BX_NE2K_THIS s.ISR.rdma_done << 6) | + (BX_NE2K_THIS s.ISR.cnt_oflow << 5) | + (BX_NE2K_THIS s.ISR.overwrite << 4) | + (BX_NE2K_THIS s.ISR.tx_err << 3) | + (BX_NE2K_THIS s.ISR.rx_err << 2) | + (BX_NE2K_THIS s.ISR.pkt_tx << 1) | + (BX_NE2K_THIS s.ISR.pkt_rx)); + value &= ((BX_NE2K_THIS s.IMR.rdma_inte << 6) | + (BX_NE2K_THIS s.IMR.cofl_inte << 5) | + (BX_NE2K_THIS s.IMR.overw_inte << 4) | + (BX_NE2K_THIS s.IMR.txerr_inte << 3) | + (BX_NE2K_THIS s.IMR.rxerr_inte << 2) | + (BX_NE2K_THIS s.IMR.tx_inte << 1) | + (BX_NE2K_THIS s.IMR.rx_inte)); + if (value == 0) + set_irq_level(0); + break; + + case 0x8: // RSAR0 + // Clear out low byte and re-insert + BX_NE2K_THIS s.remote_start &= 0xff00; + BX_NE2K_THIS s.remote_start |= (value & 0xff); + BX_NE2K_THIS s.remote_dma = BX_NE2K_THIS s.remote_start; + break; + + case 0x9: // RSAR1 + // Clear out high byte and re-insert + BX_NE2K_THIS s.remote_start &= 0x00ff; + BX_NE2K_THIS s.remote_start |= ((value & 0xff) << 8); + BX_NE2K_THIS s.remote_dma = BX_NE2K_THIS s.remote_start; + break; + + case 0xa: // RBCR0 + // Clear out low byte and re-insert + BX_NE2K_THIS s.remote_bytes &= 0xff00; + BX_NE2K_THIS s.remote_bytes |= (value & 0xff); + break; + + case 0xb: // RBCR1 + // Clear out high byte and re-insert + BX_NE2K_THIS s.remote_bytes &= 0x00ff; + BX_NE2K_THIS s.remote_bytes |= ((value & 0xff) << 8); + break; + + case 0xc: // RCR + // Check if the reserved bits are set + if (value & 0xc0) + BX_INFO(("RCR write, reserved bits set")); + + // Set all other bit-fields + BX_NE2K_THIS s.RCR.errors_ok = ((value & 0x01) == 0x01); + BX_NE2K_THIS s.RCR.runts_ok = ((value & 0x02) == 0x02); + BX_NE2K_THIS s.RCR.broadcast = ((value & 0x04) == 0x04); + BX_NE2K_THIS s.RCR.multicast = ((value & 0x08) == 0x08); + BX_NE2K_THIS s.RCR.promisc = ((value & 0x10) == 0x10); + BX_NE2K_THIS s.RCR.monitor = ((value & 0x20) == 0x20); + + // Monitor bit is a little suspicious... + if (value & 0x20) + BX_INFO(("RCR write, monitor bit set!")); + break; + + case 0xd: // TCR + // Check reserved bits + if (value & 0xe0) + BX_ERROR(("TCR write, reserved bits set")); + + // Test loop mode (not supported) + if (value & 0x06) { + BX_NE2K_THIS s.TCR.loop_cntl = (value & 0x6) >> 1; + BX_INFO(("TCR write, loop mode %d not supported", BX_NE2K_THIS s.TCR.loop_cntl)); + } else { + BX_NE2K_THIS s.TCR.loop_cntl = 0; + } + + // Inhibit-CRC not supported. + if (value & 0x01) + BX_PANIC(("TCR write, inhibit-CRC not supported")); + + // Auto-transmit disable very suspicious + if (value & 0x08) + BX_PANIC(("TCR write, auto transmit disable not supported")); + + // Allow collision-offset to be set, although not used + BX_NE2K_THIS s.TCR.coll_prio = ((value & 0x08) == 0x08); + break; + + case 0xe: // DCR + // the loopback mode is not suppported yet + if (!(value & 0x08)) { + BX_ERROR(("DCR write, loopback mode selected")); + } + // It is questionable to set longaddr and auto_rx, since they + // aren't supported on the ne2000. Print a warning and continue + if (value & 0x04) + BX_INFO(("DCR write - LAS set ???")); + if (value & 0x10) + BX_INFO(("DCR write - AR set ???")); + + // Set other values. + BX_NE2K_THIS s.DCR.wdsize = ((value & 0x01) == 0x01); + BX_NE2K_THIS s.DCR.endian = ((value & 0x02) == 0x02); + BX_NE2K_THIS s.DCR.longaddr = ((value & 0x04) == 0x04); // illegal ? + BX_NE2K_THIS s.DCR.loop = ((value & 0x08) == 0x08); + BX_NE2K_THIS s.DCR.auto_rx = ((value & 0x10) == 0x10); // also illegal ? + BX_NE2K_THIS s.DCR.fifo_size = (value & 0x50) >> 5; + break; + + case 0xf: // IMR + // Check for reserved bit + if (value & 0x80) + BX_ERROR(("IMR write, reserved bit set")); + + // Set other values + BX_NE2K_THIS s.IMR.rx_inte = ((value & 0x01) == 0x01); + BX_NE2K_THIS s.IMR.tx_inte = ((value & 0x02) == 0x02); + BX_NE2K_THIS s.IMR.rxerr_inte = ((value & 0x04) == 0x04); + BX_NE2K_THIS s.IMR.txerr_inte = ((value & 0x08) == 0x08); + BX_NE2K_THIS s.IMR.overw_inte = ((value & 0x10) == 0x10); + BX_NE2K_THIS s.IMR.cofl_inte = ((value & 0x20) == 0x20); + BX_NE2K_THIS s.IMR.rdma_inte = ((value & 0x40) == 0x40); + value2 = ((BX_NE2K_THIS s.ISR.rdma_done << 6) | + (BX_NE2K_THIS s.ISR.cnt_oflow << 5) | + (BX_NE2K_THIS s.ISR.overwrite << 4) | + (BX_NE2K_THIS s.ISR.tx_err << 3) | + (BX_NE2K_THIS s.ISR.rx_err << 2) | + (BX_NE2K_THIS s.ISR.pkt_tx << 1) | + (BX_NE2K_THIS s.ISR.pkt_rx)); + if (((value & value2) & 0x7f) == 0) { + set_irq_level(0); + } else { + set_irq_level(1); + } + break; + + default: + BX_PANIC(("page 0 write, bad register 0x%02x", offset)); + } +} + +// +// page1_read/page1_write - These routines handle reads/writes to +// the first page of the DS8390 register file +// +Bit32u bx_ne2k_c::page1_read(Bit32u offset, unsigned int io_len) +{ + BX_DEBUG(("page 1 read from register 0x%02x, len=%u", offset, io_len)); + + if (io_len > 1) + BX_PANIC(("bad length! page 1 read from register 0x%02x, len=%u", offset, io_len)); + + switch (offset) { + case 0x1: // PAR0-5 + case 0x2: + case 0x3: + case 0x4: + case 0x5: + case 0x6: + return (BX_NE2K_THIS s.physaddr[offset - 1]); + break; + + case 0x7: // CURR + BX_DEBUG(("returning current page: 0x%02x", (BX_NE2K_THIS s.curr_page))); + return (BX_NE2K_THIS s.curr_page); + + case 0x8: // MAR0-7 + case 0x9: + case 0xa: + case 0xb: + case 0xc: + case 0xd: + case 0xe: + case 0xf: + return (BX_NE2K_THIS s.mchash[offset - 8]); + break; + + default: + BX_PANIC(("page 1 read register 0x%02x out of range", offset)); + } + + return (0); +} + +void bx_ne2k_c::page1_write(Bit32u offset, Bit32u value, unsigned io_len) +{ + BX_DEBUG(("page 1 write to register 0x%02x, len=%u, value=0x%04x", offset, + io_len, value)); + + switch (offset) { + case 0x1: // PAR0-5 + case 0x2: + case 0x3: + case 0x4: + case 0x5: + case 0x6: + BX_NE2K_THIS s.physaddr[offset - 1] = value; + if (offset == 6) { + BX_INFO(("Physical address set to %02x:%02x:%02x:%02x:%02x:%02x", + BX_NE2K_THIS s.physaddr[0], + BX_NE2K_THIS s.physaddr[1], + BX_NE2K_THIS s.physaddr[2], + BX_NE2K_THIS s.physaddr[3], + BX_NE2K_THIS s.physaddr[4], + BX_NE2K_THIS s.physaddr[5])); + } + break; + + case 0x7: // CURR + BX_NE2K_THIS s.curr_page = value; + break; + + case 0x8: // MAR0-7 + case 0x9: + case 0xa: + case 0xb: + case 0xc: + case 0xd: + case 0xe: + case 0xf: + BX_NE2K_THIS s.mchash[offset - 8] = value; + break; + + default: + BX_PANIC(("page 1 write register 0x%02x out of range", offset)); + } +} + +// +// page2_read/page2_write - These routines handle reads/writes to +// the second page of the DS8390 register file +// +Bit32u bx_ne2k_c::page2_read(Bit32u offset, unsigned int io_len) +{ + BX_DEBUG(("page 2 read from register 0x%02x, len=%u", offset, io_len)); + + if (io_len > 1) + BX_PANIC(("bad length! page 2 read from register 0x%02x, len=%u", offset, io_len)); + + switch (offset) { + case 0x1: // PSTART + return (BX_NE2K_THIS s.page_start); + + case 0x2: // PSTOP + return (BX_NE2K_THIS s.page_stop); + + case 0x3: // Remote Next-packet pointer + return (BX_NE2K_THIS s.rempkt_ptr); + + case 0x4: // TPSR + return (BX_NE2K_THIS s.tx_page_start); + + case 0x5: // Local Next-packet pointer + return (BX_NE2K_THIS s.localpkt_ptr); + + case 0x6: // Address counter (upper) + return (BX_NE2K_THIS s.address_cnt >> 8); + + case 0x7: // Address counter (lower) + return (BX_NE2K_THIS s.address_cnt & 0xff); + + case 0x8: // Reserved + case 0x9: + case 0xa: + case 0xb: + BX_ERROR(("reserved read - page 2, register 0x%02x", offset)); + return (0xff); + + case 0xc: // RCR + return ((BX_NE2K_THIS s.RCR.monitor << 5) | + (BX_NE2K_THIS s.RCR.promisc << 4) | + (BX_NE2K_THIS s.RCR.multicast << 3) | + (BX_NE2K_THIS s.RCR.broadcast << 2) | + (BX_NE2K_THIS s.RCR.runts_ok << 1) | + (BX_NE2K_THIS s.RCR.errors_ok)); + + case 0xd: // TCR + return ((BX_NE2K_THIS s.TCR.coll_prio << 4) | + (BX_NE2K_THIS s.TCR.ext_stoptx << 3) | + ((BX_NE2K_THIS s.TCR.loop_cntl & 0x3) << 1) | + (BX_NE2K_THIS s.TCR.crc_disable)); + + case 0xe: // DCR + return (((BX_NE2K_THIS s.DCR.fifo_size & 0x3) << 5) | + (BX_NE2K_THIS s.DCR.auto_rx << 4) | + (BX_NE2K_THIS s.DCR.loop << 3) | + (BX_NE2K_THIS s.DCR.longaddr << 2) | + (BX_NE2K_THIS s.DCR.endian << 1) | + (BX_NE2K_THIS s.DCR.wdsize)); + + case 0xf: // IMR + return ((BX_NE2K_THIS s.IMR.rdma_inte << 6) | + (BX_NE2K_THIS s.IMR.cofl_inte << 5) | + (BX_NE2K_THIS s.IMR.overw_inte << 4) | + (BX_NE2K_THIS s.IMR.txerr_inte << 3) | + (BX_NE2K_THIS s.IMR.rxerr_inte << 2) | + (BX_NE2K_THIS s.IMR.tx_inte << 1) | + (BX_NE2K_THIS s.IMR.rx_inte)); + + default: + BX_PANIC(("page 2 register 0x%02x out of range", offset)); + } + + return (0); +} + +void bx_ne2k_c::page2_write(Bit32u offset, Bit32u value, unsigned io_len) +{ + // Maybe all writes here should be BX_PANIC()'d, since they + // affect internal operation, but let them through for now + // and print a warning. + BX_ERROR(("page 2 write to register 0x%02x, len=%u, value=0x%04x", offset, + io_len, value)); + + switch (offset) { + case 0x1: // CLDA0 + // Clear out low byte and re-insert + BX_NE2K_THIS s.local_dma &= 0xff00; + BX_NE2K_THIS s.local_dma |= (value & 0xff); + break; + + case 0x2: // CLDA1 + // Clear out high byte and re-insert + BX_NE2K_THIS s.local_dma &= 0x00ff; + BX_NE2K_THIS s.local_dma |= ((value & 0xff) << 8); + break; + + case 0x3: // Remote Next-pkt pointer + BX_NE2K_THIS s.rempkt_ptr = value; + break; + + case 0x4: + BX_PANIC(("page 2 write to reserved register 0x04")); + break; + + case 0x5: // Local Next-packet pointer + BX_NE2K_THIS s.localpkt_ptr = value; + break; + + case 0x6: // Address counter (upper) + // Clear out high byte and re-insert + BX_NE2K_THIS s.address_cnt &= 0x00ff; + BX_NE2K_THIS s.address_cnt |= ((value & 0xff) << 8); + break; + + case 0x7: // Address counter (lower) + // Clear out low byte and re-insert + BX_NE2K_THIS s.address_cnt &= 0xff00; + BX_NE2K_THIS s.address_cnt |= (value & 0xff); + break; + + case 0x8: + case 0x9: + case 0xa: + case 0xb: + case 0xc: + case 0xd: + case 0xe: + case 0xf: + BX_PANIC(("page 2 write to reserved register 0x%02x", offset)); + break; + + default: + BX_PANIC(("page 2 write, illegal register 0x%02x", offset)); + break; + } +} + +// +// page3_read/page3_write - writes to this page are illegal +// +Bit32u bx_ne2k_c::page3_read(Bit32u offset, unsigned int io_len) +{ + if (BX_NE2K_THIS s.pci_enabled) { + switch (offset) { + case 0x3: // CONFIG0 + return (0); + case 0x5: // CONFIG2 + return (0x40); + case 0x6: // CONFIG3 + return (0x40); + default: + BX_ERROR(("page 3 read register 0x%02x attempted", offset)); + return (0); + } + } else { + BX_ERROR(("page 3 read register 0x%02x attempted", offset)); + return (0); + } +} + +void bx_ne2k_c::page3_write(Bit32u offset, Bit32u value, unsigned io_len) +{ + BX_ERROR(("page 3 write register 0x%02x attempted", offset)); +} + +// +// tx_timer_handler/tx_timer +// +void bx_ne2k_c::tx_timer_handler(void *this_ptr) +{ + bx_ne2k_c *class_ptr = (bx_ne2k_c *) this_ptr; + class_ptr->tx_timer(); +} + +void bx_ne2k_c::tx_timer(void) +{ + BX_DEBUG(("tx_timer")); + BX_NE2K_THIS s.CR.tx_packet = 0; + BX_NE2K_THIS s.TSR.tx_ok = 1; + BX_NE2K_THIS s.ISR.pkt_tx = 1; + // Generate an interrupt if not masked + if (BX_NE2K_THIS s.IMR.tx_inte) { + set_irq_level(1); + } + BX_NE2K_THIS s.tx_timer_active = 0; +} + + +// +// read_handler/read - i/o 'catcher' function called from BOCHS +// mainline when the CPU attempts a read in the i/o space registered +// by this ne2000 instance +// +Bit32u bx_ne2k_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_NE2K_SMF + bx_ne2k_c *class_ptr = (bx_ne2k_c *) this_ptr; + + return class_ptr->read(address, io_len); +} + +Bit32u bx_ne2k_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_NE2K_SMF + BX_DEBUG(("read addr %x, len %d", address, io_len)); + Bit32u retval = 0; + int offset = address - BX_NE2K_THIS s.base_address; + + if (offset >= 0x10) { + retval = asic_read(offset - 0x10, io_len); + } else if (offset == 0x00) { + retval = read_cr(); + } else { + switch (BX_NE2K_THIS s.CR.pgsel) { + case 0x00: + retval = page0_read(offset, io_len); + break; + + case 0x01: + retval = page1_read(offset, io_len); + break; + + case 0x02: + retval = page2_read(offset, io_len); + break; + + case 0x03: + retval = page3_read(offset, io_len); + break; + + default: + BX_PANIC(("ne2K: unknown value of pgsel in read - %d", + BX_NE2K_THIS s.CR.pgsel)); + } + } + + return (retval); +} + +// +// write_handler/write - i/o 'catcher' function called from BOCHS +// mainline when the CPU attempts a write in the i/o space registered +// by this ne2000 instance +// +void bx_ne2k_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, + unsigned io_len) +{ +#if !BX_USE_NE2K_SMF + bx_ne2k_c *class_ptr = (bx_ne2k_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_ne2k_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_NE2K_SMF + BX_DEBUG(("write addr %x, value %x len %d", address, value, io_len)); + int offset = address - BX_NE2K_THIS s.base_address; + + // + // The high 16 bytes of i/o space are for the ne2000 asic - + // the low 16 bytes are for the DS8390, with the current + // page being selected by the PS0,PS1 registers in the + // command register + // + if (offset >= 0x10) { + asic_write(offset - 0x10, value, io_len); + } else if (offset == 0x00) { + write_cr(value); + } else { + switch (BX_NE2K_THIS s.CR.pgsel) { + case 0x00: + page0_write(offset, value, io_len); + break; + + case 0x01: + page1_write(offset, value, io_len); + break; + + case 0x02: + page2_write(offset, value, io_len); + break; + + case 0x03: + page3_write(offset, value, io_len); + break; + + default: + BX_PANIC(("ne2K: unknown value of pgsel in write - %d", + BX_NE2K_THIS s.CR.pgsel)); + } + } +} + + +/* + * mcast_index() - return the 6-bit index into the multicast + * table. Stolen unashamedly from FreeBSD's if_ed.c + */ +unsigned bx_ne2k_c::mcast_index(const void *dst) +{ +#define POLYNOMIAL 0x04c11db6 + Bit32u crc = 0xffffffffL; + int carry, i, j; + unsigned char b; + unsigned char *ep = (unsigned char *) dst; + + for (i = 6; --i >= 0;) { + b = *ep++; + for (j = 8; --j >= 0;) { + carry = ((crc & 0x80000000L) ? 1 : 0) ^ (b & 0x01); + crc <<= 1; + b >>= 1; + if (carry) + crc = ((crc ^ POLYNOMIAL) | carry); + } + } + return (crc >> 26); +#undef POLYNOMIAL +} + +/* + * Callback from the eth system driver when a frame has arrived + */ +void bx_ne2k_c::rx_handler(void *arg, const void *buf, unsigned len) +{ + // BX_DEBUG(("rx_handler with length %d", len)); + bx_ne2k_c *class_ptr = (bx_ne2k_c *) arg; + + class_ptr->rx_frame(buf, len); +} + +/* + * rx_frame() - called by the platform-specific code when an + * ethernet frame has been received. The destination address + * is tested to see if it should be accepted, and if the + * rx ring has enough room, it is copied into it and + * the receive process is updated + */ +void bx_ne2k_c::rx_frame(const void *buf, unsigned io_len) +{ + int pages; + int avail; + unsigned idx; + int wrapped; + int nextpage; + unsigned char pkthdr[4]; + unsigned char *pktbuf = (unsigned char *) buf; + unsigned char *startptr; + + BX_DEBUG(("rx_frame with length %d", io_len)); + + + if ((BX_NE2K_THIS s.CR.stop != 0) || + (BX_NE2K_THIS s.page_start == 0) || + ((BX_NE2K_THIS s.DCR.loop == 0) && + (BX_NE2K_THIS s.TCR.loop_cntl != 0))) { + + return; + } + + // Add the pkt header + CRC to the length, and work + // out how many 256-byte pages the frame would occupy + pages = (io_len + 4 + 4 + 255)/256; + + if (BX_NE2K_THIS s.curr_page < BX_NE2K_THIS s.bound_ptr) { + avail = BX_NE2K_THIS s.bound_ptr - BX_NE2K_THIS s.curr_page; + } else { + avail = (BX_NE2K_THIS s.page_stop - BX_NE2K_THIS s.page_start) - + (BX_NE2K_THIS s.curr_page - BX_NE2K_THIS s.bound_ptr); + wrapped = 1; + } + + // Avoid getting into a buffer overflow condition by not attempting + // to do partial receives. The emulation to handle this condition + // seems particularly painful. + if ((avail < pages) +#if BX_NE2K_NEVER_FULL_RING + || (avail == pages) +#endif + ) { + return; + } + + if ((io_len < 60) && !BX_NE2K_THIS s.RCR.runts_ok) { + BX_DEBUG(("rejected small packet, length %d", io_len)); + return; + } + + // Do address filtering if not in promiscuous mode + if (! BX_NE2K_THIS s.RCR.promisc) { + if (!memcmp(buf, broadcast_macaddr, 6)) { + if (!BX_NE2K_THIS s.RCR.broadcast) { + return; + } + } else if (pktbuf[0] & 0x01) { + if (! BX_NE2K_THIS s.RCR.multicast) { + return; + } + idx = mcast_index(buf); + if (!(BX_NE2K_THIS s.mchash[idx >> 3] & (1 << (idx & 0x7)))) { + return; + } + } else if (0 != memcmp(buf, BX_NE2K_THIS s.physaddr, 6)) { + return; + } + } else { + BX_DEBUG(("rx_frame promiscuous receive")); + } + +// BX_INFO(("rx_frame %d to %x:%x:%x:%x:%x:%x from %x:%x:%x:%x:%x:%x", +// io_len, +// pktbuf[0], pktbuf[1], pktbuf[2], pktbuf[3], pktbuf[4], pktbuf[5], +// pktbuf[6], pktbuf[7], pktbuf[8], pktbuf[9], pktbuf[10], pktbuf[11])); + + nextpage = BX_NE2K_THIS s.curr_page + pages; + if (nextpage >= BX_NE2K_THIS s.page_stop) { + nextpage -= BX_NE2K_THIS s.page_stop - BX_NE2K_THIS s.page_start; + } + + // Setup packet header + pkthdr[0] = 0; // rx status - old behavior + pkthdr[0] = 1; // Probably better to set it all the time + // rather than set it to 0, which is clearly wrong. + if (pktbuf[0] & 0x01) { + pkthdr[0] |= 0x20; // rx status += multicast packet + } + pkthdr[1] = nextpage; // ptr to next packet + pkthdr[2] = (io_len + 4) & 0xff; // length-low + pkthdr[3] = (io_len + 4) >> 8; // length-hi + + // copy into buffer, update curpage, and signal interrupt if config'd + startptr = & BX_NE2K_THIS s.mem[BX_NE2K_THIS s.curr_page * 256 - + BX_NE2K_MEMSTART]; + if ((nextpage > BX_NE2K_THIS s.curr_page) || + ((BX_NE2K_THIS s.curr_page + pages) == BX_NE2K_THIS s.page_stop)) { + memcpy(startptr, pkthdr, 4); + memcpy(startptr + 4, buf, io_len); + BX_NE2K_THIS s.curr_page = nextpage; + } else { + int endbytes = (BX_NE2K_THIS s.page_stop - BX_NE2K_THIS s.curr_page) + * 256; + memcpy(startptr, pkthdr, 4); + memcpy(startptr + 4, buf, endbytes - 4); + startptr = & BX_NE2K_THIS s.mem[BX_NE2K_THIS s.page_start * 256 - + BX_NE2K_MEMSTART]; + memcpy(startptr, (void *)(pktbuf + endbytes - 4), + io_len - endbytes + 8); + BX_NE2K_THIS s.curr_page = nextpage; + } + + BX_NE2K_THIS s.RSR.rx_ok = 1; + BX_NE2K_THIS s.RSR.rx_mbit = (bx_bool)((pktbuf[0] & 0x01) > 0); + + BX_NE2K_THIS s.ISR.pkt_rx = 1; + + if (BX_NE2K_THIS s.IMR.rx_inte) { + set_irq_level(1); + } + +} + +void bx_ne2k_c::init(void) +{ + char devname[16]; + Bit8u macaddr[6]; + bx_list_c *base; + + BX_DEBUG(("Init $Id$")); + + // Read in values from config interface + char configname[32]; + snprintf(configname, 32, "network.ne2k%d", interfaceNo); + //base = (bx_list_c*) SIM->get_param(BXPN_NE2K); + base = (bx_list_c*) SIM->get_param(configname); + memcpy(macaddr, SIM->get_param_string("macaddr", base)->getptr(), 6); + BX_NE2K_THIS s.pci_enabled = 0; + //strncpy(devname, "NE2000 NIC", 16); + sprintf(devname, "ne2000 NIC %d", interfaceNo); + +#if BX_SUPPORT_PCI + if ((SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get()) && + (DEV_is_pci_device(BX_PLUGIN_NE2K))) { + BX_NE2K_THIS s.pci_enabled = 1; + strcpy(devname, "NE2000 PCI NIC"); + BX_NE2K_THIS s.devfunc = 0x00; + DEV_register_pci_handlers(this, &BX_NE2K_THIS s.devfunc, + BX_PLUGIN_NE2K, devname); + + for (unsigned i=0; i<256; i++) + BX_NE2K_THIS s.pci_conf[i] = 0x0; + // readonly registers + BX_NE2K_THIS s.pci_conf[0x00] = 0xec; + BX_NE2K_THIS s.pci_conf[0x01] = 0x10; + BX_NE2K_THIS s.pci_conf[0x02] = 0x29; + BX_NE2K_THIS s.pci_conf[0x03] = 0x80; + BX_NE2K_THIS s.pci_conf[0x04] = 0x01; + BX_NE2K_THIS s.pci_conf[0x0a] = 0x00; + BX_NE2K_THIS s.pci_conf[0x0b] = 0x02; + BX_NE2K_THIS s.pci_conf[0x0e] = 0x00; + BX_NE2K_THIS s.pci_conf[0x10] = 0x01; + BX_NE2K_THIS s.pci_conf[0x3d] = BX_PCI_INTA; + BX_NE2K_THIS s.base_address = 0x0; + } +#endif + + if (BX_NE2K_THIS s.tx_timer_index == BX_NULL_TIMER_HANDLE) { + BX_NE2K_THIS s.tx_timer_index = + bx_pc_system.register_timer(this, tx_timer_handler, 0, + 0,0, "ne2k"); // one-shot, inactive + } + // Register the IRQ and i/o port addresses + if (!BX_NE2K_THIS s.pci_enabled) { + BX_NE2K_THIS s.base_address = SIM->get_param_num("ioaddr", base)->get(); + BX_NE2K_THIS s.base_irq = SIM->get_param_num("irq", base)->get(); + + snprintf(configname, 32, "NE2000 ethernet NIC %d", interfaceNo); + + DEV_register_irq(BX_NE2K_THIS s.base_irq, configname); + + DEV_register_ioread_handler_range(BX_NE2K_THIS_PTR, read_handler, + BX_NE2K_THIS s.base_address, + BX_NE2K_THIS s.base_address + 0x0F, + devname, 3); + DEV_register_iowrite_handler_range(BX_NE2K_THIS_PTR, write_handler, + BX_NE2K_THIS s.base_address, + BX_NE2K_THIS s.base_address + 0x0F, + devname, 3); + DEV_register_ioread_handler(BX_NE2K_THIS_PTR, read_handler, + BX_NE2K_THIS s.base_address + 0x10, + devname, 3); + DEV_register_iowrite_handler(BX_NE2K_THIS_PTR, write_handler, + BX_NE2K_THIS s.base_address + 0x10, + devname, 3); + DEV_register_ioread_handler(BX_NE2K_THIS_PTR, read_handler, + BX_NE2K_THIS s.base_address + 0x1F, + devname, 1); + DEV_register_iowrite_handler(BX_NE2K_THIS_PTR, write_handler, + BX_NE2K_THIS s.base_address + 0x1F, + devname, 1); + + BX_INFO(("port 0x%x/32 irq %d mac %02x:%02x:%02x:%02x:%02x:%02x", + BX_NE2K_THIS s.base_address, + BX_NE2K_THIS s.base_irq, + macaddr[0], macaddr[1], + macaddr[2], macaddr[3], + macaddr[4], macaddr[5])); + } else { + BX_INFO(("%s initialized mac %02x:%02x:%02x:%02x:%02x:%02x", + devname, + macaddr[0], macaddr[1], + macaddr[2], macaddr[3], + macaddr[4], macaddr[5])); + } + + // Initialise the mac address area by doubling the physical address + BX_NE2K_THIS s.macaddr[0] = macaddr[0]; + BX_NE2K_THIS s.macaddr[1] = macaddr[0]; + BX_NE2K_THIS s.macaddr[2] = macaddr[1]; + BX_NE2K_THIS s.macaddr[3] = macaddr[1]; + BX_NE2K_THIS s.macaddr[4] = macaddr[2]; + BX_NE2K_THIS s.macaddr[5] = macaddr[2]; + BX_NE2K_THIS s.macaddr[6] = macaddr[3]; + BX_NE2K_THIS s.macaddr[7] = macaddr[3]; + BX_NE2K_THIS s.macaddr[8] = macaddr[4]; + BX_NE2K_THIS s.macaddr[9] = macaddr[4]; + BX_NE2K_THIS s.macaddr[10] = macaddr[5]; + BX_NE2K_THIS s.macaddr[11] = macaddr[5]; + + // ne2k signature + for (int i = 12; i < 32; i++) + BX_NE2K_THIS s.macaddr[i] = 0x57; + + // Attach to the simulated ethernet dev + const char *ethmod = SIM->get_param_enum("ethmod", base)->get_selected(); + BX_NE2K_THIS ethdev = eth_locator_c::create(ethmod, + SIM->get_param_string("ethdev", base)->getptr(), + (const char *) SIM->get_param_string("macaddr", base)->getptr(), + rx_handler, + this, + SIM->get_param_string("script", base)->getptr()); + + if (BX_NE2K_THIS ethdev == NULL) { + BX_PANIC(("could not find eth module %s", ethmod)); + // if they continue, use null. + BX_INFO(("could not find eth module %s - using null instead", ethmod)); + + BX_NE2K_THIS ethdev = eth_locator_c::create("null", NULL, + (const char *) SIM->get_param_string("macaddr", base)->getptr(), + rx_handler, + this, ""); + if (BX_NE2K_THIS ethdev == NULL) + BX_PANIC(("could not locate null module")); + } +} + +void bx_ne2k_c::set_irq_level(bx_bool level) +{ + if (BX_NE2K_THIS s.pci_enabled) { +#if BX_SUPPORT_PCI + DEV_pci_set_irq(BX_NE2K_THIS s.devfunc, BX_NE2K_THIS s.pci_conf[0x3d], level); +#endif + } else { + if (level) { + DEV_pic_raise_irq(BX_NE2K_THIS s.base_irq); + } else { + DEV_pic_lower_irq(BX_NE2K_THIS s.base_irq); + } + } +} + +#if BX_SUPPORT_PCI + +// pci configuration space read callback handler +Bit32u bx_ne2k_c::pci_read_handler(Bit8u address, unsigned io_len) +{ + Bit32u value = 0; + + for (unsigned i=0; i 0x13) && (address < 0x34)) + return; + for (unsigned i=0; i> (i*8)) & 0xFF; + switch (address+i) { + case 0x05: + case 0x06: + case 0x3d: + break; + case 0x04: + BX_NE2K_THIS s.pci_conf[address+i] = value8 & 0x03; + break; + case 0x3c: + if (value8 != oldval) { + BX_INFO(("new irq line = %d", value8)); + BX_NE2K_THIS s.pci_conf[address+i] = value8; + } + break; + case 0x10: + value8 = (value8 & 0xfc) | 0x01; + case 0x11: + case 0x12: + case 0x13: + baseaddr_change |= (value8 != oldval); + default: + BX_NE2K_THIS s.pci_conf[address+i] = value8; + BX_DEBUG(("NE2000 PCI NIC write register 0x%02x value 0x%02x", address+i, + value8)); + } + } + if (baseaddr_change) { + if (DEV_pci_set_base_io(BX_NE2K_THIS_PTR, read_handler, write_handler, + &BX_NE2K_THIS s.base_address, + &BX_NE2K_THIS s.pci_conf[0x10], + 32, &ne2k_iomask[0], "NE2000 PCI NIC")) { + BX_INFO(("new base address: 0x%04x", BX_NE2K_THIS s.base_address)); + } + } +} + +#endif /* BX_SUPPORT_PCI */ + +#if BX_DEBUGGER + +/* + * this implements the info ne2k commands in the debugger. + * info ne2k - shows all registers + * info ne2k page N - shows all registers in a page + * info ne2k page N reg M - shows just one register + */ + +#define SHOW_FIELD(reg,field) do { \ + if (n>0 && !(n%5)) dbg_printf ("\n "); \ + dbg_printf ("%s=%d ", #field, BX_NE2K_THIS s.reg.field); \ + n++; \ +} while (0); +#define BX_HIGH_BYTE(x) ((0xff00 & (x)) >> 8) +#define BX_LOW_BYTE(x) (0x00ff & (x)) +#define BX_DUPLICATE(n) if (brief && num!=n) break; + +void bx_ne2k_c::print_info(FILE *fp, int page, int reg, int brief) +{ + int i; + int n = 0; + if (page < 0) { + for (page=0; page<=2; page++) + theNE2kDevice->print_info(fp, page, reg, 1); + // tell them how to use this command + dbg_printf("\nHow to use the info ne2k command:\n"); + dbg_printf("info ne2k - show all registers\n"); + dbg_printf("info ne2k page N - show registers in page N\n"); + dbg_printf("info ne2k page N reg M - show just one register\n"); + return; + } + if (page > 2) { + dbg_printf("NE2K has only pages 0, 1, and 2. Page %d is out of range.\n", page); + return; + } + if (reg < 0) { + dbg_printf("NE2K registers, page %d\n", page); + dbg_printf("----------------------\n"); + for (reg=0; reg<=15; reg++) + theNE2kDevice->print_info (fp, page, reg, 1); + dbg_printf("----------------------\n"); + return; + } + if (reg > 15) { + dbg_printf("NE2K has only registers 0-15 (0x0-0xf). Register %d is out of range.\n", reg); + return; + } + if (!brief) { + dbg_printf("NE2K Info - page %d, register 0x%02x\n", page, reg); + dbg_printf("----------------------------------\n"); + } + int num = page*0x100 + reg; + switch (num) { + case 0x0000: + case 0x0100: + case 0x0200: + dbg_printf ("CR (Command register):\n "); + SHOW_FIELD(CR, stop); + SHOW_FIELD(CR, start); + SHOW_FIELD(CR, tx_packet); + SHOW_FIELD(CR, rdma_cmd); + SHOW_FIELD(CR, pgsel); + dbg_printf("\n"); + break; + case 0x0003: + dbg_printf("BNRY = Boundary Pointer = 0x%02x\n", BX_NE2K_THIS s.bound_ptr); + break; + case 0x0004: + dbg_printf("TSR (Transmit Status Register), read-only:\n "); + SHOW_FIELD(TSR, tx_ok); + SHOW_FIELD(TSR, reserved); + SHOW_FIELD(TSR, collided); + SHOW_FIELD(TSR, aborted); + SHOW_FIELD(TSR, no_carrier); + SHOW_FIELD(TSR, fifo_ur); + SHOW_FIELD(TSR, cd_hbeat); + SHOW_FIELD(TSR, ow_coll); + dbg_printf("\n"); + // fall through into TPSR, no break line. + case 0x0204: + dbg_printf("TPSR = Transmit Page Start = 0x%02x\n", BX_NE2K_THIS s.tx_page_start); + break; + case 0x0005: + case 0x0006: BX_DUPLICATE(0x0005); + dbg_printf("NCR = Number of Collisions Register (read-only) = 0x%02x\n", BX_NE2K_THIS s.num_coll); + dbg_printf("TBCR1,TBCR0 = Transmit Byte Count = %02x %02x\n", + BX_HIGH_BYTE(BX_NE2K_THIS s.tx_bytes), + BX_LOW_BYTE(BX_NE2K_THIS s.tx_bytes)); + dbg_printf("FIFO = %02x\n", BX_NE2K_THIS s.fifo); + break; + case 0x0007: + dbg_printf("ISR (Interrupt Status Register):\n "); + SHOW_FIELD(ISR, pkt_rx); + SHOW_FIELD(ISR, pkt_tx); + SHOW_FIELD(ISR, rx_err); + SHOW_FIELD(ISR, tx_err); + SHOW_FIELD(ISR, overwrite); + SHOW_FIELD(ISR, cnt_oflow); + SHOW_FIELD(ISR, rdma_done); + SHOW_FIELD(ISR, reset); + dbg_printf("\n"); + break; + case 0x0008: + case 0x0009: BX_DUPLICATE(0x0008); + dbg_printf("CRDA1,0 = Current remote DMA address = %02x %02x\n", + BX_HIGH_BYTE(BX_NE2K_THIS s.remote_dma), + BX_LOW_BYTE(BX_NE2K_THIS s.remote_dma)); + dbg_printf("RSAR1,0 = Remote start address = %02x %02x\n", + BX_HIGH_BYTE(s.remote_start), + BX_LOW_BYTE(s.remote_start)); + break; + case 0x000a: + case 0x000b: BX_DUPLICATE(0x000a); + dbg_printf("RCBR1,0 = Remote byte count = %02x\n", BX_NE2K_THIS s.remote_bytes); + break; + case 0x000c: + dbg_printf("RSR (Receive Status Register), read-only:\n "); + SHOW_FIELD(RSR, rx_ok); + SHOW_FIELD(RSR, bad_crc); + SHOW_FIELD(RSR, bad_falign); + SHOW_FIELD(RSR, fifo_or); + SHOW_FIELD(RSR, rx_missed); + SHOW_FIELD(RSR, rx_mbit); + SHOW_FIELD(RSR, rx_disabled); + SHOW_FIELD(RSR, deferred); + dbg_printf("\n"); + // fall through into RCR + case 0x020c: + dbg_printf("RCR (Receive Configuration Register):\n "); + SHOW_FIELD(RCR, errors_ok); + SHOW_FIELD(RCR, runts_ok); + SHOW_FIELD(RCR, broadcast); + SHOW_FIELD(RCR, multicast); + SHOW_FIELD(RCR, promisc); + SHOW_FIELD(RCR, monitor); + SHOW_FIELD(RCR, reserved); + dbg_printf("\n"); + break; + case 0x000d: + dbg_printf("CNTR0 = Tally Counter 0 (Frame alignment errors) = %02x\n", + BX_NE2K_THIS s.tallycnt_0); + // fall through into TCR + case 0x020d: + dbg_printf("TCR (Transmit Configuration Register):\n "); + SHOW_FIELD(TCR, crc_disable); + SHOW_FIELD(TCR, loop_cntl); + SHOW_FIELD(TCR, ext_stoptx); + SHOW_FIELD(TCR, coll_prio); + SHOW_FIELD(TCR, reserved); + dbg_printf("\n"); + break; + case 0x000e: + dbg_printf("CNTR1 = Tally Counter 1 (CRC Errors) = %02x\n", + BX_NE2K_THIS s.tallycnt_1); + // fall through into DCR + case 0x020e: + dbg_printf("DCR (Data Configuration Register):\n "); + SHOW_FIELD(DCR, wdsize); + SHOW_FIELD(DCR, endian); + SHOW_FIELD(DCR, longaddr); + SHOW_FIELD(DCR, loop); + SHOW_FIELD(DCR, auto_rx); + SHOW_FIELD(DCR, fifo_size); + dbg_printf("\n"); + break; + case 0x000f: + dbg_printf("CNTR2 = Tally Counter 2 (Missed Packet Errors) = %02x\n", + BX_NE2K_THIS s.tallycnt_2); + // fall through into IMR + case 0x020f: + dbg_printf("IMR (Interrupt Mask Register)\n "); + SHOW_FIELD(IMR, rx_inte); + SHOW_FIELD(IMR, tx_inte); + SHOW_FIELD(IMR, rxerr_inte); + SHOW_FIELD(IMR, txerr_inte); + SHOW_FIELD(IMR, overw_inte); + SHOW_FIELD(IMR, cofl_inte); + SHOW_FIELD(IMR, rdma_inte); + SHOW_FIELD(IMR, reserved); + dbg_printf("\n"); + break; + case 0x0101: + case 0x0102: BX_DUPLICATE(0x0101); + case 0x0103: BX_DUPLICATE(0x0101); + case 0x0104: BX_DUPLICATE(0x0101); + case 0x0105: BX_DUPLICATE(0x0101); + case 0x0106: BX_DUPLICATE(0x0101); + dbg_printf("MAC address registers are located at page 1, registers 1-6.\n"); + dbg_printf("The MAC address is "); + for (i=0; i<=5; i++) + dbg_printf("%02x%c", BX_NE2K_THIS s.physaddr[i], i<5?':' : '\n'); + break; + case 0x0107: + dbg_printf("Current page is 0x%02x\n", BX_NE2K_THIS s.curr_page); + break; + case 0x0108: + case 0x0109: BX_DUPLICATE(0x0108); + case 0x010A: BX_DUPLICATE(0x0108); + case 0x010B: BX_DUPLICATE(0x0108); + case 0x010C: BX_DUPLICATE(0x0108); + case 0x010D: BX_DUPLICATE(0x0108); + case 0x010E: BX_DUPLICATE(0x0108); + case 0x010F: BX_DUPLICATE(0x0108); + dbg_printf("MAR0-7 (Multicast address registers 0-7) are set to:\n"); + for (i=0; i<8; i++) dbg_printf("%02x ", BX_NE2K_THIS s.mchash[i]); + dbg_printf("\nMAR0 is listed first.\n"); + break; + case 0x0001: + case 0x0002: BX_DUPLICATE(0x0001); + case 0x0201: BX_DUPLICATE(0x0001); + case 0x0202: BX_DUPLICATE(0x0001); + dbg_printf("PSTART = Page start register = %02x\n", BX_NE2K_THIS s.page_start); + dbg_printf("PSTOP = Page stop register = %02x\n", BX_NE2K_THIS s.page_stop); + dbg_printf("Local DMA address = %02x %02x\n", + BX_HIGH_BYTE(BX_NE2K_THIS s.local_dma), + BX_LOW_BYTE(BX_NE2K_THIS s.local_dma)); + break; + case 0x0203: + dbg_printf("Remote Next Packet Pointer = %02x\n", BX_NE2K_THIS s.rempkt_ptr); + break; + case 0x0205: + dbg_printf("Local Next Packet Pointer = %02x\n", BX_NE2K_THIS s.localpkt_ptr); + break; + case 0x0206: + case 0x0207: BX_DUPLICATE(0x0206); + dbg_printf("Address Counter= %02x %02x\n", + BX_HIGH_BYTE(BX_NE2K_THIS s.address_cnt), + BX_LOW_BYTE(BX_NE2K_THIS s.address_cnt)); + break; + case 0x0208: + case 0x0209: BX_DUPLICATE(0x0208); + case 0x020A: BX_DUPLICATE(0x0208); + case 0x020B: BX_DUPLICATE(0x0208); + if (!brief) dbg_printf ("Reserved\n"); + case 0xffff: + dbg_printf("IMR (Interrupt Mask Register):\n "); + dbg_printf("\n"); + break; + default: + dbg_printf("NE2K info: sorry, page %d register %d cannot be displayed.\n", page, reg); + } + if (!brief) + dbg_printf("\n"); +} + +#else + +void bx_ne2k_c::print_info (FILE *fp, int page, int reg, int brief) +{ +} + +#endif + +#endif /* if BX_SUPPORT_NE2K */ diff --git a/bochs/iodev/ne2k.h b/bochs/iodev/ne2k.h new file mode 100644 index 00000000..67b9ab18 --- /dev/null +++ b/bochs/iodev/ne2k.h @@ -0,0 +1,263 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// Peter Grehan (grehan@iprg.nokia.com) coded all of this +// NE2000/ether stuff. + +// +// An implementation of an ne2000 ISA ethernet adapter. This part uses +// a National Semiconductor DS-8390 ethernet MAC chip, with some h/w +// to provide a windowed memory region for the chip and a MAC address. +// + +#ifndef BX_IODEV_NE2K +#define BX_IODEV_NE2K + +#if BX_USE_NE2K_SMF +#error Ne2K cannot user Static functions with multiple NICS +#error Change BX USER NE2K SMF in config.h to 0 +# define BX_NE2K_SMF static +# define BX_NE2K_THIS theNE2kDevice-> +# define BX_NE2K_THIS_PTR theNE2kDevice +#else +# define BX_NE2K_SMF +# define BX_NE2K_THIS this-> +# define BX_NE2K_THIS_PTR this +#endif + +#define BX_NE2K_MEMSIZ (32*1024) +#define BX_NE2K_MEMSTART (16*1024) +#define BX_NE2K_MEMEND (BX_NE2K_MEMSTART + BX_NE2K_MEMSIZ) + +#define BX_NE2K_MAXDEV 4 + +class eth_pktmover_c; + +typedef struct { + // + // ne2k register state + + // + // Page 0 + // + // Command Register - 00h read/write + struct { + bx_bool stop; // STP - Software Reset command + bx_bool start; // START - start the NIC + bx_bool tx_packet; // TXP - initiate packet transmission + Bit8u rdma_cmd; // RD0,RD1,RD2 - Remote DMA command + Bit8u pgsel; // PS0,PS1 - Page select + } CR; + // Interrupt Status Register - 07h read/write + struct { + bx_bool pkt_rx; // PRX - packet received with no errors + bx_bool pkt_tx; // PTX - packet transmitted with no errors + bx_bool rx_err; // RXE - packet received with 1 or more errors + bx_bool tx_err; // TXE - packet tx'd " " " " " + bx_bool overwrite; // OVW - rx buffer resources exhausted + bx_bool cnt_oflow; // CNT - network tally counter MSB's set + bx_bool rdma_done; // RDC - remote DMA complete + bx_bool reset; // RST - reset status + } ISR; + // Interrupt Mask Register - 0fh write + struct { + bx_bool rx_inte; // PRXE - packet rx interrupt enable + bx_bool tx_inte; // PTXE - packet tx interrput enable + bx_bool rxerr_inte; // RXEE - rx error interrupt enable + bx_bool txerr_inte; // TXEE - tx error interrupt enable + bx_bool overw_inte; // OVWE - overwrite warn int enable + bx_bool cofl_inte; // CNTE - counter o'flow int enable + bx_bool rdma_inte; // RDCE - remote DMA complete int enable + bx_bool reserved; // D7 - reserved + } IMR; + // Data Configuration Register - 0eh write + struct { + bx_bool wdsize; // WTS - 8/16-bit select + bx_bool endian; // BOS - byte-order select + bx_bool longaddr; // LAS - long-address select + bx_bool loop; // LS - loopback select + bx_bool auto_rx; // AR - auto-remove rx packets with remote DMA + Bit8u fifo_size; // FT0,FT1 - fifo threshold + } DCR; + // Transmit Configuration Register - 0dh write + struct { + bx_bool crc_disable; // CRC - inhibit tx CRC + Bit8u loop_cntl; // LB0,LB1 - loopback control + bx_bool ext_stoptx; // ATD - allow tx disable by external mcast + bx_bool coll_prio; // OFST - backoff algorithm select + Bit8u reserved; // D5,D6,D7 - reserved + } TCR; + // Transmit Status Register - 04h read + struct { + bx_bool tx_ok; // PTX - tx complete without error + bx_bool reserved; // D1 - reserved + bx_bool collided; // COL - tx collided >= 1 times + bx_bool aborted; // ABT - aborted due to excessive collisions + bx_bool no_carrier; // CRS - carrier-sense lost + bx_bool fifo_ur; // FU - FIFO underrun + bx_bool cd_hbeat; // CDH - no tx cd-heartbeat from transceiver + bx_bool ow_coll; // OWC - out-of-window collision + } TSR; + // Receive Configuration Register - 0ch write + struct { + bx_bool errors_ok; // SEP - accept pkts with rx errors + bx_bool runts_ok; // AR - accept < 64-byte runts + bx_bool broadcast; // AB - accept eth broadcast address + bx_bool multicast; // AM - check mcast hash array + bx_bool promisc; // PRO - accept all packets + bx_bool monitor; // MON - check pkts, but don't rx + Bit8u reserved; // D6,D7 - reserved + } RCR; + // Receive Status Register - 0ch read + struct { + bx_bool rx_ok; // PRX - rx complete without error + bx_bool bad_crc; // CRC - Bad CRC detected + bx_bool bad_falign; // FAE - frame alignment error + bx_bool fifo_or; // FO - FIFO overrun + bx_bool rx_missed; // MPA - missed packet error + bx_bool rx_mbit; // PHY - unicast or mcast/bcast address match + bx_bool rx_disabled; // DIS - set when in monitor mode + bx_bool deferred; // DFR - collision active + } RSR; + + Bit16u local_dma; // 01,02h read ; current local DMA addr + Bit8u page_start; // 01h write ; page start register + Bit8u page_stop; // 02h write ; page stop register + Bit8u bound_ptr; // 03h read/write ; boundary pointer + Bit8u tx_page_start; // 04h write ; transmit page start register + Bit8u num_coll; // 05h read ; number-of-collisions register + Bit16u tx_bytes; // 05,06h write ; transmit byte-count register + Bit8u fifo; // 06h read ; FIFO + Bit16u remote_dma; // 08,09h read ; current remote DMA addr + Bit16u remote_start; // 08,09h write ; remote start address register + Bit16u remote_bytes; // 0a,0bh write ; remote byte-count register + Bit8u tallycnt_0; // 0dh read ; tally counter 0 (frame align errors) + Bit8u tallycnt_1; // 0eh read ; tally counter 1 (CRC errors) + Bit8u tallycnt_2; // 0fh read ; tally counter 2 (missed pkt errors) + + // + // Page 1 + // + // Command Register 00h (repeated) + // + Bit8u physaddr[6]; // 01-06h read/write ; MAC address + Bit8u curr_page; // 07h read/write ; current page register + Bit8u mchash[8]; // 08-0fh read/write ; multicast hash array + + // + // Page 2 - diagnostic use only + // + // Command Register 00h (repeated) + // + // Page Start Register 01h read (repeated) + // Page Stop Register 02h read (repeated) + // Current Local DMA Address 01,02h write (repeated) + // Transmit Page start address 04h read (repeated) + // Receive Configuration Register 0ch read (repeated) + // Transmit Configuration Register 0dh read (repeated) + // Data Configuration Register 0eh read (repeated) + // Interrupt Mask Register 0fh read (repeated) + // + Bit8u rempkt_ptr; // 03h read/write ; remote next-packet pointer + Bit8u localpkt_ptr; // 05h read/write ; local next-packet pointer + Bit16u address_cnt; // 06,07h read/write ; address counter + + // + // Page 3 - should never be modified. + // + + // Novell ASIC state + Bit8u macaddr[32]; // ASIC ROM'd MAC address, even bytes + Bit8u mem[BX_NE2K_MEMSIZ]; // on-chip packet memory + + // ne2k internal state + Bit32u base_address; + int base_irq; + int tx_timer_index; + bx_bool tx_timer_active; + + // pci stuff + bx_bool pci_enabled; +#if BX_SUPPORT_PCI + Bit8u devfunc; + Bit8u pci_conf[256]; +#endif +} bx_ne2k_t; + +class bx_ne2k_c : public bx_ne2k_stub_c +#if BX_SUPPORT_PCI + , public bx_pci_device_stub_c +#endif +{ +public: + bx_ne2k_c(); + virtual ~bx_ne2k_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual void print_info (FILE *file, int page, int reg, int nodups); + virtual void register_state(void); +#if BX_SUPPORT_PCI + virtual void after_restore_state(void); +#endif + +#if BX_SUPPORT_PCI + virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len); + virtual void pci_write_handler(Bit8u address, Bit32u value, unsigned io_len); +#endif + int interfaceNo; +private: + bx_ne2k_t s; + + eth_pktmover_c *ethdev; + + BX_NE2K_SMF Bit32u read_cr(void); + BX_NE2K_SMF void write_cr(Bit32u value); + BX_NE2K_SMF void set_irq_level(bx_bool level); + + BX_NE2K_SMF Bit32u chipmem_read(Bit32u address, unsigned io_len) BX_CPP_AttrRegparmN(2); + BX_NE2K_SMF Bit32u asic_read(Bit32u offset, unsigned io_len) BX_CPP_AttrRegparmN(2); + BX_NE2K_SMF Bit32u page0_read(Bit32u offset, unsigned io_len); + BX_NE2K_SMF Bit32u page1_read(Bit32u offset, unsigned io_len); + BX_NE2K_SMF Bit32u page2_read(Bit32u offset, unsigned io_len); + BX_NE2K_SMF Bit32u page3_read(Bit32u offset, unsigned io_len); + + BX_NE2K_SMF void chipmem_write(Bit32u address, Bit32u value, unsigned io_len) BX_CPP_AttrRegparmN(3); + BX_NE2K_SMF void asic_write(Bit32u address, Bit32u value, unsigned io_len); + BX_NE2K_SMF void page0_write(Bit32u address, Bit32u value, unsigned io_len); + BX_NE2K_SMF void page1_write(Bit32u address, Bit32u value, unsigned io_len); + BX_NE2K_SMF void page2_write(Bit32u address, Bit32u value, unsigned io_len); + BX_NE2K_SMF void page3_write(Bit32u address, Bit32u value, unsigned io_len); + + static void tx_timer_handler(void *); + BX_NE2K_SMF void tx_timer(void); + + static void rx_handler(void *arg, const void *buf, unsigned len); + BX_NE2K_SMF unsigned mcast_index(const void *dst); + BX_NE2K_SMF void rx_frame(const void *buf, unsigned io_len); + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_NE2K_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif +}; + +#endif diff --git a/bochs/iodev/parallel.cc b/bochs/iodev/parallel.cc new file mode 100644 index 00000000..c66c95f1 --- /dev/null +++ b/bochs/iodev/parallel.cc @@ -0,0 +1,343 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +//////////////////////////////////////////////////////// +// This code was just a few stubs until Volker.Ruppert@t-online.de +// fixed it up in November 2001. + + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "parallel.h" + +#define LOG_THIS theParallelDevice-> + +bx_parallel_c *theParallelDevice = NULL; + +int libparallel_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theParallelDevice = new bx_parallel_c(); + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theParallelDevice, BX_PLUGIN_PARALLEL); + return(0); // Success +} + +void libparallel_LTX_plugin_fini(void) +{ + delete theParallelDevice; +} + +bx_parallel_c::bx_parallel_c() +{ + put("PAR"); + for (int i=0; iget_param(pname); + if (SIM->get_param_bool("enabled", base)->get()) { + sprintf(name, "Parallel Port %d", i + 1); + /* parallel interrupt and i/o ports */ + BX_PAR_THIS s[i].IRQ = irqs[i]; + for (unsigned addr=ports[i]; addr<=(unsigned)(ports[i]+2); addr++) { + DEV_register_ioread_handler(this, read_handler, addr, name, 1); + } + DEV_register_iowrite_handler(this, write_handler, ports[i], name, 1); + DEV_register_iowrite_handler(this, write_handler, ports[i]+2, name, 1); + BX_INFO (("parallel port %d at 0x%04x irq %d", i+1, ports[i], irqs[i])); + /* internal state */ + BX_PAR_THIS s[i].STATUS.error = 1; + BX_PAR_THIS s[i].STATUS.slct = 1; + BX_PAR_THIS s[i].STATUS.pe = 0; + BX_PAR_THIS s[i].STATUS.ack = 1; + BX_PAR_THIS s[i].STATUS.busy = 1; + + BX_PAR_THIS s[i].CONTROL.strobe = 0; + BX_PAR_THIS s[i].CONTROL.autofeed = 0; + BX_PAR_THIS s[i].CONTROL.init = 1; + BX_PAR_THIS s[i].CONTROL.slct_in = 1; + BX_PAR_THIS s[i].CONTROL.irq = 0; + BX_PAR_THIS s[i].CONTROL.input = 0; + + BX_PAR_THIS s[i].initmode = 0; + /* output file */ + char *outfile = SIM->get_param_string("outfile", base)->getptr(); + if (strlen(outfile) > 0) { + s[i].output = fopen(outfile, "wb"); + if (!s[i].output) + BX_PANIC(("Could not open '%s' to write parport%d output", + outfile, i+1)); + } + } + } +} + +void bx_parallel_c::reset(unsigned type) +{ +} + +void bx_parallel_c::register_state(void) +{ + unsigned i; + char name[4], pname[20]; + bx_list_c *base, *port; + + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "parallel", "Parallel Port State", BX_N_PARALLEL_PORTS); + for (i=0; iget_param(pname); + if (SIM->get_param_bool("enabled", base)->get()) { + sprintf(name, "%d", i); + port = new bx_list_c(list, name, 11); + new bx_shadow_num_c(port, "data", &BX_PAR_THIS s[i].data, BASE_HEX); + new bx_shadow_bool_c(port, "slct", &BX_PAR_THIS s[i].STATUS.slct); + new bx_shadow_bool_c(port, "ack", &BX_PAR_THIS s[i].STATUS.ack); + new bx_shadow_bool_c(port, "busy", &BX_PAR_THIS s[i].STATUS.busy); + new bx_shadow_bool_c(port, "strobe", &BX_PAR_THIS s[i].CONTROL.strobe); + new bx_shadow_bool_c(port, "autofeed", &BX_PAR_THIS s[i].CONTROL.autofeed); + new bx_shadow_bool_c(port, "init", &BX_PAR_THIS s[i].CONTROL.init); + new bx_shadow_bool_c(port, "slct_in", &BX_PAR_THIS s[i].CONTROL.slct_in); + new bx_shadow_bool_c(port, "irq", &BX_PAR_THIS s[i].CONTROL.irq); + new bx_shadow_bool_c(port, "input", &BX_PAR_THIS s[i].CONTROL.input); + new bx_shadow_bool_c(port, "initmode", &BX_PAR_THIS s[i].initmode); + } + } +} + +void bx_parallel_c::virtual_printer(Bit8u port) +{ + if (BX_PAR_THIS s[port].STATUS.slct) { + if (BX_PAR_THIS s[port].output != NULL) { + fputc(BX_PAR_THIS s[port].data, BX_PAR_THIS s[port].output); + fflush (BX_PAR_THIS s[port].output); + } + if (BX_PAR_THIS s[port].CONTROL.irq == 1) { + DEV_pic_raise_irq(BX_PAR_THIS s[port].IRQ); + } + BX_PAR_THIS s[port].STATUS.ack = 0; + BX_PAR_THIS s[port].STATUS.busy = 1; + } + else { + BX_ERROR(("data is valid, but printer is offline")); + } +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +Bit32u bx_parallel_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_PAR_SMF + bx_parallel_c *class_ptr = (bx_parallel_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_parallel_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PAR_SMF + Bit8u offset; + Bit8u port = 0; + Bit32u retval; + + offset = address & 0x07; + switch (address & 0x03f8) { + case 0x0378: port = 0; break; + case 0x0278: port = 1; break; + } + + switch (offset) { + case BX_PAR_DATA: + if (!BX_PAR_THIS s[port].CONTROL.input) { + return (Bit32u)BX_PAR_THIS s[port].data; + } else { + BX_ERROR(("read: input mode not supported")); + return (0xFF); + } + break; + case BX_PAR_STAT: + { + retval = ((BX_PAR_THIS s[port].STATUS.busy << 7) | + (BX_PAR_THIS s[port].STATUS.ack << 6) | + (BX_PAR_THIS s[port].STATUS.pe << 5) | + (BX_PAR_THIS s[port].STATUS.slct << 4) | + (BX_PAR_THIS s[port].STATUS.error << 3)); + if (BX_PAR_THIS s[port].STATUS.ack == 0) { + BX_PAR_THIS s[port].STATUS.ack = 1; + if (BX_PAR_THIS s[port].CONTROL.irq == 1) { + DEV_pic_lower_irq(BX_PAR_THIS s[port].IRQ); + } + } + if (BX_PAR_THIS s[port].initmode == 1) { + BX_PAR_THIS s[port].STATUS.busy = 1; + BX_PAR_THIS s[port].STATUS.slct = 1; + BX_PAR_THIS s[port].STATUS.ack = 0; + if (BX_PAR_THIS s[port].CONTROL.irq == 1) { + DEV_pic_raise_irq(BX_PAR_THIS s[port].IRQ); + } + BX_PAR_THIS s[port].initmode = 0; + } + BX_DEBUG(("read: parport%d status register returns 0x%02x", port+1, retval)); + return retval; + } + break; + case BX_PAR_CTRL: + { + retval = ((BX_PAR_THIS s[port].CONTROL.input << 5) | + (BX_PAR_THIS s[port].CONTROL.irq << 4) | + (BX_PAR_THIS s[port].CONTROL.slct_in << 3) | + (BX_PAR_THIS s[port].CONTROL.init << 2) | + (BX_PAR_THIS s[port].CONTROL.autofeed << 1) | + (BX_PAR_THIS s[port].CONTROL.strobe)); + BX_DEBUG(("read: parport%d control register returns 0x%02x", port+1, retval)); + return retval; + } + break; + } + return(0); +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_parallel_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_PAR_SMF + bx_parallel_c *class_ptr = (bx_parallel_c *) this_ptr; + + class_ptr->write(address, value, io_len); +} + +void bx_parallel_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PAR_SMF + Bit8u offset; + Bit8u port = 0; + char name[16]; + + offset = address & 0x07; + switch (address & 0x03f8) { + case 0x0378: port = 0; break; + case 0x0278: port = 1; break; + } + + switch (offset) { + case BX_PAR_DATA: + BX_PAR_THIS s[port].data = (Bit8u)value; + BX_DEBUG(("write: parport%d data output register = 0x%02x", port+1, (Bit8u)value)); + break; + case BX_PAR_CTRL: + { + if ((value & 0x01) == 0x01) { + if (BX_PAR_THIS s[port].CONTROL.strobe == 0) { + BX_PAR_THIS s[port].CONTROL.strobe = 1; + virtual_printer(port); // data is valid now + } + } else { + if (BX_PAR_THIS s[port].CONTROL.strobe == 1) { + BX_PAR_THIS s[port].CONTROL.strobe = 0; + } + } + BX_PAR_THIS s[port].CONTROL.autofeed = ((value & 0x02) == 0x02); + if ((value & 0x04) == 0x04) { + if (BX_PAR_THIS s[port].CONTROL.init == 0) { + BX_PAR_THIS s[port].CONTROL.init = 1; + BX_PAR_THIS s[port].STATUS.busy = 0; + BX_PAR_THIS s[port].STATUS.slct = 0; + BX_PAR_THIS s[port].initmode = 1; + BX_DEBUG(("parport%d: printer init requested", port+1)); + } + } else { + if (BX_PAR_THIS s[port].CONTROL.init == 1) { + BX_PAR_THIS s[port].CONTROL.init = 0; + } + } + if ((value & 0x08) == 0x08) { + if (BX_PAR_THIS s[port].CONTROL.slct_in == 0) { + BX_PAR_THIS s[port].CONTROL.slct_in = 1; + BX_DEBUG(("parport%d: printer now online", port+1)); + } + } else { + if (BX_PAR_THIS s[port].CONTROL.slct_in == 1) { + BX_PAR_THIS s[port].CONTROL.slct_in = 0; + BX_DEBUG(("parport%d: printer now offline", port+1)); + } + } + BX_PAR_THIS s[port].STATUS.slct = BX_PAR_THIS s[port].CONTROL.slct_in; + if ((value & 0x10) == 0x10) { + if (BX_PAR_THIS s[port].CONTROL.irq == 0) { + BX_PAR_THIS s[port].CONTROL.irq = 1; + sprintf(name, "Parallel Port %d", port+1); + DEV_register_irq(BX_PAR_THIS s[port].IRQ, name); + BX_DEBUG(("parport%d: irq mode selected", port+1)); + } + } else { + if (BX_PAR_THIS s[port].CONTROL.irq == 1) { + BX_PAR_THIS s[port].CONTROL.irq = 0; + sprintf(name, "Parallel Port %d", port+1); + DEV_unregister_irq(BX_PAR_THIS s[port].IRQ, name); + BX_DEBUG(("parport%d: polling mode selected", port+1)); + } + } + if ((value & 0x20) == 0x20) { + if (BX_PAR_THIS s[port].CONTROL.input == 0) { + BX_PAR_THIS s[port].CONTROL.input = 1; + BX_DEBUG(("parport%d: data input mode selected", port+1)); + } + } else { + if (BX_PAR_THIS s[port].CONTROL.input == 1) { + BX_PAR_THIS s[port].CONTROL.input = 0; + BX_DEBUG(("parport%d: data output mode selected", port+1)); + } + } + if ((value & 0xC0) > 0) { + BX_ERROR(("write: parport%d: unsupported control bit ignored", port+1)); + } + } + break; + } +} diff --git a/bochs/iodev/parallel.h b/bochs/iodev/parallel.h new file mode 100644 index 00000000..3a82f6f3 --- /dev/null +++ b/bochs/iodev/parallel.h @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_IODEV_PARPORT_H +#define BX_IODEV_PARPORT_H + +#if BX_USE_PAR_SMF +# define BX_PAR_SMF static +# define BX_PAR_THIS theParallelDevice-> +#else +# define BX_PAR_SMF +# define BX_PAR_THIS this-> +#endif + +#define BX_PARPORT_MAXDEV 2 + +#define BX_PAR_DATA 0 +#define BX_PAR_STAT 1 +#define BX_PAR_CTRL 2 + +typedef struct { + Bit8u data; + struct { + bx_bool error; + bx_bool slct; + bx_bool pe; + bx_bool ack; + bx_bool busy; + } STATUS; + struct { + bx_bool strobe; + bx_bool autofeed; + bx_bool init; + bx_bool slct_in; + bx_bool irq; + bx_bool input; + } CONTROL; + Bit8u IRQ; + FILE *output; + bx_bool initmode; +} bx_par_t; + +class bx_parallel_c : public bx_devmodel_c { +public: + bx_parallel_c(); + virtual ~bx_parallel_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual void register_state(void); + +private: + bx_par_t s[BX_PARPORT_MAXDEV]; + + static void virtual_printer(Bit8u port); + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_PAR_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif +}; + +#endif diff --git a/bochs/iodev/pci.cc b/bochs/iodev/pci.cc new file mode 100644 index 00000000..a42bb5b7 --- /dev/null +++ b/bochs/iodev/pci.cc @@ -0,0 +1,603 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// +// i440FX Support - PMC/DBX +// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_PCI + +#include "pci.h" + +#define LOG_THIS thePciBridge-> + +bx_pci_bridge_c *thePciBridge = NULL; + +int libpci_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + thePciBridge = new bx_pci_bridge_c(); + bx_devices.pluginPciBridge = thePciBridge; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, thePciBridge, BX_PLUGIN_PCI); + return(0); // Success +} + +void libpci_LTX_plugin_fini(void) +{ + delete thePciBridge; +} + +bx_pci_bridge_c::bx_pci_bridge_c() +{ + put("PCI"); +} + +bx_pci_bridge_c::~bx_pci_bridge_c() +{ + debug_dump(); + BX_DEBUG(("Exit")); +} + +void bx_pci_bridge_c::init(void) +{ + // called once when bochs initializes + unsigned i; + BX_PCI_THIS num_pci_handlers = 0; + + /* set unused elements to appropriate values */ + for (i=0; i < BX_MAX_PCI_DEVICES; i++) { + BX_PCI_THIS pci_handler[i].handler = NULL; + } + + for (i=0; i < 0x100; i++) { + BX_PCI_THIS pci_handler_id[i] = BX_MAX_PCI_DEVICES; // not assigned + } + + for (i=0; i < BX_N_PCI_SLOTS; i++) { + BX_PCI_THIS slot_used[i] = 0; // no device connected + } + BX_PCI_THIS slots_checked = 0; + + // confAddr accepts dword i/o only + DEV_register_ioread_handler(this, read_handler, 0x0CF8, "i440FX", 4); + DEV_register_iowrite_handler(this, write_handler, 0x0CF8, "i440FX", 4); + + for (i=0x0CFC; i<=0x0CFF; i++) { + DEV_register_ioread_handler(this, read_handler, i, "i440FX", 7); + } + for (i=0x0CFC; i<=0x0CFF; i++) { + DEV_register_iowrite_handler(this, write_handler, i, "i440FX", 7); + } + + Bit8u devfunc = BX_PCI_DEVICE(0,0); + DEV_register_pci_handlers(this, &devfunc, BX_PLUGIN_PCI, "440FX Host bridge"); + + for (i=0; i<256; i++) + BX_PCI_THIS s.i440fx.pci_conf[i] = 0x0; + // readonly registers + BX_PCI_THIS s.i440fx.pci_conf[0x00] = 0x86; + BX_PCI_THIS s.i440fx.pci_conf[0x01] = 0x80; + BX_PCI_THIS s.i440fx.pci_conf[0x02] = 0x37; + BX_PCI_THIS s.i440fx.pci_conf[0x03] = 0x12; + BX_PCI_THIS s.i440fx.pci_conf[0x0b] = 0x06; +} + + void +bx_pci_bridge_c::reset(unsigned type) +{ + unsigned i; + char devname[80]; + char *device; + + if (!BX_PCI_THIS slots_checked) { + for (i=0; iget_param_string(devname)->getptr(); + if ((strlen(device) > 0) && !BX_PCI_THIS slot_used[i]) { + BX_PANIC(("Unknown plugin '%s' at PCI slot #%d", device, i+1)); + } + } + BX_PCI_THIS slots_checked = 1; + } + + BX_PCI_THIS s.i440fx.confAddr = 0; + BX_PCI_THIS s.i440fx.confData = 0; + + BX_PCI_THIS s.i440fx.pci_conf[0x04] = 0x06; + BX_PCI_THIS s.i440fx.pci_conf[0x05] = 0x00; + BX_PCI_THIS s.i440fx.pci_conf[0x06] = 0x80; + BX_PCI_THIS s.i440fx.pci_conf[0x07] = 0x02; + BX_PCI_THIS s.i440fx.pci_conf[0x0d] = 0x00; + BX_PCI_THIS s.i440fx.pci_conf[0x0f] = 0x00; + BX_PCI_THIS s.i440fx.pci_conf[0x50] = 0x00; + BX_PCI_THIS s.i440fx.pci_conf[0x51] = 0x01; + BX_PCI_THIS s.i440fx.pci_conf[0x52] = 0x00; + BX_PCI_THIS s.i440fx.pci_conf[0x53] = 0x80; + BX_PCI_THIS s.i440fx.pci_conf[0x54] = 0x00; + BX_PCI_THIS s.i440fx.pci_conf[0x55] = 0x00; + BX_PCI_THIS s.i440fx.pci_conf[0x56] = 0x00; + BX_PCI_THIS s.i440fx.pci_conf[0x57] = 0x01; + BX_PCI_THIS s.i440fx.pci_conf[0x58] = 0x10; + for (i=0x59; i<0x60; i++) + BX_PCI_THIS s.i440fx.pci_conf[i] = 0x00; + BX_PCI_THIS s.i440fx.pci_conf[0x72] = 0x02; +} + +void bx_pci_bridge_c::register_state(void) +{ + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "pci_bridge", "PCI Bridge State", 3); + BXRS_HEX_PARAM_FIELD(list, confAddr, BX_PCI_THIS s.i440fx.confAddr); + BXRS_HEX_PARAM_FIELD(list, confData, BX_PCI_THIS s.i440fx.confData); + bx_list_c *pci_conf = new bx_list_c(list, "pci_conf", 256); + for (unsigned i=0; i<256; i++) { + char name[6]; + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(pci_conf, name, &BX_PCI_THIS s.i440fx.pci_conf[i], BASE_HEX); + } +} + +void bx_pci_bridge_c::after_restore_state(void) +{ + BX_PCI_THIS smram_control(BX_PCI_THIS s.i440fx.pci_conf[0x72]); +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +Bit32u bx_pci_bridge_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_PCI_SMF + bx_pci_bridge_c *class_ptr = (bx_pci_bridge_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_pci_bridge_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PCI_SMF + + switch (address) { + case 0x0CF8: + return BX_PCI_THIS s.i440fx.confAddr; + case 0x0CFC: + case 0x0CFD: + case 0x0CFE: + case 0x0CFF: + { + Bit32u handle, retval; + Bit8u devfunc, regnum; + + if ((BX_PCI_THIS s.i440fx.confAddr & 0x80FF0000) == 0x80000000) { + devfunc = (BX_PCI_THIS s.i440fx.confAddr >> 8) & 0xff; + regnum = (BX_PCI_THIS s.i440fx.confAddr & 0xfc) + (address & 0x03); + handle = BX_PCI_THIS pci_handler_id[devfunc]; + if ((io_len <= 4) && (handle < BX_MAX_PCI_DEVICES)) + retval = BX_PCI_THIS pci_handler[handle].handler->pci_read_handler(regnum, io_len); + else + retval = 0xFFFFFFFF; + } + else + retval = 0xFFFFFFFF; + BX_PCI_THIS s.i440fx.confData = retval; + return retval; + } + } + + BX_PANIC(("unsupported IO read to port 0x%x", (unsigned) address)); + return(0xffffffff); +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_pci_bridge_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_PCI_SMF + bx_pci_bridge_c *class_ptr = (bx_pci_bridge_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_pci_bridge_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PCI_SMF + + switch (address) { + case 0xCF8: + BX_PCI_THIS s.i440fx.confAddr = value; + if ((value & 0x80FFFF00) == 0x80000000) { + BX_DEBUG(("440FX PMC register 0x%02x selected", value & 0xfc)); + } else if ((value & 0x80000000) == 0x80000000) { + BX_DEBUG(("440FX request for bus 0x%02x device 0x%02x function 0x%02x", + (value >> 16) & 0xFF, (value >> 11) & 0x1F, (value >> 8) & 0x07)); + } + break; + + case 0xCFC: + case 0xCFD: + case 0xCFE: + case 0xCFF: + if ((BX_PCI_THIS s.i440fx.confAddr & 0x80FF0000) == 0x80000000) { + Bit8u devfunc = (BX_PCI_THIS s.i440fx.confAddr >> 8) & 0xff; + Bit8u regnum = (BX_PCI_THIS s.i440fx.confAddr & 0xfc) + (address & 0x03); + Bit32u handle = BX_PCI_THIS pci_handler_id[devfunc]; + if ((io_len <= 4) && (handle < BX_MAX_PCI_DEVICES)) { + if (((regnum>=4) && (regnum<=7)) || (regnum==12) || (regnum==13) || (regnum>14)) { + BX_PCI_THIS pci_handler[handle].handler->pci_write_handler(regnum, value, io_len); + BX_PCI_THIS s.i440fx.confData = value << (8 * (address & 0x03)); + } + else + BX_DEBUG(("read only register, write ignored")); + } + } + break; + + default: + BX_PANIC(("IO write to port 0x%x", (unsigned) address)); + } +} + +// pci configuration space read callback handler +Bit32u bx_pci_bridge_c::pci_read_handler(Bit8u address, unsigned io_len) +{ + Bit32u value = 0; + + for (unsigned i=0; i= 0x10) && (address < 0x34)) + return; + for (unsigned i=0; i> (i*8)) & 0xFF; + switch (address+i) { + case 0x04: + BX_PCI_THIS s.i440fx.pci_conf[address+i] = (value8 & 0x40) | 0x06; + break; + case 0x06: + case 0x0c: + break; + case 0x59: + case 0x5A: + case 0x5B: + case 0x5C: + case 0x5D: + case 0x5E: + case 0x5F: + BX_INFO(("440FX PMC write to PAM register %x (TLB Flush)", address+i)); + BX_PCI_THIS s.i440fx.pci_conf[address+i] = value8; + bx_pc_system.MemoryMappingChanged(); + break; + case 0x72: + smram_control(value); // SMRAM conrol register + break; + default: + BX_PCI_THIS s.i440fx.pci_conf[address+i] = value8; + BX_DEBUG(("440FX PMC write register 0x%02x value 0x%02x", address+i, value8)); + } + } +} + +void bx_pci_bridge_c::smram_control(Bit8u value8) +{ + // + // From i440FX chipset manual: + // + // [7:7] Reserved. + // [6:6] SMM Space Open (DOPEN), when DOPEN=1 and DLCK=0, SMM space DRAM + // became visible even CPU not indicte SMM mode access. This is + // indended to help BIOS to initialize SMM space. + // [5:5] SMM Space Closed (DCLS), when DCLS=1, SMM space is not accessible + // for data references, even if CPU indicates SMM mode access. Code + // references may still access SMM space DRAM. + // [4:4] SMM Space Locked (DLCK), when DLCK=1, DOPEN is set to 0 and + // both DLCK and DOPEN became R/O. DLCK can only be cleared by + // a power-on reset. + // [3:3] SMRAM Enable (SMRAME) + // [2:0] SMM space base segment, program the location of SMM space + // reserved. + // + + // SMRAM space access cycles: + + // | SMRAME | DLCK | DCLS | DOPEN | CPU_SMM | | Code | Data | + // ------------------------------------------ --------------- + // | 0 | X | X | X | X | -> | PCI | PCI | + // | 1 | 0 | X | 0 | 0 | -> | PCI | PCI | + // | 1 | 0 | 0 | 0 | 1 | -> | DRAM | DRAM | + // | 1 | 0 | 0 | 1 | X | -> | DRAM | DRAM | + // | 1 | 1 | 0 | X | 1 | -> | DRAM | DRAM | + // | 1 | 0 | 1 | 0 | 1 | -> | DRAM | PCI | + // | 1 | 0 | 1 | 1 | X | -> | ---- | ---- | + // | 1 | 1 | X | X | 0 | -> | PCI | PCI | + // | 1 | 1 | 1 | X | 1 | -> | DRAM | PCI | + // ------------------------------------------ --------------- + + value8 = (value8 & 0x78) | 0x2; // ignore reserved bits + + if (BX_PCI_THIS s.i440fx.pci_conf[0x72] & 0x10) + { + value8 &= 0xbf; // set DOPEN=0, DLCK=1 + value8 |= 0x10; + } + + if ((value8 & 0x08) == 0) { + bx_devices.mem->disable_smram(); + } + else { + bx_bool DOPEN = (value8 & 0x40) > 0, DCLS = (value8 & 0x20) > 0; + if(DOPEN && DCLS) BX_PANIC(("SMRAM control: DOPEN not mutually exclusive with DCLS !")); + bx_devices.mem->enable_smram(DOPEN, DCLS); + } + + BX_INFO(("setting SMRAM control register to 0x%02x", value8)); + BX_PCI_THIS s.i440fx.pci_conf[0x72] = value8; +} + +Bit8u bx_pci_bridge_c::rd_memType(Bit32u addr) +{ + switch ((addr & 0xFC000) >> 12) { + case 0xC0: + return (BX_PCI_THIS s.i440fx.pci_conf[0x5A] & 0x1); + case 0xC4: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5A] >> 4) & 0x1); + case 0xC8: + return (BX_PCI_THIS s.i440fx.pci_conf[0x5B] & 0x1); + case 0xCC: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5B] >> 4) & 0x1); + + case 0xD0: + return (BX_PCI_THIS s.i440fx.pci_conf[0x5C] & 0x1); + case 0xD4: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5C] >> 4) & 0x1); + case 0xD8: + return (BX_PCI_THIS s.i440fx.pci_conf[0x5D] & 0x1); + case 0xDC: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5D] >> 4) & 0x1); + + case 0xE0: + return (BX_PCI_THIS s.i440fx.pci_conf[0x5E] & 0x1); + case 0xE4: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5E] >> 4) & 0x1); + case 0xE8: + return (BX_PCI_THIS s.i440fx.pci_conf[0x5F] & 0x1); + case 0xEC: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5F] >> 4) & 0x1); + + case 0xF0: + case 0xF4: + case 0xF8: + case 0xFC: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x59] >> 4) & 0x1); + + default: + BX_PANIC(("rd_memType () Error: Memory Type not known !")); + break; + } + + return(0); // keep compiler happy +} + +Bit8u bx_pci_bridge_c::wr_memType(Bit32u addr) +{ + switch ((addr & 0xFC000) >> 12) { + case 0xC0: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5A] >> 1) & 0x1); + case 0xC4: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5A] >> 5) & 0x1); + case 0xC8: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5B] >> 1) & 0x1); + case 0xCC: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5B] >> 5) & 0x1); + + case 0xD0: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5C] >> 1) & 0x1); + case 0xD4: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5C] >> 5) & 0x1); + case 0xD8: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5D] >> 1) & 0x1); + case 0xDC: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5D] >> 5) & 0x1); + + case 0xE0: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5E] >> 1) & 0x1); + case 0xE4: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5E] >> 5) & 0x1); + case 0xE8: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5F] >> 1) & 0x1); + case 0xEC: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x5F] >> 5) & 0x1); + + case 0xF0: + case 0xF4: + case 0xF8: + case 0xFC: + return ((BX_PCI_THIS s.i440fx.pci_conf[0x59] >> 5) & 0x1); + + default: + BX_PANIC(("wr_memType () Error: Memory Type not known !")); + break; + } + + return(0); // keep compiler happy +} + +void bx_pci_bridge_c::debug_dump() +{ + int i; + + BX_DEBUG(("i440fxConfAddr:0x%08x", BX_PCI_THIS s.i440fx.confAddr)); + BX_DEBUG(("i440fxConfData:0x%08x", BX_PCI_THIS s.i440fx.confData)); + +#ifdef DUMP_FULL_I440FX + for (i=0; i<256; i++) { + BX_DEBUG(("i440fxArray%02x:0x%02x", i, BX_PCI_THIS s.i440fx.pci_conf[i])); + } +#else /* DUMP_FULL_I440FX */ + for (i=0x59; i<0x60; i++) { + BX_DEBUG(("i440fxArray%02x:0x%02x", i, BX_PCI_THIS s.i440fx.pci_conf[i])); + } +#endif /* DUMP_FULL_I440FX */ +} + +bx_bool bx_pci_bridge_c::register_pci_handlers(bx_pci_device_stub_c *dev, + Bit8u *devfunc, const char *name, + const char *descr) +{ + unsigned i, handle; + char devname[80]; + char *device; + + if (strcmp(name, "pci") && strcmp(name, "pci2isa") && strcmp(name, "pci_ide") + && (*devfunc == 0x00)) { + for (i = 0; i < BX_N_PCI_SLOTS; i++) { + sprintf(devname, "pci.slot.%d", i+1); + device = SIM->get_param_string(devname)->getptr(); + if ((strlen(device) > 0) && (!strcmp(name, device))) { + *devfunc = (i + 2) << 3; + BX_PCI_THIS slot_used[i] = 1; + BX_INFO(("PCI slot #%d used by plugin '%s'", i+1, name)); + break; + } + } + if (*devfunc == 0x00) { + BX_ERROR(("Plugin '%s' not connected to a PCI slot", name)); + } + } + /* check if device/function is available */ + if (BX_PCI_THIS pci_handler_id[*devfunc] == BX_MAX_PCI_DEVICES) { + if (BX_PCI_THIS num_pci_handlers >= BX_MAX_PCI_DEVICES) { + BX_INFO(("too many PCI devices installed.")); + BX_PANIC((" try increasing BX_MAX_PCI_DEVICES")); + return false; + } + handle = BX_PCI_THIS num_pci_handlers++; + BX_PCI_THIS pci_handler[handle].handler = dev; + BX_PCI_THIS pci_handler_id[*devfunc] = handle; + BX_INFO(("%s present at device %d, function %d", descr, *devfunc >> 3, + *devfunc & 0x07)); + return true; // device/function mapped successfully + } + else { + return false; // device/function not available, return false. + } +} + +bx_bool bx_pci_bridge_c::is_pci_device(const char *name) +{ + unsigned i; + char devname[80]; + char *device; + + for (i = 0; i < BX_N_PCI_SLOTS; i++) { + sprintf(devname, "pci.slot.%d", i+1); + device = SIM->get_param_string(devname)->getptr(); + if ((strlen(device) > 0) && (!strcmp(name, device))) { + return 1; + } + } + return 0; +} + +bx_bool bx_pci_bridge_c::pci_set_base_mem(void *this_ptr, memory_handler_t f1, memory_handler_t f2, + Bit32u *addr, Bit8u *pci_conf, unsigned size) +{ + Bit32u newbase; + + Bit32u oldbase = *addr; + Bit32u mask = ~(size - 1); + Bit8u pci_flags = pci_conf[0x00] & 0x0f; + if ((pci_flags & 0x06) > 0) { + BX_PANIC(("PCI base memory flag 0x%02x not supported", pci_flags)); + return 0; + } + pci_conf[0x00] &= (mask & 0xf0); + pci_conf[0x01] &= (mask >> 8) & 0xff; + pci_conf[0x02] &= (mask >> 16) & 0xff; + pci_conf[0x03] &= (mask >> 24) & 0xff; + ReadHostDWordFromLittleEndian(pci_conf, newbase); + pci_conf[0x00] |= pci_flags; + if ((newbase != mask) && (newbase != oldbase)) { // skip PCI probe + if (oldbase > 0) { + DEV_unregister_memory_handlers(f1, f2, oldbase, oldbase + size - 1); + } + if (newbase > 0) { + DEV_register_memory_handlers(this_ptr, f1, f2, newbase, newbase + size - 1); + } + *addr = newbase; + return 1; + } + return 0; +} + +bx_bool bx_pci_bridge_c::pci_set_base_io(void *this_ptr, bx_read_handler_t f1, bx_write_handler_t f2, + Bit32u *addr, Bit8u *pci_conf, unsigned size, + const Bit8u *iomask, const char *name) +{ + unsigned i; + Bit32u newbase; + + Bit32u oldbase = *addr; + Bit16u mask = ~(size - 1); + Bit8u pci_flags = pci_conf[0x00] & 0x03; + pci_conf[0x00] &= (mask & 0xfc); + pci_conf[0x01] &= (mask >> 8); + ReadHostDWordFromLittleEndian(pci_conf, newbase); + pci_conf[0x00] |= pci_flags; + if (((newbase & 0xfffc) != mask) && (newbase != oldbase)) { // skip PCI probe + if (oldbase > 0) { + for (i=0; i 0) { + DEV_unregister_ioread_handler(this_ptr, f1, oldbase + i, iomask[i]); + DEV_unregister_iowrite_handler(this_ptr, f2, oldbase + i, iomask[i]); + } + } + } + if (newbase > 0) { + for (i=0; i 0) { + DEV_register_ioread_handler(this_ptr, f1, newbase + i, name, iomask[i]); + DEV_register_iowrite_handler(this_ptr, f2, newbase + i, name, iomask[i]); + } + } + } + *addr = newbase; + return 1; + } + return 0; +} + +#endif /* BX_SUPPORT_PCI */ diff --git a/bochs/iodev/pci.h b/bochs/iodev/pci.h new file mode 100644 index 00000000..f8ac836f --- /dev/null +++ b/bochs/iodev/pci.h @@ -0,0 +1,100 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_IODEV_PCI_BRIDGE_H +#define BX_IODEV_PCI_BRIDGE_H + +#define BX_MAX_PCI_DEVICES 20 + +#define BX_PCI_DEVICE(device, function) ((device)<<3 | (function)) + +#if BX_USE_PCI_SMF +# define BX_PCI_SMF static +# define BX_PCI_THIS thePciBridge-> +#else +# define BX_PCI_SMF +# define BX_PCI_THIS this-> +#endif + +#define BX_PCI_INTA 1 +#define BX_PCI_INTB 2 +#define BX_PCI_INTC 3 +#define BX_PCI_INTD 4 + +typedef struct { + Bit32u confAddr; + Bit32u confData; + Bit8u pci_conf[256]; +} bx_def440fx_t; + +class bx_pci_device_stub_c; + +class bx_pci_bridge_c : public bx_pci_bridge_stub_c { +public: + bx_pci_bridge_c(); + virtual ~bx_pci_bridge_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual void register_state(void); + virtual void after_restore_state(void); + virtual bx_bool register_pci_handlers(bx_pci_device_stub_c *device, + Bit8u *devfunc, const char *name, + const char *descr); + virtual bx_bool is_pci_device(const char *name); + virtual bx_bool pci_set_base_mem(void *this_ptr, memory_handler_t f1, + memory_handler_t f2, Bit32u *addr, + Bit8u *pci_conf, unsigned size); + virtual bx_bool pci_set_base_io(void *this_ptr, bx_read_handler_t f1, + bx_write_handler_t f2, Bit32u *addr, + Bit8u *pci_conf, unsigned size, + const Bit8u *iomask, const char *name); + virtual Bit8u rd_memType(Bit32u addr); + virtual Bit8u wr_memType(Bit32u addr); + + virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len); + virtual void pci_write_handler(Bit8u address, Bit32u value, unsigned io_len); + + virtual void debug_dump(void); + +private: + Bit8u pci_handler_id[0x100]; // 256 devices/functions + struct { + bx_pci_device_stub_c *handler; + } pci_handler[BX_MAX_PCI_DEVICES]; + unsigned num_pci_handlers; + + bx_bool slot_used[BX_N_PCI_SLOTS]; + bx_bool slots_checked; + + struct { + bx_def440fx_t i440fx; + } s; + + void smram_control(Bit8u value); + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_PCI_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif +}; + +#endif diff --git a/bochs/iodev/pci2isa.cc b/bochs/iodev/pci2isa.cc new file mode 100644 index 00000000..43c275d9 --- /dev/null +++ b/bochs/iodev/pci2isa.cc @@ -0,0 +1,377 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// +// i440FX Support - PCI-to-ISA bridge (PIIX3) +// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_PCI + +#include "pci.h" +#include "pci2isa.h" + +#define LOG_THIS thePci2IsaBridge-> + +bx_piix3_c *thePci2IsaBridge = NULL; + +int libpci2isa_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + thePci2IsaBridge = new bx_piix3_c(); + bx_devices.pluginPci2IsaBridge = thePci2IsaBridge; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, thePci2IsaBridge, BX_PLUGIN_PCI2ISA); + return(0); // Success +} + +void libpci2isa_LTX_plugin_fini(void) +{ + delete thePci2IsaBridge; +} + +bx_piix3_c::bx_piix3_c() +{ + put("P2I"); +} + +bx_piix3_c::~bx_piix3_c() +{ + BX_DEBUG(("Exit")); +} + +void bx_piix3_c::init(void) +{ + unsigned i; + // called once when bochs initializes + + Bit8u devfunc = BX_PCI_DEVICE(1,0); + DEV_register_pci_handlers(this, &devfunc, BX_PLUGIN_PCI2ISA, + "PIIX3 PCI-to-ISA bridge"); + + DEV_register_iowrite_handler(this, write_handler, 0x00B2, "PIIX3 PCI-to-ISA bridge", 1); + DEV_register_iowrite_handler(this, write_handler, 0x00B3, "PIIX3 PCI-to-ISA bridge", 1); + DEV_register_iowrite_handler(this, write_handler, 0x04D0, "PIIX3 PCI-to-ISA bridge", 1); + DEV_register_iowrite_handler(this, write_handler, 0x04D1, "PIIX3 PCI-to-ISA bridge", 1); + DEV_register_iowrite_handler(this, write_handler, 0x0CF9, "PIIX3 PCI-to-ISA bridge", 1); + + DEV_register_ioread_handler(this, read_handler, 0x00B2, "PIIX3 PCI-to-ISA bridge", 1); + DEV_register_ioread_handler(this, read_handler, 0x00B3, "PIIX3 PCI-to-ISA bridge", 1); + DEV_register_ioread_handler(this, read_handler, 0x04D0, "PIIX3 PCI-to-ISA bridge", 1); + DEV_register_ioread_handler(this, read_handler, 0x04D1, "PIIX3 PCI-to-ISA bridge", 1); + DEV_register_ioread_handler(this, read_handler, 0x0CF9, "PIIX3 PCI-to-ISA bridge", 1); + + for (i=0; i<256; i++) + BX_P2I_THIS s.pci_conf[i] = 0x0; + for (i=0; i<16; i++) + BX_P2I_THIS s.irq_registry[i] = 0x0; + for (i=0; i<16; i++) + BX_P2I_THIS s.irq_level[i] = 0x0; + // readonly registers + BX_P2I_THIS s.pci_conf[0x00] = 0x86; + BX_P2I_THIS s.pci_conf[0x01] = 0x80; + BX_P2I_THIS s.pci_conf[0x02] = 0x00; + BX_P2I_THIS s.pci_conf[0x03] = 0x70; + BX_P2I_THIS s.pci_conf[0x04] = 0x07; + BX_P2I_THIS s.pci_conf[0x0a] = 0x01; + BX_P2I_THIS s.pci_conf[0x0b] = 0x06; + BX_P2I_THIS s.pci_conf[0x0e] = 0x80; + // irq routing registers + BX_P2I_THIS s.pci_conf[0x60] = 0x80; + BX_P2I_THIS s.pci_conf[0x61] = 0x80; + BX_P2I_THIS s.pci_conf[0x62] = 0x80; + BX_P2I_THIS s.pci_conf[0x63] = 0x80; +} + +void bx_piix3_c::reset(unsigned type) +{ + BX_P2I_THIS s.pci_conf[0x05] = 0x00; + BX_P2I_THIS s.pci_conf[0x06] = 0x00; + BX_P2I_THIS s.pci_conf[0x07] = 0x02; + BX_P2I_THIS s.pci_conf[0x4c] = 0x4d; + BX_P2I_THIS s.pci_conf[0x4e] = 0x03; + BX_P2I_THIS s.pci_conf[0x4f] = 0x00; + BX_P2I_THIS s.pci_conf[0x69] = 0x02; + BX_P2I_THIS s.pci_conf[0x70] = 0x80; + BX_P2I_THIS s.pci_conf[0x76] = 0x0c; + BX_P2I_THIS s.pci_conf[0x77] = 0x0c; + BX_P2I_THIS s.pci_conf[0x78] = 0x02; + BX_P2I_THIS s.pci_conf[0x79] = 0x00; + BX_P2I_THIS s.pci_conf[0x80] = 0x00; + BX_P2I_THIS s.pci_conf[0x82] = 0x00; + BX_P2I_THIS s.pci_conf[0xa0] = 0x08; + BX_P2I_THIS s.pci_conf[0xa2] = 0x00; + BX_P2I_THIS s.pci_conf[0xa3] = 0x00; + BX_P2I_THIS s.pci_conf[0xa4] = 0x00; + BX_P2I_THIS s.pci_conf[0xa5] = 0x00; + BX_P2I_THIS s.pci_conf[0xa6] = 0x00; + BX_P2I_THIS s.pci_conf[0xa7] = 0x00; + BX_P2I_THIS s.pci_conf[0xa8] = 0x0f; + BX_P2I_THIS s.pci_conf[0xaa] = 0x00; + BX_P2I_THIS s.pci_conf[0xab] = 0x00; + BX_P2I_THIS s.pci_conf[0xac] = 0x00; + BX_P2I_THIS s.pci_conf[0xae] = 0x00; + + for (unsigned i = 0; i < 4; i++) { + pci_set_irq(0x08, i+1, 0); + pci_unregister_irq(i); + } + + BX_P2I_THIS s.elcr1 = 0x00; + BX_P2I_THIS s.elcr2 = 0x00; + BX_P2I_THIS s.pci_reset = 0x00; + BX_P2I_THIS s.apms = 0x00; + BX_P2I_THIS s.apmc = 0x00; +} + +void bx_piix3_c::register_state(void) +{ + unsigned i; + char name[6]; + + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "pci2isa", "PCI-to-ISA Bridge State", 8); + + register_pci_state(list, BX_P2I_THIS s.pci_conf); + + BXRS_HEX_PARAM_FIELD(list, elcr1, BX_P2I_THIS s.elcr1); + BXRS_HEX_PARAM_FIELD(list, elcr2, BX_P2I_THIS s.elcr2); + BXRS_HEX_PARAM_FIELD(list, apmc, BX_P2I_THIS s.apmc); + BXRS_HEX_PARAM_FIELD(list, apms, BX_P2I_THIS s.apms); + BXRS_HEX_PARAM_FIELD(list, pci_reset, BX_P2I_THIS s.pci_reset); + + bx_list_c *irqr = new bx_list_c(list, "irq_registry", 16); + for (i=0; i<16; i++) { + sprintf(name, "%d", i); + new bx_shadow_num_c(irqr, name, &BX_P2I_THIS s.irq_registry[i]); + } + bx_list_c *irql = new bx_list_c(list, "irq_level", 16); + for (i=0; i<16; i++) { + sprintf(name, "%d", i); + new bx_shadow_num_c(irql, name, &BX_P2I_THIS s.irq_level[i]); + } +} + +void bx_piix3_c::after_restore_state(void) +{ + for (unsigned i=0; i<16; i++) { + if (BX_P2I_THIS s.irq_registry[i]) { + DEV_register_irq(i, "PIIX3 IRQ routing"); + } + } +} + +void bx_piix3_c::pci_register_irq(unsigned pirq, unsigned irq) +{ + if ((irq < 16) && (((1 << irq) & 0xdef8) > 0)) { + if (BX_P2I_THIS s.pci_conf[0x60 + pirq] < 16) { + pci_unregister_irq(pirq); + } + BX_P2I_THIS s.pci_conf[0x60 + pirq] = irq; + if (!BX_P2I_THIS s.irq_registry[irq]) { + DEV_register_irq(irq, "PIIX3 IRQ routing"); + } + BX_P2I_THIS s.irq_registry[irq] |= (1 << pirq); + } +} + +void bx_piix3_c::pci_unregister_irq(unsigned pirq) +{ + Bit8u irq = BX_P2I_THIS s.pci_conf[0x60 + pirq]; + if (irq < 16) { + BX_P2I_THIS s.irq_registry[irq] &= ~(1 << pirq); + if (!BX_P2I_THIS s.irq_registry[irq]) { + BX_P2I_THIS pci_set_irq(0x08, pirq+1, 0); + DEV_unregister_irq(irq, "PIIX3 IRQ routing"); + } + BX_P2I_THIS s.pci_conf[0x60 + pirq] = 0x80; + } +} + +void bx_piix3_c::pci_set_irq(Bit8u devfunc, unsigned line, bx_bool level) +{ + Bit8u pirq = ((devfunc >> 3) + line - 2) & 0x03; +#if BX_SUPPORT_APIC + // forward this function call to the ioapic too + if (DEV_ioapic_present()) { + DEV_ioapic_set_irq_level(pirq + 16, level); + } +#endif + Bit8u irq = BX_P2I_THIS s.pci_conf[0x60 + pirq]; + if ((irq < 16) && (((1 << irq) & 0xdef8) > 0)) { + if (level == 1) { + if (!BX_P2I_THIS s.irq_level[irq]) { + DEV_pic_raise_irq(irq); + BX_DEBUG(("PIRQ%c -> IRQ %d = 1", pirq+65, irq)); + } + BX_P2I_THIS s.irq_level[irq] |= (1 << (devfunc >> 3)); + } else { + BX_P2I_THIS s.irq_level[irq] &= ~(1 << (devfunc >> 3)); + if (!BX_P2I_THIS s.irq_level[irq]) { + DEV_pic_lower_irq(irq); + BX_DEBUG(("PIRQ%c -> IRQ %d = 0", pirq+65, irq)); + } + } + } +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +Bit32u bx_piix3_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_P2I_SMF + bx_piix3_c *class_ptr = (bx_piix3_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_piix3_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_P2I_SMF + + switch (address) { + case 0x00b2: + return(BX_P2I_THIS s.apmc); + + case 0x00b3: + return(BX_P2I_THIS s.apms); + + case 0x04d0: + return(BX_P2I_THIS s.elcr1); + + case 0x04d1: + return(BX_P2I_THIS s.elcr2); + + case 0x0cf9: + return(BX_P2I_THIS s.pci_reset); + } + + return(0xffffffff); +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_piix3_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_P2I_SMF + bx_piix3_c *class_ptr = (bx_piix3_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_piix3_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_P2I_SMF + + switch (address) { + case 0x00b2: +#if BX_SUPPORT_ACPI + DEV_acpi_generate_smi((Bit8u)value); +#else + BX_ERROR(("write %08x: APM command register not supported yet", value)); +#endif + BX_P2I_THIS s.apmc = value & 0xff; + break; + case 0x00b3: + BX_P2I_THIS s.apms = value & 0xff; + break; + case 0x04d0: + value &= 0xf8; + if (value != BX_P2I_THIS s.elcr1) { + BX_P2I_THIS s.elcr1 = value; + BX_INFO(("write: ELCR1 = 0x%02x", BX_P2I_THIS s.elcr1)); + DEV_pic_set_mode(1, BX_P2I_THIS s.elcr1); // master PIC + } + break; + case 0x04d1: + value &= 0xde; + if (value != BX_P2I_THIS s.elcr2) { + BX_P2I_THIS s.elcr2 = value; + BX_INFO(("write: ELCR2 = 0x%02x", BX_P2I_THIS s.elcr2)); + DEV_pic_set_mode(0, BX_P2I_THIS s.elcr2); // slave PIC + } + break; + case 0x0cf9: + BX_INFO(("write: CPU reset register = 0x%02x", value)); + BX_P2I_THIS s.pci_reset = value & 0x02; + if (value & 0x04) { + if (BX_P2I_THIS s.pci_reset) { + bx_pc_system.Reset(BX_RESET_HARDWARE); + } else { + bx_pc_system.Reset(BX_RESET_SOFTWARE); + } + } + break; + } +} + +// pci configuration space read callback handler +Bit32u bx_piix3_c::pci_read_handler(Bit8u address, unsigned io_len) +{ + Bit32u value = 0; + + for (unsigned i=0; i= 0x10) && (address < 0x34)) + return; + for (unsigned i=0; i> (i*8)) & 0xFF; + switch (address+i) { + case 0x04: + case 0x06: + break; + case 0x60: + case 0x61: + case 0x62: + case 0x63: + if (value8 != BX_P2I_THIS s.pci_conf[address+i]) { + if (value8 >= 0x80) { + pci_unregister_irq((address+i) & 0x03); + } else { + pci_register_irq((address+i) & 0x03, value8); + } + BX_INFO(("PCI IRQ routing: PIRQ%c# set to 0x%02x", address+i-31, + value8)); + } + break; + default: + BX_P2I_THIS s.pci_conf[address+i] = value8; + BX_DEBUG(("PIIX3 PCI-to-ISA write register 0x%02x value 0x%02x", address+i, + value8)); + } + } +} + +#endif /* BX_SUPPORT_PCI */ diff --git a/bochs/iodev/pci2isa.h b/bochs/iodev/pci2isa.h new file mode 100644 index 00000000..2ccff0ef --- /dev/null +++ b/bochs/iodev/pci2isa.h @@ -0,0 +1,70 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_IODEV_PIC2ISA_H +#define BX_IODEV_PIC2ISA_H + +#if BX_USE_P2I_SMF +# define BX_P2I_SMF static +# define BX_P2I_THIS thePci2IsaBridge-> +#else +# define BX_P2I_SMF +# define BX_P2I_THIS this-> +#endif + + +class bx_piix3_c : public bx_pci2isa_stub_c { +public: + bx_piix3_c(); + virtual ~bx_piix3_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual void pci_set_irq(Bit8u devfunc, unsigned line, bx_bool level); + virtual void register_state(void); + virtual void after_restore_state(void); + + virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len); + virtual void pci_write_handler(Bit8u address, Bit32u value, unsigned io_len); + +private: + + struct { + Bit8u pci_conf[256]; + Bit8u elcr1; + Bit8u elcr2; + Bit8u apmc; + Bit8u apms; + Bit8u irq_registry[16]; + Bit32u irq_level[16]; + Bit8u pci_reset; + } s; + + static void pci_register_irq(unsigned pirq, unsigned irq); + static void pci_unregister_irq(unsigned pirq); + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_P2I_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif +}; + +#endif diff --git a/bochs/iodev/pci_ide.cc b/bochs/iodev/pci_ide.cc new file mode 100644 index 00000000..98e99e69 --- /dev/null +++ b/bochs/iodev/pci_ide.cc @@ -0,0 +1,460 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// +// i440FX Support - PCI IDE controller (PIIX3) +// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_PCI + +#include "pci.h" +#include "pci_ide.h" + +#define LOG_THIS thePciIdeController-> + +bx_pci_ide_c *thePciIdeController = NULL; + +const Bit8u bmdma_iomask[16] = {1, 0, 1, 0, 4, 0, 0, 0, 1, 0, 1, 0, 4, 0, 0, 0}; + +int libpci_ide_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + thePciIdeController = new bx_pci_ide_c(); + bx_devices.pluginPciIdeController = thePciIdeController; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, thePciIdeController, BX_PLUGIN_PCI_IDE); + return(0); // Success +} + +void libpci_ide_LTX_plugin_fini(void) +{ + delete thePciIdeController; +} + +bx_pci_ide_c::bx_pci_ide_c() +{ + put("PIDE"); + s.bmdma[0].timer_index = BX_NULL_TIMER_HANDLE; + s.bmdma[1].timer_index = BX_NULL_TIMER_HANDLE; + s.bmdma[0].buffer = NULL; + s.bmdma[1].buffer = NULL; +} + +bx_pci_ide_c::~bx_pci_ide_c() +{ + if (s.bmdma[0].buffer != NULL) { + delete [] s.bmdma[0].buffer; + } + if (s.bmdma[1].buffer != NULL) { + delete [] s.bmdma[1].buffer; + } + BX_DEBUG(("Exit")); +} + +void bx_pci_ide_c::init(void) +{ + unsigned i; + + Bit8u devfunc = BX_PCI_DEVICE(1,1); + DEV_register_pci_handlers(this, &devfunc, + BX_PLUGIN_PCI_IDE, "PIIX3 PCI IDE controller"); + + // register BM-DMA timer + for (i=0; i<2; i++) { + if (BX_PIDE_THIS s.bmdma[i].timer_index == BX_NULL_TIMER_HANDLE) { + BX_PIDE_THIS s.bmdma[i].timer_index = + DEV_register_timer(this, timer_handler, 1000, 0,0, "PIIX3 BM-DMA timer"); + } + } + + BX_PIDE_THIS s.bmdma[0].buffer = new Bit8u[0x20000]; + BX_PIDE_THIS s.bmdma[1].buffer = new Bit8u[0x20000]; + + for (i=0; i<256; i++) + BX_PIDE_THIS s.pci_conf[i] = 0x0; + // readonly registers + BX_PIDE_THIS s.pci_conf[0x00] = 0x86; + BX_PIDE_THIS s.pci_conf[0x01] = 0x80; + BX_PIDE_THIS s.pci_conf[0x02] = 0x10; + BX_PIDE_THIS s.pci_conf[0x03] = 0x70; + BX_PIDE_THIS s.pci_conf[0x09] = 0x80; + BX_PIDE_THIS s.pci_conf[0x0a] = 0x01; + BX_PIDE_THIS s.pci_conf[0x0b] = 0x01; + BX_PIDE_THIS s.pci_conf[0x0e] = 0x00; + BX_PIDE_THIS s.pci_conf[0x20] = 0x01; + BX_PIDE_THIS s.bmdma_addr = 0; +} + +void bx_pci_ide_c::reset(unsigned type) +{ + BX_PIDE_THIS s.pci_conf[0x04] = 0x01; + BX_PIDE_THIS s.pci_conf[0x06] = 0x80; + BX_PIDE_THIS s.pci_conf[0x07] = 0x02; + if (SIM->get_param_bool(BXPN_ATA0_ENABLED)->get()) { + BX_PIDE_THIS s.pci_conf[0x40] = 0x00; + BX_PIDE_THIS s.pci_conf[0x41] = 0x80; + } + if (SIM->get_param_bool(BXPN_ATA1_ENABLED)->get()) { + BX_PIDE_THIS s.pci_conf[0x42] = 0x00; + BX_PIDE_THIS s.pci_conf[0x43] = 0x80; + } + BX_PIDE_THIS s.pci_conf[0x44] = 0x00; + for (unsigned i=0; i<2; i++) { + BX_PIDE_THIS s.bmdma[i].cmd_ssbm = 0; + BX_PIDE_THIS s.bmdma[i].cmd_rwcon = 0; + BX_PIDE_THIS s.bmdma[i].status = 0; + BX_PIDE_THIS s.bmdma[i].dtpr = 0; + BX_PIDE_THIS s.bmdma[i].prd_current = 0; + BX_PIDE_THIS s.bmdma[i].buffer_top = BX_PIDE_THIS s.bmdma[i].buffer; + BX_PIDE_THIS s.bmdma[i].buffer_idx = BX_PIDE_THIS s.bmdma[i].buffer; + } +} + +// save/restore code begin +void bx_pci_ide_c::register_state(void) +{ + char name[6]; + + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "pci_ide", "PCI IDE Controller State", 5); + + register_pci_state(list, BX_PIDE_THIS s.pci_conf); + + new bx_shadow_data_c(list, "buffer0", BX_PIDE_THIS s.bmdma[0].buffer, 0x20000); + new bx_shadow_data_c(list, "buffer1", BX_PIDE_THIS s.bmdma[1].buffer, 0x20000); + + for (unsigned i=0; i<2; i++) { + sprintf(name, "%d", i); + bx_list_c *ctrl = new bx_list_c(list, name, 7); + BXRS_PARAM_BOOL(ctrl, cmd_ssbm, BX_PIDE_THIS s.bmdma[i].cmd_ssbm); + BXRS_PARAM_BOOL(ctrl, cmd_rwcon, BX_PIDE_THIS s.bmdma[i].cmd_rwcon); + BXRS_HEX_PARAM_FIELD(ctrl, status, BX_PIDE_THIS s.bmdma[i].status); + BXRS_HEX_PARAM_FIELD(ctrl, dtpr, BX_PIDE_THIS s.bmdma[i].dtpr); + BXRS_HEX_PARAM_FIELD(ctrl, prd_current, BX_PIDE_THIS s.bmdma[i].prd_current); + BXRS_PARAM_SPECIAL32(ctrl, buffer_top, + BX_PIDE_THIS param_save_handler, BX_PIDE_THIS param_restore_handler); + BXRS_PARAM_SPECIAL32(ctrl, buffer_idx, + BX_PIDE_THIS param_save_handler, BX_PIDE_THIS param_restore_handler); + } +} + +void bx_pci_ide_c::after_restore_state(void) +{ + if (DEV_pci_set_base_io(BX_PIDE_THIS_PTR, read_handler, write_handler, + &BX_PIDE_THIS s.bmdma_addr, &BX_PIDE_THIS s.pci_conf[0x20], + 16, &bmdma_iomask[0], "PIIX3 PCI IDE controller")) + { + BX_INFO(("new BM-DMA address: 0x%04x", BX_PIDE_THIS s.bmdma_addr)); + } +} + +Bit64s bx_pci_ide_c::param_save_handler(void *devptr, bx_param_c *param) +{ +#if !BX_USE_PIDE_SMF + bx_pci_ide_c *class_ptr = (bx_pci_ide_c *) devptr; + return class_ptr->param_save(param, val); +} + +Bit64s bx_pci_ide_c::param_save(bx_param_c *param) +{ +#else + UNUSED(devptr); +#endif // !BX_USE_PIDE_SMF + int chan = atoi(param->get_parent()->get_name()); + Bit64s val = 0; + if (!strcmp(param->get_name(), "buffer_top")) { + val = (Bit32u)(BX_PIDE_THIS s.bmdma[chan].buffer_top - BX_PIDE_THIS s.bmdma[chan].buffer); + } else if (!strcmp(param->get_name(), "buffer_idx")) { + val = (Bit32u)(BX_PIDE_THIS s.bmdma[chan].buffer_idx - BX_PIDE_THIS s.bmdma[chan].buffer); + } + return val; +} + +void bx_pci_ide_c::param_restore_handler(void *devptr, bx_param_c *param, Bit64s val) +{ +#if !BX_USE_PIDE_SMF + bx_pci_ide_c *class_ptr = (bx_pci_ide_c *) devptr; + class_ptr->param_restore(param, val); +} + +void bx_pci_ide_c::param_restore(bx_param_c *param, Bit64s val) +{ +#else + UNUSED(devptr); +#endif // !BX_USE_PIDE_SMF + int chan = atoi(param->get_parent()->get_name()); + if (!strcmp(param->get_name(), "buffer_top")) { + BX_PIDE_THIS s.bmdma[chan].buffer_top = BX_PIDE_THIS s.bmdma[chan].buffer + val; + } else if (!strcmp(param->get_name(), "buffer_idx")) { + BX_PIDE_THIS s.bmdma[chan].buffer_idx = BX_PIDE_THIS s.bmdma[chan].buffer + val; + } +} +// save/restore code end + +bx_bool bx_pci_ide_c::bmdma_present(void) +{ + return (BX_PIDE_THIS s.bmdma_addr > 0); +} + +void bx_pci_ide_c::bmdma_set_irq(Bit8u channel) +{ + if (channel < 2) { + BX_PIDE_THIS s.bmdma[channel].status |= 0x04; + } +} + +void bx_pci_ide_c::timer_handler(void *this_ptr) +{ + bx_pci_ide_c *class_ptr = (bx_pci_ide_c *) this_ptr; + class_ptr->timer(); +} + +void bx_pci_ide_c::timer() +{ + int timer_id, count; + Bit8u channel; + Bit32u size, sector_size; + struct { + Bit32u addr; + Bit32u size; + } prd; + + timer_id = bx_pc_system.triggeredTimerID(); + if (timer_id == BX_PIDE_THIS s.bmdma[0].timer_index) { + channel = 0; + } else { + channel = 1; + } + if (((BX_PIDE_THIS s.bmdma[channel].status & 0x01) == 0) || + (BX_PIDE_THIS s.bmdma[channel].prd_current == 0)) { + return; + } + DEV_MEM_READ_PHYSICAL(BX_PIDE_THIS s.bmdma[channel].prd_current, 4, (Bit8u *)&prd.addr); + DEV_MEM_READ_PHYSICAL(BX_PIDE_THIS s.bmdma[channel].prd_current+4, 4, (Bit8u *)&prd.size); + size = prd.size & 0xfffe; + if (size == 0) { + size = 0x10000; + } + if (BX_PIDE_THIS s.bmdma[channel].cmd_rwcon) { + BX_DEBUG(("READ DMA to addr=0x%08x, size=0x%08x", prd.addr, size)); + count = size - (BX_PIDE_THIS s.bmdma[channel].buffer_top - BX_PIDE_THIS s.bmdma[channel].buffer_idx); + while (count > 0) { + sector_size = count; + if (DEV_hd_bmdma_read_sector(channel, BX_PIDE_THIS s.bmdma[channel].buffer_top, §or_size)) { + BX_PIDE_THIS s.bmdma[channel].buffer_top += sector_size; + count -= sector_size; + } else { + break; + } + }; + if (count > 0) { + BX_PIDE_THIS s.bmdma[channel].status &= ~0x01; + BX_PIDE_THIS s.bmdma[channel].status |= 0x06; + return; + } else { + DEV_MEM_WRITE_PHYSICAL_BLOCK(prd.addr, size, BX_PIDE_THIS s.bmdma[channel].buffer_idx); + BX_PIDE_THIS s.bmdma[channel].buffer_idx += size; + } + } else { + BX_DEBUG(("WRITE DMA from addr=0x%08x, size=0x%08x", prd.addr, size)); + DEV_MEM_READ_PHYSICAL_BLOCK(prd.addr, size, BX_PIDE_THIS s.bmdma[channel].buffer_top); + BX_PIDE_THIS s.bmdma[channel].buffer_top += size; + count = BX_PIDE_THIS s.bmdma[channel].buffer_top - BX_PIDE_THIS s.bmdma[channel].buffer_idx; + while (count > 511) { + if (DEV_hd_bmdma_write_sector(channel, BX_PIDE_THIS s.bmdma[channel].buffer_idx)) { + BX_PIDE_THIS s.bmdma[channel].buffer_idx += 512; + count -= 512; + } else { + break; + } + }; + if (count > 511) { + BX_PIDE_THIS s.bmdma[channel].status &= ~0x01; + BX_PIDE_THIS s.bmdma[channel].status |= 0x06; + return; + } + } + if (prd.size & 0x80000000) { + BX_PIDE_THIS s.bmdma[channel].status &= ~0x01; + BX_PIDE_THIS s.bmdma[channel].status |= 0x04; + BX_PIDE_THIS s.bmdma[channel].prd_current = 0; + DEV_hd_bmdma_complete(channel); + } else { + BX_PIDE_THIS s.bmdma[channel].prd_current += 8; + DEV_MEM_READ_PHYSICAL(BX_PIDE_THIS s.bmdma[channel].prd_current, 4, (Bit8u *)&prd.addr); + DEV_MEM_READ_PHYSICAL(BX_PIDE_THIS s.bmdma[channel].prd_current+4, 4, (Bit8u *)&prd.size); + size = prd.size & 0xfffe; + if (size == 0) { + size = 0x10000; + } + bx_pc_system.activate_timer(BX_PIDE_THIS s.bmdma[channel].timer_index, (size >> 4) | 0x10, 0); + } +} + + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +Bit32u bx_pci_ide_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_PIDE_SMF + bx_pci_ide_c *class_ptr = (bx_pci_ide_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_pci_ide_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PIDE_SMF + Bit8u offset, channel; + Bit32u value = 0xffffffff; + + offset = address - BX_PIDE_THIS s.bmdma_addr; + channel = (offset >> 3); + offset &= 0x07; + switch (offset) { + case 0x00: + value = BX_PIDE_THIS s.bmdma[channel].cmd_ssbm | + (BX_PIDE_THIS s.bmdma[channel].cmd_rwcon << 3); + BX_DEBUG(("BM-DMA read command register, channel %d, value = 0x%02x", channel, value)); + break; + case 0x02: + value = BX_PIDE_THIS s.bmdma[channel].status; + BX_DEBUG(("BM-DMA read status register, channel %d, value = 0x%02x", channel, value)); + break; + case 0x04: + value = BX_PIDE_THIS s.bmdma[channel].dtpr; + BX_DEBUG(("BM-DMA read DTP register, channel %d, value = 0x%04x", channel, value)); + break; + } + + return value; +} + + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_pci_ide_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_PIDE_SMF + bx_pci_ide_c *class_ptr = (bx_pci_ide_c *) this_ptr; + + class_ptr->write(address, value, io_len); +} + +void bx_pci_ide_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PIDE_SMF + Bit8u offset, channel; + + offset = address - BX_PIDE_THIS s.bmdma_addr; + channel = (offset >> 3); + offset &= 0x07; + switch (offset) { + case 0x00: + BX_DEBUG(("BM-DMA write command register, channel %d, value = 0x%02x", channel, value)); + BX_PIDE_THIS s.bmdma[channel].cmd_rwcon = (value >> 3) & 1; + if ((value & 0x01) && !BX_PIDE_THIS s.bmdma[channel].cmd_ssbm) { + BX_PIDE_THIS s.bmdma[channel].cmd_ssbm = 1; + BX_PIDE_THIS s.bmdma[channel].status |= 0x01; + BX_PIDE_THIS s.bmdma[channel].prd_current = BX_PIDE_THIS s.bmdma[channel].dtpr; + BX_PIDE_THIS s.bmdma[channel].buffer_top = BX_PIDE_THIS s.bmdma[channel].buffer; + BX_PIDE_THIS s.bmdma[channel].buffer_idx = BX_PIDE_THIS s.bmdma[channel].buffer; + bx_pc_system.activate_timer(BX_PIDE_THIS s.bmdma[channel].timer_index, 1000, 0); + } else if (!(value & 0x01) && BX_PIDE_THIS s.bmdma[channel].cmd_ssbm) { + BX_PIDE_THIS s.bmdma[channel].cmd_ssbm = 0; + BX_PIDE_THIS s.bmdma[channel].status &= ~0x01; + } + break; + case 0x02: + BX_PIDE_THIS s.bmdma[channel].status = (value & 0x60) + | (BX_PIDE_THIS s.bmdma[channel].status & 0x01) + | (BX_PIDE_THIS s.bmdma[channel].status & (~value & 0x06)); + BX_DEBUG(("BM-DMA write status register, channel %d, value = 0x%02x", channel, value)); + break; + case 0x04: + BX_PIDE_THIS s.bmdma[channel].dtpr = value & 0xfffffffc; + BX_DEBUG(("BM-DMA write DTP register, channel %d, value = 0x%04x", channel, value)); + break; + } +} + + +// pci configuration space read callback handler +Bit32u bx_pci_ide_c::pci_read_handler(Bit8u address, unsigned io_len) +{ + Bit32u value = 0; + + for (unsigned i=0; i= 0x10) && (address < 0x20)) || + ((address > 0x23) && (address < 0x40))) + return; + for (unsigned i=0; i> (i*8)) & 0xFF; + switch (address+i) { + case 0x05: + case 0x06: + break; + case 0x04: + BX_PIDE_THIS s.pci_conf[address+i] = value8 & 0x05; + break; + case 0x20: + value8 = (value8 & 0xfc) | 0x01; + case 0x21: + case 0x22: + case 0x23: + bmdma_change |= (value8 != oldval); + default: + BX_PIDE_THIS s.pci_conf[address+i] = value8; + BX_DEBUG(("PIIX3 PCI IDE write register 0x%02x value 0x%02x", address+i, + value8)); + } + } + if (bmdma_change) { + if (DEV_pci_set_base_io(BX_PIDE_THIS_PTR, read_handler, write_handler, + &BX_PIDE_THIS s.bmdma_addr, &BX_PIDE_THIS s.pci_conf[0x20], + 16, &bmdma_iomask[0], "PIIX3 PCI IDE controller")) { + BX_INFO(("new BM-DMA address: 0x%04x", BX_PIDE_THIS s.bmdma_addr)); + } + } +} + +#endif /* BX_SUPPORT_PCI */ diff --git a/bochs/iodev/pci_ide.h b/bochs/iodev/pci_ide.h new file mode 100644 index 00000000..3887752e --- /dev/null +++ b/bochs/iodev/pci_ide.h @@ -0,0 +1,83 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_IODEV_PCIIDE_H +#define BX_IODEV_PCIIDE_H + +#if BX_USE_PIDE_SMF +# define BX_PIDE_SMF static +# define BX_PIDE_THIS thePciIdeController-> +# define BX_PIDE_THIS_PTR thePciIdeController +#else +# define BX_PIDE_SMF +# define BX_PIDE_THIS this-> +# define BX_PIDE_THIS_PTR this +#endif + +class bx_pci_ide_c : public bx_pci_ide_stub_c { +public: + bx_pci_ide_c(); + virtual ~bx_pci_ide_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual bx_bool bmdma_present(void); + virtual void bmdma_set_irq(Bit8u channel); + virtual void register_state(void); + virtual void after_restore_state(void); + static Bit64s param_save_handler(void *devptr, bx_param_c *param); + static void param_restore_handler(void *devptr, bx_param_c *param, Bit64s val); +#if !BX_USE_PIDE_SMF + Bit64s param_save(bx_param_c *param); + void param_restore(bx_param_c *param, Bit64s val); +#endif + + virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len); + virtual void pci_write_handler(Bit8u address, Bit32u value, unsigned io_len); + + static void timer_handler(void *); + BX_PIDE_SMF void timer(void); + +private: + + struct { + Bit8u pci_conf[256]; + Bit32u bmdma_addr; + struct { + bx_bool cmd_ssbm; + bx_bool cmd_rwcon; + Bit8u status; + Bit32u dtpr; + Bit32u prd_current; + int timer_index; + Bit8u *buffer; + Bit8u *buffer_top; + Bit8u *buffer_idx; + } bmdma[2]; + } s; + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_PIDE_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif +}; + +#endif diff --git a/bochs/iodev/pcidev.cc b/bochs/iodev/pcidev.cc new file mode 100644 index 00000000..8a9aad5b --- /dev/null +++ b/bochs/iodev/pcidev.cc @@ -0,0 +1,464 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +/* + * PCIDEV: PCI host device mapping + * Copyright (C) 2003 - Frank Cornelis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2 as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * Based on pcivga code: + * Copyright (C) 2002,2003 Mike Nordell + */ + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#if BX_SUPPORT_PCI && BX_SUPPORT_PCIDEV + +#include "pcidev.h" +#include "kernel_pcidev.h" + +#include +#include +#include + +#define LOG_THIS thePciDevAdapter-> + +bx_pcidev_c* thePciDevAdapter = NULL; + +int libpcidev_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + thePciDevAdapter = new bx_pcidev_c(); + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, thePciDevAdapter, BX_PLUGIN_PCIDEV); + return 0; // Success +} + +void libpcidev_LTX_plugin_fini(void) +{ + delete thePciDevAdapter; +} + +bx_pcidev_c::bx_pcidev_c() +{ + put("PCI2H"); +} + +bx_pcidev_c::~bx_pcidev_c() +{ + BX_DEBUG(("Exit")); +} + +static void pcidev_sighandler(int param) +{ + bx_pcidev_c *pcidev = thePciDevAdapter; + BX_INFO(("Interrupt received.")); + DEV_pci_set_irq(pcidev->devfunc, pcidev->intpin, 0); + /* + * We need to first lower the IRQ line or else we don't + * get any IRQs through + */ + DEV_pci_set_irq(pcidev->devfunc, pcidev->intpin, 1); +} + +static bx_bool pcidev_mem_read_handler(bx_phy_address addr, unsigned len, void *data, void *param) +{ + struct region_struct *region = (struct region_struct *)param; + bx_pcidev_c *pcidev = region->pcidev; + int fd = pcidev->pcidev_fd; + int ret = -1; + + if (fd == -1) + return false; /* we failed to handle the request, so let a default handler do it for us */ + + BX_INFO(("Reading I/O memory at 0x%08x", (unsigned)addr)); + struct pcidev_io_struct io; + io.address = addr + region->host_start - region->start; + switch(len) { + case 1: + ret = ioctl(fd, PCIDEV_IOCTL_READ_MEM_BYTE, &io); + *(Bit8u *)data = io.value; + break; + case 2: + ret = ioctl(fd, PCIDEV_IOCTL_READ_MEM_WORD, &io); + *(Bit16u *)data = io.value; + break; + case 4: + ret = ioctl(fd, PCIDEV_IOCTL_READ_MEM_DWORD, &io); + *(Bit32u *)data = io.value; + break; + default: + BX_ERROR(("Unsupported pcidev read mem operation")); + break; + } + if (ret == -1) { + BX_ERROR(("pcidev read mem error")); + } + return true; // ok, we handled the request +} + + +static bx_bool pcidev_mem_write_handler(bx_phy_address addr, unsigned len, void *data, void *param) +{ + struct region_struct *region = (struct region_struct *)param; + bx_pcidev_c *pcidev = region->pcidev; + int fd = pcidev->pcidev_fd; + int ret = -1; + + if (fd == -1) + return false; /* we failed to handle the request, so let a default handler do it for us */ + + BX_INFO(("Writing I/O memory at 0x%08x", (unsigned)addr)); + struct pcidev_io_struct io; + io.address = addr + region->host_start - region->start; + switch(len) { + case 1: + io.value = *(Bit8u *)data; + ret = ioctl(fd, PCIDEV_IOCTL_WRITE_MEM_BYTE, &io); + break; + case 2: + io.value = *(Bit16u *)data; + ret = ioctl(fd, PCIDEV_IOCTL_WRITE_MEM_WORD, &io); + break; + case 4: + io.value = *(Bit32u *)data; + ret = ioctl(fd, PCIDEV_IOCTL_WRITE_MEM_DWORD, &io); + break; + default: + BX_ERROR(("Unsupported pcidev write mem operation")); + break; + } + if (ret == -1) { + BX_ERROR(("pcidev write mem error")); + } + return true; +} + + +static const char * const pcidev_name = "Experimental PCI 2 host PCI"; + +void bx_pcidev_c::init(void) +{ + // called once when bochs initializes + BX_PCIDEV_THIS pcidev_fd = -1; + int fd; + fd = open("/dev/pcidev", O_RDWR); + if (fd == -1) { + switch(errno) { + case ENODEV: + BX_PANIC(("The pcidev kernel module is not loaded!")); + break; + default: + BX_PANIC(("open /dev/pcidev: %s", strerror(errno))); + break; + } + return; + } + BX_PCIDEV_THIS pcidev_fd = fd; + struct pcidev_find_struct find; + unsigned short vendor = SIM->get_param_num(BXPN_PCIDEV_VENDOR)->get(); + unsigned short device = SIM->get_param_num(BXPN_PCIDEV_DEVICE)->get(); + find.deviceID = device; + find.vendorID = vendor; + if (ioctl(fd, PCIDEV_IOCTL_FIND, &find) == -1) { + switch (errno) { + case ENOENT: + BX_PANIC(("PCI device not found on host system.")); + break; + case EBUSY: + BX_PANIC(("PCI device already used by another kernel module.")); + break; + default: + perror("ioctl"); + break; + } + close(fd); + BX_PCIDEV_THIS pcidev_fd = -1; + return; + } + BX_INFO(("vendor: %04x; device: %04x @ host %04x:%04x.%d", vendor, device, + (unsigned)find.bus, (unsigned)find.device, (unsigned)find.func)); + + BX_PCIDEV_THIS devfunc = 0x00; + DEV_register_pci_handlers(this, &BX_PCIDEV_THIS devfunc, BX_PLUGIN_PCIDEV, + pcidev_name); + + BX_PCIDEV_THIS irq = 0; + struct pcidev_io_struct io; + io.address = 0x3d; + int ret = ioctl(fd, PCIDEV_IOCTL_READ_CONFIG_BYTE, &io); + if (ret != -1) { + BX_PCIDEV_THIS intpin = io.value; + } else { + BX_PCIDEV_THIS intpin = 0; + } + + for (int idx = 0; idx < PCIDEV_COUNT_RESOURCES; idx++) { + BX_PCIDEV_THIS regions[idx].start = 0; // emulated device not yet initialized + if (!find.resources[idx].start) + continue; + BX_INFO(("PCI resource @ %x-%x (%s)", (unsigned)find.resources[idx].start, + (unsigned)find.resources[idx].end, + (find.resources[idx].flags & PCIDEV_RESOURCE_IO ? "I/O" : "Mem"))); + BX_PCIDEV_THIS regions[idx].size = find.resources[idx].end - find.resources[idx].start + 1; + BX_PCIDEV_THIS regions[idx].host_start = find.resources[idx].start; + struct pcidev_io_struct io; + io.address = PCI_BASE_ADDRESS_0 + idx * 4; + if (ioctl(fd, PCIDEV_IOCTL_READ_CONFIG_DWORD, &io) == -1) + BX_ERROR(("Error reading a base address config reg")); + BX_PCIDEV_THIS regions[idx].config_value = io.value; + /* + * We will use ®ion[idx] as parameter for our I/O or memory + * handler. So we provide a pcidev pointer to the pcidev object + * in order for the handle to be able to use its pcidev object + */ + BX_PCIDEV_THIS regions[idx].pcidev = this; + } + + struct sigaction sa; + sa.sa_handler = pcidev_sighandler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sigaction(SIGUSR1, &sa, NULL); + + /* + * The kernel pcidev will fire SIGUSR1 signals when it receives + * interrupts from the host PCI device. + */ + ioctl(fd, PCIDEV_IOCTL_INTERRUPT, 1); +} + +void bx_pcidev_c::reset(unsigned type) { } + +// pci configuration space read callback handler +Bit32u bx_pcidev_c::pci_read_handler(Bit8u address, unsigned io_len) +{ + int ret = -1; + + int fd = BX_PCIDEV_THIS pcidev_fd; + if (fd == -1) + return 0xffffffff; + + struct pcidev_io_struct io; + io.address = address; + switch(io_len) { + case 1: + ret = ioctl(fd, PCIDEV_IOCTL_READ_CONFIG_BYTE, &io); + break; + case 2: + ret = ioctl(fd, PCIDEV_IOCTL_READ_CONFIG_WORD, &io); + break; + case 4: + ret = ioctl(fd, PCIDEV_IOCTL_READ_CONFIG_DWORD, &io); + break; + } + if (ret == -1) + BX_ERROR(("pcidev config read error")); + + // we don't use the host irq line but our own bochs irq line + if (address == PCI_INTERRUPT_LINE) { + io.value = (io.value & 0xffffff00) | (BX_PCIDEV_THIS irq & 0xff); + } + if (PCI_BASE_ADDRESS_0 <= address && address <= PCI_BASE_ADDRESS_5) { + BX_INFO(("Reading pcidev base address #%d", (address - PCI_BASE_ADDRESS_0) / 4)); + io.value = BX_PCIDEV_THIS regions[(address - PCI_BASE_ADDRESS_0) >> 2].config_value; + if (address & 3) { + io.value >>= (8 * (address & 3)); + } + } + + return io.value; +} + +// pci configuration space write callback handler +void bx_pcidev_c::pci_write_handler(Bit8u address, Bit32u value, unsigned io_len) +{ + int ret = -1; + Bit8u *iomask; + Bit32u bitmask; + + int fd = BX_PCIDEV_THIS pcidev_fd; + if (fd == -1) + return; + + // we do a host 2 guest irq line mapping + if (address == PCI_INTERRUPT_LINE) { + value &= 0xff; + BX_INFO(("Changing the pcidev irq line from %d to %d", BX_PCIDEV_THIS irq, value)); + BX_PCIDEV_THIS irq = value; + return; + } + if ((PCI_BASE_ADDRESS_0 <= address) && (address <= PCI_BASE_ADDRESS_5)) { + /* + * Two things to do here: + * - update the cached config space value via a probe + * - remap the I/O or memory handler if required + */ + int io_reg_idx = (address - PCI_BASE_ADDRESS_0) >> 2; + switch (io_len) { + case 1: bitmask = 0xff; break; + case 2: bitmask = 0xffff; break; + default: bitmask = 0xffffffff; + } + bitmask <<= (8 * (address & 3)); + value <<= (8 * (address & 3)); + value |= BX_PCIDEV_THIS regions[io_reg_idx].config_value & ~bitmask; + BX_INFO(("Changing pcidev base address #%d - New value: %#x", + (address - PCI_BASE_ADDRESS_0) / 4, value)); + struct pcidev_io_struct io; + io.address = address; + io.value = value; + ret = ioctl(fd, PCIDEV_IOCTL_PROBE_CONFIG_DWORD, &io); + if (ret == -1) { + BX_ERROR(("Error probing a base address reg!")); + return; + } + unsigned long base = io.value; + BX_PCIDEV_THIS regions[io_reg_idx].config_value = base; + /* remap the I/O or memory handler if required using io.value + * We assume that an I/O memory region will stay and I/O memory + * region. And that an I/O port region also will stay an I/O port + * region. + */ + if ((base & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_MEMORY) { + if (DEV_pci_set_base_mem(&(BX_PCIDEV_THIS regions[io_reg_idx]), + pcidev_mem_read_handler, + pcidev_mem_write_handler, + &BX_PCIDEV_THIS regions[io_reg_idx].start, + (Bit8u*)&BX_PCIDEV_THIS regions[io_reg_idx].config_value, + BX_PCIDEV_THIS regions[io_reg_idx].size)) { + BX_INFO(("new base #%d memory address: 0x%08x", io_reg_idx, + BX_PCIDEV_THIS regions[io_reg_idx].start)); + } + } else { + /* + * Remap our I/O port handlers here. + */ + iomask = (Bit8u*)malloc(BX_PCIDEV_THIS regions[io_reg_idx].size); + memset(iomask, 7, BX_PCIDEV_THIS regions[io_reg_idx].size); + if (DEV_pci_set_base_io(&(BX_PCIDEV_THIS regions[io_reg_idx]), + read_handler, write_handler, + &BX_PCIDEV_THIS regions[io_reg_idx].start, + (Bit8u*)&BX_PCIDEV_THIS regions[io_reg_idx].config_value, + BX_PCIDEV_THIS regions[io_reg_idx].size, iomask, "pcidev")) { + BX_INFO(("new base #%d i/o address: 0x%04x", io_reg_idx, + (Bit16u)BX_PCIDEV_THIS regions[io_reg_idx].start)); + } + free(iomask); + } + return; + } + + struct pcidev_io_struct io; + io.address = address; + io.value = value; + + switch(io_len) { + case 1: + ret = ioctl(fd, PCIDEV_IOCTL_WRITE_CONFIG_BYTE, &io); + break; + case 2: + ret = ioctl(fd, PCIDEV_IOCTL_WRITE_CONFIG_WORD, &io); + break; + case 4: + ret = ioctl(fd, PCIDEV_IOCTL_WRITE_CONFIG_DWORD, &io); + break; + } + if (ret == -1) + BX_ERROR(("pcidev config write error")); +} + +Bit32u bx_pcidev_c::read_handler(void *param, Bit32u address, unsigned io_len) +{ +#if !BX_USE_PCIDEV_SMF + bx_pcidev_c *class_ptr = ((struct region_struct *)param)->pcidev; + return class_ptr->read(param, address, io_len); +} + +Bit32u bx_pcidev_c::read(void *param, Bit32u address, unsigned io_len) +{ +#endif + struct region_struct *region = (struct region_struct *)param; + int ret = -1; + + int fd = BX_PCIDEV_THIS pcidev_fd; + if (fd == -1) + return 0xffffffff; + + struct pcidev_io_struct io; + // here we map the io address + io.address = address + region->host_start - region->start; + switch(io_len) { + case 1: + ret = ioctl(fd, PCIDEV_IOCTL_READ_IO_BYTE, &io); + break; + case 2: + ret = ioctl(fd, PCIDEV_IOCTL_READ_IO_WORD, &io); + break; + case 4: + ret = ioctl(fd, PCIDEV_IOCTL_READ_IO_DWORD, &io); + break; + } + if (ret == -1) { + BX_ERROR(("pcidev read I/O error")); + io.value = 0xffffffff; + } + + return io.value; +} + +void bx_pcidev_c::write_handler(void *param, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_PCIDEV_SMF + bx_pcidev_c *class_ptr = ((struct region_struct *)param)->pcidev; + class_ptr->write(param, address, value, io_len); +} + +void bx_pcidev_c::write(void *param, Bit32u address, Bit32u value, unsigned io_len) +{ +#endif + struct region_struct *region = (struct region_struct *)param; + int ret = -1; + + int fd = BX_PCIDEV_THIS pcidev_fd; + if (fd == -1) + return; + + struct pcidev_io_struct io; + // here we map the I/O address + io.address = address + region->host_start - region->start; + io.value = value; + + switch(io_len) { + case 1: + ret = ioctl(fd, PCIDEV_IOCTL_WRITE_IO_BYTE, &io); + break; + case 2: + ret = ioctl(fd, PCIDEV_IOCTL_WRITE_IO_WORD, &io); + break; + case 4: + ret = ioctl(fd, PCIDEV_IOCTL_WRITE_IO_DWORD, &io); + break; + } + if (ret == -1) + BX_ERROR(("pcidev I/O write error")); +} + +#endif // BX_SUPPORT_PCI && BX_SUPPORT_PCIDEV diff --git a/bochs/iodev/pcidev.h b/bochs/iodev/pcidev.h new file mode 100644 index 00000000..3c474a1c --- /dev/null +++ b/bochs/iodev/pcidev.h @@ -0,0 +1,69 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +/* + * PCIDEV: PCI host device mapping + * Copyright (C) 2003 - Frank Cornelis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2 as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef BX_IODEV_PCIDEV_H +#define BX_IODEV_PCIDEV_H + +#if BX_USE_PCIDEV_SMF +# define BX_PCIDEV_THIS thePciDevAdapter-> +# define BX_PCIDEV_THIS_ thePciDevAdapter +#else +# define BX_PCIDEV_THIS this-> +# define BX_PCIDEV_THIS_ this +#endif + +struct region_struct { + Bit32u config_value; + Bit32u start; // can change + Bit32u size; + Bit32u host_start; // never changes!!! + class bx_pcidev_c *pcidev; +}; + +class bx_pcidev_c : public bx_devmodel_c, public bx_pci_device_stub_c { +public: + bx_pcidev_c(); + virtual ~bx_pcidev_c(); + virtual void init(void); + virtual void reset(unsigned type); + + virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len); + virtual void pci_write_handler(Bit8u address, Bit32u value, unsigned io_len); + + int pcidev_fd; // to access the pcidev + + // resource mapping + struct region_struct regions[6]; + Bit8u devfunc; + Bit8u intpin; + Bit8u irq; + +private: + static Bit32u read_handler(void *param, Bit32u address, unsigned io_len); + static void write_handler(void *param, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_PCIDEV_SMF + Bit32u read(void *param, Bit32u address, unsigned io_len); + void write(void *param, Bit32u address, Bit32u value, unsigned io_len); +#endif +}; + +#endif diff --git a/bochs/iodev/pcipnic.cc b/bochs/iodev/pcipnic.cc new file mode 100644 index 00000000..8af0da20 --- /dev/null +++ b/bochs/iodev/pcipnic.cc @@ -0,0 +1,522 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2003 Fen Systems Ltd. +// http://www.fensystems.co.uk/ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. + +#define BX_PLUGGABLE + +#include "iodev.h" +#if BX_SUPPORT_PCI && BX_SUPPORT_PCIPNIC + +#include "pci.h" +#include "eth.h" +#include "pcipnic.h" + +#define LOG_THIS thePNICDevice-> + +bx_pcipnic_c* thePNICDevice = NULL; + +const Bit8u pnic_iomask[16] = {2, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + +int libpcipnic_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + thePNICDevice = new bx_pcipnic_c(); + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, thePNICDevice, BX_PLUGIN_PCIPNIC); + return 0; // Success +} + +void libpcipnic_LTX_plugin_fini(void) +{ + delete thePNICDevice; +} + +bx_pcipnic_c::bx_pcipnic_c() +{ + put("PNIC"); +} + +bx_pcipnic_c::~bx_pcipnic_c() +{ + BX_DEBUG(("Exit")); +} + +void bx_pcipnic_c::init(void) +{ + bx_list_c *base; + + // Read in values from config interface + base = (bx_list_c*) SIM->get_param(BXPN_PNIC); + memcpy(BX_PNIC_THIS s.macaddr, SIM->get_param_string("macaddr", base)->getptr(), 6); + + BX_PNIC_THIS s.devfunc = 0x00; + DEV_register_pci_handlers(this, &BX_PNIC_THIS s.devfunc, BX_PLUGIN_PCIPNIC, + "Experimental PCI Pseudo NIC"); + + for (unsigned i=0; i<256; i++) { + BX_PNIC_THIS s.pci_conf[i] = 0x0; + } + + // This code ripped wholesale from ne2k.cc: + // Attach to the simulated ethernet dev + const char *ethmod = SIM->get_param_enum("ethmod", base)->get_selected(); + BX_PNIC_THIS ethdev = eth_locator_c::create(ethmod, + SIM->get_param_string("ethdev", base)->getptr(), + (const char *) SIM->get_param_string("macaddr", base)->getptr(), + rx_handler, + this, + SIM->get_param_string("script", base)->getptr()); + + if (BX_PNIC_THIS ethdev == NULL) { + BX_PANIC(("could not find eth module %s", ethmod)); + // if they continue, use null. + BX_INFO(("could not find eth module %s - using null instead", ethmod)); + + BX_PNIC_THIS ethdev = eth_locator_c::create("null", NULL, + (const char *) SIM->get_param_string("macaddr", base)->getptr(), + rx_handler, + this, ""); + if (BX_PNIC_THIS ethdev == NULL) + BX_PANIC(("could not locate null module")); + } + + BX_PNIC_THIS s.base_ioaddr = 0; + + BX_INFO(("PCI Pseudo NIC initialized - I/O base and IRQ assigned by PCI BIOS")); +} + +void bx_pcipnic_c::reset(unsigned type) +{ + unsigned i; + + static const struct reset_vals_t { + unsigned addr; + unsigned char val; + } reset_vals[] = { + { 0x00, PNIC_PCI_VENDOR & 0xff }, + { 0x01, PNIC_PCI_VENDOR >> 8 }, + { 0x02, PNIC_PCI_DEVICE & 0xff }, + { 0x03, PNIC_PCI_DEVICE >> 8 }, + { 0x04, 0x05 }, { 0x05, 0x00 }, // command_io + { 0x06, 0x80 }, { 0x07, 0x02 }, // status + { 0x08, 0x01 }, // revision number + { 0x09, 0x00 }, // interface + { 0x0a, 0x00 }, // class_sub + { 0x0b, 0x02 }, // class_base Network Controller + { 0x0D, 0x20 }, // bus latency + { 0x0e, 0x00 }, // header_type_generic + // address space 0x20 - 0x23 + { 0x20, 0x01 }, { 0x21, 0x00 }, + { 0x22, 0x00 }, { 0x23, 0x00 }, + { 0x3c, 0x00, }, // IRQ + { 0x3d, BX_PCI_INTA }, // INT + { 0x6a, 0x01 }, // PNIC clock + { 0xc1, 0x20 } // PIRQ enable + + }; + for (i = 0; i < sizeof(reset_vals) / sizeof(*reset_vals); ++i) { + BX_PNIC_THIS s.pci_conf[reset_vals[i].addr] = reset_vals[i].val; + } + + // Set up initial register values + BX_PNIC_THIS s.rCmd = PNIC_CMD_NOOP; + BX_PNIC_THIS s.rStatus = PNIC_STATUS_OK; + BX_PNIC_THIS s.rLength = 0; + BX_PNIC_THIS s.rDataCursor = 0; + BX_PNIC_THIS s.recvIndex = 0; + BX_PNIC_THIS s.recvQueueLength = 0; + BX_PNIC_THIS s.irqEnabled = 0; + + // Deassert IRQ + set_irq_level(0); +} + +void bx_pcipnic_c::register_state(void) +{ + unsigned i; + char name[6]; + + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "pcipnic", "PCI Pseudo NIC State", 11); + new bx_shadow_num_c(list, "irqEnabled", &BX_PNIC_THIS s.irqEnabled); + new bx_shadow_num_c(list, "rCmd", &BX_PNIC_THIS s.rCmd); + new bx_shadow_num_c(list, "rStatus", &BX_PNIC_THIS s.rStatus); + new bx_shadow_num_c(list, "rLength", &BX_PNIC_THIS s.rLength); + new bx_shadow_num_c(list, "rDataCursor", &BX_PNIC_THIS s.rDataCursor); + new bx_shadow_num_c(list, "recvIndex", &BX_PNIC_THIS s.recvIndex); + new bx_shadow_num_c(list, "recvQueueLength", &BX_PNIC_THIS s.recvQueueLength); + bx_list_c *recvRL = new bx_list_c(list, "recvRingLength", PNIC_RECV_RINGS); + for (i=0; iread(address, io_len); +} + +Bit32u bx_pcipnic_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PCIPNIC_SMF + Bit32u val = 0x0; + Bit8u offset; + + BX_DEBUG(("register read from address 0x%04x - ", (unsigned) address)); + + offset = address - BX_PNIC_THIS s.base_ioaddr; + + switch (offset) { + case PNIC_REG_STAT: + val = BX_PNIC_THIS s.rStatus; + break; + + case PNIC_REG_LEN: + val = BX_PNIC_THIS s.rLength; + break; + + case PNIC_REG_DATA: + if (BX_PNIC_THIS s.rDataCursor >= BX_PNIC_THIS s.rLength) + BX_PANIC(("PNIC read at %u, beyond end of data register array", + BX_PNIC_THIS s.rDataCursor)); + val = BX_PNIC_THIS s.rData[BX_PNIC_THIS s.rDataCursor++]; + break; + + default : + val = 0; // keep compiler happy + BX_PANIC(("unsupported io read from address=0x%04x!", (unsigned) address)); + break; + } + + BX_DEBUG(("val = 0x%04x", (Bit16u) val)); + + return(val); +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_pcipnic_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_PCIPNIC_SMF + bx_pcipnic_c *class_ptr = (bx_pcipnic_c *) this_ptr; + + class_ptr->write(address, value, io_len); +} + +void bx_pcipnic_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PCIPNIC_SMF + Bit8u offset; + + BX_DEBUG(("register write to address 0x%04x - ", (unsigned) address)); + + offset = address - BX_PNIC_THIS s.base_ioaddr; + + switch (offset) { + case PNIC_REG_CMD: + BX_PNIC_THIS s.rCmd = value; + BX_PNIC_THIS exec_command(); + break; + + case PNIC_REG_LEN: + if (value > PNIC_DATA_SIZE) + BX_PANIC(("PNIC bad length %u written to length register, max is %u", + value, PNIC_DATA_SIZE)); + BX_PNIC_THIS s.rLength = value; + BX_PNIC_THIS s.rDataCursor = 0; + break; + + case PNIC_REG_DATA: + if (BX_PNIC_THIS s.rDataCursor >= BX_PNIC_THIS s.rLength) + BX_PANIC(("PNIC write at %u, beyond end of data register array", + BX_PNIC_THIS s.rDataCursor)); + BX_PNIC_THIS s.rData[BX_PNIC_THIS s.rDataCursor++] = value; + break; + + default: + BX_PANIC(("unsupported io write to address=0x%04x!", (unsigned) address)); + break; + } +} + +void bx_pcipnic_c::pnic_timer_handler(void *this_ptr) +{ + bx_pcipnic_c *class_ptr = (bx_pcipnic_c *) this_ptr; + class_ptr->pnic_timer(); +} + +// Called once every 1ms +void bx_pcipnic_c::pnic_timer(void) +{ + // Do nothing atm + +} + +// pci configuration space read callback handler +Bit32u bx_pcipnic_c::pci_read_handler(Bit8u address, unsigned io_len) +{ + Bit32u value = 0; + + for (unsigned i=0; i= 0x10) && (address < 0x20)) || + ((address > 0x23) && (address < 0x34))) + return; + + for (unsigned i=0; i> (i*8)) & 0xFF; + oldval = BX_PNIC_THIS s.pci_conf[address+i]; + switch (address+i) { + case 0x3d: // + case 0x05: // disallowing write to command hi-byte + case 0x06: // disallowing write to status lo-byte (is that expected?) + break; + case 0x3c: + if (value8 != oldval) { + BX_INFO(("new irq line = %d", value8)); + BX_PNIC_THIS s.pci_conf[address+i] = value8; + } + break; + case 0x20: + value8 = (value8 & 0xfc) | 0x01; + case 0x21: + case 0x22: + case 0x23: + baseaddr_change = (value8 != oldval); + default: + BX_PNIC_THIS s.pci_conf[address+i] = value8; + } + } + if (baseaddr_change) { + if (DEV_pci_set_base_io(BX_PNIC_THIS_PTR, read_handler, write_handler, + &BX_PNIC_THIS s.base_ioaddr, + &BX_PNIC_THIS s.pci_conf[0x20], + 16, &pnic_iomask[0], "PNIC")) { + BX_INFO(("new base address: 0x%04x", BX_PNIC_THIS s.base_ioaddr)); + } + } + + if (io_len == 1) + BX_DEBUG(("write PCI register 0x%02x value 0x%02x", address, value)); + else if (io_len == 2) + BX_DEBUG(("write PCI register 0x%02x value 0x%04x", address, value)); + else if (io_len == 4) + BX_DEBUG(("write PCI register 0x%02x value 0x%08x", address, value)); +} + + +/* + * Execute a hardware command. + */ +void bx_pcipnic_c::exec_command(void) +{ + Bit16u command = BX_PNIC_THIS s.rCmd; + Bit16u ilength = BX_PNIC_THIS s.rLength; + Bit8u *data = BX_PNIC_THIS s.rData; + // Default return values + Bit16u status = PNIC_STATUS_UNKNOWN_CMD; + Bit16u olength = 0; + + if (ilength != BX_PNIC_THIS s.rDataCursor) + BX_PANIC(("PNIC command issued with incomplete data (should be %u, is %u)", + ilength, BX_PNIC_THIS s.rDataCursor)); + + switch (command) { + case PNIC_CMD_NOOP: + status = PNIC_STATUS_OK; + break; + + case PNIC_CMD_API_VER: + Bit16u api_version; + + api_version = PNIC_API_VERSION; + olength = sizeof(api_version); + memcpy (data, &api_version, sizeof(api_version)); + status = PNIC_STATUS_OK; + break; + + case PNIC_CMD_READ_MAC: + olength = sizeof (BX_PNIC_THIS s.macaddr); + memcpy (data, BX_PNIC_THIS s.macaddr, olength); + status = PNIC_STATUS_OK; + break; + + case PNIC_CMD_RESET: + /* Flush the receive queue */ + BX_PNIC_THIS s.recvQueueLength = 0; + status = PNIC_STATUS_OK; + break; + + case PNIC_CMD_XMIT: + BX_PNIC_THIS ethdev->sendpkt(data, ilength); + if (BX_PNIC_THIS s.irqEnabled) { + set_irq_level(1); + } + status = PNIC_STATUS_OK; + break; + + case PNIC_CMD_RECV: + if (BX_PNIC_THIS s.recvQueueLength > 0) { + int idx = (BX_PNIC_THIS s.recvIndex - BX_PNIC_THIS s.recvQueueLength + + PNIC_RECV_RINGS) % PNIC_RECV_RINGS; + olength = BX_PNIC_THIS s.recvRingLength[idx]; + memcpy (data, BX_PNIC_THIS s.recvRing[idx], olength); + BX_PNIC_THIS s.recvQueueLength--; + } + if (! BX_PNIC_THIS s.recvQueueLength) { + set_irq_level(0); + } + status = PNIC_STATUS_OK; + break; + + case PNIC_CMD_RECV_QLEN: + Bit16u qlen; + + qlen = BX_PNIC_THIS s.recvQueueLength; + olength = sizeof(qlen); + memcpy (data, &qlen, sizeof(qlen)); + status = PNIC_STATUS_OK; + break; + + case PNIC_CMD_MASK_IRQ: + Bit8u enabled; + + enabled = *((Bit8u*)data); + BX_PNIC_THIS s.irqEnabled = enabled; + if (enabled && BX_PNIC_THIS s.recvQueueLength) { + set_irq_level(1); + } else { + set_irq_level(0); + } + status = PNIC_STATUS_OK; + break; + + case PNIC_CMD_FORCE_IRQ: + set_irq_level(1); + status = PNIC_STATUS_OK; + break; + + default: + BX_ERROR(("Unknown PNIC command %x (data length %u)", command, ilength)); + status = PNIC_STATUS_UNKNOWN_CMD; + break; + } + + // Set registers + BX_PNIC_THIS s.rStatus = status; + BX_PNIC_THIS s.rLength = olength; + BX_PNIC_THIS s.rDataCursor = 0; +} + +/* + * Callback from the eth system driver when a frame has arrived + */ +void bx_pcipnic_c::rx_handler(void *arg, const void *buf, unsigned len) +{ + // BX_DEBUG(("rx_handler with length %d", len)); + bx_pcipnic_c *class_ptr = (bx_pcipnic_c *) arg; + class_ptr->rx_frame(buf, len); +} + +/* + * rx_frame() - called by the platform-specific code when an + * ethernet frame has been received. The destination address + * is tested to see if it should be accepted, and if the + * rx ring has enough room, it is copied into it and + * the receive process is updated + */ +void bx_pcipnic_c::rx_frame(const void *buf, unsigned io_len) +{ + // Check packet length + if (io_len > PNIC_DATA_SIZE) { + BX_PANIC(("PNIC receive: data size %u exceeded buffer size %u", + io_len, PNIC_DATA_SIZE)); + // Truncate if user continues + io_len = PNIC_DATA_SIZE; + } + // Check receive ring is not full + if (BX_PNIC_THIS s.recvQueueLength == PNIC_RECV_RINGS) { + BX_ERROR(("PNIC receive: receive ring full, discarding packet")); + return; + } + // Copy data to receive ring and record length + memcpy (BX_PNIC_THIS s.recvRing[BX_PNIC_THIS s.recvIndex], buf, io_len); + BX_PNIC_THIS s.recvRingLength[BX_PNIC_THIS s.recvIndex] = io_len; + // Move to next ring entry + BX_PNIC_THIS s.recvIndex = (BX_PNIC_THIS s.recvIndex + 1) % PNIC_RECV_RINGS; + BX_PNIC_THIS s.recvQueueLength++; + + // Generate interrupt if enabled + if (BX_PNIC_THIS s.irqEnabled) { + set_irq_level(1); + } +} + +#endif // BX_SUPPORT_PCI && BX_SUPPORT_PCIPNIC diff --git a/bochs/iodev/pcipnic.h b/bochs/iodev/pcipnic.h new file mode 100644 index 00000000..4e2a3cfb --- /dev/null +++ b/bochs/iodev/pcipnic.h @@ -0,0 +1,96 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2003 Fen Systems Ltd. +// http://www.fensystems.co.uk/ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_IODEV_PCIPNIC_H +#define BX_IODEV_PCIPNIC_H + +#include "pnic_api.h" + +#if BX_USE_PCIPNIC_SMF +# define BX_PNIC_SMF static +# define BX_PNIC_THIS thePNICDevice-> +# define BX_PNIC_THIS_PTR thePNICDevice +#else +# define BX_PNIC_SMF +# define BX_PNIC_THIS this-> +# define BX_PNIC_THIS_PTR this +#endif + +#define PNIC_DATA_SIZE 4096 +#define PNIC_RECV_RINGS 4 + +typedef struct { + + Bit32u base_ioaddr; + Bit8u macaddr[6]; + Bit8u irqEnabled; + + Bit16u rCmd; // Command register + Bit16u rStatus; // Status register + Bit16u rLength; // Length register + Bit8u rData[PNIC_DATA_SIZE]; // Data register array + Bit16u rDataCursor; + + int recvIndex; + int recvQueueLength; + Bit8u recvRing[PNIC_RECV_RINGS][PNIC_DATA_SIZE]; // Receive buffer + Bit16u recvRingLength[PNIC_RECV_RINGS]; + + Bit8u devfunc; + Bit8u pci_conf[256]; + +} bx_pnic_t; + + +class bx_pcipnic_c : public bx_ne2k_stub_c, bx_pci_device_stub_c { +public: + bx_pcipnic_c(); + virtual ~bx_pcipnic_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual void register_state(void); + virtual void after_restore_state(void); + + virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len); + virtual void pci_write_handler(Bit8u address, Bit32u value, unsigned io_len); + +private: + bx_pnic_t s; + + static void set_irq_level(bx_bool level); + + static void pnic_timer_handler(void *); + void pnic_timer(void); + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_PCIPNIC_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif + + eth_pktmover_c *ethdev; + static void exec_command(void); + static void rx_handler(void *arg, const void *buf, unsigned len); + BX_PNIC_SMF void rx_frame(const void *buf, unsigned io_len); +}; + +#endif diff --git a/bochs/iodev/pcivga.cc b/bochs/iodev/pcivga.cc new file mode 100644 index 00000000..1faf3bb9 --- /dev/null +++ b/bochs/iodev/pcivga.cc @@ -0,0 +1,195 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002,2003 Mike Nordell +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// +// Experimental PCI VGA adapter +// + +// Note: This "driver" was created for the SOLE PURPOSE of getting BeOS +// to boot. It currently does NOTHING more than presenting a generic VGA +// device on the PCI bus. ALL gfx in/out-put is still handled by the VGA code. +// Furthermore, almost all of the PCI registers are currently acting like RAM. + + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_PCI && BX_SUPPORT_PCIVGA + +#include "pci.h" +#include "pcivga.h" + +#define LOG_THIS thePciVgaAdapter-> + +bx_pcivga_c* thePciVgaAdapter = 0; + +int libpcivga_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + thePciVgaAdapter = new bx_pcivga_c(); + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, thePciVgaAdapter, BX_PLUGIN_PCIVGA); + return 0; // Success +} + +void libpcivga_LTX_plugin_fini(void) +{ + delete thePciVgaAdapter; +} + +bx_pcivga_c::bx_pcivga_c() +{ + put("PCIVGA"); +} + +bx_pcivga_c::~bx_pcivga_c() +{ + BX_DEBUG(("Exit")); +} + +void bx_pcivga_c::init(void) +{ + // called once when bochs initializes + + Bit8u devfunc = 0x00; + unsigned i; + + DEV_register_pci_handlers(this, &devfunc, BX_PLUGIN_PCIVGA, + "Experimental PCI VGA"); + + for (i=0; i<256; i++) { + BX_PCIVGA_THIS s.pci_conf[i] = 0x0; + } + + // readonly registers + static const struct init_vals_t { + unsigned addr; + unsigned char val; + } init_vals[] = { + // Note that the values for vendor and device id are selected at random! + // There might actually be "real" values for "experimental" vendor and + // device that should be used! + { 0x00, 0x34 }, { 0x01, 0x12 }, // 0x1234 - experimental vendor + { 0x02, 0x11 }, { 0x03, 0x11 }, // 0x1111 - experimental device + { 0x0a, 0x00 }, // class_sub VGA controller + { 0x0b, 0x03 }, // class_base display + { 0x0e, 0x00 } // header_type_generic + }; + for (i = 0; i < sizeof(init_vals) / sizeof(*init_vals); ++i) { + BX_PCIVGA_THIS s.pci_conf[init_vals[i].addr] = init_vals[i].val; + } + WriteHostDWordToLittleEndian(&BX_PCIVGA_THIS s.pci_conf[0x10], 0x08); + BX_PCIVGA_THIS s.base_address = 0; +} + +void bx_pcivga_c::reset(unsigned type) +{ + static const struct reset_vals_t { + unsigned addr; + unsigned char val; + } reset_vals[] = { + { 0x04, 0x03 }, { 0x05, 0x00 }, // command_io + command_mem + { 0x06, 0x00 }, { 0x07, 0x02 } // status_devsel_medium + }; + for (unsigned i = 0; i < sizeof(reset_vals) / sizeof(*reset_vals); ++i) { + BX_PCIVGA_THIS s.pci_conf[reset_vals[i].addr] = reset_vals[i].val; + } +} + +void bx_pcivga_c::register_state(void) +{ + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "pcivga", "PCI VGA Adapter State", 1); + register_pci_state(list, BX_PCIVGA_THIS s.pci_conf); +} + +void bx_pcivga_c::after_restore_state(void) +{ + if (DEV_vbe_set_base_addr(&BX_PCIVGA_THIS s.base_address, + &BX_PCIVGA_THIS s.pci_conf[0x10])) { + BX_INFO(("new base address: 0x%08x", BX_PCIVGA_THIS s.base_address)); + } +} + +// pci configuration space read callback handler +Bit32u bx_pcivga_c::pci_read_handler(Bit8u address, unsigned io_len) +{ + Bit32u value = 0; + + for (unsigned i=0; i= 0x14) && (address < 0x34)) + return; + + for (i = 0; i < io_len; i++) { + write_addr = address + i; + old_value = BX_PCIVGA_THIS s.pci_conf[write_addr]; + new_value = (Bit8u)(value & 0xff); + switch (write_addr) { + case 0x04: // disallowing write to command + case 0x06: // disallowing write to status lo-byte (is that expected?) + break; + case 0x10: // base address #0 + new_value = (new_value & 0xf0) | (old_value & 0x0f); + case 0x11: case 0x12: case 0x13: + baseaddr_change |= (old_value != new_value); + default: + BX_PCIVGA_THIS s.pci_conf[write_addr] = new_value; + } + value >>= 8; + } + if (baseaddr_change) { + if (DEV_vbe_set_base_addr(&BX_PCIVGA_THIS s.base_address, + &BX_PCIVGA_THIS s.pci_conf[0x10])) { + BX_INFO(("new base address: 0x%08x", BX_PCIVGA_THIS s.base_address)); + } + } + + if (io_len == 1) + BX_DEBUG(("write PCI register 0x%02x value 0x%02x", address, value)); + else if (io_len == 2) + BX_DEBUG(("write PCI register 0x%02x value 0x%04x", address, value)); + else if (io_len == 4) + BX_DEBUG(("write PCI register 0x%02x value 0x%08x", address, value)); +} + +#endif // BX_SUPPORT_PCI && BX_SUPPORT_PCIVGA diff --git a/bochs/iodev/pcivga.h b/bochs/iodev/pcivga.h new file mode 100644 index 00000000..36799ff9 --- /dev/null +++ b/bochs/iodev/pcivga.h @@ -0,0 +1,49 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002,2003 Mike Nordell +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_IODEV_PCIVGA_H +#define BX_IODEV_PCIVGA_H + +#if BX_USE_PCIVGA_SMF +# define BX_PCIVGA_THIS thePciVgaAdapter-> +#else +# define BX_PCIVGA_THIS this-> +#endif + +class bx_pcivga_c : public bx_devmodel_c, public bx_pci_device_stub_c { +public: + bx_pcivga_c(); + virtual ~bx_pcivga_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual void register_state(void); + virtual void after_restore_state(void); + + virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len); + virtual void pci_write_handler(Bit8u address, Bit32u value, unsigned io_len); + +private: + struct { + Bit32u base_address; + Bit8u pci_conf[256]; + } s; +}; + +#endif diff --git a/bochs/iodev/pic.cc b/bochs/iodev/pic.cc new file mode 100644 index 00000000..f726343b --- /dev/null +++ b/bochs/iodev/pic.cc @@ -0,0 +1,889 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "pic.h" + +#define LOG_THIS thePic-> + +bx_pic_c *thePic = NULL; + +int libpic_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + thePic = new bx_pic_c(); + bx_devices.pluginPicDevice = thePic; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, thePic, BX_PLUGIN_PIC); + return(0); // Success +} + +void libpic_LTX_plugin_fini(void) +{ + delete thePic; +} + +bx_pic_c::bx_pic_c(void) +{ + put("PIC"); +} + +bx_pic_c::~bx_pic_c(void) +{ + BX_DEBUG(("Exit")); +} + +void bx_pic_c::init(void) +{ + /* 8259 PIC (Programmable Interrupt Controller) */ + DEV_register_ioread_handler(this, read_handler, 0x0020, "8259 PIC", 1); + DEV_register_ioread_handler(this, read_handler, 0x0021, "8259 PIC", 1); + DEV_register_ioread_handler(this, read_handler, 0x00A0, "8259 PIC", 1); + DEV_register_ioread_handler(this, read_handler, 0x00A1, "8259 PIC", 1); + + DEV_register_iowrite_handler(this, write_handler, 0x0020, "8259 PIC", 1); + DEV_register_iowrite_handler(this, write_handler, 0x0021, "8259 PIC", 1); + DEV_register_iowrite_handler(this, write_handler, 0x00A0, "8259 PIC", 1); + DEV_register_iowrite_handler(this, write_handler, 0x00A1, "8259 PIC", 1); + + + BX_PIC_THIS s.master_pic.single_PIC = 0; + BX_PIC_THIS s.master_pic.interrupt_offset = 0x08; /* IRQ0 = INT 0x08 */ + /* slave PIC connected to IRQ2 of master */ + BX_PIC_THIS s.master_pic.u.slave_connect_mask = 0x04; + BX_PIC_THIS s.master_pic.sfnm = 0; /* normal nested mode */ + BX_PIC_THIS s.master_pic.buffered_mode = 0; /* unbuffered mode */ + BX_PIC_THIS s.master_pic.master_slave = 1; /* master PIC */ + BX_PIC_THIS s.master_pic.auto_eoi = 0; /* manual EOI from CPU */ + BX_PIC_THIS s.master_pic.imr = 0xFF; /* all IRQ's initially masked */ + BX_PIC_THIS s.master_pic.isr = 0x00; /* no IRQ's in service */ + BX_PIC_THIS s.master_pic.irr = 0x00; /* no IRQ's requested */ + BX_PIC_THIS s.master_pic.read_reg_select = 0; /* IRR */ + BX_PIC_THIS s.master_pic.irq = 0; + BX_PIC_THIS s.master_pic.INT = 0; + BX_PIC_THIS s.master_pic.init.in_init = 0; + BX_PIC_THIS s.master_pic.init.requires_4 = 0; + BX_PIC_THIS s.master_pic.init.byte_expected = 0; + BX_PIC_THIS s.master_pic.special_mask = 0; + BX_PIC_THIS s.master_pic.lowest_priority = 7; + BX_PIC_THIS s.master_pic.polled = 0; + BX_PIC_THIS s.master_pic.rotate_on_autoeoi = 0; + BX_PIC_THIS s.master_pic.edge_level = 0; + BX_PIC_THIS s.master_pic.IRQ_in = 0; + + BX_PIC_THIS s.slave_pic.single_PIC = 0; + BX_PIC_THIS s.slave_pic.interrupt_offset = 0x70; /* IRQ8 = INT 0x70 */ + BX_PIC_THIS s.slave_pic.u.slave_id = 0x02; /* slave PIC connected to IRQ2 of master */ + BX_PIC_THIS s.slave_pic.sfnm = 0; /* normal nested mode */ + BX_PIC_THIS s.slave_pic.buffered_mode = 0; /* unbuffered mode */ + BX_PIC_THIS s.slave_pic.master_slave = 0; /* slave PIC */ + BX_PIC_THIS s.slave_pic.auto_eoi = 0; /* manual EOI from CPU */ + BX_PIC_THIS s.slave_pic.imr = 0xFF; /* all IRQ's initially masked */ + BX_PIC_THIS s.slave_pic.isr = 0x00; /* no IRQ's in service */ + BX_PIC_THIS s.slave_pic.irr = 0x00; /* no IRQ's requested */ + BX_PIC_THIS s.slave_pic.read_reg_select = 0; /* IRR */ + BX_PIC_THIS s.slave_pic.irq = 0; + BX_PIC_THIS s.slave_pic.INT = 0; + BX_PIC_THIS s.slave_pic.init.in_init = 0; + BX_PIC_THIS s.slave_pic.init.requires_4 = 0; + BX_PIC_THIS s.slave_pic.init.byte_expected = 0; + BX_PIC_THIS s.slave_pic.special_mask = 0; + BX_PIC_THIS s.slave_pic.lowest_priority = 7; + BX_PIC_THIS s.slave_pic.polled = 0; + BX_PIC_THIS s.slave_pic.rotate_on_autoeoi = 0; + BX_PIC_THIS s.slave_pic.edge_level = 0; + BX_PIC_THIS s.slave_pic.IRQ_in = 0; +} + +void bx_pic_c::reset(unsigned type) {} + +void bx_pic_c::register_state(void) +{ + bx_list_c *ctrl; + + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "pic", "PIC State", 2); + ctrl = new bx_list_c(list, "master", 17); + new bx_shadow_num_c(ctrl, "interrupt_offset", &BX_PIC_THIS s.master_pic.interrupt_offset, BASE_HEX); + new bx_shadow_num_c(ctrl, "auto_eoi", &BX_PIC_THIS s.master_pic.auto_eoi, BASE_HEX); + new bx_shadow_num_c(ctrl, "imr", &BX_PIC_THIS s.master_pic.imr, BASE_HEX); + new bx_shadow_num_c(ctrl, "isr", &BX_PIC_THIS s.master_pic.isr, BASE_HEX); + new bx_shadow_num_c(ctrl, "irr", &BX_PIC_THIS s.master_pic.irr, BASE_HEX); + new bx_shadow_num_c(ctrl, "read_reg_select", &BX_PIC_THIS s.master_pic.read_reg_select); + new bx_shadow_num_c(ctrl, "irq", &BX_PIC_THIS s.master_pic.irq, BASE_HEX); + new bx_shadow_num_c(ctrl, "lowest_priority", &BX_PIC_THIS s.master_pic.lowest_priority, BASE_HEX); + new bx_shadow_bool_c(ctrl, "INT", &BX_PIC_THIS s.master_pic.INT); + new bx_shadow_num_c(ctrl, "IRQ_in", &BX_PIC_THIS s.master_pic.IRQ_in, BASE_HEX); + new bx_shadow_bool_c(ctrl, "in_init", &BX_PIC_THIS s.master_pic.init.in_init); + new bx_shadow_bool_c(ctrl, "requires_4", &BX_PIC_THIS s.master_pic.init.requires_4); + new bx_shadow_num_c(ctrl, "byte_expected", &BX_PIC_THIS s.master_pic.init.byte_expected); + new bx_shadow_bool_c(ctrl, "special_mask", &BX_PIC_THIS s.master_pic.special_mask); + new bx_shadow_bool_c(ctrl, "polled", &BX_PIC_THIS s.master_pic.polled); + new bx_shadow_bool_c(ctrl, "rotate_on_autoeoi", &BX_PIC_THIS s.master_pic.rotate_on_autoeoi); + new bx_shadow_num_c(ctrl, "edge_level", &BX_PIC_THIS s.master_pic.edge_level, BASE_HEX); + ctrl = new bx_list_c(list, "slave", 17); + new bx_shadow_num_c(ctrl, "interrupt_offset", &BX_PIC_THIS s.slave_pic.interrupt_offset, BASE_HEX); + new bx_shadow_num_c(ctrl, "auto_eoi", &BX_PIC_THIS s.slave_pic.auto_eoi, BASE_HEX); + new bx_shadow_num_c(ctrl, "imr", &BX_PIC_THIS s.slave_pic.imr, BASE_HEX); + new bx_shadow_num_c(ctrl, "isr", &BX_PIC_THIS s.slave_pic.isr, BASE_HEX); + new bx_shadow_num_c(ctrl, "irr", &BX_PIC_THIS s.slave_pic.irr, BASE_HEX); + new bx_shadow_num_c(ctrl, "read_reg_select", &BX_PIC_THIS s.slave_pic.read_reg_select); + new bx_shadow_num_c(ctrl, "irq", &BX_PIC_THIS s.slave_pic.irq, BASE_HEX); + new bx_shadow_num_c(ctrl, "lowest_priority", &BX_PIC_THIS s.slave_pic.lowest_priority, BASE_HEX); + new bx_shadow_bool_c(ctrl, "INT", &BX_PIC_THIS s.slave_pic.INT); + new bx_shadow_num_c(ctrl, "IRQ_in", &BX_PIC_THIS s.slave_pic.IRQ_in, BASE_HEX); + new bx_shadow_bool_c(ctrl, "in_init", &BX_PIC_THIS s.slave_pic.init.in_init); + new bx_shadow_bool_c(ctrl, "requires_4", &BX_PIC_THIS s.slave_pic.init.requires_4); + new bx_shadow_num_c(ctrl, "byte_expected", &BX_PIC_THIS s.slave_pic.init.byte_expected); + new bx_shadow_bool_c(ctrl, "special_mask", &BX_PIC_THIS s.slave_pic.special_mask); + new bx_shadow_bool_c(ctrl, "polled", &BX_PIC_THIS s.slave_pic.polled); + new bx_shadow_bool_c(ctrl, "rotate_on_autoeoi", &BX_PIC_THIS s.slave_pic.rotate_on_autoeoi); + new bx_shadow_num_c(ctrl, "edge_level", &BX_PIC_THIS s.slave_pic.edge_level, BASE_HEX); +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions +Bit32u bx_pic_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_PIC_SMF + bx_pic_c *class_ptr = (bx_pic_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_pic_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PIC_SMF + + BX_DEBUG(("IO read from %04x", (unsigned) address)); + + /* + 8259A PIC + */ + + if((address == 0x20 || address == 0x21) && BX_PIC_THIS s.master_pic.polled) { + // In polled mode. Treat this as an interrupt acknowledge + clear_highest_interrupt(& BX_PIC_THIS s.master_pic); + BX_PIC_THIS s.master_pic.polled = 0; + service_master_pic(); + return io_len==1?BX_PIC_THIS s.master_pic.irq:(BX_PIC_THIS s.master_pic.irq)<<8|(BX_PIC_THIS s.master_pic.irq); // Return the current irq requested + } + + if((address == 0xa0 || address == 0xa1) && BX_PIC_THIS s.slave_pic.polled) { + // In polled mode. Treat this as an interrupt acknowledge + clear_highest_interrupt(& BX_PIC_THIS s.slave_pic); + BX_PIC_THIS s.slave_pic.polled = 0; + service_slave_pic(); + return io_len==1?BX_PIC_THIS s.slave_pic.irq:(BX_PIC_THIS s.slave_pic.irq)<<8|(BX_PIC_THIS s.slave_pic.irq); // Return the current irq requested + } + + switch (address) { + case 0x20: + if (BX_PIC_THIS s.master_pic.read_reg_select) { /* ISR */ + BX_DEBUG(("read master ISR = %02x", + (unsigned) BX_PIC_THIS s.master_pic.isr)); + return(BX_PIC_THIS s.master_pic.isr); + } + else { /* IRR */ + BX_DEBUG(("read master IRR = %02x", + (unsigned) BX_PIC_THIS s.master_pic.irr)); + return(BX_PIC_THIS s.master_pic.irr); + } + break; + case 0x21: + BX_DEBUG(("read master IMR = %02x", + (unsigned) BX_PIC_THIS s.master_pic.imr)); + return(BX_PIC_THIS s.master_pic.imr); + case 0xA0: + if (BX_PIC_THIS s.slave_pic.read_reg_select) { /* ISR */ + BX_DEBUG(("read slave ISR = %02x", + (unsigned) BX_PIC_THIS s.slave_pic.isr)); + return(BX_PIC_THIS s.slave_pic.isr); + } + else { /* IRR */ + BX_DEBUG(("read slave IRR = %02x", + (unsigned) BX_PIC_THIS s.slave_pic.irr)); + return(BX_PIC_THIS s.slave_pic.irr); + } + break; + case 0xA1: + BX_DEBUG(("read slave IMR = %02x", + (unsigned) BX_PIC_THIS s.slave_pic.imr)); + return(BX_PIC_THIS s.slave_pic.imr); + } + + BX_PANIC(("io read to address %04x", (unsigned) address)); + return(0); /* default if not found above */ +} + + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_pic_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_PIC_SMF + bx_pic_c *class_ptr = (bx_pic_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_pic_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PIC_SMF + + BX_DEBUG(("IO write to %04x = %02x", (unsigned) address, (unsigned) value)); + + /* + 8259A PIC + */ + + switch (address) { + case 0x20: + if (value & 0x10) { /* initialization command 1 */ + BX_DEBUG(("master: init command 1 found")); + BX_DEBUG((" requires 4 = %u", (unsigned) (value & 0x01))); + BX_DEBUG((" cascade mode: [0=cascade,1=single] %u", + (unsigned) ((value & 0x02) >> 1))); + BX_PIC_THIS s.master_pic.init.in_init = 1; + BX_PIC_THIS s.master_pic.init.requires_4 = (value & 0x01); + BX_PIC_THIS s.master_pic.init.byte_expected = 2; /* operation command 2 */ + BX_PIC_THIS s.master_pic.imr = 0x00; /* clear the irq mask register */ + BX_PIC_THIS s.master_pic.isr = 0x00; /* no IRQ's in service */ + BX_PIC_THIS s.master_pic.irr = 0x00; /* no IRQ's requested */ + BX_PIC_THIS s.master_pic.lowest_priority = 7; + BX_PIC_THIS s.master_pic.INT = 0; /* reprogramming clears previous INTR request */ + BX_PIC_THIS s.master_pic.auto_eoi = 0; + BX_PIC_THIS s.master_pic.rotate_on_autoeoi = 0; + if (value & 0x02) + BX_PANIC(("master: ICW1: single mode not supported")); + if (value & 0x08) { + BX_PANIC(("master: ICW1: level sensitive mode not supported")); + } + else { + BX_DEBUG(("master: ICW1: edge triggered mode selected")); + } + BX_SET_INTR(0); + return; + } + + if ((value & 0x18) == 0x08) { /* OCW3 */ + Bit8u special_mask, poll, read_op; + + special_mask = (value & 0x60) >> 5; + poll = (value & 0x04) >> 2; + read_op = (value & 0x03); + if (poll) { + BX_PIC_THIS s.master_pic.polled = 1; + return; + } + if (read_op == 0x02) /* read IRR */ + BX_PIC_THIS s.master_pic.read_reg_select = 0; + else if (read_op == 0x03) /* read ISR */ + BX_PIC_THIS s.master_pic.read_reg_select = 1; + if (special_mask == 0x02) { /* cancel special mask */ + BX_PIC_THIS s.master_pic.special_mask = 0; + } + else if (special_mask == 0x03) { /* set specific mask */ + BX_PIC_THIS s.master_pic.special_mask = 1; + service_master_pic(); + } + return; + } + + /* OCW2 */ + switch (value) { + case 0x00: // Rotate in auto eoi mode clear + case 0x80: // Rotate in auto eoi mode set + BX_PIC_THIS s.master_pic.rotate_on_autoeoi = (value != 0); + break; + case 0x0A: /* select read interrupt request register */ + BX_PIC_THIS s.master_pic.read_reg_select = 0; + break; + case 0x0B: /* select read interrupt in-service register */ + BX_PIC_THIS s.master_pic.read_reg_select = 1; + break; + + case 0xA0: // Rotate on non-specific end of interrupt + case 0x20: /* end of interrupt command */ + clear_highest_interrupt(& BX_PIC_THIS s.master_pic); + + if(value == 0xA0) {// Rotate in Auto-EOI mode + BX_PIC_THIS s.master_pic.lowest_priority ++; + if(BX_PIC_THIS s.master_pic.lowest_priority > 7) + BX_PIC_THIS s.master_pic.lowest_priority = 0; + } + + service_master_pic(); + break; + + case 0x40: // Intel PIC spec-sheet seems to indicate this should be ignored + BX_INFO(("IRQ no-op")); + break; + + case 0x60: /* specific EOI 0 */ + case 0x61: /* specific EOI 1 */ + case 0x62: /* specific EOI 2 */ + case 0x63: /* specific EOI 3 */ + case 0x64: /* specific EOI 4 */ + case 0x65: /* specific EOI 5 */ + case 0x66: /* specific EOI 6 */ + case 0x67: /* specific EOI 7 */ + BX_PIC_THIS s.master_pic.isr &= ~(1 << (value-0x60)); + service_master_pic(); + break; + + // IRQ lowest priority commands + case 0xC0: // 0 7 6 5 4 3 2 1 + case 0xC1: // 1 0 7 6 5 4 3 2 + case 0xC2: // 2 1 0 7 6 5 4 3 + case 0xC3: // 3 2 1 0 7 6 5 4 + case 0xC4: // 4 3 2 1 0 7 6 5 + case 0xC5: // 5 4 3 2 1 0 7 6 + case 0xC6: // 6 5 4 3 2 1 0 7 + case 0xC7: // 7 6 5 4 3 2 1 0 + BX_INFO(("IRQ lowest command 0x%x", value)); + BX_PIC_THIS s.master_pic.lowest_priority = value - 0xC0; + break; + + case 0xE0: // specific EOI and rotate 0 + case 0xE1: // specific EOI and rotate 1 + case 0xE2: // specific EOI and rotate 2 + case 0xE3: // specific EOI and rotate 3 + case 0xE4: // specific EOI and rotate 4 + case 0xE5: // specific EOI and rotate 5 + case 0xE6: // specific EOI and rotate 6 + case 0xE7: // specific EOI and rotate 7 + BX_PIC_THIS s.master_pic.isr &= ~(1 << (value-0xE0)); + BX_PIC_THIS s.master_pic.lowest_priority = (value - 0xE0); + service_master_pic(); + break; + + case 0x02: // single mode bit: 1 = single, 0 = cascade + // ignore. 386BSD writes this value but works with it ignored. + break; + + default: + BX_PANIC(("write to port 20h = %02x", value)); + } /* switch (value) */ + break; + + case 0x21: + /* initialization mode operation */ + if (BX_PIC_THIS s.master_pic.init.in_init) { + switch (BX_PIC_THIS s.master_pic.init.byte_expected) { + case 2: + BX_PIC_THIS s.master_pic.interrupt_offset = value & 0xf8; + BX_PIC_THIS s.master_pic.init.byte_expected = 3; + BX_DEBUG(("master: init command 2 = %02x", (unsigned) value)); + BX_DEBUG((" offset = INT %02x", + BX_PIC_THIS s.master_pic.interrupt_offset)); + return; + break; + case 3: + BX_DEBUG(("master: init command 3 = %02x", (unsigned) value)); + if (BX_PIC_THIS s.master_pic.init.requires_4) { + BX_PIC_THIS s.master_pic.init.byte_expected = 4; + } + else { + BX_PIC_THIS s.master_pic.init.in_init = 0; + } + return; + break; + case 4: + BX_DEBUG(("master: init command 4 = %02x", (unsigned) value)); + if (value & 0x02) { + BX_DEBUG((" auto EOI")); + BX_PIC_THIS s.master_pic.auto_eoi = 1; + } + else { + BX_DEBUG(("normal EOI interrupt")); + BX_PIC_THIS s.master_pic.auto_eoi = 0; + } + if (value & 0x01) { + BX_DEBUG((" 80x86 mode")); + } else + BX_PANIC((" not 80x86 mode")); + BX_PIC_THIS s.master_pic.init.in_init = 0; + return; + default: + BX_PANIC(("master expecting bad init command")); + } + } + + /* normal operation */ + BX_DEBUG(("setting master pic IMR to %02x", value)); + BX_PIC_THIS s.master_pic.imr = value; + service_master_pic(); + return; + + case 0xA0: + if (value & 0x10) { /* initialization command 1 */ + BX_DEBUG(("slave: init command 1 found")); + BX_DEBUG((" requires 4 = %u", + (unsigned) (value & 0x01))); + BX_DEBUG((" cascade mode: [0=cascade,1=single] %u", + (unsigned) ((value & 0x02) >> 1))); + BX_PIC_THIS s.slave_pic.init.in_init = 1; + BX_PIC_THIS s.slave_pic.init.requires_4 = (value & 0x01); + BX_PIC_THIS s.slave_pic.init.byte_expected = 2; /* operation command 2 */ + BX_PIC_THIS s.slave_pic.imr = 0x00; /* clear irq mask */ + BX_PIC_THIS s.slave_pic.isr = 0x00; /* no IRQ's in service */ + BX_PIC_THIS s.slave_pic.irr = 0x00; /* no IRQ's requested */ + BX_PIC_THIS s.slave_pic.lowest_priority = 7; + BX_PIC_THIS s.slave_pic.INT = 0; /* reprogramming clears previous INTR request */ + BX_PIC_THIS s.master_pic.IRQ_in &= ~(1 << 2); + BX_PIC_THIS s.slave_pic.auto_eoi = 0; + BX_PIC_THIS s.slave_pic.rotate_on_autoeoi = 0; + if (value & 0x02) + BX_PANIC(("slave: ICW1: single mode not supported")); + if (value & 0x08) { + BX_PANIC(("slave: ICW1: level sensitive mode not supported")); + } + else { + BX_DEBUG(("slave: ICW1: edge triggered mode selected")); + } + return; + } + + if ((value & 0x18) == 0x08) { /* OCW3 */ + Bit8u special_mask, poll, read_op; + + special_mask = (value & 0x60) >> 5; + poll = (value & 0x04) >> 2; + read_op = (value & 0x03); + if (poll) { + BX_PIC_THIS s.slave_pic.polled = 1; + return; + } + if (read_op == 0x02) /* read IRR */ + BX_PIC_THIS s.slave_pic.read_reg_select = 0; + else if (read_op == 0x03) /* read ISR */ + BX_PIC_THIS s.slave_pic.read_reg_select = 1; + if (special_mask == 0x02) { /* cancel special mask */ + BX_PIC_THIS s.slave_pic.special_mask = 0; + } + else if (special_mask == 0x03) { /* set specific mask */ + BX_PIC_THIS s.slave_pic.special_mask = 1; + service_slave_pic(); + } + return; + } + + switch (value) { + case 0x00: // Rotate in auto eoi mode clear + case 0x80: // Rotate in auto eoi mode set + BX_PIC_THIS s.slave_pic.rotate_on_autoeoi = (value != 0); + break; + + case 0x0A: /* select read interrupt request register */ + BX_PIC_THIS s.slave_pic.read_reg_select = 0; + break; + case 0x0B: /* select read interrupt in-service register */ + BX_PIC_THIS s.slave_pic.read_reg_select = 1; + break; + + case 0xA0: // Rotate on non-specific end of interrupt + case 0x20: /* end of interrupt command */ + clear_highest_interrupt(& BX_PIC_THIS s.slave_pic); + + if(value == 0xA0) {// Rotate in Auto-EOI mode + BX_PIC_THIS s.slave_pic.lowest_priority ++; + if(BX_PIC_THIS s.slave_pic.lowest_priority > 7) + BX_PIC_THIS s.slave_pic.lowest_priority = 0; + } + + service_slave_pic(); + break; + + case 0x40: // Intel PIC spec-sheet seems to indicate this should be ignored + BX_INFO(("IRQ no-op")); + break; + + case 0x60: /* specific EOI 0 */ + case 0x61: /* specific EOI 1 */ + case 0x62: /* specific EOI 2 */ + case 0x63: /* specific EOI 3 */ + case 0x64: /* specific EOI 4 */ + case 0x65: /* specific EOI 5 */ + case 0x66: /* specific EOI 6 */ + case 0x67: /* specific EOI 7 */ + BX_PIC_THIS s.slave_pic.isr &= ~(1 << (value-0x60)); + service_slave_pic(); + break; + + // IRQ lowest priority commands + case 0xC0: // 0 7 6 5 4 3 2 1 + case 0xC1: // 1 0 7 6 5 4 3 2 + case 0xC2: // 2 1 0 7 6 5 4 3 + case 0xC3: // 3 2 1 0 7 6 5 4 + case 0xC4: // 4 3 2 1 0 7 6 5 + case 0xC5: // 5 4 3 2 1 0 7 6 + case 0xC6: // 6 5 4 3 2 1 0 7 + case 0xC7: // 7 6 5 4 3 2 1 0 + BX_INFO(("IRQ lowest command 0x%x", value)); + BX_PIC_THIS s.slave_pic.lowest_priority = value - 0xC0; + break; + + case 0xE0: // specific EOI and rotate 0 + case 0xE1: // specific EOI and rotate 1 + case 0xE2: // specific EOI and rotate 2 + case 0xE3: // specific EOI and rotate 3 + case 0xE4: // specific EOI and rotate 4 + case 0xE5: // specific EOI and rotate 5 + case 0xE6: // specific EOI and rotate 6 + case 0xE7: // specific EOI and rotate 7 + BX_PIC_THIS s.slave_pic.isr &= ~(1 << (value-0xE0)); + BX_PIC_THIS s.slave_pic.lowest_priority = (value - 0xE0); + service_slave_pic(); + break; + + case 0x02: // single mode bit: 1 = single, 0 = cascade + // ignore. 386BSD writes this value but works with it ignored. + break; + + default: + BX_PANIC(("write to port A0h = %02x", value)); + } /* switch (value) */ + break; + + case 0xA1: + /* initialization mode operation */ + if (BX_PIC_THIS s.slave_pic.init.in_init) { + switch (BX_PIC_THIS s.slave_pic.init.byte_expected) { + case 2: + BX_PIC_THIS s.slave_pic.interrupt_offset = value & 0xf8; + BX_PIC_THIS s.slave_pic.init.byte_expected = 3; + BX_DEBUG(("slave: init command 2 = %02x", (unsigned) value)); + BX_DEBUG((" offset = INT %02x", + BX_PIC_THIS s.slave_pic.interrupt_offset)); + return; + case 3: + BX_DEBUG(("slave: init command 3 = %02x", (unsigned) value)); + if (BX_PIC_THIS s.slave_pic.init.requires_4) { + BX_PIC_THIS s.slave_pic.init.byte_expected = 4; + } else { + BX_PIC_THIS s.slave_pic.init.in_init = 0; + } + return; + case 4: + BX_DEBUG(("slave: init command 4 = %02x", (unsigned) value)); + if (value & 0x02) { + BX_DEBUG((" auto EOI")); + BX_PIC_THIS s.slave_pic.auto_eoi = 1; + } + else { + BX_DEBUG(("normal EOI interrupt")); + BX_PIC_THIS s.slave_pic.auto_eoi = 0; + } + if (value & 0x01) { + BX_DEBUG((" 80x86 mode")); + } else + BX_PANIC((" not 80x86 mode")); + BX_PIC_THIS s.slave_pic.init.in_init = 0; + return; + default: + BX_PANIC(("slave: expecting bad init command")); + } + } + + /* normal operation */ + BX_DEBUG(("setting slave pic IMR to %02x", value)); + BX_PIC_THIS s.slave_pic.imr = value; + service_slave_pic(); + return; + } /* switch (address) */ +} + +// new IRQ signal handling routines + +void bx_pic_c::lower_irq(unsigned irq_no) +{ +#if BX_SUPPORT_APIC + // forward this function call to the ioapic too + if (DEV_ioapic_present() && (irq_no != 2)) { + DEV_ioapic_set_irq_level(irq_no, 0); + } +#endif + + Bit8u mask = (1 << (irq_no & 7)); + if ((irq_no <= 7) && (BX_PIC_THIS s.master_pic.IRQ_in & mask)) { + BX_DEBUG(("IRQ line %d now low", (unsigned) irq_no)); + BX_PIC_THIS s.master_pic.IRQ_in &= ~(mask); + BX_PIC_THIS s.master_pic.irr &= ~(mask); + } else if ((irq_no > 7) && (irq_no <= 15) && + (BX_PIC_THIS s.slave_pic.IRQ_in & mask)) { + BX_DEBUG(("IRQ line %d now low", (unsigned) irq_no)); + BX_PIC_THIS s.slave_pic.IRQ_in &= ~(mask); + BX_PIC_THIS s.slave_pic.irr &= ~(mask); + } +} + +void bx_pic_c::raise_irq(unsigned irq_no) +{ +#if BX_SUPPORT_APIC + // forward this function call to the ioapic too + if (DEV_ioapic_present() && (irq_no != 2)) { + DEV_ioapic_set_irq_level(irq_no, 1); + } +#endif + + Bit8u mask = (1 << (irq_no & 7)); + if ((irq_no <= 7) && !(BX_PIC_THIS s.master_pic.IRQ_in & mask)) { + BX_DEBUG(("IRQ line %d now high", (unsigned) irq_no)); + BX_PIC_THIS s.master_pic.IRQ_in |= mask; + BX_PIC_THIS s.master_pic.irr |= mask; + service_master_pic(); + } else if ((irq_no > 7) && (irq_no <= 15) && + !(BX_PIC_THIS s.slave_pic.IRQ_in & mask)) { + BX_DEBUG(("IRQ line %d now high", (unsigned) irq_no)); + BX_PIC_THIS s.slave_pic.IRQ_in |= mask; + BX_PIC_THIS s.slave_pic.irr |= mask; + service_slave_pic(); + } +} + +void bx_pic_c::set_mode(bx_bool ma_sl, Bit8u mode) +{ + if (ma_sl) { + BX_PIC_THIS s.master_pic.edge_level = mode; + } else { + BX_PIC_THIS s.slave_pic.edge_level = mode; + } +} + +void bx_pic_c::clear_highest_interrupt(bx_pic_t *pic) +{ + int irq; + int lowest_priority; + int highest_priority; + + /* clear highest current in service bit */ + lowest_priority = pic->lowest_priority; + highest_priority = lowest_priority + 1; + if(highest_priority > 7) + highest_priority = 0; + + irq = highest_priority; + do { + if (pic->isr & (1 << irq)) { + pic->isr &= ~(1 << irq); + break; /* Return mask of bit cleared. */ + } + + irq ++; + if(irq > 7) + irq = 0; + } while(irq != highest_priority); +} + +void bx_pic_c::service_master_pic(void) +{ + Bit8u unmasked_requests; + int irq; + Bit8u isr, max_irq; + Bit8u highest_priority = BX_PIC_THIS s.master_pic.lowest_priority + 1; + if(highest_priority > 7) + highest_priority = 0; + + if (BX_PIC_THIS s.master_pic.INT) { /* last interrupt still not acknowleged */ + return; + } + + if (BX_PIC_THIS s.master_pic.special_mask) { + /* all priorities may be enabled. check all IRR bits except ones + * which have corresponding ISR bits set + */ + max_irq = highest_priority; + } + else { /* normal mode */ + /* Find the highest priority IRQ that is enabled due to current ISR */ + isr = BX_PIC_THIS s.master_pic.isr; + if (isr) { + max_irq = highest_priority; + while ((isr & (1 << max_irq)) == 0) { + max_irq++; + if(max_irq > 7) + max_irq = 0; + } + if (max_irq == highest_priority) return; /* Highest priority interrupt in-service, + * no other priorities allowed */ + if (max_irq > 7) BX_PANIC(("error in service_master_pic()")); + } + else + max_irq = highest_priority; /* 0..7 bits in ISR are cleared */ + } + + /* now, see if there are any higher priority requests */ + if ((unmasked_requests = (BX_PIC_THIS s.master_pic.irr & ~BX_PIC_THIS s.master_pic.imr))) { + irq = highest_priority; + do { + /* for special mode, since we're looking at all IRQ's, skip if + * current IRQ is already in-service + */ + if (! (BX_PIC_THIS s.master_pic.special_mask && ((BX_PIC_THIS s.master_pic.isr >> irq) & 0x01))) { + if (unmasked_requests & (1 << irq)) { + BX_DEBUG(("signalling IRQ(%u)", (unsigned) irq)); + BX_PIC_THIS s.master_pic.INT = 1; + BX_PIC_THIS s.master_pic.irq = irq; + BX_SET_INTR(1); + return; + } /* if (unmasked_requests & ... */ + } + + irq ++; + if(irq > 7) + irq = 0; + } while(irq != max_irq); /* do ... */ + } /* if (unmasked_requests = ... */ +} + +void bx_pic_c::service_slave_pic(void) +{ + Bit8u unmasked_requests; + int irq; + Bit8u isr, max_irq; + Bit8u highest_priority = BX_PIC_THIS s.slave_pic.lowest_priority + 1; + if(highest_priority > 7) + highest_priority = 0; + + if (BX_PIC_THIS s.slave_pic.INT) { /* last interrupt still not acknowleged */ + return; + } + + if (BX_PIC_THIS s.slave_pic.special_mask) { + /* all priorities may be enabled. check all IRR bits except ones + * which have corresponding ISR bits set + */ + max_irq = highest_priority; + } + else { /* normal mode */ + /* Find the highest priority IRQ that is enabled due to current ISR */ + isr = BX_PIC_THIS s.slave_pic.isr; + if (isr) { + max_irq = highest_priority; + while ((isr & (1 << max_irq)) == 0) { + max_irq++; + if(max_irq > 7) + max_irq = 0; + } + if (max_irq == highest_priority) return; /* Highest priority interrupt in-service, + * no other priorities allowed */ + if (max_irq > 7) BX_PANIC(("error in service_master_pic()")); + } + else + max_irq = highest_priority; /* 0..7 bits in ISR are cleared */ + } + + /* now, see if there are any higher priority requests */ + if ((unmasked_requests = (BX_PIC_THIS s.slave_pic.irr & ~BX_PIC_THIS s.slave_pic.imr))) { + irq = highest_priority; + do { + /* for special mode, since we're looking at all IRQ's, skip if + * current IRQ is already in-service + */ + if (! (BX_PIC_THIS s.slave_pic.special_mask && ((BX_PIC_THIS s.slave_pic.isr >> irq) & 0x01))) { + if (unmasked_requests & (1 << irq)) { + BX_DEBUG(("slave: signalling IRQ(%u)", (unsigned) 8 + irq)); + + BX_PIC_THIS s.slave_pic.INT = 1; + BX_PIC_THIS s.slave_pic.irq = irq; + BX_PIC_THIS raise_irq(2); /* request IRQ 2 on master pic */ + return; + } /* if (unmasked_requests & ... */ + } + + irq ++; + if(irq > 7) + irq = 0; + + } while(irq != max_irq); /* do ... */ + } /* if (unmasked_requests = ... */ +} + +/* CPU handshakes with PIC after acknowledging interrupt */ +Bit8u bx_pic_c::IAC(void) +{ + Bit8u vector; + Bit8u irq; + + BX_SET_INTR(0); + BX_PIC_THIS s.master_pic.INT = 0; + // Check for spurious interrupt + if (BX_PIC_THIS s.master_pic.irr == 0) { + return (BX_PIC_THIS s.master_pic.interrupt_offset + 7); + } + // In level sensitive mode don't clear the irr bit. + if (!(BX_PIC_THIS s.master_pic.edge_level & (1 << BX_PIC_THIS s.master_pic.irq))) + BX_PIC_THIS s.master_pic.irr &= ~(1 << BX_PIC_THIS s.master_pic.irq); + // In autoeoi mode don't set the isr bit. + if (!BX_PIC_THIS s.master_pic.auto_eoi) + BX_PIC_THIS s.master_pic.isr |= (1 << BX_PIC_THIS s.master_pic.irq); + else if (BX_PIC_THIS s.master_pic.rotate_on_autoeoi) + BX_PIC_THIS s.master_pic.lowest_priority = BX_PIC_THIS s.master_pic.irq; + + if (BX_PIC_THIS s.master_pic.irq != 2) { + irq = BX_PIC_THIS s.master_pic.irq; + vector = irq + BX_PIC_THIS s.master_pic.interrupt_offset; + } else { /* IRQ2 = slave pic IRQ8..15 */ + BX_PIC_THIS s.slave_pic.INT = 0; + BX_PIC_THIS s.master_pic.IRQ_in &= ~(1 << 2); + // Check for spurious interrupt + if (BX_PIC_THIS s.slave_pic.irr == 0) { + return (BX_PIC_THIS s.slave_pic.interrupt_offset + 7); + } + irq = BX_PIC_THIS s.slave_pic.irq; + vector = irq + BX_PIC_THIS s.slave_pic.interrupt_offset; + // In level sensitive mode don't clear the irr bit. + if (!(BX_PIC_THIS s.slave_pic.edge_level & (1 << BX_PIC_THIS s.slave_pic.irq))) + BX_PIC_THIS s.slave_pic.irr &= ~(1 << BX_PIC_THIS s.slave_pic.irq); + // In autoeoi mode don't set the isr bit. + if (!BX_PIC_THIS s.slave_pic.auto_eoi) + BX_PIC_THIS s.slave_pic.isr |= (1 << BX_PIC_THIS s.slave_pic.irq); + else if (BX_PIC_THIS s.slave_pic.rotate_on_autoeoi) + BX_PIC_THIS s.slave_pic.lowest_priority = BX_PIC_THIS s.slave_pic.irq; + service_slave_pic(); + irq += 8; // for debug printing purposes + } + + service_master_pic(); + + BX_DBG_IAC_REPORT(vector, irq); + return(vector); +} + +#if BX_DEBUGGER +void bx_pic_c::debug_dump(void) +{ + dbg_printf("s.master_pic.imr = %02x\n", BX_PIC_THIS s.master_pic.imr); + dbg_printf("s.master_pic.isr = %02x\n", BX_PIC_THIS s.master_pic.isr); + dbg_printf("s.master_pic.irr = %02x\n", BX_PIC_THIS s.master_pic.irr); + dbg_printf("s.master_pic.irq = %02x\n", BX_PIC_THIS s.master_pic.irq); + dbg_printf("s.slave_pic.imr = %02x\n", BX_PIC_THIS s.slave_pic.imr); + dbg_printf("s.slave_pic.isr = %02x\n", BX_PIC_THIS s.slave_pic.isr); + dbg_printf("s.slave_pic.irr = %02x\n", BX_PIC_THIS s.slave_pic.irr); + dbg_printf("s.slave_pic.irq = %02x\n", BX_PIC_THIS s.slave_pic.irq); +} +#endif diff --git a/bochs/iodev/pic.h b/bochs/iodev/pic.h new file mode 100644 index 00000000..b8130d3e --- /dev/null +++ b/bochs/iodev/pic.h @@ -0,0 +1,97 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_IODEV_PIC_H +#define BX_IODEV_PIC_H + +#if BX_USE_PIC_SMF +# define BX_PIC_SMF static +# define BX_PIC_THIS thePic-> +#else +# define BX_PIC_SMF +# define BX_PIC_THIS this-> +#endif + +typedef struct { + Bit8u single_PIC; /* 0=cascaded PIC, 1=master only */ + Bit8u interrupt_offset; /* programmable interrupt vector offset */ + union { + Bit8u slave_connect_mask; /* for master, a bit for each interrupt line + 0=not connect to a slave, 1=connected */ + Bit8u slave_id; /* for slave, id number of slave PIC */ + } u; + Bit8u sfnm; /* specially fully nested mode: 0=no, 1=yes*/ + Bit8u buffered_mode; /* 0=no buffered mode, 1=buffered mode */ + Bit8u master_slave; /* master/slave: 0=slave PIC, 1=master PIC */ + Bit8u auto_eoi; /* 0=manual EOI, 1=automatic EOI */ + Bit8u imr; /* interrupt mask register, 1=masked */ + Bit8u isr; /* in service register */ + Bit8u irr; /* interrupt request register */ + Bit8u read_reg_select; /* 0=IRR, 1=ISR */ + Bit8u irq; /* current IRQ number */ + Bit8u lowest_priority; /* current lowest priority irq */ + bx_bool INT; /* INT request pin of PIC */ + Bit8u IRQ_in; /* IRQ pins of PIC */ + struct { + bx_bool in_init; + bx_bool requires_4; + Bit8u byte_expected; + } init; + bx_bool special_mask; + bx_bool polled; /* Set when poll command is issued. */ + bx_bool rotate_on_autoeoi; /* Set when should rotate in auto-eoi mode. */ + Bit8u edge_level; /* bitmap for irq mode (0=edge, 1=level) */ +} bx_pic_t; + + +class bx_pic_c : public bx_pic_stub_c { +public: + bx_pic_c(); + virtual ~bx_pic_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual void lower_irq(unsigned irq_no); + virtual void raise_irq(unsigned irq_no); + virtual void set_mode(bx_bool ma_sl, Bit8u mode); + virtual Bit8u IAC(void); +#if BX_DEBUGGER + virtual void debug_dump(void); +#endif + virtual void register_state(void); + +private: + struct { + bx_pic_t master_pic; + bx_pic_t slave_pic; + } s; + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_PIC_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif + + BX_PIC_SMF void service_master_pic(void); + BX_PIC_SMF void service_slave_pic(void); + BX_PIC_SMF void clear_highest_interrupt(bx_pic_t *pic); +}; + +#endif diff --git a/bochs/iodev/pit82c54.cc b/bochs/iodev/pit82c54.cc new file mode 100644 index 00000000..ed260d59 --- /dev/null +++ b/bochs/iodev/pit82c54.cc @@ -0,0 +1,972 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +/* + * Emulator of an Intel 8254/82C54 Programmable Interval Timer. + * Greg Alexander + * + * + * Things I am unclear on (greg): + * 1.)What happens if both the status and count registers are latched, + * but the first of the two count registers has already been read? + * I.E.: + * latch count 0 (16-bit) + * Read count 0 (read LSByte) + * READ_BACK status of count 0 + * Read count 0 - do you get MSByte or status? + * This will be flagged as an error. + * 2.)What happens when we latch the output in the middle of a 2-part + * unlatched read? + * 3.)I assumed that programming a counter removes a latched status. + * 4.)I implemented the 8254 description of mode 0, not the 82C54 one. + * 5.)clock() calls represent a rising clock edge followed by a falling + * clock edge. + * 6.)What happens when we trigger mode 1 in the middle of a 2-part + * write? + */ + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "pit82c54.h" +#define LOG_THIS this-> + + +void pit_82C54::print_counter(counter_type &thisctr) +{ + BX_INFO(("Printing Counter")); + BX_INFO(("count: %d",thisctr.count)); + BX_INFO(("count_binary: %x",thisctr.count_binary)); + BX_INFO(("counter gate: %x",thisctr.GATE)); + BX_INFO(("counter OUT: %x",thisctr.OUTpin)); + BX_INFO(("next_change_time: %d",thisctr.next_change_time)); + BX_INFO(("End Counter Printout")); +} + +void pit_82C54::print_cnum(Bit8u cnum) +{ + if (cnum>MAX_COUNTER) { + BX_ERROR(("Bad counter index to print_cnum")); + } else { + print_counter(counter[cnum]); + } +} + +void pit_82C54::latch_counter(counter_type &thisctr) +{ + if (thisctr.count_LSB_latched || thisctr.count_MSB_latched) { + //Do nothing because previous latch has not been read.; + } else { + switch(thisctr.read_state) { + case MSByte: + thisctr.outlatch=thisctr.count & 0xFFFF; + thisctr.count_MSB_latched=1; + break; + case LSByte: + thisctr.outlatch=thisctr.count & 0xFFFF; + thisctr.count_LSB_latched=1; + break; + case LSByte_multiple: + thisctr.outlatch=thisctr.count & 0xFFFF; + thisctr.count_LSB_latched=1; + thisctr.count_MSB_latched=1; + break; + case MSByte_multiple: + if (!(seen_problems & UNL_2P_READ)) { +// seen_problems|=UNL_2P_READ; + BX_ERROR(("Unknown behavior when latching during 2-part read.")); + BX_ERROR((" This message will not be repeated.")); + } + //I guess latching and resetting to LSB first makes sense; + BX_DEBUG(("Setting read_state to LSB_mult")); + thisctr.read_state=LSByte_multiple; + thisctr.outlatch=thisctr.count & 0xFFFF; + thisctr.count_LSB_latched=1; + thisctr.count_MSB_latched=1; + break; + default: + BX_ERROR(("Unknown read mode found during latch command.")); + break; + } + } +} + +void pit_82C54::set_OUT(counter_type &thisctr, bx_bool data) +{ + if (thisctr.OUTpin != data) { + thisctr.OUTpin = data; + if (thisctr.out_handler != NULL) { + thisctr.out_handler(data); + } + } +} + +void BX_CPP_AttrRegparmN(2) pit_82C54::set_count(counter_type &thisctr, Bit32u data) +{ + thisctr.count=data & 0xFFFF; + set_binary_to_count(thisctr); +} + +void BX_CPP_AttrRegparmN(1) pit_82C54::set_count_to_binary(counter_type &thisctr) +{ + if (thisctr.bcd_mode) { + thisctr.count= + (((thisctr.count_binary/1)%10)<<0) | + (((thisctr.count_binary/10)%10)<<4) | + (((thisctr.count_binary/100)%10)<<8) | + (((thisctr.count_binary/1000)%10)<<12); + } else { + thisctr.count=thisctr.count_binary; + } +} + +void BX_CPP_AttrRegparmN(1) pit_82C54::set_binary_to_count(counter_type &thisctr) +{ + if (thisctr.bcd_mode) { + thisctr.count_binary= + (1*((thisctr.count>>0)&0xF)) + + (10*((thisctr.count>>4)&0xF)) + + (100*((thisctr.count>>8)&0xF)) + + (1000*((thisctr.count>>12)&0xF)); + } else { + thisctr.count_binary=thisctr.count; + } +} + +void BX_CPP_AttrRegparmN(1) pit_82C54::decrement (counter_type &thisctr) +{ + if (!thisctr.count) { + if (thisctr.bcd_mode) { + thisctr.count=0x9999; + thisctr.count_binary=9999; + } else { + thisctr.count=0xFFFF; + thisctr.count_binary=0xFFFF; + } + } else { + thisctr.count_binary--; + set_count_to_binary(thisctr); + } +} + +void pit_82C54::init(void) +{ + put("PIT81"); + + for(int i=0;i<3;i++) { + BX_DEBUG(("Setting read_state to LSB")); + counter[i].read_state=LSByte; + counter[i].write_state=LSByte; + counter[i].GATE=1; + counter[i].OUTpin=1; + counter[i].triggerGATE=0; + counter[i].mode=4; + counter[i].first_pass=0; + counter[i].bcd_mode=0; + counter[i].count=0; + counter[i].count_binary=0; + counter[i].state_bit_1=0; + counter[i].state_bit_2=0; + counter[i].null_count=0; + counter[i].rw_mode=1; + counter[i].count_written=1; + counter[i].count_LSB_latched=0; + counter[i].count_MSB_latched=0; + counter[i].status_latched=0; + counter[i].next_change_time=0; + counter[i].out_handler=NULL; + } + seen_problems=0; +} + +pit_82C54::pit_82C54(void) +{ + init(); +} + +void pit_82C54::reset(unsigned type) {} + +void pit_82C54::register_state(bx_param_c *parent) +{ + char name[4]; + + for (unsigned i=0; i<3; i++) { + sprintf(name, "%d", i); + bx_list_c *tim = new bx_list_c(parent, name, 22); + new bx_shadow_bool_c(tim, "GATE", &counter[i].GATE); + new bx_shadow_bool_c(tim, "OUTpin", &counter[i].OUTpin); + new bx_shadow_num_c(tim, "count", &counter[i].count); + new bx_shadow_num_c(tim, "outlatch", &counter[i].outlatch); + new bx_shadow_num_c(tim, "inlatch", &counter[i].inlatch); + new bx_shadow_num_c(tim, "status_latch", &counter[i].status_latch); + new bx_shadow_num_c(tim, "rw_mode", &counter[i].rw_mode); + new bx_shadow_num_c(tim, "mode", &counter[i].mode); + new bx_shadow_bool_c(tim, "bcd_mode", &counter[i].bcd_mode); + new bx_shadow_bool_c(tim, "null_count", &counter[i].null_count); + new bx_shadow_bool_c(tim, "count_LSB_latched", &counter[i].count_LSB_latched); + new bx_shadow_bool_c(tim, "count_MSB_latched", &counter[i].count_MSB_latched); + new bx_shadow_bool_c(tim, "status_latched", &counter[i].status_latched); + new bx_shadow_num_c(tim, "count_binary", &counter[i].count_binary); + new bx_shadow_bool_c(tim, "triggerGATE", &counter[i].triggerGATE); + new bx_shadow_num_c(tim, "write_state", (Bit8u*)&counter[i].write_state); + new bx_shadow_num_c(tim, "read_state", (Bit8u*)&counter[i].read_state); + new bx_shadow_bool_c(tim, "count_written", &counter[i].count_written); + new bx_shadow_bool_c(tim, "first_pass", &counter[i].first_pass); + new bx_shadow_bool_c(tim, "state_bit_1", &counter[i].state_bit_1); + new bx_shadow_bool_c(tim, "state_bit_2", &counter[i].state_bit_2); + new bx_shadow_num_c(tim, "next_change_time", &counter[i].next_change_time); + } +} + +void BX_CPP_AttrRegparmN(2) pit_82C54::decrement_multiple(counter_type &thisctr, Bit32u cycles) +{ + while(cycles>0) { + if (cycles<=thisctr.count_binary) { + thisctr.count_binary-=cycles; + cycles-=cycles; + set_count_to_binary(thisctr); + } else { + cycles-=(thisctr.count_binary+1); + thisctr.count_binary-=thisctr.count_binary; + set_count_to_binary(thisctr); + decrement(thisctr); + } + } +} + +void pit_82C54::clock_multiple(Bit8u cnum, Bit32u cycles) +{ + if (cnum>MAX_COUNTER) { + BX_ERROR(("Counter number too high in clock")); + } else { + counter_type &thisctr = counter[cnum]; + while(cycles>0) { + if (thisctr.next_change_time==0) { + if (thisctr.count_written) { + switch(thisctr.mode) { + case 0: + if (thisctr.GATE && (thisctr.write_state!=MSByte_multiple)) { + decrement_multiple(thisctr, cycles); + } + break; + case 1: + decrement_multiple(thisctr, cycles); + break; + case 2: + if (!thisctr.first_pass && thisctr.GATE) { + decrement_multiple(thisctr, cycles); + } + break; + case 3: + if (!thisctr.first_pass && thisctr.GATE) { + decrement_multiple(thisctr, 2*cycles); + } + break; + case 4: + if (thisctr.GATE) { + decrement_multiple(thisctr, cycles); + } + break; + case 5: + decrement_multiple(thisctr, cycles); + break; + default: + break; + } + } + cycles-=cycles; + } else { + switch(thisctr.mode) { + case 0: + case 1: + case 2: + case 4: + case 5: + if (thisctr.next_change_time > cycles) { + decrement_multiple(thisctr,cycles); + thisctr.next_change_time-=cycles; + cycles-=cycles; + } else { + decrement_multiple(thisctr,(thisctr.next_change_time-1)); + cycles-=thisctr.next_change_time; + clock(cnum); + } + break; + case 3: + if (thisctr.next_change_time > cycles) { + decrement_multiple(thisctr,cycles*2); + thisctr.next_change_time-=cycles; + cycles-=cycles; + } else { + decrement_multiple(thisctr,(thisctr.next_change_time-1)*2); + cycles-=thisctr.next_change_time; + clock(cnum); + } + break; + default: + cycles-=cycles; + break; + } + } + } +#if 0 + print_counter(thisctr); +#endif + } +} + +void BX_CPP_AttrRegparmN(1) pit_82C54::clock(Bit8u cnum) +{ + if (cnum>MAX_COUNTER) { + BX_ERROR(("Counter number too high in clock")); + } else { + counter_type &thisctr = counter[cnum]; + switch(thisctr.mode) { + case 0: + if (thisctr.count_written) { + if (thisctr.null_count) { + set_count(thisctr, thisctr.inlatch); + if (thisctr.GATE) { + if (thisctr.count_binary==0) { + thisctr.next_change_time=1; + } else { + thisctr.next_change_time=thisctr.count_binary & 0xFFFF; + } + } else { + thisctr.next_change_time=0; + } + thisctr.null_count=0; + } else { + if (thisctr.GATE && (thisctr.write_state!=MSByte_multiple)) { + decrement(thisctr); + if (!thisctr.OUTpin) { + thisctr.next_change_time=thisctr.count_binary & 0xFFFF; + if (!thisctr.count) { + set_OUT(thisctr,1); + } + } else { + thisctr.next_change_time=0; + } + } else { + thisctr.next_change_time=0; //if the clock isn't moving. + } + } + } else { + thisctr.next_change_time=0; //default to 0. + } + thisctr.triggerGATE=0; + break; + case 1: + if (thisctr.count_written) { + if (thisctr.triggerGATE) { + set_count(thisctr, thisctr.inlatch); + if (thisctr.count_binary==0) { + thisctr.next_change_time=1; + } else { + thisctr.next_change_time=thisctr.count_binary & 0xFFFF; + } + thisctr.null_count=0; + set_OUT(thisctr,0); + if (thisctr.write_state==MSByte_multiple) { + BX_ERROR(("Undefined behavior when loading a half loaded count.")); + } + } else { + decrement(thisctr); + if (!thisctr.OUTpin) { + if (thisctr.count_binary==0) { + thisctr.next_change_time=1; + } else { + thisctr.next_change_time=thisctr.count_binary & 0xFFFF; + } + if (thisctr.count==0) { + set_OUT(thisctr,1); + } + } else { + thisctr.next_change_time=0; + } + } + } else { + thisctr.next_change_time=0; //default to 0. + } + thisctr.triggerGATE=0; + break; + case 2: + if (thisctr.count_written) { + if (thisctr.triggerGATE || thisctr.first_pass) { + set_count(thisctr, thisctr.inlatch); + thisctr.next_change_time=(thisctr.count_binary-1) & 0xFFFF; + thisctr.null_count=0; + if (thisctr.inlatch==1) { + BX_ERROR(("ERROR: count of 1 is invalid in pit mode 2.")); + } + if (!thisctr.OUTpin) { + set_OUT(thisctr,1); + } + if (thisctr.write_state==MSByte_multiple) { + BX_ERROR(("Undefined behavior when loading a half loaded count.")); + } + thisctr.first_pass=0; + } else { + if (thisctr.GATE) { + decrement(thisctr); + thisctr.next_change_time=(thisctr.count_binary-1) & 0xFFFF; + if (thisctr.count==1) { + thisctr.next_change_time=1; + set_OUT(thisctr,0); + thisctr.first_pass=1; + } + } else { + thisctr.next_change_time=0; + } + } + } else { + thisctr.next_change_time=0; + } + thisctr.triggerGATE=0; + break; + case 3: + if (thisctr.count_written) { + if ((thisctr.triggerGATE || thisctr.first_pass + || thisctr.state_bit_2) && thisctr.GATE) { + set_count(thisctr, thisctr.inlatch & 0xFFFE); + thisctr.state_bit_1=thisctr.inlatch & 0x1; + if (!thisctr.OUTpin || !thisctr.state_bit_1) { + if (((thisctr.count_binary/2)-1)==0) { + thisctr.next_change_time=1; + } else { + thisctr.next_change_time=((thisctr.count_binary/2)-1) & 0xFFFF; + } + } else { + if ((thisctr.count_binary/2)==0) { + thisctr.next_change_time=1; + } else { + thisctr.next_change_time=(thisctr.count_binary/2) & 0xFFFF; + } + } + thisctr.null_count=0; + if (thisctr.inlatch==1) { + BX_ERROR(("Count of 1 is invalid in pit mode 3.")); + } + if (!thisctr.OUTpin) { + set_OUT(thisctr,1); + } else if (thisctr.OUTpin && !thisctr.first_pass) { + set_OUT(thisctr,0); + } + if (thisctr.write_state==MSByte_multiple) { + BX_ERROR(("Undefined behavior when loading a half loaded count.")); + } + thisctr.state_bit_2=0; + thisctr.first_pass=0; + } else { + if (thisctr.GATE) { + decrement(thisctr); + decrement(thisctr); + if (!thisctr.OUTpin || !thisctr.state_bit_1) { + thisctr.next_change_time=((thisctr.count_binary/2)-1) & 0xFFFF; + } else { + thisctr.next_change_time=(thisctr.count_binary/2) & 0xFFFF; + } + if (thisctr.count==0) { + thisctr.state_bit_2=1; + thisctr.next_change_time=1; + } + if ((thisctr.count==2) && + (!thisctr.OUTpin || !thisctr.state_bit_1)) + { + thisctr.state_bit_2=1; + thisctr.next_change_time=1; + } + } else { + thisctr.next_change_time=0; + } + } + } else { + thisctr.next_change_time=0; + } + thisctr.triggerGATE=0; + break; + case 4: + if (thisctr.count_written) { + if (!thisctr.OUTpin) { + set_OUT(thisctr,1); + } + if (thisctr.null_count) { + set_count(thisctr, thisctr.inlatch); + if (thisctr.GATE) { + if (thisctr.count_binary==0) { + thisctr.next_change_time=1; + } else { + thisctr.next_change_time=thisctr.count_binary & 0xFFFF; + } + } else { + thisctr.next_change_time=0; + } + thisctr.null_count=0; + if (thisctr.write_state==MSByte_multiple) { + BX_ERROR(("Undefined behavior when loading a half loaded count.")); + } + thisctr.first_pass=1; + } else { + if (thisctr.GATE) { + decrement(thisctr); + if (thisctr.first_pass) { + thisctr.next_change_time=thisctr.count_binary & 0xFFFF; + if (!thisctr.count) { + set_OUT(thisctr,0); + thisctr.next_change_time=1; + thisctr.first_pass=0; + } + } else { + thisctr.next_change_time=0; + } + } else { + thisctr.next_change_time=0; + } + } + } else { + thisctr.next_change_time=0; + } + thisctr.triggerGATE=0; + break; + case 5: + if (thisctr.count_written) { + if (!thisctr.OUTpin) { + set_OUT(thisctr,1); + } + if (thisctr.triggerGATE) { + set_count(thisctr, thisctr.inlatch); + if (thisctr.count_binary==0) { + thisctr.next_change_time=1; + } else { + thisctr.next_change_time=thisctr.count_binary & 0xFFFF; + } + thisctr.null_count=0; + if (thisctr.write_state==MSByte_multiple) { + BX_ERROR(("Undefined behavior when loading a half loaded count.")); + } + thisctr.first_pass=1; + } else { + decrement(thisctr); + if (thisctr.first_pass) { + thisctr.next_change_time=thisctr.count_binary & 0xFFFF; + if (!thisctr.count) { + set_OUT(thisctr,0); + thisctr.next_change_time=1; + thisctr.first_pass=0; + } + } else { + thisctr.next_change_time=0; + } + } + } else { + thisctr.next_change_time=0; + } + thisctr.triggerGATE=0; + break; + default: + BX_ERROR(("Mode not implemented.")); + thisctr.next_change_time=0; + thisctr.triggerGATE=0; + break; + } + } +} + +void pit_82C54::clock_all(Bit32u cycles) +{ + BX_DEBUG(("clock_all: cycles=%d",cycles)); + clock_multiple(0,cycles); + clock_multiple(1,cycles); + clock_multiple(2,cycles); +} + +Bit8u pit_82C54::read(Bit8u address) +{ + if (address>MAX_ADDRESS) { + BX_ERROR(("Counter address incorrect in data read.")); + } else if (address==CONTROL_ADDRESS) { + BX_DEBUG(("PIT Read: Control Word Register.")); + //Read from control word register; + /* This might be okay. If so, 0 seems the most logical + * return value from looking at the docs. + */ + BX_ERROR(("Read from control word register not defined.")); + return 0; + } else { + //Read from a counter; + BX_DEBUG(("PIT Read: Counter %d.",address)); + counter_type &thisctr=counter[address]; + if (thisctr.status_latched) { + //Latched Status Read; + if (thisctr.count_MSB_latched && + (thisctr.read_state==MSByte_multiple)) { + BX_ERROR(("Undefined output when status latched and count half read.")); + } else { + thisctr.status_latched=0; + return thisctr.status_latch; + } + } else { + //Latched Count Read; + if (thisctr.count_LSB_latched) { + //Read Least Significant Byte; + if (thisctr.read_state==LSByte_multiple) { + BX_DEBUG(("Setting read_state to MSB_mult")); + thisctr.read_state=MSByte_multiple; + } + thisctr.count_LSB_latched=0; + return (thisctr.outlatch & 0xFF); + } else if (thisctr.count_MSB_latched) { + //Read Most Significant Byte; + if (thisctr.read_state==MSByte_multiple) { + BX_DEBUG(("Setting read_state to LSB_mult")); + thisctr.read_state=LSByte_multiple; + } + thisctr.count_MSB_latched=0; + return ((thisctr.outlatch>>8) & 0xFF); + } else { + //Unlatched Count Read; + if (!(thisctr.read_state & 0x1)) { + //Read Least Significant Byte; + if (thisctr.read_state==LSByte_multiple) { + thisctr.read_state=MSByte_multiple; + BX_DEBUG(("Setting read_state to MSB_mult")); + } + return (thisctr.count & 0xFF); + } else { + //Read Most Significant Byte; + if (thisctr.read_state==MSByte_multiple) { + BX_DEBUG(("Setting read_state to LSB_mult")); + thisctr.read_state=LSByte_multiple; + } + return ((thisctr.count>>8) & 0xFF); + } + } + } + } + + //Should only get here on errors; + return 0; +} + +void pit_82C54::write(Bit8u address, Bit8u data) +{ + if (address>MAX_ADDRESS) { + BX_ERROR(("Counter address incorrect in data write.")); + } else if (address==CONTROL_ADDRESS) { + Bit8u SC, RW, M, BCD; + controlword=data; + BX_DEBUG(("Control Word Write.")); + SC = (controlword>>6) & 0x3; + RW = (controlword>>4) & 0x3; + M = (controlword>>1) & 0x7; + BCD = controlword & 0x1; + if (SC == 3) { + //READ_BACK command; + int i; + BX_DEBUG(("READ_BACK command.")); + for(i=0;i<=MAX_COUNTER;i++) { + if ((M>>i) & 0x1) { + //If we are using this counter; + counter_type &thisctr=counter[i]; + if (!((controlword>>5) & 1)) { + //Latch Count; + latch_counter(thisctr); + } + if (!((controlword>>4) & 1)) { + //Latch Status; + if (thisctr.status_latched) { + //Do nothing because latched status has not been read.; + } else { + thisctr.status_latch= + ((thisctr.OUTpin & 0x1) << 7) | + ((thisctr.null_count & 0x1) << 6) | + ((thisctr.rw_mode & 0x3) << 4) | + ((thisctr.mode & 0x7) << 1) | + (thisctr.bcd_mode&0x1); + thisctr.status_latched=1; + } + } + } + } + } else { + counter_type &thisctr = counter[SC]; + if (!RW) { + //Counter Latch command; + BX_DEBUG(("Counter Latch command. SC=%d",SC)); + latch_counter(thisctr); + } else { + //Counter Program Command; + BX_DEBUG(("Counter Program command. SC=%d, RW=%d, M=%d, BCD=%d",SC,RW,M,BCD)); + thisctr.null_count=1; + thisctr.count_LSB_latched=0; + thisctr.count_MSB_latched=0; + thisctr.status_latched=0; + thisctr.inlatch=0; + thisctr.count_written=0; + thisctr.first_pass=1; + thisctr.rw_mode=RW; + thisctr.bcd_mode=(BCD > 0); + thisctr.mode=M; + switch(RW) { + case 0x1: + BX_DEBUG(("Setting read_state to LSB")); + thisctr.read_state=LSByte; + thisctr.write_state=LSByte; + break; + case 0x2: + BX_DEBUG(("Setting read_state to MSB")); + thisctr.read_state=MSByte; + thisctr.write_state=MSByte; + break; + case 0x3: + BX_DEBUG(("Setting read_state to LSB_mult")); + thisctr.read_state=LSByte_multiple; + thisctr.write_state=LSByte_multiple; + break; + default: + BX_ERROR(("RW field invalid in control word write.")); + break; + } + //All modes except mode 0 have initial output of 1.; + if (M) { + set_OUT(thisctr, 1); + } else { + set_OUT(thisctr, 0); + } + thisctr.next_change_time=0; + } + } + } else { + //Write to counter initial value. + counter_type &thisctr = counter[address]; + BX_DEBUG(("Write Initial Count: counter=%d, count=%d",address,data)); + switch(thisctr.write_state) { + case LSByte_multiple: + thisctr.inlatch = data; + thisctr.write_state = MSByte_multiple; + break; + case LSByte: + thisctr.inlatch = data; + thisctr.count_written = 1; + break; + case MSByte_multiple: + thisctr.write_state = LSByte_multiple; + thisctr.inlatch |= (data << 8); + thisctr.count_written = 1; + break; + case MSByte: + thisctr.inlatch = (data << 8); + thisctr.count_written = 1; + break; + default: + BX_ERROR(("write counter in invalid write state.")); + break; + } + if (thisctr.count_written && thisctr.write_state != MSByte_multiple) { + thisctr.null_count = 1; + set_count(thisctr, thisctr.inlatch); + } + switch(thisctr.mode) { + case 0: + if (thisctr.write_state==MSByte_multiple) { + set_OUT(thisctr,0); + } + thisctr.next_change_time=1; + break; + case 1: + if (thisctr.triggerGATE) { //for initial writes, if already saw trigger. + thisctr.next_change_time=1; + } //Otherwise, no change. + break; + case 6: + case 2: + thisctr.next_change_time=1; //FIXME: this could be loosened. + break; + case 7: + case 3: + thisctr.next_change_time=1; //FIXME: this could be loosened. + break; + case 4: + thisctr.next_change_time=1; + break; + case 5: + if (thisctr.triggerGATE) { //for initial writes, if already saw trigger. + thisctr.next_change_time=1; + } //Otherwise, no change. + break; + } + } +} + +void pit_82C54::set_GATE(Bit8u cnum, bx_bool data) +{ + if (cnum>MAX_COUNTER) { + BX_ERROR(("Counter number incorrect in 82C54 set_GATE")); + } else { + counter_type &thisctr = counter[cnum]; + if (!((thisctr.GATE&&data) || (!(thisctr.GATE||data)))) { + BX_INFO(("Changing GATE %d to: %d",cnum,data)); + thisctr.GATE=data; + if (thisctr.GATE) { + thisctr.triggerGATE=1; + } + switch(thisctr.mode) { + case 0: + if (data && thisctr.count_written) { + if (thisctr.null_count) { + thisctr.next_change_time=1; + } else { + if ((!thisctr.OUTpin) && + (thisctr.write_state!=MSByte_multiple)) + { + if (thisctr.count_binary==0) { + thisctr.next_change_time=1; + } else { + thisctr.next_change_time=thisctr.count_binary & 0xFFFF; + } + } else { + thisctr.next_change_time=0; + } + } + } else { + if (thisctr.null_count) { + thisctr.next_change_time=1; + } else { + thisctr.next_change_time=0; + } + } + break; + case 1: + if (data && thisctr.count_written) { //only triggers cause a change. + thisctr.next_change_time=1; + } + break; + case 2: + if (!data) { + set_OUT(thisctr,1); + thisctr.next_change_time=0; + } else { + if (thisctr.count_written) { + thisctr.next_change_time=1; + } else { + thisctr.next_change_time=0; + } + } + break; + case 3: + if (!data) { + set_OUT(thisctr,1); + thisctr.first_pass=1; + thisctr.next_change_time=0; + } else { + if (thisctr.count_written) { + thisctr.next_change_time=1; + } else { + thisctr.next_change_time=0; + } + } + break; + case 4: + if (!thisctr.OUTpin || thisctr.null_count) { + thisctr.next_change_time=1; + } else { + if (data && thisctr.count_written) { + if (thisctr.first_pass) { + if (thisctr.count_binary==0) { + thisctr.next_change_time=1; + } else { + thisctr.next_change_time=thisctr.count_binary & 0xFFFF; + } + } else { + thisctr.next_change_time=0; + } + } else { + thisctr.next_change_time=0; + } + } + break; + case 5: + if (data && thisctr.count_written) { //only triggers cause a change. + thisctr.next_change_time=1; + } + break; + default: + break; + } + } + } +} + +bx_bool pit_82C54::read_OUT(Bit8u cnum) +{ + if (cnum>MAX_COUNTER) { + BX_ERROR(("Counter number incorrect in 82C54 read_OUT")); + return 0; + } + + return counter[cnum].OUTpin; +} + +bx_bool pit_82C54::read_GATE(Bit8u cnum) +{ + if (cnum>MAX_COUNTER) { + BX_ERROR(("Counter number incorrect in 82C54 read_GATE")); + return 0; + } + + return counter[cnum].GATE; +} + +Bit32u pit_82C54::get_clock_event_time(Bit8u cnum) +{ + if (cnum>MAX_COUNTER) { + BX_ERROR(("Counter number incorrect in 82C54 read_GATE")); + return 0; + } + + return counter[cnum].next_change_time; +} + +Bit32u pit_82C54::get_next_event_time(void) +{ + Bit32u time0=get_clock_event_time(0); + Bit32u time1=get_clock_event_time(1); + Bit32u time2=get_clock_event_time(2); + + Bit32u out=time0; + if (time1 && (time1 + */ + +#ifndef _PIT_82C54_H_ +#define _PIT_82C54_H_ 1 + +typedef void (*out_handler_t)(bx_bool value); + +class pit_82C54 : public logfunctions { +public: + //Please do not use these. They are public because they have to be + // to compile on some platforms. They are not to be used by other + // classes. + + enum rw_status { + LSByte=0, + MSByte=1, + LSByte_multiple=2, + MSByte_multiple=3 + }; + +private: + + enum { + MAX_COUNTER=2, + MAX_ADDRESS=3, + CONTROL_ADDRESS=3, + MAX_MODE=5 + }; + + enum real_RW_status { + LSB_real=1, + MSB_real=2, + BOTH_real=3 + }; + + enum problem_type { + UNL_2P_READ=1 + }; + + struct counter_type { + //Chip IOs; + bx_bool GATE; //GATE Input value at end of cycle + bx_bool OUTpin; //OUT output this cycle + + //Architected state; + Bit32u count; //Counter value this cycle + Bit16u outlatch; //Output latch this cycle + Bit16u inlatch; //Input latch this cycle + Bit8u status_latch; + + //Status Register data; + Bit8u rw_mode; //2-bit R/W mode from command word register. + Bit8u mode; //3-bit mode from command word register. + bx_bool bcd_mode; //1-bit BCD vs. Binary setting. + bx_bool null_count; //Null count bit of status register. + + //Latch status data; + bx_bool count_LSB_latched; + bx_bool count_MSB_latched; + bx_bool status_latched; + + //Miscelaneous State; + Bit32u count_binary; //Value of the count in binary. + bx_bool triggerGATE; //Whether we saw GATE rise this cycle. + rw_status write_state; //Read state this cycle + rw_status read_state; //Read state this cycle + bx_bool count_written; //Whether a count written since programmed + bx_bool first_pass; //Whether or not this is the first loaded count. + bx_bool state_bit_1; //Miscelaneous state bits. + bx_bool state_bit_2; + Bit32u next_change_time; //Next time something besides count changes. + //0 means never. + out_handler_t out_handler; // OUT pin callback (for IRQ0) + }; + + counter_type counter[3]; + + Bit8u controlword; + + int seen_problems; + + void latch_counter(counter_type & thisctr); + + void set_OUT (counter_type & thisctr, bx_bool data); + + void set_count (counter_type & thisctr, Bit32u data) BX_CPP_AttrRegparmN(2); + + void set_count_to_binary (counter_type & thisctr) BX_CPP_AttrRegparmN(1); + + void set_binary_to_count (counter_type & thisctr) BX_CPP_AttrRegparmN(1); + + void decrement (counter_type & thisctr) BX_CPP_AttrRegparmN(1); + + void decrement_multiple(counter_type & thisctr, Bit32u cycles) BX_CPP_AttrRegparmN(2); + + void clock(Bit8u cnum) BX_CPP_AttrRegparmN(1); + + void print_counter(counter_type & thisctr); + +public: + pit_82C54 (void); + void init (void); + void reset (unsigned type); + void register_state(bx_param_c *parent); + + void clock_all(Bit32u cycles); + void clock_multiple(Bit8u cnum, Bit32u cycles); + + Bit8u read(Bit8u address); + void write(Bit8u address, Bit8u data); + + void set_GATE(Bit8u cnum, bx_bool data); + bx_bool read_GATE(Bit8u cnum); + + bx_bool read_OUT(Bit8u cnum); + void set_OUT_handler(Bit8u cnum, out_handler_t outh); + + Bit32u get_clock_event_time(Bit8u cnum); + Bit32u get_next_event_time(void); + Bit16u get_inlatch(int countnum); + + void print_cnum(Bit8u cnum); +}; + +#endif diff --git a/bochs/iodev/pit_wrap.cc b/bochs/iodev/pit_wrap.cc new file mode 100644 index 00000000..aece228a --- /dev/null +++ b/bochs/iodev/pit_wrap.cc @@ -0,0 +1,372 @@ +/////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "pit_wrap.h" +#include "virt_timer.h" +#include "speaker.h" + + +#define LOG_THIS thePit-> + +bx_pit_c *thePit = NULL; + +int libpit_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + thePit = new bx_pit_c(); + bx_devices.pluginPitDevice = thePit; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, thePit, BX_PLUGIN_PIT); + return(0); // Success +} + +void libpit_LTX_plugin_fini(void) +{ + delete thePit; +} + +//Important constant #defines: +#define USEC_PER_SECOND (1000000) +//1.193181MHz Clock +#define TICKS_PER_SECOND (1193181) + + +// define a macro to convert floating point numbers into 64-bit integers. +// In MSVC++ you can convert a 64-bit float into a 64-bit signed integer, +// but it will not convert a 64-bit float into a 64-bit unsigned integer. +// This macro works around that. +#define F2I(x) ((Bit64u)(Bit64s) (x)) +#define I2F(x) ((double)(Bit64s) (x)) + + +//Generic MAX and MIN Functions +#define BX_MAX(a,b) ( ((a)>(b))?(a):(b) ) +#define BX_MIN(a,b) ( ((a)>(b))?(b):(a) ) + + +//USEC_ALPHA is multiplier for the past. +//USEC_ALPHA_B is 1-USEC_ALPHA, or multiplier for the present. +#define USEC_ALPHA ((double)(.8)) +#define USEC_ALPHA_B ((double)(((double)1)-USEC_ALPHA)) +#define USEC_ALPHA2 ((double)(.5)) +#define USEC_ALPHA2_B ((double)(((double)1)-USEC_ALPHA2)) +#define ALPHA_LOWER(old,new) ((Bit64u)((oldget_bochs_root(), "pit", "8254 PIT State", 7); + new bx_shadow_num_c(list, "speaker_data_on", &BX_PIT_THIS s.speaker_data_on, BASE_HEX); + new bx_shadow_bool_c(list, "refresh_clock_div2", &BX_PIT_THIS s.refresh_clock_div2); + new bx_shadow_num_c(list, "last_usec", &BX_PIT_THIS s.last_usec); + new bx_shadow_num_c(list, "last_next_event_time", &BX_PIT_THIS s.last_next_event_time); + new bx_shadow_num_c(list, "total_ticks", &BX_PIT_THIS s.total_ticks); + new bx_shadow_num_c(list, "total_usec", &BX_PIT_THIS s.total_usec); + bx_list_c *counter = new bx_list_c(list, "counter", 4); + BX_PIT_THIS s.timer.register_state(counter); +} + +void bx_pit_c::timer_handler(void *this_ptr) +{ + bx_pit_c * class_ptr = (bx_pit_c *) this_ptr; + class_ptr->handle_timer(); +} + +void bx_pit_c::handle_timer() +{ + Bit64u my_time_usec = bx_virt_timer.time_usec(); + Bit64u time_passed = my_time_usec-BX_PIT_THIS s.last_usec; + Bit32u time_passed32 = (Bit32u)time_passed; + + BX_DEBUG(("entering timer handler")); + + if(time_passed32) { + periodic(time_passed32); + } + BX_PIT_THIS s.last_usec=BX_PIT_THIS s.last_usec + time_passed; + if(time_passed || (BX_PIT_THIS s.last_next_event_time != BX_PIT_THIS s.timer.get_next_event_time())) + { + BX_DEBUG(("RESETting timer")); + bx_virt_timer.deactivate_timer(BX_PIT_THIS s.timer_handle[0]); + BX_DEBUG(("deactivated timer")); + if(BX_PIT_THIS s.timer.get_next_event_time()) { + bx_virt_timer.activate_timer(BX_PIT_THIS s.timer_handle[0], + (Bit32u)BX_MAX(1,TICKS_TO_USEC(BX_PIT_THIS s.timer.get_next_event_time())), + 0); + BX_DEBUG(("activated timer")); + } + BX_PIT_THIS s.last_next_event_time = BX_PIT_THIS s.timer.get_next_event_time(); + } + BX_DEBUG(("s.last_usec="FMT_LL"d",BX_PIT_THIS s.last_usec)); + BX_DEBUG(("s.timer_id=%d",BX_PIT_THIS s.timer_handle[0])); + BX_DEBUG(("s.timer.get_next_event_time=%x",BX_PIT_THIS s.timer.get_next_event_time())); + BX_DEBUG(("s.last_next_event_time=%d",BX_PIT_THIS s.last_next_event_time)); +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +Bit32u bx_pit_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_PIT_SMF + bx_pit_c *class_ptr = (bx_pit_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_pit_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PIT_SMF + + Bit8u value = 0; + + handle_timer(); + + Bit64u my_time_usec = bx_virt_timer.time_usec(); + + switch (address) { + + case 0x40: /* timer 0 - system ticks */ + value = BX_PIT_THIS s.timer.read(0); + break; + case 0x41: /* timer 1 read */ + value = BX_PIT_THIS s.timer.read(1); + break; + case 0x42: /* timer 2 read */ + value = BX_PIT_THIS s.timer.read(2); + break; + case 0x43: /* timer 1 read */ + value = BX_PIT_THIS s.timer.read(3); + break; + + case 0x61: + /* AT, port 61h */ + BX_PIT_THIS s.refresh_clock_div2 = (bx_bool)((my_time_usec / 15) & 1); + value = (BX_PIT_THIS s.timer.read_OUT(2)<<5) | + (BX_PIT_THIS s.refresh_clock_div2<<4) | + (BX_PIT_THIS s.speaker_data_on<<1) | + (BX_PIT_THIS s.timer.read_GATE(2)?1:0); + break; + + default: + BX_PANIC(("unsupported io read from port 0x%04x", address)); + } + + BX_DEBUG(("read from port 0x%04x, value = 0x%02x", address, value)); + return value; +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_pit_c::write_handler(void *this_ptr, Bit32u address, Bit32u dvalue, unsigned io_len) +{ +#if !BX_USE_PIT_SMF + bx_pit_c *class_ptr = (bx_pit_c *) this_ptr; + class_ptr->write(address, dvalue, io_len); +} + +void bx_pit_c::write(Bit32u address, Bit32u dvalue, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PIT_SMF + Bit8u value; + Bit64u my_time_usec = bx_virt_timer.time_usec(); + Bit64u time_passed = my_time_usec-BX_PIT_THIS s.last_usec; + Bit32u time_passed32 = (Bit32u)time_passed; + + if(time_passed32) { + periodic(time_passed32); + } + BX_PIT_THIS s.last_usec=BX_PIT_THIS s.last_usec + time_passed; + + value = (Bit8u) dvalue; + + BX_DEBUG(("write to port 0x%04x, value = 0x%02x", address, value)); + + switch (address) { + case 0x40: /* timer 0: write count register */ + BX_PIT_THIS s.timer.write(0, value); + break; + + case 0x41: /* timer 1: write count register */ + BX_PIT_THIS s.timer.write(1, value); + break; + + case 0x42: /* timer 2: write count register */ + BX_PIT_THIS s.timer.write(2, value); + break; + + case 0x43: /* timer 0-2 mode control */ + BX_PIT_THIS s.timer.write(3, value); + break; + + case 0x61: + BX_PIT_THIS s.speaker_data_on = (value >> 1) & 0x01; + if (BX_PIT_THIS s.speaker_data_on) { + DEV_speaker_beep_on((float)(1193180.0 / BX_PIT_THIS get_timer(2))); + } else { + DEV_speaker_beep_off(); + } + /* ??? only on AT+ */ + BX_PIT_THIS s.timer.set_GATE(2, value & 0x01); + break; + + default: + BX_PANIC(("unsupported io write to port 0x%04x = 0x%02x", address, value)); + } + + if(time_passed || (BX_PIT_THIS s.last_next_event_time != BX_PIT_THIS s.timer.get_next_event_time())) + { + BX_DEBUG(("RESETting timer")); + bx_virt_timer.deactivate_timer(BX_PIT_THIS s.timer_handle[0]); + BX_DEBUG(("deactivated timer")); + if(BX_PIT_THIS s.timer.get_next_event_time()) { + bx_virt_timer.activate_timer(BX_PIT_THIS s.timer_handle[0], + (Bit32u)BX_MAX(1,TICKS_TO_USEC(BX_PIT_THIS s.timer.get_next_event_time())), + 0); + BX_DEBUG(("activated timer")); + } + BX_PIT_THIS s.last_next_event_time = BX_PIT_THIS s.timer.get_next_event_time(); + } + BX_DEBUG(("s.last_usec="FMT_LL"d",BX_PIT_THIS s.last_usec)); + BX_DEBUG(("s.timer_id=%d",BX_PIT_THIS s.timer_handle[0])); + BX_DEBUG(("s.timer.get_next_event_time=%x",BX_PIT_THIS s.timer.get_next_event_time())); + BX_DEBUG(("s.last_next_event_time=%d",BX_PIT_THIS s.last_next_event_time)); + +} + +bx_bool bx_pit_c::periodic(Bit32u usec_delta) +{ + Bit32u ticks_delta = 0; + + BX_PIT_THIS s.total_usec += usec_delta; + ticks_delta=(Bit32u)((USEC_TO_TICKS((Bit64u)(BX_PIT_THIS s.total_usec)))-BX_PIT_THIS s.total_ticks); + BX_PIT_THIS s.total_ticks += ticks_delta; + + while ((BX_PIT_THIS s.total_ticks >= TICKS_PER_SECOND) && (BX_PIT_THIS s.total_usec >= USEC_PER_SECOND)) { + BX_PIT_THIS s.total_ticks -= TICKS_PER_SECOND; + BX_PIT_THIS s.total_usec -= USEC_PER_SECOND; + } + + while(ticks_delta>0) { + Bit32u maxchange=BX_PIT_THIS s.timer.get_next_event_time(); + Bit32u timedelta=maxchange; + if((maxchange==0) || (maxchange>ticks_delta)) { + timedelta=ticks_delta; + } + BX_PIT_THIS s.timer.clock_all(timedelta); + ticks_delta-=timedelta; + } + + return 0; +} + +void bx_pit_c::irq_handler(bx_bool value) +{ + if (value == 1) { + DEV_pic_raise_irq(0); + } else { + DEV_pic_lower_irq(0); + } +} + +Bit16u bx_pit_c::get_timer(int Timer) { + return BX_PIT_THIS s.timer.get_inlatch(Timer); +} diff --git a/bochs/iodev/pit_wrap.h b/bochs/iodev/pit_wrap.h new file mode 100644 index 00000000..fbed323f --- /dev/null +++ b/bochs/iodev/pit_wrap.h @@ -0,0 +1,71 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef _BX_PIT_WRAP_H +#define _BX_PIT_WRAP_H + +#include "bochs.h" +#include "pit82c54.h" + +#if BX_USE_PIT_SMF +# define BX_PIT_SMF static +# define BX_PIT_THIS thePit-> +#else +# define BX_PIT_SMF +# define BX_PIT_THIS this-> +#endif + +class bx_pit_c : public bx_devmodel_c { +public: + bx_pit_c(); + virtual ~bx_pit_c() {} + virtual void init(void); + virtual void reset(unsigned type); + virtual void register_state(void); + +private: + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_PIT_SMF + Bit32u read(Bit32u addr, unsigned len); + void write(Bit32u addr, Bit32u Value, unsigned len); +#endif + + struct s_type { + pit_82C54 timer; + Bit8u speaker_data_on; + bx_bool refresh_clock_div2; + Bit64u last_usec; + Bit32u last_next_event_time; + Bit64u total_ticks; + Bit64u total_usec; + int timer_handle[3]; + } s; + + static void timer_handler(void *this_ptr); + BX_PIT_SMF void handle_timer(); + BX_PIT_SMF bx_bool periodic(Bit32u usec_delta); + + BX_PIT_SMF void irq_handler(bx_bool value); + + BX_PIT_SMF Bit16u get_timer(int Timer); +}; + +#endif // #ifndef _BX_PIT_WRAP_H diff --git a/bochs/iodev/pnic_api.h b/bochs/iodev/pnic_api.h new file mode 100644 index 00000000..b2ce8077 --- /dev/null +++ b/bochs/iodev/pnic_api.h @@ -0,0 +1,59 @@ +/* + * Constants etc. for the Bochs/Etherboot pseudo-NIC + * + * This header file must be valid C and C++. + * + * Operation of the pseudo-NIC (PNIC) is pretty simple. To write a + * command plus data, first write the length of the data to + * PNIC_REG_LEN, then write the data a byte at a type to + * PNIC_REG_DATA, then write the command code to PNIC_REG_CMD. The + * status will be available from PNIC_REG_STAT. The length of any + * data returned will be in PNIC_REG_LEN and can be read a byte at a + * time from PNIC_REG_DATA. + */ + +/* + * PCI parameters + */ +#define PNIC_PCI_VENDOR 0xfefe /* Hopefully these won't clash with */ +#define PNIC_PCI_DEVICE 0xefef /* any real PCI device IDs. */ + +/* + * 'Hardware' register addresses, offset from io_base + */ +#define PNIC_REG_CMD 0x00 /* Command register, 2 bytes, write only */ +#define PNIC_REG_STAT 0x00 /* Status register, 2 bytes, read only */ +#define PNIC_REG_LEN 0x02 /* Length register, 2 bytes, read-write */ +#define PNIC_REG_DATA 0x04 /* Data port, 1 byte, read-write */ +/* + * PNIC_MAX_REG used in Bochs to claim i/o space + */ +#define PNIC_MAX_REG 0x04 + +/* + * Command code definitions: write these into PNIC_REG_CMD + */ +#define PNIC_CMD_NOOP 0x0000 +#define PNIC_CMD_API_VER 0x0001 +#define PNIC_CMD_READ_MAC 0x0002 +#define PNIC_CMD_RESET 0x0003 +#define PNIC_CMD_XMIT 0x0004 +#define PNIC_CMD_RECV 0x0005 +#define PNIC_CMD_RECV_QLEN 0x0006 +#define PNIC_CMD_MASK_IRQ 0x0007 +#define PNIC_CMD_FORCE_IRQ 0x0008 + +/* + * Status code definitions: read these from PNIC_REG_STAT + * + * We avoid using status codes that might be confused with + * randomly-read data (e.g. 0x0000, 0xffff etc.) + */ +#define PNIC_STATUS_OK 0x4f4b /* 'OK' */ +#define PNIC_STATUS_UNKNOWN_CMD 0x3f3f /* '??' */ + +/* + * Other miscellaneous information + */ + +#define PNIC_API_VERSION 0x0101 /* 1.1 */ diff --git a/bochs/iodev/sb16.cc b/bochs/iodev/sb16.cc new file mode 100644 index 00000000..0583fecc --- /dev/null +++ b/bochs/iodev/sb16.cc @@ -0,0 +1,3688 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// The original version of the SB16 support written and donated by Josef Drexler + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_SB16 + +#include "sb16.h" +#include "soundmod.h" +#include "soundlnx.h" +#include "soundwin.h" +#include "soundosx.h" + +#define LOG_THIS theSB16Device-> + +bx_sb16_c *theSB16Device = NULL; + +int libsb16_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theSB16Device = new bx_sb16_c(); + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theSB16Device, BX_PLUGIN_SB16); + return(0); // Success +} + +void libsb16_LTX_plugin_fini(void) +{ + delete theSB16Device; +} + +// some shortcuts to save typing +#define LOGFILE BX_SB16_THIS logfile +#define MIDIDATA BX_SB16_THIS midifile +#define WAVEDATA BX_SB16_THIS wavefile +#define MPU BX_SB16_THIS mpu401 +#define DSP BX_SB16_THIS dsp +#define MIXER BX_SB16_THIS mixer +#define EMUL BX_SB16_THIS emuldata +#define OPL BX_SB16_THIS opl + +#define BX_SB16_OUTPUT BX_SB16_THIS soundmod + +// here's a safe way to print out null pointeres +#define MIGHT_BE_NULL(x) ((x==NULL)? "(null)" : x) + +bx_sb16_c::bx_sb16_c(void) +{ + put("SB16"); + mpu401.timer_handle = BX_NULL_TIMER_HANDLE; + dsp.timer_handle = BX_NULL_TIMER_HANDLE; + opl.timer_handle = BX_NULL_TIMER_HANDLE; + midimode = 0; + midifile = NULL; + wavemode = 0; + wavefile = NULL; + loglevel = 0; +} + +bx_sb16_c::~bx_sb16_c(void) +{ + switch (midimode) + { + case 2: + if (MIDIDATA != NULL) + finishmidifile(); + break; + case 1: + if (MPU.outputinit != 0) + BX_SB16_OUTPUT->closemidioutput(); + break; + case 3: + if (MIDIDATA != NULL) + fclose(MIDIDATA); + break; + } + + switch (wavemode) + { + case 2: + if (WAVEDATA != NULL) + finishvocfile(); + break; + case 1: + if (DSP.outputinit != 0) + BX_SB16_OUTPUT->closewaveoutput(); + break; + case 3: + if (WAVEDATA != NULL) + fclose(WAVEDATA); + break; + } + + delete(BX_SB16_OUTPUT); + + delete [] DSP.dma.chunk; + + if ((SIM->get_param_num(BXPN_SB16_LOGLEVEL)->get() > 0) && LOGFILE) + fclose(LOGFILE); + + SIM->get_param_num(BXPN_SB16_DMATIMER)->set_handler(NULL); + SIM->get_param_num(BXPN_SB16_LOGLEVEL)->set_handler(NULL); + + BX_DEBUG(("Exit")); +} + +void bx_sb16_c::init(void) +{ + unsigned addr, i; + bx_list_c *base; + + base = (bx_list_c*) SIM->get_param(BXPN_SB16); + if ((strlen(SIM->get_param_string("logfile", base)->getptr()) < 1)) + SIM->get_param_num("loglevel", base)->set(0); + + if (SIM->get_param_num("loglevel", base)->get() > 0) + { + LOGFILE = fopen(SIM->get_param_string("logfile", base)->getptr(),"w"); // logfile for errors etc. + if (LOGFILE == NULL) + { + BX_ERROR(("Error opening file %s. Logging disabled.", SIM->get_param_string("logfile", base)->getptr())); + SIM->get_param_num("loglevel", base)->set(0); + } + } + BX_SB16_THIS midimode = SIM->get_param_num("midimode", base)->get(); + BX_SB16_THIS wavemode = SIM->get_param_num("wavemode", base)->get(); + BX_SB16_THIS dmatimer = SIM->get_param_num("dmatimer", base)->get(); + BX_SB16_THIS loglevel = SIM->get_param_num("loglevel", base)->get(); + + // let the output functions initialize + DEV_sound_init_module("default", &BX_SB16_OUTPUT, BX_SB16_THISP); + + if (BX_SB16_OUTPUT == NULL) + { + writelog(MIDILOG(2), "Couldn't initialize output devices. Output disabled."); + BX_SB16_THIS midimode = 0; + BX_SB16_THIS wavemode = 0; + } + + DSP.dma.chunk = new Bit8u[BX_SOUND_OUTPUT_WAVEPACKETSIZE]; + DSP.dma.chunkindex = 0; + DSP.outputinit = 0; + MPU.outputinit = 0; + + if (DSP.dma.chunk == NULL) + { + writelog(WAVELOG(2), "Couldn't allocate wave buffer - wave output disabled."); + BX_SB16_THIS wavemode = 0; + } + + BX_INFO(("midi=%d,%s wave=%d,%s log=%d,%s dmatimer=%d", + BX_SB16_THIS midimode, MIGHT_BE_NULL(SIM->get_param_string("midifile", base)->getptr()), + BX_SB16_THIS wavemode, MIGHT_BE_NULL(SIM->get_param_string("wavefile", base)->getptr()), + BX_SB16_THIS loglevel, MIGHT_BE_NULL(SIM->get_param_string("logfile", base)->getptr()), + BX_SB16_THIS dmatimer)); + + // allocate the FIFO buffers - except for the MPUMIDICMD buffer + // these sizes are generous, 16 or 8 would probably be sufficient + MPU.datain.init((int) 64); // the input + MPU.dataout.init((int) 64); // and output + MPU.cmd.init((int) 64); // and command buffers + MPU.midicmd.init((int) 256); // and the midi command buffer (note- large SYSEX'es have to fit!) + DSP.datain.init((int) 64); // the DSP input + DSP.dataout.init((int) 64); // and output buffers + EMUL.datain.init((int) 64); // the emulator ports + EMUL.dataout.init((int) 64); // for changing emulator settings + + // reset all parts of the hardware by + // triggering their reset functions + + // reset the Emulator port + emul_write(0x00); + + // reset the MPU401 + mpu_command(0xff); + MPU.last_delta_time = 0xffffffff; + + // reset the DSP + DSP.dma.highspeed = 0; + DSP.dma.mode = 0; + DSP.irqpending = 0; + DSP.midiuartmode = 0; + DSP.resetport = 1; // so that one call to dsp_reset is sufficient + dsp_reset(0); // (reset is 1 to 0 transition) + DSP.testreg = 0; + + BX_SB16_IRQ = -1; // will be initialized later by the mixer reset + + for (i=0; iget_param_num(BXPN_SB16_DMATIMER)->set_handler(sb16_param_handler); + SIM->get_param_num(BXPN_SB16_DMATIMER)->set_runtime_param(1); + SIM->get_param_num(BXPN_SB16_LOGLEVEL)->set_handler(sb16_param_handler); + SIM->get_param_num(BXPN_SB16_LOGLEVEL)->set_runtime_param(1); +} + +void bx_sb16_c::reset(unsigned type) +{ +} + +void bx_sb16_c::register_state(void) +{ + unsigned i, j; + char name[8]; + bx_list_c *chip, *ins_map, *item, *patch; + + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "sb16", "SB16 State", 8); + bx_list_c *mpu = new bx_list_c(list, "mpu", 8); + new bx_shadow_bool_c(mpu, "uartmode", &MPU.uartmode); + new bx_shadow_bool_c(mpu, "irqpending", &MPU.irqpending); + new bx_shadow_bool_c(mpu, "forceuartmode", &MPU.forceuartmode); + new bx_shadow_bool_c(mpu, "singlecommand", &MPU.singlecommand); + new bx_shadow_bool_c(mpu, "outputinit", &MPU.outputinit); + new bx_shadow_num_c(mpu, "current_timer", &MPU.current_timer); + new bx_shadow_num_c(mpu, "last_delta_time", &MPU.last_delta_time); + bx_list_c *patchtbl = new bx_list_c(mpu, "patchtable", BX_SB16_PATCHTABLESIZE); + for (i=0; impu401.current_timer++; +} + +void bx_sb16_c::dsp_dmatimer(void *this_ptr) +{ + bx_sb16_c *This = (bx_sb16_c *) this_ptr; + + // raise the DRQ line. It is then lowered by dsp_getsamplebyte() + // when the next byte has been received. + // However, don't do this if the next byte/word will fill up the + // output buffer and the output functions are not ready yet. + + if ((BX_SB16_THIS wavemode != 1) || + ((This->dsp.dma.chunkindex + 1 < BX_SOUND_OUTPUT_WAVEPACKETSIZE) && + (This->dsp.dma.count > 0)) || + (BX_SB16_OUTPUT->waveready() == BX_SOUND_OUTPUT_OK)) { + if ((DSP.dma.bits == 8) || (BX_SB16_DMAH == 0)) { + DEV_dma_set_drq(BX_SB16_DMAL, 1); + } else { + DEV_dma_set_drq(BX_SB16_DMAH, 1); + } + } +} + +void bx_sb16_c::opl_timer (void *this_ptr) +{ + ((bx_sb16_c *) this_ptr)->opl_timerevent(); +} + +// the various IO handlers + +// The DSP/FM music part + +// dsp_reset() resets the DSP after the sequence 1/0. Returns +// 0xaa on the data port +void bx_sb16_c::dsp_reset(Bit32u value) +{ + writelog(WAVELOG(4), "DSP Reset port write value %x", value); + + // just abort high speed mode if it is set + if (DSP.dma.highspeed != 0) + { + DSP.dma.highspeed = 0; + writelog(WAVELOG(4), "High speed mode aborted"); + return; + } + + if ((DSP.resetport == 1) && (value == 0)) + { + // 1-0 sequences to reset port, do one of the following: + // if in UART MIDI mode, abort it, don't reset + // if in Highspeed mode (not SB16!), abort it, don't reset + // otherwise reset + + if (DSP.midiuartmode != 0) + { // abort UART MIDI mode + DSP.midiuartmode = 0; + writelog(MIDILOG(4), "DSP UART MIDI mode aborted"); + return; + } + + // do the reset + writelog(WAVELOG(4), "DSP resetting..."); + + if (DSP.irqpending != 0) + { + DEV_pic_lower_irq(BX_SB16_IRQ); + writelog(WAVELOG(4), "DSP reset: IRQ untriggered"); + } + if (DSP.dma.mode != 0) + { + writelog(WAVELOG(4), "DSP reset: DMA aborted"); + DSP.dma.mode = 1; // no auto init anymore + dsp_dmadone(); + } + + DSP.resetport = 0; + DSP.speaker = 0; + DSP.irqpending = 0; + DSP.midiuartmode = 0; + DSP.prostereo = 0; + + DSP.dma.mode = 0; + DSP.dma.fifo = 0; + DSP.dma.output = 0; + DSP.dma.stereo = 0; + DSP.dma.issigned = 0; + DSP.dma.count = 0; + DSP.dma.highspeed = 0; + DSP.dma.chunkindex = 0; + + DSP.dataout.reset(); // clear the buffers + DSP.datain.reset(); + + DSP.dataout.put(0xaa); // acknowledge the reset + } + else + DSP.resetport = value; +} + +// dsp_dataread() reads the data port of the DSP +Bit32u bx_sb16_c::dsp_dataread() +{ + Bit8u value = 0xff; + + // if we are in MIDI UART mode, call the mpu401 part instead + if (DSP.midiuartmode != 0) + value = mpu_dataread(); + else + { + // default behaviour: if none available, return last byte again + // if (DSP.dataout.empty() == 0) + DSP.dataout.get(&value); + } + + writelog(WAVELOG(4), "DSP Data port read, result = %x", value); + + return(value); +} + +// dsp_datawrite() writes a command or data byte to the data port +void bx_sb16_c::dsp_datawrite(Bit32u value) +{ + int bytesneeded; + Bit8u index = 0, mode = 0, value8 = 0; + Bit16u length = 0; + + writelog(WAVELOG(4), "DSP Data port write, value %x", value); + + // in high speed mode, any data passed to DSP is a sample + if (DSP.dma.highspeed != 0) + { + dsp_getsamplebyte(value); + return; + } + + // route information to mpu401 part if in MIDI UART mode + if (DSP.midiuartmode != 0) + { + mpu_datawrite(value); + return; + } + + if (DSP.datain.hascommand() == 1) // already a command pending, add to argument list + { + if (DSP.datain.put(value) == 0) + { + writelog(WAVELOG(3), "DSP command buffer overflow for command %02x", + DSP.datain.currentcommand()); + } + } + else // no command pending, set one up + { + bytesneeded = 0; // find out how many arguments the command takes + switch (value) + { // all fallbacks intended! + case 0x04: + case 0x0f: + case 0x10: + case 0x40: + case 0x38: + case 0xe0: + case 0xe4: + case 0xf9: + bytesneeded = 1; + break; + case 0x05: + case 0x0e: + case 0x14: + case 0x16: + case 0x17: + case 0x41: + case 0x42: + case 0x48: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x80: + bytesneeded = 2; + break; + // 0xb0 ... 0xbf: + case 0xb0: + case 0xb1: + case 0xb2: + case 0xb3: + case 0xb4: + case 0xb5: + case 0xb6: + case 0xb7: + case 0xb8: + case 0xb9: + case 0xba: + case 0xbb: + case 0xbc: + case 0xbd: + case 0xbe: + case 0xbf: + + // 0xc0 ... 0xcf: + case 0xc0: + case 0xc1: + case 0xc2: + case 0xc3: + case 0xc4: + case 0xc5: + case 0xc6: + case 0xc7: + case 0xc8: + case 0xc9: + case 0xca: + case 0xcb: + case 0xcc: + case 0xcd: + case 0xce: + case 0xcf: + bytesneeded = 3; + break; + } + DSP.datain.newcommand(value, bytesneeded); + } + + if (DSP.datain.commanddone() == 1) // command is complete, process it + { + writelog(WAVELOG(4), "DSP command %x with %d arg bytes", + DSP.datain.currentcommand(), DSP.datain.bytes()); + + switch (DSP.datain.currentcommand()) + { + // DSP commands - comments are the parameters for + // this command, and/or the output + + // ASP commands (Advanced Signal Processor) + // undocumented (?), just from looking what an SB16 does + case 0x04: + DSP.datain.get(&value8); + break; + + case 0x05: + DSP.datain.get(&value8); + DSP.datain.get(&value8); + break; + + case 0x0e: + DSP.datain.get(&index); + DSP.datain.get(&value8); + BX_SB16_THIS csp_reg[index] = value; + break; + + case 0x0f: + DSP.datain.get(&index); + DSP.dataout.put(BX_SB16_THIS csp_reg[index]); + break; + + // direct mode DAC + case 0x10: + // 1: 8bit sample + DSP.datain.get(&value8); // sample is ignored + break; + + // uncomp'd, normal DAC DMA + case 0x14: + // 1,2: lo(length) hi(length) + DSP.datain.getw(&length); + dsp_dma(0xc0, 0x00, length, 0); + break; + + // 2-bit comp'd, normal DAC DMA, no ref byte + case 0x16: + // 1,2: lo(length) hi(length) + DSP.datain.getw(&length); + dsp_dma(0xc0, 0x00, length, 2); + break; + + // 2-bit comp'd, normal DAC DMA, 1 ref byte + case 0x17: + // 1,2: lo(length) hi(length) + DSP.datain.getw(&length); + dsp_dma(0xc0, 0x00, length, 2|8); + break; + + // uncomp'd, auto DAC DMA + case 0x1c: + // none + dsp_dma(0xc4, 0x00, DSP.dma.blocklength, 0); + break; + + // 2-bit comp'd, auto DAC DMA, 1 ref byte + case 0x1f: + // none + dsp_dma(0xc4, 0x00, DSP.dma.blocklength, 2|8); + break; + + // direct mode ADC + case 0x20: + // o1: 8bit sample + DSP.dataout.put(0x80); // put a silence, for now. + break; + + // uncomp'd, normal ADC DMA + case 0x24: + // 1,2: lo(length) hi(length) + DSP.datain.getw(&length); + dsp_dma(0xc8, 0x00, length, 0); + break; + + // uncomp'd, auto ADC DMA + case 0x2c: + // none + dsp_dma(0xcc, 0x00, DSP.dma.blocklength, 0); + break; + + // ? polling mode MIDI input + case 0x30: + break; + + // ? interrupt mode MIDI input + case 0x31: + break; + + // 0x34..0x37: UART mode MIDI output + case 0x34: + + // UART mode MIDI input/output + case 0x35: + + // UART polling mode MIDI IO with time stamp + case 0x36: + + // UART interrupt mode MIDI IO with time stamp + case 0x37: + // Fallbacks intended - all set the midi uart mode + DSP.midiuartmode = 1; + break; + + // MIDI output + case 0x38: + DSP.datain.get(&value8); + // route to mpu401 part + mpu_datawrite(value8); + break; + + // set time constant + case 0x40: + // 1: timeconstant + DSP.datain.get(&value8); + DSP.dma.timeconstant = value8 << 8; + DSP.dma.samplerate = (Bit32u) 256000000L / ((Bit32u) 65536L - (Bit32u) DSP.dma.timeconstant); + break; + + // set samplerate for input + case 0x41: + // (fallback intended) + + // set samplerate for output + case 0x42: + // 1,2: hi(frq) lo(frq) + DSP.datain.getw1(&(DSP.dma.samplerate)); + DSP.dma.timeconstant = 65536 - (Bit32u) 256000000 / (Bit32u) DSP.dma.samplerate; + break; + + // set block length + case 0x48: + // 1,2: lo(blk len) hi(blk len) + DSP.datain.getw(&(DSP.dma.blocklength)); + break; + + // 4-bit comp'd, normal DAC DMA, no ref byte + case 0x74: + // 1,2: lo(length) hi(length) + DSP.datain.getw(&length); + dsp_dma(0xc0, 0x00, length, 4); + break; + + // 4-bit comp'd, normal DAC DMA, 1 ref byte + case 0x75: + // 1,2: lo(length) hi(length) + DSP.datain.getw(&length); + dsp_dma(0xc0, 0x00, length, 4|8); + break; + + // 3-bit comp'd, normal DAC DMA, no ref byte + case 0x76: + // 1,2: lo(length) hi(length) + DSP.datain.getw(&length); + dsp_dma(0xc0, 0x00, length, 3); + break; + + // 3-bit comp'd, normal DAC DMA, 1 ref byte + case 0x77: + // 1,2: lo(length) hi(length) + DSP.datain.getw(&length); + dsp_dma(0xc0, 0x00, length, 3|8); + break; + + // 4-bit comp'd, auto DAC DMA, 1 ref byte + case 0x7d: + // none + dsp_dma(0xc4, 0x00, DSP.dma.blocklength, 4|8); + break; + + // 3-bit comp'd, auto DAC DMA, 1 ref byte + case 0x7f: + // none + dsp_dma(0xc4, 0x00, DSP.dma.blocklength, 3|8); + break; + + // silence period + case 0x80: + // 1,2: lo(silence) hi(silence) (len in samples) + DSP.datain.getw(&length); + // only handled for VOC output so far + if (BX_SB16_THIS wavemode == 2) + { + Bit8u temparray[3] = { length & 0xff, length >> 8, DSP.dma.timeconstant >> 8 }; + writevocblock(3, 3, temparray, 0, NULL); + } + break; + + // 8-bit auto DAC DMA, highspeed + case 0x90: + //none + dsp_dma(0xc4, 0x00, DSP.dma.blocklength, 16); + break; + + // 8-bit normal DAC DMA, highspeed + case 0x91: + //none + dsp_dma(0xc0, 0x00, DSP.dma.blocklength, 16); + break; + + // 8-bit auto ADC DMA, highspeed + case 0x98: + //none + dsp_dma(0xcc, 0x00, DSP.dma.blocklength, 16); + break; + + case 0x99: // 8-bit normal DMA + //none + dsp_dma(0xc8, 0x00, DSP.dma.blocklength, 16); + break; + + // switch to mono for SBPro DAC/ADC + case 0xa0: + // none + DSP.prostereo = 1; + break; + + // switch to stereo for SBPro DAC/ADC + case 0xa8: + //// none + DSP.prostereo = 2; + break; + + // 0xb0 ... 0xbf: + // 16 bit DAC/ADC DMA, general commands + // fallback intended + case 0xb0: + case 0xb1: + case 0xb2: + case 0xb3: + case 0xb4: + case 0xb5: + case 0xb6: + case 0xb7: + case 0xb8: + case 0xb9: + case 0xba: + case 0xbb: + case 0xbc: + case 0xbd: + case 0xbe: + case 0xbf: + + // 0xc0 ... 0xcf: + // 8 bit DAC/ADC DMA, general commands + case 0xc0: + case 0xc1: + case 0xc2: + case 0xc3: + case 0xc4: + case 0xc5: + case 0xc6: + case 0xc7: + case 0xc8: + case 0xc9: + case 0xca: + case 0xcb: + case 0xcc: + case 0xcd: + case 0xce: + case 0xcf: + DSP.datain.get(&mode); + DSP.datain.getw(&length); + dsp_dma(DSP.datain.currentcommand(), mode, length, 0); + break; + + // pause 8 bit DMA transfer + case 0xd0: + // none + if (DSP.dma.mode != 0) + dsp_disabledma(); + break; + + // speaker on + case 0xd1: + // none + DSP.speaker = 1; + break; + + // speaker off + case 0xd3: + // none + DSP.speaker = 0; + break; + + // continue 8 bit DMA, see 0xd0 + case 0xd4: + // none + if (DSP.dma.mode != 0) + dsp_enabledma(); + break; + + // pause 16 bit DMA + case 0xd5: + // none + if (DSP.dma.mode != 0) + dsp_disabledma(); + break; + + // continue 16 bit DMA, see 0xd5 + case 0xd6: + // none + if (DSP.dma.mode != 0) + dsp_enabledma(); + break; + + // read speaker on/off (out ff=on, 00=off) + case 0xd8: + // none, o1: speaker; ff/00 + DSP.dataout.put((DSP.speaker == 1)?0xff:0x00); + break; + + // stop 16 bit auto DMA + case 0xd9: + // none + if (DSP.dma.mode != 0) + { + DSP.dma.mode = 1; // no auto init anymore + dsp_dmadone(); + } + break; + + // stop 8 bit auto DMA + case 0xda: + // none + if (DSP.dma.mode != 0) + { + DSP.dma.mode = 1; // no auto init anymore + dsp_dmadone(); + } + break; + + // DSP identification + case 0xe0: + DSP.datain.get(&value8); + DSP.dataout.put(~value8); + break; + + // get version, out 2 bytes (major, minor) + case 0xe1: + // none, o1/2: version major.minor + DSP.dataout.put(4); + if (DSP.dataout.put(5) == 0) + { + writelog(WAVELOG(3), "DSP version couldn't be written - buffer overflow"); + } + break; + + case 0xe3: + // none, output: Copyright string + // the Windows driver needs the exact text, otherwise it + // won't load. Same for diagnose.exe + DSP.dataout.puts("COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992."); + DSP.dataout.put(0); // need extra string end + break; + + // write test register + case 0xe4: + DSP.datain.get(&DSP.testreg); + break; + + // read test register + case 0xe8: + DSP.dataout.put(DSP.testreg); + break; + + // Trigger 8-bit IRQ + case 0xf2: + DSP.dataout.put(0xaa); + DSP.irqpending = 1; + MIXER.reg[0x82] |= 1; // reg 82 shows the kind of IRQ + DEV_pic_raise_irq(BX_SB16_IRQ); + break; + + // ??? - Win98 needs this + case 0xf9: + DSP.datain.get(&value8); + switch (value8) { + case 0x0e: + DSP.dataout.put(0xff); + break; + case 0x0f: + DSP.dataout.put(0x07); + break; + case 0x37: + DSP.dataout.put(0x38); + break; + default: + DSP.dataout.put(0x00); + } + break; + + // unknown command + default: + writelog(WAVELOG(3), "unknown DSP command %x, ignored", + DSP.datain.currentcommand()); + break; + } + DSP.datain.clearcommand(); + DSP.datain.flush(); + } +} + +// dsp_dma() initiates all kinds of dma transfers +void bx_sb16_c::dsp_dma(Bit8u command, Bit8u mode, Bit16u length, Bit8u comp) +{ + int ret; + bx_list_c *base; + + // command: 8bit, 16bit, in/out, single/auto, fifo + // mode: mono/stereo, signed/unsigned + // (for info on command and mode see sound blaster programmer's manual, + // cmds bx and cx) + // length: number of samples - not number of bytes + // comp: bit-coded are: type of compression; ref-byte; highspeed + // D0..D2: 0=none, 2,3,4 bits ADPCM + // D3: ref-byte + // D6: highspeed + + writelog(WAVELOG(4), "DMA initialized. Cmd %02x, mode %02x, length %d, comp %d", + command, mode, length, comp); + + if ((command >> 4) == 0xb) // 0xb? = 16 bit DMA + { + DSP.dma.bits = 16; + DSP.dma.bps = 2; + } + else // 0xc? = 8 bit DMA + { + DSP.dma.bits = 8; + DSP.dma.bps = 1; + } + + // Prevent division by zero in some instances + if (DSP.dma.samplerate == 0) + DSP.dma.samplerate= 10752; + command &= 0x0f; + DSP.dma.output = 1 - (command >> 3); // 1=output, 0=input + DSP.dma.mode = 1 + ((command >> 2) & 1); // 0=none, 1=normal, 2=auto + DSP.dma.fifo = (command >> 1) & 1; // ? not sure what this is + + DSP.dma.stereo = (mode >> 5) & 1; + + if (DSP.dma.stereo != 0) + DSP.dma.bps *= 2; + + DSP.dma.blocklength = length; + DSP.dma.issigned = (mode >> 4) & 1; + DSP.dma.highspeed = (comp >> 4) & 1; + + DSP.dma.chunkindex = 0; + DSP.dma.chunkcount = 0; + + Bit32u sampledatarate = (Bit32u) DSP.dma.samplerate * (Bit32u) DSP.dma.bps; + if ((DSP.dma.bits == 16) && (BX_SB16_DMAH != 0)) { + DSP.dma.count = (DSP.dma.blocklength + 1) * (DSP.dma.bps / 2) - 1; + DSP.dma.timer = BX_SB16_THIS dmatimer / (sampledatarate / 2); + } else { + DSP.dma.count = (DSP.dma.blocklength + 1) * DSP.dma.bps - 1; + DSP.dma.timer = BX_SB16_THIS dmatimer / sampledatarate; + } + + writelog(WAVELOG(5), "DMA is %db, %dHz, %s, %s, mode %d, %s, %s, %d bps, %d usec/DMA", + DSP.dma.bits, DSP.dma.samplerate, (DSP.dma.stereo != 0)?"stereo":"mono", + (DSP.dma.output == 1)?"output":"input", DSP.dma.mode, + (DSP.dma.issigned == 1)?"signed":"unsigned", + (DSP.dma.highspeed == 1)?"highspeed":"normal speed", + sampledatarate, DSP.dma.timer); + + DSP.dma.format = DSP.dma.issigned | ((comp & 7) << 1) | ((comp & 8) << 4); + + // write the output to the device/file + if (DSP.dma.output == 1) { + if (BX_SB16_THIS wavemode == 1) { + if (DSP.outputinit == 0) { + ret = BX_SB16_OUTPUT->openwaveoutput(SIM->get_param_string(BXPN_SB16_WAVEFILE)->getptr()); + if (ret != BX_SOUND_OUTPUT_OK) { + BX_SB16_THIS wavemode = 0; + writelog(WAVELOG(2), "Error: Could not open wave output device."); + } else { + DSP.outputinit = 1; + ret = BX_SB16_OUTPUT->startwaveplayback(DSP.dma.samplerate, DSP.dma.bits, DSP.dma.stereo, DSP.dma.format); + if (ret != BX_SOUND_OUTPUT_OK) { + BX_SB16_THIS wavemode = 0; + writelog(WAVELOG(2), "Error: Could not start wave playback."); + } + } + } + } else if ((BX_SB16_THIS wavemode == 2) || + (BX_SB16_THIS wavemode == 3)) { + base = (bx_list_c*) SIM->get_param(BXPN_SB16); + WAVEDATA = fopen(SIM->get_param_string("wavefile", base)->getptr(),"wb"); + if (WAVEDATA == NULL) { + writelog (WAVELOG(2), "Error opening file %s. Wavemode disabled.", + SIM->get_param_string("wavefile", base)->getptr()); + BX_SB16_THIS wavemode = 0; + } else if (BX_SB16_THIS wavemode == 2) { + initvocfile(); + } + } + } + + dsp_enabledma(); +} + + +// dsp_enabledma(): Start the DMA timer and thus the transfer + +void bx_sb16_c::dsp_enabledma() +{ + bx_pc_system.activate_timer(DSP.timer_handle, DSP.dma.timer, 1); +} + +// dsp_disabledma(): Stop the DMA timer and thus the transfer, but don't abort it +void bx_sb16_c::dsp_disabledma() +{ + bx_pc_system.deactivate_timer(DSP.timer_handle); +} + +// dsp_bufferstatus() checks if the DSP is ready for data/commands +Bit32u bx_sb16_c::dsp_bufferstatus() +{ + Bit32u result = 0x7f; + + // MSB set -> not ready for commands + if (DSP.datain.full() == 1) result |= 0x80; + + writelog(WAVELOG(4), "DSP Buffer status read, result %x", result); + + return(result); +} + +// dsp_status() checks if the DSP is ready to send data +Bit32u bx_sb16_c::dsp_status() +{ + Bit32u result = 0x7f; + + // read might be to acknowledge IRQ + if (DSP.irqpending != 0) + { + MIXER.reg[0x82] &= (~0x01); + writelog(WAVELOG(4), "8-bit DMA or SBMIDI IRQ acknowledged"); + if ((MIXER.reg[0x82] & 0x07) == 0) { + DSP.irqpending = 0; + DEV_pic_lower_irq(BX_SB16_IRQ); + } + } + + // if buffer is not empty, there is data to be read + if (DSP.dataout.empty() == 0) result |= 0x80; + + writelog(WAVELOG(4), "DSP output status read, result %x", result); + + return(result); +} + +// dsp_irq16ack() notifies that the 16bit DMA IRQ has been acknowledged +Bit32u bx_sb16_c::dsp_irq16ack() +{ + Bit32u result = 0xff; + + if (DSP.irqpending != 0) + { + MIXER.reg[0x82] &= (~0x02); + if ((MIXER.reg[0x82] & 0x07) == 0) { + DSP.irqpending = 0; + DEV_pic_lower_irq(BX_SB16_IRQ); + } + writelog(WAVELOG(4), "16-bit DMA IRQ acknowledged"); + } + else + writelog(WAVELOG(3), "16-bit DMA IRQ acknowledged but not active!"); + + return result; +} + + +// the DMA handlers + +// highlevel input and output handlers - rerouting to/from file,device + +// get a wave packet from the input device (not supported yet) +void bx_sb16_c::dsp_getwavepacket() +{ + writelog(WAVELOG(3), "DMA reads not supported. Returning silence."); + + // fill the buffer with silence. Watch for 16bit transfer and signed/unsigned + + // these are the two different bytes in 16bit transfer (both the same for 8bit) + Bit8u byteA, byteB; + + byteA = 0x00; // compatible with all signed transfers + byteB = 0x00; + + if (DSP.dma.issigned == 0) + byteB = 0x80; + + if (DSP.dma.bits == 8) + byteA = byteB; + + for (int i = 0; i < BX_SOUND_OUTPUT_WAVEPACKETSIZE; i++) + DSP.dma.chunk[i] = ((i & 1) == 0) ? byteA : byteB; + + DSP.dma.chunkcount = BX_SOUND_OUTPUT_WAVEPACKETSIZE; + DSP.dma.chunkindex = 0; +} + +// write a wave packet to the output device +void bx_sb16_c::dsp_sendwavepacket() +{ + switch (BX_SB16_THIS wavemode) + { + case 1: + BX_SB16_OUTPUT->sendwavepacket(DSP.dma.chunkindex, DSP.dma.chunk); + break; + case 3: + fwrite(DSP.dma.chunk, 1, DSP.dma.chunkindex, WAVEDATA); + break; + case 2: + Bit8u temparray[12] = + { DSP.dma.samplerate & 0xff, DSP.dma.samplerate >> 8, 0, 0, + DSP.dma.bits, DSP.dma.stereo + 1, 0, 0, 0, 0, 0, 0 }; + switch ((DSP.dma.format >> 1) & 7) + { + case 2: + temparray[7] = 3; + break; + case 3: + temparray[7] = 2; + break; + case 4: + temparray[7] = 1; + break; + } + if (DSP.dma.bits == 16) + temparray[7] = 4; + + writevocblock(9, 12, temparray, DSP.dma.chunkindex, DSP.dma.chunk); + break; + } + + DSP.dma.chunkindex = 0; +} + +// put a sample byte into the output buffer +void bx_sb16_c::dsp_getsamplebyte(Bit8u value) +{ + if (DSP.dma.chunkindex < BX_SOUND_OUTPUT_WAVEPACKETSIZE) + DSP.dma.chunk[DSP.dma.chunkindex++] = value; + + if (DSP.dma.chunkindex >= BX_SOUND_OUTPUT_WAVEPACKETSIZE) + dsp_sendwavepacket(); +} + +// read a sample byte from the input buffer +Bit8u bx_sb16_c::dsp_putsamplebyte() +{ + if (DSP.dma.chunkindex >= DSP.dma.chunkcount) + dsp_getwavepacket(); + + return DSP.dma.chunk[DSP.dma.chunkindex++]; +} + +// called when the last byte of a DMA transfer has been received/sent +void bx_sb16_c::dsp_dmadone() +{ + writelog(WAVELOG(4), "DMA transfer done, triggering IRQ"); + + if ((DSP.dma.output == 1) && (DSP.dma.mode != 2)) { + dsp_sendwavepacket(); // flush the output + + if (BX_SB16_THIS wavemode == 1) { + BX_SB16_OUTPUT->stopwaveplayback(); + } else if (BX_SB16_THIS wavemode != 0) { + fflush(WAVEDATA); + } + } + + // generate the appropriate IRQ + if (DSP.dma.bits == 8) + MIXER.reg[0x82] |= 1; + else + MIXER.reg[0x82] |= 2; + + DEV_pic_raise_irq(BX_SB16_IRQ); + DSP.irqpending = 1; + + // if auto-DMA, reinitialize + if (DSP.dma.mode == 2) + { + if ((DSP.dma.bits == 16) && (BX_SB16_DMAH != 0)) { + DSP.dma.count = (DSP.dma.blocklength + 1) * (DSP.dma.bps / 2) - 1; + } else { + DSP.dma.count = (DSP.dma.blocklength + 1) * DSP.dma.bps - 1; + } + writelog(WAVELOG(4), "auto-DMA reinitializing to length %d", DSP.dma.count); + } + else + { + DSP.dma.mode = 0; + dsp_disabledma(); + } +} + +// now the actual transfer routines, called by the DMA controller +// note that read = from application to soundcard (output), +// and write = from soundcard to application (input) +void bx_sb16_c::dma_read8(Bit8u *data_byte) +{ + DEV_dma_set_drq(BX_SB16_DMAL, 0); // the timer will raise it again + + if (DSP.dma.count % 100 == 0) // otherwise it's just too many lines of log + writelog(WAVELOG(5), "Received 8-bit DMA %2x, %d remaining ", + *data_byte, DSP.dma.count); + DSP.dma.count--; + + dsp_getsamplebyte(*data_byte); + + if (DSP.dma.count == 0xffff) // last byte received + dsp_dmadone(); +} + +void bx_sb16_c::dma_write8(Bit8u *data_byte) +{ + DEV_dma_set_drq(BX_SB16_DMAL, 0); // the timer will raise it again + + DSP.dma.count--; + + *data_byte = dsp_putsamplebyte(); + + if (DSP.dma.count % 100 == 0) // otherwise it's just too many lines of log + writelog(WAVELOG(5), "Sent 8-bit DMA %2x, %d remaining ", + *data_byte, DSP.dma.count); + + if (DSP.dma.count == 0xffff) // last byte sent + dsp_dmadone(); +} + +void bx_sb16_c::dma_read16(Bit16u *data_word) +{ + DEV_dma_set_drq(BX_SB16_DMAH, 0); // the timer will raise it again + + if (DSP.dma.count % 100 == 0) // otherwise it's just too many lines of log + writelog(WAVELOG(5), "Received 16-bit DMA %04x, %d remaining ", + *data_word, DSP.dma.count); + + DSP.dma.count--; + + dsp_getsamplebyte(*data_word & 0xff); + dsp_getsamplebyte(*data_word >> 8); + + if (DSP.dma.count == 0xffff) // last word received + dsp_dmadone(); +} + +void bx_sb16_c::dma_write16(Bit16u *data_word) +{ + Bit8u byte1, byte2; + + DEV_dma_set_drq(BX_SB16_DMAH, 0); // the timer will raise it again + + DSP.dma.count--; + + byte1 = dsp_putsamplebyte(); + byte2 = dsp_putsamplebyte(); + + // all input is in little endian + *data_word = byte1 | (byte2 << 8); + + if (DSP.dma.count % 100 == 0) // otherwise it's just too many lines of log + writelog(WAVELOG(5), "Sent 16-bit DMA %4x, %d remaining ", + *data_word, DSP.dma.count); + + if (DSP.dma.count == 0xffff) // last word sent + dsp_dmadone(); +} + +// the mixer, supported type is CT1745 (as in an SB16) +void bx_sb16_c::mixer_writedata(Bit32u value) +{ + int i; + + // do some action depending on what register was written + switch (MIXER.regindex) + { + case 0: // initialize mixer + writelog(BOTHLOG(4), "Initializing mixer..."); + MIXER.reg[0x04] = 0xcc; + MIXER.reg[0x0a] = 0x00; + MIXER.reg[0x22] = 0xcc; + MIXER.reg[0x26] = 0xcc; + MIXER.reg[0x28] = 0x00; + MIXER.reg[0x2e] = 0x00; + MIXER.reg[0x3c] = 0x1f; + MIXER.reg[0x3d] = 0x15; + MIXER.reg[0x3e] = 0x0b; + for (i=0x30; i<=0x35; i++) + MIXER.reg[i] = 0xc0; + for (i=0x36; i<=0x3b; i++) + MIXER.reg[i] = 0x00; + for (i=0x3f; i<=0x43; i++) + MIXER.reg[i] = 0x00; + for (i=0x44; i<=0x47; i++) + MIXER.reg[i] = 0x80; + + MIXER.regindex = 0; // next mixer register read is register 0 + return; + + case 0x04: // DAC level + MIXER.reg[0x32] = (value & 0xf0) | 0x08; + MIXER.reg[0x33] = ((value & 0x0f) << 4) | 0x08; + break; + + case 0x0a: // microphone level + MIXER.reg[0x3a] = (value << 5) | 0x18; + break; + + case 0x22: // master volume + MIXER.reg[0x30] = (value & 0xf0) | 0x08; + MIXER.reg[0x31] = ((value & 0x0f) << 4) | 0x08; + break; + + case 0x26: // FM level + MIXER.reg[0x34] = (value & 0xf0) | 0x08; + MIXER.reg[0x35] = ((value & 0x0f) << 4) | 0x08; + break; + + case 0x28: // CD audio level + MIXER.reg[0x36] = (value & 0xf0) | 0x08; + MIXER.reg[0x37] = ((value & 0x0f) << 4) | 0x08; + break; + + case 0x2e: // line in level + MIXER.reg[0x38] = (value & 0xf0) | 0x08; + MIXER.reg[0x39] = ((value & 0x0f) << 4) | 0x08; + break; + + case 0x30: // master volume left + MIXER.reg[0x22] &= 0x0f; + MIXER.reg[0x22] |= (value & 0xf0); + break; + + case 0x31: // master volume right + MIXER.reg[0x22] &= 0xf0; + MIXER.reg[0x22] |= (value >> 4); + break; + + case 0x32: // DAC level left + MIXER.reg[0x04] &= 0x0f; + MIXER.reg[0x04] |= (value & 0xf0); + break; + + case 0x33: // DAC level right + MIXER.reg[0x04] &= 0xf0; + MIXER.reg[0x04] |= (value >> 4); + break; + + case 0x34: // FM level left + MIXER.reg[0x26] &= 0x0f; + MIXER.reg[0x26] |= (value & 0xf0); + break; + + case 0x35: // FM level right + MIXER.reg[0x26] &= 0xf0; + MIXER.reg[0x26] |= (value >> 4); + break; + + case 0x36: // CD audio level left + MIXER.reg[0x28] &= 0x0f; + MIXER.reg[0x28] |= (value & 0xf0); + break; + + case 0x37: // CD audio level right + MIXER.reg[0x28] &= 0xf0; + MIXER.reg[0x28] |= (value >> 4); + break; + + case 0x38: // line in level left + MIXER.reg[0x2e] &= 0x0f; + MIXER.reg[0x2e] |= (value & 0xf0); + break; + + case 0x39: // line in level right + MIXER.reg[0x2e] &= 0xf0; + MIXER.reg[0x2e] |= (value >> 4); + break; + + case 0x3a: // microphone level + MIXER.reg[0x0a] = (value >> 5); + break; + + case 0x3b: + case 0x3c: + case 0x3d: + case 0x3e: + case 0x3f: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + break; + + case 0x80: // IRQ mask + case 0x81: // DMA mask + MIXER.reg[MIXER.regindex] = value; + set_irq_dma(); // both 0x80 and 0x81 handled + return; + + default: // ignore read-only registers + return; + } + + // store the value + MIXER.reg[MIXER.regindex] = value; + + writelog(BOTHLOG(4), "mixer register %02x set to %02x", + MIXER.regindex, MIXER.reg[MIXER.regindex]); +} + +Bit32u bx_sb16_c::mixer_readdata() +{ + writelog(BOTHLOG(4), "read from mixer register %02x returns %02x", + MIXER.regindex, MIXER.reg[MIXER.regindex]); + return(MIXER.reg[MIXER.regindex]); +} + +void bx_sb16_c::mixer_writeregister(Bit32u value) +{ + MIXER.regindex = value; +} + +void bx_sb16_c::set_irq_dma() +{ + static bx_bool isInitialized=0; + int newirq; + int oldDMA8, oldDMA16; + + // set the IRQ according to the value in mixer register 0x80 + switch (MIXER.reg[0x80]) + { + case 1: + newirq = 2; + break; + case 2: + newirq = 5; + break; + case 4: + newirq = 7; + break; + case 8: + newirq = 10; + break; + default: + newirq = 5; + writelog(BOTHLOG(3), "Bad value %02x in mixer register 0x80. IRQ set to %d", + MIXER.reg[0x80], newirq); + MIXER.reg[0x80] = 2; + } + if (newirq != BX_SB16_IRQ) // a different IRQ was set + { + if (BX_SB16_IRQ > 0) + DEV_unregister_irq(BX_SB16_IRQ, "SB16"); + + BX_SB16_IRQ = newirq; + DEV_register_irq(BX_SB16_IRQ, "SB16"); + } + + // set the 8 bit DMA + oldDMA8=BX_SB16_DMAL; + switch (MIXER.reg[0x81] & 0x0f) + { + case 1: + BX_SB16_DMAL = 0; + break; + case 2: + BX_SB16_DMAL = 1; + break; + case 8: + BX_SB16_DMAL = 3; + break; + default: + BX_SB16_DMAL = 1; + writelog(BOTHLOG(3), "Bad value %02x in mixer register 0x81. DMA8 set to %d", + MIXER.reg[0x81], BX_SB16_DMAL); + MIXER.reg[0x81] &= (~0x0f); + MIXER.reg[0x81] |= (1 << BX_SB16_DMAL); + } + + // Unregister the previous DMA if initialized + if ((isInitialized) && (oldDMA8 != BX_SB16_DMAL)) + DEV_dma_unregister_channel(oldDMA8); + + // And register the new 8bits DMA Channel + if ((!isInitialized) || (oldDMA8 != BX_SB16_DMAL)) + DEV_dma_register_8bit_channel(BX_SB16_DMAL, dma_read8, dma_write8, "SB16"); + + // and the 16 bit DMA + oldDMA16=BX_SB16_DMAH; + switch (MIXER.reg[0x81] >> 4) + { + case 0: + BX_SB16_DMAH = 0; // no 16-bit DMA + break; + case 2: + BX_SB16_DMAH = 5; + break; + case 4: + BX_SB16_DMAH = 6; + break; + case 8: + BX_SB16_DMAH = 7; + break; + default: + BX_SB16_DMAH = 0; + writelog(BOTHLOG(3), "Bad value %02x in mixer register 0x81. DMA16 set to %d", + MIXER.reg[0x81], BX_SB16_DMAH); + MIXER.reg[0x81] &= (~0xf0); + // MIXER.reg[0x81] |= (1 << BX_SB16_DMAH); + // no default 16 bit channel! + } + + // Unregister the previous DMA if initialized + if ((isInitialized) && (oldDMA16 != 0) && (oldDMA16 != BX_SB16_DMAH)) + DEV_dma_unregister_channel(oldDMA16); + + // And register the new 16bits DMA Channel + if ((BX_SB16_DMAH != 0) && (oldDMA16 != BX_SB16_DMAH)) + DEV_dma_register_16bit_channel(BX_SB16_DMAH, dma_read16, dma_write16, "SB16"); + + // If not already initialized + if(!isInitialized) { + isInitialized=1; + } else { + writelog(BOTHLOG(1), "Resources set to I%d D%d H%d", + BX_SB16_IRQ, BX_SB16_DMAL, BX_SB16_DMAH); + } +} + + +// now the MPU 401 part + +// the MPU 401 status port shows if input or output are ready +// Note that the bits are inverse to their meaning + +Bit32u bx_sb16_c::mpu_status() +{ + Bit32u result = 0; + + if ((MPU.datain.full() == 1) || + ((BX_SB16_THIS midimode == 1) && + (BX_SB16_OUTPUT->midiready() == BX_SOUND_OUTPUT_ERR))) + result |= 0x40; // output not ready + if (MPU.dataout.empty() == 1) + result |= 0x80; // no input available + + writelog(MIDILOG(4), "MPU status port, result %02x", result); + + return(result); +} + +// the MPU 401 command port + +void bx_sb16_c::mpu_command(Bit32u value) +{ + int i; + int bytesneeded; + + if (MPU.cmd.hascommand() == 1) // already a command pending, abort that one + { + if ((MPU.cmd.currentcommand() != value) || + (MPU.cmd.commanddone() == 0)) + // it's a different command, or the old one isn't done yet, abort it + { + MPU.cmd.clearcommand(); + MPU.cmd.flush(); + } + + // if it's the same one, and we just completed the argument list, + // we leave it as it is and process it here + } + + if (MPU.cmd.hascommand() == 0) // no command pending, set one up + { + bytesneeded = 0; + if ((value >> 4) == 14) bytesneeded = 1; + MPU.cmd.newcommand(value, bytesneeded); + } + + if (MPU.cmd.commanddone() == 1) // command is complete, process it + { + switch (MPU.cmd.currentcommand()) + { + case 0x3f: + writelog(MIDILOG(5), "MPU cmd: UART mode on"); + MPU.uartmode=1; + MPU.irqpending=1; + MPU.singlecommand=0; + if (BX_SB16_IRQMPU != -1) { + MIXER.reg[0x82] |= 4; + DEV_pic_raise_irq(BX_SB16_IRQMPU); + } + break; + + case 0xff: + writelog(MIDILOG(4), "MPU cmd: Master reset of device"); + MPU.uartmode=MPU.forceuartmode; + MPU.singlecommand=0; + for (i=0; i<16; i++) + { + MPU.banklsb[i] = 0; + MPU.bankmsb[i] = 0; + MPU.program[i] = 0; + } + MPU.cmd.reset(); + MPU.dataout.reset(); + MPU.datain.reset(); + MPU.midicmd.reset(); + + /* + if (BX_SB16_IRQ != -1) { + MIXER.reg[0x82] |= 4; + BX_SB16_THIS devices->pic->trigger_irq(BX_SB16_IRQ); + } + */ + break; + case 0xd0: // d0 and df: prefix for midi command + case 0xdf: // like uart mode, but only a single command + MPU.singlecommand = 1; + writelog(MIDILOG(4), "MPU: prefix %02x received", + MPU.cmd.currentcommand()); + break; + default: + writelog(MIDILOG(3), "MPU cmd: unknown command %02x ignored", + MPU.cmd.currentcommand()); + break; + } + + // Need to put an MPU_ACK into the data port if command successful + // we'll fake it even if we didn't process the command, so as to + // allow detection of the MPU 401. + if (MPU.dataout.put(0xfe) == 0) + writelog(MIDILOG(3), "MPU_ACK error - output buffer full"); + MPU.cmd.clearcommand(); // clear the command from the buffer + } +} + + +// MPU 401 data port/read: contains an MPU_ACK after receiving a command +// Will contain other data as well when other than UART mode is supported + +Bit32u bx_sb16_c::mpu_dataread() +{ + Bit8u res8bit; + Bit32u result; + + // also acknowledge IRQ? + if (MPU.irqpending != 0) + { + MPU.irqpending = 0; + MIXER.reg[0x82] &= (~4); + if ((MIXER.reg[0x82] & 0x07) == 0) + DEV_pic_lower_irq(BX_SB16_IRQMPU); + writelog(MIDILOG(4), "MPU IRQ acknowledged"); + } + + if (MPU.dataout.get(&res8bit) == 0) { + writelog(MIDILOG(3), "MPU data port not ready - no data in buffer"); + result = 0xff; + } + else + result = (Bit32u) res8bit; + + writelog(MIDILOG(4), "MPU data port, result %02x", result); + + return(result); +} + + +// MPU 401 data port/write: This is where the midi stream comes from, +// as well as arguments to any pending command + +void bx_sb16_c::mpu_datawrite(Bit32u value) +{ + writelog(MIDILOG(4), "write to MPU data port, value %02x", value); + + if (MPU.cmd.hascommand() == 1) + { // there is a command pending, add arguments to it + if (MPU.cmd.put(value) == 0) + writelog(MIDILOG(3), "MPU Command arguments too long - buffer full"); + if (MPU.cmd.commanddone() == 1) + BX_SB16_THIS mpu_command(MPU.cmd.currentcommand()); + } + else if ((MPU.uartmode == 0) && (MPU.singlecommand == 0)) + { + // Hm? No UART mode, but still data? Maybe should send it + // to the command port... Only SBMPU401.EXE does this... + writelog(MIDILOG(4), "MPU Data %02x received but no UART mode. Assuming it's a command.", value); + mpu_command(value); + return; + } + else // no MPU command pending, in UART mode, this has to be midi data + mpu_mididata(value); +} + +// A byte of midi data has been received +void bx_sb16_c::mpu_mididata(Bit32u value) +{ + // first, find out if it is a midi command or midi data + bx_bool ismidicommand = 0; + if (value >= 0x80) + { // bit 8 usually denotes a midi command... + ismidicommand = 1; + if ((value == 0xf7) && (MPU.midicmd.currentcommand() == 0xf0)) + // ...except if it is a continuing SYSEX message, then it just + // denotes the end of a SYSEX chunk, not the start of a message + { + ismidicommand = 0; // first, it's not a command + MPU.midicmd.newcommand(MPU.midicmd.currentcommand(), + MPU.midicmd.bytes()); + // Then, set needed bytes to current buffer + // because we didn't know the length before + } + } + + if (ismidicommand == 1) + { // this is a command, check if an old one is pending + if (MPU.midicmd.hascommand() == 1) + { + writelog(MIDILOG(3), "Midi command %02x incomplete, has %d of %d bytes.", + MPU.midicmd.currentcommand(), MPU.midicmd.bytes(), + MPU.midicmd.commandbytes()); + // write as much as we can. Should we do this? + processmidicommand(0); + // clear the pending command + MPU.midicmd.clearcommand(); + MPU.midicmd.flush(); + } + + // find the number of arguments to the command + static const signed eventlength[] = { 2, 2, 2, 2, 1, 1, 2, 255}; + // note - length 255 commands have unknown length + MPU.midicmd.newcommand(value, eventlength[(value & 0x70) >> 4]); + } + else // no command, just arguments to the old command + { + if (MPU.midicmd.hascommand() == 0) + { // no command pending, ignore the data + writelog(MIDILOG(3), "Midi data %02x received, but no command pending?", value); + return; + } + + // just some data to the command + if (MPU.midicmd.put(value) == 0) + writelog(MIDILOG(3), "Midi buffer overflow!"); + if (MPU.midicmd.commanddone() == 1) + { + // the command is complete, process it + writelog(MIDILOG(5), "Midi command %02x complete, has %d bytes.", + MPU.midicmd.currentcommand(), MPU.midicmd.bytes()); + processmidicommand(0); + // and remove the command from the buffer + MPU.midicmd.clearcommand(); + MPU.midicmd.flush(); + } + } +} + +// The emulator port/read: See if commands were successful + +Bit32u bx_sb16_c::emul_read() +{ + Bit8u res8bit; + Bit32u result; + + if (EMUL.datain.get(&res8bit) == 0) + { + writelog(3, "emulator port not ready - no data in buffer"); + result = 0x00; + } + else result = (Bit32u) res8bit; + + writelog(4, "emulator port, result %02x", result); + + return(result); +} + +// Emulator port/write: Changing instrument mapping etc. + +void bx_sb16_c::emul_write(Bit32u value) +{ + Bit8u value8 = 0; + + writelog(4, "write to emulator port, value %02x", value); + + if (EMUL.dataout.hascommand() == 0) // no command pending, set it up + { + static signed char cmdlength[] = { 0, 0, 4, 2, 6, 1, 0, 0, 1, 1, 0, 1}; + if (value > 11) + { + writelog(3, "emulator command %02x unknown, ignored.", value); + return; + } + writelog(5, "emulator command %02x, needs %d arguments", + value, cmdlength[value]); + EMUL.dataout.newcommand(value, cmdlength[value]); + EMUL.datain.reset(); + EMUL.datain.put(0xfe); + } + else + EMUL.dataout.put(value); // otherwise just add data + + if (EMUL.dataout.commanddone() == 1) + { // process the command + writelog(4, "executing emulator command %02x with %d arguments", + EMUL.dataout.currentcommand(), EMUL.dataout.bytes()); + switch (EMUL.dataout.currentcommand()) + { + case 0: // reinit of emulator + writelog(4, "Emulator reinitialized"); + EMUL.remaps = 0; + EMUL.dataout.reset(); + EMUL.datain.reset(); + EMUL.datain.put(0xfe); + break; + case 1: // dummy command to reset state of emulator port + // just give a few times to end any commands + break; + case 2: // map bank + if (EMUL.remaps >= BX_SB16_PATCHTABLESIZE) break; + EMUL.dataout.get (& (EMUL.remaplist[EMUL.remaps].oldbankmsb)); + EMUL.dataout.get (& (EMUL.remaplist[EMUL.remaps].oldbanklsb)); + EMUL.remaplist[EMUL.remaps].oldprogch = 0xff; + EMUL.dataout.get (& (EMUL.remaplist[EMUL.remaps].newbankmsb)); + EMUL.dataout.get (& (EMUL.remaplist[EMUL.remaps].newbanklsb)); + EMUL.remaplist[EMUL.remaps].newprogch = 0xff; + EMUL.datain.put(4); + writelog(4, "Map bank command received, from %d %d to %d %d", + EMUL.remaplist[EMUL.remaps].oldbankmsb, + EMUL.remaplist[EMUL.remaps].oldbanklsb, + EMUL.remaplist[EMUL.remaps].newbankmsb, + EMUL.remaplist[EMUL.remaps].newbanklsb); + EMUL.remaps++; + break; + case 3: // map program change + if (EMUL.remaps >= BX_SB16_PATCHTABLESIZE) break; + EMUL.remaplist[EMUL.remaps].oldbankmsb = 0xff; + EMUL.remaplist[EMUL.remaps].oldbanklsb = 0xff; + EMUL.dataout.get (& (EMUL.remaplist[EMUL.remaps].oldprogch)); + EMUL.remaplist[EMUL.remaps].newbankmsb = 0xff; + EMUL.remaplist[EMUL.remaps].newbanklsb = 0xff; + EMUL.dataout.get (& (EMUL.remaplist[EMUL.remaps].newprogch)); + EMUL.datain.put(2); + writelog(4, "Map program change received, from %d to %d", + EMUL.remaplist[EMUL.remaps].oldprogch, + EMUL.remaplist[EMUL.remaps].newprogch); + EMUL.remaps++; + break; + case 4: // map bank and program change + if (EMUL.remaps >= BX_SB16_PATCHTABLESIZE) break; + EMUL.dataout.get (& (EMUL.remaplist[EMUL.remaps].oldbankmsb)); + EMUL.dataout.get (& (EMUL.remaplist[EMUL.remaps].oldbanklsb)); + EMUL.dataout.get (& (EMUL.remaplist[EMUL.remaps].oldprogch)); + EMUL.dataout.get (& (EMUL.remaplist[EMUL.remaps].newbankmsb)); + EMUL.dataout.get (& (EMUL.remaplist[EMUL.remaps].newbanklsb)); + EMUL.dataout.get (& (EMUL.remaplist[EMUL.remaps].newprogch)); + EMUL.datain.put(6); + writelog(4, "Complete remap received, from %d %d %d to %d %d %d", + EMUL.remaplist[EMUL.remaps].oldbankmsb, + EMUL.remaplist[EMUL.remaps].oldbanklsb, + EMUL.remaplist[EMUL.remaps].oldprogch, + EMUL.remaplist[EMUL.remaps].newbankmsb, + EMUL.remaplist[EMUL.remaps].newbanklsb, + EMUL.remaplist[EMUL.remaps].newprogch); + + EMUL.remaps++; + break; + case 5: EMUL.dataout.get(&value8); // dump emulator state + switch (value8) + { + case 0: + EMUL.datain.puts("SB16 Emulator for Bochs\n"); + break; + case 1: + EMUL.datain.puts("UART mode=%d (force=%d)\n", + MPU.uartmode, MPU.forceuartmode); + break; + case 2: + EMUL.datain.puts("timer=%d\n", MPU.current_timer); + break; + case 3: + EMUL.datain.puts("%d remappings active\n", EMUL.remaps); + break; + case 4: + EMUL.datain.puts("Resources are A%3x I%d D%d H%d T%d P%3x; Adlib at %3x\n", + BX_SB16_IO, BX_SB16_IRQ, BX_SB16_DMAL, + BX_SB16_DMAH, 6, BX_SB16_IOMPU, BX_SB16_IOADLIB); + break; + case 5: + EMUL.datain.puts("Current OPL2/3 mode: %s", + // ok, I admit that this is a bit ugly... + (OPL.mode == single)?"single OPL2 (OPL3 disabled)\n": + (OPL.mode == adlib)?"single OPL2 (no OPL3)\n": + (OPL.mode == dual)?"double OPL2\n": + (OPL.mode == opl3)?"OPL3\n": + "unknown"); + break; + default: + EMUL.datain.puts("no info. Only slots 0..5 have values.\n"); + break; + } + break; + case 6: // close midi and wave files and/or output + if ((BX_SB16_THIS midimode == 2) || + (BX_SB16_THIS midimode == 3)) + { + if (BX_SB16_THIS midimode == 2) finishmidifile(); + fclose(MIDIDATA); + } + else if (BX_SB16_THIS midimode == 1) + BX_SB16_OUTPUT->closemidioutput(); + BX_SB16_THIS midimode = 0; + + if ((BX_SB16_THIS wavemode == 2) || + (BX_SB16_THIS wavemode == 3)) + { + if (BX_SB16_THIS wavemode == 2) finishvocfile(); + fclose(WAVEDATA); + } + else + BX_SB16_OUTPUT->closewaveoutput(); + BX_SB16_THIS wavemode = 0; + break; + case 7: // clear bank/program mappings + EMUL.remaps = 0; + writelog(4, "Bank/program mappings cleared."); + break; + case 8: // set force uart mode on/off + EMUL.dataout.get(&value8); + MPU.forceuartmode = value8; + if (value8 != 0) + MPU.uartmode = MPU.forceuartmode; + writelog(4, "Force UART mode = %d", MPU.forceuartmode); + break; + case 9: // enter specific OPL2/3 mode + EMUL.dataout.get(&value8); + writelog(4, "Entering OPL2/3 mode %d", value8); + opl_entermode((bx_sb16_fm_mode) value8); + break; + case 10: // check emulator present + EMUL.datain.put(0x55); + break; + case 11: // send data to midi device + EMUL.dataout.get(&value8); + mpu_mididata(value8); + } + EMUL.dataout.clearcommand(); + EMUL.dataout.flush(); + } +} + +// and finally the OPL (FM emulation) part + +// select a new operational mode for the FM part +// this also serves as reset for the OPL chip +void bx_sb16_c::opl_entermode(bx_sb16_fm_mode newmode) +{ + int i, j; + + // do nothing if the mode is unchanged + if (OPL.mode == newmode) + return; + + // if the old mode was 0, and the new mode is 3, then + // no reset is necessary, just set the flag + if ((OPL.mode == single) && (newmode == opl3)) + { + writelog(MIDILOG(4), "OPL3 mode enabled"); + OPL.mode = newmode; + return; + } + + writelog(MIDILOG(4), "Switching to OPL mode %d from %d", newmode, OPL.mode); + + for (i=0; i> (6 - (i % 2))) == 0) { // set flags only if unmasked + writelog(MIDILOG(5), "OPL Timer Interrupt: Chip %d, Timer %d", i/2, 1 << (i % 2)); + OPL.tflag[i/2] |= 1 << (6 - (i % 2)); // set the overflow flag + OPL.tflag[i/2] |= 1 << 7; // set the IRQ flag + } + } + } + } +} + +// return the status of one of the OPL2's, or the +// base status of the OPL3 +Bit32u bx_sb16_c::opl_status(int chipid) +{ + Bit32u status = OPL.tflag[chipid]; + writelog(MIDILOG(5), "OPL status of chip %d is %02x", chipid, status); + return status; +} + +// set the register index for one of the OPL2's or the +// base or advanced register index for the OPL3 +void bx_sb16_c::opl_index(Bit32u value, int chipid) +{ + OPL.index[chipid] = value; +} + +// write to the data port +void bx_sb16_c::opl_data(Bit32u value, int chipid) +{ + int index = OPL.index[chipid]; + int opernum = -1; // OPL3 operator number; 0..35 + int channum = -1; // OPL3 channel number; 0..17 + int subopnum = -1; // channel operator; 0..nop-1 + + writelog(MIDILOG(4), "Write to OPL(%d) register %02x: %02x", + chipid, index, value); + + // first find out operator and/or channel numbers + // case 0x20 ... 0x95: includes too many ports, but that is harmless + // case 0xe0 ... 0xf5: + if (((index>=0x20) && (index<=0x95)) || + ((index>=0xe0) && (index<=0xf5))) { + // operator access + // find the operator number. 0..17 on chip 1, 18..35 on chip 2 + + // note, the numbers are not continuous (again...), so we need + // this rather weird calculation + opernum = index & 0x07; + if (opernum > 5) // invalid register, has no operator associated + { + opernum = -1; + goto break_here; + } + + opernum += ((index & 0x18) >> 3) * 6; + if (opernum > 17) // Operators 18+ have to be accessed on other address set + { + opernum = -1; + goto break_here; + } + + if (chipid == 1) + opernum += BX_SB16_FM_NOP / 2; + + // find out the channel number, and which of the channel's operators this is + channum = opernum % 3 + ((int) (opernum / 6)) * 3; + subopnum = 0; + + if ((opernum % 6) > 2) // second operator + subopnum = 1; + + // if (channel - 3) is in a four-operator mode, that is really + // what this operator belongs to + if (channum >= 3) { + if (OPL.chan[channum - 3].nop == 4) + { + channum -= 3; + subopnum += 2; + } + } + writelog(MIDILOG(5), "Is Channel %d, Oper %d, Subop %d", + channum, opernum, subopnum); + } + else if ((index>=0xa0) && (index<=0xc8)) { + // channel access + channum = index & 0x0f; + if (OPL.chan[channum].nop == 0) + channum = -1; // the channel is disabled + writelog(MIDILOG(5), "Is channel %d", channum); + } + +break_here: + + switch (index & 0xff) + { + // WSEnable and Test Register + case 0x01: + OPL.wsenable[chipid] = (value >> 5) & 1; + if ((value & 0x1f) != 0) + writelog(MIDILOG(3), "Warning: Test Register set to %02x", value & 0x1f); + break; + + // the two timer counts + case 0x02: + OPL.timerinit[chipid * 2] = OPL.timer[chipid * 2] = value; + break; + case 0x03: + OPL.timerinit[chipid * 2 + 1] = OPL.timer[chipid * 2 + 1] = (value << 2); + break; + + // if OPL2: timer masks + // if OPL3: 4-operator modes + case 0x04: + if ((chipid == 0) || (OPL.mode == dual)) + opl_settimermask(value, chipid); + else + opl_set4opmode(value & 0x3f); + break; + + // only OPL3: OPL3 enable + case 0x05: + if (chipid == 1) + { + if ((value & 1) != 0) + opl_entermode(opl3); + else + opl_entermode(single); + } + break; + + // Composite Sine Wave and Note-sel (ignored) + case 0x08: + if (value != 0) + writelog(MIDILOG(3), + "Warning: write of %02x to CSW/Note-sel ignored", value); + break; + + // most importantly the percussion part + case 0xbd: + opl_setpercussion(value, chipid); + break; + + // the operator registers + // case 0x20 ... 0x35: + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2a: + case 0x2b: + case 0x2c: + case 0x2d: + case 0x2e: + case 0x2f: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + // case 0x60 ... 0x75: + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6a: + case 0x6b: + case 0x6c: + case 0x6d: + case 0x6e: + case 0x6f: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + // case 0x80 ... 0x95: + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8a: + case 0x8b: + case 0x8c: + case 0x8d: + case 0x8e: + case 0x8f: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + if (opernum != -1) + { + opl_changeop(channum, opernum, (index / 0x20) - 1, value); + break; + } + // else let default: catch it + + // case 0x40 ... 0x55: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4a: + case 0x4b: + case 0x4c: + case 0x4d: + case 0x4e: + case 0x4f: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + if (opernum != -1) + { + opl_changeop(channum, opernum, 1, value & 0xc0); + if (subopnum != -1) + opl_setvolume(channum, subopnum, value & 0x3f); + break; + } + // else let default: catch it + + // case 0xe0 ... 0xf5: + case 0xe0: + case 0xe1: + case 0xe2: + case 0xe3: + case 0xe4: + case 0xe5: + case 0xe6: + case 0xe7: + case 0xe8: + case 0xe9: + case 0xea: + case 0xeb: + case 0xec: + case 0xed: + case 0xee: + case 0xef: + case 0xf0: + case 0xf1: + case 0xf2: + case 0xf3: + case 0xf4: + case 0xf5: + if (opernum != -1) + { + opl_changeop(channum, opernum, 5, value & 0x07); + break; + } + // else let default: catch it + + // and the channel registers + // case 0xa0 ... 0xa8: + case 0xa0: + case 0xa1: + case 0xa2: + case 0xa3: + case 0xa4: + case 0xa5: + case 0xa6: + case 0xa7: + case 0xa8: + if (channum != -1) + { + if (value != (Bit32u)(OPL.chan[channum].freq & 0xff)) { + OPL.chan[channum].freq &= 0xff00; + OPL.chan[channum].freq |= value; + opl_setfreq(channum); + } + break; + } + // else let default: catch it + + // case 0xb0 ... 0xb8: + case 0xb0: + case 0xb1: + case 0xb2: + case 0xb3: + case 0xb4: + case 0xb5: + case 0xb6: + case 0xb7: + case 0xb8: + if (channum != -1) + { + if ((value & 0x1f) != ((Bit32u)(OPL.chan[channum].freq >> 8) & 0x1f)) { + OPL.chan[channum].freq &= 0x00ff; + OPL.chan[channum].freq |= (value & 0x1f) << 8; + opl_setfreq(channum); + } + opl_keyonoff(channum, (value >> 5) & 1); + break; + } + // else let default: catch it + + + // this is a channel access, but it belongs to the instrument + // definition, so put it into value [4] of the channel's first operator + // case 0xc0 ... 0xc8: + case 0xc0: + case 0xc1: + case 0xc2: + case 0xc3: + case 0xc4: + case 0xc5: + case 0xc6: + case 0xc7: + case 0xc8: + if (channum != -1) + { + int needchange = 0; + if ((OPL.oper[OPL.chan[channum].opnum[0]][4] & 1) != (int)(value & 1)) + needchange = 1; + + opl_changeop(channum, OPL.chan[channum].opnum[0], 4, value & 0x3f); + + if (needchange == 1) + opl_setmodulation(channum); + break; + } + // else let default: catch it + + default: + writelog(MIDILOG(3), "Attempt to write %02x to unknown OPL(%d) register %02x", + value, chipid, index); + break; + } +} + +// change a value of an operator +void bx_sb16_c::opl_changeop(int channum, int opernum, int byte, int value) +{ + if (OPL.oper[opernum][byte] != value) { + OPL.oper[opernum][byte] = value; + OPL.chan[channum].needprogch = 1; + } +} + +// called for a write to the 4-operator mode register +void bx_sb16_c::opl_set4opmode(int new4opmode) +{ + int i, channel1, channel2; + + writelog(MIDILOG(4), "Switching to 4-op mode %02x", new4opmode); + + // every bit switches a 4-op channel-pairing on or off + // 4-op mode is two channels combined into the first one + for (i = 0; i<6; i++) + { + channel1 = i + (i / 3) * 6; + channel2 = channel1 + 3; + + if (((new4opmode >> i) & 1) != 0) + { // enable 4-op mode + opl_keyonoff(channel1, 0); + opl_keyonoff(channel2, 0); + + OPL.chan[channel1].nop = 4; + OPL.chan[channel2].nop = 0; + + OPL.chan[channel1].needprogch = 1; + } + else + { // disable 4-op mode + opl_keyonoff(channel1, 0); + + OPL.chan[channel1].nop = 2; + OPL.chan[channel2].nop = 2; + + OPL.chan[channel1].needprogch = 1; + OPL.chan[channel2].needprogch = 1; + } + } +} + +// called for a write to port 4 of either chip +void bx_sb16_c::opl_settimermask(int value, int chipid) +{ + if ((value & 0x80) != 0) // reset IRQ and timer flags + { // all other bits ignored! + writelog(MIDILOG(5), "IRQ Reset called"); + OPL.tflag[chipid] = 0; + return; + } + + OPL.tmask[chipid] = value & 0x63; + writelog(MIDILOG(5), "New timer mask for chip %d is %02x", + chipid, OPL.tmask[chipid]); + + // do we have to activate or deactivate the timer? + if (((value & 0x03) != 0) ^ (OPL.timer_running != 0)) + { + if ((value & 0x03) != 0) // yes, it's different. Start or stop? + { + writelog(MIDILOG(5), "Starting timers"); + bx_pc_system.activate_timer(OPL.timer_handle, 80, 1); + OPL.timer_running = 1; + } + else + { + writelog(MIDILOG(5), "Stopping timers"); + bx_pc_system.deactivate_timer(OPL.timer_handle); + OPL.timer_running = 0; + } + } +} + +// called when the modulation mode of a channel changes +void bx_sb16_c::opl_setmodulation(int channel) +{ + int opernum = OPL.chan[channel].opnum[0]; + + if ((OPL.chan[channel].nop == 0) && + (channel >= 3) && + (OPL.chan[channel].nop == 4)) channel -= 3; + + if (OPL.chan[channel].nop == 2) + { + OPL.chan[channel].ncarr = (OPL.oper[opernum][4] & 1) + 1; + OPL.chan[channel].needprogch = 1; + } + else if (OPL.chan[channel].nop == 4) + { + int opernum2 = OPL.chan[channel].opnum[2]; + int modmode = (OPL.oper[opernum][4] & 1) | + ((OPL.oper[opernum2][4] & 1) >> 1); + OPL.chan[channel].ncarr = modmode + 1 - (modmode / 2); + OPL.chan[channel].needprogch = 1; + } +} + +// called for a write to register 0xbd, the percussion register +void bx_sb16_c::opl_setpercussion(Bit8u value, int chipid) +{ + UNUSED(value); + UNUSED(chipid); +} + +// called when a channel volume changes +// opnum is which of the channel's operators had the change, not +// the actual operator number. Thus, it's from 0..3. +void bx_sb16_c::opl_setvolume(int channel, int opnum, int outlevel) +{ + UNUSED(opnum); + UNUSED(outlevel); + + OPL.chan[channel].midivol = 127; +} + + +// called when a frequency change is complete, to find out the +// corresponding midi key and pitch bender values +void bx_sb16_c::opl_setfreq(int channel) +{ + int block,fnum; + + // definition: + // low-byte of freq: 8 bit F-Number, LSB's + // high-byte of freq: [2 reserved][KEY-ON][3 block][2 F-Number MSB's] + // [KEY-ON] is ignored by this function + // + // the definition of the F-number is + // F-Number = Frequency * 2**(20-block) / (49716 Hz) + // + // Thus, the frequency can be calculated as + // Frequency = F-Number / 2**(20-block) * 49716 Hz + // + // (But remember that afreq is in 10^-3 Hz!) + // + + fnum = OPL.chan[channel].freq & 0x3ff; + block = (OPL.chan[channel].freq >> 10) & 0x07; + + writelog(MIDILOG(5), "F-Num is %d, block is %d", fnum, block); + + Bit32u realfreq; + const Bit32u freqbase = 49716000; // const is better than #define if type is important + + // this is a bit messy to preserve accuracy as much as possible, + // otherwise we might either lose precision, or the higher bits. + realfreq = ((freqbase >> 4) * fnum) >> (16 - block); + + OPL.chan[channel].afreq = realfreq; + + // now find out what MIDI key this corresponds to, and with what + // pitch bender value... (the latter not implemented yet) + int octave=0; // 0: Octave from 523.2511 Hz; pos=higher, neg=lower + int keynum=0; // 0=C; 1=C#; 2=D; ...; 11=B + + if (realfreq > 8175) { // 8.175 is smallest possible frequency + const Bit32u freqC = 523251; // Midi note 72; "C": 523.251 Hz + Bit32u keyfreq; // Frequency scaled to the octave from freqC to 2*freqC + + if (realfreq > freqC) { + while ((realfreq >> (++octave)) > freqC); + keyfreq = realfreq >> (--octave); + } else { + while ((realfreq << (++octave)) < freqC); + keyfreq = realfreq << octave; + octave = -octave; + } + + // this is a reasonable approximation for keyfreq /= 1.059463 + // (that value is 2**(1/12), which is the difference between two keys) + while ((keyfreq -= ((keyfreq * 1000) / 17817)) > freqC) + keynum++; + } else { + octave = -6; + keynum = 0; + } + + OPL.chan[channel].midinote = (octave + 6) * 12 + keynum; + + writelog(MIDILOG(5), "New frequency %.3f is key %d in octave %d; midi note %d", + (float) realfreq/1000.0, keynum, octave, OPL.chan[channel].midinote); +} + +// called when a note is possibly turned on or off +void bx_sb16_c::opl_keyonoff(int channel, bx_bool onoff) +{ + int i; + Bit8u commandbytes[3]; + + if (OPL.mode == fminit) + return; + + // first check if there really is a change in the state + if (onoff == OPL.chan[channel].midion) + return; + + OPL.chan[channel].midion = onoff; + + // check if we have a midi channel, otherwise allocate one if possible + if (OPL.chan[channel].midichan == 0xff) { + for (i=0; i<16; i++) + if (((OPL.midichannels >> i) & 1) != 0) { + OPL.chan[channel].midichan = i; + OPL.midichannels &= ~(1 << i); // mark channel as used + OPL.chan[channel].needprogch = 1; + } + if (OPL.chan[channel].midichan == 0xff) + return; + } + + if (OPL.chan[channel].needprogch != 0) + opl_midichannelinit(channel); + + commandbytes[0] = OPL.chan[channel].midichan; + commandbytes[1] = OPL.chan[channel].midinote; + commandbytes[2] = 0; + + if (onoff == 0) { + commandbytes[0] |= 0x80; // turn it off + } else { + commandbytes[0] |= 0x90; // turn it on + commandbytes[2] = OPL.chan[channel].midivol; + } + + writemidicommand(commandbytes[0], 2, & (commandbytes[1])); +} + +// setup a midi channel +void bx_sb16_c::opl_midichannelinit(int channel) +{ + UNUSED(channel); +} + +/* Handlers for the midi commands/midi file output */ + +// Write the header of the midi file. Track length is 0x7fffffff +// until we know how long it's really going to be + +void bx_sb16_c::initmidifile() +{ + struct { + Bit8u chunk[4]; + Bit32u chunklen; // all values in BIG Endian! + Bit16u smftype; + Bit16u tracknum; + Bit16u timecode; // 0x80 + deltatimesperquarter << 8 + } midiheader = +#ifdef BX_LITTLE_ENDIAN + { "MTh", 0x06000000, 0, 0x0100, 0x8001 }; +#else + { "MTh", 6, 0, 1, 0x180 }; +#endif + midiheader.chunk[3] = 'd'; + + struct { + Bit8u chunk[4]; + Bit32u chunklen; + Bit8u data[15]; + } trackheader = +#ifdef BX_LITTLE_ENDIAN + { "MTr", 0xffffff7f, +#else + { "MTr", 0x7fffffff, +#endif + { 0x00,0xff,0x51,3,0x07,0xa1,0x20, // set tempo 120 (0x7a120 us per quarter) + 0x00,0xff,0x58,4,4,2,0x18,0x08 }}; // time sig 4/4 + trackheader.chunk[3] = 'k'; + + fwrite(&midiheader, 1, 14, MIDIDATA); + fwrite(&trackheader, 1, 23, MIDIDATA); +} + +// write the midi command to the midi file + +void bx_sb16_c::writemidicommand(int command, int length, Bit8u data[]) +{ + bx_list_c *base; + /* We need to determine the time elapsed since the last MIDI command */ + int deltatime = currentdeltatime(); + + /* Initialize output device if necessary and not done yet */ + if (BX_SB16_THIS midimode == 1) { + if (MPU.outputinit != 1) { + writelog(MIDILOG(4), "Initializing Midi output."); + if (BX_SB16_OUTPUT->openmidioutput(SIM->get_param_string(BXPN_SB16_MIDIFILE)->getptr()) == BX_SOUND_OUTPUT_OK) + MPU.outputinit = 1; + else + MPU.outputinit = 0; + if (MPU.outputinit != 1) { + writelog(MIDILOG(2), "Error: Couldn't open midi output. Midi disabled."); + BX_SB16_THIS midimode = 0; + return; + } + } + BX_SB16_OUTPUT->sendmidicommand(deltatime, command, length, data); + return; + } else if ((BX_SB16_THIS midimode == 2) || + (BX_SB16_THIS midimode == 3)) { + base = (bx_list_c*) SIM->get_param(BXPN_SB16); + MIDIDATA = fopen(SIM->get_param_string("midifile", base)->getptr(),"wb"); + if (MIDIDATA == NULL) { + writelog (MIDILOG(2), "Error opening file %s. Midimode disabled.", + SIM->get_param_string("midifile", base)->getptr()); + BX_SB16_THIS midimode = 0; + } else if (BX_SB16_THIS midimode == 2) { + initmidifile(); + } + } + + if (BX_SB16_THIS midimode < 2) + return; + + if (BX_SB16_THIS midimode == 2) + writedeltatime(deltatime); + + fputc(command, MIDIDATA); + if ((command == 0xf0) || + (command == 0xf7)) // write event length for sysex/meta events + writedeltatime(length); + + fwrite(data, 1, length, MIDIDATA); +} + +// determine how many delta times have passed since +// this function was called last + +int bx_sb16_c::currentdeltatime() +{ + int deltatime; + + // counting starts at first access + if (MPU.last_delta_time == 0xffffffff) + MPU.last_delta_time = MPU.current_timer; + + deltatime = MPU.current_timer - MPU.last_delta_time; + MPU.last_delta_time = MPU.current_timer; + + return deltatime; +} + +// process the midi command stored in MPU.midicmd.to the midi driver + +void bx_sb16_c::processmidicommand(bx_bool force) +{ + int i, channel; + Bit8u value; + bx_bool needremap = 0; + + channel = MPU.midicmd.currentcommand() & 0xf; + + // we need to log bank changes and program changes + if ((MPU.midicmd.currentcommand() >> 4) == 0xc) + { // a program change + value = MPU.midicmd.peek(0); + writelog(MIDILOG(1), "* ProgramChange channel %d to %d", + channel, value); + MPU.program[channel] = value; + needremap = 1; + } + else if ((MPU.midicmd.currentcommand() >> 4) == 0xb) + { // a control change, could be a bank change + if (MPU.midicmd.peek(0) == 0) + { // bank select MSB + value = MPU.midicmd.peek(1); + writelog(MIDILOG(1), "* BankSelectMSB (%x %x %x) channel %d to %d", + MPU.midicmd.peek(0), MPU.midicmd.peek(1), MPU.midicmd.peek(2), + channel, value); + MPU.bankmsb[channel] = value; + needremap = 1; + } + else if (MPU.midicmd.peek(0) == 32) + { // bank select LSB + value = MPU.midicmd.peek(1); + writelog(MIDILOG(1), "* BankSelectLSB channel %d to %d", + channel, value); + MPU.banklsb[channel] = value; + needremap = 1; + } + } + + Bit8u temparray[256]; + i = 0; + while (MPU.midicmd.empty() == 0) + MPU.midicmd.get(&(temparray[i++])); + + writemidicommand(MPU.midicmd.currentcommand(), i, temparray); + + // if single command, revert to command mode + if (MPU.singlecommand != 0) + { + MPU.singlecommand = 0; + // and trigger IRQ? + // MPU.irqpending = 1; + // BX_SB16_THIS devices->pic->trigger_irq(BX_SB16_IRQMPU); + } + + if ((force == 0) && (needremap == 1)) + // have to check the remap lists, and remap program change if necessary + midiremapprogram(channel); +} + +// check if a program change has to be remapped, and do it if necessary + +void bx_sb16_c::midiremapprogram(int channel) +{ + int bankmsb,banklsb,program; + Bit8u commandbytes[2]; + + bankmsb = MPU.bankmsb[channel]; + banklsb = MPU.banklsb[channel]; + program = MPU.program[channel]; + + for(int i = 0; i < EMUL.remaps; i++) + { + if (((EMUL.remaplist[i].oldbankmsb == bankmsb) || + (EMUL.remaplist[i].oldbankmsb == 0xff)) && + ((EMUL.remaplist[i].oldbanklsb == banklsb) || + (EMUL.remaplist[i].oldbanklsb == 0xff)) && + ((EMUL.remaplist[i].oldprogch == program) || + (EMUL.remaplist[i].oldprogch == 0xff))) + { + writelog(5, "Remapping instrument for channel %d", channel); + if ((EMUL.remaplist[i].newbankmsb != bankmsb) && + (EMUL.remaplist[i].newbankmsb != 0xff)) + { // write control change bank msb + MPU.bankmsb[channel] = EMUL.remaplist[i].newbankmsb; + commandbytes[0] = 0; + commandbytes[1] = EMUL.remaplist[i].newbankmsb; + writemidicommand(0xb0 | channel, 2, commandbytes); + } + if ((EMUL.remaplist[i].newbanklsb != banklsb) && + (EMUL.remaplist[i].newbanklsb != 0xff)) + { // write control change bank lsb + MPU.banklsb[channel] = EMUL.remaplist[i].newbanklsb; + commandbytes[0] = 32; + commandbytes[1] = EMUL.remaplist[i].newbanklsb; + writemidicommand(0xb0 | channel, 2, commandbytes); + } + if ((EMUL.remaplist[i].newprogch != program) && + (EMUL.remaplist[i].newprogch != 0xff)) + { // write program change + MPU.program[channel] = EMUL.remaplist[i].newprogch; + commandbytes[0] = EMUL.remaplist[i].newprogch; + writemidicommand(0xc0 | channel, 1, commandbytes); + } + } + } +} + +// convert a number into a delta time coded value +int bx_sb16_c::converttodeltatime(Bit32u deltatime, Bit8u value[4]) +{ + int i, count; + Bit8u outbytes[4]; + + count = 0; + + if (deltatime <= 0) + { + count = 1; + value[0] = 0; + } + else + { + while ((deltatime > 0) && (count < 4)) // split into parts + { // of seven bits + outbytes[count++] = deltatime & 0x7f; + deltatime >>= 7; + } + for (i=0; i> 24) | + ((tracklen & 0x00ff0000) >> 8) | + ((tracklen & 0x0000ff00) << 8); +#endif + fwrite(&tracklen, 4, 1, MIDIDATA); +} + + +/* Handlers for the voc file output */ + +// Write the header of the voc file. + +void bx_sb16_c::initvocfile() +{ + struct { + char id[20]; + Bit16u headerlen; // All in LITTLE Endian! + Bit16u version; + Bit16u chksum; + } vocheader = + { "Creative Voice File", +#ifdef BX_LITTLE_ENDIAN + 0x1a, 0x0114, 0x111f }; +#else + 0x1a00, 0x1401, 0x1f11 }; +#endif + + vocheader.id[19] = 26; // Replace string end with 26 + + fwrite(&vocheader, 1, sizeof vocheader, WAVEDATA); +} + +// write one block to the voc file +void bx_sb16_c::writevocblock(int block, + Bit32u headerlen, Bit8u header[], + Bit32u datalen, Bit8u data[]) +{ + Bit32u i; + + if (block > 9) + { + writelog(WAVELOG(3), "VOC Block %d not recognized, ignored.", block); + return; + } + + fputc(block, WAVEDATA); + + i = headerlen + datalen; +#ifdef BX_LITTLE_ENDIAN + fwrite(&i, 1, 3, WAVEDATA); // write the length in 24-bit little endian +#else + Bit8u lengthbytes[3]; + lengthbytes[0] = i & 0xff; i >>= 8; + lengthbytes[1] = i & 0xff; i >>= 8; + lengthbytes[2] = i & 0xff; + fwrite(lengthbytes, 1, 3, WAVEDATA); +#endif + writelog(WAVELOG(5), "Voc block %d; Headerlen %d; Datalen %d", + block, headerlen, datalen); + if (headerlen > 0) + fwrite(header, 1, headerlen, WAVEDATA); + if (datalen > 0) + fwrite(data, 1, datalen, WAVEDATA); +} + +// close the voc file +void bx_sb16_c::finishvocfile() +{ + fputc(0, WAVEDATA); // blocktype 0: end block +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +Bit32u bx_sb16_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_SB16_SMF + bx_sb16_c *class_ptr = (bx_sb16_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_sb16_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_SB16_SMF + + switch (address) + { + // 2x0: FM Music Status Port + // 2x8 and 388 are aliases + case BX_SB16_IO + 0x00: + case BX_SB16_IO + 0x08: + case BX_SB16_IOADLIB + 0x00: + return opl_status(0); + + // 2x1: reserved (w: FM Music Data Port) + // 2x9 and 389 are aliases + case BX_SB16_IO + 0x01: + case BX_SB16_IO + 0x09: + case BX_SB16_IOADLIB + 0x01: + break; + + // 2x2: Advanced Music Status Port + // or (for SBPro1) FM Music Status Port 2 + // 38a is an alias + case BX_SB16_IO + 0x02: + case BX_SB16_IOADLIB + 0x02: + return opl_status(1); + + // 2x3: reserved (w: Adv. FM Music Data Port) + // or (for SBPro1) FM Music Data Port 2 + // 38b is an alias + case BX_SB16_IO + 0x03: + case BX_SB16_IOADLIB + 0x03: + break; + + // 2x4: reserved (w: Mixer Register Port) + case BX_SB16_IO + 0x04: + break; + + // 2x5: Mixer Data Port + case BX_SB16_IO + 0x05: + return mixer_readdata(); + + // 2x6: reserved (w: DSP Reset) + case BX_SB16_IO + 0x06: + break; + + // 2x7: reserved + case BX_SB16_IO + 0x07: + break; + + // 2x8: FM Music Status Port (OPL-2) + // handled above + + // 2x9: reserved (w: FM Music Data Port) + // handled above + + // 2xa: DSP Read Data Port + case BX_SB16_IO + 0x0a: + return dsp_dataread(); + + // 2xb: reserved + case BX_SB16_IO + 0x0b: + break; + + // 2xc: DSP Buffer Status Port + case BX_SB16_IO + 0x0c: + return dsp_bufferstatus(); + + // 2xd: reserved + case BX_SB16_IO + 0x0d: + break; + + // 2xe: DSP Data Status Port + case BX_SB16_IO + 0x0e: + return dsp_status(); + + // 2xf: DSP Acknowledge 16bit DMA IRQ + case BX_SB16_IO + 0x0f: + return dsp_irq16ack(); + + // 3x0: MPU Data Port Read + case BX_SB16_IOMPU + 0x00: + return mpu_dataread(); + + // 3x1: MPU Status Port + case BX_SB16_IOMPU + 0x01: + return mpu_status(); + + // 3x2: reserved + case BX_SB16_IOMPU + 0x02: + break; + + // 3x3: *Emulator* Port + case BX_SB16_IOMPU + 0x03: + return emul_read(); + + } + + // If we get here, the port wasn't valid + writelog(3, "Read access to 0x%04x: unsupported port!", address); + + return(0xff); +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_sb16_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_SB16_SMF + bx_sb16_c *class_ptr = (bx_sb16_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_sb16_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_SB16_SMF + + switch (address) + { + // 2x0: FM Music Register Port + // 2x8 and 388 are aliases + case BX_SB16_IO + 0x00: + case BX_SB16_IO + 0x08: + case BX_SB16_IOADLIB + 0x00: + opl_index(value, 0); + return; + + // 2x1: FM Music Data Port + // 2x9 and 389 are aliases + case BX_SB16_IO + 0x01: + case BX_SB16_IO + 0x09: + case BX_SB16_IOADLIB + 0x01: + opl_data(value, 0); + return; + + // 2x2: Advanced FM Music Register Port + // or (for SBPro1) FM Music Register Port 2 + // 38a is an alias + case BX_SB16_IO + 0x02: + case BX_SB16_IOADLIB + 0x02: + opl_index(value, 1); + return; + + // 2x3: Advanced FM Music Data Port + // or (for SBPro1) FM Music Data Port 2 + // 38b is an alias + case BX_SB16_IO + 0x03: + case BX_SB16_IOADLIB + 0x03: + opl_data(value, 1); + return; + + // 2x4: Mixer Register Port + case BX_SB16_IO + 0x04: + mixer_writeregister(value); + return; + + // 2x5: Mixer Data Portr, + case BX_SB16_IO + 0x05: + mixer_writedata(value); + return; + + // 2x6: DSP Reset + case BX_SB16_IO + 0x06: + dsp_reset(value); + return; + + // 2x7: reserved + case BX_SB16_IO + 0x07: + break; + + // 2x8: FM Music Register Port (OPL-2) + // handled above + + // 2x9: FM Music Data Port + // handled above + + // 2xa: reserved (r: DSP Data Port) + case BX_SB16_IO + 0x0a: + break; + + // 2xb: reserved + case BX_SB16_IO + 0x0b: + break; + + // 2xc: DSP Write Command/Data + case BX_SB16_IO + 0x0c: + dsp_datawrite(value); + return; + + // 2xd: reserved + case BX_SB16_IO + 0x0d: + break; + + // 2xe: reserved (r: DSP Buffer Status) + case BX_SB16_IO + 0x0e: + break; + + // 2xf: reserved + case BX_SB16_IO + 0x0f: + break; + + // 3x0: MPU Command Port + case BX_SB16_IOMPU + 0x00: + mpu_datawrite(value); + return; + + // 3x1: MPU Data Port + case BX_SB16_IOMPU + 0x01: + mpu_command(value); + return; + + // 3x2: reserved + case BX_SB16_IOMPU + 0x02: + break; + + // 3x3: *Emulator* Port + case BX_SB16_IOMPU + 0x03: + emul_write(value); + return; + } + + // if we arrive here, the port is unsupported + writelog(3, "Write access to 0x%04x (value = 0x%02x): unsupported port!", + address, value); +} + +void bx_sb16_c::writelog(int loglev, const char *str, ...) +{ + // append a line to the log file, if desired + if (BX_SB16_THIS loglevel >= loglev) + { + fprintf(LOGFILE, FMT_TICK, bx_pc_system.time_ticks()); + fprintf(LOGFILE, " (%d) ", loglev); + va_list ap; + va_start(ap, str); + vfprintf(LOGFILE, str, ap); + va_end(ap); + fprintf(LOGFILE, "\n"); + fflush(LOGFILE); + } +} + +// the round-robin FIFO buffers of the SB16 +bx_sb16_buffer::bx_sb16_buffer() +{ + length = 0; // total bytes in buffer + head = 0; // pointer to next slot available for new data + tail = 0; // pointer to next slot to be read from + buffer = NULL; // pointer to the actual data +} + +void bx_sb16_buffer::init(int bufferlen) +{ + if (buffer != NULL) // Was it initialized before? + delete buffer; + + length = bufferlen; + buffer = new Bit8u[length]; + if (buffer == NULL) + length = 0; // This will be checked later + + reset(); +} + +void bx_sb16_buffer::reset() +{ + head = 0; // Reset the pointers + tail = 0; + + clearcommand(); // no current command set +} + +bx_sb16_buffer::~bx_sb16_buffer() +{ + if (buffer != NULL) + delete [] buffer; + + buffer = NULL; + length = 0; +} + +// Report how many bytes are available +int bx_sb16_buffer::bytes(void) +{ + if (empty() != 0) + return 0; // empty / not initialized + + int bytes = head - tail; + if (bytes < 0) bytes += length; + return (bytes); +} + +// This puts one byte into the buffer +bx_bool bx_sb16_buffer::put(Bit8u data) +{ + if (full() != 0) + return 0; // buffer full + + buffer[head++] = data; // Write data, and increase write pointer + head %= length; // wrap it around so it stays inside the data + + return 1; // put was successful +} + +// This writes a formatted string to the buffer +bx_bool bx_sb16_buffer::puts(const char *data, ...) +{ + if (data == NULL) + return 0; // invalid string + +//char string[length]; + char *string; + int index = 0; + + string = (char *) malloc(length); + + va_list ap; + va_start(ap, data); + vsprintf(string, data, ap); + va_end(ap); + + if ((int) strlen(string) >= length) + BX_PANIC(("bx_sb16_buffer: puts() too long!")); + + while (string[index] != 0) + { + if (put((Bit8u) string[index]) == 0) + return 0; // buffer full + index++; + } + return 1; +} + +// This returns if the buffer is full, i.e. if a put will fail +bx_bool bx_sb16_buffer::full(void) +{ + if (length == 0) + return 1; // not initialized + + if (((head + 1) % length) == tail) + return 1; // buffer full + + return 0; // buffer has some space left +} + +// This reads the next available byte from the buffer +bx_bool bx_sb16_buffer::get(Bit8u *data) +{ + if (empty() != 0) + { + // Buffer is empty. Still, if it was initialized, return + // the last byte again. + if (length > 0) + (*data) = buffer[ (tail - 1) % length ]; + return 0; // buffer empty + } + + (*data) = buffer[tail++]; // read data and increase read pointer + tail %= length; // and wrap it around to stay inside the data + + return 1; // get was successful +} + +// Read a word in lo/hi order +bx_bool bx_sb16_buffer::getw(Bit16u *data) +{ + Bit8u dummy; + if (bytes() < 2) + { + if (bytes() == 1) + { + get(&dummy); + *data = (Bit16u) dummy; + } + else + dummy = 0; + return 0; + } + get(&dummy); + *data = (Bit16u) dummy; + get(&dummy); + *data |= ((Bit16u) dummy) << 8; + return 1; +} + +// Read a word in hi/lo order +bx_bool bx_sb16_buffer::getw1(Bit16u *data) +{ + Bit8u dummy; + if (bytes() < 2) + { + if (bytes() == 1) + { + get(&dummy); + *data = ((Bit16u) dummy) << 8; + } + else + dummy = 0; + return 0; + } + get(&dummy); + *data = ((Bit16u) dummy) << 8; + get(&dummy); + *data |= (Bit16u) dummy; + return 1; +} + +// This returns if the buffer is empty, i.e. if a get will fail +bx_bool bx_sb16_buffer::empty(void) +{ + if (length == 0) + return 1; // not inialized + + if (head == tail) + return 1; // buffer empty + + return 0; // buffer contains data +} + +// Flushes the buffer +void bx_sb16_buffer::flush(void) +{ + tail = head; + return; +} + +// Peeks ahead in the buffer +// Warning: No checking if result is valid. Must call bytes() to check that! +Bit8u bx_sb16_buffer::peek(int offset) +{ + return buffer[(tail + offset) % length]; +} + +// Set a new active command +void bx_sb16_buffer::newcommand(Bit8u newcmd, int bytes) +{ + command = newcmd; + havecommand = 1; + bytesneeded = bytes; +} + +// Return the currently active command +Bit8u bx_sb16_buffer::currentcommand(void) +{ + return command; +} + +// Clear the active command +void bx_sb16_buffer::clearcommand(void) +{ + command = 0; + havecommand = 0; + bytesneeded = 0; +} + +// return if the command has received all necessary bytes +bx_bool bx_sb16_buffer::commanddone(void) +{ + if (hascommand() == 0) + return 0; // no command pending - not done then + + if (bytes() >= bytesneeded) + return 1; // yes, it's done + + return 0; // no, it's not +} + +// return if there is a command pending +bx_bool bx_sb16_buffer::hascommand(void) +{ + return havecommand; +} + +int bx_sb16_buffer::commandbytes(void) +{ + return bytesneeded; +} + +// runtime parameter handler +Bit64s bx_sb16_c::sb16_param_handler(bx_param_c *param, int set, Bit64s val) +{ + if (set) { + char pname[BX_PATHNAME_LEN]; + param->get_param_path(pname, BX_PATHNAME_LEN); + if (!strcmp(pname, BXPN_SB16_DMATIMER)) { + BX_SB16_THIS dmatimer = (Bit32u)val; + } else if (!strcmp(pname, BXPN_SB16_LOGLEVEL)) { + BX_SB16_THIS loglevel = (int)val; + } else { + BX_PANIC(("sb16_param_handler called with unexpected parameter '%s'", pname)); + } + } + return val; +} + +#endif /* if BX_SUPPORT_SB16 */ diff --git a/bochs/iodev/sb16.h b/bochs/iodev/sb16.h new file mode 100644 index 00000000..4ad7a57d --- /dev/null +++ b/bochs/iodev/sb16.h @@ -0,0 +1,378 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// The original version of the SB16 support written and donated by Josef Drexler + +#ifndef BX_IODEV_SB16_H +#define BX_IODEV_SB16_H + +#if BX_USE_SB16_SMF +# define BX_SB16_SMF static +# define BX_SB16_THIS theSB16Device-> +# define BX_SB16_THISP (theSB16Device) +#else +# define BX_SB16_SMF +# define BX_SB16_THIS this-> +# define BX_SB16_THISP (this) +#endif + +// If the buffer commands are to be inlined: +#define BX_SB16_BUFINL BX_CPP_INLINE +// BX_CPP_INLINE is defined to the inline keyword for the C++ compiler. + +// maximum number of patch translations +#define BX_SB16_PATCHTABLESIZE 1024 + +// the resources. Of these, IRQ and DMA's can be changed via a DSP command +#define BX_SB16_IO 0x220 // IO base address of DSP, mixer & FM part +#define BX_SB16_IOLEN 16 // number of addresses covered +#define BX_SB16_IOMPU 0x330 // IO base address of MPU402 part +#define BX_SB16_IOMPULEN 4 // number of addresses covered +#define BX_SB16_IOADLIB 0x388 // equivalent to 0x220..0x223 and 0x228..0x229 +#define BX_SB16_IOADLIBLEN 4 // number of addresses covered +#define BX_SB16_IRQ theSB16Device->currentirq +#define BX_SB16_IRQMPU BX_SB16_IRQ // IRQ for the MPU401 part - same value +#define BX_SB16_DMAL theSB16Device->currentdma8 +#define BX_SB16_DMAH theSB16Device->currentdma16 + +/* + A few notes: + IRQ, DMA8bit and DMA16bit are for the DSP part. These + are changeable at runtime in mixer registers 0x80 and 0x81. + The defaults after a mixer initialization are IRQ 5, DMA8 1, no DMA16 + + Any of the address lengths can be zero to disable that particular + subdevice. Turning off the DSP still leaves FM music enabled on the + BX_SB16_IOADLIB ports, unless those are disabled as well. + + BX_SB16_IOMPULEN should be 4 or 2. In the latter case, the emulator + is completely invisible, and runtime changes are not possible + + BX_SB16_IOADLIBLEN should be 2 or 4. If 0, Ports 0x388.. don't + get used, but the OPL2 can still be accessed at 0x228..0x229. + If 2, the usual Adlib emulation is enabled. If 4, an OPL3 is + emulated at adresses 0x388..0x38b, or two separate OPL2's. +*/ + +#define BX_SB16_MIX_REG 0x100 // total number of mixer registers + +// The array containing an instrument/bank remapping +struct bx_sb16_ins_map { + Bit8u oldbankmsb, oldbanklsb, oldprogch; + Bit8u newbankmsb, newbanklsb, newprogch; +}; + +// One operator of the FM emulation +#define BX_SB16_FM_NOP 36 // OPL3 has 36 operators +#define BX_SB16_FM_OPB 6 // one operator has 6 bytes +typedef Bit8u bx_sb16_fm_operator[BX_SB16_FM_OPB]; + /* Explanation of the values: + (note [xx] is one bit for xx; [5 xx] is five bits for xx, + all bits listed MSB to LSB) + + [0] = [Tremolo][Vibrato][Sustain][KSR][4 Frequency Multiply] + [1] = [2 Key Scale Level][6 Output Level for modulators, reserved for others] + [2] = [4 Attack Rate][4 Decay Rate] + [3] = [4 Sustain Level][4 Release Rate] + [4] = [2 reserved][Right][Left][3 Feedback Factor][SynthType] + [5] = [5 reserved][3 Waveform Select] + + Frequency and Output Level are really properties of the channel, + so they get stored there. However, Output Level of the modulator + in FM synthesis varies the instrument. + + [4] is only set for the first operator, and zeroed for the others. + + All reserved bits are zeroed. + */ + +// One channel (1 to 4 operators) +#define BX_SB16_FM_NCH 18 // OPL3 has at most 18 channels + +typedef struct { + int nop; // number of operators used: 0=disabled, 1=percussion, 2 or 4=melodic + int ncarr; // how many carriers this channel has (1..3) + int opnum[4]; // operator numbers + Bit16u freq; // frequency (in a special code) + Bit32u afreq; // actual frequency in milli-Hertz (10^-3 Hz) + Bit8u midichan; // assigned midi channel + bx_bool needprogch; // has the instrument changed + Bit8u midinote; // currently playing midi note + bx_bool midion; // is the note on + Bit16u midibend; // current value of the pitch bender + Bit8u outputlevel[4];// 6-bit output level attenuations + Bit8u midivol; // current midi volume (velocity) +} bx_sb16_fm_channel; + + +// This is the class for the input and +// output FIFO buffers of the SB16 + +class bx_sb16_buffer { +public: + + BX_SB16_BUFINL bx_sb16_buffer(void); + BX_SB16_BUFINL ~bx_sb16_buffer(); + BX_SB16_BUFINL void init(int bufferlen); + BX_SB16_BUFINL void reset(); + + /* These functions return 1 on success and 0 on error */ + BX_SB16_BUFINL bx_bool put(Bit8u data); // write one byte in the buffer + BX_SB16_BUFINL bx_bool puts(const char *data, ...); // write a formatted string to the buffer + BX_SB16_BUFINL bx_bool get(Bit8u *data); // read the next available byte + BX_SB16_BUFINL bx_bool getw(Bit16u *data); // get word, in order lo/hi + BX_SB16_BUFINL bx_bool getw1(Bit16u *data);// get word, in order hi/lo + BX_SB16_BUFINL bx_bool full(void); // is the buffer full? + BX_SB16_BUFINL bx_bool empty(void); // is it empty? + + BX_SB16_BUFINL void flush(void); // empty the buffer + BX_SB16_BUFINL int bytes(void); // return number of bytes in the buffer + BX_SB16_BUFINL Bit8u peek(int ahead); // peek ahead number of bytes + + /* These are for caching the command number */ + BX_SB16_BUFINL void newcommand(Bit8u newcmd, int bytes); // start a new command with length bytes + BX_SB16_BUFINL Bit8u currentcommand(void); // return the current command + BX_SB16_BUFINL void clearcommand(void); // clear the command + BX_SB16_BUFINL bx_bool commanddone(void); // return if all bytes have arrived + BX_SB16_BUFINL bx_bool hascommand(void); // return if there is a pending command + BX_SB16_BUFINL int commandbytes(void); // return the length of the command + + +private: + Bit8u *buffer; + int head,tail,length; + Bit8u command; + bx_bool havecommand; + int bytesneeded; +}; + + +// forward definition +class bx_sound_output_c; + +// The actual emulator class, emulating the sound blaster ports +class bx_sb16_c : public bx_devmodel_c { +public: + bx_sb16_c(); + virtual ~bx_sb16_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual void register_state(void); + virtual void after_restore_state(void); + + /* Make writelog available to output functions */ + BX_SB16_SMF void writelog(int loglev, const char *str, ...); + // return midimode and wavemode setting (for lowlevel output class) + int get_midimode() const {return midimode;} + int get_wavemode() const {return wavemode;} + // runtimer parameter handler + static Bit64s sb16_param_handler(bx_param_c *param, int set, Bit64s val); + +private: + + int midimode, wavemode, loglevel; + Bit32u dmatimer; + FILE *logfile, *midifile, *wavefile; // the output files or devices + bx_sound_output_c *soundmod;// the output class + int currentirq; + int currentdma8; + int currentdma16; + + // the MPU 401 relevant variables + struct bx_sb16_mpu_struct { + bx_sb16_buffer datain, dataout, cmd, midicmd; + bx_bool uartmode, irqpending, forceuartmode, singlecommand; + + int banklsb[BX_SB16_PATCHTABLESIZE]; + int bankmsb[BX_SB16_PATCHTABLESIZE]; // current patch lists + int program[BX_SB16_PATCHTABLESIZE]; + + int timer_handle, current_timer; // no. of delta times passed + Bit32u last_delta_time; // timer value at last command + bx_bool outputinit; + } mpu401; + + // the DSP variables + struct bx_sb16_dsp_struct { + bx_sb16_buffer datain, dataout; + Bit8u resetport; // last value written to the reset port + Bit8u speaker,prostereo; // properties of the sound input/output + bx_bool irqpending; // Is an IRQ pending (not ack'd) + bx_bool midiuartmode; // Is the DSP in MIDI UART mode + Bit8u testreg; + struct bx_sb16_dsp_dma_struct { + // Properties of the current DMA transfer: + // mode= 0: no transfer, 1: single-cycle transfer, 2: auto-init DMA + // bits= 8 or 16 + // fifo= ?? Bit used in DMA command, no idea what it means... + // output= 0: input, 1: output + // bps= bytes per sample; =(dmabits/8)*(dmastereo+1) + // stereo= 0: mono, 1: stereo + // issigned= 0: unsigned data, 1: signed data + // highspeed= 0: normal mode, 1: highspeed mode (only SBPro) + // timer= so many us between data bytes + int mode, bits, bps, format, timer; + bx_bool fifo, output, stereo, issigned, highspeed; + Bit16u count; // bytes remaining in this transfer + Bit8u *chunk; // buffers up to BX_SOUND_OUTPUT_WAVEPACKETSIZE bytes + int chunkindex; // index into the buffer + int chunkcount; // for input: size of the recorded input + Bit16u timeconstant; + Bit16u blocklength, samplerate; + } dma; + int timer_handle; // handle for the DMA timer + bx_bool outputinit; // have the output functions been initialized + } dsp; + + // the ASP/CSP registers + Bit8u csp_reg[256]; + + enum bx_sb16_fm_mode {single, adlib, dual, opl3, fminit}; + + // the variables common to all FM emulations + struct bx_sb16_opl_struct; + friend struct bx_sb16_opl_struct; + struct bx_sb16_opl_struct { + bx_sb16_fm_mode mode; + // modes: single: one OPL2 (OPL3 disabled), + // adlib: one OPL2 (no OPL3), + // dual: two seperate OPL2 + // opl3: one OPL3 (enabled) + + int timer_handle; + int timer_running; + Bit16u midichannels; // bitmask: unused midichannels + int drumchannel; // midi channel for percussion (10) + int index[2]; // index register for the two chips + int wsenable[2]; // wave form select enable + Bit16u timer[4]; // two timers on each chip + Bit16u timerinit[4]; // initial timer counts + int tmask[2]; // the timer masking byte for both chips + int tflag[2]; // shows if the timer overflow has occured + int percmode[2]; // percussion mode enabled + int cyhhnote[2]; // cymbal and high hat midi notes + int cyhhon[2]; // cymbal and high hat notes on + bx_sb16_fm_operator oper[BX_SB16_FM_NOP]; + bx_sb16_fm_channel chan[BX_SB16_FM_NCH]; + } opl; + + struct bx_sb16_mixer_struct { + Bit8u regindex; + Bit8u reg[BX_SB16_MIX_REG]; + } mixer; + + struct bx_sb16_emul_struct { + bx_sb16_buffer datain, dataout; + bx_sb16_ins_map remaplist[256]; + Bit16u remaps; + } emuldata; + + /* DMA input and output, 8 and 16 bit */ + BX_SB16_SMF void dma_write8(Bit8u *data_byte); + BX_SB16_SMF void dma_read8(Bit8u *data_byte); + BX_SB16_SMF void dma_write16(Bit16u *data_word); + BX_SB16_SMF void dma_read16(Bit16u *data_word); + + /* the MPU 401 part of the emulator */ + BX_SB16_SMF Bit32u mpu_status(); // read status port 3x1 + BX_SB16_SMF void mpu_command(Bit32u value); // write command port 3x1 + BX_SB16_SMF Bit32u mpu_dataread(); // read data port 3x0 + BX_SB16_SMF void mpu_datawrite(Bit32u value); // write data port 3x0 + BX_SB16_SMF void mpu_mididata(Bit32u value); // get a midi byte + static void mpu_timer (void *); + + /* The DSP part */ + BX_SB16_SMF void dsp_reset(Bit32u value); // write to reset port 2x6 + BX_SB16_SMF Bit32u dsp_dataread(); // read from data port 2xa + BX_SB16_SMF void dsp_datawrite(Bit32u value); // write to data port 2xa + BX_SB16_SMF Bit32u dsp_bufferstatus(); // read buffer status 2xc + BX_SB16_SMF Bit32u dsp_status(); // read dsp status 2xe + BX_SB16_SMF void dsp_getsamplebyte(Bit8u value); + BX_SB16_SMF Bit8u dsp_putsamplebyte(); + BX_SB16_SMF void dsp_sendwavepacket(); + BX_SB16_SMF void dsp_getwavepacket(); + BX_SB16_SMF Bit32u dsp_irq16ack(); // ack 16 bit IRQ 2xf + BX_SB16_SMF void dsp_dma(Bit8u command, Bit8u mode, Bit16u length, Bit8u comp); + // initiate a DMA transfer + BX_SB16_SMF void dsp_dmadone(); // stop a DMA transfer + BX_SB16_SMF void dsp_enabledma(); // enable the transfer + BX_SB16_SMF void dsp_disabledma(); // temporarily disable DMA + static void dsp_dmatimer (void *); + + /* The mixer part */ + BX_SB16_SMF Bit32u mixer_readdata(void); + BX_SB16_SMF void mixer_writedata(Bit32u value); + BX_SB16_SMF void mixer_writeregister(Bit32u value); + BX_SB16_SMF void set_irq_dma(); + + /* The emulator ports to change emulator properties */ + BX_SB16_SMF Bit32u emul_read (void); // read emulator port + BX_SB16_SMF void emul_write(Bit32u value); // write emulator port + + /* The FM emulation part */ + BX_SB16_SMF void opl_entermode(bx_sb16_fm_mode newmode); + BX_SB16_SMF Bit32u opl_status(int chipid); + BX_SB16_SMF void opl_index(Bit32u value, int chipid); + BX_SB16_SMF void opl_data(Bit32u value, int chipid); + static void opl_timer(void *); + BX_SB16_SMF void opl_timerevent(void); + BX_SB16_SMF void opl_changeop(int channum, int opernum, int byte, int value); + BX_SB16_SMF void opl_settimermask(int value, int chipid); + BX_SB16_SMF void opl_set4opmode(int new4opmode); + BX_SB16_SMF void opl_setmodulation(int channel); + BX_SB16_SMF void opl_setpercussion(Bit8u value, int chipid); + BX_SB16_SMF void opl_setvolume(int channel, int opnum, int outlevel); + BX_SB16_SMF void opl_setfreq(int channel); + BX_SB16_SMF void opl_keyonoff(int channel, bx_bool onoff); + BX_SB16_SMF void opl_midichannelinit(int channel); + + /* several high level sound handlers */ + BX_SB16_SMF int currentdeltatime(); + BX_SB16_SMF void processmidicommand(bx_bool force); + BX_SB16_SMF void midiremapprogram(int channel); // remap program change + BX_SB16_SMF int converttodeltatime(Bit32u deltatime, Bit8u value[4]); + BX_SB16_SMF void writemidicommand(int command, int length, Bit8u data[]); + BX_SB16_SMF void writedeltatime(Bit32u deltatime); + // write in delta time coding + + BX_SB16_SMF void initmidifile(); // Write midi file header + BX_SB16_SMF void finishmidifile(); // write track length etc. + BX_SB16_SMF void initvocfile(); // Write voc file header + BX_SB16_SMF void writevocblock(int block, Bit32u headerlen, Bit8u header[], + Bit32u datalen, Bit8u data[]); + BX_SB16_SMF void finishvocfile(); // close voc file + + /* The port IO multiplexer functions */ + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); + +#if !BX_USE_SB16_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif +}; + +#define BOTHLOG(x) (x) +#define WRITELOG (BX_SB16_THIS writelog) +#define MIDILOG(x) ((BX_SB16_THIS midimode>0?x:0x7f)) +#define WAVELOG(x) ((BX_SB16_THIS wavemode>0?x:0x7f)) + +#endif diff --git a/bochs/iodev/scancodes.cc b/bochs/iodev/scancodes.cc new file mode 100644 index 00000000..c6ea408d --- /dev/null +++ b/bochs/iodev/scancodes.cc @@ -0,0 +1,772 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "bochs.h" +#include "scancodes.h" + +unsigned char translation8042[256] = { + 0xff,0x43,0x41,0x3f,0x3d,0x3b,0x3c,0x58,0x64,0x44,0x42,0x40,0x3e,0x0f,0x29,0x59, + 0x65,0x38,0x2a,0x70,0x1d,0x10,0x02,0x5a,0x66,0x71,0x2c,0x1f,0x1e,0x11,0x03,0x5b, + 0x67,0x2e,0x2d,0x20,0x12,0x05,0x04,0x5c,0x68,0x39,0x2f,0x21,0x14,0x13,0x06,0x5d, + 0x69,0x31,0x30,0x23,0x22,0x15,0x07,0x5e,0x6a,0x72,0x32,0x24,0x16,0x08,0x09,0x5f, + 0x6b,0x33,0x25,0x17,0x18,0x0b,0x0a,0x60,0x6c,0x34,0x35,0x26,0x27,0x19,0x0c,0x61, + 0x6d,0x73,0x28,0x74,0x1a,0x0d,0x62,0x6e,0x3a,0x36,0x1c,0x1b,0x75,0x2b,0x63,0x76, + 0x55,0x56,0x77,0x78,0x79,0x7a,0x0e,0x7b,0x7c,0x4f,0x7d,0x4b,0x47,0x7e,0x7f,0x6f, + 0x52,0x53,0x50,0x4c,0x4d,0x48,0x01,0x45,0x57,0x4e,0x51,0x4a,0x37,0x49,0x46,0x54, + 0x80,0x81,0x82,0x41,0x54,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, + 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf, + 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, + 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, + 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, + 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, + 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff +}; + + +// Definition of scancodes make and break, +// for each set (mf1/xt , mf2/at , mf3/ps2) +// The table must be in BX_KEY order +// +scancode scancodes[BX_KEY_NBKEYS][3] = +{ + { // BX_KEY_CTRL_L ( ibm 58) + { "\x1D" , "\x9D" }, + { "\x14" , "\xF0\x14" }, + { "\x11" , "\xF0\x11" }, + }, + + { // BX_KEY_SHIFT_L ( ibm 44) + { "\x2A" , "\xAA" }, + { "\x12" , "\xF0\x12" }, + { "\x12" , "\xF0\x12" }, + }, + + { // BX_KEY_F1 ( ibm 112 ) + { "\x3B" , "\xBB" }, + { "\x05" , "\xF0\x05" }, + { "\x07" , "\xF0\x07" }, + }, + + { // BX_KEY_F2 ( ibm 113 ) + { "\x3C" , "\xBC" }, + { "\x06" , "\xF0\x06" }, + { "\x0F" , "\xF0\x0F" }, + }, + + { // BX_KEY_F3 ( ibm 114 ) + { "\x3D" , "\xBD" }, + { "\x04" , "\xF0\x04" }, + { "\x17" , "\xF0\x17" }, + }, + + { // BX_KEY_F4 ( ibm 115 ) + { "\x3E" , "\xBE" }, + { "\x0C" , "\xF0\x0C" }, + { "\x1F" , "\xF0\x1F" }, + }, + + { // BX_KEY_F5 ( ibm 116 ) + { "\x3F" , "\xBF" }, + { "\x03" , "\xF0\x03" }, + { "\x27" , "\xF0\x27" }, + }, + + { // BX_KEY_F6 ( ibm 117 ) + { "\x40" , "\xC0" }, + { "\x0B" , "\xF0\x0B" }, + { "\x2F" , "\xF0\x2F" }, + }, + + { // BX_KEY_F7 ( ibm 118 ) + { "\x41" , "\xC1" }, + { "\x83" , "\xF0\x83" }, + { "\x37" , "\xF0\x37" }, +}, + + { // BX_KEY_F8 ( ibm 119 ) + { "\x42" , "\xC2" }, + { "\x0A" , "\xF0\x0A" }, + { "\x3F" , "\xF0\x3F" }, + }, + + { // BX_KEY_F9 ( ibm 120 ) + { "\x43" , "\xC3" }, + { "\x01" , "\xF0\x01" }, + { "\x47" , "\xF0\x47" }, + }, + + { // BX_KEY_F10 ( ibm 121 ) + { "\x44" , "\xC4" }, + { "\x09" , "\xF0\x09" }, + { "\x4F" , "\xF0\x4F" }, + }, + + { // BX_KEY_F11 ( ibm 122 ) + { "\x57" , "\xD7" }, + { "\x78" , "\xF0\x78" }, + { "\x56" , "\xF0\x56" }, + }, + + { // BX_KEY_F12 ( ibm 123 ) + { "\x58" , "\xD8" }, + { "\x07" , "\xF0\x07" }, + { "\x5E" , "\xF0\x5E" }, + }, + + { // BX_KEY_CTRL_R ( ibm 64 ) + { "\xE0\x1D" , "\xE0\x9D" }, + { "\xE0\x14" , "\xE0\xF0\x14" }, + { "\x58" , "\xF0\x58" }, + }, + + { // BX_KEY_SHIFT_R ( ibm 57 ) + { "\x36" , "\xB6" }, + { "\x59" , "\xF0\x59" }, + { "\x59" , "\xF0\x59" }, + }, + + { // BX_KEY_CAPS_LOCK ( ibm 30 ) + { "\x3A" , "\xBA" }, + { "\x58" , "\xF0\x58" }, + { "\x14" , "\xF0\x14" }, + }, + + { // BX_KEY_NUM_LOCK ( ibm 90 ) + { "\x45" , "\xC5" }, + { "\x77" , "\xF0\x77" }, + { "\x76" , "\xF0\x76" }, + }, + + { // BX_KEY_ALT_L ( ibm 60 ) + { "\x38" , "\xB8" }, + { "\x11" , "\xF0\x11" }, + { "\x19" , "\xF0\x19" }, + }, + + { // BX_KEY_ALT_R ( ibm 62 ) + { "\xE0\x38" , "\xE0\xB8" }, + { "\xE0\x11" , "\xE0\xF0\x11" }, + { "\x39" , "\xF0\x39" }, + }, + + { // BX_KEY_A ( ibm 31 ) + { "\x1E" , "\x9E" }, + { "\x1C" , "\xF0\x1C" }, + { "\x1C" , "\xF0\x1C" }, + }, + + { // BX_KEY_B ( ibm 50 ) + { "\x30" , "\xB0" }, + { "\x32" , "\xF0\x32" }, + { "\x32" , "\xF0\x32" }, + }, + + { // BX_KEY_C ( ibm 48 ) + { "\x2E" , "\xAE" }, + { "\x21" , "\xF0\x21" }, + { "\x21" , "\xF0\x21" }, + }, + + { // BX_KEY_D ( ibm 33 ) + { "\x20" , "\xA0" }, + { "\x23" , "\xF0\x23" }, + { "\x23" , "\xF0\x23" }, + }, + + { // BX_KEY_E ( ibm 19 ) + { "\x12" , "\x92" }, + { "\x24" , "\xF0\x24" }, + { "\x24" , "\xF0\x24" }, + }, + + { // BX_KEY_F ( ibm 34 ) + { "\x21" , "\xA1" }, + { "\x2B" , "\xF0\x2B" }, + { "\x2B" , "\xF0\x2B" }, + }, + + { // BX_KEY_G ( ibm 35 ) + { "\x22" , "\xA2" }, + { "\x34" , "\xF0\x34" }, + { "\x34" , "\xF0\x34" }, + }, + + { // BX_KEY_H ( ibm 36 ) + { "\x23" , "\xA3" }, + { "\x33" , "\xF0\x33" }, + { "\x33" , "\xF0\x33" }, + }, + + { // BX_KEY_I ( ibm 24 ) + { "\x17" , "\x97" }, + { "\x43" , "\xF0\x43" }, + { "\x43" , "\xF0\x43" }, + }, + + { // BX_KEY_J ( ibm 37 ) + { "\x24" , "\xA4" }, + { "\x3B" , "\xF0\x3B" }, + { "\x3B" , "\xF0\x3B" }, + }, + + { // BX_KEY_K ( ibm 38 ) + { "\x25" , "\xA5" }, + { "\x42" , "\xF0\x42" }, + { "\x42" , "\xF0\x42" }, + }, + + { // BX_KEY_L ( ibm 39 ) + { "\x26" , "\xA6" }, + { "\x4B" , "\xF0\x4B" }, + { "\x4B" , "\xF0\x4B" }, + }, + + { // BX_KEY_M ( ibm 52 ) + { "\x32" , "\xB2" }, + { "\x3A" , "\xF0\x3A" }, + { "\x3A" , "\xF0\x3A" }, + }, + + { // BX_KEY_N ( ibm 51 ) + { "\x31" , "\xB1" }, + { "\x31" , "\xF0\x31" }, + { "\x31" , "\xF0\x31" }, + }, + + { // BX_KEY_O ( ibm 25 ) + { "\x18" , "\x98" }, + { "\x44" , "\xF0\x44" }, + { "\x44" , "\xF0\x44" }, + }, + + { // BX_KEY_P ( ibm 26 ) + { "\x19" , "\x99" }, + { "\x4D" , "\xF0\x4D" }, + { "\x4D" , "\xF0\x4D" }, + }, + + { // BX_KEY_Q ( ibm 17 ) + { "\x10" , "\x90" }, + { "\x15" , "\xF0\x15" }, + { "\x15" , "\xF0\x15" }, + }, + + { // BX_KEY_R ( ibm 20 ) + { "\x13" , "\x93" }, + { "\x2D" , "\xF0\x2D" }, + { "\x2D" , "\xF0\x2D" }, + }, + + { // BX_KEY_S ( ibm 32 ) + { "\x1F" , "\x9F" }, + { "\x1B" , "\xF0\x1B" }, + { "\x1B" , "\xF0\x1B" }, + }, + + { // BX_KEY_T ( ibm 21 ) + { "\x14" , "\x94" }, + { "\x2C" , "\xF0\x2C" }, + { "\x2C" , "\xF0\x2C" }, + }, + + { // BX_KEY_U ( ibm 23 ) + { "\x16" , "\x96" }, + { "\x3C" , "\xF0\x3C" }, + { "\x3C" , "\xF0\x3C" }, + }, + + { // BX_KEY_V ( ibm 49 ) + { "\x2F" , "\xAF" }, + { "\x2A" , "\xF0\x2A" }, + { "\x2A" , "\xF0\x2A" }, + }, + + { // BX_KEY_W ( ibm 18 ) + { "\x11" , "\x91" }, + { "\x1D" , "\xF0\x1D" }, + { "\x1D" , "\xF0\x1D" }, + }, + + { // BX_KEY_X ( ibm 47 ) + { "\x2D" , "\xAD" }, + { "\x22" , "\xF0\x22" }, + { "\x22" , "\xF0\x22" }, + }, + + { // BX_KEY_Y ( ibm 22 ) + { "\x15" , "\x95" }, + { "\x35" , "\xF0\x35" }, + { "\x35" , "\xF0\x35" }, + }, + + { // BX_KEY_Z ( ibm 46 ) + { "\x2C" , "\xAC" }, + { "\x1A" , "\xF0\x1A" }, + { "\x1A" , "\xF0\x1A" }, + }, + + { // BX_KEY_0 ( ibm 11 ) + { "\x0B" , "\x8B" }, + { "\x45" , "\xF0\x45" }, + { "\x45" , "\xF0\x45" }, + }, + + { // BX_KEY_1 ( ibm 2 ) + { "\x02" , "\x82" }, + { "\x16" , "\xF0\x16" }, + { "\x16" , "\xF0\x16" }, + }, + + { // BX_KEY_2 ( ibm 3 ) + { "\x03" , "\x83" }, + { "\x1E" , "\xF0\x1E" }, + { "\x1E" , "\xF0\x1E" }, + }, + + { // BX_KEY_3 ( ibm 4 ) + { "\x04" , "\x84" }, + { "\x26" , "\xF0\x26" }, + { "\x26" , "\xF0\x26" }, + }, + + { // BX_KEY_4 ( ibm 5 ) + { "\x05" , "\x85" }, + { "\x25" , "\xF0\x25" }, + { "\x25" , "\xF0\x25" }, + }, + + { // BX_KEY_5 ( ibm 6 ) + { "\x06" , "\x86" }, + { "\x2E" , "\xF0\x2E" }, + { "\x2E" , "\xF0\x2E" }, + }, + + { // BX_KEY_6 ( ibm 7 ) + { "\x07" , "\x87" }, + { "\x36" , "\xF0\x36" }, + { "\x36" , "\xF0\x36" }, + }, + + { // BX_KEY_7 ( ibm 8 ) + { "\x08" , "\x88" }, + { "\x3D" , "\xF0\x3D" }, + { "\x3D" , "\xF0\x3D" }, + }, + + { // BX_KEY_8 ( ibm 9 ) + { "\x09" , "\x89" }, + { "\x3E" , "\xF0\x3E" }, + { "\x3E" , "\xF0\x3E" }, + }, + + { // BX_KEY_9 ( ibm 10 ) + { "\x0A" , "\x8A" }, + { "\x46" , "\xF0\x46" }, + { "\x46" , "\xF0\x46" }, + }, + + { // BX_KEY_ESC ( ibm 110 ) + { "\x01" , "\x81" }, + { "\x76" , "\xF0\x76" }, + { "\x08" , "\xF0\x08" }, + }, + + { // BX_KEY_SPACE ( ibm 61 ) + { "\x39" , "\xB9" }, + { "\x29" , "\xF0\x29" }, + { "\x29" , "\xF0\x29" }, + }, + + { // BX_KEY_SINGLE_QUOTE ( ibm 41 ) + { "\x28" , "\xA8" }, + { "\x52" , "\xF0\x52" }, + { "\x52" , "\xF0\x52" }, + }, + + { // BX_KEY_COMMA ( ibm 53 ) + { "\x33" , "\xB3" }, + { "\x41" , "\xF0\x41" }, + { "\x41" , "\xF0\x41" }, + }, + + { // BX_KEY_PERIOD ( ibm 54 ) + { "\x34" , "\xB4" }, + { "\x49" , "\xF0\x49" }, + { "\x49" , "\xF0\x49" }, + }, + + { // BX_KEY_SLASH ( ibm 55 ) + { "\x35" , "\xB5" }, + { "\x4A" , "\xF0\x4A" }, + { "\x4A" , "\xF0\x4A" }, + }, + + { // BX_KEY_SEMICOLON ( ibm 40 ) + { "\x27" , "\xA7" }, + { "\x4C" , "\xF0\x4C" }, + { "\x4C" , "\xF0\x4C" }, + }, + + { // BX_KEY_EQUALS ( ibm 13 ) + { "\x0D" , "\x8D" }, + { "\x55" , "\xF0\x55" }, + { "\x55" , "\xF0\x55" }, + }, + + { // BX_KEY_LEFT_BRACKET ( ibm 27 ) + { "\x1A" , "\x9A" }, + { "\x54" , "\xF0\x54" }, + { "\x54" , "\xF0\x54" }, + }, + + { // BX_KEY_BACKSLASH ( ibm 42, 29) + { "\x2B" , "\xAB" }, + { "\x5D" , "\xF0\x5D" }, + { "\x53" , "\xF0\x53" }, + }, + + { // BX_KEY_RIGHT_BRACKET ( ibm 28 ) + { "\x1B" , "\x9B" }, + { "\x5B" , "\xF0\x5B" }, + { "\x5B" , "\xF0\x5B" }, + }, + + { // BX_KEY_MINUS ( ibm 12 ) + { "\x0C" , "\x8C" }, + { "\x4E" , "\xF0\x4E" }, + { "\x4E" , "\xF0\x4E" }, + }, + + { // BX_KEY_GRAVE ( ibm 1 ) + { "\x29" , "\xA9" }, + { "\x0E" , "\xF0\x0E" }, + { "\x0E" , "\xF0\x0E" }, + }, + + { // BX_KEY_BACKSPACE ( ibm 15 ) + { "\x0E" , "\x8E" }, + { "\x66" , "\xF0\x66" }, + { "\x66" , "\xF0\x66" }, + }, + + { // BX_KEY_ENTER ( ibm 43 ) + { "\x1C" , "\x9C" }, + { "\x5A" , "\xF0\x5A" }, + { "\x5A" , "\xF0\x5A" }, + }, + + { // BX_KEY_TAB ( ibm 16 ) + { "\x0F" , "\x8F" }, + { "\x0D" , "\xF0\x0D" }, + { "\x0D" , "\xF0\x0D" }, + }, + + { // BX_KEY_LEFT_BACKSLASH ( ibm 45 ) + { "\x56" , "\xD6" }, + { "\x61" , "\xF0\x61" }, + { "\x13" , "\xF0\x13" }, + }, + + { // BX_KEY_PRINT ( ibm 124 ) + { "\xE0\x2A\xE0\x37" , "\xE0\xB7\xE0\xAA" }, + { "\xE0\x12\xE0\x7C" , "\xE0\xF0\x7C\xE0\xF0\x12" }, + { "\x57" , "\xF0\x57" }, + }, + + { // BX_KEY_SCRL_LOCK ( ibm 125 ) + { "\x46" , "\xC6" }, + { "\x7E" , "\xF0\x7E" }, + { "\x5F" , "\xF0\x5F" }, + }, + + { // BX_KEY_PAUSE ( ibm 126 ) + { "\xE1\x1D\x45\xE1\x9D\xC5" , "" }, + { "\xE1\x14\x77\xE1\xF0\x14\xF0\x77" , "" }, + { "\x62" , "\xF0\x62" }, + }, + + { // BX_KEY_INSERT ( ibm 75 ) + { "\xE0\x52" , "\xE0\xD2" }, + { "\xE0\x70" , "\xE0\xF0\x70" }, + { "\x67" , "\xF0\x67" }, + }, + + { // BX_KEY_DELETE ( ibm 76 ) + { "\xE0\x53" , "\xE0\xD3" }, + { "\xE0\x71" , "\xE0\xF0\x71" }, + { "\x64" , "\xF0\x64" }, + }, + + { // BX_KEY_HOME ( ibm 80 ) + { "\xE0\x47" , "\xE0\xC7" }, + { "\xE0\x6C" , "\xE0\xF0\x6C" }, + { "\x6E" , "\xF0\x6E" }, + }, + + { // BX_KEY_END ( ibm 81 ) + { "\xE0\x4F" , "\xE0\xCF" }, + { "\xE0\x69" , "\xE0\xF0\x69" }, + { "\x65" , "\xF0\x65" }, + }, + + { // BX_KEY_PAGE_UP ( ibm 85 ) + { "\xE0\x49" , "\xE0\xC9" }, + { "\xE0\x7D" , "\xE0\xF0\x7D" }, + { "\x6F" , "\xF0\x6F" }, + }, + + { // BX_KEY_PAGE_DOWN ( ibm 86 ) + { "\xE0\x51" , "\xE0\xD1" }, + { "\xE0\x7A" , "\xE0\xF0\x7A" }, + { "\x6D" , "\xF0\x6D" }, + }, + + { // BX_KEY_KP_ADD ( ibm 106 ) + { "\x4E" , "\xCE" }, + { "\x79" , "\xF0\x79" }, + { "\x7C" , "\xF0\x7C" }, + }, + + { // BX_KEY_KP_SUBTRACT ( ibm 105 ) + { "\x4A" , "\xCA" }, + { "\x7B" , "\xF0\x7B" }, + { "\x84" , "\xF0\x84" }, + }, + + { // BX_KEY_KP_END ( ibm 93 ) + { "\x4F" , "\xCF" }, + { "\x69" , "\xF0\x69" }, + { "\x69" , "\xF0\x69" }, + }, + + { // BX_KEY_KP_DOWN ( ibm 98 ) + { "\x50" , "\xD0" }, + { "\x72" , "\xF0\x72" }, + { "\x72" , "\xF0\x72" }, + }, + + { // BX_KEY_KP_PAGE_DOWN ( ibm 103 ) + { "\x51" , "\xD1" }, + { "\x7A" , "\xF0\x7A" }, + { "\x7A" , "\xF0\x7A" }, + }, + + { // BX_KEY_KP_LEFT ( ibm 92 ) + { "\x4B" , "\xCB" }, + { "\x6B" , "\xF0\x6B" }, + { "\x6B" , "\xF0\x6B" }, + }, + + { // BX_KEY_KP_RIGHT ( ibm 102 ) + { "\x4D" , "\xCD" }, + { "\x74" , "\xF0\x74" }, + { "\x74" , "\xF0\x74" }, + }, + + { // BX_KEY_KP_HOME ( ibm 91 ) + { "\x47" , "\xC7" }, + { "\x6C" , "\xF0\x6C" }, + { "\x6C" , "\xF0\x6C" }, + }, + + { // BX_KEY_KP_UP ( ibm 96 ) + { "\x48" , "\xC8" }, + { "\x75" , "\xF0\x75" }, + { "\x75" , "\xF0\x75" }, + }, + + { // BX_KEY_KP_PAGE_UP ( ibm 101 ) + { "\x49" , "\xC9" }, + { "\x7D" , "\xF0\x7D" }, + { "\x7D" , "\xF0\x7D" }, + }, + + { // BX_KEY_KP_INSERT ( ibm 99 ) + { "\x52" , "\xD2" }, + { "\x70" , "\xF0\x70" }, + { "\x70" , "\xF0\x70" }, + }, + + { // BX_KEY_KP_DELETE ( ibm 104 ) + { "\x53" , "\xD3" }, + { "\x71" , "\xF0\x71" }, + { "\x71" , "\xF0\x71" }, + }, + + { // BX_KEY_KP_5 ( ibm 97 ) + { "\x4C" , "\xCC" }, + { "\x73" , "\xF0\x73" }, + { "\x73" , "\xF0\x73" }, + }, + + { // BX_KEY_UP ( ibm 83 ) + { "\xE0\x48" , "\xE0\xC8" }, + { "\xE0\x75" , "\xE0\xF0\x75" }, + { "\x63" , "\xF0\x63" }, + }, + + { // BX_KEY_DOWN ( ibm 84 ) + { "\xE0\x50" , "\xE0\xD0" }, + { "\xE0\x72" , "\xE0\xF0\x72" }, + { "\x60" , "\xF0\x60" }, + }, + + { // BX_KEY_LEFT ( ibm 79 ) + { "\xE0\x4B" , "\xE0\xCB" }, + { "\xE0\x6B" , "\xE0\xF0\x6B" }, + { "\x61" , "\xF0\x61" }, + }, + + { // BX_KEY_RIGHT ( ibm 89 ) + { "\xE0\x4D" , "\xE0\xCD" }, + { "\xE0\x74" , "\xE0\xF0\x74" }, + { "\x6A" , "\xF0\x6A" }, + }, + + { // BX_KEY_KP_ENTER ( ibm 108 ) + { "\xE0\x1C" , "\xE0\x9C" }, + { "\xE0\x5A" , "\xE0\xF0\x5A" }, + { "\x79" , "\xF0\x79" }, + }, + + { // BX_KEY_KP_MULTIPLY ( ibm 100 ) + { "\x37" , "\xB7" }, + { "\x7C" , "\xF0\x7C" }, + { "\x7E" , "\xF0\x7E" }, + }, + + { // BX_KEY_KP_DIVIDE ( ibm 95 ) + { "\xE0\x35" , "\xE0\xB5" }, + { "\xE0\x4A" , "\xE0\xF0\x4A" }, + { "\x77" , "\xF0\x77" }, + }, + + { // BX_KEY_WIN_L + { "\xE0\x5B" , "\xE0\xDB" }, + { "\xE0\x1F" , "\xE0\xF0\x1F" }, + { "\x8B" , "\xF0\x8B" }, + }, + + { // BX_KEY_WIN_R + { "\xE0\x5C" , "\xE0\xDC" }, + { "\xE0\x27" , "\xE0\xF0\x27" }, + { "\x8C" , "\xF0\x8C" }, + }, + + { // BX_KEY_MENU + { "\xE0\x5D" , "\xE0\xDD" }, + { "\xE0\x2F" , "\xE0\xF0\x2F" }, + { "\x8D" , "\xF0\x8D" }, + }, + + { // BX_KEY_ALT_SYSREQ + { "\x54" , "\xD4" }, + { "\x84" , "\xF0\x84" }, + { "\x57" , "\xF0\x57" }, + }, + + { // BX_KEY_CTRL_BREAK + { "\xE0\x46" , "\xE0\xC6" }, + { "\xE0\x7E" , "\xE0\xF0\x7E" }, + { "\x62" , "\xF0\x62" }, + }, + + { // BX_KEY_INT_BACK + { "\xE0\x6A" , "\xE0\xEA" }, + { "\xE0\x38" , "\xE0\xF0\x38" }, + { "\x38" , "\xF0\x38" }, + }, + + { // BX_KEY_INT_FORWARD + { "\xE0\x69" , "\xE0\xE9" }, + { "\xE0\x30" , "\xE0\xF0\x30" }, + { "\x30" , "\xF0\x30" }, + }, + + { // BX_KEY_INT_STOP + { "\xE0\x68" , "\xE0\xE8" }, + { "\xE0\x28" , "\xE0\xF0\x28" }, + { "\x28" , "\xF0\x28" }, + }, + + { // BX_KEY_INT_MAIL + { "\xE0\x6C" , "\xE0\xEC" }, + { "\xE0\x48" , "\xE0\xF0\x48" }, + { "\x48" , "\xF0\x48" }, + }, + + { // BX_KEY_INT_SEARCH + { "\xE0\x65" , "\xE0\xE5" }, + { "\xE0\x10" , "\xE0\xF0\x10" }, + { "\x10" , "\xF0\x10" }, + }, + + { // BX_KEY_INT_FAV + { "\xE0\x66" , "\xE0\xE6" }, + { "\xE0\x18" , "\xE0\xF0\x18" }, + { "\x18" , "\xF0\x18" }, + }, + + { // BX_KEY_INT_HOME + { "\xE0\x32" , "\xE0\xB2" }, + { "\xE0\x3A" , "\xE0\xF0\x3A" }, + { "\x97" , "\xF0\x97" }, + }, + + { // BX_KEY_POWER_MYCOMP + { "\xE0\x6B" , "\xE0\xEB" }, + { "\xE0\x40" , "\xE0\xF0\x40" }, + { "\x40" , "\xF0\x40" }, + }, + + { // BX_KEY_POWER_CALC + { "\xE0\x21" , "\xE0\xA1" }, + { "\xE0\x2B" , "\xE0\xF0\x2B" }, + { "\x99" , "\xF0\x99" }, + }, + + { // BX_KEY_POWER_SLEEP + { "\xE0\x5F" , "\xE0\xDF" }, + { "\xE0\x3F" , "\xE0\xF0\x3F" }, + { "\x7F" , "\xF0\x7F" }, + }, + + { // BX_KEY_POWER_POWER + { "\xE0\x5E" , "\xE0\xDE" }, + { "\xE0\x37" , "\xE0\xF0\x37" }, + { "" , "" }, + }, + + { // BX_KEY_POWER_WAKE + { "\xE0\x63" , "\xE0\xE3" }, + { "\xE0\x5E" , "\xE0\xF0\x5E" }, + { "" , "" }, + }, + +}; diff --git a/bochs/iodev/scancodes.h b/bochs/iodev/scancodes.h new file mode 100644 index 00000000..6a0068f3 --- /dev/null +++ b/bochs/iodev/scancodes.h @@ -0,0 +1,35 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_SCANCODES_H +#define BX_SCANCODES_H + +// Translation table of the 8042 +extern unsigned char translation8042[256]; + +typedef struct { + const char *make; + const char *brek; +} scancode; + +// Scancodes table +extern scancode scancodes[BX_KEY_NBKEYS][3]; + +#endif diff --git a/bochs/iodev/scsi_commands.h b/bochs/iodev/scsi_commands.h new file mode 100644 index 00000000..b0a8aa84 --- /dev/null +++ b/bochs/iodev/scsi_commands.h @@ -0,0 +1,416 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +/* scsi/commands.h + Used only in cdrom_amigaos.cc. + + Operation codes for SCSI-2 commands + + 30 Nov 94 Peter Urbanec Created file + 10 Jan 95 Peter Urbanec Added SCSI_ prefix to all commands + 31 Jan 95 Peter Urbanec Released to public +*/ + +/* All device types */ + +#define SCSI_CHANGE_DEFINITION 0x40 +#define SCSI_COMPARE 0x39 +#define SCSI_COPY 0x18 +#define SCSI_COPY_AND_VERIFY 0x3a +#define SCSI_INQUIRY 0x12 +#define SCSI_LOG_SELECT 0x4c +#define SCSI_LOG_SENSE 0x4d +#define SCSI_MODE_SELECT_6 0x15 +#define SCSI_MODE_SELECT_10 0x55 +#define SCSI_MODE_SENSE_6 0x1a +#define SCSI_MODE_SENSE_10 0x5a +#define SCSI_READ_BUFFER 0x3c +#define SCSI_RECEIVE_DIAGNOSTIC_RESULTS 0x1c +#define SCSI_REQUEST_SENSE 0x03 +#define SCSI_SEND_DIAGNOSTIC 0x1d +#define SCSI_TEST_UNIT_READY 0x00 +#define SCSI_WRITE_BUFFER 0x3b + + +/* Direct Access devices */ + +#define SCSI_DA_CHANGE_DEFINITION 0x40 +#define SCSI_DA_COMPARE 0x39 +#define SCSI_DA_COPY 0x18 +#define SCSI_DA_COPY_AND_VERIFY 0x3a +#define SCSI_DA_FORMAT_UNIT 0x04 +#define SCSI_DA_INQUIRY 0x12 +#define SCSI_DA_LOCK_UNLOCK_CACHE 0x36 +#define SCSI_DA_LOG_SELECT 0x4c +#define SCSI_DA_LOG_SENSE 0x4d +#define SCSI_DA_MODE_SELECT_6 0x15 +#define SCSI_DA_MODE_SELECT_10 0x55 +#define SCSI_DA_MODE_SENSE_6 0x1a +#define SCSI_DA_MODE_SENSE_10 0x5a +#define SCSI_DA_PRE_FETCH 0x34 +#define SCSI_DA_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e +#define SCSI_DA_READ_6 0x08 +#define SCSI_DA_READ_10 0x28 +#define SCSI_DA_READ_BUFFER 0x3c +#define SCSI_DA_READ_CAPACITY 0x25 +#define SCSI_DA_READ_DEFECT_DATA 0x37 +#define SCSI_DA_READ_LONG 0x3e +#define SCSI_DA_REASSIGN_BLOCKS 0x07 +#define SCSI_DA_RECEIVE_DIAGNOSTIC_RESULTS 0x1c +#define SCSI_DA_RELEASE 0x17 +#define SCSI_DA_REQUEST_SENSE 0x03 +#define SCSI_DA_RESERVE 0x16 +#define SCSI_DA_REZERO_UNIT 0x01 +#define SCSI_DA_SEARCH_DATA_EQUAL 0x31 +#define SCSI_DA_SEARCH_DATA_HIGH 0x30 +#define SCSI_DA_SEARCH_DATA_LOW 0x32 +#define SCSI_DA_SEEK_6 0x0b +#define SCSI_DA_SEEK_10 0x2b +#define SCSI_DA_SEND_DIAGNOSTIC 0x1d +#define SCSI_DA_SET_LIMITS 0x33 +#define SCSI_DA_START_STOP_UNIT 0x1b +#define SCSI_DA_SYNCHRONIZE_CACHE 0x35 +#define SCSI_DA_TEST_UNIT_READY 0x00 +#define SCSI_DA_VERIFY 0x2f + + +/* Sequential access devices */ + +#define SCSI_SA_CHANGE_DEFINITION 0x40 +#define SCSI_SA_COMPARE 0x39 +#define SCSI_SA_COPY 0x18 +#define SCSI_SA_COPY_AND_VERIFY 0x3a +#define SCSI_SA_ERASE 0x19 +#define SCSI_SA_INQUIRY 0x12 +#define SCSI_SA_LOAD_UNLOAD 0x1b +#define SCSI_SA_LOCATE 0x2b +#define SCSI_SA_LOG_SELECT 0x4c +#define SCSI_SA_LOG_SENSE 0x4d +#define SCSI_SA_MODE_SELECT_6 0x15 +#define SCSI_SA_MODE_SELECT_10 0x55 +#define SCSI_SA_MODE_SENSE_6 0x1a +#define SCSI_SA_MODE_SENSE_10 0x5a +#define SCSI_SA_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e +#define SCSI_SA_READ 0x08 +#define SCSI_SA_READ_BLOCK_LIMITS 0x05 +#define SCSI_SA_READ_BUFFER 0x3c +#define SCSI_SA_READ_POSITION 0x34 +#define SCSI_SA_READ_REVERSE 0x0f +#define SCSI_SA_RECEIVE_DIAGNOSTIC_RESULTS 0x1c +#define SCSI_SA_RECOVER_BUFFERED_DATA 0x14 +#define SCSI_SA_RELEASE_UNIT 0x17 +#define SCSI_SA_REQUEST_SENSE 0x03 +#define SCSI_SA_RESERVE_UNIT 0x16 +#define SCSI_SA_REWIND 0x01 +#define SCSI_SA_SEND_DIAGNOSTIC 0x1d +#define SCSI_SA_SPACE 0x11 +#define SCSI_SA_TEST_UNIT_READY 0x00 +#define SCSI_SA_VERIFY 0x13 +#define SCSI_SA_WRITE 0x0a +#define SCSI_SA_WRITE_BUFFER 0x3b +#define SCSI_SA_WRITE_FILEMARKS 0x10 + + +/* Printer devices */ + +#define SCSI_PRT_CHANGE_DEFINITION 0x40 +#define SCSI_PRT_COMPARE 0x39 +#define SCSI_PRT_COPY 0x18 +#define SCSI_PRT_COPY_AND_VERIFY 0x3a +#define SCSI_PRT_FORMAT 0x04 +#define SCSI_PRT_INQUIRY 0x12 +#define SCSI_PRT_LOG_SELECT 0x4c +#define SCSI_PRT_LOG_SENSE 0x4d +#define SCSI_PRT_MODE_SELECT_6 0x15 +#define SCSI_PRT_MODE_SELECT_10 0x55 +#define SCSI_PRT_MODE_SENSE_6 0x1a +#define SCSI_PRT_MODE_SENSE_10 0x5a +#define SCSI_PRT_PRINT 0x0a +#define SCSI_PRT_READ_BUFFER 0x3c +#define SCSI_PRT_RECEIVE_DIAGNOSTIC_RESULTS 0x1c +#define SCSI_PRT_RECOVER_BUFFERED_DATA 0x14 +#define SCSI_PRT_RELEASE_UNIT 0x17 +#define SCSI_PRT_REQUEST_SENSE 0x03 +#define SCSI_PRT_RESERVE_UNIT 0x16 +#define SCSI_PRT_SEND_DIAGNOSTIC 0x1d +#define SCSI_PRT_SLEW_AND_PRINT 0x0b +#define SCSI_PRT_STOP_PRINT 0x1b +#define SCSI_PRT_SYNCHRONIZE_BUFFER 0x10 +#define SCSI_PRT_TEST_UNIT_READY 0x00 +#define SCSI_PRT_WRITE_BUFFER 0x3b + + +/* Processor devices */ + +#define SCSI_CPU_CHANGE_DEFINITION 0x40 +#define SCSI_CPU_COMPARE 0x39 +#define SCSI_CPU_COPY 0x18 +#define SCSI_CPU_COPY_AND_VERIFY 0x3a +#define SCSI_CPU_INQUIRY 0x12 +#define SCSI_CPU_LOG_SELECT 0x4c +#define SCSI_CPU_LOG_SENSE 0x4d +#define SCSI_CPU_READ_BUFFER 0x3c +#define SCSI_CPU_RECEIVE 0x08 +#define SCSI_CPU_RECEIVE_DIAGNOSTIC_RESULTS 0x1c +#define SCSI_CPU_REQUEST_SENSE 0x03 +#define SCSI_CPU_SEND 0x0a +#define SCSI_CPU_SEND_DIAGNOSTIC 0x1d +#define SCSI_CPU_TEST_UNIT_READY 0x00 +#define SCSI_CPU_WRITE_BUFFER 0x3b + + +/* Write Once devices */ + +#define SCSI_WO_CHANGE_DEFINITION 0x40 +#define SCSI_WO_COMPARE 0x39 +#define SCSI_WO_COPY 0x18 +#define SCSI_WO_COPY_AND_VERIFY 0x3a +#define SCSI_WO_INQUIRY 0x12 +#define SCSI_WO_LOCK_UNLOCK_CACHE 0x36 +#define SCSI_WO_LOG_SELECT 0x4c +#define SCSI_WO_LOG_SENSE 0x4d +#define SCSI_WO_MEDIUM_SCAN 0x38 +#define SCSI_WO_MODE_SELECT_6 0x15 +#define SCSI_WO_MODE_SELECT_10 0x55 +#define SCSI_WO_MODE_SENSE_6 0x1a +#define SCSI_WO_MODE_SENSE_10 0x5a +#define SCSI_WO_PRE_FETCH 0x34 +#define SCSI_WO_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e +#define SCSI_WO_READ_6 0x08 +#define SCSI_WO_READ_10 0x28 +#define SCSI_WO_READ_12 0xa8 +#define SCSI_WO_READ_BUFFER 0x3c +#define SCSI_WO_READ_CAPACITY 0x25 +#define SCSI_WO_READ_LONG 0x3e +#define SCSI_WO_REASSIGN_BLOCKS 0x07 +#define SCSI_WO_RECEIVE_DIAGNOSTIC_RESULTS 0x1c +#define SCSI_WO_RELEASE 0x17 +#define SCSI_WO_REQUEST_SENSE 0x03 +#define SCSI_WO_RESERVE 0x16 +#define SCSI_WO_REZERO_UNIT 0x01 +#define SCSI_WO_SEARCH_DATA_EQUAL_10 0x31 +#define SCSI_WO_SEARCH_DATA_EQUAL_12 0xb1 +#define SCSI_WO_SEARCH_DATA_HIGH_10 0x30 +#define SCSI_WO_SEARCH_DATA_HIGH_12 0xb0 +#define SCSI_WO_SEARCH_DATA_LOW_10 0x32 +#define SCSI_WO_SEARCH_DATA_LOW_12 0xb2 +#define SCSI_WO_SEEK_6 0x0b +#define SCSI_WO_SEEK_10 0x2b +#define SCSI_WO_SEND_DIAGNOSTIC 0x1d +#define SCSI_WO_SET_LIMITS_10 0x33 +#define SCSI_WO_SET_LIMITS_12 0xb3 +#define SCSI_WO_START_STOP_UNIT 0x1b +#define SCSI_WO_SYNCHRONIZE_CACHE 0x35 +#define SCSI_WO_TEST_UNIT_READY 0x00 +#define SCSI_WO_VERIFY_10 0x2f +#define SCSI_WO_VERIFY_12 0xaf +#define SCSI_WO_WRITE_6 0x0a +#define SCSI_WO_WRITE_10 0x2a +#define SCSI_WO_WRITE_12 0xaa +#define SCSI_WO_WRITE_AND_VERIFY_10 0x2e +#define SCSI_WO_WRITE_AND_VERIFY_12 0xae +#define SCSI_WO_WRITE_BUFFER 0x3b +#define SCSI_WO_WRITE_LONG 0x3f + + +/* CD-ROM devices */ + +#define SCSI_CD_CHANGE_DEFINITION 0x40 +#define SCSI_CD_COMPARE 0x39 +#define SCSI_CD_COPY 0x18 +#define SCSI_CD_COPY_AND_VERIFY 0x3a +#define SCSI_CD_INQUIRY 0x12 +#define SCSI_CD_LOCK_UNLOCK_CACHE 0x36 +#define SCSI_CD_LOG_SELECT 0x4c +#define SCSI_CD_LOG_SENSE 0x4d +#define SCSI_CD_MODE_SELECT_6 0x15 +#define SCSI_CD_MODE_SELECT_10 0x55 +#define SCSI_CD_MODE_SENSE_6 0x1a +#define SCSI_CD_MODE_SENSE_10 0x5a +#define SCSI_CD_PAUSE_RESUME 0x4b +#define SCSI_CD_PLAY_AUDIO_10 0x45 +#define SCSI_CD_PLAY_AUDIO_12 0xa5 +#define SCSI_CD_PLAY_AUDIO_MSF 0x47 +#define SCSI_CD_PLAY_AUDIO_TRACK_INDEX 0x48 +#define SCSI_CD_PLAY_TRACK_RELATIVE_10 0x49 +#define SCSI_CD_PLAY_TRACK_RELATIVE_12 0xa9 +#define SCSI_CD_PRE_FETCH 0x34 +#define SCSI_CD_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e +#define SCSI_CD_READ_6 0x08 +#define SCSI_CD_READ_10 0x28 +#define SCSI_CD_READ_12 0xa8 +#define SCSI_CD_READ_BUFFER 0x3c +#define SCSI_CD_READ_CD_ROM_CAPACITY 0x25 +#define SCSI_CD_READ_HEADER 0x44 +#define SCSI_CD_READ_LONG 0x3e +#define SCSI_CD_READ_SUB_CHANNEL 0x42 +#define SCSI_CD_READ_TOC 0x43 +#define SCSI_CD_RECEIVE_DIAGNOSTIC_RESULT 0x1c +#define SCSI_CD_RELEASE 0x17 +#define SCSI_CD_REQUEST_SENSE 0x03 +#define SCSI_CD_RESERVE 0x16 +#define SCSI_CD_REZERO_UNIT 0x01 +#define SCSI_CD_SEARCH_DATA_EQUAL_10 0x31 +#define SCSI_CD_SEARCH_DATA_EQUAL_12 0xb1 +#define SCSI_CD_SEARCH_DATA_HIGH_10 0x30 +#define SCSI_CD_SEARCH_DATA_HIGH_12 0xb0 +#define SCSI_CD_SEARCH_DATA_LOW_10 0x32 +#define SCSI_CD_SEARCH_DATA_LOW_12 0xb2 +#define SCSI_CD_SEEK_6 0x0b +#define SCSI_CD_SEEK_10 0x2b +#define SCSI_CD_SEND_DIAGNOSTIC 0x1d +#define SCSI_CD_SET_LIMITS_10 0x33 +#define SCSI_CD_SET_LIMITS_12 0xb3 +#define SCSI_CD_START_STOP_UNIT 0x1b +#define SCSI_CD_SYNCHRONIZE_CACHE 0x35 +#define SCSI_CD_TEST_UNIT_READY 0x00 +#define SCSI_CD_VERIFY_10 0x2f +#define SCSI_CD_VERIFY_12 0xaf +#define SCSI_CD_WRITE_BUFFER 0x3b + + +/* Scanner devices */ + +#define SCSI_SC_CHANGE_DEFINITION 0x40 +#define SCSI_SC_COMPARE 0x39 +#define SCSI_SC_COPY 0x18 +#define SCSI_SC_COPY_AND_VERIFY 0x3a +#define SCSI_SC_GET_DATA_BUFFER_STATUS 0x34 +#define SCSI_SC_GET_WINDOW 0x25 +#define SCSI_SC_INQUIRY 0x12 +#define SCSI_SC_LOG_SELECT 0x4c +#define SCSI_SC_LOG_SENSE 0x4d +#define SCSI_SC_MODE_SELECT_6 0x15 +#define SCSI_SC_MODE_SELECT_10 0x55 +#define SCSI_SC_MODE_SENSE_6 0x1a +#define SCSI_SC_MODE_SENSE_10 0x5a +#define SCSI_SC_OBJECT_POSITION 0x31 +#define SCSI_SC_READ 0x28 +#define SCSI_SC_READ_BUFFER 0x3c +#define SCSI_SC_RECEIVE_DIAGNOSTIC_RESULTS 0x1c +#define SCSI_SC_RELEASE_UNIT 0x17 +#define SCSI_SC_REQUEST_SENSE 0x03 +#define SCSI_SC_RESERVE_UNIT 0x16 +#define SCSI_SC_SCAN 0x1b +#define SCSI_SC_SET_WINDOW 0x24 +#define SCSI_SC_SEND 0x2a +#define SCSI_SC_SEND_DIAGNOSTIC 0x1d +#define SCSI_SC_TEST_UNIT_READY 0x00 +#define SCSI_SC_WRITE_BUFFER 0x3b + + +/* Optical memory devices */ + +#define SCSI_OM_CHANGE_DEFINITION 0x40 +#define SCSI_OM_COMPARE 0x39 +#define SCSI_OM_COPY 0x18 +#define SCSI_OM_COPY_AND_VERIFY 0x3a +#define SCSI_OM_ERASE_10 0x2c +#define SCSI_OM_ERASE_12 0xac +#define SCSI_OM_FORMAT_UNIT 0x04 +#define SCSI_OM_INQUIRY 0x12 +#define SCSI_OM_LOCK_UNLOCK_CACHE 0x36 +#define SCSI_OM_LOG_SELECT 0x4c +#define SCSI_OM_LOG_SENSE 0x4d +#define SCSI_OM_MEDIUM_SCAN 0x38 +#define SCSI_OM_MODE_SELECT_6 0x15 +#define SCSI_OM_MODE_SELECT_10 0x55 +#define SCSI_OM_MODE_SENSE_6 0x1a +#define SCSI_OM_MODE_SENSE_10 0x5a +#define SCSI_OM_PRE_FETCH 0x34 +#define SCSI_OM_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e +#define SCSI_OM_READ_6 0x08 +#define SCSI_OM_READ_10 0x28 +#define SCSI_OM_READ_12 0xa8 +#define SCSI_OM_READ_BUFFER 0x3c +#define SCSI_OM_READ_CAPACITY 0x25 +#define SCSI_OM_READ_DEFECT_DATA_10 0x37 +#define SCSI_OM_READ_DEFECT_DATA_12 0xb7 +#define SCSI_OM_READ_GENERATION 0x29 +#define SCSI_OM_READ_LONG 0x3e +#define SCSI_OM_READ_UPDATED_BLOCK 0x2d +#define SCSI_OM_REASSIGN_BLOCKS 0x07 +#define SCSI_OM_RECEIVE_DIAGNOSTIC_RESULTS 0x1c +#define SCSI_OM_RELEASE 0x17 +#define SCSI_OM_REQUEST_SENSE 0x03 +#define SCSI_OM_RESERVE 0x16 +#define SCSI_OM_REZERO_UNIT 0x01 +#define SCSI_OM_SEARCH_DATA_EQUAL_10 0x31 +#define SCSI_OM_SEARCH_DATA_EQUAL_12 0xb1 +#define SCSI_OM_SEARCH_DATA_HIGH_10 0x30 +#define SCSI_OM_SEARCH_DATA_HIGH_12 0xb0 +#define SCSI_OM_SEARCH_DATA_LOW_10 0x32 +#define SCSI_OM_SEARCH_DATA_LOW_12 0xb2 +#define SCSI_OM_SEEK_6 0x0b +#define SCSI_OM_SEEK_10 0x2b +#define SCSI_OM_SEND_DIAGNOSTIC 0x1d +#define SCSI_OM_SET_LIMITS_10 0x33 +#define SCSI_OM_SET_LIMITS_12 0xb3 +#define SCSI_OM_START_STOP_UNIT 0x1b +#define SCSI_OM_SYNCHRONIZE_CACHE 0x35 +#define SCSI_OM_TEST_UNIT_READY 0x00 +#define SCSI_OM_UPDATE_BLOCK 0x3d +#define SCSI_OM_VERIFY_10 0x2f +#define SCSI_OM_VERIFY_12 0xaf +#define SCSI_OM_WRITE_6 0x0a +#define SCSI_OM_WRITE_10 0x2a +#define SCSI_OM_WRITE_12 0xaa +#define SCSI_OM_WRITE_AND_VERIFY_10 0x2e +#define SCSI_OM_WRITE_AND_VERIFY_12 0xae +#define SCSI_OM_WRITE_BUFFER 0x3b +#define SCSI_OM_WRITE_LONG 0x3f + + +/* Medium changer devices */ + +#define SCSI_MC_CHANGE_DEFINITION 0x40 +#define SCSI_MC_EXCHANGE_MEDIUM 0xa6 +#define SCSI_MC_INITIALIZE_ELEMENT_STATUS 0x07 +#define SCSI_MC_INQUIRY 0x12 +#define SCSI_MC_LOG_SELECT 0x4c +#define SCSI_MC_LOG_SENSE 0x4d +#define SCSI_MC_MODE_SELECT_6 0x15 +#define SCSI_MC_MODE_SELECT_10 0x55 +#define SCSI_MC_MODE_SENSE_6 0x1a +#define SCSI_MC_MODE_SENSE_10 0x5a +#define SCSI_MC_MOVE_MEDIUM 0xa5 +#define SCSI_MC_POSITION_TO_ELEMENT 0x2b +#define SCSI_MC_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e +#define SCSI_MC_READ_BUFFER 0x3c +#define SCSI_MC_READ_ELEMENT_STATUS 0xb8 +#define SCSI_MC_RECEIVE_DIAGNOSTIC_RESULTS 0x1c +#define SCSI_MC_RELEASE 0x17 +#define SCSI_MC_REQUEST_VOLUME_ELEMENT_ADDRESS 0xb5 +#define SCSI_MC_REQUEST_SENSE 0x03 +#define SCSI_MC_RESERVE 0x16 +#define SCSI_MC_REZERO_UNIT 0x01 +#define SCSI_MC_SEND_DIAGNOSTIC 0x1d +#define SCSI_MC_SEND_VOLUME_TAG 0xb6 +#define SCSI_MC_TEST_UNIT_READY 0x00 +#define SCSI_MC_WRITE_BUFFER 0x3b + + +/* Communications devices */ + +#define SCSI_COM_CHANGE_DEFINITION 0x40 +#define SCSI_COM_GET_MESSAGE_6 0x08 +#define SCSI_COM_GET_MESSAGE_10 0x28 +#define SCSI_COM_GET_MESSAGE_12 0xa8 +#define SCSI_COM_INQUIRY 0x12 +#define SCSI_COM_LOG_SELECT 0x4c +#define SCSI_COM_LOG_SENSE 0x4d +#define SCSI_COM_MODE_SELECT_6 0x15 +#define SCSI_COM_MODE_SELECT_10 0x55 +#define SCSI_COM_MODE_SENSE_6 0x1a +#define SCSI_COM_MODE_SENSE_10 0x5a +#define SCSI_COM_READ_BUFFER 0x3c +#define SCSI_COM_RECEIVE_DIAGNOSTIC_RESULTS 0x1c +#define SCSI_COM_REQUEST_SENSE 0x03 +#define SCSI_COM_SEND_DIAGNOSTIC 0x1d +#define SCSI_COM_SEND_MESSAGE_6 0x0a +#define SCSI_COM_SEND_MESSAGE_10 0x2a +#define SCSI_COM_SEND_MESSAGE_12 0xaa +#define SCSI_COM_TEST_UNIT_READY 0x00 +#define SCSI_COM_WRITE_BUFFER 0x3b + diff --git a/bochs/iodev/scsi_device.cc b/bochs/iodev/scsi_device.cc new file mode 100644 index 00000000..a175f78f --- /dev/null +++ b/bochs/iodev/scsi_device.cc @@ -0,0 +1,792 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2007-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// SCSI emulation layer ported from the Qemu project + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_PCI && BX_SUPPORT_PCIUSB +#include "hdimage.h" +#include "cdrom.h" +#include "scsi_device.h" + +#define LOG_THIS + +#define BX_MIN(a,b) ( ((a)>(b))?(b):(a) ) +#define DEVICE_NAME "SCSI drive" + +static SCSIRequest *free_requests = NULL; +static Bit32u serial_number = 12345678; + +scsi_device_t::scsi_device_t(device_image_t *_hdimage, int _tcq, + scsi_completionfn _completion, void *_dev) +{ + type = SCSIDEV_TYPE_DISK; + cdrom = NULL; + hdimage = _hdimage; + requests = NULL; + sense = 0; + tcq = _tcq; + completion = _completion; + dev = _dev; + cluster_size = 1; + locked = 0; + inserted = 1; + max_lba = (hdimage->hd_size / 512) - 1; + sprintf(drive_serial_str, "%d", serial_number++); + + put("SCSID"); +} + +scsi_device_t::scsi_device_t(LOWLEVEL_CDROM *_cdrom, int _tcq, + scsi_completionfn _completion, void *_dev) +{ + type = SCSIDEV_TYPE_CDROM; + cdrom = _cdrom; + hdimage = NULL; + requests = NULL; + sense = 0; + tcq = _tcq; + completion = _completion; + dev = _dev; + cluster_size = 4; + locked = 0; + inserted = 1; + max_lba = cdrom->capacity() - 1; + sprintf(drive_serial_str, "%d", serial_number++); + + put("SCSIC"); +} + +scsi_device_t::~scsi_device_t(void) +{ + SCSIRequest *r, *next; + + if (requests) { + r = requests; + while (r != NULL) { + next = r->next; + delete r; + r = next; + } + } + if (free_requests) { + r = free_requests; + while (r != NULL) { + next = r->next; + delete r; + r = next; + } + free_requests = NULL; + } +} + +void scsi_device_t::register_state(bx_list_c *parent, const char *name) +{ + bx_list_c *list = new bx_list_c(parent, name, "", 1); + new bx_shadow_num_c(list, "sense", &sense); + // TODO: save/restore for SCSI requests +} + +SCSIRequest* scsi_device_t::scsi_new_request(Bit32u tag) +{ + SCSIRequest *r; + + if (free_requests) { + r = free_requests; + free_requests = r->next; + } else { + r = new SCSIRequest; + } + r->dev = this; + r->tag = tag; + r->sector_count = 0; + r->buf_len = 0; + r->status = 0; + + r->next = requests; + requests = r; + return r; +} + +void scsi_device_t::scsi_remove_request(SCSIRequest *r) +{ + SCSIRequest *last; + + if (requests == r) { + requests = r->next; + } else { + last = requests; + while (last != NULL) { + if (last->next != r) + last = last->next; + else + break; + } + if (last) { + last->next = r->next; + } else { + BX_ERROR(("orphaned request")); + } + } + r->next = free_requests; + free_requests = r; +} + +SCSIRequest* scsi_device_t::scsi_find_request(Bit32u tag) +{ + SCSIRequest *r = requests; + while (r != NULL) { + if (r->tag != tag) + r = r->next; + else + break; + } + return r; +} + +void scsi_device_t::scsi_command_complete(SCSIRequest *r, int status, int _sense) +{ + Bit32u tag; + BX_DEBUG(("command complete tag=0x%x status=%d sense=%d", r->tag, status, sense)); + sense = _sense; + tag = r->tag; + scsi_remove_request(r); + completion(dev, SCSI_REASON_DONE, tag, status); +} + +void scsi_device_t::scsi_cancel_io(Bit32u tag) +{ + BX_DEBUG(("cancel tag=0x%x", tag)); + SCSIRequest *r = scsi_find_request(tag); + if (r) { + scsi_remove_request(r); + } +} + +void scsi_device_t::scsi_read_complete(void *req, int ret) +{ + SCSIRequest *r = (SCSIRequest *)req; + + if (ret) { + BX_ERROR(("IO error")); + completion(r, SCSI_REASON_DATA, r->tag, 0); + scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_NO_SENSE); + return; + } + BX_DEBUG(("data ready tag=0x%x len=%d", r->tag, r->buf_len)); + + completion(dev, SCSI_REASON_DATA, r->tag, r->buf_len); +} + +void scsi_device_t::scsi_read_data(Bit32u tag) +{ + Bit32u n; + int ret; + + SCSIRequest *r = scsi_find_request(tag); + if (!r) { + BX_ERROR(("bad read tag 0x%x", tag)); + // ??? This is the wrong error. + scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); + return; + } + if (r->sector_count == (Bit32u)-1) { + BX_DEBUG(("read buf_len=%d", r->buf_len)); + r->sector_count = 0; + completion(dev, SCSI_REASON_DATA, r->tag, r->buf_len); + return; + } + BX_DEBUG(("read sector_count=%d", r->sector_count)); + if (r->sector_count == 0) { + scsi_command_complete(r, STATUS_GOOD, SENSE_NO_SENSE); + return; + } + + n = r->sector_count; + if (n > (Bit32u)(SCSI_DMA_BUF_SIZE / (512 * cluster_size))) + n = SCSI_DMA_BUF_SIZE / (512 * cluster_size); + r->buf_len = n * 512 * cluster_size; + if (type == SCSIDEV_TYPE_CDROM) { + if (!cdrom->read_block(r->dma_buf, (Bit32u)r->sector, 2048)) { + scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); + } else { + scsi_read_complete((void*)r, 0); + } + } else { + ret = (int)hdimage->lseek(r->sector * 512, SEEK_SET); + if (ret < 0) { + BX_ERROR(("could not lseek() hard drive image file")); + scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); + } + ret = hdimage->read((bx_ptr_t)r->dma_buf, r->buf_len); + if (ret < r->buf_len) { + BX_ERROR(("could not read() hard drive image file")); + scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); + } else { + scsi_read_complete((void*)r, 0); + } + } + r->sector += n; + r->sector_count -= n; +} + +void scsi_device_t::scsi_write_complete(void *req, int ret) +{ + SCSIRequest *r = (SCSIRequest *)req; + Bit32u len; + + if (ret) { + BX_ERROR(("IO error")); + scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); + return; + } + + if (r->sector_count == 0) { + scsi_command_complete(r, STATUS_GOOD, SENSE_NO_SENSE); + } else { + len = r->sector_count * 512; + if (len > SCSI_DMA_BUF_SIZE) { + len = SCSI_DMA_BUF_SIZE; + } + r->buf_len = len; + BX_DEBUG(("write complete tag=0x%x more=%d", r->tag, len)); + completion(dev, SCSI_REASON_DATA, r->tag, len); + } +} + +int scsi_device_t::scsi_write_data(Bit32u tag) +{ + SCSIRequest *r; + Bit32u n; + int ret; + + BX_DEBUG(("write data tag=0x%x", tag)); + r = scsi_find_request(tag); + if (!r) { + BX_ERROR(("bad write tag 0x%x", tag)); + scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); + return 1; + } + if (type == SCSIDEV_TYPE_DISK) { + n = r->buf_len / 512; + if (n) { + ret = (int)hdimage->lseek(r->sector * 512, SEEK_SET); + if (ret < 0) { + BX_ERROR(("could not lseek() hard drive image file")); + scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); + } + ret = hdimage->write((bx_ptr_t)r->dma_buf, r->buf_len); + r->sector += n; + r->sector_count -= n; + if (ret < r->buf_len) { + BX_ERROR(("could not write() hard drive image file")); + scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); + } else { + scsi_write_complete((void*)r, 0); + } + } else { + scsi_write_complete(r, 0); + } + } else { + BX_ERROR(("CD-ROM: write not supported")); + scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); + } + return 0; +} + +Bit8u* scsi_device_t::scsi_get_buf(Bit32u tag) +{ + SCSIRequest *r = scsi_find_request(tag); + if (!r) { + BX_ERROR(("bad buffer tag 0x%x", tag)); + return NULL; + } + return r->dma_buf; +} + +Bit32s scsi_device_t::scsi_send_command(Bit32u tag, Bit8u *buf, int lun) +{ + Bit64u nb_sectors; + Bit64u lba; + Bit32s len; + int cmdlen; + int is_write; + Bit8u command; + Bit8u *outbuf; + SCSIRequest *r; + + command = buf[0]; + r = scsi_find_request(tag); + if (r) { + BX_ERROR(("tag 0x%x already in use", tag)); + scsi_cancel_io(tag); + } + r = scsi_new_request(tag); + outbuf = r->dma_buf; + is_write = 0; + BX_DEBUG(("command: lun=%d tag=0x%x data=0x%02x", lun, tag, buf[0])); + switch (command >> 5) { + case 0: + lba = buf[3] | (buf[2] << 8) | ((buf[1] & 0x1f) << 16); + len = buf[4]; + cmdlen = 6; + break; + case 1: + case 2: + lba = buf[5] | (buf[4] << 8) | (buf[3] << 16) | (buf[2] << 24); + len = buf[8] | (buf[7] << 8); + cmdlen = 10; + break; + case 4: + lba = buf[9] | (buf[8] << 8) | (buf[7] << 16) | (buf[6] << 24) | + ((Bit64u)buf[5] << 32) | ((Bit64u)buf[4] << 40) | + ((Bit64u)buf[3] << 48) | ((Bit64u)buf[2] << 56); + len = buf[13] | (buf[12] << 8) | (buf[11] << 16) | (buf[10] << 24); + cmdlen = 16; + break; + case 5: + lba = buf[5] | (buf[4] << 8) | (buf[3] << 16) | (buf[2] << 24); + len = buf[9] | (buf[8] << 8) | (buf[7] << 16) | (buf[6] << 24); + cmdlen = 12; + break; + default: + BX_ERROR(("Unsupported command length, command %x", command)); + goto fail; + } + if (lun || buf[1] >> 5) { + BX_ERROR(("unimplemented LUN %d", lun ? lun : buf[1] >> 5)); + if ((command != 0x03) && (command != 0x12)) // REQUEST SENSE and INQUIRY + goto fail; + } + switch (command) { + case 0x0: + BX_DEBUG(("Test Unit Ready")); + if (!inserted) + goto notready; + break; + case 0x03: + BX_DEBUG(("request Sense (len %d)", len)); + if (len < 4) + goto fail; + memset(outbuf, 0, 4); + r->buf_len = 4; + if ((sense == SENSE_NOT_READY) && (len >= 18)) { + memset(outbuf, 0, 18); + r->buf_len = 18; + outbuf[7] = 10; + /* asc 0x3a, ascq 0: Medium not present */ + outbuf[12] = 0x3a; + outbuf[13] = 0; + } + outbuf[0] = 0xf0; + outbuf[1] = 0; + outbuf[2] = sense; + break; + case 0x12: + BX_DEBUG(("inquiry (len %d)", len)); + if (buf[1] & 0x2) { + // Command support data - optional, not implemented + BX_ERROR(("optional INQUIRY command support request not implemented")); + goto fail; + } else if (buf[1] & 0x1) { + // Vital product data + Bit8u page_code = buf[2]; + if (len < 4) { + BX_ERROR(("Error: Inquiry (EVPD[%02X]) buffer size %d is less than 4", page_code, len)); + goto fail; + } + switch (page_code) { + case 0x00: + // Supported page codes, mandatory + BX_DEBUG(("Inquiry EVPD[Supported pages] buffer size %d", len)); + + r->buf_len = 0; + + if (type == SCSIDEV_TYPE_CDROM) { + outbuf[r->buf_len++] = 5; + } else { + outbuf[r->buf_len++] = 0; + } + + outbuf[r->buf_len++] = 0x00; // this page + outbuf[r->buf_len++] = 0x00; + outbuf[r->buf_len++] = 3; // number of pages + outbuf[r->buf_len++] = 0x00; // list of supported pages (this page) + outbuf[r->buf_len++] = 0x80; // unit serial number + outbuf[r->buf_len++] = 0x83; // device identification + break; + + case 0x80: + { + int l; + + // Device serial number, optional + if (len < 4) { + BX_ERROR(("Error: EVPD[Serial number] Inquiry buffer size %d too small, %d needed", len, 4)); + goto fail; + } + + BX_DEBUG(("Inquiry EVPD[Serial number] buffer size %d\n", len)); + l = BX_MIN(len, (int)strlen(drive_serial_str)); + + r->buf_len = 0; + + // Supported page codes + if (type == SCSIDEV_TYPE_CDROM) { + outbuf[r->buf_len++] = 5; + } else { + outbuf[r->buf_len++] = 0; + } + + outbuf[r->buf_len++] = 0x80; // this page + outbuf[r->buf_len++] = 0x00; + outbuf[r->buf_len++] = l; + memcpy(&outbuf[r->buf_len], drive_serial_str, l); + r->buf_len += l; + } + break; + + case 0x83: + { + // Device identification page, mandatory + int max_len = 255 - 8; + int id_len = strlen(DEVICE_NAME); + if (id_len > max_len) + id_len = max_len; + + BX_DEBUG(("Inquiry EVPD[Device identification] buffer size %d", len)); + r->buf_len = 0; + if (type == SCSIDEV_TYPE_CDROM) { + outbuf[r->buf_len++] = 5; + } else { + outbuf[r->buf_len++] = 0; + } + + outbuf[r->buf_len++] = 0x83; // this page + outbuf[r->buf_len++] = 0x00; + outbuf[r->buf_len++] = 3 + id_len; + + outbuf[r->buf_len++] = 0x2; // ASCII + outbuf[r->buf_len++] = 0; // not officially assigned + outbuf[r->buf_len++] = 0; // reserved + outbuf[r->buf_len++] = id_len; // length of data following + + memcpy(&outbuf[r->buf_len], DEVICE_NAME, id_len); + r->buf_len += id_len; + } + break; + + default: + BX_ERROR(("Error: unsupported Inquiry (EVPD[%02X]) buffer size %d", page_code, len)); + goto fail; + } + // done with EVPD + break; + } else { + // Standard INQUIRY data + if (buf[2] != 0) { + BX_ERROR(("Error: Inquiry (STANDARD) page or code is non-zero [%02X]", buf[2])); + goto fail; + } + + // PAGE CODE == 0 + if (len < 5) { + BX_ERROR(("Error: Inquiry (STANDARD) buffer size %d is less than 5", len)); + goto fail; + } + + if (len < 36) { + BX_ERROR(("Error: Inquiry (STANDARD) buffer size %d is less than 36 (TODO: only 5 required)", len)); + } + } + + if(len > SCSI_MAX_INQUIRY_LEN) + len = SCSI_MAX_INQUIRY_LEN; + memset(outbuf, 0, len); + if (lun || buf[1] >> 5) { + outbuf[0] = 0x7f; // LUN not supported + } else if (type == SCSIDEV_TYPE_CDROM) { + outbuf[0] = 5; + outbuf[1] = 0x80; + memcpy(&outbuf[16], "BOCHS CD-ROM ", 16); + } else { + outbuf[0] = 0; + memcpy(&outbuf[16], "BOCHS HARDDISK ", 16); + } + memcpy(&outbuf[8], "BOCHS ", 8); + memcpy(&outbuf[32], "1.0", 4); + // Identify device as SCSI-3 rev 1. + // Some later commands are also implemented. + outbuf[2] = 3; + outbuf[3] = 2; // Format 2 + outbuf[4] = len - 5; // Additional Length = (Len - 1) - 4 + // Sync data transfer and TCQ. + outbuf[7] = 0x10 | (tcq ? 0x02 : 0); + r->buf_len = len; + break; + case 0x16: + BX_INFO(("Reserve(6)")); + if (buf[1] & 1) + goto fail; + break; + case 0x17: + BX_INFO(("Release(6)")); + if (buf[1] & 1) + goto fail; + break; + case 0x1a: + case 0x5a: + { + Bit8u *p; + int page; + + page = buf[2] & 0x3f; + BX_DEBUG(("mode sense (page %d, len %d)", page, len)); + p = outbuf; + memset(p, 0, 4); + outbuf[1] = 0; /* Default media type. */ + outbuf[3] = 0; /* Block descriptor length. */ + if (type == SCSIDEV_TYPE_CDROM) { + outbuf[2] = 0x80; /* Readonly. */ + } + p += 4; + if ((page == 4) || (page == 5)) { + BX_ERROR(("mode sense: page %d not implemented", page)); + } + if ((page == 8 || page == 0x3f)) { + /* Caching page. */ + memset(p, 0, 20); + p[0] = 8; + p[1] = 0x12; + p[2] = 4; /* WCE */ + p += 20; + } + if ((page == 0x3f || page == 0x2a) + && (type == SCSIDEV_TYPE_CDROM)) { + /* CD Capabilities and Mechanical Status page. */ + p[0] = 0x2a; + p[1] = 0x14; + p[2] = 3; // CD-R & CD-RW read + p[3] = 0; // Writing not supported + p[4] = 0x7f; /* Audio, composite, digital out, + mode 2 form 1&2, multi session */ + p[5] = 0xff; /* CD DA, DA accurate, RW supported, + RW corrected, C2 errors, ISRC, + UPC, Bar code */ + p[6] = 0x2d | (locked ? 2 : 0); + /* Locking supported, jumper present, eject, tray */ + p[7] = 0; /* no volume & mute control, no changer */ + p[8] = (50 * 176) >> 8; // 50x read speed + p[9] = (50 * 176) & 0xff; + p[10] = 0 >> 8; // No volume + p[11] = 0 & 0xff; + p[12] = 2048 >> 8; // 2M buffer + p[13] = 2048 & 0xff; + p[14] = (16 * 176) >> 8; // 16x read speed current + p[15] = (16 * 176) & 0xff; + p[18] = (16 * 176) >> 8; // 16x write speed + p[19] = (16 * 176) & 0xff; + p[20] = (16 * 176) >> 8; // 16x write speed current + p[21] = (16 * 176) & 0xff; + p += 22; + } + r->buf_len = p - outbuf; + outbuf[0] = r->buf_len - 4; + if (r->buf_len > (int)len) + r->buf_len = len; + } + break; + case 0x1b: + BX_INFO(("Start Stop Unit")); + if (type == SCSIDEV_TYPE_CDROM && (buf[4] & 2)) { + if (!(buf[4] & 1)) { + // eject medium + cdrom->eject_cdrom(); + inserted = 0; + } + } + break; + case 0x1e: + BX_INFO(("Prevent Allow Medium Removal (prevent = %d)", buf[4] & 3)); + locked = buf[4] & 1; + break; + case 0x25: + BX_DEBUG(("Read Capacity")); + // The normal LEN field for this command is zero + memset(outbuf, 0, 8); + if (type == SCSIDEV_TYPE_CDROM) { + nb_sectors = cdrom->capacity(); + } else { + nb_sectors = hdimage->hd_size / 512; + } + /* Returned value is the address of the last sector. */ + if (nb_sectors) { + nb_sectors--; + outbuf[0] = (Bit8u)((nb_sectors >> 24) & 0xff); + outbuf[1] = (Bit8u)((nb_sectors >> 16) & 0xff); + outbuf[2] = (Bit8u)((nb_sectors >> 8) & 0xff); + outbuf[3] = (Bit8u)(nb_sectors & 0xff); + outbuf[4] = 0; + outbuf[5] = 0; + outbuf[6] = cluster_size * 2; + outbuf[7] = 0; + r->buf_len = 8; + } else { + notready: + scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_NOT_READY); + return 0; + } + break; + case 0x08: + case 0x28: + case 0x88: + BX_DEBUG(("Read (sector "FMT_LL"d, count %d)", lba, len)); + if (lba > max_lba) + goto illegal_lba; + r->sector = lba; + r->sector_count = len; + break; + case 0x0a: + case 0x2a: + case 0x8a: + BX_DEBUG(("Write (sector "FMT_LL"d, count %d)", lba, len)); + if (lba > max_lba) + goto illegal_lba; + r->sector = lba; + r->sector_count = len; + is_write = 1; + break; + case 0x35: + BX_DEBUG(("Syncronise cache (sector "FMT_LL"d, count %d)", lba, len)); + // TODO: flush cache + break; + case 0x43: + { + int start_track, format, msf, toclen; + + if (type == SCSIDEV_TYPE_CDROM) { + msf = buf[1] & 2; + format = buf[2] & 0xf; + start_track = buf[6]; + BX_DEBUG(("Read TOC (track %d format %d msf %d)", start_track, format, msf >> 1)); + cdrom->read_toc(outbuf, &toclen, msf, start_track, format); + if (toclen > 0) { + if (len > toclen) + len = toclen; + r->buf_len = len; + break; + } + BX_ERROR(("Read TOC error")); + goto fail; + } else { + goto fail; + } + } + case 0x46: + BX_DEBUG(("Get Configuration (rt %d, maxlen %d)", buf[1] & 3, len)); + memset(outbuf, 0, 8); + /* ??? This shoud probably return much more information. For now + just return the basic header indicating the CD-ROM profile. */ + outbuf[7] = 8; // CD-ROM + r->buf_len = 8; + break; + case 0x56: + BX_INFO(("Reserve(10)")); + if (buf[1] & 3) + goto fail; + break; + case 0x57: + BX_INFO(("Release(10)")); + if (buf[1] & 3) + goto fail; + break; + case 0xa0: + BX_INFO(("Report LUNs (len %d)", len)); + if (len < 16) + goto fail; + memset(outbuf, 0, 16); + outbuf[3] = 8; + r->buf_len = 16; + break; + case 0x2f: + BX_INFO(("Verify")); + break; + case 0x23: { + // USBMASS-UFI10.pdf  rev 1.0  Section 4.10 + BX_INFO(("READ FORMAT CAPACITIES (MMC)")); + + unsigned len = (buf[7]<<8) | buf[8]; +#define OUR_LEN 12 + + // Cap List Header + outbuf[0] = 0; + outbuf[1] = 0; + outbuf[2] = 0; + outbuf[3] = OUR_LEN; + + // Current/Max Cap Header + if (type == SCSIDEV_TYPE_CDROM) { + nb_sectors = cdrom->capacity(); + } else { + nb_sectors = (hdimage->hd_size / 512); + } + /* Returned value is the address of the last sector.  */ + outbuf[4] = (Bit8u)((nb_sectors >> 24) & 0xff); + outbuf[5] = (Bit8u)((nb_sectors >> 16) & 0xff); + outbuf[6] = (Bit8u)((nb_sectors >> 8) & 0xff); + outbuf[7] = (Bit8u)(nb_sectors & 0xff); + outbuf[8] = 2; // formatted (1 = unformatted) + outbuf[9] = 0; + outbuf[10] = cluster_size * 2; + outbuf[11] = 0; + + r->buf_len = (len < OUR_LEN) ? len : OUR_LEN; + + } + break; + default: + BX_ERROR(("Unknown SCSI command (%2.2x)", buf[0])); + fail: + scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_ILLEGAL_REQUEST); + return 0; + illegal_lba: + scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); + return 0; + } + if (r->sector_count == 0 && r->buf_len == 0) { + scsi_command_complete(r, STATUS_GOOD, SENSE_NO_SENSE); + } + len = r->sector_count * 512 * cluster_size + r->buf_len; + if (is_write) { + return -len; + } else { + if (!r->sector_count) + r->sector_count = (Bit32u) -1; + return len; + } +} + +#endif // BX_SUPPORT_PCI && BX_SUPPORT_PCIUSB diff --git a/bochs/iodev/scsi_device.h b/bochs/iodev/scsi_device.h new file mode 100644 index 00000000..77d1a968 --- /dev/null +++ b/bochs/iodev/scsi_device.h @@ -0,0 +1,106 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2007 Volker Ruppert +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// SCSI emulation layer ported from the Qemu project + +#ifndef BX_IODEV_SCSI_DEVICE_H +#define BX_IODEV_SCSI_DEVICE_H + +typedef void (*scsi_completionfn)(void *opaque, int reason, Bit32u tag, + Bit32u arg); +class scsi_device_t; +class LOWLEVEL_CDROM; + +enum scsidev_type { + SCSIDEV_TYPE_DISK, + SCSIDEV_TYPE_CDROM +}; + +enum scsi_reason { + SCSI_REASON_DONE, + SCSI_REASON_DATA +}; + +#define SENSE_NO_SENSE 0 +#define SENSE_NOT_READY 2 +#define SENSE_HARDWARE_ERROR 4 +#define SENSE_ILLEGAL_REQUEST 5 + +#define STATUS_GOOD 0 +#define STATUS_CHECK_CONDITION 2 + +#define SCSI_DMA_BUF_SIZE 131072 +#define SCSI_MAX_INQUIRY_LEN 256 + +typedef struct SCSIRequest { + scsi_device_t *dev; + Bit32u tag; + Bit64u sector; + Bit32u sector_count; + int buf_len; + Bit8u dma_buf[SCSI_DMA_BUF_SIZE]; + Bit32u status; + struct SCSIRequest *next; +} SCSIRequest; + + +class scsi_device_t : public logfunctions { +public: + scsi_device_t(device_image_t *_hdimage, int _tcq, + scsi_completionfn _completion, void *_dev); + scsi_device_t(LOWLEVEL_CDROM *_cdrom, int _tcq, + scsi_completionfn _completion, void *_dev); + virtual ~scsi_device_t(void); + + void register_state(bx_list_c *parent, const char *name); + Bit32s scsi_send_command(Bit32u tag, Bit8u *buf, int lun); + void scsi_command_complete(SCSIRequest *r, int status, int sense); + void scsi_cancel_io(Bit32u tag); + void scsi_read_complete(void *req, int ret); + void scsi_read_data(Bit32u tag); + void scsi_write_complete(void *req, int ret); + int scsi_write_data(Bit32u tag); + Bit8u* scsi_get_buf(Bit32u tag); + const char *get_serial_number() {return drive_serial_str;} + void set_inserted(bx_bool value) {inserted = value;} + bx_bool get_inserted() {return inserted;} + +protected: + SCSIRequest* scsi_new_request(Bit32u tag); + void scsi_remove_request(SCSIRequest *r); + SCSIRequest *scsi_find_request(Bit32u tag); + +private: + enum scsidev_type type; + device_image_t *hdimage; + LOWLEVEL_CDROM *cdrom; + SCSIRequest *requests; + int cluster_size; + Bit64u max_lba; + int sense; + int tcq; + scsi_completionfn completion; + void *dev; + bx_bool locked; + bx_bool inserted; + char drive_serial_str[21]; +}; + +#endif diff --git a/bochs/iodev/scsidefs.h b/bochs/iodev/scsidefs.h new file mode 100644 index 00000000..b652c922 --- /dev/null +++ b/bochs/iodev/scsidefs.h @@ -0,0 +1,283 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +// +// iodev/scsidefs.h +// +// This file was copied from ... ? +// + +//*************************************************************************** +// Name: SCSIDEFS.H +// +// Description: SCSI definitions ('C' Language) +//*************************************************************************** + +//*************************************************************************** +// %%% TARGET STATUS VALUES %%% +//*************************************************************************** +#define STATUS_GOOD 0x00 // Status Good +#define STATUS_CHKCOND 0x02 // Check Condition +#define STATUS_CONDMET 0x04 // Condition Met +#define STATUS_BUSY 0x08 // Busy +#define STATUS_INTERM 0x10 // Intermediate +#define STATUS_INTCDMET 0x14 // Intermediate-condition met +#define STATUS_RESCONF 0x18 // Reservation conflict +#define STATUS_COMTERM 0x22 // Command Terminated +#define STATUS_QFULL 0x28 // Queue full + +//*************************************************************************** +// %%% SCSI MISCELLANEOUS EQUATES %%% +//*************************************************************************** +#define MAXLUN 7 // Maximum Logical Unit Id +#define MAXTARG 7 // Maximum Target Id +#define MAX_SCSI_LUNS 64 // Maximum Number of SCSI LUNs +#define MAX_NUM_HA 8 // Maximum Number of SCSI HA's + +//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ +// +// %%% SCSI COMMAND OPCODES %%% +// +///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ + +//*************************************************************************** +// %%% Commands for all Device Types %%% +//*************************************************************************** +#define SCSI_CHANGE_DEF 0x40 // Change Definition (Optional) +#define SCSI_COMPARE 0x39 // Compare (O) +#define SCSI_COPY 0x18 // Copy (O) +#define SCSI_COP_VERIFY 0x3A // Copy and Verify (O) +#define SCSI_INQUIRY 0x12 // Inquiry (MANDATORY) +#define SCSI_LOG_SELECT 0x4C // Log Select (O) +#define SCSI_LOG_SENSE 0x4D // Log Sense (O) +#define SCSI_MODE_SEL6 0x15 // Mode Select 6-byte (Device Specific) +#define SCSI_MODE_SEL10 0x55 // Mode Select 10-byte (Device Specific) +#define SCSI_MODE_SEN6 0x1A // Mode Sense 6-byte (Device Specific) +#define SCSI_MODE_SEN10 0x5A // Mode Sense 10-byte (Device Specific) +#define SCSI_READ_BUFF 0x3C // Read Buffer (O) +#define SCSI_REQ_SENSE 0x03 // Request Sense (MANDATORY) +#define SCSI_SEND_DIAG 0x1D // Send Diagnostic (O) +#define SCSI_TST_U_RDY 0x00 // Test Unit Ready (MANDATORY) +#define SCSI_WRITE_BUFF 0x3B // Write Buffer (O) + +//*************************************************************************** +// %%% Commands Unique to Direct Access Devices %%% +//*************************************************************************** +#define SCSI_COMPARE 0x39 // Compare (O) +#define SCSI_FORMAT 0x04 // Format Unit (MANDATORY) +#define SCSI_LCK_UN_CAC 0x36 // Lock Unlock Cache (O) +#define SCSI_PREFETCH 0x34 // Prefetch (O) +#define SCSI_MED_REMOVL 0x1E // Prevent/Allow medium Removal (O) +#define SCSI_READ6 0x08 // Read 6-byte (MANDATORY) +#define SCSI_READ10 0x28 // Read 10-byte (MANDATORY) +#define SCSI_RD_CAPAC 0x25 // Read Capacity (MANDATORY) +#define SCSI_RD_DEFECT 0x37 // Read Defect Data (O) +#define SCSI_READ_LONG 0x3E // Read Long (O) +#define SCSI_REASS_BLK 0x07 // Reassign Blocks (O) +#define SCSI_RCV_DIAG 0x1C // Receive Diagnostic Results (O) +#define SCSI_RELEASE 0x17 // Release Unit (MANDATORY) +#define SCSI_REZERO 0x01 // Rezero Unit (O) +#define SCSI_SRCH_DAT_E 0x31 // Search Data Equal (O) +#define SCSI_SRCH_DAT_H 0x30 // Search Data High (O) +#define SCSI_SRCH_DAT_L 0x32 // Search Data Low (O) +#define SCSI_SEEK6 0x0B // Seek 6-Byte (O) +#define SCSI_SEEK10 0x2B // Seek 10-Byte (O) +#define SCSI_SEND_DIAG 0x1D // Send Diagnostics (MANDATORY) +#define SCSI_SET_LIMIT 0x33 // Set Limits (O) +#define SCSI_START_STP 0x1B // Start/Stop Unit (O) +#define SCSI_SYNC_CACHE 0x35 // Synchronize Cache (O) +#define SCSI_VERIFY 0x2F // Verify (O) +#define SCSI_WRITE6 0x0A // Write 6-Byte (MANDATORY) +#define SCSI_WRITE10 0x2A // Write 10-Byte (MANDATORY) +#define SCSI_WRT_VERIFY 0x2E // Write and Verify (O) +#define SCSI_WRITE_LONG 0x3F // Write Long (O) +#define SCSI_WRITE_SAME 0x41 // Write Same (O) + +//*************************************************************************** +// %%% Commands Unique to Sequential Access Devices %%% +//*************************************************************************** +#define SCSI_ERASE 0x19 // Erase (MANDATORY) +#define SCSI_LOAD_UN 0x1B // Load/Unload (O) +#define SCSI_LOCATE 0x2B // Locate (O) +#define SCSI_RD_BLK_LIM 0x05 // Read Block Limits (MANDATORY) +#define SCSI_READ_POS 0x34 // Read Position (O) +#define SCSI_READ_REV 0x0F // Read Reverse (O) +#define SCSI_REC_BF_DAT 0x14 // Recover Buffer Data (O) +#define SCSI_RESERVE 0x16 // Reserve Unit (MANDATORY) +#define SCSI_REWIND 0x01 // Rewind (MANDATORY) +#define SCSI_SPACE 0x11 // Space (MANDATORY) +#define SCSI_VERIFY_T 0x13 // Verify (Tape) (O) +#define SCSI_WRT_FILE 0x10 // Write Filemarks (MANDATORY) + +//*************************************************************************** +// %%% Commands Unique to Printer Devices %%% +//*************************************************************************** +#define SCSI_PRINT 0x0A // Print (MANDATORY) +#define SCSI_SLEW_PNT 0x0B // Slew and Print (O) +#define SCSI_STOP_PNT 0x1B // Stop Print (O) +#define SCSI_SYNC_BUFF 0x10 // Synchronize Buffer (O) + +//*************************************************************************** +// %%% Commands Unique to Processor Devices %%% +//*************************************************************************** +#define SCSI_RECEIVE 0x08 // Receive (O) +#define SCSI_SEND 0x0A // Send (O) + +//*************************************************************************** +// %%% Commands Unique to Write-Once Devices %%% +//*************************************************************************** +#define SCSI_MEDIUM_SCN 0x38 // Medium Scan (O) +#define SCSI_SRCHDATE10 0x31 // Search Data Equal 10-Byte (O) +#define SCSI_SRCHDATE12 0xB1 // Search Data Equal 12-Byte (O) +#define SCSI_SRCHDATH10 0x30 // Search Data High 10-Byte (O) +#define SCSI_SRCHDATH12 0xB0 // Search Data High 12-Byte (O) +#define SCSI_SRCHDATL10 0x32 // Search Data Low 10-Byte (O) +#define SCSI_SRCHDATL12 0xB2 // Search Data Low 12-Byte (O) +#define SCSI_SET_LIM_10 0x33 // Set Limits 10-Byte (O) +#define SCSI_SET_LIM_12 0xB3 // Set Limits 10-Byte (O) +#define SCSI_VERIFY10 0x2F // Verify 10-Byte (O) +#define SCSI_VERIFY12 0xAF // Verify 12-Byte (O) +#define SCSI_WRITE12 0xAA // Write 12-Byte (O) +#define SCSI_WRT_VER10 0x2E // Write and Verify 10-Byte (O) +#define SCSI_WRT_VER12 0xAE // Write and Verify 12-Byte (O) + +//*************************************************************************** +// %%% Commands Unique to CD-ROM Devices %%% +//*************************************************************************** +#define SCSI_PLAYAUD_10 0x45 // Play Audio 10-Byte (O) +#define SCSI_PLAYAUD_12 0xA5 // Play Audio 12-Byte 12-Byte (O) +#define SCSI_PLAYAUDMSF 0x47 // Play Audio MSF (O) +#define SCSI_PLAYA_TKIN 0x48 // Play Audio Track/Index (O) +#define SCSI_PLYTKREL10 0x49 // Play Track Relative 10-Byte (O) +#define SCSI_PLYTKREL12 0xA9 // Play Track Relative 12-Byte (O) +#define SCSI_READCDCAP 0x25 // Read CD-ROM Capacity (MANDATORY) +#define SCSI_READHEADER 0x44 // Read Header (O) +#define SCSI_SUBCHANNEL 0x42 // Read Subchannel (O) +#define SCSI_READ_TOC 0x43 // Read TOC (O) + +//*************************************************************************** +// %%% Commands Unique to Scanner Devices %%% +//*************************************************************************** +#define SCSI_GETDBSTAT 0x34 // Get Data Buffer Status (O) +#define SCSI_GETWINDOW 0x25 // Get Window (O) +#define SCSI_OBJECTPOS 0x31 // Object Postion (O) +#define SCSI_SCAN 0x1B // Scan (O) +#define SCSI_SETWINDOW 0x24 // Set Window (MANDATORY) + +//*************************************************************************** +// %%% Commands Unique to Optical Memory Devices %%% +//*************************************************************************** +#define SCSI_UpdateBlk 0x3D // Update Block (O) + +//*************************************************************************** +// %%% Commands Unique to Medium Changer Devices %%% +//*************************************************************************** +#define SCSI_EXCHMEDIUM 0xA6 // Exchange Medium (O) +#define SCSI_INITELSTAT 0x07 // Initialize Element Status (O) +#define SCSI_POSTOELEM 0x2B // Position to Element (O) +#define SCSI_REQ_VE_ADD 0xB5 // Request Volume Element Address (O) +#define SCSI_SENDVOLTAG 0xB6 // Send Volume Tag (O) + +//*************************************************************************** +// %%% Commands Unique to Communication Devices %%% +//*************************************************************************** +#define SCSI_GET_MSG_6 0x08 // Get Message 6-Byte (MANDATORY) +#define SCSI_GET_MSG_10 0x28 // Get Message 10-Byte (O) +#define SCSI_GET_MSG_12 0xA8 // Get Message 12-Byte (O) +#define SCSI_SND_MSG_6 0x0A // Send Message 6-Byte (MANDATORY) +#define SCSI_SND_MSG_10 0x2A // Send Message 10-Byte (O) +#define SCSI_SND_MSG_12 0xAA // Send Message 12-Byte (O) + +//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ +// +// %%% END OF SCSI COMMAND OPCODES %%% +// +///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ + +//*************************************************************************** +// %%% Request Sense Data Format %%% +//*************************************************************************** +typedef struct { + + BYTE ErrorCode; // Error Code (70H or 71H) + BYTE SegmentNum; // Number of current segment descriptor + BYTE SenseKey; // Sense Key(See bit definitions too) + BYTE InfoByte0; // Information MSB + BYTE InfoByte1; // Information MID + BYTE InfoByte2; // Information MID + BYTE InfoByte3; // Information LSB + BYTE AddSenLen; // Additional Sense Length + BYTE ComSpecInf0; // Command Specific Information MSB + BYTE ComSpecInf1; // Command Specific Information MID + BYTE ComSpecInf2; // Command Specific Information MID + BYTE ComSpecInf3; // Command Specific Information LSB + BYTE AddSenseCode; // Additional Sense Code + BYTE AddSenQual; // Additional Sense Code Qualifier + BYTE FieldRepUCode; // Field Replaceable Unit Code + BYTE SenKeySpec15; // Sense Key Specific 15th byte + BYTE SenKeySpec16; // Sense Key Specific 16th byte + BYTE SenKeySpec17; // Sense Key Specific 17th byte + BYTE AddSenseBytes; // Additional Sense Bytes + +} SENSE_DATA_FMT; + +//*************************************************************************** +// %%% REQUEST SENSE ERROR CODE %%% +//*************************************************************************** +#define SERROR_CURRENT 0x70 // Current Errors +#define SERROR_DEFERED 0x71 // Deferred Errors + +//*************************************************************************** +// %%% REQUEST SENSE BIT DEFINITIONS %%% +//*************************************************************************** +#define SENSE_VALID 0x80 // Byte 0 Bit 7 +#define SENSE_FILEMRK 0x80 // Byte 2 Bit 7 +#define SENSE_EOM 0x40 // Byte 2 Bit 6 +#define SENSE_ILI 0x20 // Byte 2 Bit 5 + +//*************************************************************************** +// %%% REQUEST SENSE SENSE KEY DEFINITIONS %%% +//*************************************************************************** +#define KEY_NOSENSE 0x00 // No Sense +#define KEY_RECERROR 0x01 // Recovered Error +#define KEY_NOTREADY 0x02 // Not Ready +#define KEY_MEDIUMERR 0x03 // Medium Error +#define KEY_HARDERROR 0x04 // Hardware Error +#define KEY_ILLGLREQ 0x05 // Illegal Request +#define KEY_UNITATT 0x06 // Unit Attention +#define KEY_DATAPROT 0x07 // Data Protect +#define KEY_BLANKCHK 0x08 // Blank Check +#define KEY_VENDSPEC 0x09 // Vendor Specific +#define KEY_COPYABORT 0x0A // Copy Abort +#define KEY_EQUAL 0x0C // Equal (Search) +#define KEY_VOLOVRFLW 0x0D // Volume Overflow +#define KEY_MISCOMP 0x0E // Miscompare (Search) +#define KEY_RESERVED 0x0F // Reserved + +//*************************************************************************** +// %%% PERIPHERAL DEVICE TYPE DEFINITIONS %%% +//*************************************************************************** +#define DTYPE_DASD 0x00 // Disk Device +#define DTYPE_SEQD 0x01 // Tape Device +#define DTYPE_PRNT 0x02 // Printer +#define DTYPE_PROC 0x03 // Processor +#define DTYPE_WORM 0x04 // Write-once read-multiple +#define DTYPE_CROM 0x05 // CD-ROM device +#define DTYPE_CDROM 0x05 // CD-ROM device +#define DTYPE_SCAN 0x06 // Scanner device +#define DTYPE_OPTI 0x07 // Optical memory device +#define DTYPE_JUKE 0x08 // Medium Changer device +#define DTYPE_COMM 0x09 // Communications device +#define DTYPE_RESL 0x0A // Reserved (low) +#define DTYPE_RESH 0x1E // Reserved (high) +#define DTYPE_UNKNOWN 0x1F // Unknown or no device type + +//*************************************************************************** +// %%% ANSI APPROVED VERSION DEFINITIONS %%% +//*************************************************************************** +#define ANSI_MAYBE 0x0 // Device may or may not be ANSI approved stand +#define ANSI_SCSI1 0x1 // Device complies to ANSI X3.131-1986 (SCSI-1) +#define ANSI_SCSI2 0x2 // Device complies to SCSI-2 +#define ANSI_RESLO 0x3 // Reserved (low) +#define ANSI_RESHI 0x7 // Reserved (high) diff --git a/bochs/iodev/scsipt.h b/bochs/iodev/scsipt.h new file mode 100644 index 00000000..89a8dfa1 --- /dev/null +++ b/bochs/iodev/scsipt.h @@ -0,0 +1,142 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +// +// iodev/scsipt.h +// This file was copied from ... ? +// +// distilled information from various header files from Microsoft's +// DDK for Windows NT 4.0 +// + +#ifndef _SCSIPT_H_INC +#define _SCSIPT_H_INC + +#include + +typedef struct { + USHORT Length; + UCHAR ScsiStatus; + UCHAR PathId; + UCHAR TargetId; + UCHAR Lun; + UCHAR CdbLength; + UCHAR SenseInfoLength; + UCHAR DataIn; + ULONG DataTransferLength; + ULONG TimeOutValue; + ULONG DataBufferOffset; + ULONG SenseInfoOffset; + UCHAR Cdb[16]; +} SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH; + + +typedef struct { + USHORT Length; + UCHAR ScsiStatus; + UCHAR PathId; + UCHAR TargetId; + UCHAR Lun; + UCHAR CdbLength; + UCHAR SenseInfoLength; + UCHAR DataIn; + ULONG DataTransferLength; + ULONG TimeOutValue; + PVOID DataBuffer; + ULONG SenseInfoOffset; + UCHAR Cdb[16]; +} SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT; + + +typedef struct { + SCSI_PASS_THROUGH spt; + ULONG Filler; + UCHAR ucSenseBuf[32]; + UCHAR ucDataBuf[512]; +} SCSI_PASS_THROUGH_WITH_BUFFERS, *PSCSI_PASS_THROUGH_WITH_BUFFERS; + + +typedef struct { + SCSI_PASS_THROUGH_DIRECT spt; + ULONG Filler; + UCHAR ucSenseBuf[32]; +} SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, *PSCSI_PASS_THROUGH_DIRECT_WITH_BUFFER; + + + +typedef struct { + UCHAR NumberOfLogicalUnits; + UCHAR InitiatorBusId; + ULONG InquiryDataOffset; +} SCSI_BUS_DATA, *PSCSI_BUS_DATA; + + +typedef struct { + UCHAR NumberOfBusses; + SCSI_BUS_DATA BusData[1]; +} SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO; + + +typedef struct { + UCHAR PathId; + UCHAR TargetId; + UCHAR Lun; + BOOLEAN DeviceClaimed; + ULONG InquiryDataLength; + ULONG NextInquiryDataOffset; + UCHAR InquiryData[1]; +} SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA; + + +typedef struct { + ULONG Length; + UCHAR PortNumber; + UCHAR PathId; + UCHAR TargetId; + UCHAR Lun; +} SCSI_ADDRESS, *PSCSI_ADDRESS; + + +/* + * method codes + */ +#define METHOD_BUFFERED 0 +#define METHOD_IN_DIRECT 1 +#define METHOD_OUT_DIRECT 2 +#define METHOD_NEITHER 3 + +/* + * file access values + */ +#define FILE_ANY_ACCESS 0 +#define FILE_READ_ACCESS (0x0001) +#define FILE_WRITE_ACCESS (0x0002) + + +#define IOCTL_SCSI_BASE 0x00000004 + +/* + * constants for DataIn member of SCSI_PASS_THROUGH* structures + */ +#define SCSI_IOCTL_DATA_OUT 0 +#define SCSI_IOCTL_DATA_IN 1 +#define SCSI_IOCTL_DATA_UNSPECIFIED 2 + +/* + * Standard IOCTL define + */ +#define CTL_CODE(DevType, Function, Method, Access) ( \ + ((DevType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \ +) + +#define IOCTL_SCSI_PASS_THROUGH CTL_CODE( IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS ) +#define IOCTL_SCSI_MINIPORT CTL_CODE( IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS ) +#define IOCTL_SCSI_GET_INQUIRY_DATA CTL_CODE( IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_SCSI_GET_CAPABILITIES CTL_CODE( IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_SCSI_PASS_THROUGH_DIRECT CTL_CODE( IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS ) +#define IOCTL_SCSI_GET_ADDRESS CTL_CODE( IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS ) + + + +#endif diff --git a/bochs/iodev/serial.cc b/bochs/iodev/serial.cc new file mode 100644 index 00000000..059aaa02 --- /dev/null +++ b/bochs/iodev/serial.cc @@ -0,0 +1,1627 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2004-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Peter Grehan (grehan@iprg.nokia.com) coded the original version of this +// serial emulation. He implemented a single 8250, and allow terminal +// input/output to stdout on FreeBSD. +// The current version emulates up to 4 UART 16550A with FIFO. Terminal +// input/output now works on some more platforms. + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#ifndef WIN32 +#include +#include +#include +#define closesocket(s) close(s) +typedef int SOCKET; +#endif + +#include "iodev.h" +#include "serial.h" + +#if defined(WIN32) && !defined(FILE_FLAG_FIRST_PIPE_INSTANCE) +#define FILE_FLAG_FIRST_PIPE_INSTANCE 0 +#endif + +#if USE_RAW_SERIAL +#include "serial_raw.h" +#endif + +#define LOG_THIS theSerialDevice-> + +bx_serial_c *theSerialDevice = NULL; + +int libserial_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theSerialDevice = new bx_serial_c(); + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theSerialDevice, BX_PLUGIN_SERIAL); + return(0); // Success +} + +void libserial_LTX_plugin_fini(void) +{ + delete theSerialDevice; +} + +bx_serial_c::bx_serial_c(void) +{ + put("SER"); + for (int i=0; iget_param(pname); + if (SIM->get_param_bool("enabled", base)->get()) { + switch (BX_SER_THIS s[i].io_mode) { + case BX_SER_MODE_FILE: + if (BX_SER_THIS s[i].output != NULL) + fclose(BX_SER_THIS s[i].output); + break; + case BX_SER_MODE_TERM: +#if defined(SERIAL_ENABLE) && !defined(WIN32) + if (s[i].tty_id >= 0) { + tcsetattr(s[i].tty_id, TCSAFLUSH, &s[i].term_orig); + } +#endif + break; + case BX_SER_MODE_RAW: +#if USE_RAW_SERIAL + delete [] BX_SER_THIS s[i].raw; +#endif + break; + case BX_SER_MODE_SOCKET: + if (BX_SER_THIS s[i].socket_id >= 0) closesocket(BX_SER_THIS s[i].socket_id); + break; + case BX_SER_MODE_PIPE: +#ifdef WIN32 + if (BX_SER_THIS s[i].pipe) + CloseHandle(BX_SER_THIS s[i].pipe); +#endif + break; + } + } + } + BX_DEBUG(("Exit")); +} + + + void +bx_serial_c::init(void) +{ + Bit16u ports[BX_SERIAL_MAXDEV] = {0x03f8, 0x02f8, 0x03e8, 0x02e8}; + char name[16], pname[20]; + bx_list_c *base; + unsigned i; + + BX_SER_THIS detect_mouse = 0; + BX_SER_THIS mouse_port = -1; + BX_SER_THIS mouse_type = BX_MOUSE_TYPE_NONE; + BX_SER_THIS mouse_internal_buffer.num_elements = 0; + for (i=0; iget_param(pname); + if (SIM->get_param_bool("enabled", base)->get()) { + sprintf(name, "Serial Port %d", i + 1); + /* serial interrupt */ + BX_SER_THIS s[i].IRQ = 4 - (i & 1); + if (i < 2) { + DEV_register_irq(BX_SER_THIS s[i].IRQ, name); + } + /* internal state */ + BX_SER_THIS s[i].ls_ipending = 0; + BX_SER_THIS s[i].ms_ipending = 0; + BX_SER_THIS s[i].rx_ipending = 0; + BX_SER_THIS s[i].fifo_ipending = 0; + BX_SER_THIS s[i].ls_interrupt = 0; + BX_SER_THIS s[i].ms_interrupt = 0; + BX_SER_THIS s[i].rx_interrupt = 0; + BX_SER_THIS s[i].tx_interrupt = 0; + BX_SER_THIS s[i].fifo_interrupt = 0; + + if (BX_SER_THIS s[i].tx_timer_index == BX_NULL_TIMER_HANDLE) { + BX_SER_THIS s[i].tx_timer_index = + bx_pc_system.register_timer(this, tx_timer_handler, 0, + 0,0, "serial.tx"); // one-shot, inactive + } + + if (BX_SER_THIS s[i].rx_timer_index == BX_NULL_TIMER_HANDLE) { + BX_SER_THIS s[i].rx_timer_index = + bx_pc_system.register_timer(this, rx_timer_handler, 0, + 0,0, "serial.rx"); // one-shot, inactive + } + if (BX_SER_THIS s[i].fifo_timer_index == BX_NULL_TIMER_HANDLE) { + BX_SER_THIS s[i].fifo_timer_index = + bx_pc_system.register_timer(this, fifo_timer_handler, 0, + 0,0, "serial.fifo"); // one-shot, inactive + } + BX_SER_THIS s[i].rx_pollstate = BX_SER_RXIDLE; + + /* int enable: b0000 0000 */ + BX_SER_THIS s[i].int_enable.rxdata_enable = 0; + BX_SER_THIS s[i].int_enable.txhold_enable = 0; + BX_SER_THIS s[i].int_enable.rxlstat_enable = 0; + BX_SER_THIS s[i].int_enable.modstat_enable = 0; + + /* int ID: b0000 0001 */ + BX_SER_THIS s[i].int_ident.ipending = 1; + BX_SER_THIS s[i].int_ident.int_ID = 0; + + /* FIFO control: b0000 0000 */ + BX_SER_THIS s[i].fifo_cntl.enable = 0; + BX_SER_THIS s[i].fifo_cntl.rxtrigger = 0; + BX_SER_THIS s[i].rx_fifo_end = 0; + BX_SER_THIS s[i].tx_fifo_end = 0; + + /* Line Control reg: b0000 0000 */ + BX_SER_THIS s[i].line_cntl.wordlen_sel = 0; + BX_SER_THIS s[i].line_cntl.stopbits = 0; + BX_SER_THIS s[i].line_cntl.parity_enable = 0; + BX_SER_THIS s[i].line_cntl.evenparity_sel = 0; + BX_SER_THIS s[i].line_cntl.stick_parity = 0; + BX_SER_THIS s[i].line_cntl.break_cntl = 0; + BX_SER_THIS s[i].line_cntl.dlab = 0; + + /* Modem Control reg: b0000 0000 */ + BX_SER_THIS s[i].modem_cntl.dtr = 0; + BX_SER_THIS s[i].modem_cntl.rts = 0; + BX_SER_THIS s[i].modem_cntl.out1 = 0; + BX_SER_THIS s[i].modem_cntl.out2 = 0; + BX_SER_THIS s[i].modem_cntl.local_loopback = 0; + + /* Line Status register: b0110 0000 */ + BX_SER_THIS s[i].line_status.rxdata_ready = 0; + BX_SER_THIS s[i].line_status.overrun_error = 0; + BX_SER_THIS s[i].line_status.parity_error = 0; + BX_SER_THIS s[i].line_status.framing_error = 0; + BX_SER_THIS s[i].line_status.break_int = 0; + BX_SER_THIS s[i].line_status.thr_empty = 1; + BX_SER_THIS s[i].line_status.tsr_empty = 1; + BX_SER_THIS s[i].line_status.fifo_error = 0; + + /* Modem Status register: bXXXX 0000 */ + BX_SER_THIS s[i].modem_status.delta_cts = 0; + BX_SER_THIS s[i].modem_status.delta_dsr = 0; + BX_SER_THIS s[i].modem_status.ri_trailedge = 0; + BX_SER_THIS s[i].modem_status.delta_dcd = 0; + BX_SER_THIS s[i].modem_status.cts = 0; + BX_SER_THIS s[i].modem_status.dsr = 0; + BX_SER_THIS s[i].modem_status.ri = 0; + BX_SER_THIS s[i].modem_status.dcd = 0; + + BX_SER_THIS s[i].scratch = 0; /* scratch register */ + BX_SER_THIS s[i].divisor_lsb = 1; /* divisor-lsb register */ + BX_SER_THIS s[i].divisor_msb = 0; /* divisor-msb register */ + + BX_SER_THIS s[i].baudrate = 115200; + + for (unsigned addr=ports[i]; addr<(unsigned)(ports[i]+8); addr++) { + BX_DEBUG(("com%d initialize register for read/write: 0x%04x",i+1, addr)); + DEV_register_ioread_handler(this, read_handler, addr, name, 1); + DEV_register_iowrite_handler(this, write_handler, addr, name, 1); + } + + BX_SER_THIS s[i].io_mode = BX_SER_MODE_NULL; + const char *mode = SIM->get_param_enum("mode", base)->get_selected(); + const char *dev = SIM->get_param_string("dev", base)->getptr(); + if (!strcmp(mode, "file")) { + if (strlen(dev) > 0) { + BX_SER_THIS s[i].output = fopen(dev, "wb"); + if (BX_SER_THIS s[i].output) + BX_SER_THIS s[i].io_mode = BX_SER_MODE_FILE; + } + } else if (!strcmp(mode, "term")) { +#if defined(SERIAL_ENABLE) && !defined(WIN32) + if (strlen(dev) > 0) { + BX_SER_THIS s[i].tty_id = open(dev, O_RDWR|O_NONBLOCK,600); + if (BX_SER_THIS s[i].tty_id < 0) { + BX_PANIC(("open of com%d (%s) failed", i+1, dev)); + } else { + BX_SER_THIS s[i].io_mode = BX_SER_MODE_TERM; + BX_DEBUG(("com%d tty_id: %d", i+1, BX_SER_THIS s[i].tty_id)); + tcgetattr(BX_SER_THIS s[i].tty_id, &BX_SER_THIS s[i].term_orig); + memcpy(&BX_SER_THIS s[i].term_orig, &BX_SER_THIS s[i].term_new, sizeof(struct termios)); + BX_SER_THIS s[i].term_new.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); + BX_SER_THIS s[i].term_new.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); + BX_SER_THIS s[i].term_new.c_cflag &= ~(CSIZE|PARENB); + BX_SER_THIS s[i].term_new.c_cflag |= CS8; + BX_SER_THIS s[i].term_new.c_oflag |= OPOST | ONLCR; // Enable NL to CR-NL translation +#ifndef TRUE_CTLC + // ctl-C will exit Bochs, or trap to the debugger + BX_SER_THIS s[i].term_new.c_iflag &= ~IGNBRK; + BX_SER_THIS s[i].term_new.c_iflag |= BRKINT; + BX_SER_THIS s[i].term_new.c_lflag |= ISIG; +#else + // ctl-C will be delivered to the serial port + BX_SER_THIS s[i].term_new.c_iflag |= IGNBRK; + BX_SER_THIS s[i].term_new.c_iflag &= ~BRKINT; +#endif /* !def TRUE_CTLC */ + BX_SER_THIS s[i].term_new.c_iflag = 0; + BX_SER_THIS s[i].term_new.c_oflag = 0; + BX_SER_THIS s[i].term_new.c_cflag = CS8|CREAD|CLOCAL; + BX_SER_THIS s[i].term_new.c_lflag = 0; + BX_SER_THIS s[i].term_new.c_cc[VMIN] = 1; + BX_SER_THIS s[i].term_new.c_cc[VTIME] = 0; + //BX_SER_THIS s[i].term_new.c_iflag |= IXOFF; + tcsetattr(BX_SER_THIS s[i].tty_id, TCSAFLUSH, &BX_SER_THIS s[i].term_new); + } + } +#else + BX_PANIC(("serial terminal support not available")); +#endif /* def SERIAL_ENABLE */ + } else if (!strcmp(mode, "raw")) { +#if USE_RAW_SERIAL + BX_SER_THIS s[i].raw = new serial_raw(dev); + BX_SER_THIS s[i].io_mode = BX_SER_MODE_RAW; +#else + BX_PANIC(("raw serial support not present")); +#endif + } else if (!strcmp(mode, "mouse")) { + BX_SER_THIS s[i].io_mode = BX_SER_MODE_MOUSE; + BX_SER_THIS mouse_port = i; + BX_SER_THIS mouse_type = SIM->get_param_enum(BXPN_MOUSE_TYPE)->get(); + } else if (!strncmp(mode, "socket", 6)) { + BX_SER_THIS s[i].io_mode = BX_SER_MODE_SOCKET; + struct sockaddr_in sin; + struct hostent *hp; + char host[BX_PATHNAME_LEN]; + int port; + SOCKET socket; + bx_bool server = !strcmp(mode, "socket-server"); + +#if defined(WIN32) + static bx_bool winsock_init = false; + if (!winsock_init) { + WORD wVersionRequested; + WSADATA wsaData; + int err; + wVersionRequested = MAKEWORD(2, 0); + err = WSAStartup(wVersionRequested, &wsaData); + if (err != 0) + BX_PANIC(("WSAStartup failed")); + winsock_init = true; + } +#endif + + strcpy(host, dev); + char *substr = strtok(host, ":"); + substr = strtok(NULL, ":"); + if (!substr) { + BX_PANIC(("com%d: inet address is wrong (%s)", i+1, dev)); + } + port = atoi(substr); + + hp = gethostbyname(host); + if (!hp) { + BX_PANIC(("com%d: gethostbyname failed (%s)", i+1, host)); + } + + memset ((char*) &sin, 0, sizeof (sin)); +#if BX_HAVE_SOCKADDR_IN_SIN_LEN + sin.sin_len = sizeof sin; +#endif + memcpy ((char*) &(sin.sin_addr), hp->h_addr, hp->h_length); + sin.sin_family = hp->h_addrtype; + sin.sin_port = htons (port); + + socket = ::socket (AF_INET, SOCK_STREAM, 0); + if (socket < 0) + BX_PANIC(("com%d: socket() failed",i+1)); + + // server mode + if (server) { + if (::bind (socket, (sockaddr *) &sin, sizeof (sin)) < 0 || + ::listen (socket, SOMAXCONN) < 0) { + closesocket(socket); + socket = (SOCKET) -1; + BX_PANIC(("com%d: bind() or listen() failed (host:%s, port:%d)",i+1, host, port)); + } + else { + BX_INFO(("com%d: waiting for client to connect (host:%s, port:%d)",i+1, host, port)); + SOCKET client; + if ((client = ::accept (socket, NULL, 0)) < 0) + BX_PANIC(("com%d: accept() failed (host:%s, port:%d)",i+1, host, port)); + closesocket(socket); + socket = client; + } + } + // client mode + else if (::connect (socket, (sockaddr *) &sin, sizeof (sin)) < 0) { + closesocket(socket); + socket = (SOCKET) -1; + BX_INFO(("com%d: connect() failed (host:%s, port:%d)",i+1, host, port)); + } + + BX_SER_THIS s[i].socket_id = socket; + if (socket > 0) + BX_INFO(("com%d - inet %s - socket_id: %d, ip:%s, port:%d", + i+1, server ? "server" : "client", socket, host, port)); + } else if (!strncmp(mode, "pipe", 4)) { + if (strlen(dev) > 0) { +#ifdef WIN32 + bx_bool server = !strcmp(mode, "pipe-server"); + HANDLE pipe; + + BX_SER_THIS s[i].io_mode = BX_SER_MODE_PIPE; + + // server mode + if (server) { + pipe = CreateNamedPipe( dev, + PIPE_ACCESS_DUPLEX | FILE_FLAG_FIRST_PIPE_INSTANCE, + PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, + 1, 4096, 4096, 0, NULL); + + if (pipe == INVALID_HANDLE_VALUE) + BX_PANIC(("com%d: CreateNamedPipe(%s) failed", i+1, dev)); + + BX_INFO(("com%d: waiting for client to connect to %s", i+1, dev)); + if (!ConnectNamedPipe(pipe, NULL) && GetLastError() != ERROR_PIPE_CONNECTED) + { + CloseHandle(pipe); + pipe = INVALID_HANDLE_VALUE; + BX_PANIC(("com%d: ConnectNamedPipe(%s) failed", i+1, dev)); + } + } + // client mode + else { + pipe = CreateFile( dev, + GENERIC_READ | GENERIC_WRITE, + 0, NULL, OPEN_EXISTING, 0, NULL); + + if (pipe == INVALID_HANDLE_VALUE) + BX_INFO(("com%d: failed to open pipe %s", i+1, dev)); + } + + if (pipe != INVALID_HANDLE_VALUE) + BX_SER_THIS s[i].pipe = pipe; +#else + BX_PANIC(("support for serial mode '%s' not available", mode)); +#endif + } + } else if (strcmp(mode, "null")) { + BX_PANIC(("unknown serial i/o mode '%s'", mode)); + } + // simulate device connected + if (BX_SER_THIS s[i].io_mode != BX_SER_MODE_RAW) { + BX_SER_THIS s[i].modem_status.cts = 1; + BX_SER_THIS s[i].modem_status.dsr = 1; + } + BX_INFO(("com%d at 0x%04x irq %d", i+1, ports[i], BX_SER_THIS s[i].IRQ)); + } + } + if ((BX_SER_THIS mouse_type == BX_MOUSE_TYPE_SERIAL) || + (BX_SER_THIS mouse_type == BX_MOUSE_TYPE_SERIAL_WHEEL) || + (BX_SER_THIS mouse_type == BX_MOUSE_TYPE_SERIAL_MSYS)) { + DEV_register_default_mouse(this, mouse_enq_static, NULL); + } +} + +void bx_serial_c::reset(unsigned type) +{ +} + +void bx_serial_c::register_state(void) +{ + unsigned i, j; + char name[6]; + bx_list_c *port; + + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "serial", "Serial Port State", 9); + for (i=0; iread(address, io_len); +} + +Bit32u bx_serial_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_SER_SMF + bx_bool prev_cts, prev_dsr, prev_ri, prev_dcd; + Bit8u offset, val; + Bit8u port = 0; + + offset = address & 0x07; + switch (address & 0x03f8) { + case 0x03f8: port = 0; break; + case 0x02f8: port = 1; break; + case 0x03e8: port = 2; break; + case 0x02e8: port = 3; break; + } + + switch (offset) { + case BX_SER_RBR: /* receive buffer, or divisor latch LSB if DLAB set */ + if (BX_SER_THIS s[port].line_cntl.dlab) { + val = BX_SER_THIS s[port].divisor_lsb; + } else { + if (BX_SER_THIS s[port].fifo_cntl.enable) { + val = BX_SER_THIS s[port].rx_fifo[0]; + if (BX_SER_THIS s[port].rx_fifo_end > 0) { + memcpy(&BX_SER_THIS s[port].rx_fifo[0], &BX_SER_THIS s[port].rx_fifo[1], 15); + BX_SER_THIS s[port].rx_fifo_end--; + } + if (BX_SER_THIS s[port].rx_fifo_end == 0) { + BX_SER_THIS s[port].line_status.rxdata_ready = 0; + BX_SER_THIS s[port].rx_interrupt = 0; + BX_SER_THIS s[port].rx_ipending = 0; + BX_SER_THIS s[port].fifo_interrupt = 0; + BX_SER_THIS s[port].fifo_ipending = 0; + lower_interrupt(port); + } + } else { + val = BX_SER_THIS s[port].rxbuffer; + BX_SER_THIS s[port].line_status.rxdata_ready = 0; + BX_SER_THIS s[port].rx_interrupt = 0; + BX_SER_THIS s[port].rx_ipending = 0; + lower_interrupt(port); + } + } + break; + + case BX_SER_IER: /* interrupt enable register, or div. latch MSB */ + if (BX_SER_THIS s[port].line_cntl.dlab) { + val = BX_SER_THIS s[port].divisor_msb; + } else { + val = BX_SER_THIS s[port].int_enable.rxdata_enable | + (BX_SER_THIS s[port].int_enable.txhold_enable << 1) | + (BX_SER_THIS s[port].int_enable.rxlstat_enable << 2) | + (BX_SER_THIS s[port].int_enable.modstat_enable << 3); + } + break; + + case BX_SER_IIR: /* interrupt ID register */ + /* + * Set the interrupt ID based on interrupt source + */ + if (BX_SER_THIS s[port].ls_interrupt) { + BX_SER_THIS s[port].int_ident.int_ID = 0x3; + BX_SER_THIS s[port].int_ident.ipending = 0; + } else if (BX_SER_THIS s[port].fifo_interrupt) { + BX_SER_THIS s[port].int_ident.int_ID = 0x6; + BX_SER_THIS s[port].int_ident.ipending = 0; + } else if (BX_SER_THIS s[port].rx_interrupt) { + BX_SER_THIS s[port].int_ident.int_ID = 0x2; + BX_SER_THIS s[port].int_ident.ipending = 0; + } else if (BX_SER_THIS s[port].tx_interrupt) { + BX_SER_THIS s[port].int_ident.int_ID = 0x1; + BX_SER_THIS s[port].int_ident.ipending = 0; + } else if (BX_SER_THIS s[port].ms_interrupt) { + BX_SER_THIS s[port].int_ident.int_ID = 0x0; + BX_SER_THIS s[port].int_ident.ipending = 0; + } else { + BX_SER_THIS s[port].int_ident.int_ID = 0x0; + BX_SER_THIS s[port].int_ident.ipending = 1; + } + BX_SER_THIS s[port].tx_interrupt = 0; + lower_interrupt(port); + + val = BX_SER_THIS s[port].int_ident.ipending | + (BX_SER_THIS s[port].int_ident.int_ID << 1) | + (BX_SER_THIS s[port].fifo_cntl.enable ? 0xc0 : 0x00); + break; + + case BX_SER_LCR: /* Line control register */ + val = BX_SER_THIS s[port].line_cntl.wordlen_sel | + (BX_SER_THIS s[port].line_cntl.stopbits << 2) | + (BX_SER_THIS s[port].line_cntl.parity_enable << 3) | + (BX_SER_THIS s[port].line_cntl.evenparity_sel << 4) | + (BX_SER_THIS s[port].line_cntl.stick_parity << 5) | + (BX_SER_THIS s[port].line_cntl.break_cntl << 6) | + (BX_SER_THIS s[port].line_cntl.dlab << 7); + break; + + case BX_SER_MCR: /* MODEM control register */ + val = BX_SER_THIS s[port].modem_cntl.dtr | + (BX_SER_THIS s[port].modem_cntl.rts << 1) | + (BX_SER_THIS s[port].modem_cntl.out1 << 2) | + (BX_SER_THIS s[port].modem_cntl.out2 << 3) | + (BX_SER_THIS s[port].modem_cntl.local_loopback << 4); + break; + + case BX_SER_LSR: /* Line status register */ + val = BX_SER_THIS s[port].line_status.rxdata_ready | + (BX_SER_THIS s[port].line_status.overrun_error << 1) | + (BX_SER_THIS s[port].line_status.parity_error << 2) | + (BX_SER_THIS s[port].line_status.framing_error << 3) | + (BX_SER_THIS s[port].line_status.break_int << 4) | + (BX_SER_THIS s[port].line_status.thr_empty << 5) | + (BX_SER_THIS s[port].line_status.tsr_empty << 6) | + (BX_SER_THIS s[port].line_status.fifo_error << 7); + BX_SER_THIS s[port].line_status.overrun_error = 0; + BX_SER_THIS s[port].line_status.framing_error = 0; + BX_SER_THIS s[port].line_status.break_int = 0; + BX_SER_THIS s[port].ls_interrupt = 0; + BX_SER_THIS s[port].ls_ipending = 0; + lower_interrupt(port); + break; + + case BX_SER_MSR: /* MODEM status register */ + prev_cts = BX_SER_THIS s[port].modem_status.cts; + prev_dsr = BX_SER_THIS s[port].modem_status.dsr; + prev_ri = BX_SER_THIS s[port].modem_status.ri; + prev_dcd = BX_SER_THIS s[port].modem_status.dcd; + if (BX_SER_THIS s[port].io_mode == BX_SER_MODE_RAW) { +#if USE_RAW_SERIAL + val = BX_SER_THIS s[port].raw->get_modem_status(); + BX_SER_THIS s[port].modem_status.cts = (val & 0x10) >> 4; + BX_SER_THIS s[port].modem_status.dsr = (val & 0x20) >> 5; + BX_SER_THIS s[port].modem_status.ri = (val & 0x40) >> 6; + BX_SER_THIS s[port].modem_status.dcd = (val & 0x80) >> 7; + if (BX_SER_THIS s[port].modem_status.cts != prev_cts) { + BX_SER_THIS s[port].modem_status.delta_cts = 1; + } + if (BX_SER_THIS s[port].modem_status.dsr != prev_dsr) { + BX_SER_THIS s[port].modem_status.delta_dsr = 1; + } + if ((BX_SER_THIS s[port].modem_status.ri == 0) && (prev_ri == 1)) + BX_SER_THIS s[port].modem_status.ri_trailedge = 1; + if (BX_SER_THIS s[port].modem_status.dcd != prev_dcd) { + BX_SER_THIS s[port].modem_status.delta_dcd = 1; + } +#endif + } + val = BX_SER_THIS s[port].modem_status.delta_cts | + (BX_SER_THIS s[port].modem_status.delta_dsr << 1) | + (BX_SER_THIS s[port].modem_status.ri_trailedge << 2) | + (BX_SER_THIS s[port].modem_status.delta_dcd << 3) | + (BX_SER_THIS s[port].modem_status.cts << 4) | + (BX_SER_THIS s[port].modem_status.dsr << 5) | + (BX_SER_THIS s[port].modem_status.ri << 6) | + (BX_SER_THIS s[port].modem_status.dcd << 7); + BX_SER_THIS s[port].modem_status.delta_cts = 0; + BX_SER_THIS s[port].modem_status.delta_dsr = 0; + BX_SER_THIS s[port].modem_status.ri_trailedge = 0; + BX_SER_THIS s[port].modem_status.delta_dcd = 0; + BX_SER_THIS s[port].ms_interrupt = 0; + BX_SER_THIS s[port].ms_ipending = 0; + lower_interrupt(port); + break; + + case BX_SER_SCR: /* scratch register */ + val = BX_SER_THIS s[port].scratch; + break; + + default: + val = 0; // keep compiler happy + BX_PANIC(("unsupported io read from address=0x%04x!", address)); + break; + } + + BX_DEBUG(("com%d register read from address: 0x%04x = 0x%02x", port+1, address, val)); + + return(val); +} + + + // static IO port write callback handler + // redirects to non-static class handler to avoid virtual functions + +void +bx_serial_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_SER_SMF + bx_serial_c *class_ptr = (bx_serial_c *) this_ptr; + + class_ptr->write(address, value, io_len); +} + +void +bx_serial_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_SER_SMF + bx_bool prev_cts, prev_dsr, prev_ri, prev_dcd; + bx_bool new_b0, new_b1, new_b2, new_b3; + bx_bool new_b4, new_b5, new_b6, new_b7; + bx_bool gen_int = 0; + Bit8u offset, new_wordlen; +#if USE_RAW_SERIAL + bx_bool mcr_changed = 0; + Bit8u p_mode; +#endif + Bit8u port = 0; + + offset = address & 0x07; + switch (address & 0x03f8) { + case 0x03f8: port = 0; break; + case 0x02f8: port = 1; break; + case 0x03e8: port = 2; break; + case 0x02e8: port = 3; break; + } + + BX_DEBUG(("com%d register write to address: 0x%04x = 0x%02x", port+1, address, value)); + + new_b0 = value & 0x01; + new_b1 = (value & 0x02) >> 1; + new_b2 = (value & 0x04) >> 2; + new_b3 = (value & 0x08) >> 3; + new_b4 = (value & 0x10) >> 4; + new_b5 = (value & 0x20) >> 5; + new_b6 = (value & 0x40) >> 6; + new_b7 = (value & 0x80) >> 7; + + switch (offset) { + case BX_SER_THR: /* transmit buffer, or divisor latch LSB if DLAB set */ + if (BX_SER_THIS s[port].line_cntl.dlab) { + BX_SER_THIS s[port].divisor_lsb = value; + + if ((value != 0) || (BX_SER_THIS s[port].divisor_msb != 0)) { + BX_SER_THIS s[port].baudrate = (int) (BX_PC_CLOCK_XTL / + (16 * ((BX_SER_THIS s[port].divisor_msb << 8) | + BX_SER_THIS s[port].divisor_lsb))); + } + } else { + Bit8u bitmask = 0xff >> (3 - BX_SER_THIS s[port].line_cntl.wordlen_sel); + if (BX_SER_THIS s[port].line_status.thr_empty) { + if (BX_SER_THIS s[port].fifo_cntl.enable) { + BX_SER_THIS s[port].tx_fifo[BX_SER_THIS s[port].tx_fifo_end++] = value & bitmask; + } else { + BX_SER_THIS s[port].thrbuffer = value & bitmask; + } + BX_SER_THIS s[port].line_status.thr_empty = 0; + if (BX_SER_THIS s[port].line_status.tsr_empty) { + if (BX_SER_THIS s[port].fifo_cntl.enable) { + BX_SER_THIS s[port].tsrbuffer = BX_SER_THIS s[port].tx_fifo[0]; + memcpy(&BX_SER_THIS s[port].tx_fifo[0], &BX_SER_THIS s[port].tx_fifo[1], 15); + BX_SER_THIS s[port].line_status.thr_empty = (--BX_SER_THIS s[port].tx_fifo_end == 0); + } else { + BX_SER_THIS s[port].tsrbuffer = BX_SER_THIS s[port].thrbuffer; + BX_SER_THIS s[port].line_status.thr_empty = 1; + } + BX_SER_THIS s[port].line_status.tsr_empty = 0; + raise_interrupt(port, BX_SER_INT_TXHOLD); + bx_pc_system.activate_timer(BX_SER_THIS s[port].tx_timer_index, + (int) (1000000.0 / BX_SER_THIS s[port].baudrate * + (BX_SER_THIS s[port].line_cntl.wordlen_sel + 5)), + 0); /* not continuous */ + } else { + BX_SER_THIS s[port].tx_interrupt = 0; + lower_interrupt(port); + } + } else { + if (BX_SER_THIS s[port].fifo_cntl.enable) { + if (BX_SER_THIS s[port].tx_fifo_end < 16) { + BX_SER_THIS s[port].tx_fifo[BX_SER_THIS s[port].tx_fifo_end++] = value & bitmask; + } else { + BX_ERROR(("com%d: transmit FIFO overflow", port+1)); + } + } else { + BX_ERROR(("com%d: write to tx hold register when not empty", port+1)); + } + } + } + break; + + case BX_SER_IER: /* interrupt enable register, or div. latch MSB */ + if (BX_SER_THIS s[port].line_cntl.dlab) { + BX_SER_THIS s[port].divisor_msb = value; + + if ((value != 0) || (BX_SER_THIS s[port].divisor_lsb != 0)) { + BX_SER_THIS s[port].baudrate = (int) (BX_PC_CLOCK_XTL / + (16 * ((BX_SER_THIS s[port].divisor_msb << 8) | + BX_SER_THIS s[port].divisor_lsb))); + } + } else { + if (new_b3 != BX_SER_THIS s[port].int_enable.modstat_enable) { + BX_SER_THIS s[port].int_enable.modstat_enable = new_b3; + if (BX_SER_THIS s[port].int_enable.modstat_enable == 1) { + if (BX_SER_THIS s[port].ms_ipending == 1) { + BX_SER_THIS s[port].ms_interrupt = 1; + BX_SER_THIS s[port].ms_ipending = 0; + gen_int = 1; + } + } else { + if (BX_SER_THIS s[port].ms_interrupt == 1) { + BX_SER_THIS s[port].ms_interrupt = 0; + BX_SER_THIS s[port].ms_ipending = 1; + lower_interrupt(port); + } + } + } + if (new_b1 != BX_SER_THIS s[port].int_enable.txhold_enable) { + BX_SER_THIS s[port].int_enable.txhold_enable = new_b1; + if (BX_SER_THIS s[port].int_enable.txhold_enable == 1) { + BX_SER_THIS s[port].tx_interrupt = BX_SER_THIS s[port].line_status.thr_empty; + if (BX_SER_THIS s[port].tx_interrupt) gen_int = 1; + } else { + BX_SER_THIS s[port].tx_interrupt = 0; + lower_interrupt(port); + } + } + if (new_b0 != BX_SER_THIS s[port].int_enable.rxdata_enable) { + BX_SER_THIS s[port].int_enable.rxdata_enable = new_b0; + if (BX_SER_THIS s[port].int_enable.rxdata_enable == 1) { + if (BX_SER_THIS s[port].fifo_ipending == 1) { + BX_SER_THIS s[port].fifo_interrupt = 1; + BX_SER_THIS s[port].fifo_ipending = 0; + gen_int = 1; + } + if (BX_SER_THIS s[port].rx_ipending == 1) { + BX_SER_THIS s[port].rx_interrupt = 1; + BX_SER_THIS s[port].rx_ipending = 0; + gen_int = 1; + } + } else { + if (BX_SER_THIS s[port].rx_interrupt == 1) { + BX_SER_THIS s[port].rx_interrupt = 0; + BX_SER_THIS s[port].rx_ipending = 1; + lower_interrupt(port); + } + if (BX_SER_THIS s[port].fifo_interrupt == 1) { + BX_SER_THIS s[port].fifo_interrupt = 0; + BX_SER_THIS s[port].fifo_ipending = 1; + lower_interrupt(port); + } + } + } + if (new_b2 != BX_SER_THIS s[port].int_enable.rxlstat_enable) { + BX_SER_THIS s[port].int_enable.rxlstat_enable = new_b2; + if (BX_SER_THIS s[port].int_enable.rxlstat_enable == 1) { + if (BX_SER_THIS s[port].ls_ipending == 1) { + BX_SER_THIS s[port].ls_interrupt = 1; + BX_SER_THIS s[port].ls_ipending = 0; + gen_int = 1; + } + } else { + if (BX_SER_THIS s[port].ls_interrupt == 1) { + BX_SER_THIS s[port].ls_interrupt = 0; + BX_SER_THIS s[port].ls_ipending = 1; + lower_interrupt(port); + } + } + } + if (gen_int) raise_interrupt(port, BX_SER_INT_IER); + } + break; + + case BX_SER_FCR: /* FIFO control register */ + if (new_b0 && !BX_SER_THIS s[port].fifo_cntl.enable) { + BX_INFO(("com%d: FIFO enabled", port+1)); + BX_SER_THIS s[port].rx_fifo_end = 0; + BX_SER_THIS s[port].tx_fifo_end = 0; + } + BX_SER_THIS s[port].fifo_cntl.enable = new_b0; + if (new_b1) { + BX_SER_THIS s[port].rx_fifo_end = 0; + } + if (new_b2) { + BX_SER_THIS s[port].tx_fifo_end = 0; + } + BX_SER_THIS s[port].fifo_cntl.rxtrigger = (value & 0xc0) >> 6; + break; + + case BX_SER_LCR: /* Line control register */ + new_wordlen = value & 0x03; + if (BX_SER_THIS s[port].io_mode == BX_SER_MODE_RAW) { +#if USE_RAW_SERIAL + if (BX_SER_THIS s[port].line_cntl.wordlen_sel != new_wordlen) { + BX_SER_THIS s[port].raw->set_data_bits(new_wordlen + 5); + } + if (new_b2 != BX_SER_THIS s[port].line_cntl.stopbits) { + BX_SER_THIS s[port].raw->set_stop_bits(new_b2 ? 2 : 1); + } + if ((new_b3 != BX_SER_THIS s[port].line_cntl.parity_enable) || + (new_b4 != BX_SER_THIS s[port].line_cntl.evenparity_sel) || + (new_b5 != BX_SER_THIS s[port].line_cntl.stick_parity)) { + if (new_b3 == 0) { + p_mode = P_NONE; + } else { + p_mode = ((value & 0x30) >> 4) + 1; + } + BX_SER_THIS s[port].raw->set_parity_mode(p_mode); + } + if ((new_b6 != BX_SER_THIS s[port].line_cntl.break_cntl) && + (!BX_SER_THIS s[port].modem_cntl.local_loopback)) { + BX_SER_THIS s[port].raw->set_break(new_b6); + } +#endif // USE_RAW_SERIAL + } + BX_SER_THIS s[port].line_cntl.wordlen_sel = new_wordlen; + /* These are ignored, but set them up so they can be read back */ + BX_SER_THIS s[port].line_cntl.stopbits = new_b2; + BX_SER_THIS s[port].line_cntl.parity_enable = new_b3; + BX_SER_THIS s[port].line_cntl.evenparity_sel = new_b4; + BX_SER_THIS s[port].line_cntl.stick_parity = new_b5; + BX_SER_THIS s[port].line_cntl.break_cntl = new_b6; + if (BX_SER_THIS s[port].modem_cntl.local_loopback && + BX_SER_THIS s[port].line_cntl.break_cntl) { + BX_SER_THIS s[port].line_status.break_int = 1; + BX_SER_THIS s[port].line_status.framing_error = 1; + rx_fifo_enq(port, 0x00); + } + /* used when doing future writes */ + if (!new_b7 && BX_SER_THIS s[port].line_cntl.dlab) { + // Start the receive polling process if not already started + // and there is a valid baudrate. + if (BX_SER_THIS s[port].rx_pollstate == BX_SER_RXIDLE && + BX_SER_THIS s[port].baudrate != 0) { + BX_SER_THIS s[port].rx_pollstate = BX_SER_RXPOLL; + bx_pc_system.activate_timer(BX_SER_THIS s[port].rx_timer_index, + (int) (1000000.0 / BX_SER_THIS s[port].baudrate * + (BX_SER_THIS s[port].line_cntl.wordlen_sel + 5)), + 0); /* not continuous */ + } + if (BX_SER_THIS s[port].io_mode == BX_SER_MODE_RAW) { +#if USE_RAW_SERIAL + BX_SER_THIS s[port].raw->set_baudrate(BX_SER_THIS s[port].baudrate); +#endif // USE_RAW_SERIAL + } + BX_DEBUG(("com%d: baud rate set - %d", port+1, BX_SER_THIS s[port].baudrate)); + } + BX_SER_THIS s[port].line_cntl.dlab = new_b7; + break; + + case BX_SER_MCR: /* MODEM control register */ + if ((BX_SER_THIS s[port].io_mode == BX_SER_MODE_MOUSE) && + ((BX_SER_THIS s[port].line_cntl.wordlen_sel == 2) || + (BX_SER_THIS s[port].line_cntl.wordlen_sel == 3))) { + if (new_b0 && !new_b1) BX_SER_THIS detect_mouse = 1; + if (new_b0 && new_b1 && (BX_SER_THIS detect_mouse == 1)) BX_SER_THIS detect_mouse = 2; + } + if (BX_SER_THIS s[port].io_mode == BX_SER_MODE_RAW) { +#if USE_RAW_SERIAL + mcr_changed = (BX_SER_THIS s[port].modem_cntl.dtr != new_b0) | + (BX_SER_THIS s[port].modem_cntl.rts != new_b1); +#endif + } + BX_SER_THIS s[port].modem_cntl.dtr = new_b0; + BX_SER_THIS s[port].modem_cntl.rts = new_b1; + BX_SER_THIS s[port].modem_cntl.out1 = new_b2; + BX_SER_THIS s[port].modem_cntl.out2 = new_b3; + + if (new_b4 != BX_SER_THIS s[port].modem_cntl.local_loopback) { + BX_SER_THIS s[port].modem_cntl.local_loopback = new_b4; + if (BX_SER_THIS s[port].modem_cntl.local_loopback) { + /* transition to loopback mode */ + if (BX_SER_THIS s[port].io_mode == BX_SER_MODE_RAW) { +#if USE_RAW_SERIAL + if (BX_SER_THIS s[port].modem_cntl.dtr || + BX_SER_THIS s[port].modem_cntl.rts) { + BX_SER_THIS s[port].raw->set_modem_control(0); + } +#endif + } + if (BX_SER_THIS s[port].line_cntl.break_cntl) { + if (BX_SER_THIS s[port].io_mode == BX_SER_MODE_RAW) { +#if USE_RAW_SERIAL + BX_SER_THIS s[port].raw->set_break(0); +#endif + } + BX_SER_THIS s[port].line_status.break_int = 1; + BX_SER_THIS s[port].line_status.framing_error = 1; + rx_fifo_enq(port, 0x00); + } + } else { + /* transition to normal mode */ + if (BX_SER_THIS s[port].io_mode == BX_SER_MODE_RAW) { +#if USE_RAW_SERIAL + mcr_changed = 1; + if (BX_SER_THIS s[port].line_cntl.break_cntl) { + BX_SER_THIS s[port].raw->set_break(0); + } +#endif + } + } + } + + if (BX_SER_THIS s[port].modem_cntl.local_loopback) { + prev_cts = BX_SER_THIS s[port].modem_status.cts; + prev_dsr = BX_SER_THIS s[port].modem_status.dsr; + prev_ri = BX_SER_THIS s[port].modem_status.ri; + prev_dcd = BX_SER_THIS s[port].modem_status.dcd; + BX_SER_THIS s[port].modem_status.cts = BX_SER_THIS s[port].modem_cntl.rts; + BX_SER_THIS s[port].modem_status.dsr = BX_SER_THIS s[port].modem_cntl.dtr; + BX_SER_THIS s[port].modem_status.ri = BX_SER_THIS s[port].modem_cntl.out1; + BX_SER_THIS s[port].modem_status.dcd = BX_SER_THIS s[port].modem_cntl.out2; + if (BX_SER_THIS s[port].modem_status.cts != prev_cts) { + BX_SER_THIS s[port].modem_status.delta_cts = 1; + BX_SER_THIS s[port].ms_ipending = 1; + } + if (BX_SER_THIS s[port].modem_status.dsr != prev_dsr) { + BX_SER_THIS s[port].modem_status.delta_dsr = 1; + BX_SER_THIS s[port].ms_ipending = 1; + } + if (BX_SER_THIS s[port].modem_status.ri != prev_ri) + BX_SER_THIS s[port].ms_ipending = 1; + if ((BX_SER_THIS s[port].modem_status.ri == 0) && (prev_ri == 1)) + BX_SER_THIS s[port].modem_status.ri_trailedge = 1; + if (BX_SER_THIS s[port].modem_status.dcd != prev_dcd) { + BX_SER_THIS s[port].modem_status.delta_dcd = 1; + BX_SER_THIS s[port].ms_ipending = 1; + } + raise_interrupt(port, BX_SER_INT_MODSTAT); + } else { + if (BX_SER_THIS s[port].io_mode == BX_SER_MODE_MOUSE) { + if (BX_SER_THIS detect_mouse == 2) { + if ((BX_SER_THIS mouse_type == BX_MOUSE_TYPE_SERIAL) || + (BX_SER_THIS mouse_type == BX_MOUSE_TYPE_SERIAL_MSYS)) { + BX_SER_THIS mouse_internal_buffer.head = 0; + BX_SER_THIS mouse_internal_buffer.num_elements = 1; + BX_SER_THIS mouse_internal_buffer.buffer[0] = 'M'; + } else if (BX_SER_THIS mouse_type == BX_MOUSE_TYPE_SERIAL_WHEEL) { + BX_SER_THIS mouse_internal_buffer.head = 0; + BX_SER_THIS mouse_internal_buffer.num_elements = 6; + BX_SER_THIS mouse_internal_buffer.buffer[0] = 'M'; + BX_SER_THIS mouse_internal_buffer.buffer[1] = 'Z'; + BX_SER_THIS mouse_internal_buffer.buffer[2] = '@'; + BX_SER_THIS mouse_internal_buffer.buffer[3] = '\0'; + BX_SER_THIS mouse_internal_buffer.buffer[4] = '\0'; + BX_SER_THIS mouse_internal_buffer.buffer[5] = '\0'; + } + BX_SER_THIS detect_mouse = 0; + } + } + + if (BX_SER_THIS s[port].io_mode == BX_SER_MODE_RAW) { +#if USE_RAW_SERIAL + if (mcr_changed) { + BX_SER_THIS s[port].raw->set_modem_control(value & 0x03); + } +#endif + } else { + /* simulate device connected */ + BX_SER_THIS s[port].modem_status.cts = 1; + BX_SER_THIS s[port].modem_status.dsr = 1; + BX_SER_THIS s[port].modem_status.ri = 0; + BX_SER_THIS s[port].modem_status.dcd = 0; + } + } + break; + + case BX_SER_LSR: /* Line status register */ + BX_ERROR(("com%d: write to line status register ignored", port+1)); + break; + + case BX_SER_MSR: /* MODEM status register */ + BX_ERROR(("com%d: write to MODEM status register ignored", port+1)); + break; + + case BX_SER_SCR: /* scratch register */ + BX_SER_THIS s[port].scratch = value; + break; + + default: + BX_PANIC(("unsupported io write to address=0x%04x, value = 0x%02x!", + (unsigned) address, (unsigned) value)); + break; + } +} + + +void +bx_serial_c::rx_fifo_enq(Bit8u port, Bit8u data) +{ + bx_bool gen_int = 0; + + if (BX_SER_THIS s[port].fifo_cntl.enable) { + if (BX_SER_THIS s[port].rx_fifo_end == 16) { + BX_ERROR(("com%d: receive FIFO overflow", port+1)); + BX_SER_THIS s[port].line_status.overrun_error = 1; + raise_interrupt(port, BX_SER_INT_RXLSTAT); + } else { + BX_SER_THIS s[port].rx_fifo[BX_SER_THIS s[port].rx_fifo_end++] = data; + switch (BX_SER_THIS s[port].fifo_cntl.rxtrigger) { + case 1: + if (BX_SER_THIS s[port].rx_fifo_end == 4) gen_int = 1; + break; + case 2: + if (BX_SER_THIS s[port].rx_fifo_end == 8) gen_int = 1; + break; + case 3: + if (BX_SER_THIS s[port].rx_fifo_end == 14) gen_int = 1; + break; + default: + gen_int = 1; + } + if (gen_int) { + bx_pc_system.deactivate_timer(BX_SER_THIS s[port].fifo_timer_index); + BX_SER_THIS s[port].line_status.rxdata_ready = 1; + raise_interrupt(port, BX_SER_INT_RXDATA); + } else { + bx_pc_system.activate_timer(BX_SER_THIS s[port].fifo_timer_index, + (int) (1000000.0 / BX_SER_THIS s[port].baudrate * + (BX_SER_THIS s[port].line_cntl.wordlen_sel + 5) * 16), + 0); /* not continuous */ + } + } + } else { + if (BX_SER_THIS s[port].line_status.rxdata_ready == 1) { + BX_ERROR(("com%d: overrun error", port+1)); + BX_SER_THIS s[port].line_status.overrun_error = 1; + raise_interrupt(port, BX_SER_INT_RXLSTAT); + } + BX_SER_THIS s[port].rxbuffer = data; + BX_SER_THIS s[port].line_status.rxdata_ready = 1; + raise_interrupt(port, BX_SER_INT_RXDATA); + } +} + + +void +bx_serial_c::tx_timer_handler(void *this_ptr) +{ + bx_serial_c *class_ptr = (bx_serial_c *) this_ptr; + + class_ptr->tx_timer(); +} + + +void +bx_serial_c::tx_timer(void) +{ + bx_bool gen_int = 0; + Bit8u port = 0; + int timer_id; + + timer_id = bx_pc_system.triggeredTimerID(); + if (timer_id == BX_SER_THIS s[0].tx_timer_index) { + port = 0; + } else if (timer_id == BX_SER_THIS s[1].tx_timer_index) { + port = 1; + } else if (timer_id == BX_SER_THIS s[2].tx_timer_index) { + port = 2; + } else if (timer_id == BX_SER_THIS s[3].tx_timer_index) { + port = 3; + } + + if (BX_SER_THIS s[port].modem_cntl.local_loopback) { + rx_fifo_enq(port, BX_SER_THIS s[port].tsrbuffer); + } else { + switch (BX_SER_THIS s[port].io_mode) { + case BX_SER_MODE_FILE: + fputc(BX_SER_THIS s[port].tsrbuffer, BX_SER_THIS s[port].output); + fflush(BX_SER_THIS s[port].output); + break; + case BX_SER_MODE_TERM: +#if defined(SERIAL_ENABLE) + BX_DEBUG(("com%d: write: '%c'", port+1, BX_SER_THIS s[port].tsrbuffer)); + if (BX_SER_THIS s[port].tty_id >= 0) { + write(BX_SER_THIS s[port].tty_id, (bx_ptr_t) & BX_SER_THIS s[port].tsrbuffer, 1); + } +#endif + break; + case BX_SER_MODE_RAW: +#if USE_RAW_SERIAL + if (!BX_SER_THIS s[port].raw->ready_transmit()) + BX_PANIC(("com%d: not ready to transmit", port+1)); + BX_SER_THIS s[port].raw->transmit(BX_SER_THIS s[port].tsrbuffer); +#endif + break; + case BX_SER_MODE_MOUSE: + BX_INFO(("com%d: write to mouse ignored: 0x%02x", port+1, BX_SER_THIS s[port].tsrbuffer)); + break; + case BX_SER_MODE_SOCKET: + if (BX_SER_THIS s[port].socket_id >= 0) { +#ifdef WIN32 + BX_INFO(("attempting to write win32 : %c", BX_SER_THIS s[port].tsrbuffer)); + ::send(BX_SER_THIS s[port].socket_id, + (const char*) & BX_SER_THIS s[port].tsrbuffer, 1, 0); +#else + ::write(BX_SER_THIS s[port].socket_id, + (bx_ptr_t) & BX_SER_THIS s[port].tsrbuffer, 1); +#endif + } + case BX_SER_MODE_PIPE: +#ifdef WIN32 + if (BX_SER_THIS s[port].pipe) { + DWORD written; + WriteFile(BX_SER_THIS s[port].pipe, (bx_ptr_t)& BX_SER_THIS s[port].tsrbuffer, 1, &written, NULL); + } +#endif + break; + } + } + + BX_SER_THIS s[port].line_status.tsr_empty = 1; + if (BX_SER_THIS s[port].fifo_cntl.enable && (BX_SER_THIS s[port].tx_fifo_end > 0)) { + BX_SER_THIS s[port].tsrbuffer = BX_SER_THIS s[port].tx_fifo[0]; + BX_SER_THIS s[port].line_status.tsr_empty = 0; + memcpy(&BX_SER_THIS s[port].tx_fifo[0], &BX_SER_THIS s[port].tx_fifo[1], 15); + gen_int = (--BX_SER_THIS s[port].tx_fifo_end == 0); + } else if (!BX_SER_THIS s[port].line_status.thr_empty) { + BX_SER_THIS s[port].tsrbuffer = BX_SER_THIS s[port].thrbuffer; + BX_SER_THIS s[port].line_status.tsr_empty = 0; + gen_int = 1; + } + if (!BX_SER_THIS s[port].line_status.tsr_empty) { + if (gen_int) { + BX_SER_THIS s[port].line_status.thr_empty = 1; + raise_interrupt(port, BX_SER_INT_TXHOLD); + } + bx_pc_system.activate_timer(BX_SER_THIS s[port].tx_timer_index, + (int) (1000000.0 / BX_SER_THIS s[port].baudrate * + (BX_SER_THIS s[port].line_cntl.wordlen_sel + 5)), + 0); /* not continuous */ + } +} + + +void +bx_serial_c::rx_timer_handler(void *this_ptr) +{ + bx_serial_c *class_ptr = (bx_serial_c *) this_ptr; + + class_ptr->rx_timer(); +} + + +void +bx_serial_c::rx_timer(void) +{ +#if BX_HAVE_SELECT && defined(SERIAL_ENABLE) + struct timeval tval; + fd_set fds; +#endif + Bit8u port = 0; + int timer_id; + bx_bool data_ready = 0; + + timer_id = bx_pc_system.triggeredTimerID(); + if (timer_id == BX_SER_THIS s[0].rx_timer_index) { + port = 0; + } else if (timer_id == BX_SER_THIS s[1].rx_timer_index) { + port = 1; + } else if (timer_id == BX_SER_THIS s[2].rx_timer_index) { + port = 2; + } else if (timer_id == BX_SER_THIS s[3].rx_timer_index) { + port = 3; + } + + int bdrate = BX_SER_THIS s[port].baudrate / (BX_SER_THIS s[port].line_cntl.wordlen_sel + 5); + unsigned char chbuf = 0; + + if (BX_SER_THIS s[port].io_mode == BX_SER_MODE_TERM) { +#if BX_HAVE_SELECT && defined(SERIAL_ENABLE) + tval.tv_sec = 0; + tval.tv_usec = 0; + +// MacOS: I'm not sure what to do with this, since I don't know +// what an fd_set is or what FD_SET() or select() do. They aren't +// declared in the CodeWarrior standard library headers. I'm just +// leaving it commented out for the moment. + + FD_ZERO(&fds); + if (BX_SER_THIS s[port].tty_id >= 0) FD_SET(BX_SER_THIS s[port].tty_id, &fds); +#endif + } + if ((BX_SER_THIS s[port].line_status.rxdata_ready == 0) || + (BX_SER_THIS s[port].fifo_cntl.enable)) { + switch (BX_SER_THIS s[port].io_mode) { + case BX_SER_MODE_SOCKET: +#if BX_HAVE_SELECT && defined(SERIAL_ENABLE) + if (BX_SER_THIS s[port].line_status.rxdata_ready == 0) { + tval.tv_sec = 0; + tval.tv_usec = 0; + FD_ZERO(&fds); + SOCKET socketid = BX_SER_THIS s[port].socket_id; + if (socketid >= 0) FD_SET(socketid, &fds); + if ((socketid >= 0) && (select(socketid+1, &fds, NULL, NULL, &tval) == 1)) { +#ifdef WIN32 + (void) ::recv(socketid, (char*) &chbuf, 1, 0); +#else + (void) read(socketid, &chbuf, 1); +#endif + BX_INFO((" -- COM %d : read byte [%d]", port+1, chbuf)); + data_ready = 1; + } + } +#endif + break; + case BX_SER_MODE_RAW: +#if USE_RAW_SERIAL + int data; + if ((data_ready = BX_SER_THIS s[port].raw->ready_receive())) { + data = BX_SER_THIS s[port].raw->receive(); + if (data < 0) { + data_ready = 0; + switch (data) { + case RAW_EVENT_BREAK: + BX_SER_THIS s[port].line_status.break_int = 1; + raise_interrupt(port, BX_SER_INT_RXLSTAT); + break; + case RAW_EVENT_FRAME: + BX_SER_THIS s[port].line_status.framing_error = 1; + raise_interrupt(port, BX_SER_INT_RXLSTAT); + break; + case RAW_EVENT_OVERRUN: + BX_SER_THIS s[port].line_status.overrun_error = 1; + raise_interrupt(port, BX_SER_INT_RXLSTAT); + break; + case RAW_EVENT_PARITY: + BX_SER_THIS s[port].line_status.parity_error = 1; + raise_interrupt(port, BX_SER_INT_RXLSTAT); + break; + case RAW_EVENT_CTS_ON: + case RAW_EVENT_CTS_OFF: + case RAW_EVENT_DSR_ON: + case RAW_EVENT_DSR_OFF: + case RAW_EVENT_RING_ON: + case RAW_EVENT_RING_OFF: + case RAW_EVENT_RLSD_ON: + case RAW_EVENT_RLSD_OFF: + raise_interrupt(port, BX_SER_INT_MODSTAT); + break; + } + } + } + if (data_ready) { + chbuf = data; + } +#endif + break; + case BX_SER_MODE_TERM: +#if BX_HAVE_SELECT && defined(SERIAL_ENABLE) + if ((BX_SER_THIS s[port].tty_id >= 0) && (select(BX_SER_THIS s[port].tty_id + 1, &fds, NULL, NULL, &tval) == 1)) { + (void) read(BX_SER_THIS s[port].tty_id, &chbuf, 1); + BX_DEBUG(("com%d: read: '%c'", port+1, chbuf)); + data_ready = 1; + } +#endif + break; + case BX_SER_MODE_MOUSE: + if (BX_SER_THIS mouse_internal_buffer.num_elements > 0) { + chbuf = BX_SER_THIS mouse_internal_buffer.buffer[BX_SER_THIS mouse_internal_buffer.head]; + BX_SER_THIS mouse_internal_buffer.head = (BX_SER_THIS mouse_internal_buffer.head + 1) % + BX_MOUSE_BUFF_SIZE; + BX_SER_THIS mouse_internal_buffer.num_elements--; + data_ready = 1; + } + break; + case BX_SER_MODE_PIPE: +#ifdef WIN32 + DWORD avail = 0; + if (BX_SER_THIS s[port].pipe && + PeekNamedPipe(BX_SER_THIS s[port].pipe, NULL, 0, NULL, &avail, NULL) && + avail > 0) { + ReadFile(BX_SER_THIS s[port].pipe, &chbuf, 1, &avail, NULL); + data_ready = 1; + } +#endif + break; + } + if (data_ready) { + if (!BX_SER_THIS s[port].modem_cntl.local_loopback) { + rx_fifo_enq(port, chbuf); + } + } else { + if (!BX_SER_THIS s[port].fifo_cntl.enable) { + bdrate = (int) (1000000.0 / 100000); // Poll frequency is 100ms + } + } + } else { + // Poll at 4x baud rate to see if the next-char can + // be read + bdrate *= 4; + } + + bx_pc_system.activate_timer(BX_SER_THIS s[port].rx_timer_index, + (int) (1000000.0 / bdrate), + 0); /* not continuous */ +} + + +void +bx_serial_c::fifo_timer_handler(void *this_ptr) +{ + bx_serial_c *class_ptr = (bx_serial_c *) this_ptr; + + class_ptr->fifo_timer(); +} + + +void +bx_serial_c::fifo_timer(void) +{ + Bit8u port = 0; + int timer_id; + + timer_id = bx_pc_system.triggeredTimerID(); + if (timer_id == BX_SER_THIS s[0].fifo_timer_index) { + port = 0; + } else if (timer_id == BX_SER_THIS s[1].fifo_timer_index) { + port = 1; + } else if (timer_id == BX_SER_THIS s[2].fifo_timer_index) { + port = 2; + } else if (timer_id == BX_SER_THIS s[3].fifo_timer_index) { + port = 3; + } + BX_SER_THIS s[port].line_status.rxdata_ready = 1; + raise_interrupt(port, BX_SER_INT_FIFO); +} + + +void bx_serial_c::mouse_enq_static(void *dev, int delta_x, int delta_y, int delta_z, unsigned button_state) +{ + ((bx_serial_c*)dev)->mouse_enq(delta_x, delta_y, delta_z, button_state); +} + +void bx_serial_c::mouse_enq(int delta_x, int delta_y, int delta_z, unsigned button_state) +{ + Bit8u b1, b2, b3, mouse_data[5]; + int bytes, tail; + + if (BX_SER_THIS mouse_port == -1) { + BX_ERROR(("mouse not connected to a serial port")); + return; + } + + // if the DTR and RTS lines aren't up, the mouse doesn't have any power to send packets. + if (!BX_SER_THIS s[BX_SER_THIS mouse_port].modem_cntl.dtr || !BX_SER_THIS s[BX_SER_THIS mouse_port].modem_cntl.rts) + return; + + // scale down the motion + if ((delta_x < -1) || (delta_x > 1)) + delta_x /= 2; + if ((delta_y < -1) || (delta_y > 1)) + delta_y /= 2; + + if(delta_x>127) delta_x=127; + if(delta_y>127) delta_y=127; + if(delta_x<-128) delta_x=-128; + if(delta_y<-128) delta_y=-128; + + BX_SER_THIS mouse_delayed_dx+=delta_x; + BX_SER_THIS mouse_delayed_dy-=delta_y; + BX_SER_THIS mouse_delayed_dz =delta_z; + + if ((BX_SER_THIS mouse_internal_buffer.num_elements + 4) >= BX_MOUSE_BUFF_SIZE) { + return; /* buffer doesn't have the space */ + } + + if (BX_SER_THIS mouse_delayed_dx > 127) { + delta_x = 127; + BX_SER_THIS mouse_delayed_dx -= 127; + } else if (BX_SER_THIS mouse_delayed_dx < -128) { + delta_x = -128; + BX_SER_THIS mouse_delayed_dx += 128; + } else { + delta_x = BX_SER_THIS mouse_delayed_dx; + BX_SER_THIS mouse_delayed_dx = 0; + } + if (BX_SER_THIS mouse_delayed_dy > 127) { + delta_y = 127; + BX_SER_THIS mouse_delayed_dy -= 127; + } else if (BX_SER_THIS mouse_delayed_dy < -128) { + delta_y = -128; + BX_SER_THIS mouse_delayed_dy += 128; + } else { + delta_y = BX_SER_THIS mouse_delayed_dy; + BX_SER_THIS mouse_delayed_dy = 0; + } + + + if (BX_SER_THIS mouse_type != BX_MOUSE_TYPE_SERIAL_MSYS) { + b1 = (Bit8u) delta_x; + b2 = (Bit8u) delta_y; + b3 = (Bit8u) -((Bit8s) delta_z); + mouse_data[0] = 0x40 | ((b1 & 0xc0) >> 6) | ((b2 & 0xc0) >> 4); + mouse_data[0] |= ((button_state & 0x01) << 5) | ((button_state & 0x02) << 3); + mouse_data[1] = b1 & 0x3f; + mouse_data[2] = b2 & 0x3f; + mouse_data[3] = b3 & 0x0f; + mouse_data[3] |= ((button_state & 0x04) << 2); + bytes = 3; + if (BX_SER_THIS mouse_type == BX_MOUSE_TYPE_SERIAL_WHEEL) bytes = 4; + } else { + b1 = (Bit8u) (delta_x / 2); + b2 = (Bit8u) -((Bit8s) (delta_y / 2)); + mouse_data[0] = 0x80 | ((~button_state & 0x01) << 2); + mouse_data[0] |= ((~button_state & 0x06) >> 1); + mouse_data[1] = b1; + mouse_data[2] = b2; + mouse_data[3] = 0; + mouse_data[4] = 0; + bytes = 5; + } + + /* enqueue mouse data in multibyte internal mouse buffer */ + for (int i = 0; i < bytes; i++) { + tail = (BX_SER_THIS mouse_internal_buffer.head + BX_SER_THIS mouse_internal_buffer.num_elements) % + BX_MOUSE_BUFF_SIZE; + BX_SER_THIS mouse_internal_buffer.buffer[tail] = mouse_data[i]; + BX_SER_THIS mouse_internal_buffer.num_elements++; + } +} diff --git a/bochs/iodev/serial.h b/bochs/iodev/serial.h new file mode 100644 index 00000000..06270380 --- /dev/null +++ b/bochs/iodev/serial.h @@ -0,0 +1,249 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2004-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef BX_IODEV_SERIAL_H +#define BX_IODEV_SERIAL_H + +// Peter Grehan (grehan@iprg.nokia.com) coded most of this +// serial emulation. + +#if BX_USE_SER_SMF +# define BX_SER_SMF static +# define BX_SER_THIS theSerialDevice-> +#else +# define BX_SER_SMF +# define BX_SER_THIS this-> +#endif + +#if defined(WIN32) +#define SERIAL_ENABLE +#endif + +#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) || defined(__APPLE__) || defined(__sun__) +#define SERIAL_ENABLE +extern "C" { +#include +}; +#endif + +#define BX_SERIAL_MAXDEV 4 + +#define BX_PC_CLOCK_XTL 1843200.0 + +#define BX_SER_RXIDLE 0 +#define BX_SER_RXPOLL 1 +#define BX_SER_RXWAIT 2 + +#define BX_SER_THR 0 +#define BX_SER_RBR 0 +#define BX_SER_IER 1 +#define BX_SER_IIR 2 +#define BX_SER_FCR 2 +#define BX_SER_LCR 3 +#define BX_SER_MCR 4 +#define BX_SER_LSR 5 +#define BX_SER_MSR 6 +#define BX_SER_SCR 7 + +#define BX_SER_MODE_NULL 0 +#define BX_SER_MODE_FILE 1 +#define BX_SER_MODE_TERM 2 +#define BX_SER_MODE_RAW 3 +#define BX_SER_MODE_MOUSE 4 +#define BX_SER_MODE_SOCKET 5 +#define BX_SER_MODE_PIPE 6 + +enum { + BX_SER_INT_IER, + BX_SER_INT_RXDATA, + BX_SER_INT_TXHOLD, + BX_SER_INT_RXLSTAT, + BX_SER_INT_MODSTAT, + BX_SER_INT_FIFO +}; + +#if USE_RAW_SERIAL +class serial_raw; +#endif + +typedef struct { + /* + * UART internal state + */ + bx_bool ls_interrupt; + bx_bool ms_interrupt; + bx_bool rx_interrupt; + bx_bool tx_interrupt; + bx_bool fifo_interrupt; + bx_bool ls_ipending; + bx_bool ms_ipending; + bx_bool rx_ipending; + bx_bool fifo_ipending; + + Bit8u IRQ; + + Bit8u rx_fifo_end; + Bit8u tx_fifo_end; + + int baudrate; + int tx_timer_index; + + int rx_pollstate; + int rx_timer_index; + int fifo_timer_index; + + int io_mode; + int tty_id; + SOCKET socket_id; + FILE *output; +#ifdef WIN32 + HANDLE pipe; +#endif + +#if USE_RAW_SERIAL + serial_raw* raw; +#endif +#if defined(SERIAL_ENABLE) && !defined(WIN32) + struct termios term_orig, term_new; +#endif + + /* + * Register definitions + */ + Bit8u rxbuffer; /* receiver buffer register (r/o) */ + Bit8u thrbuffer; /* transmit holding register (w/o) */ + /* Interrupt Enable Register */ + struct { + bx_bool rxdata_enable; /* 1=enable receive data interrupts */ + bx_bool txhold_enable; /* 1=enable tx. holding reg. empty ints */ + bx_bool rxlstat_enable; /* 1=enable rx line status interrupts */ + bx_bool modstat_enable; /* 1=enable modem status interrupts */ + } int_enable; + /* Interrupt Identification Register (r/o) */ + struct { + bx_bool ipending; /* 0=interrupt pending */ + Bit8u int_ID; /* 3-bit interrupt ID */ + } int_ident; + /* FIFO Control Register (w/o) */ + struct { + bx_bool enable; /* 1=enable tx and rx FIFOs */ + Bit8u rxtrigger; /* 2-bit code for rx fifo trigger level */ + } fifo_cntl; + /* Line Control Register (r/w) */ + struct { + Bit8u wordlen_sel; /* 2-bit code for char length */ + bx_bool stopbits; /* select stop bit len */ + bx_bool parity_enable; /* ... */ + bx_bool evenparity_sel; /* ... */ + bx_bool stick_parity; /* ... */ + bx_bool break_cntl; /* 1=send break signal */ + bx_bool dlab; /* divisor latch access bit */ + } line_cntl; + /* MODEM Control Register (r/w) */ + struct { + bx_bool dtr; /* DTR output value */ + bx_bool rts; /* RTS output value */ + bx_bool out1; /* OUTPUT1 value */ + bx_bool out2; /* OUTPUT2 value */ + bx_bool local_loopback; /* 1=loopback mode */ + } modem_cntl; + /* Line Status Register (r/w) */ + struct { + bx_bool rxdata_ready; /* 1=receiver data ready */ + bx_bool overrun_error; /* 1=receive overrun detected */ + bx_bool parity_error; /* 1=rx char has a bad parity bit */ + bx_bool framing_error; /* 1=no stop bit detected for rx char */ + bx_bool break_int; /* 1=break signal detected */ + bx_bool thr_empty; /* 1=tx hold register (or fifo) is empty */ + bx_bool tsr_empty; /* 1=shift reg and hold reg empty */ + bx_bool fifo_error; /* 1=at least 1 err condition in fifo */ + } line_status; + /* Modem Status Register (r/w) */ + struct { + bx_bool delta_cts; /* 1=CTS changed since last read */ + bx_bool delta_dsr; /* 1=DSR changed since last read */ + bx_bool ri_trailedge; /* 1=RI moved from low->high */ + bx_bool delta_dcd; /* 1=CD changed since last read */ + bx_bool cts; /* CTS input value */ + bx_bool dsr; /* DSR input value */ + bx_bool ri; /* RI input value */ + bx_bool dcd; /* DCD input value */ + } modem_status; + + Bit8u scratch; /* Scratch Register (r/w) */ + Bit8u tsrbuffer; /* transmit shift register (internal) */ + Bit8u rx_fifo[16]; /* receive FIFO (internal) */ + Bit8u tx_fifo[16]; /* transmit FIFO (internal) */ + Bit8u divisor_lsb; /* Divisor latch, least-sig. byte */ + Bit8u divisor_msb; /* Divisor latch, most-sig. byte */ +} bx_serial_t; + + + +class bx_serial_c : public bx_devmodel_c { +public: + bx_serial_c(); + virtual ~bx_serial_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual void register_state(void); + +private: + bx_serial_t s[BX_SERIAL_MAXDEV]; + + int detect_mouse; + int mouse_port; + int mouse_type; + int mouse_delayed_dx; + int mouse_delayed_dy; + int mouse_delayed_dz; + struct { + int num_elements; + Bit8u buffer[BX_MOUSE_BUFF_SIZE]; + int head; + } mouse_internal_buffer; + + static void lower_interrupt(Bit8u port); + static void raise_interrupt(Bit8u port, int type); + + static void rx_fifo_enq(Bit8u port, Bit8u data); + + static void tx_timer_handler(void *); + BX_SER_SMF void tx_timer(void); + + static void rx_timer_handler(void *); + BX_SER_SMF void rx_timer(void); + + static void fifo_timer_handler(void *); + BX_SER_SMF void fifo_timer(void); + + static void mouse_enq_static(void *dev, int delta_x, int delta_y, int delta_z, unsigned button_state); + void mouse_enq(int delta_x, int delta_y, int delta_z, unsigned button_state); + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_SER_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif +}; + +#endif diff --git a/bochs/iodev/serial_raw.cc b/bochs/iodev/serial_raw.cc new file mode 100644 index 00000000..608bfdac --- /dev/null +++ b/bochs/iodev/serial_raw.cc @@ -0,0 +1,477 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2004 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if USE_RAW_SERIAL + +#include "serial_raw.h" + +#define LOG_THIS + +#ifdef WIN32_RECEIVE_RAW +DWORD WINAPI RawSerialThread(VOID *this_ptr); +#endif + +serial_raw::serial_raw(const char *devname) +{ +#ifdef WIN32 + char portstr[MAX_PATH]; +#ifdef WIN32_RECEIVE_RAW + DWORD threadID; +#endif +#endif + + put ("SERR"); +#ifdef WIN32 + memset(&dcb, 0, sizeof(DCB)); + dcb.DCBlength = sizeof(DCB); + dcb.fBinary = 1; + dcb.fDtrControl = DTR_CONTROL_ENABLE; + dcb.fRtsControl = RTS_CONTROL_ENABLE; + dcb.Parity = NOPARITY; + dcb.ByteSize = 8; + dcb.StopBits = ONESTOPBIT; + dcb.BaudRate = CBR_115200; + DCBchanged = FALSE; + if (lstrlen(devname) > 0) { + wsprintf(portstr, "\\\\.\\%s", devname); + hCOM = CreateFile(portstr, GENERIC_READ|GENERIC_WRITE, 0, NULL, + OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); + if (hCOM != INVALID_HANDLE_VALUE) { + present = 1; + GetCommModemStatus(hCOM, &MSR_value); + SetupComm(hCOM, 8192, 2048); + PurgeComm(hCOM, PURGE_TXABORT | PURGE_RXABORT | + PURGE_TXCLEAR | PURGE_RXCLEAR); +#ifdef WIN32_RECEIVE_RAW + SetCommMask(hCOM, EV_BREAK | EV_CTS | EV_DSR | EV_ERR | EV_RING | EV_RLSD | EV_RXCHAR); + memset(&rx_ovl, 0, sizeof(OVERLAPPED)); + rx_ovl.hEvent = CreateEvent(NULL,TRUE,FALSE,"receive"); + hRawSerialThread = CreateThread(NULL, 0, RawSerialThread, this, 0, &threadID); +#endif + } else { + present = 0; + BX_ERROR(("Raw device '%s' not present", devname)); + } + } else { + present = 0; + } +#else + present = 0; +#endif + set_modem_control(0x00); + set_break(0); + rxdata_count = 0; +} + +serial_raw::~serial_raw(void) +{ + if (present) { +#ifdef WIN32 +#ifdef WIN32_RECEIVE_RAW + thread_quit = TRUE; + SetCommMask(hCOM, 0); + while (thread_active) Sleep(10); + CloseHandle(thread_ovl.hEvent); + CloseHandle(rx_ovl.hEvent); + CloseHandle(hRawSerialThread); +#endif + CloseHandle(hCOM); +#endif + } +} + +void serial_raw::set_baudrate(int rate) +{ + BX_DEBUG (("set_baudrate %d", rate)); +#ifdef WIN32 + switch (rate) { + case 110: dcb.BaudRate = CBR_110; break; + case 300: dcb.BaudRate = CBR_300; break; + case 600: dcb.BaudRate = CBR_600; break; + case 1200: dcb.BaudRate = CBR_1200; break; + case 2400: dcb.BaudRate = CBR_2400; break; + case 4800: dcb.BaudRate = CBR_4800; break; + case 9600: dcb.BaudRate = CBR_9600; break; + case 19200: dcb.BaudRate = CBR_19200; break; + case 38400: dcb.BaudRate = CBR_38400; break; + case 57600: dcb.BaudRate = CBR_57600; break; + case 115200: dcb.BaudRate = CBR_115200; break; + default: BX_ERROR(("set_baudrate(): unsupported value %d", rate)); + } + DCBchanged = TRUE; +#endif +} + +void serial_raw::set_data_bits(int val) +{ + BX_DEBUG (("set data bits (%d)", val)); +#ifdef WIN32 + dcb.ByteSize = val; + DCBchanged = TRUE; +#endif +} + +void serial_raw::set_stop_bits(int val) +{ + BX_DEBUG (("set stop bits (%d)", val)); +#ifdef WIN32 + if (val == 1) { + dcb.StopBits = ONESTOPBIT; + } if (dcb.ByteSize == 5) { + dcb.StopBits = ONE5STOPBITS; + } else { + dcb.StopBits = TWOSTOPBITS; + } + DCBchanged = TRUE; +#endif +} + +void serial_raw::set_parity_mode(int mode) +{ + BX_DEBUG (("set parity mode %d", mode)); +#ifdef WIN32 + switch (mode) { + case 0: + dcb.fParity = FALSE; + dcb.Parity = NOPARITY; + break; + case 1: + dcb.fParity = TRUE; + dcb.Parity = ODDPARITY; + break; + case 2: + dcb.fParity = TRUE; + dcb.Parity = EVENPARITY; + break; + case 3: + dcb.fParity = TRUE; + dcb.Parity = MARKPARITY; + break; + case 4: + dcb.fParity = TRUE; + dcb.Parity = SPACEPARITY; + break; + } + DCBchanged = TRUE; +#endif +} + +void serial_raw::set_break(int mode) +{ + BX_DEBUG (("set break %s", mode?"on":"off")); +#ifdef WIN32 + if (mode) { + SetCommBreak(hCOM); + } else { + ClearCommBreak(hCOM); + } +#endif +} + +void serial_raw::set_modem_control(int ctrl) +{ + BX_DEBUG (("set modem control 0x%02x", ctrl)); +#ifdef WIN32 + EscapeCommFunction(hCOM, (ctrl & 0x01)?SETDTR:CLRDTR); + EscapeCommFunction(hCOM, (ctrl & 0x02)?SETRTS:CLRRTS); +#endif +} + +int serial_raw::get_modem_status() +{ + int status = 0; + +#ifdef WIN32 + status = MSR_value; +#endif + BX_DEBUG (("get modem status returns 0x%02x", status)); + return status; +} + +void serial_raw::setup_port() +{ +#ifdef WIN32 + DWORD DErr; + COMMTIMEOUTS ctmo; + + ClearCommError(hCOM, &DErr, NULL); + PurgeComm(hCOM, PURGE_TXABORT | PURGE_RXABORT | + PURGE_TXCLEAR | PURGE_RXCLEAR); + memset(&ctmo, 0, sizeof(ctmo)); + SetCommTimeouts(hCOM, &ctmo); + SetCommState(hCOM, &dcb); + rxdata_count = 0; +#ifdef WIN32_RECEIVE_RAW + thread_rxdata_count = 0; +#endif +#endif +} + +void serial_raw::transmit(Bit8u byte) +{ +#ifdef WIN32 + DWORD DErr, Len2; + OVERLAPPED tx_ovl; +#endif + + BX_DEBUG (("transmit %d", byte)); + if (present) { +#ifdef WIN32 + if (DCBchanged) { + setup_port(); + } else { + ClearCommError(hCOM, &DErr, NULL); + } + memset(&tx_ovl, 0, sizeof(OVERLAPPED)); + tx_ovl.hEvent = CreateEvent(NULL,TRUE,TRUE,"transmit"); + if (!WriteFile(hCOM, &byte, 1, &Len2, &tx_ovl)) { + if (GetLastError() == ERROR_IO_PENDING) { + if (WaitForSingleObject(tx_ovl.hEvent, 100) == WAIT_OBJECT_0) { + GetOverlappedResult(hCOM, &tx_ovl, &Len2, FALSE); + } + } + } + if (Len2 != 1) BX_ERROR(("transmit failed: len = %d", Len2)); + ClearCommError(hCOM, &DErr, NULL); + CloseHandle(tx_ovl.hEvent); +#endif + } +} + +bx_bool serial_raw::ready_transmit() +{ + BX_DEBUG (("ready_transmit returning %d", present)); + return present; +} + +bx_bool serial_raw::ready_receive() +{ +#ifdef WIN32_RECEIVE_RAW + if ((rxdata_count == 0) && (thread_rxdata_count > 0)) { + SetEvent(thread_ovl.hEvent); + SetEvent(rx_ovl.hEvent); + } +#endif + BX_DEBUG (("ready_receive returning %d", (rxdata_count > 0))); + return (rxdata_count > 0); +} + +int serial_raw::receive() +{ +#ifdef WIN32 + int data; +#endif + + if (present) { +#ifdef WIN32 + if (DCBchanged) { + setup_port(); + } + data = rxdata_buffer[0]; + if (rxdata_count > 0) { + memcpy(&rxdata_buffer[0], &rxdata_buffer[1], sizeof(Bit16s)*(RX_BUFSIZE-1)); + rxdata_count--; + } + if (data < 0) { + switch (data) { + case RAW_EVENT_CTS_ON: + MSR_value |= 0x10; + break; + case RAW_EVENT_CTS_OFF: + MSR_value &= ~0x10; + break; + case RAW_EVENT_DSR_ON: + MSR_value |= 0x20; + break; + case RAW_EVENT_DSR_OFF: + MSR_value &= ~0x20; + break; + case RAW_EVENT_RING_ON: + MSR_value |= 0x40; + break; + case RAW_EVENT_RING_OFF: + MSR_value &= ~0x40; + break; + case RAW_EVENT_RLSD_ON: + MSR_value |= 0x80; + break; + case RAW_EVENT_RLSD_OFF: + MSR_value &= ~0x80; + break; + } + } + return data; +#else + BX_DEBUG (("receive returning 'A'")); + return (int)'A'; +#endif + } else { + BX_DEBUG (("receive returning 'A'")); + return (int)'A'; + } +} + +#ifdef WIN32_RECEIVE_RAW + +DWORD WINAPI RawSerialThread(VOID *this_ptr) +{ + serial_raw *class_ptr = (serial_raw *) this_ptr; + class_ptr->serial_thread(); + return 0; +} + +void serial_raw::serial_thread() +{ + DWORD DErr, Len2; + DWORD EvtMask, MSR, Temp; + char s1[2]; + + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_IDLE); + thread_active = TRUE; + thread_quit = FALSE; + memset(&thread_ovl, 0, sizeof(OVERLAPPED)); + thread_ovl.hEvent = CreateEvent(NULL,TRUE,TRUE,"thread"); + thread_rxdata_count = 0; + while (!thread_quit) { + if ((rxdata_count == 0) && (thread_rxdata_count > 0)) { + if (thread_rxdata_count > RX_BUFSIZE) { + memcpy(&rxdata_buffer[0], &thread_rxdata_buffer[0], sizeof(Bit16s)*RX_BUFSIZE); + memcpy(&thread_rxdata_buffer[0], &thread_rxdata_buffer[RX_BUFSIZE], sizeof(Bit16s)*(thread_rxdata_count-RX_BUFSIZE)); + rxdata_count = RX_BUFSIZE; + thread_rxdata_count -= RX_BUFSIZE; + } else { + memcpy(&rxdata_buffer[0], &thread_rxdata_buffer[0], sizeof(Bit16s)*thread_rxdata_count); + rxdata_count = thread_rxdata_count; + thread_rxdata_count = 0; + } + } + ClearCommError(hCOM, &DErr, NULL); + EvtMask = 0; + if (!WaitCommEvent(hCOM, &EvtMask, &thread_ovl)) { + if (GetLastError() == ERROR_IO_PENDING) { + if (WaitForSingleObject(thread_ovl.hEvent, INFINITE) == WAIT_OBJECT_0) { + GetOverlappedResult(hCOM, &thread_ovl, &Temp, FALSE); + } + } + } + if (EvtMask & EV_RXCHAR) { + if (thread_rxdata_count < THREAD_RX_BUFSIZE) { + do { + ClearCommError(hCOM, &DErr, NULL); + if (!ReadFile(hCOM, s1, 1, &Len2, &rx_ovl)) { + if (GetLastError() == ERROR_IO_PENDING) { + if (WaitForSingleObject(rx_ovl.hEvent, INFINITE) != WAIT_OBJECT_0) { + Len2 = 0; + } else { + GetOverlappedResult(hCOM, &rx_ovl, &Len2, FALSE); + } + } else { + Len2 = 0; + } + } + if (Len2 > 0) { + enq_event(s1[0]); + } + if ((rxdata_count == 0) && (thread_rxdata_count > 0)) { + if (thread_rxdata_count > RX_BUFSIZE) { + memcpy(&rxdata_buffer[0], &thread_rxdata_buffer[0], sizeof(Bit16s)*RX_BUFSIZE); + memcpy(&thread_rxdata_buffer[0], &thread_rxdata_buffer[RX_BUFSIZE], sizeof(Bit16s)*(thread_rxdata_count-RX_BUFSIZE)); + rxdata_count = RX_BUFSIZE; + thread_rxdata_count -= RX_BUFSIZE; + } else { + memcpy(&rxdata_buffer[0], &thread_rxdata_buffer[0], sizeof(Bit16s)*thread_rxdata_count); + rxdata_count = thread_rxdata_count; + thread_rxdata_count = 0; + } + } + } while ((Len2 != 0) && (thread_rxdata_count < THREAD_RX_BUFSIZE)); + ClearCommError(hCOM, &DErr, NULL); + } + } + if (EvtMask & EV_BREAK) { + enq_event(RAW_EVENT_BREAK); + } + if (EvtMask & EV_ERR) { + ClearCommError(hCOM, &DErr, NULL); + if (DErr & CE_FRAME) { + enq_event(RAW_EVENT_FRAME); + } + if (DErr & CE_OVERRUN) { + enq_event(RAW_EVENT_OVERRUN); + } + if (DErr & CE_RXPARITY) { + enq_event(RAW_EVENT_PARITY); + } + } + if (EvtMask & (EV_CTS | EV_DSR | EV_RING | EV_RLSD)) { + GetCommModemStatus(hCOM, &MSR); + } + if (EvtMask & EV_CTS) { + if (MSR & MS_CTS_ON) { + enq_event(RAW_EVENT_CTS_ON); + } else { + enq_event(RAW_EVENT_CTS_OFF); + } + } + if (EvtMask & EV_DSR) { + if (MSR & MS_DSR_ON) { + enq_event(RAW_EVENT_DSR_ON); + } else { + enq_event(RAW_EVENT_DSR_OFF); + } + } + if (EvtMask & EV_RING) { + if (MSR & MS_RING_ON) { + enq_event(RAW_EVENT_RING_ON); + } else { + enq_event(RAW_EVENT_RING_OFF); + } + } + if (EvtMask & EV_RLSD) { + if (MSR & MS_RLSD_ON) { + enq_event(RAW_EVENT_RLSD_ON); + } else { + enq_event(RAW_EVENT_RLSD_OFF); + } + } + } + CloseHandle(thread_ovl.hEvent); + thread_active = FALSE; +} + +void serial_raw::enq_event(Bit16s event) +{ + if (thread_rxdata_count < THREAD_RX_BUFSIZE) { + thread_rxdata_buffer[thread_rxdata_count++] = event; + } else { + fprintf(stderr, "receive buffer overflow\n"); + } +} +#endif + +#endif diff --git a/bochs/iodev/serial_raw.h b/bochs/iodev/serial_raw.h new file mode 100644 index 00000000..32c155a4 --- /dev/null +++ b/bochs/iodev/serial_raw.h @@ -0,0 +1,97 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2004 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#if USE_RAW_SERIAL + +#ifdef __linux__ +#include +#endif + +#ifdef WIN32 +// experimental raw serial receive support on win32 +//#define WIN32_RECEIVE_RAW +#endif + +#define P_NONE 0 +#define P_ODD 1 +#define P_EVEN 2 +#define P_HIGH 3 +#define P_LOW 4 + +#define RAW_EVENT_BREAK -1 +#define RAW_EVENT_CTS_ON -2 +#define RAW_EVENT_CTS_OFF -3 +#define RAW_EVENT_DSR_ON -4 +#define RAW_EVENT_DSR_OFF -5 +#define RAW_EVENT_RING_ON -6 +#define RAW_EVENT_RING_OFF -7 +#define RAW_EVENT_RLSD_ON -8 +#define RAW_EVENT_RLSD_OFF -9 +#define RAW_EVENT_FRAME -10 +#define RAW_EVENT_OVERRUN -11 +#define RAW_EVENT_PARITY -12 + +#define THREAD_RX_BUFSIZE 8192 +#define RX_BUFSIZE 256 + +class serial_raw : public logfunctions { +public: + serial_raw(const char *devname); + virtual ~serial_raw(); + void set_baudrate(int rate); + void set_data_bits(int); + void set_stop_bits(int); + void set_parity_mode(int mode); + void set_break(int mode); + void set_modem_control(int ctrl); + int get_modem_status(); + void transmit(Bit8u byte); + bx_bool ready_transmit(); + bx_bool ready_receive(); + int receive (); +#ifdef WIN32_RECEIVE_RAW + void serial_thread(); +#endif + + private: + void setup_port(); +#ifdef WIN32_RECEIVE_RAW + void enq_event(Bit16s event); +#endif + bx_bool present; + unsigned rxdata_count; +#ifdef WIN32 + HANDLE hCOM; + DCB dcb; + BOOL DCBchanged; + DWORD MSR_value; + Bit16s rxdata_buffer[RX_BUFSIZE]; +#ifdef WIN32_RECEIVE_RAW + HANDLE hRawSerialThread; + BOOL thread_active; + BOOL thread_quit; + OVERLAPPED rx_ovl; + OVERLAPPED thread_ovl; + unsigned thread_rxdata_count; + Bit16s thread_rxdata_buffer[THREAD_RX_BUFSIZE]; +#endif +#endif +}; +#endif diff --git a/bochs/iodev/slowdown_timer.cc b/bochs/iodev/slowdown_timer.cc new file mode 100644 index 00000000..251a2c61 --- /dev/null +++ b/bochs/iodev/slowdown_timer.cc @@ -0,0 +1,179 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#include "bochs.h" +#include "param_names.h" +#include "slowdown_timer.h" + +#include +#if !defined(_MSC_VER) +#include +#endif + +//These need to stay printfs because they are useless in the log file. +#define BX_SLOWDOWN_PRINTF_FEEDBACK 0 + +#define SECINUSEC 1000000 +#define usectosec(a) ((a)/SECINUSEC) +#define sectousec(a) ((a)*SECINUSEC) +#define nsectousec(a) ((a)/1000) + +#define MSECINUSEC 1000 +#define usectomsec(a) ((a)/MSECINUSEC) + +#define Qval 1000 +#define MAXMULT 1.5 +#define REALTIME_Q SECINUSEC + +#define LOG_THIS bx_slowdown_timer. + +bx_slowdown_timer_c bx_slowdown_timer; + +bx_slowdown_timer_c::bx_slowdown_timer_c() +{ + put("STIME"); + + s.start_time=0; + s.start_emulated_time=0; + s.timer_handle=BX_NULL_TIMER_HANDLE; +} + +void bx_slowdown_timer_c::init(void) +{ + // Return early if slowdown timer not selected + if ((SIM->get_param_enum(BXPN_CLOCK_SYNC)->get() != BX_CLOCK_SYNC_SLOWDOWN) && + (SIM->get_param_enum(BXPN_CLOCK_SYNC)->get() != BX_CLOCK_SYNC_BOTH)) + return; + + BX_INFO(("using 'slowdown' timer synchronization method")); + s.MAXmultiplier=MAXMULT; + s.Q=Qval; + + if(s.MAXmultiplier<1) + s.MAXmultiplier=1; + + s.start_time=sectousec(time(NULL)); + s.start_emulated_time = bx_pc_system.time_usec(); + s.lasttime=0; + if (s.timer_handle == BX_NULL_TIMER_HANDLE) { + s.timer_handle=bx_pc_system.register_timer(this, timer_handler, 100 , 1, 1, + "slowdown_timer"); + } + bx_pc_system.deactivate_timer(s.timer_handle); + bx_pc_system.activate_timer(s.timer_handle,(Bit32u)s.Q,0); +} + +void bx_slowdown_timer_c::exit(void) +{ + s.timer_handle = BX_NULL_TIMER_HANDLE; +} + +void bx_slowdown_timer_c::after_restore_state(void) +{ + s.start_emulated_time = bx_pc_system.time_usec(); +} + +void bx_slowdown_timer_c::timer_handler(void * this_ptr) +{ + bx_slowdown_timer_c * class_ptr = (bx_slowdown_timer_c *) this_ptr; + class_ptr->handle_timer(); +} + +void bx_slowdown_timer_c::handle_timer() +{ + Bit64u total_emu_time = (bx_pc_system.time_usec()) - s.start_emulated_time; + Bit64u wanttime = s.lasttime+s.Q; + Bit64u totaltime = sectousec(time(NULL)) - s.start_time; + Bit64u thistime=(wanttime>totaltime)?wanttime:totaltime; + +#if BX_SLOWDOWN_PRINTF_FEEDBACK + printf("Entering slowdown timer handler.\n"); +#endif + + /* Decide if we're behind. + * Set interrupt interval accordingly. */ + if(totaltime > total_emu_time) { + bx_pc_system.deactivate_timer(s.timer_handle); + bx_pc_system.activate_timer(s.timer_handle, + (Bit32u)(s.MAXmultiplier * (float)((Bit64s)s.Q)), 0); +#if BX_SLOWDOWN_PRINTF_FEEDBACK + printf("running at MAX speed\n"); +#endif + } else { + bx_pc_system.deactivate_timer(s.timer_handle); + bx_pc_system.activate_timer(s.timer_handle,(Bit32u)s.Q,0); +#if BX_SLOWDOWN_PRINTF_FEEDBACK + printf("running at NORMAL speed\n"); +#endif + } + + /* Make sure we took at least one time quantum. */ + /* This is a little strange. I'll try to explain. + * We're running bochs one second ahead of real time. + * this gives us a very precise division on whether + * we're ahead or behind the second line. + * Basically, here's how it works: + * *****|******************|***********... + * Time Time+1sec + * <^Bochs doesn't delay. + * ^>Bochs delays. + * <^Bochs runs at MAX speed. + * ^>Bochs runs at normal + */ + if(wanttime > (totaltime+REALTIME_Q)) { +#if BX_HAVE_USLEEP + usleep(s.Q); +#elif BX_HAVE_MSLEEP + msleep(usectomsec((Bit32u)s.Q)); +#elif BX_HAVE_SLEEP + sleep(usectosec(s.Q)); +#else +#error do not know have to sleep +#endif //delay(wanttime-totaltime); + /* alternatively: delay(Q); + * This works okay because we share the delay between + * two time quantums. + */ +#if BX_SLOWDOWN_PRINTF_FEEDBACK + printf("DELAYING for a quantum\n"); +#endif + } + s.lasttime=thistime; + + //Diagnostic info: +#if 0 + if(wanttime > (totaltime+REALTIME_Q)) { + if(totaltime > total_emu_time) { + printf("Solving OpenBSD problem.\n"); + } else { + printf("too fast.\n"); + } + } else { + if(totaltime > total_emu_time) { + printf("too slow.\n"); + } else { + printf("sometimes invalid state, normally okay.\n"); + } + } +#endif // Diagnostic info +} + diff --git a/bochs/iodev/slowdown_timer.h b/bochs/iodev/slowdown_timer.h new file mode 100644 index 00000000..aae1ab30 --- /dev/null +++ b/bochs/iodev/slowdown_timer.h @@ -0,0 +1,53 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef BX_IODEV_SLOWDOWN_TIMER_H +#define BX_IODEV_SLOWDOWN_TIMER_H + +class bx_slowdown_timer_c : public logfunctions { +private: + struct { + Bit64u start_time; + Bit64u start_emulated_time; + Bit64u lasttime; + + int timer_handle; + + float MAXmultiplier; + Bit64u Q; // sleep rate in usec + } s; + +public: + bx_slowdown_timer_c(); + + void init(void); + void exit(void); + void after_restore_state(void); + + static void timer_handler(void * this_ptr); + + void handle_timer(); + +}; + +extern bx_slowdown_timer_c bx_slowdown_timer; + +#endif diff --git a/bochs/iodev/soundlnx.cc b/bochs/iodev/soundlnx.cc new file mode 100644 index 00000000..8cb5a5c4 --- /dev/null +++ b/bochs/iodev/soundlnx.cc @@ -0,0 +1,530 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Josef Drexler coded the original version of the lowlevel sound support +// for Linux using OSS. The current version also supports OSS on FreeBSD and +// ALSA PCM output on Linux. + +#include "iodev.h" + +#if (defined(linux) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) && BX_SUPPORT_SB16 + +#define LOG_THIS device-> + +#include "soundmod.h" +#include "soundlnx.h" + +#include +#include +#include + +bx_sound_linux_c::bx_sound_linux_c(logfunctions *dev) + :bx_sound_output_c(dev) +{ +#if BX_HAVE_ALSASOUND + alsa_seq.handle = NULL; + alsa_pcm.handle = NULL; + alsa_buffer = NULL; +#endif + midi = NULL; + wavedevice = NULL; + wave = -1; + BX_INFO(("Sound output module 'linux' initialized")); +} + +bx_sound_linux_c::~bx_sound_linux_c() +{ + // nothing for now +} + + +int bx_sound_linux_c::waveready() +{ + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_linux_c::midiready() +{ + return BX_SOUND_OUTPUT_OK; +} + +#if BX_HAVE_ALSASOUND +int bx_sound_linux_c::alsa_seq_open(const char *alsadev) +{ + char *mididev, *ptr; + int client, port, ret = 0; + int length = strlen(alsadev) + 1; + + mididev = new char[length]; + + if (mididev == NULL) + return BX_SOUND_OUTPUT_ERR; + + strcpy(mididev, alsadev); + ptr = strtok(mididev, ":"); + if (ptr == NULL) { + BX_ERROR(("ALSA sequencer setup: missing client parameters")); + return BX_SOUND_OUTPUT_ERR; + } + client = atoi(ptr); + ptr = strtok(NULL, ":"); + if (ptr == NULL) { + BX_ERROR(("ALSA sequencer setup: missing port parameter")); + return BX_SOUND_OUTPUT_ERR; + } + port = atoi(ptr); + + delete(mididev); + + if (snd_seq_open(&alsa_seq.handle, "default", SND_SEQ_OPEN_OUTPUT, 0) < 0) { + BX_ERROR(("Couldn't open ALSA sequencer for midi output")); + return BX_SOUND_OUTPUT_ERR; + } + ret = snd_seq_create_simple_port(alsa_seq.handle, NULL, + SND_SEQ_PORT_CAP_WRITE | + SND_SEQ_PORT_CAP_SUBS_WRITE | + SND_SEQ_PORT_CAP_READ, + SND_SEQ_PORT_TYPE_MIDI_GENERIC); + if (ret < 0) { + BX_ERROR(("ALSA sequencer: error creating port %s", snd_strerror(errno))); + } else { + alsa_seq.source_port = ret; + ret = snd_seq_connect_to(alsa_seq.handle, alsa_seq.source_port, client, port); + if (ret < 0) { + BX_ERROR(("ALSA sequencer: could not connect to port %d:%d", client, port)); + } + } + if (ret < 0) { + snd_seq_close(alsa_seq.handle); + return BX_SOUND_OUTPUT_ERR; + } else { + return BX_SOUND_OUTPUT_OK; + } +} +#endif + +int bx_sound_linux_c::openmidioutput(const char *mididev) +{ + if ((mididev == NULL) || (strlen(mididev) < 1)) + return BX_SOUND_OUTPUT_ERR; + +#if BX_HAVE_ALSASOUND + use_alsa_seq = !strncmp(mididev, "alsa:", 5); + if (use_alsa_seq) { + return alsa_seq_open(mididev+5); + } +#endif + + midi = fopen(mididev,"w"); + + if (midi == NULL) { + BX_ERROR(("Couldn't open midi output device %s: %s", + mididev, strerror(errno))); + return BX_SOUND_OUTPUT_ERR; + } + + return BX_SOUND_OUTPUT_OK; +} + + +#if BX_HAVE_ALSASOUND +int bx_sound_linux_c::alsa_seq_output(int delta, int command, int length, Bit8u data[]) +{ + int cmd, chan, value; + snd_seq_event_t ev; + + snd_seq_ev_clear(&ev); + snd_seq_ev_set_source(&ev, alsa_seq.source_port); + snd_seq_ev_set_subs(&ev); + snd_seq_ev_set_direct(&ev); + cmd = command & 0xf0; + chan = command & 0x0f; + switch (cmd) { + case 0x80: + ev.type = SND_SEQ_EVENT_NOTEOFF; + ev.data.note.channel = chan; + ev.data.note.note = data[0]; + ev.data.note.velocity = data[1]; + ev.data.note.duration = delta; + break; + case 0x90: + ev.type = SND_SEQ_EVENT_NOTEON; + ev.data.note.channel = chan; + ev.data.note.note = data[0]; + ev.data.note.velocity = data[1]; + ev.data.note.duration = 0; + break; + case 0xa0: + ev.type = SND_SEQ_EVENT_KEYPRESS; + ev.data.control.channel = chan; + ev.data.control.param = data[0]; + ev.data.control.value = data[1]; + break; + case 0xb0: + ev.type = SND_SEQ_EVENT_CONTROLLER; + ev.data.control.channel = chan; + ev.data.control.param = data[0]; + ev.data.control.value = data[1]; + break; + case 0xc0: + ev.type = SND_SEQ_EVENT_PGMCHANGE; + ev.data.control.channel = chan; + ev.data.control.value = data[0]; + break; + case 0xd0: + ev.type = SND_SEQ_EVENT_CHANPRESS; + ev.data.control.channel = chan; + ev.data.control.value = data[0]; + break; + case 0xe0: + ev.type = SND_SEQ_EVENT_PITCHBEND; + ev.data.control.channel = chan; + value = data[0] | (data[1] << 7); + value -= 0x2000; + ev.data.control.value = value; + break; + case 0xf0: + BX_ERROR(("alsa_seq_output(): SYSEX not implemented, length=%d", length)); + return BX_SOUND_OUTPUT_ERR; + default: + BX_ERROR(("alsa_seq_output(): unknown command 0x%02x, length=%d", command, length)); + return BX_SOUND_OUTPUT_ERR; + } + snd_seq_event_output(alsa_seq.handle, &ev); + snd_seq_drain_output(alsa_seq.handle); + return BX_SOUND_OUTPUT_OK; +} +#endif + +int bx_sound_linux_c::sendmidicommand(int delta, int command, int length, Bit8u data[]) +{ +#if BX_HAVE_ALSASOUND + if ((use_alsa_seq) && (alsa_seq.handle != NULL)) { + return alsa_seq_output(delta, command, length, data); + } +#endif + + UNUSED(delta); + + fputc(command, midi); + fwrite(data, 1, length, midi); + fflush(midi); // to start playing immediately + + return BX_SOUND_OUTPUT_OK; +} + + +int bx_sound_linux_c::closemidioutput() +{ +#if BX_HAVE_ALSASOUND + if ((use_alsa_seq) && (alsa_seq.handle != NULL)) { + snd_seq_close(alsa_seq.handle); + return BX_SOUND_OUTPUT_OK; + } +#endif + fclose(midi); + + return BX_SOUND_OUTPUT_OK; +} + + +int bx_sound_linux_c::openwaveoutput(const char *wavedev) +{ +#if BX_HAVE_ALSASOUND + use_alsa_pcm = !strcmp(wavedev, "alsa"); + if (use_alsa_pcm) { + return BX_SOUND_OUTPUT_OK; + } +#endif + int length = strlen(wavedev) + 1; + + if (wavedevice != NULL) + delete(wavedevice); + + wavedevice = new char[length]; + + if (wavedevice == NULL) + return BX_SOUND_OUTPUT_ERR; + + strncpy(wavedevice, wavedev, length); + + return BX_SOUND_OUTPUT_OK; +} + +#if BX_HAVE_ALSASOUND +int bx_sound_linux_c::alsa_pcm_open(int frequency, int bits, int stereo, int format) +{ + int ret; + snd_pcm_format_t fmt; + snd_pcm_hw_params_t *params; + unsigned int size, freq; + int signeddata = format & 1; + + audio_bufsize = 0; + + if (alsa_pcm.handle == NULL) { + ret = snd_pcm_open(&alsa_pcm.handle, "default", SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK); + if (ret < 0) { + return BX_SOUND_OUTPUT_ERR; + } + BX_INFO(("ALSA: opened default PCM output device")); + } + snd_pcm_hw_params_alloca(¶ms); + snd_pcm_hw_params_any(alsa_pcm.handle, params); + snd_pcm_hw_params_set_access(alsa_pcm.handle, params, SND_PCM_ACCESS_RW_INTERLEAVED); + + if ((frequency == oldfreq) && + (bits == oldbits) && + (stereo == oldstereo) && + (format == oldformat)) + return BX_SOUND_OUTPUT_OK; // nothing to do + + oldfreq = frequency; + oldbits = bits; + oldstereo = stereo; + oldformat = format; + + freq = (unsigned int)frequency; + + if (bits == 16) { + if (signeddata == 1) + fmt = SND_PCM_FORMAT_S16_LE; + else + fmt = SND_PCM_FORMAT_U16_LE; + size = 2; + } else if (bits == 8) { + if (signeddata == 1) + fmt = SND_PCM_FORMAT_S8; + else + fmt = SND_PCM_FORMAT_U8; + size = 1; + } else + return BX_SOUND_OUTPUT_ERR; + + if (stereo) size *= 2; + + snd_pcm_hw_params_set_format(alsa_pcm.handle, params, fmt); + snd_pcm_hw_params_set_channels(alsa_pcm.handle, params, (stereo != 0) ? 2 : 1); + snd_pcm_hw_params_set_rate_near(alsa_pcm.handle, params, &freq, &dir); + + alsa_pcm.frames = 32; + snd_pcm_hw_params_set_period_size_near(alsa_pcm.handle, params, &alsa_pcm.frames, &dir); + + ret = snd_pcm_hw_params(alsa_pcm.handle, params); + if (ret < 0) { + return BX_SOUND_OUTPUT_ERR; + } + snd_pcm_hw_params_get_period_size(params, &alsa_pcm.frames, &dir); + alsa_bufsize = alsa_pcm.frames * size; + BX_DEBUG(("ALSA: buffer size set to %d", alsa_bufsize)); + if (alsa_buffer != NULL) { + free(alsa_buffer); + alsa_buffer = NULL; + } + + return BX_SOUND_OUTPUT_OK; +} +#endif + +int bx_sound_linux_c::startwaveplayback(int frequency, int bits, int stereo, int format) +{ + int fmt, ret; + int signeddata = format & 1; + +#if BX_HAVE_ALSASOUND + if (use_alsa_pcm) { + return alsa_pcm_open(frequency, bits, stereo, format); + } +#endif + if ((wavedevice == NULL) || (strlen(wavedevice) < 1)) + return BX_SOUND_OUTPUT_ERR; + + if (wave == -1) { + wave = open(wavedevice, O_WRONLY); + if (wave == -1) { + return BX_SOUND_OUTPUT_ERR; + } else { + BX_INFO(("OSS: opened output device %s", wavedevice)); + } + } else { + if ((frequency == oldfreq) && + (bits == oldbits) && + (stereo == oldstereo) && + (format == oldformat)) + return BX_SOUND_OUTPUT_OK; // nothing to do + } + oldfreq = frequency; + oldbits = bits; + oldstereo = stereo; + oldformat = format; + + if (bits == 16) + if (signeddata == 1) + fmt = AFMT_S16_LE; + else + fmt = AFMT_U16_LE; + else if (bits == 8) + if (signeddata == 1) + fmt = AFMT_S8; + else + fmt = AFMT_U8; + else + return BX_SOUND_OUTPUT_ERR; + + // set frequency etc. + ret = ioctl(wave, SNDCTL_DSP_RESET); + if (ret != 0) + BX_DEBUG(("ioctl(SNDCTL_DSP_RESET): %s", strerror(errno))); + + /* + ret = ioctl(wave, SNDCTL_DSP_SETFRAGMENT, &fragment); + if (ret != 0) + WRITELOG(WAVELOG(4), "ioctl(SNDCTL_DSP_SETFRAGMENT, %d): %s", + fragment, strerror(errno)); + */ + + ret = ioctl(wave, SNDCTL_DSP_SETFMT, &fmt); + if (ret != 0) // abort if the format is unknown, to avoid playing noise + { + BX_DEBUG(("ioctl(SNDCTL_DSP_SETFMT, %d): %s", + fmt, strerror(errno))); + return BX_SOUND_OUTPUT_ERR; + } + + ret = ioctl(wave, SNDCTL_DSP_STEREO, &stereo); + if (ret != 0) + BX_DEBUG(("ioctl(SNDCTL_DSP_STEREO, %d): %s", + stereo, strerror(errno))); + + ret = ioctl(wave, SNDCTL_DSP_SPEED, &frequency); + if (ret != 0) + BX_DEBUG(("ioctl(SNDCTL_DSP_SPEED, %d): %s", + frequency, strerror(errno))); + + // ioctl(wave, SNDCTL_DSP_GETBLKSIZE, &fragment); + // BX_DEBUG(("current output block size is %d", fragment)); + + return BX_SOUND_OUTPUT_OK; +} + +#if BX_HAVE_ALSASOUND +int bx_sound_linux_c::alsa_pcm_write() +{ + int ret; + + if (alsa_buffer == NULL) { + alsa_buffer = (char *)malloc(alsa_bufsize); + } + while (audio_bufsize >= alsa_bufsize) { + memcpy(alsa_buffer, audio_buffer, alsa_bufsize); + ret = snd_pcm_writei(alsa_pcm.handle, alsa_buffer, alsa_pcm.frames); + if (ret == -EAGAIN) + continue; + if (ret == -EPIPE) { + /* EPIPE means underrun */ + BX_ERROR(("ALSA: underrun occurred")); + snd_pcm_prepare(alsa_pcm.handle); + } else if (ret < 0) { + BX_ERROR(("ALSA: error from writei: %s", snd_strerror(ret))); + } else if (ret != (int)alsa_pcm.frames) { + BX_ERROR(("ALSA: short write, write %d frames", ret)); + } + audio_bufsize -= alsa_bufsize; + memcpy(audio_buffer, audio_buffer+alsa_bufsize, audio_bufsize); + } + if ((audio_bufsize == 0) && (alsa_buffer != NULL)) { + free(alsa_buffer); + alsa_buffer = NULL; + } + + return BX_SOUND_OUTPUT_OK; +} +#endif + +int bx_sound_linux_c::sendwavepacket(int length, Bit8u data[]) +{ +#if BX_HAVE_ALSASOUND + if (use_alsa_pcm) { + if ((audio_bufsize+length) <= BX_SOUND_LINUX_BUFSIZE) { + memcpy(audio_buffer+audio_bufsize, data, length); + audio_bufsize += length; + } else { + BX_ERROR(("ALSA: audio buffer overflow")); + return BX_SOUND_OUTPUT_ERR; + } + if (audio_bufsize < alsa_bufsize) { + return BX_SOUND_OUTPUT_OK; + } else { + return alsa_pcm_write(); + } + } +#endif + int ret = write(wave, data, length); + + if (ret == length) { + return BX_SOUND_OUTPUT_OK; + } else { + BX_ERROR(("OSS: write error")); + return BX_SOUND_OUTPUT_ERR; + } +} + +int bx_sound_linux_c::stopwaveplayback() +{ +#if BX_HAVE_ALSASOUND + if (use_alsa_pcm && (audio_bufsize > 0)) { + if (audio_bufsize < alsa_bufsize) { + memset(audio_buffer+audio_bufsize, 0, alsa_bufsize-audio_bufsize); + audio_bufsize = alsa_bufsize; + } + alsa_pcm_write(); + } +#endif + // ioctl(wave, SNDCTL_DSP_SYNC); + // close(wave); + // wave = -1; + + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_linux_c::closewaveoutput() +{ +#if BX_HAVE_ALSASOUND + if (use_alsa_pcm && (alsa_pcm.handle != NULL)) { + snd_pcm_drain(alsa_pcm.handle); + snd_pcm_close(alsa_pcm.handle); + alsa_pcm.handle = NULL; + } +#endif + if (wavedevice != NULL) + delete(wavedevice); + + if (wave != -1) + { + close(wave); + wave = -1; + } + wavedevice = NULL; + + return BX_SOUND_OUTPUT_OK; +} + +#endif diff --git a/bochs/iodev/soundlnx.h b/bochs/iodev/soundlnx.h new file mode 100644 index 00000000..0d9037dc --- /dev/null +++ b/bochs/iodev/soundlnx.h @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// Josef Drexler coded the original version of the lowlevel sound support +// for Linux using OSS. The current version also supports OSS on FreeBSD and +// ALSA PCM output on Linux. + +#if (defined(linux) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) + +#define BX_SOUND_LINUX_BUFSIZE BX_SOUND_OUTPUT_WAVEPACKETSIZE * 2 + +#if BX_HAVE_ALSASOUND +#define ALSA_PCM_NEW_HW_PARAMS_API +#include +#endif + +class bx_sound_linux_c : public bx_sound_output_c { +public: + bx_sound_linux_c(logfunctions *dev); + virtual ~bx_sound_linux_c(); + + virtual int waveready(); + virtual int midiready(); + + virtual int openmidioutput(const char *mididev); + virtual int sendmidicommand(int delta, int command, int length, Bit8u data[]); + virtual int closemidioutput(); + + virtual int openwaveoutput(const char *wavedev); + virtual int startwaveplayback(int frequency, int bits, int stereo, int format); + virtual int sendwavepacket(int length, Bit8u data[]); + virtual int stopwaveplayback(); + virtual int closewaveoutput(); + +private: +#if BX_HAVE_ALSASOUND + int alsa_seq_open(const char *alsadev); + int alsa_seq_output(int delta, int command, int length, Bit8u data[]); + int alsa_pcm_open(int frequency, int bits, int stereo, int format); + int alsa_pcm_write(); + + bx_bool use_alsa_seq; + bx_bool use_alsa_pcm; + struct { + snd_seq_t *handle; + int source_port; + } alsa_seq; + struct { + snd_pcm_t *handle; + snd_pcm_uframes_t frames; + } alsa_pcm; + int dir, alsa_bufsize, audio_bufsize; + char *alsa_buffer; +#endif + FILE *midi; + char *wavedevice; + int wave; + Bit8u audio_buffer[BX_SOUND_LINUX_BUFSIZE]; + int oldfreq,oldbits,oldstereo,oldformat; +}; + +#endif diff --git a/bochs/iodev/soundmod.cc b/bochs/iodev/soundmod.cc new file mode 100644 index 00000000..0715a499 --- /dev/null +++ b/bochs/iodev/soundmod.cc @@ -0,0 +1,140 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// Common sound module code and dummy sound output functions + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_SB16 + +#include "soundmod.h" +#include "soundlnx.h" +#include "soundosx.h" +#include "soundwin.h" + +#define LOG_THIS dev-> + +bx_soundmod_ctl_c* theSoundModCtl = NULL; + +int libsoundmod_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theSoundModCtl = new bx_soundmod_ctl_c; + bx_devices.pluginSoundModCtl = theSoundModCtl; + return(0); // Success +} + +void libsoundmod_LTX_plugin_fini(void) +{ + delete theSoundModCtl; +} + +int bx_soundmod_ctl_c::init_module(const char *type, void **module, logfunctions *dev) +{ + bx_sound_output_c **soundmod = (bx_sound_output_c**)module; + + if (!strcmp(type, "default")) { + *soundmod = new BX_SOUND_OUTPUT_C(dev); + } else if (!strcmp(type, "dummy")) { + *soundmod = new bx_sound_output_c(dev); + } else { + BX_PANIC(("unknown sound module type '%s'", type)); + *soundmod = NULL; + } + return 0; +} + +// The dummy sound output functions. They don't do anything. +bx_sound_output_c::bx_sound_output_c(logfunctions *dev) +{ + device = dev; +} + +bx_sound_output_c::~bx_sound_output_c() +{ +} + +int bx_sound_output_c::waveready() +{ + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_output_c::midiready() +{ + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_output_c::openmidioutput(const char *mididev) +{ + UNUSED(mididev); + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_output_c::sendmidicommand(int delta, int command, int length, Bit8u data[]) +{ + UNUSED(delta); + UNUSED(command); + UNUSED(length); + UNUSED(data); + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_output_c::closemidioutput() +{ + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_output_c::openwaveoutput(const char *wavedev) +{ + UNUSED(wavedev); + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_output_c::startwaveplayback(int frequency, int bits, int stereo, int format) +{ + UNUSED(frequency); + UNUSED(bits); + UNUSED(stereo); + UNUSED(format); + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_output_c::sendwavepacket(int length, Bit8u data[]) +{ + UNUSED(length); + UNUSED(data); + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_output_c::stopwaveplayback() +{ + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_output_c::closewaveoutput() +{ + return BX_SOUND_OUTPUT_OK; +} + +#endif diff --git a/bochs/iodev/soundmod.h b/bochs/iodev/soundmod.h new file mode 100644 index 00000000..1d3f1344 --- /dev/null +++ b/bochs/iodev/soundmod.h @@ -0,0 +1,68 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// Common code for sound output modules + +// this is the size of a DMA chunk sent to output +// it should not be too large to avoid lag, and not too +// small to avoid unnecessary overhead. +#define BX_SOUND_OUTPUT_WAVEPACKETSIZE 8192 + +// Definitions for the output functions +#define BX_SOUND_OUTPUT_OK 0 +#define BX_SOUND_OUTPUT_ERR 1 + +// Pseudo device that loads the lowlevel sound module +class bx_soundmod_ctl_c : public bx_soundmod_ctl_stub_c { +public: + bx_soundmod_ctl_c() {} + virtual ~bx_soundmod_ctl_c() {} + virtual int init_module(const char *type, void **module, logfunctions *dev); +}; + +// The class with the output functions +class bx_sound_output_c : public logfunctions { +public: + + /* + These functions are the sound output functions, sending + the music/sound to the OS specific driver. + They are in a different file (soundxxx.cc) because they are + non-portable, while everything in sb16.cc is portable + */ + + bx_sound_output_c(logfunctions *dev); + virtual ~bx_sound_output_c(); + + virtual int waveready(); + virtual int midiready(); + + virtual int openmidioutput(const char *mididev); + virtual int sendmidicommand(int delta, int command, int length, Bit8u data[]); + virtual int closemidioutput(); + + virtual int openwaveoutput(const char *wavedev); + virtual int startwaveplayback(int frequency, int bits, int stereo, int format); + virtual int sendwavepacket(int length, Bit8u data[]); + virtual int stopwaveplayback(); + virtual int closewaveoutput(); +protected: + logfunctions *device; +}; diff --git a/bochs/iodev/soundosx.cc b/bochs/iodev/soundosx.cc new file mode 100644 index 00000000..c044a4ce --- /dev/null +++ b/bochs/iodev/soundosx.cc @@ -0,0 +1,409 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2004-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// This file (SOUNDOSX.CC) written and donated by Brian Huffman + +#ifdef PARANOID +#include +#endif + +#include "iodev.h" + +#if defined(macintosh) && BX_SUPPORT_SB16 + +#define LOG_THIS device-> + +#include "soundmod.h" +#include "soundosx.h" + +#if BX_WITH_MACOS +#include +#else +#include +#include +#include +#include +#include +#include +#endif +#include + +#ifdef BX_SOUND_OSX_use_converter +OSStatus MyRenderer (void *inRefCon, AudioUnitRenderActionFlags inActionFlags, + const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, AudioBuffer *ioData); +OSStatus MyACInputProc (AudioConverterRef inAudioConverter, UInt32* outDataSize, + void** outData, void* inUserData); +#endif + +// Global variables +#ifdef BX_SOUND_OSX_use_converter +AUGraph MidiGraph; +AudioUnit synthUnit; +#endif + +#ifdef BX_SOUND_OSX_use_quicktime +SndChannelPtr WaveChannel; +ExtSoundHeader WaveInfo; +ExtSoundHeader WaveHeader[BX_SOUND_OSX_NBUF]; +#endif + +#ifdef BX_SOUND_OSX_use_converter +AudioUnit WaveOutputUnit = NULL; +AudioConverterRef WaveConverter = NULL; +#endif + +bx_sound_osx_c::bx_sound_osx_c(logfunctions *dev) + :bx_sound_output_c(dev) +{ + MidiOpen = 0; + WaveOpen = 0; + head = 0; + tail = 0; + for (int i=0; i=1) ? data[0] : 0; + Bit8u arg2 = (length >=2) ? data[1] : 0; + MusicDeviceMIDIEvent (synthUnit, command, arg1, arg2, delta); + } + else { + MusicDeviceSysEx (synthUnit, data, length); + } +#endif + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_osx_c::closemidioutput() +{ + BX_DEBUG(("closemidioutput()")); + MidiOpen = 0; +#ifdef BX_SOUND_OSX_use_converter + AUGraphStop (MidiGraph); + AUGraphClose (MidiGraph); +#endif + return BX_SOUND_OUTPUT_OK; +} + +#ifdef BX_SOUND_OSX_use_quicktime +#if BX_WITH_MACOS +pascal +#endif +void WaveCallbackProc (SndChannelPtr chan, SndCommand *cmd) +{ + // a new buffer is available, so increment tail pointer + int *tail = (int *) (cmd->param2); + (*tail)++; +} +#endif + +int bx_sound_osx_c::openwaveoutput(const char *wavedev) +{ + OSStatus err; + + BX_DEBUG(("openwaveoutput(%s)", wavedev)); + + // open the default output unit +#ifdef BX_SOUND_OSX_use_quicktime + err = SndNewChannel (&WaveChannel, sampledSynth, 0, NewSndCallBackUPP(WaveCallbackProc)); + if (err != noErr) return BX_SOUND_OUTPUT_ERR; +#endif +#ifdef BX_SOUND_OSX_use_converter + err = OpenDefaultAudioOutput (&WaveOutputUnit); + if (err != noErr) return BX_SOUND_OUTPUT_ERR; + AudioUnitInitialize (WaveOutputUnit); + + // Set up a callback function to generate output to the output unit + AudioUnitInputCallback input; + input.inputProc = MyRenderer; + input.inputProcRefCon = (void *) this; + AudioUnitSetProperty (WaveOutputUnit, kAudioUnitProperty_SetInputCallback, + kAudioUnitScope_Global, 0, &input, sizeof(input)); +#endif + + WaveOpen = 1; + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_osx_c::startwaveplayback(int frequency, int bits, int stereo, int format) +{ +#ifdef BX_SOUND_OSX_use_converter + static int oldfreq, oldbits, oldstereo, oldformat; + AudioStreamBasicDescription srcFormat, dstFormat; + UInt32 formatSize = sizeof(AudioStreamBasicDescription); +#endif + + BX_DEBUG(("startwaveplayback(%d, %d, %d, %x)", frequency, bits, stereo, format)); + +#ifdef BX_SOUND_OSX_use_quicktime + WaveInfo.samplePtr = NULL; + WaveInfo.numChannels = stereo ? 2 : 1; + WaveInfo.sampleRate = frequency << 16; // sampleRate is a 16.16 fixed-point value + WaveInfo.loopStart = 0; + WaveInfo.loopEnd = 0; + WaveInfo.encode = extSH; // WaveInfo has type ExtSoundHeader + WaveInfo.baseFrequency = 1; // not sure what means. It's only a Uint8. + WaveInfo.numFrames = 0; + //WaveInfo.AIFFSampleRate = frequency; // frequency as float80 + WaveInfo.markerChunk = NULL; + + WaveInfo.instrumentChunks = NULL; + WaveInfo.AESRecording = NULL; + WaveInfo.sampleSize = bits * WaveInfo.numChannels; +#endif + +#ifdef BX_SOUND_OSX_use_converter + if ((frequency == oldfreq) && + (bits == oldbits) && + (stereo == oldstereo) && + (format == oldformat)) + return BX_SOUND_OUTPUT_OK; // nothing to do + + oldfreq = frequency; + oldbits = bits; + oldstereo = stereo; + oldformat = format; + + // update the source audio format + UInt32 bytes = bits / 8; + UInt32 channels = stereo ? 2 : 1; + srcFormat.mSampleRate = (Float64) frequency; + srcFormat.mFormatID = kAudioFormatLinearPCM; + srcFormat.mFormatFlags = kLinearPCMFormatFlagIsPacked; + if (format & 1) srcFormat.mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger; + srcFormat.mBytesPerPacket = channels * bytes; + srcFormat.mFramesPerPacket = 1; + srcFormat.mBytesPerFrame = channels * bytes; + srcFormat.mChannelsPerFrame = channels; + srcFormat.mBitsPerChannel = bytes * 8; + + if (WavePlaying) AudioOutputUnitStop (WaveOutputUnit); + if (WaveConverter) AudioConverterDispose (WaveConverter); + + AudioUnitGetProperty (WaveOutputUnit, kAudioUnitProperty_StreamFormat, + kAudioUnitScope_Output, 0, &dstFormat, &formatSize); + + AudioConverterNew (&srcFormat, &dstFormat, &WaveConverter); + + if (srcFormat.mChannelsPerFrame == 1 && dstFormat.mChannelsPerFrame == 2) { + // map single-channel input to both output channels + SInt32 map[2] = {0,0}; + AudioConverterSetProperty (WaveConverter, kAudioConverterChannelMap, + sizeof(map), (void*) map); + } + + if (WavePlaying) AudioOutputUnitStart (WaveOutputUnit); +#endif + + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_osx_c::waveready() +{ + // HACK: the -4 is to keep from overwriting buffers that + // have been sent, but possibly not yet played. There + // should be a better way of doing this. + if (WaveOpen && (head - tail < BX_SOUND_OSX_NBUF-4)) { + return BX_SOUND_OUTPUT_OK; + } + else { +#ifdef BX_SOUND_OSX_use_converter + // If buffer is full, make sure sound is playing + if (WaveOutputUnit && !WavePlaying) { + AudioOutputUnitStart (WaveOutputUnit); + WavePlaying = 1; + } +#endif + return BX_SOUND_OUTPUT_ERR; + } +} + +int bx_sound_osx_c::sendwavepacket(int length, Bit8u data[]) +{ +#ifdef BX_SOUND_OSX_use_quicktime + SndCommand mySndCommand; +#endif + + BX_DEBUG(("sendwavepacket(%d, %p), head=%u", length, data, head)); + + // sanity check + if ((!WaveOpen) || (head - tail >= BX_SOUND_OSX_NBUF)) + return BX_SOUND_OUTPUT_ERR; + + // find next available buffer + int n = head++ % BX_SOUND_OSX_NBUF; + + // put data in buffer + memcpy(WaveData[n], data, length); + WaveLength[n] = length; + +#ifdef BX_SOUND_OSX_use_quicktime + memcpy(&WaveHeader[n], &WaveInfo, sizeof(WaveInfo)); + WaveHeader[n].samplePtr = (char *) (WaveData[n]); + WaveHeader[n].numFrames = length * 8 / WaveInfo.sampleSize; +#endif +#ifdef BX_SOUND_OSX_use_converter + // make sure that the sound is playing + if (!WavePlaying) { + AudioOutputUnitStart (WaveOutputUnit); + WavePlaying = 1; + } +#endif + +#ifdef BX_SOUND_OSX_use_quicktime + // queue buffer to play + mySndCommand.cmd = bufferCmd; + mySndCommand.param1 = 0; + mySndCommand.param2 = (long)(&WaveHeader[n]); + SndDoCommand(WaveChannel, &mySndCommand, TRUE); + + // queue callback for when buffer finishes + mySndCommand.cmd = callBackCmd; + mySndCommand.param1 = 0; + mySndCommand.param2 = (long)(&tail); + SndDoCommand(WaveChannel, &mySndCommand, TRUE); +#endif + + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_osx_c::stopwaveplayback() +{ + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_osx_c::closewaveoutput() +{ +#ifdef BX_SOUND_OSX_use_converter + if (WavePlaying) AudioOutputUnitStop (WaveOutputUnit); + if (WaveConverter) AudioConverterDispose (WaveConverter); + if (WaveOutputUnit) CloseComponent (WaveOutputUnit); + WavePlaying = 0; + WaveOpen = 0; + WaveConverter = NULL; + WaveOutputUnit = NULL; +#endif + return BX_SOUND_OUTPUT_OK; +} + +#ifdef BX_SOUND_OSX_use_converter +OSStatus MyRenderer (void *inRefCon, AudioUnitRenderActionFlags inActionFlags, + const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, AudioBuffer *ioData) +{ + UInt32 size = ioData->mDataByteSize; + AudioConverterFillBuffer (WaveConverter, MyACInputProc, inRefCon, &size, ioData->mData); + return noErr; +} + +OSStatus MyACInputProc (AudioConverterRef inAudioConverter, + UInt32* outDataSize, void** outData, void* inUserData) +{ + bx_sound_osx_c *self = (bx_sound_osx_c*) inUserData; + self->nextbuffer ((int*) outDataSize, outData); + return noErr; +} + +void bx_sound_osx_c::nextbuffer (int *outDataSize, void **outData) +{ + BX_DEBUG(("nextbuffer(), tail=%u", tail)); + if (head - tail <= 0) { + *outData = NULL; + *outDataSize = 0; + + // We are getting behind, so stop the output for now + AudioOutputUnitStop (WaveOutputUnit); + WavePlaying = 0; + } + else { + int n = tail % BX_SOUND_OSX_NBUF; + *outData = (void *) (WaveData[n]); + *outDataSize = WaveLength[n]; + tail++; + } +} +#endif + +#endif // defined(macintosh) diff --git a/bochs/iodev/soundosx.h b/bochs/iodev/soundosx.h new file mode 100644 index 00000000..26da2c78 --- /dev/null +++ b/bochs/iodev/soundosx.h @@ -0,0 +1,72 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2004-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +// This file (SOUNDOSX.H) written and donated by Brian Huffman + + +#ifdef macintosh + +#include "bochs.h" + +// uncomment one of these two: +#if BX_WITH_MACOS +#define BX_SOUND_OSX_use_quicktime +#else +#define BX_SOUND_OSX_use_converter +//#define BX_SOUND_OSX_use_quicktime +#endif + +#define BX_SOUND_OSX_NBUF 8 // number of buffers for digital output + +class bx_sound_osx_c : public bx_sound_output_c { +public: + bx_sound_osx_c(logfunctions *dev); + virtual ~bx_sound_osx_c(); + + virtual int waveready(); + virtual int midiready(); + + virtual int openmidioutput(const char *mididev); + virtual int sendmidicommand(int delta, int command, int length, Bit8u data[]); + virtual int closemidioutput(); + + virtual int openwaveoutput(const char *wavedev); + virtual int startwaveplayback(int frequency, int bits, int stereo, int format); + virtual int sendwavepacket(int length, Bit8u data[]); + virtual int stopwaveplayback(); + virtual int closewaveoutput(); +#ifdef BX_SOUND_OSX_use_converter + void nextbuffer(int *outDataSize, void **outData); +#endif + +private: + int MidiOpen; + int WaveOpen; + + Bit8u WaveData[BX_SOUND_OSX_NBUF][BX_SOUND_OUTPUT_WAVEPACKETSIZE]; + int WaveLength[BX_SOUND_OSX_NBUF]; + int head, tail; // buffer pointers + +#ifdef BX_SOUND_OSX_use_converter + int WavePlaying; +#endif +}; + +#endif // macintosh diff --git a/bochs/iodev/soundwin.cc b/bochs/iodev/soundwin.cc new file mode 100644 index 00000000..b06558f7 --- /dev/null +++ b/bochs/iodev/soundwin.cc @@ -0,0 +1,511 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// This file (SOUNDWIN.CC) written and donated by Josef Drexler + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if defined(WIN32) && BX_SUPPORT_SB16 + +#include "soundmod.h" +#include "soundwin.h" + +#define LOG_THIS device-> + +bx_sound_windows_c::bx_sound_windows_c(logfunctions *dev) + :bx_sound_output_c(dev) +{ + MidiOpen = 0; + WaveOpen = 0; + + ismidiready = 1; + iswaveready = 1; + + // size is the total size of the midi header and buffer and the + // BX_SOUND_WINDOWS_NBUF wave header and buffers, all aligned + // on a 16-byte boundary + +#define ALIGN(size) ((size + 15) & ~15) + +#define size ALIGN(sizeof(MIDIHDR)) \ + + ALIGN(sizeof(WAVEHDR)) \ + + ALIGN(BX_SOUND_WINDOWS_MAXSYSEXLEN) * BX_SOUND_WINDOWS_NBUF \ + + ALIGN(BX_SOUND_OUTPUT_WAVEPACKETSIZE) * BX_SOUND_WINDOWS_NBUF + + DataHandle = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, size); + DataPointer = (Bit8u*) GlobalLock(DataHandle); + + if (DataPointer == NULL) + BX_PANIC(("GlobalLock returned NULL-pointer")); + +#define NEWBUFFER(size) &(DataPointer[offset]); offset += ALIGN(size) + + unsigned offset = 0; + MidiHeader = (LPMIDIHDR) NEWBUFFER(sizeof(MIDIHDR)); + MidiData = (LPSTR) NEWBUFFER(BX_SOUND_WINDOWS_MAXSYSEXLEN); + + for (int bufnum=0; bufnum size) + BX_PANIC(("Allocated memory was too small!")); + +#undef size +#undef ALIGN +#undef NEWBUFFER + + BX_INFO(("Sound output module 'win' initialized")); +} + +bx_sound_windows_c::~bx_sound_windows_c() +{ + GlobalUnlock(DataHandle); + GlobalFree(DataHandle); +} + +int bx_sound_windows_c::waveready() +{ + if (iswaveready == 0) + checkwaveready(); + + if (iswaveready == 1) + return BX_SOUND_OUTPUT_OK; + else + return BX_SOUND_OUTPUT_ERR; +} +int bx_sound_windows_c::midiready() +{ + if (ismidiready == 0) + checkmidiready(); + + if (ismidiready == 1) + return BX_SOUND_OUTPUT_OK; + else + return BX_SOUND_OUTPUT_ERR; +} + +int bx_sound_windows_c::openmidioutput(const char *mididev) +{ + // could make the output device selectable, + // but currently only the midi mapper is supported + UNUSED(mididev); + + UINT deviceid = (UINT) MIDIMAPPER; + + MidiOpen = 0; + + UINT ret = midiOutOpen(&MidiOut, deviceid, 0, 0, CALLBACK_NULL); + if (ret == 0) + MidiOpen = 1; + + BX_DEBUG(("midiOutOpen() = %d, MidiOpen: %d", ret, MidiOpen)); + + return (MidiOpen == 1) ? BX_SOUND_OUTPUT_OK : BX_SOUND_OUTPUT_ERR; +} + +int bx_sound_windows_c::sendmidicommand(int delta, int command, int length, Bit8u data[]) +{ + UINT ret; + + if (MidiOpen != 1) + return BX_SOUND_OUTPUT_ERR; + + if ((command == 0xf0) || (command == 0xf7) || (length > 3)) + { + BX_DEBUG(("SYSEX started, length %d", length)); + ismidiready = 0; // until the buffer is done + memcpy(MidiData, data, length); + MidiHeader->lpData = MidiData; + MidiHeader->dwBufferLength = BX_SOUND_WINDOWS_MAXSYSEXLEN; + MidiHeader->dwBytesRecorded = 0; + MidiHeader->dwUser = 0; + MidiHeader->dwFlags = 0; + ret = midiOutPrepareHeader(MidiOut, MidiHeader, sizeof(*MidiHeader)); + if (ret != 0) + BX_ERROR(("midiOutPrepareHeader() = %d", ret)); + ret = midiOutLongMsg(MidiOut, MidiHeader, sizeof(*MidiHeader)); + if (ret != 0) + BX_ERROR(("midiOutLongMsg() = %d", ret)); + } + else + { + DWORD msg = command; + + for (int i = 0; idwFlags = WHDR_DONE; + + head = 0; + tailfull = 0; + tailplay = 0; + needreopen = 0; +#endif + + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_windows_c::playnextbuffer() +{ + UINT ret; + PCMWAVEFORMAT waveformat; + int bufnum; + + // if the format is different, we have to reopen the device, + // so reset it first + if (needreopen != 0) + if (WaveOpen != 0) + ret = waveOutReset(WaveOut); + + // clean up the buffers and mark if output is ready + checkwaveready(); + + // do we have to play anything? + if (tailplay == head) + return BX_SOUND_OUTPUT_OK; + + // if the format is different, we have to close and reopen the device + // or, just open the device if it's not open yet + if ((needreopen != 0) || (WaveOpen == 0)) + { + if (WaveOpen != 0) + { + ret = waveOutClose(WaveOut); + WaveOpen = 0; + } + + // try three times to find a suitable format + for (int tries = 0; tries < 3; tries++) + { + int frequency = WaveInfo.frequency; + int stereo = WaveInfo.stereo; + int bits = WaveInfo.bits; +// int format = WaveInfo.format; + int bps = (bits / 8) * (stereo + 1); + + waveformat.wf.wFormatTag = WAVE_FORMAT_PCM; + waveformat.wf.nChannels = stereo + 1; + waveformat.wf.nSamplesPerSec = frequency; + waveformat.wf.nAvgBytesPerSec = frequency * bps; + waveformat.wf.nBlockAlign = bps; + waveformat.wBitsPerSample = bits; + + ret = waveOutOpen(&(WaveOut), WaveDevice, (LPWAVEFORMATEX)&(waveformat.wf), 0, 0, CALLBACK_NULL); + if (ret != 0) + { + char errormsg[4*MAXERRORLENGTH+1]; + waveOutGetErrorTextA(ret, errormsg, 4*MAXERRORLENGTH+1); + BX_DEBUG(("waveOutOpen: %s", errormsg)); + switch (tries) { + case 0: // maybe try a different frequency + if (frequency < 15600) + frequency = 11025; + else if (frequency < 31200) + frequency = 22050; + else + frequency = 44100; + + BX_DEBUG(("Couldn't open wave device (error %d), trying frequency %d", ret, frequency)); + break; + + case 1: // or something else + frequency = 11025; + stereo = 0; + bits = 8; + bps = 1; + + BX_DEBUG(("Couldn't open wave device again (error %d), trying 11KHz, mono, 8bit", ret)); + break; + + case 2: // nope, doesn't work + BX_ERROR(("Couldn't open wave device (error %d)!", ret)); + return BX_SOUND_OUTPUT_ERR; + } + + BX_DEBUG(("The format was: wFormatTag=%d, nChannels=%d, nSamplesPerSec=%d,", + waveformat.wf.wFormatTag, waveformat.wf.nChannels, waveformat.wf.nSamplesPerSec)); + BX_DEBUG((" nAvgBytesPerSec=%d, nBlockAlign=%d, wBitsPerSample=%d", + waveformat.wf.nAvgBytesPerSec, waveformat.wf.nBlockAlign, waveformat.wBitsPerSample)); + } + else + { + WaveOpen = 1; + needreopen = 0; + break; + } + } + } + + for (bufnum=tailplay; bufnum != head; + bufnum++, bufnum &= BX_SOUND_WINDOWS_NMASK, tailplay=bufnum) + { + BX_DEBUG(("Playing buffer %d", bufnum)); + + // prepare the wave header + WaveHeader[bufnum]->lpData = WaveData[bufnum]; + WaveHeader[bufnum]->dwBufferLength = length[bufnum]; + WaveHeader[bufnum]->dwBytesRecorded = length[bufnum]; + WaveHeader[bufnum]->dwUser = 0; + WaveHeader[bufnum]->dwFlags = 0; + WaveHeader[bufnum]->dwLoops = 1; + + ret = waveOutPrepareHeader(WaveOut, WaveHeader[bufnum], sizeof(*WaveHeader[bufnum])); + if (ret != 0) + { + BX_ERROR(("waveOutPrepareHeader = %d", ret)); + return BX_SOUND_OUTPUT_ERR; + } + + ret = waveOutWrite(WaveOut, WaveHeader[bufnum], sizeof(*WaveHeader[bufnum])); + if (ret != 0) + { + char errormsg[4*MAXERRORLENGTH+1]; + waveOutGetErrorTextA(ret, errormsg, 4*MAXERRORLENGTH+1); + BX_DEBUG(("waveOutWrite: %s", errormsg)); + } + } + + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_windows_c::startwaveplayback(int frequency, int bits, int stereo, int format) +{ + BX_DEBUG(("startwaveplayback(%d, %d, %d, %x)", frequency, bits, stereo, format)); + +#ifdef usewaveOut + // check if any of the properties have changed + if ((WaveInfo.frequency != frequency) || + (WaveInfo.bits != bits) || + (WaveInfo.stereo != stereo) || + (WaveInfo.format != format)) + { + needreopen = 1; + + // store the current settings to be used by sendwavepacket() + WaveInfo.frequency = frequency; + WaveInfo.bits = bits; + WaveInfo.stereo = stereo; + WaveInfo.format = format; + } +#endif + +#ifdef usesndPlaySnd + int bps = (bits / 8) * (stereo + 1); + LPWAVEFILEHEADER header = (LPWAVEFILEHEADER) WaveData[0]; + + memcpy(header->RIFF, "RIFF", 4); + memcpy(header->TYPE, "WAVE", 4); + memcpy(header->chnk, "fmt ", 4); + header->chnklen = 16; + header->waveformat.wf.wFormatTag = WAVE_FORMAT_PCM; + header->waveformat.wf.nChannels = stereo + 1; + header->waveformat.wf.nSamplesPerSec = frequency; + header->waveformat.wf.nAvgBytesPerSec = frequency * bps; + header->waveformat.wf.nBlockAlign = bps; + header->waveformat.wBitsPerSample = bits; + memcpy(header->chnk2, "data", 4); +#endif + + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_windows_c::sendwavepacket(int length, Bit8u data[]) +{ +#ifdef usewaveOut + int bufnum; +#endif +#ifdef usesndPlaySnd + UINT ret; +#endif + + BX_DEBUG(("sendwavepacket(%d, %p)", length, data)); + +#ifdef usewaveOut + bufnum = head; + + memcpy(WaveData[bufnum], data, length); + this->length[bufnum] = length; + + // select next buffer to write to + bufnum++; + bufnum &= BX_SOUND_WINDOWS_NMASK; + + if (((bufnum + 1) & BX_SOUND_WINDOWS_NMASK) == tailfull) + { // this should not actually happen! + BX_ERROR(("Output buffer overflow! Not played. Iswaveready was %d", iswaveready)); + iswaveready = 0; // stop the output for a while + return BX_SOUND_OUTPUT_ERR; + } + + head = bufnum; + + // check if more buffers are available, otherwise stall the emulator + if (((bufnum + 2) & BX_SOUND_WINDOWS_NMASK) == tailfull) + { + BX_DEBUG(("Buffer status: Head %d, TailFull %d, TailPlay %d. Stall.", + head, tailfull, tailplay)); + iswaveready = 0; + } + + playnextbuffer(); +#endif + +#ifdef usesndPlaySnd + LPWAVEFILEHEADER header = (LPWAVEFILEHEADER) WaveData[0]; + + header->length = length + 36; + header->chnk2len = length; + + memcpy(&(header->data), data, length); + + ret = sndPlaySoundA((LPCSTR) header, SND_SYNC | SND_MEMORY); + if (ret != 0) + { + BX_DEBUG(("sndPlaySoundA: %d", ret)); + } +#endif + + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_windows_c::stopwaveplayback() +{ + BX_DEBUG(("stopwaveplayback()")); + +#ifdef usewaveOut + // this is handled by checkwaveready() when closing +#endif + +#ifdef usesndPlaySnd + sndPlaySoundA(NULL, SND_ASYNC | SND_MEMORY); + + WaveOpen = 0; +#endif + + return BX_SOUND_OUTPUT_OK; +} + +int bx_sound_windows_c::closewaveoutput() +{ + BX_DEBUG(("closewaveoutput")); + +#ifdef usewaveOut + if (WaveOpen == 1) + { + waveOutReset(WaveOut); + + // let checkwaveready() clean up the buffers + checkwaveready(); + + waveOutClose(WaveOut); + + head = 0; + tailfull = 0; + tailplay = 0; + needreopen = 0; + } +#endif + + return BX_SOUND_OUTPUT_OK; +} + +void bx_sound_windows_c::checkmidiready() +{ + UINT ret; + + if ((MidiHeader->dwFlags & MHDR_DONE) != 0) + { + BX_DEBUG(("SYSEX message done, midi ready again")); + ret = midiOutUnprepareHeader(MidiOut, MidiHeader, sizeof(*MidiHeader)); + ismidiready = 1; + } +} +void bx_sound_windows_c::checkwaveready() +{ + int bufnum; + UINT ret; + + // clean up all finished buffers and mark them as available + for (bufnum=tailfull; (bufnum != tailplay) && + ((WaveHeader[bufnum]->dwFlags & WHDR_DONE) != 0); + bufnum++, bufnum &= BX_SOUND_WINDOWS_NMASK) + { + BX_DEBUG(("Buffer %d done.", bufnum)); + ret = waveOutUnprepareHeader(WaveOut, WaveHeader[bufnum], sizeof(*WaveHeader[bufnum])); + } + + tailfull = bufnum; + + // enable gathering data if a buffer is available + if (((head + 2) & BX_SOUND_WINDOWS_NMASK) != tailfull) + { + BX_DEBUG(("Buffer status: Head %d, TailFull %d, TailPlay %d. Ready.", + head, tailfull, tailplay)); + iswaveready = 1; + } +} + +#endif // defined(WIN32) diff --git a/bochs/iodev/soundwin.h b/bochs/iodev/soundwin.h new file mode 100644 index 00000000..4e79b145 --- /dev/null +++ b/bochs/iodev/soundwin.h @@ -0,0 +1,222 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// This file (SOUNDWIN.H) written and donated by Josef Drexler + +#if defined(WIN32) + +#include + +// uncomment one of the following two #defines +//#define usesndPlaySnd +#define usewaveOut + +#define BX_SOUND_WINDOWS_MAXSYSEXLEN 256 // maximum supported length of a sysex message + +#define BX_SOUND_WINDOWS_NBUF 64 // number of buffers for the output, must be power of 2 and >= 4 +#define BX_SOUND_WINDOWS_NMASK (BX_SOUND_WINDOWS_NBUF - 1) + +#ifndef WAVEMAPPER +#define WAVEMAPPER -1 +#endif + +// Definitions for WINMM.DLL, if not defined already +#ifndef MMSYSERR_NOERROR + +#pragma pack(1) + +typedef UINT HMIDIOUT; +typedef HMIDIOUT *LPHMIDIOUT; +typedef struct midihdr_tag { + LPSTR lpData; + DWORD dwBufferLength; + DWORD dwBytesRecorded; + DWORD dwUser; + DWORD dwFlags; + struct midihdr_tag *lpNext; + DWORD reserved; +} MIDIHDR, *LPMIDIHDR; + +typedef UINT HWAVEOUT; +typedef HWAVEOUT *LPHWAVEOUT; + +typedef struct wavehdr_tag { + LPSTR lpData; + DWORD dwBufferLength; + DWORD dwBytesRecorded; + DWORD dwUser; + DWORD dwFlags; + DWORD dwLoops; + struct wavehdr_tag *lpNext; + DWORD reserved; +} WAVEHDR, *LPWAVEHDR; + +#define WHDR_DONE 0x00000001 +#define WHDR_PREPARED 0x00000002 +#define WHDR_BEGINLOOP 0x00000004 +#define WHDR_ENDLOOP 0x00000008 +#define WHDR_INQUEUE 0x00000010 + + +typedef struct waveformat_tag { + WORD wFormatTag; + WORD nChannels; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; +} WAVEFORMAT, *LPWAVEFORMAT; + +#define WAVE_FORMAT_PCM 1 + +typedef struct pcmwaveformat_tag { + WAVEFORMAT wf; + WORD wBitsPerSample; +} PCMWAVEFORMAT, *LPPCMWAVEFORMAT; + +#define MIDIMAPPER -1 + +#define CALLBACK_NULL 0x00000000 +#define CALLBACK_WINDOW 0x00010000 +#define CALLBACK_TASK 0x00020000 +#define CALLBACK_FUNCTION 0x00030000 + +#define MMSYSERR_NOERROR 0 +#define MMSYSERR_ERROR 1 +#define MMSYSERR_BADDEVICEID 2 +#define MMSYSERR_NOTENABLED 3 +#define MMSYSERR_ALLOCATED 4 +#define MMSYSERR_INVALHANDLE 5 +#define MMSYSERR_NODRIVER 6 +#define MMSYSERR_NOMEM 7 +#define MMSYSERR_NOTSUPPORTED 8 +#define MMSYSERR_NOMAP 7 + +#define MIDIERR_UNPREPARED 64 +#define MIDIERR_STILLPLAYING 65 +#define MIDIERR_NOTREADY 66 +#define MIDIERR_NODEVICE 67 + +#define WAVERR_BADFORMAT 32 +#define WAVERR_STILLPLAYING 33 +#define WAVERR_UNPREPARED 34 +#define WAVERR_SYNC 35 + +#define MAXERRORLENGTH 128 + +extern "C" { +UINT STDCALL midiOutOpen(LPHMIDIOUT, UINT, DWORD, DWORD, DWORD); +UINT STDCALL midiOutShortMsg(HMIDIOUT, DWORD); +UINT STDCALL midiOutLongMsg(HMIDIOUT, LPMIDIHDR, UINT); +UINT STDCALL midiOutPrepareHeader(HMIDIOUT, LPMIDIHDR, UINT); +UINT STDCALL midiOutUnprepareHeader(HMIDIOUT, LPMIDIHDR, UINT); +UINT STDCALL midiOutReset(HMIDIOUT); +UINT STDCALL midiOutClose(HMIDIOUT); + +UINT STDCALL waveOutOpen(LPHWAVEOUT, UINT, LPWAVEFORMAT, DWORD, DWORD, DWORD); +UINT STDCALL waveOutWrite(HWAVEOUT, LPWAVEHDR, UINT); +UINT STDCALL waveOutPrepareHeader(HWAVEOUT, LPWAVEHDR, UINT); +UINT STDCALL waveOutUnprepareHeader(HWAVEOUT, LPWAVEHDR, UINT); +UINT STDCALL waveOutReset(HWAVEOUT); +UINT STDCALL waveOutClose(HWAVEOUT); + +UINT STDCALL waveOutGetErrorTextA(UINT, LPSTR, UINT); + +BOOL STDCALL sndPlaySoundA(LPCSTR, UINT); +} +#pragma pack(0) + +#endif // MMSYSERR_NOERROR defined + +#ifndef WAVEFILEHEADER + +#pragma pack(push, 1) + +typedef struct { + char RIFF[4]; + Bit32u length; + char TYPE[4]; + char chnk[4]; + Bit32u chnklen; + PCMWAVEFORMAT waveformat; + char chnk2[4]; + Bit32u chnk2len; + char data[1]; +} WAVEFILEHEADER, *LPWAVEFILEHEADER; +#pragma pack(pop) + +#endif + +class bx_sound_windows_c : public bx_sound_output_c { +public: + bx_sound_windows_c(logfunctions *dev); + virtual ~bx_sound_windows_c(); + + virtual int waveready(); + virtual int midiready(); + + virtual int openmidioutput(const char *mididev); + virtual int sendmidicommand(int delta, int command, int length, Bit8u data[]); + virtual int closemidioutput(); + + virtual int openwaveoutput(const char *wavedev); + virtual int startwaveplayback(int frequency, int bits, int stereo, int format); + virtual int sendwavepacket(int length, Bit8u data[]); + virtual int stopwaveplayback(); + virtual int closewaveoutput(); + +private: + struct bx_sb16_waveinfo_struct { + int frequency; + int bits; + int stereo; + int format; + }; + + HMIDIOUT MidiOut; // Midi output device + int MidiOpen; // is it open? + HWAVEOUT WaveOut; // Wave output device + int WaveOpen; // is it open? + + UINT WaveDevice; // Wave device ID, for waveOutOpen + + // some data for the wave buffers + HANDLE DataHandle; // returned by GlobalAlloc() + Bit8u *DataPointer; // returned by GlobalLock() + + LPWAVEHDR WaveHeader[BX_SOUND_WINDOWS_NBUF]; + LPSTR WaveData[BX_SOUND_WINDOWS_NBUF]; + int length[BX_SOUND_WINDOWS_NBUF]; // length of the data in the buffer + int needreopen; // if the format has changed + int head,tailfull,tailplay; // These are for three states of the buffers: empty, full, played + bx_sb16_waveinfo_struct WaveInfo; // format for the next buffer to be played + int iswaveready; + + // and the midi buffer for the SYSEX messages + LPMIDIHDR MidiHeader; + LPSTR MidiData; + int ismidiready; + + int playnextbuffer(); + void checkmidiready(); + void checkwaveready(); +}; + +#endif // defined(WIN32) diff --git a/bochs/iodev/speaker.cc b/bochs/iodev/speaker.cc new file mode 100644 index 00000000..b2a3670b --- /dev/null +++ b/bochs/iodev/speaker.cc @@ -0,0 +1,152 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright 2003 by David N. Welton . +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#define BX_PLUGGABLE + +#include "iodev.h" +#include "speaker.h" + +#ifdef __linux__ +#include +#include +#include +#include +#include +#include +#include +#include +#endif + +#define LOG_THIS theSpeaker-> + +bx_speaker_c *theSpeaker= NULL; + +int libspeaker_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theSpeaker = new bx_speaker_c(); + bx_devices.pluginSpeaker = theSpeaker; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theSpeaker, BX_PLUGIN_SPEAKER); + return(0); // Success +} + +void libspeaker_LTX_plugin_fini(void) +{ + delete theSpeaker; +} + +bx_speaker_c::bx_speaker_c() +{ + put("SPEAK"); + + beep_frequency = 0.0; // Off + +#ifdef __linux__ + consolefd = open("/dev/console", O_WRONLY); +#endif +} + +bx_speaker_c::~bx_speaker_c() +{ +#ifdef __linux__ + if (consolefd >= 0) { + ioctl(consolefd, KIOCSOUND, 0); + close(consolefd); + } +#endif + BX_DEBUG(("Exit")); +} + +void bx_speaker_c::init(void) +{ +#ifdef __linux__ + if (consolefd != -1) { + BX_INFO(("Open /dev/console successfully")); + } else { + BX_INFO(("Failed to open /dev/console: %s", strerror(errno))); + BX_INFO(("Deactivating beep on console")); + } +#endif + + this->beep_off(); +} + +void bx_speaker_c::reset(unsigned type) +{ + beep_off(); +} + +void bx_speaker_c::beep_on(float frequency) +{ + beep_frequency = frequency; + +#ifdef __linux__ + if (consolefd != -1) { + this->info("pc speaker on with frequency %f", frequency); + ioctl(consolefd, KIOCSOUND, (int)(clock_tick_rate/frequency)); + } +#elif defined(WIN32) + usec_start = bx_pc_system.time_usec(); +#endif + + // give the gui a chance to signal beep off + bx_gui->beep_on(frequency); +} + +#if defined(WIN32) + +static struct { + DWORD frequency; + DWORD msec; +} beep_info; + +DWORD WINAPI BeepThread(LPVOID) +{ + static BOOL threadActive = FALSE; + + while (threadActive) Sleep(10); + threadActive = TRUE; + Beep(beep_info.frequency, beep_info.msec); + threadActive = FALSE; + return 0; +} + +#endif + +void bx_speaker_c::beep_off() +{ + if (beep_frequency != 0.0) { +#ifdef __linux__ + if (consolefd != -1) { + ioctl(consolefd, KIOCSOUND, 0); + } +#elif defined(WIN32) + // FIXME: sound should start at beep_on() and end here + DWORD threadID; + beep_info.msec = (DWORD)((bx_pc_system.time_usec() - usec_start) / 1000); + beep_info.frequency = (DWORD)beep_frequency; + CreateThread(NULL, 0, BeepThread, NULL, 0, &threadID); +#endif + + // give the gui a chance to signal beep off + bx_gui->beep_off(); + + beep_frequency = 0.0; + } +} diff --git a/bochs/iodev/speaker.h b/bochs/iodev/speaker.h new file mode 100644 index 00000000..f03a4c1d --- /dev/null +++ b/bochs/iodev/speaker.h @@ -0,0 +1,52 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright 2003 by David N. Welton . +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + /* + * This file defines a class to deal with the speaker. + * This class also tries to play beeps on the console + * (linux only) and also forwards beeps to the gui + * so we have the possiblity to signal the beep + */ + +#ifndef BX_PC_SPEAKER_H +#define BX_PC_SPEAKER_H + +class bx_speaker_c : public bx_speaker_stub_c { +public: + bx_speaker_c(); + virtual ~bx_speaker_c(); + + virtual void init(void); + virtual void reset(unsigned int); + + void beep_on(float frequency); + void beep_off(); +private: + float beep_frequency; // 0 : beep is off +#ifdef __linux__ + /* Do we have access? If not, just skip everything else. */ + signed int consolefd; + const static unsigned int clock_tick_rate = 1193180; +#elif defined(WIN32) + Bit64u usec_start; +#endif +}; + +#endif diff --git a/bochs/iodev/svga_cirrus.cc b/bochs/iodev/svga_cirrus.cc new file mode 100644 index 00000000..e7452508 --- /dev/null +++ b/bochs/iodev/svga_cirrus.cc @@ -0,0 +1,3388 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2004 Makoto Suzuki (suzu) +// Volker Ruppert (vruppert) +// Robin Kay (komadori) +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// limited PCI/ISA CLGD5446 support for Bochs +// +// there are still many unimplemented features: +// +// - destination write mask support is not complete (bit 5..7) +// - 1bpp/4bpp modes +// - ??? +// +// some codes are copied from vga.cc and modified. +// some codes are ported from the cirrus emulation in qemu +// (http://savannah.nongnu.org/projects/qemu). + +#define BX_PLUGGABLE + +#include "iodev.h" +#include "vga.h" +#include "svga_cirrus.h" + +#if BX_SUPPORT_CLGD54XX + +// Only reference the array if the tile numbers are within the bounds +// of the array. If out of bounds, do nothing. +#define SET_TILE_UPDATED(xtile,ytile,value) \ + do { \ + if (((xtile) < BX_NUM_X_TILES) && ((ytile) < BX_NUM_Y_TILES)) \ + BX_CIRRUS_THIS s.vga_tile_updated[(xtile)][(ytile)] = value; \ + } while (0) +// Only reference the array if the tile numbers are within the bounds +// of the array. If out of bounds, return 1. +#define GET_TILE_UPDATED(xtile,ytile) \ + ((((xtile) < BX_NUM_X_TILES) && ((ytile) < BX_NUM_Y_TILES))? \ + BX_CIRRUS_THIS s.vga_tile_updated[(xtile)][(ytile)] \ + : 1) + +#define LOG_THIS BX_CIRRUS_THIS + +#if BX_USE_CIRRUS_SMF +#define VGA_READ(addr,len) bx_vga_c::read_handler(theSvga,addr,len) +#define VGA_WRITE(addr,val,len) bx_vga_c::write_handler(theSvga,addr,val,len) +#define SVGA_READ(addr,len) svga_read_handler(theSvga,addr,len) +#define SVGA_WRITE(addr,val,len) svga_write_handler(theSvga,addr,val,len) +#else +#define VGA_READ(addr,len) bx_vga_c::read(addr,len) +#define VGA_WRITE(addr,val,len) bx_vga_c::write(addr,val,len) +#define SVGA_READ(addr,len) svga_read(addr,len) +#define SVGA_WRITE(addr,val,len) svga_write(addr,val,len) +#endif // BX_USE_CIRRUS_SMF + +#define ID_CLGD5428 (0x26<<2) +#define ID_CLGD5430 (0x28<<2) +#define ID_CLGD5434 (0x2A<<2) +#define ID_CLGD5446 (0x2E<<2) + +// sequencer 0x07 +#define CIRRUS_SR7_BPP_VGA 0x00 +#define CIRRUS_SR7_BPP_SVGA 0x01 +#define CIRRUS_SR7_BPP_MASK 0x0e +#define CIRRUS_SR7_BPP_8 0x00 +#define CIRRUS_SR7_BPP_16_DOUBLEVCLK 0x02 +#define CIRRUS_SR7_BPP_24 0x04 +#define CIRRUS_SR7_BPP_16 0x06 +#define CIRRUS_SR7_BPP_32 0x08 +#define CIRRUS_SR7_ISAADDR_MASK 0xe0 + +// sequencer 0x0f +#define CIRRUS_MEMSIZE_512k 0x08 +#define CIRRUS_MEMSIZE_1M 0x10 +#define CIRRUS_MEMSIZE_2M 0x18 +#define CIRRUS_MEMFLAGS_BANKSWITCH 0x80 // bank switching is enabled. + +// sequencer 0x12 +#define CIRRUS_CURSOR_SHOW 0x01 +#define CIRRUS_CURSOR_HIDDENPEL 0x02 +#define CIRRUS_CURSOR_LARGE 0x04 // 64x64 if set, 32x32 if clear + +// sequencer 0x17 +#define CIRRUS_BUSTYPE_VLBFAST 0x10 +#define CIRRUS_BUSTYPE_PCI 0x20 +#define CIRRUS_BUSTYPE_VLBSLOW 0x30 +#define CIRRUS_BUSTYPE_ISA 0x38 +#define CIRRUS_MMIO_ENABLE 0x04 +#define CIRRUS_MMIO_USE_PCIADDR 0x40 // 0xb8000 if cleared. +#define CIRRUS_MEMSIZEEXT_DOUBLE 0x80 + +// control 0x0b +#define CIRRUS_BANKING_DUAL 0x01 +#define CIRRUS_BANKING_GRANULARITY_16K 0x20 // set:16k, clear:4k + +// control 0x30 +#define CIRRUS_BLTMODE_BACKWARDS 0x01 +#define CIRRUS_BLTMODE_MEMSYSDEST 0x02 +#define CIRRUS_BLTMODE_MEMSYSSRC 0x04 +#define CIRRUS_BLTMODE_TRANSPARENTCOMP 0x08 +#define CIRRUS_BLTMODE_PATTERNCOPY 0x40 +#define CIRRUS_BLTMODE_COLOREXPAND 0x80 +#define CIRRUS_BLTMODE_PIXELWIDTHMASK 0x30 +#define CIRRUS_BLTMODE_PIXELWIDTH8 0x00 +#define CIRRUS_BLTMODE_PIXELWIDTH16 0x10 +#define CIRRUS_BLTMODE_PIXELWIDTH24 0x20 +#define CIRRUS_BLTMODE_PIXELWIDTH32 0x30 + +// control 0x31 +#define CIRRUS_BLT_BUSY 0x01 +#define CIRRUS_BLT_START 0x02 +#define CIRRUS_BLT_RESET 0x04 +#define CIRRUS_BLT_FIFOUSED 0x10 +#define CIRRUS_BLT_AUTOSTART 0x80 + +// control 0x32 +#define CIRRUS_ROP_0 0x00 +#define CIRRUS_ROP_SRC_AND_DST 0x05 +#define CIRRUS_ROP_NOP 0x06 +#define CIRRUS_ROP_SRC_AND_NOTDST 0x09 +#define CIRRUS_ROP_NOTDST 0x0b +#define CIRRUS_ROP_SRC 0x0d +#define CIRRUS_ROP_1 0x0e +#define CIRRUS_ROP_NOTSRC_AND_DST 0x50 +#define CIRRUS_ROP_SRC_XOR_DST 0x59 +#define CIRRUS_ROP_SRC_OR_DST 0x6d +#define CIRRUS_ROP_NOTSRC_OR_NOTDST 0x90 +#define CIRRUS_ROP_SRC_NOTXOR_DST 0x95 +#define CIRRUS_ROP_SRC_OR_NOTDST 0xad +#define CIRRUS_ROP_NOTSRC 0xd0 +#define CIRRUS_ROP_NOTSRC_OR_DST 0xd6 +#define CIRRUS_ROP_NOTSRC_AND_NOTDST 0xda + +// control 0x33 +#define CIRRUS_BLTMODEEXT_SOLIDFILL 0x04 +#define CIRRUS_BLTMODEEXT_COLOREXPINV 0x02 +#define CIRRUS_BLTMODEEXT_DWORDGRANULARITY 0x01 + +#define CLGD543x_MMIO_BLTBGCOLOR 0x00 // dword +#define CLGD543x_MMIO_BLTFGCOLOR 0x04 // dword +#define CLGD543x_MMIO_BLTWIDTH 0x08 // word +#define CLGD543x_MMIO_BLTHEIGHT 0x0a // word +#define CLGD543x_MMIO_BLTDESTPITCH 0x0c // word +#define CLGD543x_MMIO_BLTSRCPITCH 0x0e // word +#define CLGD543x_MMIO_BLTDESTADDR 0x10 // dword +#define CLGD543x_MMIO_BLTSRCADDR 0x14 // dword +#define CLGD543x_MMIO_BLTWRITEMASK 0x17 // byte +#define CLGD543x_MMIO_BLTMODE 0x18 // byte +#define CLGD543x_MMIO_BLTROP 0x1a // byte +#define CLGD543x_MMIO_BLTMODEEXT 0x1b // byte +#define CLGD543x_MMIO_BLTTRANSPARENTCOLOR 0x1c // word? +#define CLGD543x_MMIO_BLTTRANSPARENTCOLORMASK 0x20 // word? +#define CLGD543x_MMIO_BLTSTATUS 0x40 // byte + +// PCI 0x00: vendor, 0x02: device +#define PCI_VENDOR_CIRRUS 0x1013 +#define PCI_DEVICE_CLGD5430 0x00a0 // CLGD5430 or CLGD5440 +#define PCI_DEVICE_CLGD5434 0x00a8 +#define PCI_DEVICE_CLGD5436 0x00ac +#define PCI_DEVICE_CLGD5446 0x00b8 +#define PCI_DEVICE_CLGD5462 0x00d0 +#define PCI_DEVICE_CLGD5465 0x00d6 +// PCI 0x04: command(word), 0x06(word): status +#define PCI_COMMAND_IOACCESS 0x0001 +#define PCI_COMMAND_MEMACCESS 0x0002 +#define PCI_COMMAND_BUSMASTER 0x0004 +#define PCI_COMMAND_SPECIALCYCLE 0x0008 +#define PCI_COMMAND_MEMWRITEINVALID 0x0010 +#define PCI_COMMAND_PALETTESNOOPING 0x0020 +#define PCI_COMMAND_PARITYDETECTION 0x0040 +#define PCI_COMMAND_ADDRESSDATASTEPPING 0x0080 +#define PCI_COMMAND_SERR 0x0100 +#define PCI_COMMAND_BACKTOBACKTRANS 0x0200 +// PCI 0x08, 0xff000000 (0x09-0x0b:class,0x08:rev) +#define PCI_CLASS_BASE_DISPLAY 0x03 +// PCI 0x08, 0x00ff0000 +#define PCI_CLASS_SUB_VGA 0x00 +// PCI 0x0c, 0x00ff0000 (0x0c:cacheline,0x0d:latency,0x0e:headertype,0x0f:Built-in self test) +#define PCI_CLASS_HEADERTYPE_00h 0x00 +// 0x10-0x3f (headertype 00h) +// PCI 0x10,0x14,0x18,0x1c,0x20,0x24: base address mapping registers +// 0x10: MEMBASE, 0x14: IOBASE(hard-coded in XFree86 3.x) +#define PCI_MAP_MEM 0x0 +#define PCI_MAP_IO 0x1 +#define PCI_MAP_MEM_ADDR_MASK (~0xf) +#define PCI_MAP_IO_ADDR_MASK (~0x3) +#define PCI_MAP_MEMFLAGS_32BIT 0x0 +#define PCI_MAP_MEMFLAGS_32BIT_1M 0x1 +#define PCI_MAP_MEMFLAGS_64BIT 0x4 +#define PCI_MAP_MEMFLAGS_CACHEABLE 0x8 +// PCI 0x28: cardbus CIS pointer +// PCI 0x2c: subsystem vendor id, 0x2e: subsystem id +// PCI 0x30: expansion ROM base address +// PCI 0x34: 0xffffff00=reserved, 0x000000ff=capabilities pointer +// PCI 0x38: reserved +// PCI 0x3c: 0x3c=int-line, 0x3d=int-pin, 0x3e=min-gnt, 0x3f=maax-lat +// PCI 0x40-0xff: device dependent fields + +// default PnP memory and memory-mapped I/O sizes +#define CIRRUS_PNPMEM_SIZE CIRRUS_VIDEO_MEMORY_BYTES +#define CIRRUS_PNPMMIO_SIZE 0x1000 + +#define BX_MAX(a,b) ((a) > (b) ? (a) : (b)) +#define BX_MIN(a,b) ((a) < (b) ? (a) : (b)) + +static bx_svga_cirrus_c *theSvga = NULL; + +int libvga_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theSvga = new bx_svga_cirrus_c(); + bx_vga_set_smf_pointer(theSvga); + bx_devices.pluginVgaDevice = theSvga; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theSvga, BX_PLUGIN_VGA); + return(0); // Success +} + +void libvga_LTX_plugin_fini(void) +{ + delete theSvga; +} + +bx_svga_cirrus_c::bx_svga_cirrus_c() : bx_vga_c () +{ + put("CLVGA"); +} + +bx_svga_cirrus_c::~bx_svga_cirrus_c() +{ + BX_DEBUG(("Exit")); +} + +void bx_svga_cirrus_c::init(void) +{ + // initialize VGA stuffs. + BX_CIRRUS_THIS bx_vga_c::init(); + if (!strcmp(SIM->get_param_string(BXPN_VGA_EXTENSION)->getptr(), "cirrus")) { + // initialize SVGA stuffs. + BX_CIRRUS_THIS bx_vga_c::init_iohandlers( + svga_read_handler, svga_write_handler); + BX_CIRRUS_THIS bx_vga_c::init_systemtimer( + svga_timer_handler, svga_param_handler); +#if BX_SUPPORT_PCI + BX_CIRRUS_THIS pci_enabled = DEV_is_pci_device("cirrus"); +#endif + BX_CIRRUS_THIS svga_init_members(); +#if BX_SUPPORT_PCI + if (BX_CIRRUS_THIS pci_enabled) + { + BX_CIRRUS_THIS svga_init_pcihandlers(); + BX_INFO(("CL-GD5446 PCI initialized")); + } + else +#endif + { + BX_INFO(("CL-GD5430 ISA initialized")); + } + BX_CIRRUS_THIS extension_init = 1; + } else { + BX_CIRRUS_THIS sequencer.reg[0x07] = 0x00; // Cirrus extension disabled + // initialize VGA read/write handlers and timer + BX_CIRRUS_THIS bx_vga_c::init_iohandlers( + bx_vga_c::read_handler, bx_vga_c::write_handler); + BX_CIRRUS_THIS bx_vga_c::init_systemtimer( + bx_vga_c::timer_handler, bx_vga_c::vga_param_handler); + } +} + +void bx_svga_cirrus_c::svga_init_members() +{ + unsigned i; + + // clear all registers. + BX_CIRRUS_THIS sequencer.index = CIRRUS_SEQENCER_MAX + 1; + for (i = 0; i <= CIRRUS_SEQENCER_MAX; i++) + BX_CIRRUS_THIS sequencer.reg[i] = 0x00; + BX_CIRRUS_THIS control.index = CIRRUS_CONTROL_MAX + 1; + for (i = 0; i <= CIRRUS_CONTROL_MAX; i++) + BX_CIRRUS_THIS control.reg[i] = 0x00; + BX_CIRRUS_THIS control.shadow_reg0 = 0x00; + BX_CIRRUS_THIS control.shadow_reg1 = 0x00; + BX_CIRRUS_THIS crtc.index = CIRRUS_CRTC_MAX + 1; + for (i = 0; i <= CIRRUS_CRTC_MAX; i++) + BX_CIRRUS_THIS crtc.reg[i] = 0x00; + BX_CIRRUS_THIS hidden_dac.lockindex = 0; + BX_CIRRUS_THIS hidden_dac.data = 0x00; + + BX_CIRRUS_THIS svga_unlock_special = false; + BX_CIRRUS_THIS svga_needs_update_tile = true; + BX_CIRRUS_THIS svga_needs_update_dispentire = true; + BX_CIRRUS_THIS svga_needs_update_mode = false; + + BX_CIRRUS_THIS svga_xres = 640; + BX_CIRRUS_THIS svga_yres = 480; + BX_CIRRUS_THIS svga_bpp = 8; + BX_CIRRUS_THIS svga_pitch = 640; + BX_CIRRUS_THIS bank_base[0] = 0; + BX_CIRRUS_THIS bank_base[1] = 0; + BX_CIRRUS_THIS bank_limit[0] = 0; + BX_CIRRUS_THIS bank_limit[1] = 0; + + svga_reset_bitblt(); + + BX_CIRRUS_THIS hw_cursor.x = 0; + BX_CIRRUS_THIS hw_cursor.y = 0; + BX_CIRRUS_THIS hw_cursor.size = 0; + + // memory allocation. + if (BX_CIRRUS_THIS s.memory == NULL) + BX_CIRRUS_THIS s.memory = new Bit8u[CIRRUS_VIDEO_MEMORY_BYTES]; + + // set some registers. + + BX_CIRRUS_THIS sequencer.reg[0x06] = 0x0f; + BX_CIRRUS_THIS sequencer.reg[0x07] = 0x00; // 0xf0:linearbase(0x00 if disabled) +#if BX_SUPPORT_PCI + if (BX_CIRRUS_THIS pci_enabled) { + BX_CIRRUS_THIS crtc.reg[0x27] = ID_CLGD5446; + BX_CIRRUS_THIS sequencer.reg[0x1F] = 0x2d; // MemClock + BX_CIRRUS_THIS control.reg[0x18] = 0x0f; + BX_CIRRUS_THIS sequencer.reg[0x0F] = 0x98; + BX_CIRRUS_THIS sequencer.reg[0x17] = CIRRUS_BUSTYPE_PCI; + BX_CIRRUS_THIS sequencer.reg[0x15] = 0x04; // memory size 4MB + BX_CIRRUS_THIS s.memsize = (4 << 20); + } else +#endif + { + BX_CIRRUS_THIS crtc.reg[0x27] = ID_CLGD5430; + BX_CIRRUS_THIS sequencer.reg[0x1F] = 0x22; // MemClock + BX_CIRRUS_THIS sequencer.reg[0x0F] = CIRRUS_MEMSIZE_2M; + BX_CIRRUS_THIS sequencer.reg[0x17] = CIRRUS_BUSTYPE_ISA; + BX_CIRRUS_THIS sequencer.reg[0x15] = 0x03; // memory size 2MB + BX_CIRRUS_THIS s.memsize = (2 << 20); + } + + BX_CIRRUS_THIS hidden_dac.lockindex = 5; + BX_CIRRUS_THIS hidden_dac.data = 0; + + memset(BX_CIRRUS_THIS s.memory, 0xff, CIRRUS_VIDEO_MEMORY_BYTES); + BX_CIRRUS_THIS disp_ptr = BX_CIRRUS_THIS s.memory; +} + +void bx_svga_cirrus_c::reset(unsigned type) +{ + // reset VGA stuffs. + BX_CIRRUS_THIS bx_vga_c::reset(type); + + if (!strcmp(SIM->get_param_string(BXPN_VGA_EXTENSION)->getptr(), "cirrus")) { + // reset SVGA stuffs. + BX_CIRRUS_THIS svga_init_members(); + } +} + +void bx_svga_cirrus_c::register_state(void) +{ + unsigned i; + char name[6]; + bx_list_c *reg; + + if (!strcmp(SIM->get_param_string(BXPN_VGA_EXTENSION)->getptr(), "cirrus")) { + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "svga_cirrus", "Cirrus SVGA State", 18); + bx_list_c *crtc = new bx_list_c(list, "crtc", 2); + new bx_shadow_num_c(crtc, "index", &BX_CIRRUS_THIS crtc.index, BASE_HEX); + reg = new bx_list_c(crtc, "reg", CIRRUS_CRTC_MAX+1); + for (i=0; i<=CIRRUS_CRTC_MAX; i++) { + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(reg, name, &BX_CIRRUS_THIS crtc.reg[i], BASE_HEX); + } + bx_list_c *sequ = new bx_list_c(list, "sequencer", 2); + new bx_shadow_num_c(sequ, "index", &BX_CIRRUS_THIS sequencer.index, BASE_HEX); + reg = new bx_list_c(sequ, "reg", CIRRUS_SEQENCER_MAX+1); + for (i=0; i<=CIRRUS_SEQENCER_MAX; i++) { + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(reg, name, &BX_CIRRUS_THIS sequencer.reg[i], BASE_HEX); + } + bx_list_c *ctrl = new bx_list_c(list, "control", 4); + new bx_shadow_num_c(ctrl, "index", &BX_CIRRUS_THIS control.index, BASE_HEX); + reg = new bx_list_c(ctrl, "reg", CIRRUS_CONTROL_MAX+1); + for (i=0; i<=CIRRUS_CONTROL_MAX; i++) { + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(reg, name, &BX_CIRRUS_THIS control.reg[i], BASE_HEX); + } + new bx_shadow_num_c(ctrl, "shadow_reg0", &BX_CIRRUS_THIS control.shadow_reg0, BASE_HEX); + new bx_shadow_num_c(ctrl, "shadow_reg1", &BX_CIRRUS_THIS control.shadow_reg1, BASE_HEX); + bx_list_c *hdac = new bx_list_c(list, "hidden_dac", 3); + new bx_shadow_num_c(hdac, "lockindex", &BX_CIRRUS_THIS hidden_dac.lockindex, BASE_HEX); + new bx_shadow_num_c(hdac, "data", &BX_CIRRUS_THIS hidden_dac.data, BASE_HEX); + reg = new bx_list_c(hdac, "palette", 48); + for (i=0; i<48; i++) { + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(reg, name, &BX_CIRRUS_THIS hidden_dac.palette[i], BASE_HEX); + } + new bx_shadow_bool_c(list, "svga_unlock_special", &BX_CIRRUS_THIS svga_unlock_special); + new bx_shadow_num_c(list, "svga_xres", &BX_CIRRUS_THIS svga_xres); + new bx_shadow_num_c(list, "svga_yres", &BX_CIRRUS_THIS svga_yres); + new bx_shadow_num_c(list, "svga_pitch", &BX_CIRRUS_THIS svga_pitch); + new bx_shadow_num_c(list, "svga_bpp", &BX_CIRRUS_THIS svga_bpp); + new bx_shadow_num_c(list, "svga_dispbpp", &BX_CIRRUS_THIS svga_dispbpp); + new bx_shadow_num_c(list, "bank_base0", &BX_CIRRUS_THIS bank_base[0], BASE_HEX); + new bx_shadow_num_c(list, "bank_base1", &BX_CIRRUS_THIS bank_base[1], BASE_HEX); + new bx_shadow_num_c(list, "bank_limit0", &BX_CIRRUS_THIS bank_limit[0], BASE_HEX); + new bx_shadow_num_c(list, "bank_limit1", &BX_CIRRUS_THIS bank_limit[1], BASE_HEX); + bx_list_c *cursor = new bx_list_c(list, "hw_cursor", 3); + new bx_shadow_num_c(cursor, "x", &BX_CIRRUS_THIS hw_cursor.x, BASE_HEX); + new bx_shadow_num_c(cursor, "y", &BX_CIRRUS_THIS hw_cursor.y, BASE_HEX); + new bx_shadow_num_c(cursor, "size", &BX_CIRRUS_THIS hw_cursor.size, BASE_HEX); +#if BX_SUPPORT_PCI + if (BX_CIRRUS_THIS pci_enabled) { + register_pci_state(list, BX_CIRRUS_THIS pci_conf); + } +#endif + } + bx_vga_c::register_state(); +} + +void bx_svga_cirrus_c::after_restore_state(void) +{ + if ((BX_CIRRUS_THIS sequencer.reg[0x07] & 0x01) == CIRRUS_SR7_BPP_VGA) { + BX_CIRRUS_THIS bx_vga_c::after_restore_state(); + } else { +#if BX_SUPPORT_PCI + if (BX_CIRRUS_THIS pci_enabled) { + if (DEV_pci_set_base_mem(BX_CIRRUS_THIS_PTR, cirrus_mem_read_handler, + cirrus_mem_write_handler, + &BX_CIRRUS_THIS pci_memaddr, + &BX_CIRRUS_THIS pci_conf[0x10], + 0x2000000)) { + BX_INFO(("new pci_memaddr: 0x%04x", BX_CIRRUS_THIS pci_memaddr)); + } + if (DEV_pci_set_base_mem(BX_CIRRUS_THIS_PTR, cirrus_mem_read_handler, + cirrus_mem_write_handler, + &BX_CIRRUS_THIS pci_mmioaddr, + &BX_CIRRUS_THIS pci_conf[0x14], + CIRRUS_PNPMMIO_SIZE)) { + BX_INFO(("new pci_mmioaddr = 0x%08x", BX_CIRRUS_THIS pci_mmioaddr)); + } + } +#endif + for (unsigned i=0; i<256; i++) { + bx_gui->palette_change(i, BX_CIRRUS_THIS s.pel.data[i].red<<2, + BX_CIRRUS_THIS s.pel.data[i].green<<2, + BX_CIRRUS_THIS s.pel.data[i].blue<<2); + } + BX_CIRRUS_THIS svga_needs_update_mode = 1; + BX_CIRRUS_THIS svga_update(); + } +} + +void bx_svga_cirrus_c::redraw_area(unsigned x0, unsigned y0, + unsigned width, unsigned height) +{ + unsigned xti, yti, xt0, xt1, yt0, yt1; + + if ((width == 0) || (height == 0)) { + return; + } + + if ((BX_CIRRUS_THIS sequencer.reg[0x07] & 0x01) == CIRRUS_SR7_BPP_VGA) { + BX_CIRRUS_THIS bx_vga_c::redraw_area(x0,y0,width,height); + return; + } + + if (BX_CIRRUS_THIS svga_needs_update_mode) { + return; + } + + BX_CIRRUS_THIS svga_needs_update_tile = true; + + xt0 = x0 / X_TILESIZE; + yt0 = y0 / Y_TILESIZE; + if (x0 < BX_CIRRUS_THIS svga_xres) { + xt1 = (x0 + width - 1) / X_TILESIZE; + } else { + xt1 = (BX_CIRRUS_THIS svga_xres - 1) / X_TILESIZE; + } + if (y0 < BX_CIRRUS_THIS svga_yres) { + yt1 = (y0 + height - 1) / Y_TILESIZE; + } else { + yt1 = (BX_CIRRUS_THIS svga_yres - 1) / Y_TILESIZE; + } + for (yti=yt0; yti<=yt1; yti++) { + for (xti=xt0; xti<=xt1; xti++) { + SET_TILE_UPDATED (xti, yti, 1); + } + } +} + +void bx_svga_cirrus_c::mem_write_mode4and5_8bpp(Bit8u mode, Bit32u offset, Bit8u value) +{ + Bit8u val = value; + Bit8u *dst; + + dst = BX_CIRRUS_THIS s.memory + offset; + for (int x = 0; x < 8; x++) { + if (val & 0x80) { + *dst = BX_CIRRUS_THIS control.shadow_reg1; + } else if (mode == 5) { + *dst = BX_CIRRUS_THIS control.shadow_reg0; + } + val <<= 1; + dst++; + } +} + +void bx_svga_cirrus_c::mem_write_mode4and5_16bpp(Bit8u mode, Bit32u offset, Bit8u value) +{ + Bit8u val = value; + Bit8u *dst; + + dst = BX_CIRRUS_THIS s.memory + offset; + for (int x = 0; x < 8; x++) { + if (val & 0x80) { + *dst = BX_CIRRUS_THIS control.shadow_reg1; + *(dst + 1) = BX_CIRRUS_THIS control.reg[0x11]; + } else if (mode == 5) { + *dst = BX_CIRRUS_THIS control.shadow_reg0; + *(dst + 1) = BX_CIRRUS_THIS control.reg[0x10]; + } + val <<= 1; + dst += 2; + } +} + +#if BX_SUPPORT_PCI +bx_bool bx_svga_cirrus_c::cirrus_mem_read_handler(bx_phy_address addr, unsigned len, + void *data, void *param) +{ + Bit8u *data_ptr; +#ifdef BX_LITTLE_ENDIAN + data_ptr = (Bit8u *) data; +#else // BX_BIG_ENDIAN + data_ptr = (Bit8u *) data + (len - 1); +#endif + for (unsigned i = 0; i < len; i++) { + *data_ptr = BX_CIRRUS_THIS mem_read(addr); + addr++; +#ifdef BX_LITTLE_ENDIAN + data_ptr++; +#else // BX_BIG_ENDIAN + data_ptr--; +#endif + } + return 1; +} +#endif + +Bit8u bx_svga_cirrus_c::mem_read(bx_phy_address addr) +{ + if ((BX_CIRRUS_THIS sequencer.reg[0x07] & 0x01) == CIRRUS_SR7_BPP_VGA) { + return BX_CIRRUS_THIS bx_vga_c::mem_read(addr); + } + +#if BX_SUPPORT_PCI + if (BX_CIRRUS_THIS pci_enabled) { + if ((addr >= BX_CIRRUS_THIS pci_memaddr) && + (addr < (BX_CIRRUS_THIS pci_memaddr + CIRRUS_PNPMEM_SIZE))) { + Bit8u *ptr; + + Bit32u offset = addr & (BX_CIRRUS_THIS s.memsize - 1); + if ((offset >= (BX_CIRRUS_THIS s.memsize - 256)) && + ((BX_CIRRUS_THIS sequencer.reg[0x17] & 0x44) == 0x44)) { + return svga_mmio_blt_read(offset & 0xff); + } + + // video-to-cpu BLT + if (BX_CIRRUS_THIS bitblt.memdst_needed != 0) { + ptr = BX_CIRRUS_THIS bitblt.memdst_ptr; + if (ptr != BX_CIRRUS_THIS bitblt.memdst_endptr) { + BX_CIRRUS_THIS bitblt.memdst_ptr ++; + return *ptr; + } + if (!svga_asyncbitblt_next()) { + ptr = BX_CIRRUS_THIS bitblt.memdst_ptr; + BX_CIRRUS_THIS bitblt.memdst_ptr ++; + return *ptr; + } + } + + ptr = BX_CIRRUS_THIS s.memory; + if ((BX_CIRRUS_THIS control.reg[0x0b] & 0x14) == 0x14) { + offset <<= 4; + } else if (BX_CIRRUS_THIS control.reg[0x0b] & 0x02) { + offset <<= 3; + } + offset &= (BX_CIRRUS_THIS s.memsize - 1); + return *(ptr + offset); + } else if ((addr >= BX_CIRRUS_THIS pci_mmioaddr) && + (addr < (BX_CIRRUS_THIS pci_mmioaddr + CIRRUS_PNPMMIO_SIZE))) { + + Bit32u offset = addr & (CIRRUS_PNPMMIO_SIZE - 1); + if (offset >= 0x100) { + return svga_mmio_blt_read(offset - 0x100); + } else { + return svga_mmio_vga_read(offset); + } + } + } +#endif // BX_SUPPORT_PCI + + if (addr >= 0xA0000 && addr <= 0xAFFFF) + { + Bit32u bank; + Bit32u offset; + Bit8u *ptr; + + // video-to-cpu BLT + if (BX_CIRRUS_THIS bitblt.memdst_needed != 0) { + ptr = BX_CIRRUS_THIS bitblt.memdst_ptr; + if (ptr != BX_CIRRUS_THIS bitblt.memdst_endptr) { + BX_CIRRUS_THIS bitblt.memdst_ptr ++; + return *ptr; + } + if (!svga_asyncbitblt_next()) { + ptr = BX_CIRRUS_THIS bitblt.memdst_ptr; + BX_CIRRUS_THIS bitblt.memdst_ptr ++; + return *ptr; + } + } + + offset = addr & 0xffff; + bank = (offset >> 15); + offset &= 0x7fff; + if (offset < bank_limit[bank]) { + offset += bank_base[bank]; + if ((BX_CIRRUS_THIS control.reg[0x0b] & 0x14) == 0x14) { + offset <<= 4; + } else if (BX_CIRRUS_THIS control.reg[0x0b] & 0x02) { + offset <<= 3; + } + offset &= (BX_CIRRUS_THIS s.memsize - 1); + return *(BX_CIRRUS_THIS s.memory + offset); + } + else { + return 0xff; + } + } + else if (addr >= 0xB8000 && addr <= 0xB8100) { + // memory-mapped I/O. + Bit32u offset = (Bit32u) (addr - 0xb8000); + if ((BX_CIRRUS_THIS sequencer.reg[0x17] & 0x44) == 0x04) + return svga_mmio_blt_read(offset); + } + else { + BX_DEBUG(("mem_read 0x%08x", (Bit32u)addr)); + } + + return 0xff; +} + +#if BX_SUPPORT_PCI +bx_bool bx_svga_cirrus_c::cirrus_mem_write_handler(bx_phy_address addr, unsigned len, + void *data, void *param) +{ + Bit8u *data_ptr; +#ifdef BX_LITTLE_ENDIAN + data_ptr = (Bit8u *) data; +#else // BX_BIG_ENDIAN + data_ptr = (Bit8u *) data + (len - 1); +#endif + for (unsigned i = 0; i < len; i++) { + BX_CIRRUS_THIS mem_write(addr, *data_ptr); + addr++; +#ifdef BX_LITTLE_ENDIAN + data_ptr++; +#else // BX_BIG_ENDIAN + data_ptr--; +#endif + } + return 1; +} +#endif + +void bx_svga_cirrus_c::mem_write(bx_phy_address addr, Bit8u value) +{ + if ((BX_CIRRUS_THIS sequencer.reg[0x07] & 0x01) == CIRRUS_SR7_BPP_VGA) { + BX_CIRRUS_THIS bx_vga_c::mem_write(addr,value); + return; + } + +#if BX_SUPPORT_PCI + if (BX_CIRRUS_THIS pci_enabled) { + if ((addr >= BX_CIRRUS_THIS pci_memaddr) && + (addr < (BX_CIRRUS_THIS pci_memaddr + CIRRUS_PNPMEM_SIZE))) { + + Bit32u offset = addr & (BX_CIRRUS_THIS s.memsize - 1); + if ((offset >= (BX_CIRRUS_THIS s.memsize - 256)) && + ((BX_CIRRUS_THIS sequencer.reg[0x17] & 0x44) == 0x44)) { + svga_mmio_blt_write(addr & 0xff, value); + return; + } + + // cpu-to-video BLT + if (BX_CIRRUS_THIS bitblt.memsrc_needed > 0) { + *(BX_CIRRUS_THIS bitblt.memsrc_ptr)++ = (value); + if (BX_CIRRUS_THIS bitblt.memsrc_ptr >= BX_CIRRUS_THIS bitblt.memsrc_endptr) { + svga_asyncbitblt_next(); + } + return; + } + + // BX_DEBUG(("write offset 0x%08x,value 0x%02x",offset,value)); + if ((BX_CIRRUS_THIS control.reg[0x0b] & 0x14) == 0x14) { + offset <<= 4; + } else if (BX_CIRRUS_THIS control.reg[0x0b] & 0x02) { + offset <<= 3; + } + offset &= (BX_CIRRUS_THIS s.memsize - 1); + Bit8u mode = BX_CIRRUS_THIS control.reg[0x05] & 0x07; + if ((mode < 4) || (mode > 5) || ((BX_CIRRUS_THIS control.reg[0x0b] & 0x4) == 0)) { + *(BX_CIRRUS_THIS s.memory + offset) = value; + } else { + if ((BX_CIRRUS_THIS control.reg[0x0b] & 0x14) != 0x14) { + mem_write_mode4and5_8bpp(mode, offset, value); + } else { + mem_write_mode4and5_16bpp(mode, offset, value); + } + } + BX_CIRRUS_THIS svga_needs_update_tile = true; + SET_TILE_UPDATED(((offset % BX_CIRRUS_THIS svga_pitch) / (BX_CIRRUS_THIS svga_bpp / 8)) / X_TILESIZE, + (offset / BX_CIRRUS_THIS svga_pitch) / Y_TILESIZE, 1); + return; + } else if ((addr >= BX_CIRRUS_THIS pci_mmioaddr) && + (addr < (BX_CIRRUS_THIS pci_mmioaddr + CIRRUS_PNPMMIO_SIZE))) { + // memory-mapped I/O. + + // BX_DEBUG(("write mmio 0x%08x",addr)); + Bit32u offset = addr & (CIRRUS_PNPMMIO_SIZE - 1); + if (offset >= 0x100) { + svga_mmio_blt_write(offset - 0x100, value); + } else { + svga_mmio_vga_write(offset,value); + } + return; + } + } +#endif // BX_SUPPORT_PCI + + if (addr >= 0xA0000 && addr <= 0xAFFFF) { + Bit32u bank, offset; + Bit8u mode; + + // cpu-to-video BLT + if (BX_CIRRUS_THIS bitblt.memsrc_needed > 0) { + *(BX_CIRRUS_THIS bitblt.memsrc_ptr)++ = (value); + if (BX_CIRRUS_THIS bitblt.memsrc_ptr >= BX_CIRRUS_THIS bitblt.memsrc_endptr) { + svga_asyncbitblt_next(); + } + return; + } + + offset = addr & 0xffff; + bank = (offset >> 15); + offset &= 0x7fff; + if (offset < bank_limit[bank]) { + offset += bank_base[bank]; + if ((BX_CIRRUS_THIS control.reg[0x0b] & 0x14) == 0x14) { + offset <<= 4; + } else if (BX_CIRRUS_THIS control.reg[0x0b] & 0x02) { + offset <<= 3; + } + offset &= (BX_CIRRUS_THIS s.memsize - 1); + mode = BX_CIRRUS_THIS control.reg[0x05] & 0x07; + if ((mode < 4) || (mode > 5) || ((BX_CIRRUS_THIS control.reg[0x0b] & 0x4) == 0)) { + *(BX_CIRRUS_THIS s.memory + offset) = value; + } else { + if ((BX_CIRRUS_THIS control.reg[0x0b] & 0x14) != 0x14) { + mem_write_mode4and5_8bpp(mode, offset, value); + } else { + mem_write_mode4and5_16bpp(mode, offset, value); + } + } + BX_CIRRUS_THIS svga_needs_update_tile = true; + SET_TILE_UPDATED(((offset % BX_CIRRUS_THIS svga_pitch) / (BX_CIRRUS_THIS svga_bpp / 8)) / X_TILESIZE, + (offset / BX_CIRRUS_THIS svga_pitch) / Y_TILESIZE, 1); + } + } else if (addr >= 0xB8000 && addr < 0xB8100) { + // memory-mapped I/O. + Bit32u offset = (Bit32u) (addr - 0xb8000); + if ((BX_CIRRUS_THIS sequencer.reg[0x17] & 0x44) == 0x04) { + svga_mmio_blt_write(offset & 0xff, value); + } + } + else { + BX_DEBUG(("mem_write 0x%08x, value 0x%02x", (Bit32u)addr, value)); + } +} + +void bx_svga_cirrus_c::get_text_snapshot(Bit8u **text_snapshot, + unsigned *txHeight, unsigned *txWidth) +{ + BX_CIRRUS_THIS bx_vga_c::get_text_snapshot(text_snapshot,txHeight,txWidth); +} + +void bx_svga_cirrus_c::trigger_timer(void *this_ptr) +{ + BX_CIRRUS_THIS timer_handler(this_ptr); +} + +Bit64s bx_svga_cirrus_c::svga_param_handler(bx_param_c *param, int set, Bit64s val) +{ + if (set) { + BX_INFO (("Changing timer interval to %d", (Bit32u)val)); + BX_CIRRUS_THIS svga_timer_handler (theSvga); + bx_pc_system.activate_timer (BX_CIRRUS_THIS timer_id, (Bit32u)val, 1); + } + return val; +} + +Bit8u bx_svga_cirrus_c::get_actl_palette_idx(Bit8u index) +{ + return BX_CIRRUS_THIS bx_vga_c::get_actl_palette_idx(index); +} + +Bit32u bx_svga_cirrus_c::svga_read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_CIRRUS_SMF + bx_svga_cirrus_c *class_ptr = (bx_svga_cirrus_c *) this_ptr; + + return class_ptr->svga_read(address, io_len); +} + +Bit32u bx_svga_cirrus_c::svga_read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_CIRRUS_SMF + + if ((io_len == 2) && ((address & 1) == 0)) { + Bit32u value; + value = (Bit32u)SVGA_READ(address,1); + value |= (Bit32u)SVGA_READ(address+1,1) << 8; + return value; + } + + if (io_len != 1) { + BX_PANIC(("SVGA read: io_len != 1")); + } + + switch (address) { + case 0x03b4: /* VGA: CRTC Index Register (monochrome emulation modes) */ + case 0x03d4: /* VGA: CRTC Index Register (color emulation modes) */ + return BX_CIRRUS_THIS crtc.index; + case 0x03b5: /* VGA: CRTC Registers (monochrome emulation modes) */ + case 0x03d5: /* VGA: CRTC Registers (color emulation modes) */ + if (BX_CIRRUS_THIS is_unlocked()) + return BX_CIRRUS_THIS svga_read_crtc(address,BX_CIRRUS_THIS crtc.index); + break; + + case 0x03c4: /* VGA: Sequencer Index Register */ + if (BX_CIRRUS_THIS is_unlocked()) { + Bit32u value = BX_CIRRUS_THIS sequencer.index; + if ((value & 0x1e) == 0x10) { /* SR10-F0, SR11-F1 */ + if (value & 1) + value = ((BX_CIRRUS_THIS hw_cursor.y & 7) << 5) | 0x11; + else + value = ((BX_CIRRUS_THIS hw_cursor.x & 7) << 5) | 0x10; + } + return value; + } + return BX_CIRRUS_THIS sequencer.index; + case 0x03c5: /* VGA: Sequencer Registers */ + if ((BX_CIRRUS_THIS sequencer.index == 0x06) || + (BX_CIRRUS_THIS is_unlocked())) { + return BX_CIRRUS_THIS svga_read_sequencer(address,BX_CIRRUS_THIS sequencer.index); + } + break; + + case 0x03c6: /* Hidden DAC */ + if (BX_CIRRUS_THIS is_unlocked()) { + if ((++BX_CIRRUS_THIS hidden_dac.lockindex) == 5) { + BX_CIRRUS_THIS hidden_dac.lockindex = 0; + return BX_CIRRUS_THIS hidden_dac.data; + } + } + break; + case 0x03c8: /* PEL write address */ + BX_CIRRUS_THIS hidden_dac.lockindex = 0; + break; + case 0x03c9: /* PEL Data Register, hiddem pel colors 00..0F */ + if (BX_CIRRUS_THIS sequencer.reg[0x12] & CIRRUS_CURSOR_HIDDENPEL) { + Bit8u index = (BX_CIRRUS_THIS s.pel.read_data_register & 0x0f) * 3 + + BX_CIRRUS_THIS s.pel.read_data_cycle; + Bit8u retval = BX_CIRRUS_THIS hidden_dac.palette[index]; + BX_CIRRUS_THIS s.pel.read_data_cycle ++; + if (BX_CIRRUS_THIS s.pel.read_data_cycle >= 3) { + BX_CIRRUS_THIS s.pel.read_data_cycle = 0; + BX_CIRRUS_THIS s.pel.read_data_register++; + } + return retval; + } + break; + case 0x03ce: /* VGA: Graphics Controller Index Register */ + return BX_CIRRUS_THIS control.index; + case 0x03cf: /* VGA: Graphics Controller Registers */ + if (BX_CIRRUS_THIS is_unlocked()) + return BX_CIRRUS_THIS svga_read_control(address,BX_CIRRUS_THIS control.index); + break; + + default: + break; + } + + return VGA_READ(address,io_len); +} + +void bx_svga_cirrus_c::svga_write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_CIRRUS_SMF + bx_svga_cirrus_c *class_ptr = (bx_svga_cirrus_c *) this_ptr; + class_ptr->svga_write(address, value, io_len); +} + +void bx_svga_cirrus_c::svga_write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_CIRRUS_SMF + + if ((io_len == 2) && ((address & 1) == 0)) { + SVGA_WRITE(address,value & 0xff,1); + SVGA_WRITE(address+1,value >> 8,1); + return; + } + + if (io_len != 1) { + BX_PANIC(("SVGA write: io_len != 1")); + } + + switch (address) { + case 0x03b4: /* VGA: CRTC Index Register (monochrome emulation modes) */ + case 0x03d4: /* VGA: CRTC Index Register (color emulation modes) */ + BX_CIRRUS_THIS crtc.index = value & 0x7f; + break; + case 0x03b5: /* VGA: CRTC Registers (monochrome emulation modes) */ + case 0x03d5: /* VGA: CRTC Registers (color emulation modes) */ + if (BX_CIRRUS_THIS is_unlocked()) { + BX_CIRRUS_THIS svga_write_crtc(address,BX_CIRRUS_THIS crtc.index,value); + return; + } + break; + + case 0x03c4: /* VGA: Sequencer Index Register */ + BX_CIRRUS_THIS sequencer.index = value; + break; + case 0x03c5: /* VGA: Sequencer Registers */ + if ((BX_CIRRUS_THIS sequencer.index == 0x06) || + (BX_CIRRUS_THIS is_unlocked())) { + BX_CIRRUS_THIS svga_write_sequencer(address,BX_CIRRUS_THIS sequencer.index,value); + return; + } + break; + case 0x03c6: /* Hidden DAC */ + if (BX_CIRRUS_THIS is_unlocked()) { + if (BX_CIRRUS_THIS hidden_dac.lockindex == 4) { + BX_CIRRUS_THIS hidden_dac.data = value; + } + BX_CIRRUS_THIS hidden_dac.lockindex = 0; + return; + } + break; + case 0x03c9: /* PEL Data Register, hidden pel colors 00..0F */ + BX_CIRRUS_THIS svga_needs_update_dispentire = true; + + if (BX_CIRRUS_THIS sequencer.reg[0x12] & CIRRUS_CURSOR_HIDDENPEL) { + Bit8u index = (BX_CIRRUS_THIS s.pel.write_data_register & 0x0f) * 3 + + BX_CIRRUS_THIS s.pel.write_data_cycle; + BX_CIRRUS_THIS hidden_dac.palette[index] = value; + BX_CIRRUS_THIS s.pel.write_data_cycle ++; + if (BX_CIRRUS_THIS s.pel.write_data_cycle >= 3) { + BX_CIRRUS_THIS s.pel.write_data_cycle = 0; + BX_CIRRUS_THIS s.pel.write_data_register++; + } + return; + } + break; + case 0x03ce: /* VGA: Graphics Controller Index Register */ + BX_CIRRUS_THIS control.index = value; + break; + case 0x03cf: /* VGA: Graphics Controller Registers */ + if (BX_CIRRUS_THIS is_unlocked()) { + BX_CIRRUS_THIS svga_write_control(address,BX_CIRRUS_THIS control.index,value); + return; + } + break; + default: + break; + } + + VGA_WRITE(address,value,io_len); +} + +void bx_svga_cirrus_c::svga_timer_handler(void *this_ptr) +{ +#if !BX_USE_CIRRUS_SMF + bx_svga_cirrus_c *class_ptr = (bx_svga_cirrus_c *) this_ptr; + class_ptr->svga_timer(); +} + +void bx_svga_cirrus_c::svga_timer(void) +{ +#else // !BX_USE_CIRRUS_SMF + UNUSED(this_ptr); +#endif // !BX_USE_CIRRUS_SMF + + BX_CIRRUS_THIS svga_update(); + bx_gui->flush(); +} + +void bx_svga_cirrus_c::svga_modeupdate(void) +{ + Bit32u iTopOffset, iWidth, iHeight; + Bit8u iBpp, iDispBpp; + + iTopOffset = (BX_CIRRUS_THIS crtc.reg[0x0c] << 8) + + BX_CIRRUS_THIS crtc.reg[0x0d] + + ((BX_CIRRUS_THIS crtc.reg[0x1b] & 0x01) << 16) + + ((BX_CIRRUS_THIS crtc.reg[0x1b] & 0x0c) << 15) + + ((BX_CIRRUS_THIS crtc.reg[0x1d] & 0x80) << 12); + iTopOffset <<= 2; + + iHeight = 1 + BX_CIRRUS_THIS crtc.reg[0x12] + + ((BX_CIRRUS_THIS crtc.reg[0x07] & 0x02) << 7) + + ((BX_CIRRUS_THIS crtc.reg[0x07] & 0x40) << 3); + if ((BX_CIRRUS_THIS crtc.reg[0x1a] & 0x01) > 0) { + iHeight <<= 1; + } + iWidth = (BX_CIRRUS_THIS crtc.reg[0x01] + 1) * 8; + iBpp = 8; + iDispBpp = 4; + if ((BX_CIRRUS_THIS sequencer.reg[0x07] & 0x1) == CIRRUS_SR7_BPP_SVGA) { + switch (BX_CIRRUS_THIS sequencer.reg[0x07] & CIRRUS_SR7_BPP_MASK) { + case CIRRUS_SR7_BPP_8: + iBpp = 8; + iDispBpp = 8; + break; + case CIRRUS_SR7_BPP_16_DOUBLEVCLK: + case CIRRUS_SR7_BPP_16: + iBpp = 16; + iDispBpp = (BX_CIRRUS_THIS hidden_dac.data & 0x1) ? 16 : 15; + break; + case CIRRUS_SR7_BPP_24: + iBpp = 24; + iDispBpp = 24; + break; + case CIRRUS_SR7_BPP_32: + iBpp = 32; + iDispBpp = 32; + break; + default: + BX_PANIC(("unknown bpp - seqencer.reg[0x07] = %02x",BX_CIRRUS_THIS sequencer.reg[0x07])); + break; + } + } + if ((iWidth != BX_CIRRUS_THIS svga_xres) || (iHeight != BX_CIRRUS_THIS svga_yres) + || (iDispBpp != BX_CIRRUS_THIS svga_dispbpp)) { + BX_INFO(("switched to %u x %u x %u", iWidth, iHeight, iDispBpp)); + } + BX_CIRRUS_THIS svga_xres = iWidth; + BX_CIRRUS_THIS svga_yres = iHeight; + BX_CIRRUS_THIS svga_bpp = iBpp; + BX_CIRRUS_THIS svga_dispbpp = iDispBpp; + BX_CIRRUS_THIS disp_ptr = BX_CIRRUS_THIS s.memory + iTopOffset; +} + +void bx_svga_cirrus_c::draw_hardware_cursor(unsigned xc, unsigned yc, bx_svga_tileinfo_t *info) +{ + if (BX_CIRRUS_THIS hw_cursor.size && + (xc < (unsigned)(BX_CIRRUS_THIS hw_cursor.x+BX_CIRRUS_THIS hw_cursor.size)) && + (xc+X_TILESIZE > BX_CIRRUS_THIS hw_cursor.x) && + (yc < (unsigned)(BX_CIRRUS_THIS hw_cursor.y+BX_CIRRUS_THIS hw_cursor.size)) && + (yc+Y_TILESIZE > BX_CIRRUS_THIS hw_cursor.y)) { + int i; + unsigned w, h, pitch, cx, cy, cx0, cy0, cx1, cy1; + + Bit8u * tile_ptr, * tile_ptr2; + Bit8u * plane0_ptr, *plane0_ptr2; + Bit8u * plane1_ptr, *plane1_ptr2; + unsigned long fgcol, bgcol; + Bit64u plane0, plane1; + + cx0 = BX_CIRRUS_THIS hw_cursor.x > xc ? BX_CIRRUS_THIS hw_cursor.x : xc; + cy0 = BX_CIRRUS_THIS hw_cursor.y > yc ? BX_CIRRUS_THIS hw_cursor.y : yc; + cx1 = (unsigned)(BX_CIRRUS_THIS hw_cursor.x+BX_CIRRUS_THIS hw_cursor.size) < xc+X_TILESIZE ? BX_CIRRUS_THIS hw_cursor.x+BX_CIRRUS_THIS hw_cursor.size : xc+X_TILESIZE; + cy1 = (unsigned)(BX_CIRRUS_THIS hw_cursor.y+BX_CIRRUS_THIS hw_cursor.size) < yc+Y_TILESIZE ? BX_CIRRUS_THIS hw_cursor.y+BX_CIRRUS_THIS hw_cursor.size : yc+Y_TILESIZE; + + if (info->bpp == 15) info->bpp = 16; + tile_ptr = bx_gui->graphics_tile_get(xc, yc, &w, &h) + + info->pitch * (cy0 - yc) + (info->bpp / 8) * (cx0 - xc); + plane0_ptr = BX_CIRRUS_THIS s.memory + BX_CIRRUS_THIS s.memsize - 16384; + + switch (BX_CIRRUS_THIS hw_cursor.size) { + case 32: + plane0_ptr += (BX_CIRRUS_THIS sequencer.reg[0x13] & 0x3f) * 256; + plane1_ptr = plane0_ptr + 128; + pitch = 4; + break; + + case 64: + plane0_ptr += (BX_CIRRUS_THIS sequencer.reg[0x13] & 0x3c) * 256; + plane1_ptr = plane0_ptr + 8; + pitch = 16; + break; + + default: + BX_ERROR(("unsupported hardware cursor size")); + return; + break; + } + + if (!info->is_indexed) { + fgcol = MAKE_COLOUR( + BX_CIRRUS_THIS hidden_dac.palette[45], 6, info->red_shift, info->red_mask, + BX_CIRRUS_THIS hidden_dac.palette[46], 6, info->green_shift, info->green_mask, + BX_CIRRUS_THIS hidden_dac.palette[47], 6, info->blue_shift, info->blue_mask); + bgcol = MAKE_COLOUR( + BX_CIRRUS_THIS hidden_dac.palette[0], 6, info->red_shift, info->red_mask, + BX_CIRRUS_THIS hidden_dac.palette[1], 6, info->green_shift, info->green_mask, + BX_CIRRUS_THIS hidden_dac.palette[2], 6, info->blue_shift, info->blue_mask); + } else { + // FIXME: this is a hack that works in Windows guests + // TODO: compare hidden DAC entries with DAC entries to find nearest match + fgcol = 0xff; + bgcol = 0x00; + } + + plane0_ptr += pitch * (cy0 - BX_CIRRUS_THIS hw_cursor.y); + plane1_ptr += pitch * (cy0 - BX_CIRRUS_THIS hw_cursor.y); + for (cy=cy0; cybpp/8) * (cx1 - cx0) - 1; + plane0_ptr2 = plane0_ptr; + plane1_ptr2 = plane1_ptr; + plane0 = plane1 = 0; + for (i=0; i>= BX_CIRRUS_THIS hw_cursor.x+BX_CIRRUS_THIS hw_cursor.size - cx1; + plane1 >>= BX_CIRRUS_THIS hw_cursor.x+BX_CIRRUS_THIS hw_cursor.size - cx1; + for (cx=cx0; cxis_little_endian) { + for (i=info->bpp-8; i>-8; i-=8) { + *(tile_ptr2--) = (Bit8u)(fgcol >> i); + } + } + else { + for (i=0; ibpp; i+=8) { + *(tile_ptr2--) = (Bit8u)(fgcol >> i); + } + } + } + else { + for (i=0; ibpp; i+=8) { + *(tile_ptr2--) ^= 0xff; + } + } + } + else { + if (plane1 & 1) { + if (info->is_little_endian) { + for (i=info->bpp-8; i>-8; i-=8) { + *(tile_ptr2--) = (Bit8u)(bgcol >> i); + } + } + else { + for (i=0; ibpp; i+=8) { + *(tile_ptr2--) = (Bit8u)(bgcol >> i); + } + } + } + else { + tile_ptr2 -= (info->bpp/8); + } + } + plane0 >>= 1; + plane1 >>= 1; + } + tile_ptr += info->pitch; + plane0_ptr += pitch; + plane1_ptr += pitch; + } + } +} + +void bx_svga_cirrus_c::svga_update(void) +{ + unsigned width, height, pitch; + + /* skip screen update when the sequencer is in reset mode or video is disabled */ + if (! BX_CIRRUS_THIS s.sequencer.reset1 || + ! BX_CIRRUS_THIS s.sequencer.reset2 || + ! BX_CIRRUS_THIS s.attribute_ctrl.video_enabled) { + return; + } + + if ((BX_CIRRUS_THIS sequencer.reg[0x07] & 0x01) == CIRRUS_SR7_BPP_VGA) { + if (BX_CIRRUS_THIS svga_needs_update_mode) { + BX_CIRRUS_THIS s.vga_mem_updated = 1; + BX_CIRRUS_THIS svga_needs_update_mode = false; + } + BX_CIRRUS_THIS bx_vga_c::update(); + return; + } + else { + if (BX_CIRRUS_THIS svga_needs_update_mode) { + svga_modeupdate(); + } + } + + width = BX_CIRRUS_THIS svga_xres; + height = BX_CIRRUS_THIS svga_yres; + pitch = BX_CIRRUS_THIS svga_pitch; + + if (BX_CIRRUS_THIS svga_needs_update_mode) { + width = BX_CIRRUS_THIS svga_xres; + height = BX_CIRRUS_THIS svga_yres; + bx_gui->dimension_update(width, height, 0, 0, BX_CIRRUS_THIS svga_dispbpp); + BX_CIRRUS_THIS s.last_bpp = BX_CIRRUS_THIS svga_dispbpp; + BX_CIRRUS_THIS svga_needs_update_mode = false; + BX_CIRRUS_THIS svga_needs_update_dispentire = true; + } + + if (BX_CIRRUS_THIS svga_needs_update_dispentire) { + BX_CIRRUS_THIS redraw_area(0,0,width,height); + BX_CIRRUS_THIS svga_needs_update_dispentire = false; + } + + if (!BX_CIRRUS_THIS svga_needs_update_tile) { + return; + } + BX_CIRRUS_THIS svga_needs_update_tile = false; + + unsigned xc, yc, xti, yti; + unsigned r, c, w, h; + int i; + Bit8u red, green, blue; + Bit32u colour; + Bit8u * vid_ptr, * vid_ptr2; + Bit8u * tile_ptr, * tile_ptr2; + bx_svga_tileinfo_t info; + + if (bx_gui->graphics_tile_info(&info)) { + if (info.is_indexed) { + switch (BX_CIRRUS_THIS svga_dispbpp) { + case 4: + case 15: + case 16: + case 24: + case 32: + BX_ERROR(("current guest pixel format is unsupported on indexed colour host displays, svga_dispbpp=%d", + BX_CIRRUS_THIS svga_dispbpp)); + break; + case 8: + for (yc=0, yti = 0; ycgraphics_tile_get(xc, yc, &w, &h); + for (r=0; r> i; + } + } + else { + for (i=info.bpp-8; i>-8; i-=8) { + *(tile_ptr2++) = colour >> i; + } + } + } + vid_ptr += pitch; + tile_ptr += info.pitch; + } + draw_hardware_cursor(xc, yc, &info); + bx_gui->graphics_tile_update_in_place(xc, yc, w, h); + SET_TILE_UPDATED (xti, yti, 0); + } + } + } + break; + } + } + else { + switch (BX_CIRRUS_THIS svga_dispbpp) { + case 4: + BX_ERROR(("cannot draw 4bpp SVGA")); + break; + case 8: + for (yc=0, yti = 0; ycgraphics_tile_get(xc, yc, &w, &h); + for (r=0; r> i; + } + } + else { + for (i=info.bpp-8; i>-8; i-=8) { + *(tile_ptr2++) = colour >> i; + } + } + } + vid_ptr += pitch; + tile_ptr += info.pitch; + } + draw_hardware_cursor(xc, yc, &info); + bx_gui->graphics_tile_update_in_place(xc, yc, w, h); + SET_TILE_UPDATED (xti, yti, 0); + } + } + } + break; + case 15: + for (yc=0, yti = 0; ycgraphics_tile_get(xc, yc, &w, &h); + for (r=0; r> i; + } + } + else { + for (i=info.bpp-8; i>-8; i-=8) { + *(tile_ptr2++) = colour >> i; + } + } + } + vid_ptr += pitch; + tile_ptr += info.pitch; + } + draw_hardware_cursor(xc, yc, &info); + bx_gui->graphics_tile_update_in_place(xc, yc, w, h); + SET_TILE_UPDATED (xti, yti, 0); + } + } + } + break; + case 16: + for (yc=0, yti = 0; ycgraphics_tile_get(xc, yc, &w, &h); + for (r=0; r> i; + } + } + else { + for (i=info.bpp-8; i>-8; i-=8) { + *(tile_ptr2++) = colour >> i; + } + } + } + vid_ptr += pitch; + tile_ptr += info.pitch; + } + draw_hardware_cursor(xc, yc, &info); + bx_gui->graphics_tile_update_in_place(xc, yc, w, h); + SET_TILE_UPDATED (xti, yti, 0); + } + } + } + break; + case 24: + for (yc=0, yti = 0; ycgraphics_tile_get(xc, yc, &w, &h); + for (r=0; r> i; + } + } + else { + for (i=info.bpp-8; i>-8; i-=8) { + *(tile_ptr2++) = colour >> i; + } + } + } + vid_ptr += pitch; + tile_ptr += info.pitch; + } + draw_hardware_cursor(xc, yc, &info); + bx_gui->graphics_tile_update_in_place(xc, yc, w, h); + SET_TILE_UPDATED (xti, yti, 0); + } + } + } + break; + case 32: + for (yc=0, yti = 0; ycgraphics_tile_get(xc, yc, &w, &h); + for (r=0; r> i; + } + } + else { + for (i=info.bpp-8; i>-8; i-=8) { + *(tile_ptr2++) = colour >> i; + } + } + } + vid_ptr += pitch; + tile_ptr += info.pitch; + } + draw_hardware_cursor(xc, yc, &info); + bx_gui->graphics_tile_update_in_place(xc, yc, w, h); + SET_TILE_UPDATED (xti, yti, 0); + } + } + } + break; + } + } + } + else { + BX_PANIC(("cannot get svga tile info")); + } +} + +void bx_svga_cirrus_c::update_bank_ptr(Bit8u bank_index) +{ + unsigned offset; + unsigned limit; + + if (BX_CIRRUS_THIS banking_is_dual()) + offset = BX_CIRRUS_THIS control.reg[0x09 + bank_index]; + else + offset = BX_CIRRUS_THIS control.reg[0x09]; + + if (BX_CIRRUS_THIS banking_granularity_is_16k()) + offset <<= 14; + else + offset <<= 12; + + if (BX_CIRRUS_THIS s.memsize <= offset) { + limit = 0; + BX_ERROR(("bank offset %08x is invalid",offset)); + } else { + limit = BX_CIRRUS_THIS s.memsize - offset; + } + + if (!BX_CIRRUS_THIS banking_is_dual() && (bank_index != 0)) { + if (limit > 0x8000) { + offset += 0x8000; + limit -= 0x8000; + } else { + limit = 0; + } + } + + if (limit > 0) { + BX_CIRRUS_THIS bank_base[bank_index] = offset; + BX_CIRRUS_THIS bank_limit[bank_index] = limit; + } else { + BX_CIRRUS_THIS bank_base[bank_index] = 0; + BX_CIRRUS_THIS bank_limit[bank_index] = 0; + } +} + +Bit8u bx_svga_cirrus_c::svga_read_crtc(Bit32u address, unsigned index) +{ + switch (index) { + case 0x00: // VGA + case 0x01: // VGA + case 0x02: // VGA + case 0x03: // VGA + case 0x04: // VGA + case 0x05: // VGA + case 0x06: // VGA + case 0x07: // VGA + case 0x08: // VGA + case 0x09: // VGA + case 0x0a: // VGA + case 0x0b: // VGA + case 0x0c: // VGA + case 0x0d: // VGA + case 0x0e: // VGA + case 0x0f: // VGA + case 0x10: // VGA + case 0x11: // VGA + case 0x12: // VGA + case 0x13: // VGA + case 0x14: // VGA + case 0x15: // VGA + case 0x16: // VGA + case 0x17: // VGA + case 0x18: // VGA + break; + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x22: + case 0x24: + case 0x25: + case 0x27: + break; + case 0x26: + return (BX_CIRRUS_THIS s.attribute_ctrl.address & 0x3f); + default: + BX_DEBUG(("CRTC index 0x%02x is unknown(read)", index)); + break; + } + + if (index <= VGA_CRTC_MAX) { + return VGA_READ(address,1); + } + + if (index <= CIRRUS_CRTC_MAX) { + return BX_CIRRUS_THIS crtc.reg[index]; + } + + return 0xff; +} + +void bx_svga_cirrus_c::svga_write_crtc(Bit32u address, unsigned index, Bit8u value) +{ + BX_DEBUG(("crtc: index 0x%02x write 0x%02x", index, (unsigned)value)); + + bx_bool update_pitch = 0; + + switch (index) { + case 0x00: // VGA + case 0x02: // VGA + case 0x03: // VGA + case 0x04: // VGA + case 0x05: // VGA + case 0x06: // VGA + case 0x08: // VGA + case 0x0a: // VGA + case 0x0b: // VGA + case 0x0e: // VGA + case 0x0f: // VGA + case 0x10: // VGA + case 0x11: // VGA + case 0x14: // VGA + case 0x15: // VGA + case 0x16: // VGA + case 0x17: // VGA + case 0x18: // VGA + break; + + case 0x01: // VGA + case 0x07: // VGA + case 0x09: // VGA + case 0x0c: // VGA (display offset 0x00ff00) + case 0x0d: // VGA (display offset 0x0000ff) + case 0x12: // VGA + case 0x1A: // 0x01: interlaced video mode + case 0x1D: // 0x80: offset 0x080000 (>=CLGD5434) + BX_CIRRUS_THIS svga_needs_update_mode = true; + break; + + case 0x13: // VGA + case 0x1B: // 0x01: offset 0x010000, 0x0c: offset 0x060000 + update_pitch = 1; + break; + + case 0x19: + case 0x1C: + break; + + default: + BX_DEBUG(("CRTC index 0x%02x is unknown(write 0x%02x)", index, (unsigned)value)); + return; + } + + if (index <= CIRRUS_CRTC_MAX) { + BX_CIRRUS_THIS crtc.reg[index] = value; + } + if (index <= VGA_CRTC_MAX) { + VGA_WRITE(address,value,1); + } + + if (update_pitch) { + BX_CIRRUS_THIS svga_pitch = (BX_CIRRUS_THIS crtc.reg[0x13] << 3) | ((BX_CIRRUS_THIS crtc.reg[0x1b] & 0x10) << 7); + BX_CIRRUS_THIS svga_needs_update_mode = true; + } +} + +Bit8u bx_svga_cirrus_c::svga_read_sequencer(Bit32u address, unsigned index) +{ + switch (index) { + case 0x00: // VGA + case 0x01: // VGA + case 0x02: // VGA + case 0x03: // VGA + case 0x04: // VGA + break; + case 0x6: // cirrus unlock extensions + case 0x7: // cirrus extended sequencer mode + case 0xf: // cirrus dram control + case 0x12: // graphics cursor attribute + case 0x13: // graphics cursor pattern address offset + case 0x17: // configuration readback & extended control + break; + case 0x10: // cursor xpos << 5 (index & 0x3f) + case 0x30: + case 0x50: + case 0x70: + case 0x90: + case 0xb0: + case 0xd0: + case 0xf0: + return BX_CIRRUS_THIS sequencer.reg[0x10]; + case 0x11: // cursor ypos << 5 (index & 0x3f) + case 0x31: + case 0x51: + case 0x71: + case 0x91: + case 0xb1: + case 0xd1: + case 0xf1: + return BX_CIRRUS_THIS sequencer.reg[0x11]; + default: + BX_DEBUG(("sequencer index 0x%02x is unknown(read)", index)); + break; + } + + if (index <= VGA_SEQENCER_MAX) { + return VGA_READ(address,1); + } + + if (index <= CIRRUS_SEQENCER_MAX) { + return BX_CIRRUS_THIS sequencer.reg[index]; + } + + return 0xff; +} + +void bx_svga_cirrus_c::svga_write_sequencer(Bit32u address, unsigned index, Bit8u value) +{ + BX_DEBUG(("sequencer: index 0x%02x write 0x%02x", index, (unsigned)value)); + + bx_bool update_cursor = 0; + Bit16u x, y, size; + + x = BX_CIRRUS_THIS hw_cursor.x; + y = BX_CIRRUS_THIS hw_cursor.y; + size = BX_CIRRUS_THIS hw_cursor.size; + + switch (index) { + case 0x00: // VGA + case 0x02: // VGA + case 0x03: // VGA + break; + case 0x01: // VGA + case 0x04: // VGA + BX_CIRRUS_THIS svga_needs_update_mode = true; + break; + case 0x6: // cirrus unlock extensions + value &= 0x17; + if (value == 0x12) { + BX_CIRRUS_THIS svga_unlock_special = true; + BX_CIRRUS_THIS sequencer.reg[0x6] = 0x12; + } + else { + BX_CIRRUS_THIS svga_unlock_special = false; + BX_CIRRUS_THIS sequencer.reg[0x6] = 0x0f; + } + return; + case 0x7: // cirrus extended sequencer mode + if (value != BX_CIRRUS_THIS sequencer.reg[0x7]) { + BX_CIRRUS_THIS svga_needs_update_mode = true; + } + break; + case 0x08: + case 0x09: + case 0x0a: // cirrus scratch reg 1 + case 0x0b: + case 0x0c: + case 0x0d: + case 0x0e: + case 0x1b: + case 0x1c: + case 0x1d: + case 0x1e: + break; + case 0x0f: + return; + case 0x10: // cursor xpos << 5 (index & 0x3f) + case 0x30: + case 0x50: + case 0x70: + case 0x90: + case 0xb0: + case 0xd0: + case 0xf0: + BX_CIRRUS_THIS sequencer.reg[0x10] = value; + x = BX_CIRRUS_THIS hw_cursor.x; + BX_CIRRUS_THIS hw_cursor.x = (value << 3) | (index >> 5); + update_cursor = 1; + break; + case 0x11: // cursor ypos << 5 (index & 0x3f) + case 0x31: + case 0x51: + case 0x71: + case 0x91: + case 0xb1: + case 0xd1: + case 0xf1: + BX_CIRRUS_THIS sequencer.reg[0x11] = value; + y = BX_CIRRUS_THIS hw_cursor.y; + BX_CIRRUS_THIS hw_cursor.y = (value << 3) | (index >> 5); + update_cursor = 1; + break; + case 0x12: + size = BX_CIRRUS_THIS hw_cursor.size; + if (value & CIRRUS_CURSOR_SHOW) { + if (value & CIRRUS_CURSOR_LARGE) { + BX_CIRRUS_THIS hw_cursor.size = 64; + } + else { + BX_CIRRUS_THIS hw_cursor.size = 32; + } + } + else { + BX_CIRRUS_THIS hw_cursor.size = 0; + } + update_cursor = 1; + break; + case 0x13: + update_cursor = 1; + break; + case 0x17: + value = (BX_CIRRUS_THIS sequencer.reg[0x17] & 0x38) | (value & 0xc7); + break; + default: + BX_DEBUG(("sequencer index 0x%02x is unknown(write 0x%02x)", index, (unsigned)value)); + break; + } + + if (update_cursor) { + BX_CIRRUS_THIS redraw_area(x, y, size, size); + BX_CIRRUS_THIS redraw_area(BX_CIRRUS_THIS hw_cursor.x, BX_CIRRUS_THIS hw_cursor.y, BX_CIRRUS_THIS hw_cursor.size, BX_CIRRUS_THIS hw_cursor.size); + } + + if (index <= CIRRUS_SEQENCER_MAX) { + BX_CIRRUS_THIS sequencer.reg[index] = value; + } + if (index <= VGA_SEQENCER_MAX) { + VGA_WRITE(address,value,1); + } +} + +Bit8u bx_svga_cirrus_c::svga_read_control(Bit32u address, unsigned index) +{ + switch (index) { + case 0x00: // VGA + return BX_CIRRUS_THIS control.shadow_reg0; + case 0x01: // VGA + return BX_CIRRUS_THIS control.shadow_reg1; + case 0x05: // VGA + return BX_CIRRUS_THIS control.reg[index]; + case 0x02: // VGA + case 0x03: // VGA + case 0x04: // VGA + case 0x06: // VGA + case 0x07: // VGA + case 0x08: // VGA + break; + case 0x09: // bank offset #0 + case 0x0A: // bank offset #1 + case 0x0B: + break; + + case 0x10: // BGCOLOR 0x0000ff00 + case 0x11: // FGCOLOR 0x0000ff00 + case 0x12: // BGCOLOR 0x00ff0000 + case 0x13: // FGCOLOR 0x00ff0000 + case 0x14: // BGCOLOR 0xff000000 + case 0x15: // FGCOLOR 0xff000000 + break; + + case 0x20: // BLT WIDTH 0x0000ff + case 0x21: // BLT WIDTH 0x001f00 + case 0x22: // BLT HEIGHT 0x0000ff + case 0x23: // BLT HEIGHT 0x001f00 + case 0x24: // BLT DEST PITCH 0x0000ff + case 0x25: // BLT DEST PITCH 0x001f00 + case 0x26: // BLT SRC PITCH 0x0000ff + case 0x27: // BLT SRC PITCH 0x001f00 + case 0x28: // BLT DEST ADDR 0x0000ff + case 0x29: // BLT DEST ADDR 0x00ff00 + case 0x2a: // BLT DEST ADDR 0x3f0000 + case 0x2c: // BLT SRC ADDR 0x0000ff + case 0x2d: // BLT SRC ADDR 0x00ff00 + case 0x2e: // BLT SRC ADDR 0x3f0000 + case 0x2f: // BLT WRITE MASK + case 0x30: // BLT MODE + case 0x31: // BLT STATUS + case 0x32: // RASTER OP + case 0x33: // BLT MODE EXTENSION + case 0x34: // BLT TRANSPARENT COLOR 0x00ff + case 0x35: // BLT TRANSPARENT COLOR 0xff00 + case 0x38: // BLT TRANSPARENT COLOR MASK 0x00ff + case 0x39: // BLT TRANSPARENT COLOR MASK 0xff00 + break; + + default: + BX_DEBUG(("control index 0x%02x is unknown(read)", index)); + break; + } + + if (index <= VGA_CONTROL_MAX) { + return VGA_READ(address,1); + } + + if (index <= CIRRUS_CONTROL_MAX) { + return BX_CIRRUS_THIS control.reg[index]; + } + + return 0xff; +} + +void bx_svga_cirrus_c::svga_write_control(Bit32u address, unsigned index, Bit8u value) +{ + Bit8u old_value; + + BX_DEBUG(("control: index 0x%02x write 0x%02x", index, (unsigned)value)); + + switch (index) { + case 0x00: // VGA + BX_CIRRUS_THIS control.shadow_reg0 = value; + break; + case 0x01: // VGA + BX_CIRRUS_THIS control.shadow_reg1 = value; + break; + case 0x02: // VGA + case 0x03: // VGA + case 0x04: // VGA + case 0x07: // VGA + case 0x08: // VGA + break; + case 0x05: // VGA + case 0x06: // VGA + BX_CIRRUS_THIS svga_needs_update_mode = true; + break; + case 0x09: // bank offset #0 + case 0x0A: // bank offset #1 + case 0x0B: + BX_CIRRUS_THIS control.reg[index] = value; + update_bank_ptr(0); + update_bank_ptr(1); + break; + + case 0x10: // BGCOLOR 0x0000ff00 + case 0x11: // FGCOLOR 0x0000ff00 + case 0x12: // BGCOLOR 0x00ff0000 + case 0x13: // FGCOLOR 0x00ff0000 + case 0x14: // BGCOLOR 0xff000000 + case 0x15: // FGCOLOR 0xff000000 + break; + + case 0x20: // BLT WIDTH 0x0000ff + break; + case 0x21: // BLT WIDTH 0x001f00 + value &= 0x1f; + break; + case 0x22: // BLT HEIGHT 0x0000ff + break; + case 0x23: // BLT HEIGHT 0x001f00 + value &= 0x1f; + break; + case 0x24: // BLT DEST PITCH 0x0000ff + break; + case 0x25: // BLT DEST PITCH 0x001f00 + value &= 0x1f; + break; + case 0x26: // BLT SRC PITCH 0x0000ff + break; + case 0x27: // BLT SRC PITCH 0x001f00 + value &= 0x1f; + break; + case 0x28: // BLT DEST ADDR 0x0000ff + break; + case 0x29: // BLT DEST ADDR 0x00ff00 + break; + case 0x2a: // BLT DEST ADDR 0x3f0000 + BX_CIRRUS_THIS control.reg[index] = value & 0x3f; + if (BX_CIRRUS_THIS control.reg[0x31] & CIRRUS_BLT_AUTOSTART) { + svga_bitblt(); + } + return; + case 0x2b: // BLT DEST ADDR (unused bits) + break; + case 0x2c: // BLT SRC ADDR 0x0000ff + break; + case 0x2d: // BLT SRC ADDR 0x00ff00 + break; + case 0x2e: // BLT SRC ADDR 0x3f0000 + value &= 0x3f; + break; + case 0x2f: // BLT WRITE MASK + if (value & ~0x1f) { + BX_ERROR(("BLT WRITE MASK support is not complete (value = 0x%02x)", value)); + } + break; + case 0x30: // BLT MODE + break; + case 0x31: // BLT STATUS/START + old_value = BX_CIRRUS_THIS control.reg[0x31]; + BX_CIRRUS_THIS control.reg[0x31] = value; + if (((old_value & CIRRUS_BLT_RESET) != 0) && + ((value & CIRRUS_BLT_RESET) == 0)) { + svga_reset_bitblt(); + } + else if (((old_value & CIRRUS_BLT_START) == 0) && + ((value & CIRRUS_BLT_START) != 0)) { + BX_CIRRUS_THIS control.reg[0x31] |= CIRRUS_BLT_BUSY; + svga_bitblt(); + } + return; + case 0x32: // RASTER OP + case 0x33: // BLT MODE EXTENSION + break; + case 0x34: // BLT TRANSPARENT COLOR 0x00ff + case 0x35: // BLT TRANSPARENT COLOR 0xff00 + case 0x38: // BLT TRANSPARENT COLOR MASK 0x00ff + case 0x39: // BLT TRANSPARENT COLOR MASK 0xff00 + default: + BX_DEBUG(("control index 0x%02x is unknown(write 0x%02x)", index, (unsigned)value)); + break; + } + + if (index <= CIRRUS_CONTROL_MAX) { + BX_CIRRUS_THIS control.reg[index] = value; + } + if (index <= VGA_CONTROL_MAX) { + VGA_WRITE(address,value,1); + } +} + +Bit8u bx_svga_cirrus_c::svga_mmio_vga_read(Bit32u address) +{ + Bit8u value = 0xff; +// bx_bool svga_unlock_special_old = BX_CIRRUS_THIS svga_unlock_special; + + BX_DEBUG(("MMIO vga read - address 0x%04x, value 0x%02x",address,value)); + +// BX_CIRRUS_THIS svga_unlock_special = true; + +#if BX_USE_CIRRUS_SMF + value = (Bit8u)svga_read_handler(theSvga,0x3c0+address,1); +#else // BX_USE_CIRRUS_SMF + value = (Bit8u)svga_read(0x3c0+address,1); +#endif // BX_USE_CIRRUS_SMF + +// BX_CIRRUS_THIS svga_unlock_special = svga_unlock_special_old; + return value; +} + +void bx_svga_cirrus_c::svga_mmio_vga_write(Bit32u address,Bit8u value) +{ +// bx_bool svga_unlock_special_old = BX_CIRRUS_THIS svga_unlock_special; + + BX_DEBUG(("MMIO vga write - address 0x%04x, value 0x%02x",address,value)); + +// BX_CIRRUS_THIS svga_unlock_special = true; + +#if BX_USE_CIRRUS_SMF + svga_write_handler(theSvga,0x3c0+address,value,1); +#else // BX_USE_CIRRUS_SMF + svga_write(0x3c0+address,value,1); +#endif // BX_USE_CIRRUS_SMF + +/* switch (BX_CIRRUS_THIS sequencer.reg[0x06]) { + case 0x0f: + svga_unlock_special_old = false; + break; + case 0x12: + svga_unlock_special_old = true; + break; + } + + BX_CIRRUS_THIS svga_unlock_special = svga_unlock_special_old;*/ +} + +Bit8u bx_svga_cirrus_c::svga_mmio_blt_read(Bit32u address) +{ + Bit8u value = 0xff; + + switch (address) { + case (CLGD543x_MMIO_BLTBGCOLOR+0): + value = BX_CIRRUS_THIS control.shadow_reg0; + break; + case (CLGD543x_MMIO_BLTBGCOLOR+1): + value = svga_read_control(0x3cf,0x10); + break; + case (CLGD543x_MMIO_BLTBGCOLOR+2): + value = svga_read_control(0x3cf,0x12); + break; + case (CLGD543x_MMIO_BLTBGCOLOR+3): + value = svga_read_control(0x3cf,0x14); + break; + case (CLGD543x_MMIO_BLTFGCOLOR+0): + value = BX_CIRRUS_THIS control.shadow_reg1; + break; + case (CLGD543x_MMIO_BLTFGCOLOR+1): + value = svga_read_control(0x3cf,0x11); + break; + case (CLGD543x_MMIO_BLTFGCOLOR+2): + value = svga_read_control(0x3cf,0x13); + break; + case (CLGD543x_MMIO_BLTFGCOLOR+3): + value = svga_read_control(0x3cf,0x15); + break; + case (CLGD543x_MMIO_BLTWIDTH+0): + value = svga_read_control(0x3cf,0x20); + break; + case (CLGD543x_MMIO_BLTWIDTH+1): + value = svga_read_control(0x3cf,0x21); + break; + case (CLGD543x_MMIO_BLTHEIGHT+0): + value = svga_read_control(0x3cf,0x22); + break; + case (CLGD543x_MMIO_BLTHEIGHT+1): + value = svga_read_control(0x3cf,0x23); + break; + case (CLGD543x_MMIO_BLTDESTPITCH+0): + value = svga_read_control(0x3cf,0x24); + break; + case (CLGD543x_MMIO_BLTDESTPITCH+1): + value = svga_read_control(0x3cf,0x25); + break; + case (CLGD543x_MMIO_BLTSRCPITCH+0): + value = svga_read_control(0x3cf,0x26); + break; + case (CLGD543x_MMIO_BLTSRCPITCH+1): + value = svga_read_control(0x3cf,0x27); + break; + case (CLGD543x_MMIO_BLTDESTADDR+0): + value = svga_read_control(0x3cf,0x28); + break; + case (CLGD543x_MMIO_BLTDESTADDR+1): + value = svga_read_control(0x3cf,0x29); + break; + case (CLGD543x_MMIO_BLTDESTADDR+2): + value = svga_read_control(0x3cf,0x2a); + break; + case (CLGD543x_MMIO_BLTDESTADDR+3): + value = svga_read_control(0x3cf,0x2b); + break; + case (CLGD543x_MMIO_BLTSRCADDR+0): + value = svga_read_control(0x3cf,0x2c); + break; + case (CLGD543x_MMIO_BLTSRCADDR+1): + value = svga_read_control(0x3cf,0x2d); + break; + case (CLGD543x_MMIO_BLTSRCADDR+2): + value = svga_read_control(0x3cf,0x2e); + break; + case CLGD543x_MMIO_BLTWRITEMASK: + value = svga_read_control(0x3cf,0x2f); + break; + case CLGD543x_MMIO_BLTMODE: + value = svga_read_control(0x3cf,0x30); + break; + case CLGD543x_MMIO_BLTROP: + value = svga_read_control(0x3cf,0x32); + break; + case CLGD543x_MMIO_BLTMODEEXT: + value = svga_read_control(0x3cf,0x33); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLOR+0): + value = svga_read_control(0x3cf,0x34); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLOR+1): + value = svga_read_control(0x3cf,0x35); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLOR+2): + BX_ERROR(("CLGD543x_MMIO_BLTTRANSPARENTCOLOR")); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLOR+3): + BX_ERROR(("CLGD543x_MMIO_BLTTRANSPARENTCOLOR")); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLORMASK+0): + value = svga_read_control(0x3cf,0x38); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLORMASK+1): + value = svga_read_control(0x3cf,0x39); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLORMASK+2): + BX_ERROR(("CLGD543x_MMIO_BLTTRANSPARENTCOLORMASK")); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLORMASK+3): + BX_ERROR(("CLGD543x_MMIO_BLTTRANSPARENTCOLORMASK")); + break; + case CLGD543x_MMIO_BLTSTATUS: + value = svga_read_control(0x3cf,0x31); + break; + default: + BX_ERROR(("MMIO blt read - address 0x%04x",address)); + break; + } + + BX_DEBUG(("MMIO blt read - address 0x%04x, value 0x%02x",address,value)); + + return value; +} + +void bx_svga_cirrus_c::svga_mmio_blt_write(Bit32u address,Bit8u value) +{ + BX_DEBUG(("MMIO blt write - address 0x%04x, value 0x%02x",address,value)); + + switch (address) { + case (CLGD543x_MMIO_BLTBGCOLOR+0): + BX_CIRRUS_THIS control.shadow_reg0 = value; + break; + case (CLGD543x_MMIO_BLTBGCOLOR+1): + svga_write_control(0x3cf,0x10,value); + break; + case (CLGD543x_MMIO_BLTBGCOLOR+2): + svga_write_control(0x3cf,0x12,value); + break; + case (CLGD543x_MMIO_BLTBGCOLOR+3): + svga_write_control(0x3cf,0x14,value); + break; + case (CLGD543x_MMIO_BLTFGCOLOR+0): + BX_CIRRUS_THIS control.shadow_reg1 = value; + break; + case (CLGD543x_MMIO_BLTFGCOLOR+1): + svga_write_control(0x3cf,0x11,value); + break; + case (CLGD543x_MMIO_BLTFGCOLOR+2): + svga_write_control(0x3cf,0x13,value); + break; + case (CLGD543x_MMIO_BLTFGCOLOR+3): + svga_write_control(0x3cf,0x15,value); + break; + case (CLGD543x_MMIO_BLTWIDTH+0): + svga_write_control(0x3cf,0x20,value); + break; + case (CLGD543x_MMIO_BLTWIDTH+1): + svga_write_control(0x3cf,0x21,value); + break; + case (CLGD543x_MMIO_BLTHEIGHT+0): + svga_write_control(0x3cf,0x22,value); + break; + case (CLGD543x_MMIO_BLTHEIGHT+1): + svga_write_control(0x3cf,0x23,value); + break; + case (CLGD543x_MMIO_BLTDESTPITCH+0): + svga_write_control(0x3cf,0x24,value); + break; + case (CLGD543x_MMIO_BLTDESTPITCH+1): + svga_write_control(0x3cf,0x25,value); + break; + case (CLGD543x_MMIO_BLTSRCPITCH+0): + svga_write_control(0x3cf,0x26,value); + break; + case (CLGD543x_MMIO_BLTSRCPITCH+1): + svga_write_control(0x3cf,0x27,value); + break; + case (CLGD543x_MMIO_BLTDESTADDR+0): + svga_write_control(0x3cf,0x28,value); + break; + case (CLGD543x_MMIO_BLTDESTADDR+1): + svga_write_control(0x3cf,0x29,value); + break; + case (CLGD543x_MMIO_BLTDESTADDR+2): + svga_write_control(0x3cf,0x2a,value); + break; + case (CLGD543x_MMIO_BLTDESTADDR+3): + svga_write_control(0x3cf,0x2b,value); + break; + case (CLGD543x_MMIO_BLTSRCADDR+0): + svga_write_control(0x3cf,0x2c,value); + break; + case (CLGD543x_MMIO_BLTSRCADDR+1): + svga_write_control(0x3cf,0x2d,value); + break; + case (CLGD543x_MMIO_BLTSRCADDR+2): + svga_write_control(0x3cf,0x2e,value); + break; + case CLGD543x_MMIO_BLTWRITEMASK: + svga_write_control(0x3cf,0x2f,value); + break; + case CLGD543x_MMIO_BLTMODE: + svga_write_control(0x3cf,0x30,value); + break; + case CLGD543x_MMIO_BLTMODE+1: + // unused ??? - ignored for now + break; + case CLGD543x_MMIO_BLTROP: + svga_write_control(0x3cf,0x32,value); + break; + case CLGD543x_MMIO_BLTMODEEXT: + svga_write_control(0x3cf,0x33,value); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLOR+0): + svga_write_control(0x3cf,0x34,value); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLOR+1): + svga_write_control(0x3cf,0x35,value); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLOR+2): + BX_ERROR(("CLGD543x_MMIO_BLTTRANSPARENTCOLOR")); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLOR+3): + BX_ERROR(("CLGD543x_MMIO_BLTTRANSPARENTCOLOR")); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLORMASK+0): + svga_write_control(0x3cf,0x38,value); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLORMASK+1): + svga_write_control(0x3cf,0x39,value); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLORMASK+2): + BX_ERROR(("CLGD543x_MMIO_BLTTRANSPARENTCOLORMASK")); + break; + case (CLGD543x_MMIO_BLTTRANSPARENTCOLORMASK+3): + BX_ERROR(("CLGD543x_MMIO_BLTTRANSPARENTCOLORMASK")); + break; + case CLGD543x_MMIO_BLTSTATUS: + svga_write_control(0x3cf,0x31,value); + break; + default: + BX_ERROR(("MMIO blt write - address 0x%04x, value 0x%02x",address,value)); + break; + } +} + + +///////////////////////////////////////////////////////////////////////// +// +// PCI support +// +///////////////////////////////////////////////////////////////////////// + +#if BX_SUPPORT_PCI + +void bx_svga_cirrus_c::svga_init_pcihandlers(void) +{ + int i; + + Bit8u devfunc = 0x00; + DEV_register_pci_handlers(BX_CIRRUS_THIS_PTR, + &devfunc, "cirrus", "SVGA Cirrus PCI"); + + for (i=0; i<256; i++) { + BX_CIRRUS_THIS pci_conf[i] = 0x0; + } + + WriteHostWordToLittleEndian( + &BX_CIRRUS_THIS pci_conf[0x00], PCI_VENDOR_CIRRUS); + WriteHostWordToLittleEndian( + &BX_CIRRUS_THIS pci_conf[0x02], PCI_DEVICE_CLGD5446); + WriteHostWordToLittleEndian( + &BX_CIRRUS_THIS pci_conf[0x04], + (PCI_COMMAND_IOACCESS | PCI_COMMAND_MEMACCESS)); + WriteHostDWordToLittleEndian( + &BX_CIRRUS_THIS pci_conf[0x10], + (PCI_MAP_MEM | PCI_MAP_MEMFLAGS_32BIT | PCI_MAP_MEMFLAGS_CACHEABLE)); + WriteHostDWordToLittleEndian( + &BX_CIRRUS_THIS pci_conf[0x14], + (PCI_MAP_MEM | PCI_MAP_MEMFLAGS_32BIT)); + BX_CIRRUS_THIS pci_conf[0x0a] = PCI_CLASS_SUB_VGA; + BX_CIRRUS_THIS pci_conf[0x0b] = PCI_CLASS_BASE_DISPLAY; + BX_CIRRUS_THIS pci_conf[0x0e] = PCI_CLASS_HEADERTYPE_00h; + + BX_CIRRUS_THIS pci_memaddr = 0; + BX_CIRRUS_THIS pci_mmioaddr = 0; +} + +Bit32u bx_svga_cirrus_c::pci_read_handler(Bit8u address, unsigned io_len) +{ + Bit32u ret = 0; + for (unsigned i = 0; i < io_len; i++) { + ret |= (Bit32u)(BX_CIRRUS_THIS pci_conf[address + i]) << (i*8); + } + + BX_DEBUG(("pci_read: address 0x%02x, io_len 0x%02x, value 0x%x", + (unsigned)address, (unsigned)io_len, (unsigned)ret)); + + return ret; +} + +void bx_svga_cirrus_c::pci_write_handler(Bit8u address, Bit32u value, unsigned io_len) +{ + unsigned i; + unsigned write_addr; + Bit8u new_value, old_value; + bx_bool baseaddr0_change = 0; + bx_bool baseaddr1_change = 0; + + BX_DEBUG(("pci_write: address 0x%02x, io_len 0x%02x, value 0x%x", + (unsigned)address, (unsigned)io_len, (unsigned)value)); + + if ((address > 0x17) && (address < 0x34)) + return; + for (i = 0; i < io_len; i++) { + write_addr = address + i; + old_value = BX_CIRRUS_THIS pci_conf[write_addr]; + new_value = (Bit8u)(value & 0xff); + switch (write_addr) { + case 0x04: // command bit0-7 + new_value &= PCI_COMMAND_IOACCESS | PCI_COMMAND_MEMACCESS; + new_value |= old_value & ~(PCI_COMMAND_IOACCESS | PCI_COMMAND_MEMACCESS); + break; + case 0x05: // command bit8-15 + new_value = old_value; + break; + case 0x06: // status bit0-7 + new_value = old_value & (~new_value); + break; + case 0x07: // status bit8-15 + new_value = old_value & (~new_value); + break; + case 0x10: // base address #0 + new_value = (new_value & 0xf0) | (old_value & 0x0f); + case 0x11: case 0x12: case 0x13: + baseaddr0_change |= (old_value != new_value); + break; + case 0x14: // base address #1 + new_value = (new_value & 0xf0) | (old_value & 0x0f); + case 0x15: case 0x16: case 0x17: + baseaddr1_change |= (old_value != new_value); + break; + + // read-only. + case 0x00: case 0x01: // vendor + case 0x02: case 0x03: // device + case 0x08: // revision + case 0x09: case 0x0a: case 0x0b: // class + case 0x0e: // header type + case 0x0f: // built-in self test(unimplemented) + new_value = old_value; + break; + default: + break; + } + BX_CIRRUS_THIS pci_conf[write_addr] = new_value; + value >>= 8; + } + if (baseaddr0_change) { + if (DEV_pci_set_base_mem(BX_CIRRUS_THIS_PTR, cirrus_mem_read_handler, + cirrus_mem_write_handler, + &BX_CIRRUS_THIS pci_memaddr, + &BX_CIRRUS_THIS pci_conf[0x10], + 0x2000000)) { + BX_INFO(("new pci_memaddr: 0x%04x", BX_CIRRUS_THIS pci_memaddr)); + } + } + if (baseaddr1_change) { + if (DEV_pci_set_base_mem(BX_CIRRUS_THIS_PTR, cirrus_mem_read_handler, + cirrus_mem_write_handler, + &BX_CIRRUS_THIS pci_mmioaddr, + &BX_CIRRUS_THIS pci_conf[0x14], + CIRRUS_PNPMMIO_SIZE)) { + BX_INFO(("new pci_mmioaddr = 0x%08x", BX_CIRRUS_THIS pci_mmioaddr)); + } + } +} + +#endif // BX_SUPPORT_PCI + +///////////////////////////////////////////////////////////////////////// +// +// Bitblt. +// +///////////////////////////////////////////////////////////////////////// + +void bx_svga_cirrus_c::svga_reset_bitblt(void) +{ + BX_CIRRUS_THIS control.reg[0x31] &= ~(CIRRUS_BLT_START|CIRRUS_BLT_BUSY|CIRRUS_BLT_FIFOUSED); + BX_CIRRUS_THIS bitblt.rop_handler = NULL; + BX_CIRRUS_THIS bitblt.src = NULL; + BX_CIRRUS_THIS bitblt.dst = NULL; + BX_CIRRUS_THIS bitblt.memsrc_ptr = NULL; + BX_CIRRUS_THIS bitblt.memsrc_endptr = NULL; + BX_CIRRUS_THIS bitblt.memsrc_needed = 0; + BX_CIRRUS_THIS bitblt.memdst_ptr = NULL; + BX_CIRRUS_THIS bitblt.memdst_endptr = NULL; + BX_CIRRUS_THIS bitblt.memdst_needed = 0; +} + +void bx_svga_cirrus_c::svga_bitblt() +{ + Bit16u tmp16; + Bit32u tmp32; + Bit32u dstaddr; + Bit32u srcaddr; + Bit32u offset; + + ReadHostWordFromLittleEndian(&BX_CIRRUS_THIS control.reg[0x20],tmp16); + BX_CIRRUS_THIS bitblt.bltwidth = ((int)tmp16 & (int)0x1fff) + 1; + ReadHostWordFromLittleEndian(&BX_CIRRUS_THIS control.reg[0x22],tmp16); + BX_CIRRUS_THIS bitblt.bltheight = ((int)tmp16 & (int)0x1fff) + 1; + ReadHostWordFromLittleEndian(&BX_CIRRUS_THIS control.reg[0x24],tmp16); + BX_CIRRUS_THIS bitblt.dstpitch = (int)tmp16 & (int)0x1fff; + ReadHostWordFromLittleEndian(&BX_CIRRUS_THIS control.reg[0x26],tmp16); + BX_CIRRUS_THIS bitblt.srcpitch = (int)tmp16 & (int)0x1fff; + ReadHostDWordFromLittleEndian(&BX_CIRRUS_THIS control.reg[0x28],tmp32); + dstaddr = tmp32 & (BX_CIRRUS_THIS s.memsize - 1); + ReadHostDWordFromLittleEndian(&BX_CIRRUS_THIS control.reg[0x2c],tmp32); + srcaddr = tmp32 & (BX_CIRRUS_THIS s.memsize - 1); + BX_CIRRUS_THIS bitblt.srcaddr = srcaddr; + BX_CIRRUS_THIS bitblt.bltmode = BX_CIRRUS_THIS control.reg[0x30]; + BX_CIRRUS_THIS bitblt.bltmodeext = BX_CIRRUS_THIS control.reg[0x33]; + BX_CIRRUS_THIS bitblt.bltrop = BX_CIRRUS_THIS control.reg[0x32]; + offset = dstaddr - (BX_CIRRUS_THIS disp_ptr - BX_CIRRUS_THIS s.memory); + BX_CIRRUS_THIS redraw.x = (offset % BX_CIRRUS_THIS bitblt.dstpitch) / (BX_CIRRUS_THIS svga_bpp >> 3); + BX_CIRRUS_THIS redraw.y = offset / BX_CIRRUS_THIS bitblt.dstpitch; + BX_CIRRUS_THIS redraw.w = BX_CIRRUS_THIS bitblt.bltwidth / (BX_CIRRUS_THIS svga_bpp >> 3); + BX_CIRRUS_THIS redraw.h = BX_CIRRUS_THIS bitblt.bltheight; + + BX_DEBUG(("BLT: src:0x%08x,dst 0x%08x,block %ux%u,mode 0x%02x,ROP 0x%02x", + (unsigned)srcaddr,(unsigned)dstaddr, + (unsigned)BX_CIRRUS_THIS bitblt.bltwidth,(unsigned)BX_CIRRUS_THIS bitblt.bltheight, + (unsigned)BX_CIRRUS_THIS bitblt.bltmode,(unsigned)BX_CIRRUS_THIS bitblt.bltrop)); + BX_DEBUG(("BLT: srcpitch:0x%08x,dstpitch 0x%08x,modeext 0x%02x,writemask 0x%02x", + (unsigned)BX_CIRRUS_THIS bitblt.srcpitch, + (unsigned)BX_CIRRUS_THIS bitblt.dstpitch, + (unsigned)BX_CIRRUS_THIS bitblt.bltmodeext, + BX_CIRRUS_THIS control.reg[0x2f])); + + switch (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_PIXELWIDTHMASK) { + case CIRRUS_BLTMODE_PIXELWIDTH8: + BX_CIRRUS_THIS bitblt.pixelwidth = 1; + break; + case CIRRUS_BLTMODE_PIXELWIDTH16: + BX_CIRRUS_THIS bitblt.pixelwidth = 2; + break; + case CIRRUS_BLTMODE_PIXELWIDTH24: + BX_CIRRUS_THIS bitblt.pixelwidth = 3; + break; + case CIRRUS_BLTMODE_PIXELWIDTH32: + BX_CIRRUS_THIS bitblt.pixelwidth = 4; + break; + default: + BX_PANIC(("unknown pixel width")); + goto ignoreblt; + } + + BX_CIRRUS_THIS bitblt.bltmode &= ~CIRRUS_BLTMODE_PIXELWIDTHMASK; + + if ((BX_CIRRUS_THIS bitblt.bltmode & (CIRRUS_BLTMODE_MEMSYSSRC|CIRRUS_BLTMODE_MEMSYSDEST)) + == (CIRRUS_BLTMODE_MEMSYSSRC|CIRRUS_BLTMODE_MEMSYSDEST)) { + BX_ERROR(("BLT: memory-to-memory copy is requested, ROP %02x", + (unsigned)BX_CIRRUS_THIS bitblt.bltrop)); + goto ignoreblt; + } + + if ((BX_CIRRUS_THIS bitblt.bltmodeext & CIRRUS_BLTMODEEXT_SOLIDFILL) && + (BX_CIRRUS_THIS bitblt.bltmode & (CIRRUS_BLTMODE_MEMSYSDEST | + CIRRUS_BLTMODE_TRANSPARENTCOMP | + CIRRUS_BLTMODE_PATTERNCOPY | + CIRRUS_BLTMODE_COLOREXPAND)) == + (CIRRUS_BLTMODE_PATTERNCOPY | CIRRUS_BLTMODE_COLOREXPAND)) { + BX_CIRRUS_THIS bitblt.rop_handler = svga_get_fwd_rop_handler(BX_CIRRUS_THIS bitblt.bltrop); + BX_CIRRUS_THIS bitblt.dst = BX_CIRRUS_THIS s.memory + dstaddr; + svga_solidfill(); + } else { + + if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_BACKWARDS) { + BX_CIRRUS_THIS bitblt.dstpitch = -BX_CIRRUS_THIS bitblt.dstpitch; + BX_CIRRUS_THIS bitblt.srcpitch = -BX_CIRRUS_THIS bitblt.srcpitch; + BX_CIRRUS_THIS bitblt.rop_handler = svga_get_bkwd_rop_handler(BX_CIRRUS_THIS bitblt.bltrop); + BX_CIRRUS_THIS redraw.x -= BX_CIRRUS_THIS redraw.w; + BX_CIRRUS_THIS redraw.y -= BX_CIRRUS_THIS redraw.h; + } else { + BX_CIRRUS_THIS bitblt.rop_handler = svga_get_fwd_rop_handler(BX_CIRRUS_THIS bitblt.bltrop); + } + + BX_DEBUG(("BLT redraw: x = %d, y = %d, w = %d, h = %d", BX_CIRRUS_THIS redraw.x, + BX_CIRRUS_THIS redraw.y, BX_CIRRUS_THIS redraw.w, BX_CIRRUS_THIS redraw.h)); + + // setup bitblt engine. + if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_MEMSYSSRC) { + svga_setup_bitblt_cputovideo(dstaddr,srcaddr); + } + else if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_MEMSYSDEST) { + svga_setup_bitblt_videotocpu(dstaddr,srcaddr); + } + else { + svga_setup_bitblt_videotovideo(dstaddr,srcaddr); + } + return; + } + +ignoreblt: + svga_reset_bitblt(); +} + +void bx_svga_cirrus_c::svga_setup_bitblt_cputovideo(Bit32u dstaddr,Bit32u srcaddr) +{ + Bit16u w; + + BX_CIRRUS_THIS bitblt.bltmode &= ~CIRRUS_BLTMODE_MEMSYSSRC; + + BX_CIRRUS_THIS bitblt.dst = BX_CIRRUS_THIS s.memory + dstaddr; + BX_CIRRUS_THIS bitblt.src = NULL; + + BX_CIRRUS_THIS bitblt.memsrc_ptr = &BX_CIRRUS_THIS bitblt.memsrc[0]; + BX_CIRRUS_THIS bitblt.memsrc_endptr = &BX_CIRRUS_THIS bitblt.memsrc[0]; + + if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_PATTERNCOPY) { + if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_COLOREXPAND) { + BX_CIRRUS_THIS bitblt.srcpitch = 8; + } else { + BX_CIRRUS_THIS bitblt.srcpitch = 8 * 8 * BX_CIRRUS_THIS bitblt.pixelwidth; + } + BX_CIRRUS_THIS bitblt.memsrc_needed = BX_CIRRUS_THIS bitblt.srcpitch; + BX_CIRRUS_THIS bitblt.bitblt_ptr = svga_patterncopy_memsrc_static; + } else { + if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_COLOREXPAND) { + w = BX_CIRRUS_THIS bitblt.bltwidth / BX_CIRRUS_THIS bitblt.pixelwidth; + if (BX_CIRRUS_THIS bitblt.bltmodeext & CIRRUS_BLTMODEEXT_DWORDGRANULARITY) { + BX_CIRRUS_THIS bitblt.srcpitch = (w + 31) >> 5; + } else { + BX_CIRRUS_THIS bitblt.srcpitch = (w + 7) >> 3; + } + if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_TRANSPARENTCOMP) { + BX_CIRRUS_THIS bitblt.bitblt_ptr = svga_colorexpand_transp_memsrc_static; + } else { + BX_CIRRUS_THIS bitblt.bitblt_ptr = svga_simplebitblt_memsrc_static; + } + } else { + BX_CIRRUS_THIS bitblt.srcpitch = (BX_CIRRUS_THIS bitblt.bltwidth + 3) & (~3); + BX_CIRRUS_THIS bitblt.bitblt_ptr = svga_simplebitblt_memsrc_static; + } + BX_CIRRUS_THIS bitblt.memsrc_needed = + BX_CIRRUS_THIS bitblt.srcpitch * BX_CIRRUS_THIS bitblt.bltheight; + } + BX_CIRRUS_THIS bitblt.memsrc_endptr += BX_CIRRUS_THIS bitblt.srcpitch; +} + +void bx_svga_cirrus_c::svga_setup_bitblt_videotocpu(Bit32u dstaddr,Bit32u srcaddr) +{ + BX_ERROR(("BLT: MEMSYSDEST is not implemented")); + + BX_CIRRUS_THIS bitblt.bltmode &= ~CIRRUS_BLTMODE_MEMSYSDEST; + +#if 0 + BX_CIRRUS_THIS bitblt.dst = NULL; + BX_CIRRUS_THIS bitblt.src = BX_CIRRUS_THIS s.memory + srcaddr; + + BX_CIRRUS_THIS bitblt.memdst_ptr = &BX_CIRRUS_THIS bitblt.memdst[0]; + BX_CIRRUS_THIS bitblt.memdst_endptr = &BX_CIRRUS_THIS bitblt.memdst[0]; + + BX_CIRRUS_THIS bitblt.memdst_needed = + BX_CIRRUS_THIS bitblt.bltwidth * BX_CIRRUS_THIS bitblt.bltheight; + BX_CIRRUS_THIS bitblt.memdst_needed = (BX_CIRRUS_THIS bitblt.memdst_needed + 3) & (~3); + + if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_PATTERNCOPY) { + BX_CIRRUS_THIS bitblt.bitblt_ptr = svga_patterncopy_memdst_static; + } + else { + BX_CIRRUS_THIS bitblt.bitblt_ptr = svga_simplebitblt_memdst_static; + } +#endif +} + +void bx_svga_cirrus_c::svga_setup_bitblt_videotovideo(Bit32u dstaddr,Bit32u srcaddr) +{ + BX_CIRRUS_THIS bitblt.dst = BX_CIRRUS_THIS s.memory + dstaddr; + + if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_PATTERNCOPY) { + BX_CIRRUS_THIS bitblt.bitblt_ptr = svga_patterncopy_static; + BX_CIRRUS_THIS bitblt.src = BX_CIRRUS_THIS s.memory + (srcaddr & ~0x07); + } else { + BX_CIRRUS_THIS bitblt.bitblt_ptr = svga_simplebitblt_static; + BX_CIRRUS_THIS bitblt.src = BX_CIRRUS_THIS s.memory + srcaddr; + } + + (*BX_CIRRUS_THIS bitblt.bitblt_ptr)(); + svga_reset_bitblt(); + BX_CIRRUS_THIS redraw_area(BX_CIRRUS_THIS redraw.x, BX_CIRRUS_THIS redraw.y, + BX_CIRRUS_THIS redraw.w, BX_CIRRUS_THIS redraw.h); +} + +void bx_svga_cirrus_c::svga_colorexpand(Bit8u *dst,const Bit8u *src,int count,int pixelwidth) +{ + BX_DEBUG(("svga_cirrus: COLOR EXPAND")); + + switch (pixelwidth) { + case 1: + svga_colorexpand_8(dst,src,count); + break; + case 2: + svga_colorexpand_16(dst,src,count); + break; + case 3: + svga_colorexpand_24(dst,src,count); + break; + case 4: + svga_colorexpand_32(dst,src,count); + break; + default: + BX_PANIC(("COLOREXPAND: unknown pixelwidth %u",(unsigned)pixelwidth)); + break; + } +} + +#if !BX_USE_CIRRUS_SMF +void bx_svga_cirrus_c::svga_colorexpand_8_static(void *this_ptr,Bit8u *dst,const Bit8u *src,int count) +{ + ((bx_svga_cirrus_c *)this_ptr)->svga_colorexpand_8(dst,src,count); +} + +void bx_svga_cirrus_c::svga_colorexpand_16_static(void *this_ptr,Bit8u *dst,const Bit8u *src,int count) +{ + ((bx_svga_cirrus_c *)this_ptr)->svga_colorexpand_16(dst,src,count); +} + +void bx_svga_cirrus_c::svga_colorexpand_24_static(void *this_ptr,Bit8u *dst,const Bit8u *src,int count) +{ + ((bx_svga_cirrus_c *)this_ptr)->svga_colorexpand_24(dst,src,count); +} + +void bx_svga_cirrus_c::svga_colorexpand_32_static(void *this_ptr,Bit8u *dst,const Bit8u *src,int count) +{ + ((bx_svga_cirrus_c *)this_ptr)->svga_colorexpand_32(dst,src,count); +} + +#endif // BX_USE_CIRRUS_SMF + +void bx_svga_cirrus_c::svga_colorexpand_8(Bit8u *dst,const Bit8u *src,int count) +{ + Bit8u colors[2]; + unsigned bits; + unsigned bitmask; + + colors[0] = BX_CIRRUS_THIS control.shadow_reg0; + colors[1] = BX_CIRRUS_THIS control.shadow_reg1; + + bitmask = 0x80; + bits = *src++; + for (int x = 0; x < count; x++) { + if ((bitmask & 0xff) == 0) { + bitmask = 0x80; + bits = *src++; + } + *dst++ = colors[!!(bits & bitmask)]; + bitmask >>= 1; + } +} + +void bx_svga_cirrus_c::svga_colorexpand_16(Bit8u *dst,const Bit8u *src,int count) +{ + Bit8u colors[2][2]; + unsigned bits; + unsigned bitmask; + unsigned index; + + colors[0][0] = BX_CIRRUS_THIS control.shadow_reg0; + colors[0][1] = BX_CIRRUS_THIS control.reg[0x10]; + colors[1][0] = BX_CIRRUS_THIS control.shadow_reg1; + colors[1][1] = BX_CIRRUS_THIS control.reg[0x11]; + + bitmask = 0x80; + bits = *src++; + for (int x = 0; x < count; x++) { + if ((bitmask & 0xff) == 0) { + bitmask = 0x80; + bits = *src++; + } + index = !!(bits & bitmask); + *dst++ = colors[index][0]; + *dst++ = colors[index][1]; + bitmask >>= 1; + } +} + +void bx_svga_cirrus_c::svga_colorexpand_24(Bit8u *dst,const Bit8u *src,int count) +{ + Bit8u colors[2][3]; + unsigned bits; + unsigned bitmask; + unsigned index; + + colors[0][0] = BX_CIRRUS_THIS control.shadow_reg0; + colors[0][1] = BX_CIRRUS_THIS control.reg[0x10]; + colors[0][2] = BX_CIRRUS_THIS control.reg[0x12]; + colors[1][0] = BX_CIRRUS_THIS control.shadow_reg1; + colors[1][1] = BX_CIRRUS_THIS control.reg[0x11]; + colors[1][2] = BX_CIRRUS_THIS control.reg[0x13]; + + bitmask = 0x80; + bits = *src++; + for (int x = 0; x < count; x++) { + if ((bitmask & 0xff) == 0) { + bitmask = 0x80; + bits = *src++; + } + index = !!(bits & bitmask); + *dst++ = colors[index][0]; + *dst++ = colors[index][1]; + *dst++ = colors[index][2]; + bitmask >>= 1; + } +} + +void bx_svga_cirrus_c::svga_colorexpand_32(Bit8u *dst,const Bit8u *src,int count) +{ + Bit8u colors[2][4]; + unsigned bits; + unsigned bitmask; + unsigned index; + + colors[0][0] = BX_CIRRUS_THIS control.shadow_reg0; + colors[0][1] = BX_CIRRUS_THIS control.reg[0x10]; + colors[0][2] = BX_CIRRUS_THIS control.reg[0x12]; + colors[0][3] = BX_CIRRUS_THIS control.reg[0x14]; + colors[1][0] = BX_CIRRUS_THIS control.shadow_reg1; + colors[1][1] = BX_CIRRUS_THIS control.reg[0x11]; + colors[1][2] = BX_CIRRUS_THIS control.reg[0x13]; + colors[1][3] = BX_CIRRUS_THIS control.reg[0x15]; + + bitmask = 0x80; + bits = *src++; + for (int x = 0; x < count; x++) { + if ((bitmask & 0xff) == 0) { + bitmask = 0x80; + bits = *src++; + } + index = !!(bits & bitmask); + *dst++ = colors[index][0]; + *dst++ = colors[index][1]; + *dst++ = colors[index][2]; + *dst++ = colors[index][3]; + bitmask >>= 1; + } +} + +#if !BX_USE_CIRRUS_SMF +void bx_svga_cirrus_c::svga_patterncopy_static(void *this_ptr) +{ + ((bx_svga_cirrus_c *)this_ptr)->svga_patterncopy(); +} + +void bx_svga_cirrus_c::svga_simplebitblt_static(void *this_ptr) +{ + ((bx_svga_cirrus_c *)this_ptr)->svga_simplebitblt(); +} + +void bx_svga_cirrus_c::svga_solidfill_static(void *this_ptr) +{ + ((bx_svga_cirrus_c *)this_ptr)->svga_solidfill(); +} + +void bx_svga_cirrus_c::svga_patterncopy_memsrc_static(void *this_ptr) +{ + ((bx_svga_cirrus_c *)this_ptr)->svga_patterncopy_memsrc(); +} + +void bx_svga_cirrus_c::svga_simplebitblt_memsrc_static(void *this_ptr) +{ + ((bx_svga_cirrus_c *)this_ptr)->svga_simplebitblt_memsrc(); +} + +void bx_svga_cirrus_c::svga_colorexpand_transp_memsrc_static(void *this_ptr) +{ + ((bx_svga_cirrus_c *)this_ptr)->svga_colorexpand_transp_memsrc(); +} + +#endif // !BX_USE_CIRRUS_SMF + +void bx_svga_cirrus_c::svga_patterncopy() +{ + Bit8u color[4]; + Bit8u work_colorexp[256]; + Bit8u *src, *dst; + Bit8u *dstc, *srcc, *src2; + int x, y, pattern_x, pattern_y, srcskipleft; + int patternbytes = 8 * BX_CIRRUS_THIS bitblt.pixelwidth; + int pattern_pitch = patternbytes; + int bltbytes = BX_CIRRUS_THIS bitblt.bltwidth; + unsigned bits, bits_xor, bitmask; + + if (BX_CIRRUS_THIS bitblt.pixelwidth == 3) { + pattern_x = BX_CIRRUS_THIS control.reg[0x2f] & 0x1f; + srcskipleft = pattern_x / 3; + } else { + srcskipleft = BX_CIRRUS_THIS control.reg[0x2f] & 0x07; + pattern_x = srcskipleft * BX_CIRRUS_THIS bitblt.pixelwidth; + } + if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_COLOREXPAND) { + if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_TRANSPARENTCOMP) { + if (BX_CIRRUS_THIS bitblt.bltmodeext & CIRRUS_BLTMODEEXT_COLOREXPINV) { + color[0] = BX_CIRRUS_THIS control.shadow_reg0; + color[1] = BX_CIRRUS_THIS control.reg[0x10]; + color[2] = BX_CIRRUS_THIS control.reg[0x12]; + color[3] = BX_CIRRUS_THIS control.reg[0x14]; + bits_xor = 0xff; + } else { + color[0] = BX_CIRRUS_THIS control.shadow_reg1; + color[1] = BX_CIRRUS_THIS control.reg[0x11]; + color[2] = BX_CIRRUS_THIS control.reg[0x13]; + color[3] = BX_CIRRUS_THIS control.reg[0x15]; + bits_xor = 0x00; + } + + pattern_y = BX_CIRRUS_THIS bitblt.srcaddr & 0x07; + for (y = 0; y < BX_CIRRUS_THIS bitblt.bltheight; y++) { + dst = BX_CIRRUS_THIS bitblt.dst + pattern_x; + bitmask = 0x80 >> srcskipleft; + bits = BX_CIRRUS_THIS bitblt.src[pattern_y] ^ bits_xor; + for (x = pattern_x; x < BX_CIRRUS_THIS bitblt.bltwidth; x+=BX_CIRRUS_THIS bitblt.pixelwidth) { + if ((bitmask & 0xff) == 0) { + bitmask = 0x80; + bits = BX_CIRRUS_THIS bitblt.src[pattern_y] ^ bits_xor; + } + if (bits & bitmask) { + (*BX_CIRRUS_THIS bitblt.rop_handler)( + dst, &color[0], 0, 0, BX_CIRRUS_THIS bitblt.pixelwidth, 1); + } + dst += BX_CIRRUS_THIS bitblt.pixelwidth; + bitmask >>= 1; + } + pattern_y = (pattern_y + 1) & 7; + BX_CIRRUS_THIS bitblt.dst += BX_CIRRUS_THIS bitblt.dstpitch; + } + return; + } else { + svga_colorexpand(work_colorexp,BX_CIRRUS_THIS bitblt.src,8*8,BX_CIRRUS_THIS bitblt.pixelwidth); + BX_CIRRUS_THIS bitblt.src = work_colorexp; + BX_CIRRUS_THIS bitblt.bltmode &= ~CIRRUS_BLTMODE_COLOREXPAND; + } + } else { + if (BX_CIRRUS_THIS bitblt.pixelwidth == 3) { + pattern_pitch = 32; + } + } + if (BX_CIRRUS_THIS bitblt.bltmode & ~CIRRUS_BLTMODE_PATTERNCOPY) { + BX_ERROR(("PATTERNCOPY: unknown bltmode %02x",BX_CIRRUS_THIS bitblt.bltmode)); + return; + } + + BX_DEBUG(("svga_cirrus: PATTERN COPY")); + dst = BX_CIRRUS_THIS bitblt.dst; + pattern_y = BX_CIRRUS_THIS bitblt.srcaddr & 0x07; + src = (Bit8u *)BX_CIRRUS_THIS bitblt.src; + for (y = 0; y < BX_CIRRUS_THIS bitblt.bltheight; y++) { + srcc = src + pattern_y * pattern_pitch; + dstc = dst + pattern_x; + for (x = pattern_x; x < bltbytes; x += BX_CIRRUS_THIS bitblt.pixelwidth) { + src2 = srcc + (x % patternbytes); + (*BX_CIRRUS_THIS bitblt.rop_handler)( + dstc, src2, 0, 0, BX_CIRRUS_THIS bitblt.pixelwidth, 1); + dstc += BX_CIRRUS_THIS bitblt.pixelwidth; + } + pattern_y = (pattern_y + 1) & 7; + dst += BX_CIRRUS_THIS bitblt.dstpitch; + } +} + +void bx_svga_cirrus_c::svga_simplebitblt() +{ + Bit8u color[4]; + Bit8u work_colorexp[2048]; + Bit16u w, x, y; + Bit8u *dst; + unsigned bits, bits_xor, bitmask; + int pattern_x, srcskipleft; + + if (BX_CIRRUS_THIS bitblt.pixelwidth == 3) { + pattern_x = BX_CIRRUS_THIS control.reg[0x2f] & 0x1f; + srcskipleft = pattern_x / 3; + } else { + srcskipleft = BX_CIRRUS_THIS control.reg[0x2f] & 0x07; + pattern_x = srcskipleft * BX_CIRRUS_THIS bitblt.pixelwidth; + } + if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_COLOREXPAND) { + if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_TRANSPARENTCOMP) { + if (BX_CIRRUS_THIS bitblt.bltmodeext & CIRRUS_BLTMODEEXT_COLOREXPINV) { + color[0] = BX_CIRRUS_THIS control.shadow_reg0; + color[1] = BX_CIRRUS_THIS control.reg[0x10]; + color[2] = BX_CIRRUS_THIS control.reg[0x12]; + color[3] = BX_CIRRUS_THIS control.reg[0x14]; + bits_xor = 0xff; + } else { + color[0] = BX_CIRRUS_THIS control.shadow_reg1; + color[1] = BX_CIRRUS_THIS control.reg[0x11]; + color[2] = BX_CIRRUS_THIS control.reg[0x13]; + color[3] = BX_CIRRUS_THIS control.reg[0x15]; + bits_xor = 0x00; + } + + for (y = 0; y < BX_CIRRUS_THIS bitblt.bltheight; y++) { + dst = BX_CIRRUS_THIS bitblt.dst + pattern_x; + bitmask = 0x80 >> srcskipleft; + bits = *BX_CIRRUS_THIS bitblt.src++ ^ bits_xor; + for (x = pattern_x; x < BX_CIRRUS_THIS bitblt.bltwidth; x+=BX_CIRRUS_THIS bitblt.pixelwidth) { + if ((bitmask & 0xff) == 0) { + bitmask = 0x80; + bits = *BX_CIRRUS_THIS bitblt.src++ ^ bits_xor; + } + if (bits & bitmask) { + (*BX_CIRRUS_THIS bitblt.rop_handler)( + dst, &color[0], 0, 0, BX_CIRRUS_THIS bitblt.pixelwidth, 1); + } + dst += BX_CIRRUS_THIS bitblt.pixelwidth; + bitmask >>= 1; + } + BX_CIRRUS_THIS bitblt.dst += BX_CIRRUS_THIS bitblt.dstpitch; + } + return; + } else { + w = BX_CIRRUS_THIS bitblt.bltwidth / BX_CIRRUS_THIS bitblt.pixelwidth; + for (y = 0; y < BX_CIRRUS_THIS bitblt.bltheight; y++) { + svga_colorexpand(work_colorexp,BX_CIRRUS_THIS bitblt.src, w, + BX_CIRRUS_THIS bitblt.pixelwidth); + dst = BX_CIRRUS_THIS bitblt.dst + pattern_x; + (*BX_CIRRUS_THIS bitblt.rop_handler)( + dst, work_colorexp + pattern_x, 0, 0, + BX_CIRRUS_THIS bitblt.bltwidth - pattern_x, 1); + BX_CIRRUS_THIS bitblt.src += ((w + 7) >> 3); + BX_CIRRUS_THIS bitblt.dst += BX_CIRRUS_THIS bitblt.dstpitch; + } + return; + } + } + if (BX_CIRRUS_THIS bitblt.bltmode & ~CIRRUS_BLTMODE_BACKWARDS) { + BX_ERROR(("SIMPLE BLT: unknown bltmode %02x",BX_CIRRUS_THIS bitblt.bltmode)); + return; + } + + BX_DEBUG(("svga_cirrus: BITBLT")); + (*BX_CIRRUS_THIS bitblt.rop_handler)( + BX_CIRRUS_THIS bitblt.dst, BX_CIRRUS_THIS bitblt.src, + BX_CIRRUS_THIS bitblt.dstpitch, BX_CIRRUS_THIS bitblt.srcpitch, + BX_CIRRUS_THIS bitblt.bltwidth, BX_CIRRUS_THIS bitblt.bltheight); +} + +void bx_svga_cirrus_c::svga_solidfill() +{ + Bit8u color[4]; + int x, y; + Bit8u *dst; + + BX_DEBUG(("BLT: SOLIDFILL")); + + color[0] = BX_CIRRUS_THIS control.shadow_reg1; + color[1] = BX_CIRRUS_THIS control.reg[0x11]; + color[2] = BX_CIRRUS_THIS control.reg[0x13]; + color[3] = BX_CIRRUS_THIS control.reg[0x15]; + + for (y = 0; y < BX_CIRRUS_THIS bitblt.bltheight; y++) { + dst = BX_CIRRUS_THIS bitblt.dst; + for (x = 0; x < BX_CIRRUS_THIS bitblt.bltwidth; x+=BX_CIRRUS_THIS bitblt.pixelwidth) { + (*BX_CIRRUS_THIS bitblt.rop_handler)( + dst, &color[0], 0, 0, BX_CIRRUS_THIS bitblt.pixelwidth, 1); + dst += BX_CIRRUS_THIS bitblt.pixelwidth; + } + BX_CIRRUS_THIS bitblt.dst += BX_CIRRUS_THIS bitblt.dstpitch; + } + BX_CIRRUS_THIS redraw_area(BX_CIRRUS_THIS redraw.x, BX_CIRRUS_THIS redraw.y, + BX_CIRRUS_THIS redraw.w, BX_CIRRUS_THIS redraw.h); +} + +void bx_svga_cirrus_c::svga_patterncopy_memsrc() +{ + BX_INFO(("svga_patterncopy_memsrc() - not tested")); + + BX_CIRRUS_THIS bitblt.src = &BX_CIRRUS_THIS bitblt.memsrc[0]; + svga_patterncopy(); + BX_CIRRUS_THIS bitblt.memsrc_needed = 0; + BX_CIRRUS_THIS redraw_area(BX_CIRRUS_THIS redraw.x, BX_CIRRUS_THIS redraw.y, + BX_CIRRUS_THIS redraw.w, BX_CIRRUS_THIS redraw.h); +} + +void bx_svga_cirrus_c::svga_simplebitblt_memsrc() +{ + Bit8u *srcptr = &BX_CIRRUS_THIS bitblt.memsrc[0]; + Bit8u work_colorexp[2048]; + Bit16u w; + int pattern_x; + + BX_DEBUG(("svga_cirrus: BLT, cpu-to-video")); + + if (BX_CIRRUS_THIS bitblt.pixelwidth == 3) { + pattern_x = BX_CIRRUS_THIS control.reg[0x2f] & 0x1f; + } else { + pattern_x = (BX_CIRRUS_THIS control.reg[0x2f] & 0x07) * BX_CIRRUS_THIS bitblt.pixelwidth; + } + if (BX_CIRRUS_THIS bitblt.bltmode & CIRRUS_BLTMODE_COLOREXPAND) { + if (BX_CIRRUS_THIS bitblt.bltmode & ~CIRRUS_BLTMODE_COLOREXPAND) { + BX_ERROR(("cpu-to-video BLT: unknown bltmode %02x",BX_CIRRUS_THIS bitblt.bltmode)); + return; + } + + w = BX_CIRRUS_THIS bitblt.bltwidth / BX_CIRRUS_THIS bitblt.pixelwidth; + svga_colorexpand(work_colorexp,srcptr,w,BX_CIRRUS_THIS bitblt.pixelwidth); + (*BX_CIRRUS_THIS bitblt.rop_handler)( + BX_CIRRUS_THIS bitblt.dst + pattern_x, work_colorexp + pattern_x, 0, 0, + BX_CIRRUS_THIS bitblt.bltwidth - pattern_x, 1); + } else { + if (BX_CIRRUS_THIS bitblt.bltmode != 0) { + BX_ERROR(("cpu-to-video BLT: unknown bltmode %02x",BX_CIRRUS_THIS bitblt.bltmode)); + return; + } + (*BX_CIRRUS_THIS bitblt.rop_handler)( + BX_CIRRUS_THIS bitblt.dst, srcptr, 0, 0, + BX_CIRRUS_THIS bitblt.bltwidth, 1); + } +} + +void bx_svga_cirrus_c::svga_colorexpand_transp_memsrc() +{ + Bit8u *src = &BX_CIRRUS_THIS bitblt.memsrc[0]; + Bit8u color[4]; + int x, pattern_x, srcskipleft; + Bit8u *dst; + unsigned bits, bits_xor, bitmask; + + BX_DEBUG(("BLT, cpu-to-video, transparent")); + + if (BX_CIRRUS_THIS bitblt.pixelwidth == 3) { + pattern_x = BX_CIRRUS_THIS control.reg[0x2f] & 0x1f; + srcskipleft = pattern_x / 3; + } else { + srcskipleft = BX_CIRRUS_THIS control.reg[0x2f] & 0x07; + pattern_x = srcskipleft * BX_CIRRUS_THIS bitblt.pixelwidth; + } + if (BX_CIRRUS_THIS bitblt.bltmodeext & CIRRUS_BLTMODEEXT_COLOREXPINV) { + color[0] = BX_CIRRUS_THIS control.shadow_reg0; + color[1] = BX_CIRRUS_THIS control.reg[0x10]; + color[2] = BX_CIRRUS_THIS control.reg[0x12]; + color[3] = BX_CIRRUS_THIS control.reg[0x14]; + bits_xor = 0xff; + } else { + color[0] = BX_CIRRUS_THIS control.shadow_reg1; + color[1] = BX_CIRRUS_THIS control.reg[0x11]; + color[2] = BX_CIRRUS_THIS control.reg[0x13]; + color[3] = BX_CIRRUS_THIS control.reg[0x15]; + bits_xor = 0x00; + } + + dst = BX_CIRRUS_THIS bitblt.dst + pattern_x; + bitmask = 0x80 >> srcskipleft; + bits = *src++; + for (x = pattern_x; x < BX_CIRRUS_THIS bitblt.bltwidth; x+=BX_CIRRUS_THIS bitblt.pixelwidth) { + if ((bitmask & 0xff) == 0) { + bitmask = 0x80; + bits = *src++ ^ bits_xor; + } + if (bits & bitmask) { + (*BX_CIRRUS_THIS bitblt.rop_handler)( + dst, &color[0], 0, 0, BX_CIRRUS_THIS bitblt.pixelwidth, 1); + } + dst += BX_CIRRUS_THIS bitblt.pixelwidth; + bitmask >>= 1; + } +} + + bx_bool // true if finished, false otherwise +bx_svga_cirrus_c::svga_asyncbitblt_next() +{ + int count; + int avail; + + if (BX_CIRRUS_THIS bitblt.bitblt_ptr == NULL) { + BX_PANIC(("svga_asyncbitblt_next: unexpected call")); + goto cleanup; + } + + if (BX_CIRRUS_THIS bitblt.memdst_needed > 0) { + BX_CIRRUS_THIS bitblt.memdst_needed -= BX_CIRRUS_THIS bitblt.memdst_ptr - &BX_CIRRUS_THIS bitblt.memdst[0]; + avail = BX_MIN(CIRRUS_BLT_CACHESIZE, BX_CIRRUS_THIS bitblt.memdst_needed); + BX_CIRRUS_THIS bitblt.memdst_ptr = &BX_CIRRUS_THIS bitblt.memdst[0]; + BX_CIRRUS_THIS bitblt.memdst_endptr = &BX_CIRRUS_THIS bitblt.memdst[avail]; + + if (BX_CIRRUS_THIS bitblt.memsrc_needed <= 0 && + BX_CIRRUS_THIS bitblt.memdst_needed <= 0) { + goto cleanup; + } + } + + (*BX_CIRRUS_THIS bitblt.bitblt_ptr)(); + + if (BX_CIRRUS_THIS bitblt.memsrc_needed > 0) { + BX_CIRRUS_THIS bitblt.dst += BX_CIRRUS_THIS bitblt.dstpitch; + BX_CIRRUS_THIS bitblt.memsrc_needed -= BX_CIRRUS_THIS bitblt.srcpitch; + if (BX_CIRRUS_THIS bitblt.memsrc_needed <= 0) { + BX_CIRRUS_THIS redraw_area(BX_CIRRUS_THIS redraw.x, BX_CIRRUS_THIS redraw.y, + BX_CIRRUS_THIS redraw.w, BX_CIRRUS_THIS redraw.h); + if (BX_CIRRUS_THIS bitblt.memdst_needed <= 0) { + goto cleanup; + } + } else { + count = BX_CIRRUS_THIS bitblt.memsrc_endptr - BX_CIRRUS_THIS bitblt.memsrc_ptr; + memmove(&BX_CIRRUS_THIS bitblt.memsrc[0], BX_CIRRUS_THIS bitblt.memsrc_ptr, count); + BX_CIRRUS_THIS bitblt.memsrc_ptr = &BX_CIRRUS_THIS bitblt.memsrc[count]; + } + } + + return false; + +cleanup: + svga_reset_bitblt(); + return true; +} + +///////////////////////////////////////////////////////////////////////// +// +// Raster operations. +// +///////////////////////////////////////////////////////////////////////// + +#define IMPLEMENT_FORWARD_BITBLT(name,opline) \ + static void bitblt_rop_fwd_##name( \ + Bit8u *dst,const Bit8u *src, \ + int dstpitch,int srcpitch, \ + int bltwidth,int bltheight) \ + { \ + int x,y; \ + dstpitch -= bltwidth; \ + srcpitch -= bltwidth; \ + for (y = 0; y < bltheight; y++) { \ + for (x = 0; x < bltwidth; x++) { \ + opline; \ + dst++; \ + src++; \ + } \ + dst += dstpitch; \ + src += srcpitch; \ + } \ + } + +#define IMPLEMENT_BACKWARD_BITBLT(name,opline) \ + static void bitblt_rop_bkwd_##name( \ + Bit8u *dst,const Bit8u *src, \ + int dstpitch,int srcpitch, \ + int bltwidth,int bltheight) \ + { \ + int x,y; \ + dstpitch += bltwidth; \ + srcpitch += bltwidth; \ + for (y = 0; y < bltheight; y++) { \ + for (x = 0; x < bltwidth; x++) { \ + opline; \ + dst--; \ + src--; \ + } \ + dst += dstpitch; \ + src += srcpitch; \ + } \ + } + +IMPLEMENT_FORWARD_BITBLT(0, *dst = 0) +IMPLEMENT_FORWARD_BITBLT(src_and_dst, *dst = (*src) & (*dst)) +IMPLEMENT_FORWARD_BITBLT(nop, (void)0) +IMPLEMENT_FORWARD_BITBLT(src_and_notdst, *dst = (*src) & (~(*dst))) +IMPLEMENT_FORWARD_BITBLT(notdst, *dst = ~(*dst)) +IMPLEMENT_FORWARD_BITBLT(src, *dst = *src) +IMPLEMENT_FORWARD_BITBLT(1, *dst = 0xff) +IMPLEMENT_FORWARD_BITBLT(notsrc_and_dst, *dst = (~(*src)) & (*dst)) +IMPLEMENT_FORWARD_BITBLT(src_xor_dst, *dst = (*src) ^ (*dst)) +IMPLEMENT_FORWARD_BITBLT(src_or_dst, *dst = (*src) | (*dst)) +IMPLEMENT_FORWARD_BITBLT(notsrc_or_notdst, *dst = (~(*src)) | (~(*dst))) +IMPLEMENT_FORWARD_BITBLT(src_notxor_dst, *dst = ~((*src) ^ (*dst))) +IMPLEMENT_FORWARD_BITBLT(src_or_notdst, *dst = (*src) | (~(*dst))) +IMPLEMENT_FORWARD_BITBLT(notsrc, *dst = (~(*src))) +IMPLEMENT_FORWARD_BITBLT(notsrc_or_dst, *dst = (~(*src)) | (*dst)) +IMPLEMENT_FORWARD_BITBLT(notsrc_and_notdst, *dst = (~(*src)) & (~(*dst))) + +IMPLEMENT_BACKWARD_BITBLT(0, *dst = 0) +IMPLEMENT_BACKWARD_BITBLT(src_and_dst, *dst = (*src) & (*dst)) +IMPLEMENT_BACKWARD_BITBLT(nop, (void)0) +IMPLEMENT_BACKWARD_BITBLT(src_and_notdst, *dst = (*src) & (~(*dst))) +IMPLEMENT_BACKWARD_BITBLT(notdst, *dst = ~(*dst)) +IMPLEMENT_BACKWARD_BITBLT(src, *dst = *src) +IMPLEMENT_BACKWARD_BITBLT(1, *dst = 0xff) +IMPLEMENT_BACKWARD_BITBLT(notsrc_and_dst, *dst = (~(*src)) & (*dst)) +IMPLEMENT_BACKWARD_BITBLT(src_xor_dst, *dst = (*src) ^ (*dst)) +IMPLEMENT_BACKWARD_BITBLT(src_or_dst, *dst = (*src) | (*dst)) +IMPLEMENT_BACKWARD_BITBLT(notsrc_or_notdst, *dst = (~(*src)) | (~(*dst))) +IMPLEMENT_BACKWARD_BITBLT(src_notxor_dst, *dst = ~((*src) ^ (*dst))) +IMPLEMENT_BACKWARD_BITBLT(src_or_notdst, *dst = (*src) | (~(*dst))) +IMPLEMENT_BACKWARD_BITBLT(notsrc, *dst = (~(*src))) +IMPLEMENT_BACKWARD_BITBLT(notsrc_or_dst, *dst = (~(*src)) | (*dst)) +IMPLEMENT_BACKWARD_BITBLT(notsrc_and_notdst, *dst = (~(*src)) & (~(*dst))) + +bx_cirrus_bitblt_rop_t bx_svga_cirrus_c::svga_get_fwd_rop_handler(Bit8u rop) +{ + bx_cirrus_bitblt_rop_t rop_handler = bitblt_rop_fwd_nop; + + switch (rop) + { + case CIRRUS_ROP_0: + rop_handler = bitblt_rop_fwd_0; + break; + case CIRRUS_ROP_SRC_AND_DST: + rop_handler = bitblt_rop_fwd_src_and_dst; + break; + case CIRRUS_ROP_NOP: + rop_handler = bitblt_rop_fwd_nop; + break; + case CIRRUS_ROP_SRC_AND_NOTDST: + rop_handler = bitblt_rop_fwd_src_and_notdst; + break; + case CIRRUS_ROP_NOTDST: + rop_handler = bitblt_rop_fwd_notdst; + break; + case CIRRUS_ROP_SRC: + rop_handler = bitblt_rop_fwd_src; + break; + case CIRRUS_ROP_1: + rop_handler = bitblt_rop_fwd_1; + break; + case CIRRUS_ROP_NOTSRC_AND_DST: + rop_handler = bitblt_rop_fwd_notsrc_and_dst; + break; + case CIRRUS_ROP_SRC_XOR_DST: + rop_handler = bitblt_rop_fwd_src_xor_dst; + break; + case CIRRUS_ROP_SRC_OR_DST: + rop_handler = bitblt_rop_fwd_src_or_dst; + break; + case CIRRUS_ROP_NOTSRC_OR_NOTDST: + rop_handler = bitblt_rop_fwd_notsrc_or_notdst; + break; + case CIRRUS_ROP_SRC_NOTXOR_DST: + rop_handler = bitblt_rop_fwd_src_notxor_dst; + break; + case CIRRUS_ROP_SRC_OR_NOTDST: + rop_handler = bitblt_rop_fwd_src_or_notdst; + break; + case CIRRUS_ROP_NOTSRC: + rop_handler = bitblt_rop_fwd_notsrc; + break; + case CIRRUS_ROP_NOTSRC_OR_DST: + rop_handler = bitblt_rop_fwd_notsrc_or_dst; + break; + case CIRRUS_ROP_NOTSRC_AND_NOTDST: + rop_handler = bitblt_rop_fwd_notsrc_and_notdst; + break; + default: + BX_ERROR(("unknown ROP %02x",rop)); + break; + } + + return rop_handler; +} + +bx_cirrus_bitblt_rop_t bx_svga_cirrus_c::svga_get_bkwd_rop_handler(Bit8u rop) +{ + bx_cirrus_bitblt_rop_t rop_handler = bitblt_rop_bkwd_nop; + + switch (rop) + { + case CIRRUS_ROP_0: + rop_handler = bitblt_rop_bkwd_0; + break; + case CIRRUS_ROP_SRC_AND_DST: + rop_handler = bitblt_rop_bkwd_src_and_dst; + break; + case CIRRUS_ROP_NOP: + rop_handler = bitblt_rop_bkwd_nop; + break; + case CIRRUS_ROP_SRC_AND_NOTDST: + rop_handler = bitblt_rop_bkwd_src_and_notdst; + break; + case CIRRUS_ROP_NOTDST: + rop_handler = bitblt_rop_bkwd_notdst; + break; + case CIRRUS_ROP_SRC: + rop_handler = bitblt_rop_bkwd_src; + break; + case CIRRUS_ROP_1: + rop_handler = bitblt_rop_bkwd_1; + break; + case CIRRUS_ROP_NOTSRC_AND_DST: + rop_handler = bitblt_rop_bkwd_notsrc_and_dst; + break; + case CIRRUS_ROP_SRC_XOR_DST: + rop_handler = bitblt_rop_bkwd_src_xor_dst; + break; + case CIRRUS_ROP_SRC_OR_DST: + rop_handler = bitblt_rop_bkwd_src_or_dst; + break; + case CIRRUS_ROP_NOTSRC_OR_NOTDST: + rop_handler = bitblt_rop_bkwd_notsrc_or_notdst; + break; + case CIRRUS_ROP_SRC_NOTXOR_DST: + rop_handler = bitblt_rop_bkwd_src_notxor_dst; + break; + case CIRRUS_ROP_SRC_OR_NOTDST: + rop_handler = bitblt_rop_bkwd_src_or_notdst; + break; + case CIRRUS_ROP_NOTSRC: + rop_handler = bitblt_rop_bkwd_notsrc; + break; + case CIRRUS_ROP_NOTSRC_OR_DST: + rop_handler = bitblt_rop_bkwd_notsrc_or_dst; + break; + case CIRRUS_ROP_NOTSRC_AND_NOTDST: + rop_handler = bitblt_rop_bkwd_notsrc_and_notdst; + break; + default: + BX_ERROR(("unknown ROP %02x",rop)); + break; + } + + return rop_handler; +} + +#endif // BX_SUPPORT_CLGD54XX diff --git a/bochs/iodev/svga_cirrus.h b/bochs/iodev/svga_cirrus.h new file mode 100644 index 00000000..754bb066 --- /dev/null +++ b/bochs/iodev/svga_cirrus.h @@ -0,0 +1,273 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2004 Makoto Suzuki (suzu) +// Volker Ruppert (vruppert) +// Robin Kay (komadori) +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#if BX_SUPPORT_CLGD54XX + +#if BX_USE_CIRRUS_SMF +# define BX_CIRRUS_SMF static +# define BX_CIRRUS_THIS theSvga-> +# define BX_CIRRUS_THIS_PTR theSvga +#else +# define BX_CIRRUS_SMF +# define BX_CIRRUS_THIS this-> +# define BX_CIRRUS_THIS_PTR this +#endif // BX_USE_CIRRUS_SMF + +// 0x3b4,0x3d4 +#define VGA_CRTC_MAX 0x18 +#define CIRRUS_CRTC_MAX 0x27 +// 0x3c4 +#define VGA_SEQENCER_MAX 0x04 +#define CIRRUS_SEQENCER_MAX 0x1f +// 0x3ce +#define VGA_CONTROL_MAX 0x08 +#define CIRRUS_CONTROL_MAX 0x39 + +// Size of internal cache memory for bitblt. (must be >= 256 and 4-byte aligned) +#define CIRRUS_BLT_CACHESIZE (2048 * 4) + +#if BX_SUPPORT_PCI +#define CIRRUS_VIDEO_MEMORY_MB 4 +#else +#define CIRRUS_VIDEO_MEMORY_MB 2 +#endif + +#define CIRRUS_VIDEO_MEMORY_KB (CIRRUS_VIDEO_MEMORY_MB * 1024) +#define CIRRUS_VIDEO_MEMORY_BYTES (CIRRUS_VIDEO_MEMORY_KB * 1024) + +typedef void (*bx_cirrus_bitblt_rop_t)( + Bit8u *dst,const Bit8u *src, + int dstpitch,int srcpitch, + int bltwidth,int bltheight); + +class bx_svga_cirrus_c : public bx_vga_c +#if BX_SUPPORT_PCI + , public bx_pci_device_stub_c +#endif +{ +public: + bx_svga_cirrus_c(); + virtual ~bx_svga_cirrus_c(); + + virtual void init(void); + virtual void reset(unsigned type); + virtual void redraw_area(unsigned x0, unsigned y0, + unsigned width, unsigned height); + virtual Bit8u mem_read(bx_phy_address addr); + virtual void mem_write(bx_phy_address addr, Bit8u value); + virtual void get_text_snapshot(Bit8u **text_snapshot, + unsigned *txHeight, unsigned *txWidth); + virtual void trigger_timer(void *this_ptr); + virtual Bit8u get_actl_palette_idx(Bit8u index); + virtual void register_state(void); + virtual void after_restore_state(void); + +#if BX_SUPPORT_PCI + virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len); + virtual void pci_write_handler(Bit8u address, Bit32u value, unsigned io_len); +#endif + +private: + static Bit32u svga_read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void svga_write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_CIRRUS_SMF + Bit32u svga_read(Bit32u address, unsigned io_len); + void svga_write(Bit32u address, Bit32u value, unsigned io_len); +#endif + BX_CIRRUS_SMF void mem_write_mode4and5_8bpp(Bit8u mode, Bit32u offset, Bit8u value); + BX_CIRRUS_SMF void mem_write_mode4and5_16bpp(Bit8u mode, Bit32u offset, Bit8u value); + + static void svga_timer_handler(void *); + static Bit64s svga_param_handler(bx_param_c *param, int set, Bit64s val); + BX_CIRRUS_SMF void svga_timer(void); + BX_CIRRUS_SMF void svga_modeupdate(void); + BX_CIRRUS_SMF void svga_update(void); + + BX_CIRRUS_SMF void svga_init_members(); + + BX_CIRRUS_SMF void draw_hardware_cursor(unsigned, unsigned, bx_svga_tileinfo_t *); + + // bank memory + BX_CIRRUS_SMF void update_bank_ptr(Bit8u bank_index); + // 0x3b4-0x3b5,0x3d4-0x3d5 + BX_CIRRUS_SMF Bit8u svga_read_crtc(Bit32u address, unsigned index); + BX_CIRRUS_SMF void svga_write_crtc(Bit32u address, unsigned index, Bit8u value); + // 0x3c4-0x3c5 + BX_CIRRUS_SMF Bit8u svga_read_sequencer(Bit32u address, unsigned index); + BX_CIRRUS_SMF void svga_write_sequencer(Bit32u address, unsigned index, Bit8u value); + // 0x3ce-0x3cf + BX_CIRRUS_SMF Bit8u svga_read_control(Bit32u address, unsigned index); + BX_CIRRUS_SMF void svga_write_control(Bit32u address, unsigned index, Bit8u value); + // memory-mapped I/O + BX_CIRRUS_SMF Bit8u svga_mmio_vga_read(Bit32u address); + BX_CIRRUS_SMF void svga_mmio_vga_write(Bit32u address,Bit8u value); + BX_CIRRUS_SMF Bit8u svga_mmio_blt_read(Bit32u address); + BX_CIRRUS_SMF void svga_mmio_blt_write(Bit32u address,Bit8u value); + + BX_CIRRUS_SMF void svga_reset_bitblt(void); + BX_CIRRUS_SMF void svga_bitblt(); + + BX_CIRRUS_SMF void svga_colorexpand(Bit8u *dst,const Bit8u *src,int count,int pixelwidth); + +#if BX_USE_CIRRUS_SMF + #define svga_colorexpand_8_static svga_colorexpand_8 + #define svga_colorexpand_16_static svga_colorexpand_16 + #define svga_colorexpand_24_static svga_colorexpand_24 + #define svga_colorexpand_32_static svga_colorexpand_32 +#else + static void svga_colorexpand_8_static(void *this_ptr,Bit8u *dst,const Bit8u *src,int count); + static void svga_colorexpand_16_static(void *this_ptr,Bit8u *dst,const Bit8u *src,int count); + static void svga_colorexpand_24_static(void *this_ptr,Bit8u *dst,const Bit8u *src,int count); + static void svga_colorexpand_32_static(void *this_ptr,Bit8u *dst,const Bit8u *src,int count); +#endif + + BX_CIRRUS_SMF void svga_colorexpand_8(Bit8u *dst,const Bit8u *src,int count); + BX_CIRRUS_SMF void svga_colorexpand_16(Bit8u *dst,const Bit8u *src,int count); + BX_CIRRUS_SMF void svga_colorexpand_24(Bit8u *dst,const Bit8u *src,int count); + BX_CIRRUS_SMF void svga_colorexpand_32(Bit8u *dst,const Bit8u *src,int count); + + BX_CIRRUS_SMF void svga_setup_bitblt_cputovideo(Bit32u dstaddr,Bit32u srcaddr); + BX_CIRRUS_SMF void svga_setup_bitblt_videotocpu(Bit32u dstaddr,Bit32u srcaddr); + BX_CIRRUS_SMF void svga_setup_bitblt_videotovideo(Bit32u dstaddr,Bit32u srcaddr); + +#if BX_USE_CIRRUS_SMF == 0 + static void svga_patterncopy_static(void *this_ptr); + static void svga_simplebitblt_static(void *this_ptr); + static void svga_solidfill_static(void *this_ptr); + static void svga_patterncopy_memsrc_static(void *this_ptr); + static void svga_simplebitblt_memsrc_static(void *this_ptr); + static void svga_colorexpand_transp_memsrc_static(void *this_ptr); +#else + #define svga_patterncopy_static svga_patterncopy + #define svga_simplebitblt_static svga_simplebitblt + #define svga_solidfill_static svga_solidfill + #define svga_patterncopy_memsrc_static svga_patterncopy_memsrc + #define svga_simplebitblt_memsrc_static svga_simplebitblt_memsrc + #define svga_colorexpand_transp_memsrc_static svga_colorexpand_transp_memsrc +#endif + + BX_CIRRUS_SMF void svga_patterncopy(); + BX_CIRRUS_SMF void svga_simplebitblt(); + BX_CIRRUS_SMF void svga_solidfill(); + BX_CIRRUS_SMF void svga_patterncopy_memsrc(); + BX_CIRRUS_SMF void svga_simplebitblt_memsrc(); + BX_CIRRUS_SMF void svga_colorexpand_transp_memsrc(); + + BX_CIRRUS_SMF bx_bool svga_asyncbitblt_next(); + BX_CIRRUS_SMF bx_cirrus_bitblt_rop_t svga_get_fwd_rop_handler(Bit8u rop); + BX_CIRRUS_SMF bx_cirrus_bitblt_rop_t svga_get_bkwd_rop_handler(Bit8u rop); + + struct { + Bit8u index; + Bit8u reg[CIRRUS_CRTC_MAX+1]; + } crtc; // 0x3b4-5/0x3d4-5 + struct { + Bit8u index; + Bit8u reg[CIRRUS_SEQENCER_MAX+1]; + } sequencer; // 0x3c4-5 + struct { + Bit8u index; + Bit8u reg[CIRRUS_CONTROL_MAX+1]; + Bit8u shadow_reg0; + Bit8u shadow_reg1; + } control; // 0x3ce-f + struct { + unsigned lockindex; + Bit8u data; + Bit8u palette[48]; + } hidden_dac; // 0x3c6 + + bx_bool svga_unlock_special; + bx_bool svga_needs_update_tile; + bx_bool svga_needs_update_dispentire; + bx_bool svga_needs_update_mode; + + unsigned svga_xres; + unsigned svga_yres; + unsigned svga_pitch; + unsigned svga_bpp; + unsigned svga_dispbpp; + + Bit32u bank_base[2]; + Bit32u bank_limit[2]; + Bit8u *disp_ptr; +#if BX_SUPPORT_PCI + bx_bool pci_enabled; +#endif + + struct { + bx_cirrus_bitblt_rop_t rop_handler; + int pixelwidth; + int bltwidth; + int bltheight; + int dstpitch; + int srcpitch; + Bit8u bltmode; + Bit8u bltmodeext; + Bit8u bltrop; + Bit8u *dst; + const Bit8u *src; + Bit32u srcaddr; +#if BX_USE_CIRRUS_SMF + void (*bitblt_ptr)(); +#else + void (*bitblt_ptr)(void *this_ptr); +#endif + Bit8u *memsrc_ptr; // CPU -> video + Bit8u *memsrc_endptr; + int memsrc_needed; + Bit8u *memdst_ptr; // video -> CPU + Bit8u *memdst_endptr; + int memdst_bytesperline; + int memdst_needed; + Bit8u memsrc[CIRRUS_BLT_CACHESIZE]; + Bit8u memdst[CIRRUS_BLT_CACHESIZE]; + } bitblt; + + struct { + Bit16u x, y, size; + } hw_cursor; + + struct { + Bit16u x, y, w, h; + } redraw; + + bx_bool is_unlocked() { return svga_unlock_special; } + + bx_bool banking_granularity_is_16k() { return !!(control.reg[0x0B] & 0x20); } + bx_bool banking_is_dual() { return !!(control.reg[0x0B] & 0x01); } + +#if BX_SUPPORT_PCI + BX_CIRRUS_SMF void svga_init_pcihandlers(void); + + BX_CIRRUS_SMF bx_bool cirrus_mem_read_handler(bx_phy_address addr, unsigned len, void *data, void *param); + BX_CIRRUS_SMF bx_bool cirrus_mem_write_handler(bx_phy_address addr, unsigned len, void *data, void *param); + + Bit8u pci_conf[256]; + Bit32u pci_memaddr; + Bit32u pci_mmioaddr; +#endif +}; + +#endif // BX_SUPPORT_CLGD54XX diff --git a/bochs/iodev/unmapped.cc b/bochs/iodev/unmapped.cc new file mode 100644 index 00000000..54086be9 --- /dev/null +++ b/bochs/iodev/unmapped.cc @@ -0,0 +1,285 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE +#include "iodev.h" +#include "unmapped.h" + +#define LOG_THIS theUnmappedDevice-> + +bx_unmapped_c *theUnmappedDevice = NULL; + +int libunmapped_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theUnmappedDevice = new bx_unmapped_c(); + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theUnmappedDevice, BX_PLUGIN_UNMAPPED); + return(0); // Success +} + +void libunmapped_LTX_plugin_fini(void) +{ + delete theUnmappedDevice; +} + +bx_unmapped_c::bx_unmapped_c(void) +{ + put("UNMP"); +} + +bx_unmapped_c::~bx_unmapped_c(void) +{ + BX_DEBUG(("Exit")); +} + +void bx_unmapped_c::init(void) +{ + DEV_register_default_ioread_handler(this, read_handler, "Unmapped", 7); + DEV_register_default_iowrite_handler(this, write_handler, "Unmapped", 7); + + s.port80 = 0x00; + s.port8e = 0x00; + s.shutdown = 0; + s.port_e9_hack = SIM->get_param_bool(BXPN_PORT_E9_HACK)->get(); +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions +Bit32u bx_unmapped_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_UM_SMF + bx_unmapped_c *class_ptr = (bx_unmapped_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_unmapped_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_UM_SMF + UNUSED(io_len); + + Bit32u retval; + + // This function gets called for access to any IO ports which + // are not mapped to any device handler. Reads return 0 + + if (address >= 0x02e0 && address <= 0x02ef) { + retval = 0; + goto return_from_read; + } + + switch (address) { + case 0x80: + retval = BX_UM_THIS s.port80; + break; + case 0x8e: + retval = BX_UM_THIS s.port8e; + break; + + // Unused port on ISA - this can be used by the emulated code + // to detect it is running inside Bochs and that the debugging + // features are available (write 0xFF or something on unused + // port 0x80, then read from 0xe9, if value is 0xe9, debug + // output is available) (see write() for that) -- Andreas and Emmanuel + case 0xe9: + if (BX_UM_THIS s.port_e9_hack) { + retval = 0xe9; + } + else { + retval = 0xffffffff; + } + break; + + case 0x03df: + retval = 0xffffffff; + BX_DEBUG(("unsupported IO read from port %04x (CGA)", address)); + break; + case 0x023a: + case 0x02f8: /* UART */ + case 0x02f9: /* UART */ + case 0x02fb: /* UART */ + case 0x02fc: /* UART */ + case 0x02fd: /* UART */ + case 0x02ea: + case 0x02eb: + case 0x03e8: + case 0x03e9: + case 0x03ea: + case 0x03eb: + case 0x03ec: + case 0x03ed: + case 0x03f8: /* UART */ + case 0x03f9: /* UART */ + case 0x03fb: /* UART */ + case 0x03fc: /* UART */ + case 0x03fd: /* UART */ + case 0x17c6: + retval = 0xffffffff; + break; + default: + retval = 0xffffffff; + } + +return_from_read: + + switch (io_len) { + case 1: + retval = (Bit8u)retval; + BX_DEBUG(("unmapped: 8-bit read from %04x = %02x", address, retval)); + break; + case 2: + retval = (Bit16u)retval; + BX_DEBUG(("unmapped: 16-bit read from %04x = %04x", address, retval)); + break; + case 4: + BX_DEBUG(("unmapped: 32-bit read from %04x = %08x", address, retval)); + break; + default: + BX_PANIC(("unmapped: %d-bit read from %04x = %x", io_len * 8, address, retval)); + } + + return retval; +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_unmapped_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_UM_SMF + bx_unmapped_c *class_ptr = (bx_unmapped_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_unmapped_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_UM_SMF + UNUSED(io_len); + + // This function gets called for access to any IO ports which + // are not mapped to any device handler. Writes to an unmapped + // IO port are ignored. + + if (address >= 0x02e0 && address <= 0x02ef) + goto return_from_write; + + switch (address) { + case 0x80: // diagnostic test port to display progress of POST + //BX_DEBUG(("Diagnostic port 80h: write = %02xh", (unsigned) value)); + BX_UM_THIS s.port80 = value; + break; + + case 0x8e: // ??? + BX_UM_THIS s.port8e = value; + break; + + // This port doesn't exist on normal ISA architecture. However, + // we define a convention here, to display on the console of the + // system running Bochs, anything that is written to it. The + // idea is to provide debug output very early when writing + // BIOS or OS code for example, without having to bother with + // properly setting up a serial port or anything. + // + // Idea by Andreas Beck (andreas.beck@ggi-project.org) + + case 0xe9: + if (BX_UM_THIS s.port_e9_hack) { + putchar(value); + fflush(stdout); + } + break; + + case 0xed: // Dummy port used as I/O delay + break; + case 0xee: // ??? + break; + + case 0x2f2: + case 0x2f3: + case 0x2f4: + case 0x2f5: + case 0x2f6: + case 0x2f7: + case 0x3e8: + case 0x3e9: + case 0x3eb: + case 0x3ec: + case 0x3ed: + // BX_DEBUG(("unsupported IO write to port %04x of %02x", address, value)); + break; + + case 0x8900: // Shutdown port, could be moved in a PM device + // or a host <-> guest communication device + switch (value) { + case 'S': if (BX_UM_THIS s.shutdown == 0) BX_UM_THIS s.shutdown = 1; break; + case 'h': if (BX_UM_THIS s.shutdown == 1) BX_UM_THIS s.shutdown = 2; break; + case 'u': if (BX_UM_THIS s.shutdown == 2) BX_UM_THIS s.shutdown = 3; break; + case 't': if (BX_UM_THIS s.shutdown == 3) BX_UM_THIS s.shutdown = 4; break; + case 'd': if (BX_UM_THIS s.shutdown == 4) BX_UM_THIS s.shutdown = 5; break; + case 'o': if (BX_UM_THIS s.shutdown == 5) BX_UM_THIS s.shutdown = 6; break; + case 'w': if (BX_UM_THIS s.shutdown == 6) BX_UM_THIS s.shutdown = 7; break; + case 'n': if (BX_UM_THIS s.shutdown == 7) BX_UM_THIS s.shutdown = 8; break; +#if BX_DEBUGGER + // Very handy for debugging: + // output 'D' to port 8900, and bochs quits to debugger + case 'D': bx_debug_break(); break; +#endif + default : BX_UM_THIS s.shutdown = 0; break; + } + if (BX_UM_THIS s.shutdown == 8) { + bx_user_quit = 1; + LOG_THIS setonoff(LOGLEV_PANIC, ACT_FATAL); + BX_PANIC(("Shutdown port: shutdown requested")); + } + break; + + case 0xfedc: + bx_dbg.debugger = (value > 0); + BX_DEBUG(("DEBUGGER = %u", (unsigned) bx_dbg.debugger)); + break; + + default: + break; + } + +return_from_write: + + switch (io_len) { + case 1: + BX_DEBUG(("unmapped: 8-bit write to %04x = %02x", address, value)); + break; + case 2: + BX_DEBUG(("unmapped: 16-bit write to %04x = %04x", address, value)); + break; + case 4: + BX_DEBUG(("unmapped: 32-bit write to %04x = %08x", address, value)); + break; + default: + BX_PANIC(("unmapped: %d-bit write to %04x = %x", io_len * 8, address, value)); + break; + } +} diff --git a/bochs/iodev/unmapped.h b/bochs/iodev/unmapped.h new file mode 100644 index 00000000..7ac9ecb1 --- /dev/null +++ b/bochs/iodev/unmapped.h @@ -0,0 +1,56 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_IODEV_UNMAPPED_H +#define BX_IODEV_UNMAPPED_H + +#if BX_USE_UM_SMF +# define BX_UM_SMF static +# define BX_UM_THIS theUnmappedDevice-> +#else +# define BX_UM_SMF +# define BX_UM_THIS this-> +#endif + +class bx_unmapped_c : public bx_devmodel_c { +public: + bx_unmapped_c(); + virtual ~bx_unmapped_c(); + virtual void init(void); + virtual void reset(unsigned type) {} + +private: + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_UM_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif + + struct { + Bit8u port80; + Bit8u port8e; + Bit8u shutdown; + bx_bool port_e9_hack; + } s; // state information +}; + +#endif diff --git a/bochs/iodev/usb_common.cc b/bochs/iodev/usb_common.cc new file mode 100644 index 00000000..e298831e --- /dev/null +++ b/bochs/iodev/usb_common.cc @@ -0,0 +1,422 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 Benjamin D Lunt (fys at frontiernet net) +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Experimental PCI USB adapter + +/* Notes: + - Currently, this code is quite messy. This is for all of the debugging + I have been doing. Many BX_INFO()'s here and there. + - My purpose of coding this emulation was/is to learn about the USB. + It has been a challenge, but I have learned a lot. + - If I forget, there are a lot of BX_INFO's that can be changed to BX_DEBUG's. + - 31 July 2006: + I now have a Beagle USB Protocol Analyzer from Total Phase for my research. + (http://www.totalphase.com/products/beagle/usb/) + With this device, I plan on doing a lot of research and development to get this + code to a state where it is actually very useful. I plan on adding support + of many "plug-in" type modules so that you can simply add a plug-in for your + specific device without having to modify the root code. + I hope to have some working code to upload to the CVS as soon as possible. + Thanks to Total Phase for their help in my research and the development of + this project. + */ + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_PCI && BX_SUPPORT_PCIUSB + +#include "usb_common.h" +#include "usb_hid.h" +#include "usb_hub.h" +#include "usb_msd.h" +#include "usb_printer.h" + +#define LOG_THIS + +bx_usb_devctl_c* theUsbDevCtl = NULL; + +int libusb_common_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theUsbDevCtl = new bx_usb_devctl_c; + bx_devices.pluginUsbDevCtl = theUsbDevCtl; + return(0); // Success +} + +void libusb_common_LTX_plugin_fini(void) +{ + delete theUsbDevCtl; +} + +int bx_usb_devctl_c::init_device(bx_list_c *portconf, logfunctions *hub, void **dev, bx_list_c *sr_list) +{ + usbdev_type type = USB_DEV_TYPE_NONE; + int ports; + usb_device_c **device = (usb_device_c**)dev; + const char *devname = NULL; + + devname = ((bx_param_string_c*)portconf->get_by_name("device"))->getptr(); + if (!strcmp(devname, "mouse")) { + type = USB_DEV_TYPE_MOUSE; + *device = new usb_hid_device_c(type); + } else if (!strcmp(devname, "tablet")) { + type = USB_DEV_TYPE_TABLET; + *device = new usb_hid_device_c(type); + } else if (!strcmp(devname, "keypad")) { + type = USB_DEV_TYPE_KEYPAD; + *device = new usb_hid_device_c(type); + } else if (!strncmp(devname, "disk", 4)) { + if ((strlen(devname) > 5) && (devname[4] == ':')) { + type = USB_DEV_TYPE_DISK; + *device = new usb_msd_device_c(type, devname+5); + } else { + hub->panic("USB device 'disk' needs a filename separated with a colon"); + return type; + } + } else if (!strncmp(devname, "cdrom", 5)) { + if ((strlen(devname) > 6) && (devname[5] == ':')) { + type = USB_DEV_TYPE_CDROM; + *device = new usb_msd_device_c(type, devname+6); + } else { + hub->panic("USB device 'cdrom' needs a filename separated with a colon"); + return type; + } + } else if (!strncmp(devname, "hub", 3)) { + type = USB_DEV_TYPE_HUB; + ports = 4; + if (strlen(devname) > 3) { + if (devname[3] == ':') { + ports = atoi(&devname[4]); + if ((ports < 2) || (ports > BX_N_USB_HUB_PORTS)) { + hub->panic("USB device 'hub': invalid number of ports"); + } + } else { + hub->panic("USB device 'hub' needs the port count separated with a colon"); + } + } + *device = new usb_hub_device_c(ports); + } else if (!strncmp(devname, "printer", 7)) { + if ((strlen(devname) > 8) && (devname[7] == ':')) { + type = USB_DEV_TYPE_PRINTER; + *device = new usb_printer_device_c(type, devname+8); + } else { + hub->panic("USB device 'printer' needs a filename separated with a colon"); + return type; + } + } else { + hub->panic("unknown USB device: %s", devname); + return type; + } + if (*device != NULL) { + (*device)->register_state(sr_list); + parse_port_options(*device, portconf); + } + return type; +} + +void bx_usb_devctl_c::parse_port_options(usb_device_c *device, bx_list_c *portconf) +{ + const char *raw_options; + char *options; + unsigned i, string_i; + int optc, speed = USB_SPEED_LOW; + char *opts[16]; + char *ptr; + char string[512]; + size_t len; + + memset(opts, 0, sizeof(opts)); + optc = 0; + raw_options = ((bx_param_string_c*)portconf->get_by_name("options"))->getptr(); + len = strlen(raw_options); + if (len > 0) { + options = new char[len + 1]; + strcpy(options, raw_options); + ptr = strtok(options, ","); + while (ptr) { + string_i = 0; + for (i=0; iget_maxspeed()) { + device->set_speed(speed); + } else { + BX_ERROR(("unsupported USB device speed: '%s'", opts[i]+6)); + } + } else if (!device->set_option(opts[i])) { + BX_ERROR(("unknown USB device option: '%s'", opts[i])); + } + } + for (i = 1; i < (unsigned)optc; i++) { + if (opts[i] != NULL) { + free(opts[i]); + opts[i] = NULL; + } + } +} + +void bx_usb_devctl_c::usb_send_msg(void *dev, int msg) +{ + ((usb_device_c*)dev)->usb_send_msg(msg); +} + +// Dumps the contents of a buffer to the log file +void usb_device_c::usb_dump_packet(Bit8u *data, unsigned size) +{ + char the_packet[256], str[16]; + strcpy(the_packet, "Packet contents (in hex):"); + unsigned offset = 0; + for (unsigned p=0; p 32) { + *q = 0; + return 0; + } + *q++ = 2 * len + 2; + *q++ = 3; + for(i = 0; i < len; i++) { + *q++ = str[i]; + *q++ = 0; + } + return q - buf; +} + +// generic USB packet handler + +#define SETUP_STATE_IDLE 0 +#define SETUP_STATE_DATA 1 +#define SETUP_STATE_ACK 2 + +int usb_device_c::handle_packet(USBPacket *p) +{ + int l, ret = 0; + int len = p->len; + Bit8u *data = p->data; + + switch(p->pid) { + case USB_MSG_ATTACH: + d.state = USB_STATE_ATTACHED; + break; + case USB_MSG_DETACH: + d.state = USB_STATE_NOTATTACHED; + break; + case USB_MSG_RESET: + d.remote_wakeup = 0; + d.addr = 0; + d.state = USB_STATE_DEFAULT; + handle_reset(); + break; + case USB_TOKEN_SETUP: + if (d.state < USB_STATE_DEFAULT || p->devaddr != d.addr) + return USB_RET_NODEV; + if (len != 8) + goto fail; + d.stall = 0; + memcpy(d.setup_buf, data, 8); + d.setup_len = (d.setup_buf[7] << 8) | d.setup_buf[6]; + d.setup_index = 0; + if (d.setup_buf[0] & USB_DIR_IN) { + ret = handle_control((d.setup_buf[0] << 8) | d.setup_buf[1], + (d.setup_buf[3] << 8) | d.setup_buf[2], + (d.setup_buf[5] << 8) | d.setup_buf[4], + d.setup_len, d.data_buf); + if (ret < 0) + return ret; + if (ret < d.setup_len) + d.setup_len = ret; + d.setup_state = SETUP_STATE_DATA; + } else { + if (d.setup_len == 0) + d.setup_state = SETUP_STATE_ACK; + else + d.setup_state = SETUP_STATE_DATA; + } + break; + case USB_TOKEN_IN: + if (d.state < USB_STATE_DEFAULT || p->devaddr != d.addr) + return USB_RET_NODEV; + if (d.stall) goto fail; + switch(p->devep) { + case 0: + switch(d.setup_state) { + case SETUP_STATE_ACK: + if (!(d.setup_buf[0] & USB_DIR_IN)) { + d.setup_state = SETUP_STATE_IDLE; + ret = handle_control((d.setup_buf[0] << 8) | d.setup_buf[1], + (d.setup_buf[3] << 8) | d.setup_buf[2], + (d.setup_buf[5] << 8) | d.setup_buf[4], + d.setup_len, d.data_buf); + if (ret > 0) + ret = 0; + } else { + // return 0 byte + } + break; + case SETUP_STATE_DATA: + if (d.setup_buf[0] & USB_DIR_IN) { + l = d.setup_len - d.setup_index; + if (l > len) + l = len; + memcpy(data, d.data_buf + d.setup_index, l); + d.setup_index += l; + if (d.setup_index >= d.setup_len) + d.setup_state = SETUP_STATE_ACK; + ret = l; + } else { + d.setup_state = SETUP_STATE_IDLE; + goto fail; + } + break; + default: + goto fail; + } + break; + default: + ret = handle_data(p); + break; + } + break; + case USB_TOKEN_OUT: + if (d.state < USB_STATE_DEFAULT || p->devaddr != d.addr) + return USB_RET_NODEV; + if (d.stall) goto fail; + switch(p->devep) { + case 0: + switch(d.setup_state) { + case SETUP_STATE_ACK: + if (d.setup_buf[0] & USB_DIR_IN) { + d.setup_state = SETUP_STATE_IDLE; + // transfer OK + } else { + // ignore additionnal output + } + break; + case SETUP_STATE_DATA: + if (!(d.setup_buf[0] & USB_DIR_IN)) { + l = d.setup_len - d.setup_index; + if (l > len) + l = len; + memcpy(d.data_buf + d.setup_index, data, l); + d.setup_index += l; + if (d.setup_index >= d.setup_len) + d.setup_state = SETUP_STATE_ACK; + ret = l; + } else { + // it is okay for a host to send an OUT before it reads + // all of the expected IN. It is telling the controller + // that it doesn't want any more from that particular call. + ret = 0; + d.setup_state = SETUP_STATE_IDLE; + } + break; + default: + goto fail; + } + break; + default: + ret = handle_data(p); + break; + } + break; + default: + fail: + d.stall = 1; + ret = USB_RET_STALL; + break; + } + return ret; +} + +void usb_device_c::register_state(bx_list_c *parent) +{ + bx_list_c *list = new bx_list_c(parent, "d", "Common USB Device State"); + new bx_shadow_num_c(list, "addr", &d.addr); + new bx_shadow_num_c(list, "state", &d.state); + new bx_shadow_num_c(list, "remote_wakeup", &d.remote_wakeup); + register_state_specific(parent); +} + +// base class for USB devices +usb_device_c::usb_device_c(void) +{ + memset((void*)&d, 0, sizeof(d)); +} + +// Send an internal message to a USB device +void usb_device_c::usb_send_msg(int msg) +{ + USBPacket p; + memset(&p, 0, sizeof(p)); + p.pid = msg; + handle_packet(&p); +} + +#endif // BX_SUPPORT_PCI && BX_SUPPORT_PCIUSB diff --git a/bochs/iodev/usb_common.h b/bochs/iodev/usb_common.h new file mode 100644 index 00000000..ea58c46d --- /dev/null +++ b/bochs/iodev/usb_common.h @@ -0,0 +1,202 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 Benjamin D Lunt (fys at frontiernet net) +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#ifndef BX_IODEV_USB_COMMON_H +#define BX_IODEV_USB_COMMON_H + +#define USB_TOKEN_IN 0x69 +#define USB_TOKEN_OUT 0xE1 +#define USB_TOKEN_SETUP 0x2D + +#define USB_MSG_ATTACH 0x100 +#define USB_MSG_DETACH 0x101 +#define USB_MSG_RESET 0x102 + +#define USB_RET_NODEV (-1) +#define USB_RET_NAK (-2) +#define USB_RET_STALL (-3) +#define USB_RET_BABBLE (-4) +#define USB_RET_ASYNC (-5) + +#define USB_SPEED_LOW 0 +#define USB_SPEED_FULL 1 +#define USB_SPEED_HIGH 2 +#define USB_SPEED_SUPER 3 + +#define USB_STATE_NOTATTACHED 0 +#define USB_STATE_ATTACHED 1 +//#define USB_STATE_POWERED 2 +#define USB_STATE_DEFAULT 3 +#define USB_STATE_ADDRESS 4 +#define USB_STATE_CONFIGURED 5 +#define USB_STATE_SUSPENDED 6 + +#define USB_DIR_OUT 0 +#define USB_DIR_IN 0x80 + +#define USB_TYPE_MASK (0x03 << 5) +#define USB_TYPE_STANDARD (0x00 << 5) +#define USB_TYPE_CLASS (0x01 << 5) +#define USB_TYPE_VENDOR (0x02 << 5) +#define USB_TYPE_RESERVED (0x03 << 5) + +#define USB_RECIP_MASK 0x1f +#define USB_RECIP_DEVICE 0x00 +#define USB_RECIP_INTERFACE 0x01 +#define USB_RECIP_ENDPOINT 0x02 +#define USB_RECIP_OTHER 0x03 + +#define DeviceRequest ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) +#define DeviceOutRequest ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) +#define InterfaceRequest \ + ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) +#define InterfaceInClassRequest \ + ((USB_DIR_IN|USB_TYPE_CLASS|USB_RECIP_INTERFACE)<<8) +#define InterfaceOutRequest \ + ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) +#define InterfaceOutClassRequest \ + ((USB_DIR_OUT|USB_TYPE_CLASS|USB_RECIP_INTERFACE)<<8) +#define EndpointRequest ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8) +#define EndpointOutRequest \ + ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8) + +#define USB_REQ_GET_STATUS 0x00 +#define USB_REQ_CLEAR_FEATURE 0x01 +#define USB_REQ_SET_FEATURE 0x03 +#define USB_REQ_SET_ADDRESS 0x05 +#define USB_REQ_GET_DESCRIPTOR 0x06 +#define USB_REQ_SET_DESCRIPTOR 0x07 +#define USB_REQ_GET_CONFIGURATION 0x08 +#define USB_REQ_SET_CONFIGURATION 0x09 +#define USB_REQ_GET_INTERFACE 0x0A +#define USB_REQ_SET_INTERFACE 0x0B +#define USB_REQ_SYNCH_FRAME 0x0C + +#define USB_DEVICE_SELF_POWERED 0 +#define USB_DEVICE_REMOTE_WAKEUP 1 + +// USB 1.1 +#define USB_DT_DEVICE 0x01 +#define USB_DT_CONFIG 0x02 +#define USB_DT_STRING 0x03 +#define USB_DT_INTERFACE 0x04 +#define USB_DT_ENDPOINT 0x05 +// USB 2.0 +#define USB_DT_DEVICE_QUALIFIER 0x06 +#define USB_DT_OTHER_SPEED_CONFIG 0x07 +#define USB_DT_INTERFACE_POWER 0x08 + +class usb_device_c; + +struct USBPacket { + int pid; + Bit8u devaddr; + Bit8u devep; + Bit8u *data; + int len; + usb_device_c *dev; +}; + +enum usbdev_type { + USB_DEV_TYPE_NONE=0, + USB_DEV_TYPE_MOUSE, + USB_DEV_TYPE_TABLET, + USB_DEV_TYPE_KEYPAD, + USB_DEV_TYPE_DISK, + USB_DEV_TYPE_CDROM, + USB_DEV_TYPE_HUB, + USB_DEV_TYPE_PRINTER +}; + +class bx_usb_devctl_c : public bx_usb_devctl_stub_c { +public: + bx_usb_devctl_c() {} + virtual ~bx_usb_devctl_c() {} + virtual int init_device(bx_list_c *portconf, logfunctions *hub, void **dev, bx_list_c *sr_list); + virtual void usb_send_msg(void *dev, int msg); +private: + void parse_port_options(usb_device_c *dev, bx_list_c *portconf); +}; + +class usb_device_c : public logfunctions { +public: + usb_device_c(void); + virtual ~usb_device_c() {} + + virtual bx_bool init() {return 1;} + virtual const char* get_info() {return NULL;} + + virtual int handle_packet(USBPacket *p); + virtual void handle_reset() {} + virtual int handle_control(int request, int value, int index, int length, Bit8u *data) {return 0;} + virtual int handle_data(USBPacket *p) {return 0;} + void register_state(bx_list_c *parent); + virtual void register_state_specific(bx_list_c *parent) {} + virtual void after_restore_state() {} + virtual void cancel_packet(USBPacket *p) {} + virtual bx_bool set_option(const char *option) {return 0;} + virtual void timer() {} + + bx_bool get_connected() {return d.connected;} + usbdev_type get_type() {return d.type;} + int get_maxspeed() {return d.maxspeed;} + int get_speed() {return d.speed;} + void set_speed(int speed) {d.speed = speed;} + Bit8u get_address() {return d.addr;} + + void usb_send_msg(int msg); + +protected: + struct { + enum usbdev_type type; + bx_bool connected; + int maxspeed; + int speed; + Bit8u addr; + Bit8u config; + char devname[32]; + + int state; + Bit8u setup_buf[8]; + Bit8u data_buf[1024]; + int remote_wakeup; + int setup_state; + int setup_len; + int setup_index; + bx_bool stall; + } d; + + void usb_dump_packet(Bit8u *data, unsigned size); + int set_usb_string(Bit8u *buf, const char *str); +}; + +static BX_CPP_INLINE void usb_defer_packet(USBPacket *p, usb_device_c *dev) +{ + p->dev = dev; +} + +static BX_CPP_INLINE void usb_cancel_packet(USBPacket *p) +{ + p->dev->cancel_packet(p); +} + +#endif diff --git a/bochs/iodev/usb_hid.cc b/bochs/iodev/usb_hid.cc new file mode 100644 index 00000000..73e3fd69 --- /dev/null +++ b/bochs/iodev/usb_hid.cc @@ -0,0 +1,861 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// USB HID emulation support (mouse and tablet) ported from the Qemu project +// USB keypad emulation based on code by Benjamin D Lunt (fys at frontiernet net) + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_PCI && BX_SUPPORT_PCIUSB +#include "usb_common.h" +#include "usb_hid.h" + +#define LOG_THIS + +/* HID interface requests */ +#define GET_REPORT 0xa101 +#define GET_IDLE 0xa102 +#define GET_PROTOCOL 0xa103 +#define SET_REPORT 0x2109 +#define SET_IDLE 0x210a +#define SET_PROTOCOL 0x210b + +#define KEYPAD_LEN 128 +struct KEYPAD { + Bit8u scan_code[8]; + Bit8u keypad_packet[8]; +}; + +static const Bit8u bx_mouse_dev_descriptor[] = { + 0x12, /* u8 bLength; */ + 0x01, /* u8 bDescriptorType; Device */ + 0x00, 0x01, /* u16 bcdUSB; v1.0 */ + + 0x00, /* u8 bDeviceClass; */ + 0x00, /* u8 bDeviceSubClass; */ + 0x00, /* u8 bDeviceProtocol; [ low/full speeds only ] */ + 0x08, /* u8 bMaxPacketSize0; 8 Bytes */ + + 0x27, 0x06, /* u16 idVendor; */ + 0x01, 0x00, /* u16 idProduct; */ + 0x00, 0x00, /* u16 bcdDevice */ + + 0x03, /* u8 iManufacturer; */ + 0x02, /* u8 iProduct; */ + 0x01, /* u8 iSerialNumber; */ + 0x01 /* u8 bNumConfigurations; */ +}; + +static const Bit8u bx_mouse_config_descriptor[] = { + /* one configuration */ + 0x09, /* u8 bLength; */ + 0x02, /* u8 bDescriptorType; Configuration */ + 0x22, 0x00, /* u16 wTotalLength; */ + 0x01, /* u8 bNumInterfaces; (1) */ + 0x01, /* u8 bConfigurationValue; */ + 0x04, /* u8 iConfiguration; */ + 0xa0, /* u8 bmAttributes; + Bit 7: must be set, + 6: Self-powered, + 5: Remote wakeup, + 4..0: resvd */ + 50, /* u8 MaxPower; */ + + /* USB 1.1: + * USB 2.0, single TT organization (mandatory): + * one interface, protocol 0 + * + * USB 2.0, multiple TT organization (optional): + * two interfaces, protocols 1 (like single TT) + * and 2 (multiple TT mode) ... config is + * sometimes settable + * NOT IMPLEMENTED + */ + + /* one interface */ + 0x09, /* u8 if_bLength; */ + 0x04, /* u8 if_bDescriptorType; Interface */ + 0x00, /* u8 if_bInterfaceNumber; */ + 0x00, /* u8 if_bAlternateSetting; */ + 0x01, /* u8 if_bNumEndpoints; */ + 0x03, /* u8 if_bInterfaceClass; */ + 0x01, /* u8 if_bInterfaceSubClass; */ + 0x02, /* u8 if_bInterfaceProtocol; [usb1.1 or single tt] */ + 0x05, /* u8 if_iInterface; */ + + /* HID descriptor */ + 0x09, /* u8 bLength; */ + 0x21, /* u8 bDescriptorType; */ + 0x00, 0x01, /* u16 HID_class */ + 0x00, /* u8 country_code */ + 0x01, /* u8 num_descriptors */ + 0x22, /* u8 type; Report */ + 50, 0, /* u16 len */ + + /* one endpoint */ + 0x07, /* u8 ep_bLength; */ + 0x05, /* u8 ep_bDescriptorType; Endpoint */ + 0x81, /* u8 ep_bEndpointAddress; IN Endpoint 1 */ + 0x03, /* u8 ep_bmAttributes; Interrupt */ + 0x03, 0x00, /* u16 ep_wMaxPacketSize; */ + 0x0a, /* u8 ep_bInterval; (0 - 255ms -- usb 2.0 spec) */ +}; + +static const Bit8u bx_mouse_hid_descriptor[] = { + /* HID descriptor */ + 0x09, /* u8 bLength; */ + 0x21, /* u8 bDescriptorType; */ + 0x00, 0x01, /* u16 HID_class */ + 0x00, /* u8 country_code */ + 0x01, /* u8 num_descriptors */ + 0x22, /* u8 type; Report */ + 50, 0 /* u16 len */ +}; + +static const Bit8u bx_mouse_hid_report_descriptor[] = { + 0x05, 0x01, 0x09, 0x02, 0xA1, 0x01, 0x09, 0x01, + 0xA1, 0x00, 0x05, 0x09, 0x19, 0x01, 0x29, 0x03, + 0x15, 0x00, 0x25, 0x01, 0x95, 0x03, 0x75, 0x01, + 0x81, 0x02, 0x95, 0x01, 0x75, 0x05, 0x81, 0x01, + 0x05, 0x01, 0x09, 0x30, 0x09, 0x31, 0x15, 0x81, + 0x25, 0x7F, 0x75, 0x08, 0x95, 0x02, 0x81, 0x06, + 0xC0, 0xC0, +}; + +static const Bit8u bx_tablet_config_descriptor[] = { + /* one configuration */ + 0x09, /* u8 bLength; */ + 0x02, /* u8 bDescriptorType; Configuration */ + 0x22, 0x00, /* u16 wTotalLength; */ + 0x01, /* u8 bNumInterfaces; (1) */ + 0x01, /* u8 bConfigurationValue; */ + 0x04, /* u8 iConfiguration; */ + 0xa0, /* u8 bmAttributes; + Bit 7: must be set, + 6: Self-powered, + 5: Remote wakeup, + 4..0: resvd */ + 50, /* u8 MaxPower; */ + + /* one interface */ + 0x09, /* u8 if_bLength; */ + 0x04, /* u8 if_bDescriptorType; Interface */ + 0x00, /* u8 if_bInterfaceNumber; */ + 0x00, /* u8 if_bAlternateSetting; */ + 0x01, /* u8 if_bNumEndpoints; */ + 0x03, /* u8 if_bInterfaceClass; */ + 0x01, /* u8 if_bInterfaceSubClass; */ + 0x02, /* u8 if_bInterfaceProtocol; [usb1.1 or single tt] */ + 0x05, /* u8 if_iInterface; */ + + /* HID descriptor */ + 0x09, /* u8 bLength; */ + 0x21, /* u8 bDescriptorType; */ + 0x00, 0x01, /* u16 HID_class */ + 0x00, /* u8 country_code */ + 0x01, /* u8 num_descriptors */ + 0x22, /* u8 type; Report */ + 74, 0, /* u16 len */ + + /* one endpoint */ + 0x07, /* u8 ep_bLength; */ + 0x05, /* u8 ep_bDescriptorType; Endpoint */ + 0x81, /* u8 ep_bEndpointAddress; IN Endpoint 1 */ + 0x03, /* u8 ep_bmAttributes; Interrupt */ + 0x08, 0x00, /* u16 ep_wMaxPacketSize; */ + 0x0a, /* u8 ep_bInterval; (0 - 255ms -- usb 2.0 spec) */ +}; + +static const Bit8u bx_tablet_hid_descriptor[] = { + /* HID descriptor */ + 0x09, /* u8 bLength; */ + 0x21, /* u8 bDescriptorType; */ + 0x00, 0x01, /* u16 HID_class */ + 0x00, /* u8 country_code */ + 0x01, /* u8 num_descriptors */ + 0x22, /* u8 type; Report */ + 74, 0, /* u16 len */ +}; + +static const Bit8u bx_tablet_hid_report_descriptor[] = { + 0x05, 0x01, /* Usage Page Generic Desktop */ + 0x09, 0x01, /* Usage Mouse */ + 0xA1, 0x01, /* Collection Application */ + 0x09, 0x01, /* Usage Pointer */ + 0xA1, 0x00, /* Collection Physical */ + 0x05, 0x09, /* Usage Page Button */ + 0x19, 0x01, /* Usage Minimum Button 1 */ + 0x29, 0x03, /* Usage Maximum Button 3 */ + 0x15, 0x00, /* Logical Minimum 0 */ + 0x25, 0x01, /* Logical Maximum 1 */ + 0x95, 0x03, /* Report Count 3 */ + 0x75, 0x01, /* Report Size 1 */ + 0x81, 0x02, /* Input (Data, Var, Abs) */ + 0x95, 0x01, /* Report Count 1 */ + 0x75, 0x05, /* Report Size 5 */ + 0x81, 0x01, /* Input (Cnst, Var, Abs) */ + 0x05, 0x01, /* Usage Page Generic Desktop */ + 0x09, 0x30, /* Usage X */ + 0x09, 0x31, /* Usage Y */ + 0x15, 0x00, /* Logical Minimum 0 */ + 0x26, 0xFF, 0x7F, /* Logical Maximum 0x7fff */ + 0x35, 0x00, /* Physical Minimum 0 */ + 0x46, 0xFE, 0x7F, /* Physical Maximum 0x7fff */ + 0x75, 0x10, /* Report Size 16 */ + 0x95, 0x02, /* Report Count 2 */ + 0x81, 0x02, /* Input (Data, Var, Abs) */ + 0x05, 0x01, /* Usage Page Generic Desktop */ + 0x09, 0x38, /* Usage Wheel */ + 0x15, 0x81, /* Logical Minimum -127 */ + 0x25, 0x7F, /* Logical Maximum 127 */ + 0x35, 0x00, /* Physical Minimum 0 (same as logical) */ + 0x45, 0x00, /* Physical Maximum 0 (same as logical) */ + 0x75, 0x08, /* Report Size 8 */ + 0x95, 0x01, /* Report Count 1 */ + 0x81, 0x02, /* Input (Data, Var, Rel) */ + 0xC0, /* End Collection */ + 0xC0, /* End Collection */ +}; + +static const Bit8u bx_keypad_dev_descriptor[] = { + 0x12, /* u8 bLength; */ + 0x01, /* u8 bDescriptorType; Device */ + 0x10, 0x01, /* u16 bcdUSB; v1.1 */ + + 0x00, /* u8 bDeviceClass; */ + 0x00, /* u8 bDeviceSubClass; */ + 0x00, /* u8 bDeviceProtocol; [ low/full speeds only ] */ + 0x08, /* u8 bMaxPacketSize0; 8 Bytes */ + + 0xB4, 0x04, /* u16 idVendor; */ + 0x01, 0x01, /* u16 idProduct; */ + 0x01, 0x00, /* u16 bcdDevice */ + + 0x03, /* u8 iManufacturer; */ + 0x02, /* u8 iProduct; */ + 0x01, /* u8 iSerialNumber; */ + 0x01 /* u8 bNumConfigurations; */ +}; + +static const Bit8u bx_keypad_config_descriptor[] = { + /* one configuration */ + 0x09, /* u8 bLength; */ + 0x02, /* u8 bDescriptorType; Configuration */ + 0x3B, 0x00, /* u16 wTotalLength; */ + 0x02, /* u8 bNumInterfaces; (2) */ + 0x01, /* u8 bConfigurationValue; */ + 0x04, /* u8 iConfiguration; */ + 0xa0, /* u8 bmAttributes; + Bit 7: must be set, + 6: Self-powered, + 5: Remote wakeup, + 4..0: resvd */ + 50, /* u8 MaxPower; */ + + /* interface #1 of 2 */ + 0x09, /* u8 if_bLength; */ + 0x04, /* u8 if_bDescriptorType; Interface */ + 0x00, /* u8 if_bInterfaceNumber; */ + 0x00, /* u8 if_bAlternateSetting; */ + 0x01, /* u8 if_bNumEndpoints; */ + 0x03, /* u8 if_bInterfaceClass; */ + 0x01, /* u8 if_bInterfaceSubClass; */ + 0x01, /* u8 if_bInterfaceProtocol; [usb1.1 or single tt] */ + 0x05, /* u8 if_iInterface; */ + + /* HID descriptor */ + 0x09, /* u8 bLength; */ + 0x21, /* u8 bDescriptorType; */ + 0x00, 0x01, /* u16 HID_class */ + 0x00, /* u8 country_code */ + 0x01, /* u8 num_descriptors */ + 0x22, /* u8 type; Report */ + 65, 0, /* u16 len */ + + /* one endpoint (status change endpoint) */ + 0x07, /* u8 ep_bLength; */ + 0x05, /* u8 ep_bDescriptorType; Endpoint */ + 0x81, /* u8 ep_bEndpointAddress; IN Endpoint 1 */ + 0x03, /* u8 ep_bmAttributes; Interrupt */ + 0x08, 0x00, /* u16 ep_wMaxPacketSize; */ + 0x0a, /* u8 ep_bInterval; (255ms -- usb 2.0 spec) */ + + /* interface #2 of 2 */ + 0x09, /* u8 if_bLength; */ + 0x04, /* u8 if_bDescriptorType; Interface */ + 0x01, /* u8 if_bInterfaceNumber; */ + 0x00, /* u8 if_bAlternateSetting; */ + 0x01, /* u8 if_bNumEndpoints; */ + 0x03, /* u8 if_bInterfaceClass; */ + 0x01, /* u8 if_bInterfaceSubClass; */ + 0x02, /* u8 if_bInterfaceProtocol; [usb1.1 or single tt] */ + 0x06, /* u8 if_iInterface; */ + + /* HID descriptor */ + 0x09, /* u8 bLength; */ + 0x21, /* u8 bDescriptorType; */ + 0x00, 0x01, /* u16 HID_class */ + 0x00, /* u8 country_code */ + 0x01, /* u8 num_descriptors */ + 0x22, /* u8 type; Report */ + 50, 0, /* u16 len */ + + /* one endpoint */ + 0x07, /* u8 ep_bLength; */ + 0x05, /* u8 ep_bDescriptorType; Endpoint */ + 0x82, /* u8 ep_bEndpointAddress; IN Endpoint 2 */ + 0x03, /* u8 ep_bmAttributes; Interrupt */ + 0x08, 0x00, /* u16 ep_wMaxPacketSize; */ + 0x0a, /* u8 ep_bInterval; (0 - 255ms -- usb 2.0 spec) */ +}; + +static const Bit8u bx_keypad_hid_descriptor[] = { + /* HID descriptor */ + 0x09, /* u8 bLength; */ + 0x21, /* u8 bDescriptorType; */ + 0x00, 0x01, /* u16 HID_class */ + 0x00, /* u8 country_code */ + 0x01, /* u8 num_descriptors */ + 0x22, /* u8 type; Report */ + 50, 0, /* u16 len */ +}; + +static const Bit8u bx_keypad_hid_report_descriptor1[] = { + 0x05, 0x01, 0x09, 0x06, 0xA1, 0x01, 0x05, 0x07, + 0x19, 0xE0, 0x29, 0xE7, 0x15, 0x00, 0x25, 0x01, + 0x75, 0x01, 0x95, 0x08, 0x81, 0x02, 0x95, 0x01, + 0x75, 0x08, 0x81, 0x01, 0x95, 0x03, 0x75, 0x01, + 0x05, 0x08, 0x19, 0x01, 0x29, 0x03, 0x91, 0x02, + 0x95, 0x05, 0x75, 0x01, 0x91, 0x01, 0x95, 0x06, + 0x75, 0x08, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x05, + 0x07, 0x19, 0x00, 0x2A, 0xFF, 0x00, 0x81, 0x00, + 0xC0 +}; + +static const Bit8u bx_keypad_hid_report_descriptor2[] = { + 0x05, 0x0C, 0x09, 0x01, 0xA1, 0x01, 0x85, 0x01, + 0x19, 0x00, 0x2A, 0x3C, 0x02, 0x15, 0x00, 0x26, + 0x3C, 0x02, 0x95, 0x01, 0x75, 0x10, 0x81, 0x00, + 0xC0, 0x05, 0x01, 0x09, 0x80, 0xA1, 0x01, 0x85, + 0x02, 0x19, 0x81, 0x29, 0x83, 0x25, 0x01, 0x75, + 0x01, 0x95, 0x03, 0x81, 0x02, 0x95, 0x05, 0x81, + 0x01, 0xC0 +}; + +// this interface has a key conversion table of len = 18 +struct KEYPAD keypad_lookup[KEYPAD_LEN] = { + { { 0x6C, }, { 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 7 + { { 0x6B, }, { 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 4 + { { 0x69, }, { 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 1 + { { 0x70, }, { 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 0 + { { 0xE0, 0x4A, }, { 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // / + { { 0x75, }, { 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 8 + { { 0x73, }, { 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 5 + { { 0x72, }, { 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 2 + { { 0x7C, }, { 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // * + { { 0x7D, }, { 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 9 + { { 0x74, }, { 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 6 + { { 0x7A, }, { 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 3 + { { 0x71, }, { 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // - + { { 0x7B, }, { 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // + + { { 0x79, }, { 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // . + { { 0xE0, 0x5A }, { 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // Enter +}; + +usb_hid_device_c::usb_hid_device_c(usbdev_type type) +{ + d.type = type; + d.maxspeed = USB_SPEED_LOW; + d.speed = d.maxspeed; + if (d.type == USB_DEV_TYPE_MOUSE) { + strcpy(d.devname, "USB Mouse"); + DEV_register_removable_mouse((void*)this, mouse_enq_static, mouse_enabled_changed); + } else if (d.type == USB_DEV_TYPE_TABLET) { + strcpy(d.devname, "USB Tablet"); + DEV_register_removable_mouse((void*)this, mouse_enq_static, mouse_enabled_changed); + } else if (d.type == USB_DEV_TYPE_KEYPAD) { + strcpy(d.devname, "USB/PS2 Keypad"); + DEV_register_removable_keyboard((void*)this, key_enq_static); + } + d.connected = 1; + memset((void*)&s, 0, sizeof(s)); + + put("USBHI"); +} + +usb_hid_device_c::~usb_hid_device_c(void) +{ + if ((d.type == USB_DEV_TYPE_MOUSE) || + (d.type == USB_DEV_TYPE_TABLET)) { + DEV_unregister_removable_mouse((void*)this); + } else if (d.type == USB_DEV_TYPE_KEYPAD) { + DEV_unregister_removable_keyboard((void*)this); + } +} + +void usb_hid_device_c::register_state_specific(bx_list_c *parent) +{ + bx_list_c *key; + Bit8u i; + char name[6]; + + bx_list_c *list = new bx_list_c(parent, "s", "USB HID Device State", 9); + new bx_shadow_num_c(list, "mouse_delayed_dx", &s.mouse_delayed_dx); + new bx_shadow_num_c(list, "mouse_delayed_dy", &s.mouse_delayed_dy); + new bx_shadow_num_c(list, "mouse_delayed_dz", &s.mouse_delayed_dz); + new bx_shadow_num_c(list, "mouse_x", &s.mouse_x); + new bx_shadow_num_c(list, "mouse_y", &s.mouse_y); + new bx_shadow_num_c(list, "mouse_z", &s.mouse_z); + new bx_shadow_num_c(list, "b_state", &s.b_state, BASE_HEX); + key = new bx_list_c(list, "saved_key", 8); + for (i=0; i<8; i++) { + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(key, name, &s.saved_key[i], BASE_HEX); + } + key = new bx_list_c(list, "key_pad_packet", 8); + for (i=0; i<8; i++) { + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(key, name, &s.key_pad_packet[i], BASE_HEX); + } +} + +void usb_hid_device_c::handle_reset() +{ + memset((void*)&s, 0, sizeof(s)); + BX_DEBUG(("Reset")); +} + +int usb_hid_device_c::handle_control(int request, int value, int index, int length, Bit8u *data) +{ + int ret = 0; + + switch(request) { + case DeviceRequest | USB_REQ_GET_STATUS: + if (d.state == USB_STATE_DEFAULT) + goto fail; + else { + data[0] = (1 << USB_DEVICE_SELF_POWERED) | + (d.remote_wakeup << USB_DEVICE_REMOTE_WAKEUP); + data[1] = 0x00; + ret = 2; + } + break; + case DeviceOutRequest | USB_REQ_CLEAR_FEATURE: + if (value == USB_DEVICE_REMOTE_WAKEUP) { + d.remote_wakeup = 0; + } else { + goto fail; + } + ret = 0; + break; + case DeviceOutRequest | USB_REQ_SET_FEATURE: + if (value == USB_DEVICE_REMOTE_WAKEUP) { + d.remote_wakeup = 1; + } else { + goto fail; + } + ret = 0; + break; + case DeviceOutRequest | USB_REQ_SET_ADDRESS: + d.state = USB_STATE_ADDRESS; + d.addr = value; + ret = 0; + break; + case DeviceRequest | USB_REQ_GET_DESCRIPTOR: + switch(value >> 8) { + case USB_DT_DEVICE: + if ((d.type == USB_DEV_TYPE_MOUSE) || + (d.type == USB_DEV_TYPE_TABLET)) { + memcpy(data, bx_mouse_dev_descriptor, + sizeof(bx_mouse_dev_descriptor)); + ret = sizeof(bx_mouse_dev_descriptor); + } else if (d.type == USB_DEV_TYPE_KEYPAD) { + memcpy(data, bx_keypad_dev_descriptor, + sizeof(bx_keypad_dev_descriptor)); + ret = sizeof(bx_keypad_dev_descriptor); + } else { + goto fail; + } + break; + case USB_DT_CONFIG: + if (d.type == USB_DEV_TYPE_MOUSE) { + memcpy(data, bx_mouse_config_descriptor, + sizeof(bx_mouse_config_descriptor)); + ret = sizeof(bx_mouse_config_descriptor); + } else if (d.type == USB_DEV_TYPE_TABLET) { + memcpy(data, bx_tablet_config_descriptor, + sizeof(bx_tablet_config_descriptor)); + ret = sizeof(bx_tablet_config_descriptor); + } else if (d.type == USB_DEV_TYPE_KEYPAD) { + memcpy(data, bx_keypad_config_descriptor, + sizeof(bx_keypad_config_descriptor)); + ret = sizeof(bx_keypad_config_descriptor); + } else { + goto fail; + } + break; + case USB_DT_STRING: + switch(value & 0xff) { + case 0: + /* language ids */ + data[0] = 4; + data[1] = 3; + data[2] = 0x09; + data[3] = 0x04; + ret = 4; + break; + case 1: + /* serial number */ + ret = set_usb_string(data, "1"); + break; + case 2: + /* product description */ + if (strlen(d.devname) > 0) { + ret = set_usb_string(data, d.devname); + } else { + goto fail; + } + break; + case 3: + /* vendor description */ + ret = set_usb_string(data, "BOCHS"); + break; + case 4: + ret = set_usb_string(data, "HID Mouse"); + break; + case 5: + ret = set_usb_string(data, "Endpoint1 Interrupt Pipe"); + break; + default: + BX_ERROR(("USB HID handle_control: unknown string descriptor 0x%02x", value & 0xff)); + goto fail; + } + break; + default: + BX_ERROR(("USB HID handle_control: unknown descriptor type 0x%02x", value >> 8)); + goto fail; + } + break; + case DeviceRequest | USB_REQ_GET_CONFIGURATION: + data[0] = 1; + ret = 1; + break; + case DeviceOutRequest | USB_REQ_SET_CONFIGURATION: + d.state = USB_STATE_CONFIGURED; + ret = 0; + break; + case DeviceRequest | USB_REQ_GET_INTERFACE: + data[0] = 0; + ret = 1; + break; + case DeviceOutRequest | USB_REQ_SET_INTERFACE: + ret = 0; + break; + /* hid specific requests */ + case InterfaceRequest | USB_REQ_GET_DESCRIPTOR: + switch(value >> 8) { + case 0x21: + if (d.type == USB_DEV_TYPE_MOUSE) { + memcpy(data, bx_mouse_hid_descriptor, + sizeof(bx_mouse_hid_descriptor)); + ret = sizeof(bx_mouse_hid_descriptor); + } else if (d.type == USB_DEV_TYPE_TABLET) { + memcpy(data, bx_tablet_hid_descriptor, + sizeof(bx_tablet_hid_descriptor)); + ret = sizeof(bx_tablet_hid_descriptor); + } else if (d.type == USB_DEV_TYPE_KEYPAD) { + memcpy(data, bx_keypad_hid_descriptor, + sizeof(bx_keypad_hid_descriptor)); + ret = sizeof(bx_keypad_hid_descriptor); + } else { + goto fail; + } + break; + case 0x22: + if (d.type == USB_DEV_TYPE_MOUSE) { + memcpy(data, bx_mouse_hid_report_descriptor, + sizeof(bx_mouse_hid_report_descriptor)); + ret = sizeof(bx_mouse_hid_report_descriptor); + } else if (d.type == USB_DEV_TYPE_TABLET) { + memcpy(data, bx_tablet_hid_report_descriptor, + sizeof(bx_tablet_hid_report_descriptor)); + ret = sizeof(bx_tablet_hid_report_descriptor); + } else if (d.type == USB_DEV_TYPE_KEYPAD) { + if (index == 0) { + memcpy(data, bx_keypad_hid_report_descriptor1, + sizeof(bx_keypad_hid_report_descriptor1)); + ret = sizeof(bx_keypad_hid_report_descriptor1); + } else { + memcpy(data, bx_keypad_hid_report_descriptor2, + sizeof(bx_keypad_hid_report_descriptor2)); + ret = sizeof(bx_keypad_hid_report_descriptor2); + } + } else { + goto fail; + } + break; + case 0x23: + BX_ERROR(("USB HID handle_control: Host requested the HID Physical Descriptor")); + goto fail; + default: + BX_ERROR(("USB HID handle_control: unknown HID descriptor 0x%02x", value >> 8)); + goto fail; + } + break; + case GET_REPORT: + if ((d.type == USB_DEV_TYPE_MOUSE) || + (d.type == USB_DEV_TYPE_TABLET)) { + ret = mouse_poll(data, length); + } else if (d.type == USB_DEV_TYPE_KEYPAD) { + ret = keypad_poll(data, length); + } else { + goto fail; + } + break; + case SET_REPORT: + if ((d.type == USB_DEV_TYPE_KEYPAD) && (value = 0x200)) { + BX_INFO(("keypad NUMLOCK %s", (data[0] & 0x01) ? "on" : "off")); + ret = 0; + } else { + goto fail; + } + break; + case SET_IDLE: + case SET_PROTOCOL: + ret = 0; + break; + default: + BX_ERROR(("USB HID handle_control: unknown request 0x%04x", request)); + fail: + d.stall = 1; + ret = USB_RET_STALL; + break; + } + return ret; +} + +int usb_hid_device_c::handle_data(USBPacket *p) +{ + int ret = 0; + + switch(p->pid) { + case USB_TOKEN_IN: + if (p->devep == 1) { + if ((d.type == USB_DEV_TYPE_MOUSE) || + (d.type == USB_DEV_TYPE_TABLET)) { + ret = mouse_poll(p->data, p->len); + } else if (d.type == USB_DEV_TYPE_KEYPAD) { + ret = keypad_poll(p->data, p->len); + } else { + goto fail; + } + } else if (p->devep == 2) { + if (d.type == USB_DEV_TYPE_KEYPAD) { + ret = mouse_poll(p->data, p->len); + } else { + goto fail; + } + } else { + goto fail; + } + break; + case USB_TOKEN_OUT: + BX_ERROR(("USB HID handle_data: unexpected pid TOKEN_OUT")); + default: + fail: + d.stall = 1; + ret = USB_RET_STALL; + break; + } + return ret; +} + +int usb_hid_device_c::mouse_poll(Bit8u *buf, int len) +{ + int l = 0; + + if ((d.type == USB_DEV_TYPE_MOUSE) || + (d.type == USB_DEV_TYPE_KEYPAD)) { + if (!s.mouse_x && !s.mouse_y) { + // if there's no new movement, handle delayed one + mouse_enq(0, 0, s.mouse_z, s.b_state); + } + buf[0] = (Bit8u) s.b_state; + buf[1] = (Bit8s) s.mouse_x; + buf[2] = (Bit8s) s.mouse_y; + s.mouse_x = 0; + s.mouse_y = 0; + l = 3; + if (len >= 4) { + buf[3] = (Bit8s) s.mouse_z; // if wheel mouse + s.mouse_z = 0; + l = 4; + } + } else if (d.type == USB_DEV_TYPE_TABLET) { + buf[0] = (Bit8u) s.b_state; + buf[1] = (Bit8u)(s.mouse_x & 0xff); + buf[2] = (Bit8u)(s.mouse_x >> 8); + buf[3] = (Bit8u)(s.mouse_y & 0xff); + buf[4] = (Bit8u)(s.mouse_y >> 8); + buf[5] = (Bit8s) s.mouse_z; + s.mouse_z = 0; + l = 6; + } + return l; +} + +void usb_hid_device_c::mouse_enabled_changed(void *dev, bx_bool enabled) +{ + if (enabled) ((usb_hid_device_c*)dev)->handle_reset(); +} + +void usb_hid_device_c::mouse_enq_static(void *dev, int delta_x, int delta_y, int delta_z, unsigned button_state) +{ + ((usb_hid_device_c*)dev)->mouse_enq(delta_x, delta_y, delta_z, button_state); +} + +void usb_hid_device_c::mouse_enq(int delta_x, int delta_y, int delta_z, unsigned button_state) +{ + if (d.type == USB_DEV_TYPE_MOUSE) { + // scale down the motion + if ((delta_x < -1) || (delta_x > 1)) + delta_x /= 2; + if ((delta_y < -1) || (delta_y > 1)) + delta_y /= 2; + + if (delta_x>127) delta_x=127; + if (delta_y>127) delta_y=127; + if (delta_x<-128) delta_x=-128; + if (delta_y<-128) delta_y=-128; + + s.mouse_delayed_dx+=delta_x; + s.mouse_delayed_dy-=delta_y; + + if (s.mouse_delayed_dx > 127) { + delta_x = 127; + s.mouse_delayed_dx -= 127; + } else if (s.mouse_delayed_dx < -128) { + delta_x = -128; + s.mouse_delayed_dx += 128; + } else { + delta_x = s.mouse_delayed_dx; + s.mouse_delayed_dx = 0; + } + if (s.mouse_delayed_dy > 127) { + delta_y = 127; + s.mouse_delayed_dy -= 127; + } else if (s.mouse_delayed_dy < -128) { + delta_y = -128; + s.mouse_delayed_dy += 128; + } else { + delta_y = s.mouse_delayed_dy; + s.mouse_delayed_dy = 0; + } + + s.mouse_x = (Bit8s) delta_x; + s.mouse_y = (Bit8s) delta_y; + } else if (d.type == USB_DEV_TYPE_TABLET) { + // FIXME: Bochs gui should generate absolute x/y values if tablet connected + s.mouse_x += delta_x; + s.mouse_y -= delta_y; + if (s.mouse_x < 0) + s.mouse_x = 0; + if (s.mouse_y < 0) + s.mouse_y = 0; + } + s.mouse_z = (Bit8s) delta_z; + s.b_state = (Bit8u) button_state; +} + +int usb_hid_device_c::keypad_poll(Bit8u *buf, int len) +{ + int l = 0; + + if (d.type == USB_DEV_TYPE_KEYPAD) { + memcpy(buf, s.key_pad_packet, len); + l = 8; + } + return l; +} + +bx_bool usb_hid_device_c::key_enq_static(void *dev, Bit8u *scan_code) +{ + return ((usb_hid_device_c*)dev)->key_enq(scan_code); +} + +bx_bool usb_hid_device_c::key_enq(Bit8u *scan_code) +{ + bx_bool is_break_code = 0; + Bit8u our_scan_code[8]; + + memset(our_scan_code, 0, 8); + int os = 0; + for (int sc=0; sc<8; sc++) { + if ((scan_code[sc] == 0xF0) && ((sc == 0) || ((sc == 1) && (scan_code[0] == 0xE0)))) { + is_break_code = 1; + } else { + if (!(our_scan_code[os++] = scan_code[sc])) break; + } + } + + // if it is the break code of the saved key, then clear our packet key. + if (is_break_code && !memcmp(s.saved_key, our_scan_code, 8)) { + memset(s.saved_key, 0, 8); + memset(s.key_pad_packet, 0, 8); + return 1; // tell the keyboard handler that we used it, and to return with out processing key + } + + bx_bool fnd = 0; + for (int m = 0; m < 18; m++) { + if (!memcmp(keypad_lookup[m].scan_code, our_scan_code, 8)) { + memcpy(s.key_pad_packet, keypad_lookup[m].keypad_packet, 8); + fnd = 1; + break; + } + } + + if (!fnd) { + memset(s.key_pad_packet, 0, 8); + memset(s.saved_key, 0, 8); + } else { + memcpy(s.saved_key, our_scan_code, 8); + // print a debug line to the log file + char bx_debug_code[128] = ""; + char value[8]; + for (unsigned i=0; iget_param(BXPN_MENU_RUNTIME_USB); + sprintf(pname, "exthub%d", ++hub_count); + sprintf(label, "External Hub #%d Configuration", hub_count); + hub.config = new bx_list_c(usb_rt, pname, label, hub.n_ports); + hub.config->set_options(bx_list_c::SHOW_PARENT); + hub.config->set_runtime_param(1); + hub.config->set_device_param(this); + for(i = 0; i < hub.n_ports; i++) { + sprintf(pname, "port%d", i+1); + sprintf(label, "Port #%d Configuration", i+1); + port = new bx_list_c(hub.config, pname, label); + port->set_options(port->SERIES_ASK | port->USE_BOX_TITLE); + port->set_runtime_param(1); + device = new bx_param_string_c(port, "device", "Device", "", "", BX_PATHNAME_LEN); + device->set_handler(hub_param_handler); + device->set_runtime_param(1); + options = new bx_param_string_c(port, "options", "Options", "", "", BX_PATHNAME_LEN); + options->set_runtime_param(1); + } +#if BX_WITH_WX + bx_list_c *usb = (bx_list_c*)SIM->get_param("ports.usb"); + usb->add(hub.config); +#endif + + put("USBHB"); +} + +usb_hub_device_c::~usb_hub_device_c(void) +{ + for (int i=0; iget_param("ports.usb"); + usb->remove(hub.config->get_name()); +#endif + bx_list_c *usb_rt = (bx_list_c*)SIM->get_param(BXPN_MENU_RUNTIME_USB); + usb_rt->remove(hub.config->get_name()); +} + +void usb_hub_device_c::register_state_specific(bx_list_c *parent) +{ + Bit8u i; + char portnum[6]; + bx_list_c *port; + + hub.state = new bx_list_c(parent, "hub", "USB HUB Device State", hub.n_ports); + for (i=0; iafter_restore_state(); + } + } +} + +void usb_hub_device_c::handle_reset() +{ + // TODO + BX_DEBUG(("Reset")); +} + +int usb_hub_device_c::handle_control(int request, int value, int index, int length, Bit8u *data) +{ + int ret = 0; + unsigned int n; + + switch(request) { + case DeviceRequest | USB_REQ_GET_STATUS: + if (d.state == USB_STATE_DEFAULT) + goto fail; + else { + data[0] = (1 << USB_DEVICE_SELF_POWERED) | + (d.remote_wakeup << USB_DEVICE_REMOTE_WAKEUP); + data[1] = 0x00; + ret = 2; + } + break; + case DeviceOutRequest | USB_REQ_CLEAR_FEATURE: + if (value == USB_DEVICE_REMOTE_WAKEUP) { + d.remote_wakeup = 0; + } else { + goto fail; + } + ret = 0; + break; + case EndpointOutRequest | USB_REQ_CLEAR_FEATURE: + if (value == 0 && index != 0x81) { /* clear ep halt */ + goto fail; + } + ret = 0; + break; + case DeviceOutRequest | USB_REQ_SET_FEATURE: + if (value == USB_DEVICE_REMOTE_WAKEUP) { + d.remote_wakeup = 1; + } else { + goto fail; + } + ret = 0; + break; + case DeviceOutRequest | USB_REQ_SET_ADDRESS: + d.state = USB_STATE_ADDRESS; + d.addr = value; + ret = 0; + break; + case DeviceRequest | USB_REQ_GET_DESCRIPTOR: + switch(value >> 8) { + case USB_DT_DEVICE: + memcpy(data, bx_hub_dev_descriptor, + sizeof(bx_hub_dev_descriptor)); + ret = sizeof(bx_hub_dev_descriptor); + break; + case USB_DT_CONFIG: + memcpy(data, bx_hub_config_descriptor, + sizeof(bx_hub_config_descriptor)); + + /* status change endpoint size based on number + * of ports */ + data[22] = (hub.n_ports + 1 + 7) / 8; + + ret = sizeof(bx_hub_config_descriptor); + break; + case USB_DT_STRING: + switch(value & 0xff) { + case 0: + /* language ids */ + data[0] = 4; + data[1] = 3; + data[2] = 0x09; + data[3] = 0x04; + ret = 4; + break; + case 1: + /* serial number */ + ret = set_usb_string(data, hub.serial_number); + break; + case 2: + /* product description */ + ret = set_usb_string(data, "Bochs USB HUB"); + break; + case 3: + /* vendor description */ + ret = set_usb_string(data, "Bochs"); + break; + default: + BX_ERROR(("unknown string descriptor type %i", value & 0xff)); + goto fail; + } + break; + default: + BX_ERROR(("unknown descriptor type: 0x%02x", (value >> 8))); + goto fail; + } + break; + case DeviceRequest | USB_REQ_GET_CONFIGURATION: + data[0] = 1; + ret = 1; + break; + case DeviceOutRequest | USB_REQ_SET_CONFIGURATION: + d.state = USB_STATE_CONFIGURED; + ret = 0; + break; + case DeviceRequest | USB_REQ_GET_INTERFACE: + data[0] = 0; + ret = 1; + break; + case DeviceOutRequest | USB_REQ_SET_INTERFACE: + ret = 0; + break; + /* usb specific requests */ + case GetHubStatus: + if (d.state == USB_STATE_CONFIGURED) { + data[0] = 0; + data[1] = 0; + data[2] = 0; + data[3] = 0; + ret = 4; + } else + goto fail; + break; + case GetPortStatus: + n = index - 1; + if (n >= hub.n_ports) + goto fail; + data[0] = (hub.usb_port[n].PortStatus & 0xff); + data[1] = (hub.usb_port[n].PortStatus >> 8); + data[2] = (hub.usb_port[n].PortChange & 0xff); + data[3] = (hub.usb_port[n].PortChange >> 8); + ret = 4; + break; + case SetHubFeature: + case ClearHubFeature: + if (value == 0 || value == 1) { + } else { + goto fail; + } + ret = 0; + break; + case SetPortFeature: + n = index - 1; + if (n >= hub.n_ports) + goto fail; + switch(value) { + case PORT_SUSPEND: + hub.usb_port[n].PortStatus |= PORT_STAT_SUSPEND; + break; + case PORT_RESET: + if (hub.usb_port[n].device != NULL) { + DEV_usb_send_msg(hub.usb_port[n].device, USB_MSG_RESET); + hub.usb_port[n].PortChange |= PORT_STAT_C_RESET; + /* set enable bit */ + hub.usb_port[n].PortStatus |= PORT_STAT_ENABLE; + } + break; + case PORT_POWER: + break; + default: + BX_ERROR(("Unknown SetPortFeature: %i", value)); + goto fail; + } + ret = 0; + break; + case ClearPortFeature: + n = index - 1; + if (n >= hub.n_ports) + goto fail; + switch(value) { + case PORT_ENABLE: + hub.usb_port[n].PortStatus &= ~PORT_STAT_ENABLE; + break; + case PORT_C_ENABLE: + hub.usb_port[n].PortChange &= ~PORT_STAT_C_ENABLE; + break; + case PORT_SUSPEND: + hub.usb_port[n].PortStatus &= ~PORT_STAT_SUSPEND; + break; + case PORT_C_SUSPEND: + hub.usb_port[n].PortChange &= ~PORT_STAT_C_SUSPEND; + break; + case PORT_C_CONNECTION: + hub.usb_port[n].PortChange &= ~PORT_STAT_C_CONNECTION; + break; + case PORT_C_OVERCURRENT: + hub.usb_port[n].PortChange &= ~PORT_STAT_C_OVERCURRENT; + break; + case PORT_C_RESET: + hub.usb_port[n].PortChange &= ~PORT_STAT_C_RESET; + break; + default: + BX_ERROR(("Unknown ClearPortFeature: %i", value)); + goto fail; + } + ret = 0; + break; + case GetHubDescriptor: + { + unsigned int limit, var_hub_size = 0; + memcpy(data, bx_hub_hub_descriptor, + sizeof(bx_hub_hub_descriptor)); + data[2] = hub.n_ports; + + /* fill DeviceRemovable bits */ + limit = ((hub.n_ports + 1 + 7) / 8) + 7; + for (n = 7; n < limit; n++) { + data[n] = 0x00; + var_hub_size++; + } + + /* fill PortPwrCtrlMask bits */ + limit = limit + ((hub.n_ports + 7) / 8); + for (;n < limit; n++) { + data[n] = 0xff; + var_hub_size++; + } + + ret = sizeof(bx_hub_hub_descriptor) + var_hub_size; + data[0] = ret; + break; + } + default: + BX_ERROR(("handle_control: unknown request: 0x%04x", request)); + fail: + d.stall = 1; + ret = USB_RET_STALL; + break; + } + return ret; +} + +int usb_hub_device_c::handle_data(USBPacket *p) +{ + int ret = 0; + + switch(p->pid) { + case USB_TOKEN_IN: + if (p->devep == 1) { + unsigned int status; + int i, n; + n = (hub.n_ports + 1 + 7) / 8; + if (p->len == 1) { /* FreeBSD workaround */ + n = 1; + } else if (n > p->len) { + return USB_RET_BABBLE; + } + status = 0; + for(i = 0; i < hub.n_ports; i++) { + if (hub.usb_port[i].PortChange) + status |= (1 << (i + 1)); + } + if (status != 0) { + for(i = 0; i < n; i++) { + p->data[i] = status >> (8 * i); + } + ret = n; + } else { + ret = USB_RET_NAK; /* usb11 11.13.1 */ + } + } else { + goto fail; + } + break; + case USB_TOKEN_OUT: + default: + fail: + d.stall = 1; + ret = USB_RET_STALL; + break; + } + return ret; +} + +int usb_hub_device_c::broadcast_packet(USBPacket *p) +{ + int i, ret; + usb_device_c *dev; + + for(i = 0; i < hub.n_ports; i++) { + dev = hub.usb_port[i].device; + if ((dev != NULL) && (hub.usb_port[i].PortStatus & PORT_STAT_ENABLE)) { + ret = dev->handle_packet(p); + if (ret != USB_RET_NODEV) { + return ret; + } + } + } + return USB_RET_NODEV; +} + +int usb_hub_device_c::handle_packet(USBPacket *p) +{ + if ((d.state >= USB_STATE_DEFAULT) && + (d.addr != 0) && + (p->devaddr != d.addr) && + ((p->pid == USB_TOKEN_SETUP) || + (p->pid == USB_TOKEN_OUT) || + (p->pid == USB_TOKEN_IN))) { + /* broadcast the packet to the devices */ + return broadcast_packet(p); + } + return usb_device_c::handle_packet(p); +} + +void usb_hub_device_c::init_device(Bit8u port, bx_list_c *portconf) +{ + usbdev_type type; + char pname[BX_PATHNAME_LEN]; + const char *devname = NULL; + + devname = ((bx_param_string_c*)portconf->get_by_name("device"))->getptr(); + if (devname == NULL) return; + if (!strlen(devname) || !strcmp(devname, "none")) return; + + if (hub.usb_port[port].device != NULL) { + BX_ERROR(("init_device(): port%d already in use", port+1)); + return; + } + sprintf(pname, "port%d.device", port+1); + bx_list_c *sr_list = (bx_list_c*)SIM->get_param(pname, hub.state); + type = DEV_usb_init_device(portconf, this, &hub.usb_port[port].device, sr_list); + if (hub.usb_port[port].device != NULL) { + usb_set_connect_status(port, type, 1); + } +} + +void usb_hub_device_c::remove_device(Bit8u port) +{ + char pname[BX_PATHNAME_LEN]; + + if (hub.usb_port[port].device != NULL) { + delete hub.usb_port[port].device; + hub.usb_port[port].device = NULL; + sprintf(pname, "port%d.device", port+1); + bx_list_c *devlist = (bx_list_c*)SIM->get_param(pname, hub.state); + devlist->clear(); + } +} + +void usb_hub_device_c::usb_set_connect_status(Bit8u port, int type, bx_bool connected) +{ + usb_device_c *device = hub.usb_port[port].device; + if (device != NULL) { + if (device->get_type() == type) { + if (connected) { + hub.usb_port[port].PortStatus |= PORT_STAT_CONNECTION; + hub.usb_port[port].PortChange |= PORT_STAT_C_CONNECTION; + if (device->get_speed() == USB_SPEED_LOW) + hub.usb_port[port].PortStatus |= PORT_STAT_LOW_SPEED; + else + hub.usb_port[port].PortStatus &= ~PORT_STAT_LOW_SPEED; + if (!device->get_connected()) { + if (!device->init()) { + usb_set_connect_status(port, type, 0); + BX_ERROR(("port #%d: connect failed", port+1)); + } else { + BX_INFO(("port #%d: connect: %s", port+1, device->get_info())); + } + } + } else { + hub.usb_port[port].PortStatus &= ~PORT_STAT_CONNECTION; + hub.usb_port[port].PortChange |= PORT_STAT_C_CONNECTION; + if (hub.usb_port[port].PortStatus & PORT_STAT_ENABLE) { + hub.usb_port[port].PortStatus &= ~PORT_STAT_ENABLE; + hub.usb_port[port].PortChange |= PORT_STAT_C_ENABLE; + } + remove_device(port); + } + } + } +} + +void usb_hub_device_c::timer() +{ + int i; + char pname[6]; + + for (i = 0; i < hub.n_ports; i++) { + // forward timer tick + if (hub.usb_port[i].device != NULL) { + hub.usb_port[i].device->timer(); + } + // device change support + if ((hub.device_change & (1 << i)) != 0) { + sprintf(pname, "port%d", i + 1); + init_device(i, (bx_list_c*)SIM->get_param(pname, hub.config)); + hub.device_change &= ~(1 << i); + } + } +} + +#undef LOG_THIS +#define LOG_THIS hub-> + +// USB hub runtime parameter handler +const char *usb_hub_device_c::hub_param_handler(bx_param_string_c *param, int set, + const char *oldval, const char *val, int maxlen) +{ + usbdev_type type = USB_DEV_TYPE_NONE; + int hubnum, portnum; + usb_hub_device_c *hub; + bx_list_c *port; + + if (set) { + port = (bx_list_c*)param->get_parent(); + hub = (usb_hub_device_c*)(port->get_parent()->get_device_param()); + if (hub != NULL) { + hubnum = atoi(port->get_parent()->get_name()+6); + portnum = atoi(port->get_name()+4) - 1; + bx_bool empty = ((strlen(val) == 0) || (!strcmp(val, "none"))); + if ((portnum >= 0) && (portnum < hub->hub.n_ports)) { + BX_INFO(("USB hub #%d, port #%d experimental device change", hubnum, portnum+1)); + if (empty && (hub->hub.usb_port[portnum].PortStatus & PORT_STAT_CONNECTION)) { + if (hub->hub.usb_port[portnum].device != NULL) { + type = hub->hub.usb_port[portnum].device->get_type(); + } + hub->usb_set_connect_status(portnum, type, 0); + } else if (!empty && !(hub->hub.usb_port[portnum].PortStatus & PORT_STAT_CONNECTION)) { + hub->hub.device_change |= (1 << portnum); + } + } else { + BX_PANIC(("usb_param_handler called with unexpected parameter '%s'", param->get_name())); + } + } else { + BX_PANIC(("hub_param_handler: external hub not found")); + } + } + return val; +} + +#endif // BX_SUPPORT_PCI && BX_SUPPORT_PCIUSB diff --git a/bochs/iodev/usb_hub.h b/bochs/iodev/usb_hub.h new file mode 100644 index 00000000..4ab25735 --- /dev/null +++ b/bochs/iodev/usb_hub.h @@ -0,0 +1,68 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 Volker Ruppert +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// USB hub emulation support ported from the Qemu project + +#ifndef BX_IODEV_USB_HUB_H +#define BX_IODEV_USB_HUB_H + + +// max. number of ports defined in bochs.h + +class usb_hub_device_c : public usb_device_c { +public: + usb_hub_device_c(Bit8u ports); + virtual ~usb_hub_device_c(void); + + virtual int handle_packet(USBPacket *p); + virtual void handle_reset(); + virtual int handle_control(int request, int value, int index, int length, Bit8u *data); + virtual int handle_data(USBPacket *p); + virtual void register_state_specific(bx_list_c *parent); + virtual void after_restore_state(); + virtual void timer(); + +private: + struct { + Bit8u n_ports; + bx_list_c *config; + bx_list_c *state; + char serial_number[16]; + struct { + // our data + usb_device_c *device; // device connected to this port + + Bit16u PortStatus; + Bit16u PortChange; + } usb_port[BX_N_USB_HUB_PORTS]; + Bit16u device_change; + } hub; + + int broadcast_packet(USBPacket *p); + void init_device(Bit8u port, bx_list_c *portconf); + void remove_device(Bit8u port); + void usb_set_connect_status(Bit8u port, int type, bx_bool connected); + + static const char *hub_param_handler(bx_param_string_c *param, int set, + const char *oldval, const char *val, int maxlen); +}; + +#endif diff --git a/bochs/iodev/usb_msd.cc b/bochs/iodev/usb_msd.cc new file mode 100644 index 00000000..7b028617 --- /dev/null +++ b/bochs/iodev/usb_msd.cc @@ -0,0 +1,711 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009-2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// USB mass storage device support ported from the Qemu project + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_PCI && BX_SUPPORT_PCIUSB +#include "usb_common.h" +#include "cdrom.h" +#include "hdimage.h" +#include "scsi_device.h" +#include "usb_msd.h" + +#define LOG_THIS + +enum USBMSDMode { + USB_MSDM_CBW, + USB_MSDM_DATAOUT, + USB_MSDM_DATAIN, + USB_MSDM_CSW +}; + +struct usb_msd_cbw { + Bit32u sig; + Bit32u tag; + Bit32u data_len; + Bit8u flags; + Bit8u lun; + Bit8u cmd_len; + Bit8u cmd[16]; +}; + +struct usb_msd_csw { + Bit32u sig; + Bit32u tag; + Bit32u residue; + Bit8u status; +}; + +// USB requests +#define MassStorageReset 0xff +#define GetMaxLun 0xfe + +static const Bit8u bx_msd_dev_descriptor[] = { + 0x12, /* u8 bLength; */ + 0x01, /* u8 bDescriptorType; Device */ + 0x00, 0x02, /* u16 bcdUSB; v2.0 */ + + 0x00, /* u8 bDeviceClass; */ + 0x00, /* u8 bDeviceSubClass; */ + 0x00, /* u8 bDeviceProtocol; [ low/full speeds only ] */ + 0x40, /* u8 bMaxPacketSize0; 64 Bytes */ + + /* Vendor and product id are arbitrary. */ + 0x00, 0x00, /* u16 idVendor; */ + 0x00, 0x00, /* u16 idProduct; */ + 0x00, 0x01, /* u16 bcdDevice */ + + 0x01, /* u8 iManufacturer; */ + 0x02, /* u8 iProduct; */ + 0x03, /* u8 iSerialNumber; */ + 0x01 /* u8 bNumConfigurations; */ +}; + +static const Bit8u bx_msd_config_descriptor[] = { + + /* one configuration */ + 0x09, /* u8 bLength; */ + 0x02, /* u8 bDescriptorType; Configuration */ + 0x20, 0x00, /* u16 wTotalLength; */ + 0x01, /* u8 bNumInterfaces; (1) */ + 0x01, /* u8 bConfigurationValue; */ + 0x00, /* u8 iConfiguration; */ + 0xc0, /* u8 bmAttributes; + Bit 7: must be set, + 6: Self-powered, + 5: Remote wakeup, + 4..0: resvd */ + 0x00, /* u8 MaxPower; */ + + /* one interface */ + 0x09, /* u8 if_bLength; */ + 0x04, /* u8 if_bDescriptorType; Interface */ + 0x00, /* u8 if_bInterfaceNumber; */ + 0x00, /* u8 if_bAlternateSetting; */ + 0x02, /* u8 if_bNumEndpoints; */ + 0x08, /* u8 if_bInterfaceClass; MASS STORAGE */ + 0x06, /* u8 if_bInterfaceSubClass; SCSI */ + 0x50, /* u8 if_bInterfaceProtocol; Bulk Only */ + 0x00, /* u8 if_iInterface; */ + + /* Bulk-In endpoint */ + 0x07, /* u8 ep_bLength; */ + 0x05, /* u8 ep_bDescriptorType; Endpoint */ + 0x81, /* u8 ep_bEndpointAddress; IN Endpoint 1 */ + 0x02, /* u8 ep_bmAttributes; Bulk */ + 0x40, 0x00, /* u16 ep_wMaxPacketSize; */ + 0x00, /* u8 ep_bInterval; */ + + /* Bulk-Out endpoint */ + 0x07, /* u8 ep_bLength; */ + 0x05, /* u8 ep_bDescriptorType; Endpoint */ + 0x02, /* u8 ep_bEndpointAddress; OUT Endpoint 2 */ + 0x02, /* u8 ep_bmAttributes; Bulk */ + 0x40, 0x00, /* u16 ep_wMaxPacketSize; */ + 0x00 /* u8 ep_bInterval; */ +}; + +static int cdrom_count = 0; + + +usb_msd_device_c::usb_msd_device_c(usbdev_type type, const char *filename) +{ + char pname[10]; + char label[32]; + char tmpfname[BX_PATHNAME_LEN]; + char *ptr1, *ptr2; + bx_param_string_c *path; + bx_param_bool_c *status; + + d.type = type; + d.maxspeed = USB_SPEED_FULL; + d.speed = d.maxspeed; + memset((void*)&s, 0, sizeof(s)); + if (d.type == USB_DEV_TYPE_DISK) { + strcpy(d.devname, "BOCHS USB HARDDRIVE"); + strcpy(tmpfname, filename); + ptr1 = strtok(tmpfname, ":"); + ptr2 = strtok(NULL, ":"); + if ((ptr2 == NULL) || (strlen(ptr1) < 2)) { + s.image_mode = BX_HDIMAGE_MODE_FLAT; + s.fname = filename; + } else { + s.image_mode = SIM->hdimage_get_mode(ptr1); + s.fname = filename+strlen(ptr1)+1; + } + s.journal[0] = 0; + } else if (d.type == USB_DEV_TYPE_CDROM) { + strcpy(d.devname, "BOCHS USB CDROM"); + s.fname = filename; + // config options + bx_list_c *usb_rt = (bx_list_c*)SIM->get_param(BXPN_MENU_RUNTIME_USB); + sprintf(pname, "cdrom%d", ++cdrom_count); + sprintf(label, "USB CD-ROM #%d Configuration", cdrom_count); + s.config = new bx_list_c(usb_rt, pname, label, 2); + s.config->set_options(bx_list_c::SERIES_ASK); + s.config->set_runtime_param(1); + s.config->set_device_param(this); + path = new bx_param_string_c(s.config, "path", "Path", "", "", BX_PATHNAME_LEN); + path->set(s.fname); + path->set_handler(cd_param_string_handler); + path->set_runtime_param(1); + status = new bx_param_bool_c(s.config, "status", "Inserted", "", 1); + status->set_handler(cd_param_handler); + status->set_runtime_param(1); +#if BX_WITH_WX + bx_list_c *usb = (bx_list_c*)SIM->get_param("ports.usb"); + usb->add(s.config); +#endif + } + + put("USBMS"); +} + +usb_msd_device_c::~usb_msd_device_c(void) +{ + if (s.scsi_dev != NULL) + delete s.scsi_dev; + if (s.hdimage != NULL) { + delete s.hdimage; + } else if (s.cdrom != NULL) { + delete s.cdrom; +#if BX_WITH_WX + bx_list_c *usb = (bx_list_c*)SIM->get_param("ports.usb"); + usb->remove(s.config->get_name()); +#endif + bx_list_c *usb_rt = (bx_list_c*)SIM->get_param(BXPN_MENU_RUNTIME_USB); + usb_rt->remove(s.config->get_name()); + } +} + +bx_bool usb_msd_device_c::set_option(const char *option) +{ + if (!strncmp(option, "journal:", 8)) { + strcpy(s.journal, option+8); + return 1; + } + return 0; +} + +bx_bool usb_msd_device_c::init() +{ + if (d.type == USB_DEV_TYPE_DISK) { + s.hdimage = DEV_hdimage_init_image(s.image_mode, 0, s.journal); + if (s.hdimage->open(s.fname) < 0) { + BX_ERROR(("could not open hard drive image file '%s'", s.fname)); + return 0; + } else { + s.scsi_dev = new scsi_device_t(s.hdimage, 0, usb_msd_command_complete, (void*)this); + } + sprintf(s.info_txt, "USB HD: path='%s', mode='%s'", s.fname, hdimage_mode_names[s.image_mode]); + } else if (d.type == USB_DEV_TYPE_CDROM) { + s.cdrom = new LOWLEVEL_CDROM(s.fname); + if (!s.cdrom->insert_cdrom()) { + BX_ERROR(("could not open cdrom image file '%s'", s.fname)); + return 0; + } else { + s.scsi_dev = new scsi_device_t(s.cdrom, 0, usb_msd_command_complete, (void*)this); + } + sprintf(s.info_txt, "USB CD: path='%s'", s.fname); + } + s.scsi_dev->register_state(s.sr_list, "scsidev"); + s.mode = USB_MSDM_CBW; + d.connected = 1; + return 1; +} + +const char* usb_msd_device_c::get_info() +{ + return s.info_txt; +} + +void usb_msd_device_c::register_state_specific(bx_list_c *parent) +{ + s.sr_list = new bx_list_c(parent, "s", "USB MSD Device State", 8); + new bx_shadow_num_c(s.sr_list, "mode", &s.mode); + new bx_shadow_num_c(s.sr_list, "scsi_len", &s.scsi_len); + new bx_shadow_num_c(s.sr_list, "usb_len", &s.usb_len); + new bx_shadow_num_c(s.sr_list, "data_len", &s.data_len); + new bx_shadow_num_c(s.sr_list, "residue", &s.residue); + new bx_shadow_num_c(s.sr_list, "tag", &s.tag); + new bx_shadow_num_c(s.sr_list, "result", &s.result); +} + +void usb_msd_device_c::handle_reset() +{ + BX_DEBUG(("Reset")); + s.mode = USB_MSDM_CBW; +} + +int usb_msd_device_c::handle_control(int request, int value, int index, int length, Bit8u *data) +{ + int ret = 0; + + switch (request) { + case DeviceRequest | USB_REQ_GET_STATUS: + case EndpointRequest | USB_REQ_GET_STATUS: + data[0] = (1 << USB_DEVICE_SELF_POWERED) | + (d.remote_wakeup << USB_DEVICE_REMOTE_WAKEUP); + data[1] = 0x00; + ret = 2; + break; + case DeviceOutRequest | USB_REQ_CLEAR_FEATURE: + if (value == USB_DEVICE_REMOTE_WAKEUP) { + d.remote_wakeup = 0; + } else { + goto fail; + } + ret = 0; + break; + case DeviceOutRequest | USB_REQ_SET_FEATURE: + if (value == USB_DEVICE_REMOTE_WAKEUP) { + d.remote_wakeup = 1; + } else { + goto fail; + } + ret = 0; + break; + case DeviceOutRequest | USB_REQ_SET_ADDRESS: + d.addr = value; + ret = 0; + break; + case DeviceRequest | USB_REQ_GET_DESCRIPTOR: + switch(value >> 8) { + case USB_DT_DEVICE: + memcpy(data, bx_msd_dev_descriptor, sizeof(bx_msd_dev_descriptor)); + ret = sizeof(bx_msd_dev_descriptor); + break; + case USB_DT_CONFIG: + memcpy(data, bx_msd_config_descriptor, sizeof(bx_msd_config_descriptor)); + ret = sizeof(bx_msd_config_descriptor); + break; + case USB_DT_STRING: + switch(value & 0xff) { + case 0: + // language IDs + data[0] = 4; + data[1] = 3; + data[2] = 0x09; + data[3] = 0x04; + ret = 4; + break; + case 1: + // vendor description + ret = set_usb_string(data, "BOCHS"); + break; + case 2: + // product description + if (strlen(d.devname) > 0) { + ret = set_usb_string(data, d.devname); + } else { + goto fail; + } + break; + case 3: + // serial number + ret = set_usb_string(data, s.scsi_dev->get_serial_number()); + break; + default: + BX_ERROR(("USB MSD handle_control: unknown string descriptor 0x%02x", value & 0xff)); + goto fail; + } + break; + case USB_DT_DEVICE_QUALIFIER: + // device qualifier + data[0] = 10; + data[1] = USB_DT_DEVICE_QUALIFIER; + memcpy(data+2, bx_msd_dev_descriptor+2, 6); + data[8] = 1; + data[9] = 0; + ret = 10; + break; + default: + BX_ERROR(("USB MSD handle_control: unknown descriptor type 0x%02x", value >> 8)); + goto fail; + } + break; + case DeviceRequest | USB_REQ_GET_CONFIGURATION: + data[0] = 1; + ret = 1; + break; + case DeviceOutRequest | USB_REQ_SET_CONFIGURATION: + ret = 0; + break; + case DeviceRequest | USB_REQ_GET_INTERFACE: + data[0] = 0; + ret = 1; + break; + case DeviceOutRequest | USB_REQ_SET_INTERFACE: + case InterfaceOutRequest | USB_REQ_SET_INTERFACE: + ret = 0; + break; + case EndpointOutRequest | USB_REQ_CLEAR_FEATURE: + if (value == 0 && index != 0x81) { /* clear ep halt */ + goto fail; + } + ret = 0; + break; + // Class specific requests + case InterfaceOutClassRequest | MassStorageReset: + case MassStorageReset: + s.mode = USB_MSDM_CBW; + ret = 0; + break; + case InterfaceInClassRequest | GetMaxLun: + case GetMaxLun: + data[0] = 0; + ret = 1; + break; + default: + BX_ERROR(("USB MSD handle_control: unknown request 0x%04x", request)); + fail: + d.stall = 1; + ret = USB_RET_STALL; + break; + } + return ret; +} + +int usb_msd_device_c::handle_data(USBPacket *p) +{ + struct usb_msd_cbw cbw; + int ret = 0; + Bit8u devep = p->devep; + Bit8u *data = p->data; + int len = p->len; + + switch (p->pid) { + case USB_TOKEN_OUT: + usb_dump_packet(data, len); + if (devep != 2) + goto fail; + + switch (s.mode) { + case USB_MSDM_CBW: + if (len != 31) { + BX_ERROR(("bad CBW len")); + goto fail; + } + memcpy(&cbw, data, 31); + if (dtoh32(cbw.sig) != 0x43425355) { + BX_ERROR(("bad signature %08x", dtoh32(cbw.sig))); + goto fail; + } + BX_DEBUG(("command on LUN %d", cbw.lun)); + s.tag = dtoh32(cbw.tag); + s.data_len = dtoh32(cbw.data_len); + if (s.data_len == 0) { + s.mode = USB_MSDM_CSW; + } else if (cbw.flags & 0x80) { + s.mode = USB_MSDM_DATAIN; + } else { + s.mode = USB_MSDM_DATAOUT; + } + BX_DEBUG(("command tag 0x%x flags %08x len %d data %d", + s.tag, cbw.flags, cbw.cmd_len, s.data_len)); + s.residue = 0; + s.scsi_dev->scsi_send_command(s.tag, cbw.cmd, cbw.lun); + if (s.residue == 0) { + if (s.mode == USB_MSDM_DATAIN) { + s.scsi_dev->scsi_read_data(s.tag); + } else if (s.mode == USB_MSDM_DATAOUT) { + s.scsi_dev->scsi_write_data(s.tag); + } + } + ret = len; + break; + + case USB_MSDM_DATAOUT: + BX_DEBUG(("data out %d/%d", len, s.data_len)); + if (len > (int)s.data_len) + goto fail; + + s.usb_buf = data; + s.usb_len = len; + if (s.scsi_len) { + copy_data(); + } + if (s.residue && s.usb_len) { + s.data_len -= s.usb_len; + if (s.data_len == 0) + s.mode = USB_MSDM_CSW; + s.usb_len = 0; + } + if (s.usb_len) { + BX_INFO(("deferring packet %p", p)); + usb_defer_packet(p, this); + s.packet = p; + ret = USB_RET_ASYNC; + } else { + ret = len; + } + break; + + default: + BX_ERROR(("USB MSD handle_data: unexpected mode at USB_TOKEN_OUT")); + goto fail; + } + break; + + case USB_TOKEN_IN: + if (devep != 1) + goto fail; + + switch (s.mode) { + case USB_MSDM_DATAOUT: + if ((s.data_len > 0) && (len == 13)) { + s.usb_len = len; + s.usb_buf = data; + send_status(); + ret = 13; + break; + } + if (s.data_len != 0 || len < 13) + goto fail; + usb_defer_packet(p, this); + s.packet = p; + ret = USB_RET_ASYNC; + break; + + case USB_MSDM_CSW: + BX_DEBUG(("command status %d tag 0x%x, len %d", + s.result, s.tag, len)); + if (len < 13) + return ret; + + s.usb_len = len; + s.usb_buf = data; + send_status(); + s.mode = USB_MSDM_CBW; + ret = 13; + break; + + case USB_MSDM_DATAIN: + BX_DEBUG(("data in %d/%d", len, s.data_len)); + if (len > (int)s.data_len) + len = s.data_len; + s.usb_buf = data; + s.usb_len = len; + if (s.scsi_len) { + copy_data(); + } + if (s.residue && s.usb_len) { + s.data_len -= s.usb_len; + memset(s.usb_buf, 0, s.usb_len); + if (s.data_len == 0) + s.mode = USB_MSDM_CSW; + s.usb_len = 0; + } + if (s.usb_len) { + BX_INFO(("deferring packet %p", p)); + usb_defer_packet(p, this); + s.packet = p; + ret = USB_RET_ASYNC; + } else { + ret = len; + } + break; + + default: + BX_ERROR(("USB MSD handle_data: unexpected mode at USB_TOKEN_IN")); + goto fail; + } + if (ret > 0) usb_dump_packet(data, ret); + break; + + default: + BX_ERROR(("USB MSD handle_data: bad token")); +fail: + d.stall = 1; + ret = USB_RET_STALL; + break; + } + + return ret; +} + +void usb_msd_device_c::copy_data() +{ + Bit32u len = s.usb_len; + if (len > s.scsi_len) + len = s.scsi_len; + if (s.mode == USB_MSDM_DATAIN) { + memcpy(s.usb_buf, s.scsi_buf, len); + } else { + memcpy(s.scsi_buf, s.usb_buf, len); + } + s.usb_len -= len; + s.scsi_len -= len; + s.usb_buf += len; + s.scsi_buf += len; + s.data_len -= len; + if (s.scsi_len == 0) { + if (s.mode == USB_MSDM_DATAIN) { + s.scsi_dev->scsi_read_data(s.tag); + } else if (s.mode == USB_MSDM_DATAOUT) { + s.scsi_dev->scsi_write_data(s.tag); + } + } +} + +void usb_msd_device_c::send_status() +{ + struct usb_msd_csw csw; + + csw.sig = htod32(0x53425355); + csw.tag = htod32(s.tag); + csw.residue = s.residue; + csw.status = s.result; + memcpy(s.usb_buf, &csw, 13); +} + +void usb_msd_device_c::usb_msd_command_complete(void *this_ptr, int reason, Bit32u tag, Bit32u arg) +{ + usb_msd_device_c *class_ptr = (usb_msd_device_c *) this_ptr; + class_ptr->command_complete(reason, tag, arg); +} + +void usb_msd_device_c::command_complete(int reason, Bit32u tag, Bit32u arg) +{ + USBPacket *p = s.packet; + + if (tag != s.tag) { + BX_ERROR(("usb-msd_command_complete: unexpected SCSI tag 0x%x", tag)); + } + if (reason == SCSI_REASON_DONE) { + BX_DEBUG(("command complete %d", arg)); + s.residue = s.data_len; + s.result = arg != 0; + if (s.packet) { + if (s.data_len == 0 && s.mode == USB_MSDM_DATAOUT) { + send_status(); + s.mode = USB_MSDM_CBW; + } else { + if (s.data_len) { + s.data_len -= s.usb_len; + if (s.mode == USB_MSDM_DATAIN) + memset(s.usb_buf, 0, s.usb_len); + s.usb_len = 0; + } + if (s.data_len == 0) + s.mode = USB_MSDM_CSW; + } + s.packet = NULL; + } else if (s.data_len == 0) { + s.mode = USB_MSDM_CSW; + } + return; + } + s.scsi_len = arg; + s.scsi_buf = s.scsi_dev->scsi_get_buf(tag); + if (p) { + copy_data(); + if (s.usb_len == 0) { + BX_INFO(("packet complete %p", p)); + s.packet = NULL; + } + } +} + +void usb_msd_device_c::cancel_packet(USBPacket *p) +{ + s.scsi_dev->scsi_cancel_io(s.tag); + s.packet = NULL; + s.scsi_len = 0; +} + +void usb_msd_device_c::set_inserted(bx_bool value) +{ + const char *path; + + if (value) { + path = SIM->get_param_string("path", s.config)->getptr(); + if (!s.cdrom->insert_cdrom(path)) { + SIM->get_param_bool("status", s.config)->set(0); + return; + } + } else { + s.cdrom->eject_cdrom(); + } + s.scsi_dev->set_inserted(value); +} + +bx_bool usb_msd_device_c::get_inserted() +{ + return s.scsi_dev->get_inserted(); +} + +#undef LOG_THIS +#define LOG_THIS cdrom-> + +// USB hub runtime parameter handlers +const char *usb_msd_device_c::cd_param_string_handler(bx_param_string_c *param, int set, + const char *oldval, const char *val, int maxlen) +{ + usb_msd_device_c *cdrom; + + if (set) { + cdrom = (usb_msd_device_c*) param->get_parent()->get_device_param(); + if (cdrom != NULL) { + bx_bool empty = ((strlen(val) == 0) || (!strcmp(val, "none"))); + if (!empty) { + if (cdrom->get_inserted()) { + BX_ERROR(("direct path change not supported (setting to 'none')")); + param->set("none"); + } + } else { + SIM->get_param_bool("status", param->get_parent())->set(0); + } + } else { + BX_PANIC(("cd_param_string_handler: cdrom not found")); + } + } + return val; +} + +Bit64s usb_msd_device_c::cd_param_handler(bx_param_c *param, int set, Bit64s val) +{ + usb_msd_device_c *cdrom; + const char *path; + + if (set) { + cdrom = (usb_msd_device_c*) param->get_parent()->get_device_param(); + if (cdrom != NULL) { + path = SIM->get_param_string("path", param->get_parent())->getptr(); + val &= ((strlen(path) > 0) && (strcmp(path, "none"))); + if (val != cdrom->get_inserted()) { + cdrom->set_inserted((bx_bool)val); + } + } else { + BX_PANIC(("cd_param_string_handler: cdrom not found")); + } + } + return val; +} + +#endif // BX_SUPPORT_PCI && BX_SUPPORT_PCIUSB diff --git a/bochs/iodev/usb_msd.h b/bochs/iodev/usb_msd.h new file mode 100644 index 00000000..50d1d59c --- /dev/null +++ b/bochs/iodev/usb_msd.h @@ -0,0 +1,82 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 Volker Ruppert +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// USB mass storage device support ported from the Qemu project + +#ifndef BX_IODEV_USB_MSD_H +#define BX_IODEV_USB_MSD_H + +class device_image_t; +class LOWLEVEL_CDROM; +class scsi_device_t; + +class usb_msd_device_c : public usb_device_c { +public: + usb_msd_device_c(usbdev_type type, const char *filename); + virtual ~usb_msd_device_c(void); + + virtual bx_bool init(); + virtual bx_bool set_option(const char *option); + virtual const char* get_info(); + + virtual void handle_reset(); + virtual int handle_control(int request, int value, int index, int length, Bit8u *data); + virtual int handle_data(USBPacket *p); + virtual void register_state_specific(bx_list_c *parent); + virtual void cancel_packet(USBPacket *p); + void set_inserted(bx_bool value); + bx_bool get_inserted(); + +protected: + void copy_data(); + void send_status(); + static void usb_msd_command_complete(void *this_ptr, int reason, Bit32u tag, Bit32u arg); + void command_complete(int reason, Bit32u tag, Bit32u arg); + +private: + struct { + Bit8u mode; + Bit32u scsi_len; + Bit8u *scsi_buf; + Bit32u usb_len; + Bit8u *usb_buf; + Bit32u data_len; + Bit32u residue; + Bit32u tag; + int result; + Bit8u image_mode; + device_image_t *hdimage; + LOWLEVEL_CDROM *cdrom; + scsi_device_t *scsi_dev; + USBPacket *packet; + bx_list_c *sr_list; + const char *fname; + bx_list_c *config; + char info_txt[BX_PATHNAME_LEN]; + char journal[BX_PATHNAME_LEN]; + } s; + + static const char *cd_param_string_handler(bx_param_string_c *param, int set, + const char *oldval, const char *val, int maxlen); + static Bit64s cd_param_handler(bx_param_c *param, int set, Bit64s val); +}; + +#endif diff --git a/bochs/iodev/usb_ohci.cc b/bochs/iodev/usb_ohci.cc new file mode 100644 index 00000000..517a3b20 --- /dev/null +++ b/bochs/iodev/usb_ohci.cc @@ -0,0 +1,1505 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 Benjamin D Lunt (fys at frontiernet net) +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Experimental USB OHCI adapter + +// Notes: See usb_common.cc + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + + +#include "iodev.h" + +#if BX_SUPPORT_PCI && BX_SUPPORT_USB_OHCI + +#include "pci.h" +#include "usb_common.h" +#include "usb_ohci.h" + +#define LOG_THIS theUSB_OHCI-> + +bx_usb_ohci_c* theUSB_OHCI = NULL; + +const char *usb_ohci_port_name[] = { + "HCRevision ", + "HCControl ", + "HCCommandStatus ", + "HCInterruptStatus ", + "HCInterruptEnable ", + "HCInterruptDisable", + "HCHCCA ", + "HCPeriodCurrentED ", + "HCControlHeadED ", + "HCControlCurrentED", + "HCBulkHeadED ", + "HCBulkCurrentED ", + "HCDoneHead ", + "HCFmInterval ", + "HCFmRemaining ", + "HCFmNumber ", + "HCPeriodicStart ", + "HCLSThreshold ", + "HCRhDescriptorA ", + "HCRhDescriptorB ", + "HCRhStatus ", + "HCRhPortStatus0 ", + "HCRhPortStatus1 ", + "HCRhPortStatus2 ", + "HCRhPortStatus3 ", + " **unknown** " +}; + +int libusb_ohci_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theUSB_OHCI = new bx_usb_ohci_c(); + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theUSB_OHCI, BX_PLUGIN_USB_OHCI); + return 0; // Success +} + +void libusb_ohci_LTX_plugin_fini(void) +{ + delete theUSB_OHCI; +} + +bx_usb_ohci_c::bx_usb_ohci_c() +{ + put("OHCI"); + memset((void*)&hub, 0, sizeof(bx_usb_ohci_t)); + device_buffer = NULL; + hub.iolight_timer_index = BX_NULL_TIMER_HANDLE; +} + +bx_usb_ohci_c::~bx_usb_ohci_c() +{ + char pname[16]; + + if (BX_OHCI_THIS device_buffer != NULL) + delete [] BX_OHCI_THIS device_buffer; + + for (int i=0; iget_param_string(pname, SIM->get_param(BXPN_USB_OHCI))->set_handler(NULL); + remove_device(i); + } + + BX_DEBUG(("Exit")); +} + +void bx_usb_ohci_c::init(void) +{ + unsigned i; + char pname[6]; + bx_list_c *port; + bx_param_string_c *device, *options; + + BX_OHCI_THIS device_buffer = new Bit8u[65536]; + + // Call our frame timer routine every 1mS (1,000uS) + // Continuous and active + BX_OHCI_THIS hub.frame_index = + bx_pc_system.register_timer(this, usb_frame_handler, 1000, 1,1, "ohci.frame_timer"); + + BX_OHCI_THIS hub.devfunc = 0x00; + DEV_register_pci_handlers(this, &BX_OHCI_THIS hub.devfunc, BX_PLUGIN_USB_OHCI, + "Experimental USB OHCI"); + + for (i=0; i<256; i++) + BX_OHCI_THIS hub.pci_conf[i] = 0x0; + + BX_OHCI_THIS hub.base_addr = 0x0; + BX_OHCI_THIS hub.ohci_done_count = 7; + BX_OHCI_THIS hub.use_control_head = 0; + BX_OHCI_THIS hub.use_bulk_head = 0; + BX_OHCI_THIS hub.sof_time = 0; + + //FIXME: for now, we want a status bar // hub zero, port zero + BX_OHCI_THIS hub.statusbar_id = bx_gui->register_statusitem("OHCI"); + + bx_list_c *usb_rt = (bx_list_c*)SIM->get_param(BXPN_MENU_RUNTIME_USB); + bx_list_c *ohci = (bx_list_c*)SIM->get_param(BXPN_USB_OHCI); + ohci->set_options(ohci->SHOW_PARENT); + ohci->set_runtime_param(1); + usb_rt->add(ohci); + for (i=0; iget_param(pname, ohci); + port->set_runtime_param(1); + device = (bx_param_string_c*)port->get_by_name("device"); + device->set_handler(usb_param_handler); + device->set_runtime_param(1); + options = (bx_param_string_c*)port->get_by_name("options"); + options->set_runtime_param(1); + BX_OHCI_THIS hub.usb_port[i].device = NULL; + BX_OHCI_THIS hub.usb_port[i].HcRhPortStatus.ccs = 0; + BX_OHCI_THIS hub.usb_port[i].HcRhPortStatus.csc = 0; + } + + //HACK: Turn on debug messages from the start + //BX_OHCI_THIS setonoff(LOGLEV_DEBUG, ACT_REPORT); + + // register timer for i/o light + if (BX_OHCI_THIS hub.iolight_timer_index == BX_NULL_TIMER_HANDLE) { + BX_OHCI_THIS hub.iolight_timer_index = + DEV_register_timer(this, iolight_timer_handler, 5000, 0,0, "OHCI i/o light"); + } + BX_OHCI_THIS hub.iolight_counter = 0; + BX_OHCI_THIS hub.device_change = 0; + + BX_INFO(("USB OHCI initialized")); +} + +void bx_usb_ohci_c::reset(unsigned type) +{ + unsigned i; + + if (type == BX_RESET_HARDWARE) { + static const struct reset_vals_t { + unsigned addr; + unsigned char val; + } reset_vals[] = { + { 0x00, 0xC1 }, { 0x01, 0x11 }, // 0x11C1 = vendor + { 0x02, 0x03 }, { 0x03, 0x58 }, // 0x5803 = device + { 0x04, 0x06 }, { 0x05, 0x00 }, // command_io + { 0x06, 0x10 }, { 0x07, 0x02 }, // status (bit 4 = 1, has capabilities list.) + { 0x08, 0x11 }, // revision number + { 0x09, 0x10 }, // interface + { 0x0a, 0x03 }, // class_sub USB Host Controller + { 0x0b, 0x0c }, // class_base Serial Bus Controller + { 0x0D, 0x40 }, // bus latency + { 0x0e, 0x00 }, // header_type_generic + + // address space 0x10 - 0x13 + { 0x10, 0x00 }, { 0x11, 0x50 }, // + { 0x12, 0x00 }, { 0x13, 0xE1 }, // + + { 0x2C, 0xC1 }, { 0x2D, 0x11 }, // subsystem vendor ID + { 0x2E, 0x03 }, { 0x2F, 0x58 }, // subsystem ID + + { 0x34, 0x50 }, // offset of capabilities list within configuration space + + { 0x3c, 0x0B }, // IRQ + { 0x3d, BX_PCI_INTD }, // INT + { 0x3E, 0x03 }, // minimum time bus master needs PCI bus ownership, in 250ns units + { 0x3F, 0x56 }, // maximum latency, in 250ns units (bus masters only) (read-only) + + // capabilities list: + { 0x50, 0x01 }, // + { 0x51, 0x00 }, // + { 0x52, 0x02 }, // + { 0x53, 0x76 }, // + { 0x54, 0x00 }, // + { 0x55, 0x20 }, // + { 0x56, 0x00 }, // + { 0x57, 0x1F }, // + }; + for (i = 0; i < sizeof(reset_vals) / sizeof(*reset_vals); ++i) { + BX_OHCI_THIS hub.pci_conf[reset_vals[i].addr] = reset_vals[i].val; + } + } + + BX_OHCI_THIS reset_hc(); +} + +void bx_usb_ohci_c::reset_hc() +{ + int i; + char pname[6]; + + // reset locals + BX_OHCI_THIS hub.ohci_done_count = 7; + + // HcRevision + BX_OHCI_THIS hub.op_regs.HcRevision = 0x0110; + + // HcControl + BX_OHCI_THIS hub.op_regs.HcControl.reserved = 0; + BX_OHCI_THIS hub.op_regs.HcControl.rwe = 0; + BX_OHCI_THIS hub.op_regs.HcControl.rwc = 0; + BX_OHCI_THIS hub.op_regs.HcControl.ir = 0; + BX_OHCI_THIS hub.op_regs.HcControl.hcfs = 0; + BX_OHCI_THIS hub.op_regs.HcControl.ble = 0; + BX_OHCI_THIS hub.op_regs.HcControl.cle = 0; + BX_OHCI_THIS hub.op_regs.HcControl.ie = 0; + BX_OHCI_THIS hub.op_regs.HcControl.ple = 0; + BX_OHCI_THIS hub.op_regs.HcControl.cbsr = 0; + + // HcCommandStatus + BX_OHCI_THIS hub.op_regs.HcCommandStatus.reserved0 = 0x000000; + BX_OHCI_THIS hub.op_regs.HcCommandStatus.soc = 0; + BX_OHCI_THIS hub.op_regs.HcCommandStatus.reserved1 = 0x000000; + BX_OHCI_THIS hub.op_regs.HcCommandStatus.ocr = 0; + BX_OHCI_THIS hub.op_regs.HcCommandStatus.blf = 0; + BX_OHCI_THIS hub.op_regs.HcCommandStatus.clf = 0; + BX_OHCI_THIS hub.op_regs.HcCommandStatus.hcr = 0; + + // HcInterruptStatus + BX_OHCI_THIS hub.op_regs.HcInterruptStatus = 0x00000000; + + // HcInterruptEnable + BX_OHCI_THIS hub.op_regs.HcInterruptEnable = OHCI_INTR_MIE; + + // HcHCCA + BX_OHCI_THIS hub.op_regs.HcHCCA = 0x00000000; + + // HcPeriodCurrentED + BX_OHCI_THIS hub.op_regs.HcPeriodCurrentED = 0x00000000; + + // HcControlHeadED + BX_OHCI_THIS hub.op_regs.HcControlHeadED = 0x00000000; + + // HcControlCurrentED + BX_OHCI_THIS hub.op_regs.HcControlCurrentED = 0x00000000; + + // HcBulkHeadED + BX_OHCI_THIS hub.op_regs.HcBulkHeadED = 0x00000000; + + // HcBulkCurrentED + BX_OHCI_THIS hub.op_regs.HcBulkCurrentED = 0x00000000; + + // HcDoneHead + BX_OHCI_THIS hub.op_regs.HcDoneHead = 0x00000000; + + // HcFmInterval + BX_OHCI_THIS hub.op_regs.HcFmInterval.fit = 0; + BX_OHCI_THIS hub.op_regs.HcFmInterval.fsmps = 0; + BX_OHCI_THIS hub.op_regs.HcFmInterval.reserved = 0; + BX_OHCI_THIS hub.op_regs.HcFmInterval.fi = 0x2EDF; + + // HcFmRemaining + BX_OHCI_THIS hub.op_regs.HcFmRemainingToggle = 0; + + // HcFmNumber + BX_OHCI_THIS hub.op_regs.HcFmNumber = 0x00000000; + + // HcPeriodicStart + BX_OHCI_THIS hub.op_regs.HcPeriodicStart = 0x00000000; + + // HcLSThreshold + BX_OHCI_THIS hub.op_regs.HcLSThreshold = 0x0628; + + // HcRhDescriptorA + BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.potpgt = 0x10; + BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.reserved = 0; + BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.nocp = 0; + BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.ocpm = 1; + BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.dt = 0; + BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.nps = 0; + BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.psm = 1; + BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.ndp = BX_N_USB_OHCI_PORTS; + + // HcRhDescriptorB + BX_OHCI_THIS hub.op_regs.HcRhDescriptorB.ppcm = ((1 << BX_N_USB_OHCI_PORTS) - 1) << 1; + BX_OHCI_THIS hub.op_regs.HcRhDescriptorB.dr = 0x0000; + + // HcRhStatus + BX_OHCI_THIS hub.op_regs.HcRhStatus.crwe = 0; + BX_OHCI_THIS hub.op_regs.HcRhStatus.reserved0 = 0; + BX_OHCI_THIS hub.op_regs.HcRhStatus.ocic = 0; + BX_OHCI_THIS hub.op_regs.HcRhStatus.lpsc = 0; + BX_OHCI_THIS hub.op_regs.HcRhStatus.drwe = 0; + BX_OHCI_THIS hub.op_regs.HcRhStatus.reserved1 = 0; + BX_OHCI_THIS hub.op_regs.HcRhStatus.oci = 0; + BX_OHCI_THIS hub.op_regs.HcRhStatus.lps = 0; + + // HcRhPortStatus[x] + for (i=0; iget_param(pname, SIM->get_param(BXPN_USB_OHCI))); + } else { + usb_set_connect_status(i, BX_OHCI_THIS hub.usb_port[i].device->get_type(), 1); + } + } +} + +void bx_usb_ohci_c::reset_port(int p) +{ + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.reserved0 = 0; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.prsc = 0; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.ocic = 0; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pssc = 0; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pesc = 0; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.reserved1 = 0; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.lsda = 0; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pps = 0; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.reserved2 = 0; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.prs = 0; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.poci = 0; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pss = 0; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pes = 0; +} + +void bx_usb_ohci_c::register_state(void) +{ + unsigned i; + char portnum[8]; + bx_list_c *hub, *port, *reg; + + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "usb_ohci", "USB OHCI State"); + hub = new bx_list_c(list, "hub", 25); + reg = new bx_list_c(hub, "HcControl", 9); + new bx_shadow_bool_c(reg, "rwe", &BX_OHCI_THIS hub.op_regs.HcControl.rwe); + new bx_shadow_bool_c(reg, "rwc", &BX_OHCI_THIS hub.op_regs.HcControl.rwc); + new bx_shadow_bool_c(reg, "ir", &BX_OHCI_THIS hub.op_regs.HcControl.ir); + new bx_shadow_num_c(reg, "hcfs", &BX_OHCI_THIS hub.op_regs.HcControl.hcfs); + new bx_shadow_bool_c(reg, "ble", &BX_OHCI_THIS hub.op_regs.HcControl.ble); + new bx_shadow_bool_c(reg, "cle", &BX_OHCI_THIS hub.op_regs.HcControl.cle); + new bx_shadow_bool_c(reg, "ie", &BX_OHCI_THIS hub.op_regs.HcControl.ie); + new bx_shadow_bool_c(reg, "ple", &BX_OHCI_THIS hub.op_regs.HcControl.ple); + new bx_shadow_num_c(reg, "cbsr", &BX_OHCI_THIS hub.op_regs.HcControl.cbsr); + reg = new bx_list_c(hub, "HcCommandStatus", 5); + new bx_shadow_num_c(reg, "soc", &BX_OHCI_THIS hub.op_regs.HcCommandStatus.soc); + new bx_shadow_bool_c(reg, "ocr", &BX_OHCI_THIS hub.op_regs.HcCommandStatus.ocr); + new bx_shadow_bool_c(reg, "blf", &BX_OHCI_THIS hub.op_regs.HcCommandStatus.blf); + new bx_shadow_bool_c(reg, "clf", &BX_OHCI_THIS hub.op_regs.HcCommandStatus.clf); + new bx_shadow_bool_c(reg, "hcr", &BX_OHCI_THIS hub.op_regs.HcCommandStatus.hcr); + new bx_shadow_num_c(hub, "HcInterruptStatus", &BX_OHCI_THIS hub.op_regs.HcInterruptStatus, BASE_HEX); + new bx_shadow_num_c(hub, "HcInterruptEnable", &BX_OHCI_THIS hub.op_regs.HcInterruptEnable, BASE_HEX); + new bx_shadow_num_c(hub, "HcHCCA", &BX_OHCI_THIS hub.op_regs.HcHCCA, BASE_HEX); + new bx_shadow_num_c(hub, "HcPeriodCurrentED", &BX_OHCI_THIS hub.op_regs.HcPeriodCurrentED, BASE_HEX); + new bx_shadow_num_c(hub, "HcControlHeadED", &BX_OHCI_THIS hub.op_regs.HcControlHeadED, BASE_HEX); + new bx_shadow_num_c(hub, "HcControlCurrentED", &BX_OHCI_THIS hub.op_regs.HcControlCurrentED, BASE_HEX); + new bx_shadow_num_c(hub, "HcBulkHeadED", &BX_OHCI_THIS hub.op_regs.HcBulkHeadED, BASE_HEX); + new bx_shadow_num_c(hub, "HcBulkCurrentED", &BX_OHCI_THIS hub.op_regs.HcBulkCurrentED, BASE_HEX); + new bx_shadow_num_c(hub, "HcDoneHead", &BX_OHCI_THIS hub.op_regs.HcDoneHead, BASE_HEX); + reg = new bx_list_c(hub, "HcFmInterval", 3); + new bx_shadow_bool_c(reg, "fit", &BX_OHCI_THIS hub.op_regs.HcFmInterval.fit); + new bx_shadow_num_c(reg, "fsmps", &BX_OHCI_THIS hub.op_regs.HcFmInterval.fsmps); + new bx_shadow_num_c(reg, "fi", &BX_OHCI_THIS hub.op_regs.HcFmInterval.fi, BASE_HEX); + new bx_shadow_bool_c(hub, "HcFmRemainingToggle", &BX_OHCI_THIS hub.op_regs.HcFmRemainingToggle); + new bx_shadow_num_c(hub, "HcFmNumber", &BX_OHCI_THIS hub.op_regs.HcFmNumber, BASE_HEX); + new bx_shadow_num_c(hub, "HcPeriodicStart", &BX_OHCI_THIS hub.op_regs.HcPeriodicStart, BASE_HEX); + reg = new bx_list_c(hub, "HcRhDescriptorA", 7); + new bx_shadow_num_c(reg, "potpgt", &BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.potpgt, BASE_HEX); + new bx_shadow_bool_c(reg, "nocp", &BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.nocp); + new bx_shadow_bool_c(reg, "ocpm", &BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.ocpm); + new bx_shadow_bool_c(reg, "dt", &BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.dt); + new bx_shadow_bool_c(reg, "nps", &BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.nps); + new bx_shadow_bool_c(reg, "psm", &BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.psm); + new bx_shadow_num_c(reg, "ndp", &BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.ndp); + reg = new bx_list_c(hub, "HcRhDescriptorB", 2); + new bx_shadow_num_c(reg, "ppcm", &BX_OHCI_THIS hub.op_regs.HcRhDescriptorB.ppcm, BASE_HEX); + new bx_shadow_num_c(reg, "dr", &BX_OHCI_THIS hub.op_regs.HcRhDescriptorB.dr, BASE_HEX); + reg = new bx_list_c(hub, "HcRhStatus", 6); + new bx_shadow_bool_c(reg, "crwe", &BX_OHCI_THIS hub.op_regs.HcRhStatus.crwe); + new bx_shadow_bool_c(reg, "ocic", &BX_OHCI_THIS hub.op_regs.HcRhStatus.ocic); + new bx_shadow_bool_c(reg, "lpsc", &BX_OHCI_THIS hub.op_regs.HcRhStatus.lpsc); + new bx_shadow_bool_c(reg, "drwe", &BX_OHCI_THIS hub.op_regs.HcRhStatus.drwe); + new bx_shadow_bool_c(reg, "oci", &BX_OHCI_THIS hub.op_regs.HcRhStatus.oci); + new bx_shadow_bool_c(reg, "lps", &BX_OHCI_THIS hub.op_regs.HcRhStatus.lps); + for (i=0; iafter_restore_state(); + } + } +} + +void bx_usb_ohci_c::init_device(Bit8u port, bx_list_c *portconf) +{ + usbdev_type type; + char pname[BX_PATHNAME_LEN]; + const char *devname = NULL; + + devname = ((bx_param_string_c*)portconf->get_by_name("device"))->getptr(); + if (devname == NULL) return; + if (!strlen(devname) || !strcmp(devname, "none")) return; + + if (BX_OHCI_THIS hub.usb_port[port].device != NULL) { + BX_ERROR(("init_device(): port%d already in use", port+1)); + return; + } + sprintf(pname, "usb_ohci.hub.port%d.device", port+1); + bx_list_c *sr_list = (bx_list_c*)SIM->get_param(pname, SIM->get_bochs_root()); + type = DEV_usb_init_device(portconf, BX_OHCI_THIS_PTR, &BX_OHCI_THIS hub.usb_port[port].device, sr_list); + if (BX_OHCI_THIS hub.usb_port[port].device != NULL) { + usb_set_connect_status(port, type, 1); + } +} + +void bx_usb_ohci_c::remove_device(Bit8u port) +{ + char pname[BX_PATHNAME_LEN]; + + if (BX_OHCI_THIS hub.usb_port[port].device != NULL) { + delete BX_OHCI_THIS hub.usb_port[port].device; + BX_OHCI_THIS hub.usb_port[port].device = NULL; + sprintf(pname, "usb_ohci.hub.port%d.device", port+1); + bx_list_c *devlist = (bx_list_c*)SIM->get_param(pname, SIM->get_bochs_root()); + devlist->clear(); + } +} + +void bx_usb_ohci_c::update_irq() +{ + bx_bool level = 0; + + if ((BX_OHCI_THIS hub.op_regs.HcInterruptEnable & OHCI_INTR_MIE) && + (BX_OHCI_THIS hub.op_regs.HcInterruptStatus & BX_OHCI_THIS hub.op_regs.HcInterruptEnable)) { + level = 1; + BX_DEBUG(("Interrupt Fired.")); + } + DEV_pci_set_irq(BX_OHCI_THIS hub.devfunc, BX_OHCI_THIS hub.pci_conf[0x3d], level); +} + +void bx_usb_ohci_c::set_interrupt(Bit32u value) +{ + BX_OHCI_THIS hub.op_regs.HcInterruptStatus |= value; + update_irq(); +} + +bx_bool bx_usb_ohci_c::read_handler(bx_phy_address addr, unsigned len, void *data, void *param) +{ + Bit32u val = 0x0; + int p = 0; + + if (len != 4) { + BX_INFO(("Read at 0x%08X with len != 4 (%i)", (Bit32u)addr, len)); + return 1; + } + if (addr & 3) { + BX_INFO(("Misaligned read at 0x%08X", (Bit32u)addr)); + return 1; + } + + Bit32u offset = (Bit32u)(addr - BX_OHCI_THIS hub.base_addr); + switch (offset) { + case 0x00: // HcRevision + val = BX_OHCI_THIS hub.op_regs.HcRevision; + break; + + case 0x04: // HcControl + val = (BX_OHCI_THIS hub.op_regs.HcControl.reserved << 11) + | (BX_OHCI_THIS hub.op_regs.HcControl.rwe ? 1 << 10 : 0) + | (BX_OHCI_THIS hub.op_regs.HcControl.rwc ? 1 << 9 : 0) + | (BX_OHCI_THIS hub.op_regs.HcControl.ir ? 1 << 8 : 0) + | (BX_OHCI_THIS hub.op_regs.HcControl.hcfs << 6) + | (BX_OHCI_THIS hub.op_regs.HcControl.ble ? 1 << 5 : 0) + | (BX_OHCI_THIS hub.op_regs.HcControl.cle ? 1 << 4 : 0) + | (BX_OHCI_THIS hub.op_regs.HcControl.ie ? 1 << 3 : 0) + | (BX_OHCI_THIS hub.op_regs.HcControl.ple ? 1 << 2 : 0) + | (BX_OHCI_THIS hub.op_regs.HcControl.cbsr << 0); + break; + + case 0x08: // HcCommandStatus + val = (BX_OHCI_THIS hub.op_regs.HcCommandStatus.reserved0 << 18) + | (BX_OHCI_THIS hub.op_regs.HcCommandStatus.soc << 16) + | (BX_OHCI_THIS hub.op_regs.HcCommandStatus.reserved1 << 4) + | (BX_OHCI_THIS hub.op_regs.HcCommandStatus.ocr ? 1 << 3 : 0) + | (BX_OHCI_THIS hub.op_regs.HcCommandStatus.blf ? 1 << 2 : 0) + | (BX_OHCI_THIS hub.op_regs.HcCommandStatus.clf ? 1 << 1 : 0) + | (BX_OHCI_THIS hub.op_regs.HcCommandStatus.hcr ? 1 << 0 : 0); + break; + + case 0x0C: // HcInterruptStatus + val = BX_OHCI_THIS hub.op_regs.HcInterruptStatus; + break; + + case 0x10: // HcInterruptEnable + case 0x14: // HcInterruptDisable (reading this one returns that one) + val = BX_OHCI_THIS hub.op_regs.HcInterruptEnable; + break; + + case 0x18: // HcHCCA + val = BX_OHCI_THIS hub.op_regs.HcHCCA; + break; + + case 0x1C: // HcPeriodCurrentED + val = BX_OHCI_THIS hub.op_regs.HcPeriodCurrentED; + break; + + case 0x20: // HcControlHeadED + val = BX_OHCI_THIS hub.op_regs.HcControlHeadED; + break; + + case 0x24: // HcControlCurrentED + val = BX_OHCI_THIS hub.op_regs.HcControlCurrentED; + break; + + case 0x28: // HcBulkHeadED + val = BX_OHCI_THIS hub.op_regs.HcBulkHeadED; + break; + + case 0x2C: // HcBulkCurrentED + val = BX_OHCI_THIS hub.op_regs.HcBulkCurrentED; + break; + + case 0x30: // HcDoneHead + val = BX_OHCI_THIS hub.op_regs.HcDoneHead; + break; + + case 0x34: // HcFmInterval + val = (BX_OHCI_THIS hub.op_regs.HcFmInterval.fit ? 1 << 31 : 0) + | (BX_OHCI_THIS hub.op_regs.HcFmInterval.fsmps << 16) + | (BX_OHCI_THIS hub.op_regs.HcFmInterval.reserved << 14) + | (BX_OHCI_THIS hub.op_regs.HcFmInterval.fi << 0); + break; + + case 0x38: // HcFmRemaining + val = get_frame_remaining(); + break; + + case 0x3C: // HcFmNumber + val = BX_OHCI_THIS hub.op_regs.HcFmNumber; + break; + + case 0x40: // HcPeriodicStart + val = BX_OHCI_THIS hub.op_regs.HcPeriodicStart; + break; + + case 0x44: // HcLSThreshold + val = BX_OHCI_THIS hub.op_regs.HcLSThreshold; + break; + + case 0x48: // HcRhDescriptorA + val = (BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.potpgt << 24) + | (BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.reserved << 13) + | (BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.nocp ? 1 << 12 : 0) + | (BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.ocpm ? 1 << 11 : 0) + | 0 //BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.dt << 10 + | (BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.nps ? 1 << 9 : 0) + | (BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.psm ? 1 << 8 : 0) + | (BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.ndp << 0); + break; + + case 0x4C: // HcRhDescriptorB + val = (BX_OHCI_THIS hub.op_regs.HcRhDescriptorB.ppcm << 16) + | (BX_OHCI_THIS hub.op_regs.HcRhDescriptorB.dr << 0); + break; + + case 0x50: // HcRhStatus + val = (BX_OHCI_THIS hub.op_regs.HcRhStatus.crwe ? 1 << 31 : 0) + | (BX_OHCI_THIS hub.op_regs.HcRhStatus.reserved0 << 18) + | (BX_OHCI_THIS hub.op_regs.HcRhStatus.ocic ? 1 << 17 : 0) + | 0 //BX_OHCI_THIS hub.op_regs.HcRhStatus.lpsc << 16 + | (BX_OHCI_THIS hub.op_regs.HcRhStatus.drwe ? 1 << 15 : 0) + | (BX_OHCI_THIS hub.op_regs.HcRhStatus.reserved1 << 2) + | (BX_OHCI_THIS hub.op_regs.HcRhStatus.oci ? 1 << 1 : 0) + | (BX_OHCI_THIS hub.op_regs.HcRhStatus.lps ? 1 << 0 : 0); + break; + + case 0x60: // HcRhPortStatus[3] +#if (BX_N_USB_OHCI_PORTS < 4) + val = 0; + break; +#endif + case 0x5C: // HcRhPortStatus[2] +#if (BX_N_USB_OHCI_PORTS < 3) + val = 0; + break; +#endif + case 0x58: // HcRhPortStatus[1] +#if (BX_N_USB_OHCI_PORTS < 2) + val = 0; + break; +#endif + case 0x54: // HcRhPortStatus[0] + p = (offset - 0x54) >> 2; + if (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pps == 1) { + val = (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.reserved0 << 21) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.prsc ? (1 << 20) : 0) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.ocic ? (1 << 19) : 0) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pssc ? (1 << 18) : 0) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pesc ? (1 << 17) : 0) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.csc ? (1 << 16) : 0) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.reserved1 << 10) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.lsda ? (1 << 9) : 0) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pps ? (1 << 8) : 0) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.reserved2 << 5) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.prs ? (1 << 4) : 0) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.poci ? (1 << 3) : 0) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pss ? (1 << 2) : 0) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pes ? (1 << 1) : 0) + | (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.ccs ? (1 << 0) : 0); + } else + val = 0; + break; + + default: + BX_ERROR(("unsupported read from address=0x%08X!", (Bit32u)addr)); + break; + } + + int name = offset >> 2; + if (name > (0x60 >> 2)) + name = 25; + //BX_INFO(("register read from address 0x%04X (%s): 0x%08X (len=%i)", (unsigned) addr, usb_ohci_port_name[name], (Bit32u) val, len)); + *((Bit32u *) data) = val; + + return 1; +} + +bx_bool bx_usb_ohci_c::write_handler(bx_phy_address addr, unsigned len, void *data, void *param) +{ + Bit32u value = *((Bit32u *) data); + Bit32u offset = (Bit32u)addr - BX_OHCI_THIS hub.base_addr; + int p, org_state; + + int name = offset >> 2; + if (name > (0x60 >> 2)) + name = 25; + //BX_INFO(("register write to address 0x%04X (%s): 0x%08X (len=%i)", (unsigned) addr, usb_ohci_port_name[name], (unsigned) value, len)); + + if (len != 4) { + BX_INFO(("Write at 0x%08X with len != 4 (%i)", (Bit32u)addr, len)); + return 1; + } + if (addr & 3) { + BX_INFO(("Misaligned write at 0x%08X", (Bit32u)addr)); + return 1; + } + + switch (offset) { + case 0x00: // HcRevision + BX_ERROR(("Write to HcRevision ignored")); + break; + + case 0x04: // HcControl + if (value & 0xFFFFF800) + BX_ERROR(("Write to reserved field in HcControl")); + org_state = BX_OHCI_THIS hub.op_regs.HcControl.hcfs; + BX_OHCI_THIS hub.op_regs.HcControl.rwe = (value & (1<<10)) ? 1 : 0; + BX_OHCI_THIS hub.op_regs.HcControl.rwc = (value & (1<< 9)) ? 1 : 0; + BX_OHCI_THIS hub.op_regs.HcControl.ir = (value & (1<< 8)) ? 1 : 0; + BX_OHCI_THIS hub.op_regs.HcControl.hcfs = (value & (3<< 6)) >> 6; + BX_OHCI_THIS hub.op_regs.HcControl.ble = (value & (1<< 5)) ? 1 : 0; + BX_OHCI_THIS hub.op_regs.HcControl.cle = (value & (1<< 4)) ? 1 : 0; + BX_OHCI_THIS hub.op_regs.HcControl.ie = (value & (1<< 3)) ? 1 : 0; + BX_OHCI_THIS hub.op_regs.HcControl.ple = (value & (1<< 2)) ? 1 : 0; + BX_OHCI_THIS hub.op_regs.HcControl.cbsr = (value & (3<< 0)) >> 0; + if (BX_OHCI_THIS hub.op_regs.HcControl.hcfs == 0x02) { + BX_OHCI_THIS hub.op_regs.HcFmRemainingToggle = 0; + if (org_state != 2) + BX_OHCI_THIS hub.use_control_head = BX_OHCI_THIS hub.use_bulk_head = 1; + } + break; + + case 0x08: // HcCommandStatus + if (value & 0xFFFCFFF0) + BX_ERROR(("Write to a reserved field in HcCommandStatus")); + if (value & (3<<16)) + BX_ERROR(("Write to R/O field: HcCommandStatus.soc")); + if (value & (1<< 3)) BX_OHCI_THIS hub.op_regs.HcCommandStatus.ocr = 1; + if (value & (1<< 2)) BX_OHCI_THIS hub.op_regs.HcCommandStatus.blf = 1; + if (value & (1<< 1)) BX_OHCI_THIS hub.op_regs.HcCommandStatus.clf = 1; + if (value & (1<< 0)) { + BX_OHCI_THIS hub.op_regs.HcCommandStatus.hcr = 1; + BX_OHCI_THIS reset_hc(); + BX_OHCI_THIS hub.op_regs.HcControl.hcfs = 3; // suspend state + for (unsigned i=0; i> 16; + BX_OHCI_THIS hub.op_regs.HcFmInterval.fi = (value & 0x00003FFF) >> 0; + break; + + case 0x38: // HcFmRemaining + BX_ERROR(("Write to HcFmRemaining not allowed.")); + break; + + case 0x3C: // HcFmNumber + BX_ERROR(("Write to HcFmNumber not allowed.")); + break; + + case 0x40: // HcPeriodicStart + if (value & 0xFFFFC000) + BX_ERROR(("Write to a reserved field in HcPeriodicStart.")); + BX_OHCI_THIS hub.op_regs.HcPeriodicStart = (value & 0x00003FFF); + break; + + case 0x44: // HcLSThreshold + BX_ERROR(("Write to HcLSThreshold not allowed.")); + break; + + case 0x48: // HcRhDescriptorA + if (value & 0x00FFE000) + BX_ERROR(("Write to a reserved field in HcRhDescriptorA.")); + if (value & 0x000000FF) + BX_ERROR(("Write to HcRhDescriptorA.ndp not allowed.")); + if (value & (1<<10)) + BX_ERROR(("Write to HcRhDescriptorA.dt not allowed.")); + BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.potpgt = (value & 0xFF000000) >> 24; + BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.nocp = (value & (1<<12)) ? 1 : 0; + BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.ocpm = (value & (1<<11)) ? 1 : 0; + BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.nps = (value & (1<< 9)) ? 1 : 0; + BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.psm = (value & (1<< 8)) ? 1 : 0; + if (BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.psm == 0) { + + BX_INFO(("Ben: BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.psm == 0")); + // all ports have power, etc. + // BX_USB_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pps = 1 + // Call a routine to set each ports dword (LS, Connected, etc.) + + } else { + + BX_INFO(("Ben: BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.psm == 1")); + // only ports with bit set in rhstatus have power, etc. + // Call a routine to set each ports dword (LS, Connected, etc.) + + } + break; + + case 0x4C: // HcRhDescriptorB + BX_OHCI_THIS hub.op_regs.HcRhDescriptorB.ppcm = (value & 0xFFFF0000) >> 16; + BX_OHCI_THIS hub.op_regs.HcRhDescriptorB.dr = (value & 0x0000FFFF) >> 0; + break; + + case 0x50: { // HcRhStatus + if (value & 0x7FFC7FFC) + BX_ERROR(("Write to a reserved field in HcRhStatus.")); + if (value & (1<<1)) + BX_ERROR(("Write to HcRhStatus.oci not allowed.")); + // which one of these two takes presidence? + if (value & (1<<31)) BX_OHCI_THIS hub.op_regs.HcRhStatus.drwe = 0; + if (value & (1<<15)) BX_OHCI_THIS hub.op_regs.HcRhStatus.drwe = 1; + + if (value & (1<<17)) BX_OHCI_THIS hub.op_regs.HcRhStatus.ocic = 1; + if (value & (1<<16)) { + if (BX_OHCI_THIS hub.op_regs.HcRhDescriptorA.psm == 0) { + for (p=0; p> 2; + if (value & 0xFFE0FCE0) + BX_ERROR(("Write to a reserved field in usb_port[%d].HcRhPortStatus", p)); + if (value & (1<<0)) + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pes = 0; + if (value & (1<<1)) { + if (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.ccs == 0) + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.csc = 1; + else + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pes = 1; + } + if (value & (1<<2)) { + if (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.ccs == 0) + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.csc = 1; + else + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pss = 1; + } +// if (value & (1<<3)) +// if (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pss) +// ; // do a resume (or test this in the timer code and do the resume there) + if (value & (1<<4)) { + if (BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.ccs == 0) + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.csc = 1; + else { + reset_port(p); + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pps = 1; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pes = 1; + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.prsc = 1; + // are we are currently connected/disconnected + if (BX_OHCI_THIS hub.usb_port[p].device != NULL) { + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.lsda = + (BX_OHCI_THIS hub.usb_port[p].device->get_speed() == USB_SPEED_LOW); + usb_set_connect_status(p, BX_OHCI_THIS hub.usb_port[p].device->get_type(), 1); + DEV_usb_send_msg(BX_OHCI_THIS hub.usb_port[p].device, USB_MSG_RESET); + } + set_interrupt(OHCI_INTR_RHSC); + } + } + if (value & (1<<8)) + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pps = 1; + if (value & (1<<9)) + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pps = 0; + if (value & (1<<16)) + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.csc = (value & ((1<<4) | (1<<1) | (1<<2))) ? 1 : 0; + if (value & (1<<17)) + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pesc = 0; + if (value & (1<<18)) + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.pssc = 0; + if (value & (1<<19)) + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.ocic = 0; + if (value & (1<<20)) + BX_OHCI_THIS hub.usb_port[p].HcRhPortStatus.prsc = 0; + break; + } + + default: + BX_ERROR(("unsupported write to address=0x%08X, val = 0x%08X!", (Bit32u)addr, value)); + break; + } + + return 1; +} + +Bit32u bx_usb_ohci_c::get_frame_remaining(void) +{ + Bit16u bit_time, fr; + + bit_time = (Bit16u)((bx_pc_system.time_usec() - BX_OHCI_THIS hub.sof_time) * 12); + if ((BX_OHCI_THIS hub.op_regs.HcControl.hcfs != 2) || + (bit_time > BX_OHCI_THIS hub.op_regs.HcFmInterval.fi)) { + fr = 0; + } else { + fr = BX_OHCI_THIS hub.op_regs.HcFmInterval.fi - bit_time; + } + return (BX_OHCI_THIS hub.op_regs.HcFmRemainingToggle << 31) | fr; +} + +void bx_usb_ohci_c::usb_frame_handler(void *this_ptr) +{ + bx_usb_ohci_c *class_ptr = (bx_usb_ohci_c *) this_ptr; + class_ptr->usb_frame_timer(); +} + +// Called once every 1mS +void bx_usb_ohci_c::usb_frame_timer(void) +{ + struct OHCI_ED cur_ed; + Bit32u address, ed_address; + Bit16u zero = 0; + int i; + char pname[6]; + + if (BX_OHCI_THIS hub.op_regs.HcControl.hcfs == 2) { + // set remaining to the interval amount. + BX_OHCI_THIS hub.op_regs.HcFmRemainingToggle = BX_OHCI_THIS hub.op_regs.HcFmInterval.fit; + BX_OHCI_THIS hub.sof_time = bx_pc_system.time_usec(); + + // The Frame Number Register is incremented + // every time bit 15 is changed (at 0x8000 or 0x0000), fno is fired. + BX_OHCI_THIS hub.op_regs.HcFmNumber++; + BX_OHCI_THIS hub.op_regs.HcFmNumber &= 0xffff; + DEV_MEM_WRITE_PHYSICAL(BX_OHCI_THIS hub.op_regs.HcHCCA + 0x80, 2, (Bit8u *) &BX_OHCI_THIS hub.op_regs.HcFmNumber); + DEV_MEM_WRITE_PHYSICAL(BX_OHCI_THIS hub.op_regs.HcHCCA + 0x82, 2, (Bit8u *) &zero); + if ((BX_OHCI_THIS hub.op_regs.HcFmNumber == 0x8000) || (BX_OHCI_THIS hub.op_regs.HcFmNumber == 0x0000)) { + set_interrupt(OHCI_INTR_FNO); + } + + // + set_interrupt(OHCI_INTR_SF); + + // if interrupt delay (done_count) == 0, and status.wdh == 0, then update the donehead fields. + BX_DEBUG(("done_count = %i, status.wdh = %i", BX_OHCI_THIS hub.ohci_done_count, + ((BX_OHCI_THIS hub.op_regs.HcInterruptStatus & OHCI_INTR_WD) > 0))); + if ((BX_OHCI_THIS hub.ohci_done_count == 0) && ((BX_OHCI_THIS hub.op_regs.HcInterruptStatus & OHCI_INTR_WD) == 0)) { + Bit32u temp = BX_OHCI_THIS hub.op_regs.HcDoneHead; + if (BX_OHCI_THIS hub.op_regs.HcInterruptStatus & BX_OHCI_THIS hub.op_regs.HcInterruptEnable) + temp |= 1; + BX_DEBUG(("Updating the hcca.DoneHead field to 0x%08X and setting the wdh flag", temp)); + DEV_MEM_WRITE_PHYSICAL(BX_OHCI_THIS hub.op_regs.HcHCCA + 0x84, 4, (Bit8u *) &temp); + BX_OHCI_THIS hub.op_regs.HcDoneHead = 0; + BX_OHCI_THIS hub.ohci_done_count = 7; + set_interrupt(OHCI_INTR_WD); + } + + // if (6 >= done_count > 0) then decrement done_count + if ((BX_OHCI_THIS hub.ohci_done_count != 7) && (BX_OHCI_THIS hub.ohci_done_count > 0)) + BX_OHCI_THIS hub.ohci_done_count--; + + // TODO: Rather than just comparing .fr to <8000 here, and <4000 below, see the highlighted + // statement on page 45. + + // if the control list is enabled *and* the control list filled bit is set, do a control list ED + if (BX_OHCI_THIS hub.op_regs.HcControl.cle) { + if (BX_OHCI_THIS hub.use_control_head) { + BX_OHCI_THIS hub.op_regs.HcControlCurrentED = 0; + BX_OHCI_THIS hub.use_control_head = 0; + } + if (!BX_OHCI_THIS hub.op_regs.HcControlCurrentED && BX_OHCI_THIS hub.op_regs.HcCommandStatus.clf) { + BX_OHCI_THIS hub.op_regs.HcControlCurrentED = BX_OHCI_THIS hub.op_regs.HcControlHeadED; + BX_OHCI_THIS hub.op_regs.HcCommandStatus.clf = 0; + } + while (BX_OHCI_THIS hub.op_regs.HcControlCurrentED) { + DEV_MEM_READ_PHYSICAL(BX_OHCI_THIS hub.op_regs.HcControlCurrentED, 4, (Bit8u*) &cur_ed.dword0); + DEV_MEM_READ_PHYSICAL(BX_OHCI_THIS hub.op_regs.HcControlCurrentED + 4, 4, (Bit8u*) &cur_ed.dword1); + DEV_MEM_READ_PHYSICAL(BX_OHCI_THIS hub.op_regs.HcControlCurrentED + 8, 4, (Bit8u*) &cur_ed.dword2); + DEV_MEM_READ_PHYSICAL(BX_OHCI_THIS hub.op_regs.HcControlCurrentED + 12, 4, (Bit8u*) &cur_ed.dword3); + process_ed(&cur_ed, BX_OHCI_THIS hub.op_regs.HcControlCurrentED); + BX_OHCI_THIS hub.op_regs.HcControlCurrentED = ED_GET_NEXTED(&cur_ed); + if (get_frame_remaining() < 8000) + goto do_bulk_eds; + } + } + +do_bulk_eds: + // if the bulk list is enabled *and* the bulk list filled bit is set, do a bulk list ED + if (BX_OHCI_THIS hub.op_regs.HcControl.ble) { + if (BX_OHCI_THIS hub.use_bulk_head) { + BX_OHCI_THIS hub.op_regs.HcBulkCurrentED = 0; + BX_OHCI_THIS hub.use_bulk_head = 0; + } + if (!BX_OHCI_THIS hub.op_regs.HcBulkCurrentED && BX_OHCI_THIS hub.op_regs.HcCommandStatus.blf) { + BX_OHCI_THIS hub.op_regs.HcBulkCurrentED = BX_OHCI_THIS hub.op_regs.HcBulkHeadED; + BX_OHCI_THIS hub.op_regs.HcCommandStatus.blf = 0; + } + while (BX_OHCI_THIS hub.op_regs.HcBulkCurrentED) { + DEV_MEM_READ_PHYSICAL(BX_OHCI_THIS hub.op_regs.HcBulkCurrentED, 4, (Bit8u*) &cur_ed.dword0); + DEV_MEM_READ_PHYSICAL(BX_OHCI_THIS hub.op_regs.HcBulkCurrentED + 4, 4, (Bit8u*) &cur_ed.dword1); + DEV_MEM_READ_PHYSICAL(BX_OHCI_THIS hub.op_regs.HcBulkCurrentED + 8, 4, (Bit8u*) &cur_ed.dword2); + DEV_MEM_READ_PHYSICAL(BX_OHCI_THIS hub.op_regs.HcBulkCurrentED + 12, 4, (Bit8u*) &cur_ed.dword3); + process_ed(&cur_ed, BX_OHCI_THIS hub.op_regs.HcBulkCurrentED); + BX_OHCI_THIS hub.op_regs.HcBulkCurrentED = ED_GET_NEXTED(&cur_ed); + if (get_frame_remaining() < 4000) + goto do_iso_eds; + } + } + +do_iso_eds: + // do the ED's in the interrupt table + if (BX_OHCI_THIS hub.op_regs.HcControl.ple) { + address = BX_OHCI_THIS hub.op_regs.HcHCCA + ((BX_OHCI_THIS hub.op_regs.HcFmNumber & 0x1F) * 4); + DEV_MEM_READ_PHYSICAL(address, 4, (Bit8u*) &ed_address); + while (ed_address) { + DEV_MEM_READ_PHYSICAL(ed_address, 4, (Bit8u*) &cur_ed.dword0); + DEV_MEM_READ_PHYSICAL(ed_address + 4, 4, (Bit8u*) &cur_ed.dword1); + DEV_MEM_READ_PHYSICAL(ed_address + 8, 4, (Bit8u*) &cur_ed.dword2); + DEV_MEM_READ_PHYSICAL(ed_address + 12, 4, (Bit8u*) &cur_ed.dword3); + process_ed(&cur_ed, ed_address); + ed_address = ED_GET_NEXTED(&cur_ed); + } + } + + } // end run schedule + + for (i = 0; i < BX_N_USB_OHCI_PORTS; i++) { + // forward timer tick + if (BX_OHCI_THIS hub.usb_port[i].device != NULL) { + BX_OHCI_THIS hub.usb_port[i].device->timer(); + } + // device change support + if ((BX_OHCI_THIS hub.device_change & (1 << i)) != 0) { + sprintf(pname, "port%d", i + 1); + init_device(i, (bx_list_c*)SIM->get_param(pname, SIM->get_param(BXPN_USB_OHCI))); + BX_OHCI_THIS hub.device_change &= ~(1 << i); + } + } +} + +void bx_usb_ohci_c::process_ed(struct OHCI_ED *ed, const Bit32u ed_address) +{ + struct OHCI_TD cur_td; + + if (!ED_GET_H(ed) && !ED_GET_K(ed) && (ED_GET_HEADP(ed) != ED_GET_TAILP(ed))) { + // if the isochronous is enabled and ed is a isochronous, do TD + if (ED_GET_F(ed)) { + if (BX_OHCI_THIS hub.op_regs.HcControl.ie) { + // load and do a isochronous TD list + BX_DEBUG(("Found a valid ED that points to an isochronous TD")); + // we currently ignore ISO TD's + } + } else { + BX_DEBUG(("Found a valid ED that points to an control/bulk/int TD")); + while (ED_GET_HEADP(ed) != ED_GET_TAILP(ed)) { + DEV_MEM_READ_PHYSICAL(ED_GET_HEADP(ed), 4, (Bit8u*) &cur_td.dword0); + DEV_MEM_READ_PHYSICAL(ED_GET_HEADP(ed) + 4, 4, (Bit8u*) &cur_td.dword1); + DEV_MEM_READ_PHYSICAL(ED_GET_HEADP(ed) + 8, 4, (Bit8u*) &cur_td.dword2); + DEV_MEM_READ_PHYSICAL(ED_GET_HEADP(ed) + 12, 4, (Bit8u*) &cur_td.dword3); + BX_DEBUG(("Head: 0x%08X Tail: 0x%08X Next: 0x%08X", ED_GET_HEADP(ed), ED_GET_TAILP(ed), TD_GET_NEXTTD(&cur_td))); + if (process_td(&cur_td, ed)) { + const Bit32u temp = ED_GET_HEADP(ed); + if (TD_GET_CC(&cur_td) < NotAccessed) { + ED_SET_HEADP(ed, TD_GET_NEXTTD(&cur_td)); + TD_SET_NEXTTD(&cur_td, BX_OHCI_THIS hub.op_regs.HcDoneHead); + BX_OHCI_THIS hub.op_regs.HcDoneHead = temp; + if (TD_GET_DI(&cur_td) < BX_OHCI_THIS hub.ohci_done_count) + BX_OHCI_THIS hub.ohci_done_count = TD_GET_DI(&cur_td); + } + DEV_MEM_WRITE_PHYSICAL(temp, 4, (Bit8u*) &cur_td.dword0); + DEV_MEM_WRITE_PHYSICAL(temp + 4, 4, (Bit8u*) &cur_td.dword1); + DEV_MEM_WRITE_PHYSICAL(temp + 8, 4, (Bit8u*) &cur_td.dword2); + } else + break; + } + } + DEV_MEM_WRITE_PHYSICAL(ed_address + 8, 4, (Bit8u*) &ed->dword2); + } +} + +bx_bool bx_usb_ohci_c::process_td(struct OHCI_TD *td, struct OHCI_ED *ed) +{ + unsigned pid = 0, len = 0, len1, len2; + int r, ret = 0; + char buf_str[1025], temp_str[17]; + + // The td->cc field should be 111x if it hasn't been processed yet. + if (TD_GET_CC(td) < NotAccessed) { + BX_ERROR(("Found TD with CC value not 111x")); + return 0; + } + + if (ED_GET_D(ed) == 1) + pid = USB_TOKEN_OUT; + else if (ED_GET_D(ed) == 2) + pid = USB_TOKEN_IN; + else { + if (TD_GET_DP(td) == 0) + pid = USB_TOKEN_SETUP; + else if (TD_GET_DP(td) == 1) + pid = USB_TOKEN_OUT; + else if (TD_GET_DP(td) == 2) + pid = USB_TOKEN_IN; + } + + // calculate the length of the packet + if (TD_GET_CBP(td) && TD_GET_BE(td)) { + if ((TD_GET_CBP(td) & 0xFFFFF000) != (TD_GET_BE(td) & 0xFFFFF000)) + len = (TD_GET_BE(td) & 0xFFF) + 0x1001 - (TD_GET_CBP(td) & 0xFFF); + else { + len = (TD_GET_BE(td) - TD_GET_CBP(td)) + 1; + if (len < 0) len = 0x1001 + len; + } + } else + len = 0; + + BX_OHCI_THIS usb_packet.pid = pid; + BX_OHCI_THIS usb_packet.devaddr = ED_GET_FA(ed); + BX_OHCI_THIS usb_packet.devep = ED_GET_EN(ed); + BX_OHCI_THIS usb_packet.data = BX_OHCI_THIS device_buffer; + switch (pid) { + case USB_TOKEN_SETUP: + case USB_TOKEN_OUT: + BX_OHCI_THIS usb_packet.len = (len <= ED_GET_MPS(ed)) ? len : ED_GET_MPS(ed); + break; + case USB_TOKEN_IN: + BX_OHCI_THIS usb_packet.len = len; + break; + } + + BX_DEBUG((" pid = %s addr = %i endpnt = %i len = %i mps = %i (td->cbp = 0x%08X, td->be = 0x%08X)", + (pid == USB_TOKEN_IN)? "IN" : (pid == USB_TOKEN_OUT) ? "OUT" : (pid == USB_TOKEN_SETUP) ? "SETUP" : "UNKNOWN", + ED_GET_FA(ed), ED_GET_EN(ed), len, ED_GET_MPS(ed), TD_GET_CBP(td), TD_GET_BE(td))); + BX_DEBUG((" td->t = %i ed->c = %i td->di = %i td->r = %i", TD_GET_T(td), ED_GET_C(ed), TD_GET_DI(td), TD_GET_R(td))); + + /* set status bar conditions for device */ + if ((len > 0) && (BX_OHCI_THIS hub.statusbar_id >= 0)) { + if (!BX_OHCI_THIS hub.iolight_counter) { + if (pid == USB_TOKEN_OUT) + bx_gui->statusbar_setitem(BX_OHCI_THIS hub.statusbar_id, 1, 1); // write + else + bx_gui->statusbar_setitem(BX_OHCI_THIS hub.statusbar_id, 1); // read + } + BX_OHCI_THIS hub.iolight_counter = 5; + bx_pc_system.activate_timer(BX_OHCI_THIS hub.iolight_timer_index, 5000, 0); + } + + switch (pid) { + case USB_TOKEN_SETUP: + if (len > 0) + DEV_MEM_READ_PHYSICAL_BLOCK(TD_GET_CBP(td), len, device_buffer); + // TODO: This is a hack. dev->handle_packet() should return the amount of bytes + // it received, not the amount it anticipates on receiving/sending in the next packet. + if ((ret = BX_OHCI_THIS broadcast_packet(&BX_OHCI_THIS usb_packet)) >= 0) + ret = 8; + break; + case USB_TOKEN_OUT: + if (len > 0) + DEV_MEM_READ_PHYSICAL_BLOCK(TD_GET_CBP(td), len, device_buffer); + ret = BX_OHCI_THIS broadcast_packet(&BX_OHCI_THIS usb_packet); + break; + case USB_TOKEN_IN: + ret = BX_OHCI_THIS broadcast_packet(&BX_OHCI_THIS usb_packet); + if (ret > 0) { + if (((TD_GET_CBP(td) & 0xfff) + ret) > 0x1000) { + len1 = 0x1000 - (TD_GET_CBP(td) & 0xfff); + len2 = ret - len1; + DEV_MEM_WRITE_PHYSICAL_BLOCK(TD_GET_CBP(td), len1, device_buffer); + DEV_MEM_WRITE_PHYSICAL_BLOCK((TD_GET_BE(td) & ~0xfff), len2, device_buffer+len1); + } else { + DEV_MEM_WRITE_PHYSICAL_BLOCK(TD_GET_CBP(td), ret, device_buffer); + } + } else + ret = 0; + break; + default: + TD_SET_CC(td, UnexpectedPID); + TD_SET_EC(td, 3); + return 1; + } + + // print the buffer used, to the log file + if (ret > 0) { + BX_DEBUG(("buffer dump (%i bytes)", ret)); + buf_str[0] = 0; + for (r=0; r 0) BX_DEBUG(("%s", buf_str)); + } + + if ((ret == (int)len) || ((pid == USB_TOKEN_IN) && (ret >= 0) && + TD_GET_R(td)) || ((pid == USB_TOKEN_OUT) && (ret >= 0) && + (ret <= (int) ED_GET_MPS(ed)))) { + if (ret == (int)len) + TD_SET_CBP(td, 0); + else { + if (((TD_GET_CBP(td) & 0xfff) + ret) >= 0x1000) { + TD_SET_CBP(td, (TD_GET_CBP(td) + ret) & 0x0FFF); + TD_SET_CBP(td, TD_GET_CBP(td) | (TD_GET_BE(td) & ~0x0FFF)); + } else { + TD_SET_CBP(td, TD_GET_CBP(td) + ret); + } + } + if (TD_GET_T(td) & 2) { + TD_SET_T(td, TD_GET_T(td) ^ 1); + ED_SET_C(ed, (TD_GET_T(td) & 1)); + } else + ED_SET_C(ed, (ED_GET_C(ed) ^ 1)); + if ((pid != USB_TOKEN_OUT) || (ret == (int)len)) { + TD_SET_CC(td, NoError); + TD_SET_EC(td, 0); + } + } else { + if (ret >= 0) + TD_SET_CC(td, DataUnderrun); + else { + switch (ret) { + case USB_RET_NODEV: // (-1) + TD_SET_CC(td, DeviceNotResponding); + break; + case USB_RET_NAK: // (-2) + TD_SET_CC(td, Stall); + break; + case USB_RET_STALL: // (-3) + TD_SET_CC(td, Stall); + break; + case USB_RET_BABBLE: // (-4) + TD_SET_CC(td, BufferOverrun); + break; + case USB_RET_ASYNC: // (-5) + TD_SET_CC(td, BufferOverrun); + break; + default: + BX_ERROR(("Unknown error returned: %i", ret)); + break; + } + } + TD_SET_EC(td, 3); + ED_SET_H(ed, 1); + } + + BX_DEBUG((" td->cbp = 0x%08X ret = %i len = %i td->cc = %i td->ec = %i ed->h = %i", TD_GET_CBP(td), ret, len, TD_GET_CC(td), TD_GET_EC(td), ED_GET_H(ed))); + BX_DEBUG((" td->t = %i ed->c = %i", TD_GET_T(td), ED_GET_C(ed))); + + return 1; +} + +int bx_usb_ohci_c::broadcast_packet(USBPacket *p) +{ + int i, ret; + + ret = USB_RET_NODEV; + for (i = 0; i < BX_N_USB_OHCI_PORTS && ret == USB_RET_NODEV; i++) { + if ((BX_OHCI_THIS hub.usb_port[i].device != NULL) && + (BX_OHCI_THIS hub.usb_port[i].HcRhPortStatus.ccs)) { + ret = BX_OHCI_THIS hub.usb_port[i].device->handle_packet(p); + } + } + return ret; +} + +void bx_usb_ohci_c::iolight_timer_handler(void *this_ptr) +{ + bx_usb_ohci_c *class_ptr = (bx_usb_ohci_c *) this_ptr; + class_ptr->iolight_timer(); +} + +void bx_usb_ohci_c::iolight_timer() +{ + if (BX_OHCI_THIS hub.iolight_counter > 0) { + if (--BX_OHCI_THIS hub.iolight_counter) + bx_pc_system.activate_timer(BX_OHCI_THIS hub.iolight_timer_index, 5000, 0); + else + bx_gui->statusbar_setitem(BX_OHCI_THIS hub.statusbar_id, 0); + } +} + +// pci configuration space read callback handler +Bit32u bx_usb_ohci_c::pci_read_handler(Bit8u address, unsigned io_len) +{ + Bit32u value = 0; + + for (unsigned i=0; i= 0x14) && (address <= 0x34))) + return; + + for (unsigned i=0; i> (i*8)) & 0xFF; + oldval = BX_OHCI_THIS hub.pci_conf[address+i]; + switch (address+i) { + case 0x04: + value8 &= 0x06; // (bit 0 is read only for this card) (we don't allow port IO) + BX_OHCI_THIS hub.pci_conf[address+i] = value8; + break; + case 0x3d: // + case 0x3e: // + case 0x3f: // + case 0x05: // disallowing write to command hi-byte + case 0x06: // disallowing write to status lo-byte (is that expected?) + break; + case 0x3c: + if (value8 != oldval) { + BX_INFO(("new irq line = %d", value8)); + BX_OHCI_THIS hub.pci_conf[address+i] = value8; + } + break; + case 0x10: // low 12 bits of BAR are R/O + value8 = 0x00; + case 0x11: // low 12 bits of BAR are R/O + value8 &= 0xF0; + case 0x12: + case 0x13: + baseaddr_change |= (value8 != oldval); + default: + BX_OHCI_THIS hub.pci_conf[address+i] = value8; + } + } + if (baseaddr_change) { + if (DEV_pci_set_base_mem(BX_OHCI_THIS_PTR, read_handler, write_handler, + &BX_OHCI_THIS hub.base_addr, + &BX_OHCI_THIS hub.pci_conf[0x10], + 4096)) { + BX_INFO(("new base address: 0x%04x", BX_OHCI_THIS hub.base_addr)); + } + } + + if (io_len == 1) + BX_DEBUG(("write PCI register 0x%02x value 0x%02x", address, value)); + else if (io_len == 2) + BX_DEBUG(("write PCI register 0x%02x value 0x%04x", address, value)); + else if (io_len == 4) + BX_DEBUG(("write PCI register 0x%02x value 0x%08x", address, value)); +} + +void bx_usb_ohci_c::usb_set_connect_status(Bit8u port, int type, bx_bool connected) +{ + const bx_bool ccs_org = BX_OHCI_THIS hub.usb_port[port].HcRhPortStatus.ccs; + const bx_bool pes_org = BX_OHCI_THIS hub.usb_port[port].HcRhPortStatus.pes; + + usb_device_c *device = BX_OHCI_THIS hub.usb_port[port].device; + if (device != NULL) { + if (device->get_type() == type) { + if (connected) { + BX_OHCI_THIS hub.usb_port[port].HcRhPortStatus.lsda = + (device->get_speed() == USB_SPEED_LOW); + BX_OHCI_THIS hub.usb_port[port].HcRhPortStatus.ccs = 1; + if (!device->get_connected()) { + if (!device->init()) { + usb_set_connect_status(port, type, 0); + BX_ERROR(("port #%d: connect failed", port+1)); + } else { + BX_INFO(("port #%d: connect: %s", port+1, device->get_info())); + } + } + } else { // not connected + BX_OHCI_THIS hub.usb_port[port].HcRhPortStatus.ccs = 0; + BX_OHCI_THIS hub.usb_port[port].HcRhPortStatus.pes = 0; + BX_OHCI_THIS hub.usb_port[port].HcRhPortStatus.lsda = 0; + remove_device(port); + } + } + BX_OHCI_THIS hub.usb_port[port].HcRhPortStatus.csc |= (ccs_org != BX_OHCI_THIS hub.usb_port[port].HcRhPortStatus.ccs); + BX_OHCI_THIS hub.usb_port[port].HcRhPortStatus.pesc |= (pes_org != BX_OHCI_THIS hub.usb_port[port].HcRhPortStatus.pes); + + // we changed the value of the port, so show it + set_interrupt(OHCI_INTR_RHSC); + } +} + +// USB runtime parameter handler +const char *bx_usb_ohci_c::usb_param_handler(bx_param_string_c *param, int set, + const char *oldval, const char *val, int maxlen) +{ + usbdev_type type = USB_DEV_TYPE_NONE; + int portnum; + + if (set) { + portnum = atoi((param->get_parent())->get_name()+4) - 1; + bx_bool empty = ((strlen(val) == 0) || (!strcmp(val, "none"))); + if ((portnum >= 0) && (portnum < BX_N_USB_OHCI_PORTS)) { + BX_INFO(("USB port #%d experimental device change", portnum+1)); + if (empty && BX_OHCI_THIS hub.usb_port[portnum].HcRhPortStatus.ccs) { + if (BX_OHCI_THIS hub.usb_port[portnum].device != NULL) { + type = BX_OHCI_THIS hub.usb_port[portnum].device->get_type(); + } + usb_set_connect_status(portnum, type, 0); + } else if (!empty && !BX_OHCI_THIS hub.usb_port[portnum].HcRhPortStatus.ccs) { + BX_OHCI_THIS hub.device_change |= (1 << portnum); + } + } else { + BX_PANIC(("usb_param_handler called with unexpected parameter '%s'", param->get_name())); + } + } + return val; +} + +#endif // BX_SUPPORT_PCI && BX_SUPPORT_USB_OHCI diff --git a/bochs/iodev/usb_ohci.h b/bochs/iodev/usb_ohci.h new file mode 100644 index 00000000..a331250f --- /dev/null +++ b/bochs/iodev/usb_ohci.h @@ -0,0 +1,302 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 Benjamin D Lunt (fys at frontiernet net) +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +#ifndef BX_IODEV_USB_OHCI_H +#define BX_IODEV_USB_OHCI_H + +#if BX_USE_USB_OHCI_SMF +# define BX_OHCI_THIS theUSB_OHCI-> +# define BX_OHCI_THIS_PTR theUSB_OHCI +#else +# define BX_OHCI_THIS this-> +# define BX_OHCI_THIS_PTR this +#endif + +// number of ports defined in bochs.h + +#define OHCI_INTR_SO (1<<0) // Scheduling overrun +#define OHCI_INTR_WD (1<<1) // HcDoneHead writeback +#define OHCI_INTR_SF (1<<2) // Start of frame +#define OHCI_INTR_RD (1<<3) // Resume detect +#define OHCI_INTR_UE (1<<4) // Unrecoverable error +#define OHCI_INTR_FNO (1<<5) // Frame number overflow +#define OHCI_INTR_RHSC (1<<6) // Root hub status change +#define OHCI_INTR_OC (1<<30) // Ownership change +#define OHCI_INTR_MIE (1<<31) // Master Interrupt Enable + +// Completion Codes +enum { + NoError = 0, + CRC, + BitStuffing, + DataToggleMismatch, + Stall, + DeviceNotResponding, + PIDCheckFailure, + UnexpectedPID, + DataOverrun, + DataUnderrun, + BufferOverrun = 0xC, + BufferUnderrun, + NotAccessed +}; + + +#define ED_GET_MPS(x) (((x)->dword0 & 0x07FF0000) >> 16) +#define ED_GET_F(x) (((x)->dword0 & 0x00008000) >> 15) +#define ED_GET_K(x) (((x)->dword0 & 0x00004000) >> 14) +#define ED_GET_S(x) (((x)->dword0 & 0x00002000) >> 13) +#define ED_GET_D(x) (((x)->dword0 & 0x00001800) >> 11) +#define ED_GET_EN(x) (((x)->dword0 & 0x00000780) >> 7) +#define ED_GET_FA(x) (((x)->dword0 & 0x0000007F) >> 0) +#define ED_GET_TAILP(x) ((x)->dword1 & 0xFFFFFFF0) +#define ED_GET_HEADP(x) ((x)->dword2 & 0xFFFFFFF0) +#define ED_SET_HEADP(x, y) ((x)->dword2 = ((x)->dword2 & 0x0000000F) | ((y) & 0xFFFFFFF0)) +#define ED_GET_C(x) (((x)->dword2 & 0x00000002) >> 1) +#define ED_SET_C(x,y) ((x)->dword2 = ((x)->dword2 & ~0x00000002) | ((y)<<1)) +#define ED_GET_H(x) (((x)->dword2 & 0x00000001) >> 0) +#define ED_SET_H(x,y) ((x)->dword2 = ((x)->dword2 & ~0x00000001) | ((y)<<0)) +#define ED_GET_NEXTED(x) ((x)->dword3 & 0xFFFFFFF0) + +struct OHCI_ED { + Bit32u dword0; + Bit32u dword1; + Bit32u dword2; + Bit32u dword3; +}; + + +#define TD_GET_R(x) (((x)->dword0 & 0x00040000) >> 18) +#define TD_GET_DP(x) (((x)->dword0 & 0x00180000) >> 19) +#define TD_GET_DI(x) (((x)->dword0 & 0x00E00000) >> 21) +#define TD_GET_T(x) (((x)->dword0 & 0x03000000) >> 24) +#define TD_SET_T(x,y) ((x)->dword0 = ((x)->dword0 & ~0x03000000) | ((y)<<24)) +#define TD_GET_EC(x) (((x)->dword0 & 0x0C000000) >> 26) +#define TD_SET_EC(x,y) ((x)->dword0 = ((x)->dword0 & ~0x0C000000) | ((y)<<26)) +#define TD_GET_CC(x) (((x)->dword0 & 0xF0000000) >> 28) +#define TD_SET_CC(x,y) ((x)->dword0 = ((x)->dword0 & ~0xF0000000) | ((y)<<28)) +#define TD_GET_CBP(x) ((x)->dword1) +#define TD_SET_CBP(x,y) ((x)->dword1 = y) +#define TD_GET_NEXTTD(x) ((x)->dword2 & 0xFFFFFFF0) +#define TD_SET_NEXTTD(x,y) ((x)->dword2 = (y & 0xFFFFFFF0)) +#define TD_GET_BE(x) ((x)->dword3) + +struct OHCI_TD { + Bit32u dword0; + Bit32u dword1; + Bit32u dword2; + Bit32u dword3; +}; + + +#define ISO_TD_GET_CC(x) (((x)->dword0 & 0xF0000000) >> 28) +#define ISO_TD_GET_FC(x) (((x)->dword0 & 0x0F000000) >> 24) +#define ISO_TD_GET_DI(x) (((x)->dword0 & 0x00E00000) >> 21) +#define ISO_TD_GET_SF(x) ((x)->dword0 & 0x0000FFFF) +#define ISO_TD_GET_BP0(x) (((x)->dword1 & 0xFFFFF000) >> 12) +#define ISO_TD_GET_NEXTTD(x) ((x)->dword2 & 0xFFFFFFF0) +#define ISO_TD_GET_BE(x) ((x)->dword3) +#define ISO_TD_GET_PSW0(x) ((x)->dword4 & 0x0000FFFF) +#define ISO_TD_GET_PSW1(x) (((x)->dword4 & 0xFFFF0000) >> 16) +#define ISO_TD_GET_PSW2(x) ((x)->dword5 & 0x0000FFFF) +#define ISO_TD_GET_PSW3(x) (((x)->dword5 & 0xFFFF0000) >> 16) +#define ISO_TD_GET_PSW4(x) ((x)->dword6 & 0x0000FFFF) +#define ISO_TD_GET_PSW5(x) (((x)->dword6 & 0xFFFF0000) >> 16) +#define ISO_TD_GET_PSW6(x) ((x)->dword7 & 0x0000FFFF) +#define ISO_TD_GET_PSW7(x) (((x)->dword7 & 0xFFFF0000) >> 16) + +struct OHCI_ISO_TD { + Bit32u dword0; + Bit32u dword1; + Bit32u dword2; + Bit32u dword3; + Bit32u dword4; + Bit32u dword5; + Bit32u dword6; + Bit32u dword7; +}; + + +typedef struct { + Bit32u base_addr; + + int frame_index; + int interval_index; + + struct OHCI_OP_REGS { + Bit16u HcRevision; + struct { + Bit32u reserved; // 21 bit reserved = 0x000000 R R + bx_bool rwe; // 1 bit RemoteWakeupEnable = 0b RW R + bx_bool rwc; // 1 bit RemoteWakeupConnected = 0b RW RW + bx_bool ir; // 1 bit InterruptRouting = 0b RW R + Bit8u hcfs; // 2 bit HostControllerFuncState = 00b RW RW + bx_bool ble; // 1 bit BulkListEnable = 0b RW R + bx_bool cle; // 1 bit ControlListEnable = 0b RW R + bx_bool ie; // 1 bit IsochronousEnable = 0b RW R + bx_bool ple; // 1 bit PeriodicListEnable = 0b RW R + Bit8u cbsr; // 2 bit ControlBulkService Ratio = 00b RW R + } HcControl; // = 0x00000000 + struct { + Bit16u reserved0; // 14 bit reserved = 0x000000 R R + Bit8u soc; // 2 bit SchedulingOverrunCount = 00b R RW + Bit16u reserved1; // 12 bit reserved = 0x000000 R R + bx_bool ocr; // 1 bit OwnershipChangeRequest = 0b RW RW + bx_bool blf; // 1 bit BulkListFilled = 0b RW RW + bx_bool clf; // 1 bit ControlListFilled = 0b RW RW + bx_bool hcr; // 1 bit HostControllerReset = 0b RW RW + } HcCommandStatus; // = 0x00000000 + Bit32u HcInterruptStatus; + Bit32u HcInterruptEnable; + Bit32u HcHCCA; + Bit32u HcPeriodCurrentED; + Bit32u HcControlHeadED; + Bit32u HcControlCurrentED; + Bit32u HcBulkHeadED; + Bit32u HcBulkCurrentED; + Bit32u HcDoneHead; + struct { + bx_bool fit; // 1 bit FrameIntervalToggle = 0b RW R + Bit16u fsmps; // 15 bit FSLargestDataPacket = TBD (0) RW R + Bit8u reserved; // 2 bit reserved = 00b R R + Bit16u fi; // 14 bit FrameInterval = 0x2EDF RW R + } HcFmInterval; // = 0x00002EDF + bx_bool HcFmRemainingToggle; // 1 bit FrameRemainingToggle = 0b R RW + Bit32u HcFmNumber; + Bit32u HcPeriodicStart; + Bit16u HcLSThreshold; + struct { + Bit8u potpgt; // 8 bit PowerOnToPowerGoodTime = 0x10 RW R + Bit16u reserved; // 11 bit reserved = 0x000 R R + bx_bool nocp; // 1 bit NoOverCurrentProtection = 0b RW R + bx_bool ocpm; // 1 bit OverCurrentProtectionMode = 1b RW R + bx_bool dt; // 1 bit DeviceType = 0b R R + bx_bool nps; // 1 bit NoPowerSwitching = 0b RW R + bx_bool psm; // 1 bit PowerSwitchingMode = 1b RW R + Bit8u ndp; // 8 bit NumberDownstreamPorts = NUMPORTS RW R + } HcRhDescriptorA; // = 0x100009xx + struct { + Bit16u ppcm; // 16 bit PortPowerControlMask = 0x0002 RW R + Bit16u dr; // 16 bit DeviceRemovable = 0x0000 RW R + } HcRhDescriptorB; // = 0x00020000 + struct { + bx_bool crwe; // 1 bit ClearRemoteWakeupEnable = 0b WC R + Bit16u reserved0; // 13 bit reserved = 0x000000 R R + bx_bool ocic; // 1 bit OverCurrentIndicatorChange = 0b RW RW + bx_bool lpsc; // 1 bit LocalPowerStatusChange(r) = 0b RW R + bx_bool drwe; // 1 bit DeviceRemoteWakeupEnable(r) = 0b RW R + Bit16u reserved1; // 13 bit reserved = 0x000000 R R + bx_bool oci; // 1 bit OverCurrentIndicator = 0b R RW + bx_bool lps; // 1 bit LocalPowerStatus(r) = 0b RW R + } HcRhStatus; // = 0x00000000 + } op_regs; + + struct { + // our data + usb_device_c *device; // device connected to this port + + struct { + Bit16u reserved0; // 11 bit reserved = 0x000000 R R + bx_bool prsc; // 1 bit PortResetStatusChange = 0b RW RW + bx_bool ocic; // 1 bit OverCurrentIndicatorChange = 0b RW RW + bx_bool pssc; // 1 bit PortSuspendStatusChange = 0b RW RW + bx_bool pesc; // 1 bit PortEnableStatusChange = 0b RW RW + bx_bool csc; // 1 bit ConnectStatusChange = 0b RW RW + Bit8u reserved1; // 6 bit reserved = 0x00 R R + bx_bool lsda; // 1 bit LowSpeedDeviceAttached = 0b RW RW + bx_bool pps; // 1 bit PortPowerStatus = 0b RW RW + Bit8u reserved2; // 3 bit reserved = 0x0 R R + bx_bool prs; // 1 bit PortResetStatus = 0b RW RW + bx_bool poci; // 1 bit PortOverCurrentIndicator = 0b RW RW + bx_bool pss; // 1 bit PortSuspendStatus = 0b RW RW + bx_bool pes; // 1 bit PortEnableStatus = 0b RW RW + bx_bool ccs; // 1 bit CurrentConnectStatus = 0b RW RW + } HcRhPortStatus; + } usb_port[BX_N_USB_OHCI_PORTS]; + + Bit8u pci_conf[256]; + Bit8u devfunc; + unsigned ohci_done_count; + bx_bool use_control_head; + bx_bool use_bulk_head; + Bit64u sof_time; + + int statusbar_id; // ID of the status LEDs + int iolight_counter; + int iolight_timer_index; + Bit8u device_change; +} bx_usb_ohci_t; + + + +class bx_usb_ohci_c : public bx_devmodel_c, public bx_pci_device_stub_c { +public: + bx_usb_ohci_c(); + virtual ~bx_usb_ohci_c(); + virtual void init(void); + virtual void reset(unsigned); + virtual void register_state(void); + virtual void after_restore_state(void); + virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len); + virtual void pci_write_handler(Bit8u address, Bit32u value, unsigned io_len); + + static const char *usb_param_handler(bx_param_string_c *param, int set, + const char *oldval, const char *val, int maxlen); + +private: + + bx_usb_ohci_t hub; + Bit8u *device_buffer; + + USBPacket usb_packet; + + static void reset_hc(); + static void reset_port(int); + static void update_irq(); + static void set_interrupt(Bit32u value); + + static void init_device(Bit8u port, bx_list_c *portconf); + static void remove_device(Bit8u port); + static int broadcast_packet(USBPacket *p); + static void usb_set_connect_status(Bit8u port, int type, bx_bool connected); + + static void usb_frame_handler(void *); + void usb_frame_timer(void); + + static Bit32u get_frame_remaining(void); + + void process_ed(struct OHCI_ED *, const Bit32u); + bx_bool process_td(struct OHCI_TD *, struct OHCI_ED *); + +#if BX_USE_USB_OHCI_SMF + static bx_bool read_handler(bx_phy_address addr, unsigned len, void *data, void *param); + static bx_bool write_handler(bx_phy_address addr, unsigned len, void *data, void *param); +#else + bx_bool read_handler(bx_phy_address addr, unsigned len, void *data, void *param); + bx_bool write_handler(bx_phy_address addr, unsigned len, void *data, void *param); +#endif + + static void iolight_timer_handler(void *); + void iolight_timer(void); + +}; + +#endif // BX_IODEV_USB_OHCI_H diff --git a/bochs/iodev/usb_printer.cc b/bochs/iodev/usb_printer.cc new file mode 100755 index 00000000..adb0e67b --- /dev/null +++ b/bochs/iodev/usb_printer.cc @@ -0,0 +1,316 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 Benjamin David Lunt +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_PCI && BX_SUPPORT_PCIUSB +#include "usb_common.h" +#include "usb_printer.h" + +#define LOG_THIS + +static const Bit8u bx_printer_dev_descriptor[] = { + 0x12, /* u8 bLength; */ + 0x01, /* u8 bDescriptorType; Device */ + 0x10, 0x01, /* u16 bcdUSB; v1.10 */ + + 0x00, /* u8 bDeviceClass; */ + 0x00, /* u8 bDeviceSubClass; */ + 0x00, /* u8 bDeviceProtocol; [ low/full speeds only ] */ + 0x08, /* u8 bMaxPacketSize0; 8 Bytes */ + + 0xF0, 0x03, /* u16 idVendor; */ + 0x04, 0x15, /* u16 idProduct; */ + 0x00, 0x01, /* u16 bcdDevice */ + + 0x01, /* u8 iManufacturer; */ + 0x02, /* u8 iProduct; */ + 0x03, /* u8 iSerialNumber; */ + 0x01 /* u8 bNumConfigurations; */ +}; + +static const Bit8u bx_printer_config_descriptor[] = { + /* one configuration */ + 0x09, /* u8 bLength; */ + 0x02, /* u8 bDescriptorType; Configuration */ + 0x20, 0x00, /* u16 wTotalLength; */ + 0x01, /* u8 bNumInterfaces; (1) */ + 0x01, /* u8 bConfigurationValue; */ + 0x00, /* u8 iConfiguration string desc.; */ + 0xC0, /* u8 bmAttributes; + Bit 7: must be set, + 6: Self-powered, + 5: Remote wakeup, + 4..0: resvd */ + 0x02, /* u8 MaxPower; */ + + /* one interface */ + 0x09, /* u8 if_bLength; */ + 0x04, /* u8 if_bDescriptorType; Interface */ + 0x00, /* u8 if_bInterfaceNumber; */ + 0x00, /* u8 if_bAlternateSetting; */ + 0x02, /* u8 if_bNumEndpoints; */ + 0x07, /* u8 if_bInterfaceClass; */ + 0x01, /* u8 if_bInterfaceSubClass; */ + 0x02, /* u8 if_bInterfaceProtocol; */ + 0x00, /* u8 if_iInterface; string desc. */ + + /* first endpoint */ + 0x07, /* u8 ep_bLength; */ + 0x05, /* u8 ep_bDescriptorType; Endpoint */ + 0x81, /* u8 ep_bEndpointAddress; IN Endpoint 1 */ + 0x02, /* u8 ep_bmAttributes; Bulk */ + 0x40, 0x00, /* u16 ep_wMaxPacketSize; */ + 0x00, /* u8 ep_bInterval; */ + + /* second endpoint */ + 0x07, /* u8 ep_bLength; */ + 0x05, /* u8 ep_bDescriptorType; Endpoint */ + 0x02, /* u8 ep_bEndpointAddress; OUT Endpoint 2 */ + 0x02, /* u8 ep_bmAttributes; Bulk */ + 0x40, 0x00, /* u16 ep_wMaxPacketSize; */ + 0x00, /* u8 ep_bInterval; */ +}; + +// Length word calculated at run time +static const Bit8u bx_device_id_string[] = + "\0\0" // len field is calculated at run-time + "MFG:HEWLETT-PACKARD;" + "MDL:DESKJET 920C;" + "CMD:MLC,PCL,PML;" + "CLASS:PRINTER;" + "DESCRIPTION:Hewlett-Packard DeskJet 920C;" + "SERN:CN21R1C0BPIS;" + "VSTATUS:$HBO,$NCO,ff,DN,IDLE,CUT,K0,C0,SM,NR,KP093,CP097;" + "VP:0800,FL,B0;" + "VJ: ;"; + +usb_printer_device_c::usb_printer_device_c(usbdev_type type, const char *filename) +{ + d.type = type; + d.maxspeed = USB_SPEED_FULL; + d.speed = d.maxspeed; + memset((void*)&s, 0, sizeof(s)); + strcpy(d.devname, "USB Printer"); + s.fname = filename; + s.fp = NULL; + + put("USBPR"); +} + +usb_printer_device_c::~usb_printer_device_c(void) +{ + if (s.fp != NULL) { + fclose(s.fp); + } +} + +bx_bool usb_printer_device_c::init() +{ + s.fp = fopen(s.fname, "w+b"); + if (s.fp == NULL) { + BX_ERROR(("Could not create/open %s", s.fname)); + return 0; + } else { + sprintf(s.info_txt, "USB printer: file=%s", s.fname); + d.connected = 1; + return 1; + } +} + +const char* usb_printer_device_c::get_info() +{ + return s.info_txt; +} + +void usb_printer_device_c::register_state_specific(bx_list_c *parent) +{ + bx_list_c *list = new bx_list_c(parent, "s", "USB PRINTER Device State", 1); + new bx_shadow_num_c(list, "printer_status", &s.printer_status); +} + +void usb_printer_device_c::handle_reset() +{ + BX_INFO(("Opened %s for USB HP Deskjet 920C printer emulation.", s.fname)); + BX_DEBUG(("Reset")); +} + +int usb_printer_device_c::handle_control(int request, int value, int index, int length, Bit8u *data) +{ + int ret = 0; + + BX_DEBUG(("Printer: request: 0x%04X value: 0x%04X index: 0x%04X len: %i", request, value, index, length)); + switch(request) { + case DeviceRequest | USB_REQ_GET_STATUS: + if (d.state == USB_STATE_DEFAULT) + goto fail; + else { + data[0] = (1 << USB_DEVICE_SELF_POWERED) | + (d.remote_wakeup << USB_DEVICE_REMOTE_WAKEUP); + data[1] = 0x00; + ret = 2; + } + break; + case DeviceOutRequest | USB_REQ_CLEAR_FEATURE: + if (value == USB_DEVICE_REMOTE_WAKEUP) { + d.remote_wakeup = 0; + } else { + goto fail; + } + ret = 0; + break; + case DeviceOutRequest | USB_REQ_SET_FEATURE: + if (value == USB_DEVICE_REMOTE_WAKEUP) { + d.remote_wakeup = 1; + } else { + goto fail; + } + ret = 0; + break; + case DeviceOutRequest | USB_REQ_SET_ADDRESS: + d.state = USB_STATE_ADDRESS; + d.addr = value; + ret = 0; + break; + case DeviceRequest | USB_REQ_GET_DESCRIPTOR: + switch(value >> 8) { + case USB_DT_DEVICE: + memcpy(data, bx_printer_dev_descriptor, sizeof(bx_printer_dev_descriptor)); + ret = sizeof(bx_printer_dev_descriptor); + break; + case USB_DT_CONFIG: + memcpy(data, bx_printer_config_descriptor, sizeof(bx_printer_config_descriptor)); + ret = sizeof(bx_printer_config_descriptor); + break; + case USB_DT_STRING: + switch(value & 0xff) { + case 0: + /* language ids */ + data[0] = 4; + data[1] = 3; + data[2] = 0x09; + data[3] = 0x04; + ret = 4; + break; + case 1: + /* vendor description */ + ret = set_usb_string(data, "Hewlett-Packard"); + break; + case 2: + /* product description */ + ret = set_usb_string(data, "Deskjet 920C"); + break; + case 3: + /* serial number */ + ret = set_usb_string(data, "HU18L6P2DNBI"); + break; + default: + BX_ERROR(("USB Printer handle_control: unknown string descriptor 0x%02x", value & 0xff)); + goto fail; + } + break; + default: + BX_ERROR(("USB Printer handle_control: unknown descriptor type 0x%02x", value >> 8)); + goto fail; + } + break; + case DeviceRequest | USB_REQ_GET_CONFIGURATION: + data[0] = 1; + ret = 1; + break; + case DeviceOutRequest | USB_REQ_SET_CONFIGURATION: + d.state = USB_STATE_CONFIGURED; + ret = 0; + break; + case DeviceRequest | USB_REQ_GET_INTERFACE: + data[0] = 0; + ret = 1; + break; + case EndpointOutRequest | USB_REQ_SET_INTERFACE: + ret = 0; + break; + + /* printer specific requests */ + case InterfaceInClassRequest | 0x00: // 1284 get device id string + memcpy(data, bx_device_id_string, sizeof(bx_device_id_string)); + ret = sizeof(bx_device_id_string); + data[0] = (Bit8u) (ret >> 8); // len word is big endian + data[1] = (Bit8u) (ret & 0xFF); // + break; + case InterfaceInClassRequest | 0x01: // Get Port Status + s.printer_status = (0<<5) | (1<<4) | (1<<3); + memcpy(data, &s.printer_status, 1); + ret = 1; + break; + case InterfaceOutClassRequest | 0x02: // soft reset + // for now, just return + ret = 0; + break; + default: + BX_ERROR(("USB PRINTER handle_control: unknown request 0x%04x", request)); + fail: + d.stall = 1; + ret = USB_RET_STALL; + break; + } + return ret; +} + +int usb_printer_device_c::handle_data(USBPacket *p) +{ + int ret = 0; + + switch(p->pid) { + case USB_TOKEN_IN: + if (p->devep == 1) { + BX_INFO(("Printer: handle_data: IN: len = %i", p->len)); + BX_INFO(("Printer: Ben: We need to find out what this is and send valid status back")); + ret = p->len; + } else { + goto fail; + } + break; + case USB_TOKEN_OUT: + if (p->devep == 2) { + BX_DEBUG(("Sent %i bytes to the 'usb printer': %s", p->len, s.fname)); + usb_dump_packet(p->data, p->len); + fwrite(p->data, 1, p->len, s.fp); + ret = p->len; + } else { + goto fail; + } + break; + default: +fail: + d.stall = 1; + ret = USB_RET_STALL; + break; + } + return ret; +} + +#endif // BX_SUPPORT_PCI && BX_SUPPORT_PCIUSB diff --git a/bochs/iodev/usb_printer.h b/bochs/iodev/usb_printer.h new file mode 100755 index 00000000..4cb8e5ba --- /dev/null +++ b/bochs/iodev/usb_printer.h @@ -0,0 +1,47 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 Benjamin David Lunt +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +#ifndef BX_IODEV_USB_PRINTER_H +#define BX_IODEV_USB_PRINTER_H + +class usb_printer_device_c : public usb_device_c { +public: + usb_printer_device_c(usbdev_type type, const char *filename); + virtual ~usb_printer_device_c(void); + + virtual bx_bool init(); + virtual const char* get_info(); + + virtual void handle_reset(); + virtual int handle_control(int request, int value, int index, int length, Bit8u *data); + virtual int handle_data(USBPacket *p); + virtual void register_state_specific(bx_list_c *parent); + +private: + struct { + Bit8u printer_status; + const char *fname; + FILE *fp; + char info_txt[BX_PATHNAME_LEN]; + } s; +}; + +#endif diff --git a/bochs/iodev/usb_uhci.cc b/bochs/iodev/usb_uhci.cc new file mode 100644 index 00000000..8760a010 --- /dev/null +++ b/bochs/iodev/usb_uhci.cc @@ -0,0 +1,1119 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 Benjamin D Lunt (fys at frontiernet net) +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Experimental USB UHCI adapter + +// Notes: See usb_common.cc + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" + +#if BX_SUPPORT_PCI && BX_SUPPORT_USB_UHCI + +#include "pci.h" +#include "usb_common.h" +#include "usb_uhci.h" + +#define LOG_THIS theUSB_UHCI-> + +bx_usb_uhci_c* theUSB_UHCI = NULL; + +const Bit8u uhci_iomask[32] = {2, 1, 2, 1, 2, 1, 2, 0, 4, 0, 0, 0, 1, 0, 0, 0, + 3, 1, 3, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + +int libusb_uhci_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theUSB_UHCI = new bx_usb_uhci_c(); + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theUSB_UHCI, BX_PLUGIN_USB_UHCI); + return 0; // Success +} + +void libusb_uhci_LTX_plugin_fini(void) +{ + delete theUSB_UHCI; +} + +bx_usb_uhci_c::bx_usb_uhci_c() +{ + put("UHCI"); + memset((void*)&hub, 0, sizeof(bx_usb_uhci_t)); + device_buffer = NULL; + hub.iolight_timer_index = BX_NULL_TIMER_HANDLE; +} + +bx_usb_uhci_c::~bx_usb_uhci_c() +{ + char pname[16]; + + if (BX_UHCI_THIS device_buffer != NULL) + delete [] BX_UHCI_THIS device_buffer; + + for (int i=0; iget_param_string(pname, SIM->get_param(BXPN_USB_UHCI))->set_handler(NULL); + remove_device(i); + } + + BX_DEBUG(("Exit")); +} + +void bx_usb_uhci_c::init(void) +{ + unsigned i; + char pname[6]; + bx_list_c *port; + bx_param_string_c *device, *options; + + BX_UHCI_THIS device_buffer = new Bit8u[65536]; + + // Call our timer routine every 1mS (1,000uS) + // Continuous and active + BX_UHCI_THIS hub.timer_index = + bx_pc_system.register_timer(this, usb_timer_handler, 1000, 1,1, "usb.timer"); + + if (DEV_is_pci_device(BX_PLUGIN_USB_UHCI)) { + BX_UHCI_THIS hub.devfunc = 0x00; + } else { + BX_UHCI_THIS hub.devfunc = BX_PCI_DEVICE(1,2); + } + DEV_register_pci_handlers(this, &BX_UHCI_THIS hub.devfunc, BX_PLUGIN_USB_UHCI, + "Experimental USB UHCI"); + + for (i=0; i<256; i++) { + BX_UHCI_THIS hub.pci_conf[i] = 0x0; + } + + BX_UHCI_THIS hub.base_ioaddr = 0x0; + + //FIXME: for now, we want a status bar // hub zero, port zero + BX_UHCI_THIS hub.statusbar_id = bx_gui->register_statusitem("UHCI"); + + bx_list_c *usb_rt = (bx_list_c*)SIM->get_param(BXPN_MENU_RUNTIME_USB); + bx_list_c *uhci = (bx_list_c*)SIM->get_param(BXPN_USB_UHCI); + uhci->set_options(uhci->SHOW_PARENT); + uhci->set_runtime_param(1); + usb_rt->add(uhci); + for (i=0; iget_param(pname, uhci); + port->set_runtime_param(1); + device = (bx_param_string_c*)port->get_by_name("device"); + device->set_handler(usb_param_handler); + device->set_runtime_param(1); + options = (bx_param_string_c*)port->get_by_name("options"); + options->set_runtime_param(1); + BX_UHCI_THIS hub.usb_port[i].device = NULL; + } + + //HACK: Turn on debug messages from the start + //BX_UHCI_THIS setonoff(LOGLEV_DEBUG, ACT_REPORT); + + // register timer for i/o light + if (BX_UHCI_THIS hub.iolight_timer_index == BX_NULL_TIMER_HANDLE) { + BX_UHCI_THIS hub.iolight_timer_index = + DEV_register_timer(this, iolight_timer_handler, 5000, 0,0, "UHCI i/o light"); + } + BX_UHCI_THIS hub.iolight_counter = 0; + BX_UHCI_THIS hub.device_change = 0; + + BX_INFO(("USB UHCI initialized")); +} + +void bx_usb_uhci_c::reset(unsigned type) +{ + unsigned i, j; + char pname[6]; + + if (type == BX_RESET_HARDWARE) { + static const struct reset_vals_t { + unsigned addr; + unsigned char val; + } reset_vals[] = { + { 0x00, 0x86 }, { 0x01, 0x80 }, // 0x8086 = vendor + { 0x02, 0x20 }, { 0x03, 0x70 }, // 0x7020 = device + { 0x04, 0x05 }, { 0x05, 0x00 }, // command_io + { 0x06, 0x80 }, { 0x07, 0x02 }, // status + { 0x08, 0x01 }, // revision number + { 0x09, 0x00 }, // interface + { 0x0a, 0x03 }, // class_sub USB Host Controller + { 0x0b, 0x0c }, // class_base Serial Bus Controller + { 0x0D, 0x20 }, // bus latency + { 0x0e, 0x00 }, // header_type_generic + // address space 0x20 - 0x23 + { 0x20, 0x01 }, { 0x21, 0x00 }, + { 0x22, 0x00 }, { 0x23, 0x00 }, + { 0x3c, 0x00 }, // IRQ + { 0x3d, BX_PCI_INTD }, // INT + { 0x60, 0x10 }, // USB revision 1.0 + { 0x6a, 0x01 }, // USB clock + { 0xc1, 0x20 } // PIRQ enable + + }; + for (i = 0; i < sizeof(reset_vals) / sizeof(*reset_vals); ++i) { + BX_UHCI_THIS hub.pci_conf[reset_vals[i].addr] = reset_vals[i].val; + } + } + + // reset locals + BX_UHCI_THIS busy = 0; + BX_UHCI_THIS global_reset = 0; + + // Put the USB registers into their RESET state + BX_UHCI_THIS hub.usb_command.max_packet_size = 0; + BX_UHCI_THIS hub.usb_command.configured = 0; + BX_UHCI_THIS hub.usb_command.debug = 0; + BX_UHCI_THIS hub.usb_command.resume = 0; + BX_UHCI_THIS hub.usb_command.suspend = 0; + BX_UHCI_THIS hub.usb_command.reset = 0; + BX_UHCI_THIS hub.usb_command.host_reset = 0; + BX_UHCI_THIS hub.usb_command.schedule = 0; + BX_UHCI_THIS hub.usb_status.error_interrupt = 0; + BX_UHCI_THIS hub.usb_status.host_error = 0; + BX_UHCI_THIS hub.usb_status.host_halted = 0; + BX_UHCI_THIS hub.usb_status.interrupt = 0; + BX_UHCI_THIS hub.usb_status.pci_error = 0; + BX_UHCI_THIS hub.usb_status.resume = 0; + BX_UHCI_THIS hub.usb_enable.short_packet = 0; + BX_UHCI_THIS hub.usb_enable.on_complete = 0; + BX_UHCI_THIS hub.usb_enable.resume = 0; + BX_UHCI_THIS hub.usb_enable.timeout_crc = 0; + BX_UHCI_THIS hub.usb_frame_num.frame_num = 0x0000; + BX_UHCI_THIS hub.usb_frame_base.frame_base = 0x00000000; + BX_UHCI_THIS hub.usb_sof.sof_timing = 0x40; + for (j=0; jget_param(pname, SIM->get_param(BXPN_USB_UHCI))); + } else { + usb_set_connect_status(j, BX_UHCI_THIS hub.usb_port[j].device->get_type(), 1); + } + } + +} + +void bx_usb_uhci_c::register_state(void) +{ + unsigned j; + char portnum[8]; + bx_list_c *hub, *usb_cmd, *usb_st, *usb_en, *port; + + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "usb_uhci", "USB UHCI State"); + hub = new bx_list_c(list, "hub", BX_N_USB_UHCI_PORTS + 7); + usb_cmd = new bx_list_c(hub, "usb_command", 8); + new bx_shadow_bool_c(usb_cmd, "max_packet_size", &BX_UHCI_THIS hub.usb_command.max_packet_size); + new bx_shadow_bool_c(usb_cmd, "configured", &BX_UHCI_THIS hub.usb_command.configured); + new bx_shadow_bool_c(usb_cmd, "debug", &BX_UHCI_THIS hub.usb_command.debug); + new bx_shadow_bool_c(usb_cmd, "resume", &BX_UHCI_THIS hub.usb_command.resume); + new bx_shadow_bool_c(usb_cmd, "suspend", &BX_UHCI_THIS hub.usb_command.suspend); + new bx_shadow_bool_c(usb_cmd, "reset", &BX_UHCI_THIS hub.usb_command.reset); + new bx_shadow_bool_c(usb_cmd, "host_reset", &BX_UHCI_THIS hub.usb_command.host_reset); + new bx_shadow_bool_c(usb_cmd, "schedule", &BX_UHCI_THIS hub.usb_command.schedule); + usb_st = new bx_list_c(hub, "usb_status", 6); + new bx_shadow_bool_c(usb_st, "host_halted", &BX_UHCI_THIS hub.usb_status.host_halted); + new bx_shadow_bool_c(usb_st, "host_error", &BX_UHCI_THIS hub.usb_status.host_error); + new bx_shadow_bool_c(usb_st, "pci_error", &BX_UHCI_THIS hub.usb_status.pci_error); + new bx_shadow_bool_c(usb_st, "resume", &BX_UHCI_THIS hub.usb_status.resume); + new bx_shadow_bool_c(usb_st, "error_interrupt", &BX_UHCI_THIS hub.usb_status.error_interrupt); + new bx_shadow_bool_c(usb_st, "interrupt", &BX_UHCI_THIS hub.usb_status.interrupt); + usb_en = new bx_list_c(hub, "usb_enable", 4); + new bx_shadow_bool_c(usb_en, "short_packet", &BX_UHCI_THIS hub.usb_enable.short_packet); + new bx_shadow_bool_c(usb_en, "on_complete", &BX_UHCI_THIS hub.usb_enable.on_complete); + new bx_shadow_bool_c(usb_en, "resume", &BX_UHCI_THIS hub.usb_enable.resume); + new bx_shadow_bool_c(usb_en, "timeout_crc", &BX_UHCI_THIS hub.usb_enable.timeout_crc); + new bx_shadow_num_c(hub, "frame_num", &BX_UHCI_THIS hub.usb_frame_num.frame_num, BASE_HEX); + new bx_shadow_num_c(hub, "frame_base", &BX_UHCI_THIS hub.usb_frame_base.frame_base, BASE_HEX); + new bx_shadow_num_c(hub, "sof_timing", &BX_UHCI_THIS hub.usb_sof.sof_timing, BASE_HEX); + for (j=0; jafter_restore_state(); + } + } +} + +void bx_usb_uhci_c::init_device(Bit8u port, bx_list_c *portconf) +{ + usbdev_type type; + char pname[BX_PATHNAME_LEN]; + const char *devname = NULL; + + devname = ((bx_param_string_c*)portconf->get_by_name("device"))->getptr(); + if (devname == NULL) return; + if (!strlen(devname) || !strcmp(devname, "none")) return; + + if (BX_UHCI_THIS hub.usb_port[port].device != NULL) { + BX_ERROR(("init_device(): port%d already in use", port+1)); + return; + } + sprintf(pname, "usb_uhci.hub.port%d.device", port+1); + bx_list_c *sr_list = (bx_list_c*)SIM->get_param(pname, SIM->get_bochs_root()); + type = DEV_usb_init_device(portconf, BX_UHCI_THIS_PTR, &BX_UHCI_THIS hub.usb_port[port].device, sr_list); + if (BX_UHCI_THIS hub.usb_port[port].device != NULL) { + usb_set_connect_status(port, type, 1); + } +} + +void bx_usb_uhci_c::remove_device(Bit8u port) +{ + char pname[BX_PATHNAME_LEN]; + + if (BX_UHCI_THIS hub.usb_port[port].device != NULL) { + delete BX_UHCI_THIS hub.usb_port[port].device; + BX_UHCI_THIS hub.usb_port[port].device = NULL; + sprintf(pname, "usb_uhci.hub.port%d.device", port+1); + bx_list_c *devlist = (bx_list_c*)SIM->get_param(pname, SIM->get_bochs_root()); + devlist->clear(); + } +} + +void bx_usb_uhci_c::set_irq_level(bx_bool level) +{ + DEV_pci_set_irq(BX_UHCI_THIS hub.devfunc, BX_UHCI_THIS hub.pci_conf[0x3d], level); +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +Bit32u bx_usb_uhci_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_USB_UHCI_SMF + bx_usb_uhci_c *class_ptr = (bx_usb_uhci_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_usb_uhci_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_USB_UHCI_SMF + Bit32u val = 0x0; + Bit8u offset,port; + + offset = address - BX_UHCI_THIS hub.base_ioaddr; + + switch (offset) { + case 0x00: // command register (16-bit) + val = BX_UHCI_THIS hub.usb_command.max_packet_size << 7 + | BX_UHCI_THIS hub.usb_command.configured << 6 + | BX_UHCI_THIS hub.usb_command.debug << 5 + | BX_UHCI_THIS hub.usb_command.resume << 4 + | BX_UHCI_THIS hub.usb_command.suspend << 3 + | BX_UHCI_THIS hub.usb_command.reset << 2 + | BX_UHCI_THIS hub.usb_command.host_reset << 1 + | BX_UHCI_THIS hub.usb_command.schedule; + break; + + case 0x02: // status register (16-bit) + val = BX_UHCI_THIS hub.usb_status.host_halted << 5 + | BX_UHCI_THIS hub.usb_status.host_error << 4 + | BX_UHCI_THIS hub.usb_status.pci_error << 3 + | BX_UHCI_THIS hub.usb_status.resume << 2 + | BX_UHCI_THIS hub.usb_status.error_interrupt << 1 + | BX_UHCI_THIS hub.usb_status.interrupt; + break; + + case 0x04: // interrupt enable register (16-bit) + val = BX_UHCI_THIS hub.usb_enable.short_packet << 3 + | BX_UHCI_THIS hub.usb_enable.on_complete << 2 + | BX_UHCI_THIS hub.usb_enable.resume << 1 + | BX_UHCI_THIS hub.usb_enable.timeout_crc; + break; + + case 0x06: // frame number register (16-bit) + val = BX_UHCI_THIS hub.usb_frame_num.frame_num; + break; + + case 0x08: // frame base register (32-bit) + val = BX_UHCI_THIS hub.usb_frame_base.frame_base; + break; + + case 0x0C: // start of Frame Modify register (8-bit) + val = BX_UHCI_THIS hub.usb_sof.sof_timing; + break; + + case 0x14: // port #3 non existant, but linux systems check it to see if there are more than 2 + BX_ERROR(("read from non existant offset 0x14 (port #3)")); + val = 0xFF7F; + break; + + case 0x10: // port #1 + case 0x11: + case 0x12: // port #2 + case 0x13: + port = (offset & 0x0F) >> 1; + if (port < BX_N_USB_UHCI_PORTS) { + val = BX_UHCI_THIS hub.usb_port[port].suspend << 12 + | 1 << 10 // some Root Hubs have bit 10 set ????? + | BX_UHCI_THIS hub.usb_port[port].reset << 9 + | BX_UHCI_THIS hub.usb_port[port].low_speed << 8 + | 1 << 7 + | BX_UHCI_THIS hub.usb_port[port].resume << 6 + | BX_UHCI_THIS hub.usb_port[port].line_dminus << 5 + | BX_UHCI_THIS hub.usb_port[port].line_dplus << 4 + | BX_UHCI_THIS hub.usb_port[port].able_changed << 3 + | BX_UHCI_THIS hub.usb_port[port].enabled << 2 + | BX_UHCI_THIS hub.usb_port[port].connect_changed << 1 + | BX_UHCI_THIS hub.usb_port[port].status; + if (offset & 1) val >>= 8; + break; + } // else fall through to default + default: + val = 0xFF7F; // keep compiler happy + BX_ERROR(("unsupported io read from address=0x%04x!", (unsigned) address)); + break; + } + + BX_DEBUG(("register read from address 0x%04X: 0x%08X (%2i bits)", (unsigned) address, (Bit32u) val, io_len * 8)); + + return(val); +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_usb_uhci_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_USB_UHCI_SMF + bx_usb_uhci_c *class_ptr = (bx_usb_uhci_c *) this_ptr; + class_ptr->write(address, value, io_len); +} + +void bx_usb_uhci_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_USB_UHCI_SMF + Bit8u offset,port; + + BX_DEBUG(("register write to address 0x%04X: 0x%08X (%2i bits)", (unsigned) address, (unsigned) value, io_len * 8)); + + offset = address - BX_UHCI_THIS hub.base_ioaddr; + + switch (offset) { + case 0x00: // command register (16-bit) (R/W) + if (value & 0xFF00) + BX_DEBUG(("write to command register with bits 15:8 not zero: 0x%04x", value)); + + BX_UHCI_THIS hub.usb_command.max_packet_size = (value & 0x80) ? 1: 0; + BX_UHCI_THIS hub.usb_command.configured = (value & 0x40) ? 1: 0; + BX_UHCI_THIS hub.usb_command.debug = (value & 0x20) ? 1: 0; + BX_UHCI_THIS hub.usb_command.resume = (value & 0x10) ? 1: 0; + BX_UHCI_THIS hub.usb_command.suspend = (value & 0x08) ? 1: 0; + BX_UHCI_THIS hub.usb_command.reset = (value & 0x04) ? 1: 0; + BX_UHCI_THIS hub.usb_command.host_reset = (value & 0x02) ? 1: 0; + BX_UHCI_THIS hub.usb_command.schedule = (value & 0x01) ? 1: 0; + + // HCRESET + if (BX_UHCI_THIS hub.usb_command.host_reset) { + BX_UHCI_THIS reset(0); + for (unsigned i=0; i> 1; + if ((port < BX_N_USB_UHCI_PORTS) && (io_len == 2)) { + // If the ports reset bit is set, don't allow any writes unless the new write will clear the reset bit + if (BX_UHCI_THIS hub.usb_port[port].reset & (value & (1<<9))) + break; + if (value & ((1<<5) | (1<<4) | (1<<0))) + BX_DEBUG(("write to one or more read-only bits in port #%d register: 0x%04x", port+1, value)); + if (!(value & (1<<7))) + BX_DEBUG(("write to port #%d register bit 7 = 0", port+1)); + if (value & (1<<8)) + BX_DEBUG(("write to bit 8 in port #%d register ignored", port+1)); + if ((value & (1<<12)) && BX_UHCI_THIS hub.usb_command.suspend) + BX_DEBUG(("write to port #%d register bit 12 when in Global-Suspend", port+1)); + + BX_UHCI_THIS hub.usb_port[port].suspend = (value & (1<<12)) ? 1 : 0; + BX_UHCI_THIS hub.usb_port[port].reset = (value & (1<<9)) ? 1 : 0; + BX_UHCI_THIS hub.usb_port[port].resume = (value & (1<<6)) ? 1 : 0; + if (!BX_UHCI_THIS hub.usb_port[port].enabled && (value & (1<<2))) + BX_UHCI_THIS hub.usb_port[port].able_changed = 0; + else + BX_UHCI_THIS hub.usb_port[port].able_changed = (value & (1<<3)) ? 0 : BX_UHCI_THIS hub.usb_port[port].able_changed; + BX_UHCI_THIS hub.usb_port[port].enabled = (value & (1<<2)) ? 1 : 0; + BX_UHCI_THIS hub.usb_port[port].connect_changed = (value & (1<<1)) ? 0 : BX_UHCI_THIS hub.usb_port[port].connect_changed; + + // if port reset, reset function(s) + //TODO: only reset items on the downstream... + // for now, reset the one and only + // TODO: descriptors, etc.... + if (BX_UHCI_THIS hub.usb_port[port].reset) { + BX_UHCI_THIS hub.usb_port[port].suspend = 0; + BX_UHCI_THIS hub.usb_port[port].resume = 0; + BX_UHCI_THIS hub.usb_port[port].enabled = 0; + // are we are currently connected/disconnected + if (BX_UHCI_THIS hub.usb_port[port].status) { + if (BX_UHCI_THIS hub.usb_port[port].device != NULL) { + BX_UHCI_THIS hub.usb_port[port].low_speed = + (BX_UHCI_THIS hub.usb_port[port].device->get_speed() == USB_SPEED_LOW); + usb_set_connect_status(port, BX_UHCI_THIS hub.usb_port[port].device->get_type(), 1); + DEV_usb_send_msg(BX_UHCI_THIS hub.usb_port[port].device, USB_MSG_RESET); + } + } + BX_INFO(("Port%d: Reset", port+1)); + } + break; + } + // else fall through to default + default: + BX_ERROR(("unsupported io write to address=0x%04x!", (unsigned) address)); + break; + } +} + +void bx_usb_uhci_c::usb_timer_handler(void *this_ptr) +{ + bx_usb_uhci_c *class_ptr = (bx_usb_uhci_c *) this_ptr; + class_ptr->usb_timer(); +} + +// Called once every 1ms +#define USB_STACK_SIZE 256 +void bx_usb_uhci_c::usb_timer(void) +{ + int i; + char pname[6]; + + // If the "global reset" bit was set by software + if (BX_UHCI_THIS global_reset) { + for (i=0; i -1) { + + // Linux seems to just loop a few queues together and wait for the 1ms to end. + // We will just count the stack and exit when we get to a good point to stop. + if (stk >= USB_STACK_SIZE) break; + + // check to make sure we are not done before continue-ing on + if ((stack[stk].d == HC_VERT) && stack[stk].t) { stk--; continue; } + if ((stack[stk].d == HC_HORZ) && stack[stk].t) break; + if (stack[stk].q) { // is a queue + address = stack[stk].next; + lastvertaddr = address + 4; + // get HORZ slot + stk++; + DEV_MEM_READ_PHYSICAL(address, 4, (Bit8u*) &item); + stack[stk].next = item & ~0xF; + stack[stk].d = HC_HORZ; + stack[stk].q = (item & 0x0002) ? 1 : 0; + stack[stk].t = (item & 0x0001) ? 1 : 0; + // get VERT slot + stk++; + DEV_MEM_READ_PHYSICAL(lastvertaddr, 4, (Bit8u*) &item); + stack[stk].next = item & ~0xF; + stack[stk].d = HC_VERT; + stack[stk].q = (item & 0x0002) ? 1 : 0; + stack[stk].t = (item & 0x0001) ? 1 : 0; + BX_DEBUG(("Queue %3i: 0x%08X %i %i 0x%08X %i %i", queue_num, + stack[stk-1].next, stack[stk-1].q, stack[stk-1].t, + stack[stk].next, stack[stk].q, stack[stk].t)); + queue_num++; + } else { // else is a TD + address = stack[stk].next; + DEV_MEM_READ_PHYSICAL(address, 4, (Bit8u*) &td.dword0); + DEV_MEM_READ_PHYSICAL(address+4, 4, (Bit8u*) &td.dword1); + DEV_MEM_READ_PHYSICAL(address+8, 4, (Bit8u*) &td.dword2); + DEV_MEM_READ_PHYSICAL(address+12, 4, (Bit8u*) &td.dword3); + bx_bool spd = (td.dword1 & (1<<29)) ? 1 : 0; + stack[stk].next = td.dword0 & ~0xF; + bx_bool depthbreadth = (td.dword0 & 0x0004) ? 1 : 0; // 1 = depth first, 0 = breadth first + stack[stk].q = (td.dword0 & 0x0002) ? 1 : 0; + stack[stk].t = (td.dword0 & 0x0001) ? 1 : 0; + if (td.dword1 & (1<<24)) interrupt = 1; + if (td.dword1 & (1<<23)) { // is it an active TD + BX_DEBUG(("Frame: %04i (0x%04X)", BX_UHCI_THIS hub.usb_frame_num.frame_num, BX_UHCI_THIS hub.usb_frame_num.frame_num)); + if (BX_UHCI_THIS DoTransfer(address, queue_num, &td)) { + // issue short packet? + Bit16u r_actlen = (((td.dword1 & 0x7FF)+1) & 0x7FF); + Bit16u r_maxlen = (((td.dword2>>21)+1) & 0x7FF); + BX_DEBUG((" r_actlen = 0x%04X r_maxlen = 0x%04X", r_actlen, r_maxlen)); + if (((td.dword2 & 0xFF) == USB_TOKEN_IN) && spd && stk && (r_actlen < r_maxlen) && ((td.dword1 & 0x00FF0000) == 0)) { + shortpacket = 1; + td.dword1 |= (1<<29); + } + if (td.dword1 & (1<<22)) stalled = 1; + + DEV_MEM_WRITE_PHYSICAL(address+4, 4, (Bit8u*) &td.dword1); // write back the status + if (shortpacket) { + td.dword0 |= 1; + stack[stk].t = 1; + } + // copy pointer for next queue item, in to vert queue head + if ((stk > 0) && (stack[stk].d == HC_VERT)) + DEV_MEM_WRITE_PHYSICAL(lastvertaddr, 4, (Bit8u*) &td.dword0); + } + } + + if (stk > 0) { + // if last TD in HORZ queue pointer, then we are done. + if (stack[stk].t && (stack[stk].d == HC_HORZ)) break; + // if Breadth first or last item in queue, move to next queue. + if (!depthbreadth || stack[stk].t) { + if (stack[stk].d == HC_HORZ) queue_num--; // <-- really, this should never happen until we + stk--; // support bandwidth reclamation... + } + if (stk < 1) break; + } else { + if (stack[stk].t) break; + } + + } + } + + // set the status register bit:0 to 1 if SPD is enabled + // and if interrupts not masked via interrupt register, raise irq interrupt. + if (shortpacket && BX_UHCI_THIS hub.usb_enable.short_packet) { + fire_int = 1; + BX_DEBUG((" [SPD] We want it to fire here (Frame: %04i)", BX_UHCI_THIS hub.usb_frame_num.frame_num)); + } + + // if one of the TD's in this frame had the ioc bit set, we need to + // raise an interrupt, if interrupts are not masked via interrupt register. + // always set the status register if IOC. + if (interrupt && BX_UHCI_THIS hub.usb_enable.on_complete) { + fire_int = 1; + BX_DEBUG((" [IOC] We want it to fire here (Frame: %04i)", BX_UHCI_THIS hub.usb_frame_num.frame_num)); + } + + if (stalled && BX_UHCI_THIS hub.usb_enable.timeout_crc) { + fire_int = 1; + BX_DEBUG((" [stalled] We want it to fire here (Frame: %04i)", BX_UHCI_THIS hub.usb_frame_num.frame_num)); + } + } + + // The Frame Number Register is incremented every 1ms + BX_UHCI_THIS hub.usb_frame_num.frame_num++; + BX_UHCI_THIS hub.usb_frame_num.frame_num &= (1024-1); + + // if we needed to fire an interrupt now, lets do it *after* we increment the frame_num register + if (fire_int) { + BX_UHCI_THIS hub.usb_status.interrupt = 1; + BX_UHCI_THIS hub.usb_status.error_interrupt = stalled; + set_irq_level(1); + } + + // The status.interrupt bit should be set regardless of the enable bits if a IOC or SPD is found + if (shortpacket || interrupt) + BX_UHCI_THIS hub.usb_status.interrupt = 1; + + BX_UHCI_THIS busy = 0; // ready to do next frame item + } // end run schedule + + // if host turned off the schedule, set the halted bit in the status register + // Note: Can not use an else from the if() above since the host can changed this bit + // while we are processing a frame. + if (BX_UHCI_THIS hub.usb_command.schedule == 0) + BX_UHCI_THIS hub.usb_status.host_halted = 1; + + // TODO: + // If in Global_Suspend mode and any of usb_port[i] bits 6,3, or 1 are set, + // we need to issue a Global_Resume (set the global resume bit). + // However, since we don't do anything, let's not. + + for (i = 0; i < BX_N_USB_UHCI_PORTS; i++) { + // forward timer tick + if (BX_UHCI_THIS hub.usb_port[i].device != NULL) { + BX_UHCI_THIS hub.usb_port[i].device->timer(); + } + // device change support + if ((BX_UHCI_THIS hub.device_change & (1 << i)) != 0) { + sprintf(pname, "port%d", i + 1); + init_device(i, (bx_list_c*)SIM->get_param(pname, SIM->get_param(BXPN_USB_UHCI))); + BX_UHCI_THIS hub.device_change &= ~(1 << i); + } + } +} + +bx_bool bx_usb_uhci_c::DoTransfer(Bit32u address, Bit32u queue_num, struct TD *td) { + + int len = 0, ret = 0; + + Bit16u maxlen = (td->dword2 >> 21); + Bit8u addr = (td->dword2 >> 8) & 0x7F; + Bit8u endpt = (td->dword2 >> 15) & 0x0F; + Bit8u pid = td->dword2 & 0xFF; + + BX_DEBUG(("QH%03i:TD found at address: 0x%08X", queue_num, address)); + BX_DEBUG((" %08X %08X %08X %08X", td->dword0, td->dword1, td->dword2, td->dword3)); + + // check TD to make sure it is valid + // A max length 0x500 to 0x77E is illegal + if (((td->dword2 >> 21) >= 0x500) && ((td->dword2 >> 21) != 0x7FF)) { + BX_ERROR(("error at 11111111111")); + return 1; // error = consistency check failure + } + + //if (td->dword0 & 0x8) return 1; // error = reserved bits in dword0 set + // other error checks here + + // the device should remain in a stall state until the next setup packet is recieved + // For some reason, this doesn't work yet. + //if (dev && dev->in_stall && (pid != USB_TOKEN_SETUP)) + // return FALSE; + + maxlen++; + maxlen &= 0x7FF; + + /* set status bar conditions for device */ + if (maxlen > 0) { + if (!BX_UHCI_THIS hub.iolight_counter) { + if (pid == USB_TOKEN_OUT) + bx_gui->statusbar_setitem(BX_UHCI_THIS hub.statusbar_id, 1, 1); // write + else + bx_gui->statusbar_setitem(BX_UHCI_THIS hub.statusbar_id, 1); // read + } + BX_UHCI_THIS hub.iolight_counter = 5; + bx_pc_system.activate_timer(BX_UHCI_THIS hub.iolight_timer_index, 5000, 0); + } + + BX_UHCI_THIS usb_packet.pid = pid; + BX_UHCI_THIS usb_packet.devaddr = addr; + BX_UHCI_THIS usb_packet.devep = endpt; + BX_UHCI_THIS usb_packet.data = device_buffer; + BX_UHCI_THIS usb_packet.len = maxlen; + switch (pid) { + case USB_TOKEN_OUT: + case USB_TOKEN_SETUP: + if (maxlen > 0) { + DEV_MEM_READ_PHYSICAL_BLOCK(td->dword3, maxlen, device_buffer); + } + ret = BX_UHCI_THIS broadcast_packet(&BX_UHCI_THIS usb_packet); + len = maxlen; + break; + case USB_TOKEN_IN: + ret = BX_UHCI_THIS broadcast_packet(&BX_UHCI_THIS usb_packet); + if (ret >= 0) { + len = ret; + if (len > maxlen) { + len = maxlen; + ret = USB_RET_BABBLE; + } + if (len > 0) { + DEV_MEM_WRITE_PHYSICAL_BLOCK(td->dword3, len, device_buffer); + } + } else { + len = 0; + } + break; + default: + BX_UHCI_THIS hub.usb_status.host_error = 1; + BX_UHCI_THIS set_irq_level(1); + } + if (ret >= 0) { + BX_UHCI_THIS set_status(td, 0, 0, 0, 0, 0, 0, len-1); + } else { + BX_UHCI_THIS set_status(td, 1, 0, 0, 0, 0, 0, 0x007); // stalled + } + return 1; +} + +int bx_usb_uhci_c::broadcast_packet(USBPacket *p) +{ + int i, ret; + + ret = USB_RET_NODEV; + for (i = 0; i < BX_N_USB_UHCI_PORTS && ret == USB_RET_NODEV; i++) { + if ((BX_UHCI_THIS hub.usb_port[i].device != NULL) && + (BX_UHCI_THIS hub.usb_port[i].enabled)) { + ret = BX_UHCI_THIS hub.usb_port[i].device->handle_packet(p); + } + } + return ret; +} + +// If the request fails, set the stall bit ???? +void bx_usb_uhci_c::set_status(struct TD *td, bx_bool stalled, bx_bool data_buffer_error, bx_bool babble, + bx_bool nak, bx_bool crc_time_out, bx_bool bitstuff_error, Bit16u act_len) +{ + // clear out the bits we can modify and/or want zero + td->dword1 &= 0xDF00F800; + + // now set the bits according to the passed param's + td->dword1 |= stalled ? (1<<22) : 0; // stalled + td->dword1 |= data_buffer_error ? (1<<21) : 0; // data buffer error + td->dword1 |= babble ? (1<<20) : 0; // babble + td->dword1 |= nak ? (1<<19) : 0; // nak + td->dword1 |= crc_time_out ? (1<<18) : 0; // crc/timeout + td->dword1 |= bitstuff_error ? (1<<17) : 0; // bitstuff error + td->dword1 |= (act_len & 0x7FF); // actual length + if (stalled || data_buffer_error || babble || nak || crc_time_out || bitstuff_error) + td->dword1 &= ~((1<<28) | (1<<27)); // clear the c_err field in there was an error +} + +void bx_usb_uhci_c::iolight_timer_handler(void *this_ptr) +{ + bx_usb_uhci_c *class_ptr = (bx_usb_uhci_c *) this_ptr; + class_ptr->iolight_timer(); +} + +void bx_usb_uhci_c::iolight_timer() +{ + if (BX_UHCI_THIS hub.iolight_counter > 0) { + if (--BX_UHCI_THIS hub.iolight_counter) + bx_pc_system.activate_timer(BX_UHCI_THIS hub.iolight_timer_index, 5000, 0); + else + bx_gui->statusbar_setitem(BX_UHCI_THIS hub.statusbar_id, 0); + } + } + +// pci configuration space read callback handler +Bit32u bx_usb_uhci_c::pci_read_handler(Bit8u address, unsigned io_len) +{ + Bit32u value = 0; + + for (unsigned i=0; i= 0x10) && (address < 0x20)) || + ((address > 0x23) && (address < 0x34))) + return; + + for (unsigned i=0; i> (i*8)) & 0xFF; + oldval = BX_UHCI_THIS hub.pci_conf[address+i]; + switch (address+i) { + case 0x04: + value8 &= 0x05; + BX_UHCI_THIS hub.pci_conf[address+i] = value8; + break; + case 0x3d: // + case 0x3e: // + case 0x3f: // + case 0x05: // disallowing write to command hi-byte + case 0x06: // disallowing write to status lo-byte (is that expected?) + break; + case 0x3c: + if (value8 != oldval) { + BX_INFO(("new irq line = %d", value8)); + BX_UHCI_THIS hub.pci_conf[address+i] = value8; + } + break; + case 0x20: + value8 = (value8 & 0xfc) | 0x01; + case 0x21: + case 0x22: + case 0x23: + baseaddr_change |= (value8 != oldval); + default: + BX_UHCI_THIS hub.pci_conf[address+i] = value8; + } + } + if (baseaddr_change) { + if (DEV_pci_set_base_io(BX_UHCI_THIS_PTR, read_handler, write_handler, + &BX_UHCI_THIS hub.base_ioaddr, + &BX_UHCI_THIS hub.pci_conf[0x20], + 32, &uhci_iomask[0], "USB UHCI Hub")) { + BX_INFO(("new base address: 0x%04x", BX_UHCI_THIS hub.base_ioaddr)); + } + } + + if (io_len == 1) + BX_DEBUG(("write PCI register 0x%02x value 0x%02x", address, value)); + else if (io_len == 2) + BX_DEBUG(("write PCI register 0x%02x value 0x%04x", address, value)); + else if (io_len == 4) + BX_DEBUG(("write PCI register 0x%02x value 0x%08x", address, value)); +} + +void bx_usb_uhci_c::usb_set_connect_status(Bit8u port, int type, bx_bool connected) +{ + usb_device_c *device = BX_UHCI_THIS hub.usb_port[port].device; + if (device != NULL) { + if (device->get_type() == type) { + if (connected) { + BX_UHCI_THIS hub.usb_port[port].low_speed = + (device->get_speed() == USB_SPEED_LOW); + if (BX_UHCI_THIS hub.usb_port[port].low_speed) { + BX_UHCI_THIS hub.usb_port[port].line_dminus = 1; // dminus=1 & dplus=0 = low speed (at idle time) + BX_UHCI_THIS hub.usb_port[port].line_dplus = 0; // dminus=0 & dplus=1 = high speed (at idle time) + } else { + BX_UHCI_THIS hub.usb_port[port].line_dminus = 0; + BX_UHCI_THIS hub.usb_port[port].line_dplus = 1; + } + BX_UHCI_THIS hub.usb_port[port].status = 1; + BX_UHCI_THIS hub.usb_port[port].connect_changed = 1; + BX_UHCI_THIS hub.usb_port[port].able_changed = 1; + + // if in suspend state, signal resume + if (BX_UHCI_THIS hub.usb_command.suspend) { + BX_UHCI_THIS hub.usb_port[port].resume = 1; + BX_UHCI_THIS hub.usb_status.resume = 1; + if (BX_UHCI_THIS hub.usb_enable.resume) { + BX_UHCI_THIS hub.usb_status.interrupt = 1; + set_irq_level(1); + } + } + + if (!device->get_connected()) { + if (!device->init()) { + usb_set_connect_status(port, type, 0); + BX_ERROR(("port #%d: connect failed", port+1)); + } else { + BX_INFO(("port #%d: connect: %s", port+1, device->get_info())); + } + } + } else { + BX_UHCI_THIS hub.usb_port[port].status = 0; + BX_UHCI_THIS hub.usb_port[port].connect_changed = 1; + BX_UHCI_THIS hub.usb_port[port].enabled = 0; + BX_UHCI_THIS hub.usb_port[port].able_changed = 1; + BX_UHCI_THIS hub.usb_port[port].low_speed = 0; + BX_UHCI_THIS hub.usb_port[port].line_dminus = 0; + BX_UHCI_THIS hub.usb_port[port].line_dplus = 0; + remove_device(port); + } + } + } +} + +// USB runtime parameter handler +const char *bx_usb_uhci_c::usb_param_handler(bx_param_string_c *param, int set, + const char *oldval, const char *val, int maxlen) +{ + usbdev_type type = USB_DEV_TYPE_NONE; + int portnum; + + if (set) { + portnum = atoi((param->get_parent())->get_name()+4) - 1; + bx_bool empty = ((strlen(val) == 0) || (!strcmp(val, "none"))); + if ((portnum >= 0) && (portnum < BX_N_USB_UHCI_PORTS)) { + BX_INFO(("USB port #%d experimental device change", portnum+1)); + if (empty && BX_UHCI_THIS hub.usb_port[portnum].status) { + if (BX_UHCI_THIS hub.usb_port[portnum].device != NULL) { + type = BX_UHCI_THIS hub.usb_port[portnum].device->get_type(); + } + usb_set_connect_status(portnum, type, 0); + } else if (!empty && !BX_UHCI_THIS hub.usb_port[portnum].status) { + BX_UHCI_THIS hub.device_change |= (1 << portnum); + } + } else { + BX_PANIC(("usb_param_handler called with unexpected parameter '%s'", param->get_name())); + } + } + return val; +} + +#endif // BX_SUPPORT_PCI && BX_SUPPORT_USB_UHCI diff --git a/bochs/iodev/usb_uhci.h b/bochs/iodev/usb_uhci.h new file mode 100644 index 00000000..7fedb5b1 --- /dev/null +++ b/bochs/iodev/usb_uhci.h @@ -0,0 +1,233 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 Benjamin D Lunt (fys at frontiernet net) +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef BX_IODEV_USB_UHCI_H +#define BX_IODEV_USB_UHCI_H + +#if BX_USE_USB_UHCI_SMF +# define BX_UHCI_THIS theUSB_UHCI-> +# define BX_UHCI_THIS_PTR theUSB_UHCI +#else +# define BX_UHCI_THIS this-> +# define BX_UHCI_THIS_PTR this +#endif + +// defined in bochs.h: UHCI supports 2 ports per root hub + +typedef struct { + Bit32u base_ioaddr; + int timer_index; + + // Registers + // Base + 0x00 Command register + // Base + 0x02 Status register + // Base + 0x04 Interrupt Enable register + // Base + 0x06 Frame Number register + // Base + 0x08 Frame Base Register (32-bit) + // Base + 0x0C Start of Frame Modify register + // Base + 0x0D + // Base + 0x0E + // Base + 0x0F + // Base + 0x10 Eight(?) 16-bit ports (one for each port on hub) + + // Bit reps of registers above + // Command Register + // Bits 15-8 are reserved + // Bit 7 = Maximum packet size + // Bit 6 = Host Controller has been configured (set by software) + // Bit 5 = software debug mode + // Bit 4 = force global resume + // Bit 3 = enter global suspend mode + // Bit 2 = global reset + // Bit 1 = host controller reset + // Bit 0 = run/stop schedule + struct { + bx_bool max_packet_size; //(bit 7) 0 = 32 bytes, 1 = 64 bytes + bx_bool configured; //(bit 6) + bx_bool debug; //(bit 5) + bx_bool resume; //(bit 4) + bx_bool suspend; //(bit 3) + bx_bool reset; //(bit 2) + bx_bool host_reset; //(bit 1) + bx_bool schedule; //(bit 0) 0 = Stop, 1 = Run + } usb_command; + + // Status Register + // Bits 15-6 are reserved + // Bit 5 = Host controller halted + // Bit 4 = Host controller process error + // Bit 3 = PCI Bus error + // Bit 2 = resume received + // Bit 1 = USB error interrupt + // Bit 0 = USB interrupt + struct { + bx_bool host_halted; //(bit 5) + bx_bool host_error; //(bit 4) + bx_bool pci_error; //(bit 3) + bx_bool resume; //(bit 2) + bx_bool error_interrupt; //(bit 1) + bx_bool interrupt; //(bit 0) + } usb_status; + + // Interrupt Enable Register + // Bits 15-4 are reserved + // Bit 3 = enable short packet interrupts + // Bit 2 = enable interrupt On Complete + // Bit 1 = enable resume + // Bit 0 = enable timeout/crc + struct { + bx_bool short_packet; //(bit 3) + bx_bool on_complete; //(bit 2) + bx_bool resume; //(bit 1) + bx_bool timeout_crc; //(bit 0) + } usb_enable; + + // Frame Number Register + // Bits 15-11 are reserved + // Bits 10-0 Frame List Current Index/Frame Number + struct { + Bit16u frame_num; + } usb_frame_num; + + // Frame List Base Address Register + // Bits 31-12 Base + // Bits 11-0 *must* be zeros when written to + struct { + Bit32u frame_base; + } usb_frame_base; + + // Start of Frame Modify Register + // Bit 7 reserved + // Bits 6-0 SOF timing value (default 64) + // SOF cycle time equals 11936+timing value + struct { + Bit8u sof_timing; + } usb_sof; + + // Port Register (0-1) + // Bits 15-13 are reserved + // Bit 12 suspend port + // Bit 11-10 are reserved + // Bit 9 port in reset state + // Bit 8 low-speed device is attached (read-only) + // Bit 7 reserved + // Bit 6 resume detected (read-only) + // Bit 5 line-status D+ (read-only) + // Bit 4 line-status D- (read-only) + // Bit 3 port enabled/disable status has changed + // (write 1 to this bit to clear it) + // Bit 2 port is enabled + // Bit 1 connect status has changed + // (write 1 to this bit to clear it) + // Bit 0 current connect status (read-only) + // Can only write in WORD sizes (Read in byte sizes???) + struct { + // our data + usb_device_c *device; // device connected to this port + + // bit reps of actual port + bx_bool suspend; + bx_bool reset; + bx_bool low_speed; + bx_bool resume; + bx_bool line_dminus; + bx_bool line_dplus; + bx_bool able_changed; + bx_bool enabled; + bx_bool connect_changed; + bx_bool status; + } usb_port[BX_N_USB_UHCI_PORTS]; + + Bit8u pci_conf[256]; + Bit8u devfunc; + + int statusbar_id; // ID of the status LEDs + int iolight_counter; + int iolight_timer_index; + Bit8u device_change; +} bx_usb_uhci_t; + +#pragma pack (push, 1) +struct TD { + Bit32u dword0; + Bit32u dword1; + Bit32u dword2; + Bit32u dword3; + Bit32u resv[4]; +}; +#pragma pack (pop) + +#define HC_HORZ 0x80 +#define HC_VERT 0x81 +struct HCSTACK { + Bit32u next; + Bit8u d; // if queue, denotes VERT or HORZ + bx_bool q; + bx_bool t; +}; + +class bx_usb_uhci_c : public bx_devmodel_c, public bx_pci_device_stub_c { +public: + bx_usb_uhci_c(); + virtual ~bx_usb_uhci_c(); + virtual void init(void); + virtual void reset(unsigned); + virtual void register_state(void); + virtual void after_restore_state(void); + virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len); + virtual void pci_write_handler(Bit8u address, Bit32u value, unsigned io_len); + + static const char *usb_param_handler(bx_param_string_c *param, int set, + const char *oldval, const char *val, int maxlen); + +private: + bx_usb_uhci_t hub; + Bit8u global_reset; + bx_bool busy; + Bit8u *device_buffer; + + USBPacket usb_packet; + + static void set_irq_level(bx_bool level); + + static void init_device(Bit8u port, bx_list_c *portconf); + static void remove_device(Bit8u port); + static int broadcast_packet(USBPacket *p); + static void usb_set_connect_status(Bit8u port, int type, bx_bool connected); + + static void usb_timer_handler(void *); + void usb_timer(void); + bx_bool DoTransfer(Bit32u address, Bit32u queue_num, struct TD *); + void set_status(struct TD *td, bx_bool stalled, bx_bool data_buffer_error, bx_bool babble, + bx_bool nak, bx_bool crc_time_out, bx_bool bitstuff_error, Bit16u act_len); + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_USB_UHCI_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif + + static void iolight_timer_handler(void *); + void iolight_timer(void); + +}; + +#endif diff --git a/bochs/iodev/vga.cc b/bochs/iodev/vga.cc new file mode 100644 index 00000000..d3d0e0ac --- /dev/null +++ b/bochs/iodev/vga.cc @@ -0,0 +1,3491 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "param_names.h" +#include "vga.h" + +#define LOG_THIS theVga-> + +#define VGA_TRACE_FEATURE + +// Only reference the array if the tile numbers are within the bounds +// of the array. If out of bounds, do nothing. +#define SET_TILE_UPDATED(xtile, ytile, value) \ + do { \ + if (((xtile) < BX_NUM_X_TILES) && ((ytile) < BX_NUM_Y_TILES)) \ + BX_VGA_THIS s.vga_tile_updated[(xtile)][(ytile)] = value; \ + } while (0) + +// Only reference the array if the tile numbers are within the bounds +// of the array. If out of bounds, return 0. +#define GET_TILE_UPDATED(xtile,ytile) \ + ((((xtile) < BX_NUM_X_TILES) && ((ytile) < BX_NUM_Y_TILES))? \ + BX_VGA_THIS s.vga_tile_updated[(xtile)][(ytile)] \ + : 0) + +static const Bit16u charmap_offset[8] = { + 0x0000, 0x4000, 0x8000, 0xc000, + 0x2000, 0x6000, 0xa000, 0xe000 +}; + +static const Bit8u ccdat[16][4] = { + { 0x00, 0x00, 0x00, 0x00 }, + { 0xff, 0x00, 0x00, 0x00 }, + { 0x00, 0xff, 0x00, 0x00 }, + { 0xff, 0xff, 0x00, 0x00 }, + { 0x00, 0x00, 0xff, 0x00 }, + { 0xff, 0x00, 0xff, 0x00 }, + { 0x00, 0xff, 0xff, 0x00 }, + { 0xff, 0xff, 0xff, 0x00 }, + { 0x00, 0x00, 0x00, 0xff }, + { 0xff, 0x00, 0x00, 0xff }, + { 0x00, 0xff, 0x00, 0xff }, + { 0xff, 0xff, 0x00, 0xff }, + { 0x00, 0x00, 0xff, 0xff }, + { 0xff, 0x00, 0xff, 0xff }, + { 0x00, 0xff, 0xff, 0xff }, + { 0xff, 0xff, 0xff, 0xff }, +}; + +bx_vga_c *theVga = NULL; + +unsigned old_iHeight = 0, old_iWidth = 0, old_MSL = 0; + +#if BX_SUPPORT_CLGD54XX +void bx_vga_set_smf_pointer(bx_vga_c *theVga_ptr) +{ + theVga = theVga_ptr; +} +#else // BX_SUPPORT_CLGD54XX +int libvga_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theVga = new bx_vga_c(); + bx_devices.pluginVgaDevice = theVga; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theVga, BX_PLUGIN_VGA); + return(0); // Success +} + +void libvga_LTX_plugin_fini(void) +{ + delete theVga; +} +#endif // BX_SUPPORT_CLGD54XX + +bx_vga_c::bx_vga_c() +{ + put("VGA"); + s.vga_mem_updated = 0; + s.x_tilesize = X_TILESIZE; + s.y_tilesize = Y_TILESIZE; + timer_id = BX_NULL_TIMER_HANDLE; + s.memory = NULL; +} + +bx_vga_c::~bx_vga_c() +{ + if (s.memory != NULL) { + delete [] s.memory; + s.memory = NULL; + } + SIM->get_param_num(BXPN_VGA_UPDATE_INTERVAL)->set_handler(NULL); + BX_DEBUG(("Exit")); +} + +void bx_vga_c::init(void) +{ + unsigned i,string_i; + unsigned x,y; +#if BX_SUPPORT_VBE + unsigned addr; + Bit16u max_xres, max_yres, max_bpp; +#endif + int argc; + char *argv[16]; + char *ptr; + char string[512]; + char *extname; + size_t len; + + // initialize VGA controllers and other internal stuff + BX_VGA_THIS s.vga_enabled = 1; + BX_VGA_THIS s.misc_output.color_emulation = 1; + BX_VGA_THIS s.misc_output.enable_ram = 1; + BX_VGA_THIS s.misc_output.clock_select = 0; + BX_VGA_THIS s.misc_output.select_high_bank = 0; + BX_VGA_THIS s.misc_output.horiz_sync_pol = 1; + BX_VGA_THIS s.misc_output.vert_sync_pol = 1; + + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.graphics_alpha = 0; + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.display_type = 0; + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.enable_line_graphics = 1; + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.blink_intensity = 0; + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.pixel_panning_compat = 0; + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.pixel_clock_select = 0; + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.internal_palette_size = 0; + + BX_VGA_THIS s.line_offset=80; + BX_VGA_THIS s.line_compare=1023; + BX_VGA_THIS s.vertical_display_end=399; + + for (i=0; i<=0x18; i++) + BX_VGA_THIS s.CRTC.reg[i] = 0; + BX_VGA_THIS s.CRTC.address = 0; + BX_VGA_THIS s.CRTC.write_protect = 0; + + BX_VGA_THIS s.attribute_ctrl.flip_flop = 0; + BX_VGA_THIS s.attribute_ctrl.address = 0; + BX_VGA_THIS s.attribute_ctrl.video_enabled = 1; + for (i=0; i<16; i++) + BX_VGA_THIS s.attribute_ctrl.palette_reg[i] = 0; + BX_VGA_THIS s.attribute_ctrl.overscan_color = 0; + BX_VGA_THIS s.attribute_ctrl.color_plane_enable = 0x0f; + BX_VGA_THIS s.attribute_ctrl.horiz_pel_panning = 0; + BX_VGA_THIS s.attribute_ctrl.color_select = 0; + + for (i=0; i<256; i++) { + BX_VGA_THIS s.pel.data[i].red = 0; + BX_VGA_THIS s.pel.data[i].green = 0; + BX_VGA_THIS s.pel.data[i].blue = 0; + } + BX_VGA_THIS s.pel.write_data_register = 0; + BX_VGA_THIS s.pel.write_data_cycle = 0; + BX_VGA_THIS s.pel.read_data_register = 0; + BX_VGA_THIS s.pel.read_data_cycle = 0; + BX_VGA_THIS s.pel.dac_state = 0x01; + BX_VGA_THIS s.pel.mask = 0xff; + + BX_VGA_THIS s.graphics_ctrl.index = 0; + BX_VGA_THIS s.graphics_ctrl.set_reset = 0; + BX_VGA_THIS s.graphics_ctrl.enable_set_reset = 0; + BX_VGA_THIS s.graphics_ctrl.color_compare = 0; + BX_VGA_THIS s.graphics_ctrl.data_rotate = 0; + BX_VGA_THIS s.graphics_ctrl.raster_op = 0; + BX_VGA_THIS s.graphics_ctrl.read_map_select = 0; + BX_VGA_THIS s.graphics_ctrl.write_mode = 0; + BX_VGA_THIS s.graphics_ctrl.read_mode = 0; + BX_VGA_THIS s.graphics_ctrl.odd_even = 0; + BX_VGA_THIS s.graphics_ctrl.chain_odd_even = 0; + BX_VGA_THIS s.graphics_ctrl.shift_reg = 0; + BX_VGA_THIS s.graphics_ctrl.graphics_alpha = 0; + BX_VGA_THIS s.graphics_ctrl.memory_mapping = 2; // monochrome text mode + BX_VGA_THIS s.graphics_ctrl.color_dont_care = 0; + BX_VGA_THIS s.graphics_ctrl.bitmask = 0; + for (i=0; i<4; i++) { + BX_VGA_THIS s.graphics_ctrl.latch[i] = 0; + } + + BX_VGA_THIS s.sequencer.index = 0; + BX_VGA_THIS s.sequencer.map_mask = 0; + BX_VGA_THIS s.sequencer.reset1 = 1; + BX_VGA_THIS s.sequencer.reset2 = 1; + BX_VGA_THIS s.sequencer.reg1 = 0; + BX_VGA_THIS s.sequencer.char_map_select = 0; + BX_VGA_THIS s.sequencer.extended_mem = 1; // display mem greater than 64K + BX_VGA_THIS s.sequencer.odd_even = 1; // use sequential addressing mode + BX_VGA_THIS s.sequencer.chain_four = 0; // use map mask & read map select + + BX_VGA_THIS s.charmap_address = 0; + BX_VGA_THIS s.x_dotclockdiv2 = 0; + BX_VGA_THIS s.y_doublescan = 0; + BX_VGA_THIS s.last_bpp = 8; + + BX_VGA_THIS s.vga_mem_updated = 0; + for (y=0; y<480/Y_TILESIZE; y++) + for (x=0; x<640/X_TILESIZE; x++) + SET_TILE_UPDATED (x, y, 0); + + BX_VGA_THIS extension_init = 0; + BX_VGA_THIS extension_checked = 0; + + // initialize memory, handlers and timer (depending on extension) + extname = SIM->get_param_string(BXPN_VGA_EXTENSION)->getptr(); + if ((strlen(extname) == 0) || (!strcmp(extname, "none"))) { + BX_VGA_THIS s.memsize = 0x40000; + if (BX_VGA_THIS s.memory == NULL) + BX_VGA_THIS s.memory = new Bit8u[BX_VGA_THIS s.memsize]; + memset(BX_VGA_THIS s.memory, 0, BX_VGA_THIS s.memsize); + } +#if !BX_SUPPORT_CLGD54XX + BX_VGA_THIS init_iohandlers(read_handler,write_handler); + BX_VGA_THIS init_systemtimer(timer_handler, vga_param_handler); +#endif + DEV_register_memory_handlers(theVga, mem_read_handler, mem_write_handler, + 0xa0000, 0xbffff); + + // video card with BIOS ROM + DEV_cmos_set_reg(0x14, (DEV_cmos_get_reg(0x14) & 0xcf) | 0x00); + + // set up display library options and start gui + memset(argv, 0, sizeof(argv)); + argc = 1; + argv[0] = (char *)"bochs"; + len = strlen(SIM->get_param_string(BXPN_DISPLAYLIB_OPTIONS)->getptr()); + if (len > 0) { + char *options = new char[len + 1]; + strcpy(options, SIM->get_param_string(BXPN_DISPLAYLIB_OPTIONS)->getptr()); + ptr = strtok(options, ","); + while (ptr) { + string_i = 0; + for (i=0; iinit(argc, argv, BX_VGA_THIS s.x_tilesize, BX_VGA_THIS s.y_tilesize); + for (i = 1; i < (unsigned)argc; i++) + { + if (argv[i] != NULL) + { + free(argv[i]); + argv[i] = NULL; + } + } + +#if BX_SUPPORT_VBE + // The following is for the vbe display extension + BX_VGA_THIS vbe.enabled=0; + BX_VGA_THIS vbe.dac_8bit=0; + BX_VGA_THIS vbe.base_address = 0x0000; + if (!strcmp(extname, "vbe")) { + for (addr=VBE_DISPI_IOPORT_INDEX; addr<=VBE_DISPI_IOPORT_DATA; addr++) { + DEV_register_ioread_handler(this, vbe_read_handler, addr, "vga video", 7); + DEV_register_iowrite_handler(this, vbe_write_handler, addr, "vga video", 7); + } +#if BX_SUPPORT_PCI + if ((!SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get()) || + (!DEV_is_pci_device(BX_PLUGIN_PCIVGA))) +#endif + { + BX_VGA_THIS vbe.base_address = VBE_DISPI_LFB_PHYSICAL_ADDRESS; + DEV_register_memory_handlers(theVga, mem_read_handler, mem_write_handler, + BX_VGA_THIS vbe.base_address, + BX_VGA_THIS vbe.base_address + VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES - 1); + + } + if (BX_VGA_THIS s.memory == NULL) + BX_VGA_THIS s.memory = new Bit8u[VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES]; + memset(BX_VGA_THIS s.memory, 0, VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES); + BX_VGA_THIS s.memsize = VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES; + BX_VGA_THIS vbe.cur_dispi=VBE_DISPI_ID0; + BX_VGA_THIS vbe.xres=640; + BX_VGA_THIS vbe.yres=480; + BX_VGA_THIS vbe.bpp=8; + BX_VGA_THIS vbe.bank=0; + BX_VGA_THIS vbe.curindex=0; + BX_VGA_THIS vbe.offset_x=0; + BX_VGA_THIS vbe.offset_y=0; + BX_VGA_THIS vbe.virtual_xres=640; + BX_VGA_THIS vbe.virtual_yres=480; + BX_VGA_THIS vbe.bpp_multiplier=1; + BX_VGA_THIS vbe.virtual_start=0; + BX_VGA_THIS vbe.lfb_enabled=0; + BX_VGA_THIS vbe.get_capabilities=0; + bx_gui->get_capabilities(&max_xres, &max_yres, &max_bpp); + if (max_xres > VBE_DISPI_MAX_XRES) { + BX_VGA_THIS vbe.max_xres=VBE_DISPI_MAX_XRES; + } else { + BX_VGA_THIS vbe.max_xres=max_xres; + } + if (max_yres > VBE_DISPI_MAX_YRES) { + BX_VGA_THIS vbe.max_yres=VBE_DISPI_MAX_YRES; + } else { + BX_VGA_THIS vbe.max_yres=max_yres; + } + if (max_bpp > VBE_DISPI_MAX_BPP) { + BX_VGA_THIS vbe.max_bpp=VBE_DISPI_MAX_BPP; + } else { + BX_VGA_THIS vbe.max_bpp=max_bpp; + } + BX_VGA_THIS extension_init = 1; + + BX_INFO(("VBE Bochs Display Extension Enabled")); + } +#endif +} + +void bx_vga_c::init_iohandlers(bx_read_handler_t f_read, bx_write_handler_t f_write) +{ + unsigned addr, i; + Bit8u io_mask[16] = {3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1}; + for (addr=0x03B4; addr<=0x03B5; addr++) { + DEV_register_ioread_handler(this, f_read, addr, "vga video", 1); + DEV_register_iowrite_handler(this, f_write, addr, "vga video", 3); + } + + for (addr=0x03BA; addr<=0x03BA; addr++) { + DEV_register_ioread_handler(this, f_read, addr, "vga video", 1); + DEV_register_iowrite_handler(this, f_write, addr, "vga video", 3); + } + + i = 0; + for (addr=0x03C0; addr<=0x03CF; addr++) { + DEV_register_ioread_handler(this, f_read, addr, "vga video", io_mask[i++]); + DEV_register_iowrite_handler(this, f_write, addr, "vga video", 3); + } + + for (addr=0x03D4; addr<=0x03D5; addr++) { + DEV_register_ioread_handler(this, f_read, addr, "vga video", 3); + DEV_register_iowrite_handler(this, f_write, addr, "vga video", 3); + } + + for (addr=0x03DA; addr<=0x03DA; addr++) { + DEV_register_ioread_handler(this, f_read, addr, "vga video", 1); + DEV_register_iowrite_handler(this, f_write, addr, "vga video", 3); + } +} + +void bx_vga_c::init_systemtimer(bx_timer_handler_t f_timer, param_event_handler f_param) +{ + bx_param_num_c *vga_update_interval = SIM->get_param_num(BXPN_VGA_UPDATE_INTERVAL); + Bit64u interval = vga_update_interval->get(); + BX_INFO(("interval=" FMT_LL "u", interval)); + if (BX_VGA_THIS timer_id == BX_NULL_TIMER_HANDLE) { + BX_VGA_THIS timer_id = bx_pc_system.register_timer(this, f_timer, + (Bit32u)interval, 1, 1, "vga"); + vga_update_interval->set_handler(f_param); + vga_update_interval->set_runtime_param(1); + } + if (interval < 300000) { + BX_VGA_THIS s.blink_counter = 300000 / (unsigned)interval; + } else { + BX_VGA_THIS s.blink_counter = 1; + } +} + +void bx_vga_c::reset(unsigned type) +{ + if (!BX_VGA_THIS extension_checked) { + char *strptr = SIM->get_param_string(BXPN_VGA_EXTENSION)->getptr(); + if (!BX_VGA_THIS extension_init && + (strlen(strptr) > 0) && + strcmp(strptr, "none")) { + BX_PANIC(("unknown display extension: %s", strptr)); + } + BX_VGA_THIS extension_checked = 1; + } +} + +void bx_vga_c::register_state(void) +{ + unsigned i; + char name[6]; + bx_list_c *parent, *reg; + + parent = SIM->get_bochs_root(); +#if BX_SUPPORT_CLGD54XX + if (!strcmp(SIM->get_param_string(BXPN_VGA_EXTENSION)->getptr(), "cirrus")) { + parent = (bx_list_c*)SIM->get_param("svga_cirrus", parent);; + } +#endif + bx_list_c *list = new bx_list_c(parent, "vga", "VGA Adapter State", 17); + bx_list_c *misc = new bx_list_c(list, "misc_output", 6); + new bx_shadow_bool_c(misc, "color_emulation", &BX_VGA_THIS s.misc_output.color_emulation); + new bx_shadow_bool_c(misc, "enable_ram", &BX_VGA_THIS s.misc_output.enable_ram); + new bx_shadow_num_c(misc, "clock_select", &BX_VGA_THIS s.misc_output.clock_select); + new bx_shadow_bool_c(misc, "select_high_bank", &BX_VGA_THIS s.misc_output.select_high_bank); + new bx_shadow_bool_c(misc, "horiz_sync_pol", &BX_VGA_THIS s.misc_output.horiz_sync_pol); + new bx_shadow_bool_c(misc, "vert_sync_pol", &BX_VGA_THIS s.misc_output.vert_sync_pol); + bx_list_c *crtc = new bx_list_c(list, "CRTC", 3); + new bx_shadow_num_c(crtc, "address", &BX_VGA_THIS s.CRTC.address, BASE_HEX); + reg = new bx_list_c(crtc, "reg", 0x19); + for (i=0; i<=0x18; i++) { + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(reg, name, &BX_VGA_THIS s.CRTC.reg[i], BASE_HEX); + } + new bx_shadow_bool_c(crtc, "write_protect", &BX_VGA_THIS s.CRTC.write_protect); + bx_list_c *actl = new bx_list_c(list, "attribute_ctrl", 9); + new bx_shadow_bool_c(actl, "flip_flop", &BX_VGA_THIS s.attribute_ctrl.flip_flop); + new bx_shadow_num_c(actl, "address", &BX_VGA_THIS s.attribute_ctrl.address, BASE_HEX); + new bx_shadow_bool_c(actl, "video_enabled", &BX_VGA_THIS s.attribute_ctrl.video_enabled); + reg = new bx_list_c(actl, "palette_reg", 16); + for (i=0; i<16; i++) { + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(reg, name, &BX_VGA_THIS s.attribute_ctrl.palette_reg[i], BASE_HEX); + } + new bx_shadow_num_c(actl, "overscan_color", &BX_VGA_THIS s.attribute_ctrl.overscan_color, BASE_HEX); + new bx_shadow_num_c(actl, "color_plane_enable", &BX_VGA_THIS s.attribute_ctrl.color_plane_enable, BASE_HEX); + new bx_shadow_num_c(actl, "horiz_pel_panning", &BX_VGA_THIS s.attribute_ctrl.horiz_pel_panning, BASE_HEX); + new bx_shadow_num_c(actl, "color_select", &BX_VGA_THIS s.attribute_ctrl.color_select, BASE_HEX); + bx_list_c *mode = new bx_list_c(actl, "mode_ctrl", 7); + new bx_shadow_bool_c(mode, "graphics_alpha", &BX_VGA_THIS s.attribute_ctrl.mode_ctrl.graphics_alpha); + new bx_shadow_bool_c(mode, "display_type", &BX_VGA_THIS s.attribute_ctrl.mode_ctrl.display_type); + new bx_shadow_bool_c(mode, "enable_line_graphics", &BX_VGA_THIS s.attribute_ctrl.mode_ctrl.enable_line_graphics); + new bx_shadow_bool_c(mode, "blink_intensity", &BX_VGA_THIS s.attribute_ctrl.mode_ctrl.blink_intensity); + new bx_shadow_bool_c(mode, "pixel_panning_compat", &BX_VGA_THIS s.attribute_ctrl.mode_ctrl.pixel_panning_compat); + new bx_shadow_bool_c(mode, "pixel_clock_select", &BX_VGA_THIS s.attribute_ctrl.mode_ctrl.pixel_clock_select); + new bx_shadow_bool_c(mode, "internal_palette_size", &BX_VGA_THIS s.attribute_ctrl.mode_ctrl.internal_palette_size); + bx_list_c *pel = new bx_list_c(list, "pel", 6); + new bx_shadow_num_c(pel, "write_data_register", &BX_VGA_THIS s.pel.write_data_register, BASE_HEX); + new bx_shadow_num_c(pel, "write_data_cycle", &BX_VGA_THIS s.pel.write_data_cycle); + new bx_shadow_num_c(pel, "read_data_register", &BX_VGA_THIS s.pel.read_data_register, BASE_HEX); + new bx_shadow_num_c(pel, "read_data_cycle", &BX_VGA_THIS s.pel.read_data_cycle); + new bx_shadow_num_c(pel, "dac_state", &BX_VGA_THIS s.pel.dac_state); + new bx_shadow_num_c(pel, "mask", &BX_VGA_THIS s.pel.mask, BASE_HEX); + new bx_shadow_data_c(list, "pel_data", &BX_VGA_THIS s.pel.data[0].red, sizeof(BX_VGA_THIS s.pel.data)); + bx_list_c *gfxc = new bx_list_c(list, "graphics_ctrl", 20); + new bx_shadow_num_c(gfxc, "index", &BX_VGA_THIS s.graphics_ctrl.index); + new bx_shadow_num_c(gfxc, "set_reset", &BX_VGA_THIS s.graphics_ctrl.set_reset); + new bx_shadow_num_c(gfxc, "enable_set_reset", &BX_VGA_THIS s.graphics_ctrl.enable_set_reset); + new bx_shadow_num_c(gfxc, "color_compare", &BX_VGA_THIS s.graphics_ctrl.color_compare); + new bx_shadow_num_c(gfxc, "data_rotate", &BX_VGA_THIS s.graphics_ctrl.data_rotate); + new bx_shadow_num_c(gfxc, "raster_op", &BX_VGA_THIS s.graphics_ctrl.raster_op); + new bx_shadow_num_c(gfxc, "read_map_select", &BX_VGA_THIS s.graphics_ctrl.read_map_select); + new bx_shadow_num_c(gfxc, "write_mode", &BX_VGA_THIS s.graphics_ctrl.write_mode); + new bx_shadow_num_c(gfxc, "read_mode", &BX_VGA_THIS s.graphics_ctrl.read_mode); + new bx_shadow_bool_c(gfxc, "odd_even", &BX_VGA_THIS s.graphics_ctrl.odd_even); + new bx_shadow_bool_c(gfxc, "chain_odd_even", &BX_VGA_THIS s.graphics_ctrl.chain_odd_even); + new bx_shadow_num_c(gfxc, "shift_reg", &BX_VGA_THIS s.graphics_ctrl.shift_reg); + new bx_shadow_bool_c(gfxc, "graphics_alpha", &BX_VGA_THIS s.graphics_ctrl.graphics_alpha); + new bx_shadow_num_c(gfxc, "memory_mapping", &BX_VGA_THIS s.graphics_ctrl.memory_mapping); + new bx_shadow_num_c(gfxc, "color_dont_care", &BX_VGA_THIS s.graphics_ctrl.color_dont_care, BASE_HEX); + new bx_shadow_num_c(gfxc, "bitmask", &BX_VGA_THIS s.graphics_ctrl.bitmask, BASE_HEX); + new bx_shadow_num_c(gfxc, "latch0", &BX_VGA_THIS s.graphics_ctrl.latch[0], BASE_HEX); + new bx_shadow_num_c(gfxc, "latch1", &BX_VGA_THIS s.graphics_ctrl.latch[1], BASE_HEX); + new bx_shadow_num_c(gfxc, "latch2", &BX_VGA_THIS s.graphics_ctrl.latch[2], BASE_HEX); + new bx_shadow_num_c(gfxc, "latch3", &BX_VGA_THIS s.graphics_ctrl.latch[3], BASE_HEX); + bx_list_c *sequ = new bx_list_c(list, "sequencer", 13); + new bx_shadow_num_c(sequ, "index", &BX_VGA_THIS s.sequencer.index); + new bx_shadow_num_c(sequ, "map_mask", &BX_VGA_THIS s.sequencer.map_mask); + new bx_shadow_bool_c(sequ, "reset1", &BX_VGA_THIS s.sequencer.reset1); + new bx_shadow_bool_c(sequ, "reset2", &BX_VGA_THIS s.sequencer.reset2); + new bx_shadow_num_c(sequ, "reg1", &BX_VGA_THIS s.sequencer.reg1, BASE_HEX); + new bx_shadow_num_c(sequ, "char_map_select", &BX_VGA_THIS s.sequencer.char_map_select); + new bx_shadow_bool_c(sequ, "extended_mem", &BX_VGA_THIS s.sequencer.extended_mem); + new bx_shadow_bool_c(sequ, "odd_even", &BX_VGA_THIS s.sequencer.odd_even); + new bx_shadow_bool_c(sequ, "chain_four", &BX_VGA_THIS s.sequencer.chain_four); + new bx_shadow_bool_c(list, "enabled", &BX_VGA_THIS s.vga_enabled); + new bx_shadow_num_c(list, "line_offset", &BX_VGA_THIS s.line_offset); + new bx_shadow_num_c(list, "line_compare", &BX_VGA_THIS s.line_compare); + new bx_shadow_num_c(list, "vertical_display_end", &BX_VGA_THIS s.vertical_display_end); + new bx_shadow_num_c(list, "charmap_address", &BX_VGA_THIS s.charmap_address); + new bx_shadow_bool_c(list, "x_dotclockdiv2", &BX_VGA_THIS s.x_dotclockdiv2); + new bx_shadow_bool_c(list, "y_doublescan", &BX_VGA_THIS s.y_doublescan); + new bx_shadow_num_c(list, "last_bpp", &BX_VGA_THIS s.last_bpp); + new bx_shadow_data_c(list, "memory", BX_VGA_THIS s.memory, BX_VGA_THIS s.memsize); +#if BX_SUPPORT_VBE + if (!strcmp(SIM->get_param_string(BXPN_VGA_EXTENSION)->getptr(), "vbe")) { + bx_list_c *vbe = new bx_list_c(list, "vbe", 18); + new bx_shadow_num_c(vbe, "cur_dispi", &BX_VGA_THIS vbe.cur_dispi, BASE_HEX); + new bx_shadow_num_c(vbe, "xres", &BX_VGA_THIS vbe.xres); + new bx_shadow_num_c(vbe, "yres", &BX_VGA_THIS vbe.yres); + new bx_shadow_num_c(vbe, "bpp", &BX_VGA_THIS vbe.bpp); + new bx_shadow_num_c(vbe, "bank", &BX_VGA_THIS vbe.bank); + new bx_shadow_bool_c(vbe, "enabled", &BX_VGA_THIS vbe.enabled); + new bx_shadow_num_c(vbe, "curindex", &BX_VGA_THIS vbe.curindex); + new bx_shadow_num_c(vbe, "visible_screen_size", &BX_VGA_THIS vbe.visible_screen_size); + new bx_shadow_num_c(vbe, "offset_x", &BX_VGA_THIS vbe.offset_x); + new bx_shadow_num_c(vbe, "offset_y", &BX_VGA_THIS vbe.offset_y); + new bx_shadow_num_c(vbe, "virtual_xres", &BX_VGA_THIS vbe.virtual_xres); + new bx_shadow_num_c(vbe, "virtual_yres", &BX_VGA_THIS vbe.virtual_yres); + new bx_shadow_num_c(vbe, "virtual_start", &BX_VGA_THIS vbe.virtual_start); + new bx_shadow_num_c(vbe, "bpp_multiplier", &BX_VGA_THIS vbe.bpp_multiplier); + new bx_shadow_bool_c(vbe, "lfb_enabled", &BX_VGA_THIS vbe.lfb_enabled); + new bx_shadow_bool_c(vbe, "get_capabilities", &BX_VGA_THIS vbe.get_capabilities); + new bx_shadow_bool_c(vbe, "dac_8bit", &BX_VGA_THIS vbe.dac_8bit); + } +#endif +} + +void bx_vga_c::after_restore_state(void) +{ + for (unsigned i=0; i<256; i++) { +#if BX_SUPPORT_VBE + if (BX_VGA_THIS vbe.dac_8bit) { + bx_gui->palette_change(i, BX_VGA_THIS s.pel.data[i].red, + BX_VGA_THIS s.pel.data[i].green, + BX_VGA_THIS s.pel.data[i].blue); + } + else +#endif + { + bx_gui->palette_change(i, BX_VGA_THIS s.pel.data[i].red<<2, + BX_VGA_THIS s.pel.data[i].green<<2, + BX_VGA_THIS s.pel.data[i].blue<<2); + } + } + bx_gui->set_text_charmap(&BX_VGA_THIS s.memory[0x20000 + BX_VGA_THIS s.charmap_address]); + old_iWidth = BX_MAX_XRES; + old_iHeight = BX_MAX_YRES; + BX_VGA_THIS redraw_area(0, 0, BX_MAX_XRES, BX_MAX_YRES); +#if BX_SUPPORT_VBE + if (BX_VGA_THIS vbe.enabled) { + bx_gui->dimension_update(BX_VGA_THIS vbe.xres, BX_VGA_THIS vbe.yres, 0, 0, + BX_VGA_THIS vbe.bpp); + } +#endif + BX_VGA_THIS update(); + bx_gui->flush(); +} + +void bx_vga_c::determine_screen_dimensions(unsigned *piHeight, unsigned *piWidth) +{ + int ai[0x20]; + int i,h,v; + for (i = 0 ; i < 0x20 ; i++) + ai[i] = BX_VGA_THIS s.CRTC.reg[i]; + + h = (ai[1] + 1) * 8; + v = (ai[18] | ((ai[7] & 0x02) << 7) | ((ai[7] & 0x40) << 3)) + 1; + + if (BX_VGA_THIS s.graphics_ctrl.shift_reg == 0) + { + *piWidth = 640; + *piHeight = 480; + + if (BX_VGA_THIS s.CRTC.reg[6] == 0xBF) + { + if (BX_VGA_THIS s.CRTC.reg[23] == 0xA3 && + BX_VGA_THIS s.CRTC.reg[20] == 0x40 && + BX_VGA_THIS s.CRTC.reg[9] == 0x41) + { + *piWidth = 320; + *piHeight = 240; + } + else { + if (BX_VGA_THIS s.x_dotclockdiv2) h <<= 1; + *piWidth = h; + *piHeight = v; + } + } + else if ((h >= 640) && (v >= 400)) { + *piWidth = h; + *piHeight = v; + } + } + else if (BX_VGA_THIS s.graphics_ctrl.shift_reg == 2) + { + + if (BX_VGA_THIS s.sequencer.chain_four) + { + *piWidth = h; + *piHeight = v; + } + else + { + *piWidth = h; + *piHeight = v; + } + } + else + { + if (BX_VGA_THIS s.x_dotclockdiv2) h <<= 1; + *piWidth = h; + *piHeight = v; + } +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +Bit32u bx_vga_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if BX_USE_VGA_SMF == 0 + bx_vga_c *class_ptr = (bx_vga_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_vga_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // BX_USE_VGA_SMF == 0 + bx_bool horiz_retrace = 0, vert_retrace = 0; + Bit64u usec; + Bit16u ret16, vertres; + Bit8u retval; + +#if defined(VGA_TRACE_FEATURE) + Bit32u ret = 0; +#define RETURN(x) do { ret = (x); goto read_return; } while (0) +#else +#define RETURN return +#endif + + if (io_len == 2) { +#if BX_USE_VGA_SMF + ret16 = bx_vga_c::read_handler(0, address, 1); + ret16 |= (bx_vga_c::read_handler(0, address+1, 1)) << 8; +#else + ret16 = bx_vga_c::read(address, 1); + ret16 |= (bx_vga_c::read(address+1, 1) << 8; +#endif + RETURN(ret16); + } + +#ifdef __OS2__ + if (bx_options.videomode == BX_VIDEO_DIRECT) + { + return _inp(address); + } +#endif + +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("io read from 0x%04x", (unsigned) address)); +#endif + + if ((address >= 0x03b0) && (address <= 0x03bf) && + (BX_VGA_THIS s.misc_output.color_emulation)) { + RETURN(0xff); + } + if ((address >= 0x03d0) && (address <= 0x03df) && + (BX_VGA_THIS s.misc_output.color_emulation==0)) { + RETURN(0xff); + } + + switch (address) { + case 0x03ba: /* Input Status 1 (monochrome emulation modes) */ + case 0x03ca: /* Feature Control ??? */ + case 0x03da: /* Input Status 1 (color emulation modes) */ + // bit3: Vertical Retrace + // 0 = display is in the display mode + // 1 = display is in the vertical retrace mode + // bit0: Display Enable + // 0 = display is in the display mode + // 1 = display is not in the display mode; either the + // horizontal or vertical retrace period is active + + // using 72 Hz vertical frequency + usec = bx_pc_system.time_usec(); + switch ((BX_VGA_THIS s.misc_output.vert_sync_pol << 1) | BX_VGA_THIS s.misc_output.horiz_sync_pol) + { + case 0: vertres = 200; break; + case 1: vertres = 400; break; + case 2: vertres = 350; break; + default: vertres = 480; break; + } + if ((usec % 13888) < 70) { + vert_retrace = 1; + } + if ((usec % (13888 / vertres)) == 0) { + horiz_retrace = 1; + } + + retval = 0; + if (horiz_retrace || vert_retrace) + retval = 0x01; + if (vert_retrace) + retval |= 0x08; + + /* reading this port resets the flip-flop to address mode */ + BX_VGA_THIS s.attribute_ctrl.flip_flop = 0; + RETURN(retval); + break; + + + case 0x03c0: /* */ + if (BX_VGA_THIS s.attribute_ctrl.flip_flop == 0) { + //BX_INFO(("io read: 0x3c0: flip_flop = 0")); + retval = + (BX_VGA_THIS s.attribute_ctrl.video_enabled << 5) | + BX_VGA_THIS s.attribute_ctrl.address; + RETURN(retval); + } + else { + BX_ERROR(("io read: 0x3c0: flip_flop != 0")); + return(0); + } + break; + + case 0x03c1: /* */ + switch (BX_VGA_THIS s.attribute_ctrl.address) { + case 0x00: case 0x01: case 0x02: case 0x03: + case 0x04: case 0x05: case 0x06: case 0x07: + case 0x08: case 0x09: case 0x0a: case 0x0b: + case 0x0c: case 0x0d: case 0x0e: case 0x0f: + retval = BX_VGA_THIS s.attribute_ctrl.palette_reg[BX_VGA_THIS s.attribute_ctrl.address]; + RETURN(retval); + break; + case 0x10: /* mode control register */ + retval = + (BX_VGA_THIS s.attribute_ctrl.mode_ctrl.graphics_alpha << 0) | + (BX_VGA_THIS s.attribute_ctrl.mode_ctrl.display_type << 1) | + (BX_VGA_THIS s.attribute_ctrl.mode_ctrl.enable_line_graphics << 2) | + (BX_VGA_THIS s.attribute_ctrl.mode_ctrl.blink_intensity << 3) | + (BX_VGA_THIS s.attribute_ctrl.mode_ctrl.pixel_panning_compat << 5) | + (BX_VGA_THIS s.attribute_ctrl.mode_ctrl.pixel_clock_select << 6) | + (BX_VGA_THIS s.attribute_ctrl.mode_ctrl.internal_palette_size << 7); + RETURN(retval); + break; + case 0x11: /* overscan color register */ + RETURN(BX_VGA_THIS s.attribute_ctrl.overscan_color); + break; + case 0x12: /* color plane enable */ + RETURN(BX_VGA_THIS s.attribute_ctrl.color_plane_enable); + break; + case 0x13: /* horizontal PEL panning register */ + RETURN(BX_VGA_THIS s.attribute_ctrl.horiz_pel_panning); + break; + case 0x14: /* color select register */ + RETURN(BX_VGA_THIS s.attribute_ctrl.color_select); + break; + default: + BX_INFO(("io read: 0x3c1: unknown register 0x%02x", + (unsigned) BX_VGA_THIS s.attribute_ctrl.address)); + RETURN(0); + } + break; + + case 0x03c2: /* Input Status 0 */ + BX_DEBUG(("io read 0x3c2: input status #0: ignoring")); + RETURN(0); + break; + + case 0x03c3: /* VGA Enable Register */ + RETURN(BX_VGA_THIS s.vga_enabled); + break; + + case 0x03c4: /* Sequencer Index Register */ + RETURN(BX_VGA_THIS s.sequencer.index); + break; + + case 0x03c5: /* Sequencer Registers 00..04 */ + switch (BX_VGA_THIS s.sequencer.index) { + case 0: /* sequencer: reset */ + BX_DEBUG(("io read 0x3c5: sequencer reset")); + RETURN(BX_VGA_THIS s.sequencer.reset1 | (BX_VGA_THIS s.sequencer.reset2<<1)); + break; + case 1: /* sequencer: clocking mode */ + BX_DEBUG(("io read 0x3c5: sequencer clocking mode")); + RETURN(BX_VGA_THIS s.sequencer.reg1); + break; + case 2: /* sequencer: map mask register */ + RETURN(BX_VGA_THIS s.sequencer.map_mask); + break; + case 3: /* sequencer: character map select register */ + RETURN(BX_VGA_THIS s.sequencer.char_map_select); + break; + case 4: /* sequencer: memory mode register */ + retval = + (BX_VGA_THIS s.sequencer.extended_mem << 1) | + (BX_VGA_THIS s.sequencer.odd_even << 2) | + (BX_VGA_THIS s.sequencer.chain_four << 3); + RETURN(retval); + break; + + default: + BX_DEBUG(("io read 0x3c5: index %u unhandled", + (unsigned) BX_VGA_THIS s.sequencer.index)); + RETURN(0); + } + break; + + case 0x03c6: /* PEL mask ??? */ + RETURN(BX_VGA_THIS s.pel.mask); + break; + + case 0x03c7: /* DAC state, read = 11b, write = 00b */ + RETURN(BX_VGA_THIS s.pel.dac_state); + break; + + case 0x03c8: /* PEL address write mode */ + RETURN(BX_VGA_THIS s.pel.write_data_register); + break; + + case 0x03c9: /* PEL Data Register, colors 00..FF */ + if (BX_VGA_THIS s.pel.dac_state == 0x03) { + switch (BX_VGA_THIS s.pel.read_data_cycle) { + case 0: + retval = BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.read_data_register].red; + break; + case 1: + retval = BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.read_data_register].green; + break; + case 2: + retval = BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.read_data_register].blue; + break; + default: + retval = 0; // keep compiler happy + } + BX_VGA_THIS s.pel.read_data_cycle++; + if (BX_VGA_THIS s.pel.read_data_cycle >= 3) { + BX_VGA_THIS s.pel.read_data_cycle = 0; + BX_VGA_THIS s.pel.read_data_register++; + } + } + else { + retval = 0x3f; + } + RETURN(retval); + break; + + case 0x03cc: /* Miscellaneous Output / Graphics 1 Position ??? */ + retval = + ((BX_VGA_THIS s.misc_output.color_emulation & 0x01) << 0) | + ((BX_VGA_THIS s.misc_output.enable_ram & 0x01) << 1) | + ((BX_VGA_THIS s.misc_output.clock_select & 0x03) << 2) | + ((BX_VGA_THIS s.misc_output.select_high_bank & 0x01) << 5) | + ((BX_VGA_THIS s.misc_output.horiz_sync_pol & 0x01) << 6) | + ((BX_VGA_THIS s.misc_output.vert_sync_pol & 0x01) << 7); + RETURN(retval); + break; + + case 0x03ce: /* Graphics Controller Index Register */ + RETURN(BX_VGA_THIS s.graphics_ctrl.index); + break; + + case 0x03cd: /* ??? */ + BX_DEBUG(("io read from 03cd")); + RETURN(0x00); + break; + + case 0x03cf: /* Graphics Controller Registers 00..08 */ + switch (BX_VGA_THIS s.graphics_ctrl.index) { + case 0: /* Set/Reset */ + RETURN(BX_VGA_THIS s.graphics_ctrl.set_reset); + break; + case 1: /* Enable Set/Reset */ + RETURN(BX_VGA_THIS s.graphics_ctrl.enable_set_reset); + break; + case 2: /* Color Compare */ + RETURN(BX_VGA_THIS s.graphics_ctrl.color_compare); + break; + case 3: /* Data Rotate */ + retval = + ((BX_VGA_THIS s.graphics_ctrl.raster_op & 0x03) << 3) | + ((BX_VGA_THIS s.graphics_ctrl.data_rotate & 0x07) << 0); + RETURN(retval); + break; + case 4: /* Read Map Select */ + RETURN(BX_VGA_THIS s.graphics_ctrl.read_map_select); + break; + case 5: /* Mode */ + retval = + ((BX_VGA_THIS s.graphics_ctrl.shift_reg & 0x03) << 5) | + ((BX_VGA_THIS s.graphics_ctrl.odd_even & 0x01) << 4) | + ((BX_VGA_THIS s.graphics_ctrl.read_mode & 0x01) << 3) | + ((BX_VGA_THIS s.graphics_ctrl.write_mode & 0x03) << 0); + + if (BX_VGA_THIS s.graphics_ctrl.odd_even || + BX_VGA_THIS s.graphics_ctrl.shift_reg) + BX_DEBUG(("io read 0x3cf: reg 05 = 0x%02x", (unsigned) retval)); + RETURN(retval); + break; + case 6: /* Miscellaneous */ + retval = + ((BX_VGA_THIS s.graphics_ctrl.memory_mapping & 0x03) << 2) | + ((BX_VGA_THIS s.graphics_ctrl.odd_even & 0x01) << 1) | + ((BX_VGA_THIS s.graphics_ctrl.graphics_alpha & 0x01) << 0); + RETURN(retval); + break; + case 7: /* Color Don't Care */ + RETURN(BX_VGA_THIS s.graphics_ctrl.color_dont_care); + break; + case 8: /* Bit Mask */ + RETURN(BX_VGA_THIS s.graphics_ctrl.bitmask); + break; + default: + /* ??? */ + BX_DEBUG(("io read: 0x3cf: index %u unhandled", + (unsigned) BX_VGA_THIS s.graphics_ctrl.index)); + RETURN(0); + } + break; + + case 0x03d4: /* CRTC Index Register (color emulation modes) */ + RETURN(BX_VGA_THIS s.CRTC.address); + break; + + case 0x03b5: /* CRTC Registers (monochrome emulation modes) */ + case 0x03d5: /* CRTC Registers (color emulation modes) */ + if (BX_VGA_THIS s.CRTC.address > 0x18) { + BX_DEBUG(("io read: invalid CRTC register 0x%02x", + (unsigned) BX_VGA_THIS s.CRTC.address)); + RETURN(0); + } + RETURN(BX_VGA_THIS s.CRTC.reg[BX_VGA_THIS s.CRTC.address]); + break; + + case 0x03b4: /* CRTC Index Register (monochrome emulation modes) */ + case 0x03cb: /* not sure but OpenBSD reads it a lot */ + default: + BX_INFO(("io read from vga port 0x%04x", (unsigned) address)); + RETURN(0); /* keep compiler happy */ + } + +#if defined(VGA_TRACE_FEATURE) +read_return: + if (io_len == 1) { + BX_DEBUG(("8-bit read from 0x%04x = 0x%02x", (unsigned) address, ret)); + } else { + BX_DEBUG(("16-bit read from 0x%04x = 0x%04x", (unsigned) address, ret)); + } + return ret; +#endif +} +#if defined(VGA_TRACE_FEATURE) +#undef RETURN +#endif + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_vga_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if BX_USE_VGA_SMF == 0 + bx_vga_c *class_ptr = (bx_vga_c *) this_ptr; + class_ptr->write(address, value, io_len, 0); +#else + UNUSED(this_ptr); + theVga->write(address, value, io_len, 0); +#endif +} + +#if BX_USE_VGA_SMF +void bx_vga_c::write_handler_no_log(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ + UNUSED(this_ptr); + theVga->write(address, value, io_len, 1); +} +#endif + +void bx_vga_c::write(Bit32u address, Bit32u value, unsigned io_len, bx_bool no_log) +{ + Bit8u charmap1, charmap2, prev_memory_mapping; + bx_bool prev_video_enabled, prev_line_graphics, prev_int_pal_size; + bx_bool prev_graphics_alpha, prev_chain_odd_even; + bx_bool needs_update = 0, charmap_update = 0; + +#if defined(VGA_TRACE_FEATURE) + if (!no_log) + switch (io_len) { + case 1: + BX_DEBUG(("8-bit write to %04x = %02x", (unsigned)address, (unsigned)value)); + break; + case 2: + BX_DEBUG(("16-bit write to %04x = %04x", (unsigned)address, (unsigned)value)); + break; + default: + BX_PANIC(("Weird VGA write size")); + } +#else + if (io_len == 1) { + BX_DEBUG(("io write to 0x%04x = 0x%02x", (unsigned) address, + (unsigned) value)); + } +#endif + + if (io_len == 2) { +#if BX_USE_VGA_SMF + bx_vga_c::write_handler_no_log(0, address, value & 0xff, 1); + bx_vga_c::write_handler_no_log(0, address+1, (value >> 8) & 0xff, 1); +#else + bx_vga_c::write(address, value & 0xff, 1, 1); + bx_vga_c::write(address+1, (value >> 8) & 0xff, 1, 1); +#endif + return; + } + +#ifdef __OS2__ + if (bx_options.videomode == BX_VIDEO_DIRECT) + { + _outp(address, value); + return; + } +#endif + + if ((address >= 0x03b0) && (address <= 0x03bf) && + (BX_VGA_THIS s.misc_output.color_emulation)) + return; + if ((address >= 0x03d0) && (address <= 0x03df) && + (BX_VGA_THIS s.misc_output.color_emulation==0)) + return; + + switch (address) { + case 0x03ba: /* Feature Control (monochrome emulation modes) */ +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("io write 3ba: feature control: ignoring")); +#endif + break; + + case 0x03c0: /* Attribute Controller */ + if (BX_VGA_THIS s.attribute_ctrl.flip_flop == 0) { /* address mode */ + prev_video_enabled = BX_VGA_THIS s.attribute_ctrl.video_enabled; + BX_VGA_THIS s.attribute_ctrl.video_enabled = (value >> 5) & 0x01; +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("io write 3c0: video_enabled = %u", + (unsigned) BX_VGA_THIS s.attribute_ctrl.video_enabled)); +#endif + if (BX_VGA_THIS s.attribute_ctrl.video_enabled == 0) + bx_gui->clear_screen(); + else if (!prev_video_enabled) { +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("found enable transition")); +#endif + needs_update = 1; + } + value &= 0x1f; /* address = bits 0..4 */ + BX_VGA_THIS s.attribute_ctrl.address = value; + switch (value) { + case 0x00: case 0x01: case 0x02: case 0x03: + case 0x04: case 0x05: case 0x06: case 0x07: + case 0x08: case 0x09: case 0x0a: case 0x0b: + case 0x0c: case 0x0d: case 0x0e: case 0x0f: + break; + + default: + BX_DEBUG(("io write 0x3c0: address mode reg=0x%02x", + (unsigned) value)); + } + } + else { /* data-write mode */ + switch (BX_VGA_THIS s.attribute_ctrl.address) { + case 0x00: case 0x01: case 0x02: case 0x03: + case 0x04: case 0x05: case 0x06: case 0x07: + case 0x08: case 0x09: case 0x0a: case 0x0b: + case 0x0c: case 0x0d: case 0x0e: case 0x0f: + if (value != BX_VGA_THIS s.attribute_ctrl.palette_reg[BX_VGA_THIS s.attribute_ctrl.address]) { + BX_VGA_THIS s.attribute_ctrl.palette_reg[BX_VGA_THIS s.attribute_ctrl.address] = + value; + needs_update = 1; + } + break; + case 0x10: // mode control register + prev_line_graphics = BX_VGA_THIS s.attribute_ctrl.mode_ctrl.enable_line_graphics; + prev_int_pal_size = BX_VGA_THIS s.attribute_ctrl.mode_ctrl.internal_palette_size; + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.graphics_alpha = + (value >> 0) & 0x01; + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.display_type = + (value >> 1) & 0x01; + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.enable_line_graphics = + (value >> 2) & 0x01; + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.blink_intensity = + (value >> 3) & 0x01; + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.pixel_panning_compat = + (value >> 5) & 0x01; + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.pixel_clock_select = + (value >> 6) & 0x01; + BX_VGA_THIS s.attribute_ctrl.mode_ctrl.internal_palette_size = + (value >> 7) & 0x01; + if (((value >> 2) & 0x01) != prev_line_graphics) { + charmap_update = 1; + } + if (((value >> 7) & 0x01) != prev_int_pal_size) { + needs_update = 1; + } +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("io write 0x3c0: mode control: 0x%02x", + (unsigned) value)); +#endif + break; + case 0x11: // Overscan Color Register + BX_VGA_THIS s.attribute_ctrl.overscan_color = (value & 0x3f); +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("io write 0x3c0: overscan color = 0x%02x", + (unsigned) value)); +#endif + break; + case 0x12: // Color Plane Enable Register + BX_VGA_THIS s.attribute_ctrl.color_plane_enable = (value & 0x0f); + needs_update = 1; +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("io write 0x3c0: color plane enable = 0x%02x", + (unsigned) value)); +#endif + break; + case 0x13: // Horizontal Pixel Panning Register + BX_VGA_THIS s.attribute_ctrl.horiz_pel_panning = (value & 0x0f); + needs_update = 1; +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("io write 0x3c0: horiz pel panning = 0x%02x", + (unsigned) value)); +#endif + break; + case 0x14: // Color Select Register + BX_VGA_THIS s.attribute_ctrl.color_select = (value & 0x0f); + needs_update = 1; +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("io write 0x3c0: color select = 0x%02x", + (unsigned) BX_VGA_THIS s.attribute_ctrl.color_select)); +#endif + break; + default: + BX_DEBUG(("io write 0x3c0: data-write mode 0x%02x", + (unsigned) BX_VGA_THIS s.attribute_ctrl.address)); + } + } + BX_VGA_THIS s.attribute_ctrl.flip_flop = !BX_VGA_THIS s.attribute_ctrl.flip_flop; + break; + + case 0x03c2: // Miscellaneous Output Register + BX_VGA_THIS s.misc_output.color_emulation = (value >> 0) & 0x01; + BX_VGA_THIS s.misc_output.enable_ram = (value >> 1) & 0x01; + BX_VGA_THIS s.misc_output.clock_select = (value >> 2) & 0x03; + BX_VGA_THIS s.misc_output.select_high_bank = (value >> 5) & 0x01; + BX_VGA_THIS s.misc_output.horiz_sync_pol = (value >> 6) & 0x01; + BX_VGA_THIS s.misc_output.vert_sync_pol = (value >> 7) & 0x01; +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("io write 3c2:")); + BX_DEBUG((" color_emulation (attempted) = %u", + (value >> 0) & 0x01)); + BX_DEBUG((" enable_ram = %u", + (unsigned) BX_VGA_THIS s.misc_output.enable_ram)); + BX_DEBUG((" clock_select = %u", + (unsigned) BX_VGA_THIS s.misc_output.clock_select)); + BX_DEBUG((" select_high_bank = %u", + (unsigned) BX_VGA_THIS s.misc_output.select_high_bank)); + BX_DEBUG((" horiz_sync_pol = %u", + (unsigned) BX_VGA_THIS s.misc_output.horiz_sync_pol)); + BX_DEBUG((" vert_sync_pol = %u", + (unsigned) BX_VGA_THIS s.misc_output.vert_sync_pol)); +#endif + break; + + case 0x03c3: // VGA enable + // bit0: enables VGA display if set + BX_VGA_THIS s.vga_enabled = value & 0x01; +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("io write 0x03c3: VGA enable = %u", BX_VGA_THIS s.vga_enabled)); +#endif + break; + + case 0x03c4: /* Sequencer Index Register */ + if (value > 4) { + BX_DEBUG(("io write 3c4: value > 4")); + } + BX_VGA_THIS s.sequencer.index = value; + break; + + case 0x03c5: /* Sequencer Registers 00..04 */ + switch (BX_VGA_THIS s.sequencer.index) { + case 0: /* sequencer: reset */ +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("write 0x3c5: sequencer reset: value=0x%02x", + (unsigned) value)); +#endif + if (BX_VGA_THIS s.sequencer.reset1 && ((value & 0x01) == 0)) { + BX_VGA_THIS s.sequencer.char_map_select = 0; + BX_VGA_THIS s.charmap_address = 0; + charmap_update = 1; + } + BX_VGA_THIS s.sequencer.reset1 = (value >> 0) & 0x01; + BX_VGA_THIS s.sequencer.reset2 = (value >> 1) & 0x01; + break; + case 1: /* sequencer: clocking mode */ +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("io write 0x3c5=0x%02x: clocking mode reg: ignoring", + (unsigned) value)); +#endif + if ((value & 0x20) > 0) { + bx_gui->clear_screen(); + } else if ((BX_VGA_THIS s.sequencer.reg1 & 0x20) > 0) { + needs_update = 1; + } + BX_VGA_THIS s.sequencer.reg1 = value & 0x3d; + BX_VGA_THIS s.x_dotclockdiv2 = ((value & 0x08) > 0); + break; + case 2: /* sequencer: map mask register */ + BX_VGA_THIS s.sequencer.map_mask = (value & 0x0f); + break; + case 3: /* sequencer: character map select register */ + BX_VGA_THIS s.sequencer.char_map_select = value & 0x3f; + charmap1 = value & 0x13; + if (charmap1 > 3) charmap1 = (charmap1 & 3) + 4; + charmap2 = (value & 0x2C) >> 2; + if (charmap2 > 3) charmap2 = (charmap2 & 3) + 4; + if (BX_VGA_THIS s.CRTC.reg[0x09] > 0) { + BX_VGA_THIS s.charmap_address = charmap_offset[charmap1]; + charmap_update = 1; + } + if (charmap2 != charmap1) + BX_INFO(("char map select: map #2 in block #%d unused", charmap2)); + break; + case 4: /* sequencer: memory mode register */ + BX_VGA_THIS s.sequencer.extended_mem = (value >> 1) & 0x01; + BX_VGA_THIS s.sequencer.odd_even = (value >> 2) & 0x01; + BX_VGA_THIS s.sequencer.chain_four = (value >> 3) & 0x01; + +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("io write 0x3c5: memory mode:")); + BX_DEBUG((" extended_mem = %u", + (unsigned) BX_VGA_THIS s.sequencer.extended_mem)); + BX_DEBUG((" odd_even = %u", + (unsigned) BX_VGA_THIS s.sequencer.odd_even)); + BX_DEBUG((" chain_four = %u", + (unsigned) BX_VGA_THIS s.sequencer.chain_four)); +#endif + break; + default: + BX_DEBUG(("io write 0x3c5: index 0x%02x unhandled", + (unsigned) BX_VGA_THIS s.sequencer.index)); + } + break; + + case 0x03c6: /* PEL mask */ + BX_VGA_THIS s.pel.mask = value; + if (BX_VGA_THIS s.pel.mask != 0xff) + BX_DEBUG(("io write 0x3c6: PEL mask=0x%02x != 0xFF", value)); + // BX_VGA_THIS s.pel.mask should be and'd with final value before + // indexing into color register BX_VGA_THIS s.pel.data[] + break; + + case 0x03c7: // PEL address, read mode + BX_VGA_THIS s.pel.read_data_register = value; + BX_VGA_THIS s.pel.read_data_cycle = 0; + BX_VGA_THIS s.pel.dac_state = 0x03; + break; + + case 0x03c8: /* PEL address write mode */ + BX_VGA_THIS s.pel.write_data_register = value; + BX_VGA_THIS s.pel.write_data_cycle = 0; + BX_VGA_THIS s.pel.dac_state = 0x00; + break; + + case 0x03c9: /* PEL Data Register, colors 00..FF */ + switch (BX_VGA_THIS s.pel.write_data_cycle) { + case 0: + BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.write_data_register].red = value; + break; + case 1: + BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.write_data_register].green = value; + break; + case 2: + BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.write_data_register].blue = value; + +#if BX_SUPPORT_VBE + if (BX_VGA_THIS vbe.dac_8bit) { + needs_update |= bx_gui->palette_change(BX_VGA_THIS s.pel.write_data_register, + BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.write_data_register].red, + BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.write_data_register].green, + BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.write_data_register].blue); + } else { +#endif + needs_update |= bx_gui->palette_change(BX_VGA_THIS s.pel.write_data_register, + BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.write_data_register].red<<2, + BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.write_data_register].green<<2, + BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.write_data_register].blue<<2); +#if BX_SUPPORT_VBE + } +#endif + break; + } + + BX_VGA_THIS s.pel.write_data_cycle++; + if (BX_VGA_THIS s.pel.write_data_cycle >= 3) { + //BX_INFO(("BX_VGA_THIS s.pel.data[%u] {r=%u, g=%u, b=%u}", + // (unsigned) BX_VGA_THIS s.pel.write_data_register, + // (unsigned) BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.write_data_register].red, + // (unsigned) BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.write_data_register].green, + // (unsigned) BX_VGA_THIS s.pel.data[BX_VGA_THIS s.pel.write_data_register].blue); + BX_VGA_THIS s.pel.write_data_cycle = 0; + BX_VGA_THIS s.pel.write_data_register++; + } + break; + + case 0x03ca: /* Graphics 2 Position (EGA) */ + // ignore, EGA only??? + break; + + case 0x03cc: /* Graphics 1 Position (EGA) */ + // ignore, EGA only??? + break; + + case 0x03cd: /* ??? */ + BX_DEBUG(("io write to 0x3cd = 0x%02x", (unsigned) value)); + break; + + case 0x03ce: /* Graphics Controller Index Register */ + if (value > 0x08) /* ??? */ + BX_DEBUG(("io write: 0x3ce: value > 8")); + BX_VGA_THIS s.graphics_ctrl.index = value; + break; + + case 0x03cf: /* Graphics Controller Registers 00..08 */ + switch (BX_VGA_THIS s.graphics_ctrl.index) { + case 0: /* Set/Reset */ + BX_VGA_THIS s.graphics_ctrl.set_reset = value & 0x0f; + break; + case 1: /* Enable Set/Reset */ + BX_VGA_THIS s.graphics_ctrl.enable_set_reset = value & 0x0f; + break; + case 2: /* Color Compare */ + BX_VGA_THIS s.graphics_ctrl.color_compare = value & 0x0f; + break; + case 3: /* Data Rotate */ + BX_VGA_THIS s.graphics_ctrl.data_rotate = value & 0x07; + BX_VGA_THIS s.graphics_ctrl.raster_op = (value >> 3) & 0x03; + break; + case 4: /* Read Map Select */ + BX_VGA_THIS s.graphics_ctrl.read_map_select = value & 0x03; +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("io write to 0x3cf = 0x%02x (RMS)", (unsigned) value)); +#endif + break; + case 5: /* Mode */ + BX_VGA_THIS s.graphics_ctrl.write_mode = value & 0x03; + BX_VGA_THIS s.graphics_ctrl.read_mode = (value >> 3) & 0x01; + BX_VGA_THIS s.graphics_ctrl.odd_even = (value >> 4) & 0x01; + BX_VGA_THIS s.graphics_ctrl.shift_reg = (value >> 5) & 0x03; + + if (BX_VGA_THIS s.graphics_ctrl.odd_even) + BX_DEBUG(("io write: 0x3cf: mode reg: value = 0x%02x", + (unsigned) value)); + if (BX_VGA_THIS s.graphics_ctrl.shift_reg) + BX_DEBUG(("io write: 0x3cf: mode reg: value = 0x%02x", + (unsigned) value)); + break; + case 6: /* Miscellaneous */ + prev_graphics_alpha = BX_VGA_THIS s.graphics_ctrl.graphics_alpha; + prev_chain_odd_even = BX_VGA_THIS s.graphics_ctrl.chain_odd_even; + prev_memory_mapping = BX_VGA_THIS s.graphics_ctrl.memory_mapping; + + BX_VGA_THIS s.graphics_ctrl.graphics_alpha = value & 0x01; + BX_VGA_THIS s.graphics_ctrl.chain_odd_even = (value >> 1) & 0x01; + BX_VGA_THIS s.graphics_ctrl.memory_mapping = (value >> 2) & 0x03; +#if !defined(VGA_TRACE_FEATURE) + BX_DEBUG(("memory_mapping set to %u", + (unsigned) BX_VGA_THIS s.graphics_ctrl.memory_mapping)); + BX_DEBUG(("graphics mode set to %u", + (unsigned) BX_VGA_THIS s.graphics_ctrl.graphics_alpha)); + BX_DEBUG(("odd_even mode set to %u", + (unsigned) BX_VGA_THIS s.graphics_ctrl.odd_even)); + BX_DEBUG(("io write: 0x3cf: misc reg: value = 0x%02x", + (unsigned) value)); +#endif + if (prev_memory_mapping != BX_VGA_THIS s.graphics_ctrl.memory_mapping) + needs_update = 1; + if (prev_graphics_alpha != BX_VGA_THIS s.graphics_ctrl.graphics_alpha) { + needs_update = 1; + old_iHeight = 0; + } + break; + case 7: /* Color Don't Care */ + BX_VGA_THIS s.graphics_ctrl.color_dont_care = value & 0x0f; + break; + case 8: /* Bit Mask */ + BX_VGA_THIS s.graphics_ctrl.bitmask = value; + break; + default: + /* ??? */ + BX_DEBUG(("io write: 0x3cf: index %u unhandled", + (unsigned) BX_VGA_THIS s.graphics_ctrl.index)); + } + break; + + case 0x03b4: /* CRTC Index Register (monochrome emulation modes) */ + case 0x03d4: /* CRTC Index Register (color emulation modes) */ + BX_VGA_THIS s.CRTC.address = value & 0x7f; + if (BX_VGA_THIS s.CRTC.address > 0x18) + BX_DEBUG(("write: invalid CRTC register 0x%02x selected", + (unsigned) BX_VGA_THIS s.CRTC.address)); + break; + + case 0x03b5: /* CRTC Registers (monochrome emulation modes) */ + case 0x03d5: /* CRTC Registers (color emulation modes) */ + if (BX_VGA_THIS s.CRTC.address > 0x18) { + BX_DEBUG(("write: invalid CRTC register 0x%02x ignored", + (unsigned) BX_VGA_THIS s.CRTC.address)); + return; + } + if (BX_VGA_THIS s.CRTC.write_protect && (BX_VGA_THIS s.CRTC.address < 0x08)) { + if (BX_VGA_THIS s.CRTC.address == 0x07) { + BX_VGA_THIS s.CRTC.reg[BX_VGA_THIS s.CRTC.address] &= ~0x10; + BX_VGA_THIS s.CRTC.reg[BX_VGA_THIS s.CRTC.address] |= (value & 0x10); + BX_VGA_THIS s.line_compare &= 0x2ff; + if (BX_VGA_THIS s.CRTC.reg[0x07] & 0x10) BX_VGA_THIS s.line_compare |= 0x100; + needs_update = 1; + break; + } else { + return; + } + } + if (value != BX_VGA_THIS s.CRTC.reg[BX_VGA_THIS s.CRTC.address]) { + BX_VGA_THIS s.CRTC.reg[BX_VGA_THIS s.CRTC.address] = value; + switch (BX_VGA_THIS s.CRTC.address) { + case 0x07: + BX_VGA_THIS s.vertical_display_end &= 0xff; + if (BX_VGA_THIS s.CRTC.reg[0x07] & 0x02) BX_VGA_THIS s.vertical_display_end |= 0x100; + if (BX_VGA_THIS s.CRTC.reg[0x07] & 0x40) BX_VGA_THIS s.vertical_display_end |= 0x200; + BX_VGA_THIS s.line_compare &= 0x2ff; + if (BX_VGA_THIS s.CRTC.reg[0x07] & 0x10) BX_VGA_THIS s.line_compare |= 0x100; + needs_update = 1; + break; + case 0x08: + // Vertical pel panning change + needs_update = 1; + break; + case 0x09: + BX_VGA_THIS s.y_doublescan = ((value & 0x9f) > 0); + BX_VGA_THIS s.line_compare &= 0x1ff; + if (BX_VGA_THIS s.CRTC.reg[0x09] & 0x40) BX_VGA_THIS s.line_compare |= 0x200; + charmap_update = 1; + needs_update = 1; + break; + case 0x0A: + case 0x0B: + case 0x0E: + case 0x0F: + // Cursor size / location change + BX_VGA_THIS s.vga_mem_updated = 1; + break; + case 0x0C: + case 0x0D: + // Start address change + if (BX_VGA_THIS s.graphics_ctrl.graphics_alpha) { + needs_update = 1; + } else { + BX_VGA_THIS s.vga_mem_updated = 1; + } + break; + case 0x11: + BX_VGA_THIS s.CRTC.write_protect = ((BX_VGA_THIS s.CRTC.reg[0x11] & 0x80) > 0); + break; + case 0x12: + BX_VGA_THIS s.vertical_display_end &= 0x300; + BX_VGA_THIS s.vertical_display_end |= BX_VGA_THIS s.CRTC.reg[0x12]; + break; + case 0x13: + case 0x14: + case 0x17: +#if BX_SUPPORT_VBE + if (!BX_VGA_THIS vbe.enabled || (BX_VGA_THIS vbe.bpp == VBE_DISPI_BPP_4)) +#endif + { + // Line offset change + BX_VGA_THIS s.line_offset = BX_VGA_THIS s.CRTC.reg[0x13] << 1; + if (BX_VGA_THIS s.CRTC.reg[0x14] & 0x40) BX_VGA_THIS s.line_offset <<= 2; + else if ((BX_VGA_THIS s.CRTC.reg[0x17] & 0x40) == 0) BX_VGA_THIS s.line_offset <<= 1; + needs_update = 1; + } + break; + case 0x18: + BX_VGA_THIS s.line_compare &= 0x300; + BX_VGA_THIS s.line_compare |= BX_VGA_THIS s.CRTC.reg[0x18]; + needs_update = 1; + break; + } + + } + break; + + case 0x03da: /* Feature Control (color emulation modes) */ + BX_DEBUG(("io write: 3da: ignoring: feature ctrl & vert sync")); + break; + + case 0x03c1: /* */ + default: + BX_ERROR(("unsupported io write to port 0x%04x, val=0x%02x", + (unsigned) address, (unsigned) value)); + } + + if (charmap_update) { + bx_gui->set_text_charmap( + & BX_VGA_THIS s.memory[0x20000 + BX_VGA_THIS s.charmap_address]); + BX_VGA_THIS s.vga_mem_updated = 1; + } + if (needs_update) { + // Mark all video as updated so the changes will go through + BX_VGA_THIS redraw_area(0, 0, old_iWidth, old_iHeight); + } +} + +Bit64s bx_vga_c::vga_param_handler(bx_param_c *param, int set, Bit64s val) +{ + // handler for runtime parameter 'vga_update_interval' + if (set) { + BX_INFO (("Changing timer interval to %d", (Bit32u)val)); + BX_VGA_THIS timer_handler (theVga); + bx_pc_system.activate_timer (BX_VGA_THIS timer_id, (Bit32u)val, 1); + } + return val; +} + +void bx_vga_c::trigger_timer(void *this_ptr) +{ + timer_handler(this_ptr); +} + +void bx_vga_c::timer_handler(void *this_ptr) +{ +#if BX_USE_VGA_SMF == 0 + bx_vga_c *class_ptr = (bx_vga_c *) this_ptr; + class_ptr->timer(); +} + +void bx_vga_c::timer(void) +{ +#else + UNUSED(this_ptr); +#endif + + update(); + bx_gui->flush(); +} + +void bx_vga_c::update(void) +{ + unsigned iHeight, iWidth; + + /* no screen update necessary */ + if ((BX_VGA_THIS s.vga_mem_updated==0) && BX_VGA_THIS s.graphics_ctrl.graphics_alpha) + return; + + /* skip screen update when vga/video is disabled or the sequencer is in reset mode */ + if (!BX_VGA_THIS s.vga_enabled || !BX_VGA_THIS s.attribute_ctrl.video_enabled + || !BX_VGA_THIS s.sequencer.reset2 || !BX_VGA_THIS s.sequencer.reset1 + || (BX_VGA_THIS s.sequencer.reg1 & 0x20)) + return; + + /* skip screen update if the vertical retrace is in progress + (using 72 Hz vertical frequency) */ + if ((bx_pc_system.time_usec() % 13888) < 70) + return; + +#if BX_SUPPORT_VBE + if ((BX_VGA_THIS vbe.enabled) && (BX_VGA_THIS vbe.bpp != VBE_DISPI_BPP_4)) + { + // specific VBE code display update code + unsigned pitch; + unsigned xc, yc, xti, yti; + unsigned r, c, w, h; + int i; + unsigned long red, green, blue, colour; + Bit8u * vid_ptr, * vid_ptr2; + Bit8u * tile_ptr, * tile_ptr2; + bx_svga_tileinfo_t info; + Bit8u dac_size = BX_VGA_THIS vbe.dac_8bit ? 8 : 6; + + iWidth=BX_VGA_THIS vbe.xres; + iHeight=BX_VGA_THIS vbe.yres; + pitch = BX_VGA_THIS s.line_offset; + Bit8u *disp_ptr = &BX_VGA_THIS s.memory[BX_VGA_THIS vbe.virtual_start]; + + if (bx_gui->graphics_tile_info(&info)) { + if (info.is_indexed) { + switch (BX_VGA_THIS vbe.bpp) { + case 4: + case 15: + case 16: + case 24: + case 32: + BX_ERROR(("current guest pixel format is unsupported on indexed colour host displays")); + break; + case 8: + for (yc=0, yti = 0; ycgraphics_tile_get(xc, yc, &w, &h); + for (r=0; r> i); + } + } + else { + for (i=info.bpp-8; i>-8; i-=8) { + *(tile_ptr2++) = (Bit8u)(colour >> i); + } + } + } + vid_ptr += pitch; + tile_ptr += info.pitch; + } + bx_gui->graphics_tile_update_in_place(xc, yc, w, h); + SET_TILE_UPDATED (xti, yti, 0); + } + } + } + break; + } + } + else { + switch (BX_VGA_THIS vbe.bpp) { + case 4: + BX_ERROR(("cannot draw 4bpp SVGA")); + break; + case 8: + for (yc=0, yti = 0; ycgraphics_tile_get(xc, yc, &w, &h); + for (r=0; r> i); + } + } + else { + for (i=info.bpp-8; i>-8; i-=8) { + *(tile_ptr2++) = (Bit8u)(colour >> i); + } + } + } + vid_ptr += pitch; + tile_ptr += info.pitch; + } + bx_gui->graphics_tile_update_in_place(xc, yc, w, h); + SET_TILE_UPDATED (xti, yti, 0); + } + } + } + break; + case 15: + for (yc=0, yti = 0; ycgraphics_tile_get(xc, yc, &w, &h); + for (r=0; r> i); + } + } + else { + for (i=info.bpp-8; i>-8; i-=8) { + *(tile_ptr2++) = (Bit8u)(colour >> i); + } + } + } + vid_ptr += pitch; + tile_ptr += info.pitch; + } + bx_gui->graphics_tile_update_in_place(xc, yc, w, h); + SET_TILE_UPDATED (xti, yti, 0); + } + } + } + break; + case 16: + for (yc=0, yti = 0; ycgraphics_tile_get(xc, yc, &w, &h); + for (r=0; r> i); + } + } + else { + for (i=info.bpp-8; i>-8; i-=8) { + *(tile_ptr2++) = (Bit8u)(colour >> i); + } + } + } + vid_ptr += pitch; + tile_ptr += info.pitch; + } + bx_gui->graphics_tile_update_in_place(xc, yc, w, h); + SET_TILE_UPDATED (xti, yti, 0); + } + } + } + break; + case 24: + for (yc=0, yti = 0; ycgraphics_tile_get(xc, yc, &w, &h); + for (r=0; r> i); + } + } + else { + for (i=info.bpp-8; i>-8; i-=8) { + *(tile_ptr2++) = (Bit8u)(colour >> i); + } + } + } + vid_ptr += pitch; + tile_ptr += info.pitch; + } + bx_gui->graphics_tile_update_in_place(xc, yc, w, h); + SET_TILE_UPDATED (xti, yti, 0); + } + } + } + break; + case 32: + for (yc=0, yti = 0; ycgraphics_tile_get(xc, yc, &w, &h); + for (r=0; r> i); + } + } + else { + for (i=info.bpp-8; i>-8; i-=8) { + *(tile_ptr2++) = (Bit8u)(colour >> i); + } + } + } + vid_ptr += pitch; + tile_ptr += info.pitch; + } + bx_gui->graphics_tile_update_in_place(xc, yc, w, h); + SET_TILE_UPDATED (xti, yti, 0); + } + } + } + break; + } + } + old_iWidth = iWidth; + old_iHeight = iHeight; + BX_VGA_THIS s.vga_mem_updated = 0; + } + else { + BX_PANIC(("cannot get svga tile info")); + } + + // after a vbe display update, don't try to do any 'normal vga' updates anymore + return; + } +#endif + // fields that effect the way video memory is serialized into screen output: + // GRAPHICS CONTROLLER: + // BX_VGA_THIS s.graphics_ctrl.shift_reg: + // 0: output data in standard VGA format or CGA-compatible 640x200 2 color + // graphics mode (mode 6) + // 1: output data in CGA-compatible 320x200 4 color graphics mode + // (modes 4 & 5) + // 2: output data 8 bits at a time from the 4 bit planes + // (mode 13 and variants like modeX) + + // if (BX_VGA_THIS s.vga_mem_updated==0 || BX_VGA_THIS s.attribute_ctrl.video_enabled == 0) + + if (BX_VGA_THIS s.graphics_ctrl.graphics_alpha) { + Bit8u color; + unsigned bit_no, r, c, x, y; + unsigned long byte_offset, start_addr; + unsigned xc, yc, xti, yti; + + start_addr = (BX_VGA_THIS s.CRTC.reg[0x0c] << 8) | BX_VGA_THIS s.CRTC.reg[0x0d]; + +//BX_DEBUG(("update: shiftreg=%u, chain4=%u, mapping=%u", +// (unsigned) BX_VGA_THIS s.graphics_ctrl.shift_reg, +// (unsigned) BX_VGA_THIS s.sequencer.chain_four, +// (unsigned) BX_VGA_THIS s.graphics_ctrl.memory_mapping); + + determine_screen_dimensions(&iHeight, &iWidth); + if((iWidth != old_iWidth) || (iHeight != old_iHeight) || + (BX_VGA_THIS s.last_bpp > 8)) + { + bx_gui->dimension_update(iWidth, iHeight); + old_iWidth = iWidth; + old_iHeight = iHeight; + BX_VGA_THIS s.last_bpp = 8; + } + + switch (BX_VGA_THIS s.graphics_ctrl.shift_reg) { + case 0: + Bit8u attribute, palette_reg_val, DAC_regno; + unsigned long line_compare; + Bit8u *plane0, *plane1, *plane2, *plane3; + + if (BX_VGA_THIS s.graphics_ctrl.memory_mapping == 3) { // CGA 640x200x2 + + for (yc=0, yti=0; yc>= 1; + for (c=0; c> bit_no) & 1); + DAC_regno = BX_VGA_THIS s.attribute_ctrl.palette_reg[palette_reg_val]; + BX_VGA_THIS s.tile[r*X_TILESIZE + c] = DAC_regno; + } + } + SET_TILE_UPDATED (xti, yti, 0); + bx_gui->graphics_tile_update(BX_VGA_THIS s.tile, xc, yc); + } + } + } + } else { // output data in serial fashion with each display plane + // output on its associated serial output. Standard EGA/VGA format + +#if BX_SUPPORT_VBE + if (BX_VGA_THIS vbe.enabled) + { + plane0 = &BX_VGA_THIS s.memory[0<>= 1; + } + + for (yc=0, yti=0; yc>= 1; + for (c=0; c>= 1; + bit_no = 7 - (x % 8); + if (y > line_compare) { + byte_offset = x / 8 + + ((y - line_compare - 1) * BX_VGA_THIS s.line_offset); + } else { + byte_offset = start_addr + x / 8 + + (y * BX_VGA_THIS s.line_offset); + } + attribute = + (((plane0[byte_offset] >> bit_no) & 0x01) << 0) | + (((plane1[byte_offset] >> bit_no) & 0x01) << 1) | + (((plane2[byte_offset] >> bit_no) & 0x01) << 2) | + (((plane3[byte_offset] >> bit_no) & 0x01) << 3); + + attribute &= BX_VGA_THIS s.attribute_ctrl.color_plane_enable; + // undocumented feature ???: colors 0..7 high intensity, colors 8..15 blinking + // using low/high intensity. Blinking is not implemented yet. + if (BX_VGA_THIS s.attribute_ctrl.mode_ctrl.blink_intensity) attribute ^= 0x08; + palette_reg_val = BX_VGA_THIS s.attribute_ctrl.palette_reg[attribute]; + if (BX_VGA_THIS s.attribute_ctrl.mode_ctrl.internal_palette_size) { + // use 4 lower bits from palette register + // use 4 higher bits from color select register + // 16 banks of 16-color registers + DAC_regno = (palette_reg_val & 0x0f) | + (BX_VGA_THIS s.attribute_ctrl.color_select << 4); + } + else { + // use 6 lower bits from palette register + // use 2 higher bits from color select register + // 4 banks of 64-color registers + DAC_regno = (palette_reg_val & 0x3f) | + ((BX_VGA_THIS s.attribute_ctrl.color_select & 0x0c) << 4); + } + // DAC_regno &= video DAC mask register ??? + + BX_VGA_THIS s.tile[r*X_TILESIZE + c] = DAC_regno; + } + } + SET_TILE_UPDATED (xti, yti, 0); + bx_gui->graphics_tile_update(BX_VGA_THIS s.tile, xc, yc); + } + } + } + } + break; // case 0 + + case 1: // output the data in a CGA-compatible 320x200 4 color graphics + // mode. (modes 4 & 5) + + /* CGA 320x200x4 start */ + + for (yc=0, yti=0; yc>= 1; + for (c=0; c>= 1; + /* 0 or 0x2000 */ + byte_offset = start_addr + ((y & 1) << 13); + /* to the start of the line */ + byte_offset += (320 / 4) * (y / 2); + /* to the byte start */ + byte_offset += (x / 4); + + attribute = 6 - 2*(x % 4); + palette_reg_val = (BX_VGA_THIS s.memory[byte_offset]) >> attribute; + palette_reg_val &= 3; + DAC_regno = BX_VGA_THIS s.attribute_ctrl.palette_reg[palette_reg_val]; + BX_VGA_THIS s.tile[r*X_TILESIZE + c] = DAC_regno; + } + } + SET_TILE_UPDATED (xti, yti, 0); + bx_gui->graphics_tile_update(BX_VGA_THIS s.tile, xc, yc); + } + } + } + /* CGA 320x200x4 end */ + + break; // case 1 + + case 2: // output the data eight bits at a time from the 4 bit plane + // (format for VGA mode 13 hex) + case 3: // FIXME: is this really the same ??? + + if (BX_VGA_THIS s.sequencer.chain_four) { + unsigned long pixely, pixelx, plane; + + if (BX_VGA_THIS s.misc_output.select_high_bank != 1) + BX_PANIC(("update: select_high_bank != 1")); + + for (yc=0, yti=0; yc>= 1; + for (c=0; c> 1; + plane = (pixelx % 4); + byte_offset = start_addr + (plane * 65536) + + (pixely * BX_VGA_THIS s.line_offset) + (pixelx & ~0x03); + color = BX_VGA_THIS s.memory[byte_offset]; + BX_VGA_THIS s.tile[r*X_TILESIZE + c] = color; + } + } + SET_TILE_UPDATED (xti, yti, 0); + bx_gui->graphics_tile_update(BX_VGA_THIS s.tile, xc, yc); + } + } + } + } + + else { // chain_four == 0, modeX + unsigned long pixely, pixelx, plane; + + for (yc=0, yti=0; yc>= 1; + for (c=0; c> 1; + plane = (pixelx % 4); + byte_offset = (plane * 65536) + + (pixely * BX_VGA_THIS s.line_offset) + + (pixelx >> 2); + color = BX_VGA_THIS s.memory[start_addr + byte_offset]; + BX_VGA_THIS s.tile[r*X_TILESIZE + c] = color; + } + } + SET_TILE_UPDATED (xti, yti, 0); + bx_gui->graphics_tile_update(BX_VGA_THIS s.tile, xc, yc); + } + } + } + } + break; // case 2 + + default: + BX_PANIC(("update: shift_reg == %u", (unsigned) + BX_VGA_THIS s.graphics_ctrl.shift_reg)); + } + + BX_VGA_THIS s.vga_mem_updated = 0; + return; + } + + else { // text mode + unsigned long start_address; + unsigned long cursor_address, cursor_x, cursor_y; + bx_vga_tminfo_t tm_info; + unsigned VDE, MSL, cols, rows, cWidth; + static unsigned cs_counter = 1; + static bx_bool cs_visible = 0; + bx_bool cs_toggle = 0; + + cs_counter--; + if ((BX_VGA_THIS s.vga_mem_updated==0) && (cs_counter > 0)) + return; + + tm_info.start_address = 2*((BX_VGA_THIS s.CRTC.reg[12] << 8) + + BX_VGA_THIS s.CRTC.reg[13]); + tm_info.cs_start = BX_VGA_THIS s.CRTC.reg[0x0a] & 0x3f; + if (cs_counter == 0) { + cs_toggle = 1; + cs_visible = !cs_visible; + cs_counter = BX_VGA_THIS s.blink_counter; + } + if (!cs_visible) { + tm_info.cs_start |= 0x20; + } + tm_info.cs_end = BX_VGA_THIS s.CRTC.reg[0x0b] & 0x1f; + tm_info.line_offset = BX_VGA_THIS s.CRTC.reg[0x13] << 2; + tm_info.line_compare = BX_VGA_THIS s.line_compare; + tm_info.h_panning = BX_VGA_THIS s.attribute_ctrl.horiz_pel_panning & 0x0f; + tm_info.v_panning = BX_VGA_THIS s.CRTC.reg[0x08] & 0x1f; + tm_info.line_graphics = BX_VGA_THIS s.attribute_ctrl.mode_ctrl.enable_line_graphics; + tm_info.split_hpanning = BX_VGA_THIS s.attribute_ctrl.mode_ctrl.pixel_panning_compat; + tm_info.blink_flags = 0; + if (BX_VGA_THIS s.attribute_ctrl.mode_ctrl.blink_intensity) { + tm_info.blink_flags |= BX_TEXT_BLINK_MODE; + if (cs_toggle) + tm_info.blink_flags |= BX_TEXT_BLINK_TOGGLE; + if (cs_visible) + tm_info.blink_flags |= BX_TEXT_BLINK_STATE; + } + if ((BX_VGA_THIS s.sequencer.reg1 & 0x01) == 0) { + if (tm_info.h_panning >= 8) + tm_info.h_panning = 0; + else + tm_info.h_panning++; + } else { + tm_info.h_panning &= 0x07; + } + + // Verticle Display End: find out how many lines are displayed + VDE = BX_VGA_THIS s.vertical_display_end; + // Maximum Scan Line: height of character cell + MSL = BX_VGA_THIS s.CRTC.reg[0x09] & 0x1f; + cols = BX_VGA_THIS s.CRTC.reg[1] + 1; + // workaround for update() calls before VGABIOS init + if (cols == 1) { + cols = 80; + MSL = 15; + } + if ((MSL == 1) && (VDE == 399)) { + // emulated CGA graphics mode 160x100x16 colors + MSL = 3; + } + rows = (VDE+1)/(MSL+1); + if ((rows * tm_info.line_offset) > (1 << 17)) { + BX_ERROR(("update(): text mode: out of memory")); + return; + } + cWidth = ((BX_VGA_THIS s.sequencer.reg1 & 0x01) == 1) ? 8 : 9; + iWidth = cWidth * cols; + iHeight = VDE+1; + if ((iWidth != old_iWidth) || (iHeight != old_iHeight) || (MSL != old_MSL) || + (BX_VGA_THIS s.last_bpp > 8)) + { + bx_gui->dimension_update(iWidth, iHeight, MSL+1, cWidth); + old_iWidth = iWidth; + old_iHeight = iHeight; + old_MSL = MSL; + BX_VGA_THIS s.last_bpp = 8; + } + // pass old text snapshot & new VGA memory contents + start_address = tm_info.start_address; + cursor_address = 2*((BX_VGA_THIS s.CRTC.reg[0x0e] << 8) + + BX_VGA_THIS s.CRTC.reg[0x0f]); + if (cursor_address < start_address) { + cursor_x = 0xffff; + cursor_y = 0xffff; + } else { + cursor_x = ((cursor_address - start_address)/2) % (iWidth/cWidth); + cursor_y = ((cursor_address - start_address)/2) / (iWidth/cWidth); + } + bx_gui->text_update(BX_VGA_THIS s.text_snapshot, + &BX_VGA_THIS s.memory[start_address], + cursor_x, cursor_y, tm_info); + if (BX_VGA_THIS s.vga_mem_updated) { + // screen updated, copy new VGA memory contents into text snapshot + memcpy(BX_VGA_THIS s.text_snapshot, + &BX_VGA_THIS s.memory[start_address], + tm_info.line_offset*rows); + BX_VGA_THIS s.vga_mem_updated = 0; + } + } +} + +bx_bool bx_vga_c::mem_read_handler(bx_phy_address addr, unsigned len, void *data, void *param) +{ + Bit8u *data_ptr; +#ifdef BX_LITTLE_ENDIAN + data_ptr = (Bit8u *) data; +#else // BX_BIG_ENDIAN + data_ptr = (Bit8u *) data + (len - 1); +#endif + for (unsigned i = 0; i < len; i++) { + *data_ptr = theVga->mem_read(addr); + addr++; +#ifdef BX_LITTLE_ENDIAN + data_ptr++; +#else // BX_BIG_ENDIAN + data_ptr--; +#endif + } + return 1; +} + +Bit8u bx_vga_c::mem_read(bx_phy_address addr) +{ + Bit32u offset; + Bit8u *plane0, *plane1, *plane2, *plane3; + +#if BX_SUPPORT_VBE + // if in a vbe enabled mode, read from the vbe_memory + if ((BX_VGA_THIS vbe.enabled) && (BX_VGA_THIS vbe.bpp != VBE_DISPI_BPP_4)) + { + return vbe_mem_read(addr); + } + else if ((BX_VGA_THIS vbe.base_address != 0) && (addr >= BX_VGA_THIS vbe.base_address)) + { + return 0xff; + } +#endif + +#if defined(VGA_TRACE_FEATURE) +// BX_DEBUG(("8-bit memory read from 0x%08x", addr)); +#endif + +#ifdef __OS2__ + +#if BX_PLUGINS +#error Fix the code for plugins +#endif + + if (bx_options.videomode == BX_VIDEO_DIRECT) + { + char value; + value = devices->mem->video[addr-0xA0000]; + return value; + } +#endif + + switch (BX_VGA_THIS s.graphics_ctrl.memory_mapping) { + case 1: // 0xA0000 .. 0xAFFFF + if (addr > 0xAFFFF) return 0xff; + offset = addr & 0xFFFF; + break; + case 2: // 0xB0000 .. 0xB7FFF + if ((addr < 0xB0000) || (addr > 0xB7FFF)) return 0xff; + offset = addr & 0x7FFF; + break; + case 3: // 0xB8000 .. 0xBFFFF + if (addr < 0xB8000) return 0xff; + offset = addr & 0x7FFF; + break; + default: // 0xA0000 .. 0xBFFFF + offset = addr & 0x1FFFF; + } + + if (BX_VGA_THIS s.sequencer.chain_four) { + // Mode 13h: 320 x 200 256 color mode: chained pixel representation + return BX_VGA_THIS s.memory[(offset & ~0x03) + (offset % 4)*65536]; + } + +#if BX_SUPPORT_VBE + if (BX_VGA_THIS vbe.enabled) + { + plane0 = &BX_VGA_THIS s.memory[(0<mem_write(addr, *data_ptr); + addr++; +#ifdef BX_LITTLE_ENDIAN + data_ptr++; +#else // BX_BIG_ENDIAN + data_ptr--; +#endif + } + return 1; +} + +void bx_vga_c::mem_write(bx_phy_address addr, Bit8u value) +{ + Bit32u offset; + Bit8u new_val[4] = {0,0,0,0}; + unsigned start_addr; + Bit8u *plane0, *plane1, *plane2, *plane3; + +#if BX_SUPPORT_VBE + // if in a vbe enabled mode, write to the vbe_memory + if ((BX_VGA_THIS vbe.enabled) && (BX_VGA_THIS vbe.bpp != VBE_DISPI_BPP_4)) + { + vbe_mem_write(addr, value); + return; + } + else if ((BX_VGA_THIS vbe.base_address != 0) && (addr >= BX_VGA_THIS vbe.base_address)) + { + return; + } +#endif + +#if defined(VGA_TRACE_FEATURE) +//BX_DEBUG(("8-bit memory write to %08x = %02x", addr, value)); +#endif + +#ifdef __OS2__ + +#if BX_PLUGINS +#error Fix the code for plugins +#endif + + if (bx_options.videomode == BX_VIDEO_DIRECT) + { + devices->mem->video[addr-0xA0000] = value; + return; + } +#endif + + switch (BX_VGA_THIS s.graphics_ctrl.memory_mapping) { + case 1: // 0xA0000 .. 0xAFFFF + if ((addr < 0xA0000) || (addr > 0xAFFFF)) return; + offset = (Bit32u)addr - 0xA0000; + break; + case 2: // 0xB0000 .. 0xB7FFF + if ((addr < 0xB0000) || (addr > 0xB7FFF)) return; + offset = (Bit32u)addr - 0xB0000; + break; + case 3: // 0xB8000 .. 0xBFFFF + if ((addr < 0xB8000) || (addr > 0xBFFFF)) return; + offset = (Bit32u)addr - 0xB8000; + break; + default: // 0xA0000 .. 0xBFFFF + if ((addr < 0xA0000) || (addr > 0xBFFFF)) return; + offset = (Bit32u)addr - 0xA0000; + } + + start_addr = (BX_VGA_THIS s.CRTC.reg[0x0c] << 8) | BX_VGA_THIS s.CRTC.reg[0x0d]; + + if (BX_VGA_THIS s.graphics_ctrl.graphics_alpha) { + if (BX_VGA_THIS s.graphics_ctrl.memory_mapping == 3) { // 0xB8000 .. 0xBFFFF + unsigned x_tileno, x_tileno2, y_tileno; + + /* CGA 320x200x4 / 640x200x2 start */ + BX_VGA_THIS s.memory[offset] = value; + offset -= start_addr; + if (offset>=0x2000) { + y_tileno = offset - 0x2000; + y_tileno /= (320/4); + y_tileno <<= 1; //2 * y_tileno; + y_tileno++; + x_tileno = (offset - 0x2000) % (320/4); + x_tileno <<= 2; //*= 4; + } else { + y_tileno = offset / (320/4); + y_tileno <<= 1; //2 * y_tileno; + x_tileno = offset % (320/4); + x_tileno <<= 2; //*=4; + } + x_tileno2=x_tileno; + if (BX_VGA_THIS s.graphics_ctrl.shift_reg==0) { + x_tileno*=2; + x_tileno2+=7; + } else { + x_tileno2+=3; + } + if (BX_VGA_THIS s.x_dotclockdiv2) { + x_tileno/=(X_TILESIZE/2); + x_tileno2/=(X_TILESIZE/2); + } else { + x_tileno/=X_TILESIZE; + x_tileno2/=X_TILESIZE; + } + if (BX_VGA_THIS s.y_doublescan) { + y_tileno/=(Y_TILESIZE/2); + } else { + y_tileno/=Y_TILESIZE; + } + BX_VGA_THIS s.vga_mem_updated = 1; + SET_TILE_UPDATED (x_tileno, y_tileno, 1); + if (x_tileno2!=x_tileno) { + SET_TILE_UPDATED (x_tileno2, y_tileno, 1); + } + return; + /* CGA 320x200x4 / 640x200x2 end */ + } + else if (BX_VGA_THIS s.graphics_ctrl.memory_mapping != 1) { + BX_PANIC(("mem_write: graphics: mapping = %u", + (unsigned) BX_VGA_THIS s.graphics_ctrl.memory_mapping)); + return; + } + + if (BX_VGA_THIS s.sequencer.chain_four) { + unsigned x_tileno, y_tileno; + + // 320 x 200 256 color mode: chained pixel representation + BX_VGA_THIS s.memory[(offset & ~0x03) + (offset % 4)*65536] = value; + if (BX_VGA_THIS s.line_offset > 0) { + offset -= start_addr; + x_tileno = (offset % BX_VGA_THIS s.line_offset) / (X_TILESIZE/2); + if (BX_VGA_THIS s.y_doublescan) { + y_tileno = (offset / BX_VGA_THIS s.line_offset) / (Y_TILESIZE/2); + } else { + y_tileno = (offset / BX_VGA_THIS s.line_offset) / Y_TILESIZE; + } + BX_VGA_THIS s.vga_mem_updated = 1; + SET_TILE_UPDATED (x_tileno, y_tileno, 1); + } + return; + } + } + + /* addr between 0xA0000 and 0xAFFFF */ + +#if BX_SUPPORT_VBE + if (BX_VGA_THIS vbe.enabled) + { + plane0 = &BX_VGA_THIS s.memory[(0<> BX_VGA_THIS s.graphics_ctrl.data_rotate) | + (value << (8 - BX_VGA_THIS s.graphics_ctrl.data_rotate)); + } + new_val[0] = BX_VGA_THIS s.graphics_ctrl.latch[0] & ~bitmask; + new_val[1] = BX_VGA_THIS s.graphics_ctrl.latch[1] & ~bitmask; + new_val[2] = BX_VGA_THIS s.graphics_ctrl.latch[2] & ~bitmask; + new_val[3] = BX_VGA_THIS s.graphics_ctrl.latch[3] & ~bitmask; + switch (BX_VGA_THIS s.graphics_ctrl.raster_op) { + case 0: // replace + new_val[0] |= ((enable_set_reset & 1) + ? ((set_reset & 1) ? bitmask : 0) + : (value & bitmask)); + new_val[1] |= ((enable_set_reset & 2) + ? ((set_reset & 2) ? bitmask : 0) + : (value & bitmask)); + new_val[2] |= ((enable_set_reset & 4) + ? ((set_reset & 4) ? bitmask : 0) + : (value & bitmask)); + new_val[3] |= ((enable_set_reset & 8) + ? ((set_reset & 8) ? bitmask : 0) + : (value & bitmask)); + break; + case 1: // AND + new_val[0] |= ((enable_set_reset & 1) + ? ((set_reset & 1) + ? (BX_VGA_THIS s.graphics_ctrl.latch[0] & bitmask) + : 0) + : (value & BX_VGA_THIS s.graphics_ctrl.latch[0]) & bitmask); + new_val[1] |= ((enable_set_reset & 2) + ? ((set_reset & 2) + ? (BX_VGA_THIS s.graphics_ctrl.latch[1] & bitmask) + : 0) + : (value & BX_VGA_THIS s.graphics_ctrl.latch[1]) & bitmask); + new_val[2] |= ((enable_set_reset & 4) + ? ((set_reset & 4) + ? (BX_VGA_THIS s.graphics_ctrl.latch[2] & bitmask) + : 0) + : (value & BX_VGA_THIS s.graphics_ctrl.latch[2]) & bitmask); + new_val[3] |= ((enable_set_reset & 8) + ? ((set_reset & 8) + ? (BX_VGA_THIS s.graphics_ctrl.latch[3] & bitmask) + : 0) + : (value & BX_VGA_THIS s.graphics_ctrl.latch[3]) & bitmask); + break; + case 2: // OR + new_val[0] + |= ((enable_set_reset & 1) + ? ((set_reset & 1) + ? bitmask + : (BX_VGA_THIS s.graphics_ctrl.latch[0] & bitmask)) + : ((value | BX_VGA_THIS s.graphics_ctrl.latch[0]) & bitmask)); + new_val[1] + |= ((enable_set_reset & 2) + ? ((set_reset & 2) + ? bitmask + : (BX_VGA_THIS s.graphics_ctrl.latch[1] & bitmask)) + : ((value | BX_VGA_THIS s.graphics_ctrl.latch[1]) & bitmask)); + new_val[2] + |= ((enable_set_reset & 4) + ? ((set_reset & 4) + ? bitmask + : (BX_VGA_THIS s.graphics_ctrl.latch[2] & bitmask)) + : ((value | BX_VGA_THIS s.graphics_ctrl.latch[2]) & bitmask)); + new_val[3] + |= ((enable_set_reset & 8) + ? ((set_reset & 8) + ? bitmask + : (BX_VGA_THIS s.graphics_ctrl.latch[3] & bitmask)) + : ((value | BX_VGA_THIS s.graphics_ctrl.latch[3]) & bitmask)); + break; + case 3: // XOR + new_val[0] + |= ((enable_set_reset & 1) + ? ((set_reset & 1) + ? (~BX_VGA_THIS s.graphics_ctrl.latch[0] & bitmask) + : (BX_VGA_THIS s.graphics_ctrl.latch[0] & bitmask)) + : (value ^ BX_VGA_THIS s.graphics_ctrl.latch[0]) & bitmask); + new_val[1] + |= ((enable_set_reset & 2) + ? ((set_reset & 2) + ? (~BX_VGA_THIS s.graphics_ctrl.latch[1] & bitmask) + : (BX_VGA_THIS s.graphics_ctrl.latch[1] & bitmask)) + : (value ^ BX_VGA_THIS s.graphics_ctrl.latch[1]) & bitmask); + new_val[2] + |= ((enable_set_reset & 4) + ? ((set_reset & 4) + ? (~BX_VGA_THIS s.graphics_ctrl.latch[2] & bitmask) + : (BX_VGA_THIS s.graphics_ctrl.latch[2] & bitmask)) + : (value ^ BX_VGA_THIS s.graphics_ctrl.latch[2]) & bitmask); + new_val[3] + |= ((enable_set_reset & 8) + ? ((set_reset & 8) + ? (~BX_VGA_THIS s.graphics_ctrl.latch[3] & bitmask) + : (BX_VGA_THIS s.graphics_ctrl.latch[3] & bitmask)) + : (value ^ BX_VGA_THIS s.graphics_ctrl.latch[3]) & bitmask); + break; + default: + BX_PANIC(("vga_mem_write: write mode 0: op = %u", + (unsigned) BX_VGA_THIS s.graphics_ctrl.raster_op)); + } + } + break; + + case 1: /* write mode 1 */ + for (i=0; i<4; i++) { + new_val[i] = BX_VGA_THIS s.graphics_ctrl.latch[i]; + } + break; + + case 2: /* write mode 2 */ + { + const Bit8u bitmask = BX_VGA_THIS s.graphics_ctrl.bitmask; + + new_val[0] = BX_VGA_THIS s.graphics_ctrl.latch[0] & ~bitmask; + new_val[1] = BX_VGA_THIS s.graphics_ctrl.latch[1] & ~bitmask; + new_val[2] = BX_VGA_THIS s.graphics_ctrl.latch[2] & ~bitmask; + new_val[3] = BX_VGA_THIS s.graphics_ctrl.latch[3] & ~bitmask; + switch (BX_VGA_THIS s.graphics_ctrl.raster_op) { + case 0: // write + new_val[0] |= (value & 1) ? bitmask : 0; + new_val[1] |= (value & 2) ? bitmask : 0; + new_val[2] |= (value & 4) ? bitmask : 0; + new_val[3] |= (value & 8) ? bitmask : 0; + break; + case 1: // AND + new_val[0] |= (value & 1) + ? (BX_VGA_THIS s.graphics_ctrl.latch[0] & bitmask) + : 0; + new_val[1] |= (value & 2) + ? (BX_VGA_THIS s.graphics_ctrl.latch[1] & bitmask) + : 0; + new_val[2] |= (value & 4) + ? (BX_VGA_THIS s.graphics_ctrl.latch[2] & bitmask) + : 0; + new_val[3] |= (value & 8) + ? (BX_VGA_THIS s.graphics_ctrl.latch[3] & bitmask) + : 0; + break; + case 2: // OR + new_val[0] |= (value & 1) + ? bitmask + : (BX_VGA_THIS s.graphics_ctrl.latch[0] & bitmask); + new_val[1] |= (value & 2) + ? bitmask + : (BX_VGA_THIS s.graphics_ctrl.latch[1] & bitmask); + new_val[2] |= (value & 4) + ? bitmask + : (BX_VGA_THIS s.graphics_ctrl.latch[2] & bitmask); + new_val[3] |= (value & 8) + ? bitmask + : (BX_VGA_THIS s.graphics_ctrl.latch[3] & bitmask); + break; + case 3: // XOR + new_val[0] |= (value & 1) + ? (~BX_VGA_THIS s.graphics_ctrl.latch[0] & bitmask) + : (BX_VGA_THIS s.graphics_ctrl.latch[0] & bitmask); + new_val[1] |= (value & 2) + ? (~BX_VGA_THIS s.graphics_ctrl.latch[1] & bitmask) + : (BX_VGA_THIS s.graphics_ctrl.latch[1] & bitmask); + new_val[2] |= (value & 4) + ? (~BX_VGA_THIS s.graphics_ctrl.latch[2] & bitmask) + : (BX_VGA_THIS s.graphics_ctrl.latch[2] & bitmask); + new_val[3] |= (value & 8) + ? (~BX_VGA_THIS s.graphics_ctrl.latch[3] & bitmask) + : (BX_VGA_THIS s.graphics_ctrl.latch[3] & bitmask); + break; + } + } + break; + + case 3: /* write mode 3 */ + { + const Bit8u bitmask = BX_VGA_THIS s.graphics_ctrl.bitmask & value; + const Bit8u set_reset = BX_VGA_THIS s.graphics_ctrl.set_reset; + + /* perform rotate on CPU data */ + if (BX_VGA_THIS s.graphics_ctrl.data_rotate) { + value = (value >> BX_VGA_THIS s.graphics_ctrl.data_rotate) | + (value << (8 - BX_VGA_THIS s.graphics_ctrl.data_rotate)); + } + new_val[0] = BX_VGA_THIS s.graphics_ctrl.latch[0] & ~bitmask; + new_val[1] = BX_VGA_THIS s.graphics_ctrl.latch[1] & ~bitmask; + new_val[2] = BX_VGA_THIS s.graphics_ctrl.latch[2] & ~bitmask; + new_val[3] = BX_VGA_THIS s.graphics_ctrl.latch[3] & ~bitmask; + + value &= bitmask; + + switch (BX_VGA_THIS s.graphics_ctrl.raster_op) { + case 0: // write + new_val[0] |= (set_reset & 1) ? value : 0; + new_val[1] |= (set_reset & 2) ? value : 0; + new_val[2] |= (set_reset & 4) ? value : 0; + new_val[3] |= (set_reset & 8) ? value : 0; + break; + case 1: // AND + new_val[0] |= ((set_reset & 1) ? value : 0) + & BX_VGA_THIS s.graphics_ctrl.latch[0]; + new_val[1] |= ((set_reset & 2) ? value : 0) + & BX_VGA_THIS s.graphics_ctrl.latch[1]; + new_val[2] |= ((set_reset & 4) ? value : 0) + & BX_VGA_THIS s.graphics_ctrl.latch[2]; + new_val[3] |= ((set_reset & 8) ? value : 0) + & BX_VGA_THIS s.graphics_ctrl.latch[3]; + break; + case 2: // OR + new_val[0] |= ((set_reset & 1) ? value : 0) + | BX_VGA_THIS s.graphics_ctrl.latch[0]; + new_val[1] |= ((set_reset & 2) ? value : 0) + | BX_VGA_THIS s.graphics_ctrl.latch[1]; + new_val[2] |= ((set_reset & 4) ? value : 0) + | BX_VGA_THIS s.graphics_ctrl.latch[2]; + new_val[3] |= ((set_reset & 8) ? value : 0) + | BX_VGA_THIS s.graphics_ctrl.latch[3]; + break; + case 3: // XOR + new_val[0] |= ((set_reset & 1) ? value : 0) + ^ BX_VGA_THIS s.graphics_ctrl.latch[0]; + new_val[1] |= ((set_reset & 2) ? value : 0) + ^ BX_VGA_THIS s.graphics_ctrl.latch[1]; + new_val[2] |= ((set_reset & 4) ? value : 0) + ^ BX_VGA_THIS s.graphics_ctrl.latch[2]; + new_val[3] |= ((set_reset & 8) ? value : 0) + ^ BX_VGA_THIS s.graphics_ctrl.latch[3]; + break; + } + } + break; + + default: + BX_PANIC(("vga_mem_write: write mode %u ?", + (unsigned) BX_VGA_THIS s.graphics_ctrl.write_mode)); + } + + if (BX_VGA_THIS s.sequencer.map_mask & 0x0f) { + BX_VGA_THIS s.vga_mem_updated = 1; + if (BX_VGA_THIS s.sequencer.map_mask & 0x01) + plane0[offset] = new_val[0]; + if (BX_VGA_THIS s.sequencer.map_mask & 0x02) + plane1[offset] = new_val[1]; + if (BX_VGA_THIS s.sequencer.map_mask & 0x04) { + if ((offset & 0xe000) == BX_VGA_THIS s.charmap_address) { + bx_gui->set_text_charbyte((offset & 0x1fff), new_val[2]); + } + plane2[offset] = new_val[2]; + } + if (BX_VGA_THIS s.sequencer.map_mask & 0x08) + plane3[offset] = new_val[3]; + + unsigned x_tileno, y_tileno; + + if (BX_VGA_THIS s.graphics_ctrl.shift_reg == 2) { + offset -= start_addr; + x_tileno = (offset % BX_VGA_THIS s.line_offset) * 4 / (X_TILESIZE / 2); + if (BX_VGA_THIS s.y_doublescan) { + y_tileno = (offset / BX_VGA_THIS s.line_offset) / (Y_TILESIZE / 2); + } else { + y_tileno = (offset / BX_VGA_THIS s.line_offset) / Y_TILESIZE; + } + SET_TILE_UPDATED (x_tileno, y_tileno, 1); + } else { + if (BX_VGA_THIS s.line_compare < BX_VGA_THIS s.vertical_display_end) { + if (BX_VGA_THIS s.line_offset > 0) { + if (BX_VGA_THIS s.x_dotclockdiv2) { + x_tileno = (offset % BX_VGA_THIS s.line_offset) / (X_TILESIZE / 16); + } else { + x_tileno = (offset % BX_VGA_THIS s.line_offset) / (X_TILESIZE / 8); + } + if (BX_VGA_THIS s.y_doublescan) { + y_tileno = ((offset / BX_VGA_THIS s.line_offset) * 2 + BX_VGA_THIS s.line_compare + 1) / Y_TILESIZE; + } else { + y_tileno = ((offset / BX_VGA_THIS s.line_offset) + BX_VGA_THIS s.line_compare + 1) / Y_TILESIZE; + } + SET_TILE_UPDATED (x_tileno, y_tileno, 1); + } + } + if (offset >= start_addr) { + offset -= start_addr; + if (BX_VGA_THIS s.line_offset > 0) { + if (BX_VGA_THIS s.x_dotclockdiv2) { + x_tileno = (offset % BX_VGA_THIS s.line_offset) / (X_TILESIZE / 16); + } else { + x_tileno = (offset % BX_VGA_THIS s.line_offset) / (X_TILESIZE / 8); + } + if (BX_VGA_THIS s.y_doublescan) { + y_tileno = (offset / BX_VGA_THIS s.line_offset) / (Y_TILESIZE / 2); + } else { + y_tileno = (offset / BX_VGA_THIS s.line_offset) / Y_TILESIZE; + } + SET_TILE_UPDATED (x_tileno, y_tileno, 1); + } + } + } + } +} + +void bx_vga_c::get_text_snapshot(Bit8u **text_snapshot, unsigned *txHeight, + unsigned *txWidth) +{ + unsigned VDE, MSL; + + if (!BX_VGA_THIS s.graphics_ctrl.graphics_alpha) { + *text_snapshot = &BX_VGA_THIS s.text_snapshot[0]; + VDE = BX_VGA_THIS s.vertical_display_end; + MSL = BX_VGA_THIS s.CRTC.reg[0x09] & 0x1f; + *txHeight = (VDE+1)/(MSL+1); + *txWidth = BX_VGA_THIS s.CRTC.reg[1] + 1; + } else { + *txHeight = 0; + *txWidth = 0; + } +} + +Bit8u bx_vga_c::get_actl_palette_idx(Bit8u index) +{ + return BX_VGA_THIS s.attribute_ctrl.palette_reg[index]; +} + +#if BX_DEBUGGER +void bx_vga_c::debug_dump(void) +{ + dbg_printf("s.misc_output.color_emulation = %u\n", + (unsigned) BX_VGA_THIS s.misc_output.color_emulation); + dbg_printf("s.misc_output.enable_ram = %u\n", + (unsigned) BX_VGA_THIS s.misc_output.enable_ram); + dbg_printf("s.misc_output.clock_select = %u ", + (unsigned) BX_VGA_THIS s.misc_output.clock_select); + if (BX_VGA_THIS s.misc_output.clock_select == 0) + dbg_printf("(25Mhz 640 horiz pixel clock)\n"); + else + dbg_printf("(28Mhz 720 horiz pixel clock)\n"); + dbg_printf("s.misc_output.select_high_bank = %u\n", + (unsigned) BX_VGA_THIS s.misc_output.select_high_bank); + dbg_printf("s.misc_output.horiz_sync_pol = %u\n", + (unsigned) BX_VGA_THIS s.misc_output.horiz_sync_pol); + dbg_printf("s.misc_output.vert_sync_pol = %u ", + (unsigned) BX_VGA_THIS s.misc_output.vert_sync_pol); + switch ((BX_VGA_THIS s.misc_output.vert_sync_pol << 1) | + BX_VGA_THIS s.misc_output.horiz_sync_pol) { + case 1: dbg_printf("(400 lines)\n"); break; + case 2: dbg_printf("(350 lines)\n"); break; + case 3: dbg_printf("(480 lines)\n"); break; + default: dbg_printf("(reserved)\n"); + } + + dbg_printf("s.graphics_ctrl.odd_even = %u\n", + (unsigned) BX_VGA_THIS s.graphics_ctrl.odd_even); + dbg_printf("s.graphics_ctrl.chain_odd_even = %u\n", + (unsigned) BX_VGA_THIS s.graphics_ctrl.chain_odd_even); + dbg_printf("s.graphics_ctrl.shift_reg = %u\n", + (unsigned) BX_VGA_THIS s.graphics_ctrl.shift_reg); + dbg_printf("s.graphics_ctrl.graphics_alpha = %u\n", + (unsigned) BX_VGA_THIS s.graphics_ctrl.graphics_alpha); + dbg_printf("s.graphics_ctrl.memory_mapping = %u ", + (unsigned) BX_VGA_THIS s.graphics_ctrl.memory_mapping); + switch (BX_VGA_THIS s.graphics_ctrl.memory_mapping) { + case 1: dbg_printf("(A0000-AFFFF)\n"); break; + case 2: dbg_printf("(B0000-B7FFF)\n"); break; + case 3: dbg_printf("(B8000-BFFFF)\n"); break; + default: dbg_printf("(A0000-BFFFF)\n"); break; + } + + dbg_printf("s.sequencer.extended_mem = %u\n", + (unsigned) BX_VGA_THIS s.sequencer.extended_mem); + dbg_printf("s.sequencer.odd_even = %u (inverted)\n", + (unsigned) BX_VGA_THIS s.sequencer.odd_even); + dbg_printf("s.sequencer.chain_four = %u\n", + (unsigned) BX_VGA_THIS s.sequencer.chain_four); + + dbg_printf("s.attribute_ctrl.video_enabled = %u\n", + (unsigned) BX_VGA_THIS s.attribute_ctrl.video_enabled); + dbg_printf("s.attribute_ctrl.mode_ctrl.graphics_alpha = %u\n", + (unsigned) BX_VGA_THIS s.attribute_ctrl.mode_ctrl.graphics_alpha); + dbg_printf("s.attribute_ctrl.mode_ctrl.display_type = %u\n", + (unsigned) BX_VGA_THIS s.attribute_ctrl.mode_ctrl.display_type); + dbg_printf("s.attribute_ctrl.mode_ctrl.internal_palette_size = %u\n", + (unsigned) BX_VGA_THIS s.attribute_ctrl.mode_ctrl.internal_palette_size); + dbg_printf("s.attribute_ctrl.mode_ctrl.pixel_clock_select = %u\n", + (unsigned) BX_VGA_THIS s.attribute_ctrl.mode_ctrl.pixel_clock_select); +} +#endif + +void bx_vga_c::redraw_area(unsigned x0, unsigned y0, unsigned width, + unsigned height) +{ + unsigned xti, yti, xt0, xt1, yt0, yt1, xmax, ymax; + + if ((width == 0) || (height == 0)) { + return; + } + + BX_VGA_THIS s.vga_mem_updated = 1; + +#if BX_SUPPORT_VBE + if (BX_VGA_THIS s.graphics_ctrl.graphics_alpha || BX_VGA_THIS vbe.enabled) { +#else + if (BX_VGA_THIS s.graphics_ctrl.graphics_alpha) { +#endif + // graphics mode + xmax = old_iWidth; + ymax = old_iHeight; +#if BX_SUPPORT_VBE + if (BX_VGA_THIS vbe.enabled) { + xmax = BX_VGA_THIS vbe.xres; + ymax = BX_VGA_THIS vbe.yres; + } +#endif + xt0 = x0 / X_TILESIZE; + yt0 = y0 / Y_TILESIZE; + if (x0 < xmax) { + xt1 = (x0 + width - 1) / X_TILESIZE; + } else { + xt1 = (xmax - 1) / X_TILESIZE; + } + if (y0 < ymax) { + yt1 = (y0 + height - 1) / Y_TILESIZE; + } else { + yt1 = (ymax - 1) / Y_TILESIZE; + } + for (yti=yt0; yti<=yt1; yti++) { + for (xti=xt0; xti<=xt1; xti++) { + SET_TILE_UPDATED (xti, yti, 1); + } + } + + } else { + // text mode + memset(BX_VGA_THIS s.text_snapshot, 0, + sizeof(BX_VGA_THIS s.text_snapshot)); + } +} + + +#if BX_SUPPORT_VBE +bx_bool bx_vga_c::vbe_set_base_addr(Bit32u *addr, Bit8u *pci_conf) +{ + if (DEV_pci_set_base_mem(BX_VGA_THIS_PTR, mem_read_handler, + mem_write_handler, + addr, pci_conf, VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES)) { + BX_VGA_THIS vbe.base_address = *addr; + return 1; + } + return 0; +} + + Bit8u BX_CPP_AttrRegparmN(1) +bx_vga_c::vbe_mem_read(bx_phy_address addr) +{ + Bit32u offset; + + if (addr >= BX_VGA_THIS vbe.base_address) + { + // LFB read + offset = (Bit32u)(addr - BX_VGA_THIS vbe.base_address); + } + else + { + // banked mode read + offset = (Bit32u)(BX_VGA_THIS vbe.bank*65536 + addr - 0xA0000); + } + + // check for out of memory read + if (offset > VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES) + return 0; + + return (BX_VGA_THIS s.memory[offset]); +} + + void BX_CPP_AttrRegparmN(2) +bx_vga_c::vbe_mem_write(bx_phy_address addr, Bit8u value) +{ + Bit32u offset; + unsigned x_tileno, y_tileno; + + if (BX_VGA_THIS vbe.lfb_enabled) + { + if (addr >= BX_VGA_THIS vbe.base_address) + { + // LFB write + offset = (Bit32u)(addr - BX_VGA_THIS vbe.base_address); + } + else + { + // banked mode write while in LFB mode -> ignore + return; + } + } + else + { + if (addr < BX_VGA_THIS vbe.base_address) + { + // banked mode write + offset = (Bit32u)(BX_VGA_THIS vbe.bank*65536 + (addr - 0xA0000)); + } + else + { + // LFB write while in banked mode -> ignore + return; + } + } + + // check for out of memory write + if (offset < VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES) + { + BX_VGA_THIS s.memory[offset]=value; + } + else + { + // make sure we don't flood the logfile + static int count=0; + if (count<100) + { + count ++; + BX_INFO(("VBE_mem_write out of video memory write at %x",offset)); + } + } + + offset-=BX_VGA_THIS vbe.virtual_start; + + // only update the UI when writing 'onscreen' + if (offset < BX_VGA_THIS vbe.visible_screen_size) + { + y_tileno = ((offset / BX_VGA_THIS vbe.bpp_multiplier) / BX_VGA_THIS vbe.virtual_xres) / Y_TILESIZE; + x_tileno = ((offset / BX_VGA_THIS vbe.bpp_multiplier) % BX_VGA_THIS vbe.virtual_xres) / X_TILESIZE; + + if ((y_tileno < BX_NUM_Y_TILES) && (x_tileno < BX_NUM_X_TILES)) + { + BX_VGA_THIS s.vga_mem_updated = 1; + SET_TILE_UPDATED (x_tileno, y_tileno, 1); + } + } +} + +Bit32u bx_vga_c::vbe_read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if BX_USE_VGA_SMF == 0 + bx_vga_c *class_ptr = (bx_vga_c *) this_ptr; + return class_ptr->vbe_read(address, io_len); +} + +Bit32u bx_vga_c::vbe_read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // BX_USE_VGA_SMF == 0 + Bit16u retval; + +// BX_INFO(("VBE_read %x (len %x)", address, io_len)); + + if (address==VBE_DISPI_IOPORT_INDEX) + { + // index register + return (Bit32u) BX_VGA_THIS vbe.curindex; + } + else + { + // data register read + + switch (BX_VGA_THIS vbe.curindex) + { + case VBE_DISPI_INDEX_ID: // Display Interface ID check + return BX_VGA_THIS vbe.cur_dispi; + + case VBE_DISPI_INDEX_XRES: // x resolution + if (BX_VGA_THIS vbe.get_capabilities) { + return BX_VGA_THIS vbe.max_xres; + } else { + return BX_VGA_THIS vbe.xres; + } + + case VBE_DISPI_INDEX_YRES: // y resolution + if (BX_VGA_THIS vbe.get_capabilities) { + return BX_VGA_THIS vbe.max_yres; + } else { + return BX_VGA_THIS vbe.yres; + } + + case VBE_DISPI_INDEX_BPP: // bpp + if (BX_VGA_THIS vbe.get_capabilities) { + return BX_VGA_THIS vbe.max_bpp; + } else { + return BX_VGA_THIS vbe.bpp; + } + + case VBE_DISPI_INDEX_ENABLE: // vbe enabled + retval = BX_VGA_THIS vbe.enabled; + if (BX_VGA_THIS vbe.get_capabilities) + retval |= VBE_DISPI_GETCAPS; + if (BX_VGA_THIS vbe.dac_8bit) + retval |= VBE_DISPI_8BIT_DAC; + return retval; + + case VBE_DISPI_INDEX_BANK: // current bank + return BX_VGA_THIS vbe.bank; + + case VBE_DISPI_INDEX_X_OFFSET: + return BX_VGA_THIS vbe.offset_x; + + case VBE_DISPI_INDEX_Y_OFFSET: + return BX_VGA_THIS vbe.offset_y; + + case VBE_DISPI_INDEX_VIRT_WIDTH: + return BX_VGA_THIS vbe.virtual_xres; + + case VBE_DISPI_INDEX_VIRT_HEIGHT: + return BX_VGA_THIS vbe.virtual_yres; + + case VBE_DISPI_INDEX_VIDEO_MEMORY_64K: + return (VBE_DISPI_TOTAL_VIDEO_MEMORY_KB >> 6); + + default: + BX_PANIC(("VBE unknown data read index 0x%x",BX_VGA_THIS vbe.curindex)); + break; + } + } + BX_PANIC(("VBE_read shouldn't reach this")); + return 0; /* keep compiler happy */ +} + +void bx_vga_c::vbe_write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if BX_USE_VGA_SMF == 0 + bx_vga_c *class_ptr = (bx_vga_c *) this_ptr; + class_ptr->vbe_write(address, value, io_len); +} + +Bit32u bx_vga_c::vbe_write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif + bx_bool new_vbe_8bit_dac; + bx_bool needs_update = 0; + unsigned i; + +// BX_INFO(("VBE_write %x = %x (len %x)", address, value, io_len)); + + switch(address) + { + // index register + case VBE_DISPI_IOPORT_INDEX: + + BX_VGA_THIS vbe.curindex = (Bit16u) value; + break; + + // data register + // FIXME: maybe do some 'sanity' checks on received data? + case VBE_DISPI_IOPORT_DATA: + switch (BX_VGA_THIS vbe.curindex) + { + case VBE_DISPI_INDEX_ID: // Display Interface ID check + { + if ((value == VBE_DISPI_ID0) || + (value == VBE_DISPI_ID1) || + (value == VBE_DISPI_ID2) || + (value == VBE_DISPI_ID3) || + (value == VBE_DISPI_ID4) || + (value == VBE_DISPI_ID5)) + { + // allow backwards compatible with previous dispi bioses + BX_VGA_THIS vbe.cur_dispi=value; + } + else + { + BX_PANIC(("VBE unknown Display Interface %x", value)); + } + + // make sure we don't flood the logfile + static int count=0; + if (count < 100) + { + count++; + BX_INFO(("VBE known Display Interface %x", value)); + } + } break; + + case VBE_DISPI_INDEX_XRES: // set xres + { + // check that we don't set xres during vbe enabled + if (!BX_VGA_THIS vbe.enabled) + { + // check for within max xres range + if (value <= VBE_DISPI_MAX_XRES) + { + BX_VGA_THIS vbe.xres=(Bit16u) value; + BX_INFO(("VBE set xres (%d)", value)); + } + else + { + BX_INFO(("VBE set xres more then max xres (%d)", value)); + } + } + else + { + BX_ERROR(("VBE set xres during vbe enabled!")); + } + } break; + + case VBE_DISPI_INDEX_YRES: // set yres + { + // check that we don't set yres during vbe enabled + if (!BX_VGA_THIS vbe.enabled) + { + // check for within max yres range + if (value <= VBE_DISPI_MAX_YRES) + { + BX_VGA_THIS vbe.yres=(Bit16u) value; + BX_INFO(("VBE set yres (%d)", value)); + } + else + { + BX_INFO(("VBE set yres more then max yres (%d)", value)); + } + } + else + { + BX_ERROR(("VBE set yres during vbe enabled!")); + } + } break; + + case VBE_DISPI_INDEX_BPP: // set bpp + { + // check that we don't set bpp during vbe enabled + if (!BX_VGA_THIS vbe.enabled) + { + // for backward compatiblity + if (value == 0) value = VBE_DISPI_BPP_8; + // check for correct bpp range + if ((value == VBE_DISPI_BPP_4) || (value == VBE_DISPI_BPP_8) || (value == VBE_DISPI_BPP_15) || + (value == VBE_DISPI_BPP_16) || (value == VBE_DISPI_BPP_24) || (value == VBE_DISPI_BPP_32)) + { + BX_VGA_THIS vbe.bpp=(Bit16u) value; + BX_INFO(("VBE set bpp (%d)", value)); + } + else + { + BX_ERROR(("VBE set bpp with unknown bpp (%d)", value)); + } + } + else + { + BX_ERROR(("VBE set bpp during vbe enabled!")); + } + } break; + + case VBE_DISPI_INDEX_BANK: // set bank + { + value=value & 0xff; // FIXME lobyte = vbe bank A? + unsigned divider = (BX_VGA_THIS vbe.bpp!=VBE_DISPI_BPP_4)?64:256; + // check for max bank nr + if (value < (VBE_DISPI_TOTAL_VIDEO_MEMORY_KB / divider)) + { + if (!BX_VGA_THIS vbe.lfb_enabled) + { + BX_DEBUG(("VBE set bank to %d", value)); + BX_VGA_THIS vbe.bank=value; + } + else + { + BX_ERROR(("VBE set bank in LFB mode ignored")); + } + } + else + { + BX_ERROR(("VBE set invalid bank (%d)", value)); + } + } break; + + case VBE_DISPI_INDEX_ENABLE: // enable video + { + if ((value & VBE_DISPI_ENABLED) && !BX_VGA_THIS vbe.enabled) + { + unsigned depth=0; + + // setup virtual resolution to be the same as current reso + BX_VGA_THIS vbe.virtual_yres=BX_VGA_THIS vbe.yres; + BX_VGA_THIS vbe.virtual_xres=BX_VGA_THIS vbe.xres; + + // reset offset + BX_VGA_THIS vbe.offset_x=0; + BX_VGA_THIS vbe.offset_y=0; + BX_VGA_THIS vbe.virtual_start=0; + + switch((BX_VGA_THIS vbe.bpp)) + { + // Default pixel sizes + case VBE_DISPI_BPP_8: + BX_VGA_THIS vbe.bpp_multiplier = 1; + BX_VGA_THIS s.line_offset = BX_VGA_THIS vbe.virtual_xres; + depth=8; + break; + + case VBE_DISPI_BPP_4: + BX_VGA_THIS vbe.bpp_multiplier = 1; + BX_VGA_THIS s.line_offset = (BX_VGA_THIS vbe.virtual_xres >> 3); + depth=4; + break; + + case VBE_DISPI_BPP_15: + BX_VGA_THIS vbe.bpp_multiplier = 2; + BX_VGA_THIS s.line_offset = BX_VGA_THIS vbe.virtual_xres * 2; + depth=15; + break; + + case VBE_DISPI_BPP_16: + BX_VGA_THIS vbe.bpp_multiplier = 2; + BX_VGA_THIS s.line_offset = BX_VGA_THIS vbe.virtual_xres * 2; + depth=16; + break; + + case VBE_DISPI_BPP_24: + BX_VGA_THIS vbe.bpp_multiplier = 3; + BX_VGA_THIS s.line_offset = BX_VGA_THIS vbe.virtual_xres * 3; + depth=24; + break; + + case VBE_DISPI_BPP_32: + BX_VGA_THIS vbe.bpp_multiplier = 4; + BX_VGA_THIS s.line_offset = BX_VGA_THIS vbe.virtual_xres << 2; + depth=32; + break; + } + BX_VGA_THIS vbe.visible_screen_size = BX_VGA_THIS s.line_offset * BX_VGA_THIS vbe.yres; + + BX_INFO(("VBE enabling x %d, y %d, bpp %d, %u bytes visible", BX_VGA_THIS vbe.xres, BX_VGA_THIS vbe.yres, BX_VGA_THIS vbe.bpp, BX_VGA_THIS vbe.visible_screen_size)); + + if (depth > 4) + { + BX_VGA_THIS vbe.lfb_enabled=(bx_bool)(value & VBE_DISPI_LFB_ENABLED); + if ((value & VBE_DISPI_NOCLEARMEM) == 0) + { + memset(BX_VGA_THIS s.memory, 0, BX_VGA_THIS vbe.visible_screen_size); + } + bx_gui->dimension_update(BX_VGA_THIS vbe.xres, BX_VGA_THIS vbe.yres, 0, 0, depth); + BX_VGA_THIS s.last_bpp = depth; + } + } + else if (((value & VBE_DISPI_ENABLED) == 0) && BX_VGA_THIS vbe.enabled) + { + BX_INFO(("VBE disabling")); + BX_VGA_THIS vbe.lfb_enabled=0; + } + BX_VGA_THIS vbe.enabled=(bx_bool)(value & VBE_DISPI_ENABLED); + BX_VGA_THIS vbe.get_capabilities=(bx_bool)((value & VBE_DISPI_GETCAPS) != 0); + new_vbe_8bit_dac=(bx_bool)((value & VBE_DISPI_8BIT_DAC) != 0); + if (new_vbe_8bit_dac != BX_VGA_THIS vbe.dac_8bit) + { + if (new_vbe_8bit_dac) + { + for (i=0; i<256; i++) + { + BX_VGA_THIS s.pel.data[i].red <<= 2; + BX_VGA_THIS s.pel.data[i].green <<= 2; + BX_VGA_THIS s.pel.data[i].blue <<= 2; + } + BX_INFO(("DAC in 8 bit mode")); + } + else + { + for (i=0; i<256; i++) + { + BX_VGA_THIS s.pel.data[i].red >>= 2; + BX_VGA_THIS s.pel.data[i].green >>= 2; + BX_VGA_THIS s.pel.data[i].blue >>= 2; + } + BX_INFO(("DAC in standard mode")); + } + BX_VGA_THIS vbe.dac_8bit=new_vbe_8bit_dac; + needs_update = 1; + } + } break; + + case VBE_DISPI_INDEX_X_OFFSET: + { + BX_DEBUG(("VBE offset x %d", value)); + BX_VGA_THIS vbe.offset_x=(Bit16u)value; + + BX_VGA_THIS vbe.virtual_start = BX_VGA_THIS vbe.offset_y * BX_VGA_THIS s.line_offset; + if (BX_VGA_THIS vbe.bpp != VBE_DISPI_BPP_4) { + BX_VGA_THIS vbe.virtual_start += (BX_VGA_THIS vbe.offset_x * BX_VGA_THIS vbe.bpp_multiplier); + } else { + BX_VGA_THIS vbe.virtual_start += (BX_VGA_THIS vbe.offset_x >> 3); + } + needs_update = 1; + } break; + + case VBE_DISPI_INDEX_Y_OFFSET: + { + BX_DEBUG(("VBE offset y %d", value)); + + Bit32u new_screen_start = value * BX_VGA_THIS s.line_offset; + if (BX_VGA_THIS vbe.bpp != VBE_DISPI_BPP_4) { + if ((new_screen_start + BX_VGA_THIS vbe.visible_screen_size) > VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES) + { + BX_PANIC(("VBE offset y %d out of bounds", value)); + break; + } + new_screen_start += (BX_VGA_THIS vbe.offset_x * BX_VGA_THIS vbe.bpp_multiplier); + } else { + if ((new_screen_start + BX_VGA_THIS vbe.visible_screen_size) > (VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES / 4)) + { + BX_PANIC(("VBE offset y %d out of bounds", value)); + break; + } + new_screen_start += (BX_VGA_THIS vbe.offset_x >> 3); + } + BX_VGA_THIS vbe.virtual_start = new_screen_start; + BX_VGA_THIS vbe.offset_y = (Bit16u)value; + needs_update = 1; + } break; + + case VBE_DISPI_INDEX_VIRT_WIDTH: + { + BX_INFO(("VBE requested virtual width %d", value)); + + // calculate virtual width & height dimensions + // req: + // virt_width > xres + // virt_height >=yres + // virt_width*virt_height < MAX_VIDEO_MEMORY + + // basicly 2 situations + + // situation 1: + // MAX_VIDEO_MEMORY / virt_width >= yres + // adjust result height + // else + // adjust result width based upon virt_height=yres + Bit16u new_width=value; + Bit16u new_height; + if (BX_VGA_THIS vbe.bpp != VBE_DISPI_BPP_4) { + new_height=(VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES / BX_VGA_THIS vbe.bpp_multiplier) / new_width; + } else { + new_height=(VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES * 2) / new_width; + } + if (new_height >=BX_VGA_THIS vbe.yres) + { + // we have a decent virtual width & new_height + BX_INFO(("VBE decent virtual height %d",new_height)); + } + else + { + // no decent virtual height: adjust width & height + new_height=BX_VGA_THIS vbe.yres; + if (BX_VGA_THIS vbe.bpp != VBE_DISPI_BPP_4) { + new_width=(VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES / BX_VGA_THIS vbe.bpp_multiplier) / new_height; + } else { + new_width=(VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES * 2) / new_height; + } + + BX_INFO(("VBE recalc virtual width %d height %d",new_width, new_height)); + } + + BX_VGA_THIS vbe.virtual_xres=new_width; + BX_VGA_THIS vbe.virtual_yres=new_height; + if (BX_VGA_THIS vbe.bpp != VBE_DISPI_BPP_4) { + BX_VGA_THIS s.line_offset = BX_VGA_THIS vbe.virtual_xres * BX_VGA_THIS vbe.bpp_multiplier; + } else { + BX_VGA_THIS s.line_offset = BX_VGA_THIS vbe.virtual_xres >> 3; + } + BX_VGA_THIS vbe.visible_screen_size = BX_VGA_THIS s.line_offset * BX_VGA_THIS vbe.yres; + + } break; + case VBE_DISPI_INDEX_VIRT_HEIGHT: + BX_ERROR(("VBE: write to virtual height register ignored")); + break; + default: + BX_ERROR(("VBE: write unsupported register at index 0x%x",BX_VGA_THIS vbe.curindex)); + break; + } + if (needs_update) { + BX_VGA_THIS s.vga_mem_updated = 1; + for (unsigned xti = 0; xti < BX_NUM_X_TILES; xti++) { + for (unsigned yti = 0; yti < BX_NUM_Y_TILES; yti++) { + SET_TILE_UPDATED (xti, yti, 1); + } + } + } + break; + + } // end switch address +} + +#endif diff --git a/bochs/iodev/vga.h b/bochs/iodev/vga.h new file mode 100644 index 00000000..c8e4a1d7 --- /dev/null +++ b/bochs/iodev/vga.h @@ -0,0 +1,343 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#ifndef BX_IODEV_VGA_H +#define BX_IODEV_VGA_H + +// Make colour +#define MAKE_COLOUR(red, red_shiftfrom, red_shiftto, red_mask, \ + green, green_shiftfrom, green_shiftto, green_mask, \ + blue, blue_shiftfrom, blue_shiftto, blue_mask) \ +( \ + ((((red_shiftto) > (red_shiftfrom)) ? \ + (red) << ((red_shiftto) - (red_shiftfrom)) : \ + (red) >> ((red_shiftfrom) - (red_shiftto))) & \ + (red_mask)) | \ + ((((green_shiftto) > (green_shiftfrom)) ? \ + (green) << ((green_shiftto) - (green_shiftfrom)) : \ + (green) >> ((green_shiftfrom) - (green_shiftto))) & \ + (green_mask)) | \ + ((((blue_shiftto) > (blue_shiftfrom)) ? \ + (blue) << ((blue_shiftto) - (blue_shiftfrom)) : \ + (blue) >> ((blue_shiftfrom) - (blue_shiftto))) & \ + (blue_mask)) \ +) + +#if BX_SUPPORT_VBE + #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 16 + #define VBE_DISPI_4BPP_PLANE_SHIFT 22 + + #define VBE_DISPI_BANK_ADDRESS 0xA0000 + #define VBE_DISPI_BANK_SIZE_KB 64 + + #define VBE_DISPI_MAX_XRES 2560 + #define VBE_DISPI_MAX_YRES 1600 + #define VBE_DISPI_MAX_BPP 32 + + #define VBE_DISPI_IOPORT_INDEX 0x01CE + #define VBE_DISPI_IOPORT_DATA 0x01CF + + #define VBE_DISPI_INDEX_ID 0x0 + #define VBE_DISPI_INDEX_XRES 0x1 + #define VBE_DISPI_INDEX_YRES 0x2 + #define VBE_DISPI_INDEX_BPP 0x3 + #define VBE_DISPI_INDEX_ENABLE 0x4 + #define VBE_DISPI_INDEX_BANK 0x5 + #define VBE_DISPI_INDEX_VIRT_WIDTH 0x6 + #define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7 + #define VBE_DISPI_INDEX_X_OFFSET 0x8 + #define VBE_DISPI_INDEX_Y_OFFSET 0x9 + #define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa + + #define VBE_DISPI_ID0 0xB0C0 + #define VBE_DISPI_ID1 0xB0C1 + #define VBE_DISPI_ID2 0xB0C2 + #define VBE_DISPI_ID3 0xB0C3 + #define VBE_DISPI_ID4 0xB0C4 + #define VBE_DISPI_ID5 0xB0C5 + + #define VBE_DISPI_BPP_4 0x04 + #define VBE_DISPI_BPP_8 0x08 + #define VBE_DISPI_BPP_15 0x0F + #define VBE_DISPI_BPP_16 0x10 + #define VBE_DISPI_BPP_24 0x18 + #define VBE_DISPI_BPP_32 0x20 + + #define VBE_DISPI_DISABLED 0x00 + #define VBE_DISPI_ENABLED 0x01 + #define VBE_DISPI_GETCAPS 0x02 + #define VBE_DISPI_8BIT_DAC 0x20 + #define VBE_DISPI_LFB_ENABLED 0x40 + #define VBE_DISPI_NOCLEARMEM 0x80 + + #define VBE_DISPI_LFB_PHYSICAL_ADDRESS 0xE0000000 + + #define VBE_DISPI_TOTAL_VIDEO_MEMORY_KB (VBE_DISPI_TOTAL_VIDEO_MEMORY_MB * 1024) + #define VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES (VBE_DISPI_TOTAL_VIDEO_MEMORY_KB * 1024) + + #define BX_MAX_XRES VBE_DISPI_MAX_XRES + #define BX_MAX_YRES VBE_DISPI_MAX_YRES + +#elif BX_SUPPORT_CLGD54XX + + #define BX_MAX_XRES 1280 + #define BX_MAX_YRES 1024 + +#else + + #define BX_MAX_XRES 800 + #define BX_MAX_YRES 600 + +#endif // BX_SUPPORT_VBE + +#define X_TILESIZE 16 +#define Y_TILESIZE 24 +#define BX_NUM_X_TILES (BX_MAX_XRES /X_TILESIZE) +#define BX_NUM_Y_TILES (BX_MAX_YRES /Y_TILESIZE) + +#if BX_USE_VGA_SMF +# define BX_VGA_SMF static +# define BX_VGA_THIS theVga-> +# define BX_VGA_THIS_PTR theVga +#else +# define BX_VGA_SMF +# define BX_VGA_THIS this-> +# define BX_VGA_THIS_PTR this +#endif + +class bx_vga_c : public bx_vga_stub_c { +public: + bx_vga_c(); + virtual ~bx_vga_c(); + virtual void init(void); + virtual void reset(unsigned type); + BX_VGA_SMF bx_bool mem_read_handler(bx_phy_address addr, unsigned len, void *data, void *param); + BX_VGA_SMF bx_bool mem_write_handler(bx_phy_address addr, unsigned len, void *data, void *param); + virtual Bit8u mem_read(bx_phy_address addr); + virtual void mem_write(bx_phy_address addr, Bit8u value); + virtual void trigger_timer(void *this_ptr); + virtual void register_state(void); + virtual void after_restore_state(void); +#if BX_DEBUGGER + virtual void debug_dump(void); +#endif + +#if BX_SUPPORT_VBE + virtual bx_bool vbe_set_base_addr(Bit32u *addr, Bit8u *pci_conf); + + BX_VGA_SMF Bit8u vbe_mem_read(bx_phy_address addr) BX_CPP_AttrRegparmN(1); + BX_VGA_SMF void vbe_mem_write(bx_phy_address addr, Bit8u value) BX_CPP_AttrRegparmN(2); +#endif + + virtual void redraw_area(unsigned x0, unsigned y0, + unsigned width, unsigned height); + + virtual void get_text_snapshot(Bit8u **text_snapshot, unsigned *txHeight, + unsigned *txWidth); + virtual Bit8u get_actl_palette_idx(Bit8u index); + + static void timer_handler(void *); +#if BX_USE_VGA_SMF == 0 + BX_VGA_SMF void timer(void); +#endif + static Bit64s vga_param_handler(bx_param_c *param, int set, Bit64s val); + +protected: + void init_iohandlers(bx_read_handler_t f_read, bx_write_handler_t f_write); + void init_systemtimer(bx_timer_handler_t f_timer, param_event_handler f_param); + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if BX_USE_VGA_SMF + static void write_handler_no_log(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#endif + +#if BX_SUPPORT_VBE + static Bit32u vbe_read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void vbe_write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#endif + +#if BX_USE_VGA_SMF == 0 + Bit32u read(Bit32u address, unsigned io_len); +#endif + void write(Bit32u address, Bit32u value, unsigned io_len, bx_bool no_log); + +#if BX_SUPPORT_VBE + +#if BX_USE_VGA_SMF == 0 + Bit32u vbe_read(Bit32u address, unsigned io_len); + void vbe_write(Bit32u address, Bit32u value, unsigned io_len, bx_bool no_log); +#endif + +#endif // BX_SUPPORT_VBE + + BX_VGA_SMF void update(void); + BX_VGA_SMF void determine_screen_dimensions(unsigned *piHeight, unsigned *piWidth); + + struct { + struct { + bx_bool color_emulation; // 1=color emulation, base address = 3Dx + // 0=mono emulation, base address = 3Bx + bx_bool enable_ram; // enable CPU access to video memory if set + Bit8u clock_select; // 0=25Mhz 1=28Mhz + bx_bool select_high_bank; // when in odd/even modes, select + // high 64k bank if set + bx_bool horiz_sync_pol; // bit6: negative if set + bx_bool vert_sync_pol; // bit7: negative if set + // bit7,bit6 represent number of lines on display: + // 0 = reserved + // 1 = 400 lines + // 2 = 350 lines + // 3 - 480 lines + } misc_output; + + struct { + Bit8u address; + Bit8u reg[0x19]; + bx_bool write_protect; + } CRTC; + + struct { + bx_bool flip_flop; /* 0 = address, 1 = data-write */ + unsigned address; /* register number */ + bx_bool video_enabled; + Bit8u palette_reg[16]; + Bit8u overscan_color; + Bit8u color_plane_enable; + Bit8u horiz_pel_panning; + Bit8u color_select; + struct { + bx_bool graphics_alpha; + bx_bool display_type; + bx_bool enable_line_graphics; + bx_bool blink_intensity; + bx_bool pixel_panning_compat; + bx_bool pixel_clock_select; + bx_bool internal_palette_size; + } mode_ctrl; + } attribute_ctrl; + + struct { + Bit8u write_data_register; + Bit8u write_data_cycle; /* 0, 1, 2 */ + Bit8u read_data_register; + Bit8u read_data_cycle; /* 0, 1, 2 */ + Bit8u dac_state; + struct { + Bit8u red; + Bit8u green; + Bit8u blue; + } data[256]; + Bit8u mask; + } pel; + + struct { + Bit8u index; + Bit8u set_reset; + Bit8u enable_set_reset; + Bit8u color_compare; + Bit8u data_rotate; + Bit8u raster_op; + Bit8u read_map_select; + Bit8u write_mode; + bx_bool read_mode; + bx_bool odd_even; + bx_bool chain_odd_even; + Bit8u shift_reg; + bx_bool graphics_alpha; + Bit8u memory_mapping; /* 0 = use A0000-BFFFF + * 1 = use A0000-AFFFF EGA/VGA graphics modes + * 2 = use B0000-B7FFF Monochrome modes + * 3 = use B8000-BFFFF CGA modes + */ + Bit8u color_dont_care; + Bit8u bitmask; + Bit8u latch[4]; + } graphics_ctrl; + + struct { + Bit8u index; + Bit8u map_mask; + bx_bool reset1; + bx_bool reset2; + Bit8u reg1; + Bit8u char_map_select; + bx_bool extended_mem; + bx_bool odd_even; + bx_bool chain_four; + } sequencer; + + bx_bool vga_enabled; + bx_bool vga_mem_updated; + unsigned x_tilesize; + unsigned y_tilesize; + unsigned line_offset; + unsigned line_compare; + unsigned vertical_display_end; + unsigned blink_counter; + bx_bool vga_tile_updated[BX_NUM_X_TILES][BX_NUM_Y_TILES]; + Bit8u *memory; + Bit32u memsize; + Bit8u text_snapshot[128 * 1024]; // current text snapshot + Bit8u tile[X_TILESIZE * Y_TILESIZE * 4]; /**< Currently allocates the tile as large as needed. */ + Bit16u charmap_address; + bx_bool x_dotclockdiv2; + bx_bool y_doublescan; + Bit8u last_bpp; + } s; // state information + +#if BX_SUPPORT_VBE + struct { + Bit16u cur_dispi; + Bit32u base_address; + Bit16u xres; + Bit16u yres; + Bit16u bpp; + Bit16u max_xres; + Bit16u max_yres; + Bit16u max_bpp; + Bit16u bank; + bx_bool enabled; + Bit16u curindex; + Bit32u visible_screen_size; /**< in bytes */ + Bit16u offset_x; /**< Virtual screen x start (in pixels) */ + Bit16u offset_y; /**< Virtual screen y start (in pixels) */ + Bit16u virtual_xres; + Bit16u virtual_yres; + Bit32u virtual_start; /**< For dealing with bpp>8, this is where the virtual screen starts. */ + Bit8u bpp_multiplier; /**< We have to save this b/c sometimes we need to recalculate stuff with it. */ + bx_bool lfb_enabled; + bx_bool get_capabilities; + bx_bool dac_8bit; + } vbe; // VBE state information +#endif + + int timer_id; + bx_bool extension_init; + bx_bool extension_checked; +}; + +#if BX_SUPPORT_CLGD54XX +void bx_vga_set_smf_pointer(bx_vga_c *theVga_ptr); +#endif + +#endif diff --git a/bochs/iodev/virt_timer.cc b/bochs/iodev/virt_timer.cc new file mode 100644 index 00000000..1eb83792 --- /dev/null +++ b/bochs/iodev/virt_timer.cc @@ -0,0 +1,572 @@ +//////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +//////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////// +// +//Realtime Algorithm (with gettimeofday) +// HAVE: +// Real number of usec. +// Emulated number of usec. +// WANT: +// Number of ticks to use. +// Number of emulated usec to wait until next try. +// +// ticks=number of ticks needed to match total real usec. +// if(desired ticks > max ticks for elapsed real time) +// ticks = max ticks for elapsed real time. +// if(desired ticks > max ticks for elapsed emulated usec) +// ticks = max ticks for emulated usec. +// next wait ticks = number of ticks until next event. +// next wait real usec = (current ticks + next wait ticks) * usec per ticks +// next wait emulated usec = next wait real usec * emulated usec / real usec +// if(next wait emulated usec < minimum emulated usec for next wait ticks) +// next wait emulated usec = minimum emulated usec for next wait ticks. +// if(next wait emulated usec > max emulated usec wait) +// next wait emulated usec = max emulated usec wait. +// +// How to calculate elapsed real time: +// store an unused time value whenever no ticks are used in a given time. +// add this to the current elapsed time. +// How to calculate elapsed emulated time: +// same as above. +// Above can be done by not updating last_usec and last_sec. +// +// How to calculate emulated usec/real usec: +// Each time there are actual ticks: +// Alpha_product(old emulated usec, emulated usec); +// Alpha_product(old real usec, real usec); +// Divide resulting values. +// +///////////////////////////////////////////////////////////////////////// + +#include "bochs.h" +#include "param_names.h" +#include "virt_timer.h" + +#define BX_USE_VIRTUAL_TIMERS 1 +#define BX_VIRTUAL_TIMERS_REALTIME 1 + +//Important constant #defines: +#define USEC_PER_SECOND (1000000) + + +// define a macro to convert floating point numbers into 64-bit integers. +// In MSVC++ you can convert a 64-bit float into a 64-bit signed integer, +// but it will not convert a 64-bit float into a 64-bit unsigned integer. +// This macro works around that. +#define F2I(x) ((Bit64u)(Bit64s) (x)) +#define I2F(x) ((double)(Bit64s) (x)) + +//CONFIGURATION #defines: + + +//MAINLINE Configuration (For realtime PIT): + +//How much faster than real time we can go: +#define MAX_MULT (1.25) + +//Minimum number of emulated useconds per second. +// Now calculated using BX_MIN_IPS, the minimum number of +// instructions per second. +#define MIN_USEC_PER_SECOND (((((Bit64u)USEC_PER_SECOND)*((Bit64u)BX_MIN_IPS))/((Bit64u)ips))+(Bit64u)1) + + +//DEBUG configuration: + +//Debug with printf options. +#define DEBUG_REALTIME_WITH_PRINTF 0 + +//Use to test execution at multiples of real time. +#define TIME_DIVIDER (1) +#define TIME_MULTIPLIER (1) +#define TIME_HEADSTART (0) + + +#define GET_VIRT_REALTIME64_USEC() (((bx_get_realtime64_usec()*(Bit64u)TIME_MULTIPLIER/(Bit64u)TIME_DIVIDER))) +//Set up Logging. +#define LOG_THIS bx_virt_timer. + +//A single instance. +bx_virt_timer_c bx_virt_timer; + + +//Generic MAX and MIN Functions +#define BX_MAX(a,b) ( ((a)>(b))?(a):(b) ) +#define BX_MIN(a,b) ( ((a)>(b))?(b):(a) ) + + +//USEC_ALPHA is multiplier for the past. +//USEC_ALPHA_B is 1-USEC_ALPHA, or multiplier for the present. +#define USEC_ALPHA ((double)(.8)) +#define USEC_ALPHA_B ((double)(((double)1)-USEC_ALPHA)) +#define USEC_ALPHA2 ((double)(.5)) +#define USEC_ALPHA2_B ((double)(((double)1)-USEC_ALPHA2)) +#define ALPHA_LOWER(old,new) ((Bit64u)((old0); + BX_ASSERT(!in_timer_handler); + + if(last_sequential_time >= current_timers_time) { + periodic(1); + last_sequential_time = current_timers_time; + } + return current_timers_time; +} + + +//Register a timer handler to go off after a given interval. +//Register a timer handler to go off with a periodic interval. +int bx_virt_timer_c::register_timer(void *this_ptr, bx_timer_handler_t handler, + Bit32u useconds, + bx_bool continuous, bx_bool active, + const char *id) +{ + if(!use_virtual_timers) { + return bx_pc_system.register_timer(this_ptr, handler, useconds, + continuous, active, id); + } + + //We don't like starting with a zero period timer. + BX_ASSERT((!active) || (useconds>0)); + + //Search for an unused timer. + unsigned int i; + for (i=0; i < numTimers; i++) { + if (timer[i].inUse == 0 || i==numTimers) + break; + } + // If we didn't find a free slot, increment the bound, numTimers. + if (i==numTimers) + numTimers++; // One new timer installed. + BX_ASSERT(numTimers0); + + timer[timer_index].period=useconds; + timer[timer_index].timeToFire = current_timers_time + (Bit64u)useconds; + timer[timer_index].active=1; + timer[timer_index].continuous=continuous; + + if(useconds < timers_next_event_time) { + timers_next_event_time = useconds; + next_event_time_update(); + //FIXME + } +} + +//deactivate (but don't unregister) a currently registered timer. +void bx_virt_timer_c::deactivate_timer(unsigned timer_index) +{ + if(!use_virtual_timers) { + bx_pc_system.deactivate_timer(timer_index); + return; + } + + BX_ASSERT(timer_index < BX_MAX_VIRTUAL_TIMERS); + + //No need to prevent doing this to unused/inactive timers. + timer[timer_index].active = 0; +} + +void bx_virt_timer_c::advance_virtual_time(Bit64u time_passed) +{ + BX_ASSERT(time_passed <= virtual_next_event_time); + + current_virtual_time += time_passed; + virtual_next_event_time -= time_passed; + + if(current_virtual_time > current_timers_time) { + periodic(current_virtual_time - current_timers_time); + } +} + +//Called when next_event_time changes. +void bx_virt_timer_c::next_event_time_update(void) +{ + virtual_next_event_time = timers_next_event_time + current_timers_time - current_virtual_time; + if(init_done) { + bx_pc_system.deactivate_timer(system_timer_id); + BX_ASSERT(virtual_next_event_time); + bx_pc_system.activate_timer(system_timer_id, + (Bit32u)BX_MIN(0x7FFFFFFF,BX_MAX(1,TICKS_TO_USEC(virtual_next_event_time))), + 0); + } +} + +void bx_virt_timer_c::setup(void) +{ + numTimers = 0; + current_timers_time = 0; + timers_next_event_time = BX_MAX_VIRTUAL_TIME; + last_sequential_time = 0; + in_timer_handler = 0; + virtual_next_event_time = BX_MAX_VIRTUAL_TIME; + current_virtual_time = 0; + + use_virtual_timers = BX_USE_VIRTUAL_TIMERS; + init_done = 0; +} + +void bx_virt_timer_c::init(void) +{ + if ((SIM->get_param_enum(BXPN_CLOCK_SYNC)->get()!=BX_CLOCK_SYNC_REALTIME) && + (SIM->get_param_enum(BXPN_CLOCK_SYNC)->get()!=BX_CLOCK_SYNC_BOTH)) + virtual_timers_realtime = 0; + else + virtual_timers_realtime = 1; + + if (virtual_timers_realtime) { + BX_INFO(("using 'realtime pit' synchronization method")); + } + + // Local copy of IPS value to avoid reading it frequently in timer handler + ips = SIM->get_param_num(BXPN_IPS)->get(); + + register_timer(this, nullTimer, (Bit32u)NullTimerInterval, 1, 1, "Null Timer"); + + system_timer_id = bx_pc_system.register_timer(this, pc_system_timer_handler, + (Bit32u)virtual_next_event_time, 0, 1, "Virtual Timer"); + + //Real time variables: +#if BX_HAVE_REALTIME_USEC + last_real_time=GET_VIRT_REALTIME64_USEC()+(Bit64u)TIME_HEADSTART*(Bit64u)USEC_PER_SECOND; +#endif + total_real_usec=0; + last_realtime_delta=0; + //System time variables: + last_usec = 0; + usec_per_second = USEC_PER_SECOND; + stored_delta=0; + last_system_usec=0; + em_last_realtime=0; + //Virtual timer variables: + total_ticks=0; + last_realtime_ticks=0; + ticks_per_second = USEC_PER_SECOND; + + init_done = 1; +} + +void bx_virt_timer_c::register_state(void) +{ + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "virt_timer", "Virtual Timer State", 17); + bx_list_c *vtimers = new bx_list_c(list, "timer", numTimers); + for (unsigned i = 0; i < numTimers; i++) { + char name[4]; + sprintf(name, "%d", i); + bx_list_c *bxtimer = new bx_list_c(vtimers, name, 5); + BXRS_PARAM_BOOL(bxtimer, inUse, timer[i].inUse); + BXRS_DEC_PARAM_FIELD(bxtimer, period, timer[i].period); + BXRS_DEC_PARAM_FIELD(bxtimer, timeToFire, timer[i].timeToFire); + BXRS_PARAM_BOOL(bxtimer, active, timer[i].active); + BXRS_PARAM_BOOL(bxtimer, continuous, timer[i].continuous); + } + BXRS_DEC_PARAM_SIMPLE(list, current_timers_time); + BXRS_DEC_PARAM_SIMPLE(list, timers_next_event_time); + BXRS_DEC_PARAM_SIMPLE(list, last_sequential_time); + BXRS_DEC_PARAM_SIMPLE(list, virtual_next_event_time); + BXRS_DEC_PARAM_SIMPLE(list, current_virtual_time); + BXRS_DEC_PARAM_SIMPLE(list, last_real_time); + BXRS_DEC_PARAM_SIMPLE(list, total_real_usec); + BXRS_DEC_PARAM_SIMPLE(list, last_realtime_delta); + BXRS_DEC_PARAM_SIMPLE(list, last_usec); + BXRS_DEC_PARAM_SIMPLE(list, usec_per_second); + BXRS_DEC_PARAM_SIMPLE(list, stored_delta); + BXRS_DEC_PARAM_SIMPLE(list, last_system_usec); + BXRS_DEC_PARAM_SIMPLE(list, em_last_realtime); + BXRS_DEC_PARAM_SIMPLE(list, total_ticks); + BXRS_DEC_PARAM_SIMPLE(list, last_realtime_ticks); + BXRS_DEC_PARAM_SIMPLE(list, ticks_per_second); + +} + +void bx_virt_timer_c::timer_handler(void) +{ + if(!virtual_timers_realtime) { + Bit64u temp_final_time = bx_pc_system.time_usec(); + temp_final_time-=current_virtual_time; + while(temp_final_time) { + if((temp_final_time)>(virtual_next_event_time)) { + temp_final_time-=virtual_next_event_time; + advance_virtual_time(virtual_next_event_time); + } else { + advance_virtual_time(temp_final_time); + temp_final_time-=temp_final_time; + } + } + bx_pc_system.activate_timer(system_timer_id, + (Bit32u)BX_MIN(0x7FFFFFFF,(virtual_next_event_time>2)?(virtual_next_event_time-2):1), + 0); + return; + } + + Bit64u usec_delta = bx_pc_system.time_usec()-last_usec; + + if (usec_delta) { +#if BX_HAVE_REALTIME_USEC + Bit64u ticks_delta = 0; + Bit64u real_time_delta = GET_VIRT_REALTIME64_USEC() - last_real_time; + Bit64u real_time_total = real_time_delta + total_real_usec; + Bit64u system_time_delta = (Bit64u)usec_delta + (Bit64u)stored_delta; + if(real_time_delta) { + last_realtime_delta = real_time_delta; + last_realtime_ticks = total_ticks; + } + ticks_per_second = USEC_PER_SECOND; + + //Start out with the number of ticks we would like + // to have to line up with real time. + ticks_delta = real_time_total - total_ticks; + if(real_time_total < total_ticks) { + //This slows us down if we're already ahead. + // probably only an issue on startup, but it solves some problems. + ticks_delta = 0; + } + if(ticks_delta + total_ticks - last_realtime_ticks > (F2I(MAX_MULT * I2F(last_realtime_delta)))) { + //This keeps us from going too fast in relation to real time. +#if 0 + ticks_delta = (F2I(MAX_MULT * I2F(last_realtime_delta))) + last_realtime_ticks - total_ticks; +#endif + ticks_per_second = F2I(MAX_MULT * I2F(USEC_PER_SECOND)); + } + if(ticks_delta > system_time_delta * USEC_PER_SECOND / MIN_USEC_PER_SECOND) { + //This keeps us from having too few instructions between ticks. + ticks_delta = system_time_delta * USEC_PER_SECOND / MIN_USEC_PER_SECOND; + } + if(ticks_delta > virtual_next_event_time) { + //This keeps us from missing ticks. + ticks_delta = virtual_next_event_time; + } + + if(ticks_delta) { + +# if DEBUG_REALTIME_WITH_PRINTF + //Every second print some info. + if(((last_real_time + real_time_delta) / USEC_PER_SECOND) > (last_real_time / USEC_PER_SECOND)) { + Bit64u temp1, temp2, temp3, temp4; + temp1 = (Bit64u) total_real_usec; + temp2 = (total_real_usec); + temp3 = (Bit64u)total_ticks; + temp4 = (Bit64u)((total_real_usec) - total_ticks); + printf("useconds: " FMT_LL "u, ", temp1); + printf("expect ticks: " FMT_LL "u, ", temp2); + printf("ticks: " FMT_LL "u, ", temp3); + printf("diff: "FMT_LL "u\n", temp4); + } +# endif + + last_real_time += real_time_delta; + total_real_usec += real_time_delta; + last_system_usec += system_time_delta; + stored_delta = 0; + total_ticks += ticks_delta; + } else { + stored_delta = system_time_delta; + } + + Bit64u a = usec_per_second, b; + if(real_time_delta) { + //FIXME + Bit64u em_realtime_delta = last_system_usec + stored_delta - em_last_realtime; + b=((Bit64u)USEC_PER_SECOND * em_realtime_delta / real_time_delta); + em_last_realtime = last_system_usec + stored_delta; + } else { + b=a; + } + usec_per_second = ALPHA_LOWER(a,b); +#else + BX_ASSERT(0); +#endif +#if BX_HAVE_REALTIME_USEC + advance_virtual_time(ticks_delta); +#endif + } + + last_usec=last_usec + usec_delta; + bx_pc_system.deactivate_timer(system_timer_id); + BX_ASSERT(virtual_next_event_time); + bx_pc_system.activate_timer(system_timer_id, + (Bit32u)BX_MIN(0x7FFFFFFF,BX_MAX(1,TICKS_TO_USEC(virtual_next_event_time))), + 0); +} + +void bx_virt_timer_c::pc_system_timer_handler(void* this_ptr) +{ + ((bx_virt_timer_c *)this_ptr)->timer_handler(); +} diff --git a/bochs/iodev/virt_timer.h b/bochs/iodev/virt_timer.h new file mode 100644 index 00000000..936ddd69 --- /dev/null +++ b/bochs/iodev/virt_timer.h @@ -0,0 +1,154 @@ +//////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +#ifndef _BX_VIRT_TIMER_H +#define _BX_VIRT_TIMER_H + +// should be adjusted if want to support more SMP processors +#define BX_MAX_VIRTUAL_TIMERS (32) +#define BX_NULL_VIRTUAL_TIMER_HANDLE 10000 + +#define BX_MAX_VIRTUAL_TIME (0x7fffffff) + +class BOCHSAPI bx_virt_timer_c : public logfunctions { +private: + + struct { + bx_bool inUse; // Timer slot is in-use (currently registered). + Bit64u period; // Timer periodocity in virtual useconds. + Bit64u timeToFire; // Time to fire next (in virtual useconds). + bx_bool active; // 0=inactive, 1=active. + bx_bool continuous; // 0=one-shot timer, 1=continuous periodicity. + bx_timer_handler_t funct; // A callback function for when the + // timer fires. + // This function MUST return. + void *this_ptr; // The this-> pointer for C++ callbacks + // has to be stored as well. + char id[BxMaxTimerIDLen]; // String ID of timer. + } timer[BX_MAX_VIRTUAL_TIMERS]; + + unsigned numTimers; // Number of currently allocated timers. + + //Variables for the timer subsystem: + Bit64u current_timers_time; + Bit64u timers_next_event_time; + + Bit64u last_sequential_time; + bx_bool in_timer_handler; + + //Variables for the time sync subsystem: + Bit64u virtual_next_event_time; + Bit64u current_virtual_time; + + //Real time variables: + Bit64u last_real_time; + Bit64u total_real_usec; + Bit64u last_realtime_delta; + //System time variables: + Bit64u last_usec; + Bit64u usec_per_second; + Bit64u stored_delta; + Bit64u last_system_usec; + Bit64u em_last_realtime; + //Virtual timer variables: + Bit64u total_ticks; + Bit64u last_realtime_ticks; + Bit64u ticks_per_second; + + // Local copy of IPS value + Bit64u ips; + + bx_bool init_done; + + int system_timer_id; + + //Whether or not to use virtual timers. + bx_bool use_virtual_timers; + bx_bool virtual_timers_realtime; + + // A special null timer is always inserted in the timer[0] slot. This + // make sure that at least one timer is always active, and that the + // duration is always less than a maximum 32-bit integer, so a 32-bit + // counter can be used for the current countdown. + static const Bit64u NullTimerInterval; + static void nullTimer(void* this_ptr); + + //Step the given number of cycles, optionally calling any timer handlers. + void periodic(Bit64u time_passed); + + //Called when next_event_time changes. + void next_event_time_update(void); + + //Called to advance the virtual time. + // calls periodic as needed. + void advance_virtual_time(Bit64u time_passed); + +public: + + bx_virt_timer_c(); + virtual ~bx_virt_timer_c() {} + + //Get the current virtual time. + // This may return the same value on subsequent calls. + Bit64u time_usec(void); + + //Get the current virtual time. + // This will return a monotonically increasing value. + // MUST NOT be called from within a timer handler. + Bit64u time_usec_sequential(void); + + //Register a timer handler to go off after a given interval. + //Register a timer handler to go off with a periodic interval. + int register_timer(void *this_ptr, bx_timer_handler_t handler, + Bit32u useconds, + bx_bool continuous, bx_bool active, const char *id); + + //unregister a previously registered timer. + bx_bool unregisterTimer(unsigned timerID); + + void start_timers(void); + + //activate a deactivated but registered timer. + void activate_timer(unsigned timer_index, Bit32u useconds, + bx_bool continuous); + + //deactivate (but don't unregister) a currently registered timer. + void deactivate_timer(unsigned timer_index); + + + //Timer handler passed to pc_system + static void pc_system_timer_handler(void* this_ptr); + + //The real timer handler. + void timer_handler(); + + //Initialization step #1 in constructor and for cleanup + void setup(void); + + //Initialization step #2 + void init(void); + + void register_state(void); +}; + +BOCHSAPI extern bx_virt_timer_c bx_virt_timer; + +#endif // _BX_VIRT_TIMER_H diff --git a/bochs/iodev/vmware3.cc b/bochs/iodev/vmware3.cc new file mode 100644 index 00000000..d30a276b --- /dev/null +++ b/bochs/iodev/vmware3.cc @@ -0,0 +1,526 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +/* + * This file provides support for VMWare's virtual disk image + * format version 3. + * + * Author: Sharvil Nanavati, for Net Integration Technologies, Inc. + * Contact: snrrrub@yahoo.com + * + * Copyright (C) 2003 Net Integration Technologies, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "hdimage.h" +#include "vmware3.h" + +const off_t vmware3_image_t::INVALID_OFFSET=(off_t)-1; + +#define LOG_THIS bx_devices.pluginHDImageCtl-> + +#define DTOH32_HEADER(field) (header.field = (dtoh32(header.field))) +#define HTOD32_HEADER(field) (header.field = (htod32(header.field))) + +int vmware3_image_t::read_header(int fd, COW_Header & header) +{ + int res; + + if((res = ::read(fd, &header, sizeof(COW_Header))) < 0) + return res; + + DTOH32_HEADER(header_version); + DTOH32_HEADER(flags); + DTOH32_HEADER(total_sectors); + DTOH32_HEADER(tlb_size_sectors); + DTOH32_HEADER(flb_offset_sectors); + DTOH32_HEADER(flb_count); + DTOH32_HEADER(next_sector_to_allocate); + DTOH32_HEADER(cylinders); + DTOH32_HEADER(heads); + DTOH32_HEADER(sectors); + DTOH32_HEADER(last_modified_time); + DTOH32_HEADER(last_modified_time_save); + DTOH32_HEADER(chain_id); + DTOH32_HEADER(number_of_chains); + DTOH32_HEADER(cylinders_in_disk); + DTOH32_HEADER(heads_in_disk); + DTOH32_HEADER(sectors_in_disk); + DTOH32_HEADER(total_sectors_in_disk); + DTOH32_HEADER(vmware_version); + + return res; +} + +int vmware3_image_t::write_header(int fd, COW_Header & hostHeader) +{ + COW_Header header; + + memcpy(&header, &hostHeader, sizeof(COW_Header)); + + HTOD32_HEADER(header_version); + HTOD32_HEADER(flags); + HTOD32_HEADER(total_sectors); + HTOD32_HEADER(tlb_size_sectors); + HTOD32_HEADER(flb_offset_sectors); + HTOD32_HEADER(flb_count); + HTOD32_HEADER(next_sector_to_allocate); + HTOD32_HEADER(cylinders); + HTOD32_HEADER(heads); + HTOD32_HEADER(sectors); + HTOD32_HEADER(last_modified_time); + HTOD32_HEADER(last_modified_time_save); + HTOD32_HEADER(chain_id); + HTOD32_HEADER(number_of_chains); + HTOD32_HEADER(cylinders_in_disk); + HTOD32_HEADER(heads_in_disk); + HTOD32_HEADER(sectors_in_disk); + HTOD32_HEADER(total_sectors_in_disk); + HTOD32_HEADER(vmware_version); + + return ::write(fd, &header, sizeof(COW_Header)); +} + +#undef DTOH32_HEADER +#undef HTOD32_HEADER + +int vmware3_image_t::read_ints(int fd, Bit32u *buffer, size_t count) +{ + int res; + size_t i; + Bit32u *p; + + res=::read(fd, (void*)buffer, count * 4); + for (p = buffer, i=0; ifd = ::open(filename, flags); + if(current->fd < 0) + BX_PANIC(("unable to open vmware3 COW Disk file '%s'", filename)); + + if(read_header(current->fd, current->header) < 0) + BX_PANIC(("unable to read header or invalid header in vmware3 COW Disk file '%s'", filename)); + + if(!is_valid_header(current->header)) + BX_PANIC(("invalid vmware3 COW Disk file '%s'", filename)); + + current->flb = new unsigned [current->header.flb_count]; + if(current->flb == 0) + BX_PANIC(("cannot allocate %d bytes for flb in vmware3 COW Disk '%s'", current->header.flb_count * 4, filename)); + + current->slb = new unsigned * [current->header.flb_count]; + if(current->slb == 0) + BX_PANIC(("cannot allocate %d bytes for slb in vmware3 COW Disk '%s'", current->header.flb_count * 4, filename)); + + unsigned j; + for(j = 0; j < current->header.flb_count; ++j) + { + current->slb[j] = new unsigned [slb_count]; + if(current->slb[j] == 0) + BX_PANIC(("cannot allocate %d bytes for slb[] in vmware3 COW Disk '%s'", slb_count * 4, filename)); + } + + current->tlb = new Bit8u [tlb_size]; + if(current->tlb == 0) + BX_PANIC(("cannot allocate %d bytes for tlb in vmware3 COW Disk '%s'", tlb_size, filename)); + + if(::lseek(current->fd, current->header.flb_offset_sectors * 512, SEEK_SET) < 0) + BX_PANIC(("unable to seek vmware3 COW Disk file '%s'", filename)); + + if(read_ints(current->fd, current->flb, current->header.flb_count) < 0) + BX_PANIC(("unable to read flb from vmware3 COW Disk file '%s'", filename)); + + for(j = 0; j < current->header.flb_count; ++j) + if(current->flb[j] != 0) + { + if(::lseek(current->fd, current->flb[j] * 512, SEEK_SET) < 0) + BX_PANIC(("unable to seek vmware3 COW Disk file '%s'", filename)); + if(read_ints(current->fd, current->slb[j], slb_count) < 0) + BX_PANIC(("unable to read slb from vmware3 COW Disk file '%s'", filename)); + } + + current->min_offset = offset; + offset += current->header.total_sectors * 512; + current->max_offset = offset; + + current->offset = INVALID_OFFSET; + current->synced = true; + delete[] filename; + } + current = &images[0]; + requested_offset = 0; + if (header.total_sectors_in_disk!=0) { + cylinders = header.cylinders_in_disk; + heads = header.heads_in_disk; + sectors = header.sectors_in_disk; + hd_size = header.total_sectors_in_disk * 512; + } else { + cylinders = header.cylinders; + heads = header.heads; + sectors = header.sectors; + hd_size = header.total_sectors * 512; + } + + return 1; +} + +off_t vmware3_image_t::perform_seek() +{ + if(requested_offset < current->min_offset || requested_offset >= current->max_offset) + { + if(!sync()) + { + BX_DEBUG(("could not sync before switching vmware3 COW files")); + return INVALID_OFFSET; + } + + while(requested_offset < current->min_offset) + current = &images[current->header.chain_id - 1]; + + while(requested_offset >= current->max_offset) + current = &images[current->header.chain_id + 1]; + } + + if(current->offset != INVALID_OFFSET && requested_offset >= current->offset + && requested_offset < current->offset + tlb_size) + return (requested_offset - current->offset); + + if(!sync()) + { + BX_DEBUG(("could not sync before seeking vmware3 COW file")); + return INVALID_OFFSET; + } + + unsigned relative_offset = (unsigned)(requested_offset - current->min_offset); + unsigned i = relative_offset >> FL_SHIFT; + unsigned j = (relative_offset & ~FL_MASK) / tlb_size; + + if(current->slb[i][j]) + { + if(::lseek(current->fd, current->slb[i][j] * 512, SEEK_SET) < 0) + { + BX_DEBUG(("could not seek vmware3 COW to sector slb[%d][%d]", i, j)); + return INVALID_OFFSET; + } + if(::read(current->fd, current->tlb, tlb_size) < 0) + { + BX_DEBUG(("could not read %d bytes from vmware3 COW image", tlb_size)); + return INVALID_OFFSET; + } + } + else + memset(current->tlb, 0, tlb_size); + + current->offset = (requested_offset / tlb_size) * tlb_size; + return (requested_offset - current->offset); +} + +ssize_t vmware3_image_t::read(void * buf, size_t count) +{ + ssize_t total = 0; + while(count > 0) + { + off_t offset = perform_seek(); + if(offset == INVALID_OFFSET) + { + BX_DEBUG(("vmware3 COW read failed on %u bytes", (unsigned)count)); + return -1; + } + unsigned bytes_remaining = (unsigned)(tlb_size - offset); + unsigned amount = (bytes_remaining > count) ? count : bytes_remaining; + memcpy(buf, current->tlb + offset, amount); + requested_offset += amount; + total += amount; + count -= amount; + } + return total; +} + +/* This could be done much better, I'm sure. In fact, the whole header doesn't + * need to be re-written each time a new tlb is allocated nor does the whole + * slb need to be re-written (most of the time) but that can be changed whenever + * it becomes an issue... image I/O is not a bottleneck. + */ +bool vmware3_image_t::sync() +{ + if(current->synced) + return true; + + unsigned relative_offset = (unsigned)(current->offset - current->min_offset); + unsigned i = relative_offset >> FL_SHIFT; + unsigned j = (relative_offset & ~FL_MASK) / tlb_size; + + if (current->slb[i][j] == 0) + { + if (current->flb[i] == 0) + { + unsigned slb_size = slb_count * 4; + + /* Re-write the FLB */ + current->flb[i] = current->header.next_sector_to_allocate; + if(::lseek(current->fd, current->header.flb_offset_sectors * 512, SEEK_SET) < 0) + { + BX_DEBUG(("could not seek vmware3 COW image to flb on sync")); + return false; + } + if(write_ints(current->fd, current->flb, current->header.flb_count) < 0) + { + BX_DEBUG(("could not re-write flb to vmware3 COW image on sync")); + return false; + } + current->header.next_sector_to_allocate += (slb_size / 512) + ((slb_size % 512) ? 1 : 0); + } + + /* Re-write the SLB */ + current->slb[i][j] = current->header.next_sector_to_allocate; + if(::lseek(current->fd, current->flb[i] * 512, SEEK_SET) < 0) + { + BX_DEBUG(("could not seek vmware3 COW image to slb on sync")); + return false; + } + if(write_ints(current->fd, current->slb[i], slb_count) < 0) + { + BX_DEBUG(("could not re-write slb to vmware3 COW image on sync")); + return false; + } + current->header.next_sector_to_allocate += current->header.tlb_size_sectors; + + /* Update the header */ + if(::lseek(current->fd, 0, SEEK_SET) < 0) + { + BX_DEBUG(("could not seek to vmware3 COW image to offset 0 on sync")); + return false; + } + if(write_header(current->fd, current->header) < 0) + { + BX_DEBUG(("could not re-write header to vmware3 COW image on sync")); + return false; + } + } + if(::lseek(current->fd, current->slb[i][j] * 512, SEEK_SET) < 0) + { + BX_DEBUG(("could not seek vmware3 COW image to offset %d on sync", current->slb[i][j] * 512)); + return false; + } + if(::write(current->fd, current->tlb, tlb_size) < 0) + { + BX_DEBUG(("could not write tlb to vmware3 COW image on sync")); + return false; + } + current->synced = true; + return true; +} + +ssize_t vmware3_image_t::write(const void * buf, size_t count) +{ + ssize_t total = 0; + while(count > 0) + { + off_t offset = perform_seek(); + if(offset == INVALID_OFFSET) + return -1; + unsigned bytes_remaining = (unsigned)(tlb_size - offset); + unsigned amount = 0; + current->synced = false; + if(bytes_remaining > count) + { + memcpy(current->tlb + offset, buf, count); + amount = count; + } + else + { + memcpy(current->tlb + offset, buf, bytes_remaining); + if(!sync()) + { + BX_DEBUG(("failed to sync when writing %u bytes", (unsigned)count)); + return -1; + } + amount = bytes_remaining; + } + requested_offset += amount; + total += amount; + count -= amount; + } + return total; +} + +Bit64s vmware3_image_t::lseek(Bit64s offset, int whence) +{ + if(whence == SEEK_SET) + requested_offset = (off_t)offset; + else if (whence == SEEK_CUR) + requested_offset += (off_t)offset; + else if (whence == SEEK_END) + requested_offset = (off_t)(current->header.total_sectors_in_disk * 512) + (off_t)offset; + else + { + BX_DEBUG(("unknown 'whence' value (%d) when trying to seek vmware3 COW image", whence)); + return -1; + } + return requested_offset; +} + +void vmware3_image_t::close() +{ + if(current == 0) + return; + + unsigned count = current->header.number_of_chains; + if (count < 1) count = 1; + for(unsigned i = 0; i < count; ++i) + { + if (images != NULL) + { + current = &images[i]; + for(unsigned j = 0; j < current->header.flb_count; ++j) + delete[] current->slb[j]; + delete[] current->flb; + delete[] current->slb; + delete[] current->tlb; + ::close(current->fd); + delete[] images; + images = NULL; + } + } + current = 0; +} + +Bit32u vmware3_image_t::get_capabilities(void) +{ + return HDIMAGE_HAS_GEOMETRY; +} diff --git a/bochs/iodev/vmware3.h b/bochs/iodev/vmware3.h new file mode 100644 index 00000000..1e33143d --- /dev/null +++ b/bochs/iodev/vmware3.h @@ -0,0 +1,126 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +/* + * This file provides the interface for using VMWare's virtual + * disk image format under Bochs. + * + * Author: Sharvil Nanavati, for Net Integration Technologies, Inc. + * Contact: snrrrub@yahoo.com + * + * Copyright (C) 2003 Net Integration Technologies, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _COWDISK_H +#define _COWDISK_H 1 + +class vmware3_image_t : public device_image_t +{ + public: + vmware3_image_t() : FL_SHIFT(25), FL_MASK(0xFE000000) + { }; + int open(const char* pathname); + void close(); + Bit64s lseek(Bit64s offset, int whence); + ssize_t read(void* buf, size_t count); + ssize_t write(const void* buf, size_t count); + Bit32u get_capabilities(); + + private: + static const off_t INVALID_OFFSET; + +#if defined(_MSC_VER) && (_MSC_VER<1300) +#pragma pack(push, 1) +#elif defined(__MWERKS__) && defined(macintosh) +#pragma options align=packed +#endif + typedef +#if defined(_MSC_VER) && (_MSC_VER>=1300) + __declspec(align(1)) +#endif + struct _COW_Header { + Bit8u id[4]; + Bit32u header_version; + Bit32u flags; + Bit32u total_sectors; + Bit32u tlb_size_sectors; + Bit32u flb_offset_sectors; + Bit32u flb_count; + Bit32u next_sector_to_allocate; + Bit32u cylinders; + Bit32u heads; + Bit32u sectors; + Bit8u PAD0[1016]; + Bit32u last_modified_time; + Bit8u PAD1[572]; + Bit32u last_modified_time_save; + Bit8u label[8]; + Bit32u chain_id; + Bit32u number_of_chains; + Bit32u cylinders_in_disk; + Bit32u heads_in_disk; + Bit32u sectors_in_disk; + Bit32u total_sectors_in_disk; + Bit8u PAD2[8]; + Bit32u vmware_version; + Bit8u PAD3[364]; + } +#if !defined(_MSC_VER) + GCC_ATTRIBUTE((packed)) +#endif + COW_Header + ; +#if defined(_MSC_VER) && (_MSC_VER<1300) +#pragma pack(pop) +#elif defined(__MWERKS__) && defined(macintosh) +#pragma options align=reset +#endif + + struct COW_Image; + friend struct COW_Image; + struct COW_Image { + int fd; + COW_Header header; + Bit32u * flb; + Bit32u ** slb; + Bit8u * tlb; + off_t offset; + off_t min_offset; + off_t max_offset; + bool synced; + } * images, * current; + + int read_header(int fd, COW_Header & header); + int write_header(int fd, COW_Header & header); + + int read_ints(int fd, Bit32u *buffer, size_t count); + int write_ints(int fd, Bit32u *buffer, size_t count); + + char * generate_cow_name(const char * filename, Bit32u chain); + bool is_valid_header(COW_Header & header); + off_t perform_seek(); + bool sync(); + + const Bit32u FL_SHIFT; + const Bit32u FL_MASK; + + off_t requested_offset; + Bit32u slb_count; + Bit32u tlb_size; +}; +#endif diff --git a/bochs/iodev/vmware4.cc b/bochs/iodev/vmware4.cc new file mode 100644 index 00000000..35bae1aa --- /dev/null +++ b/bochs/iodev/vmware4.cc @@ -0,0 +1,333 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +/* + * This file provides support for VMWare's virtual disk image + * format version 4 and above. + * + * Author: Sharvil Nanavati + * Contact: snrrrub@gmail.com + * + * Copyright (C) 2006 Sharvil Nanavati. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#include "hdimage.h" +#include "vmware4.h" + +#define LOG_THIS bx_devices.pluginHDImageCtl-> + +const off_t vmware4_image_t::INVALID_OFFSET = (off_t)-1; +const int vmware4_image_t::SECTOR_SIZE = 512; + +vmware4_image_t::vmware4_image_t() + : file_descriptor(-1), + tlb(0), + tlb_offset(INVALID_OFFSET), + current_offset(INVALID_OFFSET), + is_dirty(false) +{ +} + +vmware4_image_t::~vmware4_image_t() +{ + close(); +} + +int vmware4_image_t::open(const char * pathname) +{ + close(); + + int flags = O_RDWR; +#ifdef O_BINARY + flags |= O_BINARY; +#endif + + file_descriptor = ::open(pathname, flags); + + if(!is_open()) + return -1; + + if(!read_header()) + BX_PANIC(("unable to read vmware4 virtual disk header from file '%s'", pathname)); + + tlb = new Bit8u[(unsigned)header.tlb_size_sectors * SECTOR_SIZE]; + if(tlb == 0) + BX_PANIC(("unable to allocate " FMT_LL "d bytes for vmware4 image's tlb", header.tlb_size_sectors * SECTOR_SIZE)); + + tlb_offset = INVALID_OFFSET; + current_offset = 0; + is_dirty = false; + + hd_size = header.total_sectors * SECTOR_SIZE; + cylinders = (unsigned)hd_size / (16 * 63); + heads = 16; + sectors = 63; + + BX_DEBUG(("VMware 4 disk geometry:")); + BX_DEBUG((" .size = " FMT_LL "d", hd_size)); + BX_DEBUG((" .cylinders = %d", cylinders)); + BX_DEBUG((" .heads = %d", heads)); + BX_DEBUG((" .sectors = %d", sectors)); + + return 1; +} + +void vmware4_image_t::close() +{ + if(file_descriptor == -1) + return; + + flush(); + delete [] tlb; tlb = 0; + + ::close(file_descriptor); + file_descriptor = -1; +} + +Bit64s vmware4_image_t::lseek(Bit64s offset, int whence) +{ + switch(whence) + { + case SEEK_SET: + current_offset = (off_t)offset; + return current_offset; + case SEEK_CUR: + current_offset += (off_t)offset; + return current_offset; + case SEEK_END: + current_offset = header.total_sectors * SECTOR_SIZE + (off_t)offset; + return current_offset; + default: + BX_DEBUG(("unknown 'whence' value (%d) when trying to seek vmware4 image", whence)); + return INVALID_OFFSET; + } +} + +ssize_t vmware4_image_t::read(void * buf, size_t count) +{ + ssize_t total = 0; + while(count > 0) + { + off_t readable = perform_seek(); + if(readable == INVALID_OFFSET) + { + BX_DEBUG(("vmware4 disk image read failed on %u bytes at " FMT_LL "d", (unsigned)count, current_offset)); + return -1; + } + + off_t copysize = ((off_t)count > readable) ? readable : count; + memcpy(buf, tlb + current_offset - tlb_offset, (size_t)copysize); + + current_offset += copysize; + total += (long)copysize; + count -= (size_t)copysize; + } + return total; +} + +ssize_t vmware4_image_t::write(const void * buf, size_t count) +{ + ssize_t total = 0; + while(count > 0) + { + off_t writable = perform_seek(); + if(writable == INVALID_OFFSET) + { + BX_DEBUG(("vmware4 disk image write failed on %u bytes at " FMT_LL "d", (unsigned)count, current_offset)); + return -1; + } + + off_t writesize = ((off_t)count > writable) ? writable : count; + memcpy(tlb + current_offset - tlb_offset, buf, (size_t)writesize); + + current_offset += writesize; + total += (long)writesize; + count -= (size_t)writesize; + is_dirty = true; + } + return total; +} + +bool vmware4_image_t::is_open() const +{ + return (file_descriptor != -1); +} + +bool vmware4_image_t::is_valid_header() const +{ + if(header.id[0] != 'K' || header.id[1] != 'D' || header.id[2] != 'M' || + header.id[3] != 'V') + { + BX_DEBUG(("not a vmware4 image")); + return false; + } + + if(header.version != 1) + { + BX_DEBUG(("unsupported vmware4 image version")); + return false; + } + + return true; +} + +bool vmware4_image_t::read_header() +{ + if(!is_open()) + BX_PANIC(("attempt to read vmware4 header from a closed file")); + + if(::read(file_descriptor, &header, sizeof(VM4_Header)) != sizeof(VM4_Header)) + return false; + + header.version = dtoh32(header.version); + header.flags = dtoh32(header.flags); + header.total_sectors = dtoh64(header.total_sectors); + header.tlb_size_sectors = dtoh64(header.tlb_size_sectors); + header.description_offset_sectors = dtoh64(header.description_offset_sectors); + header.description_size_sectors = dtoh64(header.description_size_sectors); + header.slb_count = dtoh32(header.slb_count); + header.flb_offset_sectors = dtoh64(header.flb_offset_sectors); + header.flb_copy_offset_sectors = dtoh64(header.flb_copy_offset_sectors); + header.tlb_offset_sectors = dtoh64(header.tlb_offset_sectors); + + if(!is_valid_header()) + BX_PANIC(("invalid vmware4 virtual disk image")); + + BX_DEBUG(("VM4_Header (size=%u)", (unsigned)sizeof(VM4_Header))); + BX_DEBUG((" .version = %d", header.version)); + BX_DEBUG((" .flags = %d", header.flags)); + BX_DEBUG((" .total_sectors = " FMT_LL "d", header.total_sectors)); + BX_DEBUG((" .tlb_size_sectors = " FMT_LL "d", header.tlb_size_sectors)); + BX_DEBUG((" .description_offset_sectors = " FMT_LL "d", header.description_offset_sectors)); + BX_DEBUG((" .description_size_sectors = " FMT_LL "d", header.description_size_sectors)); + BX_DEBUG((" .slb_count = %d", header.slb_count)); + BX_DEBUG((" .flb_offset_sectors = " FMT_LL "d", header.flb_offset_sectors)); + BX_DEBUG((" .flb_copy_offset_sectors = " FMT_LL "d", header.flb_copy_offset_sectors)); + BX_DEBUG((" .tlb_offset_sectors = " FMT_LL "d", header.tlb_offset_sectors)); + + return true; +} + +// +// Returns the number of bytes that can be read from the current offset before needing +// to perform another seek. +// +off_t vmware4_image_t::perform_seek() +{ + if(current_offset == INVALID_OFFSET) + { + BX_DEBUG(("invalid offset specified in vmware4 seek")); + return INVALID_OFFSET; + } + + // + // The currently loaded tlb can service the request. + // + if(tlb_offset / (header.tlb_size_sectors * SECTOR_SIZE) == current_offset / (header.tlb_size_sectors * SECTOR_SIZE)) + return (header.tlb_size_sectors * SECTOR_SIZE) - (current_offset - tlb_offset); + + flush(); + + Bit64u index = current_offset / (header.tlb_size_sectors * SECTOR_SIZE); + Bit32u slb_index = (Bit32u)(index % header.slb_count); + Bit32u flb_index = (Bit32u)(index / header.slb_count); + + Bit32u slb_sector = read_block_index(header.flb_offset_sectors, flb_index); + Bit32u slb_copy_sector = read_block_index(header.flb_copy_offset_sectors, flb_index); + + if(slb_sector == 0 && slb_copy_sector == 0) + { + BX_DEBUG(("loaded vmware4 disk image requires un-implemented feature")); + return INVALID_OFFSET; + } + if(slb_sector == 0) + slb_sector = slb_copy_sector; + + Bit32u tlb_sector = read_block_index(slb_sector, slb_index); + tlb_offset = index * header.tlb_size_sectors * SECTOR_SIZE; + if(tlb_sector == 0) + { + // + // Allocate a new tlb + // + memset(tlb, 0, (size_t)header.tlb_size_sectors * SECTOR_SIZE); + + // + // Instead of doing a write to increase the file size, we could use + // ftruncate but it is not portable. + // + off_t eof = ((::lseek(file_descriptor, 0, SEEK_END) + SECTOR_SIZE - 1) / SECTOR_SIZE) * SECTOR_SIZE; + ::write(file_descriptor, tlb, (unsigned)header.tlb_size_sectors * SECTOR_SIZE); + tlb_sector = (Bit32u)eof / SECTOR_SIZE; + + write_block_index(slb_sector, slb_index, tlb_sector); + write_block_index(slb_copy_sector, slb_index, tlb_sector); + + ::lseek(file_descriptor, eof, SEEK_SET); + } + else + { + ::lseek(file_descriptor, tlb_sector * SECTOR_SIZE, SEEK_SET); + ::read(file_descriptor, tlb, (unsigned)header.tlb_size_sectors * SECTOR_SIZE); + ::lseek(file_descriptor, tlb_sector * SECTOR_SIZE, SEEK_SET); + } + + return (header.tlb_size_sectors * SECTOR_SIZE) - (current_offset - tlb_offset); +} + +void vmware4_image_t::flush() +{ + if(!is_dirty) + return; + + // + // Write dirty sectors to disk first. Assume that the file is already at the + // position for the current tlb. + // + ::write(file_descriptor, tlb, (unsigned)header.tlb_size_sectors * SECTOR_SIZE); + is_dirty = false; +} + +Bit32u vmware4_image_t::read_block_index(Bit64u sector, Bit32u index) +{ + Bit32u ret; + + ::lseek(file_descriptor, sector * SECTOR_SIZE + index * sizeof(Bit32u), SEEK_SET); + ::read(file_descriptor, &ret, sizeof(Bit32u)); + + return dtoh32(ret); +} + +void vmware4_image_t::write_block_index(Bit64u sector, Bit32u index, Bit32u block_sector) +{ + block_sector = htod32(block_sector); + + ::lseek(file_descriptor, sector * SECTOR_SIZE + index * sizeof(Bit32u), SEEK_SET); + ::write(file_descriptor, &block_sector, sizeof(Bit32u)); +} + +Bit32u vmware4_image_t::get_capabilities(void) +{ + return HDIMAGE_HAS_GEOMETRY; +} diff --git a/bochs/iodev/vmware4.h b/bochs/iodev/vmware4.h new file mode 100644 index 00000000..3cb9b423 --- /dev/null +++ b/bochs/iodev/vmware4.h @@ -0,0 +1,96 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// + +/* + * This file provides support for VMWare's virtual disk image + * format version 4 and above. + * + * Author: Sharvil Nanavati + * Contact: snrrrub@gmail.com + * + * Copyright (C) 2006 Sharvil Nanavati. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _VMWARE4_H +#define _VMWARE4_H 1 + +class vmware4_image_t : public device_image_t +{ + public: + vmware4_image_t(); + virtual ~vmware4_image_t(); + + int open(const char* pathname); + void close(); + Bit64s lseek(Bit64s offset, int whence); + ssize_t read(void* buf, size_t count); + ssize_t write(const void* buf, size_t count); + Bit32u get_capabilities(); + + private: + static const off_t INVALID_OFFSET; + static const int SECTOR_SIZE; + +#if defined(_MSC_VER) +#pragma pack(push, 1) +#elif defined(__MWERKS__) && defined(macintosh) +#pragma options align=packed +#endif + typedef struct _VM4_Header + { + Bit8u id[4]; + Bit32u version; + Bit32u flags; + Bit64u total_sectors; + Bit64u tlb_size_sectors; + Bit64u description_offset_sectors; + Bit64u description_size_sectors; + Bit32u slb_count; + Bit64u flb_offset_sectors; + Bit64u flb_copy_offset_sectors; + Bit64u tlb_offset_sectors; + } +#if !defined(_MSC_VER) + GCC_ATTRIBUTE((packed)) +#endif + VM4_Header; + +#if defined(_MSC_VER) +#pragma pack(pop) +#elif defined(__MWERKS__) && defined(macintosh) +#pragma options align=reset +#endif + + bool is_open() const; + bool is_valid_header() const; + + bool read_header(); + off_t perform_seek(); + void flush(); + Bit32u read_block_index(Bit64u sector, Bit32u index); + void write_block_index(Bit64u sector, Bit32u index, Bit32u block_sector); + + int file_descriptor; + VM4_Header header; + Bit8u* tlb; + off_t tlb_offset; + off_t current_offset; + bool is_dirty; +}; + +#endif diff --git a/bochs/iodev/vvfat.cc b/bochs/iodev/vvfat.cc new file mode 100644 index 00000000..4663470e --- /dev/null +++ b/bochs/iodev/vvfat.cc @@ -0,0 +1,1961 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2010/2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// Virtual VFAT image support (shadows a local directory) +// ported from the Qemu block driver (written by Johannes E. Schindelin) + +// ADDITIONS: +// - win32 specific directory functions (required for MSVC) +// - configurable disk geometry +// - read MBR and boot sector from file +// - FAT32 support +// - volatile runtime write support using the hdimage redolog_t class +// - ask user on Bochs exit if directory and file changes should be committed +// - save and restore FAT file attributes using a separate file +// - set file modification date and time after committing file changes +// - vvfat floppy support (1.44 MB media only) + +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#ifndef WIN32 +#include +#include +#endif + +#include "iodev.h" +#include "hdimage.h" +#include "vvfat.h" + +#define LOG_THIS bx_devices.pluginHDImageCtl-> + +#define VVFAT_MBR "vvfat_mbr.bin" +#define VVFAT_BOOT "vvfat_boot.bin" +#define VVFAT_ATTR "vvfat_attr.cfg" + +#if defined (BX_LITTLE_ENDIAN) +#define htod16(val) (val) +#else +#define htod16(val) ( (((val)&0xff00)>>8) | (((val)&0xff)<<8) ) +#endif +#define dtoh16 htod16 + +#ifndef F_OK +#define F_OK 0 +#endif + +// portable mkdir / rmdir +static int bx_mkdir(const char *path) +{ +#ifndef WIN32 + return mkdir(path, 0755); +#else + return (CreateDirectory(path, NULL) != 0) ? 0 : -1; +#endif +} + +static int bx_rmdir(const char *path) +{ +#ifndef WIN32 + return rmdir(path); +#else + return (RemoveDirectory(path) != 0) ? 0 : -1; +#endif +} + +// dynamic array functions +static inline void array_init(array_t* array,unsigned int item_size) +{ + array->pointer = NULL; + array->size = 0; + array->next = 0; + array->item_size = item_size; +} + +static inline void array_free(array_t* array) +{ + if (array->pointer) + free(array->pointer); + array->size=array->next = 0; +} + +// does not automatically grow +static inline void* array_get(array_t* array,unsigned int index) +{ + assert(index < array->next); + return array->pointer + index * array->item_size; +} + +static inline int array_ensure_allocated(array_t* array, int index) +{ + if ((index + 1) * array->item_size > array->size) { + int new_size = (index + 32) * array->item_size; + array->pointer = (char*)realloc(array->pointer, new_size); + if (!array->pointer) + return -1; + array->size = new_size; + array->next = index + 1; + } + return 0; +} + +static inline void* array_get_next(array_t* array) +{ + unsigned int next = array->next; + void* result; + + if (array_ensure_allocated(array, next) < 0) + return NULL; + + array->next = next + 1; + result = array_get(array, next); + + return result; +} + +static inline void* array_insert(array_t* array,unsigned int index,unsigned int count) +{ + if ((array->next+count)*array->item_size > array->size) { + int increment = count*array->item_size; + array->pointer = (char*)realloc(array->pointer, array->size+increment); + if (!array->pointer) + return NULL; + array->size += increment; + } + memmove(array->pointer+(index+count)*array->item_size, + array->pointer+index*array->item_size, + (array->next-index)*array->item_size); + array->next += count; + return array->pointer+index*array->item_size; +} + +/* this performs a "roll", so that the element which was at index_from becomes + * index_to, but the order of all other elements is preserved. */ +static inline int array_roll(array_t* array, int index_to, int index_from, int count) +{ + char* buf; + char* from; + char* to; + int is; + + if (!array || + (index_to < 0) || (index_to >= (int)array->next) || + (index_from < 0 || (index_from >= (int)array->next))) + return -1; + + if (index_to == index_from) + return 0; + + is = array->item_size; + from = array->pointer+index_from*is; + to = array->pointer+index_to*is; + buf = (char*)malloc(is*count); + memcpy(buf, from, is*count); + + if (index_to < index_from) + memmove(to+is*count, to, from-to); + else + memmove(from, from+is*count, to-from); + + memcpy(to, buf, is*count); + + free(buf); + + return 0; +} + +#if 0 +static inline int array_remove_slice(array_t* array,int index, int count) +{ + assert(index >=0); + assert(count > 0); + assert(index + count <= (int)array->next); + if (array_roll(array,array->next-1,index,count)) + return -1; + array->next -= count; + return 0; +} + +static int array_remove(array_t* array,int index) +{ + return array_remove_slice(array, index, 1); +} + +// return the index for a given member +static int array_index(array_t* array, void* pointer) +{ + size_t offset = (char*)pointer - array->pointer; + assert((offset % array->item_size) == 0); + assert(offset/array->item_size < array->next); + return offset/array->item_size; +} +#endif + +#if defined(_MSC_VER) +#pragma pack(push, 1) +#elif defined(__MWERKS__) && defined(macintosh) +#pragma options align=packed +#endif + +typedef +#if defined(_MSC_VER) && (_MSC_VER>=1300) + __declspec(align(1)) +#endif + struct bootsector_t { + Bit8u jump[3]; + Bit8u name[8]; + Bit16u sector_size; + Bit8u sectors_per_cluster; + Bit16u reserved_sectors; + Bit8u number_of_fats; + Bit16u root_entries; + Bit16u total_sectors16; + Bit8u media_type; + Bit16u sectors_per_fat; + Bit16u sectors_per_track; + Bit16u number_of_heads; + Bit32u hidden_sectors; + Bit32u total_sectors; + union { +#if defined(_MSC_VER) && (_MSC_VER>=1300) + __declspec(align(1)) +#endif + struct { + Bit8u drive_number; + Bit8u reserved; + Bit8u signature; + Bit32u id; + Bit8u volume_label[11]; + Bit8u fat_type[8]; + Bit8u ignored[0x1c0]; + } +#if !defined(_MSC_VER) + GCC_ATTRIBUTE((packed)) +#endif + fat16; +#if defined(_MSC_VER) && (_MSC_VER>=1300) + __declspec(align(1)) +#endif + struct { + Bit32u sectors_per_fat; + Bit16u flags; + Bit8u major, minor; + Bit32u first_cluster_of_root_dir; + Bit16u info_sector; + Bit16u backup_boot_sector; + Bit8u reserved1[12]; + Bit8u drive_number; + Bit8u reserved2; + Bit8u signature; + Bit32u id; + Bit8u volume_label[11]; + Bit8u fat_type[8]; + Bit8u ignored[0x1a4]; + } +#if !defined(_MSC_VER) + GCC_ATTRIBUTE((packed)) +#endif + fat32; + } u; + Bit8u magic[2]; +} +#if !defined(_MSC_VER) + GCC_ATTRIBUTE((packed)) +#endif +bootsector_t; + +typedef +#if defined(_MSC_VER) && (_MSC_VER>=1300) + __declspec(align(1)) +#endif + struct partition_t { + Bit8u attributes; /* 0x80 = bootable */ + mbr_chs_t start_CHS; + Bit8u fs_type; /* 0x1 = FAT12, 0x6 = FAT16, 0xe = FAT16_LBA, 0xb = FAT32, 0xc = FAT32_LBA */ + mbr_chs_t end_CHS; + Bit32u start_sector_long; + Bit32u length_sector_long; +} +#if !defined(_MSC_VER) + GCC_ATTRIBUTE((packed)) +#endif +partition_t; + +typedef +#if defined(_MSC_VER) && (_MSC_VER>=1300) + __declspec(align(1)) +#endif + struct mbr_t { + Bit8u ignored[0x1b8]; + Bit32u nt_id; + Bit8u ignored2[2]; + partition_t partition[4]; + Bit8u magic[2]; +} +#if !defined(_MSC_VER) + GCC_ATTRIBUTE((packed)) +#endif +mbr_t; + +typedef +#if defined(_MSC_VER) && (_MSC_VER>=1300) + __declspec(align(1)) +#endif + struct infosector_t { + Bit32u signature1; + Bit8u ignored[0x1e0]; + Bit32u signature2; + Bit32u free_clusters; + Bit32u mra_cluster; // most recently allocated cluster + Bit8u reserved[14]; + Bit8u magic[2]; +} +#if !defined(_MSC_VER) + GCC_ATTRIBUTE((packed)) +#endif +infosector_t; + +#if defined(_MSC_VER) +#pragma pack(pop) +#elif defined(__MWERKS__) && defined(macintosh) +#pragma options align=reset +#endif + +vvfat_image_t::vvfat_image_t(Bit64u size, const char* _redolog_name) +{ + first_sectors = new Bit8u[0xc000]; + memset(&first_sectors[0], 0, 0xc000); + + hd_size = size; + redolog = new redolog_t(); + redolog_temp = NULL; + redolog_name = NULL; + if (_redolog_name != NULL) { + if (strcmp(_redolog_name,"") != 0) { + redolog_name = strdup(_redolog_name); + } + } +} + +vvfat_image_t::~vvfat_image_t() +{ + delete [] first_sectors; + delete redolog; +} + +bx_bool vvfat_image_t::sector2CHS(Bit32u spos, mbr_chs_t *chs) +{ + Bit32u head, sector; + + sector = spos % sectors; + spos /= sectors; + head = spos % heads; + spos /= heads; + if (spos > 1023) { + /* Overflow, + it happens if 32bit sector positions are used, while CHS is only 24bit. + Windows/Dos is said to take 1023/255/63 as nonrepresentable CHS */ + chs->head = 0xff; + chs->sector = 0xff; + chs->cylinder = 0xff; + return 1; + } + chs->head = (Bit8u)head; + chs->sector = (Bit8u)((sector+1) | ((spos >> 8) << 6)); + chs->cylinder = (Bit8u)spos; + return 0; +} + +void vvfat_image_t::init_mbr(void) +{ + mbr_t* real_mbr = (mbr_t*)first_sectors; + partition_t* partition = &(real_mbr->partition[0]); + bx_bool lba; + + // Win NT Disk Signature + real_mbr->nt_id = htod32(0xbe1afdfa); + + partition->attributes = 0x80; // bootable + + // LBA is used when partition is outside the CHS geometry + lba = sector2CHS(offset_to_bootsector, &partition->start_CHS); + lba |= sector2CHS(sector_count - 1, &partition->end_CHS); + + // LBA partitions are identified only by start/length_sector_long not by CHS + partition->start_sector_long = htod32(offset_to_bootsector); + partition->length_sector_long = htod32(sector_count - offset_to_bootsector); + + /* FAT12/FAT16/FAT32 */ + /* DOS uses different types when partition is LBA, + probably to prevent older versions from using CHS on them */ + partition->fs_type = fat_type==12 ? 0x1: + fat_type==16 ? (lba?0xe:0x06): + /*fat_tyoe==32*/ (lba?0xc:0x0b); + + real_mbr->magic[0] = 0x55; + real_mbr->magic[1] = 0xaa; +} + +// dest is assumed to hold 258 bytes, and pads with 0xffff up to next multiple of 26 +static inline int short2long_name(char* dest,const char* src) +{ + int i; + int len; + + for (i = 0; (i < 129) && src[i]; i++) { + dest[2*i] = src[i]; + dest[2*i+1] = 0; + } + len = 2 * i; + dest[2*i] = dest[2*i+1] = 0; + for (i = 2 * i + 2; (i % 26); i++) + dest[i] = (char)0xff; + return len; +} + +direntry_t* vvfat_image_t::create_long_filename(const char* filename) +{ + char buffer[258]; + int length = short2long_name(buffer, filename), + number_of_entries = (length+25) / 26, i; + direntry_t* entry; + + for (i = 0; i < number_of_entries; i++) { + entry = (direntry_t*)array_get_next(&directory); + entry->attributes = 0xf; + entry->reserved[0] = 0; + entry->begin = 0; + entry->name[0] = (number_of_entries - i) | (i==0 ? 0x40:0); + } + for (i = 0; i < 26 * number_of_entries; i++) { + int offset = (i % 26); + if (offset < 10) offset = 1 + offset; + else if (offset < 22) offset = 14 + offset - 10; + else offset = 28 + offset - 22; + entry = (direntry_t*)array_get(&directory, directory.next - 1 - (i / 26)); + entry->name[offset] = buffer[i]; + } + return (direntry_t*)array_get(&directory, directory.next-number_of_entries); +} + +static char is_long_name(const direntry_t* direntry) +{ + return direntry->attributes == 0xf; +} + +static void set_begin_of_direntry(direntry_t* direntry, Bit32u begin) +{ + direntry->begin = htod16(begin & 0xffff); + direntry->begin_hi = htod16((begin >> 16) & 0xffff); +} + +static inline Bit8u fat_chksum(const direntry_t* entry) +{ + Bit8u chksum = 0; + int i; + + for (i = 0; i < 11; i++) { + unsigned char c; + + c = (i < 8) ? entry->name[i] : entry->extension[i-8]; + chksum = (((chksum & 0xfe) >> 1) | ((chksum & 0x01) ? 0x80:0)) + c; + } + + return chksum; +} + +// if return_time==0, this returns the fat_date, else the fat_time +#ifndef WIN32 +static Bit16u fat_datetime(time_t time, int return_time) +{ + struct tm* t; + struct tm t1; + + t = &t1; + localtime_r(&time, t); + if (return_time) + return htod16((t->tm_sec/2) | (t->tm_min<<5) | (t->tm_hour<<11)); + return htod16((t->tm_mday) | ((t->tm_mon+1)<<5) | ((t->tm_year-80)<<9)); +} +#else +static Bit16u fat_datetime(FILETIME time, int return_time) +{ + FILETIME localtime; + SYSTEMTIME systime; + + FileTimeToLocalFileTime(&time, &localtime); + FileTimeToSystemTime(&localtime, &systime); + if (return_time) + return htod16((systime.wSecond/2) | (systime.wMinute<<5) | (systime.wHour<<11)); + return htod16((systime.wDay) | (systime.wMonth<<5) | ((systime.wYear-1980)<<9)); +} +#endif + +void vvfat_image_t::fat_set(unsigned int cluster, Bit32u value) +{ + if (fat_type == 32) { + Bit32u* entry = (Bit32u*)array_get(&fat, cluster); + *entry = htod32(value); + } else if (fat_type == 16) { + Bit16u* entry = (Bit16u*)array_get(&fat, cluster); + *entry = htod16(value & 0xffff); + } else { + int offset = (cluster * 3 / 2); + Bit8u* p = (Bit8u*)array_get(&fat, offset); + switch (cluster & 1) { + case 0: + p[0] = value & 0xff; + p[1] = (p[1] & 0xf0) | ((value>>8) & 0xf); + break; + case 1: + p[0] = (p[0]&0xf) | ((value&0xf)<<4); + p[1] = (value>>4); + break; + } + } +} + +void vvfat_image_t::init_fat(void) +{ + if (fat_type == 12) { + array_init(&fat, 1); + array_ensure_allocated(&fat, sectors_per_fat * 0x200 * 3 / 2 - 1); + } else { + array_init(&fat, (fat_type==32) ? 4:2); + array_ensure_allocated(&fat, sectors_per_fat * 0x200 / fat.item_size - 1); + } + memset(fat.pointer, 0, fat.size); + + switch (fat_type) { + case 12: max_fat_value = 0xfff; break; + case 16: max_fat_value = 0xffff; break; + case 32: max_fat_value = 0x0fffffff; break; + default: max_fat_value = 0; /* error... */ + } +} + +direntry_t* vvfat_image_t::create_short_and_long_name( + unsigned int directory_start, const char* filename, int is_dot) +{ + int i, j, long_index = directory.next; + direntry_t* entry = NULL; + direntry_t* entry_long = NULL; + + if (is_dot) { + entry = (direntry_t*)array_get_next(&directory); + memset(entry->name,0x20,11); + memcpy(entry->name,filename,strlen(filename)); + return entry; + } + + entry_long = create_long_filename(filename); + + i = strlen(filename); + for (j = i - 1; j>0 && filename[j]!='.';j--); + if (j > 0) + i = (j > 8 ? 8 : j); + else if (i > 8) + i = 8; + + entry = (direntry_t*)array_get_next(&directory); + memset(entry->name, 0x20, 11); + memcpy(entry->name, filename, i); + + if (j > 0) + for (i = 0; i < 3 && filename[j+1+i]; i++) + entry->extension[i] = filename[j+1+i]; + + // upcase & remove unwanted characters + for (i=10;i>=0;i--) { + if (i==10 || i==7) for (;i>0 && entry->name[i]==' ';i--); + if (entry->name[i]<=' ' || entry->name[i]>0x7f + || strchr(".*?<>|\":/\\[];,+='",entry->name[i])) + entry->name[i]='_'; + else if (entry->name[i]>='a' && entry->name[i]<='z') + entry->name[i]+='A'-'a'; + } + if (entry->name[0] == 0xe5) entry->name[0] = 0x05; + + // mangle duplicates + while (1) { + direntry_t* entry1 = (direntry_t*)array_get(&directory, directory_start); + int j; + + for (;entry1name,entry->name,11)) + break; // found dupe + if (entry1==entry) // no dupe found + break; + + // use all 8 characters of name + if (entry->name[7]==' ') { + int j; + for(j=6;j>0 && entry->name[j]==' ';j--) + entry->name[j]='~'; + } + + // increment number + for (j=7;j>0 && entry->name[j]=='9';j--) + entry->name[j]='0'; + if (j > 0) { + if (entry->name[j]<'0' || entry->name[j]>'9') + entry->name[j]='0'; + else + entry->name[j]++; + } + } + + // calculate checksum; propagate to long name + if (entry_long) { + Bit8u chksum = fat_chksum(entry); + + // calculate anew, because realloc could have taken place + entry_long = (direntry_t*)array_get(&directory, long_index); + while (entry_longreserved[1]=chksum; + entry_long++; + } + } + + return entry; +} + +/* + * Read a directory. (the index of the corresponding mapping must be passed). + */ +int vvfat_image_t::read_directory(int mapping_index) +{ + mapping_t* mapping = (mapping_t*)array_get(&this->mapping, mapping_index); + direntry_t* direntry; + const char* dirname = mapping->path; + Bit32u first_cluster = mapping->begin; + int parent_index = mapping->info.dir.parent_mapping_index; + mapping_t* parent_mapping = (mapping_t*) + (parent_index >= 0 ? array_get(&this->mapping, parent_index) : NULL); + int first_cluster_of_parent = parent_mapping ? (int)parent_mapping->begin : -1; + int count = 0; + +#ifndef WIN32 + DIR* dir = opendir(dirname); + struct dirent* entry; + int i; + + assert(mapping->mode & MODE_DIRECTORY); + + if (!dir) { + mapping->end = mapping->begin; + return -1; + } + + i = mapping->info.dir.first_dir_index = + first_cluster == first_cluster_of_root_dir ? 0 : directory.next; + + if (first_cluster != first_cluster_of_root_dir) { + // create the top entries of a subdirectory + direntry = create_short_and_long_name(i, ".", 1); + direntry = create_short_and_long_name(i, "..", 1); + } + + // actually read the directory, and allocate the mappings + while ((entry=readdir(dir))) { + if ((first_cluster == 0) && (directory.next >= (Bit16u)(root_entries - 1))) { + BX_ERROR(("Too many entries in root directory, using only %d", count)); + break; + } + unsigned int length = strlen(dirname) + 2 + strlen(entry->d_name); + char* buffer; + direntry_t* direntry; + struct stat st; + bx_bool is_dot = !strcmp(entry->d_name, "."); + bx_bool is_dotdot = !strcmp(entry->d_name, ".."); + if ((first_cluster == first_cluster_of_root_dir) && (is_dotdot || is_dot)) + continue; + + buffer = (char*)malloc(length); + snprintf(buffer,length,"%s/%s",dirname,entry->d_name); + + if (stat(buffer, &st) < 0) { + free(buffer); + continue; + } + + bx_bool is_mbr_file = !strcmp(entry->d_name, VVFAT_MBR); + bx_bool is_boot_file = !strcmp(entry->d_name, VVFAT_BOOT); + bx_bool is_attr_file = !strcmp(entry->d_name, VVFAT_ATTR); + if (first_cluster == first_cluster_of_root_dir) { + if (is_attr_file || ((is_mbr_file || is_boot_file) && (st.st_size == 512))) { + free(buffer); + continue; + } + } + + count++; + // create directory entry for this file + if (!is_dot && !is_dotdot) { + direntry = create_short_and_long_name(i, entry->d_name, 0); + } else { + direntry = (direntry_t*)array_get(&directory, is_dot ? i : i + 1); + } + direntry->attributes = (S_ISDIR(st.st_mode) ? 0x10 : 0x20); + direntry->reserved[0] = direntry->reserved[1]=0; + direntry->ctime = fat_datetime(st.st_ctime, 1); + direntry->cdate = fat_datetime(st.st_ctime, 0); + direntry->adate = fat_datetime(st.st_atime, 0); + direntry->begin_hi = 0; + direntry->mtime = fat_datetime(st.st_mtime, 1); + direntry->mdate = fat_datetime(st.st_mtime, 0); + if (is_dotdot) + set_begin_of_direntry(direntry, first_cluster_of_parent); + else if (is_dot) + set_begin_of_direntry(direntry, first_cluster); + else + direntry->begin = 0; // do that later + if (st.st_size > 0x7fffffff) { + BX_ERROR(("File %s is larger than 2GB", buffer)); + free(buffer); + closedir(dir); + return -2; + } + direntry->size = htod32(S_ISDIR(st.st_mode) ? 0:st.st_size); + + // create mapping for this file + if (!is_dot && !is_dotdot && (S_ISDIR(st.st_mode) || st.st_size)) { + current_mapping = (mapping_t*)array_get_next(&this->mapping); + current_mapping->begin = 0; + current_mapping->end = st.st_size; + /* + * we get the direntry of the most recent direntry, which + * contains the short name and all the relevant information. + */ + current_mapping->dir_index = directory.next-1; + current_mapping->first_mapping_index = -1; + if (S_ISDIR(st.st_mode)) { + current_mapping->mode = MODE_DIRECTORY; + current_mapping->info.dir.parent_mapping_index = + mapping_index; + } else { + current_mapping->mode = MODE_UNDEFINED; + current_mapping->info.file.offset = 0; + } + current_mapping->path = buffer; + current_mapping->read_only = + (st.st_mode & (S_IWUSR | S_IWGRP | S_IWOTH)) == 0; + } + } + closedir(dir); +#else + WIN32_FIND_DATA finddata; + char filter[MAX_PATH]; + wsprintf(filter, "%s\\*.*", dirname); + HANDLE hFind = FindFirstFile(filter, &finddata); + int i; + + assert(mapping->mode & MODE_DIRECTORY); + + if (hFind == INVALID_HANDLE_VALUE) { + mapping->end = mapping->begin; + return -1; + } + + i = mapping->info.dir.first_dir_index = + first_cluster == first_cluster_of_root_dir ? 0 : directory.next; + + if (first_cluster != first_cluster_of_root_dir) { + // create the top entries of a subdirectory + direntry = create_short_and_long_name(i, ".", 1); + direntry = create_short_and_long_name(i, "..", 1); + } + + // actually read the directory, and allocate the mappings + do { + if ((first_cluster == 0) && (directory.next >= (Bit16u)(root_entries - 1))) { + BX_ERROR(("Too many entries in root directory, using only %d", count)); + break; + } + unsigned int length = lstrlen(dirname) + 2 + lstrlen(finddata.cFileName); + char* buffer; + direntry_t* direntry; + bx_bool is_dot = !lstrcmp(finddata.cFileName, "."); + bx_bool is_dotdot = !lstrcmp(finddata.cFileName, ".."); + if ((first_cluster == first_cluster_of_root_dir) && (is_dotdot || is_dot)) + continue; + bx_bool is_mbr_file = !lstrcmp(finddata.cFileName, VVFAT_MBR); + bx_bool is_boot_file = !lstrcmp(finddata.cFileName, VVFAT_BOOT); + bx_bool is_attr_file = !lstrcmp(finddata.cFileName, VVFAT_ATTR); + if (first_cluster == first_cluster_of_root_dir) { + if (is_attr_file || ((is_mbr_file || is_boot_file) && (finddata.nFileSizeLow == 512))) + continue; + } + + buffer = (char*)malloc(length); + snprintf(buffer, length, "%s/%s", dirname, finddata.cFileName); + + count++; + // create directory entry for this file + if (!is_dot && !is_dotdot) { + direntry = create_short_and_long_name(i, finddata.cFileName, 0); + } else { + direntry = (direntry_t*)array_get(&directory, is_dot ? i : i + 1); + } + direntry->attributes = ((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? 0x10 : 0x20); + direntry->reserved[0] = direntry->reserved[1]=0; + direntry->ctime = fat_datetime(finddata.ftCreationTime, 1); + direntry->cdate = fat_datetime(finddata.ftCreationTime, 0); + direntry->adate = fat_datetime(finddata.ftLastAccessTime, 0); + direntry->begin_hi = 0; + direntry->mtime = fat_datetime(finddata.ftLastWriteTime, 1); + direntry->mdate = fat_datetime(finddata.ftLastWriteTime, 0); + if (is_dotdot) + set_begin_of_direntry(direntry, first_cluster_of_parent); + else if (is_dot) + set_begin_of_direntry(direntry, first_cluster); + else + direntry->begin = 0; // do that later + if (finddata.nFileSizeLow > 0x7fffffff) { + BX_ERROR(("File %s is larger than 2GB", buffer)); + free(buffer); + FindClose(hFind); + return -2; + } + direntry->size = htod32((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? 0:finddata.nFileSizeLow); + + // create mapping for this file + if (!is_dot && !is_dotdot && ((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) || finddata.nFileSizeLow)) { + current_mapping = (mapping_t*)array_get_next(&this->mapping); + current_mapping->begin = 0; + current_mapping->end = finddata.nFileSizeLow; + /* + * we get the direntry of the most recent direntry, which + * contains the short name and all the relevant information. + */ + current_mapping->dir_index = directory.next-1; + current_mapping->first_mapping_index = -1; + if (finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + current_mapping->mode = MODE_DIRECTORY; + current_mapping->info.dir.parent_mapping_index = + mapping_index; + } else { + current_mapping->mode = MODE_UNDEFINED; + current_mapping->info.file.offset = 0; + } + current_mapping->path=buffer; + current_mapping->read_only = (finddata.dwFileAttributes & FILE_ATTRIBUTE_READONLY); + } + } while (FindNextFile(hFind, &finddata)); + FindClose(hFind); +#endif + + // fill with zeroes up to the end of the cluster + while (directory.next % (0x10 * sectors_per_cluster)) { + direntry_t* direntry = (direntry_t*)array_get_next(&directory); + memset(direntry, 0, sizeof(direntry_t)); + } + + if (fat_type != 32) { + if ((mapping_index == 0) && (directory.next < root_entries)) { + // root directory + int cur = directory.next; + array_ensure_allocated(&directory, root_entries - 1); + memset(array_get(&directory, cur), 0, + (root_entries - cur) * sizeof(direntry_t)); + } + } + + // reget the mapping, since this->mapping was possibly realloc()ed + mapping = (mapping_t*)array_get(&this->mapping, mapping_index); + if (first_cluster == 0) { + first_cluster = 2; + } else { + first_cluster += (directory.next - mapping->info.dir.first_dir_index) + * 0x20 / cluster_size; + } + mapping->end = first_cluster; + + direntry = (direntry_t*)array_get(&directory, mapping->dir_index); + set_begin_of_direntry(direntry, mapping->begin); + + return 0; +} + +Bit32u vvfat_image_t::sector2cluster(off_t sector_num) +{ + return (Bit32u)((sector_num - offset_to_data) / sectors_per_cluster) + 2; +} + +off_t vvfat_image_t::cluster2sector(Bit32u cluster_num) +{ + return (off_t)(offset_to_data + (cluster_num - 2) * sectors_per_cluster); +} + +int vvfat_image_t::init_directories(const char* dirname) +{ + bootsector_t* bootsector; + infosector_t* infosector; + mapping_t* mapping; + unsigned int i; + unsigned int cluster; + char size_txt[8]; + Bit32u volume_sector_count = 0, tmpsc; + + cluster_size = sectors_per_cluster * 0x200; + cluster_buffer = new Bit8u[cluster_size]; + + bootsector = (bootsector_t*)(first_sectors + offset_to_bootsector * 0x200); + + if (!use_boot_file) { + volume_sector_count = sector_count - offset_to_bootsector; + tmpsc = volume_sector_count - reserved_sectors - root_entries / 16; + cluster_count = (tmpsc * 0x200) / ((sectors_per_cluster * 0x200) + fat_type / 4); + sectors_per_fat = ((cluster_count + 2) * fat_type / 8) / 0x200; + sectors_per_fat += (((cluster_count + 2) * fat_type / 8) % 0x200) > 0; + } else { + if (fat_type != 32) { + sectors_per_fat = bootsector->sectors_per_fat; + } else { + sectors_per_fat = bootsector->u.fat32.sectors_per_fat; + } + } + + offset_to_fat = offset_to_bootsector + reserved_sectors; + offset_to_root_dir = offset_to_fat + sectors_per_fat * 2; + offset_to_data = offset_to_root_dir + root_entries / 16; + if (use_boot_file) { + cluster_count = (sector_count - offset_to_data) / sectors_per_cluster; + } + + array_init(&this->mapping, sizeof(mapping_t)); + array_init(&directory, sizeof(direntry_t)); + + /* add volume label */ + { + direntry_t *entry = (direntry_t*)array_get_next(&directory); + entry->attributes = 0x28; // archive | volume label + entry->mdate = 0x3d81; // 01.12.2010 + entry->mtime = 0x6000; // 12:00:00 + memcpy(entry->name, "BOCHS VV", 8); + memcpy(entry->extension, "FAT", 3); + } + + // Now build FAT, and write back information into directory + init_fat(); + + mapping = (mapping_t*)array_get_next(&this->mapping); + mapping->begin = 0; + mapping->dir_index = 0; + mapping->info.dir.parent_mapping_index = -1; + mapping->first_mapping_index = -1; + mapping->path = strdup(dirname); + i = strlen(mapping->path); + if (i > 0 && mapping->path[i - 1] == '/') + mapping->path[i - 1] = '\0'; + mapping->mode = MODE_DIRECTORY; + mapping->read_only = 0; + vvfat_path = mapping->path; + + for (i = 0, cluster = first_cluster_of_root_dir; i < this->mapping.next; i++) { + // fix fat entry if not root directory of FAT12/FAT16 + int fix_fat = (cluster != 0); + mapping = (mapping_t*)array_get(&this->mapping, i); + + if (mapping->mode & MODE_DIRECTORY) { + mapping->begin = cluster; + if (read_directory(i)) { + BX_ERROR(("Could not read directory %s", mapping->path)); + return -1; + } + mapping = (mapping_t*)array_get(&this->mapping, i); + } else { + assert(mapping->mode == MODE_UNDEFINED); + mapping->mode = MODE_NORMAL; + mapping->begin = cluster; + if (mapping->end > 0) { + direntry_t* direntry = (direntry_t*)array_get(&directory, mapping->dir_index); + + mapping->end = cluster + 1 + (mapping->end-1) / cluster_size; + set_begin_of_direntry(direntry, mapping->begin); + } else { + mapping->end = cluster + 1; + fix_fat = 0; + } + } + + assert(mapping->begin < mapping->end); + + /* next free cluster */ + cluster = mapping->end; + + if (cluster >= (cluster_count + 2)) { + sprintf(size_txt, "%dMB", (sector_count >> 11)); + BX_ERROR(("Directory does not fit in FAT%d (capacity %s)", + fat_type, + (fat_type == 12) ? (sector_count == 2880) ? "1.44 MB":"2.88 MB" + : size_txt)); + return -EINVAL; + } + + // fix fat for entry + if (fix_fat) { + int j; + for (j = mapping->begin; j < (int)(mapping->end - 1); j++) + fat_set(j, j + 1); + fat_set(mapping->end - 1, max_fat_value); + } + } + + mapping = (mapping_t*)array_get(&this->mapping, 0); + assert((fat_type == 32) || (mapping->end == 2)); + + // the FAT signature + fat_set(0, max_fat_value); + fat_set(1, max_fat_value); + + current_mapping = NULL; + + if (!use_boot_file) { + bootsector->jump[0] = 0xeb; + if (fat_type != 32) { + bootsector->jump[1] = 0x3e; + } else { + bootsector->jump[1] = 0x58; + } + bootsector->jump[2] = 0x90; + memcpy(bootsector->name,"MSWIN4.1", 8); // Win95/98 need this to detect FAT32 + bootsector->sector_size = htod16(0x200); + bootsector->sectors_per_cluster = sectors_per_cluster; + bootsector->reserved_sectors = htod16(reserved_sectors); + bootsector->number_of_fats = 0x2; + if (fat_type != 32) { + bootsector->root_entries = htod16(root_entries); + } + bootsector->total_sectors16 = (volume_sector_count > 0xffff) ? 0:htod16(volume_sector_count); + bootsector->media_type = ((fat_type != 12) ? 0xf8:0xf0); + if (fat_type != 32) { + bootsector->sectors_per_fat = htod16(sectors_per_fat); + } + bootsector->sectors_per_track = htod16(sectors); + bootsector->number_of_heads = htod16(heads); + bootsector->hidden_sectors = htod32(offset_to_bootsector); + bootsector->total_sectors = htod32((volume_sector_count > 0xffff) ? volume_sector_count:0); + if (fat_type != 32) { + bootsector->u.fat16.drive_number = (fat_type == 12) ? 0:0x80; // assume this is hda (TODO) + bootsector->u.fat16.signature = 0x29; + bootsector->u.fat16.id = htod32(0xfabe1afd); + memcpy(bootsector->u.fat16.volume_label, "BOCHS VVFAT", 11); + memcpy(bootsector->u.fat16.fat_type, (fat_type==12) ? "FAT12 ":"FAT16 ", 8); + } else { + bootsector->u.fat32.sectors_per_fat = htod32(sectors_per_fat); + bootsector->u.fat32.first_cluster_of_root_dir = first_cluster_of_root_dir; + bootsector->u.fat32.info_sector = htod16(1); + bootsector->u.fat32.backup_boot_sector = htod16(6); + bootsector->u.fat32.drive_number = 0x80; // assume this is hda (TODO) + bootsector->u.fat32.signature = 0x29; + bootsector->u.fat32.id = htod32(0xfabe1afd); + memcpy(bootsector->u.fat32.volume_label, "BOCHS VVFAT", 11); + memcpy(bootsector->u.fat32.fat_type, "FAT32 ", 8); + } + bootsector->magic[0] = 0x55; + bootsector->magic[1] = 0xaa; + } + fat.pointer[0] = bootsector->media_type; + + if (fat_type == 32) { + // backup boot sector + memcpy(&first_sectors[(offset_to_bootsector + 6) * 0x200], &first_sectors[offset_to_bootsector * 0x200], 0x200); + // FS info sector + infosector = (infosector_t*)(first_sectors + (offset_to_bootsector + 1) * 0x200); + infosector->signature1 = htod32(0x41615252); + infosector->signature2 = htod32(0x61417272); + infosector->free_clusters = htod32(cluster_count - cluster + 2); + infosector->mra_cluster = htod32(2); + infosector->magic[0] = 0x55; + infosector->magic[1] = 0xaa; + } + + return 0; +} + +bx_bool vvfat_image_t::read_sector_from_file(const char *path, Bit8u *buffer, Bit32u sector) +{ + int fd = ::open(path, O_RDONLY +#ifdef O_BINARY + | O_BINARY +#endif +#ifdef O_LARGEFILE + | O_LARGEFILE +#endif + ); + if (fd < 0) + return 0; + int offset = sector * 0x200; + if (::lseek(fd, offset, SEEK_SET) != offset) { + return 0; + ::close(fd); + } + int result = ::read(fd, buffer, 0x200); + ::close(fd); + bx_bool bootsig = ((buffer[0x1fe] == 0x55) && (buffer[0x1ff] == 0xaa)); + + return (result == 0x200) && bootsig; +} + +void vvfat_image_t::set_file_attributes(void) +{ + char path[BX_PATHNAME_LEN]; + char fpath[BX_PATHNAME_LEN]; + char line[512]; + char *ret, *ptr; + FILE *fd; + Bit8u attributes; + int i; + + sprintf(path, "%s/%s", vvfat_path, VVFAT_ATTR); + fd = fopen(path, "r"); + if (fd != NULL) { + do { + ret = fgets(line, sizeof(line) - 1, fd); + if (ret != NULL) { + line[sizeof(line) - 1] = '\0'; + size_t len = strlen(line); + if ((len > 0) && (line[len - 1] < ' ')) line[len - 1] = '\0'; + ptr = strtok(line, ":"); + if (ptr[0] == 34) { + strcpy(fpath, ptr + 1); + } else { + strcpy(fpath, ptr); + } + if (fpath[strlen(fpath) - 1] == 34) { + fpath[strlen(fpath) - 1] = '\0'; + } + mapping_t* mapping = find_mapping_for_path(fpath); + direntry_t* entry = (direntry_t*)array_get(&directory, mapping->dir_index); + attributes = entry->attributes; + ptr = strtok(NULL, ""); + for (i = 0; i < (int)strlen(ptr); i++) { + switch (ptr[i]) { + case 'a': + attributes &= ~0x20; + break; + case 'S': + attributes |= 0x04; + break; + case 'H': + attributes |= 0x02; + break; + case 'R': + attributes |= 0x01; + break; + } + } + entry->attributes = attributes; + } + } while (!feof(fd)); + fclose(fd); + } +} + +int vvfat_image_t::open(const char* dirname) +{ + Bit32u size_in_mb; + char path[BX_PATHNAME_LEN]; + Bit8u sector_buffer[0x200]; + int filedes; + const char *logname = NULL; + char ftype[10]; + bx_bool ftype_ok; + + use_mbr_file = 0; + use_boot_file = 0; + fat_type = 0; + sectors_per_cluster = 0; + + snprintf(path, BX_PATHNAME_LEN, "%s/%s", dirname, VVFAT_MBR); + if (read_sector_from_file(path, sector_buffer, 0)) { + mbr_t* real_mbr = (mbr_t*)sector_buffer; + partition_t* partition = &(real_mbr->partition[0]); + if ((partition->fs_type != 0) && (partition->length_sector_long > 0)) { + if ((partition->fs_type == 0x06) || (partition->fs_type == 0x0e)) { + fat_type = 16; + } else if ((partition->fs_type == 0x0b) || (partition->fs_type == 0x0c)) { + fat_type = 32; + } else { + BX_ERROR(("MBR file: unsupported FS type = 0x%02x", partition->fs_type)); + } + if (fat_type != 0) { + sector_count = partition->start_sector_long + partition->length_sector_long; + sectors = partition->start_sector_long; + if (partition->end_CHS.head > 15) { + heads = 16; + } else { + heads = partition->end_CHS.head + 1; + } + cylinders = sector_count / (heads * sectors); + offset_to_bootsector = sectors; + memcpy(&first_sectors[0], sector_buffer, 0x200); + use_mbr_file = 1; + BX_INFO(("VVFAT: using MBR from file")); + } + } + } + + snprintf(path, BX_PATHNAME_LEN, "%s/%s", dirname, VVFAT_BOOT); + if (read_sector_from_file(path, sector_buffer, 0)) { + bootsector_t* bs = (bootsector_t*)sector_buffer; + if (use_mbr_file) { + sprintf(ftype, "FAT%d ", fat_type); + if (fat_type == 32) { + ftype_ok = memcmp(bs->u.fat32.fat_type, ftype, 8) == 0; + } else { + ftype_ok = memcmp(bs->u.fat16.fat_type, ftype, 8) == 0; + } + Bit32u sc = bs->total_sectors16 + bs->total_sectors + bs->hidden_sectors; + if (ftype_ok && (sc == sector_count) && (bs->number_of_fats == 2)) { + use_boot_file = 1; + } + } else { + if (memcmp(bs->u.fat16.fat_type, "FAT12 ", 8) == 0) { + fat_type = 12; + } else if (memcmp(bs->u.fat16.fat_type, "FAT16 ", 8) == 0) { + fat_type = 16; + } else if (memcmp(bs->u.fat32.fat_type, "FAT32 ", 8) == 0) { + fat_type = 32; + } else { + memcpy(ftype, bs->u.fat16.fat_type, 8); + ftype[8] = 0; + BX_PANIC(("boot sector file: unsupported FS type = '%s'", ftype)); + return -1; + } + if ((fat_type != 0) && (bs->number_of_fats == 2)) { + sector_count = bs->total_sectors16 + bs->total_sectors + bs->hidden_sectors; + sectors = bs->sectors_per_track; + if (bs->number_of_heads > 15) { + heads = 16; + } else { + heads = bs->number_of_heads; + } + cylinders = sector_count / (heads * sectors); + offset_to_bootsector = bs->hidden_sectors; + use_boot_file = 1; + } + } + if (use_boot_file) { + sectors_per_cluster = bs->sectors_per_cluster; + reserved_sectors = bs->reserved_sectors; + root_entries = bs->root_entries; + first_cluster_of_root_dir = (fat_type != 32) ? 0 : bs->u.fat32.first_cluster_of_root_dir; + memcpy(&first_sectors[offset_to_bootsector * 0x200], sector_buffer, 0x200); + BX_INFO(("VVFAT: using boot sector from file")); + } + } + + if (!use_mbr_file && !use_boot_file) { + if (hd_size == 1474560) { + // floppy support + cylinders = 80; + heads = 2; + sectors = 18; + offset_to_bootsector = 0; + fat_type = 12; + sectors_per_cluster = 1; + first_cluster_of_root_dir = 0; + root_entries = 224; + reserved_sectors = 1; + } else { + if (cylinders == 0) { + cylinders = 1024; + heads = 16; + sectors = 63; + } + offset_to_bootsector = sectors; + } + sector_count = cylinders * heads * sectors; + } + + hd_size = sector_count * 512; + if (sectors_per_cluster == 0) { + size_in_mb = (Bit32u)(hd_size >> 20); + if ((size_in_mb >= 2047) || (fat_type == 32)) { + fat_type = 32; + if (size_in_mb >= 32767) { + sectors_per_cluster = 64; + } else if (size_in_mb >= 16383) { + sectors_per_cluster = 32; + } else if (size_in_mb >= 8191) { + sectors_per_cluster = 16; + } else { + sectors_per_cluster = 8; + } + first_cluster_of_root_dir = 2; + root_entries = 0; + reserved_sectors = 32; + } else { + fat_type = 16; + if (size_in_mb >= 1023) { + sectors_per_cluster = 64; + } else if (size_in_mb >= 511) { + sectors_per_cluster = 32; + } else if (size_in_mb >= 255) { + sectors_per_cluster = 16; + } else if (size_in_mb >= 127) { + sectors_per_cluster = 8; + } else { + sectors_per_cluster = 4; + } + first_cluster_of_root_dir = 0; + root_entries = 512; + reserved_sectors = 1; + } + } + + current_cluster = 0xffff; + current_fd = 0; + + if ((!use_mbr_file) && (offset_to_bootsector > 0)) + init_mbr(); + + init_directories(dirname); + set_file_attributes(); + + // VOLATILE WRITE SUPPORT + snprintf(path, BX_PATHNAME_LEN, "%s/vvfat.dir", dirname); + // if redolog name was set + if (redolog_name != NULL) { + if (strcmp(redolog_name, "") != 0) { + logname = redolog_name; + } + } + + // otherwise use path as template + if (logname == NULL) { + logname = path; + } + + redolog_temp = (char*)malloc(strlen(logname) + VOLATILE_REDOLOG_EXTENSION_LENGTH + 1); + sprintf(redolog_temp, "%s%s", logname, VOLATILE_REDOLOG_EXTENSION); + + filedes = mkstemp(redolog_temp); + + if (filedes < 0) { + BX_PANIC(("Can't create volatile redolog '%s'", redolog_temp)); + return -1; + } + if (redolog->create(filedes, REDOLOG_SUBTYPE_VOLATILE, hd_size) < 0) { + BX_PANIC(("Can't create volatile redolog '%s'", redolog_temp)); + return -1; + } + +#if (!defined(WIN32)) && !BX_WITH_MACOS + // on unix it is legal to delete an open file + unlink(redolog_temp); +#endif + + vvfat_modified = 0; + + BX_INFO(("'vvfat' disk opened: directory is '%s', redolog is '%s'", dirname, redolog_temp)); + + return 0; +} + +direntry_t* vvfat_image_t::read_direntry(Bit8u *buffer, char *filename) +{ + const Bit8u lfn_map[13] = {1, 3, 5, 7, 9, 14, 16, 18, 20, 22, 24, 28, 30}; + direntry_t *entry; + bx_bool entry_ok = 0, has_lfn = 0; + char lfn_tmp[BX_PATHNAME_LEN]; + int i; + + memset(filename, 0, BX_PATHNAME_LEN); + lfn_tmp[0] = 0; + do { + entry = (direntry_t*)buffer; + if (entry->name[0] == 0) { + entry = NULL; + break; + } else if ((entry->name[0] != '.') && (entry->name[0] != 0xe5) && + ((entry->attributes & 0x0f) != 0x08)) { + if (is_long_name(entry)) { + for (i = 0; i < 13; i++) { + lfn_tmp[i] = buffer[lfn_map[i]]; + } + lfn_tmp[i] = 0; + strcat(lfn_tmp, filename); + strcpy(filename, lfn_tmp); + has_lfn = 1; + buffer += 32; + } else { + if (!has_lfn) { + if (entry->name[0] == 0x05) entry->name[0] = 0xe5; + memcpy(filename, entry->name, 8); + i = 7; + while ((i > 0) && (filename[i] == ' ')) filename[i--] = 0; + if (entry->extension[0] != ' ') strcat(filename, "."); + memcpy(filename+i+2, entry->extension, 3); + i = strlen(filename) - 1; + while (filename[i] == ' ') filename[i--] = 0; + for (i = 0; i < (int)strlen(filename); i++) { + if ((filename[i] > 0x40) && (filename[i] < 0x5b)) { + filename[i] |= 0x20; + } + } + } + entry_ok = 1; + } + } else { + buffer += 32; + } + } while (!entry_ok); + return entry; +} + +Bit32u vvfat_image_t::fat_get_next(Bit32u current) +{ + if (fat_type == 32) { + return dtoh32(((Bit32u*)fat2)[current]); + } else if (fat_type == 16) { + return dtoh16(((Bit16u*)fat2)[current]); + } else { + int offset = (current * 3 / 2); + Bit8u* p = (((Bit8u*)fat2) + offset); + Bit32u value = 0; + switch (current & 1) { + case 0: + value = p[0] | ((p[1] & 0x0f) << 8); + break; + case 1: + value = (p[0] >> 4) | (p[1] << 4); + break; + } + return value; + } +} + +bx_bool vvfat_image_t::write_file(const char *path, direntry_t *entry, bx_bool create) +{ + int fd; + Bit32u csize, fsize, fstart, cur, next, rsvd_clusters, bad_cluster; + Bit64u offset; + Bit8u *buffer; +#ifndef WIN32 + struct tm tv; + struct utimbuf ut; +#else + HANDLE hFile; + FILETIME at, mt, tmp; + SYSTEMTIME st; +#endif + + csize = sectors_per_cluster * 0x200; + rsvd_clusters = max_fat_value - 15; + bad_cluster = max_fat_value - 8; + fsize = dtoh32(entry->size); + fstart = dtoh16(entry->begin) | (dtoh16(entry->begin_hi) << 16); + if (create) { + fd = ::open(path, O_CREAT | O_RDWR | O_TRUNC +#ifdef O_BINARY + | O_BINARY +#endif +#ifdef O_LARGEFILE + | O_LARGEFILE +#endif + , 0644); + } else { + fd = ::open(path, O_RDWR | O_TRUNC +#ifdef O_BINARY + | O_BINARY +#endif +#ifdef O_LARGEFILE + | O_LARGEFILE +#endif + ); + } + if (fd < 0) + return 0; + buffer = (Bit8u*)malloc(csize); + next = fstart; + do { + cur = next; + offset = cluster2sector(cur); + lseek(offset * 0x200, SEEK_SET); + read(buffer, csize); + if (fsize > csize) { + ::write(fd, buffer, csize); + fsize -= csize; + } else { + ::write(fd, buffer, fsize); + } + next = fat_get_next(cur); + if ((next >= rsvd_clusters) && (next < bad_cluster)) { + BX_ERROR(("reserved clusters not supported")); + } + } while (next < rsvd_clusters); + ::close(fd); + +#ifndef WIN32 + tv.tm_year = (entry->mdate >> 9) + 80; + tv.tm_mon = ((entry->mdate >> 5) & 0x0f) - 1; + tv.tm_mday = entry->mdate & 0x1f; + tv.tm_hour = (entry->mtime >> 11); + tv.tm_min = (entry->mtime >> 5) & 0x3f; + tv.tm_sec = (entry->mtime & 0x1f) << 1; + tv.tm_isdst = -1; + ut.modtime = mktime(&tv); + if (entry->adate != 0) { + tv.tm_year = (entry->adate >> 9) + 80; + tv.tm_mon = ((entry->adate >> 5) & 0x0f) - 1; + tv.tm_mday = entry->adate & 0x1f; + tv.tm_hour = 0; + tv.tm_min = 0; + tv.tm_sec = 0; + ut.actime = mktime(&tv); + } else { + ut.actime = ut.modtime; + } + utime(path, &ut); +#else + hFile = CreateFile(path, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile != INVALID_HANDLE_VALUE) { + memset(&st, 0, sizeof(st)); + st.wYear = (entry->mdate >> 9) + 1980; + st.wMonth = ((entry->mdate >> 5) & 0x0f); + st.wDay = entry->mdate & 0x1f; + st.wHour = (entry->mtime >> 11); + st.wMinute = (entry->mtime >> 5) & 0x3f; + st.wSecond = (entry->mtime & 0x1f) << 1; + SystemTimeToFileTime(&st, &tmp); + LocalFileTimeToFileTime(&tmp, &mt); + if (entry->adate != 0) { + st.wYear = (entry->adate >> 9) + 1980; + st.wMonth = ((entry->adate >> 5) & 0x0f); + st.wDay = entry->adate & 0x1f; + st.wHour = 0; + st.wMinute = 0; + st.wSecond = 0; + SystemTimeToFileTime(&st, &tmp); + LocalFileTimeToFileTime(&tmp, &at); + } else { + at = mt; + } + SetFileTime(hFile, NULL, &at, &mt); + CloseHandle(hFile); + } +#endif + + return 1; +} + +void vvfat_image_t::parse_directory(const char *path, Bit32u start_cluster) +{ + Bit32u csize, fstart, cur, next, size; + Bit64u offset; + Bit8u *buffer, *ptr; + direntry_t *entry, *newentry; + char filename[BX_PATHNAME_LEN]; + char full_path[BX_PATHNAME_LEN]; + char attr_txt[4]; + mapping_t *mapping; + + csize = sectors_per_cluster * 0x200; + if (start_cluster == 0) { + size = root_entries * 32; + offset = offset_to_root_dir; + buffer = (Bit8u*)malloc(size); + lseek(offset * 0x200, SEEK_SET); + read(buffer, size); + } else { + size = csize; + buffer = (Bit8u*)malloc(size); + next = start_cluster; + do { + cur = next; + offset = cluster2sector(cur); + lseek(offset * 0x200, SEEK_SET); + read(buffer+(size-csize), csize); + next = fat_get_next(cur); + if (next != max_fat_value) { + size += csize; + buffer = (Bit8u*)realloc(buffer, size); + } + } while (next != max_fat_value); + } + ptr = buffer; + do { + newentry = read_direntry(ptr, filename); + if (newentry != NULL) { + sprintf(full_path, "%s/%s", path, filename); + if ((newentry->attributes != 0x10) && (newentry->attributes != 0x20)) { + if (vvfat_attr_fd != NULL) { + attr_txt[0] = 0; + if ((newentry->attributes & 0x30) == 0) strcpy(attr_txt, "a"); + if (newentry->attributes & 0x04) strcpy(attr_txt, "S"); + if (newentry->attributes & 0x02) strcat(attr_txt, "H"); + if (newentry->attributes & 0x01) strcat(attr_txt, "R"); + fprintf(vvfat_attr_fd, "\"%s\":%s\n", full_path, attr_txt); + } + } + fstart = dtoh16(newentry->begin) | (dtoh16(newentry->begin_hi) << 16); + mapping = find_mapping_for_cluster(fstart); + if (mapping == NULL) { + if (newentry->attributes == 0x10) { + bx_mkdir(full_path); + parse_directory(full_path, fstart); + } else { + if (access(full_path, F_OK) == 0) { + mapping = find_mapping_for_path(full_path); + if (mapping != NULL) { + mapping->mode &= ~MODE_DELETED; + } + write_file(full_path, newentry, 0); + } else { + write_file(full_path, newentry, 1); + } + } + } else { + entry = (direntry_t*)array_get(&directory, mapping->dir_index); + if (!strcmp(full_path, mapping->path)) { + if (newentry->attributes == 0x10) { + parse_directory(full_path, fstart); + mapping->mode &= ~MODE_DELETED; + } else { + if ((newentry->mdate != entry->mdate) || (newentry->mtime != entry->mtime) || + (newentry->size != entry->size)) { + write_file(full_path, newentry, 0); + } + mapping->mode &= ~MODE_DELETED; + } + } else { + if ((newentry->cdate == entry->cdate) && (newentry->ctime == entry->ctime)) { + rename(mapping->path, full_path); + if (newentry->attributes == 0x10) { + parse_directory(full_path, fstart); + mapping->mode &= ~MODE_DELETED; + } else { + if ((newentry->mdate != entry->mdate) || (newentry->mtime != entry->mtime) || + (newentry->size != entry->size)) { + write_file(full_path, newentry, 0); + } + mapping->mode &= ~MODE_DELETED; + } + } else { + if (newentry->attributes == 0x10) { + bx_mkdir(full_path); + parse_directory(full_path, fstart); + } else { + if (access(full_path, F_OK) == 0) { + mapping = find_mapping_for_path(full_path); + if (mapping != NULL) { + mapping->mode &= ~MODE_DELETED; + } + write_file(full_path, newentry, 0); + } else { + write_file(full_path, newentry, 1); + } + } + } + } + } + ptr = (Bit8u*)newentry+32; + } + } while ((newentry != NULL) && ((Bit32u)(ptr - buffer) < size)); + free(buffer); +} + +void vvfat_image_t::commit_changes(void) +{ + char path[BX_PATHNAME_LEN]; + mapping_t *mapping; + int i; + + // read modified FAT + fat2 = malloc(sectors_per_fat * 0x200); + lseek(offset_to_fat * 0x200, SEEK_SET); + read(fat2, sectors_per_fat * 0x200); + // mark all mapped directories / files for delete + for (i = 1; i < (int)this->mapping.next; i++) { + mapping = (mapping_t*)array_get(&this->mapping, i); + if (mapping->first_mapping_index < 0) { + mapping->mode |= MODE_DELETED; + } + } + sprintf(path, "%s/%s", vvfat_path, VVFAT_ATTR); + vvfat_attr_fd = fopen(path, "w"); + // parse new directory tree and create / modify directories and files + parse_directory(vvfat_path, (fat_type == 32) ? first_cluster_of_root_dir : 0); + if (vvfat_attr_fd != NULL) + fclose(vvfat_attr_fd); + // remove all directories and files still marked for delete + for (i = this->mapping.next - 1; i > 0; i--) { + mapping = (mapping_t*)array_get(&this->mapping, i); + if (mapping->mode & MODE_DELETED) { + direntry_t* entry = (direntry_t*)array_get(&directory, mapping->dir_index); + if (entry->attributes == 0x10) { + bx_rmdir(mapping->path); + } else { + unlink(mapping->path); + } + } + } + free(fat2); +} + +void vvfat_image_t::close(void) +{ + char msg[BX_PATHNAME_LEN + 80]; + + if (vvfat_modified) { + sprintf(msg, "Write back changes to directory '%s'?\n\nWARNING: This feature is still experimental!", vvfat_path); + if (SIM->ask_yes_no("Bochs VVFAT modified", msg, 0)) { + commit_changes(); + } + } + array_free(&fat); + array_free(&directory); + array_free(&mapping); + if (cluster_buffer != NULL) + delete [] cluster_buffer; + + redolog->close(); + +#if defined(WIN32) || BX_WITH_MACOS + // on non-unix we have to wait till the file is closed to delete it + unlink(redolog_temp); +#endif + if (redolog_temp!=NULL) + free(redolog_temp); + + if (redolog_name!=NULL) + free(redolog_name); +} + +Bit64s vvfat_image_t::lseek(Bit64s offset, int whence) +{ + redolog->lseek(offset, whence); + if (whence == SEEK_SET) { + sector_num = (Bit32u)(offset / 512); + } else if (whence == SEEK_CUR) { + sector_num += (Bit32u)(offset / 512); + } else { + BX_ERROR(("lseek: mode not supported yet")); + return -1; + } + if (sector_num >= sector_count) + return -1; + return 0; +} + +void vvfat_image_t::close_current_file(void) +{ + if(current_mapping) { + current_mapping = NULL; + if (current_fd) { + ::close(current_fd); + current_fd = 0; + } + } + current_cluster = 0xffff; +} + +// mappings between index1 and index2-1 are supposed to be ordered +// return value is the index of the last mapping for which end>cluster_num +int vvfat_image_t::find_mapping_for_cluster_aux(int cluster_num, int index1, int index2) +{ + while(1) { + int index3; + mapping_t* mapping; + index3 = (index1+index2) / 2; + mapping = (mapping_t*)array_get(&this->mapping, index3); + assert(mapping->begin < mapping->end); + if (mapping->begin >= (unsigned int)cluster_num) { + assert(index2 != index3 || index2 == 0); + if (index2 == index3) + return index1; + index2 = index3; + } else { + if (index1 == index3) + return (mapping->end <= (unsigned int)cluster_num) ? index2 : index1; + index1 = index3; + } + assert(index1 <= index2); + } +} + +mapping_t* vvfat_image_t::find_mapping_for_cluster(int cluster_num) +{ + int index = find_mapping_for_cluster_aux(cluster_num, 0, mapping.next); + mapping_t* mapping; + if (index >= (int)this->mapping.next) + return NULL; + mapping = (mapping_t*)array_get(&this->mapping, index); + if ((int)mapping->begin > cluster_num) + return NULL; + assert(((int)mapping->begin <= cluster_num) && ((int)mapping->end > cluster_num)); + return mapping; +} + +// This function simply compares path == mapping->path. Since the mappings +// are sorted by cluster, this is expensive: O(n). +mapping_t* vvfat_image_t::find_mapping_for_path(const char* path) +{ + int i; + + for (i = 0; i < (int)this->mapping.next; i++) { + mapping_t* mapping = (mapping_t*)array_get(&this->mapping, i); + if ((mapping->first_mapping_index < 0) && !strcmp(path, mapping->path)) + return mapping; + } + return NULL; +} + +int vvfat_image_t::open_file(mapping_t* mapping) +{ + if (!mapping) + return -1; + if (!current_mapping || + strcmp(current_mapping->path, mapping->path)) { + /* open file */ + int fd = ::open(mapping->path, O_RDONLY +#ifdef O_BINARY + | O_BINARY +#endif +#ifdef O_LARGEFILE + | O_LARGEFILE +#endif + ); + if (fd < 0) + return -1; + close_current_file(); + current_fd = fd; + current_mapping = mapping; + } + return 0; +} + +int vvfat_image_t::read_cluster(int cluster_num) +{ + mapping_t* mapping; + + if (current_cluster != cluster_num) { + int result=0; + off_t offset; + assert(!current_mapping || current_fd || (current_mapping->mode & MODE_DIRECTORY)); + if (!current_mapping + || ((int)current_mapping->begin > cluster_num) + || ((int)current_mapping->end <= cluster_num)) { + // binary search of mappings for file + mapping = find_mapping_for_cluster(cluster_num); + + assert(!mapping || ((cluster_num >= (int)mapping->begin) && (cluster_num < (int)mapping->end))); + + if (mapping && mapping->mode & MODE_DIRECTORY) { + close_current_file(); + current_mapping = mapping; +read_cluster_directory: + offset = cluster_size * (cluster_num - current_mapping->begin); + cluster = (unsigned char*)directory.pointer+offset + + 0x20 * current_mapping->info.dir.first_dir_index; + assert(((cluster -(unsigned char*)directory.pointer) % cluster_size) == 0); + assert((char*)cluster + cluster_size <= directory.pointer + directory.next * directory.item_size); + current_cluster = cluster_num; + return 0; + } + + if (open_file(mapping)) + return -2; + } else if (current_mapping->mode & MODE_DIRECTORY) + goto read_cluster_directory; + + assert(current_fd); + + offset = cluster_size * (cluster_num - current_mapping->begin) + current_mapping->info.file.offset; + if (::lseek(current_fd, offset, SEEK_SET) != offset) + return -3; + cluster = cluster_buffer; + result = ::read(current_fd, cluster, cluster_size); + if (result < 0) { + current_cluster = 0xffff; + return -1; + } + current_cluster = cluster_num; + } + return 0; +} + +ssize_t vvfat_image_t::read(void* buf, size_t count) +{ + char *cbuf = (char*)buf; + Bit32u scount = (Bit32u)(count / 0x200); + + while (scount-- > 0) { + if ((size_t)redolog->read(cbuf, 0x200) != 0x200) { + if (sector_num < offset_to_data) { + if (sector_num < (offset_to_bootsector + reserved_sectors)) + memcpy(cbuf, &first_sectors[sector_num * 0x200], 0x200); + else if ((sector_num - offset_to_fat) < sectors_per_fat) + memcpy(cbuf, &fat.pointer[(sector_num - offset_to_fat) * 0x200], 0x200); + else if ((sector_num - offset_to_fat - sectors_per_fat) < sectors_per_fat) + memcpy(cbuf, &fat.pointer[(sector_num - offset_to_fat - sectors_per_fat) * 0x200], 0x200); + else + memcpy(cbuf, &directory.pointer[(sector_num - offset_to_root_dir) * 0x200], 0x200); + } else { + Bit32u sector = sector_num - offset_to_data, + sector_offset_in_cluster = (sector % sectors_per_cluster), + cluster_num = sector / sectors_per_cluster + 2; + if (read_cluster(cluster_num) != 0) { + memset(cbuf, 0, 0x200); + } else { + memcpy(cbuf, cluster + sector_offset_in_cluster * 0x200, 0x200); + } + } + } + sector_num++; + cbuf += 0x200; + } + return count; +} + +ssize_t vvfat_image_t::write(const void* buf, size_t count) +{ + ssize_t ret = 0; + char *cbuf = (char*)buf; + Bit32u scount = (Bit32u)(count / 512); + + while (scount-- > 0) { + if ((fat_type == 32) && (sector_num == (offset_to_bootsector + 1))) { + // allow writing to FS info sector + memcpy(&first_sectors[sector_num * 0x200], cbuf, 0x200); + } else if (sector_num < (offset_to_bootsector + reserved_sectors)) { + BX_ERROR(("VVFAT write ignored: sector=%d, count=%d", sector_num, scount)); + ret = -1; + } else { + vvfat_modified = 1; + ret = redolog->write(cbuf, 0x200); + } + if (ret < 0) break; + sector_num++; + cbuf += 0x200; + } + return (ret < 0) ? ret : count; +} + +Bit32u vvfat_image_t::get_capabilities(void) +{ + return HDIMAGE_HAS_GEOMETRY; +} diff --git a/bochs/iodev/vvfat.h b/bochs/iodev/vvfat.h new file mode 100644 index 00000000..f96ad24f --- /dev/null +++ b/bochs/iodev/vvfat.h @@ -0,0 +1,187 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2010/2011 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#ifndef BX_VVFAT_H +#define BX_VVFAT_H + +typedef struct array_t { + char *pointer; + unsigned int size, next, item_size; +} array_t; + +typedef struct { + Bit8u head; + Bit8u sector; + Bit8u cylinder; +} mbr_chs_t; + +#if defined(_MSC_VER) && (_MSC_VER<1300) +#pragma pack(push, 1) +#elif defined(__MWERKS__) && defined(macintosh) +#pragma options align=packed +#endif + +typedef +#if defined(_MSC_VER) && (_MSC_VER>=1300) + __declspec(align(1)) +#endif + struct direntry_t { + Bit8u name[8]; + Bit8u extension[3]; + Bit8u attributes; + Bit8u reserved[2]; + Bit16u ctime; + Bit16u cdate; + Bit16u adate; + Bit16u begin_hi; + Bit16u mtime; + Bit16u mdate; + Bit16u begin; + Bit32u size; +} +#if !defined(_MSC_VER) + GCC_ATTRIBUTE((packed)) +#endif +direntry_t; + +#if defined(_MSC_VER) && (_MSC_VER<1300) +#pragma pack(pop) +#elif defined(__MWERKS__) && defined(macintosh) +#pragma options align=reset +#endif + +// this structure are used to transparently access the files + +enum { + MODE_UNDEFINED = 0, MODE_NORMAL = 1, MODE_MODIFIED = 2, + MODE_DIRECTORY = 4, MODE_FAKED = 8, + MODE_DELETED = 16, MODE_RENAMED = 32 +}; + +typedef struct mapping_t { + // begin is the first cluster, end is the last+1 + Bit32u begin, end; + // as this->directory is growable, no pointer may be used here + unsigned int dir_index; + // the clusters of a file may be in any order; this points to the first + int first_mapping_index; + union { + /* offset is + * - the offset in the file (in clusters) for a file, or + * - the next cluster of the directory for a directory, and + * - the address of the buffer for a faked entry + */ + struct { + Bit32u offset; + } file; + struct { + int parent_mapping_index; + int first_dir_index; + } dir; + } info; + // path contains the full path, i.e. it always starts with vvfat_path + char *path; + + Bit8u mode; + + int read_only; +} mapping_t; + +class vvfat_image_t : public device_image_t +{ + public: + vvfat_image_t(Bit64u size, const char* redolog_name); + virtual ~vvfat_image_t(); + + int open(const char* dirname); + void close(); + Bit64s lseek(Bit64s offset, int whence); + ssize_t read(void* buf, size_t count); + ssize_t write(const void* buf, size_t count); + Bit32u get_capabilities(); + + private: + bx_bool sector2CHS(Bit32u spos, mbr_chs_t *chs); + void init_mbr(); + direntry_t* create_long_filename(const char* filename); + void fat_set(unsigned int cluster, Bit32u value); + void init_fat(); + direntry_t* create_short_and_long_name(unsigned int directory_start, + const char* filename, int is_dot); + int read_directory(int mapping_index); + Bit32u sector2cluster(off_t sector_num); + off_t cluster2sector(Bit32u cluster_num); + int init_directories(const char* dirname); + bx_bool read_sector_from_file(const char *path, Bit8u *buffer, Bit32u sector); + void set_file_attributes(void); + Bit32u fat_get_next(Bit32u current); + bx_bool write_file(const char *path, direntry_t *entry, bx_bool create); + direntry_t* read_direntry(Bit8u *buffer, char *filename); + void parse_directory(const char *path, Bit32u start_cluster); + void commit_changes(void); + void close_current_file(void); + int open_file(mapping_t* mapping); + int find_mapping_for_cluster_aux(int cluster_num, int index1, int index2); + mapping_t* find_mapping_for_cluster(int cluster_num); + mapping_t* find_mapping_for_path(const char* path); + int read_cluster(int cluster_num); + + Bit8u *first_sectors; + Bit32u offset_to_bootsector; + Bit32u offset_to_fat; + Bit32u offset_to_root_dir; + Bit32u offset_to_data; + + Bit16u cluster_size; + Bit8u sectors_per_cluster; + Bit32u sectors_per_fat; + Bit32u sector_count; + Bit32u cluster_count; // total number of clusters of this partition + Bit32u max_fat_value; + Bit32u first_cluster_of_root_dir; + Bit16u root_entries; + Bit16u reserved_sectors; + + Bit8u fat_type; + array_t fat, directory, mapping; + + int current_fd; + mapping_t* current_mapping; + Bit8u *cluster; // points to current cluster + Bit8u *cluster_buffer; // points to a buffer to hold temp data + Bit16u current_cluster; + + const char *vvfat_path; + Bit32u sector_num; + + bx_bool use_mbr_file; + bx_bool use_boot_file; + FILE *vvfat_attr_fd; + + bx_bool vvfat_modified; + void *fat2; + redolog_t *redolog; // Redolog instance + char *redolog_name; // Redolog name + char *redolog_temp; // Redolog temporary file name +}; + +#endif diff --git a/bochs/load32bitOShack.cc b/bochs/load32bitOShack.cc new file mode 100644 index 00000000..06d98f3c --- /dev/null +++ b/bochs/load32bitOShack.cc @@ -0,0 +1,305 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001 MandrakeSoft S.A. +// +// MandrakeSoft S.A. +// 43, rue d'Aboukir +// 75002 Paris - France +// http://www.linux-mandrake.com/ +// http://www.mandrakesoft.com/ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA + +#include "bochs.h" +#include "param_names.h" +#include "cpu/cpu.h" +#include "iodev/iodev.h" +#define LOG_THIS genlog-> + +static void bx_load_linux_hack(void); +static void bx_load_null_kernel_hack(void); +static Bit32u bx_load_kernel_image(char *path, Bit32u paddr); + +void bx_load32bitOSimagehack(void) +{ + if (SIM->get_param_string(BXPN_LOAD32BITOS_IOLOG) && + (SIM->get_param_string(BXPN_LOAD32BITOS_IOLOG)->getptr()[0] != '\0')) + { + + // Replay IO from log to initialize IO devices to + // a reasonable state needed for the OS. This is done + // in lieu of running the 16-bit BIOS to init things, + // since we want to test straight 32bit stuff for + // freemware. + + FILE *fp = fopen(SIM->get_param_string(BXPN_LOAD32BITOS_IOLOG)->getptr(), "r"); + if (fp == NULL) { + BX_PANIC(("could not open IO init file.")); + } + + while (1) { + unsigned len, op, port, val; + int ret; + ret = fscanf(fp, "%u %u %x %x\n", &len, &op, &port, &val); + if (ret != 4) { + BX_PANIC(("could not open IO init file.")); + } + if (op == 0) { + // read + bx_devices.inp(port, len); + } + else if (op == 1) { + // write + bx_devices.outp(port, val, len); + } + else { + BX_PANIC(("bad IO op in init filen")); + } + if (feof(fp)) break; + } + } //if iolog file to load + + // Invoke proper hack depending on which OS image we're loading + switch (SIM->get_param_enum(BXPN_LOAD32BITOS_WHICH)->get()) { + case Load32bitOSLinux: + bx_load_linux_hack(); + break; + case Load32bitOSNullKernel: + bx_load_null_kernel_hack(); + break; + default: + BX_PANIC(("load32bitOSImage: OS not recognized")); + } +} + +struct gdt_entry +{ + Bit32u low; + Bit32u high; +}; + +struct linux_setup_params +{ + /* 0x000 */ Bit8u orig_x; + /* 0x001 */ Bit8u orig_y; + /* 0x002 */ Bit16u memory_size_std; + /* 0x004 */ Bit16u orig_video_page; + /* 0x006 */ Bit8u orig_video_mode; + /* 0x007 */ Bit8u orig_video_cols; + /* 0x008 */ Bit16u unused1; + /* 0x00a */ Bit16u orig_video_ega_bx; + /* 0x00c */ Bit16u unused2; + /* 0x00e */ Bit8u orig_video_lines; + /* 0x00f */ Bit8u orig_video_isVGA; + /* 0x010 */ Bit16u orig_video_points; + /* 0x012 */ Bit8u pad1[0x40 - 0x12]; + /* 0x040 */ Bit8u apm_info[0x80 - 0x40]; + /* 0x080 */ Bit8u hd0_info[16]; + /* 0x090 */ Bit8u hd1_info[16]; + /* 0x0a0 */ Bit8u pad2[0x1e0 - 0xa0]; + /* 0x1e0 */ Bit32u memory_size_ext; + /* 0x1e4 */ Bit8u pad3[0x1f1 - 0x1e4]; + /* 0x1f1 */ Bit8u setup_sects; + /* 0x1f2 */ Bit16u mount_root_rdonly; + /* 0x1f4 */ Bit16u sys_size; + /* 0x1f6 */ Bit16u swap_dev; + /* 0x1f8 */ Bit16u ramdisk_flags; + /* 0x1fa */ Bit16u vga_mode; + /* 0x1fc */ Bit16u orig_root_dev; + /* 0x1fe */ Bit16u bootsect_magic; + /* 0x200 */ Bit8u pad4[0x210 - 0x200]; + /* 0x210 */ Bit32u loader_type; + /* 0x214 */ Bit32u kernel_start; + /* 0x218 */ Bit32u initrd_start; + /* 0x21c */ Bit32u initrd_size; + /* 0x220 */ Bit8u pad5[0x400 - 0x220]; + /* 0x400 */ struct gdt_entry gdt[128]; + /* 0x800 */ Bit8u commandline[2048]; +}; + +static void bx_load_linux_setup_params(Bit32u initrd_start, Bit32u initrd_size) +{ + struct linux_setup_params *params = + (struct linux_setup_params *) BX_MEM(0)->get_vector(0x00090000); + + memset(params, '\0', sizeof(*params)); + + /* Video settings (standard VGA) */ + params->orig_x = 0; + params->orig_y = 0; + params->orig_video_page = 0; + params->orig_video_mode = 3; + params->orig_video_cols = 80; + params->orig_video_lines = 25; + params->orig_video_points = 16; + params->orig_video_isVGA = 1; + params->orig_video_ega_bx = 3; + + /* Memory size (total mem - 1MB, in KB) */ + params->memory_size_ext = (BX_MEM(0)->get_memory_len()/(1024*1024) - 1) * 1024; + + /* Boot parameters */ + params->loader_type = 1; + params->bootsect_magic = 0xaa55; + params->mount_root_rdonly = 0; + params->orig_root_dev = 0x0100; + params->initrd_start = initrd_start; + params->initrd_size = initrd_size; + + /* Initial GDT */ + params->gdt[2].high = 0x00cf9a00; + params->gdt[2].low = 0x0000ffff; + params->gdt[3].high = 0x00cf9200; + params->gdt[3].low = 0x0000ffff; +} + +void bx_load_linux_hack(void) +{ + Bit32u initrd_start = 0, initrd_size = 0; + + // The RESET function will have been called first. + // Set CPU and memory features which are assumed at this point. + + // Load Linux kernel image + bx_load_kernel_image(SIM->get_param_string(BXPN_LOAD32BITOS_PATH)->getptr(), 0x100000); + + // Load initial ramdisk image if requested + char *tmpPtr = SIM->get_param_string(BXPN_LOAD32BITOS_INITRD)->getptr(); + if (tmpPtr && tmpPtr[0]) /* The initial value is "" and not NULL */ + { + initrd_start = 0x00800000; /* FIXME: load at top of memory */ + initrd_size = bx_load_kernel_image(tmpPtr, initrd_start); + } + + // Setup Linux startup parameters buffer + bx_load_linux_setup_params(initrd_start, initrd_size); + + // Enable A20 line + BX_SET_ENABLE_A20(1); + + // Setup PICs the way Linux likes it + BX_OUTP(0x20, 0x11, 1); + BX_OUTP(0xA0, 0x11, 1); + BX_OUTP(0x21, 0x20, 1); + BX_OUTP(0xA1, 0x28, 1); + BX_OUTP(0x21, 0x04, 1); + BX_OUTP(0xA1, 0x02, 1); + BX_OUTP(0x21, 0x01, 1); + BX_OUTP(0xA1, 0x01, 1); + BX_OUTP(0x21, 0xFF, 1); + BX_OUTP(0xA1, 0xFB, 1); + + // Disable interrupts and NMIs + BX_CPU(0)->clear_IF(); + BX_OUTP(0x70, 0x80, 1); + + // Enter protected mode + // Fixed by george (kyriazis at nvidia.com) + // BX_CPU(0)->cr0.pe = 1; + // BX_CPU(0)->cr0.val32 |= 0x01; + + if (! BX_CPU(0)->SetCR0(BX_CPU(0)->cr0.val32 | 0x01)) { + BX_INFO(("bx_load_linux_hack: can't enable protected mode in CR0")); + BX_EXIT(1); + } + + // load esi with real_mode + BX_CPU(0)->gen_reg[BX_32BIT_REG_ESI].dword.erx = 0x90000; + + // Set up initial GDT + BX_CPU(0)->gdtr.limit = 0x400; + BX_CPU(0)->gdtr.base = 0x00090400; + + // Jump to protected mode entry point + BX_CPU(0)->jump_protected(NULL, 0x10, 0x100000); +} + +void bx_load_null_kernel_hack(void) +{ + // The RESET function will have been called first. + // Set CPU and memory features which are assumed at this point. + + bx_load_kernel_image(SIM->get_param_string(BXPN_LOAD32BITOS_PATH)->getptr(), 0x100000); + + // EIP deltas + BX_CPU(0)->prev_rip = BX_CPU(0)->gen_reg[BX_32BIT_REG_EIP].dword.erx = 0x100000; + + // CS deltas + BX_CPU(0)->sregs[BX_SEG_REG_CS].cache.u.segment.base = 0x00000000; + BX_CPU(0)->sregs[BX_SEG_REG_CS].cache.u.segment.limit_scaled = 0xFFFFFFFF; + BX_CPU(0)->sregs[BX_SEG_REG_CS].cache.u.segment.g = 1; // page granularity + BX_CPU(0)->sregs[BX_SEG_REG_CS].cache.u.segment.d_b = 1; // 32bit + + // DS deltas + BX_CPU(0)->sregs[BX_SEG_REG_DS].cache.u.segment.base = 0x00000000; + BX_CPU(0)->sregs[BX_SEG_REG_DS].cache.u.segment.limit_scaled = 0xFFFFFFFF; + BX_CPU(0)->sregs[BX_SEG_REG_DS].cache.u.segment.g = 1; // page granularity + BX_CPU(0)->sregs[BX_SEG_REG_DS].cache.u.segment.d_b = 1; // 32bit + + // CR0 deltas + BX_CPU(0)->cr0.set_PE(1); // protected mode + + BX_CPU(0)->handleCpuModeChange(); +} + +Bit32u bx_load_kernel_image(char *path, Bit32u paddr) +{ + struct stat stat_buf; + int fd, ret; + unsigned long size, offset; + Bit32u page_size; + + // read in ROM BIOS image file + fd = open(path, O_RDONLY +#ifdef O_BINARY + | O_BINARY +#endif + ); + if (fd < 0) { + BX_INFO(("load_kernel_image: couldn't open image file '%s'.", path)); + BX_EXIT(1); + } + ret = fstat(fd, &stat_buf); + if (ret) { + BX_INFO(("load_kernel_image: couldn't stat image file '%s'.", path)); + BX_EXIT(1); + } + + size = (unsigned long) stat_buf.st_size; + page_size = ((Bit32u)size + 0xfff) & ~0xfff; + + if ((paddr + size) > BX_MEM(0)->get_memory_len()) { + BX_INFO(("load_kernel_image: address range > physical memsize!")); + BX_EXIT(1); + } + + offset = 0; + while (size > 0) { + ret = read(fd, (bx_ptr_t) BX_MEM(0)->get_vector(paddr + offset), size); + if (ret <= 0) { + BX_INFO(("load_kernel_image: read failed on image")); + BX_EXIT(1); + } + size -= ret; + offset += ret; + } + close(fd); + BX_INFO(("load_kernel_image: '%s', size=%u read into memory at %08x", + path, (unsigned) stat_buf.st_size, (unsigned) paddr)); + + return page_size; +} diff --git a/bochs/logio.cc b/bochs/logio.cc new file mode 100644 index 00000000..aea0fc16 --- /dev/null +++ b/bochs/logio.cc @@ -0,0 +1,626 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2010 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#include "bochs.h" +#include "cpu/cpu.h" +#include "iodev/iodev.h" +#include + +#if BX_WITH_CARBON +#define Float32 KLUDGE_Float32 +#define Float64 KLUDGE_Float64 +#include +#undef Float32 +#undef Float64 +#endif + +// Just for the iofunctions + +static int Allocio=0; + +const char* iofunctions::getlevel(int i) +{ + static const char *loglevel[N_LOGLEV] = { + "DEBUG", + "INFO", + "ERROR", + "PANIC", + "PASS" + }; + + if (i>=0 && i=ACT_IGNORE && iput("IO"); + log->ldebug("Init(log file: '%s').",logfn); +} + +void iofunctions::add_logfn(logfunc_t *fn) +{ + assert(n_logfn < MAX_LOGFNS); + logfn_list[n_logfn++] = fn; +} + +void iofunctions::remove_logfn(logfunc_t *fn) +{ + assert(n_logfn > 0); + int i = 0; + while ((fn != logfn_list[i]) && (i < n_logfn)) { + i++; + }; + if (i < n_logfn) { + for (int j=i; jsetonoff(loglevel, action); +} + +void iofunctions::init_log(const char *fn) +{ + assert(magic==MAGIC_LOGNUM); + // use newfd/newfn so that we can log the message to the OLD log + // file descriptor. + FILE *newfd = stderr; + const char *newfn = "/dev/stderr"; + if(strcmp(fn, "-") != 0) { + newfd = fopen(fn, "w"); + if(newfd != NULL) { + newfn = strdup(fn); + log->ldebug("Opened log file '%s'.", fn); + } else { + // in constructor, genlog might not exist yet, so do it the safe way. + log->error("Couldn't open log file: %s, using stderr instead", fn); + newfd = stderr; + } + } + logfd = newfd; + logfn = newfn; +} + +void iofunctions::init_log(FILE *fs) +{ + assert(magic==MAGIC_LOGNUM); + logfd = fs; + + if(fs == stderr) { + logfn = "/dev/stderr"; + } else if(fs == stdout) { + logfn = "/dev/stdout"; + } else { + logfn = "(unknown)"; + } +} + +void iofunctions::init_log(int fd) +{ + assert(magic==MAGIC_LOGNUM); + FILE *tmpfd; + if((tmpfd = fdopen(fd,"w")) == NULL) { + log->panic("Couldn't open fd %d as a stream for writing", fd); + return; + } + + init_log(tmpfd); +}; + +void iofunctions::exit_log() +{ + flush(); + if (logfd != stderr) { + fclose(logfd); + logfd = stderr; + free((char *)logfn); + logfn = "/dev/stderr"; + } +} + +// all other functions may use genlog safely. +#define LOG_THIS genlog-> + +// This converts the option string to a printf style string with the following args: +// 1. timer, 2. event, 3. cpu0 eip, 4. device +void iofunctions::set_log_prefix(const char* prefix) +{ + strcpy(logprefix, prefix); +} + +// iofunctions::out(level, prefix, fmt, ap) +// DO NOT nest out() from ::info() and the like. +// fmt and ap retained for direct printinf from iofunctions only! + +void iofunctions::out(int level, const char *prefix, const char *fmt, va_list ap) +{ + char c=' ', *s; + assert(magic==MAGIC_LOGNUM); + assert(this != NULL); + assert(logfd != NULL); + + switch (level) { + case LOGLEV_INFO: c='i'; break; + case LOGLEV_PANIC: c='p'; break; + case LOGLEV_PASS: c='s'; break; + case LOGLEV_ERROR: c='e'; break; + case LOGLEV_DEBUG: c='d'; break; + default: break; + } + + s=logprefix; + while(*s) { + switch(*s) { + case '%': + if(*(s+1)) s++; + else break; + switch(*s) { + case 'd': + fprintf(logfd, "%s", prefix==NULL?"":prefix); + break; + case 't': + fprintf(logfd, FMT_TICK, bx_pc_system.time_ticks()); + break; + case 'i': +#if BX_SUPPORT_SMP == 0 + fprintf(logfd, "%08x", BX_CPU(0)->get_eip()); +#endif + break; + case 'e': + fprintf(logfd, "%c", c); + break; + case '%': + fprintf(logfd,"%%"); + break; + default: + fprintf(logfd,"%%%c",*s); + } + break; + default : + fprintf(logfd,"%c",*s); + } + s++; + } + + fprintf(logfd," "); + + if(level==LOGLEV_PANIC) + fprintf(logfd, ">>PANIC<< "); + if(level==LOGLEV_PASS) + fprintf(logfd, ">>PASS<< "); + + vfprintf(logfd, fmt, ap); + fprintf(logfd, "\n"); + fflush(logfd); +} + +iofunctions::iofunctions(FILE *fs) +{ + init(); + init_log(fs); +} + +iofunctions::iofunctions(const char *fn) +{ + init(); + init_log(fn); +} + +iofunctions::iofunctions(int fd) +{ + init(); + init_log(fd); +} + +iofunctions::iofunctions() +{ + init(); +} + +iofunctions::~iofunctions(void) +{ + // flush before erasing magic number, or flush does nothing. + flush(); + magic=0; +} + +#define LOG_THIS genlog-> + +int logfunctions::default_onoff[N_LOGLEV] = +{ + ACT_IGNORE, // ignore debug + ACT_REPORT, // report info + ACT_REPORT, // report error +#if BX_WITH_WX || BX_WITH_WIN32 || BX_WITH_X11 + ACT_ASK, // on panic, ask user what to do +#else + ACT_FATAL, // on panic, quit +#endif + ACT_FATAL +}; + +logfunctions::logfunctions(void) +{ + prefix = NULL; + put(" "); + if (io == NULL && Allocio == 0) { + Allocio = 1; + io = new iofunc_t(stderr); + } + setio(io); + // BUG: unfortunately this can be called before the bochsrc is read, + // which means that the bochsrc has no effect on the actions. + for (int i=0; iremove_logfn(this); + if (prefix) free(prefix); +} + +void logfunctions::setio(iofunc_t *i) +{ + // add pointer to iofunction object to use + logio = i; + // give iofunction a pointer to me + i->add_logfn(this); +} + +void logfunctions::put(const char *p) +{ + char *tmpbuf=strdup("[ ]"); // if we ever have more than 32 chars, + // we need to rethink this + + if (tmpbuf == NULL) + return; // allocation not successful + + if (prefix != NULL) + { + free(prefix); // free previously allocated memory + prefix = NULL; + } + + size_t len=strlen(p); + if (len > (strlen(tmpbuf) - 2)) { + len = strlen(tmpbuf) - 2; + } + for(size_t i=1;i <= len;i++) { + tmpbuf[i]=p[i-1]; + } + + prefix = tmpbuf; +} + +void logfunctions::info(const char *fmt, ...) +{ + va_list ap; + + assert(logio != NULL); + + if(!onoff[LOGLEV_INFO]) return; + + va_start(ap, fmt); + logio->out(LOGLEV_INFO, prefix, fmt, ap); + if (onoff[LOGLEV_INFO] == ACT_ASK) + ask(LOGLEV_INFO, prefix, fmt, ap); + if (onoff[LOGLEV_INFO] == ACT_FATAL) + fatal(prefix, fmt, ap, 1); + va_end(ap); +} + +void logfunctions::error(const char *fmt, ...) +{ + va_list ap; + + assert(logio != NULL); + + if(!onoff[LOGLEV_ERROR]) return; + + va_start(ap, fmt); + logio->out(LOGLEV_ERROR, prefix, fmt, ap); + if (onoff[LOGLEV_ERROR] == ACT_ASK) + ask(LOGLEV_ERROR, prefix, fmt, ap); + if (onoff[LOGLEV_ERROR] == ACT_FATAL) + fatal(prefix, fmt, ap, 1); + va_end(ap); +} + +void logfunctions::panic(const char *fmt, ...) +{ + va_list ap; + + assert(logio != NULL); + + // Special case for panics since they are so important. Always print + // the panic to the log, no matter what the log action says. + //if(!onoff[LOGLEV_PANIC]) return; + + va_start(ap, fmt); + logio->out(LOGLEV_PANIC, prefix, fmt, ap); + + // This fixes a funny bug on linuxppc where va_list is no pointer but a struct + va_end(ap); + va_start(ap, fmt); + + if (onoff[LOGLEV_PANIC] == ACT_ASK) + ask(LOGLEV_PANIC, prefix, fmt, ap); + if (onoff[LOGLEV_PANIC] == ACT_FATAL) + fatal(prefix, fmt, ap, 1); + va_end(ap); +} + +void logfunctions::pass(const char *fmt, ...) +{ + va_list ap; + + assert(logio != NULL); + + // Special case for panics since they are so important. Always print + // the panic to the log, no matter what the log action says. + //if(!onoff[LOGLEV_PASS]) return; + + va_start(ap, fmt); + logio->out(LOGLEV_PASS, prefix, fmt, ap); + + // This fixes a funny bug on linuxppc where va_list is no pointer but a struct + va_end(ap); + va_start(ap, fmt); + + if (onoff[LOGLEV_PASS] == ACT_ASK) + ask(LOGLEV_PASS, prefix, fmt, ap); + if (onoff[LOGLEV_PASS] == ACT_FATAL) + fatal(prefix, fmt, ap, 101); + va_end(ap); +} + +void logfunctions::ldebug(const char *fmt, ...) +{ + va_list ap; + + assert(logio != NULL); + + if(!onoff[LOGLEV_DEBUG]) return; + + va_start(ap, fmt); + logio->out(LOGLEV_DEBUG, prefix, fmt, ap); + if (onoff[LOGLEV_DEBUG] == ACT_ASK) + ask(LOGLEV_DEBUG, prefix, fmt, ap); + if (onoff[LOGLEV_DEBUG] == ACT_FATAL) + fatal(prefix, fmt, ap, 1); + va_end(ap); +} + +void logfunctions::ask(int level, const char *prefix, const char *fmt, va_list ap) +{ + // Guard against reentry on ask() function. The danger is that some + // function that's called within ask() could trigger another + // BX_PANIC that could call ask() again, leading to infinite + // recursion and infinite asks. + static char in_ask_already = 0; + char buf1[1024]; + if (in_ask_already) { + fprintf(stderr, "logfunctions::ask() should not reenter!!\n"); + return; + } + in_ask_already = 1; + vsnprintf(buf1, sizeof(buf1), fmt, ap); + // FIXME: facility set to 0 because it's unknown. + + // update vga screen. This is useful because sometimes useful messages + // are printed on the screen just before a panic. It's also potentially + // dangerous if this function calls ask again... That's why I added + // the reentry check above. + if (SIM->get_init_done()) DEV_vga_refresh(); + + // ensure the text screen is showing + SIM->set_display_mode(DISP_MODE_CONFIG); + int val = SIM->log_msg(prefix, level, buf1); + switch(val) + { + case BX_LOG_ASK_CHOICE_CONTINUE: + break; + case BX_LOG_ASK_CHOICE_CONTINUE_ALWAYS: + // user said continue, and don't "ask" for this facility again. + setonoff(level, ACT_REPORT); + break; + case BX_LOG_ASK_CHOICE_DIE: + case BX_LOG_NOTIFY_FAILED: + bx_user_quit = (val==BX_LOG_ASK_CHOICE_DIE)?1:0; + in_ask_already = 0; // because fatal will longjmp out + fatal(prefix, buf1, ap, 1); + // should never get here + BX_PANIC(("in ask(), fatal() should never return!")); + break; + case BX_LOG_ASK_CHOICE_DUMP_CORE: + fprintf(stderr, "User chose to dump core...\n"); +#if BX_HAVE_ABORT + abort(); +#else + // do something highly illegal that should kill the process. + // Hey, this is fun! + { + char *crashptr = (char *)0; char c = *crashptr; + } + fprintf(stderr, "Sorry, I couldn't find your abort() function. Exiting."); + exit(0); +#endif +#if BX_DEBUGGER + case BX_LOG_ASK_CHOICE_ENTER_DEBUG: + // user chose debugger. To "drop into the debugger" we just set the + // interrupt_requested bit and continue execution. Before the next + // instruction, it should notice the user interrupt and return to + // the debugger. + bx_debug_break(); + break; +#elif BX_GDBSTUB + case BX_LOG_ASK_CHOICE_ENTER_DEBUG: + bx_gdbstub_break(); + break; +#endif + default: + // this happens if panics happen before the callback is initialized + // in gui/control.cc. + fprintf(stderr, "WARNING: log_msg returned unexpected value %d\n", val); + } + // return to simulation mode + SIM->set_display_mode(DISP_MODE_SIM); + in_ask_already = 0; +} + +#if BX_WITH_CARBON +/* Panic button to display fatal errors. + Completely self contained, can't rely on carbon.cc being available */ +static void carbonFatalDialog(const char *error, const char *exposition) +{ + DialogRef alertDialog; + CFStringRef cfError; + CFStringRef cfExposition; + DialogItemIndex index; + AlertStdCFStringAlertParamRec alertParam = {0}; + + // Init libraries + InitCursor(); + // Assemble dialog + cfError = CFStringCreateWithCString(NULL, error, kCFStringEncodingASCII); + if(exposition != NULL) + { + cfExposition = CFStringCreateWithCString(NULL, exposition, kCFStringEncodingASCII); + } + else { + cfExposition = NULL; + } + alertParam.version = kStdCFStringAlertVersionOne; + alertParam.defaultText = CFSTR("Quit"); + alertParam.position = kWindowDefaultPosition; + alertParam.defaultButton = kAlertStdAlertOKButton; + // Display Dialog + CreateStandardAlert( + kAlertStopAlert, + cfError, + cfExposition, /* can be NULL */ + &alertParam, /* can be NULL */ + &alertDialog); + RunStandardAlert(alertDialog, NULL, &index); + // Cleanup + CFRelease(cfError); + if(cfExposition != NULL) { CFRelease(cfExposition); } +} +#endif + +void logfunctions::fatal(const char *prefix, const char *fmt, va_list ap, int exit_status) +{ +#if !BX_WITH_WX + // store prefix and message in 'exit_msg' before unloading device plugins + char tmpbuf[1024]; + char exit_msg[1024]; + + vsprintf(tmpbuf, fmt, ap); + sprintf(exit_msg, "%s %s", prefix, tmpbuf); +#endif +#if !BX_DEBUGGER + bx_atexit(); +#endif +#if BX_WITH_CARBON + if(!isatty(STDIN_FILENO) && !SIM->get_init_done()) + { + char buf1[1024]; + char buf2[1024]; + vsnprintf(buf1, sizeof(buf1), fmt, ap); + snprintf(buf2, sizeof(buf2), "Bochs startup error\n%s", buf1); + carbonFatalDialog(buf2, + "For more information, try running Bochs within Terminal by clicking on \"bochs.scpt\"."); + } +#endif +#if !BX_WITH_WX + static const char *divider = "========================================================================"; + fprintf(stderr, "%s\n", divider); + fprintf(stderr, "Bochs is exiting with the following message:\n"); + fprintf(stderr, "%s", exit_msg); + fprintf(stderr, "\n%s\n", divider); +#endif +#if !BX_DEBUGGER + BX_EXIT(exit_status); +#else + static bx_bool dbg_exit_called = 0; + if (dbg_exit_called == 0) { + dbg_exit_called = 1; + bx_dbg_exit(exit_status); + } +#endif + // not safe to use BX_* log functions in here. + fprintf(stderr, "fatal() should never return, but it just did\n"); +} + +iofunc_t *io = NULL; +logfunc_t *genlog = NULL; + +void bx_center_print(FILE *file, const char *line, unsigned maxwidth) +{ + size_t len = strlen(line); + if (len > maxwidth) + BX_PANIC(("bx_center_print: line is too long: '%s'", line)); + size_t imax = (maxwidth - len) >> 1; + for (size_t i=0; i + This file is part of GNU Libtool. + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +As a special exception to the GNU Lesser General Public License, +if you distribute this file as part of a program or library that +is built using GNU libtool, you may include it under the same +distribution terms that you use for the rest of that program. + +This library 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 +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +// ltdlconf.h added for Bochs +#include "ltdlconf.h" + +#if HAVE_CONFIG_H +# include +#endif + +#if HAVE_UNISTD_H +# include +#endif + +#if HAVE_STDIO_H +# include +#endif + +#if HAVE_STDLIB_H +# include +#endif + +#if HAVE_STRING_H +# include +#else +# if HAVE_STRINGS_H +# include +# endif +#endif + +#if HAVE_CTYPE_H +# include +#endif + +#if HAVE_MALLOC_H +# include +#endif + +#if HAVE_MEMORY_H +# include +#endif + +#if HAVE_ERRNO_H +# include +#endif + +#if HAVE_DIRENT_H +# include +# define LT_D_NAMLEN(dirent) (strlen((dirent)->d_name)) +#else +# define dirent direct +# define LT_D_NAMLEN(dirent) ((dirent)->d_namlen) +# if HAVE_SYS_NDIR_H +# include +# endif +# if HAVE_SYS_DIR_H +# include +# endif +# if HAVE_NDIR_H +# include +# endif +#endif + +#if HAVE_ARGZ_H +# include +#endif + +#if HAVE_ASSERT_H +# include +#else +# ifdef __GNUC__ +# warning using my own assert +# endif +# define assert(cond) while (!(cond)) { fprintf (stderr, "Assert failed at %s:%d: '%s'\n", __FILE__, __LINE__, #cond); abort(); } +#endif + +#define LTDEBUG_PRINTF(x) /* debug output disabled */ +//#define LTDEBUG_PRINTF(x) do{ printf("LT_DEBUG: "); printf x; } while (0) + +#include "ltdl.h" + + + + +/* --- WINDOWS SUPPORT --- */ + + +#ifdef DLL_EXPORT +# define LT_GLOBAL_DATA __declspec(dllexport) +#else +# define LT_GLOBAL_DATA +#endif + +/* fopen() mode flags for reading a text file */ +#undef LT_READTEXT_MODE +#ifdef __WINDOWS__ +# define LT_READTEXT_MODE "rt" +#else +# define LT_READTEXT_MODE "r" +#endif + + + + +/* --- MANIFEST CONSTANTS --- */ + + +/* Standard libltdl search path environment variable name */ +#undef LTDL_SEARCHPATH_VAR +#define LTDL_SEARCHPATH_VAR "LTDL_LIBRARY_PATH" + +/* Standard libtool archive file extension. */ +#undef LTDL_ARCHIVE_EXT +#define LTDL_ARCHIVE_EXT ".la" + +/* max. filename length */ +#ifndef LT_FILENAME_MAX +# define LT_FILENAME_MAX 1024 +#endif + +/* This is the maximum symbol size that won't require malloc/free */ +#undef LT_SYMBOL_LENGTH +#define LT_SYMBOL_LENGTH 128 + +/* This accounts for the _LTX_ separator */ +#undef LT_SYMBOL_OVERHEAD +#define LT_SYMBOL_OVERHEAD 5 + + + + +/* --- MEMORY HANDLING --- */ + + +/* These are the functions used internally. In addition to making + use of the associated function pointers above, they also perform + error handling. */ +static char *lt_estrdup LT_PARAMS((const char *str)); +static lt_ptr lt_emalloc LT_PARAMS((size_t size)); +static lt_ptr lt_erealloc LT_PARAMS((lt_ptr addr, size_t size)); + +static lt_ptr rpl_realloc LT_PARAMS((lt_ptr ptr, size_t size)); + +/* These are the pointers that can be changed by the caller: */ +LT_GLOBAL_DATA lt_ptr (*lt_dlmalloc) LT_PARAMS((size_t size)) + = (lt_ptr (*) LT_PARAMS((size_t))) malloc; +LT_GLOBAL_DATA lt_ptr (*lt_dlrealloc) LT_PARAMS((lt_ptr ptr, size_t size)) + = (lt_ptr (*) LT_PARAMS((lt_ptr, size_t))) rpl_realloc; +LT_GLOBAL_DATA void (*lt_dlfree) LT_PARAMS((lt_ptr ptr)) + = (void (*) LT_PARAMS((lt_ptr))) free; + +/* The following macros reduce the amount of typing needed to cast + assigned memory. */ +#define LT_DLMALLOC(tp, n) ((tp *) lt_dlmalloc ((n) * sizeof(tp))) +#define LT_DLREALLOC(tp, p, n) ((tp *) rpl_realloc ((p), (n) * sizeof(tp))) +#define LT_DLFREE(p) \ + LT_STMT_START { if (p) (p) = (lt_dlfree (p), (lt_ptr) 0); } LT_STMT_END + +#define LT_EMALLOC(tp, n) ((tp *) lt_emalloc ((n) * sizeof(tp))) +#define LT_EREALLOC(tp, p, n) ((tp *) lt_erealloc ((p), (n) * sizeof(tp))) + +#define LT_DLMEM_REASSIGN(p, q) LT_STMT_START { \ + if ((p) != (q)) { lt_dlfree (p); (p) = (q); (q) = 0; } \ + } LT_STMT_END + + +/* --- REPLACEMENT FUNCTIONS --- */ + + +#undef strdup +#define strdup rpl_strdup + +static char *strdup LT_PARAMS((const char *str)); + +char * +strdup(str) + const char *str; +{ + char *tmp = 0; + + if (str) + { + tmp = LT_DLMALLOC (char, 1+ strlen (str)); + if (tmp) + { + strcpy(tmp, str); + } + } + + return tmp; +} + + +#if ! HAVE_STRCMP + +#undef strcmp +#define strcmp rpl_strcmp + +static int strcmp LT_PARAMS((const char *str1, const char *str2)); + +int +strcmp (str1, str2) + const char *str1; + const char *str2; +{ + if (str1 == str2) + return 0; + if (str1 == 0) + return -1; + if (str2 == 0) + return 1; + + for (;*str1 && *str2; ++str1, ++str2) + { + if (*str1 != *str2) + break; + } + + return (int)(*str1 - *str2); +} +#endif + + +#if ! HAVE_STRCHR + +# if HAVE_INDEX +# define strchr index +# else +# define strchr rpl_strchr + +static const char *strchr LT_PARAMS((const char *str, int ch)); + +const char* +strchr(str, ch) + const char *str; + int ch; +{ + const char *p; + + for (p = str; *p != (char)ch && *p != LT_EOS_CHAR; ++p) + /*NOWORK*/; + + return (*p == (char)ch) ? p : 0; +} + +# endif +#endif /* !HAVE_STRCHR */ + + +#if ! HAVE_STRRCHR + +# if HAVE_RINDEX +# define strrchr rindex +# else +# define strrchr rpl_strrchr + +static const char *strrchr LT_PARAMS((const char *str, int ch)); + +const char* +strrchr(str, ch) + const char *str; + int ch; +{ + const char *p, *q = 0; + + for (p = str; *p != LT_EOS_CHAR; ++p) + { + if (*p == (char) ch) + { + q = p; + } + } + + return q; +} + +# endif +#endif + +/* NOTE: Neither bcopy nor the memcpy implementation below can + reliably handle copying in overlapping areas of memory. Use + memmove (for which there is a fallback implmentation below) + if you need that behaviour. */ +#if ! HAVE_MEMCPY + +# if HAVE_BCOPY +# define memcpy(dest, src, size) bcopy (src, dest, size) +# else +# define memcpy rpl_memcpy + +static lt_ptr memcpy LT_PARAMS((lt_ptr dest, const lt_ptr src, size_t size)); + +lt_ptr +memcpy (dest, src, size) + lt_ptr dest; + const lt_ptr src; + size_t size; +{ + size_t i = 0; + + for (i = 0; i < size; ++i) + { + dest[i] = src[i]; + } + + return dest; +} + +# endif /* !HAVE_BCOPY */ +#endif /* !HAVE_MEMCPY */ + +#if ! HAVE_MEMMOVE +# define memmove rpl_memmove + +static lt_ptr memmove LT_PARAMS((lt_ptr dest, const lt_ptr src, size_t size)); + +lt_ptr +memmove (dest, src, size) + lt_ptr dest; + const lt_ptr src; + size_t size; +{ + size_t i; + + if (dest < src) + for (i = 0; i < size; ++i) + { + dest[i] = src[i]; + } + else if (dest > src) + for (i = size -1; i >= 0; --i) + { + dest[i] = src[i]; + } + + return dest; +} + +#endif /* !HAVE_MEMMOVE */ + + +/* According to Alexandre Oliva , + ``realloc is not entirely portable'' + In any case we want to use the allocator supplied by the user without + burdening them with an lt_dlrealloc function pointer to maintain. + Instead implement our own version (with known boundary conditions) + using lt_dlmalloc and lt_dlfree. */ + +#undef realloc +#define realloc rpl_realloc + +lt_ptr +realloc (ptr, size) + lt_ptr ptr; + size_t size; +{ + if (size <= 0) + { + /* For zero or less bytes, free the original memory */ + if (ptr != 0) + { + lt_dlfree (ptr); + } + + return (lt_ptr) 0; + } + else if (ptr == 0) + { + /* Allow reallocation of a NULL pointer. */ + return lt_dlmalloc (size); + } + else + { + /* Allocate a new block, copy and free the old block. */ + lt_ptr mem = lt_dlmalloc (size); + + if (mem) + { + memcpy (mem, ptr, size); + lt_dlfree (ptr); + } + + /* Note that the contents of PTR are not damaged if there is + insufficient memory to realloc. */ + return mem; + } +} + + +#if ! HAVE_ARGZ_APPEND +# define argz_append rpl_argz_append + +static error_t argz_append LT_PARAMS((char **pargz, size_t *pargz_len, + const char *buf, size_t buf_len)); + +error_t +argz_append (pargz, pargz_len, buf, buf_len) + char **pargz; + size_t *pargz_len; + const char *buf; + size_t buf_len; +{ + size_t argz_len; + char *argz; + + assert (pargz); + assert (pargz_len); + assert ((*pargz && *pargz_len) || (!*pargz && !*pargz_len)); + + /* If nothing needs to be appended, no more work is required. */ + if (buf_len == 0) + return 0; + + /* Ensure there is enough room to append BUF_LEN. */ + argz_len = *pargz_len + buf_len; + argz = LT_DLREALLOC (char, *pargz, argz_len); + if (!argz) + return ENOMEM; + + /* Copy characters from BUF after terminating '\0' in ARGZ. */ + memcpy (argz + *pargz_len, buf, buf_len); + + /* Assign new values. */ + *pargz = argz; + *pargz_len = argz_len; + + return 0; +} +#endif /* !HAVE_ARGZ_APPEND */ + + +#if ! HAVE_ARGZ_CREATE_SEP +# define argz_create_sep rpl_argz_create_sep + +static error_t argz_create_sep LT_PARAMS((const char *str, int delim, + char **pargz, size_t *pargz_len)); + +error_t +argz_create_sep (str, delim, pargz, pargz_len) + const char *str; + int delim; + char **pargz; + size_t *pargz_len; +{ + size_t argz_len; + char *argz = 0; + + assert (str); + assert (pargz); + assert (pargz_len); + + /* Make a copy of STR, but replacing each occurence of + DELIM with '\0'. */ + argz_len = 1+ LT_STRLEN (str); + if (argz_len) + { + const char *p; + char *q; + + argz = LT_DLMALLOC (char, argz_len); + if (!argz) + return ENOMEM; + + for (p = str, q = argz; *p != LT_EOS_CHAR; ++p) + { + if (*p == delim) + { + /* Ignore leading delimiters, and fold consecutive + delimiters in STR into a single '\0' in ARGZ. */ + if ((q > argz) && (q[-1] != LT_EOS_CHAR)) + *q++ = LT_EOS_CHAR; + else + --argz_len; + } + else + *q++ = *p; + } + /* Copy terminating LT_EOS_CHAR. */ + *q = *p; + } + + /* If ARGZ_LEN has shrunk to nothing, release ARGZ's memory. */ + if (!argz_len) + LT_DLFREE (argz); + + /* Assign new values. */ + *pargz = argz; + *pargz_len = argz_len; + + return 0; +} +#endif /* !HAVE_ARGZ_CREATE_SEP */ + + +#if ! HAVE_ARGZ_INSERT +# define argz_insert rpl_argz_insert + +static error_t argz_insert LT_PARAMS((char **pargz, size_t *pargz_len, + char *before, const char *entry)); + +error_t +argz_insert (pargz, pargz_len, before, entry) + char **pargz; + size_t *pargz_len; + char *before; + const char *entry; +{ + assert (pargz); + assert (pargz_len); + assert (entry && *entry); + + /* Either PARGZ/PARGZ_LEN is empty and BEFORE is NULL, + or BEFORE points into an address within the ARGZ vector. */ + assert ((!*pargz && !*pargz_len && !before) + || ((*pargz <= before) && (before < (*pargz + *pargz_len)))); + + /* No BEFORE address indicates ENTRY should be inserted after the + current last element. */ + if (!before) + return argz_append (pargz, pargz_len, entry, 1+ LT_STRLEN (entry)); + + /* This probably indicates a programmer error, but to preserve + semantics, scan back to the start of an entry if BEFORE points + into the middle of it. */ + while ((before >= *pargz) && (before[-1] != LT_EOS_CHAR)) + --before; + + { + size_t entry_len = 1+ LT_STRLEN (entry); + size_t argz_len = *pargz_len + entry_len; + size_t offset = before - *pargz; + char *argz = LT_DLREALLOC (char, *pargz, argz_len); + + if (!argz) + return ENOMEM; + + /* Make BEFORE point to the equivalent offset in ARGZ that it + used to have in *PARGZ incase realloc() moved the block. */ + before = argz + offset; + + /* Move the ARGZ entries starting at BEFORE up into the new + space at the end -- making room to copy ENTRY into the + resulting gap. */ + memmove (before + entry_len, before, *pargz_len - offset); + memcpy (before, entry, entry_len); + + /* Assign new values. */ + *pargz = argz; + *pargz_len = argz_len; + } + + return 0; +} +#endif /* !HAVE_ARGZ_INSERT */ + + +#if ! HAVE_ARGZ_NEXT +# define argz_next rpl_argz_next + +static char *argz_next LT_PARAMS((char *argz, size_t argz_len, + const char *entry)); + +char * +argz_next (argz, argz_len, entry) + char *argz; + size_t argz_len; + const char *entry; +{ + assert ((argz && argz_len) || (!argz && !argz_len)); + + if (entry) + { + /* Either ARGZ/ARGZ_LEN is empty, or ENTRY points into an address + within the ARGZ vector. */ + assert ((!argz && !argz_len) + || ((argz <= entry) && (entry < (argz + argz_len)))); + + /* Move to the char immediately after the terminating + '\0' of ENTRY. */ + entry = 1+ strchr (entry, LT_EOS_CHAR); + + /* Return either the new ENTRY, or else NULL if ARGZ is + exhausted. */ + return (entry >= argz + argz_len) ? 0 : (char *) entry; + } + else + { + /* This should probably be flagged as a programmer error, + since starting an argz_next loop with the iterator set + to ARGZ is safer. To preserve semantics, handle the NULL + case by returning the start of ARGZ (if any). */ + if (argz_len > 0) + return argz; + else + return 0; + } +} +#endif /* !HAVE_ARGZ_NEXT */ + + + +#if ! HAVE_ARGZ_STRINGIFY +# define argz_stringify rpl_argz_stringify + +static void argz_stringify LT_PARAMS((char *argz, size_t argz_len, + int sep)); + +void +argz_stringify (argz, argz_len, sep) + char *argz; + size_t argz_len; + int sep; +{ + assert ((argz && argz_len) || (!argz && !argz_len)); + + if (sep) + { + --argz_len; /* don't stringify the terminating EOS */ + while (--argz_len > 0) + { + if (argz[argz_len] == LT_EOS_CHAR) + argz[argz_len] = sep; + } + } +} +#endif /* !HAVE_ARGZ_STRINGIFY */ + + + + +/* --- TYPE DEFINITIONS -- */ + + +/* This type is used for the array of caller data sets in each handler. */ +typedef struct { + lt_dlcaller_id key; + lt_ptr data; +} lt_caller_data; + + + + +/* --- OPAQUE STRUCTURES DECLARED IN LTDL.H --- */ + + +/* Extract the diagnostic strings from the error table macro in the same + order as the enumerated indices in ltdl.h. */ + +static const char *lt_dlerror_strings[] = + { + lt_dlerror_names_list + 0 + }; + +/* This structure is used for the list of registered loaders. */ +struct lt_dlloader { + struct lt_dlloader *next; + const char *loader_name; /* identifying name for each loader */ + const char *sym_prefix; /* prefix for symbols */ + lt_module_open *module_open; + lt_module_close *module_close; + lt_find_sym *find_sym; + lt_dlloader_exit *dlloader_exit; + lt_user_data dlloader_data; +}; + +struct lt_dlhandle_struct { + struct lt_dlhandle_struct *next; + lt_dlloader *loader; /* dlopening interface */ + lt_dlinfo info; + int depcount; /* number of dependencies */ + lt_dlhandle *deplibs; /* dependencies */ + lt_module module; /* system module handle */ + lt_ptr system; /* system specific data */ + lt_caller_data *caller_data; /* per caller associated data */ + int flags; /* various boolean stats */ +}; + +/* Various boolean flags can be stored in the flags field of an + lt_dlhandle_struct... */ +#define LT_DLGET_FLAG(handle, flag) (((handle)->flags & (flag)) == (flag)) +#define LT_DLSET_FLAG(handle, flag) ((handle)->flags |= (flag)) + +#define LT_DLRESIDENT_FLAG (0x01 << 0) +/* ...add more flags here... */ + +#define LT_DLIS_RESIDENT(handle) LT_DLGET_FLAG(handle, LT_DLRESIDENT_FLAG) + + +#define LT_DLSTRERROR(name) lt_dlerror_strings[LT_CONC(LT_ERROR_,name)] + +static const char objdir[] = LTDL_OBJDIR; +static const char archive_ext[] = LTDL_ARCHIVE_EXT; +#ifdef LTDL_SHLIB_EXT +static const char shlib_ext[] = LTDL_SHLIB_EXT; +#endif +#ifdef LTDL_SYSSEARCHPATH +static const char sys_search_path[] = LTDL_SYSSEARCHPATH; +#endif + + + + +/* --- MUTEX LOCKING --- */ + + +/* Macros to make it easier to run the lock functions only if they have + been registered. The reason for the complicated lock macro is to + ensure that the stored error message from the last error is not + accidentally erased if the current function doesn't generate an + error of its own. */ +#define LT_DLMUTEX_LOCK() LT_STMT_START { \ + if (lt_dlmutex_lock_func) (*lt_dlmutex_lock_func)(); \ + } LT_STMT_END +#define LT_DLMUTEX_UNLOCK() LT_STMT_START { \ + if (lt_dlmutex_unlock_func) (*lt_dlmutex_unlock_func)();\ + } LT_STMT_END +#define LT_DLMUTEX_SETERROR(errormsg) LT_STMT_START { \ + if (lt_dlmutex_seterror_func) \ + (*lt_dlmutex_seterror_func) (errormsg); \ + else lt_dllast_error = (errormsg); } LT_STMT_END +#define LT_DLMUTEX_GETERROR(errormsg) LT_STMT_START { \ + if (lt_dlmutex_seterror_func) \ + (errormsg) = (*lt_dlmutex_geterror_func) (); \ + else (errormsg) = lt_dllast_error; } LT_STMT_END + +/* The mutex functions stored here are global, and are necessarily the + same for all threads that wish to share access to libltdl. */ +static lt_dlmutex_lock *lt_dlmutex_lock_func = 0; +static lt_dlmutex_unlock *lt_dlmutex_unlock_func = 0; +static lt_dlmutex_seterror *lt_dlmutex_seterror_func = 0; +static lt_dlmutex_geterror *lt_dlmutex_geterror_func = 0; +static const char *lt_dllast_error = 0; + + +/* Either set or reset the mutex functions. Either all the arguments must + be valid functions, or else all can be NULL to turn off locking entirely. + The registered functions should be manipulating a static global lock + from the lock() and unlock() callbacks, which needs to be reentrant. */ +int +lt_dlmutex_register (lock, unlock, seterror, geterror) + lt_dlmutex_lock *lock; + lt_dlmutex_unlock *unlock; + lt_dlmutex_seterror *seterror; + lt_dlmutex_geterror *geterror; +{ + lt_dlmutex_unlock *old_unlock = unlock; + int errors = 0; + + /* Lock using the old lock() callback, if any. */ + LT_DLMUTEX_LOCK (); + + if ((lock && unlock && seterror && geterror) + || !(lock || unlock || seterror || geterror)) + { + lt_dlmutex_lock_func = lock; + lt_dlmutex_unlock_func = unlock; + lt_dlmutex_geterror_func = geterror; + } + else + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_MUTEX_ARGS)); + ++errors; + } + + /* Use the old unlock() callback we saved earlier, if any. Otherwise + record any errors using internal storage. */ + if (old_unlock) + (*old_unlock) (); + + /* Return the number of errors encountered during the execution of + this function. */ + return errors; +} + + + + +/* --- ERROR HANDLING --- */ + + +static const char **user_error_strings = 0; +static int errorcount = LT_ERROR_MAX; + +int +lt_dladderror (diagnostic) + const char *diagnostic; +{ + int errindex = 0; + int result = -1; + const char **temp = (const char **) 0; + + assert (diagnostic); + + LT_DLMUTEX_LOCK (); + + errindex = errorcount - LT_ERROR_MAX; + temp = LT_EREALLOC (const char *, user_error_strings, 1 + errindex); + if (temp) + { + user_error_strings = temp; + user_error_strings[errindex] = diagnostic; + result = errorcount++; + } + + LT_DLMUTEX_UNLOCK (); + + return result; +} + +int +lt_dlseterror (errindex) + int errindex; +{ + int errors = 0; + + LT_DLMUTEX_LOCK (); + + if (errindex >= errorcount || errindex < 0) + { + /* Ack! Error setting the error message! */ + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_ERRORCODE)); + ++errors; + } + else if (errindex < LT_ERROR_MAX) + { + /* No error setting the error message! */ + LT_DLMUTEX_SETERROR (lt_dlerror_strings[errindex]); + } + else + { + /* No error setting the error message! */ + LT_DLMUTEX_SETERROR (user_error_strings[errindex - LT_ERROR_MAX]); + } + + LT_DLMUTEX_UNLOCK (); + + return errors; +} + +lt_ptr +lt_emalloc (size) + size_t size; +{ + lt_ptr mem = lt_dlmalloc (size); + if (size && !mem) + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (NO_MEMORY)); + return mem; +} + +lt_ptr +lt_erealloc (addr, size) + lt_ptr addr; + size_t size; +{ + lt_ptr mem = realloc (addr, size); + if (size && !mem) + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (NO_MEMORY)); + return mem; +} + +char * +lt_estrdup (str) + const char *str; +{ + char *dup = strdup (str); + if (LT_STRLEN (str) && !dup) + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (NO_MEMORY)); + return dup; +} + + + + +/* --- DLOPEN() INTERFACE LOADER --- */ + + +/* The Cygwin dlopen implementation prints a spurious error message to + stderr if its call to LoadLibrary() fails for any reason. We can + mitigate this by not using the Cygwin implementation, and falling + back to our own LoadLibrary() wrapper. */ +#if HAVE_LIBDL && !defined(__CYGWIN__) + +/* dynamic linking with dlopen/dlsym */ + +#if HAVE_DLFCN_H +# include +#endif + +#if HAVE_SYS_DL_H +# include +#endif + +#ifdef RTLD_GLOBAL +# define LT_GLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_GLOBAL DL_GLOBAL +# endif +#endif /* !RTLD_GLOBAL */ +#ifndef LT_GLOBAL +# define LT_GLOBAL 0 +#endif /* !LT_GLOBAL */ + +/* We may have to define LT_LAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_LAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_LAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_LAZY_OR_NOW DL_LAZY +# endif +# endif /* !RTLD_LAZY */ +#endif +#ifndef LT_LAZY_OR_NOW +# ifdef RTLD_NOW +# define LT_LAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_LAZY_OR_NOW DL_NOW +# endif +# endif /* !RTLD_NOW */ +#endif +#ifndef LT_LAZY_OR_NOW +# define LT_LAZY_OR_NOW 0 +#endif /* !LT_LAZY_OR_NOW */ + +#if HAVE_DLERROR +# define DLERROR(arg) dlerror () +#else +# define DLERROR(arg) LT_DLSTRERROR (arg) +#endif + +static lt_module +sys_dl_open (loader_data, filename) + lt_user_data loader_data; + const char *filename; +{ + lt_module module = dlopen (filename, LT_GLOBAL | LT_LAZY_OR_NOW); + + if (!module) + { + LT_DLMUTEX_SETERROR (DLERROR (CANNOT_OPEN)); + } + + return module; +} + +static int +sys_dl_close (loader_data, module) + lt_user_data loader_data; + lt_module module; +{ + int errors = 0; + + if (dlclose (module) != 0) + { + LT_DLMUTEX_SETERROR (DLERROR (CANNOT_CLOSE)); + ++errors; + } + + return errors; +} + +static lt_ptr +sys_dl_sym (loader_data, module, symbol) + lt_user_data loader_data; + lt_module module; + const char *symbol; +{ + lt_ptr address = dlsym (module, symbol); + + if (!address) + { + LT_DLMUTEX_SETERROR (DLERROR (SYMBOL_NOT_FOUND)); + } + + return address; +} + +static struct lt_user_dlloader sys_dl = + { +# ifdef NEED_USCORE + "_", +# else + 0, +# endif + sys_dl_open, sys_dl_close, sys_dl_sym, 0, 0 }; + + +#endif /* HAVE_LIBDL */ + + + +/* --- SHL_LOAD() INTERFACE LOADER --- */ + +#if HAVE_SHL_LOAD + +/* dynamic linking with shl_load (HP-UX) (comments from gmodule) */ + +#ifdef HAVE_DL_H +# include +#endif + +/* some flags are missing on some systems, so we provide + * harmless defaults. + * + * Mandatory: + * BIND_IMMEDIATE - Resolve symbol references when the library is loaded. + * BIND_DEFERRED - Delay code symbol resolution until actual reference. + * + * Optionally: + * BIND_FIRST - Place the library at the head of the symbol search + * order. + * BIND_NONFATAL - The default BIND_IMMEDIATE behavior is to treat all + * unsatisfied symbols as fatal. This flag allows + * binding of unsatisfied code symbols to be deferred + * until use. + * [Perl: For certain libraries, like DCE, deferred + * binding often causes run time problems. Adding + * BIND_NONFATAL to BIND_IMMEDIATE still allows + * unresolved references in situations like this.] + * BIND_NOSTART - Do not call the initializer for the shared library + * when the library is loaded, nor on a future call to + * shl_unload(). + * BIND_VERBOSE - Print verbose messages concerning possible + * unsatisfied symbols. + * + * hp9000s700/hp9000s800: + * BIND_RESTRICTED - Restrict symbols visible by the library to those + * present at library load time. + * DYNAMIC_PATH - Allow the loader to dynamically search for the + * library specified by the path argument. + */ + +#ifndef DYNAMIC_PATH +# define DYNAMIC_PATH 0 +#endif +#ifndef BIND_RESTRICTED +# define BIND_RESTRICTED 0 +#endif + +#define LT_BIND_FLAGS (BIND_IMMEDIATE | BIND_NONFATAL | DYNAMIC_PATH) + +static lt_module +sys_shl_open (loader_data, filename) + lt_user_data loader_data; + const char *filename; +{ + static shl_t self = (shl_t) 0; + lt_module module = shl_load (filename, LT_BIND_FLAGS, 0L); + + /* Since searching for a symbol against a NULL module handle will also + look in everything else that was already loaded and exported with + the -E compiler flag, we always cache a handle saved before any + modules are loaded. */ + if (!self) + { + lt_ptr address; + shl_findsym (&self, "main", TYPE_UNDEFINED, &address); + } + + if (!filename) + { + module = self; + } + else + { + module = shl_load (filename, LT_BIND_FLAGS, 0L); + + if (!module) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (CANNOT_OPEN)); + } + } + + return module; +} + +static int +sys_shl_close (loader_data, module) + lt_user_data loader_data; + lt_module module; +{ + int errors = 0; + + if (module && (shl_unload ((shl_t) (module)) != 0)) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (CANNOT_CLOSE)); + ++errors; + } + + return errors; +} + +static lt_ptr +sys_shl_sym (loader_data, module, symbol) + lt_user_data loader_data; + lt_module module; + const char *symbol; +{ + lt_ptr address = 0; + + /* sys_shl_open should never return a NULL module handle */ + if (module == (lt_module) 0) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_HANDLE)); + } + else if (!shl_findsym((shl_t*) &module, symbol, TYPE_UNDEFINED, &address)) + { + if (!address) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (SYMBOL_NOT_FOUND)); + } + } + + return address; +} + +static struct lt_user_dlloader sys_shl = { + 0, sys_shl_open, sys_shl_close, sys_shl_sym, 0, 0 +}; + +#endif /* HAVE_SHL_LOAD */ + + + + +/* --- LOADLIBRARY() INTERFACE LOADER --- */ + +#ifdef __WINDOWS__ + +/* dynamic linking for Win32 */ + +#include + +void win32_print_last_error (char *fmtstring) +{ + LPVOID lpMsgBuf; + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (LPTSTR) &lpMsgBuf, + 0, + NULL + ); + printf (fmtstring, (char*)lpMsgBuf); + LocalFree (lpMsgBuf); +} + +/* Forward declaration; required to implement handle search below. */ +static lt_dlhandle handles; + +static lt_module +sys_wll_open (loader_data, filename) + lt_user_data loader_data; + const char *filename; +{ + lt_dlhandle cur; + lt_module module = 0; + const char *errormsg = 0; + char *searchname = 0; + char *ext; + char self_name_buf[MAX_PATH]; + + if (!filename) + { + /* Get the name of main module */ + *self_name_buf = 0; + GetModuleFileName (NULL, self_name_buf, sizeof (self_name_buf)); + filename = ext = self_name_buf; + } + else + { + ext = strrchr (filename, '.'); + } + + if (ext) + { + /* FILENAME already has an extension. */ + searchname = lt_estrdup (filename); + } + else + { + /* Append a `.' to stop Windows from adding an + implicit `.dll' extension. */ + searchname = LT_EMALLOC (char, 2+ LT_STRLEN (filename)); + if (searchname) + sprintf (searchname, "%s.", filename); + } + if (!searchname) + return 0; + +#if __CYGWIN__ + { + char wpath[MAX_PATH]; + cygwin_conv_to_full_win32_path(searchname, wpath); + module = LoadLibrary(wpath); + } +#else + module = LoadLibrary (searchname); + if (!module) { + win32_print_last_error ("LoadLibrary failed: %s\n"); + } +#endif + LT_DLFREE (searchname); + + /* libltdl expects this function to fail if it is unable + to physically load the library. Sadly, LoadLibrary + will search the loaded libraries for a match and return + one of them if the path search load fails. + + We check whether LoadLibrary is returning a handle to + an already loaded module, and simulate failure if we + find one. */ + LT_DLMUTEX_LOCK (); + cur = handles; + while (cur) + { + if (!cur->module) + { + cur = 0; + break; + } + + if (cur->module == module) + { + break; + } + + cur = cur->next; + } + LT_DLMUTEX_UNLOCK (); + + if (cur || !module) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (CANNOT_OPEN)); + module = 0; + } + + return module; +} + +static int +sys_wll_close (loader_data, module) + lt_user_data loader_data; + lt_module module; +{ + int errors = 0; + + if (FreeLibrary(module) == 0) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (CANNOT_CLOSE)); + ++errors; + } + + return errors; +} + +static lt_ptr +sys_wll_sym (loader_data, module, symbol) + lt_user_data loader_data; + lt_module module; + const char *symbol; +{ + lt_ptr address = GetProcAddress (module, symbol); + + if (!address) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (SYMBOL_NOT_FOUND)); + } + + return address; +} + +static struct lt_user_dlloader sys_wll = { + 0, sys_wll_open, sys_wll_close, sys_wll_sym, 0, 0 +}; + +#endif /* __WINDOWS__ */ + + + + +/* --- LOAD_ADD_ON() INTERFACE LOADER --- */ + + +#ifdef __BEOS__ + +/* dynamic linking for BeOS */ + +#include + +static lt_module +sys_bedl_open (loader_data, filename) + lt_user_data loader_data; + const char *filename; +{ + image_id image = 0; + + if (filename) + { + image = load_add_on (filename); + } + else + { + image_info info; + int32 cookie = 0; + if (get_next_image_info (0, &cookie, &info) == B_OK) + image = load_add_on (info.name); + } + + if (image <= 0) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (CANNOT_OPEN)); + image = 0; + } + + return (lt_module) image; +} + +static int +sys_bedl_close (loader_data, module) + lt_user_data loader_data; + lt_module module; +{ + int errors = 0; + + if (unload_add_on ((image_id) module) != B_OK) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (CANNOT_CLOSE)); + ++errors; + } + + return errors; +} + +static lt_ptr +sys_bedl_sym (loader_data, module, symbol) + lt_user_data loader_data; + lt_module module; + const char *symbol; +{ + lt_ptr address = 0; + image_id image = (image_id) module; + + if (get_image_symbol (image, symbol, B_SYMBOL_TYPE_ANY, address) != B_OK) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (SYMBOL_NOT_FOUND)); + address = 0; + } + + return address; +} + +static struct lt_user_dlloader sys_bedl = { + 0, sys_bedl_open, sys_bedl_close, sys_bedl_sym, 0, 0 +}; + +#endif /* __BEOS__ */ + + + + +/* --- DLD_LINK() INTERFACE LOADER --- */ + + +#if HAVE_DLD + +/* dynamic linking with dld */ + +#if HAVE_DLD_H +#include +#endif + +static lt_module +sys_dld_open (loader_data, filename) + lt_user_data loader_data; + const char *filename; +{ + lt_module module = strdup (filename); + + if (dld_link (filename) != 0) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (CANNOT_OPEN)); + LT_DLFREE (module); + module = 0; + } + + return module; +} + +static int +sys_dld_close (loader_data, module) + lt_user_data loader_data; + lt_module module; +{ + int errors = 0; + + if (dld_unlink_by_file ((char*)(module), 1) != 0) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (CANNOT_CLOSE)); + ++errors; + } + else + { + LT_DLFREE (module); + } + + return errors; +} + +static lt_ptr +sys_dld_sym (loader_data, module, symbol) + lt_user_data loader_data; + lt_module module; + const char *symbol; +{ + lt_ptr address = dld_get_func (symbol); + + if (!address) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (SYMBOL_NOT_FOUND)); + } + + return address; +} + +static struct lt_user_dlloader sys_dld = { + 0, sys_dld_open, sys_dld_close, sys_dld_sym, 0, 0 +}; + +#endif /* HAVE_DLD */ + + + + +/* --- DLPREOPEN() INTERFACE LOADER --- */ + + +/* emulate dynamic linking using preloaded_symbols */ + +typedef struct lt_dlsymlists_t +{ + struct lt_dlsymlists_t *next; + const lt_dlsymlist *syms; +} lt_dlsymlists_t; + +static const lt_dlsymlist *default_preloaded_symbols = 0; +static lt_dlsymlists_t *preloaded_symbols = 0; + +static int +presym_init (loader_data) + lt_user_data loader_data; +{ + int errors = 0; + + LT_DLMUTEX_LOCK (); + + preloaded_symbols = 0; + if (default_preloaded_symbols) + { + errors = lt_dlpreload (default_preloaded_symbols); + } + + LT_DLMUTEX_UNLOCK (); + + return errors; +} + +static int +presym_free_symlists () +{ + lt_dlsymlists_t *lists; + + LT_DLMUTEX_LOCK (); + + lists = preloaded_symbols; + while (lists) + { + lt_dlsymlists_t *tmp = lists; + + lists = lists->next; + LT_DLFREE (tmp); + } + preloaded_symbols = 0; + + LT_DLMUTEX_UNLOCK (); + + return 0; +} + +static int +presym_exit (loader_data) + lt_user_data loader_data; +{ + presym_free_symlists (); + return 0; +} + +static int +presym_add_symlist (preloaded) + const lt_dlsymlist *preloaded; +{ + lt_dlsymlists_t *tmp; + lt_dlsymlists_t *lists; + int errors = 0; + + LT_DLMUTEX_LOCK (); + + lists = preloaded_symbols; + while (lists) + { + if (lists->syms == preloaded) + { + goto done; + } + lists = lists->next; + } + + tmp = LT_EMALLOC (lt_dlsymlists_t, 1); + if (tmp) + { + memset (tmp, 0, sizeof(lt_dlsymlists_t)); + tmp->syms = preloaded; + tmp->next = preloaded_symbols; + preloaded_symbols = tmp; + } + else + { + ++errors; + } + + done: + LT_DLMUTEX_UNLOCK (); + return errors; +} + +static lt_module +presym_open (loader_data, filename) + lt_user_data loader_data; + const char *filename; +{ + lt_dlsymlists_t *lists; + lt_module module = (lt_module) 0; + + LT_DLMUTEX_LOCK (); + lists = preloaded_symbols; + + if (!lists) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (NO_SYMBOLS)); + goto done; + } + + /* Can't use NULL as the reflective symbol header, as NULL is + used to mark the end of the entire symbol list. Self-dlpreopened + symbols follow this magic number, chosen to be an unlikely + clash with a real module name. */ + if (!filename) + { + filename = "@PROGRAM@"; + } + + while (lists) + { + const lt_dlsymlist *syms = lists->syms; + + while (syms->name) + { + if (!syms->address && strcmp(syms->name, filename) == 0) + { + module = (lt_module) syms; + goto done; + } + ++syms; + } + + lists = lists->next; + } + + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (FILE_NOT_FOUND)); + + done: + LT_DLMUTEX_UNLOCK (); + return module; +} + +static int +presym_close (loader_data, module) + lt_user_data loader_data; + lt_module module; +{ + /* Just to silence gcc -Wall */ + module = 0; + return 0; +} + +static lt_ptr +presym_sym (loader_data, module, symbol) + lt_user_data loader_data; + lt_module module; + const char *symbol; +{ + lt_dlsymlist *syms = (lt_dlsymlist*) module; + + ++syms; + while (syms->address) + { + if (strcmp(syms->name, symbol) == 0) + { + return syms->address; + } + + ++syms; + } + + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (SYMBOL_NOT_FOUND)); + + return 0; +} + +static struct lt_user_dlloader presym = { + 0, presym_open, presym_close, presym_sym, presym_exit, 0 +}; + + + + + +/* --- DYNAMIC MODULE LOADING --- */ + + +/* The type of a function used at each iteration of foreach_dirinpath(). */ +typedef int foreach_callback_func LT_PARAMS((char *filename, lt_ptr data1, + lt_ptr data2)); + +static int foreach_dirinpath LT_PARAMS((const char *search_path, + const char *base_name, + foreach_callback_func *func, + lt_ptr data1, lt_ptr data2)); + +static int find_file_callback LT_PARAMS((char *filename, lt_ptr data, + lt_ptr ignored)); +static int find_handle_callback LT_PARAMS((char *filename, lt_ptr data, + lt_ptr ignored)); +static int foreachfile_callback LT_PARAMS((char *filename, lt_ptr data1, + lt_ptr data2)); + + +static int canonicalize_path LT_PARAMS((const char *path, + char **pcanonical)); +static int argzize_path LT_PARAMS((const char *path, + char **pargz, + size_t *pargz_len)); +static FILE *find_file LT_PARAMS((const char *search_path, + const char *base_name, + char **pdir)); +static lt_dlhandle *find_handle LT_PARAMS((const char *search_path, + const char *base_name, + lt_dlhandle *handle)); +static int find_module LT_PARAMS((lt_dlhandle *handle, + const char *dir, + const char *libdir, + const char *dlname, + const char *old_name, + int installed)); +static int free_vars LT_PARAMS((char *dlname, char *oldname, + char *libdir, char *deplibs)); +static int load_deplibs LT_PARAMS((lt_dlhandle handle, + char *deplibs)); +static int trim LT_PARAMS((char **dest, + const char *str)); +static int try_dlopen LT_PARAMS((lt_dlhandle *handle, + const char *filename)); +static int tryall_dlopen LT_PARAMS((lt_dlhandle *handle, + const char *filename)); +static int unload_deplibs LT_PARAMS((lt_dlhandle handle)); +static int lt_argz_insert LT_PARAMS((char **pargz, + size_t *pargz_len, + char *before, + const char *entry)); +static int lt_argz_insertinorder LT_PARAMS((char **pargz, + size_t *pargz_len, + const char *entry)); +static int lt_dlpath_insertdir LT_PARAMS((char **ppath, + char *before, + const char *dir)); + +static char *user_search_path= 0; +static lt_dlloader *loaders = 0; +static lt_dlhandle handles = 0; +static int initialized = 0; + +/* Initialize libltdl. */ +int +lt_dlinit () +{ + int errors = 0; + + LT_DLMUTEX_LOCK (); + + /* Initialize only at first call. */ + if (++initialized == 1) + { + handles = 0; + user_search_path = 0; /* empty search path */ + +#if HAVE_LIBDL && !defined(__CYGWIN__) + errors += lt_dlloader_add (lt_dlloader_next (0), &sys_dl, "dlopen"); +#endif +#if HAVE_SHL_LOAD + errors += lt_dlloader_add (lt_dlloader_next (0), &sys_shl, "dlopen"); +#endif +#ifdef __WINDOWS__ + errors += lt_dlloader_add (lt_dlloader_next (0), &sys_wll, "dlopen"); +#endif +#ifdef __BEOS__ + errors += lt_dlloader_add (lt_dlloader_next (0), &sys_bedl, "dlopen"); +#endif +#if HAVE_DLD + errors += lt_dlloader_add (lt_dlloader_next (0), &sys_dld, "dld"); +#endif + errors += lt_dlloader_add (lt_dlloader_next (0), &presym, "dlpreload"); + + if (presym_init (presym.dlloader_data)) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INIT_LOADER)); + ++errors; + } + else if (errors != 0) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (DLOPEN_NOT_SUPPORTED)); + ++errors; + } + } + + LT_DLMUTEX_UNLOCK (); + + return errors; +} + +int +lt_dlpreload (preloaded) + const lt_dlsymlist *preloaded; +{ + int errors = 0; + + if (preloaded) + { + errors = presym_add_symlist (preloaded); + } + else + { + presym_free_symlists(); + + LT_DLMUTEX_LOCK (); + if (default_preloaded_symbols) + { + errors = lt_dlpreload (default_preloaded_symbols); + } + LT_DLMUTEX_UNLOCK (); + } + + return errors; +} + +int +lt_dlpreload_default (preloaded) + const lt_dlsymlist *preloaded; +{ + LT_DLMUTEX_LOCK (); + default_preloaded_symbols = preloaded; + LT_DLMUTEX_UNLOCK (); + return 0; +} + +int +lt_dlexit () +{ + /* shut down libltdl */ + lt_dlloader *loader; + int errors = 0; + + LT_DLMUTEX_LOCK (); + loader = loaders; + + if (!initialized) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (SHUTDOWN)); + ++errors; + goto done; + } + + /* shut down only at last call. */ + if (--initialized == 0) + { + int level; + + while (handles && LT_DLIS_RESIDENT (handles)) + { + handles = handles->next; + } + + /* close all modules */ + for (level = 1; handles; ++level) + { + lt_dlhandle cur = handles; + int saw_nonresident = 0; + + while (cur) + { + lt_dlhandle tmp = cur; + cur = cur->next; + if (!LT_DLIS_RESIDENT (tmp)) + saw_nonresident = 1; + if (!LT_DLIS_RESIDENT (tmp) && tmp->info.ref_count <= level) + { + if (lt_dlclose (tmp)) + { + ++errors; + } + } + } + /* done if only resident modules are left */ + if (!saw_nonresident) + break; + } + + /* close all loaders */ + while (loader) + { + lt_dlloader *next = loader->next; + lt_user_data data = loader->dlloader_data; + if (loader->dlloader_exit && loader->dlloader_exit (data)) + { + ++errors; + } + + LT_DLMEM_REASSIGN (loader, next); + } + loaders = 0; + } + + done: + LT_DLMUTEX_UNLOCK (); + return errors; +} + +// returns number of errors, so 0=success +// returns handle in *handle, if one is found. +static int +tryall_dlopen (handle, filename) + lt_dlhandle *handle; + const char *filename; +{ + lt_dlhandle cur; + lt_dlloader *loader; + const char *saved_error; + int errors = 0; + + LT_DLMUTEX_GETERROR (saved_error); + LT_DLMUTEX_LOCK (); + + cur = handles; + loader = loaders; + + /* check whether the module was already opened */ + while (cur) + { + /* try to dlopen the program itself? */ + if (!cur->info.filename && !filename) + { + break; + } + + if (cur->info.filename && filename + && strcmp (cur->info.filename, filename) == 0) + { + break; + } + + cur = cur->next; + } + + if (cur) + { + ++cur->info.ref_count; + *handle = cur; + goto done; + } + + cur = *handle; + if (filename) + { + cur->info.filename = lt_estrdup (filename); + if (!cur->info.filename) + { + ++errors; + goto done; + } + } + else + { + cur->info.filename = 0; + } + + // Call access() to see if it exists first. If not return FILE_NOT_FOUND + // instead of CANNOT_OPEN. + if (access (cur->info.filename, R_OK) != 0) { + LT_DLFREE (cur->info.filename); + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (FILE_NOT_FOUND)); + ++errors; + goto done; + } + + while (loader) + { + lt_user_data data = loader->dlloader_data; + LTDEBUG_PRINTF(("Trying to open '%s' using loader '%s'\n", filename, loader->loader_name)); + cur->module = loader->module_open (data, filename); + + if (cur->module != 0) + { + LTDEBUG_PRINTF(("Load '%s' succeeded.\n", filename)); + break; + } + loader = loader->next; + } + + if (!loader) + { + LT_DLFREE (cur->info.filename); + ++errors; + goto done; + } + + cur->loader = loader; + LT_DLMUTEX_SETERROR (saved_error); + + done: + LT_DLMUTEX_UNLOCK (); + + return errors; +} + +static int +tryall_dlopen_module (handle, prefix, dirname, dlname) + lt_dlhandle *handle; + const char *prefix; + const char *dirname; + const char *dlname; +{ + int error = 0; + char *filename = 0; + size_t filename_len = 0; +#ifdef __GNUC__ +#warning dirname could be null +#endif + size_t dirname_len = LT_STRLEN (dirname); + + if (dirname == NULL) { + LTDEBUG_PRINTF(("leaving tryall_dlopen_module early because dirname is NULL\n")); + return 1; + } + + assert (handle); + assert (dirname); + assert (dlname); +#ifdef LT_DIRSEP_CHAR + /* Only canonicalized names (i.e. with DIRSEP chars already converted) + should make it into this function: */ + assert (strchr (dirname, LT_DIRSEP_CHAR) == 0); +#endif + + if (dirname[dirname_len -1] == '/') + --dirname_len; + filename_len = dirname_len + 1 + LT_STRLEN (dlname); + + /* Allocate memory, and combine DIRNAME and MODULENAME into it. + The PREFIX (if any) is handled below. */ + filename = LT_EMALLOC (char, dirname_len + 1 + filename_len + 1); + if (!filename) + return 1; + + sprintf (filename, "%.*s/%s", (int) dirname_len, dirname, dlname); + + /* Now that we have combined DIRNAME and MODULENAME, if there is + also a PREFIX to contend with, simply recurse with the arguments + shuffled. Otherwise, attempt to open FILENAME as a module. */ + if (prefix) + { + error += tryall_dlopen_module (handle, + (const char *) 0, prefix, filename); + } + else if (tryall_dlopen (handle, filename) != 0) + { + ++error; + } + + LT_DLFREE (filename); + return error; +} + +static int +find_module (handle, dir, libdir, dlname, old_name, installed) + lt_dlhandle *handle; + const char *dir; + const char *libdir; + const char *dlname; + const char *old_name; + int installed; +{ + /* Try to open the old library first; if it was dlpreopened, + we want the preopened version of it, even if a dlopenable + module is available. */ + if (old_name && tryall_dlopen (handle, old_name) == 0) + { + return 0; + } + + /* Try to open the dynamic library. */ + if (dlname) + { + /* try to open the installed module */ + if (installed && libdir) + { + if (tryall_dlopen_module (handle, + (const char *) 0, libdir, dlname) == 0) + return 0; + } + + /* try to open the not-installed module */ + if (!installed) + { + if (tryall_dlopen_module (handle, dir, objdir, dlname) == 0) + return 0; + } + + /* maybe it was moved to another directory */ + { + if (tryall_dlopen_module (handle, + (const char *) 0, dir, dlname) == 0) + return 0; + } + } + + return 1; +} + + +static int +canonicalize_path (path, pcanonical) + const char *path; + char **pcanonical; +{ + char *canonical = 0; + + assert (path && *path); + assert (pcanonical); + + canonical = LT_EMALLOC (char, 1+ LT_STRLEN (path)); + if (!canonical) + return 1; + + { + size_t dest = 0; + size_t src; + for (src = 0; path[src] != LT_EOS_CHAR; ++src) + { + /* Path separators are not copied to the beginning or end of + the destination, or if another separator would follow + immediately. */ + if (path[src] == LT_PATHSEP_CHAR) + { + if ((dest == 0) + || (path[1+ src] == LT_PATHSEP_CHAR) + || (path[1+ src] == LT_EOS_CHAR)) + continue; + } + + /* Anything other than a directory separator is copied verbatim. */ + if ((path[src] != '/') +#ifdef LT_DIRSEP_CHAR + && (path[src] != LT_DIRSEP_CHAR) +#endif + ) + { + canonical[dest++] = path[src]; + } + /* Directory separators are converted and copied only if they are + not at the end of a path -- i.e. before a path separator or + NULL terminator. */ + else if ((path[1+ src] != LT_PATHSEP_CHAR) + && (path[1+ src] != LT_EOS_CHAR) +#ifdef LT_DIRSEP_CHAR + && (path[1+ src] != LT_DIRSEP_CHAR) +#endif + && (path[1+ src] != '/')) + { + canonical[dest++] = '/'; + } + } + + /* Add an end-of-string marker at the end. */ + canonical[dest] = LT_EOS_CHAR; + } + + /* Assign new value. */ + *pcanonical = canonical; + + return 0; +} + +static int +argzize_path (path, pargz, pargz_len) + const char *path; + char **pargz; + size_t *pargz_len; +{ + error_t error; + + assert (path); + assert (pargz); + assert (pargz_len); + + if ((error = argz_create_sep (path, LT_PATHSEP_CHAR, pargz, pargz_len))) + { + switch (error) + { + case ENOMEM: + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (NO_MEMORY)); + break; + default: + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (UNKNOWN)); + break; + } + + return 1; + } + + return 0; +} + +/* Repeatedly call FUNC with each LT_PATHSEP_CHAR delimited element + of SEARCH_PATH and references to DATA1 and DATA2, until FUNC returns + non-zero or all elements are exhausted. If BASE_NAME is non-NULL, + it is appended to each SEARCH_PATH element before FUNC is called. */ +static int +foreach_dirinpath (search_path, base_name, func, data1, data2) + const char *search_path; + const char *base_name; + foreach_callback_func *func; + lt_ptr data1; + lt_ptr data2; +{ + int result = 0; + int filenamesize = 0; + int lenbase = LT_STRLEN (base_name); + size_t argz_len = 0; + char * argz = 0; + char * filename = 0; + char * canonical = 0; + + LT_DLMUTEX_LOCK (); + + if (!search_path || !*search_path) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (FILE_NOT_FOUND)); + goto cleanup; + } + + if (canonicalize_path (search_path, &canonical) != 0) + goto cleanup; + + if (argzize_path (canonical, &argz, &argz_len) != 0) + goto cleanup; + + { + char *dir_name = 0; + while ((dir_name = argz_next (argz, argz_len, dir_name))) + { + int lendir = LT_STRLEN (dir_name); + + if (lendir +1 +lenbase >= filenamesize) + { + LT_DLFREE (filename); + filenamesize = lendir +1 +lenbase +1; /* "/d" + '/' + "f" + '\0' */ + filename = LT_EMALLOC (char, filenamesize); + if (!filename) + goto cleanup; + } + + strncpy (filename, dir_name, lendir); + if (base_name && *base_name) + { + if (filename[lendir -1] != '/') + filename[lendir++] = '/'; + strcpy (filename +lendir, base_name); + } + + if ((result = (*func) (filename, data1, data2))) + { + break; + } + } + } + + cleanup: + LT_DLFREE (argz); + LT_DLFREE (canonical); + LT_DLFREE (filename); + + LT_DLMUTEX_UNLOCK (); + + return result; +} + +/* If FILEPATH can be opened, store the name of the directory component + in DATA1, and the opened FILE* structure address in DATA2. Otherwise + DATA1 is unchanged, but DATA2 is set to a pointer to NULL. */ +static int +find_file_callback (filename, data1, data2) + char *filename; + lt_ptr data1; + lt_ptr data2; +{ + char **pdir = (char **) data1; + FILE **pfile = (FILE **) data2; + int is_done = 0; + + assert (filename && *filename); + assert (pdir); + assert (pfile); + + if ((*pfile = fopen (filename, LT_READTEXT_MODE))) + { + char *dirend = strrchr (filename, '/'); + LTDEBUG_PRINTF(("find_file_callback opening file '%s'...ok\n", filename)); + + if (dirend > filename) + *dirend = LT_EOS_CHAR; + + LT_DLFREE (*pdir); + *pdir = lt_estrdup (filename); + is_done = (*pdir == 0) ? -1 : 1; + } + else + { + LTDEBUG_PRINTF(("find_file_callback opening file '%s'...failed\n", filename)); + } + + return is_done; +} + +static FILE * +find_file (search_path, base_name, pdir) + const char *search_path; + const char *base_name; + char **pdir; +{ + FILE *file = 0; + + foreach_dirinpath (search_path, base_name, find_file_callback, pdir, &file); + + return file; +} + +static int +find_handle_callback (filename, data, ignored) + char *filename; + lt_ptr data; + lt_ptr ignored; +{ + lt_dlhandle *handle = (lt_dlhandle *) data; + int found = (0 == access (filename, R_OK)); + LTDEBUG_PRINTF(("find_handle_callback searching for '%s'...%s\n", filename, found?"found":"not found")); + + /* Bail out if file cannot be read... */ + if (!found) + return 0; + + /* Try to dlopen the file, but do not continue searching in any + case. */ + if (tryall_dlopen (handle, filename) != 0) + *handle = 0; + + return 1; +} + +/* If HANDLE was found return it, otherwise return 0. If HANDLE was + found but could not be opened, *HANDLE will be set to 0. */ +static lt_dlhandle * +find_handle (search_path, base_name, handle) + const char *search_path; + const char *base_name; + lt_dlhandle *handle; +{ + if (!search_path) + return 0; + + if (!foreach_dirinpath (search_path, base_name, find_handle_callback, + handle, 0)) + return 0; + + return handle; +} + +static int +load_deplibs (handle, deplibs) + lt_dlhandle handle; + char *deplibs; +{ +#if LTDL_DLOPEN_DEPLIBS + char *p, *save_search_path = 0; + int depcount = 0; + int i; + char **names = 0; +#endif + int errors = 0; + + handle->depcount = 0; + +#if LTDL_DLOPEN_DEPLIBS + if (!deplibs) + { + return errors; + } + ++errors; + + LT_DLMUTEX_LOCK (); + if (user_search_path) + { + save_search_path = lt_estrdup (user_search_path); + if (!save_search_path) + goto cleanup; + } + + /* extract search paths and count deplibs */ + p = deplibs; + while (*p) + { + if (!isspace ((int) *p)) + { + char *end = p+1; + while (*end && !isspace((int) *end)) + { + ++end; + } + + if (strncmp(p, "-L", 2) == 0 || strncmp(p, "-R", 2) == 0) + { + char save = *end; + *end = 0; /* set a temporary string terminator */ + if (lt_dladdsearchdir(p+2)) + { + goto cleanup; + } + *end = save; + } + else + { + ++depcount; + } + + p = end; + } + else + { + ++p; + } + } + + /* restore the old search path */ + LT_DLFREE (user_search_path); + user_search_path = save_search_path; + + LT_DLMUTEX_UNLOCK (); + + if (!depcount) + { + errors = 0; + goto cleanup; + } + + names = LT_EMALLOC (char *, depcount * sizeof (char*)); + if (!names) + goto cleanup; + + /* now only extract the actual deplibs */ + depcount = 0; + p = deplibs; + while (*p) + { + if (isspace ((int) *p)) + { + ++p; + } + else + { + char *end = p+1; + while (*end && !isspace ((int) *end)) + { + ++end; + } + + if (strncmp(p, "-L", 2) != 0 && strncmp(p, "-R", 2) != 0) + { + char *name; + char save = *end; + *end = 0; /* set a temporary string terminator */ + if (strncmp(p, "-l", 2) == 0) + { + size_t name_len = 3+ /* "lib" */ LT_STRLEN (p + 2); + name = LT_EMALLOC (char, 1+ name_len); + if (name) + sprintf (name, "lib%s", p+2); + } + else + name = lt_estrdup(p); + + if (!name) + goto cleanup_names; + + names[depcount++] = name; + *end = save; + } + p = end; + } + } + + /* load the deplibs (in reverse order) + At this stage, don't worry if the deplibs do not load correctly, + they may already be statically linked into the loading application + for instance. There will be a more enlightening error message + later on if the loaded module cannot resolve all of its symbols. */ + if (depcount) + { + int j = 0; + + handle->deplibs = (lt_dlhandle*) LT_EMALLOC (lt_dlhandle *, depcount); + if (!handle->deplibs) + goto cleanup; + + for (i = 0; i < depcount; ++i) + { + handle->deplibs[j] = lt_dlopenext(names[depcount-1-i]); + if (handle->deplibs[j]) + { + ++j; + } + } + + handle->depcount = j; /* Number of successfully loaded deplibs */ + errors = 0; + } + + cleanup_names: + for (i = 0; i < depcount; ++i) + { + LT_DLFREE (names[i]); + } + + cleanup: + LT_DLFREE (names); +#endif + + return errors; +} + +static int +unload_deplibs (handle) + lt_dlhandle handle; +{ + int i; + int errors = 0; + + if (handle->depcount) + { + for (i = 0; i < handle->depcount; ++i) + { + if (!LT_DLIS_RESIDENT (handle->deplibs[i])) + { + errors += lt_dlclose (handle->deplibs[i]); + } + } + } + + return errors; +} + +static int +trim (dest, str) + char **dest; + const char *str; +{ + /* remove the leading and trailing "'" from str + and store the result in dest */ + const char *end = strrchr (str, '\''); + int len = LT_STRLEN (str); + char *tmp; + + LT_DLFREE (*dest); + + if (len > 3 && str[0] == '\'') + { + tmp = LT_EMALLOC (char, end - str); + if (!tmp) + return 1; + + strncpy(tmp, &str[1], (end - str) - 1); + tmp[len-3] = LT_EOS_CHAR; + *dest = tmp; + } + else + { + *dest = 0; + } + + return 0; +} + +static int +free_vars (dlname, oldname, libdir, deplibs) + char *dlname; + char *oldname; + char *libdir; + char *deplibs; +{ + LT_DLFREE (dlname); + LT_DLFREE (oldname); + LT_DLFREE (libdir); + LT_DLFREE (deplibs); + + return 0; +} + +// returns number of errors, so 0=success. +// phandle is a pointer to an lt_dlhandle, which must initially be NULL. +// On success (return value=0), *phandle is changed to point to the new +// lt_dlhandle. +int +try_dlopen (phandle, filename) + lt_dlhandle *phandle; + const char *filename; +{ + const char * ext = 0; + const char * saved_error = 0; + char * canonical = 0; + char * base_name = 0; + char * dir = 0; + char * name = 0; + int errors = 0; + lt_dlhandle newhandle; + + assert (phandle); + assert (*phandle == 0); + + LT_DLMUTEX_GETERROR (saved_error); + + /* dlopen self? */ + if (!filename) + { + *phandle = (lt_dlhandle) LT_EMALLOC (struct lt_dlhandle_struct, 1); + if (*phandle == 0) + return 1; + + memset (*phandle, 0, sizeof(struct lt_dlhandle_struct)); + newhandle = *phandle; + + /* lt_dlclose()ing yourself is very bad! Disallow it. */ + LT_DLSET_FLAG (*phandle, LT_DLRESIDENT_FLAG); + + if (tryall_dlopen (&newhandle, 0) != 0) + { + LT_DLFREE (*phandle); // this sets *phandle=NULL + return 1; + } + + goto register_handle; + } + + assert (filename && *filename); + + /* Doing this immediately allows internal functions to safely + assume only canonicalized paths are passed. */ + if (canonicalize_path (filename, &canonical) != 0) + { + ++errors; + goto cleanup; + } + + /* If the canonical module name is a path (relative or absolute) + then split it into a directory part and a name part. */ + base_name = strrchr (canonical, '/'); + if (base_name) + { + size_t dirlen = (1+ base_name) - canonical; + + dir = LT_EMALLOC (char, 1+ dirlen); + if (!dir) + { + ++errors; + goto cleanup; + } + + strncpy (dir, canonical, dirlen); + dir[dirlen] = LT_EOS_CHAR; + + ++base_name; + LTDEBUG_PRINTF(("in base_name not NULL section. dir='%s', base_name='%s', canonical='%s'\n", dir, base_name, canonical)); + } + else { + LT_DLMEM_REASSIGN (base_name, canonical); + LTDEBUG_PRINTF(("in base_name=NULL section. dir=NULL, base_name='%s', canonical='%s'\n", base_name, canonical)); + } + + assert (base_name && *base_name); + + /* Check whether we are opening a libtool module (.la extension). */ + ext = strrchr (base_name, '.'); + if (ext && strcmp (ext, archive_ext) == 0) + { + /* this seems to be a libtool module */ + FILE * file = 0; + char * dlname = 0; + char * old_name = 0; + char * libdir = 0; + char * deplibs = 0; + char * line = 0; + size_t line_len; + int i; + + /* if we can't find the installed flag, it is probably an + installed libtool archive, produced with an old version + of libtool */ + int installed = 1; + + /* extract the module name from the file name */ + name = LT_EMALLOC (char, ext - base_name + 1); + if (!name) + { + ++errors; + goto cleanup; + } + + /* canonicalize the module name */ + for (i = 0; i < ext - base_name; ++i) + { + if (isalnum ((int)(base_name[i]))) + { + name[i] = base_name[i]; + } + else + { + name[i] = '_'; + } + } + name[ext - base_name] = LT_EOS_CHAR; + + /* Now try to open the .la file. If there is no directory name + component, try to find it first in user_search_path and then other + prescribed paths. Otherwise (or in any case if the module was not + yet found) try opening just the module name as passed. */ + if (!dir) + { + const char *search_path; + + LT_DLMUTEX_LOCK (); + search_path = user_search_path; + if (search_path) + file = find_file (user_search_path, base_name, &dir); + LT_DLMUTEX_UNLOCK (); + + if (!file) + { + search_path = getenv (LTDL_SEARCHPATH_VAR); + if (search_path) + file = find_file (search_path, base_name, &dir); + } + +#ifdef LTDL_SHLIBPATH_VAR + if (!file) + { + search_path = getenv (LTDL_SHLIBPATH_VAR); + if (search_path) + file = find_file (search_path, base_name, &dir); + } +#endif +#ifdef LTDL_SYSSEARCHPATH + if (!file && sys_search_path) + { + file = find_file (sys_search_path, base_name, &dir); + } +#endif + } + if (!file) + { + LTDEBUG_PRINTF(("try_dlopen opening file '%s'\n", filename)); + file = fopen (filename, LT_READTEXT_MODE); +#ifdef __GNUC__ +#warning dir is still NULL +#endif + } + + /* If we didn't find the file by now, it really isn't there. Set + the status flag, and bail out. */ + if (!file) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (FILE_NOT_FOUND)); + ++errors; + goto cleanup; + } + + line_len = LT_FILENAME_MAX; + line = LT_EMALLOC (char, line_len); + if (!line) + { + fclose (file); + ++errors; + goto cleanup; + } + + /* read the .la file */ + while (!feof (file)) + { + if (!fgets (line, line_len, file)) + { + break; + } + + /* Handle the case where we occasionally need to read a line + that is longer than the initial buffer size. */ + while (line[LT_STRLEN(line) -1] != '\n') + { + line = LT_DLREALLOC (char, line, line_len *2); + if (!fgets (&line[line_len -1], line_len +1, file)) + { + break; + } + line_len *= 2; + } + + if (line[0] == '\n' || line[0] == '#') + { + continue; + } + +#undef STR_DLNAME +#define STR_DLNAME "dlname=" + if (strncmp (line, STR_DLNAME, sizeof (STR_DLNAME) - 1) == 0) + { + errors += trim (&dlname, &line[sizeof (STR_DLNAME) - 1]); + } + +#undef STR_OLD_LIBRARY +#define STR_OLD_LIBRARY "old_library=" + else if (strncmp (line, STR_OLD_LIBRARY, + sizeof (STR_OLD_LIBRARY) - 1) == 0) + { + errors += trim (&old_name, &line[sizeof (STR_OLD_LIBRARY) - 1]); + } +#undef STR_LIBDIR +#define STR_LIBDIR "libdir=" + else if (strncmp (line, STR_LIBDIR, sizeof (STR_LIBDIR) - 1) == 0) + { + errors += trim (&libdir, &line[sizeof(STR_LIBDIR) - 1]); + } + +#undef STR_DL_DEPLIBS +#define STR_DL_DEPLIBS "dependency_libs=" + else if (strncmp (line, STR_DL_DEPLIBS, + sizeof (STR_DL_DEPLIBS) - 1) == 0) + { + errors += trim (&deplibs, &line[sizeof (STR_DL_DEPLIBS) - 1]); + } + else if (strcmp (line, "installed=yes\n") == 0) + { + installed = 1; + } + else if (strcmp (line, "installed=no\n") == 0) + { + installed = 0; + } + +#undef STR_LIBRARY_NAMES +#define STR_LIBRARY_NAMES "library_names=" + else if (! dlname && strncmp (line, STR_LIBRARY_NAMES, + sizeof (STR_LIBRARY_NAMES) - 1) == 0) + { + char *last_libname; + errors += trim (&dlname, &line[sizeof (STR_LIBRARY_NAMES) - 1]); + if (!errors + && dlname + && (last_libname = strrchr (dlname, ' ')) != 0) + { + last_libname = lt_estrdup (last_libname + 1); + if (!last_libname) + { + ++errors; + goto cleanup; + } + LT_DLMEM_REASSIGN (dlname, last_libname); + } + } + + if (errors) + break; + } + + fclose (file); + LT_DLFREE (line); + + /* allocate the handle */ + *phandle = (lt_dlhandle) LT_EMALLOC (struct lt_dlhandle_struct, 1); + if (*phandle == 0) + ++errors; + + if (errors) + { + free_vars (dlname, old_name, libdir, deplibs); + LT_DLFREE (*phandle); + goto cleanup; + } + + assert (*phandle); + + memset (*phandle, 0, sizeof(struct lt_dlhandle_struct)); + if (load_deplibs (*phandle, deplibs) == 0) + { + newhandle = *phandle; + /* find_module may replace newhandle */ + if (find_module (&newhandle, dir, libdir, dlname, old_name, installed)) + { + unload_deplibs (*phandle); + ++errors; + } + } + else + { + ++errors; + } + + free_vars (dlname, old_name, libdir, deplibs); + if (errors) + { + LT_DLFREE (*phandle); // sets *phandle=NULL + goto cleanup; + } + + if (*phandle != newhandle) + { + unload_deplibs (*phandle); + } + } + else + { + /* not a libtool module */ + *phandle = (lt_dlhandle) LT_EMALLOC (struct lt_dlhandle_struct, 1); + if (*phandle == 0) + { + ++errors; + goto cleanup; + } + + memset (*phandle, 0, sizeof (struct lt_dlhandle_struct)); + newhandle = *phandle; + + /* If the module has no directory name component, try to find it + first in user_search_path and then other prescribed paths. + Otherwise (or in any case if the module was not yet found) try + opening just the module name as passed. */ + if ((dir || (!find_handle (user_search_path, base_name, &newhandle) + && !find_handle (getenv (LTDL_SEARCHPATH_VAR), base_name, + &newhandle) +#ifdef LTDL_SHLIBPATH_VAR + && !find_handle (getenv (LTDL_SHLIBPATH_VAR), base_name, + &newhandle) +#endif +#ifdef LTDL_SYSSEARCHPATH + && !find_handle (sys_search_path, base_name, &newhandle) +#endif + ))) + { + // Directory component was specified, or all find_handle() calls + // failed to find the lib. This is our last try. + errors = tryall_dlopen (&newhandle, filename); + } + + if (!newhandle || errors>0) + { + LT_DLFREE (*phandle); + ++errors; + goto cleanup; + } + } + + register_handle: + LT_DLMEM_REASSIGN (*phandle, newhandle); + + if ((*phandle)->info.ref_count == 0) + { + (*phandle)->info.ref_count = 1; + LT_DLMEM_REASSIGN ((*phandle)->info.name, name); + + LT_DLMUTEX_LOCK (); + (*phandle)->next = handles; + handles = *phandle; + LT_DLMUTEX_UNLOCK (); + } + + LT_DLMUTEX_SETERROR (saved_error); + + cleanup: + LT_DLFREE (dir); + LT_DLFREE (name); + LT_DLFREE (canonical); + + return errors; +} + +lt_dlhandle +lt_dlopen (filename) + const char *filename; +{ + lt_dlhandle handle = 0; + + /* Just incase we missed a code path in try_dlopen() that reports + an error, but forgets to reset handle... */ + if (try_dlopen (&handle, filename) != 0) + return 0; + + // If we're going to return a handle, be sure that has its loader + // field filled in. This is in response to some bugs in which dlopen() + // would return valid-looking handle with NULL loader, causing crashes + // later. + if (handle) assert (handle->loader != NULL); + + return handle; +} + +/* If the last error messge store was `FILE_NOT_FOUND', then return + non-zero. */ +int +file_not_found () +{ + const char *error = 0; + + LT_DLMUTEX_GETERROR (error); + if (error == LT_DLSTRERROR (FILE_NOT_FOUND)) + return 1; + + return 0; +} + +/* If FILENAME has an ARCHIVE_EXT or SHLIB_EXT extension, try to + open the FILENAME as passed. Otherwise try appending ARCHIVE_EXT, + and if a file is still not found try again with SHLIB_EXT appended + instead. */ +lt_dlhandle +lt_dlopenext (filename) + const char *filename; +{ + lt_dlhandle handle = 0; + char * tmp = 0; + char * ext = 0; + int len; + int errors = 0; + int file_found = 1; /* until proven otherwise */ + + if (!filename) + { + return lt_dlopen (filename); + } + + assert (filename); + + len = LT_STRLEN (filename); + ext = strrchr (filename, '.'); + + /* If FILENAME already bears a suitable extension, there is no need + to try appending additional extensions. */ + if (ext && ((strcmp (ext, archive_ext) == 0) +#ifdef LTDL_SHLIB_EXT + || (strcmp (ext, shlib_ext) == 0) +#endif + )) + { + return lt_dlopen (filename); + } + + /* First try appending ARCHIVE_EXT. */ + tmp = LT_EMALLOC (char, len + LT_STRLEN (archive_ext) + 1); + if (!tmp) + return 0; + + strcpy (tmp, filename); + strcat (tmp, archive_ext); + errors = try_dlopen (&handle, tmp); + + /* If we found FILENAME, stop searching -- whether we were able to + load the file as a module or not. If the file exists but loading + failed, it is better to return an error message here than to + report FILE_NOT_FOUND when the alternatives (foo.so etc) are not + in the module search path. */ + if (handle || ((errors > 0) && !file_not_found ())) + { + LT_DLFREE (tmp); + + // If we're going to return a handle, be sure that has its loader + // field filled in. This is in response to some bugs in which dlopen() + // would return valid-looking handle with NULL loader, causing crashes + // later. + if (handle) assert (handle->loader != NULL); + + return handle; + } + +#ifdef LTDL_SHLIB_EXT + /* Try appending SHLIB_EXT. */ + if (LT_STRLEN (shlib_ext) > LT_STRLEN (archive_ext)) + { + LT_DLFREE (tmp); + tmp = LT_EMALLOC (char, len + LT_STRLEN (shlib_ext) + 1); + if (!tmp) + return 0; + + strcpy (tmp, filename); + } + else + { + tmp[len] = LT_EOS_CHAR; + } + + strcat(tmp, shlib_ext); + errors = try_dlopen (&handle, tmp); + + /* As before, if the file was found but loading failed, return now + with the current error message. */ + if (handle || ((errors > 0) && !file_not_found ())) + { + LT_DLFREE (tmp); + // If we're going to return a handle, be sure that has its loader + // field filled in. This is in response to some bugs in which dlopen() + // would return valid-looking handle with NULL loader, causing crashes + // later. + if (handle) assert (handle->loader != NULL); + return handle; + } +#endif + + /* Still here? Then we really did fail to locate any of the file + names we tried. */ + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (FILE_NOT_FOUND)); + LT_DLFREE (tmp); + return 0; +} + + +int +lt_argz_insert (pargz, pargz_len, before, entry) + char **pargz; + size_t *pargz_len; + char *before; + const char *entry; +{ + error_t error; + + if ((error = argz_insert (pargz, pargz_len, before, entry))) + { + switch (error) + { + case ENOMEM: + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (NO_MEMORY)); + break; + default: + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (UNKNOWN)); + break; + } + return 1; + } + + return 0; +} + +int +lt_argz_insertinorder (pargz, pargz_len, entry) + char **pargz; + size_t *pargz_len; + const char *entry; +{ + char *before = 0; + + assert (pargz); + assert (pargz_len); + assert (entry && *entry); + + if (*pargz) + while ((before = argz_next (*pargz, *pargz_len, before))) + { + int cmp = strcmp (entry, before); + + if (cmp < 0) break; + if (cmp == 0) return 0; /* No duplicates! */ + } + + return lt_argz_insert (pargz, pargz_len, before, entry); +} + +int +lt_argz_insertdir (pargz, pargz_len, dirnam, dp) + char **pargz; + size_t *pargz_len; + const char *dirnam; + struct dirent *dp; +{ + char *buf = 0; + size_t buf_len = 0; + char *end = 0; + size_t end_offset = 0; + size_t dir_len = 0; + int errors = 0; + + assert (pargz); + assert (pargz_len); + assert (dp); + + dir_len = LT_STRLEN (dirnam); + end = dp->d_name + LT_D_NAMLEN(dp); + + /* Ignore version numbers. */ + { + char *p; + for (p = end; p -1 > dp->d_name; --p) + if (strchr (".0123456789", p[-1]) == 0) + break; + + if (*p == '.') + end = p; + } + + /* Ignore filename extension. */ + { + char *p; + for (p = end -1; p > dp->d_name; --p) + if (*p == '.') + { + end = p; + break; + } + } + + /* Prepend the directory name. */ + end_offset = end - dp->d_name; + buf_len = dir_len + 1+ end_offset; + buf = LT_EMALLOC (char, 1+ buf_len); + if (!buf) + return ++errors; + + assert (buf); + + strcpy (buf, dirnam); + strcat (buf, "/"); + strncat (buf, dp->d_name, end_offset); + buf[buf_len] = LT_EOS_CHAR; + + /* Try to insert (in order) into ARGZ/ARGZ_LEN. */ + if (lt_argz_insertinorder (pargz, pargz_len, buf) != 0) + ++errors; + + LT_DLFREE (buf); + + return errors; +} + +int +list_files_by_dir (dirnam, pargz, pargz_len) + const char *dirnam; + char **pargz; + size_t *pargz_len; +{ + DIR *dirp = 0; + int errors = 0; + + assert (dirnam && *dirnam); + assert (pargz); + assert (pargz_len); + assert (dirnam[LT_STRLEN(dirnam) -1] != '/'); + + dirp = opendir (dirnam); + if (dirp) + { + struct dirent *dp = 0; + + while ((dp = readdir (dirp))) + if (dp->d_name[0] != '.') + if (lt_argz_insertdir (pargz, pargz_len, dirnam, dp)) + { + ++errors; + break; + } + + closedir (dirp); + } + else + ++errors; + + return errors; +} + + +/* If there are any files in DIRNAME, call the function passed in + DATA1 (with the name of each file and DATA2 as arguments). */ +static int +foreachfile_callback (dirname, data1, data2) + char *dirname; + lt_ptr data1; + lt_ptr data2; +{ + int (*func) LT_PARAMS((const char *filename, lt_ptr data)) + = (int (*) LT_PARAMS((const char *filename, lt_ptr data))) data1; + + int is_done = 0; + char *argz = 0; + size_t argz_len = 0; + + if (list_files_by_dir (dirname, &argz, &argz_len) != 0) + goto cleanup; + if (!argz) + goto cleanup; + + { + char *filename = 0; + while ((filename = argz_next (argz, argz_len, filename))) + if ((is_done = (*func) (filename, data2))) + break; + } + + cleanup: + LT_DLFREE (argz); + + return is_done; +} + + +/* Call FUNC for each unique extensionless file in SEARCH_PATH, along + with DATA. The filenames passed to FUNC would be suitable for + passing to lt_dlopenext. The extensions are stripped so that + individual modules do not generate several entries (e.g. libfoo.la, + libfoo.so, libfoo.so.1, libfoo.so.1.0.0). If SEARCH_PATH is NULL, + then the same directories that lt_dlopen would search are examined. */ +int +lt_dlforeachfile (search_path, func, data) + const char *search_path; + int (*func) LT_PARAMS ((const char *filename, lt_ptr data)); + lt_ptr data; +{ + int is_done = 0; + + if (search_path) + { + /* If a specific path was passed, search only the directories + listed in it. */ + is_done = foreach_dirinpath (search_path, 0, + foreachfile_callback, func, data); + } + else + { + /* Otherwise search the default paths. */ + is_done = foreach_dirinpath (user_search_path, 0, + foreachfile_callback, func, data); + if (!is_done) + { + is_done = foreach_dirinpath (getenv("LTDL_LIBRARY_PATH"), 0, + foreachfile_callback, func, data); + } + +#ifdef LTDL_SHLIBPATH_VAR + if (!is_done) + { + is_done = foreach_dirinpath (getenv(LTDL_SHLIBPATH_VAR), 0, + foreachfile_callback, func, data); + } +#endif +#ifdef LTDL_SYSSEARCHPATH + if (!is_done) + { + is_done = foreach_dirinpath (getenv(LTDL_SYSSEARCHPATH), 0, + foreachfile_callback, func, data); + } +#endif + } + + return is_done; +} + +int +lt_dlclose (handle) + lt_dlhandle handle; +{ + lt_dlhandle cur, last; + int errors = 0; + + LT_DLMUTEX_LOCK (); + + /* check whether the handle is valid */ + last = cur = handles; + while (cur && handle != cur) + { + last = cur; + cur = cur->next; + } + + if (!cur) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_HANDLE)); + ++errors; + goto done; + } + + handle->info.ref_count--; + + /* Note that even with resident modules, we must track the ref_count + correctly incase the user decides to reset the residency flag + later (even though the API makes no provision for that at the + moment). */ + if (handle->info.ref_count <= 0 && !LT_DLIS_RESIDENT (handle)) + { + lt_user_data data = handle->loader->dlloader_data; + + if (handle != handles) + { + last->next = handle->next; + } + else + { + handles = handle->next; + } + + errors += handle->loader->module_close (data, handle->module); + errors += unload_deplibs(handle); + + LT_DLFREE (handle->info.filename); + LT_DLFREE (handle->info.name); + LT_DLFREE (handle); + + goto done; + } + + if (LT_DLIS_RESIDENT (handle)) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (CLOSE_RESIDENT_MODULE)); + ++errors; + } + + done: + LT_DLMUTEX_UNLOCK (); + + return errors; +} + +lt_ptr +lt_dlsym (handle, symbol) + lt_dlhandle handle; + const char *symbol; +{ + int lensym; + char lsym[LT_SYMBOL_LENGTH]; + char *sym; + lt_ptr address; + lt_user_data data; + + if (!handle) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_HANDLE)); + return 0; + } + + if (!symbol) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (SYMBOL_NOT_FOUND)); + return 0; + } + + // Due to bugs in lt_dlopen*, some handles were being returned that have a + // NULL loader field. Check for this. + assert (handle->loader); + + lensym = LT_STRLEN (symbol) + LT_STRLEN (handle->loader->sym_prefix) + + LT_STRLEN (handle->info.name); + + if (lensym + LT_SYMBOL_OVERHEAD < LT_SYMBOL_LENGTH) + { + sym = lsym; + } + else + { + sym = LT_EMALLOC (char, lensym + LT_SYMBOL_OVERHEAD + 1); + if (!sym) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (BUFFER_OVERFLOW)); + return 0; + } + } + + data = handle->loader->dlloader_data; + if (handle->info.name) + { + const char *saved_error; + + LT_DLMUTEX_GETERROR (saved_error); + + /* this is a libtool module */ + if (handle->loader->sym_prefix) + { + strcpy(sym, handle->loader->sym_prefix); + strcat(sym, handle->info.name); + } + else + { + strcpy(sym, handle->info.name); + } + + strcat(sym, "_LTX_"); + strcat(sym, symbol); + + /* try "modulename_LTX_symbol" */ + LTDEBUG_PRINTF(("dlsym looking for '%s'\n", sym)); + address = handle->loader->find_sym (data, handle->module, sym); + if (address) + { + if (sym != lsym) + { + LT_DLFREE (sym); + } + return address; + } + LT_DLMUTEX_SETERROR (saved_error); + } + + /* otherwise try "symbol" */ + if (handle->loader->sym_prefix) + { + strcpy(sym, handle->loader->sym_prefix); + strcat(sym, symbol); + } + else + { + strcpy(sym, symbol); + } + + LTDEBUG_PRINTF(("dlsym looking for '%s'\n", sym)); + address = handle->loader->find_sym (data, handle->module, sym); + if (sym != lsym) + { + LT_DLFREE (sym); + } + + return address; +} + +const char * +lt_dlerror () +{ + const char *error; + + LT_DLMUTEX_GETERROR (error); + LT_DLMUTEX_SETERROR (0); + + return error ? error : LT_DLSTRERROR (UNKNOWN); +} + +int +lt_dlpath_insertdir (ppath, before, dir) + char **ppath; + char *before; + const char *dir; +{ + int errors = 0; + char *canonical = 0; + char *argz = 0; + size_t argz_len = 0; + + assert (ppath); + assert (dir && *dir); + + if (canonicalize_path (dir, &canonical) != 0) + { + ++errors; + goto cleanup; + } + + assert (canonical && *canonical); + + /* If *PPATH is empty, set it to DIR. */ + if (*ppath == 0) + { + assert (!before); /* BEFORE cannot be set without PPATH. */ + assert (dir); /* Without DIR, don't call this function! */ + + *ppath = lt_estrdup (dir); + if (*ppath == 0) + ++errors; + + return errors; + } + + assert (ppath && *ppath); + + if (argzize_path (*ppath, &argz, &argz_len) != 0) + { + ++errors; + goto cleanup; + } + + /* Convert BEFORE into an equivalent offset into ARGZ. This only works + if *PPATH is already canonicalized, and hence does not change length + with respect to ARGZ. We canonicalize each entry as it is added to + the search path, and don't call this function with (uncanonicalized) + user paths, so this is a fair assumption. */ + if (before) + { + assert (*ppath <= before); + assert (before - *ppath <= strlen (*ppath)); + + before = before - *ppath + argz; + } + + if (lt_argz_insert (&argz, &argz_len, before, dir) != 0) + { + ++errors; + goto cleanup; + } + + argz_stringify (argz, argz_len, LT_PATHSEP_CHAR); + LT_DLMEM_REASSIGN (*ppath, argz); + + cleanup: + LT_DLFREE (canonical); + LT_DLFREE (argz); + + return errors; +} + +int +lt_dladdsearchdir (search_dir) + const char *search_dir; +{ + int errors = 0; + + if (search_dir && *search_dir) + { + LT_DLMUTEX_LOCK (); + if (lt_dlpath_insertdir (&user_search_path, 0, search_dir) != 0) + ++errors; + LT_DLMUTEX_UNLOCK (); + } + + return errors; +} + +int +lt_dlinsertsearchdir (before, search_dir) + const char *before; + const char *search_dir; +{ + int errors = 0; + + if (before) + { + LT_DLMUTEX_LOCK (); + if ((before < user_search_path) + || (before >= user_search_path + LT_STRLEN (user_search_path))) + { + LT_DLMUTEX_UNLOCK (); + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_POSITION)); + return 1; + } + LT_DLMUTEX_UNLOCK (); + } + + if (search_dir && *search_dir) + { + LT_DLMUTEX_LOCK (); + if (lt_dlpath_insertdir (&user_search_path, + (char *) before, search_dir) != 0) + { + ++errors; + } + LT_DLMUTEX_UNLOCK (); + } + + return errors; +} + +int +lt_dlsetsearchpath (search_path) + const char *search_path; +{ + int errors = 0; + + LT_DLMUTEX_LOCK (); + LT_DLFREE (user_search_path); + LT_DLMUTEX_UNLOCK (); + + if (!search_path || !LT_STRLEN (search_path)) + { + return errors; + } + + LT_DLMUTEX_LOCK (); + if (canonicalize_path (search_path, &user_search_path) != 0) + ++errors; + LT_DLMUTEX_UNLOCK (); + + return errors; +} + +const char * +lt_dlgetsearchpath () +{ + const char *saved_path; + + LT_DLMUTEX_LOCK (); + saved_path = user_search_path; + LT_DLMUTEX_UNLOCK (); + + return saved_path; +} + +int +lt_dlmakeresident (handle) + lt_dlhandle handle; +{ + int errors = 0; + + if (!handle) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_HANDLE)); + ++errors; + } + else + { + LT_DLSET_FLAG (handle, LT_DLRESIDENT_FLAG); + } + + return errors; +} + +int +lt_dlisresident (handle) + lt_dlhandle handle; +{ + if (!handle) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_HANDLE)); + return -1; + } + + return LT_DLIS_RESIDENT (handle); +} + + + + +/* --- MODULE INFORMATION --- */ + +const lt_dlinfo * +lt_dlgetinfo (handle) + lt_dlhandle handle; +{ + if (!handle) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_HANDLE)); + return 0; + } + + return &(handle->info); +} + +lt_dlhandle +lt_dlhandle_next (place) + lt_dlhandle place; +{ + return place ? place->next : handles; +} + +int +lt_dlforeach (func, data) + int (*func) LT_PARAMS((lt_dlhandle handle, lt_ptr data)); + lt_ptr data; +{ + int errors = 0; + lt_dlhandle cur; + + LT_DLMUTEX_LOCK (); + + cur = handles; + while (cur) + { + lt_dlhandle tmp = cur; + + cur = cur->next; + if ((*func) (tmp, data)) + { + ++errors; + break; + } + } + + LT_DLMUTEX_UNLOCK (); + + return errors; +} + +lt_dlcaller_id +lt_dlcaller_register () +{ + static lt_dlcaller_id last_caller_id = 0; + int result; + + LT_DLMUTEX_LOCK (); + result = ++last_caller_id; + LT_DLMUTEX_UNLOCK (); + + return result; +} + +lt_ptr +lt_dlcaller_set_data (key, handle, data) + lt_dlcaller_id key; + lt_dlhandle handle; + lt_ptr data; +{ + int n_elements = 0; + lt_ptr stale = (lt_ptr) 0; + int i; + + /* This needs to be locked so that the caller data can be updated + simultaneously by different threads. */ + LT_DLMUTEX_LOCK (); + + if (handle->caller_data) + while (handle->caller_data[n_elements].key) + ++n_elements; + + for (i = 0; i < n_elements; ++i) + { + if (handle->caller_data[i].key == key) + { + stale = handle->caller_data[i].data; + break; + } + } + + /* Ensure that there is enough room in this handle's caller_data + array to accept a new element (and an empty end marker). */ + if (i == n_elements) + { + lt_caller_data *temp + = LT_DLREALLOC (lt_caller_data, handle->caller_data, 2+ n_elements); + + if (!temp) + { + stale = 0; + goto done; + } + + handle->caller_data = temp; + + /* We only need this if we needed to allocate a new caller_data. */ + handle->caller_data[i].key = key; + handle->caller_data[1+ i].key = 0; + } + + handle->caller_data[i].data = data; + + done: + LT_DLMUTEX_UNLOCK (); + + return stale; +} + +lt_ptr +lt_dlcaller_get_data (key, handle) + lt_dlcaller_id key; + lt_dlhandle handle; +{ + lt_ptr result = (lt_ptr) 0; + + /* This needs to be locked so that the caller data isn't updated by + another thread part way through this function. */ + LT_DLMUTEX_LOCK (); + + /* Locate the index of the element with a matching KEY. */ + { + int i; + for (i = 0; handle->caller_data[i].key; ++i) + { + if (handle->caller_data[i].key == key) + { + result = handle->caller_data[i].data; + break; + } + } + } + + LT_DLMUTEX_UNLOCK (); + + return result; +} + + + +/* --- USER MODULE LOADER API --- */ + + +int +lt_dlloader_add (place, dlloader, loader_name) + lt_dlloader *place; + const struct lt_user_dlloader *dlloader; + const char *loader_name; +{ + int errors = 0; + lt_dlloader *node = 0, *ptr = 0; + + if ((dlloader == 0) /* diagnose null parameters */ + || (dlloader->module_open == 0) + || (dlloader->module_close == 0) + || (dlloader->find_sym == 0)) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_LOADER)); + return 1; + } + + /* Create a new dlloader node with copies of the user callbacks. */ + node = LT_EMALLOC (lt_dlloader, 1); + if (!node) + return 1; + + node->next = 0; + node->loader_name = loader_name; + node->sym_prefix = dlloader->sym_prefix; + node->dlloader_exit = dlloader->dlloader_exit; + node->module_open = dlloader->module_open; + node->module_close = dlloader->module_close; + node->find_sym = dlloader->find_sym; + node->dlloader_data = dlloader->dlloader_data; + + LT_DLMUTEX_LOCK (); + if (!loaders) + { + /* If there are no loaders, NODE becomes the list! */ + loaders = node; + } + else if (!place) + { + /* If PLACE is not set, add NODE to the end of the + LOADERS list. */ + for (ptr = loaders; ptr->next; ptr = ptr->next) + { + /*NOWORK*/; + } + + ptr->next = node; + } + else if (loaders == place) + { + /* If PLACE is the first loader, NODE goes first. */ + node->next = place; + loaders = node; + } + else + { + /* Find the node immediately preceding PLACE. */ + for (ptr = loaders; ptr->next != place; ptr = ptr->next) + { + /*NOWORK*/; + } + + if (ptr->next != place) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_LOADER)); + ++errors; + } + else + { + /* Insert NODE between PTR and PLACE. */ + node->next = place; + ptr->next = node; + } + } + + LT_DLMUTEX_UNLOCK (); + + return errors; +} + +int +lt_dlloader_remove (loader_name) + const char *loader_name; +{ + lt_dlloader *place = lt_dlloader_find (loader_name); + lt_dlhandle handle; + int errors = 0; + + if (!place) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_LOADER)); + return 1; + } + + LT_DLMUTEX_LOCK (); + + /* Fail if there are any open modules which use this loader. */ + for (handle = handles; handle; handle = handle->next) + { + if (handle->loader == place) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (REMOVE_LOADER)); + ++errors; + goto done; + } + } + + if (place == loaders) + { + /* PLACE is the first loader in the list. */ + loaders = loaders->next; + } + else + { + /* Find the loader before the one being removed. */ + lt_dlloader *prev; + for (prev = loaders; prev->next; prev = prev->next) + { + if (!strcmp (prev->next->loader_name, loader_name)) + { + break; + } + } + + place = prev->next; + prev->next = prev->next->next; + } + + if (place->dlloader_exit) + { + errors = place->dlloader_exit (place->dlloader_data); + } + + LT_DLFREE (place); + + done: + LT_DLMUTEX_UNLOCK (); + + return errors; +} + +lt_dlloader * +lt_dlloader_next (place) + lt_dlloader *place; +{ + lt_dlloader *next; + + LT_DLMUTEX_LOCK (); + next = place ? place->next : loaders; + LT_DLMUTEX_UNLOCK (); + + return next; +} + +const char * +lt_dlloader_name (place) + lt_dlloader *place; +{ + const char *name = 0; + + if (place) + { + LT_DLMUTEX_LOCK (); + name = place ? place->loader_name : 0; + LT_DLMUTEX_UNLOCK (); + } + else + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_LOADER)); + } + + return name; +} + +lt_user_data * +lt_dlloader_data (place) + lt_dlloader *place; +{ + lt_user_data *data = 0; + + if (place) + { + LT_DLMUTEX_LOCK (); + data = place ? &(place->dlloader_data) : 0; + LT_DLMUTEX_UNLOCK (); + } + else + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INVALID_LOADER)); + } + + return data; +} + +lt_dlloader * +lt_dlloader_find (loader_name) + const char *loader_name; +{ + lt_dlloader *place = 0; + + LT_DLMUTEX_LOCK (); + for (place = loaders; place; place = place->next) + { + if (strcmp (place->loader_name, loader_name) == 0) + { + break; + } + } + LT_DLMUTEX_UNLOCK (); + + return place; +} diff --git a/bochs/ltdl.h b/bochs/ltdl.h new file mode 100644 index 00000000..fda92e7f --- /dev/null +++ b/bochs/ltdl.h @@ -0,0 +1,398 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +// +// NOTE: The ltdl library comes from the Libtool package. Bochs uses +// ltdl and libtool to build and load plugins. The libtool +// documentation describes how to copy ltdl.c and ltdl.h into your +// distribution, so it is clearly legal to do so. +///////////////////////////////////////////////////////////////////////// + +/* ltdl.h -- generic dlopen functions + Copyright (C) 1998-2000 Free Software Foundation, Inc. + Originally by Thomas Tanner + This file is part of GNU Libtool. + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +As a special exception to the GNU Lesser General Public License, +if you distribute this file as part of a program or library that +is built using GNU libtool, you may include it under the same +distribution terms that you use for the rest of that program. + +This library 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 +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free +Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +02110-1301 USA +*/ + +/* Only include this header file once. */ +#ifndef LTDL_H +#define LTDL_H 1 + +#ifdef __cplusplus +extern "C" { +#endif +#include /* for size_t declaration */ +#ifdef __cplusplus +}; +#endif + + +/* --- MACROS FOR PORTABILITY --- */ + + +/* Saves on those hard to debug '\0' typos.... */ +#define LT_EOS_CHAR '\0' + +/* LTDL_BEGIN_C_DECLS should be used at the beginning of your declarations, + so that C++ compilers don't mangle their names. Use LTDL_END_C_DECLS at + the end of C declarations. */ +#ifdef __cplusplus +# define LT_BEGIN_C_DECLS extern "C" { +# define LT_END_C_DECLS } +#else +# define LT_BEGIN_C_DECLS /* empty */ +# define LT_END_C_DECLS /* empty */ +#endif + +LT_BEGIN_C_DECLS + + +/* LT_PARAMS is a macro used to wrap function prototypes, so that compilers + that don't understand ANSI C prototypes still work, and ANSI C + compilers can issue warnings about type mismatches. */ +#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(WIN32) || defined(__cplusplus) +# define LT_PARAMS(protos) protos +# define lt_ptr void* +#else +# define LT_PARAMS(protos) () +# define lt_ptr char* +#endif + +/* LT_STMT_START/END are used to create macros which expand to a + a single compound statement in a portable way. */ +#if defined (__GNUC__) && !defined (__STRICT_ANSI__) && !defined (__cplusplus) +# define LT_STMT_START (void)( +# define LT_STMT_END ) +#else +# if (defined (sun) || defined (__sun__)) +# define LT_STMT_START if (1) +# define LT_STMT_END else (void)0 +# else +# define LT_STMT_START do +# define LT_STMT_END while (0) +# endif +#endif + +/* LT_CONC creates a new concatenated symbol for the compiler + in a portable way. */ +#if defined(__STDC__) || defined(__cplusplus) +# define LT_CONC(s,t) s##t +#else +# define LT_CONC(s,t) s/**/t +#endif + +/* LT_STRLEN can be used safely on NULL pointers. */ +#define LT_STRLEN(s) (((s) && (s)[0]) ? strlen (s) : 0) + + + +/* --- WINDOWS SUPPORT --- */ + + +/* Canonicalise Windows and Cygwin recognition macros. */ +#ifdef __CYGWIN32__ +# ifndef __CYGWIN__ +# define __CYGWIN__ __CYGWIN32__ +# endif +#endif +#if defined(_WIN32) || defined(WIN32) +# ifndef __WINDOWS__ +# ifdef _WIN32 +# define __WINDOWS__ _WIN32 +# else +# ifdef WIN32 +# define __WINDOWS__ WIN32 +# endif +# endif +# endif +#endif + +#ifdef __WINDOWS__ +# ifndef __CYGWIN__ +/* LT_DIRSEP_CHAR is accepted *in addition* to '/' as a directory + separator when it is set. */ +# define LT_DIRSEP_CHAR '\\' +# define LT_PATHSEP_CHAR ';' +# endif +#endif +#ifndef LT_PATHSEP_CHAR +# define LT_PATHSEP_CHAR ':' +#endif + +/* DLL building support on win32 hosts; mostly to workaround their + ridiculous implementation of data symbol exporting. */ +#ifndef LT_SCOPE +# ifdef __WINDOWS__ +# ifdef DLL_EXPORT /* defined by libtool (if required) */ +# define LT_SCOPE __declspec(dllexport) +# endif +# ifdef LIBLTDL_DLL_IMPORT /* define if linking with this dll */ +# define LT_SCOPE extern __declspec(dllimport) +# endif +# endif +# ifndef LT_SCOPE /* static linking or !__WINDOWS__ */ +# define LT_SCOPE extern +# endif +#endif + + + + +/* --- DYNAMIC MODULE LOADING API --- */ + + +typedef struct lt_dlhandle_struct *lt_dlhandle; /* A loaded module. */ + +/* Initialisation and finalisation functions for libltdl. */ +extern int lt_dlinit LT_PARAMS((void)); +extern int lt_dlexit LT_PARAMS((void)); + +/* Module search path manipulation. */ +extern int lt_dladdsearchdir LT_PARAMS((const char *search_dir)); +extern int lt_dlinsertsearchdir LT_PARAMS((const char *before, + const char *search_dir)); +extern int lt_dlsetsearchpath LT_PARAMS((const char *search_path)); +extern const char *lt_dlgetsearchpath LT_PARAMS((void)); +extern int lt_dlforeachfile LT_PARAMS(( + const char *search_path, + int (*func) (const char *filename, lt_ptr data), + lt_ptr data)); + +/* Portable libltdl versions of the system dlopen() API. */ +extern lt_dlhandle lt_dlopen LT_PARAMS((const char *filename)); +extern lt_dlhandle lt_dlopenext LT_PARAMS((const char *filename)); +extern lt_ptr lt_dlsym LT_PARAMS((lt_dlhandle handle, + const char *name)); +extern const char *lt_dlerror LT_PARAMS((void)); +extern int lt_dlclose LT_PARAMS((lt_dlhandle handle)); + +/* Module residency management. */ +extern int lt_dlmakeresident LT_PARAMS((lt_dlhandle handle)); +extern int lt_dlisresident LT_PARAMS((lt_dlhandle handle)); + + + + +/* --- MUTEX LOCKING --- */ + + +typedef void lt_dlmutex_lock LT_PARAMS((void)); +typedef void lt_dlmutex_unlock LT_PARAMS((void)); +typedef void lt_dlmutex_seterror LT_PARAMS((const char *errmsg)); +typedef const char *lt_dlmutex_geterror LT_PARAMS((void)); + +extern int lt_dlmutex_register LT_PARAMS((lt_dlmutex_lock *lock, + lt_dlmutex_unlock *unlock, + lt_dlmutex_seterror *seterror, + lt_dlmutex_geterror *geterror)); + + + + +/* --- MEMORY HANDLING --- */ + + +/* By default, the realloc function pointer is set to our internal + realloc implementation which iself uses lt_dlmalloc and lt_dlfree. + libltdl relies on a featureful realloc, but if you are sure yours + has the right semantics then you can assign it directly. Generally, + it is safe to assign just a malloc() and a free() function. */ +LT_SCOPE lt_ptr (*lt_dlmalloc) LT_PARAMS((size_t size)); +LT_SCOPE lt_ptr (*lt_dlrealloc) LT_PARAMS((lt_ptr ptr, size_t size)); +LT_SCOPE void (*lt_dlfree) LT_PARAMS((lt_ptr ptr)); + + + + +/* --- PRELOADED MODULE SUPPORT --- */ + + +/* A preopened symbol. Arrays of this type comprise the exported + symbols for a dlpreopened module. */ +typedef struct { + const char *name; + lt_ptr address; +} lt_dlsymlist; + +extern int lt_dlpreload LT_PARAMS((const lt_dlsymlist *preloaded)); +extern int lt_dlpreload_default + LT_PARAMS((const lt_dlsymlist *preloaded)); + +#define LTDL_SET_PRELOADED_SYMBOLS() LT_STMT_START{ \ + extern const lt_dlsymlist lt_preloaded_symbols[]; \ + lt_dlpreload_default(lt_preloaded_symbols); \ + }LT_STMT_END + + + + +/* --- MODULE INFORMATION --- */ + + +/* Read only information pertaining to a loaded module. */ +typedef struct { + char *filename; /* file name */ + char *name; /* module name */ + int ref_count; /* number of times lt_dlopened minus + number of times lt_dlclosed. */ +} lt_dlinfo; + +extern const lt_dlinfo *lt_dlgetinfo LT_PARAMS((lt_dlhandle handle)); +extern lt_dlhandle lt_dlhandle_next LT_PARAMS((lt_dlhandle place)); +extern int lt_dlforeach LT_PARAMS(( + int (*func) (lt_dlhandle handle, lt_ptr data), + lt_ptr data)); + +/* Associating user data with loaded modules. */ +typedef unsigned lt_dlcaller_id; + +extern lt_dlcaller_id lt_dlcaller_register LT_PARAMS((void)); +extern lt_ptr lt_dlcaller_set_data LT_PARAMS((lt_dlcaller_id key, + lt_dlhandle handle, + lt_ptr data)); +extern lt_ptr lt_dlcaller_get_data LT_PARAMS((lt_dlcaller_id key, + lt_dlhandle handle)); + + + +/* --- USER MODULE LOADER API --- */ + + +typedef struct lt_dlloader lt_dlloader; +typedef lt_ptr lt_user_data; +typedef lt_ptr lt_module; + +/* Function pointer types for creating user defined module loaders. */ +typedef lt_module lt_module_open LT_PARAMS((lt_user_data loader_data, + const char *filename)); +typedef int lt_module_close LT_PARAMS((lt_user_data loader_data, + lt_module handle)); +typedef lt_ptr lt_find_sym LT_PARAMS((lt_user_data loader_data, + lt_module handle, + const char *symbol)); +typedef int lt_dlloader_exit LT_PARAMS((lt_user_data loader_data)); + +struct lt_user_dlloader { + const char *sym_prefix; + lt_module_open *module_open; + lt_module_close *module_close; + lt_find_sym *find_sym; + lt_dlloader_exit *dlloader_exit; + lt_user_data dlloader_data; +}; + +extern lt_dlloader *lt_dlloader_next LT_PARAMS((lt_dlloader *place)); +extern lt_dlloader *lt_dlloader_find LT_PARAMS(( + const char *loader_name)); +extern const char *lt_dlloader_name LT_PARAMS((lt_dlloader *place)); +extern lt_user_data *lt_dlloader_data LT_PARAMS((lt_dlloader *place)); +extern int lt_dlloader_add LT_PARAMS((lt_dlloader *place, + const struct lt_user_dlloader *dlloader, + const char *loader_name)); +extern int lt_dlloader_remove LT_PARAMS(( + const char *loader_name)); + + + +/* --- ERROR MESSAGE HANDLING --- */ + +/* Bryce rewrote the error table in a way that would be likely to work + on all compilers. VC++ was not able to handle it the way it was + done originally. */ + +/* ORIG COMMENT: Defining error strings alongside their symbolic names in a + macro in this way allows us to expand the macro in different contexts with + confidence that the enumeration of symbolic names will map correctly + onto the table of error strings. */ + +#define lt_dlerror_symbols_list \ + LT_ERROR_UNKNOWN, \ + LT_ERROR_DLOPEN_NOT_SUPPORTED, \ + LT_ERROR_INVALID_LOADER, \ + LT_ERROR_INIT_LOADER, \ + LT_ERROR_REMOVE_LOADER, \ + LT_ERROR_FILE_NOT_FOUND, \ + LT_ERROR_DEPLIB_NOT_FOUND, \ + LT_ERROR_NO_SYMBOLS, \ + LT_ERROR_CANNOT_OPEN, \ + LT_ERROR_CANNOT_CLOSE, \ + LT_ERROR_SYMBOL_NOT_FOUND, \ + LT_ERROR_NO_MEMORY, \ + LT_ERROR_INVALID_HANDLE, \ + LT_ERROR_BUFFER_OVERFLOW, \ + LT_ERROR_INVALID_ERRORCODE, \ + LT_ERROR_SHUTDOWN, \ + LT_ERROR_CLOSE_RESIDENT_MODULE, \ + LT_ERROR_INVALID_MUTEX_ARGS, \ + LT_ERROR_INVALID_POSITION, + +#define lt_dlerror_names_list \ + "unknown error", \ + "dlopen support not available", \ + "invalid loader", \ + "loader initialization failed", \ + "loader removal failed", \ + "file not found", \ + "dependency library not found", \ + "no symbols defined", \ + "can't open the module", \ + "can't close the module", \ + "symbol not found", \ + "not enough memory", \ + "invalid module handle", \ + "internal buffer overflow", \ + "invalid errorcode", \ + "library already shutdown", \ + "can't close resident module", \ + "invalid mutex handler registration", \ + "invalid search path insert position", + +/* Enumerate the symbolic error names. */ +enum { + lt_dlerror_symbols_list + LT_ERROR_MAX +}; + +/* These functions are only useful from inside custom module loaders. */ +extern int lt_dladderror LT_PARAMS((const char *diagnostic)); +extern int lt_dlseterror LT_PARAMS((int errorcode)); + + + + +/* --- SOURCE COMPATIBILITY WITH OLD LIBLTDL --- */ + + +#ifdef LT_NON_POSIX_NAMESPACE +# define lt_ptr_t lt_ptr +# define lt_module_t lt_module +# define lt_module_open_t lt_module_open +# define lt_module_close_t lt_module_close +# define lt_find_sym_t lt_find_sym +# define lt_dlloader_exit_t lt_dlloader_exit +# define lt_dlloader_t lt_dlloader +# define lt_dlloader_data_t lt_user_data +#endif + +LT_END_C_DECLS + +#endif /* !LTDL_H */ diff --git a/bochs/ltdlconf.h.in b/bochs/ltdlconf.h.in new file mode 100644 index 00000000..99de821d --- /dev/null +++ b/bochs/ltdlconf.h.in @@ -0,0 +1,160 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +// +// The configure script reads this file and produces ltdlconf.h, which +// tells ltdl.c how to compile. It was copied out of the libtool package +// but appears to have been generated by autoheader. +///////////////////////////////////////////////////////////////////////// + +/* config-h.in. Generated automatically from configure.in by autoheader. */ + +/* Define to empty if the keyword does not work. */ +#undef const + +/* Define as __inline if that's what the C compiler calls it. */ +#undef inline + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define if you have the argz_append function. */ +#undef HAVE_ARGZ_APPEND + +/* Define if you have the argz_create_sep function. */ +#undef HAVE_ARGZ_CREATE_SEP + +/* Define if you have the argz_insert function. */ +#undef HAVE_ARGZ_INSERT + +/* Define if you have the argz_next function. */ +#undef HAVE_ARGZ_NEXT + +/* Define if you have the argz_stringify function. */ +#undef HAVE_ARGZ_STRINGIFY + +/* Define if you have the bcopy function. */ +#undef HAVE_BCOPY + +/* Define if you have the dlerror function. */ +#undef HAVE_DLERROR + +/* Define if you have the index function. */ +#undef HAVE_INDEX + +/* Define if you have the memcpy function. */ +#undef HAVE_MEMCPY + +/* Define if you have the memmove function. */ +#undef HAVE_MEMMOVE + +/* Define if you have the rindex function. */ +#undef HAVE_RINDEX + +/* Define if you have the strchr function. */ +#undef HAVE_STRCHR + +/* Define if you have the strcmp function. */ +#undef HAVE_STRCMP + +/* Define if you have the strrchr function. */ +#undef HAVE_STRRCHR + +/* Define if you have the header file. */ +#undef HAVE_ARGZ_H + +/* Define if you have the header file. */ +#undef HAVE_ASSERT_H + +/* Define if you have the header file. */ +#undef HAVE_CTYPE_H + +/* Define if you have the header file. */ +#undef HAVE_DIRENT_H + +/* Define if you have the header file. */ +#undef HAVE_DL_H + +/* Define if you have the header file. */ +#undef HAVE_DLD_H + +/* Define if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define if you have the header file. */ +#undef HAVE_ERRNO_H + +/* Define if you have the header file. */ +#undef HAVE_MALLOC_H + +/* Define if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define if you have the header file. */ +#undef HAVE_NDIR_H + +/* Define if you have the header file. */ +#undef HAVE_STDIO_H + +/* Define if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define if you have the header file. */ +#undef HAVE_STRING_H + +/* Define if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_DIR_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_DL_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_NDIR_H + +/* Define if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to the extension used for shared libraries, say, .so. */ +#undef LTDL_SHLIB_EXT + +/* Define to the name of the environment variable that determines the dynamic library search path. */ +#undef LTDL_SHLIBPATH_VAR + +/* Define to the system default library search path. */ +#undef LTDL_SYSSEARCHPATH + +/* Define to the sub-directory in which libtool stores uninstalled libraries. */ +#undef LTDL_OBJDIR + +/* Define if libtool can extract symbol lists from object files. */ +#undef HAVE_PRELOADED_SYMBOLS + +/* Define if you have the libdl library or equivalent. */ +#undef HAVE_LIBDL + +/* Define if you have the libdl library or equivalent. */ +#undef HAVE_LIBDL + +/* Define if you have the libdl library or equivalent. */ +#undef HAVE_LIBDL + +/* Define if you have the shl_load function. */ +#undef HAVE_SHL_LOAD + +/* Define if you have the shl_load function. */ +#undef HAVE_SHL_LOAD + +/* Define if you have the GNU dld library. */ +#undef HAVE_DLD + +/* Define if dlsym() requires a leading underscode in symbol names. */ +#undef NEED_USCORE + +/* Define if the OS needs help to load dependent libraries for dlopen(). */ +#undef LTDL_DLOPEN_DEPLIBS + +/* Define to a type to use for `error_t' if it is not otherwise available. */ +#undef error_t + diff --git a/bochs/ltmain.sh b/bochs/ltmain.sh new file mode 100644 index 00000000..f785c022 --- /dev/null +++ b/bochs/ltmain.sh @@ -0,0 +1,6322 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun configure. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003 +# Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 1996 +# +# This program 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. +# +# 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. +# +# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +##################################### +# Shell function definitions: +# This seems to be the best place for them + +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +win32_libid () { + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ + grep -E 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | \ + sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` + if test "X$win32_nmres" = "Ximport" ; then + win32_libid_type="x86 archive import" + else + win32_libid_type="x86 archive static" + fi + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $echo $win32_libid_type +} + +# End of Shell function definitions +##################################### + +# Parse our command line options once, thoroughly. +while test "$#" -gt 0 +do + arg="$1" + shift + + case $arg in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + execute_dlfiles) + execute_dlfiles="$execute_dlfiles $arg" + ;; + tag) + tagname="$arg" + + # Check whether tagname contains only valid characters + case $tagname in + *[!-_A-Za-z0-9,/]*) + $echo "$progname: invalid tag name: $tagname" 1>&2 + exit 1 + ;; + esac + + case $tagname in + CC) + # Don't test for the "default" C tag, as we know, it's there, but + # not specially marked. + ;; + *) + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then + taglist="$taglist $tagname" + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`" + else + $echo "$progname: ignoring unknown tag $tagname" 1>&2 + fi + ;; + esac + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case $arg in + --help) + show_help=yes + ;; + + --version) + $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + $echo + $echo "Copyright (C) 2003 Free Software Foundation, Inc." + $echo "This is free software; see the source for copying conditions. There is NO" + $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + exit 0 + ;; + + --config) + ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 + # Now print the configurations for the tags. + for tagname in $taglist; do + ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0" + done + exit 0 + ;; + + --debug) + $echo "$progname: enabling shell trace mode" + set -x + ;; + + --dry-run | -n) + run=: + ;; + + --features) + $echo "host: $host" + if test "$build_libtool_libs" = yes; then + $echo "enable shared libraries" + else + $echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + $echo "enable static libraries" + else + $echo "disable static libraries" + fi + exit 0 + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + ;; + + --tag) prevopt="--tag" prev=tag ;; + --tag=*) + set tag "$optarg" ${1+"$@"} + shift + prev=tag + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 +fi + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 + $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 + case $nonopt in + *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_output= + arg_mode=normal + libobj= + + for arg + do + case "$arg_mode" in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + if test -n "$libobj" ; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit 1 + fi + arg_mode=target + continue + ;; + + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + base_compile="$base_compile $lastarg" + continue + ;; + + * ) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + case $lastarg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + base_compile="$base_compile $lastarg" + done # for arg + + case $arg_mode in + arg) + $echo "$modename: you must specify an argument for -Xcompile" + exit 1 + ;; + target) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit 1 + ;; + *) + # Get the name of the library object. + [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSifmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.ii) xform=ii ;; + *.class) xform=class ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + *.java) xform=java ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit 1 + ;; + esac + + # Infer tagged configuration to use if any are available and + # if one wasn't chosen via the "--tag" command line option. + # Only attempt this if the compiler in the base compile + # command doesn't match the default compiler. + if test -n "$available_tags" && test -z "$tagname"; then + case $base_compile in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" + case "$base_compile " in + "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + $echo "$modename: unable to infer tagged configuration" + $echo "$modename: specify a tag with \`--tag'" 1>&2 + exit 1 +# else +# $echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi + + objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir= + else + xdir=$xdir/ + fi + lobj=${xdir}$objdir/$objname + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit 1" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit 1" 1 2 15 + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $run ln "$0" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + $echo $srcfile > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + + $run $rm "$libobj" "${libobj}T" + + # Create a libtool object file (analogous to a ".la" file), + # but don't create it if we're doing a dry run. + test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + $show "$mv $output_obj $lobj" + if $run $mv $output_obj $lobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the PIC object to the libtool object file. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the non-PIC object the libtool object file. + # Only append if the libtool object file exists. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + fi + build_libtool_libs=no + build_old_libs=yes + prefer_static_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + base_compile="$base_compile $arg" + shift + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit 1 + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat $save_arg` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit 1 + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit 1 + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + done + else + $echo "$modename: link input file \`$save_arg' does not exist" + exit 1 + fi + arg=$save_arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit 1 + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit 1 + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-mingw* | *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs -framework System" + continue + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # gcc -m* arguments should be passed to the linker via $compiler_flags + # in order to pass architecture information to the linker + # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo + # but this is not reliable with gcc because gcc may use -mfoo to + # select a different linker, different libraries, etc, while + # -Wl,-mfoo simply passes -mfoo to the linker. + -m*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + if test "$with_gcc" = "yes" ; then + compiler_flags="$compiler_flags $arg" + fi + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # The PATH hackery in wrapper scripts is required on Windows + # in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit 1 + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit 1 + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Infer tagged configuration to use if any are available and + # if one wasn't chosen via the "--tag" command line option. + # Only attempt this if the compiler in the base link + # command doesn't match the default compiler. + if test -n "$available_tags" && test -z "$tagname"; then + case $base_compile in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" + case $base_compile in + "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) + # The compiler in $compile_command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + $echo "$modename: unable to infer tagged configuration" + $echo "$modename: specify a tag with \`--tag'" 1>&2 + exit 1 +# else +# $echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d "$output_objdir"; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test "$status" -ne 0 && test ! -d "$output_objdir"; then + exit $status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + case $host in + *cygwin* | *mingw* | *pw32*) + # don't eliminate duplcations in $postdeps and $predeps + duplicate_compiler_generated_deps=yes + ;; + *) + duplicate_compiler_generated_deps=$duplicate_deps + ;; + esac + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + case $linkmode in + lib) + passes="conv link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit 1 + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + for pass in $passes; do + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 + continue + fi + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do + for search_ext in .la $shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if (${SED} -e '2q' $lib | + grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + library_names= + old_library= + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + if test "$deplibs_check_method" != pass_all; then + $echo + $echo "*** Warning: Trying to link with static lib archive $deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because the file extensions .$libext of this argument makes me believe" + $echo "*** that it is just a static archive that I should not used here." + else + $echo + $echo "*** Warning: Linking the shared library $output against the" + $echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test "$found" = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib'" 1>&2 + exit 1 + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + + # Read the .la file + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit 1 + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit 1 + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit 1 + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit 1 + fi + if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit 1 + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + # This is a shared library + + # Warn about portability, can't link against -module's on some systems (darwin) + if test "$shouldnotlink" = yes && test "$pass" = link ; then + $echo + if test "$linkmode" = prog; then + $echo "*** Warning: Linking the executable $output against the loadable module" + else + $echo "*** Warning: Linking the shared library $output against the loadable module" + fi + $echo "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; shift + libname=`eval \\$echo \"$libname_spec\"` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`$echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + eval cmds=\"$extract_expsyms_cmds\" + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + eval cmds=\"$old_archive_from_expsyms_cmds\" + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5* ) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a module then we can not link against it, someone + # is ignoring the new warnings I added + if /usr/bin/file -L $add 2> /dev/null | grep "bundle" >/dev/null ; then + $echo "** Warning, lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $echo + $echo "** And there doesn't seem to be a static archive available" + $echo "** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit 1 + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $echo + $echo "*** Warning: This system can not link to static lib archive $lib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $echo "*** But as you try to build a module library, libtool will still create " + $echo "*** a static module, that should work as long as the dlopening application" + $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit 1 + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="$absdir" + fi + depdepl= + case $host in + *-*-darwin*) + # we do not want to link against static libs, but need to link against shared + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$path/$depdepl" ; then + depdepl="$path/$depdepl" + fi + # do not add paths which are already there + case " $newlib_search_path " in + *" $path "*) ;; + *) newlib_search_path="$newlib_search_path $path";; + esac + path="" + fi + ;; + *) + path="-L$path" + ;; + esac + + ;; + -l*) + case $host in + *-*-darwin*) + # Again, we only want to link against shared libraries + eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` + for tmp in $newlib_search_path ; do + if test -f "$tmp/lib$tmp_libs.dylib" ; then + eval depdepl="$tmp/lib$tmp_libs.dylib" + break + fi + done + path="" + ;; + *) continue ;; + esac + ;; + *) continue ;; + esac + case " $deplibs " in + *" $depdepl "*) ;; + *) deplibs="$deplibs $depdepl" ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$deplibs $path" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval shared_ext=\"$shrext\" + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval shared_ext=\"$shrext\" + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit 1 + else + $echo + $echo "*** Warning: Linking the shared library $output against the non-libtool" + $echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test "$#" -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$2" + number_minor="$3" + number_revision="$4" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows) + current=`expr $number_major + $number_minor` + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + current=`expr $number_major + $number_minor - 1` + age="$number_minor" + revision="$number_minor" + ;; + esac + ;; + no) + current="$2" + revision="$3" + age="$4" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case $revision in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case $age in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test "$age" -gt "$current"; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + irix | nonstopux) + major=`expr $current - $age + 1` + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$echo "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + removelist="$removelist $p" + ;; + *) ;; + esac + done + if test -n "$removelist"; then + $show "${rm}r $removelist" + $run ${rm}r $removelist + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + for path in $notinst_path; do + lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` + deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` + dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` + done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for file magic test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a file magic. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name="`expr $a_deplib : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval \\$echo \"$libname_spec\"` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval $echo \"$potent_lib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a regex pattern. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` + done + fi + if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ + | grep . >/dev/null; then + $echo + if test "X$deplibs_check_method" = "Xnone"; then + $echo "*** Warning: inter-library dependencies are not supported in this platform." + else + $echo "*** Warning: inter-library dependencies are not known to be supported." + fi + $echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $echo + $echo "*** Warning: libtool could not satisfy all declared inter-library" + $echo "*** dependencies of module $libname. Therefore, libtool will create" + $echo "*** a static module, that should work as long as the dlopening" + $echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $echo "*** The inter-library dependencies that have been dropped here will be" + $echo "*** automatically added whenever a program is linked with this library" + $echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $echo + $echo "*** Since this library must not contain undefined symbols," + $echo "*** because either the platform does not support them or" + $echo "*** it was explicitly requested with -no-undefined," + $echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + eval cmds=\"$export_symbols_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + if len=`expr "X$cmd" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + $show "$cmd" + $run eval "$cmd" || exit $? + skipped_export=false + else + # The command line is too long to execute in one step. + $show "using reloadable object file for export list..." + skipped_export=: + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval cmds=\"$module_expsym_cmds\" + else + eval cmds=\"$module_cmds\" + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval cmds=\"$archive_expsym_cmds\" + else + eval cmds=\"$archive_cmds\" + fi + fi + + if test "X$skipped_export" != "X:" && len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise. + $echo "creating reloadable object files..." + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + delfiles= + last_robj= + k=1 + output=$output_objdir/$save_output-${k}.$objext + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + eval test_cmds=\"$reload_cmds $objlist $last_robj\" + if test "X$objlist" = X || + { len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len"; }; then + objlist="$objlist $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" + fi + last_robj=$output_objdir/$save_output-${k}.$objext + k=`expr $k + 1` + output=$output_objdir/$save_output-${k}.$objext + objlist=$obj + len=1 + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + + if ${skipped_export-false}; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + libobjs=$output + # Append the command to create the export file. + eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" + fi + + # Set up a command to remove the reloadale object files + # after they are used. + i=0 + while test "$i" -lt "$k" + do + i=`expr $i + 1` + delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" + done + + $echo "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval cmds=\"$archive_expsym_cmds\" + else + eval cmds=\"$archive_cmds\" + fi + + # Append the command to remove the reloadable object files + # to the just-reset $cmds. + eval cmds=\"\$cmds~$rm $delfiles\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? + exit 0 + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + eval cmds=\"$reload_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $run eval "echo timestamp > $libobj" || exit $? + exit 0 + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + eval cmds=\"$reload_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + ;; + + prog) + case $host in + *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + case $host in + *darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + if test "$tagname" = CXX ; then + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + fi + ;; + esac + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$output.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' + $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval '$echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + $echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{\ +" + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit 1 + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit 0 + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $0 --fallback-echo"; then + case $0 in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; + *) qecho="$SHELL `pwd`/$0 --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + cwrappersource=`$echo ${objdir}/lt-${output}.c` + cwrapper=`$echo ${output}.exe` + $rm $cwrappersource $cwrapper + trap "$rm $cwrappersource $cwrapper; exit 1" 1 2 15 + + cat > $cwrappersource <> $cwrappersource<<"EOF" +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef DIR_SEPARATOR +#define DIR_SEPARATOR '/' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +#define HAVE_DOS_BASED_FILE_SYSTEM +#ifndef DIR_SEPARATOR_2 +#define DIR_SEPARATOR_2 '\\' +#endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +const char *program_name = NULL; + +void * xmalloc (size_t num); +char * xstrdup (const char *string); +char * basename (const char *name); +char * fnqualify(const char *path); +char * strendzap(char *str, const char *pat); +void lt_fatal (const char *message, ...); + +int +main (int argc, char *argv[]) +{ + char **newargz; + int i; + + program_name = (char *) xstrdup ((char *) basename (argv[0])); + newargz = XMALLOC(char *, argc+2); +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" + newargz[1] = fnqualify(argv[0]); + /* we know the script has the same name, without the .exe */ + /* so make sure newargz[1] doesn't end in .exe */ + strendzap(newargz[1],".exe"); + for (i = 1; i < argc; i++) + newargz[i+1] = xstrdup(argv[i]); + newargz[argc+1] = NULL; +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void * p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL +; +} + +char * +basename (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha (name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return (char *) base; +} + +char * +fnqualify(const char *path) +{ + size_t size; + char *p; + char tmp[LT_PATHMAX + 1]; + + assert(path != NULL); + + /* Is it qualified already? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha (path[0]) && path[1] == ':') + return xstrdup (path); +#endif + if (IS_DIR_SEPARATOR (path[0])) + return xstrdup (path); + + /* prepend the current directory */ + /* doesn't handle '~' */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ + p = XMALLOC(char, size); + sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); + return p; +} + +char * +strendzap(char *str, const char *pat) +{ + size_t len, patlen; + + assert(str != NULL); + assert(pat != NULL); + + len = strlen(str); + patlen = strlen(pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp(str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char * mode, + const char * message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} +EOF + # we should really use a build-platform specific compiler + # here, but OTOH, the wrappers (shell script and this C one) + # are only useful if you want to execute the "real" binary. + # Since the "real" binary is built for $host, then this + # wrapper might as well be built for $host, too. + $run $LTCC -s -o $cwrapper $cwrappersource + ;; + esac + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $echo >> $output "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + $echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $echo \"\$relink_command_output\" >&2 + $rm \"\$progdir/\$file\" + exit 1 + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + $echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \$progdir\\\\\$program \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + exec \$progdir/\$program \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit 1 + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + $echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" + chmod +x $output + fi + exit 0 + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + # Add in members from convenience archives. + for xlib in $addlibs; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` + done + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + eval cmds=\"$old_archive_from_new_cmds\" + else + eval cmds=\"$old_archive_cmds\" + + if len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # the command line is too long to link in one step, link in parts + $echo "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + # GNU ar 2.10+ was changed to match POSIX; thus no paths are + # encoded into archives. This makes 'ar r' malfunction in + # this piecewise linking case whenever conflicting object + # names appear in distinct ar calls; check, warn and compensate. + if (for obj in $save_oldobjs + do + $echo "X$obj" | $Xsed -e 's%^.*/%%' + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 + $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 + AR_FLAGS=cq + fi + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + for obj in $save_oldobjs + do + oldobjs="$objlist $obj" + objlist="$objlist $obj" + eval test_cmds=\"$old_archive_cmds\" + if len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~$old_archive_cmds\" + fi + fi + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $echo >> $output "\ +relink_command=\"$relink_command\"" + fi + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test "$#" -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit 1 + fi + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit 1 + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run eval "$striplib $destdir/$realname" || exit $? + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + eval cmds=\"$postinstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit 0 + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + file=`$echo $file|${SED} 's,.exe$,,'` + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # To insure that "foo" is sourced, and not "foo.exe", + # finese the cygwin/MSYS system by explicitly sourcing "foo." + # which disallows the automatic-append-.exe behavior. + case $build in + *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; + *) wrapperdot=${wrapper} ;; + esac + # If there is no directory component, then add one. + case $file in + */* | *\\*) . ${wrapperdot} ;; + *) . ./${wrapperdot} ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # To insure that "foo" is sourced, and not "foo.exe", + # finese the cygwin/MSYS system by explicitly sourcing "foo." + # which disallows the automatic-append-.exe behavior. + case $build in + *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; + *) wrapperdot=${wrapper} ;; + esac + # If there is no directory component, then add one. + case $file in + */* | *\\*) . ${wrapperdot} ;; + *) . ./${wrapperdot} ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir="/tmp" + test -n "$TMPDIR" && tmpdir="$TMPDIR" + tmpdir="$tmpdir/libtool-$$" + if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : + else + $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 + continue + fi + file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyways + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + eval cmds=\"$old_postinstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $0 --finish$current_libdirs' + else + exit 0 + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + eval cmds=\"$finish_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit 0 + + $echo "----------------------------------------------------------------------" + $echo "Libraries have been installed in:" + for libdir in $libdirs; do + $echo " $libdir" + done + $echo + $echo "If you ever happen to want to link against installed libraries" + $echo "in a given directory, LIBDIR, you must either use libtool, and" + $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + $echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + $echo " during execution" + fi + if test -n "$runpath_var"; then + $echo " - add LIBDIR to the \`$runpath_var' environment variable" + $echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $echo + $echo "See any operating system documentation about shared libraries for" + $echo "more information, such as the ld(1) and ld.so(8) manual pages." + $echo "----------------------------------------------------------------------" + exit 0 + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit 1 + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit 1 + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi + $echo "$cmd$args" + exit 0 + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + rm="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if (test -L "$file") >/dev/null 2>&1 \ + || (test -h "$file") >/dev/null 2>&1 \ + || test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + + if test "$mode" = uninstall; then + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + eval cmds=\"$postuninstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + eval cmds=\"$old_postuninstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + fi + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + + # Read the .lo file + . $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" \ + && test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" \ + && test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + file=`$echo $file|${SED} 's,.exe$,,'` + noexename=`$echo $name|${SED} 's,.exe$,,'` + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$noexename + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + fi +fi # test -z "$show_help" + +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit 1 +fi + +# We need to display help for each of the modes. +case $mode in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + --version print version information + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE. + +Report bugs to ." + exit 0 + ;; + +clean) + $echo \ +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; +esac + +$echo +$echo "Try \`$modename --help' for more information about other modes." + +exit 0 + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/bochs/main.cc b/bochs/main.cc new file mode 100644 index 00000000..b58b48da --- /dev/null +++ b/bochs/main.cc @@ -0,0 +1,1361 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +#include "bochs.h" +#include "param_names.h" +#include "gui/textconfig.h" +#if BX_USE_TEXTCONFIG && defined(WIN32) +#include "gui/win32dialog.h" +#endif +#include "cpu/cpu.h" +#include "iodev/iodev.h" +//DanceOS Richard Hellwig +//#include "failbochs.h" + +#ifdef HAVE_LOCALE_H +#include +#endif + +#if BX_WITH_SDL +// since SDL redefines main() to SDL_main(), we must include SDL.h so that the +// C language prototype is found. Otherwise SDL_main() will get its name +// mangled and not match what the SDL library is expecting. +#include + +#if defined(macintosh) +// Work around a bug in SDL 1.2.4 on MacOS X, which redefines getenv to +// SDL_getenv, but then neglects to provide SDL_getenv. It happens +// because we are defining -Dmacintosh. +#undef getenv +#endif +#endif + +#if BX_WITH_CARBON +#define Float32 KLUDGE_Float32 +#define Float64 KLUDGE_Float64 +#include +#undef Float32 +#undef Float64 +#endif + + +extern "C" { +#include +} + +#if BX_GUI_SIGHANDLER +bx_bool bx_gui_sighandler = 0; +#endif + +// some prototypes from iodev/ +// I want to stay away from including iodev/iodev.h here +Bit32u bx_unmapped_io_read_handler(Bit32u address, unsigned io_len); +void bx_unmapped_io_write_handler(Bit32u address, Bit32u value, + unsigned io_len); + +void bx_init_hardware(void); +void bx_init_options(void); +void bx_init_bx_dbg(void); + +static const char *divider = "========================================================================"; +static logfunctions thePluginLog; +logfunctions *pluginlog = &thePluginLog; + +bx_startup_flags_t bx_startup_flags; +bx_bool bx_user_quit; +Bit8u bx_cpu_count; +Bit32u apic_id_mask; // determinted by XAPIC option +bx_bool simulate_xapic; + +/* typedefs */ + +#define LOG_THIS genlog-> + +bx_pc_system_c bx_pc_system; + +bx_debug_t bx_dbg; + +typedef BX_CPU_C *BX_CPU_C_PTR; + +#if BX_SUPPORT_SMP +// multiprocessor simulation, we need an array of cpus +BOCHSAPI BX_CPU_C_PTR *bx_cpu_array = NULL; +#else +// single processor simulation, so there's one of everything +BOCHSAPI BX_CPU_C bx_cpu; +#endif + +BOCHSAPI BX_MEM_C bx_mem; + +char *bochsrc_filename = NULL; + +void bx_print_header() +{ + printf("%s\n", divider); + char buffer[128]; + sprintf (buffer, "Bochs x86 Emulator %s\n", VER_STRING); + bx_center_print(stdout, buffer, 72); + if (REL_STRING[0]) { + sprintf(buffer, "%s\n", REL_STRING); + bx_center_print(stdout, buffer, 72); +#ifdef __DATE__ +#ifdef __TIME__ + sprintf(buffer, "Compiled at %s, %s\n", __DATE__, __TIME__); +#else + sprintf(buffer, "Compiled at %s\n", __DATE__); +#endif + bx_center_print(stdout, buffer, 72); +#endif + } + printf("%s\n", divider); +} + +#if BX_WITH_CARBON +/* Original code by Darrell Walisser - dwaliss1@purdue.edu */ + +static void setupWorkingDirectory(char *path) +{ + char parentdir[MAXPATHLEN]; + char *c; + + strncpy (parentdir, path, MAXPATHLEN); + c = (char*) parentdir; + + while (*c != '\0') /* go to end */ + c++; + + while (*c != '/') /* back up to parent */ + c--; + + *c = '\0'; /* cut off last part (binary name) */ + + /* chdir to the binary app's parent */ + int n; + n = chdir (parentdir); + if (n) BX_PANIC (("failed to change dir to parent")); + /* chdir to the .app's parent */ + n = chdir ("../../../"); + if (n) BX_PANIC (("failed to change to ../../..")); +} + +/* Panic button to display fatal errors. + Completely self contained, can't rely on carbon.cc being available */ +static void carbonFatalDialog(const char *error, const char *exposition) +{ + DialogRef alertDialog; + CFStringRef cfError; + CFStringRef cfExposition; + DialogItemIndex index; + AlertStdCFStringAlertParamRec alertParam = {0}; + fprintf(stderr, "Entering carbonFatalDialog: %s\n", error); + + // Init libraries + InitCursor(); + // Assemble dialog + cfError = CFStringCreateWithCString(NULL, error, kCFStringEncodingASCII); + if(exposition != NULL) + { + cfExposition = CFStringCreateWithCString(NULL, exposition, kCFStringEncodingASCII); + } + else { cfExposition = NULL; } + alertParam.version = kStdCFStringAlertVersionOne; + alertParam.defaultText = CFSTR("Quit"); + alertParam.position = kWindowDefaultPosition; + alertParam.defaultButton = kAlertStdAlertOKButton; + // Display Dialog + CreateStandardAlert( + kAlertStopAlert, + cfError, + cfExposition, /* can be NULL */ + &alertParam, /* can be NULL */ + &alertDialog); + RunStandardAlert(alertDialog, NULL, &index); + // Cleanup + CFRelease(cfError); + if(cfExposition != NULL) { CFRelease(cfExposition); } +} +#endif + +#if BX_DEBUGGER +void print_tree(bx_param_c *node, int level) +{ + int i; + char tmpstr[BX_PATHNAME_LEN], tmpbyte[4]; + + for (i=0; iget_type()) { + case BXT_PARAM_NUM: + if (((bx_param_num_c*)node)->get_base() == BASE_DEC) { + dbg_printf("%s = " FMT_LL "d (number)\n", node->get_name(), ((bx_param_num_c*)node)->get64()); + } else { + dbg_printf("%s = 0x" FMT_LL "x (hex number)\n", node->get_name(), ((bx_param_num_c*)node)->get64()); + } + break; + case BXT_PARAM_BOOL: + dbg_printf("%s = %s (boolean)\n", node->get_name(), ((bx_param_bool_c*)node)->get()?"true":"false"); + break; + case BXT_PARAM_ENUM: + dbg_printf("%s = '%s' (enum)\n", node->get_name(), ((bx_param_enum_c*)node)->get_selected()); + break; + case BXT_PARAM_STRING: + if (((bx_param_string_c*)node)->get_options() & bx_param_string_c::RAW_BYTES) { + tmpstr[0] = 0; + for (i = 0; i < ((bx_param_string_c*)node)->get_maxsize(); i++) { + if (i > 0) { + tmpbyte[0] = ((bx_param_string_c*)node)->get_separator(); + tmpbyte[1] = 0; + strcat(tmpstr, tmpbyte); + } + sprintf(tmpbyte, "%02x", (Bit8u)((bx_param_string_c*)node)->getptr()[i]); + strcat(tmpstr, tmpbyte); + } + dbg_printf("%s = '%s' (raw byte string)\n", node->get_name(), tmpstr); + } else { + dbg_printf("%s = '%s' (string)\n", node->get_name(), ((bx_param_string_c*)node)->getptr()); + } + break; + case BXT_LIST: + { + dbg_printf("%s = \n", node->get_name()); + bx_list_c *list = (bx_list_c*)node; + for (i=0; i < list->get_size(); i++) { + print_tree(list->get(i), level+1); + } + break; + } + case BXT_PARAM_DATA: + dbg_printf("%s = 'size=%d' (binary data)\n", node->get_name(), ((bx_shadow_data_c*)node)->get_size()); + break; + default: + dbg_printf("%s (unknown parameter type)\n", node->get_name()); + } +} +#endif + +int bxmain (void) { + + //DanceOS Sprungmarke +#ifdef DANCEOS_RESTORE +marke: +#endif +#ifdef HAVE_LOCALE_H + // Initialize locale (for isprint() and other functions) + setlocale (LC_ALL, ""); +#endif + bx_user_quit = 0; + bx_init_siminterface(); // create the SIM object + static jmp_buf context; + if (setjmp (context) == 0) { + SIM->set_quit_context (&context); + BX_INSTR_INIT_ENV(); + if (bx_init_main(bx_startup_flags.argc, bx_startup_flags.argv) < 0) + { BX_INSTR_EXIT_ENV(); + return 0; + } + // read a param to decide which config interface to start. + // If one exists, start it. If not, just begin. + bx_param_enum_c *ci_param = SIM->get_param_enum(BXPN_SEL_CONFIG_INTERFACE); + const char *ci_name = ci_param->get_selected(); + if (!strcmp(ci_name, "textconfig")) { +#if BX_USE_TEXTCONFIG + init_text_config_interface(); // in textconfig.h +#else + BX_PANIC(("configuration interface 'textconfig' not present")); +#endif + } + else if (!strcmp(ci_name, "win32config")) { +#if BX_USE_TEXTCONFIG && defined(WIN32) + init_win32_config_interface(); +#else + BX_PANIC(("configuration interface 'win32config' not present")); +#endif + } +#if BX_WITH_WX + else if (!strcmp(ci_name, "wx")) { + PLUG_load_plugin(wx, PLUGTYPE_CORE); + } +#endif + else { + BX_PANIC(("unsupported configuration interface '%s'", ci_name)); + } + ci_param->set_enabled(0); + int status = SIM->configuration_interface(ci_name, CI_START); + + //DanceOS Richard Hellwig +#ifdef DANCEOS_RESTORE + if(sal::restore_bochs_request){ + + bx_devices.exit(); + + delete SIM; + SIM = NULL; + + bx_mem.new_init(); + BX_MEM(0)->cleanup_memory(); + + bx_gui->cleanup(); + bx_gui->exit(); + bx_gui->~bx_gui_c(); + bx_gui = NULL; + delete bx_gui; + + bx_pc_system.delete_timers(); + goto marke; + + } + +#endif + + if (status == CI_ERR_NO_TEXT_CONSOLE) + BX_PANIC(("Bochs needed the text console, but it was not usable")); + // user quit the config interface, so just quit + } else { + // quit via longjmp + } + SIM->set_quit_context(NULL); +#if defined(WIN32) + if (!bx_user_quit) { + // ask user to press ENTER before exiting, so that they can read messages + // before the console window is closed. This isn't necessary after pressing + // the power button. + fprintf(stderr, "\nBochs is exiting. Press ENTER when you're ready to close this window.\n"); + char buf[16]; + fgets(buf, sizeof(buf), stdin); + } +#endif + BX_INSTR_EXIT_ENV(); + return SIM->get_exit_code(); +} + +#if defined(__WXMSW__) + +// win32 applications get the whole command line in one long string. +// This function is used to split up the string into argc and argv, +// so that the command line can be used on win32 just like on every +// other platform. +// +// I'm sure other people have written this same function, and they may have +// done it better, but I don't know where to find it. -BBD +#ifndef MAX_ARGLEN +#define MAX_ARGLEN 80 +#endif +int split_string_into_argv ( + char *string, + int *argc_out, + char **argv, + int max_argv) +{ + char *buf0 = new char[strlen(string)+1]; + strcpy (buf0, string); + char *buf = buf0; + int in_double_quote = 0, in_single_quote = 0; + for (int i=0; i= max_argv) { + fprintf (stderr, "too many arguments. Increase MAX_ARGUMENTS\n"); + return -1; + } + argv[argc] = new char[MAX_ARGLEN]; + outp = &argv[argc][0]; + while (*p==' ') p++; + break; + case '"': + if (in_single_quote) goto do_default; + in_double_quote = !in_double_quote; + p++; + break; + case '\'': + if (in_double_quote) goto do_default; + in_single_quote = !in_single_quote; + p++; + break; + do_default: + default: + if (outp-&argv[argc][0] >= MAX_ARGLEN) { + //fprintf (stderr, "command line arg %d exceeded max size %d\n", argc, MAX_ARGLEN); + return -1; + } + *(outp++) = *(p++); + } + } + if (in_single_quote) { + fprintf (stderr, "end of string with mismatched single quote (')\n"); + return -1; + } + if (in_double_quote) { + fprintf (stderr, "end of string with mismatched double quote (\")\n"); + return -1; + } + *argc_out = argc; + return 0; +} +#endif /* if defined(__WXMSW__) */ + +#if defined(__WXMSW__) || (BX_WITH_SDL && defined(WIN32)) +// The RedirectIOToConsole() function is copied from an article called "Adding +// Console I/O to a Win32 GUI App" in Windows Developer Journal, December 1997. +// It creates a console window. +// +// NOTE: It could probably be written so that it can safely be called for all +// win32 builds. +int RedirectIOToConsole() +{ + int hConHandle; + long lStdHandle; + FILE *fp; + // allocate a console for this app + if (!AllocConsole()) { + MessageBox(NULL, "Failed to create text console", "Error", MB_ICONERROR); + return 0; + } + // redirect unbuffered STDOUT to the console + lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE); + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); + fp = _fdopen(hConHandle, "w"); + *stdout = *fp; + setvbuf(stdout, NULL, _IONBF, 0); + // redirect unbuffered STDIN to the console + lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE); + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); + fp = _fdopen(hConHandle, "r"); + *stdin = *fp; + setvbuf(stdin, NULL, _IONBF, 0); + // redirect unbuffered STDERR to the console + lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE); + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); + fp = _fdopen(hConHandle, "w"); + *stderr = *fp; + setvbuf(stderr, NULL, _IONBF, 0); + return 1; +} +#endif /* if defined(__WXMSW__) || (BX_WITH_SDL && defined(WIN32)) */ + +#if defined(__WXMSW__) +// only used for wxWidgets/win32. +// This works ok in Cygwin with a standard wxWidgets compile. In +// VC++ wxWidgets must be compiled with -DNOMAIN=1. +int WINAPI WinMain( + HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR m_lpCmdLine, int nCmdShow) +{ + bx_startup_flags.hInstance = hInstance; + bx_startup_flags.hPrevInstance = hPrevInstance; + bx_startup_flags.m_lpCmdLine = m_lpCmdLine; + bx_startup_flags.nCmdShow = nCmdShow; + if (!RedirectIOToConsole()) { + return 1; + } + SetConsoleTitle("Bochs for Windows (wxWidgets port) - Console"); + int max_argv = 20; + bx_startup_flags.argv = (char**) malloc (max_argv * sizeof (char*)); + split_string_into_argv(m_lpCmdLine, &bx_startup_flags.argc, bx_startup_flags.argv, max_argv); + return bxmain(); +} +#endif + +#if !defined(__WXMSW__) +// normal main function, presently in for all cases except for +// wxWidgets under win32. +int CDECL main(int argc, char *argv[]) +{ + bx_startup_flags.argc = argc; + bx_startup_flags.argv = argv; +#if BX_WITH_SDL && defined(WIN32) + // if SDL/win32, try to create a console window. + if (!RedirectIOToConsole()) { + return 1; + } +#endif +#if defined(WIN32) + SetConsoleTitle("Bochs for Windows - Console"); +#endif + return bxmain(); +} +#endif + +void print_usage(void) +{ + fprintf(stderr, + "Usage: bochs [flags] [bochsrc options]\n\n" + " -n no configuration file\n" + " -f configfile specify configuration file\n" + " -q quick start (skip configuration interface)\n" + " -benchmark n run bochs in benchmark mode for millions of emulated ticks\n" + " -r path restore the Bochs state from path\n" + " -log filename specify Bochs log file name\n" +#if BX_DEBUGGER + " -rc filename execute debugger commands stored in file\n" + " -dbglog filename specify Bochs internal debugger log file name\n" +#endif + " --help display this help and exit\n\n" + "For information on Bochs configuration file arguments, see the\n" +#if (!defined(WIN32)) && !BX_WITH_MACOS + "bochsrc section in the user documentation or the man page of bochsrc.\n"); +#else + "bochsrc section in the user documentation.\n"); +#endif +} + +int bx_init_main(int argc, char *argv[]) +{ + // To deal with initialization order problems inherent in C++, use the macros + // SAFE_GET_IOFUNC and SAFE_GET_GENLOG to retrieve "io" and "genlog" in all + // constructors or functions called by constructors. The macros test for + // NULL and create the object if necessary, then return it. Ensure that io + // and genlog get created, by making one reference to each macro right here. + // All other code can reference io and genlog directly. Because these + // objects are required for logging, and logging is so fundamental to + // knowing what the program is doing, they are never free()d. + SAFE_GET_IOFUNC(); // never freed + SAFE_GET_GENLOG(); // never freed + + // initalization must be done early because some destructors expect + // the bochs config options to exist by the time they are called. + bx_init_bx_dbg(); + bx_init_options(); + + bx_print_header(); + + SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_RUN_START); + + // interpret the args that start with -, like -q, -f, etc. + int arg = 1, load_rcfile=1; + while (arg < argc) { + // parse next arg + if (!strcmp("--help", argv[arg]) || !strncmp("-h", argv[arg], 2) +#if defined(WIN32) + || !strncmp("/?", argv[arg], 2) +#endif + ) { + print_usage(); + SIM->quit_sim(0); + } + else if (!strcmp("-n", argv[arg])) { + load_rcfile = 0; + } + else if (!strcmp("-q", argv[arg])) { + SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_QUICK_START); + } + else if (!strcmp("-log", argv[arg])) { + if (++arg >= argc) BX_PANIC(("-log must be followed by a filename")); + else SIM->get_param_string(BXPN_LOG_FILENAME)->set(argv[arg]); + } +#if BX_DEBUGGER + else if (!strcmp("-dbglog", argv[arg])) { + if (++arg >= argc) BX_PANIC(("-dbglog must be followed by a filename")); + else SIM->get_param_string(BXPN_DEBUGGER_LOG_FILENAME)->set(argv[arg]); + } +#endif + else if (!strcmp("-f", argv[arg])) { + if (++arg >= argc) BX_PANIC(("-f must be followed by a filename")); + else bochsrc_filename = argv[arg]; + } + else if (!strcmp("-qf", argv[arg])) { + SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_QUICK_START); + if (++arg >= argc) BX_PANIC(("-qf must be followed by a filename")); + else bochsrc_filename = argv[arg]; + } + else if (!strcmp("-benchmark", argv[arg])) { + SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_QUICK_START); + if (++arg >= argc) BX_PANIC(("-benchmark must be followed by a number")); + else SIM->get_param_num(BXPN_BOCHS_BENCHMARK)->set(atoi(argv[arg])); + } + else if (!strcmp("-r", argv[arg])) { + if (++arg >= argc) BX_PANIC(("-r must be followed by a path")); + else { + SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_QUICK_START); + SIM->get_param_bool(BXPN_RESTORE_FLAG)->set(1); + SIM->get_param_string(BXPN_RESTORE_PATH)->set(argv[arg]); + } + } +#if BX_WITH_CARBON + else if (!strncmp("-psn", argv[arg], 4)) { + // "-psn" is passed if we are launched by double-clicking + // ugly hack. I don't know how to open a window to print messages in, + // so put them in /tmp/early-bochs-out.txt. Sorry. -bbd + io->init_log("/tmp/early-bochs-out.txt"); + BX_INFO (("I was launched by double clicking. Fixing home directory.")); + arg = argc; // ignore all other args. + setupWorkingDirectory (argv[0]); + // there is no stdin/stdout so disable the text-based config interface. + SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_QUICK_START); + char cwd[MAXPATHLEN]; + getwd (cwd); + BX_INFO (("Now my working directory is %s", cwd)); + // if it was started from command line, there could be some args still. + for (int a=0; a= argc) BX_PANIC(("-rc must be followed by a filename")); + else bx_dbg_set_rcfile(argv[arg]); + } +#endif + else if (argv[arg][0] == '-') { + print_usage(); + BX_PANIC (("command line arg '%s' was not understood", argv[arg])); + } + else { + // the arg did not start with -, so stop interpreting flags + break; + } + arg++; + } +#ifdef DANCEOS_RESTORE + //DanceOS Richard Hellwig + if(sal::restore_bochs_request){ + SIM->get_param_bool(BXPN_RESTORE_FLAG)->set(1); + SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_QUICK_START); + SIM->get_param_string(BXPN_RESTORE_PATH)->set(sal::sr_path.c_str()); + } +#endif +#if BX_WITH_CARBON + if(!getenv("BXSHARE")) + { + CFBundleRef mainBundle; + CFURLRef bxshareDir; + char bxshareDirPath[MAXPATHLEN]; + BX_INFO (("fixing default bxshare location ...")); + // set bxshare to the directory that contains our application + mainBundle = CFBundleGetMainBundle(); + BX_ASSERT(mainBundle != NULL); + bxshareDir = CFBundleCopyBundleURL(mainBundle); + BX_ASSERT(bxshareDir != NULL); + // translate this to a unix style full path + if(!CFURLGetFileSystemRepresentation(bxshareDir, true, (UInt8 *)bxshareDirPath, MAXPATHLEN)) + { + BX_PANIC(("Unable to work out bxshare path! (Most likely path too long!)")); + return -1; + } + char *c; + c = (char*) bxshareDirPath; + while (*c != '\0') /* go to end */ + c++; + while (*c != '/') /* back up to parent */ + c--; + *c = '\0'; /* cut off last part (binary name) */ + setenv("BXSHARE", bxshareDirPath, 1); + BX_INFO (("now my BXSHARE is %s", getenv("BXSHARE"))); + CFRelease(bxshareDir); + } +#endif +#if BX_PLUGINS + // set a default plugin path, in case the user did not specify one +#if BX_WITH_CARBON + // if there is no stdin, then we must create our own LTDL_LIBRARY_PATH. + // also if there is no LTDL_LIBRARY_PATH, but we have a bundle since we're here + // This is here so that it is available whenever --with-carbon is defined but + // the above code might be skipped, as in --with-sdl --with-carbon + if(!isatty(STDIN_FILENO) || !getenv("LTDL_LIBRARY_PATH")) + { + CFBundleRef mainBundle; + CFURLRef libDir; + char libDirPath[MAXPATHLEN]; + if(!isatty(STDIN_FILENO)) + { + // there is no stdin/stdout so disable the text-based config interface. + SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_QUICK_START); + } + BX_INFO (("fixing default lib location ...")); + // locate the lib directory within the application bundle. + // our libs have been placed in bochs.app/Contents/(current platform aka MacOS)/lib + // This isn't quite right, but they are platform specific and we haven't put + // our plugins into true frameworks and bundles either + mainBundle = CFBundleGetMainBundle(); + BX_ASSERT(mainBundle != NULL); + libDir = CFBundleCopyAuxiliaryExecutableURL(mainBundle, CFSTR("lib")); + BX_ASSERT(libDir != NULL); + // translate this to a unix style full path + if(!CFURLGetFileSystemRepresentation(libDir, true, (UInt8 *)libDirPath, MAXPATHLEN)) + { + BX_PANIC(("Unable to work out ltdl library path within bochs bundle! (Most likely path too long!)")); + return -1; + + } + setenv("LTDL_LIBRARY_PATH", libDirPath, 1); + BX_INFO (("now my LTDL_LIBRARY_PATH is %s", getenv("LTDL_LIBRARY_PATH"))); + CFRelease(libDir); + } +#elif BX_HAVE_GETENV && BX_HAVE_SETENV + if (getenv("LTDL_LIBRARY_PATH") != NULL) { + BX_INFO (("LTDL_LIBRARY_PATH is set to '%s'", getenv("LTDL_LIBRARY_PATH"))); + } else { + BX_INFO (("LTDL_LIBRARY_PATH not set. using compile time default '%s'", + BX_PLUGIN_PATH)); + setenv("LTDL_LIBRARY_PATH", BX_PLUGIN_PATH, 1); + } + if (getenv("BXSHARE") != NULL) { + BX_INFO (("BXSHARE is set to '%s'", getenv("BXSHARE"))); + } else { + BX_INFO (("BXSHARE not set. using compile time default '%s'", + BX_SHARE_PATH)); + setenv("BXSHARE", BX_SHARE_PATH, 1); + } +#else + // we don't have getenv or setenv. Do nothing. +#endif +#endif /* if BX_PLUGINS */ + + // initialize plugin system. This must happen before we attempt to + // load any modules. + plugin_startup(); + + int norcfile = 1; + + if (SIM->get_param_bool(BXPN_RESTORE_FLAG)->get()) { + load_rcfile = 0; + norcfile = 0; + } + if (load_rcfile) { + /* parse configuration file and command line arguments */ +#ifdef WIN32 + int length; + if (bochsrc_filename != NULL) { + lstrcpy(bx_startup_flags.initial_dir, bochsrc_filename); + length = lstrlen(bx_startup_flags.initial_dir); + while ((length > 1) && (bx_startup_flags.initial_dir[length-1] != 92)) length--; + bx_startup_flags.initial_dir[length] = 0; + } else { + bx_startup_flags.initial_dir[0] = 0; + } +#endif + if (bochsrc_filename == NULL) bochsrc_filename = bx_find_bochsrc (); + if (bochsrc_filename) + norcfile = bx_read_configuration(bochsrc_filename); + } + + if (norcfile) { + // No configuration was loaded, so the current settings are unusable. + // Switch off quick start so that we will drop into the configuration + // interface. + if (SIM->get_param_enum(BXPN_BOCHS_START)->get() == BX_QUICK_START) { + if (!SIM->test_for_text_console()) + BX_PANIC(("Unable to start Bochs without a bochsrc.txt and without a text console")); + else + BX_ERROR(("Switching off quick start, because no configuration file was found.")); + } + SIM->get_param_enum(BXPN_BOCHS_START)->set(BX_LOAD_START); + } + + if (SIM->get_param_bool(BXPN_RESTORE_FLAG)->get()) { + if (arg < argc) { + BX_ERROR(("WARNING: bochsrc options are ignored in restore mode!")); + } + } + else { + // parse the rest of the command line. This is done after reading the + // configuration file so that the command line arguments can override + // the settings from the file. + if (bx_parse_cmdline(arg, argc, argv)) { + BX_PANIC(("There were errors while parsing the command line")); + return -1; + } + } + return 0; +} + +bx_bool load_and_init_display_lib(void) +{ + if (bx_gui != NULL) { + // bx_gui has already been filled in. This happens when you start + // the simulation for the second time. + // Also, if you load wxWidgets as the configuration interface. Its + // plugin_init will install wxWidgets as the bx_gui. + return true; + } + BX_ASSERT(bx_gui == NULL); + bx_param_enum_c *ci_param = SIM->get_param_enum(BXPN_SEL_CONFIG_INTERFACE); + const char *ci_name = ci_param->get_selected(); + bx_param_enum_c *gui_param = SIM->get_param_enum(BXPN_SEL_DISPLAY_LIBRARY); + const char *gui_name = gui_param->get_selected(); + if (!strcmp(ci_name, "wx")) { + BX_ERROR(("change of the config interface to wx not implemented yet")); + } + if (!strcmp(gui_name, "wx")) { + // they must not have used wx as the configuration interface, or bx_gui + // would already be initialized. Sorry, it doesn't work that way. + BX_ERROR(("wxWidgets was not used as the configuration interface, so it cannot be used as the display library")); + // choose another, hopefully different! + gui_param->set (0); + gui_name = gui_param->get_selected(); + if (!strcmp (gui_name, "wx")) { + BX_PANIC(("no alternative display libraries are available")); + return false; + } + BX_ERROR(("changing display library to '%s' instead", gui_name)); + } +#if BX_WITH_AMIGAOS + if (!strcmp(gui_name, "amigaos")) + PLUG_load_plugin (amigaos, PLUGTYPE_OPTIONAL); +#endif +#if BX_WITH_BEOS + if (!strcmp(gui_name, "beos")) + PLUG_load_plugin (beos, PLUGTYPE_OPTIONAL); +#endif +#if BX_WITH_CARBON + if (!strcmp(gui_name, "carbon")) + PLUG_load_plugin (carbon, PLUGTYPE_OPTIONAL); +#endif +#if BX_WITH_MACOS + if (!strcmp(gui_name, "macos")) + PLUG_load_plugin (macintosh, PLUGTYPE_OPTIONAL); +#endif +#if BX_WITH_NOGUI + if (!strcmp(gui_name, "nogui")) + PLUG_load_plugin (nogui, PLUGTYPE_OPTIONAL); +#endif +#if BX_WITH_RFB + if (!strcmp(gui_name, "rfb")) + PLUG_load_plugin (rfb, PLUGTYPE_OPTIONAL); +#endif +#if BX_WITH_SDL + if (!strcmp(gui_name, "sdl")) + PLUG_load_plugin (sdl, PLUGTYPE_OPTIONAL); +#endif +#if BX_WITH_SVGA + if (!strcmp(gui_name, "svga")) + PLUG_load_plugin (svga, PLUGTYPE_OPTIONAL); +#endif +#if BX_WITH_TERM + if (!strcmp(gui_name, "term")) + PLUG_load_plugin (term, PLUGTYPE_OPTIONAL); +#endif +#if BX_WITH_WIN32 + if (!strcmp(gui_name, "win32")) + PLUG_load_plugin (win32, PLUGTYPE_OPTIONAL); +#endif +#if BX_WITH_X11 + if (!strcmp(gui_name, "x")) + PLUG_load_plugin (x, PLUGTYPE_OPTIONAL); +#endif + +#if BX_GUI_SIGHANDLER + // set the flag for guis requiring a GUI sighandler. + // useful when guis are compiled as plugins + // only term for now + if (!strcmp(gui_name, "term")) { + bx_gui_sighandler = 1; + } +#endif + + BX_ASSERT(bx_gui != NULL); + return true; +} + +int bx_begin_simulation (int argc, char *argv[]) +{ + SIM->init_save_restore(); + if (SIM->get_param_bool(BXPN_RESTORE_FLAG)->get()) { + if (!SIM->restore_config()) { + BX_PANIC(("cannot restore configuration")); + SIM->get_param_bool(BXPN_RESTORE_FLAG)->set(0); + } + } + + // deal with gui selection + if (!load_and_init_display_lib ()) { + BX_PANIC (("no gui module was loaded")); + return 0; + } + + bx_cpu_count = SIM->get_param_num(BXPN_CPU_NPROCESSORS)->get() * + SIM->get_param_num(BXPN_CPU_NCORES)->get() * + SIM->get_param_num(BXPN_CPU_NTHREADS)->get(); + +#if BX_CPU_LEVEL >= 6 + simulate_xapic = SIM->get_param_bool(BXPN_CPUID_XAPIC)->get(); +#else + simulate_xapic = 0; +#endif + + // For P6 and Pentium family processors the local APIC ID feild is 4 bits + // APIC_MAX_ID indicate broadcast so it can't be used as valid APIC ID + apic_id_mask = simulate_xapic ? 0xFF : 0xF; + + // leave one APIC ID to I/O APIC + unsigned max_smp_threads = apic_id_mask - 1; + if (bx_cpu_count > max_smp_threads) { + BX_PANIC(("cpu: too many SMP threads defined, only %u threads supported by %sAPIC", + max_smp_threads, simulate_xapic ? "x" : "legacy ")); + } + + BX_ASSERT(bx_cpu_count > 0); + + bx_init_hardware(); + + if (SIM->get_param_enum(BXPN_LOAD32BITOS_WHICH)->get()) { + void bx_load32bitOSimagehack(void); + bx_load32bitOSimagehack(); + } + + SIM->set_init_done(1); + + // update headerbar buttons since drive status can change during init + bx_gui->update_drive_status_buttons(); + + // iniialize statusbar and set all items inactive + if (!SIM->get_param_bool(BXPN_RESTORE_FLAG)->get()) + { + bx_gui->statusbar_setitem(-1, 0); + } + + // The set handler for mouse_enabled does not actually update the gui + // until init_done is set. This forces the set handler to be called, + // which sets up the mouse enabled GUI-specific stuff correctly. + // Not a great solution but it works. BBD + SIM->get_param_bool(BXPN_MOUSE_ENABLED)->set(SIM->get_param_bool(BXPN_MOUSE_ENABLED)->get()); + +#if BX_DEBUGGER + // If using the debugger, it will take control and call + // bx_init_hardware() and cpu_loop() + bx_dbg_main(); +#else +#if BX_GDBSTUB + // If using gdbstub, it will take control and call + // bx_init_hardware() and cpu_loop() + if (bx_dbg.gdbstub_enabled) bx_gdbstub_init(); + else +#endif + { + if (BX_SMP_PROCESSORS == 1) { + // only one processor, run as fast as possible by not messing with + // quantums and loops. + while (1) { + BX_CPU(0)->cpu_loop(0); + if (bx_pc_system.kill_bochs_request){ + break; + } +#ifdef DANCEOS_RESTORE + if(sal::restore_bochs_request){ + //DanceOS Richard Hellwig + return 1; + } +#endif + } + // for one processor, the only reason for cpu_loop to return is + // that kill_bochs_request was set by the GUI interface. + } + else { + // SMP simulation: do a few instructions on each processor, then switch + // to another. Increasing quantum speeds up overall performance, but + // reduces granularity of synchronization between processors. + int processor = 0; + int quantum = SIM->get_param_num(BXPN_SMP_QUANTUM)->get(); + while (1) { + // do some instructions in each processor + BX_CPU(processor)->cpu_loop(quantum); + processor = (processor+1) % BX_SMP_PROCESSORS; + if (bx_pc_system.kill_bochs_request){ + break; + } +#ifdef DANCEOS_RESTORE + if(sal::restore_bochs_request){ + //DanceOS Richard Hellwig + return 1; + } +#endif + if (processor == 0) + BX_TICKN(quantum); + } + } + } +#endif /* BX_DEBUGGER == 0 */ + BX_INFO(("cpu loop quit, shutting down simulator")); + bx_atexit(); + return(0); +} + +void bx_stop_simulation(void) +{ + // in wxWidgets, the whole simulator is running in a separate thread. + // our only job is to end the thread as soon as possible, NOT to shut + // down the whole application with an exit. + BX_CPU(0)->async_event = 1; + bx_pc_system.kill_bochs_request = 1; + // the cpu loop will exit very soon after this condition is set. +} + +void bx_sr_after_restore_state(void) +{ +#if BX_SUPPORT_SMP == 0 + BX_CPU(0)->after_restore_state(); +#else + for (unsigned i=0; iafter_restore_state(); + } +#endif + DEV_after_restore_state(); +} + +void bx_init_hardware() +{ + // all configuration has been read, now initialize everything. + + if (SIM->get_param_enum(BXPN_BOCHS_START)->get()==BX_QUICK_START) { + for (int level=0; levelget_default_log_action(level); + io->set_log_action(level, action); + } + } + + + bx_pc_system.initialize(SIM->get_param_num(BXPN_IPS)->get()); + + + if (SIM->get_param_string(BXPN_LOG_FILENAME)->getptr()[0]!='-') { + BX_INFO (("using log file %s", SIM->get_param_string(BXPN_LOG_FILENAME)->getptr())); + io->init_log(SIM->get_param_string(BXPN_LOG_FILENAME)->getptr()); + } + + io->set_log_prefix(SIM->get_param_string(BXPN_LOG_PREFIX)->getptr()); + +#if BX_CPU_LEVEL >= 5 + bx_bool mmx_enabled = SIM->get_param_bool(BXPN_CPUID_MMX)->get(); +#endif +#if BX_CPU_LEVEL >= 6 + bx_bool aes_enabled = SIM->get_param_bool(BXPN_CPUID_AES)->get(); + bx_bool movbe_enabled = SIM->get_param_bool(BXPN_CPUID_MOVBE)->get(); + bx_bool sep_enabled = SIM->get_param_bool(BXPN_CPUID_SEP)->get(); + bx_bool xsave_enabled = SIM->get_param_bool(BXPN_CPUID_XSAVE)->get(); +#if BX_SUPPORT_X86_64 + bx_bool xlarge_pages_enabled = SIM->get_param_bool(BXPN_CPUID_1G_PAGES)->get(); +#endif +#if BX_SUPPORT_MONITOR_MWAIT + bx_bool mwait_enabled = SIM->get_param_bool(BXPN_CPUID_MWAIT)->get(); +#endif +#endif + + // Output to the log file the cpu and device settings + // This will by handy for bug reports + BX_INFO(("Bochs x86 Emulator %s", VER_STRING)); + BX_INFO((" %s", REL_STRING)); +#ifdef __DATE__ +#ifdef __TIME__ + BX_INFO(("Compiled at %s, %s", __DATE__, __TIME__)); +#else + BX_INFO(("Compiled at %s", __DATE__)); +#endif +#endif + BX_INFO(("System configuration")); + BX_INFO((" processors: %d (cores=%u, HT threads=%u)", BX_SMP_PROCESSORS, + SIM->get_param_num(BXPN_CPU_NCORES)->get(), SIM->get_param_num(BXPN_CPU_NTHREADS)->get())); + BX_INFO((" A20 line support: %s",BX_SUPPORT_A20?"yes":"no")); +#if BX_CONFIGURE_MSRS + const char *msrs_file = SIM->get_param_string(BXPN_CONFIGURABLE_MSRS_PATH)->getptr(); + if(strlen(msrs_file) > 0) + BX_INFO((" load configurable MSRs from file \"%s\"", msrs_file)); +#endif + BX_INFO(("CPU configuration")); + BX_INFO((" level: %d",BX_CPU_LEVEL)); +#if BX_SUPPORT_SMP + BX_INFO((" SMP support: yes, quantum=%d", SIM->get_param_num(BXPN_SMP_QUANTUM)->get())); +#else + BX_INFO((" SMP support: no")); +#endif + BX_INFO((" APIC support: %s",BX_SUPPORT_APIC?"yes":"no")); + BX_INFO((" FPU support: %s",BX_SUPPORT_FPU?"yes":"no")); +#if BX_CPU_LEVEL >= 5 + BX_INFO((" MMX support: %s",mmx_enabled?"yes":"no")); + BX_INFO((" 3dnow! support: %s",BX_SUPPORT_3DNOW?"yes":"no")); +#endif +#if BX_CPU_LEVEL >= 6 + BX_INFO((" SEP support: %s",sep_enabled?"yes":"no")); + BX_INFO((" SSE support: %s", SIM->get_param_enum(BXPN_CPUID_SSE)->get_selected())); + BX_INFO((" XSAVE support: %s",xsave_enabled?"yes":"no")); + BX_INFO((" AES support: %s",aes_enabled?"yes":"no")); + BX_INFO((" MOVBE support: %s",movbe_enabled?"yes":"no")); + BX_INFO((" x86-64 support: %s",BX_SUPPORT_X86_64?"yes":"no")); +#if BX_SUPPORT_X86_64 + BX_INFO((" 1G paging support: %s",xlarge_pages_enabled?"yes":"no")); +#endif +#if BX_SUPPORT_MONITOR_MWAIT + BX_INFO((" MWAIT support: %s",mwait_enabled?"yes":"no")); +#endif +#if BX_SUPPORT_VMX + BX_INFO((" VMX support: %d",BX_SUPPORT_VMX)); +#else + BX_INFO((" VMX support: no")); +#endif +#endif + BX_INFO(("Optimization configuration")); + BX_INFO((" RepeatSpeedups support: %s",BX_SupportRepeatSpeedups?"yes":"no")); + BX_INFO((" Trace cache support: %s",BX_SUPPORT_TRACE_CACHE?"yes":"no")); + BX_INFO((" Fast function calls: %s",BX_FAST_FUNC_CALL?"yes":"no")); + BX_INFO(("Devices configuration")); + BX_INFO((" ACPI support: %s",BX_SUPPORT_ACPI?"yes":"no")); + BX_INFO((" NE2000 support: %s",BX_SUPPORT_NE2K?"yes":"no")); + BX_INFO((" PCI support: %s, enabled=%s",BX_SUPPORT_PCI?"yes":"no", + SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get() ? "yes" : "no")); + BX_INFO((" SB16 support: %s",BX_SUPPORT_SB16?"yes":"no")); + BX_INFO((" USB support: %s",BX_SUPPORT_PCIUSB?"yes":"no")); + BX_INFO((" VGA extension support: %s %s",BX_SUPPORT_VBE?"vbe":"", + BX_SUPPORT_CLGD54XX?"cirrus":"")); + + // Check if there is a romimage + if (strcmp(SIM->get_param_string(BXPN_ROM_PATH)->getptr(),"") == 0) { + BX_ERROR(("No romimage to load. Is your bochsrc file loaded/valid ?")); + } + + // set one shot timer for benchmark mode if needed, the timer will fire + // once and kill Bochs simulation after predefined amount of emulated + // ticks + int benchmark_mode = SIM->get_param_num(BXPN_BOCHS_BENCHMARK)->get(); + if (benchmark_mode) { + BX_INFO(("Bochs benchmark mode is ON (~%d millions of ticks)", benchmark_mode)); + bx_pc_system.register_timer_ticks(&bx_pc_system, bx_pc_system_c::benchmarkTimer, + (Bit64u) benchmark_mode * 1000000, 0, 1, "benchmark.timer"); + } + + // set up memory and CPU objects + bx_param_num_c *bxp_memsize = SIM->get_param_num(BXPN_MEM_SIZE); + Bit64u memSize = bxp_memsize->get64() * BX_CONST64(1024*1024); + + bx_param_num_c *bxp_host_memsize = SIM->get_param_num(BXPN_HOST_MEM_SIZE); + Bit64u hostMemSize = bxp_host_memsize->get64() * BX_CONST64(1024*1024); + + // do not allocate more host memory than needed for emulation of guest RAM + if (memSize < hostMemSize) hostMemSize = memSize; + + BX_MEM(0)->init_memory(memSize, hostMemSize); + + // First load the BIOS and VGABIOS + BX_MEM(0)->load_ROM(SIM->get_param_string(BXPN_ROM_PATH)->getptr(), + SIM->get_param_num(BXPN_ROM_ADDRESS)->get(), 0); + BX_MEM(0)->load_ROM(SIM->get_param_string(BXPN_VGA_ROM_PATH)->getptr(), 0xc0000, 1); + + // Then load the optional ROM images + if (strcmp(SIM->get_param_string(BXPN_OPTROM1_PATH)->getptr(), "") !=0) + BX_MEM(0)->load_ROM(SIM->get_param_string(BXPN_OPTROM1_PATH)->getptr(), SIM->get_param_num(BXPN_OPTROM1_ADDRESS)->get(), 2); + if (strcmp(SIM->get_param_string(BXPN_OPTROM2_PATH)->getptr(), "") !=0) + BX_MEM(0)->load_ROM(SIM->get_param_string(BXPN_OPTROM2_PATH)->getptr(), SIM->get_param_num(BXPN_OPTROM2_ADDRESS)->get(), 2); + if (strcmp(SIM->get_param_string(BXPN_OPTROM3_PATH)->getptr(), "") !=0) + BX_MEM(0)->load_ROM(SIM->get_param_string(BXPN_OPTROM3_PATH)->getptr(), SIM->get_param_num(BXPN_OPTROM3_ADDRESS)->get(), 2); + if (strcmp(SIM->get_param_string(BXPN_OPTROM4_PATH)->getptr(), "") !=0) + BX_MEM(0)->load_ROM(SIM->get_param_string(BXPN_OPTROM4_PATH)->getptr(), SIM->get_param_num(BXPN_OPTROM4_ADDRESS)->get(), 2); + + // Then load the optional RAM images + if (strcmp(SIM->get_param_string(BXPN_OPTRAM1_PATH)->getptr(), "") !=0) + BX_MEM(0)->load_RAM(SIM->get_param_string(BXPN_OPTRAM1_PATH)->getptr(), SIM->get_param_num(BXPN_OPTRAM1_ADDRESS)->get(), 2); + if (strcmp(SIM->get_param_string(BXPN_OPTRAM2_PATH)->getptr(), "") !=0) + BX_MEM(0)->load_RAM(SIM->get_param_string(BXPN_OPTRAM2_PATH)->getptr(), SIM->get_param_num(BXPN_OPTRAM2_ADDRESS)->get(), 2); + if (strcmp(SIM->get_param_string(BXPN_OPTRAM3_PATH)->getptr(), "") !=0) + BX_MEM(0)->load_RAM(SIM->get_param_string(BXPN_OPTRAM3_PATH)->getptr(), SIM->get_param_num(BXPN_OPTRAM3_ADDRESS)->get(), 2); + if (strcmp(SIM->get_param_string(BXPN_OPTRAM4_PATH)->getptr(), "") !=0) + BX_MEM(0)->load_RAM(SIM->get_param_string(BXPN_OPTRAM4_PATH)->getptr(), SIM->get_param_num(BXPN_OPTRAM4_ADDRESS)->get(), 2); + +#if BX_SUPPORT_SMP == 0 + BX_CPU(0)->initialize(); + BX_CPU(0)->sanity_checks(); + BX_CPU(0)->register_state(); + BX_INSTR_INITIALIZE(0); +#else + bx_cpu_array = new BX_CPU_C_PTR[BX_SMP_PROCESSORS]; + + for (unsigned i=0; iinitialize(); // assign local apic id in 'initialize' method + BX_CPU(i)->sanity_checks(); + BX_CPU(i)->register_state(); + BX_INSTR_INITIALIZE(i); + } +#endif + + DEV_init_devices(); + bx_pc_system.register_state(); + DEV_register_state(); + if (SIM->get_param_bool(BXPN_RESTORE_FLAG)->get()) { + if (!SIM->restore_logopts()) { + BX_PANIC(("cannot restore log options")); + SIM->get_param_bool(BXPN_RESTORE_FLAG)->set(0); + } + } + + // will enable A20 line and reset CPU and devices + bx_pc_system.Reset(BX_RESET_HARDWARE); + + if (SIM->get_param_bool(BXPN_RESTORE_FLAG)->get()) { + if (SIM->restore_hardware()) { + bx_sr_after_restore_state(); + } else { + BX_PANIC(("cannot restore hardware state")); + SIM->get_param_bool(BXPN_RESTORE_FLAG)->set(0); + } + } + + bx_gui->init_signal_handlers(); + bx_pc_system.start_timers(); + + BX_DEBUG(("bx_init_hardware is setting signal handlers")); +// if not using debugger, then we can take control of SIGINT. +#if !BX_DEBUGGER + signal(SIGINT, bx_signal_handler); +#endif + +#if BX_SHOW_IPS +#if !defined(WIN32) + signal(SIGALRM, bx_signal_handler); + alarm(1); +#endif +#endif +} + +void bx_init_bx_dbg(void) +{ +#if BX_DEBUGGER + bx_dbg_init_infile(); +#endif + memset(&bx_dbg, 0, sizeof(bx_debug_t)); +} + +int bx_atexit(void) +{ + if (!SIM->get_init_done()) return 1; // protect from reentry + + // in case we ended up in simulation mode, change back to config mode + // so that the user can see any messages left behind on the console. + SIM->set_display_mode(DISP_MODE_CONFIG); + +#if BX_DEBUGGER == 0 + if (SIM && SIM->get_init_done()) { + for (int cpu=0; cpuatexit(); + } +#endif + + BX_MEM(0)->cleanup_memory(); + + bx_pc_system.exit(); + + // restore signal handling to defaults +#if BX_DEBUGGER == 0 + BX_INFO(("restoring default signal behavior")); + signal(SIGINT, SIG_DFL); +#endif + +#if BX_SHOW_IPS +#if !defined(__MINGW32__) && !defined(_MSC_VER) + signal(SIGALRM, SIG_DFL); +#endif +#endif + + SIM->set_init_done(0); + + return 0; +} + +void CDECL bx_signal_handler(int signum) +{ + // in a multithreaded environment, a signal such as SIGINT can be sent to all + // threads. This function is only intended to handle signals in the + // simulator thread. It will simply return if called from any other thread. + // Otherwise the BX_PANIC() below can be called in multiple threads at + // once, leading to multiple threads trying to display a dialog box, + // leading to GUI deadlock. + if (!SIM->is_sim_thread()) { + BX_INFO (("bx_signal_handler: ignored sig %d because it wasn't called from the simulator thread", signum)); + return; + } +#if BX_GUI_SIGHANDLER + if (bx_gui_sighandler) { + // GUI signal handler gets first priority, if the mask says it's wanted + if ((1<get_sighandler_mask()) { + bx_gui->sighandler(signum); + return; + } + } +#endif + +#if BX_SHOW_IPS + static Bit64u ticks_count = 0; + static Bit64u counts = 0; + + if (signum == SIGALRM) + { + // amount of system ticks passed from last time the handler was called + Bit64u ips_count = bx_pc_system.time_ticks() - ticks_count; + if (ips_count) { + bx_gui->show_ips((Bit32u) ips_count); + ticks_count = bx_pc_system.time_ticks(); + counts++; + if (bx_dbg.print_timestamps) { + printf("IPS: %u\taverage = %u\t\t(%us)\n", + (unsigned) ips_count, (unsigned) (ticks_count/counts), (unsigned) counts); + } + } +#if !defined(WIN32) + signal(SIGALRM, bx_signal_handler); + alarm(1); +#endif + return; + } +#endif + +#if BX_GUI_SIGHANDLER + if (bx_gui_sighandler) { + if ((1<get_sighandler_mask ()) { + bx_gui->sighandler(signum); + return; + } + } +#endif + + BX_PANIC(("SIGNAL %u caught", signum)); +} diff --git a/bochs/make-ag++.sh b/bochs/make-ag++.sh new file mode 100755 index 00000000..2ba871a1 --- /dev/null +++ b/bochs/make-ag++.sh @@ -0,0 +1,4 @@ +#!/bin/bash +cd $(dirname $0) +exec make CXX="ag++ -p $(pwd)/.. -I$(pwd)/../core/ -I$(pwd)/../build/core --real-instances --Xcompiler" LIBTOOL="/bin/sh ./libtool --tag=CXX" "$@" +#exec make CXX="ag++ -p $(pwd)/.. --real-instances --Xcompiler" LIBTOOL="/bin/sh ./libtool --tag=CXX" "$@" diff --git a/bochs/memory/Makefile.in b/bochs/memory/Makefile.in new file mode 100644 index 00000000..7231f3df --- /dev/null +++ b/bochs/memory/Makefile.in @@ -0,0 +1,87 @@ +# Copyright (C) 2001 The Bochs Project +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +@SUFFIX_LINE@ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_builddir = .. +top_srcdir = @top_srcdir@ + +SHELL = /bin/sh + +@SET_MAKE@ + +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ @GUI_CXXFLAGS@ + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +RANLIB = @RANLIB@ + + +BX_INCDIRS = -I.. -I$(srcdir)/.. -I../@INSTRUMENT_DIR@ -I$(srcdir)/../@INSTRUMENT_DIR@ + +BX_OBJS = \ + memory.o misc_mem.o + +BX_INCLUDES = ../bochs.h ../config.h + +all: libmemory.a + +.@CPP_SUFFIX@.o: + $(CXX) @DASH@c $(BX_INCDIRS) $(CXXFLAGS) @CXXFP@$< @OFP@$@ + + +libmemory.a: $(BX_OBJS) + @RMCOMMAND@ libmemory.a + @MAKELIB@ $(BX_OBJS) + $(RANLIB) libmemory.a + +$(BX_OBJS): $(BX_INCLUDES) + +clean: + @RMCOMMAND@ *.o + @RMCOMMAND@ *.a + +dist-clean: clean + @RMCOMMAND@ Makefile + +########################################### +# dependencies generated by +# gcc -MM -I.. -I../instrument/stubs *.cc | sed 's/\.cc/.@CPP_SUFFIX@/g' +########################################### +memory.o: memory.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../gui/paramtree.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../instrument/stubs/instrument.h \ + ../cpu/cpu.h ../cpu/model_specific.h ../cpu/crregs.h \ + ../cpu/descriptor.h ../cpu/instr.h ../cpu/ia_opcodes.h \ + ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \ + ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \ + ../cpu/xmm.h ../iodev/iodev.h ../param_names.h +misc_mem.o: misc_mem.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../gui/paramtree.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../ltdl.h ../gui/gui.h \ + ../instrument/stubs/instrument.h ../param_names.h ../cpu/cpu.h \ + ../cpu/model_specific.h ../cpu/crregs.h ../cpu/descriptor.h \ + ../cpu/instr.h ../cpu/ia_opcodes.h ../cpu/lazy_flags.h ../cpu/icache.h \ + ../cpu/apic.h ../cpu/i387.h ../fpu/softfloat.h ../fpu/tag_w.h \ + ../fpu/status_w.h ../fpu/control_w.h ../cpu/xmm.h ../iodev/iodev.h diff --git a/bochs/memory/memory.cc b/bochs/memory/memory.cc new file mode 100644 index 00000000..5cc8377e --- /dev/null +++ b/bochs/memory/memory.cc @@ -0,0 +1,367 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#include "bochs.h" +#include "cpu/cpu.h" +#include "iodev/iodev.h" +#define LOG_THIS BX_MEM_THIS + +// +// Memory map inside the 1st megabyte: +// +// 0x00000 - 0x7ffff DOS area (512K) +// 0x80000 - 0x9ffff Optional fixed memory hole (128K) +// 0xa0000 - 0xbffff Standard PCI/ISA Video Mem / SMMRAM (128K) +// 0xc0000 - 0xdffff Expansion Card BIOS and Buffer Area (128K) +// 0xe0000 - 0xeffff Lower BIOS Area (64K) +// 0xf0000 - 0xfffff Upper BIOS Area (64K) +// + +void BX_MEM_C::writePhysicalPage(BX_CPU_C *cpu, bx_phy_address addr, unsigned len, void *data) +{ + Bit8u *data_ptr; + bx_phy_address a20addr = A20ADDR(addr); + struct memory_handler_struct *memory_handler = NULL; + + // Note: accesses should always be contained within a single page now + if ((addr>>12) != ((addr+len-1)>>12)) { + BX_PANIC(("writePhysicalPage: cross page access at address 0x" FMT_PHY_ADDRX ", len=%d", addr, len)); + } + +#if BX_SUPPORT_MONITOR_MWAIT + BX_MEM_THIS check_monitor(a20addr, len); +#endif + + bx_bool is_bios = (a20addr >= (bx_phy_address)~BIOS_MASK); +#if BX_PHY_ADDRESS_LONG + if (a20addr > BX_CONST64(0xffffffff)) is_bios = 0; +#endif + + if (cpu != NULL) { +#if BX_SUPPORT_IODEBUG + bx_devices.pluginIODebug->mem_write(cpu, a20addr, len, data); +#endif + + BX_INSTR_PHY_WRITE(cpu->which_cpu(), a20addr, len); + + if ((a20addr >= 0x000a0000 && a20addr < 0x000c0000) && BX_MEM_THIS smram_available) + { + // SMRAM memory space + if (BX_MEM_THIS smram_enable || (cpu->smm_mode() && !BX_MEM_THIS smram_restricted)) + goto mem_write; + } + } + + memory_handler = BX_MEM_THIS memory_handlers[a20addr >> 20]; + while (memory_handler) { + if (memory_handler->begin <= a20addr && + memory_handler->end >= a20addr && + memory_handler->write_handler(a20addr, len, data, memory_handler->param)) + { + return; + } + memory_handler = memory_handler->next; + } + +mem_write: + + // all memory access fits in single 4K page + if (a20addr < BX_MEM_THIS len && ! is_bios) { + // all of data is within limits of physical memory + if (a20addr < 0x000a0000 || a20addr >= 0x00100000) + { + if (len == 8) { + pageWriteStampTable.decWriteStamp(a20addr, 8); + WriteHostQWordToLittleEndian(BX_MEM_THIS get_vector(a20addr), *(Bit64u*)data); + return; + } + if (len == 4) { + pageWriteStampTable.decWriteStamp(a20addr, 4); + WriteHostDWordToLittleEndian(BX_MEM_THIS get_vector(a20addr), *(Bit32u*)data); + return; + } + if (len == 2) { + pageWriteStampTable.decWriteStamp(a20addr, 2); + WriteHostWordToLittleEndian(BX_MEM_THIS get_vector(a20addr), *(Bit16u*)data); + return; + } + if (len == 1) { + pageWriteStampTable.decWriteStamp(a20addr, 1); + * (BX_MEM_THIS get_vector(a20addr)) = * (Bit8u *) data; + return; + } + // len == other, just fall thru to special cases handling + } + + pageWriteStampTable.decWriteStamp(a20addr); + +#ifdef BX_LITTLE_ENDIAN + data_ptr = (Bit8u *) data; +#else // BX_BIG_ENDIAN + data_ptr = (Bit8u *) data + (len - 1); +#endif + + if (a20addr < 0x000a0000 || a20addr >= 0x00100000) + { + // addr *not* in range 000A0000 .. 000FFFFF + while(1) { + *(BX_MEM_THIS get_vector(a20addr)) = *data_ptr; + if (len == 1) return; + len--; + a20addr++; +#ifdef BX_LITTLE_ENDIAN + data_ptr++; +#else // BX_BIG_ENDIAN + data_ptr--; +#endif + } + } + + // addr must be in range 000A0000 .. 000FFFFF + + for(unsigned i=0; i>12) != ((addr+len-1)>>12)) { + BX_PANIC(("readPhysicalPage: cross page access at address 0x" FMT_PHY_ADDRX ", len=%d", addr, len)); + } + + bx_bool is_bios = (a20addr >= (bx_phy_address)~BIOS_MASK); +#if BX_PHY_ADDRESS_LONG + if (a20addr > BX_CONST64(0xffffffff)) is_bios = 0; +#endif + + if (cpu != NULL) { +#if BX_SUPPORT_IODEBUG + bx_devices.pluginIODebug->mem_read(cpu, a20addr, len, data); +#endif + + BX_INSTR_PHY_READ(cpu->which_cpu(), a20addr, len); + + if ((a20addr >= 0x000a0000 && a20addr < 0x000c0000) && BX_MEM_THIS smram_available) + { + // SMRAM memory space + if (BX_MEM_THIS smram_enable || (cpu->smm_mode() && !BX_MEM_THIS smram_restricted)) + goto mem_read; + } + } + + memory_handler = BX_MEM_THIS memory_handlers[a20addr >> 20]; + while (memory_handler) { + if (memory_handler->begin <= a20addr && + memory_handler->end >= a20addr && + memory_handler->read_handler(a20addr, len, data, memory_handler->param)) + { + return; + } + memory_handler = memory_handler->next; + } + +mem_read: + + if (a20addr < BX_MEM_THIS len && ! is_bios) { + // all of data is within limits of physical memory + if (a20addr < 0x000a0000 || a20addr >= 0x00100000) + { + if (len == 8) { + ReadHostQWordFromLittleEndian(BX_MEM_THIS get_vector(a20addr), * (Bit64u*) data); + return; + } + if (len == 4) { + ReadHostDWordFromLittleEndian(BX_MEM_THIS get_vector(a20addr), * (Bit32u*) data); + return; + } + if (len == 2) { + ReadHostWordFromLittleEndian(BX_MEM_THIS get_vector(a20addr), * (Bit16u*) data); + return; + } + if (len == 1) { + * (Bit8u *) data = * (BX_MEM_THIS get_vector(a20addr)); + return; + } + // len == other case can just fall thru to special cases handling + } + +#ifdef BX_LITTLE_ENDIAN + data_ptr = (Bit8u *) data; +#else // BX_BIG_ENDIAN + data_ptr = (Bit8u *) data + (len - 1); +#endif + + if (a20addr < 0x000a0000 || a20addr >= 0x00100000) + { + // addr *not* in range 000A0000 .. 000FFFFF + while(1) { + *data_ptr = *(BX_MEM_THIS get_vector(a20addr)); + if (len == 1) return; + len--; + a20addr++; +#ifdef BX_LITTLE_ENDIAN + data_ptr++; +#else // BX_BIG_ENDIAN + data_ptr--; +#endif + } + } + + // addr must be in range 000A0000 .. 000FFFFF + + for (unsigned i=0; i BX_CONST64(0xffffffff)) { + memset(data, 0xFF, len); + return; + } +#endif + +#ifdef BX_LITTLE_ENDIAN + data_ptr = (Bit8u *) data; +#else // BX_BIG_ENDIAN + data_ptr = (Bit8u *) data + (len - 1); +#endif + + if (a20addr >= (bx_phy_address)~BIOS_MASK) { + for (unsigned i = 0; i < len; i++) { + *data_ptr = BX_MEM_THIS rom[a20addr & BIOS_MASK]; + a20addr++; +#ifdef BX_LITTLE_ENDIAN + data_ptr++; +#else // BX_BIG_ENDIAN + data_ptr--; +#endif + } + } + else { + memset(data, 0xFF, len); + } + } +} diff --git a/bochs/memory/memory.h b/bochs/memory/memory.h new file mode 100644 index 00000000..493a569b --- /dev/null +++ b/bochs/memory/memory.h @@ -0,0 +1,150 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// I/O memory handlers API Copyright (C) 2003 by Frank Cornelis +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#ifndef BX_MEM_H +# define BX_MEM_H 1 + +#if BX_USE_MEM_SMF +// if static member functions on, then there is only one memory +# define BX_MEM_SMF static +# define BX_MEM_THIS BX_MEM(0)-> +#else +# define BX_MEM_SMF +# define BX_MEM_THIS this-> +#endif + +class BX_CPU_C; + + // 512K BIOS ROM @0xfff80000 +#define BIOSROMSZ ((Bit32u)(1 << 21)) // 2M BIOS ROM @0xffe00000, must be a power of 2 +#define EXROMSIZE (0x20000) // ROMs 0xc0000-0xdffff (area 0xe0000-0xfffff=bios mapped) +#define BIOS_MASK (BIOSROMSZ-1) +#define EXROM_MASK (EXROMSIZE-1) + +#define BIOS_MAP_LAST128K(addr) (((addr) | 0xfff00000) & BIOS_MASK) + +typedef bx_bool (*memory_handler_t)(bx_phy_address addr, unsigned len, void *data, void *param); + +struct memory_handler_struct { + struct memory_handler_struct *next; + void *param; + bx_phy_address begin; + bx_phy_address end; + memory_handler_t read_handler; + memory_handler_t write_handler; +}; + +#define SMRAM_CODE 1 +#define SMRAM_DATA 2 + +class BOCHSAPI BX_MEM_C : public logfunctions { +private: + struct memory_handler_struct **memory_handlers; + bx_bool pci_enabled; + bx_bool smram_available; + bx_bool smram_enable; + bx_bool smram_restricted; + + Bit64u len, allocated; // could be > 4G + Bit8u *actual_vector; + Bit8u *vector; // aligned correctly + Bit8u **blocks; + Bit8u *rom; // 512k BIOS rom space + 128k expansion rom space + Bit8u *bogus; // 4k for unexisting memory + unsigned used_blocks; + bx_bool rom_present[65]; + +public: + BX_MEM_C(); + ~BX_MEM_C(); + + //DanceOS Richard Hellwig +#ifdef DANCEOS_RESTORE + BX_MEM_SMF void new_init(void); +#endif + + BX_MEM_SMF Bit8u* get_vector(bx_phy_address addr); + BX_MEM_SMF void init_memory(Bit64u guest, Bit64u host); + BX_MEM_SMF void cleanup_memory(void); + BX_MEM_SMF void enable_smram(bx_bool enable, bx_bool restricted); + BX_MEM_SMF void disable_smram(void); + BX_MEM_SMF bx_bool is_smram_accessible(void); + BX_MEM_SMF void readPhysicalPage(BX_CPU_C *cpu, bx_phy_address addr, + unsigned len, void *data); + BX_MEM_SMF void writePhysicalPage(BX_CPU_C *cpu, bx_phy_address addr, + unsigned len, void *data); + BX_MEM_SMF void load_ROM(const char *path, bx_phy_address romaddress, Bit8u type); + BX_MEM_SMF void load_RAM(const char *path, bx_phy_address romaddress, Bit8u type); +#if (BX_DEBUGGER || BX_DISASM || BX_GDBSTUB) + BX_MEM_SMF bx_bool dbg_fetch_mem(BX_CPU_C *cpu, bx_phy_address addr, unsigned len, Bit8u *buf); +#endif +#if (BX_DEBUGGER || BX_GDBSTUB) + BX_MEM_SMF bx_bool dbg_set_mem(bx_phy_address addr, unsigned len, Bit8u *buf); + BX_MEM_SMF bx_bool dbg_crc32(bx_phy_address addr1, bx_phy_address addr2, Bit32u *crc); +#endif + BX_MEM_SMF Bit8u* getHostMemAddr(BX_CPU_C *cpu, bx_phy_address addr, unsigned rw); + BX_MEM_SMF bx_bool registerMemoryHandlers(void *param, memory_handler_t read_handler, + memory_handler_t write_handler, bx_phy_address begin_addr, bx_phy_address end_addr); + BX_MEM_SMF bx_bool unregisterMemoryHandlers(memory_handler_t read_handler, memory_handler_t write_handler, + bx_phy_address begin_addr, bx_phy_address end_addr); + BX_MEM_SMF Bit64u get_memory_len(void); + BX_MEM_SMF void allocate_block(Bit32u index); + BX_MEM_SMF Bit8u* alloc_vector_aligned(Bit32u bytes, Bit32u alignment); + +#if BX_SUPPORT_MONITOR_MWAIT + BX_MEM_SMF bx_bool is_monitor(bx_phy_address begin_addr, unsigned len); + BX_MEM_SMF void check_monitor(bx_phy_address addr, unsigned len); +#endif + + void register_state(void); + + friend Bit64s memory_param_save_handler(void *devptr, bx_param_c *param); + friend void memory_param_restore_handler(void *devptr, bx_param_c *param, Bit64s val); +}; + +BOCHSAPI extern BX_MEM_C bx_mem; + +// must be power of two +#define BX_MEM_BLOCK_LEN (1024*1024) /* 1M blocks */ + +/* +BX_CPP_INLINE Bit8u* BX_MEM_C::get_vector(bx_phy_address addr) +{ + return (BX_MEM_THIS vector + addr); +} +*/ + +BX_CPP_INLINE Bit8u* BX_MEM_C::get_vector(bx_phy_address addr) +{ + Bit32u block = (Bit32u)(addr / BX_MEM_BLOCK_LEN); + if (! BX_MEM_THIS blocks[block]) allocate_block(block); + return BX_MEM_THIS blocks[block] + (Bit32u)(addr & (BX_MEM_BLOCK_LEN-1)); +} + +BX_CPP_INLINE Bit64u BX_MEM_C::get_memory_len(void) +{ + return (BX_MEM_THIS len); +} + +#endif diff --git a/bochs/memory/misc_mem.cc b/bochs/memory/misc_mem.cc new file mode 100644 index 00000000..90015f96 --- /dev/null +++ b/bochs/memory/misc_mem.cc @@ -0,0 +1,802 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// I/O memory handlers API Copyright (C) 2003 by Frank Cornelis +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#include "bochs.h" +#include "param_names.h" +#include "cpu/cpu.h" +#include "iodev/iodev.h" +#define LOG_THIS BX_MEM(0)-> + +// alignment of memory vector, must be a power of 2 +#define BX_MEM_VECTOR_ALIGN 4096 +#define BX_MEM_HANDLERS ((BX_CONST64(1) << BX_PHY_ADDRESS_WIDTH) >> 20) /* one per megabyte */ + +BX_MEM_C::BX_MEM_C() +{ + put("MEM0"); + + vector = NULL; + actual_vector = NULL; + blocks = NULL; + len = 0; + used_blocks = 0; + for (int i = 0; i < 65; i++) + rom_present[i] = 0; + + memory_handlers = NULL; +} + +//DanceOS Richard Hellwig +#ifdef DANCEOS_RESTORE +void BX_MEM_C::new_init(){ + + + BX_MEM_THIS vector = NULL; + BX_MEM_THIS blocks = NULL; + BX_MEM_THIS len = 0; + BX_MEM_THIS used_blocks = 0; + for (int i = 0; i < 65; i++) + BX_MEM_THIS rom_present[i] = 0; + +} +#endif + +Bit8u* BX_MEM_C::alloc_vector_aligned(Bit32u bytes, Bit32u alignment) +{ + Bit64u test_mask = alignment - 1; + BX_MEM_THIS actual_vector = new Bit8u [(Bit32u)(bytes + test_mask)]; + if (BX_MEM_THIS actual_vector == 0) { + BX_PANIC(("alloc_vector_aligned: unable to allocate host RAM !")); + return 0; + } + // round address forward to nearest multiple of alignment. Alignment + // MUST BE a power of two for this to work. + Bit64u masked = ((Bit64u)(BX_MEM_THIS actual_vector + test_mask)) & ~test_mask; + Bit8u *vector = (Bit8u *) masked; + // sanity check: no lost bits during pointer conversion + assert(sizeof(masked) >= sizeof(vector)); + // sanity check: after realignment, everything fits in allocated space + assert(vector+bytes <= BX_MEM_THIS actual_vector+bytes+test_mask); + return vector; +} + +BX_MEM_C::~BX_MEM_C() +{ + cleanup_memory(); +} + +void BX_MEM_C::init_memory(Bit64u guest, Bit64u host) +{ + unsigned idx; + + BX_DEBUG(("Init $Id$")); + + // accept only memory size which is multiply of 1M + BX_ASSERT((host & 0xfffff) == 0); + BX_ASSERT((guest & 0xfffff) == 0); + + if (BX_MEM_THIS actual_vector != NULL) { + BX_INFO(("freeing existing memory vector")); + delete [] BX_MEM_THIS actual_vector; + BX_MEM_THIS actual_vector = NULL; + BX_MEM_THIS vector = NULL; + BX_MEM_THIS blocks = NULL; + } + BX_MEM_THIS vector = alloc_vector_aligned(host + BIOSROMSZ + EXROMSIZE + 4096, BX_MEM_VECTOR_ALIGN); + BX_INFO(("allocated memory at %p. after alignment, vector=%p", + BX_MEM_THIS actual_vector, BX_MEM_THIS vector)); + + BX_MEM_THIS len = guest; + BX_MEM_THIS allocated = host; + BX_MEM_THIS rom = &BX_MEM_THIS vector[host]; + BX_MEM_THIS bogus = &BX_MEM_THIS vector[host + BIOSROMSZ + EXROMSIZE]; + memset(BX_MEM_THIS rom, 0xff, BIOSROMSZ + EXROMSIZE + 4096); + + // block must be large enough to fit num_blocks in 32-bit + BX_ASSERT((BX_MEM_THIS len / BX_MEM_BLOCK_LEN) <= 0xffffffff); + + Bit32u num_blocks = (Bit32u)(BX_MEM_THIS len / BX_MEM_BLOCK_LEN); + BX_INFO(("%.2fMB", (float)(BX_MEM_THIS len / (1024.0*1024.0)))); + BX_INFO(("mem block size = 0x%08x, blocks=%u", BX_MEM_BLOCK_LEN, num_blocks)); + BX_MEM_THIS blocks = new Bit8u* [num_blocks]; + if (0) { + // all guest memory is allocated, just map it + for (idx = 0; idx < num_blocks; idx++) { + BX_MEM_THIS blocks[idx] = BX_MEM_THIS vector + (idx * BX_MEM_BLOCK_LEN); + } + BX_MEM_THIS used_blocks = num_blocks; + } + else { + // host cannot allocate all requested guest memory + for (idx = 0; idx < num_blocks; idx++) { + BX_MEM_THIS blocks[idx] = NULL; + } + BX_MEM_THIS used_blocks = 0; + } + + BX_MEM_THIS memory_handlers = new struct memory_handler_struct *[BX_MEM_HANDLERS]; + for (idx = 0; idx < BX_MEM_HANDLERS; idx++) + BX_MEM_THIS memory_handlers[idx] = NULL; + + BX_MEM_THIS pci_enabled = SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get(); + BX_MEM_THIS smram_available = 0; + BX_MEM_THIS smram_enable = 0; + BX_MEM_THIS smram_restricted = 0; + + BX_MEM_THIS register_state(); +} + +void BX_MEM_C::allocate_block(Bit32u block) +{ + Bit32u max_blocks = BX_MEM_THIS allocated / BX_MEM_BLOCK_LEN; + if (BX_MEM_THIS used_blocks >= max_blocks) { + BX_PANIC(("FATAL ERROR: all available memory is already allocated !")); + } + else { + BX_MEM_THIS blocks[block] = BX_MEM_THIS vector + (BX_MEM_THIS used_blocks * BX_MEM_BLOCK_LEN); + BX_MEM_THIS used_blocks++; + } + BX_DEBUG(("allocate_block: used_blocks=%d of %d", BX_MEM_THIS used_blocks, max_blocks)); +} + +Bit64s memory_param_save_handler(void *devptr, bx_param_c *param) +{ + const char *pname = param->get_name(); + if (! strncmp(pname, "blk", 3)) { + Bit32u blk_index = atoi(pname + 3); + if (! BX_MEM(0)->blocks[blk_index]) { + return -1; + } + else { + Bit32u val = (Bit32u) (BX_MEM(0)->blocks[blk_index] - BX_MEM(0)->vector); + if ((val & (BX_MEM_BLOCK_LEN-1)) == 0) + return val / BX_MEM_BLOCK_LEN; + } + } + + return -1; +} + +void memory_param_restore_handler(void *devptr, bx_param_c *param, Bit64s val) +{ + const char *pname = param->get_name(); + if (! strncmp(pname, "blk", 3)) { + Bit32u blk_index = atoi(pname + 3); + if((Bit32s) val < 0) + BX_MEM(0)->blocks[blk_index] = NULL; + else + BX_MEM(0)->blocks[blk_index] = BX_MEM(0)->vector + val * BX_MEM_BLOCK_LEN; + } +} + +void BX_MEM_C::register_state() +{ + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "memory", "Memory State", 6); + new bx_shadow_data_c(list, "ram", BX_MEM_THIS vector, BX_MEM_THIS allocated); + BXRS_DEC_PARAM_FIELD(list, len, BX_MEM_THIS len); + BXRS_DEC_PARAM_FIELD(list, allocated, BX_MEM_THIS allocated); + BXRS_DEC_PARAM_FIELD(list, used_blocks, BX_MEM_THIS used_blocks); + + Bit32u num_blocks = BX_MEM_THIS len / BX_MEM_BLOCK_LEN; + bx_list_c *mapping = new bx_list_c(list, "mapping", num_blocks); + for (Bit32u blk=0; blk < num_blocks; blk++) { + char param_name[15]; + sprintf(param_name, "blk%d", blk); + bx_param_num_c *param = new bx_param_num_c(mapping, param_name, "", "", 0, BX_MAX_BIT32U, 0); + param->set_base(BASE_DEC); + param->set_sr_handlers(this, memory_param_save_handler, memory_param_restore_handler); + } +} + +void BX_MEM_C::cleanup_memory() +{ + unsigned idx; + + if (BX_MEM_THIS vector != NULL || sal::restore_bochs_request) { + delete [] BX_MEM_THIS actual_vector; + BX_MEM_THIS actual_vector = NULL; + BX_MEM_THIS vector = NULL; + BX_MEM_THIS rom = NULL; + BX_MEM_THIS bogus = NULL; + delete [] BX_MEM_THIS blocks; + BX_MEM_THIS blocks = 0; + BX_MEM_THIS used_blocks = 0; + if (BX_MEM_THIS memory_handlers != NULL) { + for (idx = 0; idx < BX_MEM_HANDLERS; idx++) { + struct memory_handler_struct *memory_handler = BX_MEM_THIS memory_handlers[idx]; + struct memory_handler_struct *prev = NULL; + while (memory_handler) { + prev = memory_handler; + memory_handler = memory_handler->next; + delete prev; + } + } + delete [] BX_MEM_THIS memory_handlers; + BX_MEM_THIS memory_handlers = NULL; + } + } +} + +// +// Values for type: +// 0 : System Bios +// 1 : VGA Bios +// 2 : Optional ROM Bios +// +void BX_MEM_C::load_ROM(const char *path, bx_phy_address romaddress, Bit8u type) +{ + struct stat stat_buf; + int fd, ret, i, start_idx, end_idx; + unsigned long size, max_size, offset; + bx_bool is_bochs_bios = 0; + + if (*path == '\0') { + if (type == 2) { + BX_PANIC(("ROM: Optional ROM image undefined")); + } + else if (type == 1) { + BX_PANIC(("ROM: VGA BIOS image undefined")); + } + else { + BX_PANIC(("ROM: System BIOS image undefined")); + } + return; + } + // read in ROM BIOS image file + fd = open(path, O_RDONLY +#ifdef O_BINARY + | O_BINARY +#endif + ); + if (fd < 0) { + if (type < 2) { + BX_PANIC(("ROM: couldn't open ROM image file '%s'.", path)); + } + else { + BX_ERROR(("ROM: couldn't open ROM image file '%s'.", path)); + } + return; + } + ret = fstat(fd, &stat_buf); + if (ret) { + if (type < 2) { + BX_PANIC(("ROM: couldn't stat ROM image file '%s'.", path)); + } + else { + BX_ERROR(("ROM: couldn't stat ROM image file '%s'.", path)); + } + return; + } + + size = (unsigned long)stat_buf.st_size; + + if (type > 0) { + max_size = 0x20000; + } else { + max_size = BIOSROMSZ; + } + if (size > max_size) { + close(fd); + BX_PANIC(("ROM: ROM image too large")); + return; + } + if (type == 0) { + if (romaddress > 0) { + if ((romaddress + size) != 0x100000 && (romaddress + size)) { + close(fd); + BX_PANIC(("ROM: System BIOS must end at 0xfffff")); + return; + } + } else { + romaddress = -size; + } + offset = romaddress & BIOS_MASK; + if ((romaddress & 0xf0000) < 0xf0000) { + BX_MEM_THIS rom_present[64] = 1; + } + is_bochs_bios = (strstr(path, "BIOS-bochs-latest") != NULL); + } else { + if ((size % 512) != 0) { + close(fd); + BX_PANIC(("ROM: ROM image size must be multiple of 512 (size = %ld)", size)); + return; + } + if ((romaddress % 2048) != 0) { + close(fd); + BX_PANIC(("ROM: ROM image must start at a 2k boundary")); + return; + } + if ((romaddress < 0xc0000) || + (((romaddress + size - 1) > 0xdffff) && (romaddress < 0xe0000))) { + close(fd); + BX_PANIC(("ROM: ROM address space out of range")); + return; + } + if (romaddress < 0xe0000) { + offset = (romaddress & EXROM_MASK) + BIOSROMSZ; + start_idx = (((Bit32u)romaddress - 0xc0000) >> 11); + end_idx = start_idx + (size >> 11) + (((size % 2048) > 0) ? 1 : 0); + } else { + offset = romaddress & BIOS_MASK; + start_idx = 64; + end_idx = 64; + } + for (i = start_idx; i < end_idx; i++) { + if (BX_MEM_THIS rom_present[i]) { + close(fd); + BX_PANIC(("ROM: address space 0x%x already in use", (i * 2048) + 0xc0000)); + return; + } else { + BX_MEM_THIS rom_present[i] = 1; + } + } + } + while (size > 0) { + ret = read(fd, (bx_ptr_t) &BX_MEM_THIS rom[offset], size); + if (ret <= 0) { + BX_PANIC(("ROM: read failed on BIOS image: '%s'",path)); + } + size -= ret; + offset += ret; + } + close(fd); + offset -= (unsigned long)stat_buf.st_size; + if (((romaddress & 0xfffff) != 0xe0000) || + ((BX_MEM_THIS rom[offset] == 0x55) && (BX_MEM_THIS rom[offset+1] == 0xaa))) { + Bit8u checksum = 0; + for (i = 0; i < stat_buf.st_size; i++) { + checksum += BX_MEM_THIS rom[offset + i]; + } + if (checksum != 0) { + if (type == 1) { + BX_PANIC(("ROM: checksum error in VGABIOS image: '%s'", path)); + } else if (is_bochs_bios) { + BX_ERROR(("ROM: checksum error in BIOS image: '%s'", path)); + } + } + } + BX_INFO(("rom at 0x%05x/%u ('%s')", + (unsigned) romaddress, + (unsigned) stat_buf.st_size, + path)); +} + +void BX_MEM_C::load_RAM(const char *path, bx_phy_address ramaddress, Bit8u type) +{ + struct stat stat_buf; + int fd, ret; + Bit32u size, offset; + + if (*path == '\0') { + BX_PANIC(("RAM: Optional RAM image undefined")); + return; + } + // read in RAM BIOS image file + fd = open(path, O_RDONLY +#ifdef O_BINARY + | O_BINARY +#endif + ); + if (fd < 0) { + BX_PANIC(("RAM: couldn't open RAM image file '%s'.", path)); + return; + } + ret = fstat(fd, &stat_buf); + if (ret) { + BX_PANIC(("RAM: couldn't stat RAM image file '%s'.", path)); + return; + } + + size = (unsigned long)stat_buf.st_size; + + offset = ramaddress; + while (size > 0) { + ret = read(fd, (bx_ptr_t) BX_MEM_THIS get_vector(offset), size); + if (ret <= 0) { + BX_PANIC(("RAM: read failed on RAM image: '%s'",path)); + } + size -= ret; + offset += ret; + } + close(fd); + BX_INFO(("ram at 0x%05x/%u ('%s')", + (unsigned) ramaddress, + (unsigned) stat_buf.st_size, + path)); +} + +#if (BX_DEBUGGER || BX_DISASM || BX_GDBSTUB) +bx_bool BX_MEM_C::dbg_fetch_mem(BX_CPU_C *cpu, bx_phy_address addr, unsigned len, Bit8u *buf) +{ + bx_bool ret = 1; + + for (; len>0; len--) { + // Reading standard PCI/ISA Video Mem / SMMRAM + if (addr >= 0x000a0000 && addr < 0x000c0000) { + if (BX_MEM_THIS smram_enable || cpu->smm_mode()) + *buf = *(BX_MEM_THIS get_vector(addr)); + else + *buf = DEV_vga_mem_read(addr); + } +#if BX_SUPPORT_PCI + else if (BX_MEM_THIS pci_enabled && (addr >= 0x000c0000 && addr < 0x00100000)) + { + switch (DEV_pci_rd_memtype ((Bit32u) addr)) { + case 0x0: // Read from ROM + if ((addr & 0xfffe0000) == 0x000e0000) { + // last 128K of BIOS ROM mapped to 0xE0000-0xFFFFF + *buf = BX_MEM_THIS rom[BIOS_MAP_LAST128K(addr)]; + } + else { + *buf = BX_MEM_THIS rom[(addr & EXROM_MASK) + BIOSROMSZ]; + } + break; + case 0x1: // Read from ShadowRAM + *buf = *(BX_MEM_THIS get_vector(addr)); + break; + default: + BX_PANIC(("dbg_fetch_mem: default case")); + } + } +#endif // #if BX_SUPPORT_PCI + else if (addr < BX_MEM_THIS len) + { + if (addr < 0x000c0000 || addr >= 0x00100000) { + *buf = *(BX_MEM_THIS get_vector(addr)); + } + // must be in C0000 - FFFFF range + else if ((addr & 0xfffe0000) == 0x000e0000) { + // last 128K of BIOS ROM mapped to 0xE0000-0xFFFFF + *buf = BX_MEM_THIS rom[BIOS_MAP_LAST128K(addr)]; + } + else { + *buf = BX_MEM_THIS rom[(addr & EXROM_MASK) + BIOSROMSZ]; + } + } +#if BX_PHY_ADDRESS_LONG + else if (addr > BX_CONST64(0xffffffff)) { + *buf = 0xff; + ret = 0; // error, beyond limits of memory + } +#endif + else if (addr >= (bx_phy_address)~BIOS_MASK) + { + *buf = BX_MEM_THIS rom[addr & BIOS_MASK]; + } + else + { + *buf = 0xff; + ret = 0; // error, beyond limits of memory + } + buf++; + addr++; + } + return ret; +} +#endif + +#if BX_DEBUGGER || BX_GDBSTUB +bx_bool BX_MEM_C::dbg_set_mem(bx_phy_address addr, unsigned len, Bit8u *buf) +{ + if ((addr + len - 1) > BX_MEM_THIS len) { + return(0); // error, beyond limits of memory + } + for (; len>0; len--) { + // Write to standard PCI/ISA Video Mem / SMMRAM + if (addr >= 0x000a0000 && addr < 0x000c0000) { + if (BX_MEM_THIS smram_enable) + *(BX_MEM_THIS get_vector(addr)) = *buf; + else + DEV_vga_mem_write(addr, *buf); + } +#if BX_SUPPORT_PCI + else if (BX_MEM_THIS pci_enabled && (addr >= 0x000c0000 && addr < 0x00100000)) + { + switch (DEV_pci_wr_memtype (addr)) { + case 0x0: // Ignore write to ROM + break; + case 0x1: // Write to ShadowRAM + *(BX_MEM_THIS get_vector(addr)) = *buf; + break; + default: + BX_PANIC(("dbg_fetch_mem: default case")); + } + } +#endif // #if BX_SUPPORT_PCI + else if ((addr < 0x000c0000 || addr >= 0x00100000) && (addr < (bx_phy_address)(~BIOS_MASK))) + { + *(BX_MEM_THIS get_vector(addr)) = *buf; + } + buf++; + addr++; + } + return(1); +} + +bx_bool BX_MEM_C::dbg_crc32(bx_phy_address addr1, bx_phy_address addr2, Bit32u *crc) +{ + *crc = 0; + if (addr1 > addr2) + return(0); + + if (addr2 >= BX_MEM_THIS len) + return(0); // error, specified address past last phy mem addr + + unsigned len = 1 + addr2 - addr1; + + // do not cross 4K boundary + while(1) { + unsigned remainsInPage = 0x1000 - (addr1 & 0xfff); + unsigned access_length = (len < remainsInPage) ? len : remainsInPage; + *crc = crc32(BX_MEM_THIS get_vector(addr1), access_length); + addr1 += access_length; + len -= access_length; + } + + return(1); +} +#endif + +// +// Return a host address corresponding to the guest physical memory +// address (with A20 already applied), given that the calling +// code will perform an 'op' operation. This address will be +// used for direct access to guest memory. +// Values of 'op' are { BX_READ, BX_WRITE, BX_EXECUTE, BX_RW }. +// +// The other assumption is that the calling code _only_ accesses memory +// directly within the page that encompasses the address requested. +// + +// +// Memory map inside the 1st megabyte: +// +// 0x00000 - 0x7ffff DOS area (512K) +// 0x80000 - 0x9ffff Optional fixed memory hole (128K) +// 0xa0000 - 0xbffff Standard PCI/ISA Video Mem / SMMRAM (128K) +// 0xc0000 - 0xdffff Expansion Card BIOS and Buffer Area (128K) +// 0xe0000 - 0xeffff Lower BIOS Area (64K) +// 0xf0000 - 0xfffff Upper BIOS Area (64K) +// + +Bit8u *BX_MEM_C::getHostMemAddr(BX_CPU_C *cpu, bx_phy_address addr, unsigned rw) +{ + bx_phy_address a20addr = A20ADDR(addr); + + bx_bool is_bios = (a20addr >= (bx_phy_address)~BIOS_MASK); +#if BX_PHY_ADDRESS_LONG + if (a20addr > BX_CONST64(0xffffffff)) is_bios = 0; +#endif + + bx_bool write = rw & 1; + + // allow direct access to SMRAM memory space for code and veto data + if ((cpu != NULL) && (rw == BX_EXECUTE)) { + // reading from SMRAM memory space + if ((a20addr >= 0x000a0000 && a20addr < 0x000c0000) && (BX_MEM_THIS smram_available)) + { + if (BX_MEM_THIS smram_enable || cpu->smm_mode()) + return BX_MEM_THIS get_vector(a20addr); + } + } + +#if BX_SUPPORT_MONITOR_MWAIT + if (write && BX_MEM_THIS is_monitor(a20addr & ~((bx_phy_address)(0xfff)), 0xfff)) { + // Vetoed! Write monitored page ! + return(NULL); + } +#endif + + struct memory_handler_struct *memory_handler = BX_MEM_THIS memory_handlers[a20addr >> 20]; + while (memory_handler) { + if (memory_handler->begin <= a20addr && + memory_handler->end >= a20addr) { + return(NULL); // Vetoed! memory handler for i/o apic, vram, mmio and PCI PnP + } + memory_handler = memory_handler->next; + } + + if (! write) { + if ((a20addr >= 0x000a0000 && a20addr < 0x000c0000)) + return(NULL); // Vetoed! Mem mapped IO (VGA) +#if BX_SUPPORT_PCI + else if (BX_MEM_THIS pci_enabled && (a20addr >= 0x000c0000 && a20addr < 0x00100000)) + { + switch (DEV_pci_rd_memtype ((Bit32u) a20addr)) { + case 0x0: // Read from ROM + if ((a20addr & 0xfffe0000) == 0x000e0000) { + // last 128K of BIOS ROM mapped to 0xE0000-0xFFFFF + return (Bit8u *) &BX_MEM_THIS rom[BIOS_MAP_LAST128K(a20addr)]; + } + else { + return (Bit8u *) &BX_MEM_THIS rom[(a20addr & EXROM_MASK) + BIOSROMSZ]; + } + break; + case 0x1: // Read from ShadowRAM + return BX_MEM_THIS get_vector(a20addr); + default: + BX_PANIC(("getHostMemAddr(): default case")); + return(NULL); + } + } +#endif + else if(a20addr < BX_MEM_THIS len && ! is_bios) + { + if (a20addr < 0x000c0000 || a20addr >= 0x00100000) { + return BX_MEM_THIS get_vector(a20addr); + } + // must be in C0000 - FFFFF range + else if ((a20addr & 0xfffe0000) == 0x000e0000) { + // last 128K of BIOS ROM mapped to 0xE0000-0xFFFFF + return (Bit8u *) &BX_MEM_THIS rom[BIOS_MAP_LAST128K(a20addr)]; + } + else { + return((Bit8u *) &BX_MEM_THIS rom[(a20addr & EXROM_MASK) + BIOSROMSZ]); + } + } +#if BX_PHY_ADDRESS_LONG + else if (a20addr > BX_CONST64(0xffffffff)) { + // Error, requested addr is out of bounds. + return (Bit8u *) &BX_MEM_THIS bogus[a20addr & 0xfff]; + } +#endif + else if (a20addr >= (bx_phy_address)~BIOS_MASK) + { + return (Bit8u *) &BX_MEM_THIS rom[a20addr & BIOS_MASK]; + } + else + { + // Error, requested addr is out of bounds. + return (Bit8u *) &BX_MEM_THIS bogus[a20addr & 0xfff]; + } + } + else + { // op == {BX_WRITE, BX_RW} + if (a20addr >= BX_MEM_THIS len || is_bios) + return(NULL); // Error, requested addr is out of bounds. + else if (a20addr >= 0x000a0000 && a20addr < 0x000c0000) + return(NULL); // Vetoed! Mem mapped IO (VGA) +#if BX_SUPPORT_PCI + else if (BX_MEM_THIS pci_enabled && (a20addr >= 0x000c0000 && a20addr < 0x00100000)) + { + // Veto direct writes to this area. Otherwise, there is a chance + // for Guest2HostTLB and memory consistency problems, for example + // when some 16K block marked as write-only using PAM registers. + return(NULL); + } +#endif + else + { + if (a20addr < 0x000c0000 || a20addr >= 0x00100000) { + return BX_MEM_THIS get_vector(a20addr); + } + else { + return(NULL); // Vetoed! ROMs + } + } + } +} + +/* + * One needs to provide both a read_handler and a write_handler. + * XXX: maybe we should check for overlapping memory handlers + */ + bx_bool +BX_MEM_C::registerMemoryHandlers(void *param, memory_handler_t read_handler, + memory_handler_t write_handler, bx_phy_address begin_addr, bx_phy_address end_addr) +{ + if (end_addr < begin_addr) + return 0; + if (!read_handler || !write_handler) + return 0; + BX_INFO(("Register memory access handlers: 0x" FMT_PHY_ADDRX " - 0x" FMT_PHY_ADDRX, begin_addr, end_addr)); + for (unsigned page_idx = (Bit32u)(begin_addr >> 20); page_idx <= (Bit32u)(end_addr >> 20); page_idx++) { + struct memory_handler_struct *memory_handler = new struct memory_handler_struct; + memory_handler->next = BX_MEM_THIS memory_handlers[page_idx]; + BX_MEM_THIS memory_handlers[page_idx] = memory_handler; + memory_handler->read_handler = read_handler; + memory_handler->write_handler = write_handler; + memory_handler->param = param; + memory_handler->begin = begin_addr; + memory_handler->end = end_addr; + } + return 1; +} + + bx_bool +BX_MEM_C::unregisterMemoryHandlers(memory_handler_t read_handler, memory_handler_t write_handler, + bx_phy_address begin_addr, bx_phy_address end_addr) +{ + bx_bool ret = 1; + BX_INFO(("Memory access handlers unregistered: 0x" FMT_PHY_ADDRX " - 0x" FMT_PHY_ADDRX, begin_addr, end_addr)); + for (unsigned page_idx = (Bit32u)(begin_addr >> 20); page_idx <= (Bit32u)(end_addr >> 20); page_idx++) { + struct memory_handler_struct *memory_handler = BX_MEM_THIS memory_handlers[page_idx]; + struct memory_handler_struct *prev = NULL; + while (memory_handler && + memory_handler->read_handler != read_handler && + memory_handler->write_handler != write_handler && + memory_handler->begin != begin_addr && + memory_handler->end != end_addr) + { + prev = memory_handler; + memory_handler = memory_handler->next; + } + if (!memory_handler) { + ret = 0; // we should have found it + continue; // anyway, try the other pages + } + if (prev) + prev->next = memory_handler->next; + else + BX_MEM_THIS memory_handlers[page_idx] = memory_handler->next; + delete memory_handler; + } + return ret; +} + +void BX_MEM_C::enable_smram(bx_bool enable, bx_bool restricted) +{ + BX_MEM_THIS smram_available = 1; + BX_MEM_THIS smram_enable = (enable > 0); + BX_MEM_THIS smram_restricted = (restricted > 0); +} + +void BX_MEM_C::disable_smram(void) +{ + BX_MEM_THIS smram_available = 0; + BX_MEM_THIS smram_enable = 0; + BX_MEM_THIS smram_restricted = 0; +} + +// check if SMRAM is aavailable for CPU data accesses +bx_bool BX_MEM_C::is_smram_accessible(void) +{ + return(BX_MEM_THIS smram_available) && + (BX_MEM_THIS smram_enable || !BX_MEM_THIS smram_restricted); +} + +#if BX_SUPPORT_MONITOR_MWAIT + +// +// MONITOR/MWAIT - x86arch way to optimize idle loops in CPU +// + +bx_bool BX_MEM_C::is_monitor(bx_phy_address begin_addr, unsigned len) +{ + for (int i=0; iis_monitor(begin_addr, len)) + return 1; + } + + return 0; // // this is NOT monitored page +} + +void BX_MEM_C::check_monitor(bx_phy_address begin_addr, unsigned len) +{ + for (int i=0; icheck_monitor(begin_addr, len); + } +} + +#endif diff --git a/bochs/misc/Makefile.in b/bochs/misc/Makefile.in new file mode 100644 index 00000000..674a68c1 --- /dev/null +++ b/bochs/misc/Makefile.in @@ -0,0 +1,55 @@ +# Copyright (C) 2001 MandrakeSoft S.A. +# +# MandrakeSoft S.A. +# 43, rue d'Aboukir +# 75002 Paris - France +# http://www.linux-mandrake.com/ +# http://www.mandrakesoft.com/ +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +@SUFFIX_LINE@ + + +SHELL = /bin/sh + +@SET_MAKE@ + +CC = @CC@ +CXX = @CXX@ +CFLAGS = @CFLAGS@ @GUI_CFLAGS@ +CXXFLAGS = @CXXFLAGS@ @GUI_CXXFLAGS@ + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +RANLIB = @RANLIB@ + + +.@CPP_SUFFIX@.o: + $(CXX) @DASH@c $(CXXFLAGS) @CXXFP@$< @OFP@$@ + + +all: make_cmos_image + +make_cmos_image@EXE@: make_cmos_image.o + @LINK@ make_cmos_image.o + +clean: + @RMCOMMAND@ *.o + @RMCOMMAND@ make_cmos_image@EXE@ + +dist-clean: clean + @RMCOMMAND@ Makefile diff --git a/bochs/misc/bxcommit.c b/bochs/misc/bxcommit.c new file mode 100644 index 00000000..aa1386c7 --- /dev/null +++ b/bochs/misc/bxcommit.c @@ -0,0 +1,381 @@ +/* + * misc/bximage.c + * $Id$ + * + * Commits a redolog file in a flat file for bochs images. + * + */ + +#include +#include +#include +#ifndef _MSC_VER +#include +#else +#include +#endif +#include +#include +#include +#include +#include +#ifdef WIN32 +# include +#endif +#include "config.h" + +#include + +#if !BX_HAVE_SNPRINTF +#include +/* XXX use real snprintf */ +/* if they don't have snprintf, just use sprintf */ +int snprintf(char *s, size_t maxlen, const char *format, ...) +{ + va_list arg; + int done; + + va_start(arg, format); + done = vsprintf(s, format, arg); + va_end(arg); + + return done; +} +#endif /* !BX_HAVE_SNPRINTF */ + +#include "../osdep.h" + +#define HDIMAGE_HEADERS_ONLY 1 +#include "../iodev/hdimage.h" + +char *EOF_ERR = "ERROR: End of input"; +char *rcsid = "$Id$"; +char *divider = "========================================================================"; + +void myexit(int code) +{ +#ifdef WIN32 + printf("\nPress any key to continue\n"); + getch(); +#endif + exit(code); +} + +/* stolen from main.cc */ +void bx_center_print(FILE *file, char *line, int maxwidth) +{ + int imax; + int i; + imax = (maxwidth - strlen(line)) >> 1; + for (i=0; imax) { + printf ("Your choice (%s) was not an integer between %d and %d.\n\n", + clean, min, max); + } else { + // choice is okay + *out = n; + return 0; + } + } +} + +int ask_menu(const char *prompt, int n_choices, char *choice[], int the_default, int *out) +{ + char buffer[1024]; + char *clean; + int i; + *out = -1; + while (1) { + printf("%s", prompt); + printf("[%s] ", choice[the_default]); + if (!fgets(buffer, sizeof(buffer), stdin)) + return -1; + clean = clean_string(buffer); + if (strlen(clean) < 1) { + // empty line, use the default + *out = the_default; + return 0; + } + for (i=0; i0) printf(", "); + printf("%s", choice[i]); + } + printf("\n"); + } +} + +int ask_yn(const char *prompt, int the_default, int *out) +{ + char buffer[16]; + char *clean; + *out = -1; + while (1) { + printf("%s", prompt); + printf("[%s] ", the_default?"yes":"no"); + if (!fgets(buffer, sizeof(buffer), stdin)) + return -1; + clean = clean_string(buffer); + if (strlen(clean) < 1) { + // empty line, use the default + *out = the_default; + return 0; + } + switch (tolower(clean[0])) { + case 'y': *out=1; return 0; + case 'n': *out=0; return 0; + } + printf("Please type either yes or no.\n"); + } +} + +int ask_string(const char *prompt, char *the_default, char *out) +{ + char buffer[1024]; + char *clean; + out[0] = 0; + printf("%s", prompt); + printf("[%s] ", the_default); + if (!fgets(buffer, sizeof(buffer), stdin)) + return -1; + clean = clean_string(buffer); + if (strlen(clean) < 1) { + // empty line, use the default + strcpy(out, the_default); + return 0; + } + strcpy(out, clean); + return 0; +} + +/* produce the image file */ +int commit_redolog(const char *flatname, const char *redologname) +{ + int flatfd, redologfd; + redolog_header_t header; + Bit32u *catalog, catalog_size; + Bit8u *bitmap; + Bit32u i, bitmap_blocs, extent_blocs; + Bit8u buffer[512]; + + // check if flat file exists + flatfd = open (flatname, O_WRONLY +#ifdef O_BINARY + | O_BINARY +#endif + ); + if (flatfd<0) { + fatal("ERROR: flat file not found or not writable"); + } + + // Check if redolog exists + printf("%s\n",redologname); + redologfd = open(redologname, O_RDONLY +#ifdef O_BINARY + | O_BINARY +#endif + ); + if (redologfd<0) { + fatal("ERROR: redolog file not found"); + } + + printf ("\nReading redolog header: ["); + + if (read(redologfd, &header, STANDARD_HEADER_SIZE) != STANDARD_HEADER_SIZE) + fatal("\nERROR: while reading redolog header!"); + + // Print infos on redlog + printf("Type='%s', Subtype='%s', Version=%d.%d] Done.", + header.standard.type, header.standard.subtype, + dtoh32(header.standard.version)/0x10000, + dtoh32(header.standard.version)%0x10000); + + printf("\nChecking redolog header: ["); + + if (strcmp((char *)header.standard.magic, STANDARD_HEADER_MAGIC) != 0) + fatal("\nERROR: bad magic in redolog header!"); + + if (strcmp((char *)header.standard.type, REDOLOG_TYPE) != 0) + fatal("\nERROR: bad type in redolog header!"); + + if (strcmp((char *)header.standard.subtype, REDOLOG_SUBTYPE_UNDOABLE) != 0) + fatal("\nERROR: bad subtype in redolog header!"); + + if (header.standard.version != htod32(STANDARD_HEADER_VERSION)) + fatal("\nERROR: bad version in redolog header!"); + + printf("#entries=%d, bitmap size=%d, exent size = %d] Done.", + dtoh32(header.specific.catalog), + dtoh32(header.specific.bitmap), + dtoh32(header.specific.extent)); + + catalog = (Bit32u*)malloc(dtoh32(header.specific.catalog) * sizeof(Bit32u)); + bitmap = (Bit8u*)malloc(dtoh32(header.specific.bitmap)); + printf("\nReading Catalog: ["); + + lseek(redologfd, dtoh32(header.standard.header), SEEK_SET); + + catalog_size = dtoh32(header.specific.catalog) * sizeof(Bit32u); + if ((Bit32u) read(redologfd, catalog, catalog_size) != catalog_size) + fatal("\nERROR: while reading redolog catalog!"); + + printf("] Done."); + + printf("\nCommitting changes to flat file: [ 0%%]"); + + bitmap_blocs = 1 + (dtoh32(header.specific.bitmap) - 1) / 512; + extent_blocs = 1 + (dtoh32(header.specific.extent) - 1) / 512; + + for(i=0; i +# include +# include +#ifdef _MSC_VER +# include +#endif +#endif +#include +#include +#include +#include +#include +#include "config.h" + +#include + +#include "../osdep.h" + +#define HDIMAGE_HEADERS_ONLY 1 +#include "../iodev/hdimage.h" + +int bx_hdimage; +int bx_fdsize_idx; +int bx_hdsize; +int bx_hdimagemode; +int bx_interactive; +char bx_filename[256]; + +typedef int (*WRITE_IMAGE)(FILE*, Bit64u); +#ifdef WIN32 +typedef int (*WRITE_IMAGE_WIN32)(HANDLE, Bit64u); +#endif + +char *EOF_ERR = "ERROR: End of input"; +char *rcsid = "$Id$"; +char *divider = "========================================================================"; + +/* menu data for choosing floppy/hard disk */ +char *fdhd_menu = "\nDo you want to create a floppy disk image or a hard disk image?\nPlease type hd or fd. "; +char *fdhd_choices[] = { "fd", "hd" }; +int fdhd_n_choices = 2; + +/* menu data for choosing floppy size */ +char *fdsize_menu = "\nChoose the size of floppy disk image to create, in megabytes.\nPlease type 0.16, 0.18, 0.32, 0.36, 0.72, 1.2, 1.44, 1.68, 1.72, or 2.88.\n "; +char *fdsize_choices[] = { "0.16","0.18","0.32","0.36","0.72","1.2","1.44","1.68","1.72","2.88" }; +int fdsize_n_choices = 10; + +/* menu data for choosing disk mode */ +char *hdmode_menu = "\nWhat kind of image should I create?\nPlease type flat, sparse or growing. "; + char *hdmode_choices[] = {"flat", "sparse", "growing" }; +int hdmode_n_choices = 3; + +void myexit(int code) +{ +#ifdef WIN32 + printf("\nPress any key to continue\n"); + getch(); +#endif + exit(code); +} + +/* stolen from main.cc */ +void bx_center_print(FILE *file, char *line, int maxwidth) +{ + int imax; + int i; + imax = (maxwidth - strlen(line)) >> 1; + for (i=0; imax) { + printf("Your choice (%s) was not an integer between %d and %d.\n\n", + clean, min, max); + } else { + // choice is okay + *out = n; + return 0; + } + } +} + +int ask_menu(const char *prompt, int n_choices, char *choice[], int the_default, int *out) +{ + char buffer[1024]; + char *clean; + int i; + *out = -1; + while(1) { + printf("%s", prompt); + printf("[%s] ", choice[the_default]); + if (!fgets(buffer, sizeof(buffer), stdin)) + return -1; + clean = clean_string(buffer); + if (strlen(clean) < 1) { + // empty line, use the default + *out = the_default; + return 0; + } + for (i=0; i0) printf(", "); + printf("%s", choice[i]); + } + printf("\n"); + } +} + +int ask_yn(const char *prompt, int the_default, int *out) +{ + char buffer[16]; + char *clean; + *out = -1; + while (1) { + printf("%s", prompt); + printf("[%s] ", the_default?"yes":"no"); + if (!fgets(buffer, sizeof(buffer), stdin)) + return -1; + clean = clean_string(buffer); + if (strlen(clean) < 1) { + // empty line, use the default + *out = the_default; + return 0; + } + switch(tolower(clean[0])) { + case 'y': *out=1; return 0; + case 'n': *out=0; return 0; + } + printf("Please type either yes or no.\n"); + } +} + +int ask_string(const char *prompt, char *the_default, char *out) +{ + char buffer[1024]; + char *clean; + out[0] = 0; + printf("%s", prompt); + printf("[%s] ", the_default); + if (!fgets(buffer, sizeof(buffer), stdin)) + return -1; + clean = clean_string(buffer); + if (strlen(clean) < 1) { + // empty line, use the default + strcpy(out, the_default); + return 0; + } + strcpy(out, clean); + return 0; +} + +// fileset is like memset but for a file handle +void fileset(FILE * fp, int c, size_t n) +{ +#define BLOCK_SIZE (1024) + int block[BLOCK_SIZE]; + size_t left_to_write = n; + + memset(block, c, sizeof(block)); + + while(left_to_write > 0) + { + size_t write = sizeof(block); + if (write > left_to_write) write = left_to_write; + + if (1 != fwrite(block, write, 1, fp)) + { + fclose(fp); + fatal("ERROR: The disk image is not complete - could not write data block!"); + } + + left_to_write -= write; + } +} + +/* Create a suited redolog header */ +void make_redolog_header(redolog_header_t *header, const char* type, Bit64u size) +{ + Bit32u entries, extent_size, bitmap_size; + Bit64u maxsize; + + // Set standard header values + strcpy((char*)header->standard.magic, STANDARD_HEADER_MAGIC); + strcpy((char*)header->standard.type, REDOLOG_TYPE); + strcpy((char*)header->standard.subtype, type); + header->standard.version = htod32(STANDARD_HEADER_VERSION); + header->standard.header = htod32(STANDARD_HEADER_SIZE); + + entries = 512; + bitmap_size = 1; + + // Compute #entries and extent size values + do { + static Bit32u flip=0; + + extent_size = 8 * bitmap_size * 512; + + header->specific.catalog = htod32(entries); + header->specific.bitmap = htod32(bitmap_size); + header->specific.extent = htod32(extent_size); + + maxsize = (Bit64u)entries * (Bit64u)extent_size; + + flip++; + + if(flip&0x01) bitmap_size *= 2; + else entries *= 2; + } while (maxsize < size); + + header->specific.disk = htod64(size); +} + +/* produce a flat image file */ +#ifdef WIN32 +int make_flat_image_win32(HANDLE hFile, Bit64u sec) +{ + LARGE_INTEGER pos; + DWORD dwCount, errCode; + USHORT mode; + char buffer[1024]; + + SetLastError(NO_ERROR); + mode = COMPRESSION_FORMAT_DEFAULT; + dwCount = 0; + memset(buffer, 0, 512); + WriteFile(hFile, buffer, 512, &dwCount, NULL); // set the first sector to 0, Win98 doesn't zero out the file + // if there is a write at/over the end + DeviceIoControl(hFile, FSCTL_SET_COMPRESSION, &mode, sizeof(mode), NULL, 0, &dwCount, NULL); + pos.u.LowPart = (unsigned long)((sec - 1) << 9); + pos.u.HighPart = (unsigned long)((sec - 1) >> 23); + pos.u.LowPart = SetFilePointer(hFile, pos.u.LowPart, &pos.u.HighPart, FILE_BEGIN); + memset(buffer, 0, 512); + if ((pos.u.LowPart == 0xffffffff && GetLastError() != NO_ERROR) || !WriteFile(hFile, buffer, 512, &dwCount, NULL) || dwCount != 512) + { + errCode = GetLastError(); + CloseHandle(hFile); + if (errCode == ERROR_DISK_FULL) { + fatal("\nERROR: Not enough space on disk for image!"); + } else { + sprintf(buffer, "\nERROR: Disk image creation failed with error code %i!", errCode); + fatal(buffer); + } + } + return 0; +} +#endif + +int make_flat_image(FILE *fp, Bit64u sec) +{ + /* + * seek to sec*512-1 and write a single character. + * can't just do: fseek(fp, 512*sec-1, SEEK_SET) + * because 512*sec may be too large for signed int. + */ + while(sec > 0) + { + /* temp <-- min(sec, 4194303) + * 4194303 is (int)(0x7FFFFFFF/512) + */ + long temp = (long)((sec < 4194303) ? sec : 4194303); + fseek(fp, 512*temp, SEEK_CUR); + sec -= temp; + } + + fseek(fp, -1, SEEK_CUR); + if (fputc('\0', fp) == EOF) + { + fclose(fp); + fatal("\nERROR: The disk image is not complete! (image larger then free space?)"); + } + + return 0; +} + +/* produce a sparse image file */ +int make_sparse_image(FILE *fp, Bit64u sec) +{ + Bit64u numpages; + sparse_header_t header; + size_t sizesofar; + size_t padtopagesize; + + memset(&header, 0, sizeof(header)); + header.magic = htod32(SPARSE_HEADER_MAGIC); + header.version = htod32(SPARSE_HEADER_VERSION); + + header.pagesize = htod32((1 << 10) * 32); // Use 32 KB Pages - could be configurable + numpages = (sec / (dtoh32(header.pagesize) / 512)) + 1; + + header.numpages = htod32((Bit32u)numpages); + header.disk = htod64(sec * 512); + + if (numpages != dtoh32(header.numpages)) + { + fclose(fp); + fatal("ERROR: The disk image is too large for a sparse image!"); + // Could increase page size here. + // But note this only happens at 128 Terabytes! + } + + if (fwrite(&header, sizeof(header), 1, fp) != 1) + { + fclose(fp); + fatal("ERROR: The disk image is not complete - could not write header!"); + } + + fileset(fp, 0xff, 4 * dtoh32(header.numpages)); + + sizesofar = SPARSE_HEADER_SIZE + (4 * dtoh32(header.numpages)); + padtopagesize = dtoh32(header.pagesize) - (sizesofar & (dtoh32(header.pagesize) - 1)); + + fileset(fp, 0, padtopagesize); + + return 0; +} + +/* produce a growing image file */ +int make_growing_image(FILE *fp, Bit64u sec) +{ + redolog_header_t header; + Bit32u i, not_allocated = htod32(REDOLOG_PAGE_NOT_ALLOCATED); + + memset(&header, 0, sizeof(header)); + make_redolog_header(&header, REDOLOG_SUBTYPE_GROWING, sec * 512); + + if (fwrite(&header, sizeof(header), 1, fp) != 1) { + fclose(fp); + fatal("ERROR: The disk image is not complete - could not write header!"); + } + + for (i=0; i 32255)) { + printf("Hard disk image size out of range\n\n"); + ret = 0; + } + } else { + printf("Image type (fd/hd) not specified\n\n"); + } + } + else if (!strcmp("-q", argv[arg])) { + bx_interactive = 0; + } + else if (argv[arg][0] == '-') { + printf("Unknown option: %s\n\n", argv[arg]); + ret = 0; + } else { + strcpy(bx_filename, argv[arg]); + } + arg++; + } + if (bx_hdimage == -1) { + bx_hdimage = 1; + bx_fdsize_idx = 6; + bx_interactive = 1; + } + if (bx_hdimage == 1) { + if (bx_hdimagemode == -1) { + bx_hdimagemode = 0; + bx_interactive = 1; + } + if (bx_hdsize == -1) { + bx_hdsize = 10; + bx_interactive = 1; + } + } else { + if (bx_fdsize_idx == -1) { + bx_fdsize_idx = 6; + bx_interactive = 1; + } + } + if (!strlen(bx_filename)) { + bx_interactive = 1; + } + return ret; +} + +int CDECL main(int argc, char *argv[]) +{ + Bit64s sectors = 0; + char filename[256]; + char bochsrc_line[256]; + + WRITE_IMAGE write_function=NULL; +#ifdef WIN32 + WRITE_IMAGE_WIN32 writefn_win32=NULL; +#endif + + if (!parse_cmdline(argc, argv)) + myexit(1); + + print_banner(); + if (bx_interactive) { + if (ask_menu(fdhd_menu, fdhd_n_choices, fdhd_choices, bx_hdimage, &bx_hdimage) < 0) + fatal(EOF_ERR); + } + if (bx_hdimage) { + unsigned int cyl; + int hdsize, heads=16, spt=63; + int mode; + + if (bx_interactive) { + if (ask_menu(hdmode_menu, hdmode_n_choices, hdmode_choices, bx_hdimagemode, &mode) < 0) + fatal (EOF_ERR); + if (ask_int("\nEnter the hard disk size in megabytes, between 1 and 129023\n", 1, 129023, bx_hdsize, &hdsize) < 0) + fatal(EOF_ERR); + } else { + mode = bx_hdimagemode; + hdsize = bx_hdsize; + } + cyl = (unsigned int) (hdsize*1024.0*1024.0/16.0/63.0/512.0); + assert (cyl < 262144); + sectors = cyl*heads*spt; + printf("\nI will create a '%s' hard disk image with\n", hdmode_choices[mode]); + printf(" cyl=%d\n", cyl); + printf(" heads=%d\n", heads); + printf(" sectors per track=%d\n", spt); + printf(" total sectors=" FMT_LL "d\n", sectors); + printf(" total size=%.2f megabytes\n", (float)(Bit64s)(sectors/2)/1024.0); + if (bx_interactive) { + if (!strlen(bx_filename)) strcpy(bx_filename, "c.img"); + if (ask_string("\nWhat should I name the image?\n", bx_filename, filename) < 0) + fatal(EOF_ERR); + } else { + strcpy(filename, bx_filename); + } + + sprintf(bochsrc_line, "ata0-master: type=disk, path=\"%s\", mode=%s, cylinders=%d, heads=%d, spt=%d", filename, hdmode_choices[mode], cyl, heads, spt); + + switch (mode) { + case 1: + write_function=make_sparse_image; + break; + case 2: + write_function=make_growing_image; + break; + default: +#ifdef WIN32 + writefn_win32=make_flat_image_win32; +#else + write_function=make_flat_image; +#endif + } + } else { + int fdsize, cyl=0, heads=0, spt=0; + if (bx_interactive) { + if (ask_menu(fdsize_menu, fdsize_n_choices, fdsize_choices, bx_fdsize_idx, &fdsize) < 0) + fatal(EOF_ERR); + } else { + fdsize = bx_fdsize_idx; + } + switch (fdsize) { + case 0: cyl=40; heads=1; spt=8; break; /* 0.16 meg */ + case 1: cyl=40; heads=1; spt=9; break; /* 0.18 meg */ + case 2: cyl=40; heads=2; spt=8; break; /* 0.32 meg */ + case 3: cyl=40; heads=2; spt=9; break; /* 0.36 meg */ + case 4: cyl=80; heads=2; spt=9; break; /* 0.72 meg */ + case 5: cyl=80; heads=2; spt=15; break; /* 1.2 meg */ + case 6: cyl=80; heads=2; spt=18; break; /* 1.44 meg */ + case 7: cyl=80; heads=2; spt=21; break; /* 1.68 meg */ + case 8: cyl=82; heads=2; spt=21; break; /* 1.72 meg */ + case 9: cyl=80; heads=2; spt=36; break; /* 2.88 meg */ + default: + fatal("ERROR: fdsize out of range"); + } + sectors = cyl*heads*spt; + printf("I will create a floppy image with\n"); + printf(" cyl=%d\n", cyl); + printf(" heads=%d\n", heads); + printf(" sectors per track=%d\n", spt); + printf(" total sectors=" FMT_LL "d\n", sectors); + printf(" total bytes=" FMT_LL "d\n", sectors*512); + if (bx_interactive) { + if (!strlen(bx_filename)) strcpy(bx_filename, "a.img"); + if (ask_string("\nWhat should I name the image?\n", bx_filename, filename) < 0) + fatal(EOF_ERR); + } else { + strcpy(filename, bx_filename); + } + sprintf(bochsrc_line, "floppya: image=\"%s\", status=inserted", filename); + + write_function=make_flat_image; + } + if (sectors < 1) + fatal("ERROR: Illegal disk size!"); + if (strlen (filename) < 1) + fatal("ERROR: Illegal filename"); +#ifdef WIN32 + if (writefn_win32 != NULL) { + make_image_win32(sectors, filename, writefn_win32); + } + else +#endif + { + make_image(sectors, filename, write_function); + } + printf("\nI wrote " FMT_LL "u bytes to ", sectors*512); + printf("%s.\n", filename); + printf("\nThe following line should appear in your bochsrc:\n"); + printf(" %s\n", bochsrc_line); +#ifdef WIN32 + if (OpenClipboard(NULL)) { + HGLOBAL hgClip; + EmptyClipboard(); + hgClip = GlobalAlloc(GMEM_DDESHARE, (strlen(bochsrc_line) + 1)); + strcpy((char *)GlobalLock(hgClip), bochsrc_line); + GlobalUnlock(hgClip); + SetClipboardData(CF_TEXT, hgClip); + CloseClipboard(); + printf("(The line is stored in your windows clipboard, use CTRL-V to paste)\n"); + } +#endif + myexit(0); + + // make picky compilers (c++, gcc) happy, + // even though we leave via 'myexit' just above + return 0; +} diff --git a/bochs/misc/make_cmos_image.cc b/bochs/misc/make_cmos_image.cc new file mode 100644 index 00000000..fc884b9a --- /dev/null +++ b/bochs/misc/make_cmos_image.cc @@ -0,0 +1,103 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001 MandrakeSoft S.A. +// +// MandrakeSoft S.A. +// 43, rue d'Aboukir +// 75002 Paris - France +// http://www.linux-mandrake.com/ +// http://www.mandrakesoft.com/ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +// Program which generates sample CMOS image files + + + +extern "C" { +#include +#include +#include +#include +#include +#include +} + + +#if 1 +unsigned char cmos[] = { + 0x29, 0x2b, 0x30, 0x2b, 0x16, 0x0b, 0x00, 0x01, + 0x01, 0x96, 0x26, 0x02, 0x50, 0x80, 0x00, 0x00, + 0x40, 0x8f, 0xf0, 0xc0, 0x3f, 0x80, 0x02, 0x00, + 0x3c, 0x2f, 0x00, 0x4c, 0x0c, 0x10, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x48, 0x2b, 0x03, 0x03, 0x03, 0x04, 0xce, + 0x00, 0x3c, 0x19, 0xff, 0xff, 0xf0, 0x00, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x7b + }; + +#else +unsigned char cmos[] = { + 0x29, 0x2b, 0x30, 0x2b, 0x16, 0x0b, 0x00, 0x01, + 0x01, 0x96, 0x26, 0x02, 0x50, 0x80, 0x00, 0x00, + 0x40, 0x8f, 0xf0, 0xc0, 0x0f, 0x80, 0x02, 0x00, + 0x3c, 0x2f, 0x00, 0x1e, 0x00, 0x04, 0xff, 0xff, + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x08, 0x03, 0x03, 0x03, 0x05, 0xc5, + 0x00, 0x3c, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, // 0x21 + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, // 50 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 60 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 70 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; +#endif + + int +main(int argc, char *argv[]) +{ + int fd, ret; + + if (argc != 2) { + fprintf(stderr, "usage: %s pathname\n", argv[0]); + exit(1); + } + + fd = open(argv[1], O_WRONLY | O_CREAT +#ifdef O_BINARY + | O_BINARY +#endif + , S_IRUSR | S_IWUSR + ); + if (fd < 0) { + perror("trying to open cmos image file to write.\n"); + exit(1); + } + + ret = write(fd, cmos, sizeof(cmos)); + if (ret != sizeof(cmos)) { + perror("write() did not write all CMOS data.\n"); + exit(1); + } + printf("CMOS data successfuly written to file '%s'.\n", argv[1]); +} diff --git a/bochs/misc/niclist.c b/bochs/misc/niclist.c new file mode 100644 index 00000000..e2e52e96 --- /dev/null +++ b/bochs/misc/niclist.c @@ -0,0 +1,187 @@ +///////////////////////////////////////////////////////////////////////// +// +// misc/niclist.c +// by Don Becker +// $Id$ +// +// This program is for win32 only. It lists the network interface cards +// that you can use in the "ethdev" field of the ne2k line in your bochsrc. +// +// For this program and for win32 ethernet, the winpcap library is required. +// Download it from http://www.winpcap.org/ +// +///////////////////////////////////////////////////////////////////////// + +#ifndef WIN32 +#error Niclist will only work on WIN32 platforms. +#endif + +#include +#include +#include +#include + +#define MAX_ADAPTERS 10 +#define NIC_BUFFER_SIZE 2048 + +// declare our NT/9X structures to hold the adapter name and descriptions +typedef struct { + LPWSTR wstrName; + LPSTR strDesc; +} NIC_INFO_NT; + +typedef struct { + LPSTR strName; + LPSTR strDesc; +} NIC_INFO_9X; + +// declare an array of structures to hold our adapter information +NIC_INFO_NT niNT[MAX_ADAPTERS]; +NIC_INFO_9X ni9X[MAX_ADAPTERS]; + +BOOLEAN (*PacketGetAdapterNames)(PTSTR, PULONG) = NULL; +PCHAR (*PacketGetVersion)() = NULL; + +void myexit (int code) +{ + printf ("\nPress any key to continue\n"); + getch(); + exit(code); +} + +int CDECL main(int argc, char **argv) +{ + int i; + HINSTANCE hPacket; + DWORD dwVersion, dwMajorVersion; + char AdapterInfo[NIC_BUFFER_SIZE] = { '\0','\0' }; + unsigned long AdapterLength = NIC_BUFFER_SIZE; + LPWSTR wstrName; + LPSTR strName, strDesc; + int nAdapterCount; + PCHAR dllVersion; + PCHAR testString; + int nDLLMajorVersion, nDLLMinorVersion; + + // Attemp to load the WinpCap packet library + hPacket = LoadLibrary("PACKET.DLL"); + if(hPacket) + { + // Now look up the address + PacketGetAdapterNames = (BOOLEAN (*)(PTSTR, PULONG))GetProcAddress(hPacket, "PacketGetAdapterNames"); + PacketGetVersion = (PCHAR (*)())GetProcAddress(hPacket, "PacketGetVersion"); + } + else { + printf("Could not load WinPCap driver!\n"); + printf ("You can download them for free from\n"); + printf ("http://www.winpcap.org/\n"); + myexit(1); + } + + dwVersion = GetVersion(); + dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); + + // Get DLL Version and Tokenize + dllVersion = PacketGetVersion(); + nDLLMajorVersion = -1; + nDLLMinorVersion = -1; + for (testString = strtok(dllVersion, ",. "); + testString != NULL; testString = strtok(NULL, ",. ")) + { + // If Single Character, Convert + if (strlen( testString ) == 1) + { + // Check Major First + if (nDLLMajorVersion == -1) + { + nDLLMajorVersion = atoi(testString); + } + else if ( nDLLMinorVersion == -1 ) + { + nDLLMinorVersion = atoi(testString); + } + } + } + + // Get out blob of adapter info + PacketGetAdapterNames(AdapterInfo,&AdapterLength); + + // If this is Windows NT ... And DLL Returns UNICODE + if(!(dwVersion >= 0x80000000 && dwMajorVersion >= 4) && + (nDLLMajorVersion < 3 || (nDLLMajorVersion == 3 && nDLLMinorVersion < 1))) + { + wstrName=(LPWSTR)AdapterInfo; + + // Obtain Names + nAdapterCount = 0; + while ((*wstrName)) + { + // store pointer to name + niNT[nAdapterCount].wstrName=wstrName; + wstrName += lstrlenW(wstrName) +1; + nAdapterCount++; + } + + strDesc = (LPSTR)++wstrName; + + // Obtain descriptions .... + for(i=0;i +#include +#include +#include + +#ifdef dos +# include +#endif + +#if defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) +# include +# include +# define inp inb +# define outp(a,b) outb(b,a) +#endif + +/* +#define DEBUG +*/ + +#define EMULPORT 0x333 + +int checked = 0; +int filelevel = 0; +int verbose = 0; +char ofline[256] = " in the command line"; + +/****************************** + * System dependent functions * + ******************************/ + +/* Read a value from the emulator port */ +int reademul() +{ + return inp(EMULPORT); +} + +/* Write a value to the emulator port */ +void writeemul(int value) +{ + outp(EMULPORT, value); +} + +/* Enable access to the emulator port */ +void enableport() +{ +#if defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) + if (ioperm(EMULPORT, 1, 1)) { + printf("Could not access emulator port %03x: %s.\n", EMULPORT, strerror(errno)); + exit(1); + } +#endif +} + +/******************************** + * System independent functions * + ********************************/ + +/* Forward definitions*/ +void command(int cmd, char *arg); +void checkemulator(); + +/* Convert a string into a number */ +int strtoi(char *nptr, char **endptr, int base) +{ + int value, digit; + int sign = 1; + + /* Skip leading white space */ + while( isspace(*nptr) ) + nptr++; + + /* Check if there is a sign */ + if (*nptr == '-') + { + sign = -1; + nptr++; + } + else if (*nptr == '+') + { + sign = 1; + nptr++; + } + + /* Check the base if undefined and determine it */ + if (base == 0) + { + if (*nptr == '0') + { + nptr++; + if ( (*nptr == 'x') || + (*nptr == 'X') ) + { + nptr++; + base = 16; + } + else + base = 8; + } + else + base = 10; + } + + /* Convert the number */ + value = 0; + digit = -1; + while ( isalnum(*nptr) ) + { + if ( isdigit(*nptr) ) + digit = *nptr - '0'; + else + digit = tolower(*nptr) - 'a' + 10; + + if ( (digit >= base) || (digit < 0) ) + break; /* Isn't a valid char, abort conversion */ + + value = value * base + digit; + nptr++; + } + + if (endptr != NULL) + *endptr = nptr; + + return sign * value; +} + +/* Print the command line usage */ +void usage() +{ + printf("SB16 emulator control program for Bochs.\n" + "\n" + "Usage: sb16ctrl [-i #] [-t #,#,#,#,#,#] [-r] [-m #,..] [-f filename]\n" + "\n" + "This program is used to control the operation of the SB16 emulator\n" + "until it has a more sophisticated interface.\n" + "Any number of commands can be given. If none are present \"-f -\"\n" + "is assumed.\n" + "\n" + "-i # show the selected emulator info string\n" + "-t #,#,#,#,#,# load the patch translation into the emulator\n" + "-r resets the patch translation table\n" + "-m #,... sends the given midi message (up to 255 bytes)\n" + "-f filename loads commands from the given file, or stdin if \"-\"\n" + "-v be verbose\n" + "\n" + "# can be decimal, octal (first digit 0) or hexadecimal (0x..)\n" + "\n" + ); +} + +/* Execute the given command */ +void emulcommand(int command) +{ + if (checked == 0) + checkemulator(); + + writeemul(command); +} + +/* Check if we got the expected response */ +int testemul(int value, char *msg) +{ + int i; + + if (checked == 0) + checkemulator(); + + i = reademul(); +#ifndef DEBUG + if ( (i != value) && (msg) ) + { + printf("Bochs emulator/SB16 error: %s\n", msg); + exit(1); + } +#endif + return i; +} + +/* Check if we are running inside the emulator */ +void checkemulator() +{ + int i; + + checked = 1; + + enableport(); + + /* Check emulator status */ + for (i=0; i<9; i++) + writeemul(1); /* Clear input queue */ + writeemul(10); /* Check Emulator present */ + testemul(254, "no check ACK: Emulator not present"); + testemul(0x55, "Emulator not present"); /* should return 0x55 */ +} + +/* Read internal emulator string and print it */ +void showemul(int i) +{ + int j; + + emulcommand(5); /* 5 means dump info */ + writeemul(i); /* Argument to command 5; info number */ + testemul(254, "no info ACK"); + printf("Emulator info string %d:", i); + do { + j = reademul(); + if (j == 255) + break; + printf("%c", j); + } while (j != 10); +} + +/* Process a string - change "," and "/" into a space, + and ignore everything after comments "#" */ +void procstr(char *str) +{ + int i; + + for (i=0; str[i] != 0; i++) + switch(str[i]) + { + case ',': + case '/': + case 10: + case 13: + str[i] = ' '; + break; + case '#': + str[i] = 0; + str[i+1] = 0; + break; + } +} + +/* Upload a mapping to the emulator */ +void loadmap(char *map) +{ + int i; + int trans[6]; + char *nextnum; + + procstr(map); + + nextnum = map; + for (i=0;i<6;i++) { + if (nextnum) { + trans[i] = strtoi(nextnum, &nextnum, 0); + if ( (!nextnum) || + ( (trans[i] > 127) && (trans[i] < 255) ) || + (trans[i] > 255) ) + printf("Parse error in value %d%s. Command ignored.", i, ofline); + } + if (!nextnum) + trans[i] = 255; + } + + /* Load the remap into the emulator, command 4 */ + emulcommand(4); /* 4 load remap */ + testemul(254, "no load remap ACK"); + + for (i=0;i<6;i++) + writeemul(trans[i]); + + testemul(6, "insufficient data"); /* test receipt of 6 arguments */ +} + +/* Reset the translation table */ +void resettable() +{ + emulcommand(7); + testemul(254, "no table reset ACK"); +} + +/* Send a series of midi bytes to the sound device */ +void loadmidi(char *msg) +{ + int i; + + procstr(msg); + + while ( (msg) && (*msg) ) { + i = strtoi(msg, &msg, 0); + + emulcommand(11); /* 11: Send midi data byte */ + writeemul(i); + testemul(254, "no midi data ACK"); + } +} + +/* read a file of commands */ +void loadfile(char *filename) +{ + FILE *file; + char cmd; + char *pos; + char msg[256]; + int lineno = 0; + + filelevel++; + if (filelevel > 10) + { + printf("Error - Too many nested \"f\" commands.\n"); + exit(1); + } + + if (strcmp(filename, "-") == 0) + file = stdin; + else + file = fopen(filename, "r"); + + if (!file) { + printf("File %s not found.\n", filename); + return; + } + + while (!feof(file)) { + fgets(msg, sizeof msg, file); + lineno++; + + pos = msg; + + procstr(msg); + + while ( (*pos == ' ') || (*pos == 9) ) + pos++; + + if (*pos) + cmd = *pos++; + else + continue; + + if (cmd == '#') /* it's a comment */ + continue; + while ( (*pos == ' ') || (*pos == 9) ) + pos++; + + sprintf(ofline, " in line %d of file %s", lineno, filename); + + command(cmd, pos); + } + if (strcmp(filename, "-") != 0) + fclose(file); + + filelevel--; +} + +void command(int cmd, char *arg) +{ + if (verbose) + { + if (arg) + printf("Executing command %c %s%s\n", cmd, arg, ofline); + else + printf("Executing command %c %s\n", cmd, ofline); + } + + switch (cmd) + { + case 't': + loadmap(arg); + break; + + case 'i': + showemul(strtoi(arg, NULL, 0)); + break; + + case 'm': + loadmidi(arg); + break; + + case 'f': + loadfile(arg); + break; + + case 'h': + usage(); + break; + + case 'r': + resettable(); + break; + + default: + printf("Command %c %s not recognized.\n", cmd, ofline); + break; + } +} + +int main(int argc, char **argv) +{ + int i, opt, optargnum; + char *optarg; + + /* No args given, read from stdin */ + if (argc < 2) + { + loadfile("-"); + return 0; + } + + /* Check command line*/ + i = 1; + while (i < argc) + { + if ( (argv[i][0] != '/') && + (argv[i][0] != '-') ) + { + printf("Unknown command '%s'.\n" + "sb16ctrl -h gives a list of command line options.\n", + argv[i]); + return 1; + } + + optargnum = -1; + + opt = argv[i++][1]; + + switch (opt) { + case 'h': + usage(); + return 0; + + case 'v': + verbose++; + break; + + case 'r': + optargnum = 0; + + case 't': + case 'i': + case 'm': + case 'f': + if (optargnum == -1) + optargnum = 1; + + /* Fallthrough for all commands to here */ + if (optargnum > 0) + { + if ( (i >= argc) || + (argv[i][0] == '-') || + (argv[i][0] == '/') ) + { + printf("Option '%c' needs an argument.\n" + "sb16ctrl -h gives a list of command line options.\n", + opt); + return 1; + } + optarg = argv[i++]; + } + else + optarg = NULL; + + command(opt, optarg); + break; + + default: + printf("Unknown option '%c'.\n" + "sb16ctrl -h gives a list of command line options.\n", + opt); + return 1; + } + } + + return 0; +} diff --git a/bochs/misc/sb16/sb16ctrl.example b/bochs/misc/sb16/sb16ctrl.example new file mode 100644 index 00000000..3628f98d --- /dev/null +++ b/bochs/misc/sb16/sb16ctrl.example @@ -0,0 +1,36 @@ +# +# example for an sb16ctrl file +# +# comments start with hash character '#' (obviously...) +# Numbers can be octal (0...) or hex (0x...) or decimal. +# +# +# first, reset the translation table with command 'r' +r + +# then load a few translations. +# The format is: +# t OldBankMSB OldBankLSB OldProgram NewBankMSB NewBankLSB NewProgram +# +# All values are in the range of 0-127 or 255. +# For old values, 255 means "match any". +# For new values, 255 means "don't change". +# +# When deciding whether a program change is to be remapped, these +# remappings are checked first to last, and the first applicable remap +# is used. + +# This would map all bank changes to bank 0/0 +# t 255 255 255 0 0 255 +# it's commented out, otherwise none of the below changes would +# be checked, as this one matches anything. + +t 255 255 0 0 0 19 # remap piano to church organ +t 255 255 255 0 0 0 # everything remaining -> piano + +# now show the number of translations that have been loaded +i 3 + +# and enable GS/GM mode +m 0xF0,0x41,0x10,0x42,0x12,0x40,0x00,0x7F,0x00,0x41,0xF7 + diff --git a/bochs/misc/sb16/sb16ctrl.exe b/bochs/misc/sb16/sb16ctrl.exe new file mode 100755 index 0000000000000000000000000000000000000000..efef980c0d951b2e2bfb9f6544deae7db1b907cc GIT binary patch literal 10012 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 +#include +#include +#include +#include +#include +#include +#include + +int infd, outfd; + +unsigned int delay = 60; // default delay, in seconds +unsigned int count_down = 0; + +char buffer[BUF_SIZE]; +ssize_t readcnt, writecnt; + +int didwait = 0; // have we already waited? +int havedata = 0; // have we read anything in? + +int q; + +pid_t pid, wait_pid; +int wait_status; + +int main (int argc, char *argv[]) { + +#if DEBUG + printf("Command line arguments (%d):\n", argc); + for (q = 0; q < argc ; q++) { + printf(" %d = %s\n", q, argv[q]); + } +#endif + + if ((argc < 3) || (argc > 4)) { + printf("usage: %s []\n", argv[0]); + exit(1); + } + + if (argc == 4) { // get delay + delay = strtol(argv[3], (char **) NULL, 10); + if (delay < 0) { + printf("Unable to convert maximum delay value: %s\n", argv[3]); + exit(2); + } + } // get delay + +#if DEBUG + printf("Delay is set to %d seconds.\n", delay); +#endif + + infd = open(argv[1], O_RDONLY | O_NONBLOCK); + if (infd == -1) { + printf("Error opening input pipe %s: %d - %s\n", argv[1], errno, strerror(errno)); + exit(3); + } + + outfd = open(argv[2], O_RDWR | O_CREAT | O_TRUNC, S_IRWXU); + if (outfd == -1) { + printf("Error opening output file %s: %d - %s\n", argv[2], errno, strerror(errno)); + exit(4); + } + + count_down = delay; + while (1) { // must kill with a signal.... + readcnt = read(infd, buffer, (size_t) BUF_SIZE); +#if DEBUG + printf("read() returned with readcnt = %d, errno = %d\n", readcnt, errno); +#endif + if ((readcnt == -1) && (errno != EAGAIN)) { // EAGAIN - no data waiting, can ignore + printf("Error reading input pipe: %d - %s\n", errno, strerror(errno)); + exit(5); + } else { // no errors reading input pipe + if (readcnt > 0) { + writecnt = write(outfd, buffer, readcnt); + if (writecnt == -1) { + printf("Error writing output file: %d - %s\n", errno, strerror(errno)); + exit(6); + } + didwait = 0; // reset wait flag (wait again) + count_down = delay; + havedata = 1; // set flag that we got some data + } else { //readcnt must = 0 + if (!didwait) { //have not waited yet... + if (count_down > 0) { // sleep a bit + sleep(1); + count_down -= 1; + } else { + didwait = 1; // set wait flag (don't wait again) + } + } else { // already waited + if (havedata) { // have data to print, close & reopen output file + if (close(outfd) != 0) { + printf("Error closing output file: %d - %s\n", errno, strerror(errno)); + exit(7); + } + +#if DEBUG + printf("Spooling temp file...\n"); +#endif + + pid = fork(); + if (pid == -1) { + printf("Error forking new process: %d - %s\n", errno, strerror(errno)); + exit(9); + } + if (pid == 0) { // we're now running in the child process... + execlp("lpr", "lpr", argv[2], NULL); + exit(99); // should never get here... + } // we're now running in the child process... + if (pid > 0) { // we're running in the parent process... + wait_pid = waitpid(pid, (int *)&wait_status, 0); + if (wait_pid != pid) { // some sort of error + printf("Wait for 'lpr' command returned abnormally!\n"); + if (WIFEXITED(wait_status)) { + printf(" 'lpr' exited normally.\n"); + } else { + printf(" 'lpr' exited abnormally, return code = %d.\n", WEXITSTATUS(wait_status)); + } + if (WIFSIGNALED(wait_status)) { + printf(" 'lpr' received uncaught signal %d\n", WTERMSIG(wait_status)); + } + } // some sort of error + } // we're running in the parent process... + outfd = open(argv[2], O_RDWR | O_TRUNC); + if (outfd == -1) { + printf("Error re-opening output file: %d - %s\n", errno, strerror(errno)); + exit(8); + } + } // have data to print, close & repoen output file. + havedata = 0; // no more data waiting + count_down = delay; + didwait = 0; // reset wait flag (wait again) + } // already waited + } // readcnt must = 0 + } // no errors reading input pipe + } // must kill with a signal... + + exit(0); +} // eof(spoolpipe.c) diff --git a/bochs/misc/test-access-check.cc b/bochs/misc/test-access-check.cc new file mode 100644 index 00000000..ebf545ab --- /dev/null +++ b/bochs/misc/test-access-check.cc @@ -0,0 +1,378 @@ +///////////////////////////////////////////////////////////////////////// +// +// test-access-check.cc +// $Id$ +// by Bryce Denney +// +// This whole program is intended to test just a few lines in +// cpu/access.cc, where it checks if a memory access goes over the +// segment limits. +// +// NOTE: The variable called limit is actually "limit_scaled" in the +// bochs code. Limit_scaled is equal to the limit when granularity is 0, +// and equal to (limit << 12) | 0xfff when granularity is 1. +// +// Compile with: +// cc -I. -Iinstrument/stubs -o test-access-check misc/test-access-check.cc +// Then run "test-access-check" and see how it goes. If mismatches=0, +// the rule is good. +// +/////////////////////////////////////////////////////////////////////////////// + +#include + +// rule1 is the original rule used in Bochs from 2000-03-25. It has bad +// overflow problems. +int rule1 (Bit32u limit, Bit32u length, Bit32u offset); + +// rule2 is Bryce's first try, which turned out to have bad underflow problems +// instead. +int rule2 (Bit32u limit, Bit32u length, Bit32u offset); + +// rule3 is Bryce's second try, which as far as he knows works for all +// cases. +int rule3 (Bit32u limit, Bit32u length, Bit32u offset); + +// edit this to test other rules. +#define TEST_RULE rule3 + +typedef struct { + Bit32u limit, length, offset, the_answer; +} TestStruct; + +TestStruct tests[] = { +// limit length offset exception +{0x0a, 4, 0, 0}, +{0x0a, 4, 1, 0}, +{0x0a, 4, 2, 0}, +{0x0a, 4, 3, 0}, +{0x0a, 4, 4, 0}, +{0x0a, 4, 5, 0}, +{0x0a, 4, 6, 0}, +{0x0a, 4, 7, 0}, +{0x0a, 4, 8, 1}, +{0x0a, 4, 9, 1}, +{0x0a, 4, 0x0a, 1}, +{0x0a, 4, 0x0b, 1}, +{0x0a, 4, 0x0c, 1}, +{0x0a, 4, 0xfffffffd, 1}, +{0x0a, 4, 0xfffffffe, 1}, +{0x0a, 4, 0xffffffff, 1}, +{0x0a, 2, 0, 0}, +{0x0a, 2, 1, 0}, +{0x0a, 2, 2, 0}, +{0x0a, 2, 3, 0}, +{0x0a, 2, 4, 0}, +{0x0a, 2, 5, 0}, +{0x0a, 2, 6, 0}, +{0x0a, 2, 7, 0}, +{0x0a, 2, 8, 0}, +{0x0a, 2, 9, 0}, +{0x0a, 2, 0x0a, 1}, +{0x0a, 2, 0x0b, 1}, +{0x0a, 2, 0x0c, 1}, +{0x0a, 2, 0xfffffffd, 1}, +{0x0a, 2, 0xfffffffe, 1}, +{0x0a, 2, 0xffffffff, 1}, +{0x0a, 1, 0, 0}, +{0x0a, 1, 1, 0}, +{0x0a, 1, 2, 0}, +{0x0a, 1, 3, 0}, +{0x0a, 1, 4, 0}, +{0x0a, 1, 5, 0}, +{0x0a, 1, 6, 0}, +{0x0a, 1, 7, 0}, +{0x0a, 1, 8, 0}, +{0x0a, 1, 9, 0}, +{0x0a, 1, 0x0a, 0}, +{0x0a, 1, 0x0b, 1}, +{0x0a, 1, 0x0c, 1}, +// +// try a few near the common 0xffff boundary +// +{0xffff, 1, 0, 0}, +{0xffff, 1, 0x100, 0}, +{0xffff, 1, 0x1000, 0}, +{0xffff, 1, 0x8000, 0}, +{0xffff, 1, 0xf000, 0}, +{0xffff, 1, 0xfff0, 0}, +{0xffff, 1, 0xfff1, 0}, +{0xffff, 1, 0xfff2, 0}, +{0xffff, 1, 0xfff3, 0}, +{0xffff, 1, 0xfff4, 0}, +{0xffff, 1, 0xfff5, 0}, +{0xffff, 1, 0xfff6, 0}, +{0xffff, 1, 0xfff7, 0}, +{0xffff, 1, 0xfff8, 0}, +{0xffff, 1, 0xfff9, 0}, +{0xffff, 1, 0xfffa, 0}, +{0xffff, 1, 0xfffb, 0}, +{0xffff, 1, 0xfffc, 0}, +{0xffff, 1, 0xfffd, 0}, +{0xffff, 1, 0xfffe, 0}, +{0xffff, 1, 0xffff, 0}, +{0xffff, 1, 0x10000, 1}, +{0xffff, 1, 0x10001, 1}, +{0xffff, 1, 0x10002, 1}, +{0xffff, 1, 0x10021, 1}, +{0xffff, 1, 0x40001, 1}, +{0xffff, 1, 0xffffffff, 1}, +// +// near 0xffff, length 2 +// +{0xffff, 2, 0, 0}, +{0xffff, 2, 0x100, 0}, +{0xffff, 2, 0x1000, 0}, +{0xffff, 2, 0x8000, 0}, +{0xffff, 2, 0xf000, 0}, +{0xffff, 2, 0xfff0, 0}, +{0xffff, 2, 0xfff1, 0}, +{0xffff, 2, 0xfff2, 0}, +{0xffff, 2, 0xfff3, 0}, +{0xffff, 2, 0xfff4, 0}, +{0xffff, 2, 0xfff5, 0}, +{0xffff, 2, 0xfff6, 0}, +{0xffff, 2, 0xfff7, 0}, +{0xffff, 2, 0xfff8, 0}, +{0xffff, 2, 0xfff9, 0}, +{0xffff, 2, 0xfffa, 0}, +{0xffff, 2, 0xfffb, 0}, +{0xffff, 2, 0xfffc, 0}, +{0xffff, 2, 0xfffd, 0}, +{0xffff, 2, 0xfffe, 0}, +{0xffff, 2, 0xffff, 1}, +{0xffff, 2, 0x10000, 1}, +{0xffff, 2, 0x10001, 1}, +{0xffff, 2, 0x10002, 1}, +{0xffff, 2, 0x10021, 1}, +{0xffff, 2, 0x40001, 1}, +{0xffff, 2, 0xffffffff, 1}, +// +// near 0xffff, length 4 +// +{0xffff, 4, 0, 0}, +{0xffff, 4, 0x100, 0}, +{0xffff, 4, 0x1000, 0}, +{0xffff, 4, 0x8000, 0}, +{0xffff, 4, 0xf000, 0}, +{0xffff, 4, 0xfff0, 0}, +{0xffff, 4, 0xfff1, 0}, +{0xffff, 4, 0xfff2, 0}, +{0xffff, 4, 0xfff3, 0}, +{0xffff, 4, 0xfff4, 0}, +{0xffff, 4, 0xfff5, 0}, +{0xffff, 4, 0xfff6, 0}, +{0xffff, 4, 0xfff7, 0}, +{0xffff, 4, 0xfff8, 0}, +{0xffff, 4, 0xfff9, 0}, +{0xffff, 4, 0xfffa, 0}, +{0xffff, 4, 0xfffb, 0}, +{0xffff, 4, 0xfffc, 0}, +{0xffff, 4, 0xfffd, 1}, +{0xffff, 4, 0xfffe, 1}, +{0xffff, 4, 0xffff, 1}, +{0xffff, 4, 0x10000, 1}, +{0xffff, 4, 0x10001, 1}, +{0xffff, 4, 0x10002, 1}, +{0xffff, 4, 0x10021, 1}, +{0xffff, 4, 0x40001, 1}, +{0xffff, 4, 0xffffffff, 1}, +// +// now a few near the max limit 0xffffffff +// +{0xffffffff, 1, 0, 0}, +{0xffffffff, 1, 0x100, 0}, +{0xffffffff, 1, 0x1000, 0}, +{0xffffffff, 1, 0x8000, 0}, +{0xffffffff, 1, 0xf000, 0}, +{0xffffffff, 1, 0xfff0, 0}, +{0xffffffff, 1, 0xfff1, 0}, +{0xffffffff, 1, 0xfff2, 0}, +{0xffffffff, 1, 0xfff3, 0}, +{0xffffffff, 1, 0xfff4, 0}, +{0xffffffff, 1, 0xfff5, 0}, +{0xffffffff, 1, 0xfff6, 0}, +{0xffffffff, 1, 0xfff7, 0}, +{0xffffffff, 1, 0xfff8, 0}, +{0xffffffff, 1, 0xfff9, 0}, +{0xffffffff, 1, 0xfffa, 0}, +{0xffffffff, 1, 0xfffb, 0}, +{0xffffffff, 1, 0xfffc, 0}, +{0xffffffff, 1, 0xfffd, 0}, +{0xffffffff, 1, 0xfffe, 0}, +{0xffffffff, 1, 0xffff, 0}, +{0xffffffff, 1, 0x10000, 0}, +{0xffffffff, 1, 0x10001, 0}, +{0xffffffff, 1, 0x10002, 0}, +{0xffffffff, 1, 0x10021, 0}, +{0xffffffff, 1, 0x40001, 0}, +{0xffffffff, 1, 0xfffffff0, 0}, +{0xffffffff, 1, 0xfffffff9, 0}, +{0xffffffff, 1, 0xfffffffa, 0}, +{0xffffffff, 1, 0xfffffffb, 0}, +{0xffffffff, 1, 0xfffffffc, 0}, +{0xffffffff, 1, 0xfffffffd, 0}, +{0xffffffff, 1, 0xfffffffe, 0}, +{0xffffffff, 1, 0xffffffff, 0}, +{0xffffffff, 1, 0x00000000, 0}, +{0xffffffff, 1, 0x00000001, 0}, +{0xffffffff, 1, 0x00000002, 0}, +{0xffffffff, 1, 0x00000003, 0}, +{0xffffffff, 1, 0x00000004, 0}, +{0xffffffff, 1, 0x00000005, 0}, +// +// repeat with length 2 +// +{0xffffffff, 2, 0, 0}, +{0xffffffff, 2, 0x100, 0}, +{0xffffffff, 2, 0x1000, 0}, +{0xffffffff, 2, 0x8000, 0}, +{0xffffffff, 2, 0xf000, 0}, +{0xffffffff, 2, 0xfff0, 0}, +{0xffffffff, 2, 0xfff1, 0}, +{0xffffffff, 2, 0xfff2, 0}, +{0xffffffff, 2, 0xfff3, 0}, +{0xffffffff, 2, 0xfff4, 0}, +{0xffffffff, 2, 0xfff5, 0}, +{0xffffffff, 2, 0xfff6, 0}, +{0xffffffff, 2, 0xfff7, 0}, +{0xffffffff, 2, 0xfff8, 0}, +{0xffffffff, 2, 0xfff9, 0}, +{0xffffffff, 2, 0xfffa, 0}, +{0xffffffff, 2, 0xfffb, 0}, +{0xffffffff, 2, 0xfffc, 0}, +{0xffffffff, 2, 0xfffd, 0}, +{0xffffffff, 2, 0xfffe, 0}, +{0xffffffff, 2, 0xffff, 0}, +{0xffffffff, 2, 0x10000, 0}, +{0xffffffff, 2, 0x10001, 0}, +{0xffffffff, 2, 0x10002, 0}, +{0xffffffff, 2, 0x10021, 0}, +{0xffffffff, 2, 0x40001, 0}, +{0xffffffff, 2, 0xfffffff0, 0}, +{0xffffffff, 2, 0xfffffff9, 0}, +{0xffffffff, 2, 0xfffffffa, 0}, +{0xffffffff, 2, 0xfffffffb, 0}, +{0xffffffff, 2, 0xfffffffc, 0}, +{0xffffffff, 2, 0xfffffffd, 0}, +{0xffffffff, 2, 0xfffffffe, 0}, +{0xffffffff, 2, 0xffffffff, 1}, +{0xffffffff, 2, 0x00000000, 0}, +{0xffffffff, 2, 0x00000001, 0}, +{0xffffffff, 2, 0x00000002, 0}, +{0xffffffff, 2, 0x00000003, 0}, +{0xffffffff, 2, 0x00000004, 0}, +{0xffffffff, 2, 0x00000005, 0}, +// +// repeat with length 4 +// +{0xffffffff, 4, 0, 0}, +{0xffffffff, 4, 0x100, 0}, +{0xffffffff, 4, 0x1000, 0}, +{0xffffffff, 4, 0x8000, 0}, +{0xffffffff, 4, 0xf000, 0}, +{0xffffffff, 4, 0xfff0, 0}, +{0xffffffff, 4, 0xfff1, 0}, +{0xffffffff, 4, 0xfff2, 0}, +{0xffffffff, 4, 0xfff3, 0}, +{0xffffffff, 4, 0xfff4, 0}, +{0xffffffff, 4, 0xfff5, 0}, +{0xffffffff, 4, 0xfff6, 0}, +{0xffffffff, 4, 0xfff7, 0}, +{0xffffffff, 4, 0xfff8, 0}, +{0xffffffff, 4, 0xfff9, 0}, +{0xffffffff, 4, 0xfffa, 0}, +{0xffffffff, 4, 0xfffb, 0}, +{0xffffffff, 4, 0xfffc, 0}, +{0xffffffff, 4, 0xfffd, 0}, +{0xffffffff, 4, 0xfffe, 0}, +{0xffffffff, 4, 0xffff, 0}, +{0xffffffff, 4, 0x10000, 0}, +{0xffffffff, 4, 0x10001, 0}, +{0xffffffff, 4, 0x10002, 0}, +{0xffffffff, 4, 0x10021, 0}, +{0xffffffff, 4, 0x40001, 0}, +{0xffffffff, 4, 0xfffffff0, 0}, +{0xffffffff, 4, 0xfffffff9, 0}, +{0xffffffff, 4, 0xfffffffa, 0}, +{0xffffffff, 4, 0xfffffffb, 0}, +{0xffffffff, 4, 0xfffffffc, 0}, +{0xffffffff, 4, 0xfffffffd, 1}, +{0xffffffff, 4, 0xfffffffe, 1}, +{0xffffffff, 4, 0xffffffff, 1}, +{0xffffffff, 4, 0x00000000, 0}, +{0xffffffff, 4, 0x00000001, 0}, +{0xffffffff, 4, 0x00000002, 0}, +{0xffffffff, 4, 0x00000003, 0}, +{0xffffffff, 4, 0x00000004, 0}, +{0xffffffff, 4, 0x00000005, 0}, +// +// now make some underflow cases to disprove my new rule +// +{1, 1, 0, 0}, +{1, 1, 1, 0}, +{1, 1, 2, 1}, +{1, 1, 3, 1}, +{1, 1, 4, 1}, +{1, 1, 0xfffffffc, 1}, +{1, 1, 0xfffffffd, 1}, +{1, 1, 0xfffffffe, 1}, +{1, 1, 0xffffffff, 1}, +{1, 2, 0, 0}, +{1, 2, 1, 1}, +{1, 2, 2, 1}, +{1, 2, 3, 1}, +{1, 2, 4, 1}, +{1, 2, 0xfffffffc, 1}, +{1, 2, 0xfffffffd, 1}, +{1, 2, 0xfffffffe, 1}, +{1, 2, 0xffffffff, 1}, +{1, 4, 0, 1}, +{1, 4, 1, 1}, +{1, 4, 2, 1}, +{1, 4, 3, 1}, +{1, 4, 4, 1}, +{1, 4, 0xfffffffc, 1}, +{1, 4, 0xfffffffd, 1}, +{1, 4, 0xfffffffe, 1}, +{1, 4, 0xffffffff, 1} +}; + +int main () { + int total=0, mismatches=0; + int t; + for (t=0; tlimit, ts->length, ts->offset); + printf ("limit=%x len=%x offset=%x exception=%x %s\n", + ts->limit, + ts->length, + ts->offset, + my_answer, + (ts->the_answer==my_answer) ? "" : "MISMATCH"); + if (ts->the_answer!=my_answer) mismatches++; + total++; + } + printf ("mismatches=%d\n", mismatches); + printf ("total=%d\n", total); +} + +int rule1 (Bit32u limit, Bit32u length, Bit32u offset) +{ + if ((offset + length - 1) > limit) return 1; + return 0; +} + +int rule2 (Bit32u limit, Bit32u length, Bit32u offset) +{ + if (offset > (limit - length + 1)) return 1; + return 0; +} + +int rule3 (Bit32u limit, Bit32u length, Bit32u offset) +{ + if (offset > (limit - length + 1) || (length-1 > limit)) { + return 1; + } + return 0; +} diff --git a/bochs/msrs.def b/bochs/msrs.def new file mode 100755 index 00000000..61acf32b --- /dev/null +++ b/bochs/msrs.def @@ -0,0 +1,45 @@ +# +# ---------------------------------- +# Bochs CPU MSRs configuration +# ---------------------------------- +# +# LEGEND: +# ------ +# +# MSR ADDRESS - MSR address in hex (supplied in ECX register for RDMSR/WRMSR) +# MSR TYPE - MSR type, see below +# +# The following fields have any meaning for MSRs with no type only: +# +# RESET_HI - reset value of the MSR (bits 63:32) +# RESET_LO - reset value of the MSR (bits 31:00) +# +# NOTE: the value of the MSR doesn't change on INIT (software reset). +# +# RSRVD_HI - mask of reserved bits (bits 63:32) +# RSRVD_LO - mask of reserved bits (bits 31:00) +# +# NOTE: #GP fault will be generated when trying to modify any of MSR +# reserved bits. +# +# IGNRD_HI - mask of ignored bits (bits 63:32) +# IGNRD_LO - mask of ignored bits (bits 31:00) +# +# NOTE: Ignored bits will keep their reset value, all writes to these +# bits are ignored. +# +# MSR TYPES: +# --------- +# +# 0 - No type. +# 1 - MSR contains linear address, +# #GP if writing non-canonical address in 64-bit mode. +# 2 - MSR contains physical address, +# #GP if writing a value which exceeds emulated physical address size. +# + + +# ADDRESS TYPE RESET_HI RESET_LO RSRVD_HI RSRVD_LO IGNRD_HI IGNRD_LO +# --------------------------------------------------------------------------------- + 0x02c 0 00000000 00000000 00000000 00000000 00000000 00000000 + \ No newline at end of file diff --git a/bochs/osdep.cc b/bochs/osdep.cc new file mode 100644 index 00000000..7c16415e --- /dev/null +++ b/bochs/osdep.cc @@ -0,0 +1,339 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// +// osdep.cc +// +// Provide definition of library functions that are missing on various +// systems. The only reason this is a .cc file rather than a .c file +// is so that it can include bochs.h. Bochs.h includes all the required +// system headers, with appropriate #ifdefs for different compilers and +// platforms. +// + +#include "bochs.h" + +////////////////////////////////////////////////////////////////////// +// Missing library functions. These should work on any platform +// that needs them. +////////////////////////////////////////////////////////////////////// + +#if !BX_HAVE_SNPRINTF +/* XXX use real snprintf */ +/* if they don't have snprintf, just use sprintf */ +int bx_snprintf (char *s, size_t maxlen, const char *format, ...) +{ + va_list arg; + int done; + + va_start (arg, format); + done = vsprintf (s, format, arg); + va_end (arg); + + return done; +} + +#endif /* !BX_HAVE_SNPRINTF */ + +#if !BX_HAVE_VSNPRINTF +int bx_vsnprintf (char *s, size_t maxlen, const char *format, va_list arg) +{ + return vsprintf (s, format, arg); +} +#endif /* !BX_HAVE_VSNPRINTF*/ + +#if (!BX_HAVE_STRTOULL && !BX_HAVE_STRTOUQ) +/* taken from glibc-2.2.2: strtod.c, and stripped down a lot. There are + still a few leftover references to decimal points and exponents, + but it works for bases 10 and 16 */ + +#define RETURN(val,end) \ + do { if (endptr != NULL) *endptr = (char *) (end); \ + return val; } while (0) + +Bit64u bx_strtoull (const char *nptr, char **endptr, int baseignore) +{ + int negative; /* The sign of the number. */ + int exponent; /* Exponent of the number. */ + + /* Numbers starting `0X' or `0x' have to be processed with base 16. */ + int base = 10; + + /* Number of bits currently in result value. */ + int bits; + + /* Running pointer after the last character processed in the string. */ + const char *cp, *tp; + /* Start of significant part of the number. */ + const char *startp, *start_of_digits; + /* Total number of digit and number of digits in integer part. */ + int dig_no; + /* Contains the last character read. */ + char c; + + Bit64s n = 0; + char const *p; + + /* Prepare number representation. */ + exponent = 0; + negative = 0; + bits = 0; + + /* Parse string to get maximal legal prefix. We need the number of + characters of the integer part, the fractional part and the exponent. */ + cp = nptr - 1; + /* Ignore leading white space. */ + do + c = *++cp; + while (isspace (c)); + + /* Get sign of the result. */ + if (c == '-') + { + negative = 1; + c = *++cp; + } + else if (c == '+') + c = *++cp; + + if (c < '0' || c > '9') + { + /* It is really a text we do not recognize. */ + RETURN (0, nptr); + } + + /* First look whether we are faced with a hexadecimal number. */ + if (c == '0' && tolower (cp[1]) == 'x') + { + /* Okay, it is a hexa-decimal number. Remember this and skip + the characters. BTW: hexadecimal numbers must not be + grouped. */ + base = 16; + cp += 2; + c = *cp; + } + + /* Record the start of the digits, in case we will check their grouping. */ + start_of_digits = startp = cp; + + /* Ignore leading zeroes. This helps us to avoid useless computations. */ + while (c == '0') + c = *++cp; + + /* If no other digit but a '0' is found the result is 0.0. + Return current read pointer. */ + if ((c < '0' || c > '9') + && (base == 16 && (c < tolower ('a') || c > tolower ('f'))) + && (base == 16 && (cp == start_of_digits || tolower (c) != 'p')) + && (base != 16 && tolower (c) != 'e')) + { + tp = start_of_digits; + /* If TP is at the start of the digits, there was no correctly + grouped prefix of the string; so no number found. */ + RETURN (0, tp == start_of_digits ? (base == 16 ? cp - 1 : nptr) : tp); + } + + /* Remember first significant digit and read following characters until the + decimal point, exponent character or any non-FP number character. */ + startp = cp; + dig_no = 0; + while (1) + { + if ((c >= '0' && c <= '9') + || (base == 16 && tolower (c) >= 'a' && tolower (c) <= 'f')) + ++dig_no; + else + break; + c = *++cp; + } + + /* The whole string is parsed. Store the address of the next character. */ + if (endptr) + *endptr = (char *) cp; + + if (dig_no == 0) + return 0; + + for (p=start_of_digits; p!=cp; p++) { + n = n * (Bit64s)base; + c = tolower (*p); + c = (c >= 'a') ? (10+c-'a') : c-'0'; + n = n + (Bit64s)c; + //printf ("after shifting in digit %c, n is %lld\n", *p, n); + } + return negative? -n : n; +} +#endif /* !BX_HAVE_STRTOULL */ + +#if BX_TEST_STRTOULL_MAIN +/* test driver for strtoull. Do not compile by default. */ +int main (int argc, char **argv) +{ + char buf[256], *endbuf; + long l; + Bit64s ll; + while (1) { + printf ("Enter a long int: "); + gets (buf); + l = strtoul (buf, &endbuf, 10); + printf ("As a long, %ld\n", l); + printf ("Endbuf is at buf[%d]\n", endbuf-buf); + ll = bx_strtoull(buf, &endbuf, 10); + printf ("As a long long, %lld\n", ll); + printf ("Endbuf is at buf[%d]\n", endbuf-buf); + } + return 0; +} +#endif /* BX_TEST_STRTOULL_MAIN */ + +#if !BX_HAVE_STRDUP +/* XXX use real strdup */ +char *bx_strdup(const char *str) +{ + char *temp = (char*)malloc(strlen(str)+1); + sprintf(temp, "%s", str); + return temp; + + // Well, I'm sure this isn't how strdup is REALLY implemented, + // but it works... +} +#endif /* !BX_HAVE_STRDUP */ + +#if !BX_HAVE_STRREV +char *bx_strrev(char *str) +{ + char *p1, *p2; + + if (! str || ! *str) + return str; + + for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2) { + *p1 ^= *p2; + *p2 ^= *p1; + *p1 ^= *p2; + } + return str; +} +#endif /* !BX_HAVE_STRREV */ + +#if BX_WITH_MACOS +namespace std{extern "C" {char *mktemp(char *tpl);}} +#endif +#if !BX_HAVE_MKSTEMP +int bx_mkstemp(char *tpl) +{ + mktemp(tpl); + return ::open(tpl, O_RDWR | O_CREAT | O_TRUNC +# ifdef O_BINARY + | O_BINARY +# endif + , S_IWUSR | S_IRUSR | S_IRGRP | S_IWGRP); +} +#endif // !BX_HAVE_MKSTEMP + +////////////////////////////////////////////////////////////////////// +// Missing library functions, implemented for MacOS only +////////////////////////////////////////////////////////////////////// + +#if BX_WITH_MACOS +// these functions are part of MacBochs. They are not intended to be +// portable! +#include +#include +#include + +int fd_read(char *buffer, Bit32u offset, Bit32u bytes) +{ + OSErr err; + IOParam param; + + param.ioRefNum=-5; // Refnum of the floppy disk driver + param.ioVRefNum=1; + param.ioPosMode=fsFromStart; + param.ioPosOffset=offset; + param.ioBuffer=buffer; + param.ioReqCount=bytes; + err = PBReadSync((union ParamBlockRec *)(¶m)); + return param.ioActCount; +} + +int fd_write(char *buffer, Bit32u offset, Bit32u bytes) +{ + OSErr err; + IOParam param; + + param.ioRefNum=-5; // Refnum of the floppy disk driver + param.ioVRefNum=1; + param.ioPosMode=fsFromStart; + param.ioPosOffset=offset; + param.ioBuffer=buffer; + param.ioReqCount=bytes; + err = PBWriteSync((union ParamBlockRec *)(¶m)); + return param.ioActCount; +} + +int fd_stat(struct stat *buf) +{ + OSErr err; + DrvSts status; + int result = 0; + + err = DriveStatus(1, &status); + if (status.diskInPlace <1 || status.diskInPlace > 2) + result = -1; + buf->st_mode = S_IFCHR; + return result; +} +#endif /* BX_WITH_MACOS */ + +////////////////////////////////////////////////////////////////////// +// New functions to replace library functions +// with OS-independent versions +////////////////////////////////////////////////////////////////////// + +#if BX_HAVE_REALTIME_USEC +#if defined(WIN32) +static Bit64u last_realtime64_top = 0; +static Bit64u last_realtime64_bottom = 0; + +Bit64u bx_get_realtime64_usec(void) +{ + Bit64u new_bottom = ((Bit64u) GetTickCount()) & BX_CONST64(0x0FFFFFFFF); + if(new_bottom < last_realtime64_bottom) { + last_realtime64_top += BX_CONST64(0x0000000100000000); + } + last_realtime64_bottom = new_bottom; + Bit64u interim_realtime64 = + (last_realtime64_top & BX_CONST64(0xFFFFFFFF00000000)) | + (new_bottom & BX_CONST64(0x00000000FFFFFFFF)); + return interim_realtime64*(BX_CONST64(1000)); +} +#elif BX_HAVE_GETTIMEOFDAY +Bit64u bx_get_realtime64_usec(void) +{ + timeval thetime; + gettimeofday(&thetime,0); + Bit64u mytime; + mytime=(Bit64u)thetime.tv_sec*(Bit64u)1000000+(Bit64u)thetime.tv_usec; + return mytime; +} +#endif +#endif diff --git a/bochs/osdep.h b/bochs/osdep.h new file mode 100644 index 00000000..d0f8bfe0 --- /dev/null +++ b/bochs/osdep.h @@ -0,0 +1,240 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +///////////////////////////////////////////////////////////////////////// + +// +// osdep.h +// +// requires Bit32u/Bit64u from config.h, size_t from stdio.h +// +// Operating system dependent includes and defines for Bochs. These +// declarations can be included by C or C++., but they require definition of +// size_t beforehand. This makes it difficult to place them into either +// config.h or bochs.h. If in config.h, size_t is not always available yet. +// If in bochs.h, they can't be included by C programs so they lose. +// + +#ifndef BX_OSDEP_H +#define BX_OSDEP_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +////////////////////////////////////////////////////////////////////// +// Hacks for win32, but exclude MINGW32 because it doesn't need them. +////////////////////////////////////////////////////////////////////// +#ifdef WIN32 + +// Definitions that are needed for all WIN32 compilers. +# define ssize_t long + +#ifndef __MINGW32__ + +// Definitions that are needed for WIN32 compilers EXCEPT FOR +// cygwin compiling with -mno-cygwin. e.g. VC++. + +#if !defined(_MSC_VER) // gcc without -mno-cygwin +#define FMT_LL "%ll" +#define FMT_TICK "%011llu" +#define FMT_ADDRX64 "%016llx" +#else +#define FMT_LL "%I64" +#define FMT_TICK "%011I64u" +#define FMT_ADDRX64 "%016I64x" +#endif + +// always return regular file. +#ifndef S_ISREG +# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#endif +#ifndef S_ISCHR +# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#endif + +// win32 has snprintf though with different name. +#define snprintf _snprintf +#define vsnprintf _vsnprintf +#undef BX_HAVE_SNPRINTF +#undef BX_HAVE_VSNPRINTF +#define BX_HAVE_SNPRINTF 1 +#define BX_HAVE_VSNPRINTF 1 + +#if defined(_MSC_VER) +#define access _access +#define fdopen _fdopen +#define mktemp _mktemp +#define off_t __int64 +#define lseek _lseeki64 +#define fstat _fstati64 +#define stat _stati64 +#define read _read +#define write _write +#define open _open +#define close _close +#define unlink _unlink +#define strdup _strdup +#define strrev _strrev +#define stricmp _stricmp +#define getch _getch +#endif + +#else /* __MINGW32__ defined */ +// Definitions for cygwin compiled with -mno-cygwin +#define FMT_LL "%I64" +#define FMT_TICK "%011I64u" +#define FMT_ADDRX64 "%016I64x" + +#define off_t __int64 +#define lseek _lseeki64 +#endif /* __MINGW32__ defined */ + +#else /* not WIN32 definitions */ +#if SIZEOF_UNSIGNED_LONG == 8 +#define FMT_LL "%l" +#define FMT_TICK "%011lu" +#define FMT_ADDRX64 "%016lx" +#else +#define FMT_LL "%ll" +#define FMT_TICK "%011llu" +#define FMT_ADDRX64 "%016llx" +#endif +#endif /* not WIN32 definitions */ + +#define FMT_ADDRX32 "%08x" + +// Missing defines for open +#ifndef S_IRUSR +#define S_IRUSR 0400 +#define S_IWUSR 0200 +#endif +#ifndef S_IRGRP +#define S_IRGRP 0040 +#define S_IWGRP 0020 +#endif +#ifndef S_IROTH +#define S_IROTH 0004 +#define S_IWOTH 0002 +#endif + +////////////////////////////////////////////////////////////////////// +// Missing library functions. +// These should work on any platform that needs them. +// +// A missing library function is renamed to a bx_* function, so that when +// debugging and linking there's no confusion over which version is used. +// Because of renaming, the bx_* replacement functions can be tested on +// machines which have the real library function without duplicate symbols. +// +// If you're considering implementing a missing library function, note +// that it might be cleaner to conditionally disable the function call! +////////////////////////////////////////////////////////////////////// + +#if !BX_HAVE_SNPRINTF + #define snprintf bx_snprintf + extern int bx_snprintf (char *s, size_t maxlen, const char *format, ...); +#endif + +#if !BX_HAVE_VSNPRINTF + #define vsnprintf bx_vsnprintf + extern int bx_vsnprintf (char *s, size_t maxlen, const char *format, va_list arg); +#endif + +#if BX_HAVE_STRTOULL + // great, just use the usual function +#elif BX_HAVE_STRTOUQ + // they have strtouq and not strtoull + #define strtoull strtouq +#else + #define strtoull bx_strtoull + extern Bit64u bx_strtoull (const char *nptr, char **endptr, int baseignore); +#endif + +#if !BX_HAVE_STRDUP +#define strdup bx_strdup + extern char *bx_strdup(const char *str); +#endif + +#if !BX_HAVE_STRREV +#define strrev bx_strrev + extern char *bx_strrev(char *str); +#endif + +#if BX_HAVE_STRICMP + // great, just use the usual function +#elif BX_HAVE_STRCASECMP + #define stricmp strcasecmp +#else + // FIXME: for now using case sensitive function + #define stricmp strcmp +#endif + +#if !BX_HAVE_SOCKLEN_T +// needed on MacOS X 10.1 +typedef int socklen_t; +#endif + +#if !BX_HAVE_MKSTEMP +#define mkstemp bx_mkstemp + extern int bx_mkstemp(char *tpl); +#endif + +////////////////////////////////////////////////////////////////////// +// Missing library functions, implemented for MacOS only +////////////////////////////////////////////////////////////////////// + +#if BX_WITH_MACOS +// fd_read and fd_write are called by floppy.cc to access the Mac +// floppy drive directly, since the MacOS doesn't have "special" +// pathnames which map directly to IO devices + +int fd_read(char *buffer, Bit32u offset, Bit32u bytes); +int fd_write(char *buffer, Bit32u offset, Bit32u bytes); +int fd_stat(struct stat *buf); +FILE * fdopen(int fd, const char *type); + +typedef long ssize_t ; +#endif + +////////////////////////////////////////////////////////////////////// +// New functions to replace library functions +// with OS-independent versions +////////////////////////////////////////////////////////////////////// + +#if BX_HAVE_REALTIME_USEC +// 64-bit time in useconds. +extern Bit64u bx_get_realtime64_usec (void); +#endif + +#ifdef WIN32 +#undef BX_HAVE_MSLEEP +#define BX_HAVE_MSLEEP 1 +#if !defined(__MINGW32__) && !defined(_MSC_VER) +#define msleep(msec) _sleep(msec) +#else +#define msleep(msec) Sleep(msec) +#endif +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* ifdef BX_OSDEP_H */ diff --git a/bochs/param_names.h b/bochs/param_names.h new file mode 100755 index 00000000..074a6a4c --- /dev/null +++ b/bochs/param_names.h @@ -0,0 +1,184 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#ifndef BX_PARAM_NAMES +#define BX_PARAM_NAMES + +// define parameter path names. These names give the location in the +// parameter tree where each can be found. The names correspond to +// the old BXP_* enum values, which have been eliminated. +#define BXPN_SEL_CONFIG_INTERFACE "general.config_interface" +#define BXPN_BOCHS_START "general.start_mode" +#define BXPN_BOCHS_BENCHMARK "general.benchmark" +#define BXPN_RESTORE_FLAG "general.restore" +#define BXPN_RESTORE_PATH "general.restore_path" +#define BXPN_DEBUG_RUNNING "general.debug_running" +#define BXPN_CPU_NPROCESSORS "cpu.n_processors" +#define BXPN_CPU_NCORES "cpu.n_cores" +#define BXPN_CPU_NTHREADS "cpu.n_threads" +#define BXPN_IPS "cpu.ips" +#define BXPN_SMP_QUANTUM "cpu.quantum" +#define BXPN_RESET_ON_TRIPLE_FAULT "cpu.reset_on_triple_fault" +#define BXPN_IGNORE_BAD_MSRS "cpu.ignore_bad_msrs" +#define BXPN_CONFIGURABLE_MSRS_PATH "cpu.msrs" +#define BXPN_VENDOR_STRING "cpuid.vendor_string" +#define BXPN_BRAND_STRING "cpuid.brand_string" +#define BXPN_CPUID_STEPPING "cpuid.stepping" +#define BXPN_CPUID_LIMIT_WINNT "cpuid.cpuid_limit_winnt" +#define BXPN_CPUID_MMX "cpuid.mmx" +#define BXPN_CPUID_SSE "cpuid.sse" +#define BXPN_CPUID_AES "cpuid.aes" +#define BXPN_CPUID_MOVBE "cpuid.movbe" +#define BXPN_CPUID_SEP "cpuid.sep" +#define BXPN_CPUID_XSAVE "cpuid.xsave" +#define BXPN_CPUID_XAPIC "cpuid.xapic" +#define BXPN_CPUID_MWAIT "cpuid.mwait" +#define BXPN_CPUID_MWAIT_IS_NOP "cpuid.mwait_is_nop" +#define BXPN_CPUID_1G_PAGES "cpuid.1g_pages" +#define BXPN_CPUID_PCID "cpuid.pcid" +#define BXPN_CPUID_FSGSBASE "cpuid.fsgsbase" +#define BXPN_MEM_SIZE "memory.standard.ram.size" +#define BXPN_HOST_MEM_SIZE "memory.standard.ram.host_size" +#define BXPN_ROM_PATH "memory.standard.rom.path" +#define BXPN_ROM_ADDRESS "memory.standard.rom.addr" +#define BXPN_VGA_ROM_PATH "memory.standard.vgarom.path" +#define BXPN_OPTROM1_PATH "memory.optrom.1.path" +#define BXPN_OPTROM1_ADDRESS "memory.optrom.1.addr" +#define BXPN_OPTROM2_PATH "memory.optrom.2.path" +#define BXPN_OPTROM2_ADDRESS "memory.optrom.2.addr" +#define BXPN_OPTROM3_PATH "memory.optrom.3.path" +#define BXPN_OPTROM3_ADDRESS "memory.optrom.3.addr" +#define BXPN_OPTROM4_PATH "memory.optrom.4.path" +#define BXPN_OPTROM4_ADDRESS "memory.optrom.4.addr" +#define BXPN_OPTRAM1_PATH "memory.optram.1.path" +#define BXPN_OPTRAM1_ADDRESS "memory.optram.1.addr" +#define BXPN_OPTRAM2_PATH "memory.optram.2.path" +#define BXPN_OPTRAM2_ADDRESS "memory.optram.2.addr" +#define BXPN_OPTRAM3_PATH "memory.optram.3.path" +#define BXPN_OPTRAM3_ADDRESS "memory.optram.3.addr" +#define BXPN_OPTRAM4_PATH "memory.optram.4.path" +#define BXPN_OPTRAM4_ADDRESS "memory.optram.4.addr" +#define BXPN_CLOCK_SYNC "clock_cmos.clock_sync" +#define BXPN_CLOCK_TIME0 "clock_cmos.time0" +#define BXPN_CMOSIMAGE_ENABLED "clock_cmos.cmosimage.enabled" +#define BXPN_CMOSIMAGE_PATH "clock_cmos.cmosimage.path" +#define BXPN_CMOSIMAGE_RTC_INIT "clock_cmos.cmosimage.rtc_init" +#define BXPN_I440FX_SUPPORT "pci.i440fx_support" +#define BXPN_PCIDEV_VENDOR "pci.pcidev.vendor" +#define BXPN_PCIDEV_DEVICE "pci.pcidev.device" +#define BXPN_SEL_DISPLAY_LIBRARY "display.display_library" +#define BXPN_DISPLAYLIB_OPTIONS "display.displaylib_options" +#define BXPN_PRIVATE_COLORMAP "display.private_colormap" +#define BXPN_FULLSCREEN "display.fullscreen" +#define BXPN_SCREENMODE "display.screenmode" +#define BXPN_VGA_EXTENSION "display.vga_extension" +#define BXPN_VGA_UPDATE_INTERVAL "display.vga_update_interval" +#define BXPN_KBD_TYPE "keyboard_mouse.keyboard.type" +#define BXPN_KBD_SERIAL_DELAY "keyboard_mouse.keyboard.serial_delay" +#define BXPN_KBD_PASTE_DELAY "keyboard_mouse.keyboard.paste_delay" +#define BXPN_KBD_USEMAPPING "keyboard_mouse.keyboard.use_mapping" +#define BXPN_KBD_KEYMAP "keyboard_mouse.keyboard.keymap" +#define BXPN_USER_SHORTCUT "keyboard_mouse.keyboard.user_shortcut" +#define BXPN_MOUSE_TYPE "keyboard_mouse.mouse.type" +#define BXPN_MOUSE_ENABLED "keyboard_mouse.mouse.enabled" +#define BXPN_MOUSE_TOGGLE "keyboard_mouse.mouse.toggle" +#define BXPN_BOOTDRIVE1 "boot_params.boot_drive1" +#define BXPN_BOOTDRIVE2 "boot_params.boot_drive2" +#define BXPN_BOOTDRIVE3 "boot_params.boot_drive3" +#define BXPN_FLOPPYSIGCHECK "boot_params.floppy_sig_check" +#define BXPN_LOAD32BITOS_WHICH "boot_params.load32bitos.which" +#define BXPN_LOAD32BITOS_PATH "boot_params.load32bitos.path" +#define BXPN_LOAD32BITOS_IOLOG "boot_params.load32bitos.iolog" +#define BXPN_LOAD32BITOS_INITRD "boot_params.load32bitos.initrd" +#define BXPN_FLOPPYA "floppy.0" +#define BXPN_FLOPPYA_DEVTYPE "floppy.0.devtype" +#define BXPN_FLOPPYA_PATH "floppy.0.path" +#define BXPN_FLOPPYA_TYPE "floppy.0.type" +#define BXPN_FLOPPYA_READONLY "floppy.0.readonly" +#define BXPN_FLOPPYA_STATUS "floppy.0.status" +#define BXPN_FLOPPYB "floppy.1" +#define BXPN_FLOPPYB_DEVTYPE "floppy.1.devtype" +#define BXPN_FLOPPYB_PATH "floppy.1.path" +#define BXPN_FLOPPYB_TYPE "floppy.1.type" +#define BXPN_FLOPPYB_READONLY "floppy.1.readonly" +#define BXPN_FLOPPYB_STATUS "floppy.1.status" +#define BXPN_ATA0_RES "ata.0.resources" +#define BXPN_ATA1_RES "ata.1.resources" +#define BXPN_ATA2_RES "ata.2.resources" +#define BXPN_ATA3_RES "ata.3.resources" +#define BXPN_ATA0_ENABLED "ata.0.resources.enabled" +#define BXPN_ATA1_ENABLED "ata.1.resources.enabled" +#define BXPN_ATA0_MASTER "ata.0.master" +#define BXPN_ATA1_MASTER "ata.1.master" +#define BXPN_ATA2_MASTER "ata.2.master" +#define BXPN_ATA3_MASTER "ata.3.master" +#define BXPN_ATA0_SLAVE "ata.0.slave" +#define BXPN_ATA1_SLAVE "ata.1.slave" +#define BXPN_ATA2_SLAVE "ata.2.slave" +#define BXPN_ATA3_SLAVE "ata.3.slave" +#define BXPN_USB_UHCI "ports.usb.uhci" +#define BXPN_UHCI_ENABLED "ports.usb.uhci.enabled" +#define BXPN_UHCI_PORT1_DEVICE "ports.usb.uhci.port1.device" +#define BXPN_UHCI_PORT1_OPTIONS "ports.usb.uhci.port1.options" +#define BXPN_UHCI_PORT2_DEVICE "ports.usb.uhci.port2.device" +#define BXPN_UHCI_PORT2_OPTIONS "ports.usb.uhci.port2.options" +#define BXPN_USB_OHCI "ports.usb.ohci" +#define BXPN_OHCI_ENABLED "ports.usb.ohci.enabled" +#define BXPN_OHCI_PORT1_DEVICE "ports.usb.ohci.port1.device" +#define BXPN_OHCI_PORT1_OPTIONS "ports.usb.ohci.port1.options" +#define BXPN_OHCI_PORT2_DEVICE "ports.usb.ohci.port2.device" +#define BXPN_OHCI_PORT2_OPTIONS "ports.usb.ohci.port2.options" +#define BXPN_NE2K "network.ne2k0" +#define BXPN_NE2K0 "network.ne2k0" +#define BXPN_NE2K0_ENABLED "network.ne2k0.enabled" +#define BXPN_NE2K1 "network.ne2k1" +#define BXPN_NE2K1_ENABLED "network.ne2k1.enabled" +#define BXPN_NE2K2 "network.ne2k2" +#define BXPN_NE2K2_ENABLED "network.ne2k2.enabled" +#define BXPN_NE2K3 "network.ne2k3" +#define BXPN_NE2K3_ENABLED "network.ne2k3.enabled" +#define BXPN_PNIC "network.pnic" +#define BXPN_PNIC_ENABLED "network.pnic.enabled" +#define BXPN_SB16 "sound.sb16" +#define BXPN_SB16_ENABLED "sound.sb16.enabled" +#define BXPN_SB16_MIDIFILE "sound.sb16.midifile" +#define BXPN_SB16_WAVEFILE "sound.sb16.wavefile" +#define BXPN_SB16_DMATIMER "sound.sb16.dmatimer" +#define BXPN_SB16_LOGLEVEL "sound.sb16.loglevel" +#define BXPN_PORT_E9_HACK "misc.port_e9_hack" +#define BXPN_TEXT_SNAPSHOT_CHECK "misc.text_snapshot_check" +#define BXPN_GDBSTUB "misc.gdbstub" +#define BXPN_PLUGIN_CTRL "misc.plugin_ctrl" +#define BXPN_LOG_FILENAME "log.filename" +#define BXPN_LOG_PREFIX "log.prefix" +#define BXPN_DEBUGGER_LOG_FILENAME "log.debugger_filename" +#define BXPN_MENU_DISK "menu.disk" +#define BXPN_MENU_DISK_WIN32 "menu.disk_win32" +#define BXPN_MENU_RUNTIME_CDROM "menu.runtime.cdrom" +#define BXPN_MENU_RUNTIME_USB "menu.runtime.usb" +#define BXPN_MENU_RUNTIME_MISC "menu.runtime.misc" +#define BXPN_WX_KBD_STATE "wxdebug.keyboard" +#define BXPN_WX_CPU_STATE "wxdebug.cpu" +#define BXPN_WX_CPU0_STATE "wxdebug.cpu.0" +#define BXPN_WX_CPU0_EFLAGS_IOPL "wxdebug.cpu.0.IOPL" + +#endif diff --git a/bochs/patches/HEADER b/bochs/patches/HEADER new file mode 100644 index 00000000..b9b1f5f4 --- /dev/null +++ b/bochs/patches/HEADER @@ -0,0 +1,16 @@ +---------------------------------------------------------------------- +Patch name: +Author: +Date: +Status: + +Detailed description: + +Patch was created with: + cvs diff -u +Apply patch to what version: + cvs checked out on DATE, release version VER +Instructions: + To patch, go to main bochs directory. + Type "patch -p0 < THIS_PATCH_FILE". +---------------------------------------------------------------------- diff --git a/bochs/patches/NOTES b/bochs/patches/NOTES new file mode 100644 index 00000000..7ce20312 --- /dev/null +++ b/bochs/patches/NOTES @@ -0,0 +1,5 @@ +This directory contains patches that are under consideration or being +tested. + +The file HEADER is a nice template for the top of a patch. +Use it if you want. diff --git a/bochs/patches/beos-gui-fabo.capture-filter b/bochs/patches/beos-gui-fabo.capture-filter new file mode 100755 index 0000000000000000000000000000000000000000..c8ad9ac629bfafa27bcc08884e293c794748abd5 GIT binary patch literal 18423 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 UwYRUk*Y8V(o1MD)U3tLvzttzUH2?qr literal 0 HcmV?d00001 diff --git a/bochs/patches/beos-gui-fabo.capture-filter.README b/bochs/patches/beos-gui-fabo.capture-filter.README new file mode 100644 index 00000000..93da2c02 --- /dev/null +++ b/bochs/patches/beos-gui-fabo.capture-filter.README @@ -0,0 +1,20 @@ +Marton Fabo rewrote the BeOS GUI mostly from scratch, +and this "capture filter" goes with his GUI. You must first apply +either patch.beos-gui-fabo or patch.beos-gui-fabo-template. + +Then, according to Marton Fabo: +> Then, you'll need to place capture_filter into +> $HOME/config/add-ons/input_server/filters, this one will enable bochs to +> capture keyboard and mouse input. If you don't put it there, bochs will still +> work to some extent, but it will be much less usable. Compile, and then give +> it a go! + +> You can get back your mouse pointer after enabling the bochs mouse by +> pressing both buttons simultaneously. Caps lock doesn't work yet properly +> (it won't turn off, just when you press Shift next time), and Numlock +> doesn't work at all. I'm working on fixing these. + +Feedback goes to: + +Marton Fabo +morton@eik.bme.hu diff --git a/bochs/patches/bochs-bios-win32.diff b/bochs/patches/bochs-bios-win32.diff new file mode 100755 index 00000000..5f6e29c7 --- /dev/null +++ b/bochs/patches/bochs-bios-win32.diff @@ -0,0 +1,74 @@ +diff -Nurd bios-orig/rombios32.ld bios/rombios32.ld +--- bios-orig/rombios32.ld Sat Jan 26 09:15:27 2008 ++++ bios/rombios32.ld Sat Mar 22 09:29:24 2008 +@@ -1,4 +1,3 @@ +-OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") + OUTPUT_ARCH(i386) + ENTRY(_start); + SECTIONS +diff -Nurd bios-orig/rombios32start.S bios/rombios32start.S +--- bios-orig/rombios32start.S Sat Jan 26 09:15:27 2008 ++++ bios/rombios32start.S Sat Mar 22 09:30:49 2008 +@@ -21,12 +21,12 @@ + #include "rombios.h" + + .globl _start +-.globl smp_ap_boot_code_start +-.globl smp_ap_boot_code_end +-.global smm_relocation_start +-.global smm_relocation_end +-.global smm_code_start +-.global smm_code_end ++.globl _smp_ap_boot_code_start ++.globl _smp_ap_boot_code_end ++.global _smm_relocation_start ++.global _smm_relocation_end ++.global _smm_code_start ++.global _smm_code_end + + _start: + /* clear bss section */ +@@ -36,20 +36,20 @@ + sub %edi, %ecx + rep stosb + +- jmp rombios32_init ++ jmp _rombios32_init + + .code16 +-smp_ap_boot_code_start: ++_smp_ap_boot_code_start: + xor %ax, %ax + mov %ax, %ds + incw CPU_COUNT_ADDR + 1: + hlt + jmp 1b +-smp_ap_boot_code_end: ++_smp_ap_boot_code_end: + + /* code to relocate SMBASE to 0xa0000 */ +-smm_relocation_start: ++_smm_relocation_start: + mov $0x38000 + 0x7efc, %ebx + addr32 mov (%ebx), %al /* revision ID to see if x86_64 or x86 */ + cmp $0x64, %al +@@ -66,10 +66,10 @@ + movw $0xb3, %dx + outb %al, %dx + rsm +-smm_relocation_end: ++_smm_relocation_end: + + /* minimal SMM code to enable or disable ACPI */ +-smm_code_start: ++_smm_code_start: + movw $0xb2, %dx + inb %dx, %al + cmp $0xf0, %al +@@ -95,4 +95,4 @@ + + 2: + rsm +-smm_code_end: ++_smm_code_end: diff --git a/bochs/patches/patch.beos-gui-fabo b/bochs/patches/patch.beos-gui-fabo new file mode 100644 index 00000000..547c25a0 --- /dev/null +++ b/bochs/patches/patch.beos-gui-fabo @@ -0,0 +1,2372 @@ +---------------------------------------------------------------------- +Patch name: patch.beos-gui-fabo +Author: Marton Fabo +Date: Thu, 6 Dec 2001 19:52:18 +0100 (CET) + +Detailed description: +I grabbed the CVS snapshot of 20011129, started with the BeOS GUI code found in +it, rewrote it totally (almost no original code left), and I now have a Bochs +that runs under BeOS quite nicely. New features compared to the BeOS GUI code +found in the above snapshot: + +- color support in text mode (not perfect yet, but not BW at least) +- almost full keyboard capturing (modifier keys work, function keys also, + keypad, arrow keys work, capslock doesn't work properly, numlock not at all. + I need some help about how to tell Bochs to switch those properly) +- full mouse capturing, it works quite great! + +Also see beos-gui-fabo.capture-filter and the associated README. + +I updated this patch file to make it apply with the current CVS version. I have +added the cursor size and cursor hide feature for BeOS. The copy/paste functions +are still to do. +The capture filter works now - we have only the binary in this directory, but +not the source. +-Volker + +Patch was created with: + diff -u +Apply patch to what version: + gui/beos r1.16 +Instructions: + To patch, go to main bochs directory. + Type "patch -p0 < THIS_PATCH_FILE". +---------------------------------------------------------------------- +--- gui/beos.cc Sat Apr 20 09:19:35 2002 ++++ gui/beos.cc Tue Jul 9 20:19:33 2002 +@@ -28,6 +28,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -39,1179 +40,1279 @@ + #include + + #include "bochs.h" +-//#include "icon_bochs.h" ++// #include "icon_bochs.h" + #include "font/vga.bitmap.h" + + #define LOG_THIS bx_gui. + +-#define PAD_NEAREST(n, quantum) (( ((n) + ((quantum) - 1)) / (n) ) * (n)) ++#undef uint8 ++#undef int32 ++#undef uint32 ++ ++#define BOCHS_APP_SIG "application/x-vnd.MandrakeSoft-BeBochs" ++#define SCANCODE_BUFSIZE 20 ++#define MOUSE_BUFSIZE 20 ++#define MOUSE_L 0x00000001 ++#define MOUSE_R 0x00000002 ++#define INITIAL_SCREEN_WIDTH 640 ++#define INITIAL_SCREEN_HEIGHT 350 ++ ++const uint32 MSG_REQUEST_CAPTURE = 'CFrq'; ++const uint32 MSG_START_CAPTURE = 'strt'; ++const uint32 MSG_ALREADY_CAPTURING = 'CFac'; ++const uint32 MSG_CAPTURE_OK = 'CFok'; ++const uint32 MSG_BAD_MESSAGE = 'CFbm'; ++const uint32 MSG_STOP_CAPTURE = 'stop'; ++ ++const uint32 INPUT_TYPE_KEYBOARD = 0x00000001; ++const uint32 INPUT_TYPE_MOUSE = 0x00000002; ++ ++const uint32 MSG_ENQ_COMMAND = 'BCec'; ++ ++// ========== STRUCTS ========== ++ ++struct mouse_event ++{ ++ mouse_event() { } ++ mouse_event(uint32 X, uint32 Y, uint32 buttons): ++ x(X), y(Y), buttonState(buttons) { } ++ uint32 x; ++ uint32 y; ++ uint32 buttonState; ++}; ++ ++// ========== CLASSES ========== ++ ++#define QUEUECLASS(ClassName, ContentType) class ClassName \ ++{ \ ++public: \ ++ ClassName(uint32 maxItems, const char *name): \ ++ fMaxItems(maxItems), \ ++ fHead(0), \ ++ fTail(0) \ ++ { \ ++ fItems = new ContentType[fMaxItems]; \ ++ fName = strdup(name); \ ++ } \ ++ ~ClassName() \ ++ { \ ++ delete [] fItems; \ ++ delete fName; \ ++ } \ ++ bool Enq(const ContentType &item) \ ++ { \ ++ if ( ((fTail + 1) % fMaxItems) == fHead ) \ ++ { \ ++ BX_DEBUG(("%s enqueue: buffer full", fName)); \ ++ return false; \ ++ } \ ++ fItems[fTail] = item; \ ++ fTail = (fTail + 1) % fMaxItems; \ ++ return true; \ ++ } \ ++ bool Deq(ContentType *item) \ ++ { \ ++ if ( fHead == fTail ) \ ++ { \ ++ BX_DEBUG(("%s dequeue: buffer empty", fName)); \ ++ return false; \ ++ } \ ++ *item = fItems[fHead]; \ ++ fHead = (fHead + 1) % fMaxItems; \ ++ return true; \ ++ } \ ++ bool QueueEmpty() { return (fHead == fTail); } \ ++ uint32 ItemCount() { return (fTail > fHead) ? fTail - fHead : fHead + fMaxItems - fTail; } \ ++ ContentType &ItemAt(uint32 index) { return fItems[(fHead + index) % fMaxItems]; } \ ++private: \ ++ ContentType *fItems; \ ++ uint32 fMaxItems; \ ++ uint32 fHead; \ ++ uint32 fTail; \ ++ const char *fName; \ ++} \ ++ ++QUEUECLASS(KeyQueue, uint32); ++QUEUECLASS(MouseQueue, mouse_event); ++typedef void (*handler_func)(void); ++QUEUECLASS(CommandQueue, handler_func); + ++class BochsApplication: public BApplication ++{ ++public: ++ BochsApplication(bx_gui_c *bxGui, int argc, char **argv, ++ uint32 tileWidth, uint32 tileHeight, uint32 headerBarHeight, handler_func powerHandlerFunc); ++ ~BochsApplication(); ++ static int32 runme(void *data); ++ virtual bool QuitRequested(); ++ virtual void Quit(); ++ void BxExit(); ++private: ++ handler_func fPowerHandlerFunc; ++}; + +- +-class BochsApplication : public BApplication { +- ++class BochsWindow: public BWindow ++{ + public: +- BochsApplication(); +- }; ++ BochsWindow(BRect frame); ++ virtual bool QuitRequested(); ++}; + +-class BochsWindow : public BWindow { ++class BochsView: public BView { ++public: ++ BochsView(BRect frame, char *name, uint32 headerHeight, uint32 tileWidth, uint32 tileHeight); ++ ~BochsView(); ++ virtual void AttachedToWindow(); ++ virtual void DetachedFromWindow(); ++ virtual void Draw(BRect updateRect); ++ virtual void KeyDown(const char *bytes, int32 numBytes); ++ virtual void KeyUp(const char *bytes, int32 numBytes); ++ virtual void MouseDown(BPoint point); ++ virtual void MouseUp(BPoint point); ++ virtual void MouseMoved(BPoint point, uint32 transit, const BMessage *message); ++ virtual void MessageReceived(BMessage *msg); ++ virtual void WindowActivated(bool active); ++ virtual void Pulse(); ++ void HandleEvents(); ++ void ClearScreen(); ++ void TextUpdate(uint8 *oldText, uint8 *newText, ++ uint32 cursorX, uint32 cursorY, uint32 rowCount, ++ uint32 cursorShape); ++ void GraphicsTileUpdate(uint8 *tile, uint32 xPos, uint32 yPos); ++ bool PaletteChange(uint32 index, uint32 red, uint32 green, uint32 blue); ++ void DimensionUpdate(uint32 x, uint32 y, uint32 fheight); ++ void HandleEnableMouse(bool enable); ++ uint32 CreateBitmap(const uchar *bitmap, uint32 width, uint32 height); ++ uint32 HeaderbarBitmap(uint32 bitmapID, uint32 alignment, void (*f)(void)); ++ void ReplaceBitmap(uint32 headerBarID, uint32 bitmapID); ++ void ShowHeaderbar(); ++ void GotCapturedInput(BMessage *msg); ++ static void release_mouse(); ++ ++private: ++ void ShowCursor(bool show); ++ uchar ReverseBitorder(uchar b); ++ void CaptureInput(); ++ void ReleaseInput(); ++ ++ BBitmap *fBackBitmap; ++ BView *fBackView; ++ uint32 fLastModifiers; ++ uint32 fLastMouseX, fLastMouseY; ++ uint32 fCursorX, fCursorY; ++ uint8 fCursorValue[2]; ++ uint8 fCursorStart; ++ uint8 fCursorEnd; ++ bool fCursorHide; ++ bool fCursorVisible; ++ bool fInTextMode; ++ BScreen fScreen; ++ uint8 fColorMap[256]; // indices into system colormap ++ BBitmap *fVgafont[256]; ++ BBitmap *fCursorBitmap; ++ uint32 fTileWidth; ++ uint32 fTileHeight; ++ bool fUseStandardInput; ++ bool fMouseEnabled; ++ BHandler *fCaptureTarget; ++ ++ KeyQueue fKeyQueue; ++ MouseQueue fMouseQueue; ++ CommandQueue fCommandQueue; ++ ++ struct ++ { ++ BBitmap *bmap; ++ unsigned xdim; ++ unsigned ydim; ++ } fBitmaps[BX_MAX_PIXMAPS]; ++ uint32 fBitmapCount; ++ ++ struct ++ { ++ BBitmap *bitmap; ++ unsigned xdim; ++ unsigned ydim; ++ unsigned xorigin; ++ unsigned yorigin; ++ unsigned alignment; ++ void (*f)(void); ++ } fHeaderEntries[BX_MAX_HEADERBAR_ENTRIES]; ++ uint32 fHeaderEntryCount; ++ ++ uint32 fHeaderHeight; ++ uint32 fHeaderLeft; // pixels from left ++ uint32 fHeaderRight; // pixels from right ++}; + ++class ModifierFilter: public BMessageFilter ++{ + public: +- BochsWindow(BRect frame); +- virtual bool QuitRequested(); +- virtual void FrameResized(float width, float height); +- }; ++ ModifierFilter(BHandler *target); ++ virtual filter_result Filter(BMessage *msg, BHandler **target); ++private: ++ BHandler *fTarget; ++}; + +-class BochsView : public BView { ++class CaptureTarget: public BHandler ++{ ++public: ++ CaptureTarget(BochsView *myTarget): fMyTarget(myTarget) { } ++ virtual void MessageReceived(BMessage *msg); + private: +- BBitmap *backing_store; +- BView *backing_view; ++ BochsView *fMyTarget; ++}; ++ ++// ========== GLOBAL DATA ========== ++ ++static BochsApplication *bApp = NULL; ++static BochsView *bView = NULL; ++ ++// ========== keytable ========== ++ ++static const uint8 key_to_scancode[] = { ++ 0, ++ BX_KEY_ESC, ++ BX_KEY_F1, ++ BX_KEY_F2, ++ BX_KEY_F3, ++ BX_KEY_F4, ++ BX_KEY_F5, ++ BX_KEY_F6, ++ BX_KEY_F7, ++ BX_KEY_F8, ++ BX_KEY_F9, ++ BX_KEY_F10, ++ BX_KEY_F11, ++ BX_KEY_F12, ++ BX_KEY_PRINT, ++ BX_KEY_SCRL_LOCK, ++ BX_KEY_PAUSE, /*0x10*/ ++ BX_KEY_GRAVE, ++ BX_KEY_1, ++ BX_KEY_2, ++ BX_KEY_3, ++ BX_KEY_4, ++ BX_KEY_5, ++ BX_KEY_6, ++ BX_KEY_7, ++ BX_KEY_8, ++ BX_KEY_9, ++ BX_KEY_0, ++ BX_KEY_MINUS, ++ BX_KEY_EQUALS, ++ BX_KEY_BACKSPACE, ++ BX_KEY_INSERT, ++ BX_KEY_HOME, /*0x20*/ ++ BX_KEY_PAGE_UP, ++ BX_KEY_NUM_LOCK, ++ BX_KEY_KP_DIVIDE, ++ BX_KEY_KP_MULTIPLY, ++ BX_KEY_KP_SUBTRACT, ++ BX_KEY_TAB, ++ BX_KEY_Q, ++ BX_KEY_W, ++ BX_KEY_E, ++ BX_KEY_R, ++ BX_KEY_T, ++ BX_KEY_Y, ++ BX_KEY_U, ++ BX_KEY_I, ++ BX_KEY_O, ++ BX_KEY_P, /*0x30*/ ++ BX_KEY_LEFT_BRACKET, ++ BX_KEY_RIGHT_BRACKET, ++ BX_KEY_BACKSLASH, ++ BX_KEY_DELETE, ++ BX_KEY_END, ++ BX_KEY_PAGE_DOWN, ++ BX_KEY_KP_HOME, ++ BX_KEY_KP_UP, ++ BX_KEY_KP_PAGE_UP, ++ BX_KEY_KP_ADD, ++ BX_KEY_CAPS_LOCK, ++ BX_KEY_A, ++ BX_KEY_S, ++ BX_KEY_D, ++ BX_KEY_F, ++ BX_KEY_G, /*0x40*/ ++ BX_KEY_H, ++ BX_KEY_J, ++ BX_KEY_K, ++ BX_KEY_L, ++ BX_KEY_SEMICOLON, ++ BX_KEY_SINGLE_QUOTE, ++ BX_KEY_ENTER, ++ BX_KEY_KP_LEFT, ++ BX_KEY_KP_5, ++ BX_KEY_KP_RIGHT, ++ BX_KEY_SHIFT_L, ++ BX_KEY_Z, ++ BX_KEY_X, ++ BX_KEY_C, ++ BX_KEY_V, ++ BX_KEY_B, /*0x50*/ ++ BX_KEY_N, ++ BX_KEY_M, ++ BX_KEY_COMMA, ++ BX_KEY_PERIOD, ++ BX_KEY_SLASH, ++ BX_KEY_SHIFT_R, ++ BX_KEY_UP, ++ BX_KEY_KP_END, ++ BX_KEY_KP_DOWN, ++ BX_KEY_KP_PAGE_DOWN, ++ BX_KEY_KP_ENTER, ++ BX_KEY_CTRL_L, ++ BX_KEY_ALT_L, ++ BX_KEY_SPACE, ++ BX_KEY_ALT_R, ++ BX_KEY_CTRL_R, /*0x60*/ ++ BX_KEY_LEFT, ++ BX_KEY_DOWN, ++ BX_KEY_RIGHT, ++ BX_KEY_KP_INSERT, ++ BX_KEY_KP_DELETE ++}; ++ ++// ========== class BochsApplication definitions ========== ++ ++BochsApplication::BochsApplication(bx_gui_c *bxGui, int argc, char **argv, ++ uint32 tileWidth, uint32 tileHeight, uint32 header_bar_y, handler_func powerHandlerFunc): ++ BApplication(BOCHS_APP_SIG), ++ fPowerHandlerFunc(powerHandlerFunc) ++{ ++ bxGui->put("BGUI"); ++ ++ if (bx_options.Oprivate_colormap->get ()) ++ { ++ BX_INFO(( "BeOS: private_colormap option not handled yet.")); ++ } + +-public: +- BochsView(BRect frame, char *name); +- ~BochsView(); +- virtual void AttachedToWindow(); +- virtual void Draw(BRect updateRect); +- virtual void KeyDown(const char *bytes, int32 numBytes); +- virtual void KeyUp(const char *bytes, int32 numBytes); +- virtual void MouseDown(BPoint point); +- virtual void MouseUp(BPoint point); +- virtual void MouseMoved(BPoint point, +- uint32 transit, const BMessage *message); +- void DrawBitmap(const BBitmap *aBitmap, BPoint where); +- void FillRect(BRect r, pattern p = B_SOLID_HIGH); +- void SetHighColor(uchar r, uchar g, uchar b, uchar a = 255); +- void SetLowColor(uchar r, uchar g, uchar b, uchar a = 255); +- void SetFont(const BFont *font, uint32 mask = B_FONT_ALL); +- void set_text_colors(void); +- void set_inv_text_colors(void); +- void set_headerbar_colors(void); +- }; +- +- +-void GUI_end(void); +-void enq_key_event(Bit32u key, Bit32u press_release); +-Bit32u deq_key_event(void); +-#define SCANCODE_BUFSIZE 20 +-static Bit32u keyevents[SCANCODE_BUFSIZE]; +-static unsigned head=0, tail=0; +-static bool view_attached = 0; +- +-static BochsApplication *myApplication = NULL; +-static BochsWindow *aWindow = NULL; +-static BochsView *aView = NULL; +-static BView *canvas = NULL; +-static uint8 cmap_index[256]; // indeces into system colormap +- +-static BRect rect; +-static BPoint image_origin; +-static BBitmap *image = NULL; +-static BScreen *screen; +-static unsigned long rowsize_padded=0; +-static uint8 *rawdata = NULL; +- +-//static int rows=25, columns=80; +- +-static unsigned font_width, font_height; +-static Bit8u blank_line[80]; +-static unsigned dimension_x, dimension_y; +- +-//static unsigned imDepth, imWide, imBPP; +- +-// current cursor coordinates +-//IRA=> Start +-static BPoint current; +-static BPoint previous; +-static Bit8u mouse_button_state = 0; +-//IRA=> End +-//static int prev_x=-1, prev_y=-1; +-//static int current_x=-1, current_y=-1; +- +-static unsigned prev_block_cursor_x=0; +-static unsigned prev_block_cursor_y=0; +- +-static void headerbar_click(int x, int y); +- +-Bit8u ascii_to_scancode[0x7f] = { +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0x39, 0x02, 0x28, 0x04, 0x05, 0x06, 0x08, 0x28, /* !"#$%&' */ +- 0x0a, 0x0b, 0x09, 0x0d, 0x33, 0x0c, 0x34, 0x35, /* ()*+,-./ */ +- 0x0b, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, /* 01234567 */ +- 0x09, 0x0a, 0x27, 0x27, 0x33, 0x0d, 0x34, 0x35, /* 89:;<=>? */ +- 0x03, 0x1e, 0x30, 0x2e, 0x20, 0x12, 0x21, 0x22, /* @ABCDEFG */ +- 0x23, 0x17, 0x24, 0x25, 0x26, 0x32, 0x31, 0x18, /* HIJKLMNO */ +- 0x19, 0x10, 0x13, 0x1f, 0x14, 0x16, 0x2f, 0x11, /* PQRSTUVW */ +- 0x2d, 0x15, 0x2c, 0x1a, 0x2b, 0x1b, 0x07, 0x0c, /* XYZ[\]^_ */ +- 0x29, 0x1e, 0x30, 0x2e, 0x20, 0x12, 0x21, 0x22, /* `abcdefg */ +- 0x23, 0x17, 0x24, 0x25, 0x26, 0x32, 0x31, 0x18, /* hijklmno */ +- 0x19, 0x10, 0x13, 0x1f, 0x14, 0x16, 0x2f, 0x11, /* pqrstuvw */ +- 0x2d, 0x15, 0x2c, 0x1a, 0x2b, 0x1b, 0x29 /* xyz{|}~ */ +- }; +- +-extern Bit8u graphics_snapshot[32 * 1024]; +-//extern pc_keyb_c *pc_keyboard; +- +- +- +- +-unsigned col_vals[256], curr_foreground, curr_background; +- +-static unsigned x_tilesize, y_tilesize; +- +-struct { +- BBitmap *bmap; +- unsigned xdim; +- unsigned ydim; +- } bx_bitmaps[BX_MAX_PIXMAPS]; +-unsigned bx_bitmap_entries = 0; +- +-static struct { +- BBitmap *bitmap; +- unsigned xdim; +- unsigned ydim; +- unsigned xorigin; +- unsigned yorigin; +- unsigned alignment; +- void (*f)(void); +- } bx_headerbar_entry[BX_MAX_HEADERBAR_ENTRIES]; +-static unsigned bx_headerbar_y = 0; +-static unsigned bx_headerbar_entries = 0; +-static unsigned bx_bitmap_left_xorigin = 0; // pixels from left +-static unsigned bx_bitmap_right_xorigin = 0; // pixels from right +- +-static void headerbar_click(int x, int y); +-static unsigned char reverse_bitorder(unsigned char b); +-static void create_vga_font(void); +-static BBitmap *vgafont[256]; +- +-static bx_gui_c *bx_gui_c_ptr; +- +- void +-bx_gui_c::specific_init(bx_gui_c *th, int argc, char **argv, +- unsigned tilewidth, unsigned tileheight, +- unsigned header_bar_y) +-{ +- unsigned i; +-#if BX_CPU_LEVEL < 2 +- char *window_name = "Bochs 8086 emulator, http://world.std.com/~bochs"; +-#elif BX_CPU_LEVEL == 2 +- char *window_name = "Bochs 80286 emulator, http://world.std.com/~bochs"; +-#elif BX_CPU_LEVEL == 3 +- char *window_name = "Bochs 80386 emulator, http://world.std.com/~bochs"; +-#else +- char *window_name = "Bochs 80386+ emulator, http://world.std.com/~bochs"; +-#endif +- +- bx_gui_c_ptr = th; +-UNUSED(argc); +-UNUSED(argv); +-UNUSED(window_name); +- th->put("BGUI"); +- +-if (bx_options.Oprivate_colormap->get ()) { +- BX_INFO(( "BeOS: private_colormap option not handled yet.")); +- } +- +- x_tilesize = tilewidth; +- y_tilesize = tileheight; +- bx_headerbar_y = header_bar_y; +- +- for (i=0; i<80; i++) { +- blank_line[i] = ' '; +- } +- +- +- font_width = 8; +- font_height = 16; +- +- // width = columns * font_width; +- // height = rows * font_height; +- +-BX_INFO(("font_width = %u", (unsigned) font_width)); +-BX_INFO(("font_height = %u", (unsigned) font_height)); +- +- // Create pixmap of depth 1 (bitmap) for icon +- // icon_pixmap = XCreateBitmapFromData(bx_x_display, win, +- // (char *) bochs_icon_bits, bochs_icon_width, bochs_icon_height); +- +- curr_background = 0; +- // XSetBackground(bx_x_display, gc, col_vals[curr_background]); +- curr_foreground = 1; +- // XSetForeground(bx_x_display, gc, col_vals[curr_foreground]); +- //XGrabPointer( bx_x_display, win, True, 0, GrabModeAsync, GrabModeAsync, +- // win, None, CurrentTime ); +- //XFlush(bx_x_display); +- +- myApplication = new BochsApplication(); +- +- // wait until window on screen +- while (1) { +- aWindow->Lock(); +- if (aWindow->IsHidden()) { +- aWindow->Unlock(); +- continue; +- } +- aWindow->Unlock(); +- break; +- } +- +- screen = new BScreen; +- // start out with all color map indeces pointing to Black +- cmap_index[0] = screen->IndexForColor(0, 0, 0); +- for (unsigned i=1; i<256; i++) { +- cmap_index[i] = cmap_index[0]; +- } +- +- rect.Set(0,0, x_tilesize-1, y_tilesize-1); +- image = new BBitmap(rect, B_COLOR_8_BIT); +- rowsize_padded = PAD_NEAREST(x_tilesize, sizeof(int32)); +- rawdata = new uint8[rowsize_padded * y_tilesize]; +- +- create_vga_font(); +-} +- +- +- +- void +-bx_gui_c::handle_events(void) +-{ +- Bit32u key; +- +- while ( head != tail ) { +- key = deq_key_event(); +- bx_devices.keyboard->gen_scancode(key); +- } +-//IRA=> Start +- if (aView) { +- unsigned long buttons; +- aView->LockLooper(); +- aView->GetMouse(¤t, &buttons, false); +- aView->UnlockLooper(); +- +- Bit8u newstate = 0; //please note: 2nd and 3rd button are mapped the same +- if (buttons & B_PRIMARY_MOUSE_BUTTON) +- newstate |= 0x01; +- if (buttons & B_SECONDARY_MOUSE_BUTTON) +- newstate |= 0x02; +- if (buttons & B_TERTIARY_MOUSE_BUTTON) +- newstate |= 0x02; +- +- if (current != previous || +- mouse_button_state != newstate) { +- int dx = (int)(current.x - previous.x) *2; +- int dy = -(int)((current.y - previous.y) *2); +- bx_devices.keyboard->mouse_motion( dx, dy, newstate); +- mouse_button_state = newstate; +- previous = current; +- } +- } +-//IRA=> End +-} +- +- void +-bx_gui_c::flush(void) +-{ +- if (view_attached) +- aView->Flush(); +-} +- +- +- void +-bx_gui_c::clear_screen(void) +-{ +- aWindow->Lock(); +- aView->FillRect(BRect(0, bx_headerbar_y, dimension_x-1, dimension_y-1), B_SOLID_LOW); +- aWindow->Unlock(); +-} +- +- +- +- void +-bx_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, +- unsigned long cursor_x, unsigned long cursor_y, +- Bit16u cursor_state, unsigned nrows) +-{ +- unsigned i, x, y; +- BPoint point; +- unsigned char achar; +- unsigned nchars, ncols; +- +- aWindow->Lock(); +- +- // Number of characters on screen, variable number of rows +- ncols = dimension_x/8; +- nchars = ncols*nrows; +- +- // first draw over character at original block cursor location +- if ( (prev_block_cursor_y*ncols + prev_block_cursor_x) < nchars ) { +- achar = new_text[(prev_block_cursor_y*ncols + prev_block_cursor_x)*2]; +- point.Set(prev_block_cursor_x*8, prev_block_cursor_y*16 + bx_headerbar_y); +- aView->DrawBitmap(vgafont[achar], point ); +- } +- +- for (i=0; iDrawBitmap(vgafont[achar], point ); +- } +- } +- +- prev_block_cursor_x = cursor_x; +- prev_block_cursor_y = cursor_y; +- +- // now draw character at new block cursor location in reverse +- if ( (cursor_y*ncols + cursor_x) < nchars ) { +- achar = new_text[(cursor_y*ncols + cursor_x)*2]; +- point.Set(cursor_x*8, cursor_y*16 + bx_headerbar_y); +- aView->set_inv_text_colors(); +- aView->DrawBitmap(vgafont[achar], point ); +- aView->set_text_colors(); +- } ++ // ------------------------------- ++ ++ BRect rect(0, 0, INITIAL_SCREEN_WIDTH - 1, INITIAL_SCREEN_HEIGHT + header_bar_y); ++ ++ BochsWindow *window = new BochsWindow(rect.OffsetToCopy(5, 80)); ++ ++ bView = new BochsView(rect, "BochsView", header_bar_y, tileWidth, tileHeight); + +- aWindow->Unlock(); ++ // add view to window ++ window->AddChild(bView); ++ ++ // make window visible ++ window->Show(); + } + +- int +-bx_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) ++BochsApplication::~BochsApplication() + { +- return 0; ++ bApp = NULL; + } + +- int +-bx_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) ++int32 BochsApplication::runme(void *data) + { +- return 0; ++ be_app->Lock(); ++ be_app->Run(); + } + +- +- void +-bx_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) ++bool BochsApplication::QuitRequested() + { +- for (unsigned y=0; yLock(); +- image->SetBits(rawdata, rowsize_padded * y_tilesize, 0, B_COLOR_8_BIT); +- image_origin.Set(x0, y0 + bx_headerbar_y); +- +- aView->DrawBitmap( image, image_origin ); +- aWindow->Unlock(); ++ BMessage msg(MSG_ENQ_COMMAND); ++ msg.AddPointer("command", (void*)fPowerHandlerFunc); ++ bView->Window()->PostMessage(&msg, bView); ++ return false; + } + +- +- Boolean +-bx_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) ++void BochsApplication::Quit() + { +- cmap_index[index] = screen->IndexForColor( +- red, green, blue); +- return(1); ++ uint32 lockCount = 0; ++ while (IsLocked()) ++ { ++ Unlock(); ++ lockCount++; ++ } ++ bView->LockLooper(); ++ bView->Window()->Close(); ++ while (lockCount--) Lock(); + } + +- +- void +-bx_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight) ++void BochsApplication::BxExit() + { +- if (fheight > 0) { +- if (fheight != 16) { +- y = y * 16 / fheight; +- } +- } +- aWindow->Lock(); +- aWindow->ResizeTo(x, y + bx_headerbar_y); +- aWindow->Unlock(); ++ if (Lock()) Quit(); + } + ++// ========== class BochsWindow definitions ========== + +-////////////////////////////////////////////////////// +- +- +- void +-GUI_end() ++BochsWindow::BochsWindow(BRect frame): ++ BWindow(frame, "Bochs", B_TITLED_WINDOW, B_NOT_RESIZABLE) + { +- //myApplication->Run(); + +- delete(myApplication); + } + +-BochsApplication::BochsApplication() +- : BApplication("application/x-vnd.Be-Bochs") ++bool BochsWindow::QuitRequested() + { +- BRect aRect; +- +- int left, right, top, bottom; +- left = 5; +- top = 80; +- dimension_x = 640; +- dimension_y = 480 + bx_headerbar_y; +- right = left + dimension_x - 1; +- bottom = top + dimension_y - 1; +- +- // set up a rectangle and instantiate a new window +- aRect.Set(left, top, right, bottom); +- aWindow = new BochsWindow(aRect); +- +- // set up a rectangle and instantiate a new view +- // view rect should be same size as window rect but with left top at (0, 0) +- aRect.OffsetTo(B_ORIGIN); +- aView = new BochsView(aRect, "BochsView"); +- aView->SetViewColor(0, 0, 0); +- +- aView->set_text_colors(); +- +- // add view to window +- aWindow->AddChild(aView); +- +- // make window visible +- aWindow->Show(); ++ be_app->PostMessage(B_QUIT_REQUESTED); ++ return false; + } + +-//void set_palette_entry(long i,rgb_color c); ++// ========== class BochsView definitions ========== + +-BochsWindow::BochsWindow(BRect frame) +- : BWindow(frame, "BeBochs V1.3.pre compiled Bernd Korz", B_TITLED_WINDOW, B_NOT_RESIZABLE) +-{ ++BochsView::BochsView(BRect rect, char *name, uint32 headerHeight, uint32 tileWidth, uint32 tileHeight): ++ BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW | B_PULSE_NEEDED), ++ fLastModifiers(0), ++ fCursorX(0), fCursorY(0), ++ fCursorHide(false), ++ fCursorVisible(false), ++ fInTextMode(true), ++ fTileWidth(tileWidth), ++ fTileHeight(tileHeight), ++ fUseStandardInput(true), ++ fMouseEnabled(false), ++ fKeyQueue(SCANCODE_BUFSIZE, "keyboard queue"), ++ fMouseQueue(MOUSE_BUFSIZE, "mouse queue"), ++ fCommandQueue(10, "headerbar queue"), ++ fBitmapCount(0), ++ fHeaderEntryCount(0), ++ fHeaderHeight(headerHeight), ++ fHeaderLeft(0), ++ fHeaderRight(0) ++{ ++ SetViewColor(0, 0, 0); ++ fBackBitmap = new BBitmap(rect, B_BITMAP_ACCEPTS_VIEWS, B_CMAP8); ++ fBackView = new BView(rect,"BackView", B_FOLLOW_ALL, B_WILL_DRAW); ++ fBackView->SetViewColor(0, 0, 0); ++ fBackBitmap->AddChild(fBackView); ++ ++ fCaptureTarget = new CaptureTarget(this); ++ ++ // start out with all color map indeces pointing to Black ++ fColorMap[0] = fScreen.IndexForColor(0, 0, 0); ++ for (unsigned i=1; i<256; i++) ++ { ++ fColorMap[i] = fColorMap[0]; ++ } ++ ++ BX_INFO(( "BeOS: creating VGA font from bitmaps" )); ++ ++ // VGA font is 8wide x 16high ++ uint8 *bits; ++ for (uint32 c = 0; c < 256; c++) ++ { ++ fVgafont[c] = new BBitmap(BRect(0,0, 7,15), B_MONOCHROME_1_BIT); ++ if (!fVgafont[c]) ++ { ++ BX_PANIC(("beos: could not create bitmap")); ++ } ++ ++ int32 bytesPerRow = fVgafont[c]->BytesPerRow(); ++ bits = (uint8*)fVgafont[c]->Bits(); ++ memset(bits, 0, fVgafont[c]->BitsLength()); ++ for (uint32 i = 0; i < 16; i++) ++ { ++ bits[i * bytesPerRow] = ReverseBitorder(bx_vgafont[c].data[i]); ++ } ++ } + } + +-bool BochsWindow::QuitRequested() ++BochsView::~BochsView() + { +- be_app->PostMessage(B_QUIT_REQUESTED); +- return(TRUE); ++ delete fBackBitmap; ++ for (int32 i = 0; i < 256; i++) delete fVgafont[i]; ++ delete fCursorBitmap; ++ delete fCaptureTarget; ++ bView = NULL; + } + +- +- void +-BochsWindow::FrameResized(float width, float height) ++void BochsView::AttachedToWindow() + { +- dimension_x = unsigned(width); +- dimension_y = unsigned(height) + bx_headerbar_y; +- if ( bx_gui_c_ptr ) +- bx_gui_c_ptr->show_headerbar(); ++ SetViewColor(B_TRANSPARENT_COLOR); ++ MakeFocus(true); ++ Window()->AddFilter(new ModifierFilter(this)); ++ be_app->AddHandler(fCaptureTarget); ++ BMessage modifiersMessage(B_MODIFIERS_CHANGED); ++ modifiersMessage.AddInt32("modifiers", (int32)modifiers()); ++ Window()->PostMessage(&modifiersMessage, this); ++ BPoint p; ++ uint32 buttons; ++ GetMouse(&p, &buttons); ++ fLastMouseX = (uint32)p.x; ++ fLastMouseY = (uint32)p.y; ++} ++ ++void BochsView::DetachedFromWindow() ++{ ++ if (be_app->Lock()) ++ { ++ be_app->RemoveHandler(fCaptureTarget); ++ be_app->Unlock(); ++ } + } + +- +-//------------------------------ +- +- +-BochsView::BochsView(BRect rect, char *name) +- : BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW) ++void BochsView::Draw(BRect rect) + { +- backing_store = new BBitmap(rect, B_BITMAP_ACCEPTS_VIEWS, B_COLOR_8_BIT); +- backing_view = new BView(rect,"backing store", B_FOLLOW_ALL, B_WILL_DRAW); +- backing_store->AddChild(backing_view); ++ if (fBackBitmap->Lock()) ++ { ++ fBackView->Sync(); ++ fBackBitmap->Unlock(); ++ } ++ DrawBitmapAsync(fBackBitmap, rect, rect); ++} ++ ++void BochsView::MouseDown(BPoint point) ++{ ++ if (point.y < fHeaderHeight) ++ { ++ int xorigin; ++ for (unsigned i = 0; i < fHeaderEntryCount; i++) ++ { ++ if (fHeaderEntries[i].alignment == BX_GRAVITY_LEFT) ++ xorigin = fHeaderEntries[i].xorigin; ++ else ++ xorigin = bView->Bounds().IntegerWidth() - fHeaderEntries[i].xorigin; ++ if ( (point.x >= xorigin) && (point.x < (xorigin + int(fHeaderEntries[i].xdim))) ) ++ { ++ fCommandQueue.Enq(fHeaderEntries[i].f); ++ break; ++ } ++ } ++ return; ++ } ++ uint32 buttons; ++ Window()->CurrentMessage()->FindInt32("buttons", (int32*)&buttons); ++ ++ fMouseQueue.Enq(mouse_event(0, 0, ++ ((buttons & B_PRIMARY_MOUSE_BUTTON) ? MOUSE_L : 0) | ++ ((buttons & B_SECONDARY_MOUSE_BUTTON) ? MOUSE_R : 0))); ++ ++ BX_DEBUG(("mousedown()")); + } + +- void +-BochsView::set_text_colors(void) ++void BochsView::MouseUp(BPoint point) + { +- aView->SetHighColor(255, 255, 255); +- aView->SetLowColor(0, 0, 0); ++ uint32 buttons; ++ Window()->CurrentMessage()->FindInt32("buttons", (int32*)&buttons); ++ ++ fMouseQueue.Enq(mouse_event(0, 0, ++ ((buttons & B_PRIMARY_MOUSE_BUTTON) ? MOUSE_L : 0) | ++ ((buttons & B_SECONDARY_MOUSE_BUTTON) ? MOUSE_R : 0))); ++ ++ BX_DEBUG(( "mouseup()" )); ++} ++ ++void BochsView::MouseMoved(BPoint point, uint32 transit, const BMessage *message) ++{ ++ if (!fUseStandardInput && fMouseEnabled) ++ { ++ be_app->ObscureCursor(); ++ return; ++ } ++ uint32 buttons; ++ Window()->CurrentMessage()->FindInt32("buttons", (int32*)&buttons); ++ fMouseQueue.Enq(mouse_event((uint32)point.x - fLastMouseX, fLastMouseY - (uint32)point.y, ++ ((buttons & B_PRIMARY_MOUSE_BUTTON) ? MOUSE_L : 0) | ++ ((buttons & B_SECONDARY_MOUSE_BUTTON) ? MOUSE_R : 0))); ++ fLastMouseX = (uint32)point.x; ++ fLastMouseY = (uint32)point.y; ++ BX_DEBUG(( "mousemoved()" )); + } + +- void +-BochsView::set_inv_text_colors(void) ++void BochsView::KeyDown(const char *bytes, int32 numBytes) + { +- aView->SetHighColor(0, 0, 0); +- aView->SetLowColor(255, 255, 255); ++ int32 key; ++ Window()->CurrentMessage()->FindInt32("key", &key); ++ fKeyQueue.Enq(key_to_scancode[key] | BX_KEY_PRESSED); + } + +- void +-BochsView::set_headerbar_colors(void) ++void BochsView::KeyUp(const char *bytes, int32 numBytes) + { +- aView->SetHighColor(0, 0, 0); +- aView->SetLowColor(255, 255, 255); ++ int32 key; ++ Window()->CurrentMessage()->FindInt32("key", &key); ++ fKeyQueue.Enq(key_to_scancode[key] | BX_KEY_RELEASED); ++} ++ ++void BochsView::MessageReceived(BMessage *msg) ++{ ++ switch (msg->what) ++ { ++ case MSG_ENQ_COMMAND: ++ { ++ handler_func command; ++ msg->FindPointer("command", (void**)&command); ++ fCommandQueue.Enq(command); ++ } ++ break; ++ case B_MODIFIERS_CHANGED: ++ { ++ uint32 modifiers = 0; ++ msg->FindInt32("modifiers", (int32*)&modifiers); ++ //fprintf(stderr, "# modifiers: %08x -> %08x\n", fLastModifiers, modifiers); ++ if (!(fLastModifiers & B_LEFT_SHIFT_KEY) && (modifiers & B_LEFT_SHIFT_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_SHIFT_L | BX_KEY_PRESSED); ++ //fprintf(stderr, "# left shift down\n"); ++ } ++ else if ((fLastModifiers & B_LEFT_SHIFT_KEY) && !(modifiers & B_LEFT_SHIFT_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_SHIFT_L | BX_KEY_RELEASED); ++ //fprintf(stderr, "# left shift up\n"); ++ } ++ ++ if (!(fLastModifiers & B_RIGHT_SHIFT_KEY) && (modifiers & B_RIGHT_SHIFT_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_SHIFT_R | BX_KEY_PRESSED); ++ //fprintf(stderr, "# right shift down\n"); ++ } ++ else if ((fLastModifiers & B_RIGHT_SHIFT_KEY) && !(modifiers & B_RIGHT_SHIFT_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_SHIFT_R | BX_KEY_RELEASED); ++ //fprintf(stderr, "# right shift up\n"); ++ } ++ ++ if (!(fLastModifiers & B_CONTROL_KEY) && (modifiers & B_CONTROL_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_CTRL_L | BX_KEY_PRESSED); ++ //fprintf(stderr, "# left ctrl down\n"); ++ } ++ else if ((fLastModifiers & B_CONTROL_KEY) && !(modifiers & B_CONTROL_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_CTRL_L | BX_KEY_RELEASED); ++ //fprintf(stderr, "# left ctrl up\n"); ++ } ++ ++ if (!(fLastModifiers & B_OPTION_KEY) && (modifiers & B_OPTION_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_CTRL_R | BX_KEY_PRESSED); ++ //fprintf(stderr, "# right ctrl down\n"); ++ } ++ else if ((fLastModifiers & B_OPTION_KEY) && !(modifiers & B_OPTION_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_CTRL_R | BX_KEY_RELEASED); ++ //fprintf(stderr, "# right ctrl up\n"); ++ } ++ ++ if (!(fLastModifiers & B_LEFT_COMMAND_KEY) && (modifiers & B_LEFT_COMMAND_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_ALT_L | BX_KEY_PRESSED); ++ //fprintf(stderr, "# left alt down\n"); ++ } ++ else if ((fLastModifiers & B_LEFT_COMMAND_KEY) && !(modifiers & B_LEFT_COMMAND_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_ALT_L | BX_KEY_RELEASED); ++ //fprintf(stderr, "# left alt up\n"); ++ } ++ ++ if (!(fLastModifiers & B_RIGHT_COMMAND_KEY) && (modifiers & B_RIGHT_COMMAND_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_ALT_R | BX_KEY_PRESSED); ++ //fprintf(stderr, "# right alt down\n"); ++ } ++ else if ((fLastModifiers & B_RIGHT_COMMAND_KEY) && !(modifiers & B_RIGHT_COMMAND_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_ALT_R | BX_KEY_RELEASED); ++ //fprintf(stderr, "# right alt up\n"); ++ } ++ ++ if (!(fLastModifiers & B_CAPS_LOCK) && (modifiers & B_CAPS_LOCK)) ++ { ++ fKeyQueue.Enq(BX_KEY_CAPS_LOCK | BX_KEY_PRESSED); ++ fKeyQueue.Enq(BX_KEY_CAPS_LOCK | BX_KEY_RELEASED); ++ //fprintf(stderr, "# caps down\n"); ++ } ++ else if ((fLastModifiers & B_CAPS_LOCK) && !(modifiers & B_CAPS_LOCK)) ++ { ++ fKeyQueue.Enq(BX_KEY_CAPS_LOCK | BX_KEY_PRESSED); ++ fKeyQueue.Enq(BX_KEY_CAPS_LOCK | BX_KEY_RELEASED); ++ //fprintf(stderr, "# caps up\n"); ++ } ++ ++ if (!(fLastModifiers & B_SCROLL_LOCK) && (modifiers & B_SCROLL_LOCK)) ++ { ++ fKeyQueue.Enq(BX_KEY_SCRL_LOCK | BX_KEY_PRESSED); ++ fKeyQueue.Enq(BX_KEY_SCRL_LOCK | BX_KEY_RELEASED); ++ //fprintf(stderr, "# scrollock down\n"); ++ } ++ else if ((fLastModifiers & B_SCROLL_LOCK) && !(modifiers & B_SCROLL_LOCK)) ++ { ++ fKeyQueue.Enq(BX_KEY_SCRL_LOCK | BX_KEY_PRESSED); ++ fKeyQueue.Enq(BX_KEY_SCRL_LOCK | BX_KEY_RELEASED); ++ //fprintf(stderr, "# scrollock up\n"); ++ } ++ ++ if (!(fLastModifiers & B_NUM_LOCK) && (modifiers & B_NUM_LOCK)) ++ { ++ fKeyQueue.Enq(BX_KEY_NUM_LOCK | BX_KEY_PRESSED); ++ fKeyQueue.Enq(BX_KEY_NUM_LOCK | BX_KEY_RELEASED); ++ //fprintf(stderr, "# num down\n"); ++ } ++ else if ((fLastModifiers & B_NUM_LOCK) && !(modifiers & B_NUM_LOCK)) ++ { ++ fKeyQueue.Enq(BX_KEY_NUM_LOCK | BX_KEY_PRESSED); ++ fKeyQueue.Enq(BX_KEY_NUM_LOCK | BX_KEY_RELEASED); ++ //fprintf(stderr, "# num up\n"); ++ } ++ fLastModifiers = modifiers; ++ } ++ break; ++ default: ++ BView::MessageReceived(msg); ++ } ++} ++ ++void BochsView::GotCapturedInput(BMessage *msg) ++{ ++ switch (msg->what) ++ { ++ case B_MOUSE_MOVED: ++ { ++ uint32 buttons; ++ msg->FindInt32("buttons", (int32*)&buttons); ++ BPoint motion; ++ msg->FindPoint("motion", &motion); ++ fMouseQueue.Enq(mouse_event((uint32)motion.x, -(uint32)motion.y, ++ ((buttons & B_PRIMARY_MOUSE_BUTTON) ? MOUSE_L : 0) | ++ ((buttons & B_SECONDARY_MOUSE_BUTTON) ? MOUSE_R : 0))); ++ BX_DEBUG(( "mousemoved()" )); ++ } ++ break; ++ case B_MOUSE_DOWN: ++ case B_MOUSE_UP: ++ { ++ uint32 buttons; ++ msg->FindInt32("buttons", (int32*)&buttons); ++ if (buttons & B_PRIMARY_MOUSE_BUTTON && buttons & B_SECONDARY_MOUSE_BUTTON) ++ { ++ fCommandQueue.Enq(release_mouse); ++ break; ++ } ++ ++ fMouseQueue.Enq(mouse_event(0, 0, ++ ((buttons & B_PRIMARY_MOUSE_BUTTON) ? MOUSE_L : 0) | ++ ((buttons & B_SECONDARY_MOUSE_BUTTON) ? MOUSE_R : 0))); ++ ++ //BX_DEBUG(("mousedown()")); ++ } ++ break; ++ case B_KEY_DOWN: ++ case B_UNMAPPED_KEY_DOWN: ++ { ++ int32 key; ++ msg->FindInt32("key", &key); ++ fKeyQueue.Enq(key_to_scancode[key] | BX_KEY_PRESSED); ++ } ++ break; ++ case B_KEY_UP: ++ case B_UNMAPPED_KEY_UP: ++ { ++ int32 key; ++ msg->FindInt32("key", &key); ++ fKeyQueue.Enq(key_to_scancode[key] | BX_KEY_RELEASED); ++ } ++ } ++} ++ ++void BochsView::WindowActivated(bool active) ++{ ++ if (active) CaptureInput(); ++ else ReleaseInput(); ++} ++ ++void BochsView::CaptureInput() ++{ ++ BMessenger inputServer("application/x-vnd.Be-input_server"); ++ BMessage msg(MSG_REQUEST_CAPTURE); ++ msg.AddMessenger("target", BMessenger(fCaptureTarget)); ++ msg.AddInt32("command", MSG_START_CAPTURE); ++ msg.AddInt32("input", (fMouseEnabled ? INPUT_TYPE_MOUSE : 0) | INPUT_TYPE_KEYBOARD); ++ inputServer.SendMessage(&msg, &msg); ++ if (msg.what == MSG_CAPTURE_OK) ++ { ++ BX_INFO(( "capturing keyboard%s input", (fMouseEnabled ? " and mouse" : ""))); ++ fUseStandardInput = false; ++ if (fMouseEnabled) be_app->ObscureCursor(); ++ else be_app->ShowCursor(); ++ } ++ else ++ { ++ BX_ERROR(( "couldn't set up input capturing, using loser method" )); ++ fUseStandardInput = true; ++ BMessage modifiersMessage(B_MODIFIERS_CHANGED); ++ modifiersMessage.AddInt32("modifiers", (int32)modifiers()); ++ Window()->PostMessage(&modifiersMessage, this); ++ } ++} ++ ++void BochsView::ReleaseInput() ++{ ++ BMessenger inputServer("application/x-vnd.Be-input_server"); ++ BMessage msg(MSG_REQUEST_CAPTURE); ++ msg.AddInt32("command", MSG_STOP_CAPTURE); ++ inputServer.SendMessage(&msg); ++ be_app->ShowCursor(); ++ fUseStandardInput = true; ++} ++ ++void BochsView::Pulse() ++{ ++ if (!fInTextMode) return; ++ if (fBackView->LockLooper()) ++ { ++ if (fCursorHide) ++ { ++ if (fCursorVisible) ShowCursor(false); ++ } ++ else ++ { ++ ShowCursor(!fCursorVisible); ++ } ++ fBackView->UnlockLooper(); ++ } ++} ++ ++void BochsView::HandleEvents() ++{ ++ if (LockLooper()) ++ { ++ while (!fKeyQueue.QueueEmpty()) ++ { ++ uint32 key; ++ fKeyQueue.Deq(&key); ++ bx_devices.keyboard->gen_scancode(key); ++ } ++ ++ while (!fMouseQueue.QueueEmpty()) ++ { ++ mouse_event event; ++ fMouseQueue.Deq(&event); ++ if (fMouseEnabled) bx_devices.keyboard->mouse_motion(event.x, ++ event.y, event.buttonState); ++ } ++ ++ while (!fCommandQueue.QueueEmpty()) ++ { ++ void (*f)(void); ++ fCommandQueue.Deq(&f); ++ f(); ++ } ++ UnlockLooper(); ++ } ++} ++ ++void BochsView::ClearScreen() ++{ ++ if (fBackBitmap->Lock()) ++ { ++ fBackView->SetLowColor(0, 0, 0); ++ BRect rect(fBackView->Bounds()); ++ rect.top += fHeaderHeight; ++ fBackView->FillRect(rect, B_SOLID_LOW); ++ fBackBitmap->Unlock(); ++ } ++ if (LockLooper()) ++ { ++ Invalidate(); ++ UnlockLooper(); ++ } ++} ++ ++void BochsView::TextUpdate(uint8 *oldText, uint8 *newText, ++ uint32 cursorX, uint32 cursorY, uint32 rowCount, ++ uint32 cursorShape) ++{ ++ if (LockLooper() && fBackBitmap->Lock()) ++ { ++ fInTextMode = true; ++ bool cursorWasShown = fCursorVisible; ++ BRect rect(Bounds().OffsetToSelf(0, 0)); ++ uint32 colCount = (uint32)rect.IntegerWidth()/8; ++ fCursorStart = (uint8)((cursorShape >> 8) & 0x3f); ++ fCursorEnd = (uint8)(cursorShape & 0x1f); ++ ShowCursor(false); ++ for (uint32 i = 0; i < rowCount * colCount * 2; i += 2) ++ { ++ if ( (oldText[i] != newText[i]) || ++ (oldText[i+1]!=newText[i+1]) ) ++ { ++ uint8 achar = newText[i]; ++ uint8 acolor = newText[i + 1]; ++ ++ fBackView->SetLowColor(fScreen.ColorForIndex(fColorMap[acolor >> 4])); ++ fBackView->SetHighColor(fScreen.ColorForIndex(fColorMap[acolor & 0x0F])); ++ ++ BPoint point(((i / 2) % colCount) * 8, (i/2) / colCount * 16 + fHeaderHeight); ++ fBackView->DrawBitmapAsync(fVgafont[achar], point); ++ Invalidate(fVgafont[achar]->Bounds().OffsetToSelf(point)); ++ } ++ } ++ ++ fCursorX = cursorX; ++ fCursorY = cursorY; ++ ++ if ( (cursorY * colCount + cursorX) < rowCount * colCount) ++ { ++ fCursorValue[0] = newText[(cursorY * colCount + cursorX) * 2]; ++ fCursorValue[1] = newText[(cursorY * colCount + cursorX) * 2 + 1]; ++ fCursorHide = (fCursorStart > fCursorEnd); ++ } ++ if (!fCursorHide) ShowCursor(cursorWasShown); ++ fBackBitmap->Unlock(); ++ UnlockLooper(); ++ } ++} ++ ++void BochsView::GraphicsTileUpdate(uint8 *tile, uint32 x0, uint32 y0) ++{ ++ if (LockLooper()) ++ { ++ fInTextMode = false; ++ uint8 *bits = (uint8*)fBackBitmap->Bits(); ++ int32 bytesPerRow = fBackBitmap->BytesPerRow(); ++ bits += (y0 + fHeaderHeight) * bytesPerRow + x0; ++ if (fBackBitmap->Lock()) ++ { ++ fBackView->Sync(); ++ for (uint32 y = 0; y < fTileHeight; y++) ++ { ++ for (uint32 x = 0; x < fTileWidth; x++) ++ { ++ *(bits + x) = fColorMap[ tile[y*fTileWidth + x] ]; ++ } ++ bits += bytesPerRow; ++ } ++ fBackBitmap->Unlock(); ++ } ++ Invalidate(BRect(x0, y0 + fHeaderHeight, x0 + fTileWidth - 1, y0 + fHeaderHeight + fTileHeight -1)); ++ UnlockLooper(); ++ } ++} ++ ++bool BochsView::PaletteChange(uint32 index, uint32 red, uint32 green, uint32 blue) ++{ ++ if (LockLooper()) ++ { ++ fColorMap[index] = fScreen.IndexForColor(red, green, blue); ++ UnlockLooper(); ++ } ++ return true; ++} ++ ++void BochsView::DimensionUpdate(uint32 x, uint32 y, uint32 fheight) ++{ ++ if (LockLooper()) ++ { ++ if (fheight > 0) ++ { ++ if (fheight != 16) ++ { ++ y = y * 16 / fheight; ++ } ++ } ++ BRect rect(Bounds().OffsetToSelf(0, 0)); ++ if (x != (uint32)rect.IntegerWidth() || y + fHeaderHeight != (uint32)rect.IntegerHeight()) ++ { ++ Window()->ResizeTo(x, y + fHeaderHeight); ++ delete fBackBitmap; ++ rect.Set(0, 0, x, y + fHeaderHeight); ++ fBackBitmap = new BBitmap(rect, B_BITMAP_ACCEPTS_VIEWS, B_CMAP8); ++ fBackView = new BView(rect,"BackView", B_FOLLOW_NONE, B_WILL_DRAW); ++ fBackBitmap->AddChild(fBackView); ++ ShowHeaderbar(); ++ } ++ UnlockLooper(); ++ } ++} ++ ++void BochsView::HandleEnableMouse(bool enable) ++{ ++ if (LockLooper()) ++ { ++ fMouseEnabled = enable; ++ if (Window()->IsActive()) CaptureInput(); ++ UnlockLooper(); ++ } ++} ++ ++uint32 BochsView::CreateBitmap(const uchar *bmap, uint32 xdim, uint32 ydim) ++{ ++ if (LockLooper()) ++ { ++ if (fBitmapCount >= BX_MAX_PIXMAPS) ++ { ++ BX_PANIC(("beos: too many pixmaps, increase BX_MAX_PIXMAPS")); ++ } ++ ++ uint32 bmpIndex = fBitmapCount++; ++ ++ fBitmaps[bmpIndex].bmap = ++ new BBitmap(BRect(0, 0, xdim-1, ydim-1), B_MONOCHROME_1_BIT); ++ if (!fBitmaps[bmpIndex].bmap) ++ { ++ BX_PANIC(("beos: could not create bitmap")); ++ } ++ ++ int32 bitsLength = fBitmaps[bmpIndex].bmap->BitsLength(); ++ uchar *bits = (uchar *) fBitmaps[bmpIndex].bmap->Bits(); ++ for (int32 i = 0; i < bitsLength; i++) ++ { ++ bits[i] = ReverseBitorder(bmap[i]); ++ } ++ ++ fBitmaps[bmpIndex].xdim = xdim; ++ fBitmaps[bmpIndex].ydim = ydim; ++ UnlockLooper(); ++ return bmpIndex; ++ } ++ return 0; ++} ++ ++uint32 BochsView::HeaderbarBitmap(uint32 bmap_id, uint32 alignment, void (*f)(void)) ++{ ++ if (LockLooper()) ++ { ++ if ( (fHeaderEntryCount + 1) > BX_MAX_HEADERBAR_ENTRIES ) ++ BX_PANIC(("beos: too many headerbar entries, increase BX_MAX_HEADERBAR_ENTRIES")); ++ ++ ++ uint32 hbIndex = fHeaderEntryCount++; ++ ++ fHeaderEntries[hbIndex].bitmap = fBitmaps[bmap_id].bmap; ++ fHeaderEntries[hbIndex].xdim = fBitmaps[bmap_id].xdim; ++ fHeaderEntries[hbIndex].ydim = fBitmaps[bmap_id].ydim; ++ fHeaderEntries[hbIndex].alignment = alignment; ++ fHeaderEntries[hbIndex].f = f; ++ if (alignment == BX_GRAVITY_LEFT) ++ { ++ fHeaderEntries[hbIndex].xorigin = fHeaderLeft; ++ fHeaderEntries[hbIndex].yorigin = 0; ++ fHeaderLeft += fBitmaps[bmap_id].xdim; ++ } ++ else // BX_GRAVITY_RIGHT ++ { ++ fHeaderRight += fBitmaps[bmap_id].xdim; ++ fHeaderEntries[hbIndex].xorigin = fHeaderRight; ++ fHeaderEntries[hbIndex].yorigin = 0; ++ } ++ UnlockLooper(); ++ return(hbIndex); ++ } ++ return 0; ++} ++ ++void BochsView::ReplaceBitmap(uint32 hbar_id, uint32 bmap_id) ++{ ++ if (LockLooper() && fBackBitmap->Lock()) ++ { ++ uint32 xorigin; ++ ++ fHeaderEntries[hbar_id].bitmap = fBitmaps[bmap_id].bmap; ++ ++ if (fHeaderEntries[hbar_id].alignment == BX_GRAVITY_LEFT) ++ xorigin = fHeaderEntries[hbar_id].xorigin; ++ else ++ xorigin = Bounds().IntegerWidth() - fHeaderEntries[hbar_id].xorigin; ++ fBackView->SetLowColor(192, 192, 192); ++ fBackView->SetHighColor(0, 0, 0); ++ fBackView->DrawBitmapAsync(fHeaderEntries[hbar_id].bitmap, BPoint(xorigin, 0)); ++ fBackBitmap->Unlock(); ++ Invalidate(fHeaderEntries[hbar_id].bitmap->Bounds().OffsetToSelf(xorigin, 0)); ++ UnlockLooper(); ++ } + } + +-void BochsView::AttachedToWindow() ++void BochsView::ShowHeaderbar() + { +- BFont font(be_fixed_font); +- +- aWindow->Lock(); +- font.SetSize(16); +- font.SetFlags(B_DISABLE_ANTIALIASING); +- aView->SetFont(&font); +- +- aView->MakeFocus(true); +- aWindow->Unlock(); +- +- view_attached = 1; ++ if (LockLooper() && fBackBitmap->Lock()) ++ { ++ uint32 xorigin; ++ fBackView->SetLowColor(192, 192, 192); ++ fBackView->SetHighColor(0, 0, 0); ++ BRect rect(Bounds()); ++ rect.bottom = rect.top + fHeaderHeight - 1; ++ fBackView->FillRect(rect, B_SOLID_LOW); ++ for (unsigned i = 0; i < fHeaderEntryCount; i++) ++ { ++ if (fHeaderEntries[i].alignment == BX_GRAVITY_LEFT) ++ xorigin = fHeaderEntries[i].xorigin; ++ else ++ xorigin = rect.IntegerWidth() - fHeaderEntries[i].xorigin; ++ fBackView->DrawBitmapAsync( fHeaderEntries[i].bitmap, BPoint(xorigin, 0) ); ++ } ++ fBackBitmap->Unlock(); ++ Invalidate(rect); ++ UnlockLooper(); ++ } + } + +-void BochsView::MouseDown(BPoint point) ++void BochsView::ShowCursor(bool show) + { +- UNUSED(point); +- if (point.y < BX_HEADER_BAR_Y) { +- headerbar_click(int(point.x), int(point.y)); +- return; +- } +- BX_DEBUG(("mousedown()")); ++ if (fBackBitmap->Lock()) ++ { ++ fCursorVisible = show; ++ BRect rect; ++ if (show) ++ { ++ BPoint point(fCursorX * 8, fHeaderHeight + fCursorY * 16 + fCursorStart); ++ rect.Set(point.x, point.y, point.x + 7, point.y + (fCursorEnd - fCursorStart)); ++ fBackView->SetHighColor(fScreen.ColorForIndex(fColorMap[fCursorValue[1] & 0x0F])); ++ fBackView->FillRect(rect, B_SOLID_HIGH); ++ Invalidate(rect); ++ } ++ else ++ { ++ BPoint point(fCursorX * 8, fHeaderHeight + fCursorY * 16); ++ rect.Set(point.x, point.y, point.x + 7, point.y + 15); ++ fBackView->SetHighColor(fScreen.ColorForIndex(fColorMap[fCursorValue[1] & 0x0F])); ++ fBackView->SetLowColor(fScreen.ColorForIndex(fColorMap[fCursorValue[1] >> 4])); ++ fBackView->DrawBitmapAsync(fVgafont[fCursorValue[0]], point); ++ } ++ Invalidate(rect); ++ fBackBitmap->Unlock(); ++ } + } + +-void BochsView::MouseUp(BPoint point) ++uchar BochsView::ReverseBitorder(uchar b) + { +- UNUSED(point); +- // currently a place holder function +- BX_DEBUG(( "mouseup()" )); +- BView::MouseUp(point); ++ uchar ret=0; ++ for (uint32 i=0; i<8; i++) ++ { ++ ret |= (b & 0x01) << (7-i); ++ b >>= 1; ++ } ++ return ret; + } + +-void BochsView::MouseMoved(BPoint point, +- uint32 transit, const BMessage *message) ++void BochsView::release_mouse() + { +- UNUSED(point); +- UNUSED(transit); +- UNUSED(message); +- BX_DEBUG(( "mousemoved()" )); ++ bx_options.Omouse_enabled->set(false); + } + +-void BochsView::KeyDown(const char *bytes, int32 numBytes) +-{ +- BMessage *msg; +- //int32 key; +- int32 modifiers; +- +- uint8 byte; +- +- msg = Window()->CurrentMessage(); +- if ( !msg ) { +- BX_DEBUG(( "keydown() msg NULL" )); +- return; +- } +- modifiers = msg->FindInt32("modifiers"); +-#if 0 +- B_SHIFT_KEY = 0x00000001, +- B_COMMAND_KEY = 0x00000002, +- B_CONTROL_KEY = 0x00000004, +- B_CAPS_LOCK = 0x00000008, +- B_SCROLL_LOCK = 0x00000010, +- B_NUM_LOCK = 0x00000020, +- B_OPTION_KEY = 0x00000040, +- B_MENU_KEY = 0x00000080, +- B_LEFT_SHIFT_KEY = 0x00000100, +- B_RIGHT_SHIFT_KEY = 0x00000200, +- B_LEFT_COMMAND_KEY = 0x00000400, +- B_RIGHT_COMMAND_KEY = 0x00000800, +- B_LEFT_CONTROL_KEY = 0x00001000, +- B_RIGHT_CONTROL_KEY = 0x00002000, +- B_LEFT_OPTION_KEY = 0x00004000, +- B_RIGHT_OPTION_KEY = 0x00008000 +-#endif +-//if (modifiers) { +-// fprintf(stderr, "# modifiers = %08x\n", (unsigned) modifiers); +-// } +- +- if (numBytes == 1) { +- //fprintf(stderr, "# down: char %02xh\n", (unsigned) bytes[0]); +- byte = bytes[0]; +- if ( byte == 0x00 ) { +- // Ctrl-Space +- enq_key_event(BX_KEY_CTRL_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SPACE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SPACE, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_CTRL_L, BX_KEY_RELEASED); +- return; +- } +- if ( byte == 0x1b ) { +- // Esc +- if (modifiers & B_CONTROL_KEY) +- enq_key_event(BX_KEY_CTRL_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_ESC, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_ESC, BX_KEY_RELEASED); +- if (modifiers & B_CONTROL_KEY) +- enq_key_event(BX_KEY_CTRL_L, BX_KEY_RELEASED); +- return; +- } +- if ( (byte >= 0x30) && (byte <= 0x39) ) { +- // 0 .. 9 +- byte -= 0x30; +- enq_key_event(BX_KEY_0 + byte, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_0 + byte, BX_KEY_RELEASED); +- return; +- } +- if ( (byte >= 0x41) && (byte <= 0x5A) ) { +- // A .. Z +- byte -= 0x41; +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_A + byte, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_A + byte, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- return; +- } +- if ( (byte >= 0x61) && (byte <= 0x7A) ) { +- // a .. z +- byte -= 0x61; +- enq_key_event(BX_KEY_A + byte, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_A + byte, BX_KEY_RELEASED); +- return; +- } +- switch (byte) { +- case 0x20: // Space +- enq_key_event(BX_KEY_SPACE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SPACE, BX_KEY_RELEASED); +- break; +- case 0x21: // Exclamation Point +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_1, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_1, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x22: // Double Quotes +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SINGLE_QUOTE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SINGLE_QUOTE, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x23: // Pound Sign +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_3, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_3, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x24: // Dollar Sign +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_4, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_4, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x25: // Percent +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_5, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_5, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x26: // Ampersand +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_7, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_7, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x27: // Single Quote +- enq_key_event(BX_KEY_SINGLE_QUOTE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SINGLE_QUOTE, BX_KEY_RELEASED); +- break; +- case 0x28: // Left Paren +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_9, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_9, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x29: // Right Paren +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_0, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_0, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x2a: // Multiply +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_8, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_8, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x2b: // Add +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_EQUALS, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_EQUALS, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x2c: // Comma +- enq_key_event(BX_KEY_COMMA, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_COMMA, BX_KEY_RELEASED); +- break; +- case 0x2d: // Minus +- enq_key_event(BX_KEY_MINUS, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_MINUS, BX_KEY_RELEASED); +- break; +- case 0x2e: // Period +- enq_key_event(BX_KEY_PERIOD, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_PERIOD, BX_KEY_RELEASED); +- break; +- case 0x2f: // Slash +- enq_key_event(BX_KEY_SLASH, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SLASH, BX_KEY_RELEASED); +- break; +- +- case 0x3a: // Colon +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SEMICOLON, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SEMICOLON, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x3b: // Semi-Colon +- enq_key_event(BX_KEY_SEMICOLON, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SEMICOLON, BX_KEY_RELEASED); +- break; +- case 0x3c: // Less Than +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_COMMA, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_COMMA, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x3d: // Equals +- enq_key_event(BX_KEY_EQUALS, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_EQUALS, BX_KEY_RELEASED); +- break; +- case 0x3e: // Greater Than +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_PERIOD, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_PERIOD, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x3f: // Question Mark +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SLASH, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SLASH, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x40: // At Sign +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_2, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_2, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- +- case 0x5b: // Left Bracket +- enq_key_event(BX_KEY_LEFT_BRACKET, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_LEFT_BRACKET, BX_KEY_RELEASED); +- break; +- case 0x5c: // Back Slash +- enq_key_event(BX_KEY_BACKSLASH, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_BACKSLASH, BX_KEY_RELEASED); +- break; +- case 0x5d: // Right Bracket +- enq_key_event(BX_KEY_RIGHT_BRACKET, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_RIGHT_BRACKET, BX_KEY_RELEASED); +- break; +- case 0x5e: // Caret +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_6, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_6, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x5f: // Underscore +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_MINUS, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_MINUS, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x60: // Grave Accent +- enq_key_event(BX_KEY_GRAVE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_GRAVE, BX_KEY_RELEASED); +- break; +- +- case 0x7b: // Left Brace +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_LEFT_BRACKET, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_LEFT_BRACKET, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x7c: // Verticle Bar +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_BACKSLASH, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_BACKSLASH, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x7d: // Right Brace +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_RIGHT_BRACKET, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_RIGHT_BRACKET, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x7e: // Tilde +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_GRAVE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_GRAVE, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- +- case B_BACKSPACE: +- enq_key_event(BX_KEY_BACKSPACE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_BACKSPACE, BX_KEY_RELEASED); +- break; +- case B_ENTER: //case B_RETURN: +- enq_key_event(BX_KEY_ENTER, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_ENTER, BX_KEY_RELEASED); +- break; +- case B_TAB: +- enq_key_event(BX_KEY_TAB, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_TAB, BX_KEY_RELEASED); +- break; +- case B_LEFT_ARROW: +- enq_key_event(BX_KEY_LEFT, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_LEFT, BX_KEY_RELEASED); +- break; +- case B_RIGHT_ARROW: +- enq_key_event(BX_KEY_RIGHT, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_RIGHT, BX_KEY_RELEASED); +- break; +- case B_UP_ARROW: +- enq_key_event(BX_KEY_UP, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_UP, BX_KEY_RELEASED); +- break; +- case B_DOWN_ARROW: +- enq_key_event(BX_KEY_DOWN, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_DOWN, BX_KEY_RELEASED); +- break; +-#if 0 +- case B_FUNCTION_KEY: break; +- msg->FindInt32("key", &key); +- switch ( key ) { +- case B_F1_KEY: break; +- case B_F2_KEY: break; +- case B_F3_KEY: break; +- case B_F4_KEY: break; +- case B_F5_KEY: break; +- case B_F6_KEY: break; +- case B_F7_KEY: break; +- case B_F8_KEY: break; +- case B_F9_KEY: break; +- case B_F10_KEY: break; +- case B_F11_KEY: break; +- case B_F12_KEY: break; +- case B_PRINT_KEY: break; +- case B_SCROLL_KEY: break; +- case B_PAUSE_KEY: break; +- default: +- fprintf(stderr, "# keydown() unknown function key %08xh\n", +- (unsigned) key); +- } +-#endif +- case B_INSERT: break; +- enq_key_event(BX_KEY_INSERT, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_INSERT, BX_KEY_RELEASED); +- break; +- case B_DELETE: break; +- enq_key_event(BX_KEY_DELETE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_DELETE, BX_KEY_RELEASED); +- break; +- case B_HOME: break; +- enq_key_event(BX_KEY_HOME, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_HOME, BX_KEY_RELEASED); +- break; +- case B_END: break; +- enq_key_event(BX_KEY_END, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_END, BX_KEY_RELEASED); +- break; +- case B_PAGE_UP: break; +- enq_key_event(BX_KEY_PAGE_UP, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_PAGE_UP, BX_KEY_RELEASED); +- break; +- case B_PAGE_DOWN: break; +- enq_key_event(BX_KEY_PAGE_DOWN, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_PAGE_DOWN, BX_KEY_RELEASED); +- break; +- +- default: +- if ( (byte >= 0x01) && (byte <= 0x1a) ) { +- // If the above keys dont catch this case, synthesize a +- // Ctrl-A .. Ctrl-Z event +- byte -= 1; +- enq_key_event(BX_KEY_CTRL_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_A + byte, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_A + byte, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_CTRL_L, BX_KEY_RELEASED); +- return; +- } +- fprintf(stderr, "# keydown: char %02xh unhandled\n", +- (unsigned) bytes[0]); +- return; +- } +- return; +- } +- else { +- // ignore for now +- fprintf(stderr, "# keydown() ignoring multibyte key\n"); +- } +-} ++// ========== class ModifierFilter definitions ========== + +-void BochsView::KeyUp(const char *bytes, int32 numBytes) ++ModifierFilter::ModifierFilter(BHandler *target): ++ BMessageFilter(B_MODIFIERS_CHANGED), ++ fTarget(target) + { +- UNUSED(bytes); +- UNUSED(numBytes); ++ + } + +-void BochsView::Draw(BRect rect) ++filter_result ModifierFilter::Filter(BMessage *msg, BHandler **target) + { +- DrawBitmapAsync(backing_store, rect, rect); ++ *target = fTarget; ++ return B_DISPATCH_MESSAGE; + } + +-BochsView::~BochsView() ++void CaptureTarget::MessageReceived(BMessage *msg) + { +- delete backing_store; +- delete backing_view; ++ if (fMyTarget->LockLooper()) ++ { ++ fMyTarget->GotCapturedInput(msg); ++ fMyTarget->UnlockLooper(); ++ } + } + +-void +-BochsView::SetFont(const BFont *font, uint32 mask) ++// ========== class bx_gui_c definitions ========== ++ ++void bx_gui_c::specific_init(bx_gui_c *th, int argc, char **argv, ++ unsigned tilewidth, unsigned tileheight, ++ unsigned header_bar_y) + { +- backing_store->Lock(); +- backing_view->SetFont(font,mask); +- backing_store->Unlock(); ++ BX_DEBUG(("init")); ++ bApp = new BochsApplication(th, argc, argv, tilewidth, tileheight, header_bar_y, power_handler); ++ be_app->Unlock(); ++ thread_id appThread = spawn_thread(BochsApplication::runme, "App thread", B_NORMAL_PRIORITY, NULL); ++ resume_thread(appThread); + } + +-void +-BochsView::SetHighColor(uchar r, uchar g, uchar b, uchar a) ++void bx_gui_c::handle_events(void) + { +- backing_store->Lock(); +- backing_view->SetHighColor(r,g,b,a); +- backing_store->Unlock(); ++ bView->HandleEvents(); + } + +-void +-BochsView::SetLowColor(uchar r, uchar g, uchar b, uchar a) ++void bx_gui_c::flush(void) + { +- backing_store->Lock(); +- backing_view->SetLowColor(r,g,b,a); +- backing_store->Unlock(); ++ BX_DEBUG(("flush")); ++ if (!bView) ++ { ++ BX_DEBUG(("flush called before init")); ++ return; ++ } ++ bView->Flush(); + } + +-void +-BochsView::DrawBitmap(const BBitmap *aBitmap, BPoint where) ++void bx_gui_c::clear_screen(void) + { +- backing_store->Lock(); +- backing_view->DrawBitmap(aBitmap,where); +- backing_store->Unlock(); +- BRect r = aBitmap->Bounds(); +- r.OffsetBy(where); +- Invalidate(r); ++ BX_DEBUG(("clear_screen")); ++ bView->ClearScreen(); + } + +-void +-BochsView::FillRect(BRect r, pattern p) ++void bx_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, ++ unsigned long cursor_x, unsigned long cursor_y, ++ Bit16u cursor_state, unsigned nrows) + { +- backing_store->Lock(); +- backing_view->FillRect(r,p); +- backing_store->Unlock(); +- Invalidate(r); ++ BX_DEBUG(("text_update")); ++ bView->TextUpdate(old_text, new_text, cursor_x, cursor_y, nrows, cursor_state); + } + +- +- +- void +-enq_key_event(Bit32u key, Bit32u press_release) ++int bx_gui_c::get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) + { +- if ( ((tail+1) % SCANCODE_BUFSIZE) == head ) { +- fprintf(stderr, "# enq_key_event: buffer full\n"); +- return; +- } +- keyevents[tail] = key | press_release; +- tail = (tail + 1) % SCANCODE_BUFSIZE; ++ return 0; + } + +- Bit32u +-deq_key_event(void) ++int bx_gui_c::set_clipboard_text(char *text_snapshot, Bit32u len) + { +- Bit32u key; +- +- if ( head == tail ) { +- fprintf(stderr, "# deq_key_event: buffer empty\n"); +- return(0); +- } +- key = keyevents[head]; +- head = (head + 1) % SCANCODE_BUFSIZE; +- return(key); ++ return 0; + } +- +- unsigned char +-reverse_bitorder(unsigned char b) ++ ++void bx_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) + { +- unsigned char ret=0; +- for (unsigned i=0; i<8; i++) { +- ret |= (b & 0x01) << (7-i); +- b >>= 1; +- } +- return(ret); ++ //fprintf(stderr, "# gui: graphics_update\n"); ++ bView->GraphicsTileUpdate(tile, x0, y0); + } + +- unsigned +-bx_gui_c::create_bitmap(const unsigned char *bmap, +- unsigned xdim, unsigned ydim) ++Boolean bx_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) + { +- BRect rect(0.0, 0.0, xdim-1, ydim-1); +- int32 bitslength; +- //int32 bytesperrow; +- unsigned char *data; +- +- if (bx_bitmap_entries >= BX_MAX_PIXMAPS) { +- BX_PANIC(("beos: too many pixmaps, increase BX_MAX_PIXMAPS")); +- } +- +- bx_bitmaps[bx_bitmap_entries].bmap = +- new BBitmap(rect, B_MONOCHROME_1_BIT); +- +- bitslength = bx_bitmaps[bx_bitmap_entries].bmap->BitsLength(); +- //bytesperrow = bx_bitmaps[bx_bitmap_entries].bmap->BytesPerRow(); +- data = (unsigned char *) bx_bitmaps[bx_bitmap_entries].bmap->Bits(); +- for (int32 i=0; iPaletteChange(index, red, green, blue); + } + +- unsigned +-bx_gui_c::headerbar_bitmap(unsigned bmap_id, unsigned alignment, +- void (*f)(void)) ++void bx_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight) + { +- unsigned hb_index; +- +- if ( (bx_headerbar_entries+1) > BX_MAX_HEADERBAR_ENTRIES ) +- BX_PANIC(("beos: too many headerbar entries, increase BX_MAX_HEADERBAR_ENTRIES")); +- +- bx_headerbar_entries++; +- hb_index = bx_headerbar_entries - 1; +- +- bx_headerbar_entry[hb_index].bitmap = bx_bitmaps[bmap_id].bmap; +- bx_headerbar_entry[hb_index].xdim = bx_bitmaps[bmap_id].xdim; +- bx_headerbar_entry[hb_index].ydim = bx_bitmaps[bmap_id].ydim; +- bx_headerbar_entry[hb_index].alignment = alignment; +- bx_headerbar_entry[hb_index].f = f; +- if (alignment == BX_GRAVITY_LEFT) { +- bx_headerbar_entry[hb_index].xorigin = bx_bitmap_left_xorigin; +- bx_headerbar_entry[hb_index].yorigin = 0; +- bx_bitmap_left_xorigin += bx_bitmaps[bmap_id].xdim; +- } +- else { // BX_GRAVITY_RIGHT +- bx_bitmap_right_xorigin += bx_bitmaps[bmap_id].xdim; +- bx_headerbar_entry[hb_index].xorigin = bx_bitmap_right_xorigin; +- bx_headerbar_entry[hb_index].yorigin = 0; +- } +- return(hb_index); ++ //fprintf(stderr, "dimension_update %d x %d\n", x, y); ++ bView->DimensionUpdate(x, y, fheight); + } + +- void +-bx_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) ++void bx_gui_c::exit(void) + { +- unsigned xorigin; +- +- bx_headerbar_entry[hbar_id].bitmap = bx_bitmaps[bmap_id].bmap; +- +- if (bx_headerbar_entry[hbar_id].alignment == BX_GRAVITY_LEFT) +- xorigin = bx_headerbar_entry[hbar_id].xorigin; +- else +- xorigin = dimension_x - bx_headerbar_entry[hbar_id].xorigin; +- aWindow->Lock(); +- aView->set_headerbar_colors(); +- aView->DrawBitmap(bx_headerbar_entry[hbar_id].bitmap, BPoint(xorigin, 0)); +- aView->set_text_colors(); +- aWindow->Unlock(); ++ BX_DEBUG(("exit")); ++ bApp->BxExit(); + } + +- void +-bx_gui_c::show_headerbar(void) ++void bx_gui_c::mouse_enabled_changed_specific(Boolean val) + { +- unsigned xorigin; +- BPoint origin; +- +- // clear header bar area to white +- +- aWindow->Lock(); +- aView->set_headerbar_colors(); +- aView->FillRect(BRect(0, 0, dimension_x-1, bx_headerbar_y-1), B_SOLID_LOW); +- for (unsigned i=0; iDrawBitmap( bx_headerbar_entry[i].bitmap, origin ); +- } +- aView->set_text_colors(); +- aWindow->Unlock(); ++ //fprintf(stderr, "mouse_enabled_changed to %s\n", val ? "enabled" : "disabled"); ++ bView->HandleEnableMouse(val); + } + +- +- void +-headerbar_click(int x, int y) ++unsigned bx_gui_c::create_bitmap(const unsigned char *bmap, ++ unsigned xdim, unsigned ydim) + { +- int xorigin; +- +- // assuming y is in bounds +- UNUSED(y); +- for (unsigned i=0; i=xorigin) && (x<(xorigin+int(bx_headerbar_entry[i].xdim))) ) { +- bx_headerbar_entry[i].f(); +- return; +- } +- } ++ BX_DEBUG(("create_bitmap")); ++ return bView->CreateBitmap(bmap, xdim, ydim); + } + +- +- void +-create_vga_font(void) ++unsigned bx_gui_c::headerbar_bitmap(unsigned bmap_id, unsigned alignment, void (*f)(void)) + { +- int32 bitslength; +- int32 bytesperrow; +- unsigned char *data; +- BRect brect(0,0, 7,15); +- +- BX_INFO(( "BeOS: creating VGA font from bitmaps" )); +- +- // VGA font is 8wide x 16high +- for (unsigned c=0; c<256; c++) { +- vgafont[c] = new BBitmap(brect, B_MONOCHROME_1_BIT); +- if (!vgafont[c]) { +- BX_PANIC(("beos: could not create bitmap")); +- } +- +- bitslength = vgafont[c]->BitsLength(); +- bytesperrow = vgafont[c]->BytesPerRow(); +- data = (unsigned char *) vgafont[c]->Bits(); +- memset(data, 0, bitslength); +- for (unsigned i=0; i<16; i++) { +- data[i*bytesperrow] = reverse_bitorder(bx_vgafont[c].data[i]); +- } +- } ++ BX_DEBUG(("headerbar_bitmap")); ++ return bView->HeaderbarBitmap(bmap_id, alignment, f); + } + +- +- void +-bx_gui_c::exit(void) ++void bx_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) + { +- fprintf(stderr, "# WARNING: BEOS: bx_gui_c::exit() not implemented yet.\n"); ++ BX_DEBUG(("replace_bitmap")); ++ bView->ReplaceBitmap(hbar_id, bmap_id); + } + +-//IRA=> Start +-// This is called whenever the mouse_enabled parameter changes. It +-// can change because of a gui event such as clicking on the mouse-enable +-// bitmap or pressing the middle button, or from the control panel. +-// In all those cases, setting the parameter value will get you here. +- +- void +-bx_gui_c::mouse_enabled_changed_specific (Boolean val) ++void bx_gui_c::show_headerbar(void) + { +- BX_DEBUG (("mouse_enabled=%d, BeOS specific code", val?1:0)); +- if (val) { +- BX_INFO(("[x] Mouse on")); +-// mouse_enable_x = current_x; +-// mouse_enable_y = current_y; +- be_app->HideCursor(); +- // Move the cursor to a 'safe' place +-// warp_cursor(warp_home_x-current_x, warp_home_y-current_y); +- } else { +- BX_INFO(("[x] Mouse off")); +- be_app->ShowCursor(); +-// warp_cursor(mouse_enable_x-current_x, mouse_enable_y-current_y); +- } ++ BX_DEBUG(("show_headrebar")); ++ bView->ShowHeaderbar(); + } +-//IRA=> End diff --git a/bochs/patches/patch.beos-gui-fabo-template b/bochs/patches/patch.beos-gui-fabo-template new file mode 100644 index 00000000..c7166eea --- /dev/null +++ b/bochs/patches/patch.beos-gui-fabo-template @@ -0,0 +1,2338 @@ +---------------------------------------------------------------------- +Patch name: patch.beos-gui-fabo-template +Author: Marton Fabo +Date: Thu, 6 Dec 2001 19:52:18 +0100 (CET) + +Detailed description: +Same as patch.beos-gui-fabo, except this version uses C++ templates. + +I grabbed the CVS snapshot of 20011129, started with the BeOS GUI code found in +it, rewrote it totally (almost no original code left), and I now have a Bochs +that runs under BeOS quite nicely. New features compared to the BeOS GUI code +found in the above snapshot: + +- color support in text mode (not perfect yet, but not BW at least) +- almost full keyboard capturing (modifier keys work, function keys also, + keypad, arrow keys work, capslock doesn't work properly, numlock not at all. + I need some help about how to tell Bochs to switch those properly) +- full mouse capturing, it works quite great! + +Also see beos-gui-fabo.capture-filter and the associated README. + +Patch was created with: + cvs diff -u +Apply patch to what version: + cvs from December 7, 2001 +Instructions: + To patch, go to main bochs directory. + Type "patch -p0 < THIS_PATCH_FILE". +---------------------------------------------------------------------- +Index: gui/beos.cc +=================================================================== +RCS file: /cvsroot/bochs/bochs/gui/beos.cc,v +retrieving revision 1.12 +diff -u -r1.12 beos.cc +--- gui/beos.cc 2001/12/07 18:52:24 1.12 ++++ gui/beos.cc 2001/12/07 19:17:41 +@@ -1,5 +1,5 @@ + ///////////////////////////////////////////////////////////////////////// +-// $Id: patch.beos-gui-fabo-template,v 1.1 2001/12/07 19:22:54 bdenney Exp $ ++// $Id: patch.beos-gui-fabo-template,v 1.1 2001/12/07 19:22:54 bdenney Exp $ + ///////////////////////////////////////////////////////////////////////// + // + // Copyright (C) 2001 MandrakeSoft S.A. +@@ -28,6 +28,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -39,1161 +40,1260 @@ + #include + + #include "bochs.h" +-//#include "icon_bochs.h" ++// #include "icon_bochs.h" + #include "font/vga.bitmap.h" + + #define LOG_THIS bx_gui. + +-#define PAD_NEAREST(n, quantum) (( ((n) + ((quantum) - 1)) / (n) ) * (n)) ++#undef uint8 ++#undef int32 ++#undef uint32 ++ ++#define BOCHS_APP_SIG "application/x-vnd.MandrakeSoft-BeBochs" ++#define SCANCODE_BUFSIZE 20 ++#define MOUSE_BUFSIZE 20 ++#define MOUSE_L 0x00000001 ++#define MOUSE_R 0x00000002 ++#define INITIAL_SCREEN_WIDTH 640 ++#define INITIAL_SCREEN_HEIGHT 350 ++ ++const uint32 MSG_REQUEST_CAPTURE = 'CFrq'; ++const uint32 MSG_START_CAPTURE = 'strt'; ++const uint32 MSG_ALREADY_CAPTURING = 'CFac'; ++const uint32 MSG_CAPTURE_OK = 'CFok'; ++const uint32 MSG_BAD_MESSAGE = 'CFbm'; ++const uint32 MSG_STOP_CAPTURE = 'stop'; ++ ++const uint32 INPUT_TYPE_KEYBOARD = 0x00000001; ++const uint32 INPUT_TYPE_MOUSE = 0x00000002; ++ ++const uint32 MSG_ENQ_COMMAND = 'BCec'; ++ ++// ========== STRUCTS ========== ++ ++struct mouse_event ++{ ++ mouse_event() { } ++ mouse_event(uint32 X, uint32 Y, uint32 buttons): ++ x(X), y(Y), buttonState(buttons) { } ++ uint32 x; ++ uint32 y; ++ uint32 buttonState; ++}; + ++// ========== CLASSES ========== + +- +-class BochsApplication : public BApplication { +- ++template class Queue ++{ + public: +- BochsApplication(); +- }; ++ Queue(uint32 maxItems, const char *name); ++ ~Queue(); ++ bool Enq(const ContentType &item); ++ bool Deq(ContentType *item); ++ bool QueueEmpty() { return (fHead == fTail); } ++ uint32 ItemCount() { return (fTail > fHead) ? fTail - fHead : fHead + fMaxItems - fTail; } ++ ContentType &ItemAt(uint32 index) { return fItems[(fHead + index) % fMaxItems]; } ++private: ++ ContentType *fItems; ++ uint32 fMaxItems; ++ uint32 fHead; ++ uint32 fTail; ++ const char *fName; ++}; + +-class BochsWindow : public BWindow { ++class BochsApplication: public BApplication ++{ ++public: ++ BochsApplication(bx_gui_c *bxGui, int argc, char **argv, ++ uint32 tileWidth, uint32 tileHeight, uint32 headerBarHeight, void (*powerHandlerFunc)()); ++ ~BochsApplication(); ++ static int32 runme(void *data); ++ virtual bool QuitRequested(); ++ virtual void Quit(); ++ void BxExit(); ++private: ++ void (*fPowerHandlerFunc)(); ++}; + ++class BochsWindow: public BWindow ++{ + public: +- BochsWindow(BRect frame); +- virtual bool QuitRequested(); +- virtual void FrameResized(float width, float height); +- }; ++ BochsWindow(BRect frame); ++ virtual bool QuitRequested(); ++}; + +-class BochsView : public BView { ++class BochsView: public BView { ++public: ++ BochsView(BRect frame, char *name, uint32 headerHeight, uint32 tileWidth, uint32 tileHeight); ++ ~BochsView(); ++ virtual void AttachedToWindow(); ++ virtual void DetachedFromWindow(); ++ virtual void Draw(BRect updateRect); ++ virtual void KeyDown(const char *bytes, int32 numBytes); ++ virtual void KeyUp(const char *bytes, int32 numBytes); ++ virtual void MouseDown(BPoint point); ++ virtual void MouseUp(BPoint point); ++ virtual void MouseMoved(BPoint point, uint32 transit, const BMessage *message); ++ virtual void MessageReceived(BMessage *msg); ++ virtual void WindowActivated(bool active); ++ virtual void Pulse(); ++ void HandleEvents(); ++ void ClearScreen(); ++ void TextUpdate(uint8 *oldText, uint8 *newText, ++ uint32 cursorX, uint32 cursorY, uint32 rowCount); ++ void GraphicsTileUpdate(uint8 *tile, uint32 xPos, uint32 yPos); ++ bool PaletteChange(uint32 index, uint32 red, uint32 green, uint32 blue); ++ void DimensionUpdate(uint32 x, uint32 y); ++ void HandleEnableMouse(bool enable); ++ uint32 CreateBitmap(const uchar *bitmap, uint32 width, uint32 height); ++ uint32 HeaderbarBitmap(uint32 bitmapID, uint32 alignment, void (*f)(void)); ++ void ReplaceBitmap(uint32 headerBarID, uint32 bitmapID); ++ void ShowHeaderbar(); ++ void GotCapturedInput(BMessage *msg); ++ //Queue *KeyQueue() { return &fKeyQueue; } ++ //Queue *MouseQueue() { return &fMouseQueue; } ++ //Queue *CommandQueue() { return &fCommandQueue; } ++ static void release_mouse(); ++ + private: +- BBitmap *backing_store; +- BView *backing_view; ++ void ShowCursor(bool show); ++ uchar ReverseBitorder(uchar b); ++ void CaptureInput(); ++ void ReleaseInput(); + +-public: +- BochsView(BRect frame, char *name); +- ~BochsView(); +- virtual void AttachedToWindow(); +- virtual void Draw(BRect updateRect); +- virtual void KeyDown(const char *bytes, int32 numBytes); +- virtual void KeyUp(const char *bytes, int32 numBytes); +- virtual void MouseDown(BPoint point); +- virtual void MouseUp(BPoint point); +- virtual void MouseMoved(BPoint point, +- uint32 transit, const BMessage *message); +- void DrawBitmap(const BBitmap *aBitmap, BPoint where); +- void FillRect(BRect r, pattern p = B_SOLID_HIGH); +- void SetHighColor(uchar r, uchar g, uchar b, uchar a = 255); +- void SetLowColor(uchar r, uchar g, uchar b, uchar a = 255); +- void SetFont(const BFont *font, uint32 mask = B_FONT_ALL); +- void set_text_colors(void); +- void set_inv_text_colors(void); +- void set_headerbar_colors(void); +- }; +- +- +-void GUI_end(void); +-void enq_key_event(Bit32u key, Bit32u press_release); +-Bit32u deq_key_event(void); +-#define SCANCODE_BUFSIZE 20 +-static Bit32u keyevents[SCANCODE_BUFSIZE]; +-static unsigned head=0, tail=0; +-static bool view_attached = 0; +- +-static BochsApplication *myApplication = NULL; +-static BochsWindow *aWindow = NULL; +-static BochsView *aView = NULL; +-static BView *canvas = NULL; +-static uint8 cmap_index[256]; // indeces into system colormap +- +-static BRect rect; +-static BPoint image_origin; +-static BBitmap *image = NULL; +-static BScreen *screen; +-static unsigned long rowsize_padded=0; +-static uint8 *rawdata = NULL; +- +-//static int rows=25, columns=80; +- +-static unsigned font_width, font_height; +-static Bit8u blank_line[80]; +-static unsigned dimension_x, dimension_y; +- +-//static unsigned imDepth, imWide, imBPP; +- +-// current cursor coordinates +-//IRA=> Start +-static BPoint current; +-static BPoint previous; +-static Bit8u mouse_button_state = 0; +-//IRA=> End +-//static int prev_x=-1, prev_y=-1; +-//static int current_x=-1, current_y=-1; +- +-static unsigned prev_block_cursor_x=0; +-static unsigned prev_block_cursor_y=0; +- +-static void headerbar_click(int x, int y); +- +-Bit8u ascii_to_scancode[0x7f] = { +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0x39, 0x02, 0x28, 0x04, 0x05, 0x06, 0x08, 0x28, /* !"#$%&' */ +- 0x0a, 0x0b, 0x09, 0x0d, 0x33, 0x0c, 0x34, 0x35, /* ()*+,-./ */ +- 0x0b, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, /* 01234567 */ +- 0x09, 0x0a, 0x27, 0x27, 0x33, 0x0d, 0x34, 0x35, /* 89:;<=>? */ +- 0x03, 0x1e, 0x30, 0x2e, 0x20, 0x12, 0x21, 0x22, /* @ABCDEFG */ +- 0x23, 0x17, 0x24, 0x25, 0x26, 0x32, 0x31, 0x18, /* HIJKLMNO */ +- 0x19, 0x10, 0x13, 0x1f, 0x14, 0x16, 0x2f, 0x11, /* PQRSTUVW */ +- 0x2d, 0x15, 0x2c, 0x1a, 0x2b, 0x1b, 0x07, 0x0c, /* XYZ[\]^_ */ +- 0x29, 0x1e, 0x30, 0x2e, 0x20, 0x12, 0x21, 0x22, /* `abcdefg */ +- 0x23, 0x17, 0x24, 0x25, 0x26, 0x32, 0x31, 0x18, /* hijklmno */ +- 0x19, 0x10, 0x13, 0x1f, 0x14, 0x16, 0x2f, 0x11, /* pqrstuvw */ +- 0x2d, 0x15, 0x2c, 0x1a, 0x2b, 0x1b, 0x29 /* xyz{|}~ */ +- }; +- +-extern Bit8u graphics_snapshot[32 * 1024]; +-//extern pc_keyb_c *pc_keyboard; +- +- +- +- +-unsigned col_vals[256], curr_foreground, curr_background; +- +-static unsigned x_tilesize, y_tilesize; +- +-struct { +- BBitmap *bmap; +- unsigned xdim; +- unsigned ydim; +- } bx_bitmaps[BX_MAX_PIXMAPS]; +-unsigned bx_bitmap_entries = 0; +- +-static struct { +- BBitmap *bitmap; +- unsigned xdim; +- unsigned ydim; +- unsigned xorigin; +- unsigned yorigin; +- unsigned alignment; +- void (*f)(void); +- } bx_headerbar_entry[BX_MAX_HEADERBAR_ENTRIES]; +-static unsigned bx_headerbar_y = 0; +-static unsigned bx_headerbar_entries = 0; +-static unsigned bx_bitmap_left_xorigin = 0; // pixels from left +-static unsigned bx_bitmap_right_xorigin = 0; // pixels from right +- +-static void headerbar_click(int x, int y); +-static unsigned char reverse_bitorder(unsigned char b); +-static void create_vga_font(void); +-static BBitmap *vgafont[256]; +- +-static bx_gui_c *bx_gui_c_ptr; ++ BBitmap *fBackBitmap; ++ BView *fBackView; ++ uint32 fLastModifiers; ++ uint32 fLastMouseX, fLastMouseY; ++ uint32 fCursorX, fCursorY; ++ uint8 fCursorValue[2]; ++ bool fCursorVisible; ++ bool fInTextMode; ++ BScreen fScreen; ++ uint8 fColorMap[256]; // indices into system colormap ++ BBitmap *fVgafont[256]; ++ BBitmap *fCursorBitmap; ++ uint32 fTileWidth; ++ uint32 fTileHeight; ++ bool fUseStandardInput; ++ bool fMouseEnabled; ++ BHandler *fCaptureTarget; ++ ++ Queue fKeyQueue; ++ Queue fMouseQueue; ++ Queue fCommandQueue; ++ ++ struct ++ { ++ BBitmap *bmap; ++ unsigned xdim; ++ unsigned ydim; ++ } fBitmaps[BX_MAX_PIXMAPS]; ++ uint32 fBitmapCount; ++ ++ struct ++ { ++ BBitmap *bitmap; ++ unsigned xdim; ++ unsigned ydim; ++ unsigned xorigin; ++ unsigned yorigin; ++ unsigned alignment; ++ void (*f)(void); ++ } fHeaderEntries[BX_MAX_HEADERBAR_ENTRIES]; ++ uint32 fHeaderEntryCount; ++ ++ uint32 fHeaderHeight; ++ uint32 fHeaderLeft; // pixels from left ++ uint32 fHeaderRight; // pixels from right ++}; + +- void +-bx_gui_c::specific_init(bx_gui_c *th, int argc, char **argv, +- unsigned tilewidth, unsigned tileheight, +- unsigned header_bar_y) ++class ModifierFilter: public BMessageFilter + { +- unsigned i; +-#if BX_CPU_LEVEL < 2 +- char *window_name = "Bochs 8086 emulator, http://world.std.com/~bochs"; +-#elif BX_CPU_LEVEL == 2 +- char *window_name = "Bochs 80286 emulator, http://world.std.com/~bochs"; +-#elif BX_CPU_LEVEL == 3 +- char *window_name = "Bochs 80386 emulator, http://world.std.com/~bochs"; +-#else +- char *window_name = "Bochs 80386+ emulator, http://world.std.com/~bochs"; +-#endif +- +- bx_gui_c_ptr = th; +-UNUSED(argc); +-UNUSED(argv); +-UNUSED(window_name); +- th->put("BGUI"); +- +-if (bx_options.Oprivate_colormap->get ()) { +- BX_INFO(( "BeOS: private_colormap option not handled yet.")); +- } +- +- x_tilesize = tilewidth; +- y_tilesize = tileheight; +- bx_headerbar_y = header_bar_y; +- +- for (i=0; i<80; i++) { +- blank_line[i] = ' '; +- } +- +- +- font_width = 8; +- font_height = 16; +- +- // width = columns * font_width; +- // height = rows * font_height; +- +-BX_INFO(("font_width = %u", (unsigned) font_width)); +-BX_INFO(("font_height = %u", (unsigned) font_height)); +- +- // Create pixmap of depth 1 (bitmap) for icon +- // icon_pixmap = XCreateBitmapFromData(bx_x_display, win, +- // (char *) bochs_icon_bits, bochs_icon_width, bochs_icon_height); ++public: ++ ModifierFilter(BHandler *target); ++ virtual filter_result Filter(BMessage *msg, BHandler **target); ++private: ++ BHandler *fTarget; ++}; + +- curr_background = 0; +- // XSetBackground(bx_x_display, gc, col_vals[curr_background]); +- curr_foreground = 1; +- // XSetForeground(bx_x_display, gc, col_vals[curr_foreground]); +- //XGrabPointer( bx_x_display, win, True, 0, GrabModeAsync, GrabModeAsync, +- // win, None, CurrentTime ); +- //XFlush(bx_x_display); ++class CaptureTarget: public BHandler ++{ ++public: ++ CaptureTarget(BochsView *myTarget): fMyTarget(myTarget) { } ++ virtual void MessageReceived(BMessage *msg); ++private: ++ BochsView *fMyTarget; ++}; + +- myApplication = new BochsApplication(); ++// ========== GLOBAL DATA ========== + +- // wait until window on screen +- while (1) { +- aWindow->Lock(); +- if (aWindow->IsHidden()) { +- aWindow->Unlock(); +- continue; +- } +- aWindow->Unlock(); +- break; +- } ++static BochsApplication *bApp = NULL; ++static BochsView *bView = NULL; + +- screen = new BScreen; +- // start out with all color map indeces pointing to Black +- cmap_index[0] = screen->IndexForColor(0, 0, 0); +- for (unsigned i=1; i<256; i++) { +- cmap_index[i] = cmap_index[0]; +- } ++// ========== keytable ========== ++ ++static const uint8 key_to_scancode[] = { ++ 0, ++ BX_KEY_ESC, ++ BX_KEY_F1, ++ BX_KEY_F2, ++ BX_KEY_F3, ++ BX_KEY_F4, ++ BX_KEY_F5, ++ BX_KEY_F6, ++ BX_KEY_F7, ++ BX_KEY_F8, ++ BX_KEY_F9, ++ BX_KEY_F10, ++ BX_KEY_F11, ++ BX_KEY_F12, ++ BX_KEY_PRINT, ++ BX_KEY_SCRL_LOCK, ++ BX_KEY_PAUSE, /*0x10*/ ++ BX_KEY_GRAVE, ++ BX_KEY_1, ++ BX_KEY_2, ++ BX_KEY_3, ++ BX_KEY_4, ++ BX_KEY_5, ++ BX_KEY_6, ++ BX_KEY_7, ++ BX_KEY_8, ++ BX_KEY_9, ++ BX_KEY_0, ++ BX_KEY_MINUS, ++ BX_KEY_EQUALS, ++ BX_KEY_BACKSPACE, ++ BX_KEY_INSERT, ++ BX_KEY_HOME, /*0x20*/ ++ BX_KEY_PAGE_UP, ++ BX_KEY_NUM_LOCK, ++ BX_KEY_KP_DIVIDE, ++ BX_KEY_KP_MULTIPLY, ++ BX_KEY_KP_SUBTRACT, ++ BX_KEY_TAB, ++ BX_KEY_Q, ++ BX_KEY_W, ++ BX_KEY_E, ++ BX_KEY_R, ++ BX_KEY_T, ++ BX_KEY_Y, ++ BX_KEY_U, ++ BX_KEY_I, ++ BX_KEY_O, ++ BX_KEY_P, /*0x30*/ ++ BX_KEY_LEFT_BRACKET, ++ BX_KEY_RIGHT_BRACKET, ++ BX_KEY_BACKSLASH, ++ BX_KEY_DELETE, ++ BX_KEY_END, ++ BX_KEY_PAGE_DOWN, ++ BX_KEY_KP_HOME, ++ BX_KEY_KP_UP, ++ BX_KEY_KP_PAGE_UP, ++ BX_KEY_KP_ADD, ++ BX_KEY_CAPS_LOCK, ++ BX_KEY_A, ++ BX_KEY_S, ++ BX_KEY_D, ++ BX_KEY_F, ++ BX_KEY_G, /*0x40*/ ++ BX_KEY_H, ++ BX_KEY_J, ++ BX_KEY_K, ++ BX_KEY_L, ++ BX_KEY_SEMICOLON, ++ BX_KEY_SINGLE_QUOTE, ++ BX_KEY_ENTER, ++ BX_KEY_KP_LEFT, ++ BX_KEY_KP_5, ++ BX_KEY_KP_RIGHT, ++ BX_KEY_SHIFT_L, ++ BX_KEY_Z, ++ BX_KEY_X, ++ BX_KEY_C, ++ BX_KEY_V, ++ BX_KEY_B, /*0x50*/ ++ BX_KEY_N, ++ BX_KEY_M, ++ BX_KEY_COMMA, ++ BX_KEY_PERIOD, ++ BX_KEY_SLASH, ++ BX_KEY_SHIFT_R, ++ BX_KEY_UP, ++ BX_KEY_KP_END, ++ BX_KEY_KP_DOWN, ++ BX_KEY_KP_PAGE_DOWN, ++ BX_KEY_KP_ENTER, ++ BX_KEY_CTRL_L, ++ BX_KEY_ALT_L, ++ BX_KEY_SPACE, ++ BX_KEY_ALT_R, ++ BX_KEY_CTRL_R, /*0x60*/ ++ BX_KEY_LEFT, ++ BX_KEY_DOWN, ++ BX_KEY_RIGHT, ++ BX_KEY_KP_INSERT, ++ BX_KEY_KP_DELETE ++}; ++ ++// ========== class Queue definitions ========== ++ ++template ++Queue::Queue(uint32 maxItems, const char *name): ++ fMaxItems(maxItems), ++ fHead(0), ++ fTail(0) ++{ ++ fItems = new ContentType[fMaxItems]; ++ fName = strdup(name); ++} ++ ++template ++Queue::~Queue() ++{ ++ delete [] fItems; ++ delete fName; ++} ++ ++template ++bool Queue::Enq(const ContentType &item) ++{ ++ if ( ((fTail + 1) % fMaxItems) == fHead ) ++ { ++ BX_DEBUG(("%s enqueue: buffer full", fName)); ++ return false; ++ } ++ fItems[fTail] = item; ++ fTail = (fTail + 1) % fMaxItems; ++ return true; ++} ++ ++template ++bool Queue::Deq(ContentType *item) ++{ ++ if ( fHead == fTail ) ++ { ++ BX_DEBUG(("%s dequeue: buffer empty", fName)); ++ return false; ++ } ++ *item = fItems[fHead]; ++ fHead = (fHead + 1) % fMaxItems; ++ return true; ++} ++ ++// ========== class BochsApplication definitions ========== ++ ++BochsApplication::BochsApplication(bx_gui_c *bxGui, int argc, char **argv, ++ uint32 tileWidth, uint32 tileHeight, uint32 header_bar_y, void (*powerHandlerFunc)()): ++ BApplication(BOCHS_APP_SIG), ++ fPowerHandlerFunc(powerHandlerFunc) ++{ ++ bxGui->put("BGUI"); ++ ++ if (bx_options.Oprivate_colormap->get ()) ++ { ++ BX_INFO(( "BeOS: private_colormap option not handled yet.")); ++ } ++ ++ // ------------------------------- ++ ++ BRect rect(0, 0, INITIAL_SCREEN_WIDTH - 1, INITIAL_SCREEN_HEIGHT + header_bar_y); ++ ++ BochsWindow *window = new BochsWindow(rect.OffsetToCopy(5, 80)); ++ ++ bView = new BochsView(rect, "BochsView", header_bar_y, tileWidth, tileHeight); + +- rect.Set(0,0, x_tilesize-1, y_tilesize-1); +- image = new BBitmap(rect, B_COLOR_8_BIT); +- rowsize_padded = PAD_NEAREST(x_tilesize, sizeof(int32)); +- rawdata = new uint8[rowsize_padded * y_tilesize]; ++ // add view to window ++ window->AddChild(bView); + +- create_vga_font(); ++ // make window visible ++ window->Show(); + } +- +- + +- void +-bx_gui_c::handle_events(void) ++BochsApplication::~BochsApplication() + { +- Bit32u key; +- +- while ( head != tail ) { +- key = deq_key_event(); +- bx_devices.keyboard->gen_scancode(key); +- } +-//IRA=> Start +- if (aView) { +- unsigned long buttons; +- aView->LockLooper(); +- aView->GetMouse(¤t, &buttons, false); +- aView->UnlockLooper(); +- +- Bit8u newstate = 0; //please note: 2nd and 3rd button are mapped the same +- if (buttons & B_PRIMARY_MOUSE_BUTTON) +- newstate |= 0x01; +- if (buttons & B_SECONDARY_MOUSE_BUTTON) +- newstate |= 0x02; +- if (buttons & B_TERTIARY_MOUSE_BUTTON) +- newstate |= 0x02; +- +- if (current != previous || +- mouse_button_state != newstate) { +- int dx = (int)(current.x - previous.x) *2; +- int dy = -(int)((current.y - previous.y) *2); +- bx_devices.keyboard->mouse_motion( dx, dy, newstate); +- mouse_button_state = newstate; +- previous = current; +- } +- } +-//IRA=> End ++ bApp = NULL; + } + +- void +-bx_gui_c::flush(void) ++int32 BochsApplication::runme(void *data) + { +- if (view_attached) +- aView->Flush(); ++ be_app->Lock(); ++ be_app->Run(); + } +- + +- void +-bx_gui_c::clear_screen(void) ++bool BochsApplication::QuitRequested() + { +- aWindow->Lock(); +- aView->FillRect(BRect(0, bx_headerbar_y, dimension_x-1, dimension_y-1), B_SOLID_LOW); +- aWindow->Unlock(); ++ BMessage msg(MSG_ENQ_COMMAND); ++ msg.AddPointer("command", (void*)fPowerHandlerFunc); ++ bView->Window()->PostMessage(&msg, bView); ++ return false; + } +- +- + +- void +-bx_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, +- unsigned long cursor_x, unsigned long cursor_y, +- unsigned nrows) ++void BochsApplication::Quit() + { +- unsigned i, x, y; +- BPoint point; +- unsigned char achar; +- unsigned nchars; +- +- aWindow->Lock(); +- +- // Number of characters on screen, variable number of rows +- nchars = 80*nrows; +- +- // first draw over character at original block cursor location +- if ( (prev_block_cursor_y*80 + prev_block_cursor_x) < nchars ) { +- achar = new_text[(prev_block_cursor_y*80 + prev_block_cursor_x)*2]; +- point.Set(prev_block_cursor_x*8, prev_block_cursor_y*16 + bx_headerbar_y); +- aView->DrawBitmap(vgafont[achar], point ); +- } +- +- for (i=0; iDrawBitmap(vgafont[achar], point ); +- } +- } +- +- prev_block_cursor_x = cursor_x; +- prev_block_cursor_y = cursor_y; +- +- // now draw character at new block cursor location in reverse +- if ( (cursor_y*80 + cursor_x) < nchars ) { +- achar = new_text[(cursor_y*80 + cursor_x)*2]; +- point.Set(cursor_x*8, cursor_y*16 + bx_headerbar_y); +- aView->set_inv_text_colors(); +- aView->DrawBitmap(vgafont[achar], point ); +- aView->set_text_colors(); +- } +- +- aWindow->Unlock(); ++ uint32 lockCount = 0; ++ while (IsLocked()) ++ { ++ Unlock(); ++ lockCount++; ++ } ++ bView->LockLooper(); ++ bView->Window()->Close(); ++ while (lockCount--) Lock(); + } +- + +- void +-bx_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) ++void BochsApplication::BxExit() + { +- for (unsigned y=0; yLock(); +- image->SetBits(rawdata, rowsize_padded * y_tilesize, 0, B_COLOR_8_BIT); +- image_origin.Set(x0, y0 + bx_headerbar_y); +- +- aView->DrawBitmap( image, image_origin ); +- aWindow->Unlock(); ++ if (Lock()) Quit(); + } + ++// ========== class BochsWindow definitions ========== + +- Boolean +-bx_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) ++BochsWindow::BochsWindow(BRect frame): ++ BWindow(frame, "Bochs", B_TITLED_WINDOW, B_NOT_RESIZABLE) + { +- cmap_index[index] = screen->IndexForColor( +- red, green, blue); +- return(1); +-} + +- +- void +-bx_gui_c::dimension_update(unsigned x, unsigned y) +-{ +- aWindow->Lock(); +- aWindow->ResizeTo(x, y + bx_headerbar_y); +- aWindow->Unlock(); + } +- +- +-////////////////////////////////////////////////////// +- + +- void +-GUI_end() ++bool BochsWindow::QuitRequested() + { +- //myApplication->Run(); +- +- delete(myApplication); ++ be_app->PostMessage(B_QUIT_REQUESTED); ++ return false; + } +- +-BochsApplication::BochsApplication() +- : BApplication("application/x-vnd.Be-Bochs") +-{ +- BRect aRect; +- +- int left, right, top, bottom; +- left = 5; +- top = 80; +- dimension_x = 640; +- dimension_y = 480 + bx_headerbar_y; +- right = left + dimension_x - 1; +- bottom = top + dimension_y - 1; + +- // set up a rectangle and instantiate a new window +- aRect.Set(left, top, right, bottom); +- aWindow = new BochsWindow(aRect); ++// ========== class BochsView definitions ========== + +- // set up a rectangle and instantiate a new view +- // view rect should be same size as window rect but with left top at (0, 0) +- aRect.OffsetTo(B_ORIGIN); +- aView = new BochsView(aRect, "BochsView"); +- aView->SetViewColor(0, 0, 0); +- +- aView->set_text_colors(); +- +- // add view to window +- aWindow->AddChild(aView); +- +- // make window visible +- aWindow->Show(); ++BochsView::BochsView(BRect rect, char *name, uint32 headerHeight, uint32 tileWidth, uint32 tileHeight): ++ BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW | B_PULSE_NEEDED), ++ fLastModifiers(0), ++ fCursorX(0), fCursorY(0), ++ fCursorVisible(false), ++ fInTextMode(true), ++ fTileWidth(tileWidth), ++ fTileHeight(tileHeight), ++ fUseStandardInput(true), ++ fMouseEnabled(false), ++ fKeyQueue(SCANCODE_BUFSIZE, "keyboard queue"), ++ fMouseQueue(MOUSE_BUFSIZE, "mouse queue"), ++ fCommandQueue(10, "headerbar queue"), ++ fBitmapCount(0), ++ fHeaderEntryCount(0), ++ fHeaderHeight(headerHeight), ++ fHeaderLeft(0), ++ fHeaderRight(0) ++{ ++ SetViewColor(0, 0, 0); ++ fBackBitmap = new BBitmap(rect, B_BITMAP_ACCEPTS_VIEWS, B_CMAP8); ++ fBackView = new BView(rect,"BackView", B_FOLLOW_ALL, B_WILL_DRAW); ++ fBackView->SetViewColor(0, 0, 0); ++ fBackBitmap->AddChild(fBackView); ++ ++ fCaptureTarget = new CaptureTarget(this); ++ ++ // start out with all color map indeces pointing to Black ++ fColorMap[0] = fScreen.IndexForColor(0, 0, 0); ++ for (unsigned i=1; i<256; i++) ++ { ++ fColorMap[i] = fColorMap[0]; ++ } ++ ++ BX_INFO(( "BeOS: creating VGA font from bitmaps" )); ++ ++ // VGA font is 8wide x 16high ++ uint8 *bits; ++ for (uint32 c = 0; c < 256; c++) ++ { ++ fVgafont[c] = new BBitmap(BRect(0,0, 7,15), B_MONOCHROME_1_BIT); ++ if (!fVgafont[c]) ++ { ++ BX_PANIC(("beos: could not create bitmap")); ++ } ++ ++ int32 bytesPerRow = fVgafont[c]->BytesPerRow(); ++ bits = (uint8*)fVgafont[c]->Bits(); ++ memset(bits, 0, fVgafont[c]->BitsLength()); ++ for (uint32 i = 0; i < 16; i++) ++ { ++ bits[i * bytesPerRow] = ReverseBitorder(bx_vgafont[c].data[i]); ++ } ++ } + } + +-//void set_palette_entry(long i,rgb_color c); +- +-BochsWindow::BochsWindow(BRect frame) +- : BWindow(frame, "BeBochs V1.3.pre compiled Bernd Korz", B_TITLED_WINDOW, B_NOT_RESIZABLE) ++BochsView::~BochsView() + { ++ delete fBackBitmap; ++ for (int32 i = 0; i < 256; i++) delete fVgafont[i]; ++ delete fCursorBitmap; ++ delete fCaptureTarget; ++ bView = NULL; + } + +-bool BochsWindow::QuitRequested() ++void BochsView::AttachedToWindow() + { +- be_app->PostMessage(B_QUIT_REQUESTED); +- return(TRUE); ++ SetViewColor(B_TRANSPARENT_COLOR); ++ MakeFocus(true); ++ Window()->AddFilter(new ModifierFilter(this)); ++ be_app->AddHandler(fCaptureTarget); ++ BMessage modifiersMessage(B_MODIFIERS_CHANGED); ++ modifiersMessage.AddInt32("modifiers", (int32)modifiers()); ++ Window()->PostMessage(&modifiersMessage, this); ++ BPoint p; ++ uint32 buttons; ++ GetMouse(&p, &buttons); ++ fLastMouseX = (uint32)p.x; ++ fLastMouseY = (uint32)p.y; ++} ++ ++void BochsView::DetachedFromWindow() ++{ ++ if (be_app->Lock()) ++ { ++ be_app->RemoveHandler(fCaptureTarget); ++ be_app->Unlock(); ++ } + } + +- +- void +-BochsWindow::FrameResized(float width, float height) ++void BochsView::Draw(BRect rect) + { +- dimension_x = unsigned(width); +- dimension_y = unsigned(height) + bx_headerbar_y; +- if ( bx_gui_c_ptr ) +- bx_gui_c_ptr->show_headerbar(); ++ if (fBackBitmap->Lock()) ++ { ++ fBackView->Sync(); ++ fBackBitmap->Unlock(); ++ } ++ DrawBitmapAsync(fBackBitmap, rect, rect); ++} ++ ++void BochsView::MouseDown(BPoint point) ++{ ++ if (point.y < fHeaderHeight) ++ { ++ int xorigin; ++ for (unsigned i = 0; i < fHeaderEntryCount; i++) ++ { ++ if (fHeaderEntries[i].alignment == BX_GRAVITY_LEFT) ++ xorigin = fHeaderEntries[i].xorigin; ++ else ++ xorigin = bView->Bounds().IntegerWidth() - fHeaderEntries[i].xorigin; ++ if ( (point.x >= xorigin) && (point.x < (xorigin + int(fHeaderEntries[i].xdim))) ) ++ { ++ fCommandQueue.Enq(fHeaderEntries[i].f); ++ break; ++ } ++ } ++ return; ++ } ++ uint32 buttons; ++ Window()->CurrentMessage()->FindInt32("buttons", (int32*)&buttons); ++ ++ fMouseQueue.Enq(mouse_event(0, 0, ++ ((buttons & B_PRIMARY_MOUSE_BUTTON) ? MOUSE_L : 0) | ++ ((buttons & B_SECONDARY_MOUSE_BUTTON) ? MOUSE_R : 0))); ++ ++ BX_DEBUG(("mousedown()")); + } +- +- +-//------------------------------ + +- +-BochsView::BochsView(BRect rect, char *name) +- : BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW) ++void BochsView::MouseUp(BPoint point) + { +- backing_store = new BBitmap(rect, B_BITMAP_ACCEPTS_VIEWS, B_COLOR_8_BIT); +- backing_view = new BView(rect,"backing store", B_FOLLOW_ALL, B_WILL_DRAW); +- backing_store->AddChild(backing_view); ++ uint32 buttons; ++ Window()->CurrentMessage()->FindInt32("buttons", (int32*)&buttons); ++ ++ fMouseQueue.Enq(mouse_event(0, 0, ++ ((buttons & B_PRIMARY_MOUSE_BUTTON) ? MOUSE_L : 0) | ++ ((buttons & B_SECONDARY_MOUSE_BUTTON) ? MOUSE_R : 0))); ++ ++ BX_DEBUG(( "mouseup()" )); ++} ++ ++void BochsView::MouseMoved(BPoint point, uint32 transit, const BMessage *message) ++{ ++ if (!fUseStandardInput && fMouseEnabled) ++ { ++ be_app->ObscureCursor(); ++ return; ++ } ++ uint32 buttons; ++ Window()->CurrentMessage()->FindInt32("buttons", (int32*)&buttons); ++ fMouseQueue.Enq(mouse_event((uint32)point.x - fLastMouseX, fLastMouseY - (uint32)point.y, ++ ((buttons & B_PRIMARY_MOUSE_BUTTON) ? MOUSE_L : 0) | ++ ((buttons & B_SECONDARY_MOUSE_BUTTON) ? MOUSE_R : 0))); ++ fLastMouseX = (uint32)point.x; ++ fLastMouseY = (uint32)point.y; ++ BX_DEBUG(( "mousemoved()" )); + } + +- void +-BochsView::set_text_colors(void) ++void BochsView::KeyDown(const char *bytes, int32 numBytes) + { +- aView->SetHighColor(255, 255, 255); +- aView->SetLowColor(0, 0, 0); ++ int32 key; ++ Window()->CurrentMessage()->FindInt32("key", &key); ++ fKeyQueue.Enq(key_to_scancode[key] | BX_KEY_PRESSED); + } + +- void +-BochsView::set_inv_text_colors(void) ++void BochsView::KeyUp(const char *bytes, int32 numBytes) + { +- aView->SetHighColor(0, 0, 0); +- aView->SetLowColor(255, 255, 255); ++ int32 key; ++ Window()->CurrentMessage()->FindInt32("key", &key); ++ fKeyQueue.Enq(key_to_scancode[key] | BX_KEY_RELEASED); ++} ++ ++void BochsView::MessageReceived(BMessage *msg) ++{ ++ switch (msg->what) ++ { ++ case MSG_ENQ_COMMAND: ++ { ++ void (*command)(void); ++ msg->FindPointer("command", (void**)&command); ++ fCommandQueue.Enq(command); ++ } ++ break; ++ case B_MODIFIERS_CHANGED: ++ { ++ uint32 modifiers = 0; ++ msg->FindInt32("modifiers", (int32*)&modifiers); ++ //fprintf(stderr, "# modifiers: %08x -> %08x\n", fLastModifiers, modifiers); ++ if (!(fLastModifiers & B_LEFT_SHIFT_KEY) && (modifiers & B_LEFT_SHIFT_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_SHIFT_L | BX_KEY_PRESSED); ++ //fprintf(stderr, "# left shift down\n"); ++ } ++ else if ((fLastModifiers & B_LEFT_SHIFT_KEY) && !(modifiers & B_LEFT_SHIFT_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_SHIFT_L | BX_KEY_RELEASED); ++ //fprintf(stderr, "# left shift up\n"); ++ } ++ ++ if (!(fLastModifiers & B_RIGHT_SHIFT_KEY) && (modifiers & B_RIGHT_SHIFT_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_SHIFT_R | BX_KEY_PRESSED); ++ //fprintf(stderr, "# right shift down\n"); ++ } ++ else if ((fLastModifiers & B_RIGHT_SHIFT_KEY) && !(modifiers & B_RIGHT_SHIFT_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_SHIFT_R | BX_KEY_RELEASED); ++ //fprintf(stderr, "# right shift up\n"); ++ } ++ ++ if (!(fLastModifiers & B_CONTROL_KEY) && (modifiers & B_CONTROL_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_CTRL_L | BX_KEY_PRESSED); ++ //fprintf(stderr, "# left ctrl down\n"); ++ } ++ else if ((fLastModifiers & B_CONTROL_KEY) && !(modifiers & B_CONTROL_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_CTRL_L | BX_KEY_RELEASED); ++ //fprintf(stderr, "# left ctrl up\n"); ++ } ++ ++ if (!(fLastModifiers & B_OPTION_KEY) && (modifiers & B_OPTION_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_CTRL_R | BX_KEY_PRESSED); ++ //fprintf(stderr, "# right ctrl down\n"); ++ } ++ else if ((fLastModifiers & B_OPTION_KEY) && !(modifiers & B_OPTION_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_CTRL_R | BX_KEY_RELEASED); ++ //fprintf(stderr, "# right ctrl up\n"); ++ } ++ ++ if (!(fLastModifiers & B_LEFT_COMMAND_KEY) && (modifiers & B_LEFT_COMMAND_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_ALT_L | BX_KEY_PRESSED); ++ //fprintf(stderr, "# left alt down\n"); ++ } ++ else if ((fLastModifiers & B_LEFT_COMMAND_KEY) && !(modifiers & B_LEFT_COMMAND_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_ALT_L | BX_KEY_RELEASED); ++ //fprintf(stderr, "# left alt up\n"); ++ } ++ ++ if (!(fLastModifiers & B_RIGHT_COMMAND_KEY) && (modifiers & B_RIGHT_COMMAND_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_ALT_R | BX_KEY_PRESSED); ++ //fprintf(stderr, "# right alt down\n"); ++ } ++ else if ((fLastModifiers & B_RIGHT_COMMAND_KEY) && !(modifiers & B_RIGHT_COMMAND_KEY)) ++ { ++ fKeyQueue.Enq(BX_KEY_ALT_R | BX_KEY_RELEASED); ++ //fprintf(stderr, "# right alt up\n"); ++ } ++ ++ if (!(fLastModifiers & B_CAPS_LOCK) && (modifiers & B_CAPS_LOCK)) ++ { ++ fKeyQueue.Enq(BX_KEY_CAPS_LOCK | BX_KEY_PRESSED); ++ fKeyQueue.Enq(BX_KEY_CAPS_LOCK | BX_KEY_RELEASED); ++ //fprintf(stderr, "# caps down\n"); ++ } ++ else if ((fLastModifiers & B_CAPS_LOCK) && !(modifiers & B_CAPS_LOCK)) ++ { ++ fKeyQueue.Enq(BX_KEY_CAPS_LOCK | BX_KEY_PRESSED); ++ fKeyQueue.Enq(BX_KEY_CAPS_LOCK | BX_KEY_RELEASED); ++ //fprintf(stderr, "# caps up\n"); ++ } ++ ++ if (!(fLastModifiers & B_SCROLL_LOCK) && (modifiers & B_SCROLL_LOCK)) ++ { ++ fKeyQueue.Enq(BX_KEY_SCRL_LOCK | BX_KEY_PRESSED); ++ fKeyQueue.Enq(BX_KEY_SCRL_LOCK | BX_KEY_RELEASED); ++ //fprintf(stderr, "# scrollock down\n"); ++ } ++ else if ((fLastModifiers & B_SCROLL_LOCK) && !(modifiers & B_SCROLL_LOCK)) ++ { ++ fKeyQueue.Enq(BX_KEY_SCRL_LOCK | BX_KEY_PRESSED); ++ fKeyQueue.Enq(BX_KEY_SCRL_LOCK | BX_KEY_RELEASED); ++ //fprintf(stderr, "# scrollock up\n"); ++ } ++ ++ if (!(fLastModifiers & B_NUM_LOCK) && (modifiers & B_NUM_LOCK)) ++ { ++ fKeyQueue.Enq(BX_KEY_NUM_LOCK | BX_KEY_PRESSED); ++ fKeyQueue.Enq(BX_KEY_NUM_LOCK | BX_KEY_RELEASED); ++ //fprintf(stderr, "# num down\n"); ++ } ++ else if ((fLastModifiers & B_NUM_LOCK) && !(modifiers & B_NUM_LOCK)) ++ { ++ fKeyQueue.Enq(BX_KEY_NUM_LOCK | BX_KEY_PRESSED); ++ fKeyQueue.Enq(BX_KEY_NUM_LOCK | BX_KEY_RELEASED); ++ //fprintf(stderr, "# num up\n"); ++ } ++ fLastModifiers = modifiers; ++ } ++ break; ++ default: ++ BView::MessageReceived(msg); ++ } ++} ++ ++void BochsView::GotCapturedInput(BMessage *msg) ++{ ++ switch (msg->what) ++ { ++ case B_MOUSE_MOVED: ++ { ++ uint32 buttons; ++ msg->FindInt32("buttons", (int32*)&buttons); ++ BPoint motion; ++ msg->FindPoint("motion", &motion); ++ fMouseQueue.Enq(mouse_event((uint32)motion.x, -(uint32)motion.y, ++ ((buttons & B_PRIMARY_MOUSE_BUTTON) ? MOUSE_L : 0) | ++ ((buttons & B_SECONDARY_MOUSE_BUTTON) ? MOUSE_R : 0))); ++ BX_DEBUG(( "mousemoved()" )); ++ } ++ break; ++ case B_MOUSE_DOWN: ++ case B_MOUSE_UP: ++ { ++ uint32 buttons; ++ msg->FindInt32("buttons", (int32*)&buttons); ++ if (buttons & B_PRIMARY_MOUSE_BUTTON && buttons & B_SECONDARY_MOUSE_BUTTON) ++ { ++ fCommandQueue.Enq(release_mouse); ++ break; ++ } ++ ++ fMouseQueue.Enq(mouse_event(0, 0, ++ ((buttons & B_PRIMARY_MOUSE_BUTTON) ? MOUSE_L : 0) | ++ ((buttons & B_SECONDARY_MOUSE_BUTTON) ? MOUSE_R : 0))); ++ ++ //BX_DEBUG(("mousedown()")); ++ } ++ break; ++ case B_KEY_DOWN: ++ case B_UNMAPPED_KEY_DOWN: ++ { ++ int32 key; ++ msg->FindInt32("key", &key); ++ fKeyQueue.Enq(key_to_scancode[key] | BX_KEY_PRESSED); ++ } ++ break; ++ case B_KEY_UP: ++ case B_UNMAPPED_KEY_UP: ++ { ++ int32 key; ++ msg->FindInt32("key", &key); ++ fKeyQueue.Enq(key_to_scancode[key] | BX_KEY_RELEASED); ++ } ++ } ++} ++ ++void BochsView::WindowActivated(bool active) ++{ ++ if (active) CaptureInput(); ++ else ReleaseInput(); ++} ++ ++void BochsView::CaptureInput() ++{ ++ BMessenger inputServer("application/x-vnd.Be-input_server"); ++ BMessage msg(MSG_REQUEST_CAPTURE); ++ msg.AddMessenger("target", BMessenger(fCaptureTarget)); ++ msg.AddInt32("command", MSG_START_CAPTURE); ++ msg.AddInt32("input", (fMouseEnabled ? INPUT_TYPE_MOUSE : 0) | INPUT_TYPE_KEYBOARD); ++ inputServer.SendMessage(&msg, &msg); ++ if (msg.what == MSG_CAPTURE_OK) ++ { ++ BX_INFO(( "capturing keyboard%s input", (fMouseEnabled ? " and mouse" : ""))); ++ fUseStandardInput = false; ++ if (fMouseEnabled) be_app->ObscureCursor(); ++ else be_app->ShowCursor(); ++ } ++ else ++ { ++ BX_ERROR(( "couldn't set up input capturing, using loser method" )); ++ fUseStandardInput = true; ++ BMessage modifiersMessage(B_MODIFIERS_CHANGED); ++ modifiersMessage.AddInt32("modifiers", (int32)modifiers()); ++ Window()->PostMessage(&modifiersMessage, this); ++ } ++} ++ ++void BochsView::ReleaseInput() ++{ ++ BMessenger inputServer("application/x-vnd.Be-input_server"); ++ BMessage msg(MSG_REQUEST_CAPTURE); ++ msg.AddInt32("command", MSG_STOP_CAPTURE); ++ inputServer.SendMessage(&msg); ++ be_app->ShowCursor(); ++ fUseStandardInput = true; ++} ++ ++void BochsView::Pulse() ++{ ++ if (!fInTextMode) return; ++ if (fBackView->LockLooper()) ++ { ++ ShowCursor(!fCursorVisible); ++ fBackView->UnlockLooper(); ++ } ++} ++ ++void BochsView::HandleEvents() ++{ ++ if (LockLooper()) ++ { ++ //Queue *keyQueue = bView->KeyQueue(); ++ while (!fKeyQueue.QueueEmpty()) ++ { ++ uint32 key; ++ fKeyQueue.Deq(&key); ++ bx_devices.keyboard->gen_scancode(key); ++ } ++ ++ //Queue *mouseQueue = bView->MouseQueue(); ++ while (!fMouseQueue.QueueEmpty()) ++ { ++ mouse_event event; ++ fMouseQueue.Deq(&event); ++ if (fMouseEnabled) bx_devices.keyboard->mouse_motion(event.x, ++ event.y, event.buttonState); ++ } ++ ++ //Queue *commandQueue = bView->CommandQueue(); ++ while (!fCommandQueue.QueueEmpty()) ++ { ++ void (*f)(void); ++ fCommandQueue.Deq(&f); ++ f(); ++ } ++ UnlockLooper(); ++ } ++} ++ ++void BochsView::ClearScreen() ++{ ++ if (fBackBitmap->Lock()) ++ { ++ fBackView->SetLowColor(0, 0, 0); ++ BRect rect(fBackView->Bounds()); ++ rect.top += fHeaderHeight; ++ fBackView->FillRect(rect, B_SOLID_LOW); ++ fBackBitmap->Unlock(); ++ } ++ if (LockLooper()) ++ { ++ Invalidate(); ++ UnlockLooper(); ++ } ++} ++ ++void BochsView::TextUpdate(uint8 *oldText, uint8 *newText, ++ uint32 cursorX, uint32 cursorY, uint32 rowCount) ++{ ++ if (LockLooper() && fBackBitmap->Lock()) ++ { ++ fInTextMode = true; ++ bool cursorWasShown = fCursorVisible; ++ ShowCursor(false); ++ for (uint32 i = 0; i < rowCount * 80 * 2; i += 2) ++ { ++ if ( (oldText[i] != newText[i]) || ++ (oldText[i+1]!=newText[i+1]) ) ++ { ++ uint8 achar = newText[i]; ++ uint8 acolor = newText[i + 1]; ++ ++ fBackView->SetLowColor(fScreen.ColorForIndex(fColorMap[acolor >> 4])); ++ fBackView->SetHighColor(fScreen.ColorForIndex(fColorMap[acolor & 0x0F])); ++ ++ BPoint point(((i / 2) % 80) * 8, (i/2) / 80 * 16 + fHeaderHeight); ++ fBackView->DrawBitmapAsync(fVgafont[achar], point); ++ Invalidate(fVgafont[achar]->Bounds().OffsetToSelf(point)); ++ } ++ } ++ ++ fCursorX = cursorX; ++ fCursorY = cursorY; ++ ++ if ( (cursorY * 80 + cursorX) < rowCount * 80 ) ++ { ++ fCursorValue[0] = newText[(cursorY * 80 + cursorX) * 2]; ++ fCursorValue[1] = newText[(cursorY * 80 + cursorX) * 2 + 1]; ++ } ++ ShowCursor(cursorWasShown); ++ fBackBitmap->Unlock(); ++ UnlockLooper(); ++ } ++} ++ ++void BochsView::GraphicsTileUpdate(uint8 *tile, uint32 x0, uint32 y0) ++{ ++ if (LockLooper()) ++ { ++ fInTextMode = false; ++ ShowCursor(false); ++ uint8 *bits = (uint8*)fBackBitmap->Bits(); ++ int32 bytesPerRow = fBackBitmap->BytesPerRow(); ++ bits += (y0 + fHeaderHeight) * bytesPerRow + x0; ++ if (fBackBitmap->Lock()) ++ { ++ fBackView->Sync(); ++ for (uint32 y = 0; y < fTileHeight; y++) ++ { ++ for (uint32 x = 0; x < fTileWidth; x++) ++ { ++ *(bits + x) = fColorMap[ tile[y*fTileWidth + x] ]; ++ } ++ bits += bytesPerRow; ++ } ++ fBackBitmap->Unlock(); ++ } ++ Invalidate(BRect(x0, y0 + fHeaderHeight, x0 + fTileWidth - 1, y0 + fHeaderHeight + fTileHeight -1)); ++ UnlockLooper(); ++ } ++} ++ ++bool BochsView::PaletteChange(uint32 index, uint32 red, uint32 green, uint32 blue) ++{ ++ if (LockLooper()) ++ { ++ fColorMap[index] = fScreen.IndexForColor(red, green, blue); ++ UnlockLooper(); ++ } ++ return true; ++} ++ ++void BochsView::DimensionUpdate(uint32 x, uint32 y) ++{ ++ if (LockLooper()) ++ { ++ BRect rect(Bounds().OffsetToSelf(0, 0)); ++ if (x != (uint32)rect.IntegerWidth() || y + fHeaderHeight != (uint32)rect.IntegerHeight()) ++ { ++ Window()->ResizeTo(x, y + fHeaderHeight); ++ delete fBackBitmap; ++ rect.Set(0, 0, x, y + fHeaderHeight); ++ fBackBitmap = new BBitmap(rect, B_BITMAP_ACCEPTS_VIEWS, B_CMAP8); ++ fBackView = new BView(rect,"BackView", B_FOLLOW_NONE, B_WILL_DRAW); ++ fBackBitmap->AddChild(fBackView); ++ ShowHeaderbar(); ++ } ++ UnlockLooper(); ++ } ++} ++ ++void BochsView::HandleEnableMouse(bool enable) ++{ ++ if (LockLooper()) ++ { ++ fMouseEnabled = enable; ++ if (Window()->IsActive()) CaptureInput(); ++ UnlockLooper(); ++ } ++} ++ ++uint32 BochsView::CreateBitmap(const uchar *bmap, uint32 xdim, uint32 ydim) ++{ ++ if (LockLooper()) ++ { ++ if (fBitmapCount >= BX_MAX_PIXMAPS) ++ { ++ BX_PANIC(("beos: too many pixmaps, increase BX_MAX_PIXMAPS")); ++ } ++ ++ uint32 bmpIndex = fBitmapCount++; ++ ++ fBitmaps[bmpIndex].bmap = ++ new BBitmap(BRect(0, 0, xdim-1, ydim-1), B_MONOCHROME_1_BIT); ++ if (!fBitmaps[bmpIndex].bmap) ++ { ++ BX_PANIC(("beos: could not create bitmap")); ++ } ++ ++ int32 bitsLength = fBitmaps[bmpIndex].bmap->BitsLength(); ++ uchar *bits = (uchar *) fBitmaps[bmpIndex].bmap->Bits(); ++ for (int32 i = 0; i < bitsLength; i++) ++ { ++ bits[i] = ReverseBitorder(bmap[i]); ++ } ++ ++ fBitmaps[bmpIndex].xdim = xdim; ++ fBitmaps[bmpIndex].ydim = ydim; ++ UnlockLooper(); ++ return bmpIndex; ++ } ++ return 0; ++} ++ ++uint32 BochsView::HeaderbarBitmap(uint32 bmap_id, uint32 alignment, void (*f)(void)) ++{ ++ if (LockLooper()) ++ { ++ if ( (fHeaderEntryCount + 1) > BX_MAX_HEADERBAR_ENTRIES ) ++ BX_PANIC(("beos: too many headerbar entries, increase BX_MAX_HEADERBAR_ENTRIES")); ++ ++ ++ uint32 hbIndex = fHeaderEntryCount++; ++ ++ fHeaderEntries[hbIndex].bitmap = fBitmaps[bmap_id].bmap; ++ fHeaderEntries[hbIndex].xdim = fBitmaps[bmap_id].xdim; ++ fHeaderEntries[hbIndex].ydim = fBitmaps[bmap_id].ydim; ++ fHeaderEntries[hbIndex].alignment = alignment; ++ fHeaderEntries[hbIndex].f = f; ++ if (alignment == BX_GRAVITY_LEFT) ++ { ++ fHeaderEntries[hbIndex].xorigin = fHeaderLeft; ++ fHeaderEntries[hbIndex].yorigin = 0; ++ fHeaderLeft += fBitmaps[bmap_id].xdim; ++ } ++ else // BX_GRAVITY_RIGHT ++ { ++ fHeaderRight += fBitmaps[bmap_id].xdim; ++ fHeaderEntries[hbIndex].xorigin = fHeaderRight; ++ fHeaderEntries[hbIndex].yorigin = 0; ++ } ++ UnlockLooper(); ++ return(hbIndex); ++ } ++ return 0; ++} ++ ++void BochsView::ReplaceBitmap(uint32 hbar_id, uint32 bmap_id) ++{ ++ if (LockLooper() && fBackBitmap->Lock()) ++ { ++ uint32 xorigin; ++ ++ fHeaderEntries[hbar_id].bitmap = fBitmaps[bmap_id].bmap; ++ ++ if (fHeaderEntries[hbar_id].alignment == BX_GRAVITY_LEFT) ++ xorigin = fHeaderEntries[hbar_id].xorigin; ++ else ++ xorigin = Bounds().IntegerWidth() - fHeaderEntries[hbar_id].xorigin; ++ fBackView->SetLowColor(0, 0, 0); ++ fBackView->SetHighColor(0, 100, 0); ++ fBackView->DrawBitmapAsync(fHeaderEntries[hbar_id].bitmap, BPoint(xorigin, 0)); ++ fBackBitmap->Unlock(); ++ Invalidate(fHeaderEntries[hbar_id].bitmap->Bounds().OffsetToSelf(xorigin, 0)); ++ UnlockLooper(); ++ } + } + +- void +-BochsView::set_headerbar_colors(void) ++void BochsView::ShowHeaderbar() + { +- aView->SetHighColor(0, 0, 0); +- aView->SetLowColor(255, 255, 255); ++ if (LockLooper() && fBackBitmap->Lock()) ++ { ++ uint32 xorigin; ++ fBackView->SetLowColor(0, 0, 0); ++ fBackView->SetHighColor(0, 100, 0); ++ BRect rect(Bounds()); ++ rect.bottom = rect.top + fHeaderHeight - 1; ++ fBackView->FillRect(rect, B_SOLID_LOW); ++ for (unsigned i = 0; i < fHeaderEntryCount; i++) ++ { ++ if (fHeaderEntries[i].alignment == BX_GRAVITY_LEFT) ++ xorigin = fHeaderEntries[i].xorigin; ++ else ++ xorigin = rect.IntegerWidth() - fHeaderEntries[i].xorigin; ++ fBackView->DrawBitmapAsync( fHeaderEntries[i].bitmap, BPoint(xorigin, 0) ); ++ } ++ fBackBitmap->Unlock(); ++ Invalidate(rect); ++ UnlockLooper(); ++ } + } + +-void BochsView::AttachedToWindow() ++void BochsView::ShowCursor(bool show) + { +- BFont font(be_fixed_font); +- +- aWindow->Lock(); +- font.SetSize(16); +- font.SetFlags(B_DISABLE_ANTIALIASING); +- aView->SetFont(&font); +- +- aView->MakeFocus(true); +- aWindow->Unlock(); +- +- view_attached = 1; ++ if (fBackBitmap->Lock()) ++ { ++ fCursorVisible = show; ++ BRect rect; ++ if (show) ++ { ++ BPoint point(fCursorX * 8, fHeaderHeight + fCursorY * 16 + 14); ++ rect.Set(point.x, point.y, point.x + 7, point.y + 1); ++ fBackView->SetHighColor(fScreen.ColorForIndex(fColorMap[fCursorValue[1] & 0x0F])); ++ fBackView->FillRect(rect, B_SOLID_HIGH); ++ Invalidate(rect); ++ } ++ else ++ { ++ BPoint point(fCursorX * 8, fHeaderHeight + fCursorY * 16); ++ rect.Set(point.x, point.y, point.x + 7, point.y + 15); ++ fBackView->SetHighColor(fScreen.ColorForIndex(fColorMap[fCursorValue[1] & 0x0F])); ++ fBackView->SetLowColor(fScreen.ColorForIndex(fColorMap[fCursorValue[1] >> 4])); ++ fBackView->DrawBitmapAsync(fVgafont[fCursorValue[0]], point); ++ } ++ Invalidate(rect); ++ fBackBitmap->Unlock(); ++ } + } + +-void BochsView::MouseDown(BPoint point) ++uchar BochsView::ReverseBitorder(uchar b) + { +- UNUSED(point); +- if (point.y < BX_HEADER_BAR_Y) { +- headerbar_click(int(point.x), int(point.y)); +- return; +- } +- BX_DEBUG(("mousedown()")); ++ uchar ret=0; ++ for (uint32 i=0; i<8; i++) ++ { ++ ret |= (b & 0x01) << (7-i); ++ b >>= 1; ++ } ++ return ret; + } + +-void BochsView::MouseUp(BPoint point) ++void BochsView::release_mouse() + { +- UNUSED(point); +- // currently a place holder function +- BX_DEBUG(( "mouseup()" )); +- BView::MouseUp(point); ++ bx_options.Omouse_enabled->set(false); + } + +-void BochsView::MouseMoved(BPoint point, +- uint32 transit, const BMessage *message) +-{ +- UNUSED(point); +- UNUSED(transit); +- UNUSED(message); +- BX_DEBUG(( "mousemoved()" )); +-} ++// ========== class ModifierFilter definitions ========== + +-void BochsView::KeyDown(const char *bytes, int32 numBytes) ++ModifierFilter::ModifierFilter(BHandler *target): ++ BMessageFilter(B_MODIFIERS_CHANGED), ++ fTarget(target) + { +- BMessage *msg; +- //int32 key; +- int32 modifiers; +- +- uint8 byte; +- +- msg = Window()->CurrentMessage(); +- if ( !msg ) { +- BX_DEBUG(( "keydown() msg NULL" )); +- return; +- } +- modifiers = msg->FindInt32("modifiers"); +-#if 0 +- B_SHIFT_KEY = 0x00000001, +- B_COMMAND_KEY = 0x00000002, +- B_CONTROL_KEY = 0x00000004, +- B_CAPS_LOCK = 0x00000008, +- B_SCROLL_LOCK = 0x00000010, +- B_NUM_LOCK = 0x00000020, +- B_OPTION_KEY = 0x00000040, +- B_MENU_KEY = 0x00000080, +- B_LEFT_SHIFT_KEY = 0x00000100, +- B_RIGHT_SHIFT_KEY = 0x00000200, +- B_LEFT_COMMAND_KEY = 0x00000400, +- B_RIGHT_COMMAND_KEY = 0x00000800, +- B_LEFT_CONTROL_KEY = 0x00001000, +- B_RIGHT_CONTROL_KEY = 0x00002000, +- B_LEFT_OPTION_KEY = 0x00004000, +- B_RIGHT_OPTION_KEY = 0x00008000 +-#endif +-//if (modifiers) { +-// fprintf(stderr, "# modifiers = %08x\n", (unsigned) modifiers); +-// } +- +- if (numBytes == 1) { +- //fprintf(stderr, "# down: char %02xh\n", (unsigned) bytes[0]); +- byte = bytes[0]; +- if ( byte == 0x00 ) { +- // Ctrl-Space +- enq_key_event(BX_KEY_CTRL_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SPACE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SPACE, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_CTRL_L, BX_KEY_RELEASED); +- return; +- } +- if ( byte == 0x1b ) { +- // Esc +- if (modifiers & B_CONTROL_KEY) +- enq_key_event(BX_KEY_CTRL_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_ESC, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_ESC, BX_KEY_RELEASED); +- if (modifiers & B_CONTROL_KEY) +- enq_key_event(BX_KEY_CTRL_L, BX_KEY_RELEASED); +- return; +- } +- if ( (byte >= 0x30) && (byte <= 0x39) ) { +- // 0 .. 9 +- byte -= 0x30; +- enq_key_event(BX_KEY_0 + byte, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_0 + byte, BX_KEY_RELEASED); +- return; +- } +- if ( (byte >= 0x41) && (byte <= 0x5A) ) { +- // A .. Z +- byte -= 0x41; +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_A + byte, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_A + byte, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- return; +- } +- if ( (byte >= 0x61) && (byte <= 0x7A) ) { +- // a .. z +- byte -= 0x61; +- enq_key_event(BX_KEY_A + byte, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_A + byte, BX_KEY_RELEASED); +- return; +- } +- switch (byte) { +- case 0x20: // Space +- enq_key_event(BX_KEY_SPACE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SPACE, BX_KEY_RELEASED); +- break; +- case 0x21: // Exclamation Point +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_1, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_1, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x22: // Double Quotes +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SINGLE_QUOTE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SINGLE_QUOTE, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x23: // Pound Sign +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_3, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_3, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x24: // Dollar Sign +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_4, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_4, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x25: // Percent +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_5, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_5, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x26: // Ampersand +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_7, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_7, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x27: // Single Quote +- enq_key_event(BX_KEY_SINGLE_QUOTE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SINGLE_QUOTE, BX_KEY_RELEASED); +- break; +- case 0x28: // Left Paren +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_9, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_9, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x29: // Right Paren +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_0, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_0, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x2a: // Multiply +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_8, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_8, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x2b: // Add +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_EQUALS, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_EQUALS, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x2c: // Comma +- enq_key_event(BX_KEY_COMMA, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_COMMA, BX_KEY_RELEASED); +- break; +- case 0x2d: // Minus +- enq_key_event(BX_KEY_MINUS, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_MINUS, BX_KEY_RELEASED); +- break; +- case 0x2e: // Period +- enq_key_event(BX_KEY_PERIOD, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_PERIOD, BX_KEY_RELEASED); +- break; +- case 0x2f: // Slash +- enq_key_event(BX_KEY_SLASH, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SLASH, BX_KEY_RELEASED); +- break; +- +- case 0x3a: // Colon +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SEMICOLON, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SEMICOLON, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x3b: // Semi-Colon +- enq_key_event(BX_KEY_SEMICOLON, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SEMICOLON, BX_KEY_RELEASED); +- break; +- case 0x3c: // Less Than +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_COMMA, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_COMMA, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x3d: // Equals +- enq_key_event(BX_KEY_EQUALS, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_EQUALS, BX_KEY_RELEASED); +- break; +- case 0x3e: // Greater Than +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_PERIOD, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_PERIOD, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x3f: // Question Mark +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SLASH, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_SLASH, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x40: // At Sign +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_2, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_2, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- +- case 0x5b: // Left Bracket +- enq_key_event(BX_KEY_LEFT_BRACKET, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_LEFT_BRACKET, BX_KEY_RELEASED); +- break; +- case 0x5c: // Back Slash +- enq_key_event(BX_KEY_BACKSLASH, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_BACKSLASH, BX_KEY_RELEASED); +- break; +- case 0x5d: // Right Bracket +- enq_key_event(BX_KEY_RIGHT_BRACKET, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_RIGHT_BRACKET, BX_KEY_RELEASED); +- break; +- case 0x5e: // Caret +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_6, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_6, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x5f: // Underscore +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_MINUS, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_MINUS, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x60: // Grave Accent +- enq_key_event(BX_KEY_GRAVE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_GRAVE, BX_KEY_RELEASED); +- break; +- +- case 0x7b: // Left Brace +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_LEFT_BRACKET, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_LEFT_BRACKET, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x7c: // Verticle Bar +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_BACKSLASH, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_BACKSLASH, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x7d: // Right Brace +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_RIGHT_BRACKET, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_RIGHT_BRACKET, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- case 0x7e: // Tilde +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_GRAVE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_GRAVE, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_SHIFT_L, BX_KEY_RELEASED); +- break; +- +- case B_BACKSPACE: +- enq_key_event(BX_KEY_BACKSPACE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_BACKSPACE, BX_KEY_RELEASED); +- break; +- case B_ENTER: //case B_RETURN: +- enq_key_event(BX_KEY_ENTER, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_ENTER, BX_KEY_RELEASED); +- break; +- case B_TAB: +- enq_key_event(BX_KEY_TAB, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_TAB, BX_KEY_RELEASED); +- break; +- case B_LEFT_ARROW: +- enq_key_event(BX_KEY_LEFT, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_LEFT, BX_KEY_RELEASED); +- break; +- case B_RIGHT_ARROW: +- enq_key_event(BX_KEY_RIGHT, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_RIGHT, BX_KEY_RELEASED); +- break; +- case B_UP_ARROW: +- enq_key_event(BX_KEY_UP, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_UP, BX_KEY_RELEASED); +- break; +- case B_DOWN_ARROW: +- enq_key_event(BX_KEY_DOWN, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_DOWN, BX_KEY_RELEASED); +- break; +-#if 0 +- case B_FUNCTION_KEY: break; +- msg->FindInt32("key", &key); +- switch ( key ) { +- case B_F1_KEY: break; +- case B_F2_KEY: break; +- case B_F3_KEY: break; +- case B_F4_KEY: break; +- case B_F5_KEY: break; +- case B_F6_KEY: break; +- case B_F7_KEY: break; +- case B_F8_KEY: break; +- case B_F9_KEY: break; +- case B_F10_KEY: break; +- case B_F11_KEY: break; +- case B_F12_KEY: break; +- case B_PRINT_KEY: break; +- case B_SCROLL_KEY: break; +- case B_PAUSE_KEY: break; +- default: +- fprintf(stderr, "# keydown() unknown function key %08xh\n", +- (unsigned) key); +- } +-#endif +- case B_INSERT: break; +- enq_key_event(BX_KEY_INSERT, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_INSERT, BX_KEY_RELEASED); +- break; +- case B_DELETE: break; +- enq_key_event(BX_KEY_DELETE, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_DELETE, BX_KEY_RELEASED); +- break; +- case B_HOME: break; +- enq_key_event(BX_KEY_HOME, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_HOME, BX_KEY_RELEASED); +- break; +- case B_END: break; +- enq_key_event(BX_KEY_END, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_END, BX_KEY_RELEASED); +- break; +- case B_PAGE_UP: break; +- enq_key_event(BX_KEY_PAGE_UP, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_PAGE_UP, BX_KEY_RELEASED); +- break; +- case B_PAGE_DOWN: break; +- enq_key_event(BX_KEY_PAGE_DOWN, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_PAGE_DOWN, BX_KEY_RELEASED); +- break; +- +- default: +- if ( (byte >= 0x01) && (byte <= 0x1a) ) { +- // If the above keys dont catch this case, synthesize a +- // Ctrl-A .. Ctrl-Z event +- byte -= 1; +- enq_key_event(BX_KEY_CTRL_L, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_A + byte, BX_KEY_PRESSED); +- enq_key_event(BX_KEY_A + byte, BX_KEY_RELEASED); +- enq_key_event(BX_KEY_CTRL_L, BX_KEY_RELEASED); +- return; +- } +- fprintf(stderr, "# keydown: char %02xh unhandled\n", +- (unsigned) bytes[0]); +- return; +- } +- return; +- } +- else { +- // ignore for now +- fprintf(stderr, "# keydown() ignoring multibyte key\n"); +- } +-} +- +-void BochsView::KeyUp(const char *bytes, int32 numBytes) +-{ +- UNUSED(bytes); +- UNUSED(numBytes); +-} + +-void BochsView::Draw(BRect rect) +-{ +- DrawBitmapAsync(backing_store, rect, rect); + } + +-BochsView::~BochsView() ++filter_result ModifierFilter::Filter(BMessage *msg, BHandler **target) + { +- delete backing_store; +- delete backing_view; ++ *target = fTarget; ++ return B_DISPATCH_MESSAGE; + } + +-void +-BochsView::SetFont(const BFont *font, uint32 mask) ++void CaptureTarget::MessageReceived(BMessage *msg) + { +- backing_store->Lock(); +- backing_view->SetFont(font,mask); +- backing_store->Unlock(); ++ if (fMyTarget->LockLooper()) ++ { ++ fMyTarget->GotCapturedInput(msg); ++ fMyTarget->UnlockLooper(); ++ } + } + +-void +-BochsView::SetHighColor(uchar r, uchar g, uchar b, uchar a) +-{ +- backing_store->Lock(); +- backing_view->SetHighColor(r,g,b,a); +- backing_store->Unlock(); +-} ++// ========== class bx_gui_c definitions ========== + +-void +-BochsView::SetLowColor(uchar r, uchar g, uchar b, uchar a) ++void bx_gui_c::specific_init(bx_gui_c *th, int argc, char **argv, ++ unsigned tilewidth, unsigned tileheight, ++ unsigned header_bar_y) + { +- backing_store->Lock(); +- backing_view->SetLowColor(r,g,b,a); +- backing_store->Unlock(); ++ BX_DEBUG(("init")); ++ bApp = new BochsApplication(th, argc, argv, tilewidth, tileheight, header_bar_y, power_handler); ++ be_app->Unlock(); ++ thread_id appThread = spawn_thread(BochsApplication::runme, "App thread", B_NORMAL_PRIORITY, NULL); ++ resume_thread(appThread); + } + +-void +-BochsView::DrawBitmap(const BBitmap *aBitmap, BPoint where) ++void bx_gui_c::handle_events(void) + { +- backing_store->Lock(); +- backing_view->DrawBitmap(aBitmap,where); +- backing_store->Unlock(); +- BRect r = aBitmap->Bounds(); +- r.OffsetBy(where); +- Invalidate(r); ++ bView->HandleEvents(); + } + +-void +-BochsView::FillRect(BRect r, pattern p) ++void bx_gui_c::flush(void) + { +- backing_store->Lock(); +- backing_view->FillRect(r,p); +- backing_store->Unlock(); +- Invalidate(r); ++ BX_DEBUG(("flush")); ++ if (!bView) ++ { ++ BX_DEBUG(("flush called before init")); ++ return; ++ } ++ bView->Flush(); + } + +- +- +- void +-enq_key_event(Bit32u key, Bit32u press_release) ++void bx_gui_c::clear_screen(void) + { +- if ( ((tail+1) % SCANCODE_BUFSIZE) == head ) { +- fprintf(stderr, "# enq_key_event: buffer full\n"); +- return; +- } +- keyevents[tail] = key | press_release; +- tail = (tail + 1) % SCANCODE_BUFSIZE; ++ BX_DEBUG(("clear_screen")); ++ bView->ClearScreen(); + } + +- Bit32u +-deq_key_event(void) ++void bx_gui_c::text_update(Bit8u *old_text, Bit8u *new_text, ++ unsigned long cursor_x, unsigned long cursor_y, ++ unsigned nrows) + { +- Bit32u key; +- +- if ( head == tail ) { +- fprintf(stderr, "# deq_key_event: buffer empty\n"); +- return(0); +- } +- key = keyevents[head]; +- head = (head + 1) % SCANCODE_BUFSIZE; +- return(key); ++ BX_DEBUG(("text_update")); ++ bView->TextUpdate(old_text, new_text, cursor_x, cursor_y, nrows); + } + +- unsigned char +-reverse_bitorder(unsigned char b) ++void bx_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0) + { +- unsigned char ret=0; +- for (unsigned i=0; i<8; i++) { +- ret |= (b & 0x01) << (7-i); +- b >>= 1; +- } +- return(ret); ++ //fprintf(stderr, "# gui: graphics_update\n"); ++ bView->GraphicsTileUpdate(tile, x0, y0); + } + +- unsigned +-bx_gui_c::create_bitmap(const unsigned char *bmap, +- unsigned xdim, unsigned ydim) ++Boolean bx_gui_c::palette_change(unsigned index, unsigned red, unsigned green, unsigned blue) + { +- BRect rect(0.0, 0.0, xdim-1, ydim-1); +- int32 bitslength; +- //int32 bytesperrow; +- unsigned char *data; +- +- if (bx_bitmap_entries >= BX_MAX_PIXMAPS) { +- BX_PANIC(("beos: too many pixmaps, increase BX_MAX_PIXMAPS")); +- } +- +- bx_bitmaps[bx_bitmap_entries].bmap = +- new BBitmap(rect, B_MONOCHROME_1_BIT); +- +- bitslength = bx_bitmaps[bx_bitmap_entries].bmap->BitsLength(); +- //bytesperrow = bx_bitmaps[bx_bitmap_entries].bmap->BytesPerRow(); +- data = (unsigned char *) bx_bitmaps[bx_bitmap_entries].bmap->Bits(); +- for (int32 i=0; iPaletteChange(index, red, green, blue); + } + +- unsigned +-bx_gui_c::headerbar_bitmap(unsigned bmap_id, unsigned alignment, +- void (*f)(void)) ++void bx_gui_c::dimension_update(unsigned x, unsigned y) + { +- unsigned hb_index; +- +- if ( (bx_headerbar_entries+1) > BX_MAX_HEADERBAR_ENTRIES ) +- BX_PANIC(("beos: too many headerbar entries, increase BX_MAX_HEADERBAR_ENTRIES")); +- +- bx_headerbar_entries++; +- hb_index = bx_headerbar_entries - 1; +- +- bx_headerbar_entry[hb_index].bitmap = bx_bitmaps[bmap_id].bmap; +- bx_headerbar_entry[hb_index].xdim = bx_bitmaps[bmap_id].xdim; +- bx_headerbar_entry[hb_index].ydim = bx_bitmaps[bmap_id].ydim; +- bx_headerbar_entry[hb_index].alignment = alignment; +- bx_headerbar_entry[hb_index].f = f; +- if (alignment == BX_GRAVITY_LEFT) { +- bx_headerbar_entry[hb_index].xorigin = bx_bitmap_left_xorigin; +- bx_headerbar_entry[hb_index].yorigin = 0; +- bx_bitmap_left_xorigin += bx_bitmaps[bmap_id].xdim; +- } +- else { // BX_GRAVITY_RIGHT +- bx_bitmap_right_xorigin += bx_bitmaps[bmap_id].xdim; +- bx_headerbar_entry[hb_index].xorigin = bx_bitmap_right_xorigin; +- bx_headerbar_entry[hb_index].yorigin = 0; +- } +- return(hb_index); ++ //fprintf(stderr, "dimension_update %d x %d\n", x, y); ++ bView->DimensionUpdate(x, y); + } + +- void +-bx_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) ++void bx_gui_c::exit(void) + { +- unsigned xorigin; +- +- bx_headerbar_entry[hbar_id].bitmap = bx_bitmaps[bmap_id].bmap; +- +- if (bx_headerbar_entry[hbar_id].alignment == BX_GRAVITY_LEFT) +- xorigin = bx_headerbar_entry[hbar_id].xorigin; +- else +- xorigin = dimension_x - bx_headerbar_entry[hbar_id].xorigin; +- aWindow->Lock(); +- aView->set_headerbar_colors(); +- aView->DrawBitmap(bx_headerbar_entry[hbar_id].bitmap, BPoint(xorigin, 0)); +- aView->set_text_colors(); +- aWindow->Unlock(); ++ BX_DEBUG(("exit")); ++ bApp->BxExit(); + } + +- void +-bx_gui_c::show_headerbar(void) ++void bx_gui_c::mouse_enabled_changed_specific(Boolean val) + { +- unsigned xorigin; +- BPoint origin; +- +- // clear header bar area to white +- +- aWindow->Lock(); +- aView->set_headerbar_colors(); +- aView->FillRect(BRect(0, 0, dimension_x-1, bx_headerbar_y-1), B_SOLID_LOW); +- for (unsigned i=0; iDrawBitmap( bx_headerbar_entry[i].bitmap, origin ); +- } +- aView->set_text_colors(); +- aWindow->Unlock(); ++ //fprintf(stderr, "mouse_enabled_changed to %s\n", val ? "enabled" : "disabled"); ++ bView->HandleEnableMouse(val); + } +- + +- void +-headerbar_click(int x, int y) ++unsigned bx_gui_c::create_bitmap(const unsigned char *bmap, ++ unsigned xdim, unsigned ydim) + { +- int xorigin; +- +- // assuming y is in bounds +- UNUSED(y); +- for (unsigned i=0; i=xorigin) && (x<(xorigin+int(bx_headerbar_entry[i].xdim))) ) { +- bx_headerbar_entry[i].f(); +- return; +- } +- } ++ BX_DEBUG(("create_bitmap")); ++ return bView->CreateBitmap(bmap, xdim, ydim); + } + +- +- void +-create_vga_font(void) ++unsigned bx_gui_c::headerbar_bitmap(unsigned bmap_id, unsigned alignment, void (*f)(void)) + { +- int32 bitslength; +- int32 bytesperrow; +- unsigned char *data; +- BRect brect(0,0, 7,15); +- +- BX_INFO(( "BeOS: creating VGA font from bitmaps" )); +- +- // VGA font is 8wide x 16high +- for (unsigned c=0; c<256; c++) { +- vgafont[c] = new BBitmap(brect, B_MONOCHROME_1_BIT); +- if (!vgafont[c]) { +- BX_PANIC(("beos: could not create bitmap")); +- } +- +- bitslength = vgafont[c]->BitsLength(); +- bytesperrow = vgafont[c]->BytesPerRow(); +- data = (unsigned char *) vgafont[c]->Bits(); +- memset(data, 0, bitslength); +- for (unsigned i=0; i<16; i++) { +- data[i*bytesperrow] = reverse_bitorder(bx_vgafont[c].data[i]); +- } +- } ++ BX_DEBUG(("headerbar_bitmap")); ++ return bView->HeaderbarBitmap(bmap_id, alignment, f); + } + +- +- void +-bx_gui_c::exit(void) ++void bx_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id) + { +- fprintf(stderr, "# WARNING: BEOS: bx_gui_c::exit() not implemented yet.\n"); ++ BX_DEBUG(("replace_bitmap")); ++ bView->ReplaceBitmap(hbar_id, bmap_id); + } +- +-//IRA=> Start +-// This is called whenever the mouse_enabled parameter changes. It +-// can change because of a gui event such as clicking on the mouse-enable +-// bitmap or pressing the middle button, or from the control panel. +-// In all those cases, setting the parameter value will get you here. + +- void +-bx_gui_c::mouse_enabled_changed_specific (Boolean val) ++void bx_gui_c::show_headerbar(void) + { +- BX_DEBUG (("mouse_enabled=%d, BeOS specific code", val?1:0)); +- if (val) { +- BX_INFO(("[x] Mouse on")); +-// mouse_enable_x = current_x; +-// mouse_enable_y = current_y; +- be_app->HideCursor(); +- // Move the cursor to a 'safe' place +-// warp_cursor(warp_home_x-current_x, warp_home_y-current_y); +- } else { +- BX_INFO(("[x] Mouse off")); +- be_app->ShowCursor(); +-// warp_cursor(mouse_enable_x-current_x, mouse_enable_y-current_y); +- } ++ BX_DEBUG(("show_headrebar")); ++ bView->ShowHeaderbar(); + } +-//IRA=> End diff --git a/bochs/patches/patch.cosimulation b/bochs/patches/patch.cosimulation new file mode 100755 index 00000000..2d73ca57 --- /dev/null +++ b/bochs/patches/patch.cosimulation @@ -0,0 +1,2519 @@ +---------------------------------------------------------------------- +Patch name: Cosimulation support +Date: 25 Jan 2006 +Status: Cosimulation not working yet. + +Detailed description: + +The cosimulation feature doesn't work since Bochs 2.0 release (or may be +even earlier). + +According to my opinion it should be redefined and implemented in totally +different way; for example two Bochs simulators compiled with cosimulation +could connect through pipe or TCP/IP and run together comparing the arch +automatically state or on demand. +Let's assume we have dynamic translation support in Bochs, so we could +compile it with cosimulation and run two Bochs binaries compiled with +dynamic translation and without and compare between them automatically +to assure emulation correctness. The same for any other performance feature. +This cosimulation approach should reach the same goals but do it in same +strange way ... + +OK, I assume the patch could be automatically applied to Bochs 2.2.6 release +without any conflicts, but do not think it will work or even compile ! +The patch is more FYI s.t. you will be able to look on some cosimulation +implementation during developing a new one ;) + +And just to be sure ... +I marked the patch root in CVS with tag bochs-cosimulation-patch-root +so you always could find some Bochs version to apply it ;) + +Patch was created with: + cvs diff -ubBwNp + +Instructions: + To patch, apply patch to main bochs directory: + > patch -p1 < cosim-patch + I skipped automatically generated files from this patch to + reduce its absolute size. + To regenerate configure file: + > autoconf configure.in > configure + To regenerate lexer.c, parser.c and parser.h + > cd bx_debug; rm -f lexer.c parser.c parser.h; make +---------------------------------------------------------------------- + +diff -uBbwNpr bochs-nocosim/bochs.h bochs/bochs.h +--- bochs-nocosim/bochs.h 2006-01-25 22:50:48.078125000 +0200 ++++ bochs/bochs.h 2006-01-20 21:12:03.000000000 +0200 +@@ -118,6 +118,37 @@ void bx_reset_options (void); + // needed. + // + ++#if ((BX_DEBUGGER == 1) && (BX_NUM_SIMULATORS >= 2)) ++ ++// =-=-=-=-=-=-=- Redirected to cosimulation debugger -=-=-=-=-=-=-= ++#define DEV_vga_mem_read(addr) bx_dbg_ucmem_read(addr) ++#define DEV_vga_mem_write(addr, val) bx_dbg_ucmem_write(addr, val) ++ ++#define BX_INP(addr, len) bx_dbg_inp(addr, len) ++#define BX_OUTP(addr, val, len) bx_dbg_outp(addr, val, len) ++#define BX_HRQ (bx_pc_system.HRQ) ++#define BX_RAISE_HLDA() bx_dbg_raise_HLDA() ++#define BX_TICK1() ++#define BX_INTR bx_pc_system.INTR ++#define BX_SET_INTR(b) bx_dbg_set_INTR(b) ++#if BX_SIM_ID == 0 ++# define BX_CPU_C bx_cpu0_c ++# define BX_CPU bx_cpu0 ++# define BX_MEM_C bx_mem0_c ++# define BX_MEM bx_mem0 ++#else ++# define BX_CPU_C bx_cpu1_c ++# define BX_CPU bx_cpu1 ++# define BX_MEM_C bx_mem1_c ++# define BX_MEM bx_mem1 ++#endif ++#define BX_SET_ENABLE_A20(enabled) bx_dbg_async_pin_request(BX_DBG_ASYNC_PENDING_A20, \ ++ enabled) ++#define BX_GET_ENABLE_A20() bx_pc_system.get_enable_a20() ++#error FIXME: cosim mode not fixed yet ++ ++#else ++ + // =-=-=-=-=-=-=- Normal optimized use -=-=-=-=-=-=-=-=-=-=-=-=-=-= + // some pc_systems functions just redirect to the IO devices so optimize + // by eliminating call here +@@ -153,6 +184,8 @@ void bx_reset_options (void); + #define BX_SET_ENABLE_A20(enabled) bx_pc_system.set_enable_a20(enabled) + #define BX_GET_ENABLE_A20() bx_pc_system.get_enable_a20() + ++#endif ++ + #if BX_SUPPORT_A20 + # define A20ADDR(x) ((x) & bx_pc_system.a20_mask) + #else +@@ -176,6 +210,21 @@ void bx_reset_options (void); + #if BX_DEBUGGER + # define BX_DBG_ASYNC_INTR bx_guard.async.irq + # define BX_DBG_ASYNC_DMA bx_guard.async.dma ++#if (BX_NUM_SIMULATORS > 1) ++// for multiple simulators, we always need this info, since we're ++// going to replay it. ++# define BX_DBG_DMA_REPORT(addr, len, what, val) \ ++ bx_dbg_dma_report(addr, len, what, val) ++# define BX_DBG_IAC_REPORT(vector, irq) \ ++ bx_dbg_iac_report(vector, irq) ++# define BX_DBG_A20_REPORT(val) \ ++ bx_dbg_a20_report(val) ++# define BX_DBG_IO_REPORT(addr, size, op, val) \ ++ bx_dbg_io_report(addr, size, op, val) ++# define BX_DBG_UCMEM_REPORT(addr, size, op, val) ++#else ++// for a single simulator debug environment, we can optimize a little ++// by conditionally calling, as per requested. + + # define BX_DBG_DMA_REPORT(addr, len, what, val) \ + if (bx_guard.report.dma) bx_dbg_dma_report(addr, len, what, val) +@@ -187,6 +236,8 @@ void bx_reset_options (void); + if (bx_guard.report.io) bx_dbg_io_report(addr, size, op, val) + # define BX_DBG_UCMEM_REPORT(addr, size, op, val) \ + if (bx_guard.report.ucmem) bx_dbg_ucmem_report(addr, size, op, val) ++#endif // #if (BX_NUM_SIMULATORS > 1) ++ + #else // #if BX_DEBUGGER + // debugger not compiled in, use empty stubs + # define BX_DBG_ASYNC_INTR 1 +diff -uBbwNpr bochs-nocosim/bx_debug/Makefile.in bochs/bx_debug/Makefile.in +--- bochs-nocosim/bx_debug/Makefile.in 2006-01-25 22:46:16.062500000 +0200 ++++ bochs/bx_debug/Makefile.in 2006-01-24 21:03:53.000000000 +0200 +@@ -56,6 +56,7 @@ YACC = yacc + BX_OBJS = \ + dbg_main.o \ + symbols.o \ ++ cosim.o \ + linux.o \ + + BX_PARSER_OBJS = \ +@@ -147,3 +148,17 @@ symbols.o: symbols.@CPP_SUFFIX@ ../bochs + ../cpu/xmm.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../ltdl.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ++cosim.o: cosim.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ ++ ../bxversion.h ../gui/siminterface.h ../cpu/cpu.h ../cpu/lazy_flags.h \ ++ ../cpu/hostasm.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \ ++ ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \ ++ ../cpu/xmm.h ../memory/memory.h ../pc_system.h ../plugin.h \ ++ ../extplugin.h ../ltdl.h ../gui/gui.h ../gui/textconfig.h \ ++ ../gui/keymap.h ../instrument/stubs/instrument.h ++sim2.o: sim2.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ ++ ../bxversion.h ../gui/siminterface.h ../cpu/cpu.h ../cpu/lazy_flags.h \ ++ ../cpu/hostasm.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \ ++ ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \ ++ ../cpu/xmm.h ../memory/memory.h ../pc_system.h ../plugin.h \ ++ ../extplugin.h ../ltdl.h ../gui/gui.h ../gui/textconfig.h \ ++ ../gui/keymap.h ../instrument/stubs/instrument.h +diff -uBbwNpr bochs-nocosim/bx_debug/cosim.cc bochs/bx_debug/cosim.cc +--- bochs-nocosim/bx_debug/cosim.cc 1970-01-01 02:00:00.000000000 +0200 ++++ bochs/bx_debug/cosim.cc 2006-01-15 19:55:25.000000000 +0200 +@@ -0,0 +1,979 @@ ++///////////////////////////////////////////////////////////////////////// ++// $Id: patch.cosimulation,v 1.2 2006-01-25 22:30:07 sshwarts Exp $ ++///////////////////////////////////////////////////////////////////////// ++// ++// Copyright (C) 2001 MandrakeSoft S.A. ++// ++// MandrakeSoft S.A. ++// 43, rue d'Aboukir ++// 75002 Paris - France ++// http://www.linux-mandrake.com/ ++// http://www.mandrakesoft.com/ ++// ++// This library is free software; you can redistribute it and/or ++// modify it under the terms of the GNU Lesser General Public ++// License as published by the Free Software Foundation; either ++// version 2 of the License, or (at your option) any later version. ++// ++// This library 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 ++// Lesser General Public License for more details. ++// ++// You should have received a copy of the GNU Lesser General Public ++// License along with this library; if not, write to the Free Software ++// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++// ++ ++#include "bochs.h" ++ ++#if BX_NUM_SIMULATORS >= 2 ++ ++unsigned bx_dbg_cosimulateN(bx_dbg_icount_t count) ++{ ++ // execute both master & slave for count instructions, ++ // handling asynchronous events, etc. ++ // returns 0 = didn't get through all count instructions ++ // either a guard was hit, or a divergence occurred ++ // 1 = got through all count instructions ++ ++ unsigned master, slave; ++ bx_dbg_icount_t master_icount, slave_icount; ++ bx_bool bail_out = 0; ++ unsigned ret = 0; ++ bx_bool save_INTR; ++ bx_bool pre_A20, post_A20; ++ unsigned async_head; ++ bx_dbg_icount_t async_icount, curr_icount; ++ ++ if (count == 0) { ++ dbg_printf ( "Error: cosimulateN: count=0\n"); ++ bx_dbg_exit(1); ++ } ++ ++ bx_guard.guard_for |= BX_DBG_GUARD_ICOUNT; // stop at icount ++ bx_guard.guard_for &= ~BX_DBG_GUARD_CTRL_C; // ignore Ctrl-C ++ ++one_time_slice: ++ // take minimum of requested count and maximum count quantum ++ if (count > bx_debugger.icount_quantum) ++ bx_guard.icount = bx_debugger.icount_quantum; ++ else ++ bx_guard.icount = count; ++ ++ // for now, assume... ++ master = bx_debugger.master; ++ slave = bx_debugger.slave; ++ ++ // run master simulator ++ bx_debugger.master_slave_mode = BX_DBG_MASTER_MODE; ++ if (bx_guard.interrupt_requested) { ++ bail_out = 1; ++ dbg_printf ("ctrlc typed\n"); ++ } ++ bx_guard_found[master].guard_found = 0; ++ bx_guard_found[master].icount = 0; ++ if (doit) dbg_printf ("requesting run of master for %u\n", ++ (unsigned) bx_guard.icount); ++ // save A20 value before master run ++ pre_A20 = bx_pc_system.get_enable_a20(); ++ ++ BX_MEM(master)->cpu_loop(-1); ++ post_A20 = bx_pc_system.get_enable_a20(); // A20 after master run ++ master_icount = bx_guard_found[master].icount; ++ slave_icount = 0; ++ if (master_icount) ++ bx_pc_system.tickn(master_icount); ++ save_INTR = bx_pc_system.INTR; // value after master run ++ bx_pc_system.INTR = 0; // in case slave uses directly ++ // Change A20 for slave run to model what it was at beginning of ++ // master run, only if it needs to be changed. ++ if (pre_A20 != post_A20) { ++ bx_pc_system.set_enable_a20(pre_A20); ++ if (BX_MEM(slave)->set_A20) ++ BX_MEM(slave)->set_A20(pre_A20); ++ } ++ ++ // if guard was anything except for icount, we should terminate ++ // after synchronizing slave to master ++ if (bx_guard_found[master].guard_found & ~BX_DBG_GUARD_ICOUNT) ++ bail_out = 1; ++ ++ // Synchronize slave to master. Account for Ctrl-C's typed during execution of ++ // slave. ++ bx_debugger.master_slave_mode = BX_DBG_SLAVE_MODE; ++ do { ++ // run slave for remaining instructions to catch up to master ++ curr_icount = master_icount - slave_icount; ++ if (bx_debugger.async_journal.size) { ++ // If there were asynchronous events which occurred while the ++ // master was running, have to run the slave up to each of these ++ // points individually, and force it to take them on exactly the ++ // same boundaries. ++ async_head = bx_debugger.async_journal.head; ++ async_icount = bx_debugger.async_journal.element[async_head].icount; ++ curr_icount = async_icount; // only run to next async event ++ } ++ else { ++ async_head = 0; // keep compiler happy ++ async_icount = 0; // keep compiler happy ++ } ++ ++ bx_guard_found[slave].guard_found = 0; ++ bx_guard_found[slave].icount = 0; ++ bx_guard.icount = curr_icount; ++ ++ if (curr_icount) { ++ // Async event may be before completion of any instructions, ++ // for example taking of interrupt. ++ if (doit) dbg_printf ( "requesting run of slave for %u\n", ++ (unsigned) bx_guard.icount); ++ if (bx_debugger.fast_forward_mode) { ++ bx_guard_found[slave].icount = curr_icount; ++ bx_guard_found[slave].guard_found = BX_DBG_GUARD_ICOUNT; ++ } else { ++ BX_MEM(slave)->cpu_loop(-1); ++ } ++ } ++ slave_icount += bx_guard_found[slave].icount; ++ if (bx_guard_found[slave].guard_found & ~BX_DBG_GUARD_ICOUNT) { ++ bail_out = 1; ++ // If user type Ctrl-C we're done after synchronizing. If not, ++ // then we have reached a true guard, and it's time to bail. ++ if (bx_guard_found[slave].guard_found & ++ ~(BX_DBG_GUARD_ICOUNT | BX_DBG_GUARD_CTRL_C)) ++ break; ++ } ++ if (bx_debugger.async_journal.size) { ++ // sanity check: slave should be at async point ++ if (bx_guard_found[slave].icount != async_icount) { ++ dbg_printf ( "Error: comsimulateN: async: slave not at sync point.\n"); ++ bx_dbg_exit(1); ++ } ++ switch (bx_debugger.async_journal.element[async_head].what) { ++ case BX_DBG_ASYNC_JOURNAL_IAC: ++ if (!bx_debugger.fast_forward_mode) { ++ if (doit) ++ dbg_printf ("slave: forcing interrupt %u\n", ++ bx_debugger.async_journal.element[async_head].u.iac.val); ++ ++ BX_MEM(slave)->dbg_force_interrupt( ++ bx_debugger.async_journal.element[async_head].u.iac.val); ++ } ++ break; ++ case BX_DBG_ASYNC_JOURNAL_A20: ++ bx_pc_system.set_enable_a20( ++ bx_debugger.async_journal.element[async_head].u.a20.val); ++ if (BX_MEM(slave)->set_A20) ++ BX_MEM(slave)->set_A20( ++ bx_debugger.async_journal.element[async_head].u.a20.val); ++ break; ++ case BX_DBG_ASYNC_JOURNAL_NMI: ++ case BX_DBG_ASYNC_JOURNAL_RESET: ++ default: ++ dbg_printf ( "Error: cosimulateN: unimplemented async event.\n"); ++ } ++ // async event processed, dequeue it ++ bx_debugger.async_journal.size--; ++ bx_debugger.async_journal.head++; ++ } ++ } while (slave_icount < master_icount); ++ ++ bx_pc_system.INTR = save_INTR; // restore INTR to value after master run ++ ++ // At this point, both simulators should be at the same point. Either ++ // they have finished executing for the desired count, or at least for ++ // a time quantum. Check to see if the environments are in sync. ++ int iaddr_res; ++ if (!bx_debugger.fast_forward_mode) { ++ if (bx_debugger.compare_at_sync.iaddr && (iaddr_res = bx_dbg_compare_sim_iaddr())) { ++ if (iaddr_res == 1) ++ bail_out = 1; ++ } else if (bx_debugger.compare_at_sync.cpu && bx_dbg_compare_sim_cpu()) ++ bail_out = 1; ++ else if (bx_debugger.compare_at_sync.memory && bx_dbg_compare_sim_memory()) ++ bail_out = 1; ++ } ++ ++ if (bail_out) { ++#ifdef DEBUGGER_ERROR ++ extern void DEBUGGER_ERROR(void); ++ DEBUGGER_ERROR(); ++#endif ++ ++ ret = 0; // didn't complete, stopped ++ } ++ else { ++ count -= master_icount; ++ // last icount known to be in sync ++ bx_debugger.last_sync_icount += master_icount; ++ if (count) ++ goto one_time_slice; ++ ret = 1; // completed OK ++ } ++ ++ bx_guard.guard_for &= ~BX_DBG_GUARD_ICOUNT; ++ return(ret); ++} ++ ++int bx_dbg_compare_sim_iaddr(void) ++{ ++ // returns 0 = same, 1 = different, 2 = false diff ++ if (BX_CPU(dbg_cpu)->guard_found.laddr != bx_guard_found[1].laddr) { ++ ++#ifdef FALSE_DIFF_DETECT ++ extern int FALSE_DIFF_DETECT(); ++ if (FALSE_DIFF_DETECT()) ++ return 2; ++#endif ++ ++ dbg_printf ( ++#if BX_DBG_ICOUNT_SIZE == 32 ++ "*** Iaddr divergence ***: last know synchronized icount was %lu\n", ++ (unsigned long) bx_debugger.last_sync_icount ++#else // BX_DBG_ICOUNT_SIZE == 64 ++ "*** Iaddr divergence ***: last know synchronized icount was %Lu\n", ++ (unsigned long long) bx_debugger.last_sync_icount ++#endif ++ ); ++ ++// dbg_printf ( "Divergence: sim[0].laddr=%x, sim[1].laddr=%x\n", ++// (unsigned) BX_CPU(dbg_cpu)->guard_found.laddr, ++// (unsigned) bx_guard_found[1].laddr); ++ return(1); // different ++ } ++ return(0); // same ++} ++ ++bx_bool bx_dbg_compare_sim_cpu(void) ++{ ++ // (mch) Get cpu structures from both simulators ++ ++ // Compare the structures (except the descriptor parts of the ++ // segment registers ++ bx_dbg_cpu_t regs[2]; ++ ++ BX_MEM(0)->dbg_get_cpu(regs + 0); ++ BX_MEM(1)->dbg_get_cpu(regs + 1); ++ ++ bx_bool ret = 0; ++ bx_bool warn = 0; ++ ++ // (mch) Yes I know these are macros. The would have been ++ // inner functions if g++ had supported it. ++#define TEST_REG(reg, reg_name) \ ++ do { \ ++ if (regs[0].reg != regs[1].reg) { \ ++ printf("COSIM ERROR: [%s] %s: 0x%08x %s: 0x%08x\n", reg_name, SIM_NAME0, regs[0].reg, SIM_NAME1_STR, regs[1].reg); \ ++ ret = 1; \ ++ } \ ++ } while(0) ++ ++#define TEST_REG_WARN(reg, reg_name, mask) \ ++ do { \ ++ if ((regs[0].reg & mask) != (regs[1].reg & mask)) { \ ++ printf("COSIM WARNING: [%s] %s: 0x%08x %s: 0x%08x\n", reg_name, SIM_NAME0, (regs[0].reg & mask), SIM_NAME1_STR, (regs[1].reg & mask)); \ ++ warn = 1; \ ++ } \ ++ } while(0) ++ ++ TEST_REG(eax, "eax"); ++ TEST_REG(ebx, "ebx"); ++ TEST_REG(ecx, "ecx"); ++ TEST_REG(edx, "edx"); ++ TEST_REG(ebp, "ebp"); ++ TEST_REG(esi, "esi"); ++ TEST_REG(edi, "edi"); ++ TEST_REG(esp, "esp"); ++ TEST_REG_WARN(eflags, "eflags & CF", 0x1); ++#define EFLAGS_MASK (~((1 << 11) | (1 << 7) | (1 << 6) | (1 << 4) | (1 << 2) | (1 << 0))) ++ regs[0].eflags &= EFLAGS_MASK; ++ regs[1].eflags &= EFLAGS_MASK; ++ TEST_REG(eflags, "eflags"); ++ TEST_REG(eip, "eip"); ++ ++#define TEST_SEG_REG(reg, reg_name) \ ++ do { \ ++ if (regs[0].reg.sel != regs[1].reg.sel || regs[0].reg.valid != regs[1].reg.valid) { \ ++ printf("COSIM ERROR: [%s] %s: 0x%04x (%d) %s: 0x%04x (%d)\n", reg_name, SIM_NAME0, regs[0].reg.sel, regs[0].reg.valid, SIM_NAME1_STR, regs[1].reg.sel, regs[1].reg.valid); \ ++ ret = 1; \ ++ } \ ++ } while(0) ++ ++ TEST_SEG_REG(cs, "cs"); ++ TEST_SEG_REG(ss, "ss"); ++ TEST_SEG_REG(ds, "ds"); ++ TEST_SEG_REG(es, "es"); ++ TEST_SEG_REG(fs, "fs"); ++ TEST_SEG_REG(gs, "gs"); ++ TEST_SEG_REG(ldtr, "ldtr"); ++ TEST_SEG_REG(tr, "tr"); ++ ++ if (regs[0].gdtr.base != regs[1].gdtr.base || regs[0].gdtr.limit != regs[1].gdtr.limit) { ++ printf("COSIM ERROR: [gdtr] %s: 0x%08x:0x%04x %s 0x%08x:0x%04x\n", ++ SIM_NAME0, regs[0].gdtr.base, regs[0].gdtr.limit, SIM_NAME1_STR, regs[1].gdtr.base, regs[1].gdtr.limit); ++ ret = 1; ++ } ++ if (regs[0].idtr.base != regs[1].idtr.base || regs[0].idtr.limit != regs[1].idtr.limit) { ++ printf("COSIM ERROR: [idtr] %s: 0x%08x:0x%04x %s 0x%08x:0x%04x\n", ++ SIM_NAME0, regs[0].idtr.base, regs[0].idtr.limit, SIM_NAME1_STR, regs[1].idtr.base, regs[1].idtr.limit); ++ ret = 1; ++ } ++ ++ // drX ignored ++ // trX ignored ++ ++ TEST_REG(cr0, "cr0"); ++ TEST_REG(cr1, "cr1"); ++ TEST_REG(cr2, "cr2"); ++ TEST_REG(cr3, "cr3"); ++ TEST_REG(cr4, "cr4"); ++ ++ if (regs[0].inhibit_mask != regs[1].inhibit_mask) { ++ printf("COSIM ERROR [inhibit_mask] %s: %d %s: %d\n", ++ SIM_NAME0, regs[0].inhibit_mask, SIM_NAME1_STR, regs[1].inhibit_mask); ++ ret = 1; ++ } ++ ++ if (ret) { ++ dbg_printf ( ++#if BX_DBG_ICOUNT_SIZE == 32 ++ "*** CPU divergence ***: last know synchronized icount was %lu\n", ++ (unsigned long) bx_debugger.last_sync_icount ++#else // BX_DBG_ICOUNT_SIZE == 64 ++ "*** CPU divergence ***: last know synchronized icount was %Lu\n", ++ (unsigned long long) bx_debugger.last_sync_icount ++#endif ++ ); ++ } else if (warn) { ++ dbg_printf ( ++#if BX_DBG_ICOUNT_SIZE == 32 ++ "=== CPU divergence ===: last know synchronized icount was %lu\n", ++ (unsigned long) bx_debugger.last_sync_icount ++#else // BX_DBG_ICOUNT_SIZE == 64 ++ "=== CPU divergence ===: last know synchronized icount was %Lu\n", ++ (unsigned long long) bx_debugger.last_sync_icount ++#endif ++ ); ++#ifdef DEBUGGER_ERROR ++ extern void DEBUGGER_ERROR(void); ++ DEBUGGER_ERROR(); ++#endif ++ } ++ ++ return ret; ++} ++ ++void clear_dirty_bits (void) ++{ ++ int num_pages = bx_options.memory.Osize->get () * 1024 / 4; ++ for (int i = 0; i < num_pages; i++) { ++ BX_MEM(0)->dbg_dirty_pages[i] = 0; ++ BX_MEM(1)->dbg_dirty_pages[i] = 0; ++ } ++} ++ ++bx_bool always_check_page[128 * 1024 / 4]; ++ ++void bx_dbg_always_check(Bit32u page_start, bx_bool on) ++{ ++ always_check_page[page_start / (4 * 1024)] = on; ++ printf("Forced check on page %08x %s\n", ++ page_start, on ? "enabled" : "disabled"); ++} ++ ++bx_bool bx_dbg_compare_sim_memory(void) ++{ ++ bx_bool ret = 0; ++ int num_pages = bx_options.memory.Osize->get () * 1024 / 4; ++ ++ for (int i = 0; i < num_pages; i++) { ++ bx_bool sim0_dirty = BX_MEM(0)->dbg_dirty_pages[i]; ++ bx_bool sim1_dirty = BX_MEM(1)->dbg_dirty_pages[i]; ++ Bit32u page_start = i * 1024 * 4; ++ ++ if ((sim0_dirty != sim1_dirty) || sim0_dirty || always_check_page[i]) { ++ // Page has been written, compare ++ // (mch) I'm quite aware of how hackish this is. I don't care. ++ extern Bit8u* SIM1_GET_PHYS_PTR(Bit32u page_start); ++ Bit8u* sim0_page_vec = bx_mem0.vector + page_start; ++ Bit8u* sim1_page_vec = SIM1_GET_PHYS_PTR(page_start); ++ ++ if (memcmp(sim0_page_vec, sim1_page_vec, 1024 * 4)) { ++ printf("COSIM ERROR Physical page %08x differs in content\n", page_start); ++ for (int j = 0; j < 1024 * 4; j++) { ++ if (sim0_page_vec[j] != sim1_page_vec[j]) { ++ printf("%08x %s: %02x %s: %02x\n", ++ page_start+j, SIM_NAME0, sim0_page_vec[j], SIM_NAME1_STR, sim1_page_vec[j]); ++ } ++ } ++ ret = 1; ++ } ++ } ++ } ++ ++ if (ret) { ++ dbg_printf ( ++#if BX_DBG_ICOUNT_SIZE == 32 ++ "*** Memory divergence ***: last know synchronized icount was %lu\n", ++ (unsigned long) bx_debugger.last_sync_icount ++#else // BX_DBG_ICOUNT_SIZE == 64 ++ "*** Memory divergence ***: last know synchronized icount was %Lu\n", ++ (unsigned long long) bx_debugger.last_sync_icount ++#endif ++ ); ++ } ++ ++ clear_dirty_bits(); ++ ++ return ret; ++} ++ ++void bx_dbg_journal_a20_event(unsigned val) ++{ ++ unsigned tail, master; ++ ++ if (bx_debugger.master_slave_mode == BX_DBG_SLAVE_MODE ) { ++ dbg_printf ( "Error: a20_report: in slave mode.\n"); ++ bx_dbg_exit(1); ++ } ++ ++ // Master simulator mode ++ if (bx_debugger.async_journal.size >= BX_DBG_ASYNC_JOURNAL_SIZE) { ++ dbg_printf ( "Error: async journal full.\n"); ++ bx_dbg_exit(1); ++ } ++ ++ if (bx_debugger.async_journal.size == 0) { ++ // start off point head & tail at same element ++ bx_debugger.async_journal.head = 0; ++ tail = bx_debugger.async_journal.tail = 0; ++ } ++ else { ++ tail = bx_debugger.async_journal.tail + 1; ++ } ++ if (tail >= BX_DBG_ASYNC_JOURNAL_SIZE) { ++ dbg_printf ( "Error: a20_report: journal wrapped.\n"); ++ bx_dbg_exit(0); ++ } ++ ++ master = bx_debugger.master; ++ bx_debugger.async_journal.element[tail].what = BX_DBG_ASYNC_JOURNAL_A20; ++ bx_debugger.async_journal.element[tail].icount = bx_guard_found[master].icount; ++ bx_debugger.async_journal.element[tail].u.a20.val = val; ++ ++ if (bx_debugger.async_journal.size) ++ bx_debugger.async_journal.tail++; ++ bx_debugger.async_journal.size++; ++} ++ ++Bit8u bx_dbg_ucmem_read(Bit32u addr) ++{ ++ Bit8u value; ++ unsigned head, tail; ++ ++ if ( bx_debugger.master_slave_mode == BX_DBG_MASTER_MODE ) { ++ if (!bx_debugger.fast_forward_mode) { ++ if (bx_debugger.UCmem_journal.size >= BX_DBG_UCMEM_JOURNAL_SIZE) { ++ dbg_printf ( "dbg_ucmem_read: journal full.\n"); ++ bx_dbg_exit(0); ++ } ++ ++ if (bx_debugger.UCmem_journal.size == 0) { ++ // start off point head & tail at same element ++ bx_debugger.UCmem_journal.head = 0; ++ tail = bx_debugger.UCmem_journal.tail = 0; ++ } ++ else { ++ tail = bx_debugger.UCmem_journal.tail + 1; ++ } ++ if (tail >= BX_DBG_UCMEM_JOURNAL_SIZE) { ++ dbg_printf ( "dbg_ucmem_read: journal wrapped.\n"); ++ bx_dbg_exit(0); ++ } ++ ++ value = DEV_vga_mem_read(addr); ++ bx_dbg_ucmem_report(addr, 1, BX_READ, value); ++ bx_debugger.UCmem_journal.element[tail].op = BX_READ; ++ bx_debugger.UCmem_journal.element[tail].len = 1; ++ bx_debugger.UCmem_journal.element[tail].addr = addr; ++ bx_debugger.UCmem_journal.element[tail].value = value; ++ if (bx_debugger.UCmem_journal.size) ++ bx_debugger.UCmem_journal.tail++; ++ bx_debugger.UCmem_journal.size++; ++ ++ if (doit) ++ dbg_printf ( "MASTER UCR: head:%u tail%u size:%u\n", ++ bx_debugger.UCmem_journal.head, ++ bx_debugger.UCmem_journal.tail, ++ bx_debugger.UCmem_journal.size); ++ ++ return(value); ++ } else { ++ value = DEV_vga_mem_read(addr); ++ return(value); ++ } ++ } ++ else { ++ if (bx_debugger.UCmem_journal.size == 0) { ++ dbg_printf ( "Error: ucmem_read: journal empty.\n"); ++ return(0xff); ++ } ++ head = bx_debugger.UCmem_journal.head; ++ value = bx_debugger.UCmem_journal.element[head].value; ++ ++ if ((bx_debugger.UCmem_journal.element[head].op != BX_READ) || ++ (bx_debugger.UCmem_journal.element[head].len != 1) || ++ (bx_debugger.UCmem_journal.element[head].addr != addr)) ++ { ++ dbg_printf ( "Error: ucmem_read: out of sync with journal.\n"); ++ dbg_printf ( "Error: master: op=%1s len=%u addr=0x%x val=0x%x\n", ++ (bx_debugger.UCmem_journal.element[head].op==BX_READ) ? "W" : "R", ++ (unsigned) bx_debugger.UCmem_journal.element[head].len, ++ (unsigned) bx_debugger.UCmem_journal.element[head].addr, ++ (unsigned) bx_debugger.UCmem_journal.element[head].value); ++ dbg_printf ( "Error: slave: op=W len=%u addr=0x%x val=0x%x\n", ++ (unsigned) 1, (unsigned) addr, (unsigned) value); ++ return(0xff); ++ } ++ // slave UCmem op in sync with journaled master op, delete this entry ++ bx_debugger.UCmem_journal.head++; ++ bx_debugger.UCmem_journal.size--; ++ return(value); ++ } ++} ++ ++void bx_dbg_ucmem_write(Bit32u addr, Bit8u value) ++{ ++ unsigned tail, head; ++ ++ if ( bx_debugger.master_slave_mode == BX_DBG_MASTER_MODE ) { ++ if (!bx_debugger.fast_forward_mode) { ++ if (bx_debugger.UCmem_journal.size >= BX_DBG_UCMEM_JOURNAL_SIZE) { ++ dbg_printf ( "dbg_ucmem_write: journal full.\n"); ++ bx_dbg_exit(0); ++ } ++ ++ if (bx_debugger.UCmem_journal.size == 0) { ++ // start off point head & tail at same element ++ bx_debugger.UCmem_journal.head = 0; ++ tail = bx_debugger.UCmem_journal.tail = 0; ++ } ++ else { ++ tail = bx_debugger.UCmem_journal.tail + 1; ++ } ++ if (tail >= BX_DBG_UCMEM_JOURNAL_SIZE) { ++ dbg_printf ( "dbg_ucmem_write: journal wrapped.\n"); ++ bx_dbg_exit(0); ++ } ++ ++ bx_debugger.UCmem_journal.element[tail].op = BX_WRITE; ++ bx_debugger.UCmem_journal.element[tail].len = 1; ++ bx_debugger.UCmem_journal.element[tail].addr = addr; ++ bx_debugger.UCmem_journal.element[tail].value = value; ++ ++ if (bx_debugger.UCmem_journal.size) ++ bx_debugger.UCmem_journal.tail++; ++ bx_debugger.UCmem_journal.size++; ++ DEV_vga_mem_write(addr, value); ++ bx_dbg_ucmem_report(addr, 1, BX_WRITE, value); ++ } else { ++ DEV_vga_mem_write(addr, value); ++ } ++ } ++ else { ++ if (bx_debugger.UCmem_journal.size == 0) { ++ dbg_printf ( "Error: ucmem_write: journal empty.\n"); ++ return; ++ } ++ head = bx_debugger.UCmem_journal.head; ++ ++ if ((bx_debugger.UCmem_journal.element[head].op != BX_WRITE) || ++ (bx_debugger.UCmem_journal.element[head].len != 1) || ++ (bx_debugger.UCmem_journal.element[head].addr != addr) || ++ (bx_debugger.UCmem_journal.element[head].value != value) ) ++ { ++ dbg_printf ( "Error: ucmem_write: out of sync with journal.\n"); ++ dbg_printf ( "Error: master: op=%1s len=%u addr=0x%x val=0x%x\n", ++ (bx_debugger.UCmem_journal.element[head].op==BX_WRITE) ? "W" : "R", ++ (unsigned) bx_debugger.UCmem_journal.element[head].len, ++ (unsigned) bx_debugger.UCmem_journal.element[head].addr, ++ (unsigned) bx_debugger.UCmem_journal.element[head].value); ++ dbg_printf ( "Error: slave: op=W len=%u addr=0x%x val=0x%x\n", ++ (unsigned) 1, (unsigned) addr, (unsigned) value); ++ return; ++ } ++ // slave UCmem op in sync with journaled master op, delete this entry ++ bx_debugger.UCmem_journal.head++; ++ bx_debugger.UCmem_journal.size--; ++ } ++} ++ ++void bx_dbg_async_pin_request(unsigned what, bx_bool val) ++{ ++ // Request from IO devices for change in pin external to CPU. ++ // This is pended until CPU ack's with bx_dbg_async_pin_ack(). ++ ++ if (bx_debugger.master_slave_mode != BX_DBG_MASTER_MODE) { ++ dbg_printf ( "Error: dbg_async_pin_request not in master mode.\n"); ++ bx_dbg_exit(1); ++ } ++ ++ switch (what) { ++ case BX_DBG_ASYNC_PENDING_A20: ++ // Q pending status ++ bx_guard.async_changes_pending.which |= BX_DBG_ASYNC_PENDING_A20; ++ bx_guard.async_changes_pending.a20 = val; ++ return; ++ ++ case BX_DBG_ASYNC_PENDING_RESET: ++ case BX_DBG_ASYNC_PENDING_NMI: ++ default: ++ dbg_printf ( "Error: set_async_pin: unhandled case.\n"); ++ bx_dbg_exit(1); ++ } ++} ++ ++ ++void bx_dbg_async_pin_ack(unsigned what, bx_bool val) ++{ ++ // Acknowledgement from master simulator for pending change in pin ++ // external to CPU. ++ ++ if (bx_debugger.master_slave_mode != BX_DBG_MASTER_MODE) { ++ dbg_printf ( "Error: dbg_async_pin_ack: not master mode.\n"); ++ bx_dbg_exit(1); ++ } ++ ++ switch (what) { ++ case BX_DBG_ASYNC_PENDING_A20: ++ // get rid of pending status ++ bx_guard.async_changes_pending.which &= ~BX_DBG_ASYNC_PENDING_A20; ++ // notify pc_system of change ++ bx_pc_system.set_enable_a20(val); ++ if (BX_CPU(bx_debugger.master)->set_A20) ++ BX_CPU(bx_debugger.master)->set_A20(val); ++ bx_dbg_journal_a20_event(val); ++ return; ++ ++ case BX_DBG_ASYNC_PENDING_RESET: ++ case BX_DBG_ASYNC_PENDING_NMI: ++ default: ++ dbg_printf ( "Error: set_async_pin: unhandled case.\n"); ++ bx_dbg_exit(1); ++ } ++} ++ ++Bit32u bx_dbg_inp(Bit16u addr, unsigned len) ++{ ++ Bit32u value; ++ unsigned tail, head; ++ ++ if ( bx_debugger.master_slave_mode == BX_DBG_MASTER_MODE ) { ++ if (!bx_debugger.fast_forward_mode) { ++ if (bx_debugger.IO_journal.size >= BX_DBG_IO_JOURNAL_SIZE) { ++ dbg_printf ( "dbg_inp: journal full.\n"); ++ bx_dbg_exit(0); ++ } ++ ++ if (bx_debugger.IO_journal.size == 0) { ++ // start off point head & tail at same element ++ bx_debugger.IO_journal.head = 0; ++ tail = bx_debugger.IO_journal.tail = 0; ++ } ++ else { ++ tail = bx_debugger.IO_journal.tail + 1; ++ } ++ if (tail >= BX_DBG_IO_JOURNAL_SIZE) { ++ dbg_printf ( "dbg_inp: journal wrapped.\n"); ++ bx_dbg_exit(0); ++ } ++ ++ value = bx_pc_system.inp(addr, len); ++ bx_debugger.IO_journal.element[tail].op = BX_READ; ++ bx_debugger.IO_journal.element[tail].len = (Bit8u) len; ++ bx_debugger.IO_journal.element[tail].addr = addr; ++ bx_debugger.IO_journal.element[tail].value = value; ++ if (bx_debugger.IO_journal.size) ++ bx_debugger.IO_journal.tail++; ++ bx_debugger.IO_journal.size++; ++//dbg_printf ( "MASTER IN: head:%u tail%u size:%u\n", ++// bx_debugger.IO_journal.head, ++// bx_debugger.IO_journal.tail, ++// bx_debugger.IO_journal.size); ++ return(value); ++ } else { ++ value = bx_pc_system.inp(addr, len); ++ return(value); ++ } ++ } ++ else { ++ if (bx_debugger.IO_journal.size == 0) { ++ dbg_printf ( "Error: dbg_inp: journal empty.\n"); ++ return(0xffffffff); ++ } ++ head = bx_debugger.IO_journal.head; ++ value = bx_debugger.IO_journal.element[head].value; ++ ++ if ((bx_debugger.IO_journal.element[head].op != BX_READ) || ++ (bx_debugger.IO_journal.element[head].len != len) || ++ (bx_debugger.IO_journal.element[head].addr != addr) ) { ++ dbg_printf ( "Error: dbg_inp: out of sync with journal.\n"); ++ dbg_printf ( "Error: master: op=%3s len=%u addr=0x%x\n", ++ (bx_debugger.IO_journal.element[head].op==BX_WRITE) ? "OUT" : "IN", ++ (unsigned) bx_debugger.IO_journal.element[head].len, ++ (unsigned) bx_debugger.IO_journal.element[head].addr); ++ dbg_printf ( "Error: slave: op=OUT len=%u addr=0x%x\n", ++ (unsigned) len, (unsigned) addr); ++ return(0xffffffff); ++ } ++ // slave IO op in sync with journaled master op, delete this entry ++ bx_debugger.IO_journal.head++; ++ bx_debugger.IO_journal.size--; ++// dbg_printf ( "SLAVE IN: head:%u tail%u size:%u\n", ++// bx_debugger.IO_journal.head, ++// bx_debugger.IO_journal.tail, ++// bx_debugger.IO_journal.size); ++ return(value); ++ } ++} ++ ++void bx_dbg_outp(Bit16u addr, Bit32u value, unsigned len) ++{ ++ unsigned tail, head; ++ ++ if ( bx_debugger.master_slave_mode == BX_DBG_MASTER_MODE ) { ++ if (!bx_debugger.fast_forward_mode) { ++ if (bx_debugger.IO_journal.size >= BX_DBG_IO_JOURNAL_SIZE) { ++ dbg_printf ( "dbg_outp: IO journal full.\n"); ++ bx_dbg_exit(0); ++ } ++ ++ if (bx_debugger.IO_journal.size == 0) { ++ // start off point head & tail at same element ++ bx_debugger.IO_journal.head = 0; ++ tail = bx_debugger.IO_journal.tail = 0; ++ } ++ else { ++ tail = bx_debugger.IO_journal.tail + 1; ++ } ++ if (tail >= BX_DBG_IO_JOURNAL_SIZE) { ++ dbg_printf ( "dbg_outp: IO journal wrapped.\n"); ++ bx_dbg_exit(0); ++ } ++ ++ bx_debugger.IO_journal.element[tail].op = BX_WRITE; ++ bx_debugger.IO_journal.element[tail].len = (Bit8u) len; ++ bx_debugger.IO_journal.element[tail].addr = addr; ++ bx_debugger.IO_journal.element[tail].value = value; ++ if (bx_debugger.IO_journal.size) ++ bx_debugger.IO_journal.tail++; ++ bx_debugger.IO_journal.size++; ++ bx_pc_system.outp(addr, value, len); ++ if (doit) ++ dbg_printf ( "master: IO journal size now %u\n", bx_debugger.IO_journal.size); ++ } else { ++ bx_pc_system.outp(addr, value, len); ++ } ++ } ++ else { ++ if (bx_debugger.IO_journal.size == 0) { ++ dbg_printf ( "Error: dbg_outp: journal empty.\n"); ++ return; ++ } ++ head = bx_debugger.IO_journal.head; ++ ++ if ((bx_debugger.IO_journal.element[head].op != BX_WRITE) || ++ (bx_debugger.IO_journal.element[head].len != len) || ++ (bx_debugger.IO_journal.element[head].addr != addr) || ++ (bx_debugger.IO_journal.element[head].value != value) ) { ++ dbg_printf ( "Error: dbg_outp: out of sync with journal.\n"); ++ dbg_printf ( "Error: master: op=%3s len=%u addr=0x%x val=0x%x\n", ++ (bx_debugger.IO_journal.element[head].op==BX_WRITE) ? "OUT" : "IN", ++ (unsigned) bx_debugger.IO_journal.element[head].len, ++ (unsigned) bx_debugger.IO_journal.element[head].addr, ++ (unsigned) bx_debugger.IO_journal.element[head].value); ++ dbg_printf ( "Error: slave: op=OUT len=%u addr=0x%x val=0x%x\n", ++ (unsigned) len, (unsigned) addr, (unsigned) value); ++ return; ++ } ++ // slave IO op in sync with journaled master op, delete this entry ++ bx_debugger.IO_journal.head++; ++ bx_debugger.IO_journal.size--; ++ if (doit) ++ dbg_printf ( "slave: IO journal size now %u\n", bx_debugger.IO_journal.size); ++ } ++} ++ ++void bx_dbg_raise_HLDA(void) ++{ ++ dbg_printf ( "dbg_HLDA called\n"); ++ bx_dbg_exit(0); ++} ++ ++Bit8u bx_dbg_IAC(void) ++{ ++ // Convience routine. bochs skips this, and calls the PIC code ++ // directly. This is for other simulators to interface to the ++ // the PIC code. ++ unsigned iac; ++ ++ iac = BX_PIC_AIC (); ++ return(iac); ++} ++ ++void bx_dbg_set_INTR(bx_bool b) ++{ ++ if ( bx_debugger.master_slave_mode == BX_DBG_SLAVE_MODE ) { ++ dbg_printf ( "Error: set_INTR in slave mode.\n"); ++ bx_dbg_exit(1); ++ } ++ ++ bx_pc_system.INTR = b; ++ BX_CPU(bx_debugger.master)->set_INTR(b); ++} ++ ++#endif ++ ++void bx_dbg_diff_memory(void) ++{ ++#if BX_NUM_SIMULATORS < 2 ++ printf("diff-memory supported only in cosimulation mode\n"); ++#else ++ int num_pages = bx_options.memory.Osize->get () * 1024 / 4; ++ for (int i = 0; i < num_pages; i++) { ++ BX_CPU(dbg_cpu)->dbg_dirty_pages[i] = 1; ++ } ++ if (bx_dbg_compare_sim_memory()) ++ printf("[diff-memory] Diff detected\n"); ++ else ++ printf("[diff-memory] No diff detected\n"); ++#endif /* NUM_SIMULATORS < 2 */ ++} ++ ++void bx_dbg_sync_memory(bx_bool set) ++{ ++#if BX_NUM_SIMULATORS < 2 ++ printf("sync-memory supported only in cosimulation mode\n"); ++#else ++ bx_debugger.compare_at_sync.memory = set; ++ printf("Memory sync %s\n", (set) ? "enabled" : "disabled"); ++#endif ++} ++ ++void bx_dbg_sync_cpu(bx_bool set) ++{ ++#if BX_NUM_SIMULATORS < 2 ++ printf("sync-cpu supported only in cosimulation mode\n"); ++#else ++ bx_debugger.compare_at_sync.cpu = set; ++ printf("Register file sync %s\n", (set) ? "enabled" : "disabled"); ++#endif ++} ++ ++void bx_dbg_fast_forward(Bit32u num) ++{ ++#if BX_NUM_SIMULATORS < 2 ++ printf("fast-forward supported only in cosimulation mode\n"); ++#else ++ printf("Entering fast-forward mode\n"); ++ ++ // Bit32u save_icount_quantum = bx_debugger.icount_quantum; ++ // bx_debugger.icount_quantum = num; ++ ++ bx_guard.interrupt_requested = 0; ++ ++ bx_debugger.fast_forward_mode = 1; ++ for (Bit32u e = 0; e < num; e += bx_debugger.icount_quantum) ++ if (!bx_dbg_cosimulateN(bx_debugger.icount_quantum)) ++ break; ++ bx_debugger.fast_forward_mode = 0; ++ // bx_debugger.icount_quantum = save_icount_quantum; ++ ++ DEV_vga_refresh(); ++ ++ printf("Copying CPU...\n"); ++ bx_dbg_cpu_t cpu; ++ if (!BX_CPU(0)->dbg_get_cpu(&cpu) || !BX_CPU(1)->dbg_set_cpu(&cpu)) ++ printf("Error copying CPU data!\n"); ++ ++ printf("Copying memory...\n"); ++ int num_pages = bx_options.memory.Osize->get () * 1024 / 4; ++ for (int i = 0; i < num_pages; i++) { ++ if (BX_CPU(0)->dbg_dirty_pages[i]) { ++ Bit32u page_start = i * 1024 * 4; ++ printf("Copying page %08x\n", page_start); ++ extern Bit8u* SIM1_GET_PHYS_PTR(Bit32u page_start); ++ Bit8u* sim0_page_vec = bx_mem0.vector + page_start; ++ Bit8u* sim1_page_vec = SIM1_GET_PHYS_PTR(page_start); ++ memcpy(sim1_page_vec, sim0_page_vec, 1024 * 4); ++ } ++ } ++ ++ printf("Taking async events...\n"); ++ ++ printf("Exiting fast-forward mode\n"); ++#endif ++} ++ ++extern Bit32u conv_4xBit8u_to_Bit32u(const Bit8u* buf); ++ ++/* ++ (mch) Print various info for logical address. ++*/ ++void bx_dbg_info_address(Bit32u seg_reg_num, Bit32u offset) ++{ ++#if BX_NUM_SIMULATORS < 2 ++ printf("addr-info only supported in cosim configuration.\n"); ++#else ++ for (int sim = 0; sim < 2; sim++) ++ { ++ /* Find page table base address */ ++ bx_dbg_cpu_t regs; ++ BX_CPU(sim)->dbg_get_cpu(®s); ++ Bit32u base = regs.cr3 & ~0xfff; ++ ++ Bit8u buf[4]; ++ Bit32u directory_addr = base + (offset >> 22) * 4; ++ Bit32u directory; ++ if (BX_CPU(sim)->mem->dbg_fetch_mem(directory_addr, 4, buf)) { ++ directory = conv_4xBit8u_to_Bit32u(buf); ++ Bit32u table_addr = (directory & ~0xfff) + ((offset >> 12) & 0x3ff) * 4; ++ Bit32u table; ++ ++ printf("[%s] ", SIM_NAME(sim)); ++ printf("PDE: %08x (", directory); ++ printf("%s, %s, %s, %s, %s)", ++ (directory & 1) ? "Present" : "Not present", ++ (directory & 2) ? "Read/Write" : "Read-only", ++ (directory & 4) ? "User" : "Supervisor", ++ (directory & (1 << 5)) ? "Accessed" : "-", ++ (directory & (1 << 6)) ? "Dirty" : "-"); ++ ++ if (directory & 1) { ++ if (BX_CPU(sim)->mem->dbg_fetch_mem(table_addr, 4, buf)) { ++ table = conv_4xBit8u_to_Bit32u(buf); ++ ++ printf(", PTE: %08x (", table); ++ printf("%s, %s, %s, %s, %s)\n", ++ (table & 1) ? "Present" : "Not present", ++ (table & 2) ? "Read/Write" : "Read-only", ++ (table & 4) ? "User" : "Supervisor", ++ (table & (1 << 5)) ? "Accessed" : "-", ++ (table & (1 << 6)) ? "Dirty" : "-"); ++ } else { ++ printf("[%s] Could not read from physical address %08x\n", ++ SIM_NAME(sim), directory_addr); ++ return; ++ } ++ } else { ++ printf("\n"); ++ } ++ } else { ++ printf("[%s] Could not read from physical address %08x\n", ++ SIM_NAME(sim), directory_addr); ++ return; ++ } ++ } ++#endif ++} +diff -uBbwNpr bochs-nocosim/bx_debug/dbg_main.cc bochs/bx_debug/dbg_main.cc +--- bochs-nocosim/bx_debug/dbg_main.cc 2006-01-25 22:57:42.921875000 +0200 ++++ bochs/bx_debug/dbg_main.cc 2006-01-25 23:39:08.937500000 +0200 +@@ -45,8 +45,18 @@ extern "C" { + } + #endif + ++ ++static unsigned doit = 0; ++ ++#define SIM_NAME0 "bochs" ++#ifndef SIM_NAME1_STR ++#define SIM_NAME1_STR "sim1" ++#endif ++#define SIM_NAME(x) ((x == 0) ? SIM_NAME0 : SIM_NAME1_STR) ++ + // default CPU in the debugger. For commands like "dump_cpu" it will + // use the default instead of always dumping all cpus. ++ + Bit32u dbg_cpu = 0; + + bx_param_bool_c *sim_running; +@@ -58,9 +68,87 @@ static char tmp_buf_prev[512]; + static char *tmp_buf_ptr; + static char *argv0 = NULL; + ++#if BX_NUM_SIMULATORS >= 2 ++#define BX_DBG_IO_JOURNAL_SIZE 1024 ++#define BX_DBG_UCMEM_JOURNAL_SIZE 1024 ++#define BX_DBG_ASYNC_JOURNAL_SIZE 1024 ++#define BX_DBG_MASTER_MODE 10 ++#define BX_DBG_SLAVE_MODE 11 ++// #define BX_DBG_DEFAULT_ICOUNT_QUANTUM 50 ++#define BX_DBG_DEFAULT_ICOUNT_QUANTUM 3 /* mch */ ++ ++static unsigned bx_dbg_cosimulateN(bx_dbg_icount_t count); ++static int bx_dbg_compare_sim_iaddr(void); ++static bx_bool bx_dbg_compare_sim_cpu(void); ++static bx_bool bx_dbg_compare_sim_memory(void); ++static void bx_dbg_journal_a20_event(unsigned val); ++#endif ++ + static FILE *debugger_log = NULL; + + static struct { ++#if BX_NUM_SIMULATORS >= 2 ++ // some fields used only for cosimulation ++ unsigned icount_quantum; ++ unsigned master_slave_mode; ++ unsigned master, slave; ++ struct { ++ struct { ++ Bit8u op; ++ Bit8u len; ++ Bit16u addr; ++ Bit32u value; ++ } element[BX_DBG_IO_JOURNAL_SIZE]; ++ unsigned size; ++ unsigned head, tail; ++ } IO_journal; ++ ++ struct { ++ struct { ++ Bit8u op; ++ Bit8u len; ++ Bit32u addr; ++ Bit32u value; ++ } element[BX_DBG_UCMEM_JOURNAL_SIZE]; ++ unsigned size; ++ unsigned head, tail; ++ } UCmem_journal; ++ ++// need to handle DMA stuff in here... ++ ++#define BX_DBG_ASYNC_JOURNAL_NONE 0 ++#define BX_DBG_ASYNC_JOURNAL_A20 1 ++#define BX_DBG_ASYNC_JOURNAL_IAC 2 ++#define BX_DBG_ASYNC_JOURNAL_NMI 3 ++#define BX_DBG_ASYNC_JOURNAL_RESET 4 ++ ++ // Asynchronous events at the boundaries they are *taken* by the master simulator. ++ // These are replayed back to the slave at the same boundaries. ++ struct { ++ struct { ++ unsigned what; // A20, INTR, NMI, RESET, IAC, ... ++ bx_dbg_icount_t icount; ++ union { ++ struct { ++ unsigned val; ++ } a20, nmi, reset, iac; ++ // perhaps other more complex types here ++ } u; ++ } element[BX_DBG_ASYNC_JOURNAL_SIZE]; ++ unsigned size; ++ unsigned head, tail; ++ } async_journal; ++ ++ struct { ++ bx_bool iaddr; ++ bx_bool cpu; ++ bx_bool memory; ++ } compare_at_sync; ++ ++ bx_bool fast_forward_mode; ++ ++#endif // #if BX_NUM_SIMULATORS >= 2 ++ + // some fields used for single CPU debugger + bx_bool auto_disassemble; + unsigned disassemble_size; +@@ -77,7 +165,19 @@ static struct { + #endif + } bx_debugger; + +-#define BX_DBG_DEFAULT_ICOUNT_QUANTUM 3 /* mch */ ++ ++ ++// cosim commands for handling of comparison of simulator ++// environments when both simulators have reached a common ++// point (synchronized). ++ ++// cosim compare_at_sync iaddr (default is on) ++// cosim compare_at_sync cpu (default is off) ++// cosim compare_at_sync memory (default is off) ++// cosim compare iaddr ++// cosim compare cpu ++// cosim compare memory ++ + + typedef struct { + FILE *fp; +@@ -97,8 +197,10 @@ static void bx_get_command(void); + static void bx_dbg_print_guard_results(); + static void bx_dbg_breakpoint_changed(void); + ++bx_dbg_callback_t bx_dbg_callback[BX_NUM_SIMULATORS]; + bx_guard_t bx_guard; + ++ + // DMA stuff + void bx_dbg_post_dma_reports(void); + #define BX_BATCH_DMA_BUFSIZE 512 +@@ -138,8 +240,10 @@ void dbg_printf (const char *fmt, ...) + + int bx_dbg_main(int argc, char *argv[]) + { +- int i, bochs_argc=0; ++ int i, bochs_argc=0, sim1_argc=0, sim2_argc=0; + char **bochs_argv = NULL; ++ char **sim1_argv = NULL; ++ char **sim2_argv = NULL; + argc = 1; + + setbuf (stdout, NULL); +@@ -148,11 +252,29 @@ int bx_dbg_main(int argc, char *argv[]) + bx_dbg_batch_dma.this_many = 1; + bx_dbg_batch_dma.Qsize = 0; + ++ // initialize callback functions, and guard environment ++ memset(bx_dbg_callback, 0, sizeof(bx_dbg_callback)); + memset(&bx_guard, 0, sizeof(bx_guard)); + bx_guard.async.irq = 1; + bx_guard.async.dma = 1; + + memset(&bx_debugger, 0, sizeof(bx_debugger)); ++#if BX_NUM_SIMULATORS >= 2 ++ bx_debugger.icount_quantum = BX_DBG_DEFAULT_ICOUNT_QUANTUM; ++ bx_debugger.IO_journal.size = 0; ++ bx_debugger.IO_journal.head = 0; ++ bx_debugger.IO_journal.tail = 0; ++ bx_debugger.UCmem_journal.size = 0; ++ bx_debugger.UCmem_journal.head = 0; ++ bx_debugger.UCmem_journal.tail = 0; ++ bx_debugger.async_journal.size = 0; ++ bx_debugger.async_journal.head = 0; ++ bx_debugger.async_journal.tail = 0; ++ bx_debugger.master = 0; ++ bx_debugger.slave = 1; ++ bx_debugger.compare_at_sync.iaddr = 1; ++ bx_debugger.fast_forward_mode = 0; ++#endif + bx_debugger.auto_disassemble = 1; + bx_debugger.disassemble_size = 0; + bx_debugger.default_display_format = 'x'; +@@ -166,7 +289,11 @@ int bx_dbg_main(int argc, char *argv[]) + bx_debug_rc_fname[0] = '\0'; + + bochs_argv = (char **) &argv[0]; ++ sim1_argv = bochs_argv; // start out with something reasonable ++ sim2_argv = bochs_argv; // start out with something reasonable + bochs_argc = 1; ++ sim1_argc = 1; ++ sim2_argc = 1; + + // process "-rc pathname" option, if it exists + i = 1; +@@ -182,6 +309,41 @@ int bx_dbg_main(int argc, char *argv[]) + bochs_argv = (char **) &argv[2]; + } + ++ // process options to bochs framework ++ for (; i= 2 ++ BX_SIM2_INIT(&bx_dbg_callback[1], sim2_argc, sim2_argv); ++#endif ++ + // parse any remaining args in the usual way + bx_parse_cmdline (1, bochs_argc, bochs_argv); + + // initialize hardware + bx_init_hardware(); + +- // Moved from main.cc ++#if BX_NUM_SIMULATORS >= 2 ++ bx_debugger.compare_at_sync.cpu = 0; ++ bx_debugger.compare_at_sync.memory = 0; ++#endif ++ ++ // call init routines for each CPU+mem simulator ++ // initialize for SMP. one memory, multiple processors. ++ ++#if BX_NUM_SIMULATORS > 1 ++#error cosimulation not supported until SMP stuff settles ++ BX_MEM(1) = new BX_MEM_C (); ++ BX_CPU(1) = new BX_CPU_C (BX_MEM(1)); ++ BX_CPU(1)->reset(BX_RESET_HARDWARE); ++ BX_MEM(1)->init_memory(bx_options.memory.Osize->get () * 1024*1024); ++ BX_MEM(1)->load_ROM(bx_options.rom.path->getptr (), bx_options.rom.address->get (), 1); ++ BX_MEM(1)->load_ROM(bx_options.vgarom.path->getptr (), 0xc0000, 2); ++#endif ++ ++ // (mch) Moved from main.cc + DEV_init_devices(); + DEV_reset_devices(BX_RESET_HARDWARE); + bx_gui->init_signal_handlers (); +@@ -524,11 +709,16 @@ void bx_debug_break () + + void bx_dbg_exit(int code) + { +- BX_DEBUG(("dbg: before exit" )); ++ BX_DEBUG(("dbg: before sim1_exit" )); + for (int cpu=0; cpu < BX_SMP_PROCESSORS; cpu++) { + if (BX_CPU(cpu)) BX_CPU(cpu)->atexit(); + } + ++#if BX_NUM_SIMULATORS >= 2 ++ dbg_printf("before sim2_exit\n"); ++ if (BX_CPU(1)) BX_CPU(1)->atexit(); ++#endif ++ + bx_atexit(); + BX_EXIT(code); + } +@@ -570,6 +761,17 @@ void bx_dbg_trace_reg_off_command(void) + void bx_dbg_ptime_command(void) + { + dbg_printf("ptime: " FMT_LL "d\n", bx_pc_system.time_ticks()); ++#if BX_NUM_SIMULATORS >= 2 ++ dbg_printf ( ++#if BX_DBG_ICOUNT_SIZE == 32 ++ "Last synchronized icount was %lu\n", ++ (unsigned long) bx_debugger.last_sync_icount ++#else // BX_DBG_ICOUNT_SIZE == 64 ++ "Last synchronized icount was %Lu\n", ++ (unsigned long long) bx_debugger.last_sync_icount ++#endif /* BX_DBG_ICOUNT_SIZE == 32 */ ++ ); ++#endif /* BX_NUM_SIMULATORS >= 2 */ + } + + int timebp_timer = -1; +@@ -1041,6 +1243,14 @@ void bx_dbg_continue_command(void) + + one_more: + ++#if BX_NUM_SIMULATORS >= 2 ++ bx_guard.interrupt_requested = 0; ++ bx_guard.special_unwind_stack = 0; ++ while (1) { ++ if ( !bx_dbg_cosimulateN(bx_debugger.icount_quantum) ) ++ break; ++ } ++#else + bx_guard.icount = 0; + // I must guard for ICOUNT or one CPU could run forever without giving + // the others a chance. +@@ -1115,6 +1325,7 @@ one_more: + BX_TICKN(max_executed); + #endif /* BX_SUPPORT_SMP */ + } ++#endif /* BX_NUM_SIMULATORS */ + + sim_running->set (0); + SIM->refresh_ci (); +@@ -1141,6 +1352,11 @@ void bx_dbg_stepN_command(bx_dbg_icount_ + // is printed, we will return to config mode. + SIM->set_display_mode (DISP_MODE_SIM); + ++#if BX_NUM_SIMULATORS >= 2 ++ bx_guard.interrupt_requested = 0; ++ bx_guard.special_unwind_stack = 0; ++ bx_dbg_cosimulateN(count); ++#else + // single CPU + bx_guard.guard_for |= BX_DBG_GUARD_ICOUNT; // looking for icount + bx_guard.guard_for |= BX_DBG_GUARD_CTRL_C; // or Ctrl-C +@@ -1159,6 +1375,7 @@ void bx_dbg_stepN_command(bx_dbg_icount_ + BX_TICK1 (); + #endif + } ++#endif + + BX_INSTR_DEBUG_PROMPT(); + bx_dbg_print_guard_results(); +@@ -1822,7 +2039,7 @@ void dbg_printf_binary (char *format, Bi + } + + void bx_dbg_examine_command(char *command, char *format, bx_bool format_passed, +- Bit32u addr, bx_bool addr_passed) ++ Bit32u addr, bx_bool addr_passed, int simulator) + { + unsigned repeat_count, i; + char ch, display_format, unit_size; +@@ -1837,7 +2054,10 @@ void bx_dbg_examine_command(char *comman + bx_bool is_linear; + unsigned char databuf[8]; + +- printf("[bochs]:\n"); ++ if (simulator == 0) ++ printf("[%s]:\n", SIM_NAME0); ++ else ++ printf("[%s]:\n", SIM_NAME1_STR); + + // If command was the extended "xp" command, meaning eXamine Physical memory, + // then flag memory address as physical, rather than linear. +@@ -1934,6 +2154,10 @@ void bx_dbg_examine_command(char *comman + bx_debugger.default_unit_size = unit_size; + } + ++ //dbg_printf(" repeat count was %u\n", repeat_count); ++ //dbg_printf(" display_format = '%c'\n", display_format); ++ //dbg_printf(" unit_size = '%c'\n", unit_size); ++ + if ( (display_format == 'i') || (display_format == 's') ) { + dbg_printf("error: dbg_examine: 'i' and 's' formats not supported.\n"); + return; +@@ -1996,7 +2220,7 @@ void bx_dbg_examine_command(char *comman + dbg_printf(" "); + + if (is_linear) { +- BX_CPU(0)->dbg_xlate_linear2phy(addr, &paddr, &paddr_valid); ++ BX_CPU(simulator)->dbg_xlate_linear2phy(addr, &paddr, &paddr_valid); + if (!paddr_valid) { + dbg_printf("error: examine memory: no tranlation for linear-to-phy mem available.\n"); + return; +@@ -2006,7 +2230,7 @@ void bx_dbg_examine_command(char *comman + paddr = addr; // address is already physical address + } + +- BX_MEM(0)->dbg_fetch_mem(paddr, data_size, databuf); ++ BX_MEM(simulator)->dbg_fetch_mem(paddr, data_size, databuf); + //FIXME HanishKVC The char display for data to be properly integrated + // so that repeat_count, columns, etc. can be set or used properly. + // Also for data_size of 2 and 4 how to display the individual +@@ -2564,6 +2788,42 @@ void bx_dbg_instrument_command(const cha + #endif + } + ++void bx_dbg_loader_command(char *path_quoted) ++{ ++ size_t len; ++ ++ // skip beginning double quote ++ if (path_quoted[0] == '"') ++ path_quoted++; ++ ++ // null out ending quote ++ len = strlen(path_quoted); ++ if (path_quoted[len - 1] == '"') ++ path_quoted[len - 1] = '\0'; ++ ++#if BX_USE_LOADER ++ { ++ bx_loader_misc_t loader_misc; ++ bx_dbg_callback[0].loader(path_quoted, &loader_misc); ++#if 0 ++ dbg_printf("dr0: 0x%08x\n", loader_misc.dr0); ++ dbg_printf("dr1: 0x%08x\n", loader_misc.dr1); ++ dbg_printf("dr2: 0x%08x\n", loader_misc.dr2); ++ dbg_printf("dr3: 0x%08x\n", loader_misc.dr3); ++ dbg_printf("dr6: 0x%08x\n", loader_misc.dr6); ++ dbg_printf("dr7: 0x%08x\n", loader_misc.dr7); ++#endif ++ bx_cpu.dr0 = loader_misc.dr0; ++ bx_cpu.dr1 = loader_misc.dr1; ++ bx_cpu.dr2 = loader_misc.dr2; ++ bx_cpu.dr3 = loader_misc.dr3; ++ bx_cpu.dr7 = loader_misc.dr7; ++ } ++#else ++ dbg_printf("Error: loader not implemented.\n"); ++#endif ++} ++ + void bx_dbg_doit_command(unsigned n) + { + // generic command to add temporary hacks to +@@ -2584,10 +2844,24 @@ void bx_dbg_crc_command(Bit32u addr1, Bi + } + + if (!BX_MEM(0)->dbg_crc32(crc32, addr1, addr2, &crc1)) { +- dbg_printf("could not CRC memory\n"); ++ dbg_printf("sim0: could not CRC memory\n"); + return; + } ++#if BX_NUM_SIMULATORS == 1 + dbg_printf("0x%lx\n", crc1); ++#else ++ if (!BX_MEM(1)->dbg_crc32(crc32, addr1, addr2, &crc2)) { ++ dbg_printf("sim1: could not CRC memory\n"); ++ return; ++ } ++ if (crc1 == crc2) { ++ dbg_printf("CRC same: 0x%x\n", (unsigned) crc1); ++ } ++ else { ++ dbg_printf("CRC different: sim0=0x%x, sim1=0x%x\n", ++ (unsigned) crc1, (unsigned) crc2); ++ } ++#endif + } + + void bx_dbg_info_dirty_command(void) +@@ -2931,10 +3205,51 @@ void bx_dbg_info_vga() + + void bx_dbg_iac_report(unsigned vector, unsigned irq) + { ++#if BX_NUM_SIMULATORS > 1 ++ unsigned tail, master; ++#endif ++ ++if (doit) dbg_printf("iac report: vector=%u\n", vector); ++ + if (bx_guard.report.irq) { + dbg_printf("event icount=%u IRQ irq=%u vec=%x\n", + (unsigned) BX_CPU(dbg_cpu)->guard_found.icount, irq, vector); + } ++ ++#if BX_NUM_SIMULATORS > 1 ++ if (bx_debugger.master_slave_mode == BX_DBG_SLAVE_MODE ) { ++ dbg_printf("Error: iac_report: in slave mode.\n"); ++ bx_dbg_exit(1); ++ } ++ ++ // Master simulator mode ++ if (bx_debugger.async_journal.size >= BX_DBG_ASYNC_JOURNAL_SIZE) { ++ dbg_printf("Error: iac: async journal full.\n"); ++ bx_dbg_exit(1); ++ } ++ ++ if (bx_debugger.async_journal.size == 0) { ++ // start off point head & tail at same element ++ bx_debugger.async_journal.head = 0; ++ tail = bx_debugger.async_journal.tail = 0; ++ } ++ else { ++ tail = bx_debugger.async_journal.tail + 1; ++ } ++ if (tail >= BX_DBG_ASYNC_JOURNAL_SIZE) { ++ dbg_printf("Error: iac_report: journal wrapped.\n"); ++ bx_dbg_exit(0); ++ } ++ ++ master = bx_debugger.master; ++ bx_debugger.async_journal.element[tail].what = BX_DBG_ASYNC_JOURNAL_IAC; ++ bx_debugger.async_journal.element[tail].icount = bx_guard_found[master].icount; ++ bx_debugger.async_journal.element[tail].u.iac.val = vector; ++ ++ if (bx_debugger.async_journal.size) ++ bx_debugger.async_journal.tail++; ++ bx_debugger.async_journal.size++; ++#endif + } + + void bx_dbg_a20_report(unsigned val) +@@ -2955,6 +3270,8 @@ void bx_dbg_io_report(Bit32u addr, unsig + (op==BX_READ) ? "read" : "write", + (unsigned) val); + } ++ ++ // nothing else to do. bx_dbg_inp() and bx_dbg_outp() do the journaling. + } + + void bx_dbg_ucmem_report(Bit32u addr, unsigned size, unsigned op, Bit32u val) +@@ -2967,6 +3284,8 @@ void bx_dbg_ucmem_report(Bit32u addr, un + (op==BX_READ) ? "read" : "write", + (unsigned) val); + } ++ // nothing else to do. bx_dbg_ucmem_read() and bx_dbg_ucmem_write() ++ // do the journaling. + } + + void bx_dbg_dma_report(Bit32u addr, unsigned len, unsigned what, Bit32u val) +diff -uBbwNpr bochs-nocosim/bx_debug/debug.h bochs/bx_debug/debug.h +--- bochs-nocosim/bx_debug/debug.h 2006-01-25 22:58:39.187500000 +0200 ++++ bochs/bx_debug/debug.h 2006-01-25 23:35:58.671875000 +0200 +@@ -29,6 +29,11 @@ + #include "config.h" + #include "osdep.h" + ++#if BX_USE_LOADER ++#include "loader_misc.h" ++void bx_dbg_loader(char *path, bx_loader_misc_t *misc_ptr); ++#endif ++ + #if BX_DBG_ICOUNT_SIZE == 32 + typedef Bit32u bx_dbg_icount_t; + #elif BX_DBG_ICOUNT_SIZE == 64 +@@ -143,6 +148,12 @@ void bx_dbg_trace_reg_on_command(void); + void bx_dbg_trace_reg_off_command(void); + void bx_dbg_ptime_command(void); + void bx_dbg_timebp_command(bx_bool absolute, Bit64u time); ++void bx_dbg_diff_memory(void); ++void bx_dbg_always_check(Bit32u page_start, bx_bool on); ++void bx_dbg_sync_memory(bx_bool set); ++void bx_dbg_sync_cpu(bx_bool set); ++void bx_dbg_fast_forward(Bit32u num); ++void bx_dbg_info_address(Bit32u seg_reg_num, Bit32u offset); + #define MAX_CONCURRENT_BPS 5 + extern int timebp_timer; + extern Bit64u timebp_queue[MAX_CONCURRENT_BPS]; +@@ -189,7 +200,7 @@ void bx_dbg_info_flags(void); + void bx_dbg_info_linux_command(void); + void bx_dbg_info_symbols_command(char *Symbol); + void bx_dbg_examine_command(char *command, char *format, bx_bool format_passed, +- Bit32u addr, bx_bool addr_passed); ++ Bit32u addr, bx_bool addr_passed, int simulator); + void bx_dbg_setpmem_command(Bit32u addr, unsigned len, Bit32u val); + void bx_dbg_set_symbol_command(char *symbol, Bit32u val); + void bx_dbg_query_command(char *); +@@ -198,10 +209,11 @@ void bx_dbg_dump_cpu_command(void); + void bx_dbg_set_cpu_command(void); + void bx_dbg_disassemble_command(const char *,bx_num_range); + void bx_dbg_instrument_command(const char *); ++void bx_dbg_loader_command(char *); + void bx_dbg_doit_command(unsigned); + void bx_dbg_crc_command(Bit32u addr1, Bit32u addr2); + extern bx_bool watchpoint_continue; +-void bx_dbg_linux_syscall (unsigned which_cpu); ++void bx_dbg_linux_syscall (void); + void bx_dbg_info_ne2k(int page, int reg); + void bx_dbg_info_pic(void); + void bx_dbg_info_vga(void); +@@ -423,12 +437,71 @@ typedef struct { + unsigned inhibit_mask; + } bx_dbg_cpu_t; + ++ ++typedef struct { ++ // call back functions specific to each simulator ++ bx_bool (*setphymem)(Bit32u addr, unsigned len, Bit8u *buf); ++ bx_bool (*getphymem)(Bit32u addr, unsigned len, Bit8u *buf); ++ void (*xlate_linear2phy)(Bit32u linear, Bit32u *phy, bx_bool *valid); ++ bx_bool (*set_reg)(unsigned reg, Bit32u val); ++ Bit32u (*get_reg)(unsigned reg); ++ bx_bool (*get_sreg)(bx_dbg_sreg_t *sreg, unsigned sreg_no); ++ bx_bool (*set_cpu)(bx_dbg_cpu_t *cpu); ++ bx_bool (*get_cpu)(bx_dbg_cpu_t *cpu); ++ unsigned dirty_page_tbl_size; ++ unsigned char *dirty_page_tbl; ++ void (*atexit)(void); ++ unsigned (*query_pending)(void); ++ void (*execute)(void); ++ void (*take_irq)(void); ++ void (*take_dma)(void); ++ void (*reset_cpu)(unsigned source); ++ void (*init_mem)(int size_in_bytes); ++ void (*load_ROM)(const char *path, Bit32u romaddress, Bit8u type); ++ ++ // for asynchronous environment handling ++ void (*set_A20)(unsigned val); ++ void (*set_NMI)(unsigned val); ++ void (*set_RESET)(unsigned val); ++ void (*set_INTR)(unsigned val); ++ void (*force_interrupt)(unsigned vector); ++ ++#if BX_INSTRUMENTATION ++ void (*instr_start)(void); ++ void (*instr_stop)(void); ++ void (*instr_reset)(void); ++ void (*instr_print)(void); ++#endif ++#if BX_USE_LOADER ++ void (*loader)(char *path, bx_loader_misc_t *misc_ptr); ++#endif ++ bx_bool (*crc32)(Bit32u (*f)(const Bit8u *buf, int len), ++ Bit32u addr1, Bit32u addr2, Bit32u *crc); ++} bx_dbg_callback_t; ++ ++extern bx_dbg_callback_t bx_dbg_callback[BX_NUM_SIMULATORS]; ++ ++void BX_SIM1_INIT(bx_dbg_callback_t *, int argc, char *argv[]); ++#ifdef BX_SIM2_INIT ++void BX_SIM2_INIT(bx_dbg_callback_t *, int argc, char *argv[]); ++#endif ++ ++ + void bx_dbg_dma_report(Bit32u addr, unsigned len, unsigned what, Bit32u val); + void bx_dbg_iac_report(unsigned vector, unsigned irq); + void bx_dbg_a20_report(unsigned val); + void bx_dbg_io_report(Bit32u addr, unsigned size, unsigned op, Bit32u val); + void bx_dbg_ucmem_report(Bit32u addr, unsigned size, unsigned op, Bit32u val); + ++Bit8u bx_dbg_ucmem_read(Bit32u addr); ++void bx_dbg_ucmem_write(Bit32u addr, Bit8u value); ++void bx_dbg_async_pin_request(unsigned what, bx_bool val); ++void bx_dbg_async_pin_ack(unsigned what, bx_bool val); ++Bit32u bx_dbg_inp(Bit16u addr, unsigned len); ++void bx_dbg_outp(Bit16u addr, Bit32u value, unsigned len); ++void bx_dbg_raise_HLDA(void); ++Bit8u bx_dbg_IAC(void); ++void bx_dbg_set_INTR(bx_bool b); + void bx_dbg_disassemble_current(int which_cpu, int print_time); + + int bx_dbg_symbolic_output(void); /* BW */ +diff -uBbwNpr bochs-nocosim/bx_debug/lexer.l bochs/bx_debug/lexer.l +--- bochs-nocosim/bx_debug/lexer.l 2006-01-25 23:07:59.828125000 +0200 ++++ bochs/bx_debug/lexer.l 2006-01-25 20:13:44.000000000 +0200 +@@ -92,6 +92,7 @@ start { bxlval.sval = strdup(b + stop { bxlval.sval = strdup(bxtext); return(BX_TOKEN_STOP); } + reset { bxlval.sval = strdup(bxtext); return(BX_TOKEN_RESET); } + print { bxlval.sval = strdup(bxtext); return(BX_TOKEN_PRINT); } ++loader { bxlval.sval = strdup(bxtext); return(BX_TOKEN_LOADER); } + doit { bxlval.sval = strdup(bxtext); return(BX_TOKEN_DOIT); } + trace-on { bxlval.sval = strdup(bxtext); return(BX_TOKEN_TRACEON); } + trace-off { bxlval.sval = strdup(bxtext); return(BX_TOKEN_TRACEOFF); } +@@ -118,6 +119,12 @@ slist { bxlval.sval = strdup(b + global { bxlval.sval = strdup(bxtext); return(BX_TOKEN_GLOBAL); } + where { bxlval.sval = strdup(bxtext); return(BX_TOKEN_WHERE); } + print-string { bxlval.sval = strdup(bxtext); return(BX_TOKEN_PRINT_STRING); } ++diff-memory { bxlval.sval = strdup(bxtext); return(BX_TOKEN_DIFF_MEMORY); } ++sync-memory { bxlval.sval = strdup(bxtext); return(BX_TOKEN_SYNC_MEMORY); } ++sync-cpu { bxlval.sval = strdup(bxtext); return(BX_TOKEN_SYNC_CPU); } ++fast-forward { bxlval.sval = strdup(bxtext); return(BX_TOKEN_FAST_FORWARD); } ++phy2log { bxlval.sval = strdup(bxtext); return(BX_TOKEN_PHY_2_LOG); } ++addr-info { bxlval.sval = strdup(bxtext); return(BX_TOKEN_INFO_ADDRESS); } + ne2k { bxlval.sval = strdup(bxtext); return(BX_TOKEN_NE2000); } + ne2000 { bxlval.sval = strdup(bxtext); return(BX_TOKEN_NE2000); } + page { bxlval.sval = strdup(bxtext); return(BX_TOKEN_PAGE); } +@@ -155,6 +162,7 @@ ds { bxlval.uval = BX_DBG_S + fs { bxlval.uval = BX_DBG_SREG_FS; return(BX_TOKEN_FS); } + gs { bxlval.uval = BX_DBG_SREG_GS; return(BX_TOKEN_GS); } + flags|eflags { bxlval.uval = 0; return (BX_TOKEN_FLAGS); } ++force-check { bxlval.sval = strdup(bxtext); return(BX_TOKEN_ALWAYS_CHECK); } + h|help { bxlval.sval = strdup(bxtext); return(BX_TOKEN_HELP); } + \? | + calc { bxlval.sval = strdup(bxtext); return(BX_TOKEN_CALC); } +diff -uBbwNpr bochs-nocosim/bx_debug/linux.cc bochs/bx_debug/linux.cc +--- bochs-nocosim/bx_debug/linux.cc 2006-01-25 22:34:23.281250000 +0200 ++++ bochs/bx_debug/linux.cc 2006-01-24 20:21:22.000000000 +0200 +@@ -153,11 +153,11 @@ char *syscall_names_t::get_name (int n) + + syscall_names_t syscall_names; + +-void bx_dbg_linux_syscall (unsigned which_cpu) +-{ +- Bit32u eax = BX_CPU(which_cpu)->get_reg32(BX_32BIT_REG_EAX); +- char *name = syscall_names.get_name (eax); +- fprintf (stderr, "linux system call %s (#%d)\n", name, eax); ++void bx_dbg_linux_syscall () { ++ bx_dbg_cpu_t cpu; ++ bx_dbg_callback[0].get_cpu(&cpu); ++ char *name = syscall_names.get_name (cpu.eax); ++ fprintf (stderr, "linux system call %s (#%d)\n", name, cpu.eax); + } + + #endif /* if BX_DEBUGGER */ +diff -uBbwNpr bochs-nocosim/bx_debug/loader_misc.h bochs/bx_debug/loader_misc.h +--- bochs-nocosim/bx_debug/loader_misc.h 1970-01-01 02:00:00.000000000 +0200 ++++ bochs/bx_debug/loader_misc.h 2003-11-28 17:07:25.000000000 +0200 +@@ -0,0 +1,36 @@ ++///////////////////////////////////////////////////////////////////////// ++// $Id: patch.cosimulation,v 1.2 2006-01-25 22:30:07 sshwarts Exp $ ++///////////////////////////////////////////////////////////////////////// ++// ++// Copyright (C) 2001 MandrakeSoft S.A. ++// ++// MandrakeSoft S.A. ++// 43, rue d'Aboukir ++// 75002 Paris - France ++// http://www.linux-mandrake.com/ ++// http://www.mandrakesoft.com/ ++// ++// This library is free software; you can redistribute it and/or ++// modify it under the terms of the GNU Lesser General Public ++// License as published by the Free Software Foundation; either ++// version 2 of the License, or (at your option) any later version. ++// ++// This library 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 ++// Lesser General Public License for more details. ++// ++// You should have received a copy of the GNU Lesser General Public ++// License along with this library; if not, write to the Free Software ++// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ ++typedef struct { ++ unsigned long dr0; ++ unsigned long dr1; ++ unsigned long dr2; ++ unsigned long dr3; ++ unsigned long dr6; ++ unsigned long dr7; ++ } bx_loader_misc_t; ++ ++extern bx_loader_misc_t *bx_loader_misc_ptr; +diff -uBbwNpr bochs-nocosim/bx_debug/parser.y bochs/bx_debug/parser.y +--- bochs-nocosim/bx_debug/parser.y 2006-01-25 22:41:46.546875000 +0200 ++++ bochs/bx_debug/parser.y 2006-01-25 20:13:44.000000000 +0200 +@@ -113,6 +113,7 @@ + %token BX_TOKEN_STOP + %token BX_TOKEN_RESET + %token BX_TOKEN_PRINT ++%token BX_TOKEN_LOADER + %token BX_TOKEN_STRING + %token BX_TOKEN_DOIT + %token BX_TOKEN_CRC +@@ -138,11 +139,18 @@ + %token BX_TOKEN_GLOBAL + %token BX_TOKEN_WHERE + %token BX_TOKEN_PRINT_STRING ++%token BX_TOKEN_DIFF_MEMORY ++%token BX_TOKEN_SYNC_MEMORY ++%token BX_TOKEN_SYNC_CPU ++%token BX_TOKEN_FAST_FORWARD ++%token BX_TOKEN_PHY_2_LOG + %token BX_TOKEN_NUMERIC + %token BX_TOKEN_LONG_NUMERIC ++%token BX_TOKEN_INFO_ADDRESS + %token BX_TOKEN_NE2000 + %token BX_TOKEN_PIC + %token BX_TOKEN_PAGE ++%token BX_TOKEN_ALWAYS_CHECK + %token BX_TOKEN_TRACEREGON + %token BX_TOKEN_TRACEREGOFF + %token BX_TOKEN_HELP +@@ -190,6 +198,7 @@ command: + | set_cpu_command + | disassemble_command + | instrument_command ++ | loader_command + | doit_command + | crc_command + | trace_on_command +@@ -205,6 +214,7 @@ command: + | symbol_command + | where_command + | print_string_command ++ | cosim_commands + | trace_reg_on_command + | trace_reg_off_command + | help_command +@@ -215,6 +225,48 @@ command: + } + ; + ++cosim_commands: ++ BX_TOKEN_DIFF_MEMORY '\n' ++ { ++ bx_dbg_diff_memory(); ++ free($1); ++ } ++ | BX_TOKEN_SYNC_MEMORY BX_TOKEN_ON '\n' ++ | BX_TOKEN_SYNC_MEMORY BX_TOKEN_OFF '\n' ++ { ++ bx_dbg_sync_memory($2); ++ free($1); ++ } ++ | BX_TOKEN_SYNC_CPU BX_TOKEN_ON '\n' ++ | BX_TOKEN_SYNC_CPU BX_TOKEN_OFF '\n' ++ { ++ bx_dbg_sync_cpu($2); ++ free($1); ++ } ++ | BX_TOKEN_FAST_FORWARD BX_TOKEN_NUMERIC '\n' ++ { ++ free($1); ++ bx_dbg_fast_forward($2); ++ } ++ | BX_TOKEN_PHY_2_LOG BX_TOKEN_NUMERIC '\n' ++ { ++ free($1); ++ } ++ | BX_TOKEN_INFO_ADDRESS BX_TOKEN_SEGREG ':' BX_TOKEN_NUMERIC '\n' ++ { ++ free($1); ++ bx_dbg_info_address($2, $4); ++ } ++ | BX_TOKEN_ALWAYS_CHECK BX_TOKEN_NUMERIC BX_TOKEN_ON '\n' ++ { ++ free($1); ++ } ++ | BX_TOKEN_ALWAYS_CHECK BX_TOKEN_NUMERIC BX_TOKEN_OFF '\n' ++ { ++ free($1); ++ } ++ ; ++ + BX_TOKEN_SEGREG: + BX_TOKEN_CS + | BX_TOKEN_ES +@@ -695,22 +747,44 @@ quit_command: + examine_command: + BX_TOKEN_EXAMINE BX_TOKEN_XFORMAT expression '\n' + { +- bx_dbg_examine_command($1, $2,1, $3, 1); ++ bx_dbg_examine_command($1, $2,1, $3,1, 0); ++#if BX_NUM_SIMULATORS >= 2 ++ bx_dbg_examine_command($1, $2,1, $3,1, 1); ++#endif + free($1); free($2); + } + | BX_TOKEN_EXAMINE BX_TOKEN_XFORMAT '\n' + { +- bx_dbg_examine_command($1, $2,1, 0, 0); ++ bx_dbg_examine_command($1, $2,1, 0,0, 0); ++#if BX_NUM_SIMULATORS >= 2 ++ bx_dbg_examine_command($1, $2,1, 0,0, 1); ++#endif + free($1); free($2); + } + | BX_TOKEN_EXAMINE expression '\n' + { +- bx_dbg_examine_command($1, NULL,0, $2, 1); ++ //FIXME HanishKVC This method of hunting thro all the ++ // simulators may be better than using 2 calls if ++ // BX_NUM_SIMULATORS greater than or equal to 2 as ++ // done for other cases of BX_TOKEN_EXAMINE ++ int iCurSim; ++ for(iCurSim = 0; iCurSim < BX_NUM_SIMULATORS; iCurSim++) ++ { ++ bx_dbg_examine_command($1, NULL,0, $2,1, iCurSim); ++ } + free($1); + } + | BX_TOKEN_EXAMINE '\n' + { +- bx_dbg_examine_command($1, NULL,0, 0, 0); ++ //FIXME HanishKVC This method of hunting thro all the ++ // simulators may be better than using 2 calls if ++ // BX_NUM_SIMULATORS greater than or equal to 2 as ++ // done for other cases of BX_TOKEN_EXAMINE ++ int iCurSim; ++ for(iCurSim = 0; iCurSim < BX_NUM_SIMULATORS; iCurSim++) ++ { ++ bx_dbg_examine_command($1, NULL,0, 0,0, iCurSim); ++ } + free($1); + } + ; +@@ -791,6 +865,14 @@ instrument_command: + } + ; + ++loader_command: ++ BX_TOKEN_LOADER BX_TOKEN_STRING '\n' ++ { ++ bx_dbg_loader_command($2); ++ free($1); free($2); ++ } ++ ; ++ + doit_command: + BX_TOKEN_DOIT BX_TOKEN_NUMERIC '\n' + { +diff -uBbwNpr bochs-nocosim/bx_debug/sim2.cc bochs/bx_debug/sim2.cc +--- bochs-nocosim/bx_debug/sim2.cc 1970-01-01 02:00:00.000000000 +0200 ++++ bochs/bx_debug/sim2.cc 2005-04-10 20:03:16.000000000 +0200 +@@ -0,0 +1,199 @@ ++///////////////////////////////////////////////////////////////////////// ++// $Id: patch.cosimulation,v 1.2 2006-01-25 22:30:07 sshwarts Exp $ ++///////////////////////////////////////////////////////////////////////// ++// ++// Copyright (C) 2001 MandrakeSoft S.A. ++// ++// MandrakeSoft S.A. ++// 43, rue d'Aboukir ++// 75002 Paris - France ++// http://www.linux-mandrake.com/ ++// http://www.mandrakesoft.com/ ++// ++// This library is free software; you can redistribute it and/or ++// modify it under the terms of the GNU Lesser General Public ++// License as published by the Free Software Foundation; either ++// version 2 of the License, or (at your option) any later version. ++// ++// This library 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 ++// Lesser General Public License for more details. ++// ++// You should have received a copy of the GNU Lesser General Public ++// License along with this library; if not, write to the Free Software ++// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++// ++///////////////////////////////////////////////////////////////////////// ++ ++ ++#include "bochs.h" ++ ++ ++// NOTE: This file contains only stubs for a second CPU simulator ++// to demonstrate use with the bochs debugger. The goal is to ++// be able to run multiple simulators in a co-simulation environment. ++// Each simulator has it's own CPU and memory space. There is only ++// one set of device models, managed by the debugger. ++ ++ ++bx_bool sim2_set_mem(Bit32u addr, unsigned len, Bit8u *buf); ++bx_bool sim2_fetch_mem(Bit32u addr, unsigned len, Bit8u *buf); ++void sim2_xlate_linear2phy(Bit32u linear, Bit32u *phy, bx_bool *valid); ++bx_bool sim2_set_reg(unsigned reg, Bit32u val); ++Bit32u sim2_get_reg(unsigned reg); ++bx_bool sim2_set_cpu(bx_dbg_cpu_t *cpu); ++bx_bool sim2_get_cpu(bx_dbg_cpu_t *cpu); ++unsigned dirty_page_tbl_size; ++unsigned char sim2_dirty_pages[(BX_MAX_DIRTY_PAGE_TABLE_MEGS * 1024 * 1024) / 4096]; ++void sim2_atexit(void); ++unsigned sim2_query_pending(void); ++void sim2_cpu_loop(void); ++void sim2_take_irq(void); ++void sim2_take_dma(void); ++void sim2_reset_cpu(void); ++void sim2_init_mem(int size_in_bytes); ++void sim2_load_ROM(const char *path, Bit32u romaddress, Bit8u type); ++ ++void sim2_set_A20(unsigned val); ++void sim2_set_NMI(unsigned val); ++void sim2_set_RESET(unsigned val); ++void sim2_set_INTR(unsigned val); ++void sim2_force_interrupt(unsigned vector); ++ ++#if BX_INSTRUMENTATION ++void sim2_instr_start(void); ++void sim2_instr_stop(void); ++void sim2_instr_reset(void); ++void sim2_instr_print(void); ++#endif ++#if BX_USE_LOADER ++void sim2_loader(char *path); ++#endif ++ ++ ++#if BX_DBG_EXTENSIONS ++// return 0 if command not handled by extensions, bochs will handle ++// return 1 if command handled by extensions, bochs will ignore ++int bx_dbg_extensions(char *command) ++{ ++ UNUSED(command); ++ return(0); // no extensions for now ++} ++#endif ++ ++ ++void sim2_init(bx_dbg_callback_t *callback, int argc, char *argv[]) ++{ ++ callback->setphymem = sim2_set_mem; ++ callback->getphymem = sim2_fetch_mem; ++ callback->xlate_linear2phy = sim2_xlate_linear2phy; ++ callback->set_reg = sim2_set_reg; ++ callback->get_reg = sim2_get_reg; ++ callback->get_cpu = sim2_get_cpu; ++ callback->set_cpu = sim2_set_cpu; ++ callback->dirty_page_tbl_size = sizeof(sim2_dirty_pages); ++ callback->dirty_page_tbl = sim2_dirty_pages; ++ callback->atexit = sim2_atexit; ++ callback->query_pending = sim2_query_pending; ++ callback->execute = sim2_cpu_loop; ++ callback->take_irq = sim2_take_irq; ++ callback->take_dma = sim2_take_dma; ++ callback->reset_cpu = sim2_reset_cpu; ++ callback->init_mem = sim2_init_mem; ++ callback->load_ROM = sim2_load_ROM; ++ ++ // You may set this to NULL and use values in bx_pc_system as per ++ // docs-html/cosimulation.html ++ callback->set_A20 = sim2_set_A20; ++ ++ callback->set_NMI = sim2_set_NMI; ++ callback->set_RESET = sim2_set_RESET; ++ callback->set_INTR = sim2_set_INTR; ++ callback->force_interrupt = sim2_force_interrupt; ++ ++#if BX_INSTRUMENTATION ++ callback->instr_start = sim2_instr_start; ++ callback->instr_stop = sim2_instr_stop; ++ callback->instr_reset = sim2_instr_reset; ++ callback->instr_print = sim2_instr_print; ++#endif ++#if BX_USE_LOADER ++ callback->loader = sim2_loader; ++#endif ++} ++ ++bx_bool sim2_set_mem(Bit32u addr, unsigned len, Bit8u *buf) ++{ ++ return(0); ++} ++ ++bx_bool sim2_fetch_mem(Bit32u addr, unsigned len, Bit8u *buf) ++{ ++ return(0); ++} ++ ++void sim2_xlate_linear2phy(Bit32u linear, Bit32u *phy, bx_bool *valid) { } ++ ++bx_bool sim2_set_reg(unsigned reg, Bit32u val) ++{ ++ return(0); ++} ++ ++Bit32u sim2_get_reg(unsigned reg) ++{ ++ return(0); ++} ++ ++bx_bool sim2_set_cpu(bx_dbg_cpu_t *cpu) ++{ ++ return(0); ++} ++ ++bx_bool sim2_get_cpu(bx_dbg_cpu_t *cpu) ++{ ++ return(0); ++} ++ ++void sim2_atexit(void) { } ++ ++unsigned sim2_query_pending(void) ++{ ++ return(0); ++} ++ ++void sim2_cpu_loop(void) { } ++ ++void sim2_take_irq(void) { } ++ ++void sim2_take_dma(void) { } ++ ++void sim2_reset_cpu(void) { } ++ ++void sim2_init_mem(int size_in_bytes) { } ++ ++void sim2_load_ROM(const char *path, Bit32u romaddress, Bit8u type) { } ++ ++void sim2_set_A20(unsigned val) { } ++ ++void sim2_set_NMI(unsigned val) { } ++ ++void sim2_set_RESET(unsigned val) { } ++ ++void sim2_set_INTR(unsigned val) { } ++ ++void sim2_force_interrupt(unsigned vector) { } ++ ++#if BX_INSTRUMENTATION ++void sim2_instr_start(void) { } ++ ++void sim2_instr_stop(void) { } ++ ++void sim2_instr_reset(void) { } ++ ++void sim2_instr_print(void) { } ++#endif ++ ++#if BX_USE_LOADER ++void sim2_loader(char *path) { } ++#endif +diff -uBbwNpr bochs-nocosim/config.h.in bochs/config.h.in +--- bochs-nocosim/config.h.in 2006-01-25 22:46:50.765625000 +0200 ++++ bochs/config.h.in 2006-01-22 14:31:15.000000000 +0200 +@@ -55,8 +55,10 @@ + #define BX_SUPPORT_SMP 0 + #define BX_BOOTSTRAP_PROCESSOR 0 + +-// Controls how many instances of BX_MEM_C are created. For ++// controls how many instances of BX_MEM_C are created. For + // SMP, use several processors with one shared memory space. ++// For cosimulation, you could use two processors and two address ++// spaces. + #define BX_ADDRESS_SPACES 1 + + #if BX_ADDRESS_SPACES != 1 +@@ -685,6 +687,14 @@ typedef + + #define BX_INSTRUMENTATION 0 + ++#define BX_USE_LOADER 0 ++ ++// for debugger, CPU simulator handle ID ++// 0 is the default, for using only one CPU simulator ++// 1 is for the 2nd CPU simulator ++#define BX_SIM_ID 0 ++#define BX_NUM_SIMULATORS 1 ++ + // limited i440FX PCI support + #define BX_SUPPORT_PCI 0 + +diff -uBbwNpr bochs-nocosim/configure.in bochs/configure.in +--- bochs-nocosim/configure.in 2006-01-25 22:37:48.781250000 +0200 ++++ bochs/configure.in 2006-01-18 20:35:36.000000000 +0200 +@@ -1392,6 +1392,34 @@ AC_ARG_ENABLE(instrumentation, + AC_SUBST(INSTRUMENT_DIR) + AC_SUBST(INSTRUMENT_VAR) + ++AC_ARG_ENABLE(simid, ++ [ --enable-simid=0 or 1 CPU simulator ID if using more than one], ++ [if test "$enableval" = yes; then ++ AC_DEFINE(BX_SIM_ID, 0) ++ elif test "$enableval" = no; then ++ AC_DEFINE(BX_SIM_ID, 0) ++ else ++ AC_DEFINE_UNQUOTED(BX_SIM_ID, $enableval) ++ fi], ++ [ ++ AC_DEFINE(BX_SIM_ID, 0) ++ ] ++ ) ++ ++AC_ARG_ENABLE(num-sim, ++ [ --enable-num-sim=1 or 2 number of CPU simulators], ++ [if test "$enableval" = yes; then ++ AC_DEFINE(BX_NUM_SIMULATORS, 1) ++ elif test "$enableval" = no; then ++ AC_DEFINE(BX_NUM_SIMULATORS, 1) ++ else ++ AC_DEFINE_UNQUOTED(BX_NUM_SIMULATORS, $enableval) ++ fi], ++ [ ++ AC_DEFINE(BX_NUM_SIMULATORS, 1) ++ ] ++ ) ++ + dnl // serial mode 'socket' needs wsock32.dll in non-plugin mode + if test "$bx_plugins" = 0; then + case $target in +diff -uBbwNpr bochs-nocosim/cpu/cpu.cc bochs/cpu/cpu.cc +--- bochs-nocosim/cpu/cpu.cc 2006-01-25 22:49:53.500000000 +0200 ++++ bochs/cpu/cpu.cc 2006-01-24 21:07:45.000000000 +0200 +@@ -1004,6 +1004,17 @@ bx_bool BX_CPU_C::dbg_is_end_instr_bpoin + } + } + ++#if (BX_NUM_SIMULATORS >= 2) ++ // if async event pending, acknowlege them ++ if (bx_guard.async_changes_pending.which) { ++ if (bx_guard.async_changes_pending.which & BX_DBG_ASYNC_PENDING_A20) ++ bx_dbg_async_pin_ack(BX_DBG_ASYNC_PENDING_A20, ++ bx_guard.async_changes_pending.a20); ++ if (bx_guard.async_changes_pending.which) { ++ BX_PANIC(("decode: async pending unrecognized.")); ++ } ++ } ++#endif + return(0); // no breakpoint + } + +diff -uBbwNpr bochs-nocosim/cpu/debugstuff.cc bochs/cpu/debugstuff.cc +--- bochs-nocosim/cpu/debugstuff.cc 2006-01-25 22:42:58.750000000 +0200 ++++ bochs/cpu/debugstuff.cc 2006-01-25 20:13:44.000000000 +0200 +@@ -987,6 +987,70 @@ bx_bool BX_CPU_C::dbg_set_cpu(bx_dbg_cpu + return(1); + } + ++#if BX_SIM_ID == 0 ++# define BX_DBG_NULL_CALLBACK bx_dbg_null_callback0 ++#else ++# define BX_DBG_NULL_CALLBACK bx_dbg_null_callback1 ++#endif ++void BX_DBG_NULL_CALLBACK(unsigned val) ++{ ++ // bochs uses the pc_system variables, so this function is ++ // a stub for notification by the debugger, that a change ++ // occurred. ++ UNUSED(val); ++} ++ ++ void ++#if BX_SIM_ID == 0 ++bx_dbg_init_cpu_mem_env0(bx_dbg_callback_t *callback, int argc, char *argv[]) ++#else ++bx_dbg_init_cpu_mem_env1(bx_dbg_callback_t *callback, int argc, char *argv[]) ++#endif ++{ ++ UNUSED(argc); ++ UNUSED(argv); ++ ++#if 0 ++#ifdef __GNUC__ ++#warning hardcoding BX_CPU_THIS_PTR mem[0] and cpu[0] ++#endif ++ callback->setphymem = BX_MEM(0)->dbg_set_mem; ++ callback->getphymem = BX_MEM(0)->dbg_fetch_mem; ++ callback->xlate_linear2phy = BX_CPU(0)->dbg_xlate_linear2phy; ++ callback->set_reg = BX_CPU(0)->dbg_set_reg; ++ callback->get_reg = BX_CPU(0)->dbg_get_reg; ++ callback->get_sreg = BX_CPU(0)->dbg_get_sreg; ++ callback->get_cpu = BX_CPU(0)->dbg_get_cpu; ++ callback->set_cpu = BX_CPU(0)->dbg_set_cpu; ++ callback->dirty_page_tbl_size = sizeof(BX_MEM(0)->dbg_dirty_pages); ++ callback->dirty_page_tbl = BX_MEM(0)->dbg_dirty_pages; ++ callback->atexit = BX_CPU(0)->atexit; ++ callback->query_pending = BX_CPU(0)->dbg_query_pending; ++ callback->execute = BX_CPU(0)->cpu_loop; ++ callback->take_irq = BX_CPU(0)->dbg_take_irq; ++ callback->take_dma = BX_CPU(0)->dbg_take_dma; ++ callback->reset_cpu = BX_CPU(0)->reset; ++ callback->init_mem = BX_MEM(0)->init_memory; ++ callback->load_ROM = BX_MEM(0)->load_ROM; ++ callback->set_A20 = NULL; ++ callback->set_NMI = BX_DBG_NULL_CALLBACK; ++ callback->set_RESET = BX_DBG_NULL_CALLBACK; ++ callback->set_INTR = BX_CPU(0)->set_INTR; ++ callback->force_interrupt = BX_CPU(0)->dbg_force_interrupt; ++ ++#if BX_INSTRUMENTATION ++ callback->instr_start = bx_instr_start; ++ callback->instr_stop = bx_instr_stop; ++ callback->instr_reset = bx_instr_reset; ++ callback->instr_print = bx_instr_print; ++#endif ++#if BX_USE_LOADER ++ callback->loader = bx_dbg_loader; ++#endif ++ callback->crc32 = BX_MEM(0)->dbg_crc32; ++#endif ++} ++ + #endif // #if BX_DEBUGGER + + void BX_CPU_C::atexit(void) +diff -uBbwNpr bochs-nocosim/cpu/exception.cc bochs/cpu/exception.cc +--- bochs-nocosim/cpu/exception.cc 2006-01-25 22:34:50.328125000 +0200 ++++ bochs/cpu/exception.cc 2005-12-13 00:01:22.000000000 +0200 +@@ -769,7 +769,7 @@ void BX_CPU_C::interrupt(Bit8u vector, b + BX_CPU_THIS_PTR show_flag |= Flag_intsig; + #if BX_DEBUG_LINUX + if (bx_dbg.linux_syscall) { +- if (vector == 0x80) bx_dbg_linux_syscall(BX_CPU_ID); ++ if (vector == 0x80) bx_dbg_linux_syscall (); + } + #endif + #endif +diff -uBbwNpr bochs-nocosim/cpu/init.cc bochs/cpu/init.cc +--- bochs-nocosim/cpu/init.cc 2006-01-25 22:43:37.546875000 +0200 ++++ bochs/cpu/init.cc 2006-01-24 21:03:54.000000000 +0200 +@@ -942,7 +942,7 @@ void BX_CPU_C::sanity_checks(void) + if (sizeof(Bit64u) != 8 || sizeof(Bit64s) != 8) + BX_PANIC(("data type Bit64u or Bit64u is not of length 8 bytes!")); + +- BX_DEBUG(("#(%u)all sanity checks passed!", BX_CPU_ID)); ++ BX_DEBUG(( "#(%u)all sanity checks passed!", BX_SIM_ID )); + } + + +diff -uBbwNpr bochs-nocosim/cpu/lazy_flags.cc bochs/cpu/lazy_flags.cc +--- bochs-nocosim/cpu/lazy_flags.cc 2006-01-25 22:43:53.859375000 +0200 ++++ bochs/cpu/lazy_flags.cc 2005-10-20 19:33:36.000000000 +0200 +@@ -30,6 +30,7 @@ + #include "bochs.h" + #define LOG_THIS BX_CPU_THIS_PTR + ++#if BX_SIM_ID == 0 // only need to define once + // This array defines a look-up table for the even parity-ness + // of an 8bit quantity, for optimal assignment of the parity bit + // in the EFLAGS register +@@ -51,6 +52,7 @@ const bx_bool bx_parity_lookup[256] = { + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1 + }; ++#endif + + bx_bool BX_CPU_C::get_CFLazy(void) + { +diff -uBbwNpr bochs-nocosim/load32bitOShack.cc bochs/load32bitOShack.cc +--- bochs-nocosim/load32bitOShack.cc 2006-01-25 22:44:29.515625000 +0200 ++++ bochs/load32bitOShack.cc 2005-11-09 19:17:06.000000000 +0200 +@@ -309,8 +309,10 @@ bx_load_kernel_image(char *path, Bit32u + offset += ret; + } + close(fd); +- BX_INFO(("load_kernel_image: '%s', size=%u read into memory at %08x", +- path, (unsigned) stat_buf.st_size, (unsigned) paddr)); ++ BX_INFO(( "#(%u) load_kernel_image: '%s', size=%u read into memory at %08x", ++ BX_SIM_ID, path, ++ (unsigned) stat_buf.st_size, ++ (unsigned) paddr )); + + return page_size; + } +diff -uBbwNpr bochs-nocosim/memory/misc_mem.cc bochs/memory/misc_mem.cc +--- bochs-nocosim/memory/misc_mem.cc 2006-01-25 22:45:37.656250000 +0200 ++++ bochs/memory/misc_mem.cc 2006-01-24 21:03:55.000000000 +0200 +@@ -40,7 +40,7 @@ Bit32u BX_MEM_C::get_memory_in_k(void) + BX_MEM_C::BX_MEM_C(void) + { + char mem[6]; +- snprintf(mem, 6, "MEM0"); ++ snprintf(mem, 6, "MEM%d", BX_SIM_ID); + put(mem); + settype(MEMLOG); + +@@ -85,7 +85,7 @@ BX_MEM_C::~BX_MEM_C(void) + memory_handlers = NULL; + } + else { +- BX_DEBUG(("Memory not freed as it wasn't allocated !")); ++ BX_DEBUG(("(%u) memory not freed as it wasn't allocated!", BX_SIM_ID)); + } + } + +diff -uBbwNpr bochs-nocosim/pc_system.cc bochs/pc_system.cc +--- bochs-nocosim/pc_system.cc 2006-01-25 22:50:16.625000000 +0200 ++++ bochs/pc_system.cc 2006-01-20 21:12:03.000000000 +0200 +@@ -104,12 +104,15 @@ void bx_pc_system_c::set_HRQ(bx_bool val + BX_CPU(0)->async_event = 1; + } + ++ ++#if (BX_NUM_SIMULATORS < 2) + void bx_pc_system_c::set_INTR(bx_bool value) + { + if (bx_dbg.interrupts) + BX_INFO(("pc_system: Setting INTR=%d on bootstrap processor %d", (int)value, BX_BOOTSTRAP_PROCESSOR)); + BX_CPU(BX_BOOTSTRAP_PROCESSOR)->set_INTR(value); + } ++#endif + + // + // Read from the IO memory address space diff --git a/bochs/patches/patch.decode-interrupts.gz b/bochs/patches/patch.decode-interrupts.gz new file mode 100644 index 0000000000000000000000000000000000000000..66fa416ba5b9580bf6843046f92986cf7b513515 GIT binary patch literal 35666 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 O@P7kg_BQe^VFUn(cNV?? literal 0 HcmV?d00001 diff --git a/bochs/patches/patch.example-override-ask b/bochs/patches/patch.example-override-ask new file mode 100644 index 00000000..2e629ac5 --- /dev/null +++ b/bochs/patches/patch.example-override-ask @@ -0,0 +1,112 @@ +---------------------------------------------------------------------- +Patch name: patch.example-override-ask +Author: Bryce Denney +Date: Mon Sep 23 13:00:53 EDT 2002 +Status: Demo + +Detailed description: +This patch shows how to create your own siminterface callback function. +It is not intended to be checked in anytime, only to serve as an example +of how to use the siminterface. + +Patch updated for current CVS. (Volker Ruppert, Oct 16, 2005) + +Patch was created with: + diff -u +Apply patch to what version: + cvs checked out on DATE +Instructions: + To patch, go to main bochs directory. + Type "patch -p1 < THIS_PATCH_FILE". +---------------------------------------------------------------------- +--- bochs/config.h.in 2005-10-13 20:40:50.131262080 +0200 ++++ bochs-overrideask/config.h.in 2005-10-13 20:44:40.841188840 +0200 +@@ -949,6 +949,9 @@ + // External Debugger + #define BX_EXTERNAL_DEBUGGER 0 + ++// Override ask dialog (demo) ++#define BX_OVERRIDE_ASK_EXAMPLE 1 ++ + // Magic breakpoints + #define BX_MAGIC_BREAKPOINT 1 + +--- bochs/gui/textconfig.cc 2005-06-06 22:14:50.000000000 +0200 ++++ bochs-overrideask/gui/textconfig.cc 2005-10-13 20:12:16.090835832 +0200 +@@ -996,6 +996,10 @@ + case CI_START: + //fprintf (stderr, "textconfig.cc: start\n"); + bx_config_interface_init (); ++#if BX_OVERRIDE_ASK_EXAMPLE ++ extern void override_ask_init(); ++ override_ask_init (); ++#endif + if (SIM->get_param_enum(BXP_BOCHS_START)->get () == BX_QUICK_START) + bx_config_interface (BX_CI_START_SIMULATION); + else { +diff -urN bochs/Makefile.in bochs-overrideask/Makefile.in +--- bochs/Makefile.in 2005-07-30 17:02:40.000000000 +0200 ++++ bochs-overrideask/Makefile.in 2005-10-13 20:04:06.137320088 +0200 +@@ -146,6 +146,7 @@ + pc_system.o \ + osdep.o \ + plugin.o \ ++ overrideask.o \ + @EXTRA_BX_OBJS@ + + EXTERN_ENVIRONMENT_OBJS = \ +--- bochs/overrideask.cc 1970-01-01 01:00:00.000000000 +0100 ++++ bochs-overrideask/overrideask.cc 2005-10-13 20:15:25.713008880 +0200 +@@ -0,0 +1,52 @@ ++#include ++#include ++#include "config.h" ++#include "osdep.h" ++#include "gui/siminterface.h" ++ ++bxevent_handler old_callback = NULL; ++void *old_callback_arg = NULL; ++ ++BxEvent * ++override_ask_callback (void *unused, BxEvent *event) ++{ ++ int n; ++ int level; ++ fprintf (stderr, "override_ask_callback\n"); ++ event->retcode = -1; ++ switch (event->type) ++ { ++ case BX_SYNC_EVT_LOG_ASK: ++ level = event->u.logmsg.level; ++ fprintf (stderr, "============ override_ask_callback was called ==========================\n"); ++ fprintf (stderr, "Event type: %s\n", SIM->get_log_level_name (level)); ++ fprintf (stderr, "Device: %s\n", event->u.logmsg.prefix); ++ fprintf (stderr, "Message: %s\n\n", event->u.logmsg.msg); ++ // note: 4 only available if BX_DEBUGGER=1. ideally, don't show it ++ fprintf (stderr, "What should I do? (0=continue, 1=alwayscont, 2=die, 3=abort, 4=debug) "); ++ while (scanf ("%d", &n) != 1 || (n<0 && n>4)) { ++ fprintf (stderr, "Enter 0-4 only.\n"); ++ } ++ event->retcode = n; ++ fprintf (stderr, "============ override_ask_callback is done =============================\n"); ++ return event; ++ case BX_SYNC_EVT_TICK: // called periodically by siminterface. ++ case BX_SYNC_EVT_ASK_PARAM: // called if simulator needs to know value of a param. ++ case BX_ASYNC_EVT_REFRESH: // called when some bx_param_c parameters have changed. ++ // fall into default case ++ default: ++ return (*old_callback)(old_callback_arg, event); ++ } ++} ++ ++// called from textconfig.cc ++void override_ask_init () ++{ ++ fprintf (stderr, "override_ask_init"); ++ // this should be called after the configuration interface has had a ++ // chance to install its own callback. Otherwise, overrideask will not ++ // override anything. ++ SIM->get_notify_callback (&old_callback, &old_callback_arg); ++ assert (old_callback != NULL); ++ SIM->set_notify_callback (override_ask_callback, NULL); ++} diff --git a/bochs/patches/patch.example-user-plugin b/bochs/patches/patch.example-user-plugin new file mode 100644 index 00000000..d9ba01a4 --- /dev/null +++ b/bochs/patches/patch.example-user-plugin @@ -0,0 +1,319 @@ +---------------------------------------------------------------------- +Patch name: patch.example-user-plugin +Author: Volker Ruppert +Date: 3 Jan 2009 +Status: Demo + +Detailed description: + This sample code can be used as a framework for writing user plugins. + It contains enough code for testing the existing user plugin support + in Bochs and creates a device that installs a 32-bit r/w register at + i/o address 0x1000. + This example also shows how to install and handle user-defined config + options for bochsrc, command line and the config interface. In this + demo it is used to specify the reset value. + For user plugin support Bochs must be configured with plugins enabled. + Compiling with plugin support is known to work on Linux and Windows + (Cygwin or MinGW/MSYS). Bochs supports loading of up to 16 different + user plugins when starting up. Loading / removing plugins at runtime + is not yet supported. + +Patch was created with: + diff -u +Apply patch to what version: + cvs checked out on 09 Feb 2009 +Instructions: + To patch, go to main bochs directory. + Type "patch -p0 < THIS_PATCH_FILE". + Regenerate the configure script and compile Bochs as usual + cd user-plugin + make + make install +---------------------------------------------------------------------- +diff -urN ../bochs/configure.in ./configure.in +--- ../bochs/configure.in 2009-02-02 14:02:47.000000000 +0100 ++++ ./configure.in 2009-02-09 10:49:14.000000000 +0100 +@@ -3126,4 +3126,4 @@ + build/linux/bochs-dlx \ + bxversion.h bxversion.rc build/macosx/Info.plist \ + build/win32/nsis/Makefile build/win32/nsis/bochs.nsi \ +- host/linux/pcidev/Makefile) ++ host/linux/pcidev/Makefile user-plugin/Makefile) +diff -urN ../bochs/user-plugin/Makefile.in ./user-plugin/Makefile.in +--- ../bochs/user-plugin/Makefile.in 1970-01-01 01:00:00.000000000 +0100 ++++ ./user-plugin/Makefile.in 2009-02-09 10:49:14.000000000 +0100 +@@ -0,0 +1,108 @@ ++# Copyright (C) 2009 Volker Ruppert ++# ++# This library is free software; you can redistribute it and/or ++# modify it under the terms of the GNU Lesser General Public ++# License as published by the Free Software Foundation; either ++# version 2 of the License, or (at your option) any later version. ++# ++# This library 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 ++# Lesser General Public License for more details. ++# ++# You should have received a copy of the GNU Lesser General Public ++# License along with this library; if not, write to the Free Software ++# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ ++# Makefile for the user plugin example of bochs ++ ++ ++@SUFFIX_LINE@ ++ ++prefix = @prefix@ ++exec_prefix = @exec_prefix@ ++srcdir = @srcdir@ ++VPATH = @srcdir@ ++bindir = @bindir@ ++libdir = @libdir@ ++plugdir = @libdir@/bochs/plugins ++datarootdir = @datarootdir@ ++mandir = @mandir@ ++man1dir = $(mandir)/man1 ++man5dir = $(mandir)/man5 ++docdir = $(datarootdir)/doc/bochs ++sharedir = $(datarootdir)/bochs ++top_builddir = .. ++top_srcdir = @top_srcdir@ ++ ++SHELL = /bin/sh ++ ++@SET_MAKE@ ++ ++CXX = @CXX@ ++CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@ @GUI_CXXFLAGS@ ++ ++LDFLAGS = @LDFLAGS@ ++LIBS = @LIBS@ ++RANLIB = @RANLIB@ ++PLUGIN_PATH=@libdir@ ++top_builddir = .. ++LIBTOOL=@LIBTOOL@ ++WIN32_DLL_IMPORT_LIBRARY=../dllexports.a ++ ++BX_INCDIRS = -I.. -I$(srcdir)/.. -I../iodev -I$(srcdir)/../iodev -I../@INSTRUMENT_DIR@ -I$(srcdir)/../@INSTRUMENT_DIR@ ++ ++PLUGIN_OBJS = testdev.o ++ ++plugins: $(PLUGIN_OBJS:@PLUGIN_LIBNAME_TRANSFORMATION@) ++ ++install: @INSTALL_PLUGINS_VAR@ ++ ++install_libtool_plugins:: ++ list=`echo *.la`; for i in $$list; do $(LIBTOOL) --mode=install install $$i $(DESTDIR)$(plugdir); done ++ $(LIBTOOL) --finish $(DESTDIR)$(plugdir) ++ ++install_dll_plugins:: ++ list=`echo *.dll`; for i in $$list; do cp $$i $(DESTDIR)$(plugdir); done ++ ++# standard compile rule for C++ files ++.@CPP_SUFFIX@.o: ++ $(CXX) @DASH@c $(CXXFLAGS) $(LOCAL_CXXFLAGS) @CXXFP@$< @OFP@$@ ++ ++##### building plugins with libtool ++%.lo: %.@CPP_SUFFIX@ ++ $(LIBTOOL) --mode=compile $(CXX) -c $(CXXFLAGS) $(LOCAL_CXXFLAGS) $< -o $@ ++ ++libbx_%.la: %.lo ++ $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) ++ ++#### building DLLs for win32 (tested on cygwin only) ++bx_%.dll: %.o ++ $(CXX) $(CXXFLAGS) -shared -o $@ $< $(WIN32_DLL_IMPORT_LIBRARY) ++ ++clean: ++ @RMCOMMAND@ -rf .libs *.lo *.o *.la *.a *.dll ++ ++dist-clean: clean ++ @RMCOMMAND@ Makefile ++ ++########################################### ++# dependencies generated by ++# gcc -MM -I.. -I../instrument/stubs *.cc | sed -e 's/\.cc/.@CPP_SUFFIX@/g' ++# gcc -MM -I.. -I../instrument/stubs *.cc | \ ++# sed -e 's/\.cc/.@CPP_SUFFIX@/g' -e 's/\.o:/.lo:/g' ++# ++# This means that every source file is listed twice, once with a .o rule ++# and then again with an identical .lo rule. The .lo rules are used when ++# building plugins. ++########################################### ++testdev.o: testdev.@CPP_SUFFIX@ ../iodev/iodev.h ../bochs.h ../config.h ../osdep.h \ ++ ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ ++ ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ ++ ../extplugin.h ../ltdl.h ../gui/gui.h ../gui/textconfig.h \ ++ ../gui/keymap.h ../instrument/stubs/instrument.h testdev.h ++testdev.lo: testdev.@CPP_SUFFIX@ ../iodev/iodev.h ../bochs.h ../config.h ../osdep.h \ ++ ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ ++ ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ ++ ../extplugin.h ../ltdl.h ../gui/gui.h ../gui/textconfig.h \ ++ ../gui/keymap.h ../instrument/stubs/instrument.h testdev.h +diff -urN ../bochs/user-plugin/testdev.cc ./user-plugin/testdev.cc +--- ../bochs/user-plugin/testdev.cc 1970-01-01 01:00:00.000000000 +0100 ++++ ./user-plugin/testdev.cc 2009-02-09 10:49:14.000000000 +0100 +@@ -0,0 +1,118 @@ ++// Copyright (C) 2009 Volker Ruppert ++// ++// This library is free software; you can redistribute it and/or ++// modify it under the terms of the GNU Lesser General Public ++// License as published by the Free Software Foundation; either ++// version 2 of the License, or (at your option) any later version. ++// ++// This library 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 ++// Lesser General Public License for more details. ++// ++// You should have received a copy of the GNU Lesser General Public ++// License along with this library; if not, write to the Free Software ++// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ ++// User plugin example (see patch description for details) ++ ++// Define BX_PLUGGABLE in files that can be compiled into plugins. For ++// platforms that require a special tag on exported symbols, BX_PLUGGABLE ++// is used to know when we are exporting symbols and when we are importing. ++#define BX_PLUGGABLE ++ ++// Don't include other devices headers ++#define NO_DEVICE_INCLUDES ++ ++#include "iodev.h" ++#include "testdev.h" ++ ++#define LOG_THIS theTestDevice-> ++ ++bx_testdev_c *theTestDevice = NULL; ++ ++Bit32s testdev_options_parser(const char *context, int num_params, char *params[]); ++Bit32s testdev_options_save(FILE *fp); ++ ++int libuser_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) ++{ ++ theTestDevice = new bx_testdev_c(); ++ BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theTestDevice, "testdev"); ++ // add new configuration parameter for the config interface ++ bx_param_c *root_param = SIM->get_param("user"); ++ bx_list_c *menu = new bx_list_c(root_param, "testdev", "Test Device"); ++ menu->get_options()->set(bx_list_c::SHOW_PARENT); ++ new bx_param_num_c(menu, "test", "Test Parameter", "", 0, BX_MAX_BIT32U, 0); ++ // register user-defined option for bochsrc and command line ++ SIM->register_user_option("testdev", testdev_options_parser, testdev_options_save); ++ return(0); // Success ++} ++ ++void libuser_LTX_plugin_fini(void) ++{ ++ SIM->unregister_user_option("testdev"); ++ bx_list_c *menu = (bx_list_c*)SIM->get_param("user"); ++ menu->remove("testdev"); ++ delete theTestDevice; ++} ++ ++Bit32s testdev_options_parser(const char *context, int num_params, char *params[]) ++{ ++ if (!strcmp(params[0], "testdev")) { ++ if (!strncmp(params[1], "test=", 5)) { ++ SIM->get_param_num("user.testdev.test")->set(atoi(¶ms[1][5])); ++ } else { ++ BX_PANIC(("%s: testdev: unknown parameter '%s'", context, params[1])); ++ } ++ } else { ++ BX_PANIC(("%s: unknown directive '%s'", context, params[0])); ++ } ++ return 0; ++} ++ ++Bit32s testdev_options_save(FILE *fp) ++{ ++ fprintf(fp, "testdev: test=%d\n", SIM->get_param_num("user.testdev.test")->get()); ++ return 0; ++} ++ ++bx_testdev_c::bx_testdev_c(void) ++{ ++ put("USER"); ++} ++ ++bx_testdev_c::~bx_testdev_c(void) ++{ ++ // nothing here yet ++} ++ ++void bx_testdev_c::init(void) ++{ ++ DEV_register_ioread_handler(this, read_handler, 0x1000, "Test Device", 4); ++ DEV_register_iowrite_handler(this, write_handler, 0x1000, "Test Device", 4); ++} ++ ++void bx_testdev_c::reset(unsigned type) ++{ ++ BX_USER_THIS s.reg0 = SIM->get_param_num("user.testdev.test")->get(); ++} ++ ++void bx_testdev_c::register_state(void) ++{ ++ bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "testdev", "Test Device", 1); ++ BXRS_HEX_PARAM_FIELD(list, reg0, BX_USER_THIS s.reg0); ++} ++ ++Bit32u bx_testdev_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) ++{ ++ UNUSED(this_ptr); ++ ++ return BX_USER_THIS s.reg0; ++} ++ ++void bx_testdev_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) ++{ ++ UNUSED(this_ptr); ++ ++ BX_USER_THIS s.reg0 = value; ++} +diff -urN ../bochs/user-plugin/testdev.h ./user-plugin/testdev.h +--- ../bochs/user-plugin/testdev.h 1970-01-01 01:00:00.000000000 +0100 ++++ ./user-plugin/testdev.h 2009-02-09 10:49:14.000000000 +0100 +@@ -0,0 +1,40 @@ ++// Copyright (C) 2009 Volker Ruppert ++// ++// This library is free software; you can redistribute it and/or ++// modify it under the terms of the GNU Lesser General Public ++// License as published by the Free Software Foundation; either ++// version 2 of the License, or (at your option) any later version. ++// ++// This library 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 ++// Lesser General Public License for more details. ++// ++// You should have received a copy of the GNU Lesser General Public ++// License along with this library; if not, write to the Free Software ++// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ ++#ifndef BX_TESTDEV_H ++#define BX_TESTDEV_H ++ ++#define BX_USER_THIS theTestDevice-> ++ ++class bx_testdev_c : public bx_devmodel_c { ++public: ++ bx_testdev_c(); ++ virtual ~bx_testdev_c(); ++ ++ virtual void init(void); ++ virtual void reset(unsigned type); ++ virtual void register_state(void); ++ ++private: ++ static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); ++ static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); ++ ++ struct { ++ Bit32u reg0; ++ } s; ++}; ++ ++#endif diff --git a/bochs/patches/patch.fast-dma-cbothamy b/bochs/patches/patch.fast-dma-cbothamy new file mode 100644 index 00000000..ba74e331 --- /dev/null +++ b/bochs/patches/patch.fast-dma-cbothamy @@ -0,0 +1,572 @@ +---------------------------------------------------------------------- +Patch name: patch.fast-dma-cbothamy +Author: Christophe Bothamy +Date: Wed Feb 18 14:00:40 CET 2004 +Status: Proposed changes + +Detailed description: +This patch improves DMA transfers by moving more than one byte +on each cpu tick. This works only on address-incrementing DMA +transfers. The number of transferred bytes is currently +limited to 512 on each cpu tick, but can be easily increased. +Only floppy DMA transfers are impacted right now, and DOS 6.2 +and Win95 seems to work fine with the patch applied. +The performance increase is (measured on a 1GHz PIII, with +all optimizations enabled) : + +command without patch with patch +format a: 4s 3s +surface scan of scandisk 17s 10s +xcopy a: b: 14s 4s + +These tests prefigures what kind of performance increase we +can get by implementing the IDE BusMaster feature. + +More test on more guest os are needed to find probable +incompatibilities. + +Todo: +- implement similar changes for sb16 +- fix BX_DBG_DMA_REPORT to report data from buffer + +Patch was created with: + cvs diff -u +Apply patch to what version: + cvs checked out on DATE, release version VER +Instructions: + To patch, go to main bochs directory. + Type "patch -p0 < THIS_PATCH_FILE". +---------------------------------------------------------------------- +Index: bochs.h +=================================================================== +RCS file: /cvsroot/bochs/bochs/bochs.h,v +retrieving revision 1.136 +diff -u -r1.136 bochs.h +--- bochs.h 6 Feb 2004 22:27:59 -0000 1.136 ++++ bochs.h 18 Feb 2004 13:41:55 -0000 +@@ -491,6 +491,8 @@ + #define BX_RW 2 + + ++#define BX_MEM_GET_HOST_MEM_ADDR_READ(addr) BX_MEM(0)->getHostMemAddr(NULL, addr, BX_READ) ++#define BX_MEM_GET_HOST_MEM_ADDR_WRITE(addr) BX_MEM(0)->getHostMemAddr(NULL, addr, BX_WRITE) + + + +Index: iodev/dma.cc +=================================================================== +RCS file: /cvsroot/bochs/bochs/iodev/dma.cc,v +retrieving revision 1.30 +diff -u -r1.30 dma.cc +--- iodev/dma.cc 31 Jul 2003 15:29:34 -0000 1.30 ++++ iodev/dma.cc 18 Feb 2004 13:41:59 -0000 +@@ -70,8 +70,8 @@ + unsigned + bx_dma_c::registerDMA8Channel( + unsigned channel, +- void (* dmaRead)(Bit8u *data_byte), +- void (* dmaWrite)(Bit8u *data_byte), ++ void (* dmaRead)(Bit8u *data_byte, Bit16u len), ++ void (* dmaWrite)(Bit8u *data_byte, Bit16u len), + const char *name + ) + { +@@ -93,8 +93,8 @@ + unsigned + bx_dma_c::registerDMA16Channel( + unsigned channel, +- void (* dmaRead)(Bit16u *data_word), +- void (* dmaWrite)(Bit16u *data_word), ++ void (* dmaRead)(Bit16u *data_word, Bit16u len), ++ void (* dmaWrite)(Bit16u *data_word, Bit16u len), + const char *name + ) + { +@@ -709,12 +709,26 @@ + (BX_DMA_THIS s[ma_sl].chan[channel].current_address << ma_sl); + + BX_DMA_THIS s[ma_sl].DACK[channel] = 1; +- // check for expiration of count, so we can signal TC and DACK(n) +- // at the same time. +- if (BX_DMA_THIS s[ma_sl].chan[channel].mode.address_decrement==0) ++ ++ Bit16u length; ++ if (BX_DMA_THIS s[ma_sl].chan[channel].mode.address_decrement==0) { ++ // Maxout length, it could be per device selectable ++ length=BX_DMA_THIS s[ma_sl].chan[channel].current_count; ++ if (length > 511) length=511; ++ ++ BX_DMA_THIS s[ma_sl].chan[channel].current_address+=length; + BX_DMA_THIS s[ma_sl].chan[channel].current_address++; +- else ++ } ++ else { ++ // When decrementing it is easier to do it 1 byte at a time ++ length=0; ++ //BX_DMA_THIS s[ma_sl].chan[channel].current_address-=length; + BX_DMA_THIS s[ma_sl].chan[channel].current_address--; ++ } ++ ++ // check for expiration of count, so we can signal TC and DACK(n) ++ // at the same time. ++ BX_DMA_THIS s[ma_sl].chan[channel].current_count-=length; + BX_DMA_THIS s[ma_sl].chan[channel].current_count--; + if (BX_DMA_THIS s[ma_sl].chan[channel].current_count == 0xffff) { + // count expired, done with transfer +@@ -736,65 +750,86 @@ + } + } + +- Bit8u data_byte; +- Bit16u data_word; ++ Bit8u *data8; ++ Bit16u *data16; + + if (BX_DMA_THIS s[ma_sl].chan[channel].mode.transfer_type == 1) { // write + // DMA controlled xfer of byte from I/O to Memory + + if (!ma_sl) { +- if (BX_DMA_THIS h[channel].dmaWrite8) +- BX_DMA_THIS h[channel].dmaWrite8(&data_byte); +- else +- BX_PANIC(("no dmaWrite handler for channel %u.", channel)); + +- BX_MEM_WRITE_PHYSICAL(phy_addr, 1, &data_byte); ++ data8 = BX_MEM_GET_HOST_MEM_ADDR_WRITE(phy_addr); ++ if (data8 == NULL) ++ BX_PANIC(("dma8 tries to write outside memory")); ++ else ++ if (BX_DMA_THIS h[channel].dmaWrite8) ++ BX_DMA_THIS h[channel].dmaWrite8(data8, length); ++ else ++ BX_PANIC(("no dmaWrite handler for channel %u.", channel)); + +- BX_DBG_DMA_REPORT(phy_addr, 1, BX_WRITE, data_byte); ++ //BX_MEM_WRITE_PHYSICAL(phy_addr, 1+(Bit32u)length, &data_byte); ++ ++ //BX_DBG_DMA_REPORT(phy_addr, 1, BX_WRITE, &data_byte); + } + else { +- if (BX_DMA_THIS h[channel].dmaWrite16) +- BX_DMA_THIS h[channel].dmaWrite16(&data_word); ++ ++ data16 = (Bit16u*)BX_MEM_GET_HOST_MEM_ADDR_WRITE(phy_addr); ++ if (data16 == NULL) ++ BX_PANIC(("dma16 tries to write outside memory")); + else +- BX_PANIC(("no dmaWrite handler for channel %u.", channel)); ++ if (BX_DMA_THIS h[channel].dmaWrite16) ++ BX_DMA_THIS h[channel].dmaWrite16(data16, length); ++ else ++ BX_PANIC(("no dmaWrite handler for channel %u.", channel)); + +- BX_MEM_WRITE_PHYSICAL(phy_addr, 2, &data_word); ++ //BX_MEM_WRITE_PHYSICAL(phy_addr, 2*(1+(Bit32u)length), data_word); + +- BX_DBG_DMA_REPORT(phy_addr, 2, BX_WRITE, data_word); ++ //BX_DBG_DMA_REPORT(phy_addr, 2, BX_WRITE, data_word); + } + } + else if (BX_DMA_THIS s[ma_sl].chan[channel].mode.transfer_type == 2) { // read + // DMA controlled xfer of byte from Memory to I/O + + if (!ma_sl) { +- BX_MEM_READ_PHYSICAL(phy_addr, 1, &data_byte); ++ //BX_MEM_READ_PHYSICAL(phy_addr, 1+(Bit32u)length, &data_byte); + +- if (BX_DMA_THIS h[channel].dmaRead8) +- BX_DMA_THIS h[channel].dmaRead8(&data_byte); ++ data8 = BX_MEM_GET_HOST_MEM_ADDR_READ(phy_addr); ++ if (data8 == NULL) ++ BX_PANIC(("dma8 tries to read outside memory")); ++ else ++ if (BX_DMA_THIS h[channel].dmaRead8) ++ BX_DMA_THIS h[channel].dmaRead8(data8, length); + +- BX_DBG_DMA_REPORT(phy_addr, 1, BX_READ, data_byte); ++ //BX_DBG_DMA_REPORT(phy_addr, 1, BX_READ, &data_byte); + } + else { +- BX_MEM_READ_PHYSICAL(phy_addr, 2, &data_word); ++ // BX_MEM_READ_PHYSICAL(phy_addr, 2*(1+(Bit32u)length), data_word); + +- if (BX_DMA_THIS h[channel].dmaRead16) +- BX_DMA_THIS h[channel].dmaRead16(&data_word); ++ data16 = (Bit16u*)BX_MEM_GET_HOST_MEM_ADDR_WRITE(phy_addr); ++ if (data16 == NULL) ++ BX_PANIC(("dma16 tries to read outside memory")); ++ else ++ if (BX_DMA_THIS h[channel].dmaRead16) ++ BX_DMA_THIS h[channel].dmaRead16(data16,length); + +- BX_DBG_DMA_REPORT(phy_addr, 2, BX_READ, data_word); ++ //BX_DBG_DMA_REPORT(phy_addr, 2, BX_READ, data_word); + } + } + else if (BX_DMA_THIS s[ma_sl].chan[channel].mode.transfer_type == 0) { + // verify + ++ // Buffer for verify, max 64k words ++ Bit16u buffer[64*1024]; ++ + if (!ma_sl) { + if (BX_DMA_THIS h[channel].dmaWrite8) +- BX_DMA_THIS h[channel].dmaWrite8(&data_byte); ++ BX_DMA_THIS h[channel].dmaWrite8((Bit8u*)buffer, length); + else + BX_PANIC(("no dmaWrite handler for channel %u.", channel)); + } + else { + if (BX_DMA_THIS h[channel].dmaWrite16) +- BX_DMA_THIS h[channel].dmaWrite16(&data_word); ++ BX_DMA_THIS h[channel].dmaWrite16(buffer, length); + else + BX_PANIC(("no dmaWrite handler for channel %u.", channel)); + } +Index: iodev/dma.h +=================================================================== +RCS file: /cvsroot/bochs/bochs/iodev/dma.h,v +retrieving revision 1.15 +diff -u -r1.15 dma.h +--- iodev/dma.h 3 May 2003 07:41:27 -0000 1.15 ++++ iodev/dma.h 18 Feb 2004 13:41:59 -0000 +@@ -52,12 +52,12 @@ + virtual unsigned get_TC(void); + + virtual unsigned registerDMA8Channel(unsigned channel, +- void (* dmaRead)(Bit8u *data_byte), +- void (* dmaWrite)(Bit8u *data_byte), ++ void (* dmaRead)(Bit8u *data_byte, Bit16u len), ++ void (* dmaWrite)(Bit8u *data_byte, Bit16u len), + const char *name); + virtual unsigned registerDMA16Channel(unsigned channel, +- void (* dmaRead)(Bit16u *data_word), +- void (* dmaWrite)(Bit16u *data_word), ++ void (* dmaRead)(Bit16u *data_word, Bit16u len), ++ void (* dmaWrite)(Bit16u *data_word, Bit16u len), + const char *name); + virtual unsigned unregisterDMAChannel(unsigned channel); + +@@ -102,10 +102,10 @@ + bx_bool TC; // Terminal Count + + struct { +- void (* dmaRead8)(Bit8u *data_byte); +- void (* dmaWrite8)(Bit8u *data_byte); +- void (* dmaRead16)(Bit16u *data_word); +- void (* dmaWrite16)(Bit16u *data_word); ++ void (* dmaRead8)(Bit8u *data_byte, Bit16u len); ++ void (* dmaWrite8)(Bit8u *data_byte, Bit16u len); ++ void (* dmaRead16)(Bit16u *data_word, Bit16u len); ++ void (* dmaWrite16)(Bit16u *data_word, Bit16u len); + } h[4]; // DMA read and write handlers + + }; +Index: iodev/floppy.cc +=================================================================== +RCS file: /cvsroot/bochs/bochs/iodev/floppy.cc,v +retrieving revision 1.72 +diff -u -r1.72 floppy.cc +--- iodev/floppy.cc 8 Feb 2004 18:38:26 -0000 1.72 ++++ iodev/floppy.cc 18 Feb 2004 13:42:04 -0000 +@@ -1110,66 +1110,91 @@ + } + + void +-bx_floppy_ctrl_c::dma_write(Bit8u *data_byte) ++bx_floppy_ctrl_c::dma_write(Bit8u *data_byte, Bit16u len) + { + // A DMA write is from I/O to Memory + // We need to return then next data byte from the floppy buffer + // to be transfered via the DMA to memory. (read block from floppy) ++ // ++ // len is the length of the DMA transfert minus 1 byte + ++ Bit32u xfer_len; ++ Bit8u drive = BX_FD_THIS s.DOR & 0x03; + +- *data_byte = BX_FD_THIS s.floppy_buffer[BX_FD_THIS s.floppy_buffer_index++]; ++ if ( BX_FD_THIS s.floppy_buffer_index >= 512) ++ BX_PANIC(("Index should not be >= 512")); + +- if (BX_FD_THIS s.floppy_buffer_index >= 512) { +- Bit8u drive; ++ do { ++ xfer_len = 512 - BX_FD_THIS s.floppy_buffer_index; ++ if (xfer_len > ((Bit32u)len + 1)) xfer_len = (Bit32u)len + 1; ++ if (xfer_len == 1) ++ *data_byte = BX_FD_THIS s.floppy_buffer[BX_FD_THIS s.floppy_buffer_index++]; ++ else { ++ memcpy(data_byte, &BX_FD_THIS s.floppy_buffer[BX_FD_THIS s.floppy_buffer_index],xfer_len); ++ BX_FD_THIS s.floppy_buffer_index += xfer_len; ++ } + +- drive = BX_FD_THIS s.DOR & 0x03; +- increment_sector(); // increment to next sector before retrieving next one +- BX_FD_THIS s.floppy_buffer_index = 0; +- if (DEV_dma_get_tc()) { // Terminal Count line, done +- BX_FD_THIS s.status_reg0 = (BX_FD_THIS s.head[drive] << 2) | drive; +- BX_FD_THIS s.status_reg1 = 0; +- BX_FD_THIS s.status_reg2 = 0; ++ data_byte += xfer_len; ++ len -= (Bit16u)xfer_len; + +- if (bx_dbg.floppy) { +- BX_INFO(("<>")); +- BX_INFO(("AFTER")); +- BX_INFO((" drive = %u", (unsigned) drive)); +- BX_INFO((" head = %u", (unsigned) BX_FD_THIS s.head[drive])); +- BX_INFO((" cylinder = %u", (unsigned) BX_FD_THIS s.cylinder[drive])); +- BX_INFO((" sector = %u", (unsigned) BX_FD_THIS s.sector[drive])); +- } ++ if (BX_FD_THIS s.floppy_buffer_index >= 512) { ++ increment_sector(); // increment to next sector before retrieving next one ++ BX_FD_THIS s.floppy_buffer_index = 0; ++ ++ // Only needed if more data to transfer ++ if (!DEV_dma_get_tc()) { ++ Bit32u logical_sector; ++ ++ // original assumed all floppies had two sides...now it does not *delete this comment line* ++ logical_sector = (BX_FD_THIS s.cylinder[drive] * BX_FD_THIS s.media[drive].heads * ++ BX_FD_THIS s.media[drive].sectors_per_track) + ++ (BX_FD_THIS s.head[drive] * ++ BX_FD_THIS s.media[drive].sectors_per_track) + ++ (BX_FD_THIS s.sector[drive] - 1); + +- DEV_dma_set_drq(FLOPPY_DMA_CHAN, 0); +- enter_result_phase(); ++ floppy_xfer(drive, logical_sector*512, BX_FD_THIS s.floppy_buffer, ++ 512, FROM_FLOPPY); ++ } + } +- else { // more data to transfer +- Bit32u logical_sector; +- +- // original assumed all floppies had two sides...now it does not *delete this comment line* +- logical_sector = (BX_FD_THIS s.cylinder[drive] * BX_FD_THIS s.media[drive].heads * +- BX_FD_THIS s.media[drive].sectors_per_track) + +- (BX_FD_THIS s.head[drive] * +- BX_FD_THIS s.media[drive].sectors_per_track) + +- (BX_FD_THIS s.sector[drive] - 1); ++ } while (len!=0xffff); ++ ++ // If DMA transfer is over ++ if (DEV_dma_get_tc()) { // Terminal Count line, done ++ BX_FD_THIS s.status_reg0 = (BX_FD_THIS s.head[drive] << 2) | drive; ++ BX_FD_THIS s.status_reg1 = 0; ++ BX_FD_THIS s.status_reg2 = 0; ++ ++ if (bx_dbg.floppy) { ++ BX_INFO(("<>")); ++ BX_INFO(("AFTER")); ++ BX_INFO((" drive = %u", (unsigned) drive)); ++ BX_INFO((" head = %u", (unsigned) BX_FD_THIS s.head[drive])); ++ BX_INFO((" cylinder = %u", (unsigned) BX_FD_THIS s.cylinder[drive])); ++ BX_INFO((" sector = %u", (unsigned) BX_FD_THIS s.sector[drive])); ++ } + +- floppy_xfer(drive, logical_sector*512, BX_FD_THIS s.floppy_buffer, +- 512, FROM_FLOPPY); ++ DEV_dma_set_drq(FLOPPY_DMA_CHAN, 0); ++ enter_result_phase(); + } +- } ++ return; + } + + void +-bx_floppy_ctrl_c::dma_read(Bit8u *data_byte) ++bx_floppy_ctrl_c::dma_read(Bit8u *data_byte, Bit16u len) + { + // A DMA read is from Memory to I/O + // We need to write the data_byte which was already transfered from memory + // via DMA to I/O (write block to floppy) ++ // ++ // len is the length of the DMA transfert minus 1 byte + + Bit8u drive; + Bit32u logical_sector; + + drive = BX_FD_THIS s.DOR & 0x03; ++ + if (BX_FD_THIS s.pending_command == 0x4d) { // format track in progress ++ do { + --BX_FD_THIS s.format_count; + switch (3 - (BX_FD_THIS s.format_count & 0x03)) { + case 0: +@@ -1187,50 +1212,76 @@ + BX_DEBUG(("formatting cylinder %u head %u sector %u", + BX_FD_THIS s.cylinder[drive], BX_FD_THIS s.head[drive], + BX_FD_THIS s.sector[drive])); +- for (unsigned i = 0; i < 512; i++) { +- BX_FD_THIS s.floppy_buffer[i] = BX_FD_THIS s.format_fillbyte; +- } ++ memset(BX_FD_THIS s.floppy_buffer, BX_FD_THIS s.format_fillbyte, 512); + // original assumed all floppies had two sides...now it does not *delete this comment line* +- logical_sector = (BX_FD_THIS s.cylinder[drive] * BX_FD_THIS s.media[drive].heads * BX_FD_THIS s.media[drive].sectors_per_track) + ++ logical_sector = (BX_FD_THIS s.cylinder[drive] * BX_FD_THIS s.media[drive].heads * ++ BX_FD_THIS s.media[drive].sectors_per_track) + + (BX_FD_THIS s.head[drive] * BX_FD_THIS s.media[drive].sectors_per_track) + + (BX_FD_THIS s.sector[drive] - 1); + floppy_xfer(drive, logical_sector*512, BX_FD_THIS s.floppy_buffer, + 512, TO_FLOPPY); + break; + } ++ ++ len --; ++ data_byte++; ++ } while (len != 0xffff); ++ + if ((BX_FD_THIS s.format_count == 0) || (DEV_dma_get_tc())) { + BX_FD_THIS s.format_count = 0; + BX_FD_THIS s.status_reg0 = (BX_FD_THIS s.head[drive] << 2) | drive; + DEV_dma_set_drq(FLOPPY_DMA_CHAN, 0); + enter_result_phase(); + } ++ + return; + } ++ else { // format track not in progress ++ if ( BX_FD_THIS s.media[drive].write_protected ) { ++ // write protected error ++ BX_INFO(("tried to write disk %u, which is write-protected", drive)); ++ // ST0: IC1,0=01 (abnormal termination: started execution but failed) ++ BX_FD_THIS s.status_reg0 = 0x40 | (BX_FD_THIS s.head[drive]<<2) | drive; ++ // ST1: DataError=1, NDAT=1, NotWritable=1, NID=1 ++ BX_FD_THIS s.status_reg1 = 0x27; // 0010 0111 ++ // ST2: CRCE=1, SERR=1, BCYL=1, NDAM=1. ++ BX_FD_THIS s.status_reg2 = 0x31; // 0011 0001 ++ enter_result_phase(); ++ return; ++ } + +- BX_FD_THIS s.floppy_buffer[BX_FD_THIS s.floppy_buffer_index++] = *data_byte; ++ Bit32u xfer_len; + +- if (BX_FD_THIS s.floppy_buffer_index >= 512) { +- // original assumed all floppies had two sides...now it does not *delete this comment line* +- logical_sector = (BX_FD_THIS s.cylinder[drive] * BX_FD_THIS s.media[drive].heads * BX_FD_THIS s.media[drive].sectors_per_track) + +- (BX_FD_THIS s.head[drive] * BX_FD_THIS s.media[drive].sectors_per_track) + +- (BX_FD_THIS s.sector[drive] - 1); +- if ( BX_FD_THIS s.media[drive].write_protected ) { +- // write protected error +- BX_INFO(("tried to write disk %u, which is write-protected", drive)); +- // ST0: IC1,0=01 (abnormal termination: started execution but failed) +- BX_FD_THIS s.status_reg0 = 0x40 | (BX_FD_THIS s.head[drive]<<2) | drive; +- // ST1: DataError=1, NDAT=1, NotWritable=1, NID=1 +- BX_FD_THIS s.status_reg1 = 0x27; // 0010 0111 +- // ST2: CRCE=1, SERR=1, BCYL=1, NDAM=1. +- BX_FD_THIS s.status_reg2 = 0x31; // 0011 0001 +- enter_result_phase(); +- return; ++ if ( BX_FD_THIS s.floppy_buffer_index >= 512) ++ BX_PANIC(("Index should not be >= 512")); ++ ++ do { ++ ++ xfer_len = 512 - BX_FD_THIS s.floppy_buffer_index; ++ if (xfer_len > ((Bit32u)len + 1)) xfer_len = (Bit32u)len + 1; ++ if (xfer_len == 1) ++ BX_FD_THIS s.floppy_buffer[BX_FD_THIS s.floppy_buffer_index++] = *data_byte; ++ else { ++ memcpy(&BX_FD_THIS s.floppy_buffer[BX_FD_THIS s.floppy_buffer_index],data_byte,xfer_len); ++ BX_FD_THIS s.floppy_buffer_index += xfer_len; + } +- floppy_xfer(drive, logical_sector*512, BX_FD_THIS s.floppy_buffer, ++ ++ data_byte += xfer_len; ++ len -= (Bit16u)xfer_len; ++ ++ if (BX_FD_THIS s.floppy_buffer_index >= 512) { ++ // original assumed all floppies had two sides...now it does not *delete this comment line* ++ logical_sector = (BX_FD_THIS s.cylinder[drive] * BX_FD_THIS s.media[drive].heads * BX_FD_THIS s.media[drive].sectors_per_track) + ++ (BX_FD_THIS s.head[drive] * BX_FD_THIS s.media[drive].sectors_per_track) + ++ (BX_FD_THIS s.sector[drive] - 1); ++ floppy_xfer(drive, logical_sector*512, BX_FD_THIS s.floppy_buffer, + 512, TO_FLOPPY); +- increment_sector(); // increment to next sector after writing current one +- BX_FD_THIS s.floppy_buffer_index = 0; +- if (DEV_dma_get_tc()) { // Terminal Count line, done ++ increment_sector(); // increment to next sector after writing current one ++ BX_FD_THIS s.floppy_buffer_index = 0; ++ } // if BX_FD_THIS s.floppy_buffer_index >= 512 ++ } while (len != 0xffff); ++ ++ if (DEV_dma_get_tc()) { // Terminal Count line, done + BX_FD_THIS s.status_reg0 = (BX_FD_THIS s.head[drive] << 2) | drive; + BX_FD_THIS s.status_reg1 = 0; + BX_FD_THIS s.status_reg2 = 0; +@@ -1243,13 +1294,11 @@ + BX_INFO((" cylinder = %u", (unsigned) BX_FD_THIS s.cylinder[drive])); + BX_INFO((" sector = %u", (unsigned) BX_FD_THIS s.sector[drive])); + } +- ++ + DEV_dma_set_drq(FLOPPY_DMA_CHAN, 0); + enter_result_phase(); +- } +- else { // more data to transfer +- } // else +- } // if BX_FD_THIS s.floppy_buffer_index >= 512 ++ } ++ } + } + + void +@@ -1286,8 +1335,8 @@ + if (BX_FD_THIS s.cylinder[drive] >= BX_FD_THIS s.media[drive].tracks) { + // Set to 1 past last possible cylinder value. + // I notice if I set it to tracks-1, prama linux won't boot. ++ BX_INFO(("increment_sector: clamping cylinder %x to max",BX_FD_THIS s.cylinder[drive])); + BX_FD_THIS s.cylinder[drive] = BX_FD_THIS s.media[drive].tracks; +- BX_INFO(("increment_sector: clamping cylinder to max")); + } + } + } +Index: iodev/floppy.h +=================================================================== +RCS file: /cvsroot/bochs/bochs/iodev/floppy.h,v +retrieving revision 1.17 +diff -u -r1.17 floppy.h +--- iodev/floppy.h 7 Feb 2004 14:34:34 -0000 1.17 ++++ iodev/floppy.h 18 Feb 2004 13:42:04 -0000 +@@ -123,8 +123,8 @@ + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); + #endif +- BX_FD_SMF void dma_write(Bit8u *data_byte); +- BX_FD_SMF void dma_read(Bit8u *data_byte); ++ BX_FD_SMF void dma_write(Bit8u *data_byte, Bit16u len); ++ BX_FD_SMF void dma_read(Bit8u *data_byte, Bit16u len); + BX_FD_SMF void floppy_command(void); + BX_FD_SMF void floppy_xfer(Bit8u drive, Bit32u offset, Bit8u *buffer, Bit32u bytes, Bit8u direction); + BX_FD_SMF void raise_interrupt(void); +Index: iodev/iodev.h +=================================================================== +RCS file: /cvsroot/bochs/bochs/iodev/iodev.h,v +retrieving revision 1.41 +diff -u -r1.41 iodev.h +--- iodev/iodev.h 2 Feb 2004 21:47:26 -0000 1.41 ++++ iodev/iodev.h 18 Feb 2004 13:42:05 -0000 +@@ -176,16 +176,16 @@ + public: + virtual unsigned registerDMA8Channel( + unsigned channel, +- void (* dmaRead)(Bit8u *data_byte), +- void (* dmaWrite)(Bit8u *data_byte), ++ void (* dmaRead)(Bit8u *data_byte, Bit16u len), ++ void (* dmaWrite)(Bit8u *data_byte, Bit16u len), + const char *name + ) { + STUBFUNC(dma, registerDMA8Channel); return 0; + } + virtual unsigned registerDMA16Channel( + unsigned channel, +- void (* dmaRead)(Bit16u *data_word), +- void (* dmaWrite)(Bit16u *data_word), ++ void (* dmaRead)(Bit16u *data_word, Bit16u len), ++ void (* dmaWrite)(Bit16u *data_word, Bit16u len), + const char *name + ) { + STUBFUNC(dma, registerDMA16Channel); return 0; diff --git a/bochs/patches/patch.floppy-athiel b/bochs/patches/patch.floppy-athiel new file mode 100644 index 00000000..cb8c6f2b --- /dev/null +++ b/bochs/patches/patch.floppy-athiel @@ -0,0 +1,306 @@ +---------------------------------------------------------------------- +Patch name: patch.floppy-athiel +Author: Alex Thiel (uploaded by cbothamy) +Date: 8 Nov 2002 +Status: Proposed + +Detailed description: +This patch introduces the implicit termination of data transfer via +end-of-track and data overrun/underrun conditions, as well as non-DMA mode. + +The code cleanup is present in CVS now (Volker Ruppert, Dec 1st 2002). + +We still have no test case for the non-DMA mode and the overrun/underrun (timeout) +code fails if cpu speedups are enabled. The timeout code expects at least one DMA +cycle within 15 usec (Volker Ruppert, Mar 12th 2005). + +Patch was created with: + cvs diff -u +Apply patch to what version: + cvs checked out on 11 Mar 2005 +Instructions: + To patch, go to main bochs directory. + Type "patch -p0 < THIS_PATCH_FILE". +---------------------------------------------------------------------- +Index: iodev/floppy.cc +=================================================================== +RCS file: /cvsroot/bochs/bochs/iodev/floppy.cc,v +retrieving revision 1.77 +diff -u -r1.77 floppy.cc +--- iodev/floppy.cc 2005-03-11 21:12:52 +0100 ++++ iodev/floppy.cc 2005-03-12 15:23:40 +0200 +@@ -73,11 +73,18 @@ + #define FD_MS_ACTB 0x02 + #define FD_MS_ACTA 0x01 + ++/* for status registers */ ++#define FD_ST_EOT 0x80 ++#define FD_ST_OVERRUN 0x10 ++ + #define FROM_FLOPPY 10 + #define TO_FLOPPY 11 + + #define FLOPPY_DMA_CHAN 2 + ++#define FD_TIMEOUT 15 // for FIFO overrun/underrun ++#define FD_IRQ_DELAY 2 // delay so the system can detect a INT change ++ + typedef struct { + unsigned id; + Bit8u trk; +@@ -391,6 +398,20 @@ + break; + + case 0x3F5: /* diskette controller data */ ++ ++ /* data transfer in non-DMA mode */ ++ if (BX_FD_THIS s.main_status_reg & FD_MS_NDMA) { ++ BX_FD_THIS dma_write(&value); // write: from controller to cpu ++ ++ /* This simulates the FIFO latency, see comment in timer() below. */ ++ BX_FD_THIS lower_interrupt(); ++ BX_FD_THIS s.main_status_reg &= ~FD_MS_MRQ; ++ // overrides the timer set in dma_write() ++ bx_pc_system.activate_timer(BX_FD_THIS s.floppy_timer_index, ++ FD_IRQ_DELAY, 0); ++ return(value); ++ } ++ + if (BX_FD_THIS s.result_size == 0) { + BX_ERROR(("port 0x3f5: no results to read")); + BX_FD_THIS s.main_status_reg = 0; +@@ -527,6 +548,20 @@ + break; + + case 0x3F5: /* diskette controller data */ ++ ++ /* data transfer in non-DMA mode */ ++ if (BX_FD_THIS s.main_status_reg & FD_MS_NDMA) { ++ BX_FD_THIS dma_read((Bit8u *) &value); // read: from cpu to controller ++ ++ /* This simulates the FIFO latency, see comment in timer() below. */ ++ BX_FD_THIS lower_interrupt(); ++ BX_FD_THIS s.main_status_reg &= ~FD_MS_MRQ; ++ // overrides the timer set in dma_read() ++ bx_pc_system.activate_timer(BX_FD_THIS s.floppy_timer_index, ++ FD_IRQ_DELAY, 0); ++ break; ++ } ++ + BX_DEBUG(("command = %02x", (unsigned) value)); + if (BX_FD_THIS s.command_complete) { + if (BX_FD_THIS s.pending_command!=0) +@@ -670,7 +705,7 @@ + head_load_time = BX_FD_THIS s.command[2] >> 1; + BX_FD_THIS s.non_dma = BX_FD_THIS s.command[2] & 0x01; + if (BX_FD_THIS s.non_dma) +- BX_ERROR(("non DMA mode not implemented yet")); ++ BX_INFO(("non DMA mode selected")); + enter_idle_phase(); + return; + break; +@@ -839,10 +874,14 @@ + /* 4 header bytes per sector are required */ + BX_FD_THIS s.format_count <<= 2; + +- DEV_dma_set_drq(FLOPPY_DMA_CHAN, 1); +- +- /* data reg not ready, controller busy */ +- BX_FD_THIS s.main_status_reg = FD_MS_BUSY; ++ if (BX_FD_THIS s.non_dma) { ++ BX_FD_THIS s.main_status_reg = FD_MS_MRQ | FD_MS_NDMA | FD_MS_BUSY; ++ BX_FD_THIS raise_interrupt(); ++ } else { ++ /* data reg not ready, controller busy */ ++ BX_FD_THIS s.main_status_reg = FD_MS_BUSY; ++ DEV_dma_set_drq(FLOPPY_DMA_CHAN, 1); ++ } + BX_DEBUG(("format track")); + return; + break; +@@ -957,21 +996,25 @@ + floppy_xfer(drive, logical_sector*512, BX_FD_THIS s.floppy_buffer, + 512, FROM_FLOPPY); + +- DEV_dma_set_drq(FLOPPY_DMA_CHAN, 1); +- +- /* data reg not ready, controller busy */ +- BX_FD_THIS s.main_status_reg = FD_MS_BUSY; +- return; +- } +- else if ((BX_FD_THIS s.command[0] & 0x7f) == 0x45) { // write +- +- DEV_dma_set_drq(FLOPPY_DMA_CHAN, 1); +- +- /* data reg not ready, controller busy */ +- BX_FD_THIS s.main_status_reg = FD_MS_BUSY; +- return; ++ if (BX_FD_THIS s.non_dma) { ++ BX_FD_THIS s.main_status_reg = FD_MS_MRQ | FD_MS_NDMA | FD_MS_DIO | FD_MS_BUSY; ++ BX_FD_THIS raise_interrupt(); ++ } else { ++ /* data reg not ready, controller busy */ ++ BX_FD_THIS s.main_status_reg = FD_MS_BUSY; ++ DEV_dma_set_drq(FLOPPY_DMA_CHAN, 1); ++ } ++ } else if ((BX_FD_THIS s.command[0] & 0x7f) == 0x45) { // write ++ ++ if (BX_FD_THIS s.non_dma) { ++ BX_FD_THIS s.main_status_reg = FD_MS_MRQ | FD_MS_NDMA | FD_MS_BUSY; ++ BX_FD_THIS raise_interrupt(); ++ } else { ++ /* data reg not ready, controller busy */ ++ BX_FD_THIS s.main_status_reg = FD_MS_BUSY; ++ DEV_dma_set_drq(FLOPPY_DMA_CHAN, 1); + } +- else ++ } else + BX_PANIC(("floppy_command(): unknown read/write command")); + + return; +@@ -1138,6 +1181,31 @@ + enter_result_phase(); + break; + ++ case 0x4d: // format track ++ case 0x46: // read normal data ++ case 0x66: ++ case 0xc6: ++ case 0xe6: ++ case 0x45: // write normal data ++ case 0xc5: ++ /* During non-DMA operation, the state of the FDC oscillates ++ between IRQ low/MRQ clear (set after data is transferred via 0x3f5) ++ and IRQ high/MRQ set. ++ Whenever the timer is triggered in DMA mode, or in non-DMA mode with ++ MRQ set, we have a data overrun/underrun. */ ++ if ((BX_FD_THIS s.main_status_reg & (FD_MS_MRQ | FD_MS_NDMA)) ++ == FD_MS_NDMA) { // NDMA & !MRQ ++ BX_FD_THIS raise_interrupt(); ++ BX_FD_THIS s.main_status_reg |= FD_MS_MRQ; ++ bx_pc_system.activate_timer(BX_FD_THIS s.floppy_timer_index, ++ FD_TIMEOUT, 0 ); ++ } else { // timeout ++ // FIXME: this code requires at least one DMA cycle within 15 usec ++ //BX_FD_THIS s.status_reg1 |= FD_ST_OVERRUN; ++ //enter_result_phase(); ++ } ++ break; ++ + case 0xfe: // (contrived) RESET + theFloppyController->reset(BX_RESET_SOFTWARE); + BX_FD_THIS s.pending_command = 0; +@@ -1163,9 +1231,11 @@ + // We need to return then next data byte from the floppy buffer + // to be transfered via the DMA to memory. (read block from floppy) + +- + *data_byte = BX_FD_THIS s.floppy_buffer[BX_FD_THIS s.floppy_buffer_index++]; + ++ // reschedule timeout ++ bx_pc_system.activate_timer( BX_FD_THIS s.floppy_timer_index, FD_TIMEOUT, 0 ); ++ + if (BX_FD_THIS s.floppy_buffer_index >= 512) { + Bit8u drive; + +@@ -1174,7 +1244,6 @@ + BX_FD_THIS s.floppy_buffer_index = 0; + if (DEV_dma_get_tc()) { // Terminal Count line, done + BX_FD_THIS s.status_reg0 = (BX_FD_THIS s.head[drive] << 2) | drive; +- BX_FD_THIS s.status_reg1 = 0; + BX_FD_THIS s.status_reg2 = 0; + + if (bx_dbg.floppy) { +@@ -1215,6 +1284,9 @@ + Bit8u drive; + Bit32u logical_sector; + ++ // reschedule timeout ++ bx_pc_system.activate_timer( BX_FD_THIS s.floppy_timer_index, FD_TIMEOUT, 0 ); ++ + drive = BX_FD_THIS s.DOR & 0x03; + if (BX_FD_THIS s.pending_command == 0x4d) { // format track in progress + --BX_FD_THIS s.format_count; +@@ -1279,7 +1351,6 @@ + BX_FD_THIS s.floppy_buffer_index = 0; + if (DEV_dma_get_tc()) { // Terminal Count line, done + BX_FD_THIS s.status_reg0 = (BX_FD_THIS s.head[drive] << 2) | drive; +- BX_FD_THIS s.status_reg1 = 0; + BX_FD_THIS s.status_reg2 = 0; + + if (bx_dbg.floppy) { +@@ -1322,6 +1393,14 @@ + + drive = BX_FD_THIS s.DOR & 0x03; + ++ if (BX_FD_THIS s.status_reg1 & FD_ST_EOT) { ++ /* increment past EOT: abnormal termination */ ++ BX_FD_THIS s.status_reg0 = 0x40 | (BX_FD_THIS s.head[drive]<<2) | drive; ++ DEV_dma_set_drq(FLOPPY_DMA_CHAN, 0); ++ enter_result_phase(); ++ return; ++ } ++ + // values after completion of data xfer + // ??? calculation depends on base_count being multiple of 512 + BX_FD_THIS s.sector[drive] ++; +@@ -1344,6 +1423,12 @@ + BX_INFO(("increment_sector: clamping cylinder to max")); + } + } ++ ++ /* check end-of-track condition */ ++ if ((BX_FD_THIS s.multi_track == BX_FD_THIS s.head[drive]) && ++ (BX_FD_THIS s.sector[drive] == BX_FD_THIS s.media[drive].sectors_per_track)) { ++ BX_FD_THIS s.status_reg1 |= FD_ST_EOT; ++ } + } + + unsigned +@@ -1702,14 +1787,23 @@ + BX_FD_THIS s.result[0] = BX_FD_THIS s.status_reg0; + BX_FD_THIS s.result[1] = BX_FD_THIS s.cylinder[drive]; + break; +- case 0x4a: // read ID +- case 0x4d: // format track + case 0x46: // read normal data + case 0x66: + case 0xc6: + case 0xe6: + case 0x45: // write normal data + case 0xc5: ++ /* increment sector once more if we terminated normally at EOT */ ++ if ((BX_FD_THIS s.status_reg0 & 0xc0) == 0x00 && ++ (BX_FD_THIS s.status_reg1 & FD_ST_EOT)) { ++ BX_FD_THIS s.status_reg1 &= ~FD_ST_EOT; // clear EOT flag ++ increment_sector(); ++ // reset the head bit ++ BX_FD_THIS s.status_reg0 &= 0xfb; ++ BX_FD_THIS s.status_reg0 |= (BX_FD_THIS s.head[drive] << 2); ++ } ++ case 0x4a: // read ID ++ case 0x4d: // format track + BX_FD_THIS s.result_size = 7; + BX_FD_THIS s.result[0] = BX_FD_THIS s.status_reg0; + BX_FD_THIS s.result[1] = BX_FD_THIS s.status_reg1; +@@ -1718,6 +1812,8 @@ + BX_FD_THIS s.result[4] = BX_FD_THIS s.head[drive]; + BX_FD_THIS s.result[5] = BX_FD_THIS s.sector[drive]; + BX_FD_THIS s.result[6] = 2; /* sector size code */ ++ ++ bx_pc_system.deactivate_timer( BX_FD_THIS s.floppy_timer_index ); // clear pending timeout + BX_FD_THIS raise_interrupt(); + break; + } +@@ -1729,6 +1825,11 @@ + BX_FD_THIS s.main_status_reg &= 0x0f; // leave drive status untouched + BX_FD_THIS s.main_status_reg |= FD_MS_MRQ; // data register ready + ++ /* do not touch ST0 and ST3 since these may be queried later via ++ commands 0x08 and 0x04, respectively. */ ++ BX_FD_THIS s.status_reg1 = 0; ++ BX_FD_THIS s.status_reg2 = 0; ++ + BX_FD_THIS s.command_complete = 1; /* waiting for new command */ + BX_FD_THIS s.command_index = 0; + BX_FD_THIS s.command_size = 0; diff --git a/bochs/patches/patch.hosttime-port b/bochs/patches/patch.hosttime-port new file mode 100644 index 00000000..4e59510b --- /dev/null +++ b/bochs/patches/patch.hosttime-port @@ -0,0 +1,165 @@ +---------------------------------------------------------------------- +Patch name: patch.hosttime-port +Author: cbbochs@free.fr +Date: July, 31th 2002 + +Detailed description: + This patch enables the guest to read to host time (linux only). + Port 0x8901 is used. Two time values can be set and + read, along with the difference of the two. + This can be useful to do performance tests. + + port 0x8901 : + + Writes can be bytes, word, dword + Reads must be dword + write 0x00 : set both times to 0 + write 0x01 : set the first time + write 0x02 : set the second time + write 0x03 : set the both time + write 0x11 : the seconds of the first time will be read from 0x8901 + write 0x12 : the microseconds of the first time will be read from 0x8901 + write 0x21 : the seconds of the second time will be read from 0x8901 + write 0x22 : the microseconds of the second time will be read from 0x8901 + write 0x31 : the seconds of the difference will be read from 0x8901 + write 0x32 : the microseconds of the difference will be read from 0x8901 + + Additionnal values have been defined for language that can't do 32bits + port access. Please look in the source. + + Example : Set first time, then second time, and get the difference : + + outb(0x8901, 0x01); // Set first time + outb(0x8901, 0x02); // Set second time + outb(0x8901, 0x31); // Read difference : seconds fields + sec = inl(0x8901); + outb(0x8901, 0x32); // Read difference : microseconds fields + usec = inl(0x8901); + +Patch was created with: + cvs diff -u +Apply patch to what version: + cvs checked out on July, 31th 2002 +Instructions: + To patch, go to main bochs directory. + Type "patch -p0 < THIS_PATCH_FILE". +---------------------------------------------------------------------- +Index: iodev/unmapped.cc +=================================================================== +RCS file: /cvsroot/bochs/bochs/iodev/unmapped.cc,v +retrieving revision 1.17 +diff -u -r1.17 unmapped.cc +--- iodev/unmapped.cc 30 Jul 2002 08:48:03 -0000 1.17 ++++ iodev/unmapped.cc 31 Jul 2002 09:01:23 -0000 +@@ -137,6 +137,40 @@ + retval = 0xffffffff; + BX_DEBUG(("unsupported IO read from port %04x", address)); + break; ++#ifdef __linux__ ++ case 0x8901: // host-time port ++ struct timeval diff; ++ retval = 0; ++ ++ if (timercmp(& BX_UM_THIS s.hosttime_value1, & BX_UM_THIS s.hosttime_value2, < ) ) ++ timersub(& BX_UM_THIS s.hosttime_value2, & BX_UM_THIS s.hosttime_value1, &diff); ++ else ++ timersub(& BX_UM_THIS s.hosttime_value1, & BX_UM_THIS s.hosttime_value2, &diff); ++ ++ switch (BX_UM_THIS s.hosttime_field) { ++ case 0x11: retval = BX_UM_THIS s.hosttime_value1.tv_sec; break; ++ case 0x12: retval = BX_UM_THIS s.hosttime_value1.tv_usec; break; ++ case 0x1C: retval = BX_UM_THIS s.hosttime_value1.tv_sec & 0xffff; break; ++ case 0x1D: retval = BX_UM_THIS s.hosttime_value1.tv_sec >> 16; break; ++ case 0x1E: retval = BX_UM_THIS s.hosttime_value1.tv_usec & 0xffff; break; ++ case 0x1F: retval = BX_UM_THIS s.hosttime_value1.tv_usec >> 16; break; ++ case 0x21: retval = BX_UM_THIS s.hosttime_value2.tv_sec; break; ++ case 0x22: retval = BX_UM_THIS s.hosttime_value2.tv_usec; break; ++ case 0x2C: retval = BX_UM_THIS s.hosttime_value2.tv_sec & 0xffff; break; ++ case 0x2D: retval = BX_UM_THIS s.hosttime_value2.tv_sec >> 16; break; ++ case 0x2E: retval = BX_UM_THIS s.hosttime_value2.tv_usec & 0xffff; break; ++ case 0x2F: retval = BX_UM_THIS s.hosttime_value2.tv_usec >> 16; break; ++ case 0x31: retval = diff.tv_sec; break; ++ case 0x32: retval = diff.tv_usec; break; ++ case 0x3C: retval = diff.tv_sec & 0xffff; break; ++ case 0x3D: retval = diff.tv_sec >> 16; break; ++ case 0x3E: retval = diff.tv_usec & 0xffff; break; ++ case 0x3F: retval = diff.tv_usec >> 16; break; ++ } ++ ++ break; ++#endif ++ + default: + retval = 0xffffffff; + } +@@ -256,6 +290,51 @@ + BX_CPU(0)->kill_bochs_request = 2; + } + break; ++ ++#ifdef __linux__ ++ case 0x8901: // host-time port ++ switch (value) { ++ case 0x01: // set first time ++ gettimeofday(& BX_UM_THIS s.hosttime_value1, NULL); ++ break; ++ case 0x02: // set second time ++ gettimeofday(& BX_UM_THIS s.hosttime_value2, NULL); ++ break; ++ case 0x03: // set both times ++ gettimeofday(& BX_UM_THIS s.hosttime_value1, NULL); ++ BX_UM_THIS s.hosttime_value2.tv_sec = BX_UM_THIS s.hosttime_value1.tv_sec; ++ BX_UM_THIS s.hosttime_value2.tv_usec = BX_UM_THIS s.hosttime_value1.tv_usec; ++ break; ++ case 0x11: // retrieve sec from first time // 32 bits ++ case 0x12: // retrieve usec from first time // 32 bits ++ case 0x1C: // retrieve sec from first time // low 16 bits ++ case 0x1D: // retrieve sec from first time // high 16 bits ++ case 0x1E: // retrieve usec from first time // low 16 bits ++ case 0x1F: // retrieve usec from first time // high 16 bits ++ case 0x21: // retrieve sec from second time // 32 bits ++ case 0x22: // retrieve usec from second time // 32 bits ++ case 0x2C: // retrieve sec from second time // low 16 bits ++ case 0x2D: // retrieve sec from second time // high 16 bits ++ case 0x2E: // retrieve usec from second time // low 16 bits ++ case 0x2F: // retrieve usec from second time // high 16 bits ++ case 0x31: // retrieve sec from difference // 32 bits ++ case 0x32: // retrieve usec from difference // 32 bits ++ case 0x3C: // retrieve sec from difference // low 16 bits ++ case 0x3D: // retrieve sec from difference // high 16 bits ++ case 0x3E: // retrieve usec from difference // low 16 bits ++ case 0x3F: // retrieve usec from difference // high 16 bits ++ BX_UM_THIS s.hosttime_field = value; ++ break; ++ default: ++ BX_UM_THIS s.hosttime_field = 0; ++ BX_UM_THIS s.hosttime_value1.tv_sec = 0; ++ BX_UM_THIS s.hosttime_value1.tv_usec = 0; ++ BX_UM_THIS s.hosttime_value2.tv_sec = 0; ++ BX_UM_THIS s.hosttime_value2.tv_usec = 0; ++ break; ++ } ++ break; ++#endif + + case 0xfedc: + bx_dbg.debugger = (value > 0); +Index: iodev/unmapped.h +=================================================================== +RCS file: /cvsroot/bochs/bochs/iodev/unmapped.h,v +retrieving revision 1.8 +diff -u -r1.8 unmapped.h +--- iodev/unmapped.h 29 Jul 2002 12:44:47 -0000 1.8 ++++ iodev/unmapped.h 31 Jul 2002 09:01:23 -0000 +@@ -56,6 +56,11 @@ + Bit8u port80; + Bit8u port8e; + Bit8u shutdown; ++#ifdef __linux__ ++ Bit8u hosttime_field; ++ struct timeval hosttime_value1; ++ struct timeval hosttime_value2; ++#endif + } s; // state information + + bx_devices_c *devices; diff --git a/bochs/patches/patch.marklog b/bochs/patches/patch.marklog new file mode 100644 index 00000000..b1aa3820 --- /dev/null +++ b/bochs/patches/patch.marklog @@ -0,0 +1,161 @@ +---------------------------------------------------------------------- +Patch name: patch.marklog +Author: Carl Sopchak +Date: May, 1st 2002 + +Detailed description: + While working on getting SCO OSR5 installed into bochs, + I added this mod to the gui programs. It adds a button + (labelled XX LOG; my bitmap artsmanship leaves MUCH to + be desired!) to the gui bar that writes a BX_ERROR + entry into the log file. The format of the entry is: + + tttttttttt-x-@eeeeeeee[XGUI ] + ================================ + Log Marker # nnnn + ================================ + + where nnnn is a sequential number from the beginning of + the bochs session. A message is also written to stdout + stating that the entry was logged, which also shows the + number. + + This is useful to log demarcation points in the log + file (e.g., "skip everything before marker #1"; "stuff + between markers 3 & 4 is where the hard disk gets + initialized", etc.) + + Please make this a part of the standard bochs package. + + Thanks, + + Carl + +Patch was created with: + cvs diff -u +Apply patch to what version: + cvs checked out on May, 1st 2002 +Instructions: + To patch, go to main bochs directory. + Type "cd gui" + Type "patch -p0 < THIS_PATCH_FILE". +---------------------------------------------------------------------- +Index: gui.h +=================================================================== +RCS file: /cvsroot/bochs/bochs/gui/gui.h,v +retrieving revision 1.27 +diff -u -r1.27 gui.h +--- gui.h 20 Apr 2002 07:19:35 -0000 1.27 ++++ gui.h 1 May 2002 18:13:03 -0000 +@@ -78,6 +78,7 @@ + static void cdromD_handler(void); + static void reset_handler(void); + static void power_handler(void); ++ static void marklog_handler(void); + static void copy_handler(void); + static void paste_handler(void); + static void snapshot_handler(void); +@@ -91,6 +92,7 @@ + unsigned floppyA_bmap_id, floppyA_eject_bmap_id, floppyA_hbar_id; + unsigned floppyB_bmap_id, floppyB_eject_bmap_id, floppyB_hbar_id; + unsigned cdromD_bmap_id, cdromD_eject_bmap_id, cdromD_hbar_id; ++ unsigned marklog_bmap_id, marklog_hbar_id; + unsigned power_bmap_id, power_hbar_id; + unsigned reset_bmap_id, reset_hbar_id; + unsigned copy_bmap_id, copy_hbar_id; +@@ -98,11 +100,13 @@ + unsigned snapshot_bmap_id, snapshot_hbar_id; + unsigned config_bmap_id, config_hbar_id; + unsigned mouse_bmap_id, nomouse_bmap_id, mouse_hbar_id; ++ ++ unsigned markercount; + }; + + + #define BX_MAX_PIXMAPS 16 +-#define BX_MAX_HEADERBAR_ENTRIES 10 ++#define BX_MAX_HEADERBAR_ENTRIES 11 + #define BX_HEADER_BAR_Y 32 + + // align pixmaps towards left or right side of header bar +Index: gui.cc +=================================================================== +RCS file: /cvsroot/bochs/bochs/gui/gui.cc,v +retrieving revision 1.41 +diff -u -r1.41 gui.cc +--- gui.cc 18 Apr 2002 00:22:19 -0000 1.41 ++++ gui.cc 1 May 2002 18:13:03 -0000 +@@ -37,6 +37,7 @@ + #include "gui/bitmaps/paste.h" + #include "gui/bitmaps/configbutton.h" + #include "gui/bitmaps/cdromd.h" ++#include "gui/bitmaps/marklog.h" + #if BX_WITH_MACOS + # include + #endif +@@ -75,13 +76,15 @@ + BX_GUI_THIS nomouse_bmap_id = create_bitmap(bx_nomouse_bmap, + BX_MOUSE_BMAP_X, BX_MOUSE_BMAP_Y); + +- + BX_GUI_THIS power_bmap_id = create_bitmap(bx_power_bmap, BX_POWER_BMAP_X, BX_POWER_BMAP_Y); + BX_GUI_THIS reset_bmap_id = create_bitmap(bx_reset_bmap, BX_RESET_BMAP_X, BX_RESET_BMAP_Y); + BX_GUI_THIS snapshot_bmap_id = create_bitmap(bx_snapshot_bmap, BX_SNAPSHOT_BMAP_X, BX_SNAPSHOT_BMAP_Y); + BX_GUI_THIS copy_bmap_id = create_bitmap(bx_copy_bmap, BX_COPY_BMAP_X, BX_COPY_BMAP_Y); + BX_GUI_THIS paste_bmap_id = create_bitmap(bx_paste_bmap, BX_PASTE_BMAP_X, BX_PASTE_BMAP_Y); + BX_GUI_THIS config_bmap_id = create_bitmap(bx_config_bmap, BX_CONFIG_BMAP_X, BX_CONFIG_BMAP_Y); ++ BX_GUI_THIS marklog_bmap_id = create_bitmap(bx_marklog_bmap, BX_MARKLOG_BMAP_X, BX_MARKLOG_BMAP_Y); ++ ++ BX_GUI_THIS markercount = 0; + + + // Add the initial bitmaps to the headerbar, and enable callback routine, for use +@@ -145,6 +148,9 @@ + // Copy button + BX_GUI_THIS copy_hbar_id = headerbar_bitmap(BX_GUI_THIS copy_bmap_id, + BX_GRAVITY_RIGHT, copy_handler); ++ // Mark Log button ++ BX_GUI_THIS marklog_hbar_id = headerbar_bitmap(BX_GUI_THIS marklog_bmap_id, ++ BX_GRAVITY_RIGHT, marklog_handler); + + show_headerbar(); + } +@@ -262,6 +268,15 @@ + bx_pc_system.ResetSignal( PCS_SET ); /* XXX is this right? */ + for (int i=0; ireset(BX_RESET_HARDWARE); ++} ++ ++ void ++bx_gui_c::marklog_handler(void) ++{ ++ // the user pressed Mark Log button, so write error marker to log file ++ BX_GUI_THIS markercount += 1; ++ BX_ERROR (("\n================================\nLog Marker # %d\n================================", BX_GUI_THIS markercount)); ++ fprintf (stderr, "Marker # %d written to log.\n", BX_GUI_THIS markercount); + } + + void +--- /dev/null Thu Aug 30 16:30:55 2001 ++++ bitmaps/marklog.h Wed May 1 09:58:00 2002 +@@ -0,0 +1,20 @@ ++///////////////////////////////////////////////////////////////////////// ++// $Id: patch.marklog,v 1.1 2002-05-01 21:07:13 cbothamy Exp $ ++///////////////////////////////////////////////////////////////////////// ++// ++#define BX_MARKLOG_BMAP_X 32 ++#define BX_MARKLOG_BMAP_Y 32 ++ ++static const unsigned char bx_marklog_bmap[(BX_MARKLOG_BMAP_X * BX_MARKLOG_BMAP_Y)/8] = { ++ 0x60, 0x18, 0x86, 0x01, 0xc0, 0x0c, 0xcc, 0x00, 0x80, 0x07, 0x78, 0x00, ++ 0x00, 0x03, 0x30, 0x00, 0x80, 0x07, 0x78, 0x00, 0xc0, 0x0c, 0xcc, 0x00, ++ 0x60, 0x18, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, ++ 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, ++ 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x30, 0x18, 0x00, ++ 0x00, 0x30, 0x18, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, 0x30, 0x18, 0x00, ++ 0x00, 0x30, 0x18, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x30, 0x10, 0x00, 0x00, 0x30, 0x00, 0x00, ++ 0x00, 0x30, 0x1e, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, 0x30, 0x18, 0x00, ++ 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00 ++ }; diff --git a/bochs/patches/patch.mingw-resources b/bochs/patches/patch.mingw-resources new file mode 100755 index 00000000..a12966e2 --- /dev/null +++ b/bochs/patches/patch.mingw-resources @@ -0,0 +1,53 @@ +---------------------------------------------------------------------- +Patch name: patch.mingw-resources +Author: Jeroen Janssen +Date: 2003-08-19 +Status: not applied + +Detailed description: + +Changes the .rc (resource) files to use forware (/) style slashes +instead of backwards style ones. +This allows for crosscompilation from linux using a crosscompiler. + + +Patch was created with: + cvs diff -u +Apply patch to what version: + cvs checked out on DATE, release version VER +Instructions: + To patch, go to main bochs directory. + Type "patch -p0 < THIS_PATCH_FILE". +---------------------------------------------------------------------- + +Index: win32res.rc +=================================================================== +RCS file: /cvsroot/bochs/bochs/win32res.rc,v +retrieving revision 1.4 +diff -u -r1.4 win32res.rc +--- win32res.rc 15 Jul 2003 21:02:05 -0000 1.4 ++++ win32res.rc 19 Aug 2003 16:40:03 -0000 +@@ -1,7 +1,7 @@ + #include +-#include "gui\win32res.h" ++#include "gui/win32res.h" + +-ICON_BOCHS ICON build\win32\nsis\bochs.ico ++ICON_BOCHS ICON build/win32/nsis/bochs.ico + + ASK_DLG DIALOG 30, 30, 200, 100 + STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +Index: wxbochs.rc +=================================================================== +RCS file: /cvsroot/bochs/bochs/wxbochs.rc,v +retrieving revision 1.4 +diff -u -r1.4 wxbochs.rc +--- wxbochs.rc 13 Jul 2003 23:30:55 -0000 1.4 ++++ wxbochs.rc 19 Aug 2003 16:40:03 -0000 +@@ -1,5 +1,5 @@ + #include "config.h" +-icon_bochs ICON build\win32\nsis\bochs.ico ++icon_bochs ICON build/win32/nsis/bochs.ico + #include "wx/msw/wx.rc" + #if BX_WITH_WIN32 + #include "win32res.rc" \ No newline at end of file diff --git a/bochs/pc_system.cc b/bochs/pc_system.cc new file mode 100644 index 00000000..82cbae88 --- /dev/null +++ b/bochs/pc_system.cc @@ -0,0 +1,572 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#include "bochs.h" +#include "cpu/cpu.h" +#include "iodev/iodev.h" +#define LOG_THIS bx_pc_system. + +#ifdef WIN32 +#ifndef __MINGW32__ +// #include // +++ +#include +#endif +#endif + +#if defined(PROVIDE_M_IPS) +double m_ips; // Millions of Instructions Per Second +#endif + +// Option for turning off BX_TIMER_DEBUG? +// Check out m_ips and ips + +#define SpewPeriodicTimerInfo 0 +#define MinAllowableTimerPeriod 1 + +const Bit64u bx_pc_system_c::NullTimerInterval = 0xffffffff; + + // constructor +bx_pc_system_c::bx_pc_system_c() +{ + this->put("SYS"); + + BX_ASSERT(numTimers == 0); + + // Timer[0] is the null timer. It is initialized as a special + // case here. It should never be turned off or modified, and its + // duration should always remain the same. + ticksTotal = 0; // Reset ticks since emulator started. + timer[0].inUse = 1; + timer[0].period = NullTimerInterval; + timer[0].active = 1; + timer[0].continuous = 1; + timer[0].funct = nullTimer; + timer[0].this_ptr = this; + numTimers = 1; // So far, only the nullTimer. +} + +void bx_pc_system_c::initialize(Bit32u ips) +{ + ticksTotal = 0; + timer[0].timeToFire = NullTimerInterval; + currCountdown = NullTimerInterval; + currCountdownPeriod = NullTimerInterval; + lastTimeUsec = 0; + usecSinceLast = 0; + triggeredTimer = 0; + HRQ = 0; + kill_bochs_request = 0; + + // parameter 'ips' is the processor speed in Instructions-Per-Second + m_ips = double(ips) / 1000000.0L; + + BX_DEBUG(("ips = %u", (unsigned) ips)); +} + +void bx_pc_system_c::set_HRQ(bx_bool val) +{ + HRQ = val; + if (val) + BX_CPU(0)->async_event = 1; +} + +void bx_pc_system_c::set_INTR(bx_bool value) +{ + if (bx_dbg.interrupts) + BX_INFO(("pc_system: Setting INTR=%d on bootstrap processor %d", (int)value, BX_BOOTSTRAP_PROCESSOR)); + BX_CPU(BX_BOOTSTRAP_PROCESSOR)->set_INTR(value); +} + +// +// Read from the IO memory address space +// + + Bit32u BX_CPP_AttrRegparmN(2) +bx_pc_system_c::inp(Bit16u addr, unsigned io_len) +{ + Bit32u ret = bx_devices.inp(addr, io_len); + return ret; +} + +// +// Write to the IO memory address space. +// + + void BX_CPP_AttrRegparmN(3) +bx_pc_system_c::outp(Bit16u addr, Bit32u value, unsigned io_len) +{ + bx_devices.outp(addr, value, io_len); +} + +void bx_pc_system_c::set_enable_a20(bx_bool value) +{ +#if BX_SUPPORT_A20 + bx_bool old_enable_a20 = enable_a20; + + if (value) { + enable_a20 = 1; +#if BX_CPU_LEVEL < 2 + a20_mask = 0xfffff; +#elif BX_CPU_LEVEL == 2 + a20_mask = 0xffffff; +#elif BX_PHY_ADDRESS_LONG + a20_mask = BX_CONST64(0xffffffffffffffff); +#else /* 386+ */ + a20_mask = 0xffffffff; +#endif + } + else { + enable_a20 = 0; + /* mask off A20 address line */ +#if BX_PHY_ADDRESS_LONG + a20_mask = BX_CONST64(0xffffffffffefffff); +#else + a20_mask = 0xffefffff; +#endif + } + + BX_DBG_A20_REPORT(enable_a20); + + BX_DEBUG(("A20: set() = %u", (unsigned) enable_a20)); + + // If there has been a transition, we need to notify the CPUs so + // they can potentially invalidate certain cache info based on + // A20-line-applied physical addresses. + if (old_enable_a20 != enable_a20) MemoryMappingChanged(); +#else + BX_DEBUG(("set_enable_a20: ignoring: BX_SUPPORT_A20 = 0")); +#endif +} + +bx_bool bx_pc_system_c::get_enable_a20(void) +{ +#if BX_SUPPORT_A20 + BX_DEBUG(("A20: get() = %u", (unsigned) enable_a20)); + + return enable_a20; +#else + BX_DEBUG(("get_enable_a20: ignoring: BX_SUPPORT_A20 = 0")); + return 1; +#endif +} + +void bx_pc_system_c::MemoryMappingChanged(void) +{ + for (unsigned i=0; iTLB_flush(); +} + +void bx_pc_system_c::invlpg(bx_address addr) +{ + for (unsigned i=0; iTLB_invlpg(addr); +} + +int bx_pc_system_c::Reset(unsigned type) +{ + // type is BX_RESET_HARDWARE or BX_RESET_SOFTWARE + BX_INFO(("bx_pc_system_c::Reset(%s) called",type==BX_RESET_HARDWARE?"HARDWARE":"SOFTWARE")); + + set_enable_a20(1); + + // Always reset cpu + for (int i=0; ireset(type); + } + + // Reset devices only on Hardware resets + if (type==BX_RESET_HARDWARE) { + DEV_reset_devices(type); + } + + return(0); +} + +Bit8u bx_pc_system_c::IAC(void) +{ + return DEV_pic_iac(); +} + +void bx_pc_system_c::exit(void) +{ + // delete all registered timers (exception: null timer and APIC timer) + numTimers = 1 + BX_SUPPORT_APIC; + bx_devices.exit(); + if (bx_gui) { + bx_gui->cleanup(); + bx_gui->exit(); + } +} + +void bx_pc_system_c::register_state(void) +{ + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "pc_system", "PC System State", 10); + BXRS_PARAM_BOOL(list, enable_a20, enable_a20); + BXRS_HEX_PARAM_SIMPLE(list, a20_mask); + BXRS_DEC_PARAM_SIMPLE(list, currCountdown); + BXRS_DEC_PARAM_SIMPLE(list, currCountdownPeriod); + BXRS_DEC_PARAM_SIMPLE(list, ticksTotal); + BXRS_DEC_PARAM_SIMPLE(list, lastTimeUsec); + BXRS_DEC_PARAM_SIMPLE(list, usecSinceLast); + BXRS_PARAM_BOOL(list, HRQ, HRQ); + + bx_list_c *timers = new bx_list_c(list, "timer", numTimers); + for (unsigned i = 0; i < numTimers; i++) { + char name[4]; + sprintf(name, "%d", i); + bx_list_c *bxtimer = new bx_list_c(timers, name, 5); + BXRS_PARAM_BOOL(bxtimer, inUse, timer[i].inUse); + BXRS_DEC_PARAM_FIELD(bxtimer, period, timer[i].period); + BXRS_DEC_PARAM_FIELD(bxtimer, timeToFire, timer[i].timeToFire); + BXRS_PARAM_BOOL(bxtimer, active, timer[i].active); + BXRS_PARAM_BOOL(bxtimer, continuous, timer[i].continuous); + } +} + +// ================================================ +// Bochs internal timer delivery framework features +// ================================================ + +int bx_pc_system_c::register_timer(void *this_ptr, void (*funct)(void *), + Bit32u useconds, bx_bool continuous, bx_bool active, const char *id) +{ + // Convert useconds to number of ticks. + Bit64u ticks = (Bit64u) (double(useconds) * m_ips); + + return register_timer_ticks(this_ptr, funct, ticks, continuous, active, id); +} + +int bx_pc_system_c::register_timer_ticks(void* this_ptr, bx_timer_handler_t funct, + Bit64u ticks, bx_bool continuous, bx_bool active, const char *id) +{ + unsigned i; + + // If the timer frequency is rediculously low, make it more sane. + // This happens when 'ips' is too low. + if (ticks < MinAllowableTimerPeriod) { + //BX_INFO(("register_timer_ticks: adjusting ticks of %llu to min of %u", + // ticks, MinAllowableTimerPeriod)); + ticks = MinAllowableTimerPeriod; + } + + // search for new timer for i=1, i=0 is reserved for NullTimer + for (i=1; i < numTimers; i++) { + if (timer[i].inUse == 0) + break; + } + +#if BX_TIMER_DEBUG + if (i==0) + BX_PANIC(("register_timer: cannot register NullTimer again!")); + if (numTimers >= BX_MAX_TIMERS) + BX_PANIC(("register_timer: too many registered timers")); + if (this_ptr == NULL) + BX_PANIC(("register_timer_ticks: this_ptr is NULL!")); + if (funct == NULL) + BX_PANIC(("register_timer_ticks: funct is NULL!")); +#endif + + timer[i].inUse = 1; + timer[i].period = ticks; + timer[i].timeToFire = (ticksTotal + Bit64u(currCountdownPeriod-currCountdown)) + + ticks; + timer[i].active = active; + timer[i].continuous = continuous; + timer[i].funct = funct; + timer[i].this_ptr = this_ptr; + strncpy(timer[i].id, id, BxMaxTimerIDLen); + timer[i].id[BxMaxTimerIDLen-1] = 0; // Null terminate if not already. + + if (active) { + if (ticks < Bit64u(currCountdown)) { + // This new timer needs to fire before the current countdown. + // Skew the current countdown and countdown period to be smaller + // by the delta. + currCountdownPeriod -= (currCountdown - Bit32u(ticks)); + currCountdown = Bit32u(ticks); + } + } + + BX_DEBUG(("timer id %d registered for '%s'", i, id)); + // If we didn't find a free slot, increment the bound, numTimers. + if (i==numTimers) + numTimers++; // One new timer installed. + + // Return timer id. + return(i); +} + +void bx_pc_system_c::countdownEvent(void) +{ + unsigned i; + Bit64u minTimeToFire; + bx_bool triggered[BX_MAX_TIMERS]; + + // The countdown decremented to 0. We need to service all the active + // timers, and invoke callbacks from those timers which have fired. +#if BX_TIMER_DEBUG + if (currCountdown != 0) + BX_PANIC(("countdownEvent: ticks!=0")); +#endif + + // Increment global ticks counter by number of ticks which have + // elapsed since the last update. + ticksTotal += Bit64u(currCountdownPeriod); + minTimeToFire = (Bit64u) -1; + + for (i=0; i < numTimers; i++) { + triggered[i] = 0; // Reset triggered flag. + if (timer[i].active) { +#if BX_TIMER_DEBUG + if (ticksTotal > timer[i].timeToFire) + BX_PANIC(("countdownEvent: ticksTotal > timeToFire[%u], D " FMT_LL "u", i, + timer[i].timeToFire-ticksTotal)); +#endif + if (ticksTotal == timer[i].timeToFire) { + // This timer is ready to fire. + triggered[i] = 1; + + if (timer[i].continuous==0) { + // If triggered timer is one-shot, deactive. + timer[i].active = 0; + } + else { + // Continuous timer, increment time-to-fire by period. + timer[i].timeToFire += timer[i].period; + if (timer[i].timeToFire < minTimeToFire) + minTimeToFire = timer[i].timeToFire; + } + } + else { + // This timer is not ready to fire yet. + if (timer[i].timeToFire < minTimeToFire) + minTimeToFire = timer[i].timeToFire; + } + } + } + + // Calculate next countdown period. We need to do this before calling + // any of the callbacks, as they may call timer features, which need + // to be advanced to the next countdown cycle. + currCountdown = currCountdownPeriod = + Bit32u(minTimeToFire - ticksTotal); + + for (i=0; i < numTimers; i++) { + // Call requested timer function. It may request a different + // timer period or deactivate etc. + if (triggered[i]) { + triggeredTimer = i; + timer[i].funct(timer[i].this_ptr); + triggeredTimer = 0; + } + } +} + +void bx_pc_system_c::nullTimer(void* this_ptr) +{ + // This function is always inserted in timer[0]. It is sort of + // a heartbeat timer. It ensures that at least one timer is + // always active to make the timer logic more simple, and has + // a duration of less than the maximum 32-bit integer, so that + // a 32-bit size can be used for the hot countdown timer. The + // rest of the timer info can be 64-bits. This is also a good + // place for some logic to report actual emulated + // instructions-per-second (IPS) data when measured relative to + // the host computer's wall clock. + + UNUSED(this_ptr); + +#if SpewPeriodicTimerInfo + BX_INFO(("===================================")); + for (unsigned i=0; i < bx_pc_system.numTimers; i++) { + if (bx_pc_system.timer[i].active) { + BX_INFO(("BxTimer(%s): period=" FMT_LL "u, continuous=%u", + bx_pc_system.timer[i].id, bx_pc_system.timer[i].period, + bx_pc_system.timer[i].continuous)); + } + } +#endif +} + +void bx_pc_system_c::benchmarkTimer(void* this_ptr) +{ + bx_pc_system_c *class_ptr = (bx_pc_system_c *) this_ptr; + class_ptr->kill_bochs_request = 1; + bx_user_quit = 1; +} + +#if BX_DEBUGGER +void bx_pc_system_c::timebp_handler(void* this_ptr) +{ + BX_CPU(0)->break_point = BREAK_POINT_TIME; + BX_DEBUG(("Time breakpoint triggered")); + + if (timebp_queue_size > 1) { + Bit64s new_diff = timebp_queue[1] - bx_pc_system.time_ticks(); + bx_pc_system.activate_timer_ticks(timebp_timer, new_diff, 1); + } + timebp_queue_size--; + for (int i = 0; i < timebp_queue_size; i++) + timebp_queue[i] = timebp_queue[i+1]; +} +#endif // BX_DEBUGGER + +Bit64u bx_pc_system_c::time_usec_sequential() +{ + Bit64u this_time_usec = time_usec(); + if(this_time_usec != lastTimeUsec) { + Bit64u diff_usec = this_time_usec-lastTimeUsec; + lastTimeUsec = this_time_usec; + if(diff_usec >= usecSinceLast) { + usecSinceLast = 0; + } else { + usecSinceLast -= diff_usec; + } + } + usecSinceLast++; + return (this_time_usec+usecSinceLast); +} + +Bit64u bx_pc_system_c::time_usec() +{ + return (Bit64u) (((double)(Bit64s)time_ticks()) / m_ips); +} + +void bx_pc_system_c::start_timers(void) { } + +//DanceOS Richard Hellwig +#ifdef DANCEOS_RESTORE +void bx_pc_system_c::delete_timers(void){ + numTimers = 1 + BX_SUPPORT_APIC; +} +#endif + +void bx_pc_system_c::activate_timer_ticks(unsigned i, Bit64u ticks, bx_bool continuous) +{ +#if BX_TIMER_DEBUG + if (i >= numTimers) + BX_PANIC(("activate_timer_ticks: timer %u OOB", i)); + if (i == 0) + BX_PANIC(("activate_timer_ticks: timer 0 is the NullTimer!")); + if (timer[i].period < MinAllowableTimerPeriod) + BX_PANIC(("activate_timer_ticks: timer[%u].period of " FMT_LL "u < min of %u", + i, timer[i].period, MinAllowableTimerPeriod)); +#endif + + // If the timer frequency is rediculously low, make it more sane. + // This happens when 'ips' is too low. + if (ticks < MinAllowableTimerPeriod) { + //BX_INFO(("activate_timer_ticks: adjusting ticks of %llu to min of %u", + // ticks, MinAllowableTimerPeriod)); + ticks = MinAllowableTimerPeriod; + } + + timer[i].period = ticks; + timer[i].timeToFire = (ticksTotal + Bit64u(currCountdownPeriod-currCountdown)) + + ticks; + timer[i].active = 1; + timer[i].continuous = continuous; + + if (ticks < Bit64u(currCountdown)) { + // This new timer needs to fire before the current countdown. + // Skew the current countdown and countdown period to be smaller + // by the delta. + currCountdownPeriod -= (currCountdown - Bit32u(ticks)); + currCountdown = Bit32u(ticks); + } +} + +void bx_pc_system_c::activate_timer(unsigned i, Bit32u useconds, bx_bool continuous) +{ + Bit64u ticks; + +#if BX_TIMER_DEBUG + if (i >= numTimers) + BX_PANIC(("activate_timer: timer %u OOB", i)); + if (i == 0) + BX_PANIC(("activate_timer: timer 0 is the nullTimer!")); +#endif + + // if useconds = 0, use default stored in period field + // else set new period from useconds + if (useconds==0) { + ticks = timer[i].period; + } + else { + // convert useconds to number of ticks + ticks = (Bit64u) (double(useconds) * m_ips); + + // If the timer frequency is rediculously low, make it more sane. + // This happens when 'ips' is too low. + if (ticks < MinAllowableTimerPeriod) { + //BX_INFO(("activate_timer: adjusting ticks of %llu to min of %u", + // ticks, MinAllowableTimerPeriod)); + ticks = MinAllowableTimerPeriod; + } + + timer[i].period = ticks; + } + + activate_timer_ticks(i, ticks, continuous); +} + +void bx_pc_system_c::deactivate_timer(unsigned i) +{ +#if BX_TIMER_DEBUG + if (i >= numTimers) + BX_PANIC(("deactivate_timer: timer %u OOB", i)); + if (i == 0) + BX_PANIC(("deactivate_timer: timer 0 is the nullTimer!")); +#endif + + timer[i].active = 0; +} + +bx_bool bx_pc_system_c::unregisterTimer(unsigned timerIndex) +{ +#if BX_TIMER_DEBUG + if (timerIndex >= numTimers) + BX_PANIC(("unregisterTimer: timer %u OOB", timerIndex)); + if (timerIndex == 0) + BX_PANIC(("unregisterTimer: timer 0 is the nullTimer!")); + if (timer[timerIndex].inUse == 0) + BX_PANIC(("unregisterTimer: timer %u is not in-use!", timerIndex)); +#endif + + if (timer[timerIndex].active) { + BX_PANIC(("unregisterTimer: timer '%s' is still active!", timer[timerIndex].id)); + return(0); // Fail. + } + + // Reset timer fields for good measure. + timer[timerIndex].inUse = 0; // No longer registered. + timer[timerIndex].period = BX_MAX_BIT64S; // Max value (invalid) + timer[timerIndex].timeToFire = BX_MAX_BIT64S; // Max value (invalid) + timer[timerIndex].continuous = 0; + timer[timerIndex].funct = NULL; + timer[timerIndex].this_ptr = NULL; + memset(timer[timerIndex].id, 0, BxMaxTimerIDLen); + + if (timerIndex == (numTimers-1)) numTimers--; + + return(1); // OK +} diff --git a/bochs/pc_system.h b/bochs/pc_system.h new file mode 100644 index 00000000..95ff2e7f --- /dev/null +++ b/bochs/pc_system.h @@ -0,0 +1,186 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002-2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#ifndef BX_PCSYS_H +#define BX_PCSYS_H + +#define BX_MAX_TIMERS 64 +#define BX_NULL_TIMER_HANDLE 10000 + +typedef void (*bx_timer_handler_t)(void *); + +BOCHSAPI extern class bx_pc_system_c bx_pc_system; + +#ifdef PROVIDE_M_IPS +extern double m_ips; +#endif + +class BOCHSAPI bx_pc_system_c : private logfunctions { +private: + + // =============================== + // Timer oriented private features + // =============================== + + struct { + bx_bool inUse; // Timer slot is in-use (currently registered). + Bit64u period; // Timer periodocity in cpu ticks. + Bit64u timeToFire; // Time to fire next (in absolute ticks). + bx_bool active; // 0=inactive, 1=active. + bx_bool continuous; // 0=one-shot timer, 1=continuous periodicity. + bx_timer_handler_t funct; // A callback function for when the + // timer fires. + void *this_ptr; // The this-> pointer for C++ callbacks + // has to be stored as well. +#define BxMaxTimerIDLen 32 + char id[BxMaxTimerIDLen]; // String ID of timer. + } timer[BX_MAX_TIMERS]; + + unsigned numTimers; // Number of currently allocated timers. + unsigned triggeredTimer; // ID of the actually triggered timer. + Bit32u currCountdown; // Current countdown ticks value (decrements to 0). + Bit32u currCountdownPeriod; // Length of current countdown period. + Bit64u ticksTotal; // Num ticks total since start of emulator execution. + Bit64u lastTimeUsec; // Last sequentially read time in usec. + Bit64u usecSinceLast; // Number of useconds claimed since then. + + // A special null timer is always inserted in the timer[0] slot. This + // make sure that at least one timer is always active, and that the + // duration is always less than a maximum 32-bit integer, so a 32-bit + // counter can be used for the current countdown. + static const Bit64u NullTimerInterval; + static void nullTimer(void* this_ptr); + +#if !defined(PROVIDE_M_IPS) + // This is the emulator speed, as measured in millions of + // x86 instructions per second that it can emulate on some hypothetically + // nomimal workload. + double m_ips; // Millions of Instructions Per Second +#endif + + // This handler is called when the function which decrements the clock + // ticks finds that an event has occurred. + void countdownEvent(void); + +public: + + // ============================== + // Timer oriented public features + // ============================== + + void initialize(Bit32u ips); + int register_timer(void *this_ptr, bx_timer_handler_t, Bit32u useconds, + bx_bool continuous, bx_bool active, const char *id); + bx_bool unregisterTimer(unsigned timerID); + void start_timers(void); + + //DanceOS Richard Hellwig +#ifdef DANCEOS_RESTORE + void delete_timers(void); +#endif + + void activate_timer(unsigned timer_index, Bit32u useconds, bx_bool continuous); + void deactivate_timer(unsigned timer_index); + unsigned triggeredTimerID(void) { + return triggeredTimer; + } + static BX_CPP_INLINE void tick1(void) { + if (--bx_pc_system.currCountdown == 0) { + bx_pc_system.countdownEvent(); + } + } + static BX_CPP_INLINE void tickn(Bit32u n) { + while (n >= bx_pc_system.currCountdown) { + + n -= bx_pc_system.currCountdown; + bx_pc_system.currCountdown = 0; + bx_pc_system.countdownEvent(); + // bx_pc_system.currCountdown is adjusted to new value by countdownevent(). + } + + // 'n' is not (or no longer) >= the countdown size. We can just decrement + // the remaining requested ticks and continue. + bx_pc_system.currCountdown -= n; + } + + int register_timer_ticks(void* this_ptr, bx_timer_handler_t, Bit64u ticks, + bx_bool continuous, bx_bool active, const char *id); + void activate_timer_ticks(unsigned index, Bit64u instructions, + bx_bool continuous); + Bit64u time_usec(); + Bit64u time_usec_sequential(); + static BX_CPP_INLINE Bit64u time_ticks() { + return bx_pc_system.ticksTotal + + Bit64u(bx_pc_system.currCountdownPeriod - bx_pc_system.currCountdown); + } + + static BX_CPP_INLINE Bit32u getNumCpuTicksLeftNextEvent(void) { + return bx_pc_system.currCountdown; + } +#if BX_DEBUGGER + static void timebp_handler(void* this_ptr); +#endif + static void benchmarkTimer(void* this_ptr); + + // =========================== + // Non-timer oriented features + // =========================== + + bx_bool HRQ; // Hold Request + + // Address line 20 control: + // 1 = enabled: extended memory is accessible + // 0 = disabled: A20 address line is forced low to simulate + // an 8088 address map + bx_bool enable_a20; + + // start out masking physical memory addresses to: + // 8086: 20 bits + // 286: 24 bits + // 386: 32 bits + // when A20 line is disabled, mask physical memory addresses to: + // 286: 20 bits + // 386: 20 bits + bx_phy_address a20_mask; + + volatile bx_bool kill_bochs_request; + + void set_HRQ(bx_bool val); // set the Hold ReQuest line + void set_INTR(bx_bool value); // set the INTR line to value + + // Cpu and System Reset + int Reset(unsigned type); + Bit8u IAC(void); + + bx_pc_system_c(); + + Bit32u inp(Bit16u addr, unsigned io_len) BX_CPP_AttrRegparmN(2); + void outp(Bit16u addr, Bit32u value, unsigned io_len) BX_CPP_AttrRegparmN(3); + void set_enable_a20(bx_bool value); + bx_bool get_enable_a20(void); + void MemoryMappingChanged(void); // flush TLB in all CPUs + void invlpg(bx_address addr); // flush TLB page in all CPUs + void exit(void); + void register_state(void); +}; + +#endif diff --git a/bochs/plex86-interface.cc b/bochs/plex86-interface.cc new file mode 100644 index 00000000..53bf4a33 --- /dev/null +++ b/bochs/plex86-interface.cc @@ -0,0 +1,434 @@ +/////////////////////////////////////////////////////////////////////// +// $Id$ +/////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002 Kevin P. Lawton +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#include "bochs.h" +#include +#include +#include +#include "plex86-interface.h" + +#define LOG_THIS genlog-> + +unsigned plex86State = 0; +int plex86FD = -1; + +asm (".comm plex86PrintBufferPage,4096,4096"); +asm (".comm plex86GuestCPUPage,4096,4096"); +extern Bit8u plex86PrintBufferPage[]; +extern Bit8u plex86GuestCPUPage[]; + +static Bit8u *plex86MemPtr = 0; +static size_t plex86MemSize = 0; +static Bit8u *plex86PrintBuffer = plex86PrintBufferPage; +static guest_cpu_t *plex86GuestCPU = (guest_cpu_t *) plex86GuestCPUPage; + +static void copyPlex86StateToBochs(BX_CPU_C *cpu); +static void copyBochsDescriptorToPlex86(descriptor_t *, bx_descriptor_t *); +static void copyPlex86DescriptorToBochs(BX_CPU_C *, + bx_descriptor_t *, descriptor_t *); +static int openFD(void); + +static unsigned faultCount[32]; + + +int openFD(void) +{ + if (plex86State) { + // This should be the first operation; no state should be set yet. + fprintf(stderr, "plex86: openFD: plex86State = 0x%x\n", plex86State); + return(0); // Error. + } + + // Open a new VM. + fprintf(stderr, "plex86: opening VM.\n"); + fprintf(stderr, "plex86: trying /dev/misc/plex86..."); + plex86FD = open("/dev/misc/plex86", O_RDWR); + if (plex86FD < 0) { + fprintf(stderr, "failed.\n"); + // Try the old name. + fprintf(stderr, "plex86: trying /dev/plex86..."); + plex86FD = open("/dev/plex86", O_RDWR); + if (plex86FD < 0) { + fprintf(stderr, "failed.\n"); + fprintf(stderr, "plex86: did you load the kernel module?" + " Read the toplevel README file!\n"); + perror ("open"); + return(-1); // Error. + } + } + fprintf(stderr, "OK.\n"); + return(1); // OK. +} + +unsigned plex86CpuInfo(BX_CPU_C *cpu) +{ + cpuid_info_t bochsCPUID; + + if (plex86FD < 0) { + // If the plex86 File Descriptor has not been opened yet. + if (!openFD()) { + return(0); // Error. + } + } + + bochsCPUID.vendorDWord0 = cpu->cpuidInfo.vendorDWord0; + bochsCPUID.vendorDWord1 = cpu->cpuidInfo.vendorDWord1; + bochsCPUID.vendorDWord2 = cpu->cpuidInfo.vendorDWord2; + bochsCPUID.procSignature.raw = cpu->cpuidInfo.procSignature; + bochsCPUID.featureFlags.raw = cpu->cpuidInfo.featureFlags; + + fprintf(stderr, "plex86: passing guest CPUID to plex86.\n"); + if (ioctl(plex86FD, PLEX86_CPUID, &bochsCPUID)) { + perror("ioctl CPUID: "); + return(0); // Error. + } + + return(1); // OK. +} + +unsigned plex86TearDown(void) +{ + fprintf(stderr, "plex86: plex86TearDown called.\n"); + + fprintf(stderr, "plex86: guest Fault Count (FYI):\n"); + for (unsigned f=0; f<32; f++) { + if (faultCount[f]) + fprintf(stderr, "plex86: FC[%u] = %u\n", f, faultCount[f]); + } + + if (plex86FD < 0) { + fprintf(stderr, "plex86: plex86TearDown: FD not open.\n"); + return(0); + } + + if (plex86State & Plex86StateMMapPhyMem) { + fprintf(stderr, "plex86: unmapping guest physical memory.\n"); + } + plex86State &= ~Plex86StateMMapPhyMem; + + if (plex86State & Plex86StateMMapPrintBuffer) { + } + plex86State &= ~Plex86StateMMapPrintBuffer; + + if (plex86State & Plex86StateMMapGuestCPU) { } + plex86State &= ~Plex86StateMMapGuestCPU; + + fprintf(stderr, "plex86: tearing down VM.\n"); + if (ioctl(plex86FD, PLEX86_TEARDOWN, 0) == -1) { + perror("ioctl TEARDOWN: "); + return(0); // Failed. + } + plex86State &= ~Plex86StateMemAllocated; + + // Close the connection to the kernel module. + fprintf(stderr, "plex86: closing VM device.\n"); + if (close(plex86FD) == -1) { + perror("close of VM device\n"); + return(0); // Failed. + } + + plex86FD = -1; // File descriptor is now closed. + + plex86State = 0; // For good measure. + + return(1); // OK. +} + +unsigned plex86ExecuteInVM(BX_CPU_C *cpu) +{ + plex86IoctlExecute_t executeMsg; + int ret; + + if (plex86State != Plex86StateReady) { + fprintf(stderr, "plex86: plex86ExecuteInVM: not in ready state (0x%x)\n", + plex86State); + BX_PANIC(("plex86ExecuteInVM: bailing")); + return(0); + } + + executeMsg.executeMethod = Plex86ExecuteMethodNative; + plex86GuestCPU->edi = cpu->gen_reg[BX_32BIT_REG_EDI].dword.erx; + plex86GuestCPU->esi = cpu->gen_reg[BX_32BIT_REG_ESI].dword.erx; + plex86GuestCPU->ebp = cpu->gen_reg[BX_32BIT_REG_EBP].dword.erx; + plex86GuestCPU->esp = cpu->gen_reg[BX_32BIT_REG_ESP].dword.erx; + plex86GuestCPU->ebx = cpu->gen_reg[BX_32BIT_REG_EBX].dword.erx; + plex86GuestCPU->edx = cpu->gen_reg[BX_32BIT_REG_EDX].dword.erx; + plex86GuestCPU->ecx = cpu->gen_reg[BX_32BIT_REG_ECX].dword.erx; + plex86GuestCPU->eax = cpu->gen_reg[BX_32BIT_REG_EAX].dword.erx; + + plex86GuestCPU->eflags = cpu->eflags.val32; + plex86GuestCPU->eip = cpu->get_eip(); + + // ES/CS/SS/DS/FS/GS + for (unsigned s=0; s<6; s++) { + plex86GuestCPU->sreg[s].sel.raw = cpu->sregs[s].selector.value; + copyBochsDescriptorToPlex86(&plex86GuestCPU->sreg[s].des, + &cpu->sregs[s].cache); + plex86GuestCPU->sreg[s].valid = cpu->sregs[s].cache.valid; + } + + // LDTR + plex86GuestCPU->ldtr.sel.raw = cpu->ldtr.selector.value; + copyBochsDescriptorToPlex86(&plex86GuestCPU->ldtr.des, &cpu->ldtr.cache); + plex86GuestCPU->ldtr.valid = cpu->ldtr.cache.valid; + + // TR + plex86GuestCPU->tr.sel.raw = cpu->tr.selector.value; + copyBochsDescriptorToPlex86(&plex86GuestCPU->tr.des, &cpu->tr.cache); + plex86GuestCPU->tr.valid = cpu->tr.cache.valid; + + // GDTR/IDTR + plex86GuestCPU->gdtr.base = cpu->gdtr.base; + plex86GuestCPU->gdtr.limit = cpu->gdtr.limit; + plex86GuestCPU->idtr.base = cpu->idtr.base; + plex86GuestCPU->idtr.limit = cpu->idtr.limit; + + plex86GuestCPU->dr[0] = cpu->dr[0]; + plex86GuestCPU->dr[1] = cpu->dr[1]; + plex86GuestCPU->dr[2] = cpu->dr[2]; + plex86GuestCPU->dr[3] = cpu->dr[3]; + plex86GuestCPU->dr6 = cpu->dr6; + plex86GuestCPU->dr7 = cpu->dr7; + + plex86GuestCPU->tr3 = 0; // Unimplemented in bochs. + plex86GuestCPU->tr4 = 0; // Unimplemented in bochs. + plex86GuestCPU->tr5 = 0; // Unimplemented in bochs. + plex86GuestCPU->tr6 = 0; // Unimplemented in bochs. + plex86GuestCPU->tr7 = 0; // Unimplemented in bochs. + + plex86GuestCPU->cr0.raw = cpu->cr0.val32; + plex86GuestCPU->cr1 = 0; + plex86GuestCPU->cr2 = cpu->cr2; + plex86GuestCPU->cr3 = cpu->cr3; + plex86GuestCPU->cr4.raw = cpu->cr4.registerValue; + + plex86GuestCPU->a20Enable = BX_GET_ENABLE_A20(); + + ret = ioctl(plex86FD, PLEX86_EXECUTE, &executeMsg); + if (ret != 0) { + fprintf(stderr, "plex86: ioctl(PLEX86_EXECUTE): "); + switch (ret) { + case Plex86NoExecute_Method: + fprintf(stderr, "bad execute method.\n"); + break; + case Plex86NoExecute_CR0: + fprintf(stderr, "bad CR0 value.\n"); + break; + case Plex86NoExecute_CR4: + fprintf(stderr, "bad CR4 value.\n"); + break; + case Plex86NoExecute_CS: + fprintf(stderr, "bad CS value.\n"); + break; + case Plex86NoExecute_A20: + fprintf(stderr, "bad A20 enable value.\n"); + break; + case Plex86NoExecute_Selector: + fprintf(stderr, "bad selector value.\n"); + break; + case Plex86NoExecute_DPL: + fprintf(stderr, "bad descriptor DPL.\n"); + break; + case Plex86NoExecute_EFlags: + fprintf(stderr, "bad EFlags.\n"); + break; + case Plex86NoExecute_Panic: + fprintf(stderr, "panic.\n"); + break; + case Plex86NoExecute_VMState: + fprintf(stderr, "bad VM state.\n"); + break; + default: + fprintf(stderr, "ret = %d\n", ret); + } + } + else { + switch (executeMsg.monitorState.request) { + case MonReqFlushPrintBuf: + fprintf(stderr, "plex86: MonReqFlushPrintBuf:\n"); + fprintf(stderr, "::%s\n", plex86PrintBuffer); + break; + case MonReqPanic: + fprintf(stderr, "plex86: MonReqPanic:\n"); + fprintf(stderr, "::%s\n", plex86PrintBuffer); + break; + //case MonReqNone: + // copyPlex86StateToBochs(cpu); + // return(0); /* All OK. */ + case MonReqGuestFault: + faultCount[ executeMsg.monitorState.guestFaultNo ]++; + copyPlex86StateToBochs(cpu); + return(0); /* All OK. */ + default: + fprintf(stderr, "plex86: executeMsg.request = %u\n", + executeMsg.monitorState.request); + break; + } + } + + plex86TearDown(); + BX_PANIC(("plex86ExecuteInVM: bailing")); + + return(0); +} + +void copyPlex86StateToBochs(BX_CPU_C *cpu) +{ + cpu->gen_reg[BX_32BIT_REG_EDI].dword.erx = plex86GuestCPU->edi; + cpu->gen_reg[BX_32BIT_REG_ESI].dword.erx = plex86GuestCPU->esi; + cpu->gen_reg[BX_32BIT_REG_EBP].dword.erx = plex86GuestCPU->ebp; + cpu->gen_reg[BX_32BIT_REG_ESP].dword.erx = plex86GuestCPU->esp; + cpu->gen_reg[BX_32BIT_REG_EBX].dword.erx = plex86GuestCPU->ebx; + cpu->gen_reg[BX_32BIT_REG_EDX].dword.erx = plex86GuestCPU->edx; + cpu->gen_reg[BX_32BIT_REG_ECX].dword.erx = plex86GuestCPU->ecx; + cpu->gen_reg[BX_32BIT_REG_EAX].dword.erx = plex86GuestCPU->eax; + + cpu->eflags.val32 = plex86GuestCPU->eflags; + cpu->gen_reg[BX_32BIT_REG_EIP].dword.erx = plex86GuestCPU->eip; + + // Set fields used for exception processing. + cpu->prev_rip = plex86GuestCPU->eip; + + // ES/CS/SS/DS/FS/GS + for (unsigned s=0; s<6; s++) { + cpu->sregs[s].selector.value = plex86GuestCPU->sreg[s].sel.raw; + cpu->sregs[s].cache.valid = plex86GuestCPU->sreg[s].valid; + if ((cpu->sregs[s].selector.value & 0xfffc) == 0) { + /* Null selector. */ + if (cpu->sregs[s].cache.valid) { + plex86TearDown(); + BX_PANIC(("copyPlex86StateToBochs: null descriptor [%u] " + "with descriptor cache valid bit set.", s)); + } + /* valid bit == 0, invalidates a bochs descriptor cache. */ + } + else { + /* Non-null selector. */ + if (cpu->sregs[s].cache.valid==0) { + plex86TearDown(); + BX_PANIC(("copyPlex86StateToBochs: non-null descriptor [%u] " + "with descriptor cache valid bit clear.", s)); + } + copyPlex86DescriptorToBochs(cpu, &cpu->sregs[s].cache, + &plex86GuestCPU->sreg[s].des); + } + } +} + +void copyBochsDescriptorToPlex86(descriptor_t *plex86Desc, bx_descriptor_t *bochsDesc) +{ + // For now this function is a hack to convert from bochs descriptor + // cache fields which are parsed out into separate fields, to + // a packed descriptor format as stored in a real segment descriptor. + // This is user only for code/data segments and the LDTR/TR. + // Ideally, bochs would store the 64-bit segment descriptor when + // it loads segment registers. + + if (bochsDesc->valid == 0) { + memset(plex86Desc, 0, sizeof(*plex86Desc)); + return; + } + plex86Desc->p = bochsDesc->p; + plex86Desc->dpl = bochsDesc->dpl; + plex86Desc->type = (bochsDesc->segment<<4) | bochsDesc->type; + if (bochsDesc->segment || + bochsDesc->type == BX_SYS_SEGMENT_AVAIL_286_TSS || + bochsDesc->type == BX_SYS_SEGMENT_AVAIL_386_TSS || + bochsDesc->type == BX_SYS_SEGMENT_LDT) + { + // Code/Data segment, LDT or TSS + Bit32u limit = bochsDesc->u.segment.limit_scaled; + plex86Desc->limit_low = limit; // Only lower 16-bits. + plex86Desc->limit_high = limit >> 16; + Bit32u base = bochsDesc->u.segment.base; + plex86Desc->base_low = base; + plex86Desc->base_med = base >> 16; + plex86Desc->base_high = base >> 24; + plex86Desc->avl = bochsDesc->u.segment.avl; + plex86Desc->reserved = 0; + plex86Desc->d_b = bochsDesc->u.segment.d_b; + plex86Desc->g = bochsDesc->u.segment.g; + } + else { + BX_PANIC(("copyBochsDescriptorToPlex86: desc type = %u.", + bochsDesc->type)); + } +} + +void copyPlex86DescriptorToBochs(BX_CPU_C *cpu, + bx_descriptor_t *bochsDesc, descriptor_t *plex86Desc) +{ + Bit32u dword1, dword2, *dwordPtr; + dwordPtr = (Bit32u *) plex86Desc; + + /* We can assume little endian, since we're running an x86 VM. */ + dword1 = dwordPtr[0]; + dword2 = dwordPtr[1]; + + parse_descriptor(dword1, dword2, bochsDesc); +} + +unsigned plex86RegisterGuestMemory(Bit8u *vector, unsigned bytes) +{ + plex86IoctlRegisterMem_t ioctlMsg; + + if (plex86FD < 0) { + // If the plex86 File Descriptor has not been opened yet. + if (!openFD()) { + return(0); // Error. + } + } + + if (bytes & 0x3fffff) { + // Memory size must be multiple of 4Meg. + fprintf(stderr, "plex86: RegisterGuestMemory: memory size of %u bytes" + "is not a 4Meg increment.\n", bytes); + return(0); // Error. + } + if (((unsigned)vector) & 0xfff) { + // Memory vector must be page aligned. + fprintf(stderr, "plex86: RegisterGuestMemory: vector not page aligned."); + return(0); // Error. + } + ioctlMsg.nMegs = bytes >> 20; + ioctlMsg.guestPhyMemVector = (Bit32u) vector; + ioctlMsg.logBufferWindow = (Bit32u) plex86PrintBuffer; + ioctlMsg.guestCPUWindow = (Bit32u) plex86GuestCPU; + if (ioctl(plex86FD, PLEX86_REGISTER_MEMORY, &ioctlMsg) == -1) { + return(0); // Error. + } + plex86MemSize = bytes; + + /* For now... */ +plex86State |= Plex86StateMemAllocated; +plex86State |= Plex86StateMMapPhyMem; +plex86State |= Plex86StateMMapPrintBuffer; +plex86State |= Plex86StateMMapGuestCPU; +// Zero out printbuffer and guestcpu here? + + fprintf(stderr, "plex86: RegisterGuestMemory: %uMB succeeded.\n", + ioctlMsg.nMegs); + return(1); // OK. +} + +unsigned plex86UnregisterGuestMemory(Bit8u *vector, unsigned bytes) +{ + return(1); // OK. +} diff --git a/bochs/plex86-interface.h b/bochs/plex86-interface.h new file mode 100644 index 00000000..46d1d062 --- /dev/null +++ b/bochs/plex86-interface.h @@ -0,0 +1,37 @@ +/////////////////////////////////////////////////////////////////////// +// $Id$ +/////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002 Kevin P. Lawton +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +/////////////////////////////////////////////////////////////////////// + +#include "plex86/plex86.h" + +#define Plex86StateMemAllocated 0x01 +#define Plex86StateMMapPhyMem 0x02 +#define Plex86StateMMapPrintBuffer 0x04 +#define Plex86StateMMapGuestCPU 0x08 +#define Plex86StateReady 0x0f /* All bits set. */ + +extern unsigned plex86State; +extern int plex86FD; + +extern unsigned plex86CpuInfo(BX_CPU_C *cpu); +extern unsigned plex86TearDown(void); +extern unsigned plex86ExecuteInVM(BX_CPU_C *cpu); +extern unsigned plex86RegisterGuestMemory(Bit8u *vector, unsigned bytes); +extern unsigned plex86UnregisterGuestMemory(Bit8u *vector, unsigned bytes); diff --git a/bochs/plex86/COPYING b/bochs/plex86/COPYING new file mode 100644 index 00000000..654ead3a --- /dev/null +++ b/bochs/plex86/COPYING @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/bochs/plex86/Makefile.in b/bochs/plex86/Makefile.in new file mode 100644 index 00000000..f0b8879e --- /dev/null +++ b/bochs/plex86/Makefile.in @@ -0,0 +1,46 @@ +# plex86: run multiple x86 operating systems concurrently +# Copyright (C) 1999-2000 Kevin P. Lawton +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +.PHONY: all clean dist-clean + + +# Get variables from shell, or override if specified to make +CC = @CC@ +CFLAGS = @CFLAGS@ +LDFLAGS = @LDFLAGS@ + +srcdir = @srcdir@ +VPATH = @srcdir@ + +MDEFINES = CC="$(CC)" CFLAGS="$(CFLAGS)" \ + LDFLAGS="$(LDFLAGS)" + +all: + $(MAKE) -C kernel $(MDEFINES) + + +clean: + $(MAKE) -C kernel clean + +dist-clean: + $(MAKE) -C kernel dist-clean + /bin/rm -f config.status config.cache config.log + /bin/rm -f Makefile config.h + +Makefile: Makefile.in config.status + CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) config.status + diff --git a/bochs/plex86/PERFORMANCE b/bochs/plex86/PERFORMANCE new file mode 100644 index 00000000..6ceef828 --- /dev/null +++ b/bochs/plex86/PERFORMANCE @@ -0,0 +1,17 @@ +PERFORMANCE +=========== + +Optimize functions in util-nexus.c: mon_memzero, mon_memcpy, mon_memset + They could be done a lot more efficiently. + Perhaps make mon_memzero function specifically for pages. + +Pseudo devices and special guest-OS specific device drivers for + disk/network/video/etc and an associated architecture. This would + let us pass data more quickly and prevent a lot of emulation overhead. + The real device emulation could plug into the same architecture as + the pseudo devices. + + +Fix extra CR3 reload in nexus.S + +Alignment of routines in mon-fault.c diff --git a/bochs/plex86/TODO b/bochs/plex86/TODO new file mode 100644 index 00000000..02aa87b0 --- /dev/null +++ b/bochs/plex86/TODO @@ -0,0 +1,80 @@ +Main monitor loop should compare cycles burned thus far vs + cycles requested, so it doesn't keep bopping back and forth + between host-kernel and monitor spaces without returning to + user space. + +Fix monPrint and friends. +monpanic breaks up into 2 monprints which hit user space twice. + +Could put the GDT/LDT in linear memory where the guest + expects them. + +Synchronize page writes with iCache in bochs. + +Deal with cycle counts of guest execution in VM, and in + bochs/plex86 shim. + +Deal with page_usage. How do we update this between timeslices? + Do we always clear it? Maybe we should keep a log of things to + clear (page_usage, GDT entries, PDE entries, ...) and clear those + before returning to user space. + +GDT entries for guest need to be cleared upon return from guest + execution, or just cleared before invocation of the guest. + +Task segment must be a 32-bit'er. + +Save/restore floating point state of host/VM. + +deduct off some cycles for the IRET/int sequence. + +Conditions for bochs compile using plex86: + - Not compiled for debug + - x86 host + - Not PCI supported (for now). + +paging-mon.c: We can eliminate any code other than CPL==3. + +Fix extra PDBR reload in nexus.S + +Manipulation/reading of host page tables needs to be SMP/preempt + compatible. Need to do spin-lock (big kernel lock for old Linux) + on vma. + +==================== From previous plex86 TODO file ==================== + + This is a list of the major tasks/achievements/milestones yet to-do. + We should keep this list prioritized, creating sort of a road map. + Hopefully, this will reduce duplicate suggestions on the developers + channels, and let people know where we are in the development process. + Entries listed first have highest priority. + + + - Fix plex86 on Linux 2.4.x/SMP or with 1P and LAPIC enabled. + + - Save FPU state on host <--> monitor context switch. + + - Special guest-specific drivers and special emulated pseudo-devices + for faster graphics/network/disk access. + + - Allow some of the inactive guest pages be host swappable. + Currently, all pages are locked down. + + - Many performance enhancements (see PERFORMANCE) + + - Allow memory to be mapped anywhere in the physical address + space. + + - Allow certain guest pages to be swap eligible by the host. + This means they will have to be unavailable by the guest + during that time. Need a dynamic algorith for this. + + - Test on 2.4 with SMP/APIC enabled on single processor machine. + + - Deal with guest use of TF. + + - Deal with LDT + + +unallocVmPages/unreserve_guest_pages called twice, + release & teardown. diff --git a/bochs/plex86/config.h.in b/bochs/plex86/config.h.in new file mode 100644 index 00000000..a9e0fd7d --- /dev/null +++ b/bochs/plex86/config.h.in @@ -0,0 +1,63 @@ +/* our plex86 compile time configuration options will go here */ + +#ifndef _CONFIG_H_ +#define _CONFIG_H_ + +#define VERSION "Plex86 2002/07/11" +#define BUGSMAIL "plex86-devel@mail.freesoftware.fsf.org" + +/* Might need these for some host OS. */ +#define SIZEOF_UNSIGNED_CHAR 0 +#define SIZEOF_UNSIGNED_SHORT 0 +#define SIZEOF_UNSIGNED_INT 0 +#define SIZEOF_UNSIGNED_LONG 0 +#define SIZEOF_UNSIGNED_LONG_LONG 0 + +#if SIZEOF_UNSIGNED_CHAR != 1 +# error "sizeof (unsigned char) != 1" +#else + typedef unsigned char Bit8u; + typedef signed char Bit8s; +#endif + +#if SIZEOF_UNSIGNED_SHORT != 2 +# error "sizeof (unsigned short) != 2" +#else + typedef unsigned short Bit16u; + typedef signed short Bit16s; +#endif + +#if SIZEOF_UNSIGNED_INT == 4 + typedef unsigned int Bit32u; + typedef signed int Bit32s; +#elif SIZEOF_UNSIGNED_LONG == 4 + typedef unsigned long Bit32u; + typedef signed long Bit32s; +#else +# error "can't find sizeof(type) of 4 bytes!" +#endif + +#if SIZEOF_UNSIGNED_LONG == 8 + typedef unsigned long Bit64u; + typedef signed long Bit64s; +#elif SIZEOF_UNSIGNED_LONG_LONG == 8 + typedef unsigned long long Bit64u; + typedef signed long long Bit64s; +#else +# error "can't find data type of 8 bytes" +#endif + +typedef unsigned int Boolean; + +/* + * NetBSD just has off_t, which is 64 bits, not loff_t. + */ +#ifdef __NetBSD__ +typedef unsigned long long loff_t; +#endif + + +/* Some plex86 customization options. */ +#define ANAL_CHECKS 1 + +#endif /* _CONFIG_H_ */ diff --git a/bochs/plex86/configure b/bochs/plex86/configure new file mode 100755 index 00000000..03395e23 --- /dev/null +++ b/bochs/plex86/configure @@ -0,0 +1,2535 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --with-x use the X Window System" +ac_help="$ac_help + --with-WinNT WinNT host" +ac_help="$ac_help + --with-BeOS BeOS host" +ac_help="$ac_help + --with-Linux Linux host" +ac_help="$ac_help + --with-NetBSD NetBSD host" +ac_help="$ac_help + --with-FreeBSD FreeBSD host" +ac_help="$ac_help + --with-null No real host" +ac_help="$ac_help + --with-linux-source=dir Linux kernel source dir" +ac_help="$ac_help + --with-netbsd-source=dir NetBSD kernel source dir" +ac_help="$ac_help + --with-freebsd-source=dir FreeBSD kernel source dir" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=COPYING + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + + + + + + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:553: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:583: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:634: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:666: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 677 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:708: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:713: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:741: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:773: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:802: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:831: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:869: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:886: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + +# If we find X, set shell vars x_includes and x_libraries to the +# paths, otherwise set no_x=yes. +# Uses ac_ vars as temps to allow command line to override cache and checks. +# --without-x overrides everything else, but does not touch the cache. +echo $ac_n "checking for X""... $ac_c" 1>&6 +echo "configure:915: checking for X" >&5 + +# Check whether --with-x or --without-x was given. +if test "${with_x+set}" = set; then + withval="$with_x" + : +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then + # Both variables are already set. + have_x=yes + else +if eval "test \"`echo '$''{'ac_cv_have_x'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=NO ac_x_libraries=NO +rm -fr conftestdir +if mkdir conftestdir; then + cd conftestdir + # Make sure to not put "make" in the Imakefile rules, since we grep it out. + cat > Imakefile <<'EOF' +acfindx: + @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' +EOF + if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. + eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl; do + if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && + test -f $ac_im_libdir/libX11.$ac_extension; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case "$ac_im_incroot" in + /usr/include) ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes="$ac_im_incroot" ;; + esac + case "$ac_im_usrlibdir" in + /usr/lib | /lib) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries="$ac_im_usrlibdir" ;; + esac + fi + cd .. + rm -fr conftestdir +fi + +if test "$ac_x_includes" = NO; then + # Guess where to find include files, by looking for this one X11 .h file. + test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h + + # First, try using that file with no special directory specified. +cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:982: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + # We can compile using X headers with no special include directory. +ac_x_includes= +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + # Look for the header file in a standard set of common directories. +# Check X11 before X11Rn because it is often a symlink to the current release. + for ac_dir in \ + /usr/X11/include \ + /usr/X11R6/include \ + /usr/X11R5/include \ + /usr/X11R4/include \ + \ + /usr/include/X11 \ + /usr/include/X11R6 \ + /usr/include/X11R5 \ + /usr/include/X11R4 \ + \ + /usr/local/X11/include \ + /usr/local/X11R6/include \ + /usr/local/X11R5/include \ + /usr/local/X11R4/include \ + \ + /usr/local/include/X11 \ + /usr/local/include/X11R6 \ + /usr/local/include/X11R5 \ + /usr/local/include/X11R4 \ + \ + /usr/X386/include \ + /usr/x386/include \ + /usr/XFree86/include/X11 \ + \ + /usr/include \ + /usr/local/include \ + /usr/unsupported/include \ + /usr/athena/include \ + /usr/local/x11r5/include \ + /usr/lpp/Xamples/include \ + \ + /usr/openwin/include \ + /usr/openwin/share/include \ + ; \ + do + if test -r "$ac_dir/$x_direct_test_include"; then + ac_x_includes=$ac_dir + break + fi + done +fi +rm -f conftest* +fi # $ac_x_includes = NO + +if test "$ac_x_libraries" = NO; then + # Check for the libraries. + + test -z "$x_direct_test_library" && x_direct_test_library=Xt + test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc + + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS="$LIBS" + LIBS="-l$x_direct_test_library $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + LIBS="$ac_save_LIBS" +# We can link X programs with no special library path. +ac_x_libraries= +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + LIBS="$ac_save_LIBS" +# First see if replacing the include by lib works. +# Check X11 before X11Rn because it is often a symlink to the current release. +for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \ + /usr/X11/lib \ + /usr/X11R6/lib \ + /usr/X11R5/lib \ + /usr/X11R4/lib \ + \ + /usr/lib/X11 \ + /usr/lib/X11R6 \ + /usr/lib/X11R5 \ + /usr/lib/X11R4 \ + \ + /usr/local/X11/lib \ + /usr/local/X11R6/lib \ + /usr/local/X11R5/lib \ + /usr/local/X11R4/lib \ + \ + /usr/local/lib/X11 \ + /usr/local/lib/X11R6 \ + /usr/local/lib/X11R5 \ + /usr/local/lib/X11R4 \ + \ + /usr/X386/lib \ + /usr/x386/lib \ + /usr/XFree86/lib/X11 \ + \ + /usr/lib \ + /usr/local/lib \ + /usr/unsupported/lib \ + /usr/athena/lib \ + /usr/local/x11r5/lib \ + /usr/lpp/Xamples/lib \ + /lib/usr/lib/X11 \ + \ + /usr/openwin/lib \ + /usr/openwin/share/lib \ + ; \ +do + for ac_extension in a so sl; do + if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f conftest* +fi # $ac_x_libraries = NO + +if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then + # Didn't find X anywhere. Cache the known absence of X. + ac_cv_have_x="have_x=no" +else + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes \ + ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" +fi +fi + fi + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + echo "$ac_t""$have_x" 1>&6 + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes \ + ac_x_includes=$x_includes ac_x_libraries=$x_libraries" + echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6 +fi + +if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. + cat >> confdefs.h <<\EOF +#define X_DISPLAY_MISSING 1 +EOF + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi + + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + # For Solaris; some versions of Sun CC require a space after -R and + # others require no space. Words are not sufficient . . . . + case "`(uname -sr) 2>/dev/null`" in + "SunOS 5"*) + echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6 +echo "configure:1164: checking whether -R must be followed by a space" >&5 + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_R_nospace=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_R_nospace=no +fi +rm -f conftest* + if test $ac_R_nospace = yes; then + echo "$ac_t""no" 1>&6 + X_LIBS="$X_LIBS -R$x_libraries" + else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_R_space=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_R_space=no +fi +rm -f conftest* + if test $ac_R_space = yes; then + echo "$ac_t""yes" 1>&6 + X_LIBS="$X_LIBS -R $x_libraries" + else + echo "$ac_t""neither works" 1>&6 + fi + fi + LIBS="$ac_xsave_LIBS" + esac + fi + + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. + + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And karl@cs.umb.edu says + # the Alpha needs dnet_stub (dnet does not exist). + echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6 +echo "configure:1229: checking for dnet_ntoa in -ldnet" >&5 +ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldnet $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +else + echo "$ac_t""no" 1>&6 +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6 +echo "configure:1270: checking for dnet_ntoa in -ldnet_stub" >&5 +ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldnet_stub $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +else + echo "$ac_t""no" 1>&6 +fi + + fi + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # chad@anasazi.com says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to dickey@clark.net. + echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 +echo "configure:1318: checking for gethostbyname" >&5 +if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gethostbyname(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname) +choke me +#else +gethostbyname(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_gethostbyname=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_gethostbyname=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +fi + + if test $ac_cv_func_gethostbyname = no; then + echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 +echo "configure:1367: checking for gethostbyname in -lnsl" >&5 +ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lnsl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +else + echo "$ac_t""no" 1>&6 +fi + + fi + + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says simon@lia.di.epfl.ch: it contains + # gethostby* variants that don't use the nameserver (or something). + # -lsocket must be given before -lnsl if both are needed. + # We assume that if connect needs -lnsl, so does gethostbyname. + echo $ac_n "checking for connect""... $ac_c" 1>&6 +echo "configure:1416: checking for connect" >&5 +if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char connect(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_connect) || defined (__stub___connect) +choke me +#else +connect(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_connect=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_connect=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +fi + + if test $ac_cv_func_connect = no; then + echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 +echo "configure:1465: checking for connect in -lsocket" >&5 +ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +else + echo "$ac_t""no" 1>&6 +fi + + fi + + # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX. + echo $ac_n "checking for remove""... $ac_c" 1>&6 +echo "configure:1508: checking for remove" >&5 +if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char remove(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_remove) || defined (__stub___remove) +choke me +#else +remove(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1536: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_remove=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_remove=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'remove`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +fi + + if test $ac_cv_func_remove = no; then + echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6 +echo "configure:1557: checking for remove in -lposix" >&5 +ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lposix $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +else + echo "$ac_t""no" 1>&6 +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + echo $ac_n "checking for shmat""... $ac_c" 1>&6 +echo "configure:1600: checking for shmat" >&5 +if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shmat(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shmat) || defined (__stub___shmat) +choke me +#else +shmat(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_shmat=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_shmat=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'shmat`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +fi + + if test $ac_cv_func_shmat = no; then + echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6 +echo "configure:1649: checking for shmat in -lipc" >&5 +ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lipc $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +else + echo "$ac_t""no" 1>&6 +fi + + fi + fi + + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS="$LDFLAGS" + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # --interran@uluru.Stanford.EDU, kb@cs.umb.edu. + echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6 +echo "configure:1701: checking for IceConnectionNumber in -lICE" >&5 +ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +else + echo "$ac_t""no" 1>&6 +fi + + LDFLAGS="$ac_save_LDFLAGS" + +fi + + +echo $ac_n "checking for inline""... $ac_c" 1>&6 +echo "configure:1746: checking for inline" >&5 +if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_inline=$ac_kw; break +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +done + +fi + +echo "$ac_t""$ac_cv_c_inline" 1>&6 +case "$ac_cv_c_inline" in + inline | yes) ;; + no) cat >> confdefs.h <<\EOF +#define inline +EOF + ;; + *) cat >> confdefs.h <&6 +echo "configure:1786: checking size of unsigned char" >&5 +if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_char'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_sizeof_unsigned_char=0 +else + cat > conftest.$ac_ext < +#include +main() +{ + FILE *f=fopen("conftestval", "w"); + if (!f) exit(1); + fprintf(f, "%d\n", sizeof(unsigned char)); + exit(0); +} +EOF +if { (eval echo configure:1806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_sizeof_unsigned_char=`cat conftestval` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_sizeof_unsigned_char=0 +fi +rm -fr conftest* +fi + +fi +echo "$ac_t""$ac_cv_sizeof_unsigned_char" 1>&6 +cat >> confdefs.h <&6 +echo "configure:1826: checking size of unsigned short" >&5 +if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_short'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_sizeof_unsigned_short=0 +else + cat > conftest.$ac_ext < +#include +main() +{ + FILE *f=fopen("conftestval", "w"); + if (!f) exit(1); + fprintf(f, "%d\n", sizeof(unsigned short)); + exit(0); +} +EOF +if { (eval echo configure:1846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_sizeof_unsigned_short=`cat conftestval` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_sizeof_unsigned_short=0 +fi +rm -fr conftest* +fi + +fi +echo "$ac_t""$ac_cv_sizeof_unsigned_short" 1>&6 +cat >> confdefs.h <&6 +echo "configure:1866: checking size of unsigned int" >&5 +if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_int'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_sizeof_unsigned_int=0 +else + cat > conftest.$ac_ext < +#include +main() +{ + FILE *f=fopen("conftestval", "w"); + if (!f) exit(1); + fprintf(f, "%d\n", sizeof(unsigned int)); + exit(0); +} +EOF +if { (eval echo configure:1886: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_sizeof_unsigned_int=`cat conftestval` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_sizeof_unsigned_int=0 +fi +rm -fr conftest* +fi + +fi +echo "$ac_t""$ac_cv_sizeof_unsigned_int" 1>&6 +cat >> confdefs.h <&6 +echo "configure:1906: checking size of unsigned long" >&5 +if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_long'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_sizeof_unsigned_long=0 +else + cat > conftest.$ac_ext < +#include +main() +{ + FILE *f=fopen("conftestval", "w"); + if (!f) exit(1); + fprintf(f, "%d\n", sizeof(unsigned long)); + exit(0); +} +EOF +if { (eval echo configure:1926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_sizeof_unsigned_long=`cat conftestval` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_sizeof_unsigned_long=0 +fi +rm -fr conftest* +fi + +fi +echo "$ac_t""$ac_cv_sizeof_unsigned_long" 1>&6 +cat >> confdefs.h <&6 +echo "configure:1946: checking size of unsigned long long" >&5 +if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_long_long'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_sizeof_unsigned_long_long=0 +else + cat > conftest.$ac_ext < +#include +main() +{ + FILE *f=fopen("conftestval", "w"); + if (!f) exit(1); + fprintf(f, "%d\n", sizeof(unsigned long long)); + exit(0); +} +EOF +if { (eval echo configure:1966: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_sizeof_unsigned_long_long=`cat conftestval` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_sizeof_unsigned_long_long=0 +fi +rm -fr conftest* +fi + +fi +echo "$ac_t""$ac_cv_sizeof_unsigned_long_long" 1>&6 +cat >> confdefs.h < confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +DEFS=-DHAVE_CONFIG_H + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir + +trap 'rm -fr `echo " +Makefile +kernel/Makefile + config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@CC@%$CC%g +s%@SET_MAKE@%$SET_MAKE%g +s%@RANLIB@%$RANLIB%g +s%@CPP@%$CPP%g +s%@X_CFLAGS@%$X_CFLAGS%g +s%@X_PRE_LIBS@%$X_PRE_LIBS%g +s%@X_LIBS@%$X_LIBS%g +s%@X_EXTRA_LIBS@%$X_EXTRA_LIBS%g +s%@LINUX_SRC@%$LINUX_SRC%g +s%@NETBSD_SRC@%$NETBSD_SRC%g +s%@FREEBSD_SRC@%$FREEBSD_SRC%g +s%@HOST_O@%$HOST_O%g +s%@KERNEL_TARGET@%$KERNEL_TARGET%g +s%@HOST_TARGET@%$HOST_TARGET%g +s%@HOST_CLEAN@%$HOST_CLEAN%g +s%@HOSTOS@%$HOSTOS%g +s%@FULL_LINK@%$FULL_LINK%g +s%@SUFFIX_LINE@%$SUFFIX_LINE%g +s%@CPP_SUFFIX@%$CPP_SUFFIX%g +s%@DASH@%$DASH%g +s%@SLASH@%$SLASH%g +s%@CXXFP@%$CXXFP%g +s%@CFP@%$CFP%g +s%@OFP@%$OFP%g +s%@MAKELIB@%$MAKELIB%g +s%@RMCOMMAND@%$RMCOMMAND%g +s%@EXE@%$EXE%g +s%@COMMAND_SEPARATOR@%$COMMAND_SEPARATOR%g +s%@CD_UP_ONE@%$CD_UP_ONE%g +s%@CD_UP_TWO@%$CD_UP_TWO%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +if test "${CONFIG_HEADERS+set}" != set; then +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +fi +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + cat $ac_file_inputs > conftest.in + +EOF + +# Transform confdefs.h into a sed script conftest.vals that substitutes +# the proper values into config.h.in to produce config.h. And first: +# Protect against being on the right side of a sed subst in config.status. +# Protect against being in an unquoted here document in config.status. +rm -f conftest.vals +cat > conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >> conftest.vals <<\EOF +s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. + +rm -f conftest.tail +while : +do + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/bochs/plex86/configure.in b/bochs/plex86/configure.in new file mode 100644 index 00000000..1193c712 --- /dev/null +++ b/bochs/plex86/configure.in @@ -0,0 +1,169 @@ +dnl // Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.4) +AC_INIT(COPYING) +AC_CONFIG_HEADER(config.h) + +changequote(<<, >>) +changequote([, ]) + +AC_PROG_CC +AC_PROG_MAKE_SET +AC_PROG_RANLIB + +AC_PATH_XTRA + +AC_C_INLINE +AC_CHECK_SIZEOF(unsigned char, 0) +AC_CHECK_SIZEOF(unsigned short, 0) +AC_CHECK_SIZEOF(unsigned int, 0) +AC_CHECK_SIZEOF(unsigned long, 0) +AC_CHECK_SIZEOF(unsigned long long, 0) + +dnl When compiling with gcc, use appropriate warning level +if test "$GCC" = "yes"; then + CFLAGS="$CFLAGS -Wall -Wstrict-prototypes" +fi +if test "$GXX" = "yes"; then + CXXFLAGS="$CXXFLAGS -Wall -Wstrict-prototypes" +fi + +AC_ARG_WITH(WinNT, + [ --with-WinNT WinNT host], + ) + +AC_ARG_WITH(BeOS, + [ --with-BeOS BeOS host], + ) + +AC_ARG_WITH(Linux, + [ --with-Linux Linux host], + ) + +AC_ARG_WITH(NetBSD, + [ --with-NetBSD NetBSD host], + ) + +AC_ARG_WITH(FreeBSD, + [ --with-FreeBSD FreeBSD host], + ) + +AC_ARG_WITH(null, + [ --with-null No real host], + ) + +AC_ARG_WITH(linux-source, + [ --with-linux-source=dir Linux kernel source dir], + [ LINUX_SRC="$withval" ], + [ LINUX_SRC="/lib/modules/`uname -r`/build" ] + ) +AC_SUBST(LINUX_SRC) + +AC_ARG_WITH(netbsd-source, + [ --with-netbsd-source=dir NetBSD kernel source dir], + [ NETBSD_SRC="$withval" ], + [ NETBSD_SRC="/sys" ] + ) +AC_SUBST(NETBSD_SRC) + +AC_ARG_WITH(freebsd-source, + [ --with-freebsd-source=dir FreeBSD kernel source dir], + [ FREEBSD_SRC="$withval" ], + [ FREEBSD_SRC="/sys" ] + ) +AC_SUBST(FREEBSD_SRC) + +dnl // make sure Linux is default host if no other chosen +if test "$with_Linux" != yes && \ + test "$with_BeOS" != yes && \ + test "$with_NetBSD" != yes && \ + test "$with_FreeBSD" != yes && \ + test "$with_null" != yes && \ + test "$with_WinNT" != yes; then + with_Linux=yes +fi + +if test "$with_Linux" = yes; then + HOST_O=host-linux.o + KERNEL_TARGET=plex86.o + HOST_TARGET=linux-target + HOST_CLEAN=linux-clean + HOSTOS=LINUX + FULL_LINK= +elif test "$with_BeOS" = yes; then + HOST_O=host-beos.o + KERNEL_TARGET=plex86 + HOST_TARGET= + HOST_CLEAN= + HOSTOS=BEOS + FULL_LINK= +elif test "$with_NetBSD" = yes; then + HOST_O=host-netbsd.o + KERNEL_TARGET=plex86.o + HOST_TARGET=netbsd-target + HOST_CLEAN=netbsd-clean + HOSTOS=NETBSD + FULL_LINK= +elif test "$with_FreeBSD" = yes; then + HOST_O=host-freebsd.o + KERNEL_TARGET=plex86.o + HOST_TARGET=freebsd-target + HOST_CLEAN=freebsd-clean + HOSTOS=FREEBSD + FULL_LINK= +elif test "$with_null" = yes; then + HOST_O=host-null.o + KERNEL_TARGET=plex86.o + HOST_TARGET=null-target + HOST_CLEAN=null-clean + HOSTOS=NULL + FULL_LINK='$(CC) -o a.out plex86.o' +else + echo " " + echo "ERROR: Your system is not supported yet" + exit 1 +fi + + +dnl // code to test if CFLAGS is set. If not, use defaults +AC_SUBST(HOST_O) +AC_SUBST(KERNEL_TARGET) +AC_SUBST(HOST_TARGET) +AC_SUBST(HOST_CLEAN) +AC_SUBST(HOSTOS) +AC_SUBST(FULL_LINK) + +SUFFIX_LINE='.SUFFIXES: .cc' +CPP_SUFFIX='cc' +DASH="-" +SLASH="/" +CXXFP="" +CFP="" +OFP="-o " +MAKELIB="ar rv \$@" +RMCOMMAND="rm -f " +EXE="" +COMMAND_SEPARATOR="&& \\" +CD_UP_ONE="echo done" +CD_UP_TWO="echo done" +INSTRUMENT_DIR='instrument/' +VIDEO_OBJS='$(VIDEO_OBJS_VGA)' + +AC_SUBST(SUFFIX_LINE) +AC_SUBST(CPP_SUFFIX) +AC_SUBST(DASH) +AC_SUBST(SLASH) +AC_SUBST(CXXFP) +AC_SUBST(CFP) +AC_SUBST(OFP) +AC_SUBST(MAKELIB) +AC_SUBST(RMCOMMAND) +AC_SUBST(EXE) +AC_SUBST(COMMAND_SEPARATOR) +AC_SUBST(CD_UP_ONE) +AC_SUBST(CD_UP_TWO) + +AC_OUTPUT([ +Makefile +kernel/Makefile +]) diff --git a/bochs/plex86/descriptor.h b/bochs/plex86/descriptor.h new file mode 100644 index 00000000..de3386c7 --- /dev/null +++ b/bochs/plex86/descriptor.h @@ -0,0 +1,128 @@ +/************************************************************************ + * $Id$ + ************************************************************************ + * + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * descriptor.h: defines for descriptors and selectors + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#ifndef __DESCRIPTOR_H__ +#define __DESCRIPTOR_H__ + +#define SET_DESCRIPTOR(d, B, L, G, DB, AVL, P, DPL, T) {\ + d.base_high = (B) >> 24;\ + d.base_med = ((B) >> 16) & 0xff;\ + d.base_low = (B) & 0xffff;\ + d.limit_high = ((L) & 0xf0000) >> 16;\ + d.limit_low = ((L) & 0x0ffff);\ + d.g = (G);\ + d.d_b = (DB);\ + d.reserved = 0;\ + d.avl = (AVL);\ + d.p = (P);\ + d.dpl = (DPL);\ + d.type = (T);\ + } + +typedef struct { + Bit16u limit_low; /* limit 0..15 */ + Bit16u base_low; /* base 0..15 */ + Bit8u base_med; /* base 16..23 */ + unsigned type:5; /* S/type field */ + unsigned dpl:2; /* DPL */ + unsigned p:1; /* present */ + unsigned limit_high:4; /* limit 16..19 */ + unsigned avl:1; /* Available for use by system software */ + unsigned reserved:1; /* 0 */ + unsigned d_b:1; /* D/B */ + unsigned g:1; /* granularity */ + Bit8u base_high; /* base 24..31 */ + } __attribute__ ((packed)) descriptor_t; + +typedef union { + struct { + Bit16u rpl:2; + Bit16u ti:1; + Bit16u index:13; + } __attribute__ ((packed)) fields; + Bit16u raw; + } __attribute__ ((packed)) selector_t; + +#define D_DPL0 0 +#define D_DPL1 1 +#define D_DPL2 2 +#define D_DPL3 3 + +#define D_BG 0 +#define D_PG 1 + +#define D_D16 0 +#define D_D32 1 + +#define D_NOTPRESENT 0 +#define D_PRESENT 1 + +#define D_S 0x10 +#define D_DATA 0x10 +#define D_CODE 0x18 +#define D_EXECUTE 0x08 +#define D_EXDOWN 0x04 +#define D_CONFORM 0x04 +#define D_WRITE 0x02 /* writable (data segment) */ +#define D_READ 0x02 /* readable (code segment) */ +#define D_ACCESSED 0x01 + +#define D_LDT 0x02 /* LDT segment */ +#define D_TASK 0x05 /* Task gate */ +#define D_TSS 0x09 /* TSS */ +#define D_CALL 0x0C /* 386 call gate */ +#define D_INT 0x0E /* 386 interrupt gate */ +#define D_TRAP 0x0F /* 386 trap gate */ + +#define D_AVL0 0 +#define D_AVL1 1 + +#define LimitOfDataDescriptor(d) \ + ( d.g ? \ + ( ((d.type & 0xc) == 0x4) ? \ + ((d.limit_high << 16) | d.limit_low)<<12 : \ + ((d.limit_high << 16) | d.limit_low)<<12 | 0xfff) : \ + ((d.limit_high << 16) | d.limit_low) ) + +#define BaseOfDescriptor(d) \ + ( (d.base_low) | (d.base_med << 16) | (d.base_high << 24) ) + +/* + * selector stuff + */ + +#define Selector(sel, ti, rpl) (((sel)<<3) | ((ti)<<2) | (rpl)) +#define RPL0 0 +#define RPL1 1 +#define RPL2 2 +#define RPL3 3 + +typedef struct { + Bit16u limit; + Bit32u base; + } __attribute__ ((packed)) gdt_info_t; + + +#endif /* __DESCRIPTOR_H__ */ diff --git a/bochs/plex86/kernel/Makefile.in b/bochs/plex86/kernel/Makefile.in new file mode 100644 index 00000000..6650f69b --- /dev/null +++ b/bochs/plex86/kernel/Makefile.in @@ -0,0 +1,127 @@ +# plex86: run multiple x86 operating systems concurrently +# Copyright (C) 1999-2001 Kevin P. Lawton +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +CC = @CC@ +CFLAGS = @CFLAGS@ +LDFLAGS = @LDFLAGS@ +KERNEL_TARGET = @KERNEL_TARGET@ +HOST_TARGET = @HOST_TARGET@ +HOST_CLEAN = @HOST_CLEAN@ + +srcdir = @srcdir@ +VPATH = @srcdir@ + +LD = ld + +HOST_O = @HOST_O@ + +# extra kernel CFLAGS and LDFLAGS for each host OS +KCFLAGS_LINUX = -fno-strength-reduce -fomit-frame-pointer \ + -malign-loops=2 -malign-jumps=2 -malign-functions=2 \ + -D__KERNEL__ -I@LINUX_SRC@/include -DCPU=586 -DMODULE +KLDFLAGS_LINUX = -r + + +KCFLAGS_NULL = -fno-strength-reduce -fomit-frame-pointer \ + -malign-loops=2 -malign-jumps=2 -malign-functions=2 \ + -D__KERNEL__ -DCPU=586 +KLDFLAGS_NULL = -r + + +KCFLAGS_NETBSD = -fno-strength-reduce -nostdinc -fomit-frame-pointer \ + -malign-loops=2 -malign-jumps=2 -malign-functions=2 \ + -D_KERNEL -I@NETBSD_SRC@ -I@NETBSD_SRC@/arch -I. -D_LKM +KLDFLAGS_NETBSD = -r + + +KCFLAGS_FREEBSD = -fno-strength-reduce -nostdinc -fomit-frame-pointer \ + -malign-loops=2 -malign-jumps=2 -malign-functions=2 \ + -D_KERNEL -I@FREEBSD_SRC@ -I@FREEBSD_SRC@/sys -I. -D_LKM \ + -DFREEBSD_PLEX86_DEBUG +KLDFLAGS_FREEBSD = -r + +KCFLAGS_BEOS = +KLDFLAGS_BEOS = -nostdlib /boot/develop/lib/x86/_KERNEL_ + +KLDFLAGS = $(KLDFLAGS_@HOSTOS@) + +ALL_CFLAGS = $(CFLAGS) $(KCFLAGS_@HOSTOS@) -I$(srcdir)/include -I$(srcdir)/.. + + +.c.o: + $(CC) -c $(ALL_CFLAGS) $< +.S.o: + $(CC) -c $(ALL_CFLAGS) -D__ASSEMBLY__ $< + +main_target: $(HOST_TARGET) $(KERNEL_TARGET) + @FULL_LINK@ + +$(KERNEL_TARGET): $(HOST_O) monitor-host.o \ + nexus.o print-mon.o \ + util-nexus.o \ + fault-mon.o panic-mon.o \ + paging-mon.o monitor-mon.o + $(LD) $(KLDFLAGS) $^ -o $@ + +clean: $(HOST_CLEAN) main_clean + +main_clean: + /bin/rm -f *.o *.s $(KERNEL_TARGET) a.out + +dist-clean: clean + /bin/rm -f Makefile + +# Linux specific targets +linux-target: + +linux-clean: + +# Null specific targets +null-target: + +null-clean: + + +# NetBSD specific targets +netbsd-target: netbsd-machine + +netbsd-machine: + ln -sf @NETBSD_SRC@/arch/i386/include machine + +netbsd-clean: + /bin/rm -f machine + +# FreeBSD specific targets +freebsd-target: freebsd-machine + [ -r opt_posix.h ] || touch opt_posix.h + +freebsd-machine: + ln -sf @FREEBSD_SRC@/i386/include machine + +freebsd-clean: + /bin/rm -f opt_posix.h + /bin/rm -f machine + +# BeOS specific targets +beos-install: $(KERNEL_TARGET) + cp -f $(KERNEL_TARGET) /boot/home/config/add-ons/kernel/drivers/bin + mkdir -p /boot/home/config/add-ons/kernel/drivers/dev/misc + ln -sf ../../bin/$(KERNEL_TARGET) /boot/home/config/add-ons/kernel/drivers/dev/misc/$(KERNEL_TARGET) + +Makefile: Makefile.in ../config.status + cd ..; CONFIG_FILES=kernel/Makefile CONFIG_HEADERS= $(SHELL) config.status diff --git a/bochs/plex86/kernel/fault-mon.c b/bochs/plex86/kernel/fault-mon.c new file mode 100644 index 00000000..f9698f36 --- /dev/null +++ b/bochs/plex86/kernel/fault-mon.c @@ -0,0 +1,306 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * fault-mon.c: fault/int handlers for VM monitor - monitor space. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "plex86.h" +#define IN_MONITOR_SPACE +#include "monitor.h" + + + + + +/* The monitor stack frame. When an exception or interrupt occurrs + * during the execution of either guest or monitor code, the following + * values are pushed. + * + * ss + * esp + * eflags Values pushed by the CPU and interrupt stub. To simplify + * cs things, the stub pushes an error of zero for those + * eip events which don't naturally cause an error push, and + * error also pushes the vector of the exception/interrupt. + * vector + * + * eax + * ecx + * edx General registers, pushed with a PUSHA instruction, + * ebx by code below. + * + * ebp + * esi + * edi + * + * es + * ds Segment selectors, pushed by code below. + * fs + * gs + */ + +void handleMonFault(guest_context_t *monContext); + + static inline +Bit32u readCR2(void) +{ + Bit32u cr2; + asm volatile ("movl %%cr2, %0" : "=r" (cr2)); + return( cr2 ); +} + + +asm ( +".text \n\t" + +/* __handle_fault: This is called by all of the monitor's fault handler + * stubs. A fault could have originated from execution of the guest + * (due to virtualization conditions or natural fault generation) or + * from the monitor (currently only due to bugs in the monitor). + */ +".globl __handle_fault \n\t" +"__handle_fault: \n\t" +" pushal \n\t" /* Save general registers */ +" pushl %es \n\t" /* Save segment registers */ +" pushl %ds \n\t" +" pushl %fs \n\t" +" pushl %gs \n\t" +" movl 60(%esp), %eax \n\t" /* CS pushed by CPU from fault */ +" andl $3, %eax \n\t" /* Check CS.RPL bits */ +" jz __fault_from_mon \n\t" /* RPL0 means from monitor */ + +/* We have determined that the fault was from guest code. Prepare + * to call the monitor C code to do most of the fault handling. + */ +"__fault_from_guest: \n\t" +" movl %ss, %eax \n\t" /* Copy SS into DS/ES */ +" movl %eax, %ds \n\t" +" movl %eax, %es \n\t" +" cld \n\t" /* gcc-compiled code needs this */ +" pushl %esp \n\t" /* Push pointer to saved guest context for C call.*/ +" call handleGuestFault\n\t" /* Call the C monitor fault handler. */ +" addl $4, %esp \n\t" /* Remove arg from stack. */ +".globl __ret_to_guest \n\t" /* Fault handled, work back to guest. */ +"__ret_to_guest: \n\t" +/* Return to the guest. Restore registers from the monitor stack. */ +" popl %gs \n\t" /* Restore guest segments */ +" popl %fs \n\t" +" popl %ds \n\t" +" popl %es \n\t" +" popal \n\t" /* Restore guest general registers */ +" addl $8, %esp \n\t" /* Ignore vector and error dwords */ +" iret \n\t" /* Resume execution of guest */ + + +"__fault_from_mon: \n\t" +" cld \n\t" /* gcc-compiled code needs this */ +" pushl %esp \n\t" /* Push pointer to context. */ +" call handleMonFault \n\t" /* Call C code for real work */ +" addl $4, %esp \n\t" +/* Return to monitor. Restore state from the monitor stack. */ +"__ret_to_monitor: \n\t" +" popl %gs \n\t" /* Restore monitor segments */ +" popl %fs \n\t" +" popl %ds \n\t" +" popl %es \n\t" +" popal \n\t" /* Restore monitor general registers */ +" addl $8, %esp \n\t" /* ignore vector and error dwords */ +" iret \n\t" /* Resume execution of monitor */ + + +/* + * Hardware interrupt handler stub + */ +".globl __handle_int \n\t" /* Return to monitor code */ +"__handle_int: \n\t" +" pushal \n\t" /* Save guest general registers */ +" pushl %es \n\t" /* Save guest segment registers */ +" pushl %ds \n\t" +" pushl %fs \n\t" +" pushl %gs \n\t" + +" movl %ss, %eax \n\t" /* Copy SS into DS/ES */ +" movl %eax, %ds \n\t" +" movl %eax, %es \n\t" +" cld \n\t" /* gcc-compiled code needs this */ +" pushl %esp \n\t" +" call handleInt \n\t" /* monitor interrupt handler */ +" addl $4, %esp \n\t" +" cmpl $0x1, %eax \n\t" /* Was interrupt generated from monitor code? */ +" je __ret_to_monitor\n\t" /* Yes, so return to monitor code */ +" jmp __ret_to_guest \n\t" /* No, so return to guest code */ +); + + + + unsigned +handleInt(guest_context_t *context) +/* + * handleInt(): Redirect a hardware interrupt back to the host + */ +{ + nexus_t *nexus = (nexus_t *) (((Bit32u) context) & 0xfffff000); + vm_t *vm = (vm_t *) nexus->vm; + unsigned from_monitor; + Bit64u t1; + + t1 = vm_rdtsc(); + + if ( (context->cs & 0x0003) == 0x0003 ) { + /* End of elapsed guest execution duration. Add elapsed */ + /* cycles to time framework. */ + vm->system.cyclesElapsed += (t1 - vm->system.t0); + + from_monitor = 0; /* Event from guest code */ + } + else { + from_monitor = 1; /* Event from monitor code */ + } + + /* Interrupts are off naturally here. */ + vm->mon_request = MonReqRedirect; + vm->redirect_vector = context->vector; + vm->guest.__mon2host(); + return(from_monitor); +} + + + void +handleGuestFault(guest_context_t *context) +/* Handle a fault from the guest. Called from the assembly stub + * __handle_fault. + */ +{ + nexus_t *nexus = (nexus_t *) (((Bit32u) context) & 0xfffff000); + vm_t *vm = (vm_t *) nexus->vm; + Bit32u cr2 = readCR2(); + Bit64u t1; + + /* End of elapsed guest execution duration */ + t1 = vm_rdtsc(); + vm->system.cyclesElapsed += (t1 - vm->system.t0); + +#warning "Delete these checks" +#if ANAL_CHECKS + if ( !context->eflags.fields.if_ ) + monpanic(vm, "handleGuestFault: guest IF=0.\n"); + if ( context->eflags.fields.vm ) + monpanic(vm, "handleGuestFault: eflags.VM=1.\n"); +#endif + + STI(); + + switch ( context->vector ) { + case ExceptionDB: /* 1 */ + monpanic(vm, "handleGuestFault: #DB, method=%u not coded\n", + vm->executeMethod); +#if 0 + if (vm->executeMethod == RunGuestNMethodBreakpoint) { + /* Breakpoint generated because we requested it via TF=1 */ + } + else { + monpanic(vm, "handleGuestFault: #DB, method=%u not coded\n", + vm->executeMethod); + } +#endif + break; + + case ExceptionBR: /* 5 */ +monpanic(vm, "handleGuestFault: BR unfinished.\n"); + /* BOUND instruction fault; array index not in bounds */ +monpanic(vm, "handleGuestFault: emulate_exception was here.\n"); + /*emulate_exception(vm, context->vector, 0);*/ + break; + + case ExceptionDE: /* 0 */ + case ExceptionBP: /* 3 */ + case ExceptionOF: /* 4 */ + case ExceptionNM: /* 7 */ + case ExceptionMF: /* 16 */ + toHostGuestFault(vm, context->vector); + /*monpanic(vm, "handleGuestFault: DE/BP/OF/NM/MF unfinished.\n");*/ + /*monpanic(vm, "handleGuestFault: %u\n", context->vector);*/ + /* emulate_interrupt(vm, context->vector); */ + break; + + case ExceptionNP: /* 11 */ + case ExceptionSS: /* 12 */ + case ExceptionAC: /* 17 */ +monpanic(vm, "handleGuestFault: NP/SS/AC unfinished.\n"); + /* use emulate_xyz() */ + /*interrupt(vm, context->vector, 0, 1, context->error); */ + monpanic(vm, "handleGuestFault: %u\n", context->vector); + break; + + case ExceptionUD: /* 6 */ + case ExceptionGP: /* 13 */ + toHostGuestFault(vm, context->vector); + break; + + case ExceptionPF: /* 14 */ + guestPageFault(vm, context, cr2); + break; + + default: + monpanic(vm, "handleGuestFault: Unhandled Fault: %u\n", context->vector); + break; + } +} + + void +handleMonFault(guest_context_t *monContext) +{ + nexus_t *nexus = (nexus_t *) (((Bit32u) monContext) & 0xfffff000); + vm_t *vm = (vm_t *) nexus->vm; + + if (vm->inMonFault) + monpanic(vm, "handleMonFault called recursively.\n"); + vm->inMonFault = 1; +monpanic(vm, "handleMonFault: vector=%u\n", monContext->vector); + + /* Fault occurred inside monitor code. */ + + switch ( monContext->vector ) { + case ExceptionPF: + case ExceptionGP: + { + Bit32u cr2; + /*unsigned us, rw;*/ + + cr2 = readCR2(); + STI(); + + if (monContext->error & 0x8) /* If RSVD bits used in PDir */ + monpanic(vm, "handleMF: RSVD\n"); + /*us = G_GetCPL(vm)==3;*/ + /*rw = (monContext->error >> 1) & 1;*/ + monpanic(vm, "handleMF: \n"); + break; + } + + default: + monpanic(vm, "hMF: vector=%u\n", monContext->vector); + break; + } + + /*vm->abort_code = 1;*/ + /*monpanic_nomess(vm);*/ + CLI(); + vm->inMonFault = 0; +} diff --git a/bochs/plex86/kernel/freebsd/Makefile b/bochs/plex86/kernel/freebsd/Makefile new file mode 100644 index 00000000..1fcbe772 --- /dev/null +++ b/bochs/plex86/kernel/freebsd/Makefile @@ -0,0 +1,6 @@ +# FreeBSD Kernel module makefile + +SRCS= ../plex86.o +KMOD= plex86 + +.include diff --git a/bochs/plex86/kernel/host-beos.c b/bochs/plex86/kernel/host-beos.c new file mode 100644 index 00000000..d002ed72 --- /dev/null +++ b/bochs/plex86/kernel/host-beos.c @@ -0,0 +1,219 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include "plex86.h" +#include "monitor.h" + + +#define read_flags() ({ \ + unsigned int __dummy; \ + __asm__( \ + "pushfl\n\t" \ + "popl %0\n\t" \ + :"=r" (__dummy)); \ + __dummy; \ +}) +#define write_flags(x) \ + __asm__("push %0\n\tpopfl\n\t": :"r" (x)) + + + +struct cookie { + sem_id sem; + + int mon_ok; + + uint32 irq_cnt[17]; +}; + +static status_t +driver_open(const char *name, ulong flags, void **_cookie) +{ + struct cookie *cookie; + status_t err; + + cookie = calloc(sizeof(*cookie), 1); + if (!cookie) + return ENOMEM; + cookie->sem = create_sem(1, "plex86 mutex"); + if (cookie->sem < 0) { + err = cookie->sem; + goto err1; + } + *_cookie = cookie; + return B_OK; + +err1: + free(cookie); + return err; +} + +static status_t +driver_close(void *cookie) +{ + return B_OK; +} + +static status_t +driver_free(void *_cookie) +{ + struct cookie *cookie = (struct cookie *)_cookie; + delete_sem(cookie->sem); + free(cookie); + return B_OK; +} + +static status_t +driver_read(void *cookie, off_t pos, void *buf, size_t *count) +{ + return B_OK; +} + + +static status_t +driver_write(void *cookie, off_t pos, const void *buf, size_t *count) +{ + return B_OK; +} + +static status_t +driver_ioctl(void *_cookie, ulong cmd, void *buf, size_t len) +{ + struct cookie *cookie = (struct cookie *)_cookie; + uint32 cr0, arg, eflags_orig; + uchar soft_int_vector; + status_t err; + + arg = *(uint32 *)buf; + + switch (cmd) { + /* Allocate unpaged memory for the VM. */ + /* arg is the number of megabytes to allocate */ + /* Memory returned must not be pageable by the */ + /* host OS, since the VM monitor will run in this */ + /* memory as well. Perhaps later, we can let */ + /* the guest OS run in paged memory and reflect */ + /* the page faults back to the host OS. */ + case 0x6b02: + acquire_sem(cookie->sem); + init_monitor(MASTER_PIC_BASE_VECTOR, SLAVE_PIC_BASE_VECTOR, IRQ16_BASE_VECTOR); + cookie->mon_ok = 1; + release_sem(cookie->sem); + return B_OK; + + case 0x6b03: + /* linux-specific hack, unnecessary under BeOS */ + return B_OK; + + /* run guest context for a time slice */ + case 0x6b04: + { + cpu_status ps; + + acquire_sem(cookie->sem); + + if (!cookie->mon_ok) { + release_sem(cookie->sem); + return EPERM; + } + + ps = disable_interrupts(); + + /* clear NT/IF/TF */ + eflags_orig = read_flags(); + write_flags(eflags_orig & ~0x00004300); + + __host2guest(); + + write_flags(eflags_orig & ~0x00000200); + + restore_interrupts(ps); + + switch ( monitor_info.ret_because ) { + case RET_BECAUSE_IRQ: + /* reported vector is actually the IRQ# */ + + soft_int_vector = MASTER_PIC_BASE_VECTOR + monitor_info.vector; + soft_int(soft_int_vector); + cookie->irq_cnt[monitor_info.vector]++; + dprintf("plex86: irq %u\n", monitor_info.vector); + err = B_OK; + break; + + case RET_BECAUSE_INT: + dprintf("plex86: int %u\n", monitor_info.vector); + err = EFAULT; + break; + + case RET_BECAUSE_EXC: + dprintf("plex86: exc %u\n", monitor_info.vector); + err = EFAULT; + break; + + case RET_BECAUSE_TEST: + dprintf("plex86: test\n"); + err = B_OK; + break; + + default: + dprintf("plex86: unknown ret_because\n"); + err = B_OK; + break; + } + + release_sem(cookie->sem); + return err; + } + + case 0x6b05: /* tear down VM environment */ + acquire_sem(cookie->sem); + cookie->mon_ok = 0; + release_sem(cookie->sem); + return B_OK; + } + + return ENOSYS; +} + +device_hooks driver_device = { + driver_open, + driver_close, + driver_free, + driver_ioctl, + driver_read, + driver_write +}; + +status_t +init_driver (void) +{ + return B_OK; +} + +void +uninit_driver(void) +{ +} + +const char ** +publish_devices(void) +{ + static const char *driver_names[] = { + "misc/plex86", + NULL + }; + return (const char **)driver_names; +} + +device_hooks * +find_device(const char *name) +{ + return &driver_device; +} + diff --git a/bochs/plex86/kernel/host-freebsd.c b/bochs/plex86/kernel/host-freebsd.c new file mode 100644 index 00000000..d2252095 --- /dev/null +++ b/bochs/plex86/kernel/host-freebsd.c @@ -0,0 +1,569 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * + * Copyright (C) 2000 Frank van der Linden (fvdl@wasabisystems.com) + * Copyright (C) 2000 Alexander Langer + * + * License as published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This library 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 Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#define DIAGNOSTIC 1 +#define CDEV_MAJOR 20 +#define timer_t __bsd_timer_t +#define write_eflags __freebsd_write_eflags +#define read_eflags __freebsd_read_eflags + +/* XXX recheck, which includes are needed */ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include + +#undef timer_t +#undef write_eflags +#undef read_eflags + +#include "plex86.h" +#define IN_HOST_SPACE +#include "monitor.h" + +static MALLOC_DEFINE(M_PLEX86, "plex86", "Plex86 mem"); + +static d_open_t plex86_open; +static d_close_t plex86_close; +static d_mmap_t plex86_mmap; +static d_ioctl_t plex86_ioctl; + +static unsigned retrieve_phy_pages(Bit32u *, int, void *, unsigned, int); +static vm_t *find_vm(struct proc * p); +static void register_vm(vm_t * vm, struct proc * p); +static void unregister_all(struct proc * p); + +static struct cdevsw plex86_cdevsw = { + /* open */ plex86_open, + /* close */ plex86_close, + /* read */ noread, + /* write */ nowrite, + /* ioctl */ plex86_ioctl, + /* poll */ nopoll, + /* mmap */ plex86_mmap, + /* strat */ nostrategy, + /* name */ "plex86", + /* major */ CDEV_MAJOR, + /* dump */ nodump, + /* psize */ nopsize, + /* flags */ 0, + /* bmaj */ -1 +}; + +/* For use with make_dev/destroy_dev */ +static dev_t plex86_dev; + +static struct plex86_softc { + int sc_open; +} plex86sc; + +monitor_pages_t monitor_pages; + +/* + * Hash table stuff to maintain proc <-> vm mapping. 23 entries should be + * plenty.. unless someone plans to run more than 23 guest OSs.. + * + * Note that a process can only open the device once with this scheme. + */ + +LIST_HEAD(plex86_hashhead, plex86_vmentry); + +struct plex86_vmentry { + pid_t vm_pid; + vm_t *vm_vm; + LIST_ENTRY(plex86_vmentry) vm_entry; +}; + +struct plex86_hashhead *plex86_hashtbl; +u_long plex86_hashmask; + +#define PLEX86_VMHASHSIZE 23 +#define PLEX86_VMHASH(p) ((u_long)((p)->p_pid) & plex86_hashmask) + +static int +plex86_open(dev_t dev, int flags, int fmt, struct proc * p) +{ + vm_t *vm; + + if (suser_xxx(p->p_ucred, p, p->p_acflag) != 0) + return (EPERM); + + vm = find_vm(p); + if (vm == NULL) { + vm = malloc(sizeof(vm_t), M_PLEX86, M_WAITOK); + if (vm == NULL) + return EIO; + memset(vm, 0, sizeof(vm_t)); + register_vm(vm, p); + plex86sc.sc_open++; + } else + return (EBUSY); + + /* Kernel independent device open code. */ + hostDeviceOpenInit(vm); + +#ifdef FREEBSD_PLEX86_DEBUG + printf("plex86: pid %u opened device, vm %p\n", p->p_pid, vm); +#endif + + return (0); +} + +int +plex86_close(dev_t dev, int flags, int fmt, struct proc * p) +{ + unregister_all(p); + plex86sc.sc_open = 0; +#ifdef FREEBSD_PLEX86_DEBUG + printf("plex86: pid %u closed device\n", p->p_pid); +#endif + return (0); +} + +int +plex86_mmap(dev_t dev, vm_offset_t offset, int nprot) +{ + struct proc *p = curproc; + int page; + vm_offset_t endguestoff; + vm_t *vm; + + vm = find_vm(p); + if (vm == NULL) + return (ENXIO); + +#warning "kludge to mmap message buffer" + endguestoff = (vm_offset_t) (vm->pages.guest_n_megs * 1024 * 1024); + if (offset >= endguestoff && nprot == PROT_READ) { + page = (offset - endguestoff) / PAGE_SIZE; + return (vm->pages.log_buffer[page]); + } + page = offset / PAGE_SIZE; + if (page < 0 || page > vm->pages.guest_n_pages) { + log(LOG_WARNING, "plex86: mmap: offset %lx out of range\n", + (unsigned long) offset); + return -1; + } + return vm->pages.guest[page]; +} + +int +plex86_ioctl(dev_t dev, u_long cmd, caddr_t data, int flags, + struct proc * p) +{ + int error; + vm_t *vm; + + vm = find_vm(p); + if (vm == NULL) + return EINVAL; + + switch (cmd) { + case PLEX86_ALLOCVPHYS: + { + unsigned arg = *((unsigned *) data); + guest_cpu_t guest_cpu; + + if (vm->mon_state != MON_STATE_UNINITIALIZED || + vm->pages.guest_n_megs != 0) + return EBUSY; + if (arg > PLEX86_MAX_PHY_MEGS || arg < 4 || (arg & ~0x3) != arg) + return EINVAL; + + /* Allocate memory */ + error = allocVmPages(vm, arg); + if (error != 0) { + log(LOG_WARNING, "plex86: allocVmPages failed (%d)\n", + error); + return ENOMEM; + } + if (init_guest_phy_mem(vm) != 0) { + log(LOG_ERR, "plex86: init_guest_phy_mem failed\n"); + unallocVmPages(vm); + return EFAULT; + } + getCpuResetValues(&guest_cpu); + log(LOG_WARNING, "plex86: cpu.cr0 = 0x%x\n", guest_cpu.cr0); + if (!init_monitor(vm, 0, 0, &guest_cpu) || + !setGuestCPU(vm, 0, &guest_cpu) || + !mapMonitor(vm, guest_cpu.eflags, 0)) { + log(LOG_ERR, "plex86: init_monitor failed\n"); + unallocVmPages(vm); + return EFAULT; + } + break; + } + + case PLEX86_TEARDOWN: + unallocVmPages(vm); + break; + + case PLEX86_ALLOCINT: + return EINVAL; + case PLEX86_RELEASEINT: + return EINVAL; + case PLEX86_PRESCANDEPTH: + { + unsigned long arg = *(unsigned long *) data; + + if ((arg < PrescanDepthMin) || (arg > PrescanDepthMax)) { + log(LOG_WARNING, "plex86: Requested prescan depth %lu" + " out of range [%u..%u]\n", arg, PrescanDepthMin, + PrescanDepthMax); + return EINVAL; + } + vm->prescanDepth = (unsigned) arg; + break; + } + case PLEX86_SETINTR: + ioctlSetIntr(vm, *(unsigned long *) data); + break; + case PLEX86_SET_A20: + { + unsigned long arg = *(unsigned long *) data; + if (!ioctlSetA20E(vm, arg)) + return EINVAL; + break; + } + case PLEX86_MESSAGEQ: + { + vm_messages_t msg; + + if (vm->mon_state != MON_STATE_RUNNABLE) + return EINVAL; + + error = copyin(*(void **) data, &msg.header, sizeof msg.header); + if (error != 0) + return error; + + if ((msg.header.msg_len + sizeof(msg.header)) > sizeof(msg)) + return EINVAL; + + if (msg.header.msg_len != 0) { + error = copyin(&((vm_messages_t *) * (void **) data)->msg, + &msg.msg, msg.header.msg_len); + if (error != 0) + return error; + } + if (ioctlMessageQ(vm, &msg)) { + log(LOG_WARNING, "plex86: ioctlMessageQ failed\n"); + return EINVAL; + } + error = copyout(&msg, *(void **) data, + sizeof(msg.header) + msg.header.msg_len); + return error; + } + case PLEX86_RESET: + break; + + case PLEX86_PHYMEM_MOD: + break; + case PLEX86_FORCE_INT: + if (vm->mon_state != MON_STATE_RUNNABLE) + return -EINVAL; + vm->dbg_force_int = 0x100 | (unsigned) data; + break; + case PLEX86_PRESCANRING3: + { + unsigned long arg = *(unsigned long *) data; + if (arg > PrescanRing3On) { + log(LOG_WARNING, + "plex86: Requested PrescanRing3 val(%lu) OOB\n", + arg); + return EINVAL; + } + vm->prescanRing3 = arg; + break; + } + + default: + log(LOG_WARNING, "plex86: unknown ioctl %lx\n", cmd); + return EINVAL; + } + return 0; +} + +static void +register_vm(vm_t * vm, struct proc * p) +{ + struct plex86_hashhead *php; + struct plex86_vmentry *vhp; + + php = &plex86_hashtbl[PLEX86_VMHASH(p)]; +#if DIAGNOSTIC + for (vhp = php->lh_first; vhp != NULL; vhp = vhp->vm_entry.le_next) { + if (vhp->vm_pid == p->p_pid) + panic("plex86: vm already registered, pid %u\n", + p->p_pid); + } +#endif + vhp = malloc(sizeof(struct plex86_vmentry), M_PLEX86, M_WAITOK); + vhp->vm_pid = p->p_pid; + vhp->vm_vm = vm; + LIST_INSERT_HEAD(php, vhp, vm_entry); +} + +static void +unregister_vm(vm_t * vm, struct proc * p) +{ + struct plex86_hashhead *php; + struct plex86_vmentry *vhp; + + php = &plex86_hashtbl[PLEX86_VMHASH(p)]; + for (vhp = php->lh_first; vhp != NULL; vhp = vhp->vm_entry.le_next) { + if (vhp->vm_pid == p->p_pid) { + LIST_REMOVE(vhp, vm_entry); + free(vhp->vm_vm, M_PLEX86); + free(vhp, M_PLEX86); + break; + } + } +} + +static void +unregister_all(struct proc * p) +{ + int i; + struct plex86_hashhead *php; + struct plex86_vmentry *vhp; + + php = &plex86_hashtbl[PLEX86_VMHASH(p)]; + if (php == NULL) + return; + for (vhp = php->lh_first; vhp != NULL; + vhp = vhp->vm_entry.le_next) { +#ifdef FREEBSD_PLEX86_DEBUG + printf("plex86: unregister vm %p, pid %u\n", + vhp->vm_vm, vhp->vm_pid); +#endif + LIST_REMOVE(vhp, vm_entry); + if (vhp->vm_vm != NULL) + free(vhp->vm_vm, M_PLEX86); + if (vhp != NULL) + free(vhp, M_PLEX86); + } +} + +static vm_t * +find_vm(struct proc * p) +{ + struct plex86_hashhead *php; + struct plex86_vmentry *vhp; + + php = &plex86_hashtbl[PLEX86_VMHASH(p)]; + for (vhp = php->lh_first; vhp != NULL; vhp = vhp->vm_entry.le_next) { + if (vhp->vm_pid == p->p_pid) + return vhp->vm_vm; + } + + return NULL; +} + +static unsigned +retrieve_phy_pages(Bit32u * page, int max_pages, void *addr_v, unsigned size, + int aligned) +{ + Bit32u start_addr; + unsigned n_pages, i; + + if (!aligned) + start_addr = (Bit32u) addr_v & ~(PAGE_SIZE - 1); + else { + start_addr = (Bit32u) addr_v; + if (start_addr & (PAGE_SIZE - 1)) { + log(LOG_WARNING, "plex86: retrieve_phy_pages: address " + "%p not aligned\n", addr_v); + return 0; + } + } + + n_pages = (size + PAGE_SIZE - 1) / PAGE_SIZE; + if (n_pages > max_pages) { + log(LOG_WARNING, "plex86: retrieve_phy_pages: page list " + "too small\n"); + return (0); + } + for (i = 0; i < n_pages; i++) { + page[i] = kvtop((vm_offset_t) start_addr) / PAGE_SIZE; + start_addr += PAGE_SIZE; + } + + return n_pages; +} + +unsigned +host_idle(void) +{ +#if defined(want_resched) + if (want_resched) { +#endif + yield(curproc, NULL); /* XXX */ + need_resched(); /* XXX */ +#if defined(want_resched) + } +#endif + printf("resched done\n"); + return (CURSIG(curproc) == 0); +} + +void * +host_alloc(unsigned long size) +{ + /* + * XXX - it wants this page-aligned apparently. + */ + if (size <= (PAGE_SIZE / 2)) + size = PAGE_SIZE; + return (malloc(size, M_PLEX86, M_WAITOK)); +} + +void +host_free(void *ptr) +{ + free(ptr, M_PLEX86); +} + +unsigned +host_map(Bit32u * page, int max_pages, void *ptr, unsigned size) +{ + return retrieve_phy_pages(page, max_pages, ptr, size, 1); +} + +void * +host_alloc_page(void) +{ + return malloc(PAGE_SIZE, M_PLEX86, M_WAITOK); +} + +void +host_free_page(void *ptr) +{ + return free(ptr, M_PLEX86); +} + +Bit32u +host_map_page(void *ptr) +{ + Bit32u u; + + if (ptr == NULL) + return 0; + u = kvtop(ptr) / PAGE_SIZE; +#if FREEBSD_PLEX86_DEBUG + printf("host_map_page(%p) -> %x\n", ptr, u); +#endif + return u; +} + +void +hostprint(char *fmt,...) +{ + va_list args; + int ret; + unsigned char buffer[256]; + + va_start(args, fmt); + ret = vsnprintf(buffer, 256, fmt, args); + if (ret == -1) + log(LOG_WARNING, + "plex86: hostprint: vsnprintf returns error.\n"); + else + log(LOG_WARNING, "plex86: %s\n", buffer); +} + +static int +plex86_modevent(module_t mod, int type, void *data) +{ + linker_file_t lf; + int error = 0; + + switch (type) { + case MOD_LOAD: + plex86_hashtbl = NULL; + + lf = linker_find_file_by_name("plex86"); + if (lf == NULL) { + printf("plex86: can't find linker_file 'plex86'\n"); + return (ENXIO); + } + monitor_pages.startOffset = lf->address; + monitor_pages.startOffsetPageAligned = + monitor_pages.startOffset & 0xfffff000; + + if ((monitor_pages.n_pages = retrieve_phy_pages(monitor_pages.page, + PLEX86_MAX_MONITOR_PAGES, + lf->address, + lf->size, + 0)) == 0) { + log(LOG_WARNING, "plex86: could not store physical " + "addresses for monitor pages\n"); + return (ENXIO); + } + plex86_hashtbl = hashinit(PLEX86_VMHASHSIZE, + M_PLEX86, &plex86_hashmask); + + if (!hostModuleInit()) { + log(LOG_WARNING, "hostModuleInit error\n"); + error = EINVAL; + } + + plex86_dev = make_dev(&plex86_cdevsw, 0 /* minor */ , UID_ROOT, + GID_WHEEL, 0600, "plex86"); + + printf("plex86: Module loaded.\n"); + return (0); + break; + case MOD_UNLOAD: + if (plex86sc.sc_open != 0) + return (EBUSY); + + destroy_dev(plex86_dev); + + if (plex86_hashtbl != NULL) { + free(plex86_hashtbl, M_PLEX86); + } + printf("plex86: Module unloaded.\n"); + break; + + default: + error = ENXIO; + break; + } + return (error); +} + +MODULE_VERSION(plex86, 1); +DEV_MODULE(plex86, plex86_modevent, 0); diff --git a/bochs/plex86/kernel/host-linux.c b/bochs/plex86/kernel/host-linux.c new file mode 100644 index 00000000..e2c76fd5 --- /dev/null +++ b/bochs/plex86/kernel/host-linux.c @@ -0,0 +1,800 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * host-linux.c: Linux specific VM host driver functionality + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "plex86.h" +#define IN_HOST_SPACE +#include "monitor.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#ifndef VERSION_CODE +# define VERSION_CODE(vers,rel,seq) ( ((vers)<<16) | ((rel)<<8) | (seq) ) +#endif + + +#if LINUX_VERSION_CODE < VERSION_CODE(2,4,20) +/* I use get_user_pages() to find and pin physical pages of memory + * underlying the guest physical memory malloc()'d from user space. + * This became an exported symbol available for kernel modules + * as of 2.4.20. You will have to recode some functions for + * lesser kernels. + */ +# error "Currently, you need Linux kernel 2.4.20 or above." +#endif + + +#if LINUX_VERSION_CODE >= VERSION_CODE(2,1,0) +# include +#endif + +#include + + + +/************************************************************************/ +/* Compatibility macros & convenience functions for older kernels */ +/************************************************************************/ + +#ifndef EXPORT_NO_SYMBOLS +# define EXPORT_NO_SYMBOLS register_symtab(NULL) +#endif + +#if LINUX_VERSION_CODE >= VERSION_CODE(2,1,29) +# define proc_register_dynamic proc_register +#endif + +#if LINUX_VERSION_CODE < VERSION_CODE(2,2,0) +#define NEED_RESCHED need_resched +#else +#define NEED_RESCHED current->need_resched +#endif + + + +/* Instrumentation of how many hardware interrupts were redirected + * to the host, while the VM monitor/guest was running. This can be + * written to by multiple contexts, so it needs SMP protection. + */ +static atomic_t interruptRedirCount[256]; + + + +#if LINUX_VERSION_CODE < VERSION_CODE(2,1,0) + static inline unsigned long +copy_from_user(void *to, const void *from, unsigned long n) +{ + int i; + if ( (i = verify_area(VERIFY_READ, from, n)) != 0 ) + return i; + memcpy_fromfs(to, from, n); + return 0; +} + static inline unsigned long +copy_to_user(void *to, const void *from, unsigned long n) +{ + int i; + if ( (i = verify_area(VERIFY_WRITE, to, n)) != 0 ) + return i; + memcpy_tofs(to, from, n); + return 0; +} +#endif + +#if LINUX_VERSION_CODE >= VERSION_CODE(2,1,18) && !defined(THIS_MODULE) +/* Starting with version 2.1.18, the __this_module symbol is present, + * but the THIS_MODULE #define was introduced much later ... + */ +#define THIS_MODULE (&__this_module) +#endif + + +/************************************************************************/ +/* Declarations */ +/************************************************************************/ + +/* Use dynamic major number allocation. (Set non-zero for static allocation) */ +#define PLEX86_MAJOR 0 +static int plex_major = PLEX86_MAJOR; +#if LINUX_VERSION_CODE >= VERSION_CODE(2,1,18) +MODULE_PARM(plex_major, "i"); +MODULE_PARM_DESC(plex_major, "major number (default " __MODULE_STRING(PLEX86_MAJOR) ")"); +#endif + +/* The kernel segment base. */ +#if LINUX_VERSION_CODE < VERSION_CODE(2,1,0) +# define KERNEL_OFFSET 0xc0000000 +#else +# define KERNEL_OFFSET 0x00000000 +#endif + + +/* File operations. */ +static int plex86_ioctl(struct inode *, struct file *, unsigned int, + unsigned long); +static int plex86_open(struct inode *, struct file *); + +#if LINUX_VERSION_CODE >= VERSION_CODE(2,1,31) +static int plex86_release(struct inode *, struct file *); +#else +static void plex86_release(struct inode *, struct file *); +#endif + +#if LINUX_VERSION_CODE >= VERSION_CODE(2,1,0) +static int plex86_mmap(struct file * file, struct vm_area_struct * vma); +#else +static int plex86_mmap(struct inode * inode, struct file * file, + struct vm_area_struct * vma); +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,9) +/* New License scheme. */ +#ifdef MODULE_LICENSE +MODULE_LICENSE("GPL"); /* Close enough. Keeps kernel from complaining. */ +#endif +#endif + + + +/************************************************************************/ +/* Structures / Variables */ +/************************************************************************/ + +static int retrieveKernelModulePages(void); +static unsigned retrievePhyPages(Bit32u *page, int max_pages, void *addr, + unsigned size); + + + +static struct file_operations plex86_fops = { +#if LINUX_VERSION_CODE >= VERSION_CODE(2,4,0) + owner: THIS_MODULE, +#endif + mmap: plex86_mmap, + ioctl: plex86_ioctl, + open: plex86_open, + release: plex86_release, + }; + + +#ifdef CONFIG_DEVFS_FS +#include +devfs_handle_t my_devfs_entry; +#endif + +/* For the /proc/driver/plex86 entry. */ +#if LINUX_VERSION_CODE >= VERSION_CODE(2,4,0) /* XXX - How far back? */ +int plex86_read_procmem(char *, char **, off_t, int); +#else +int plex86_read_procmem(char *, char **, off_t, int, int); +#endif + +#if LINUX_VERSION_CODE < VERSION_CODE(2,3,25) +static struct proc_dir_entry plex86_proc_entry = { + 0, /* dynamic inode */ + 6, "driver/plex86", /* len, name */ + S_IFREG | S_IRUGO, /* mode */ + 1, 0, 0, + 0, + NULL, + &plex86_read_procmem, /* read function */ + }; +#endif + +#if CONFIG_X86_PAE +# error "CONFIG_X86_PAE defined for this kernel, but unhandled in plex86" +#endif + +/************************************************************************/ +/* Main kernel module code */ +/************************************************************************/ + + int +init_module(void) +{ + int err; + + /* Initialize structures which are not specific to each VM. These + * are things which are set only once upon kernel module initialization. + */ + memset(&kernelModulePages, 0, sizeof(kernelModulePages)); + memset(&interruptRedirCount, 0, sizeof(interruptRedirCount)); + + /* Register the device with the kernel. */ + err = register_chrdev(plex_major, "plex86", &plex86_fops); + if (err < 0) { + printk(KERN_WARNING "plex86: can't get major %d\n", plex_major); + return(err); + } + /* If this was a dynamic allocation, save the major for + * the release code + */ + if(!plex_major) + plex_major = err; + + /* Register the /proc entry. */ +#ifdef CONFIG_PROC_FS +#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,25) + if (!create_proc_info_entry("driver/plex86", 0, NULL, plex86_read_procmem)) + printk(KERN_ERR "plex86: registering /proc/driver/plex86 failed\n"); +#else + proc_register_dynamic(&proc_root, &plex86_proc_entry); +#endif +#endif + + /* Register /dev/misc/plex86 with devfs. */ +#ifdef CONFIG_DEVFS_FS + my_devfs_entry = devfs_register(NULL, "misc/plex86", + DEVFS_FL_DEFAULT, + plex_major, 0 /* minor mode*/, + S_IFCHR | 0666, &plex86_fops, + NULL /* "info" */); + if (!my_devfs_entry) + printk(KERN_ERR "plex86: registering misc/plex86 devfs entry failed\n"); +#endif + + /* Retrieve the monitor physical pages. */ + if ( !retrieveKernelModulePages() ) { + printk(KERN_ERR "plex86: retrieveKernelModulePages returned error\n"); + err = -EINVAL; + goto fail_retrieve_pages; + } + + /* Kernel independent code to be run when kernel module is loaded. */ + if ( !hostModuleInit() ) { + printk(KERN_ERR "plex86: genericModuleInit returned error\n"); + err = -EINVAL; + goto fail_cpu_capabilities; + } + + /* Success. */ + EXPORT_NO_SYMBOLS; + return(0); + +fail_cpu_capabilities: +fail_retrieve_pages: + /* Unregister /proc entry. */ +#ifdef CONFIG_PROC_FS +#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,25) + remove_proc_entry("driver/plex86", NULL); +#else + proc_unregister(&proc_root, plex86_proc_entry.low_ino); +#endif +#endif + + /* Unregister device. */ + unregister_chrdev(plex_major, "plex86"); + return err; +} + + void +cleanup_module(void) +{ + /* Unregister device. */ + unregister_chrdev(plex_major, "plex86"); + + /* Unregister /proc entry. */ +#ifdef CONFIG_PROC_FS +#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,25) + remove_proc_entry("driver/plex86", NULL); +#else + proc_unregister(&proc_root, plex86_proc_entry.low_ino); +#endif +#endif + +#ifdef CONFIG_DEVFS_FS + devfs_unregister(my_devfs_entry); +#endif +} + + + +/************************************************************************/ +/* Open / Release a VM */ +/************************************************************************/ + + int +plex86_open(struct inode *inode, struct file *filp) +{ + vm_t *vm; +#if LINUX_VERSION_CODE < VERSION_CODE(2,4,0) + MOD_INC_USE_COUNT; +#endif + + /* Allocate a VM structure. */ + if ( (vm = hostOSAllocZeroedMem(sizeof(vm_t))) == NULL ) + return -ENOMEM; + filp->private_data = vm; + + /* Kernel independent device open code. */ + hostDeviceOpen(vm); + + return(0); +} + + +#if LINUX_VERSION_CODE >= VERSION_CODE(2,1,31) + int +#else + void +#endif +plex86_release(struct inode *inode, struct file *filp) +{ + vm_t *vm = (vm_t *)filp->private_data; + filp->private_data = NULL; + + /* Free the virtual memory. */ + hostUnallocVmPages( vm ); + + /* Free the VM structure. */ + memset( vm, 0, sizeof(*vm) ); + vfree( vm ); + +#if LINUX_VERSION_CODE < VERSION_CODE(2,4,0) + MOD_DEC_USE_COUNT; +#endif + +#if LINUX_VERSION_CODE >= VERSION_CODE(2,1,31) + return(0); +#endif +} + + + int +plex86_ioctl(struct inode *inode, struct file *filp, + unsigned int cmd, unsigned long arg) +{ + vm_t *vm = (vm_t *)filp->private_data; + int ret; + + /* Call non host-specific ioctl() code which calls back to this + * module only when it needs host-specific features. + */ + ret = hostIoctlGeneric(vm, inode, filp, cmd, arg); + + /* Convert from plex86 errno codes to host-specific errno codes. Not + * very exciting. + */ + if ( ret < 0 ) + ret = - hostOSConvertPlex86Errno(- ret); + return( ret ); +} + + + int +#if LINUX_VERSION_CODE >= VERSION_CODE(2,1,0) +plex86_mmap(struct file * file, struct vm_area_struct * vma) +#else +plex86_mmap(struct inode * inode, struct file * file, struct vm_area_struct * vma) +#endif +{ + vm_t *vm = (vm_t *)file->private_data; + UNUSED(vm); + return -EINVAL; +} + + +/************************************************************************/ +/* Status reporting: /proc code */ +/************************************************************************/ + + int +plex86_read_procmem(char *buf, char **start, off_t offset, +#if LINUX_VERSION_CODE >= VERSION_CODE(2,4,0) + int len +#else + int len, int unused +#endif + ) +{ + unsigned i; + len = 0; + len += sprintf(buf, "monitor-->host interrupt reflection counts\n"); + for (i=0; i<256; i++) { + int count; + count = atomic_read( &interruptRedirCount[i] ); + if (count) + len += sprintf(buf+len, " 0x%2x:%10u\n", i, count); + } + return(len); +} + + + int +retrieveKernelModulePages(void) +{ + /* + * Retrieve start address and size of this module. + * + * Note that with old kernels, we cannot access the module info (size), + * hence we rely on the fact that Linux lets at least one page of + * virtual address space unused after the end of the module. + */ +#ifdef THIS_MODULE + Bit32u driverStartAddr = (Bit32u) THIS_MODULE; + unsigned size = THIS_MODULE->size; +#else + Bit32u driverStartAddr = (Bit32u) &mod_use_count_; + unsigned size = 0; /* Actual size determined below */ +#endif + Bit32u driverStartAddrPageAligned = driverStartAddr & ~0xfff; + + int nPages; + + if (driverStartAddr != driverStartAddrPageAligned) { + /* Pretend this kernel module starts at the beginning of the page. */ + /* If size is known, we have to add the extra offset from the beginning + * of the page. + */ + if (size) + size += (driverStartAddr & 0xfff); + } + + nPages = retrievePhyPages(kernelModulePages.ppi, Plex86MaxKernelModulePages, + (void *) driverStartAddrPageAligned, size); + if (nPages == 0) { + printk(KERN_ERR "plex86: retrieveKernelModulePages: retrieve returned error.\n"); + return( 0 ); /* Error. */ + } + printk(KERN_WARNING "plex86: %u monitor pages located\n", nPages); + + kernelModulePages.startOffset = driverStartAddr; + kernelModulePages.startOffsetPageAligned = driverStartAddrPageAligned; + kernelModulePages.nPages = nPages; + return( 1 ); /* OK. */ +} + + + unsigned +retrievePhyPages(Bit32u *page, int max_pages, void *addr_v, unsigned size) +{ + /* + * Grrr. There doesn't seem to be an exported mechanism to retrieve + * the physical pages underlying a vmalloc()'ed area. We do it the + * hard way ... + */ + pageEntry_t *host_pgd; + Bit32u host_cr3; + Bit32u addr; // start_addr; + unsigned n_pages; + int i; + + addr = (Bit32u) addr_v; + if ( addr & 0xfff ) { + printk(KERN_ERR "plex86: retrievePhyPages: not page aligned!\n"); + return 0; + } + + if (!addr) { + printk(KERN_ERR "plex86: retrievePhyPages: addr NULL!\n"); + return 0; + } + + if (size == 0) { + /* Size unknown. Determine by cycling through page tables until + * we find one which is not present. We will assume that means + * the end of the data structure. Set the number of pages to + * cycle through, to one more than the maximum requested. This + * way we'll look through enough pages. + */ + n_pages = max_pages + 1; + } + else { + n_pages = BytesToPages(size); + if ( n_pages > max_pages ) { + printk(KERN_ERR "plex86: retrievePhyPages: n=%u > max=%u\n", + n_pages, max_pages); + return 0; + } + } + + asm volatile ("movl %%cr3, %0" : "=r" (host_cr3)); + host_pgd = (pageEntry_t *)(phys_to_virt(host_cr3 & ~0xfff)); + + for (i = 0; i < n_pages; i++) { + Bit32u laddr; + unsigned long lpage; + pgd_t *pgdPtr; pmd_t *pmdPtr; pte_t *ptePtr; + pgd_t pgdVal; pmd_t pmdVal; pte_t pteVal; + + laddr = KERNEL_OFFSET + ((Bit32u) addr); + + lpage = VMALLOC_VMADDR(laddr); + + /* About to traverse the page tables. We need to lock others + * out of them briefly. Newer Linux versions can do a fine-grained + * lock on the page tables themselves. Older ones have to do + * a "big kernel lock". + */ +#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,10) + spin_lock(&init_mm.page_table_lock); +#else + lock_kernel(); /* Big kernel lock. */ +#endif + pgdPtr = pgd_offset(&init_mm, lpage); + pmdPtr = pmd_offset(pgdPtr, lpage); + ptePtr = pte_offset(pmdPtr, lpage); + + pgdVal = *pgdPtr; + pmdVal = *pmdPtr; + pteVal = *ptePtr; + +#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,10) + spin_unlock(&init_mm.page_table_lock); +#else + unlock_kernel(); /* Big kernel unlock. */ +#endif + + if ( !(pgdVal.pgd & 1) || + !(pmdVal.pmd & 1) || + !(pteVal.pte_low & 1) ) { + if (size == 0) + return i; /* Report number of pages until area ended. */ + printk(KERN_ERR "plex86: retrievePhyPages: " + "PDE.P==0: i=%u, n=%u laddr=0x%x\n", i, n_pages, laddr); + return 0; /* Error, ran into unmapped page in memory range. */ + } + + /* Abort if our page list is too small. */ + if (i >= max_pages) { + printk(KERN_WARNING "plex86: page list is too small!\n"); + printk(KERN_WARNING "plex86: n_pages=%u, max_pages=%u\n", + n_pages, max_pages); + return 0; + } + /* Get physical page address for this virtual page address. */ + page[i] = pte_val(pteVal) >> 12; + /* Increment to the next virtual page address. */ + addr += 4096; + } + return(n_pages); +} + + + +/************************************************************************ + * The requisite host-specific functions. An implementation of each of + * these functions needs to be offered for each host-XYZ.c file. + ************************************************************************/ + + + unsigned +hostOSIdle(void) +{ + if (NEED_RESCHED) + schedule(); + + /* return !current_got_fatal_signal(); */ + return( ! signal_pending(current) ); +} + + void * +hostOSAllocZeroedMem(unsigned long size) +{ + void *ptr; + + ptr = vmalloc(size); + if ( ((Bit32u) ptr) & 0x00000fff ) + return( 0 ); /* Error. */ + + /* Zero pages. This also demand maps the pages in, which we need + * since we'll cycle through all the pages to get the physical + * address mappings. + */ + mon_memzero(ptr, size); + return( ptr ); +} + + void +hostOSFreeMem(void *ptr) +{ + vfree(ptr); +} + + void * +hostOSAllocZeroedPage(void) +{ + return( (void *) get_zeroed_page(GFP_KERNEL) ); +} + + void +hostOSFreePage(void *ptr) +{ + free_page( (Bit32u)ptr ); +} + + + unsigned +hostOSGetAllocedMemPhyPages(Bit32u *page, int max_pages, void *ptr, unsigned size) +{ + return( retrievePhyPages(page, max_pages, ptr, size) ); +} + + Bit32u +hostOSGetAllocedPagePhyPage(void *ptr) +{ + if (!ptr) return 0; + /* return MAP_NR(ptr); */ + return(__pa(ptr) >> PAGE_SHIFT); +} + + void +hostOSPrint(char *fmt, ...) +{ +#warning "Fix hostPrint" +#if 0 + va_list args; + int ret; + unsigned char buffer[256]; + + va_start(args, fmt); + ret = mon_vsnprintf(buffer, 256, fmt, args); + if (ret == -1) { + printk(KERN_ERR "plex86: hostPrint: vsnprintf returns error.\n"); + } + else { + printk(KERN_WARNING "plex86: %s\n", buffer); + } +#endif +} + + + int +hostOSConvertPlex86Errno(unsigned ret) +{ + switch (ret) { + case 0: return(0); + case Plex86ErrnoEBUSY: return(EBUSY); + case Plex86ErrnoENOMEM: return(ENOMEM); + case Plex86ErrnoEFAULT: return(EFAULT); + case Plex86ErrnoEINVAL: return(EINVAL); + case Plex86ErrnoEACCES: return(EACCES); + case Plex86ErrnoEAGAIN: return(EAGAIN); + default: + printk(KERN_ERR "plex86: ioctlAllocVPhys: case %u\n", ret); + return(EINVAL); + } +} + + + Bit32u +hostOSKernelOffset(void) +{ + return( KERNEL_OFFSET ); +} + + void +hostOSModuleCountReset(vm_t *vm, void *inode, void *filp) +{ +#if LINUX_VERSION_CODE < VERSION_CODE(2,4,0) + while (MOD_IN_USE) { + MOD_DEC_USE_COUNT; + } + + MOD_INC_USE_COUNT; /* bump back to 1 so release can decrement */ +#endif +} + + unsigned long +hostOSCopyFromUser(void *to, void *from, unsigned long len) +{ + return( copy_from_user(to, from, len) ); +} + + unsigned long +hostOSCopyToUser(void *to, void *from, unsigned long len) +{ + return( copy_to_user(to, from, len) ); +} + + Bit32u +hostOSGetAndPinUserPage(vm_t *vm, Bit32u userAddr, void **osSpecificPtr, + Bit32u *ppi, Bit32u *kernelAddr) +{ + int ret; + struct page **pagePtr; + struct page *page; + + pagePtr = (struct page **) osSpecificPtr; + ret = get_user_pages(current, + current->mm, + (unsigned long) userAddr, + 1, /* 1 page. */ + 1, /* 'write': intent to write. */ + 0, /* 'force': ? */ + pagePtr, + NULL /* struct vm_area_struct *[] */ + ); + if (ret != 1) { + printk(KERN_ERR "plex86: hostGetAndPinUserPages: failed.\n"); + return(0); /* Error. */ + } + + page = *pagePtr; /* The returned "struct page *" value. */ + + /* Now that we have a list of "struct page *", one for each physical + * page of memory of the user space process's requested area, we can + * calculate the physical page address by simple pointer arithmetic + * based on "mem_map". + */ + *ppi = page - mem_map; + if (kernelAddr) { + /* Caller wants a kernel address returned which maps to this physical + * address. + */ + *kernelAddr = (Bit32u) kmap( page ); +#warning "FIXME: Check return value here." +#warning "Also, conditionally compile for version and high memory support." + } + return(1); /* OK. */ +} + + void +hostOSUnpinUserPage(vm_t *vm, Bit32u userAddr, void *osSpecificPtr, + Bit32u ppi, Bit32u *kernelAddr, unsigned dirty) +{ +#if 0 + /* Here is some sample code from Linux 2.4.18, mm/memory.c:__free_pte() */ + struct page *page = pte_page(pte); + if ((!VALID_PAGE(page)) || PageReserved(page)) + return; + if (pte_dirty(pte)) + set_page_dirty(page); + free_page_and_swap_cache(page); +#endif + + struct page *page; + + page = (struct page *) osSpecificPtr; + /* If a kernel address is passed, that means that previously we created + * a mapping for this physical page in the kernel address pace. + * We should unmap it. Only really useful for pages allocated from + * high memory. + */ + if (kernelAddr) + kunmap(page); + + /* If the page was dirtied due to the guest running in the VM, we + * need to tell the kernel about that since it is not aware of + * the VM page tables. + */ + if (dirty) + set_page_dirty(page); + + /* Release/unpin the page. */ + put_page(page); +} + + void +hostOSInstrumentIntRedirCount(unsigned interruptVector) +{ + atomic_inc( &interruptRedirCount[interruptVector] ); +} diff --git a/bochs/plex86/kernel/host-netbsd.c b/bochs/plex86/kernel/host-netbsd.c new file mode 100644 index 00000000..f5c1854e --- /dev/null +++ b/bochs/plex86/kernel/host-netbsd.c @@ -0,0 +1,566 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * + * Copyright (C) 2000 Frank van der Linden (fvdl@wasabisystems.com) + * + * host-netbsd.c: NetBSD-specific code for kernel module. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +/* XXXX stuff that conflicts with NetBSD namespace */ + +#define timer_t __bsd_timer_t +#define write_eflags __netbsd_write_eflags +#define read_eflags __netbsd_read_eflags + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#undef NETBSD_PLEX86_DEBUG + +#if __NetBSD_Version__ > 105009900 +#include +#include +#else +#include +#endif + +#undef timer_t +#undef write_eflags +#undef read_eflags + +#include "plex86.h" +#define IN_HOST_SPACE +#include "monitor.h" + +int plex86_open(dev_t dev, int oflags, int devtype, struct proc *p); +int plex86_close(dev_t dev, int cflags, int devtype, struct proc *p); +paddr_t plex86_mmap(dev_t dev, off_t offset, int length); +int plex86_ioctl(dev_t dev, u_long cmd, caddr_t data, int flags, + struct proc *p); + +static int plex86_handle(struct lkm_table *, int); +static vm_t *find_vm(struct proc *); +static void register_vm(vm_t *, struct proc *); +static void unregister_all(void); +#if 0 +static void unregister_vm(vm_t *, struct proc *); +#endif + +static unsigned retrieve_phy_pages(Bit32u *, int, void *, unsigned, int); + +static struct cdevsw plex86dev = { + plex86_open, plex86_close, + (dev_type_read((*))) enodev, (dev_type_write((*))) enodev, + plex86_ioctl, (dev_type_stop((*))) enodev, 0, + seltrue, plex86_mmap, 0 +}; + +static struct plex86_softc { + int sc_open; +} plex86sc; + +MOD_DEV("plex86", LM_DT_CHAR, -1, &plex86dev) + +monitor_pages_t monitor_pages; + +/* + * Hash table stuff to maintain proc <-> vm mapping. + * 23 entries should be plenty.. unless someone plans to run more than + * 23 guest OSs.. + * + * Note that a process can only open the device once with this scheme. + */ + +LIST_HEAD(plex86_hashhead, plex86_vmentry); + +struct plex86_vmentry { + pid_t vm_pid; + vm_t *vm_vm; + LIST_ENTRY(plex86_vmentry) vm_entry; +}; + +struct plex86_hashhead *plex86_hashtbl; +u_long plex86_hashmask; + +#define PLEX86_VMHASHSIZE 23 +#define PLEX86_VMHASH(p) ((u_long)((p)->p_pid) & plex86_hashmask) + +int +plex86_lkmentry(struct lkm_table *lkmtp, int cmd, int ver) +{ + DISPATCH(lkmtp, cmd, ver, plex86_handle, plex86_handle, plex86_handle) +} + +static int +plex86_handle(struct lkm_table *lkmtp, int cmd) +{ + int error = 0; + + switch (cmd) { + case LKM_E_LOAD: + if (lkmexists(lkmtp)) + return EEXIST; + monitor_pages.startOffset = lkmtp->area; + monitor_pages.startOffsetPageAligned = + monitor_pages.startOffset & 0xfffff000; + monitor_pages.n_pages = lkmtp->size / PAGE_SIZE; + if (retrieve_phy_pages(monitor_pages.page, + PLEX86_MAX_MONITOR_PAGES, (void *)lkmtp->area, + lkmtp->size, 0) == 0) { + log(LOG_WARNING, "plex86: could not store physical " + "addresses for monitor pages\n"); + return EIO; + } +#if __NetBSD_Version__ > 105009900 + plex86_hashtbl = hashinit(PLEX86_VMHASHSIZE, HASH_LIST, + M_DEVBUF, M_WAITOK, &plex86_hashmask); +#else + plex86_hashtbl = hashinit(PLEX86_VMHASHSIZE, M_DEVBUF, + M_WAITOK, &plex86_hashmask); +#endif + if (!hostModuleInit()) { + log(LOG_WARNING, "hostModuleInit error\n"); + error = EINVAL; + } + + break; + + case LKM_E_UNLOAD: + if (plex86sc.sc_open != 0) + return EBUSY; + free(plex86_hashtbl, M_DEVBUF); + break; + + case LKM_E_STAT: + break; + + default: + error = EIO; + break; + } + return error; +} + +int +plex86_open(dev_t dev, int oflags, int devtype, struct proc *p) +{ + vm_t *vm; + + if (suser(p->p_ucred, &p->p_acflag) != 0) + return EPERM; + + vm = find_vm(p); + if (vm == NULL) { + vm = malloc(sizeof (vm_t), M_DEVBUF, M_WAITOK); + if (vm == NULL) + return EIO; + memset(vm, 0, sizeof(vm_t)); + register_vm(vm, p); + plex86sc.sc_open++; + } else + return EBUSY; + + /* Kernel independent device open code. */ + hostDeviceOpenInit(vm); + +#ifdef NETBSD_PLEX86_DEBUG + printf("plex86: pid %u opened device, vm %p\n", p->p_pid, vm); +#endif + return 0; +} + +int +plex86_close(dev_t dev, int cflags, int devtype, struct proc *p) +{ + unregister_all(); + plex86sc.sc_open = 0; +#ifdef NETBSD_PLEX86_DEBUG + printf("plex86: pid %u closed device\n", p->p_pid); +#endif + return 0; +} + +paddr_t +plex86_mmap(dev_t dev, off_t offset, int prot) +{ + struct proc *p = curproc; + vm_t *vm; + int page; + off_t endguestoff; + + vm = find_vm(p); + if (vm == NULL) + return ENXIO; +#if 1 +#warning "kludge to mmap message buffer" + endguestoff = (off_t)(vm->pages.guest_n_megs * 1024 * 1024); + if (offset >= endguestoff && prot == PROT_READ) { + page = (offset - endguestoff) / PAGE_SIZE; + return vm->pages.log_buffer[page]; + } +#endif + + page = offset / PAGE_SIZE; + if (page < 0 || page > vm->pages.guest_n_pages) { + log(LOG_WARNING, "plex86: mmap: offset %lx out of range\n", + (unsigned long)offset); + return -1; + } + + return vm->pages.guest[page]; +} + +int +plex86_ioctl(dev_t dev, u_long cmd, caddr_t data, int flags, + struct proc *p) +{ + int error; + vm_t *vm; + + vm = find_vm(p); + if (vm == NULL) + return EINVAL; + + switch (cmd) { + case PLEX86_ALLOCVPHYS: + { + unsigned long arg = *((unsigned long*)data); + guest_cpu_t guest_cpu; + + if (vm->mon_state != MON_STATE_UNINITIALIZED || + vm->pages.guest_n_megs != 0) + return EBUSY; + printf("plex86_ioctl: ALLOCVPHYS: requested size %lu\n", + arg); + if (arg > PLEX86_MAX_PHY_MEGS || arg < 4 || (arg & ~0x3) != arg) + return EINVAL; + + /* Allocate memory */ + error = allocVMPages(vm, arg); + if (error != 0) { + log(LOG_WARNING, "plex86: allocVMPages failed (%d)\n", + error); + return ENOMEM; + } + + if (init_guest_phy_mem(vm) != 0) { + log(LOG_ERR, "plex86: init_guest_phy_mem failed\n"); + unallocVMPages(vm); + return EFAULT; + } + + getCpuResetValues(&guest_cpu); + log(LOG_WARNING, "plex86: cpu.cr0 = 0x%x\n", guest_cpu.cr0); + if (!init_monitor(vm, 0, 0, &guest_cpu) || + !setGuestCPU(vm, 0, &guest_cpu) || + !mapMonitor(vm, guest_cpu.eflags, 0)) { + log(LOG_ERR, "plex86: init_monitor failed\n"); + unallocVMPages(vm); + return EFAULT; + } + break; + } + + case PLEX86_TEARDOWN: + unallocVMPages(vm); + break; + + case PLEX86_ALLOCINT: + return EINVAL; + case PLEX86_RELEASEINT: + return EINVAL; + case PLEX86_PRESCANDEPTH: + { + unsigned long arg = *(unsigned long *)data; + + if ((arg < PrescanDepthMin) || (arg > PrescanDepthMax)) { + log(LOG_WARNING, "plex86: Requested prescan depth %lu" + " out of range [%u..%u]\n", arg, PrescanDepthMin, + PrescanDepthMax); + return EINVAL; + } + vm->prescanDepth = (unsigned)arg; + break; + } + case PLEX86_SETINTR: + ioctlSetIntr(vm, *(unsigned long *)data); + break; + case PLEX86_SET_A20: + { + unsigned long arg = *(unsigned long *)data; + if (!ioctlSetA20E(vm, arg)) + return EINVAL; + break; + } + case PLEX86_MESSAGEQ: + { + vm_messages_t msg; + + if (vm->mon_state != MON_STATE_RUNNABLE) + return EINVAL; + + error = copyin(*(void **)data, &msg.header, sizeof msg.header); + if (error != 0) + return error; + + if ((msg.header.msg_len + sizeof(msg.header)) > sizeof(msg)) + return EINVAL; + + if (msg.header.msg_len != 0) { + error = copyin(&((vm_messages_t *)*(void **)data)->msg, + &msg.msg, msg.header.msg_len); + if (error != 0) + return error; + } + +#warning "deal with LDT %gs and %fs that the NetBSD kernel uses" + /* XXXX */ + __asm("movl $0, %eax"); + __asm("movl %eax, %gs"); + __asm("movl %eax, %fs"); + + if (ioctlMessageQ(vm, &msg)) { + log(LOG_WARNING, "plex86: ioctlMessageQ failed\n"); + return EINVAL; + } + + error = copyout(&msg, *(void **)data, + sizeof (msg.header) + msg.header.msg_len); + return error; + } + case PLEX86_RESET: + break; + case PLEX86_PHYMEM_MOD: + break; + case PLEX86_FORCE_INT: + if (vm->mon_state != MON_STATE_RUNNABLE) + return -EINVAL; + vm->dbg_force_int = 0x100 | (unsigned)data; + break; + case PLEX86_PRESCANRING3: + { + unsigned long arg = *(unsigned long *)data; + if (arg > PrescanRing3On) { + log(LOG_WARNING, + "plex86: Requested PrescanRing3 val(%lu) OOB\n", + arg); + return EINVAL; + } + vm->prescanRing3 = arg; + break; + } + case PLEX86_GENERIC: + return 0; + + default: + log(LOG_WARNING, "plex86: unknown ioctl %lx\n", cmd); + return EINVAL; + } + return 0; +} + +static void +register_vm(vm_t *vm, struct proc *p) +{ + struct plex86_hashhead *php; + struct plex86_vmentry *vhp; + + php = &plex86_hashtbl[PLEX86_VMHASH(p)]; +#ifdef DIAGNOSTIC + for (vhp = php->lh_first; vhp != NULL; vhp = vhp->vm_entry.le_next) { + if (vhp->vm_pid == p_pid) + panic("plex86: vm already registered, pid %u\n", + p->pid); + } +#endif + vhp = malloc(sizeof (struct plex86_vmentry), M_DEVBUF, M_WAITOK); + vhp->vm_pid = p->p_pid; + vhp->vm_vm = vm; + LIST_INSERT_HEAD(php, vhp, vm_entry); +} + +#if 0 +static void +unregister_vm(vm_t *vm, struct proc *p) +{ + struct plex86_hashhead *php; + struct plex86_vmentry *vhp; + + php = &plex86_hashtbl[PLEX86_VMHASH(p)]; + for (vhp = php->lh_first; vhp != NULL; vhp = vhp->vm_entry.le_next) { + if (vhp->vm_pid == p->p_pid) { + LIST_REMOVE(vhp, vm_entry); + free(vhp->vm_vm, M_DEVBUF); + free(vhp, M_DEVBUF); + break; + } + } +} +#endif + +static void +unregister_all(void) +{ + int i; + struct plex86_hashhead *php; + struct plex86_vmentry *vhp; + + for (i = 0; i < PLEX86_VMHASHSIZE; i++) { + php = &plex86_hashtbl[i]; + for (vhp = php->lh_first; vhp != NULL; + vhp = vhp->vm_entry.le_next) { +#ifdef NETBSD_PLEX86_DEBUG + printf("plex86: unregister vm %p, pid %u\n", + vhp->vm_vm, vhp->vm_pid); +#endif + LIST_REMOVE(vhp, vm_entry); + free(vhp->vm_vm, M_DEVBUF); + free(vhp, M_DEVBUF); + } + } +} + +static vm_t * +find_vm(struct proc *p) +{ + struct plex86_hashhead *php; + struct plex86_vmentry *vhp; + + php = &plex86_hashtbl[PLEX86_VMHASH(p)]; + for (vhp = php->lh_first; vhp != NULL; vhp = vhp->vm_entry.le_next) { + if (vhp->vm_pid == p->p_pid) + return vhp->vm_vm; + } + + return NULL; +} + +static unsigned +retrieve_phy_pages(Bit32u *page, int max_pages, void *addr_v, unsigned size, + int aligned) +{ + Bit32u start_addr; + unsigned n_pages, i; + + if (!aligned) + start_addr = (Bit32u)addr_v & ~(PAGE_SIZE-1); + else { + start_addr = (Bit32u)addr_v; + if (start_addr & (PAGE_SIZE -1)) { + log(LOG_WARNING, "plex86: retrieve_phy_pages: address " + "%p not aligned\n", addr_v); + return 0; + } + } + + n_pages = (size + PAGE_SIZE - 1) / PAGE_SIZE; + if (n_pages > max_pages) { + log(LOG_WARNING, "plex86: retrieve_phy_pages: page list " + "too small\n"); + return 0; + } + + for (i = 0; i < n_pages; i++) { + page[i] = vtophys((vaddr_t)start_addr) / PAGE_SIZE; + start_addr += PAGE_SIZE; + } + + return n_pages; +} + +unsigned +host_idle(void) +{ + if (want_resched) + yield(); + return (CURSIG(curproc) == 0); +} + +void * +host_alloc(unsigned long size) +{ + /* + * XXX - it wants this page-aligned apparently. + */ + if (size <= (PAGE_SIZE / 2)) + size = PAGE_SIZE; + return malloc(size, M_DEVBUF, M_WAITOK); +} + +void +host_free(void *ptr) +{ + free(ptr, M_DEVBUF); +} + +unsigned +host_map(Bit32u *page, int max_pages, void *ptr, unsigned size) +{ + return retrieve_phy_pages(page, max_pages, ptr, size, 1); +} + +void * +host_alloc_page(void) +{ + return malloc(PAGE_SIZE, M_DEVBUF, M_WAITOK); +} + +void +host_free_page(void *ptr) +{ + return free(ptr, M_DEVBUF); +} + +Bit32u +host_map_page(void *ptr) +{ + Bit32u u; + + if (ptr == NULL) + return 0; + u = vtophys(ptr) / PAGE_SIZE; + /* printf("host_map_page(%p) -> %x\n", ptr, u); */ + return u; +} + +void +hostprint(char *fmt, ...) +{ + va_list args; + int ret; + unsigned char buffer[256]; + + va_start(args, fmt); + ret = mon_vsnprintf(buffer, 256, fmt, args); + if (ret == -1) + log(LOG_WARNING, + "plex86: hostprint: vsnprintf returns error.\n"); + else + log(LOG_WARNING, "plex86: %s\n", buffer); +} diff --git a/bochs/plex86/kernel/host-null.c b/bochs/plex86/kernel/host-null.c new file mode 100644 index 00000000..ec93a72a --- /dev/null +++ b/bochs/plex86/kernel/host-null.c @@ -0,0 +1,161 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * host-null.c: host OS specific stubs. These provide a reference for + * ports of plex86 to various host OSes. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "plex86.h" +#define IN_HOST_SPACE +#include "monitor.h" + +/* Note: for comments on what various functions are expected to do, as + * well as a reference implemntation, read the 'host-linux.c' file. + * It's likely the most up-to-date. + */ + + +/* OS specific includes here. */ + + +/* Some declarations for the entry points etc here. */ + + + + +kernelModulePages_t kernelModulePages; + +#define NULL 0 + + int +main(int argc, char *argv[]) +{ + vm_t *vm = NULL; + + hostModuleInit(); + hostDeviceOpen(vm); + hostIoctlGeneric(vm, NULL, NULL, 0, 0); + return(0); +} + + void +hostOSReservePhyPages(vm_t *vm, Bit32u *hostPhyPages, unsigned nPages) +{ +} + + void +hostOSUnreservePhyPages(vm_t *vm, Bit32u *hostPhyPages, unsigned nPages) +{ +} + + + + unsigned +hostOSIdle(void) +{ + return 0; +} + + void * +hostOSAllocZeroedMem(unsigned long size) +{ + return 0; +} + + void +hostOSFreeMem(void *ptr) +{ +} + + void * +hostOSAllocZeroedPage(void) +{ + return 0; +} + + void +hostOSFreePage(void *ptr) +{ +} + + + unsigned +hostOSGetAllocedMemPhyPages(Bit32u *page, int max_pages, void *ptr, unsigned size) +{ + return 0; +} + + Bit32u +hostOSGetAllocedPagePhyPage(void *ptr) +{ + return 0; +} + + void +hostOSPrint(char *fmt, ...) +{ +} + + + int +hostOSConvertPlex86Errno(unsigned ret) +{ + return 0; +} + + + Bit32u +hostOSKernelOffset(void) +{ + return 0; +} + + void +hostOSModuleCountReset(vm_t *vm, void *inode, void *filp) +{ +} + + unsigned long +hostOSCopyFromUser(void *to, void *from, unsigned long len) +{ + return 0; +} + + unsigned long +hostOSCopyToUser(void *to, void *from, unsigned long len) +{ + return 0; +} + + Bit32u +hostOSGetAndPinUserPage(vm_t *vm, Bit32u userAddr, void **osSpecificPtr, + Bit32u *ppi, Bit32u *kernelAddr) +{ + return 0; +} + + void +hostOSUnpinUserPage(vm_t *vm, Bit32u userAddr, void *osSpecificPtr, + Bit32u ppi, Bit32u *kernelAddr, unsigned dirty) +{ +} + + void +hostOSInstrumentIntRedirCount(unsigned interruptVector) +{ +} diff --git a/bochs/plex86/kernel/include/descriptor2.h b/bochs/plex86/kernel/include/descriptor2.h new file mode 100644 index 00000000..9b4c6cf0 --- /dev/null +++ b/bochs/plex86/kernel/include/descriptor2.h @@ -0,0 +1,66 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * descriptor2.h: defines for descriptors and selectors + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#ifndef __DESCRIPTOR2_H__ +#define __DESCRIPTOR2_H__ + + +typedef struct +{ + Bit16u offset_low; + selector_t selector; + unsigned count:5; + unsigned RESERVED:3; + unsigned type:5; + unsigned dpl:2; + unsigned p:1; + Bit16u offset_high; +} __attribute__ ((packed)) gate_t; + + +#define SET_INT_GATE(d, S,O,P,DPL, D) {\ + d.selector = (S);\ + d.offset_high = (O) >> 16;\ + d.offset_low = (O) & 0xffff;\ + d.RESERVED = 0;\ + d.type = ((D)<<3) | 0x6;\ + d.dpl = (DPL);\ + d.p = (P);\ +} + +#define SET_TRAP_GATE(d, S,O,P,DPL, D) {\ + d.selector = (S);\ + d.offset_high = (O) >> 16;\ + d.offset_low = (O) & 0xffff;\ + d.RESERVED = 0;\ + d.type = ((D)<<3) | 0x7;\ + d.dpl = (DPL);\ + d.p = (P);\ +} + +typedef struct +{ + Bit32u offset; + Bit16u selector; +} __attribute ((packed)) far_jmp_info_t; + +#endif /* __DESCRIPTOR2_H__ */ diff --git a/bochs/plex86/kernel/include/eflags.h b/bochs/plex86/kernel/include/eflags.h new file mode 100644 index 00000000..ab8eef19 --- /dev/null +++ b/bochs/plex86/kernel/include/eflags.h @@ -0,0 +1,78 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * eflags.h: Bitfields of EFLAGS registers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __EFLAGS_H__ +#define __EFLAGS_H__ + +/* + * the eflags field looks like this: + * bit: 0 1 2 3 4 5 6 7 8 9 A B C/D E F 10 11 12 13 14 15 16 + * flg: CF 1 PF 0 AF 0 ZF SF TF IF DF OF IOPL NT 0 RF VM AC VIF VIP ID 0 + */ + +#define FLG_CF (1<<0) +#define FLG_PF (1<<2) +#define FLG_AF (1<<4) +#define FLG_ZF (1<<6) +#define FLG_SF (1<<7) +#define FLG_TF (1<<8) +#define FLG_IF (1<<9) +#define FLG_DF (1<<10) +#define FLG_OF (1<<11) +#define FLG_IOPL (3<<12) +#define FLG_NT (1<<14) +#define FLG_RF (1<<16) +#define FLG_VM (1<<17) +#define FLG_AC (1<<18) +#define FLG_VIF (1<<19) +#define FLG_VIP (1<<20) +#define FLG_ID (1<<21) + + +typedef union { + struct { + Bit8u cf:1; + Bit8u R1:1; + Bit8u pf:1; + Bit8u R3:1; + Bit8u af:1; + Bit8u R5:1; + Bit8u zf:1; + Bit8u sf:1; + Bit8u tf:1; + Bit8u if_:1; + Bit8u df:1; + Bit8u of:1; + Bit8u iopl:2; + Bit8u nt:1; + Bit8u R15:1; + Bit8u rf:1; + Bit8u vm:1; + Bit8u ac:1; + Bit8u vif:1; + Bit8u vip:1; + Bit8u id:1; + Bit16u R31_22:10; + } __attribute__ ((packed)) fields; + Bit32u raw; + } __attribute__ ((packed)) eflags_t; + +#endif /* __EFLAGS_H__ */ diff --git a/bochs/plex86/kernel/include/guest_context.h b/bochs/plex86/kernel/include/guest_context.h new file mode 100644 index 00000000..8e447468 --- /dev/null +++ b/bochs/plex86/kernel/include/guest_context.h @@ -0,0 +1,59 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * guest_context.h: monitor stack frame after exception/interrupt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __GUEST_CONTEXT_H__ +#define __GUEST_CONTEXT_H__ + +#include "eflags.h" + +/* This is the guest context (from ring3) pushed on the monitor stack (ring0) + * during an exception/interrupt. Part is pushed automatically by the + * CPU, part by the interrupt handling code. + * + * Values are pushed starting with the end of this structure, towards + * the beginning, since stack pushes descend in address. + */ +typedef struct { + Bit32u gs; + Bit32u fs; + Bit32u ds; + Bit32u es; + + Bit32u edi; + Bit32u esi; + Bit32u ebp; + Bit32u dummy_esp; + Bit32u ebx; + Bit32u edx; + Bit32u ecx; + Bit32u eax; + + Bit32u vector; + Bit32u error; + + Bit32u eip; + Bit32u cs; + eflags_t eflags; + Bit32u esp; + Bit32u ss; + } guest_context_t; + +#endif /* __GUEST_CONTEXT_H__ */ diff --git a/bochs/plex86/kernel/include/monitor.h b/bochs/plex86/kernel/include/monitor.h new file mode 100644 index 00000000..02997144 --- /dev/null +++ b/bochs/plex86/kernel/include/monitor.h @@ -0,0 +1,709 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * monitor.h: main VM monitor defines + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __MONITOR_H__ +#define __MONITOR_H__ + +#if defined(__NetBSD__) || defined(__FreeBSD__) +#include +#else +#include +#endif + + +#include "descriptor.h" +#include "descriptor2.h" +#include "tss.h" +#include "paging.h" +#include "eflags.h" +#include "guest_context.h" + +#ifndef UNUSED +# define UNUSED(x) ((void)(x)) +#endif + + +/* Method1: push event info (CPU pushes error code before) */ +typedef struct +{ + Bit8u pushl; /* Always 0x68 == pushl */ + Bit32u vector; /* Interrupt vector number */ + Bit8u jmp; /* Always 0xe9 == jmp */ + Bit32u reloc; /* Relative offset of destination */ +} __attribute__ ((packed)) idt_method1_t; + +/* Method2: push a dummy error first, then event info */ +typedef struct +{ + Bit8u pushla; /* Always 0x68 == pushl */ + Bit32u dummy; /* Dummy error code */ + Bit8u pushlb; /* Always 0x68 == pushl */ + Bit32u vector; /* Interrupt vector number */ + Bit8u jmp; /* Always 0xe9 == jmp */ + Bit32u reloc; /* Relative offset of destination */ +} __attribute__ ((packed)) idt_method2_t; + +typedef union +{ + idt_method1_t m1; + idt_method2_t m2; +} idt_stub_t; + + +/* Nexus fields. This C structure maps to identical assembly */ +/* fields in nexus.S. Make sure to update both! These fields */ +/* are accessible to the nexus code during the transition from */ +/* host<->guest and are stored in a single page. */ + +typedef struct { + /* guest pointer to vm_t structure. */ + void *vm; + + /* These fields are only used by the transition code. */ + /* They hold all info necessary to switch back to the host. */ + gdt_info_t host_gdt_info; + gdt_info_t host_idt_info; + far_jmp_info_t host_jmp_info; + far_jmp_info_t host_stack_info; + Bit16u host_ldt_sel; + Bit16u host_tss_sel; + Bit32u host_cr0; + Bit32u host_cr2; + Bit32u host_cr3; + Bit32u host_cr4; + + /* These fields are filled by the host-side code, and used */ + /* by the transition code. They contain all info necessary */ + /* to switch to the monitor/guest address space. */ + /* This info changes whenever the monitor migrates. */ + gdt_info_t mon_gdt_info; + gdt_info_t mon_idt_info; + far_jmp_info_t mon_jmp_info; + far_jmp_info_t mon_stack_info; + Bit16u mon_ldt_sel; + Bit16u mon_tss_sel; + Bit32u mon_base; + Bit32u mon_cr0; + Bit32u mon_cr3; + Bit32u mon_cr4; + Bit32u mon_eflags; + + /* These fields contain info used by the transition code to */ + /* create the temporary identity mapping. They never change. */ + pageEntry_t transition_pde; + pageEntry_t *transition_pde_p_host; + pageEntry_t *transition_pde_p_mon; + Bit32u transition_laddr; +} __attribute__ ((packed)) nexus_t; + + +/* For reference, the following describes where bits from the guest */ +/* eflags register are stored/managed. */ +/* */ +/* Key: */ +/* g: Flag value as requested by guest */ +/* V: Virtualized flag value, as loaded in eflags when guest is executing */ +/* ?: Unhandled yet, request of set bit causes panic for now */ +/* */ +/* === ======= ====== ======= ======= ======= */ +/* |I|V|V|A|V|R|0|N|IO|O|D|I|T|S|Z|0|A|0|P|1|C| flag */ +/* |D|I|I|C|M|F| |T|PL|F|F|F|F|F|F| |F| |F| |F| */ +/* | |P|F| | | | | | | | | | | | | | | | | | | */ +/* |g|?|?|g|V|g|g|g|VV|g|g|V|g|g|g|g|g|g|g|g|g| context->eflags */ +/* | |?|?| |g| | | |gg| | |g| | | | | | | | | | veflags */ + +/* #define VirtualizedEflags 0x001a3200 */ +#define VirtualizedEflags 0x001a3300 + + +/* I define the 'nexus' as the set of data structures which */ +/* must exist in the current linear guest address space. The */ +/* host linear address space is not available while the current */ +/* guest code is running, since we are using a completely */ +/* different set of page mappings for the guest. However, */ +/* at some point an exception/interrupt will occur. The */ +/* interrupt mechanisms require that several structures exist in */ +/* the current linear address space in order to service such */ +/* an event. These data structures make up part of our VM, */ +/* a thin layer which exists in the guest. Following is a */ +/* list of what data structures compose this 'nexus': */ +/* */ +/* - IDT (max 2048 bytes) */ +/* - GDT (max 65536 bytes) */ +/* - LDT (max 65536 bytes) */ +/* - TSS (max 8328 = 104 + 32 int redir + 8192 I/O permissions) */ +/* - kernel stack page */ +/* - transition code (host <--> guest) */ +/* - interrupt handler stubs */ +/* - Page Tables; PDE & PTE pages. */ + +/* + * Sizes of various nexus data structures used by the monitor + */ + +#define PLEX86_MAX_PHY_MEGS 32 +#define PAGESIZE 4096 + +#define IDT_STUB_SIZE 15 +#define BytesToPages(b) ( ((b)+4095) >> 12 ) + +#define MON_IDT_SIZE (8*256) +#define MON_GDT_SIZE (8*512) +#define MON_LDT_SIZE (8*1) +#define MON_IDT_STUBS_SIZE (IDT_STUB_SIZE*256) +#define MON_TSS_SIZE (104) + +#define MON_IDT_PAGES BytesToPages(MON_IDT_SIZE) +#define MON_GDT_PAGES BytesToPages(MON_GDT_SIZE) +#define MON_LDT_PAGES BytesToPages(MON_LDT_SIZE) +#define MON_IDT_STUBS_PAGES BytesToPages(MON_IDT_STUBS_SIZE) +#define MON_TSS_PAGES BytesToPages(MON_TSS_SIZE) + +#define MAX_MON_GUEST_PAGES (PLEX86_MAX_PHY_MEGS * 256) +/* +++ MON_PAGE_TABLES is kind of random */ +#define MON_PAGE_TABLES (10*((PLEX86_MAX_PHY_MEGS+3) >> 2)) + +#define MAX_VM_STRUCT_PAGES (68) + +#define LOG_BUFF_PAGES 1 +#define LOG_BUFF_SIZE ((LOG_BUFF_PAGES)*4096) + +/* + * Pages allocated for the VM by the host kernel driver. + * N Megs of physical memory are allocated, per the user's + * request, for the guest OS/application code. + * Additionally, some other overhead pages are allocated + * for structures such as the page directory, page tables, + * and other virtualized facilities. + */ + +typedef struct { + /* requested size of the guest[] array in megs and pages */ + unsigned guest_n_megs; + unsigned guest_n_pages; + unsigned guest_n_bytes; + + /* pages comprising the vm_t struct itself. */ + Bit32u vm[MAX_VM_STRUCT_PAGES]; + + /* for the monitor's page directory */ + Bit32u page_dir; + + /* for the monitor's page table */ + Bit32u page_tbl[MON_PAGE_TABLES]; + + /* Map of the linear addresses of page tables currently */ + /* mapped into the monitor space. */ + Bit32u page_tbl_laddr_map; + + /* for the extra page table that maps our nexus code and structures */ + Bit32u nexus_page_tbl; + + /* For the CPU state passed between user and kernel/monitor space. */ + Bit32u guest_cpu; + void *guest_cpu_hostOSPtr; + + /* We need a Page Table for identity mapping the transition code */ + /* between host and monitor spaces. */ + Bit32u transition_PT; + + Bit32u log_buffer[LOG_BUFF_PAGES]; + void *log_buffer_hostOSPtr[LOG_BUFF_PAGES]; + + /* Physical addresses of host pages which comprise the actual */ + /* monitor structures. These will be mapped into the current */ + /* guest task's linear address space as well. */ + Bit32u nexus; + Bit32u idt[MON_IDT_PAGES]; + Bit32u gdt[MON_GDT_PAGES]; + Bit32u ldt[MON_LDT_PAGES]; + Bit32u tss[MON_TSS_PAGES]; + Bit32u idt_stubs[MON_IDT_STUBS_PAGES]; + } vm_pages_t; + + +typedef struct { + pageEntry_t *page_dir; + page_t *page_tbl; + unsigned *page_tbl_laddr_map; + page_t *nexus_page_tbl; + guest_cpu_t *guest_cpu; + page_t *transition_PT; + unsigned char *log_buffer; + Bit8u *code_phy_page; /* only use in mon space */ + Bit8u *tmp_phy_page0; /* only use in mon space */ + Bit8u *tmp_phy_page1; /* only use in mon space */ + + nexus_t *nexus; + /* Pointer into the monitor stack, so we can easily retrieve the */ + /* stack snapshot upon interrupt/exception. */ + guest_context_t *guest_context; + gate_t *idt; + descriptor_t *gdt; + descriptor_t *ldt; + tss_t *tss; + idt_stub_t *idt_stubs; + } vm_addr_t; + + +/* These bits define the possible usage and attributes assigned */ +/* to a particular guest physical page. These are useful for keeping */ +/* track of what kinds of system structures are contained in a page */ +/* at a given time, and if the page has associated cached code */ +/* information in the prescan logic. We can also tag particular */ +/* pages with other more static attributes. */ + +typedef union { + struct { + Bit32u access_perm:2; /* */ + Bit32u lmap_count:2; /* */ + Bit32u ptbl:1; /* page table */ + Bit32u pdir:1; /* page directory */ + Bit32u spare0:1; /* (spare) */ + Bit32u memMapIO:1; /* MemMapIO */ + Bit32u RO:1; /* RO */ + Bit32u allocated:1; /* Allocated */ + Bit32u pinned:1; /* Pinned by host OS. */ + Bit32u spare1:1; /* (spare) */ + Bit32u laddr_backlink:20; /* 1st unvirtualized laddr backlink */ + } __attribute__ ((packed)) fields; + Bit32u raw; + } __attribute__ ((packed)) phy_page_attr_t; + +typedef struct { + phy_page_attr_t attr; + Bit64u tsc; /* for comparing to CR3 timestamp counter */ + + Bit32u hostPPI; + } __attribute__ ((packed)) phyPageInfo_t; + +/* Possible values of the access_perm field above. */ +#define PagePermRW 0 +#define PagePermRO 1 +#define PagePermEmulate 2 +#define PagePermNA PagePermEmulate /* No Access is synomym */ + + +/* Bitmasks to access fields in structure above. */ +#define PageUsagePTbl 0x010 +#define PageUsagePDir 0x020 + +#define PageUsageMemMapIO 0x080 +#define PageUsageRO 0x100 +#define PageUsageAllocated 0x200 +#define PageUsageSwappable 0x400 + +/* Group of attributes which retain their value, even when CR3 */ +/* is reloaded and the page mappings are flushed. */ +#define PageUsageSticky \ + ( PageUsageMemMapIO | PageUsageRO | \ + PageUsageAllocated | PageUsageSwappable ) + +/* Group of attributes which are not compatible with a Page Table */ +/* occupying a physical page. */ +#define PageBadUsage4PTbl \ + ( PageUsagePDir | PageUsageMemMapIO | PageUsageRO ) + +/* Group of attributes which are not compatible with a Page Directory */ +/* occupying a physical page. Keep in mind, when the PDir is marked, */ +/* no other dynamic bits will be set. */ +#define PageBadUsage4PDir \ + ( PageUsageMemMapIO | PageUsageRO ) + +#define PageUsageCausesNA \ + ( PageUsagePTbl | PageUsagePDir | PageUsageMemMapIO ) +#define PageUsageCausesRO \ + ( PageUsageRO ) + +#define PDEUnhandled 0x000001d8 +#define PTEUnhandled 0x00000198 + + +#define ExceptionDE 0 /* Divide Error (fault) */ +#define ExceptionDB 1 /* Debug (fault/trap) */ +#define ExceptionBP 3 /* Breakpoint (trap) */ +#define ExceptionOF 4 /* Overflow (trap) */ +#define ExceptionBR 5 /* BOUND (fault) */ +#define ExceptionUD 6 +#define ExceptionNM 7 +#define ExceptionDF 8 +#define ExceptionTS 10 +#define ExceptionNP 11 +#define ExceptionSS 12 +#define ExceptionGP 13 +#define ExceptionPF 14 +#define ExceptionMF 16 +#define ExceptionAC 17 + + +#define CR0_PE (1<<0) +#define CR0_MP (1<<1) +#define CR0_EM (1<<2) +#define CR0_TS (1<<3) +#define CR0_ET (1<<4) +#define CR0_NE (1<<5) +#define CR0_WP (1<<16) +#define CR0_AM (1<<18) +#define CR0_NW (1<<29) +#define CR0_CD (1<<30) +#define CR0_PG (1<<31) + +/* + * Complete state of the VM (Virtual Machine). + */ +typedef struct { + Bit32u guestPhyMemAddr; /* Ptr to malloced memory from user space. */ + + /* Store eflags values of the guest which are virtualized to + * run in the monitor + */ + eflags_t veflags; + + unsigned executeMethod; + unsigned vmState; + + unsigned mon_request; + unsigned guestFaultNo; + Bit32u pinReqPPI; + + unsigned redirect_vector; + + Bit32u kernel_offset; + +#define MonitorSpace 0 +#define UserSpace 1 +#define HostSpace 2 + + volatile unsigned inMonFault; + + /* Extra info on aborts, especially when a message can't + * be printed out + */ + unsigned abort_code; + + struct { + Bit64u t0; /* TSC before excecution of guest code */ + Bit64u cyclesElapsed; /* Cycles of guest execution */ + unsigned a20Enable; /* A20 line enabled? */ + Bit32u a20AddrMask; /* mask to apply to phy address */ + Bit32u a20IndexMask; /* mask to apply to phy address */ + } system; + + cpuid_info_t guestCPUIDInfo; + +/* This macro yields a physical address after applying the A20 line + * enable mask to the original physical address. + */ +#define A20Addr(vm, paddr) ( (paddr) & ((vm)->system.a20AddrMask) ) +#define A20PageIndex(vm, pi) ( (pi) & ((vm)->system.a20IndexMask) ) + + /* Keep an index of the next available Page Table */ + unsigned ptbl_laddr_map_i; + + Bit32u mon_pde_mask; /* Upper 10 bits of monitor lin addr space */ + Bit32u mon_pdi; /* Same value shifted down 22 bits. */ + Bit64u vpaging_tsc; /* time stamp of last page mappings flush */ + + /* We need to keep track of what each of the guest's physical */ + /* pages contains, and maintain some additional attributes. */ + /* We determine which kinds of information reside in the page, */ + /* dynamically. */ + phyPageInfo_t pageInfo[MAX_MON_GUEST_PAGES]; + + /* This is a hack for now. I need to store the "struct page *" + * information returned by get_user_pages() in the Linux kernel. + * Should clean this up. + */ + void *hostStructPagePtr[MAX_MON_GUEST_PAGES]; + + /* A revolving queue, which stores information on guest physical memory + * pages which are currently pinned. Only a certain number of pages + * may be pinned at any one time. This is a really simplistic + * strategy - when the Q is full, the page which was pinned the + * longest time ago is unpinned to make room. It's a + * "least recently pinned" strategy. + */ +#define MaxPhyPagesPinned 1024 /* 4Megs of pinned pages max per VM. */ + struct { + unsigned nEntries; /* Number of entries in table. */ + unsigned tail; + Bit32u ppi[MaxPhyPagesPinned]; /* Physical Page Index of pinned guest page. */ + } guestPhyPagePinQueue; + + struct { + volatile unsigned event; /* Any log event occurred. */ + /* Inactive, OK to dump to host and change */ + volatile unsigned locked; + /* Number of times buffer wrapped since last print to kernel */ + /* debug facility */ + volatile unsigned offset; /* Current index within buffer */ + volatile unsigned error; /* Error printing. (ex. string too long) */ + } log_buffer_info; + + vm_pages_t pages; /* memory pages allocated by the host */ + + /* Host specific fields. These fields should NOT be accessed */ + /* from code which may execute in either host or monitor/guest */ + /* spaces, unless you need to _specifically_ manipulate a */ + /* host-specific field. */ + struct { + vm_addr_t addr; /* addresses of data structures in host space */ + void (*__host2mon)(void); /* Host to guest nexus entry point */ + pageEntry_t nexus_pde; /* PDE pointing to nexus page table */ + } host; + + /* Guest specific fields. These fields should NOT be accessed */ + /* from code which may execute in either host or monitor/guest */ + /* spaces, unless you need to _specifically_ manipulate a */ + /* guest-specific field. */ + struct { + vm_addr_t addr; /* addresses of data structures in guest space */ + void (*__mon2host)(void); /* monitor to host entry point */ + } guest; + } vm_t; + + +extern char __nexus_start, __nexus_end, __mon_cs; +extern char __host2mon, __mon2host, __handle_fault, __handle_int; +extern char __ret_to_guest; + + + +/* + * This structure describes the pages containing the code/data + * of the monitor itself (inside the kernel module) + */ + +#define Plex86MaxKernelModulePages 128 + +typedef struct { + /* Virtual address space occupied by the kernel module. */ + Bit32u startOffset; + Bit32u startOffsetPageAligned; + unsigned nPages; /* Number of pages. */ + + /* A list of the Physical Page Indeces of the pages comprising the + * kernel module. A PPI is just the physical page address >> 12. + */ + Bit32u ppi[Plex86MaxKernelModulePages]; + } kernelModulePages_t; + +extern kernelModulePages_t kernelModulePages; +extern cpuid_info_t hostCpuIDInfo; + + + +#if !defined(IN_HOST_SPACE) && !defined(IN_MONITOR_SPACE) +#error "No space defined for this file" +#endif + + +#if defined(IN_HOST_SPACE) || defined(IN_MONITOR_SPACE) + +void mon_memzero(void *ptr, int size); +void mon_memcpy(void *dst, void *src, int size); +void *mon_memset(void *s, unsigned c, unsigned n); + +/* + * We need to set the monitor CS/DS base address so that the module pages, + * which are mapped starting at linear address 'laddr' into the guest address + * space, reside at the same offset relative to the monitor CS base as they + * reside relative to the kernel CS base in the host address space. This way, + * we can execute the (non-relocatable) module code within the guest address + * space ... + */ +#define MON_BASE_FROM_LADDR(laddr) \ + ((laddr) - kernelModulePages.startOffsetPageAligned) + + +/* ============================================================ + * These are the functions which are available in either of the + * host or monitor/guest spaces. + */ + + +/* Access to label offsets in nexus.S... From the host address perspective */ +#define HOST_NEXUS_OFFSET(vm, field) \ + ( ((Bit32u)vm->host.addr.nexus) + \ + (((Bit32u) &field) - ((Bit32u) &__nexus_start)) ) + +/* From the monitor/guest address perspective. */ +#define MON_NEXUS_OFFSET(vm, field) \ + ( ((Bit32u)vm->guest.addr.nexus) + \ + (((Bit32u) &field) - ((Bit32u) &__nexus_start)) ) + + static __inline__ Bit64u +vm_rdtsc(void) { + Bit64u ret; + asm volatile ( + "rdtsc" + : "=A" (ret) + ); + return ret; + } +#endif /* {HOST, MONITOR} */ + + + + +#ifdef IN_HOST_SPACE +/* ========================================================== + * These are the functions which are available to the monitor + * running in the host space. + */ + + +/* + * Generate a software interrupt + */ + +#define soft_int(n) \ + asm volatile ( \ + " movb %b0, __soft_int_vector \n\t" \ + " jmp __soft_int_n \n\t" \ + "__soft_int_n: \n\t" \ + " sti \n\t" \ + " .byte 0xcd \n\t" \ + "__soft_int_vector: \n\t" \ + " .byte 0x00 \n\t" \ + : \ + : "r" ((Bit8u) (n) ) \ + : "memory" \ + ) + +#define Plex86ErrnoEBUSY 1 +#define Plex86ErrnoENOMEM 2 +#define Plex86ErrnoEFAULT 3 +#define Plex86ErrnoEINVAL 4 +#define Plex86ErrnoEACCES 5 +#define Plex86ErrnoEAGAIN 6 + +#define vm_save_flags(x) \ + asm volatile("pushfl ; popl %0": "=g" (x): :"memory") + +#define vm_restore_flags(x) \ + asm volatile("pushl %0 ; popfl": :"g" (x): "memory", "cc") + + +int hostInitMonitor(vm_t *); +unsigned hostMapMonitor(vm_t *); +unsigned hostInitGuestPhyMem(vm_t *); +void hostUnallocVmPages(vm_t *); +int hostAllocVmPages(vm_t *, plex86IoctlRegisterMem_t *registerMsg); +void hostInitShadowPaging(vm_t *vm); +void hostDeviceOpen(vm_t *); +unsigned hostModuleInit(void); +unsigned hostGetCpuCapabilities(void); +int hostIoctlGeneric(vm_t *vm, void *inode, void *filp, + unsigned int cmd, unsigned long arg); +int hostIoctlExecute(vm_t *vm, plex86IoctlExecute_t *executeMsg); +int hostIoctlRegisterMem(vm_t *vm, plex86IoctlRegisterMem_t *registerMsg); +void hostCopyGuestStateToUserSpace(vm_t *vm); +void hostReleasePinnedUserPages(vm_t *vm); +unsigned hostHandlePagePinRequest(vm_t *vm, Bit32u reqPPI); + +/* These are the functions that the host-OS-specific file of the + * plex86 device driver must define. + */ +unsigned hostOSIdle(void); +void *hostOSAllocZeroedMem(unsigned long size); +void hostOSFreeMem(void *ptr); +void *hostOSAllocZeroedPage(void); +void hostOSFreePage(void *ptr); +unsigned hostOSGetAllocedMemPhyPages(Bit32u *page, int max_pages, void *ptr, + unsigned size); +Bit32u hostOSGetAndPinUserPage(vm_t *vm, Bit32u userAddr, void **osSpecificPtr, + Bit32u *ppi, Bit32u *kernelAddr); +void hostOSUnpinUserPage(vm_t *vm, Bit32u userAddr, void *osSpecificPtr, + Bit32u ppi, Bit32u *kernelAddr, unsigned dirty); +Bit32u hostOSGetAllocedPagePhyPage(void *ptr); +void hostOSPrint(char *fmt, ...); +Bit32u hostOSKernelOffset(void); +int hostOSConvertPlex86Errno(unsigned ret); +void hostOSModuleCountReset(vm_t *vm, void *inode, void *filp); +void hostOSInstrumentIntRedirCount(unsigned interruptVector); +unsigned long hostOSCopyFromUser(void *to, void *from, unsigned long len); +unsigned long hostOSCopyToUser(void *to, void *from, unsigned long len); + +#endif /* HOST Space */ + + + + +#ifdef IN_MONITOR_SPACE +/* ========================================================== + * These are the functions which are available to the monitor + * running in the monitor/guest space. + */ + +void sysFlushPrintBuf(vm_t *); +void sysRemapMonitor(vm_t *); +int monprint(vm_t *, char *fmt, ...); +int mon_vsnprintf(char *str, unsigned size, const char *fmt, + va_list args); +void resetPrintBuf(vm_t *); + +/* Translate from guest laddr to monitor laddr. */ +#define Guest2Monitor(vm, laddr) ( ((Bit32u) (laddr)) - \ + vm->guest.addr.nexus->mon_base ) + +void monpanic(vm_t *, char *fmt, ...) __attribute__ ((noreturn)); +void monpanic_nomess(vm_t *); + +void toHostGuestFault(vm_t *, unsigned fault); +void toHostPinUserPage(vm_t *, Bit32u ppi); + +void guestPageFault(vm_t *, guest_context_t *context, Bit32u cr2); +void *open_guest_phy_page(vm_t *, Bit32u ppage_index, Bit8u *mon_offset); +void close_guest_phy_page(vm_t *, Bit32u ppage_index); + +#define MapLinOK 0 +#define MapLinMonConflict 1 +#define MapLinAlreadyMapped 2 +#define MapLinPPageOOB 3 +#define MapLinException 4 +#define MapLinEmulate 5 +unsigned mapGuestLinAddr(vm_t *, Bit32u guest_laddr, + Bit32u *guest_ppage_index, unsigned us, + unsigned rw, Bit32u attr, Bit32u *error); +unsigned addPageAttributes(vm_t *, Bit32u ppi, Bit32u attr); +phyPageInfo_t *getPageUsage(vm_t *, Bit32u ppage_index); +void virtualize_lconstruct(vm_t *, Bit32u l0, Bit32u l1, unsigned perm); + +unsigned getMonPTi(vm_t *, unsigned pdi, unsigned source); +#define invlpg_mon_offset(mon_offset) \ + asm volatile ("invlpg (%0)": :"r" (mon_offset): "memory") + +/* For now nothing, but we should conditionally compile in code + * to panic when the expression is not true. + */ + +#define VM_ASSERT(vm, expression) \ + if ( !(expression) ) \ + monpanic(vm, "Assertion (%s) failed at %s:%u", \ + #expression, __FILE__, __LINE__) + +#define CLI() asm volatile ("cli": : : "memory") +#define STI() asm volatile ("sti": : : "memory") + +#endif /* MONITOR Space. */ + +#endif /* __MONITOR_H__ */ diff --git a/bochs/plex86/kernel/include/paging.h b/bochs/plex86/kernel/include/paging.h new file mode 100644 index 00000000..c8a141cf --- /dev/null +++ b/bochs/plex86/kernel/include/paging.h @@ -0,0 +1,51 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * paging.h: defines for x86 paging structures + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __PAGING_H__ +#define __PAGING_H__ + +#define PG_D 0x00000040 +#define PG_A 0x00000020 + +/* Page Directory/Table format */ +typedef union { + Bit32u raw; + struct { + Bit32u P:1; + Bit32u RW:1; + Bit32u US:1; + Bit32u PWT:1; + Bit32u PCD:1; + Bit32u A:1; + Bit32u D:1; + Bit32u PS:1; + Bit32u G:1; + Bit32u avail:3; + Bit32u base:20; + } __attribute__ ((packed)) fields; + } __attribute__ ((packed)) pageEntry_t; + +typedef union { + Bit8u bytes[4096]; + pageEntry_t pte[1024]; + } page_t; + +#endif /* __PAGING_H__ */ diff --git a/bochs/plex86/kernel/include/tss.h b/bochs/plex86/kernel/include/tss.h new file mode 100644 index 00000000..1649b29f --- /dev/null +++ b/bochs/plex86/kernel/include/tss.h @@ -0,0 +1,50 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * tss.h: defines for x86 hardware tasking structures + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __TSS_H__ +#define __TSS_H__ + +typedef struct +{ + Bit16u back, RESERVED0; /* Backlink */ + Bit32u esp0; /* The CK stack pointer */ + Bit16u ss0, RESERVED1; /* The CK stack selector */ + Bit32u esp1; /* The parent KL stack pointer */ + Bit16u ss1, RESERVED2; /* The parent KL stack selector */ + Bit32u esp2; /* Unused */ + Bit16u ss2, RESERVED3; /* Unused */ + Bit32u cr3; /* The page directory pointer */ + Bit32u eip; /* The instruction pointer */ + Bit32u eflags; /* The flags */ + Bit32u eax, ecx, edx, ebx; /* The general purpose registers */ + Bit32u esp, ebp, esi, edi; /* The special purpose registers */ + Bit16u es, RESERVED4; /* The extra selector */ + Bit16u cs, RESERVED5; /* The code selector */ + Bit16u ss, RESERVED6; /* The application stack selector */ + Bit16u ds, RESERVED7; /* The data selector */ + Bit16u fs, RESERVED8; /* And another extra selector */ + Bit16u gs, RESERVED9; /* ... and another one */ + Bit16u ldt, RESERVED10; /* The local descriptor table */ + Bit16u trap; /* The trap flag (for debugging) */ + Bit16u io; /* The I/O Map base address */ +} __attribute__ ((packed)) tss_t; + +#endif /* __TSS_H__ */ diff --git a/bochs/plex86/kernel/monitor-host.c b/bochs/plex86/kernel/monitor-host.c new file mode 100644 index 00000000..baf7fdfc --- /dev/null +++ b/bochs/plex86/kernel/monitor-host.c @@ -0,0 +1,1886 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * monitor-host.c: This file contains the top-level monitor code, + * accessible from the host space. (kernel independent code) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "plex86.h" +#define IN_HOST_SPACE +#include "monitor.h" + + +/* ===================================================================== + * Plex86 module global variables. This should be the _only_ place + * where globals are declared. Since plex86 supports multiple VMs, almost + * all data is stored per-VM. For the few variables which are global + * to all VMs, we have to be careful to access them in SMP friendly ways. + * The ones which are written upon kernel module initialization are fine, + * since they are only written once. + * ===================================================================== + */ + +/* Info regarding the physical pages that comprise the kernel module, + * including physical page information. This is written (once) at + * kernel module initialization time. Thus there are no SMP access issues. + */ +kernelModulePages_t kernelModulePages; + +/* Information of the host processor as returned by the CPUID + * instruction. This is written (once) at kernel module initialization time. + * Thus there no are SMP access issues. + */ +cpuid_info_t hostCpuIDInfo; + + +/* Some constants used by the VM logic. Since they're "const", there are + * no problems with SMP access. + */ +static const selector_t nullSelector = { raw: 0 }; +static const descriptor_t nullDescriptor = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + + + + +static int hostInitIDTSlot(vm_t *vm, unsigned vec, int type); +static void hostMapMonPages(vm_t *vm, Bit32u *, unsigned, Bit32u *, page_t *, + unsigned user, unsigned writable, char *name); +#if ANAL_CHECKS +static void hostMapBlankPage(vm_t *vm, Bit32u *laddr_p, page_t *pageTable); +#endif + +#define RW0 0 +#define RW1 1 +#define US0 0 +#define US1 1 + +#define IDT_INTERRUPT 0 +#define IDT_EXCEPTION_ERROR 1 +#define IDT_EXCEPTION_NOERROR 2 + + + + + + unsigned +hostModuleInit(void) +{ + /* Kernel independent stuff to do at kernel module load time. */ + + if (!hostGetCpuCapabilities()) { + hostOSPrint("getCpuCapabilities returned error\n"); + return(0); /* Fail. */ + } + else { +#if 0 + hostOSPrint("ptype:%u, family:%u, model:%u stepping:%u\n", + hostCpuIDInfo.procSignature.fields.procType, + hostCpuIDInfo.procSignature.fields.family, + hostCpuIDInfo.procSignature.fields.model, + hostCpuIDInfo.procSignature.fields.stepping); +#endif + } + + /* xxx Should check that host CS.base is page aligned here. */ + +#if 1 + { + Bit32u cr0; + + asm volatile ( "movl %%cr0, %0" : "=r" (cr0) ); + hostOSPrint("host CR0=0x%x\n", cr0); + } +#endif + + return(1); /* Pass. */ +} + + void +hostDeviceOpen(vm_t *vm) +{ + /* Kernel independent stuff to do at device open time. */ + + /* Zero out entire VM structure. */ + mon_memzero( vm, sizeof(vm_t) ); + + vm->vmState = VMStateFDOpened; +} + + int +hostInitMonitor(vm_t *vm) +{ + unsigned pdi, pti; + unsigned int i; + Bit32u nexus_size; + page_t *pageTable; + Bit32u laddr, base; + int r; + + vm->kernel_offset = hostOSKernelOffset(); + + vm->system.a20Enable = 1; /* Start with A20 line enabled. */ + vm->system.a20AddrMask = 0xffffffff; /* All address lines contribute. */ + vm->system.a20IndexMask = 0x000fffff; /* All address lines contribute. */ + + /* Initialize nexus */ + mon_memzero(vm->host.addr.nexus, 4096); + + /* Copy transition code (nexus) into code page allocated for this VM. */ + nexus_size = ((Bit32u) &__nexus_end) - ((Bit32u) &__nexus_start); + if (nexus_size > 4096) + goto error; + mon_memcpy(vm->host.addr.nexus, &__nexus_start, nexus_size); + + + /* Init the convenience pointers. */ + + /* Pointer to host2mon routine inside nexus page */ + vm->host.__host2mon = (void (*)(void)) HOST_NEXUS_OFFSET(vm, __host2mon); + + /* Pointer to guest context on monitor stack */ + vm->host.addr.guest_context = (guest_context_t *) + ( (Bit32u)vm->host.addr.nexus + PAGESIZE - sizeof(guest_context_t) ); + + /* Zero out various monitor data structures */ + mon_memzero(vm->host.addr.log_buffer, 4096*LOG_BUFF_PAGES); + mon_memzero(&vm->log_buffer_info, + sizeof(vm->log_buffer_info)); + mon_memzero(vm->host.addr.page_dir, 4096); + mon_memzero(vm->host.addr.guest_cpu, 4096); + mon_memzero(vm->host.addr.idt, MON_IDT_PAGES*4096); + mon_memzero(vm->host.addr.gdt, MON_GDT_PAGES*4096); + mon_memzero(vm->host.addr.ldt, MON_LDT_PAGES*4096); + mon_memzero(vm->host.addr.tss, MON_TSS_PAGES*4096); + mon_memzero(vm->host.addr.idt_stubs, MON_IDT_STUBS_PAGES*4096); + + vm->guestPhyPagePinQueue.nEntries = 0; + vm->guestPhyPagePinQueue.tail = 0; + + /* + * ================ + * Nexus Page Table + * ================ + * + * All structures needed by the monitor inside the guest environment + * (code to perform the transition between host<-->guest, fault handler + * code, various processor data structures like page directory, GDT, + * IDT, TSS etc.) are mapped into a single Page Table. + * + * This allows us to migrate the complete nexus to anywhere in the + * guest address space by just updating a single (unused) page directory + * entry in the monitor/guest page directory to point to this nexus + * page table. + * + * To simplify nexus migration, we try to avoid storing guest linear + * addresses to nexus structures as far as possible. Instead, we use + * offsets relative to the monitor code/data segments. As we update + * the base of these segments whenever the monitor migrates, the net + * effect is that those *offsets* remain valid across nexus migration. + */ + + /* Fill in the PDE flags. The US bit is set to 1 (user access). + * All of the US bits in the monitor PTEs are set to 0 (system access). + */ + vm->host.nexus_pde.fields.base = vm->pages.nexus_page_tbl; + vm->host.nexus_pde.fields.avail = 0; + vm->host.nexus_pde.fields.G = 0; /* not global */ + vm->host.nexus_pde.fields.PS = 0; /* 4K pages */ + vm->host.nexus_pde.fields.D = 0; /* (unused in pde) */ + vm->host.nexus_pde.fields.A = 0; /* not accessed */ + vm->host.nexus_pde.fields.PCD = 0; /* normal caching */ + vm->host.nexus_pde.fields.PWT = 0; /* normal write-back */ + vm->host.nexus_pde.fields.US = 1; /* user access (see above) */ + vm->host.nexus_pde.fields.RW = 1; /* read or write */ + vm->host.nexus_pde.fields.P = 1; /* present in memory */ + + /* Clear Page Table. */ + pageTable = vm->host.addr.nexus_page_tbl; + mon_memzero(pageTable, 4096); + + /* xxx Comment here */ + laddr = 0; + base = MON_BASE_FROM_LADDR(laddr); + + hostMapMonPages(vm, kernelModulePages.ppi, kernelModulePages.nPages, &laddr, + pageTable, US0, RW1, "Monitor code/data pages"); + + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + + vm->guest.addr.nexus = (nexus_t *) (laddr - base); + hostMapMonPages(vm, &vm->pages.nexus, 1, &laddr, pageTable, US0, RW1, "Nexus"); + vm->guest.addr.guest_context = (guest_context_t *) + ( (Bit32u)vm->guest.addr.nexus + PAGESIZE - sizeof(guest_context_t) ); + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + vm->host.addr.nexus->vm = (void *) (laddr - base); + hostMapMonPages(vm, vm->pages.vm, BytesToPages(sizeof(*vm)), + &laddr, pageTable, US0, RW1, "VM structure"); + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + vm->guest.addr.idt = (gate_t *) (laddr - base); + hostMapMonPages(vm, vm->pages.idt, MON_IDT_PAGES, &laddr, pageTable, US0, RW1, + "IDT"); + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + vm->guest.addr.gdt = (descriptor_t *) (laddr - base); + hostMapMonPages(vm, vm->pages.gdt, MON_GDT_PAGES, &laddr, pageTable, US0, RW1, + "GDT"); + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + vm->guest.addr.ldt = (descriptor_t *) (laddr - base); + hostMapMonPages(vm, vm->pages.ldt, MON_LDT_PAGES, &laddr, pageTable, US0, RW1, + "LDT"); + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + vm->guest.addr.tss = (tss_t *) (laddr - base); + hostMapMonPages(vm, vm->pages.tss, MON_TSS_PAGES, &laddr, pageTable, US0, RW1, + "TSS"); + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + vm->guest.addr.idt_stubs = (idt_stub_t *) (laddr - base); + hostMapMonPages(vm, vm->pages.idt_stubs, MON_IDT_STUBS_PAGES, &laddr, + pageTable, US0, RW1, "IDT stubs"); + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + /* Monitor Page Directory */ + vm->guest.addr.page_dir = (pageEntry_t *) (laddr - base); + hostMapMonPages(vm, &vm->pages.page_dir, 1, &laddr, pageTable, US0, RW1, + "Monitor Page Directory"); + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + /* Nexus Page Table */ + vm->guest.addr.nexus_page_tbl = (page_t *) (laddr - base); + hostMapMonPages(vm, &vm->pages.nexus_page_tbl, 1, &laddr, pageTable, US0, RW1, + "Nexus Page Table"); + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + /* Map virtualized guest page tables into monitor. */ + vm->guest.addr.page_tbl = (page_t *) (laddr - base); + hostMapMonPages(vm, vm->pages.page_tbl, MON_PAGE_TABLES, + &laddr, pageTable, US0, RW1, "Guest Page Tables"); + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + /* Map of linear addresses of page tables mapped into monitor */ + vm->guest.addr.page_tbl_laddr_map = (unsigned *) (laddr - base); + hostMapMonPages(vm, &vm->pages.page_tbl_laddr_map, 1, &laddr, pageTable, + US0, RW1, "Page Table Laddr Map"); + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + /* Guest CPU state (mapped RW into user space also). */ + vm->guest.addr.guest_cpu = (guest_cpu_t *) (laddr - base); + hostMapMonPages(vm, &vm->pages.guest_cpu, 1, &laddr, + pageTable, US0, RW1, "Guest CPU State"); + + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + /* + * We need a buffer to implement a debug print facility which + * can work in either host or monitor space. Map the buffer + * into monitor/guest space. + */ + vm->guest.addr.log_buffer = (unsigned char *) (laddr - base); + hostMapMonPages(vm, vm->pages.log_buffer, LOG_BUFF_PAGES, &laddr, + pageTable, US0, RW1, "Log Buffer"); + + { + /* The physical addresses of the following pages are not */ + /* yet established. Pass dummy info until they are mapped. */ + Bit32u tmp[1]; + tmp[0] = 0; + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + /* Window into the guest's current physical code page */ + vm->guest.addr.code_phy_page = (unsigned char *) (laddr - base); + hostMapMonPages(vm, tmp, 1, &laddr, pageTable, US0, RW1, "Code Phy Page"); + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + /* Temporary window into a guest physical page, for accessing */ + /* guest GDT, IDT, etc info. */ + vm->guest.addr.tmp_phy_page0 = (unsigned char *) (laddr - base); + hostMapMonPages(vm, tmp, 1, &laddr, pageTable, US0, RW1, "Tmp Phy Page0"); + + vm->guest.addr.tmp_phy_page1 = (unsigned char *) (laddr - base); + hostMapMonPages(vm, tmp, 1, &laddr, pageTable, US0, RW1, "Tmp Phy Page1"); + } + +#if ANAL_CHECKS + hostMapBlankPage(vm, &laddr, pageTable); +#endif + + hostOSPrint("Using %u/1024 PTE slots in 4Meg monitor range.\n", + (laddr >> 12) & 0x3ff); + + /* Pointer to mon2host routine inside nexus page */ + vm->guest.__mon2host = (void (*)(void)) MON_NEXUS_OFFSET(vm, __mon2host); + + + /* + * ===================== + * Transition Page Table + * ===================== + * + * To aid in the transition between host<-->monitor/guest spaces, + * we need to have an address identity map situation for at least + * one page; the page containing the transition code. As we do + * not know in advance whether this linear address range is in use + * by the guest as well, we set aside a complete additional Page + * Table, which contains only a single PTE pointing to the nexus page. + * + * To create the identity map, we simply change the corresponding + * monitor page directory entry to point to this transition Page Table. + * This happens transparently inside the host<-->guest transition code; + * both the guest/monitor code and the host side code never see this + * transition page table entered into the page directory! + * + * NOTE: We need to ensure that the nexus page table never spans the + * same 4Meg linear address space region as this page table! + * As we are free to choose the nexus linear address, this is + * not a problem. + */ + + /* Get full linear address of nexus code page, as seen in host space. */ + laddr = (Bit32u)vm->host.addr.nexus + vm->kernel_offset; + pdi = laddr >> 22; + pti = (laddr >> 12) & 0x3ff; + + /* + * We need to be able to access the PDE in the monitor page directory + * that corresponds to this linear address from both host and monitor + * address spaces. + */ + vm->host.addr.nexus->transition_pde_p_host = vm->host.addr.page_dir + pdi; + vm->host.addr.nexus->transition_pde_p_mon = (pageEntry_t *) + (((Bit32u)vm->guest.addr.page_dir) + (pdi << 2)); + vm->host.addr.nexus->transition_laddr = laddr; + + /* Fill in the PDE flags */ + vm->host.addr.nexus->transition_pde.fields.base = vm->pages.transition_PT; + vm->host.addr.nexus->transition_pde.fields.avail = 0; + vm->host.addr.nexus->transition_pde.fields.G = 0; /* not global */ + vm->host.addr.nexus->transition_pde.fields.PS = 0; /* 4K pages */ + vm->host.addr.nexus->transition_pde.fields.D = 0; /* (unused in pde) */ + vm->host.addr.nexus->transition_pde.fields.A = 0; /* not accessed */ + vm->host.addr.nexus->transition_pde.fields.PCD = 0; /* normal caching */ + vm->host.addr.nexus->transition_pde.fields.PWT = 0; /* normal write-back*/ + vm->host.addr.nexus->transition_pde.fields.US = 0; /* no user access */ + vm->host.addr.nexus->transition_pde.fields.RW = 1; /* read or write */ + vm->host.addr.nexus->transition_pde.fields.P = 1; /* present in memory*/ + + /* Clear Page Table; only one PTE is used. */ + pageTable = vm->host.addr.transition_PT; + mon_memzero(pageTable, 4096); + + /* Fill in the PTE for identity mapping the code page */ + pageTable->pte[pti].fields.base = vm->pages.nexus; + pageTable->pte[pti].fields.avail = 0; + pageTable->pte[pti].fields.G = 0; /* not global */ + pageTable->pte[pti].fields.PS = 0; /* (unused in pte) */ + pageTable->pte[pti].fields.D = 0; /* clean */ + pageTable->pte[pti].fields.A = 0; /* not accessed */ + pageTable->pte[pti].fields.PCD = 0; /* normal caching */ + pageTable->pte[pti].fields.PWT = 0; /* normal write-back */ + pageTable->pte[pti].fields.US = 0; /* user can not access */ + pageTable->pte[pti].fields.RW = 1; /* read or write */ + pageTable->pte[pti].fields.P = 1; /* present in memory */ + + + /* + * Setup the TSS for the monitor/guest environment. + * + * We don't need to set the pagedir in the TSS, because we don't + * actually jump to it anyway. The TSS is just used to set the kernel + * stack and in a later stage, perhaps the I/O permission bitmap. + */ + + /* No task chain. */ + vm->host.addr.tss->back = 0; + + /* No debugging or I/O, for now. */ + vm->host.addr.tss->trap = 0; + vm->host.addr.tss->io = sizeof(tss_t); + + /* Monitor stack offset. */ + vm->host.addr.tss->esp0 = + ((Bit32u)vm->guest.addr.nexus) + PAGESIZE; + + + /* + * Set up initial monitor code and stack offset. + */ + + vm->host.addr.nexus->mon_jmp_info.offset = MON_NEXUS_OFFSET(vm, __mon_cs); + vm->host.addr.nexus->mon_stack_info.offset = + vm->host.addr.tss->esp0 - (sizeof(guest_context_t) + 48); +/* xxx 48 above should be calculated from code below which winds + * xxx up monitor stack. + */ + + + /* + * Setup the IDT for the monitor/guest environment + */ + + r = 0; + r |= hostInitIDTSlot(vm, 0, IDT_EXCEPTION_NOERROR); /* Divide error */ + r |= hostInitIDTSlot(vm, 1, IDT_EXCEPTION_NOERROR); /* Debug exceptions */ + r |= hostInitIDTSlot(vm, 2, IDT_INTERRUPT); /* NMI */ + r |= hostInitIDTSlot(vm, 3, IDT_EXCEPTION_NOERROR); /* Breakpoint */ + r |= hostInitIDTSlot(vm, 4, IDT_EXCEPTION_NOERROR); /* Overflow */ + r |= hostInitIDTSlot(vm, 5, IDT_EXCEPTION_NOERROR); /* Bounds check */ + r |= hostInitIDTSlot(vm, 6, IDT_EXCEPTION_NOERROR); /* Invalid opcode */ + r |= hostInitIDTSlot(vm, 7, IDT_EXCEPTION_NOERROR); /* FPU not available */ + r |= hostInitIDTSlot(vm, 8, IDT_EXCEPTION_ERROR); /* Double fault */ + r |= hostInitIDTSlot(vm, 9, IDT_EXCEPTION_NOERROR); /* FPU segment overrun */ + r |= hostInitIDTSlot(vm, 10, IDT_EXCEPTION_ERROR); /* Invalid TSS */ + r |= hostInitIDTSlot(vm, 11, IDT_EXCEPTION_ERROR); /* Segment not present */ + r |= hostInitIDTSlot(vm, 12, IDT_EXCEPTION_ERROR); /* Stack exception */ + r |= hostInitIDTSlot(vm, 13, IDT_EXCEPTION_ERROR); /* GP fault */ + r |= hostInitIDTSlot(vm, 14, IDT_EXCEPTION_ERROR); /* Page fault */ + r |= hostInitIDTSlot(vm, 15, IDT_EXCEPTION_NOERROR); /* reserved */ + r |= hostInitIDTSlot(vm, 16, IDT_EXCEPTION_NOERROR); /* Coprocessor error */ + r |= hostInitIDTSlot(vm, 17, IDT_EXCEPTION_ERROR); /* Alignment check */ + r |= hostInitIDTSlot(vm, 18, IDT_EXCEPTION_NOERROR); /* Machine check */ + + /* Reserved exceptions */ + for (i = 19; i < 32; i++) + r |= hostInitIDTSlot(vm, i, IDT_EXCEPTION_NOERROR); + + /* Hardware interrupts */ + for (i = 32; i < 256; i++) + r |= hostInitIDTSlot(vm, i, IDT_INTERRUPT); + if (r!=0) + goto error; + + + /* + * Setup the initial guest context + */ + + mon_memzero(vm->host.addr.guest_context, sizeof(guest_context_t)); + + /* Wind up the monitor stack for the initial transition via + * __host2mon. At the tail end, monitor state is popped from the + * stack and a RET is executed. + */ + { + Bit32u *ptr; + + ptr = (Bit32u *) (((unsigned char *) vm->host.addr.guest_context) - 4); + *ptr-- = (Bit32u) &__ret_to_guest; + *ptr-- = 0x02; /* eflags: only reserved bit on */ + *ptr-- = 0; /* eax */ + *ptr-- = 0; /* ecx */ + *ptr-- = 0; /* edx */ + *ptr-- = 0; /* ebx */ + *ptr-- = 0; /* esp dummy */ + *ptr-- = 0; /* ebp */ + *ptr-- = 0; /* esi */ + *ptr-- = 0; /* edi */ + *ptr-- = 0; /* FS; start with null value. */ + *ptr-- = 0; /* GS; start with null value. */ + } + + vm->vmState |= VMStateInitMonitor; + vm->mon_request = MonReqNone; + + return(1); /* all OK */ + +error: + return(0); /* error */ +} + + + + unsigned +hostInitGuestPhyMem(vm_t *vm) +{ + unsigned i; + mon_memzero(vm->pageInfo, sizeof(vm->pageInfo)); + for (i=0; ipages.guest_n_pages; i++) { + /* For now, we start out by preallocating physical pages */ + /* for the guest, though not necessarily mapped into linear */ + /* space. */ + vm->pageInfo[i].attr.raw = 0; + vm->pageInfo[i].tsc = 0; + vm->pageInfo[i].attr.fields.allocated = 1; + } + + { + Bit32u rom_page; + unsigned npages; + + /* Mark BIOS ROM area as ReadOnly */ + rom_page = 0xf0000 >> 12; + npages = (1 + 0xfffff - 0xf0000) / 4096; + for (i=0; ipageInfo[rom_page + i].attr.fields.RO = 1; + + /* Mark VGA BIOS ROM area as ReadOnly */ + rom_page = 0xc0000 >> 12; + npages = (1 + 0xc7fff - 0xc0000) / 4096; + for (i=0; ipageInfo[rom_page + i].attr.fields.RO = 1; + } + +#if 1 + /* Mark VGA framebuffer area as Memory Mapped IO */ + { + Bit32u vga_page; + unsigned npages; + + vga_page = 0xa0000 >> 12; + npages = (1 + 0xbffff - 0xa0000) / 4096; + for (i=0; ipageInfo[vga_page + i].attr.fields.memMapIO = 1; + } +#endif + + return(0); +} + + + int +hostInitIDTSlot(vm_t *vm, unsigned vec, int type) +/* + * initIDTSlot(): Initialize a monitor IDT slot. + */ +{ + /* IDT slot stubs */ + + idt_stub_t *stub = &vm->host.addr.idt_stubs[vec]; + Bit32u stub_mon = ((Bit32u) vm->guest.addr.idt_stubs) + + vec*sizeof(idt_stub_t); + + if (sizeof(idt_stub_t) != IDT_STUB_SIZE) + return( -1 ); + + switch (type) { + case IDT_INTERRUPT: + stub->m2.pushla = 0x68; + stub->m2.dummy = 0; + stub->m2.pushlb = 0x68; + stub->m2.vector = vec; + stub->m2.jmp = 0xe9; + stub->m2.reloc = ((Bit32u) &__handle_int) - + (stub_mon + sizeof(idt_method2_t)); + break; + + case IDT_EXCEPTION_ERROR: + stub->m1.pushl = 0x68; + stub->m1.vector = vec; + stub->m1.jmp = 0xe9; + stub->m1.reloc = ((Bit32u) &__handle_fault) - + (stub_mon + sizeof(idt_method1_t)); + break; + + case IDT_EXCEPTION_NOERROR: + stub->m2.pushla = 0x68; + stub->m2.dummy = 0; + stub->m2.pushlb = 0x68; + stub->m2.vector = vec; + stub->m2.jmp = 0xe9; + stub->m2.reloc = ((Bit32u) &__handle_fault) - + (stub_mon + sizeof(idt_method2_t)); + break; + + default: + return -1; + } + + /* Set the interrupt gate */ + SET_INT_GATE(vm->host.addr.idt[vec], + nullSelector, stub_mon, D_PRESENT, D_DPL0, D_D32); + return 0; +} + + +/* + * Map pages allocated by host, into the linear address space of + * the monitor/guest, given the Page Table supplied. + */ + + void +hostMapMonPages(vm_t *vm, Bit32u *pages, unsigned n, Bit32u *laddr_p, + page_t *pageTable, unsigned user, unsigned writable, char *name) +{ + unsigned i, pti; + + +#if 0 +hostOSPrint("hostMapMonPages: '%s' mapped at 0x%x .. 0x%x.\n", + name, + (*laddr_p) - MON_BASE_FROM_LADDR(0), + ((*laddr_p) + (n*4096)) - MON_BASE_FROM_LADDR(0) ); +#endif + + pti = (*laddr_p >> 12) & 0x3ff; + for (i = 0; i < n; i++, pti++) { + if (pti > 1024) + break; /* This should not happen! */ + + /* Fill in the PTE flags */ + pageTable->pte[pti].fields.base = pages[i]; + pageTable->pte[pti].fields.avail = 0; + pageTable->pte[pti].fields.G = 0; /* not global */ + pageTable->pte[pti].fields.PS = 0; /* (unused in pte) */ + pageTable->pte[pti].fields.D = 0; /* clean */ + pageTable->pte[pti].fields.A = 0; /* not accessed */ + pageTable->pte[pti].fields.PCD = 0; /* normal caching */ + pageTable->pte[pti].fields.PWT = 0; /* normal write-back */ + pageTable->pte[pti].fields.US = user; /* 0=system, 1=user */ + pageTable->pte[pti].fields.RW = writable; /* 0=RO, 1=RW */ + pageTable->pte[pti].fields.P = 1; /* present in memory */ + } + + /* + * Advance linear address pointer, for the next set of pages + * to be mapped. + */ + *laddr_p += 4096 * n; +} + +#if ANAL_CHECKS + void +hostMapBlankPage(vm_t *vm, Bit32u *laddr_p, page_t *pageTable) +{ + unsigned pti; + + pti = (*laddr_p >> 12) & 0x3ff; + if (pti > 1024) + return; /* This should not happen! */ + + /* Fill in the PTE flags */ + pageTable->pte[pti].fields.base = 0; + pageTable->pte[pti].fields.avail = 0; + pageTable->pte[pti].fields.G = 0; /* not global */ + pageTable->pte[pti].fields.PS = 0; /* (unused in pte) */ + pageTable->pte[pti].fields.D = 0; /* clean */ + pageTable->pte[pti].fields.A = 0; /* not accessed */ + pageTable->pte[pti].fields.PCD = 0; /* normal caching */ + pageTable->pte[pti].fields.PWT = 0; /* normal write-back */ + pageTable->pte[pti].fields.US = 0; + pageTable->pte[pti].fields.RW = 0; + pageTable->pte[pti].fields.P = 0; + + /* + * Advance linear address pointer, for the next set of pages + * to be mapped. + */ + *laddr_p += 4096; +} +#endif + + int +hostIoctlGeneric(vm_t *vm, void *inode, void *filp, + unsigned int cmd, unsigned long arg) +{ + switch (cmd) { + + /* + * Set the guest CPUID info. + */ + case PLEX86_CPUID: + { + if ( vm->vmState & VMStateGuestCPUID ) { + /* Can't change guest CPUID. */ + return -Plex86ErrnoEINVAL; + } + if ( hostOSCopyFromUser(&vm->guestCPUIDInfo, (void *)arg, + sizeof(vm->guestCPUIDInfo)) ) + return -Plex86ErrnoEFAULT; +/* xxx Value checks here. */ + vm->vmState |= VMStateGuestCPUID; + return 0; + } + + case PLEX86_REGISTER_MEMORY: + { + plex86IoctlRegisterMem_t registerMemMsg; + if ( hostOSCopyFromUser(®isterMemMsg, (void *)arg, + sizeof(registerMemMsg)) ) + return -Plex86ErrnoEFAULT; + return( hostIoctlRegisterMem(vm, ®isterMemMsg) ); + } + + /* + * Tear down the VM environment. + */ + case PLEX86_TEARDOWN: + if ( vm->vmState & VMStateRegisteredAll ) { + hostOSPrint("plex86: guest memory is still registered!\n"); + /* Could effect the unpinning here and then do: + * vm->vmState &= ~VMStateRegisteredAll; + */ + return -Plex86ErrnoEBUSY; + } + + hostUnallocVmPages(vm); + /* Fixme: deal with state better here. */ + + /* Reset state to only FD opened. */ + vm->vmState = VMStateFDOpened; + return 0; + + + /* + * Execute the guest in the VM for a while. The guest CPU state + * is specified in a memory window mmap()'d to user space. + */ + case PLEX86_EXECUTE: + { + plex86IoctlExecute_t executeMsg; + int ret; + + if ( hostOSCopyFromUser(&executeMsg, (void *)arg, sizeof(executeMsg)) ) + return -Plex86ErrnoEFAULT; + ret = hostIoctlExecute(vm, &executeMsg); + if ( hostOSCopyToUser((void *)arg, &executeMsg, sizeof(executeMsg)) ) + return -Plex86ErrnoEFAULT; + return ret; + } + +#warning "PLEX86_RESET should only conditionally compiled for debugging." + /* + * For debugging, when the module gets hosed, this is a way + * to reset the in-use count, so we can rmmod it. + */ + case PLEX86_RESET: + hostOSModuleCountReset(vm, inode, filp); + return 0; + + + default: + hostOSPrint("plex86: unknown ioctl(%d) called\n", cmd); + return -Plex86ErrnoEINVAL; + } +} + + int +hostIoctlExecute(vm_t *vm, plex86IoctlExecute_t *executeMsg) +{ + guest_cpu_t *guest_cpu; + guest_context_t *guest_stack_context; + nexus_t *nexus; + unsigned s; + int retval; + + if ( (vm->vmState != VMStateReady) || + (vm->mon_request != MonReqNone) ) { + retval = Plex86NoExecute_VMState; /* Fail. */ + goto handlePanic; + } + + /* Only (virtualized) native execution is supported currently. + * Later, it will be interesting to breakpoint one instruction + * at-a-time using Plex86ExecuteMethodBreakpoint, for + * cosimulation. + */ + if (executeMsg->executeMethod != Plex86ExecuteMethodNative) { + retval = Plex86NoExecute_Method; /* Fail. */ + goto handleFail; + } + + /* A pointer to the guest CPU state as passed from host-user space. + * This structure is memory mapped between user and kernel/monitor space. + */ + guest_cpu = vm->host.addr.guest_cpu; + + /* A pointer to the guest CPU state saved on the monitor stack. */ + guest_stack_context = vm->host.addr.guest_context; + + /* ================================================================= + * Before executing the guest in the VM, we must check that + * the guest conditions meet the requirements of the user-level-only + * VM. + * ================================================================= + */ + + /* CR0: + * PG(31)==1 + * CD(30)==? (look into this later) + * NW(29)==? (look into this later) + * AM(18)==pass-thru from guest + * WP(16)==Don't care. Monitor always sets this to 1. + * NE( 5)==? (look into this later) + * ET( 4)==? (look into this later) + * TS( 3)==? (look into this later) + * EM( 2)==? (look into this later) + * MP( 1)==? (look into this later) + * PE( 0)==1 + */ + /* 0x8005003b */ + if ( (guest_cpu->cr0.raw & 0xe0000037) != 0x80000033 ) { + hostOSPrint("plex86: guest CR0=0x%x\n", guest_cpu->cr0.raw); + retval = Plex86NoExecute_CR0; /* Fail. */ + goto handleFail; + } + + /* CR4: + * OSXMMEXCPT(10)==? (look into this later) + * OSFXSR(9)==? (look into this later) + * PCE(8)==? (look into this later) + * PGE(7)==? (look into this later) + * MCE(6)==? (look into this later) + * PAE(5)==? (look into this later) + * PSE(4)==? (look into this later) + * DE(3)==? (look into this later) + * TSD(2)==? (look into this later) + * PVI(1)==? (look into this later) + * VME(0)==? (look into this later) + */ + if ( (guest_cpu->cr4.raw & 0x000007ff) != 0x00000000 ) { + hostOSPrint("plex86: guest CR4=0x%x\n", guest_cpu->cr4.raw); + retval = Plex86NoExecute_CR4; /* Fail. */ + goto handleFail; + } + + /* Guest CPL must be 3 (user-level). + * CS selector must not be NULL. + */ + if ( (guest_cpu->sreg[SRegCS].sel.fields.rpl != 3) || + (guest_cpu->sreg[SRegCS].sel.fields.index == 0) || + (guest_cpu->sreg[SRegCS].des.dpl != 3) ) { + retval = Plex86NoExecute_CS; /* Fail. */ + goto handleFail; + } + + /* A20 line must be enabled. */ + if ( guest_cpu->a20Enable != 1 ) { + retval = Plex86NoExecute_A20; /* Fail. */ + goto handleFail; + } + + /* Some code not really used now, since we only support A20 being enabled. */ + { + unsigned newA20Enable; + newA20Enable = guest_cpu->a20Enable > 0; /* Make 0 or 1. */ + if ( newA20Enable != vm->system.a20Enable ) { + if ( (!newA20Enable) && guest_cpu->cr0.fields.pg ) { + /* A20 disabled, paging on not supported. Well, really I have to + * see if it matters. This check was in old plex86 code. + */ + retval = Plex86NoExecute_A20; /* Fail. */ + goto handleFail; + } + vm->system.a20Enable = newA20Enable; + vm->system.a20AddrMask = 0xffefffff | (newA20Enable << 20); + vm->system.a20IndexMask = 0x000ffeff | (newA20Enable << 8); + } + } + + /* LDT not supported. + * Monitor uses GDT slots 1,2,3, so guest segments can not. + * Segment descriptor cache DPL should equal 3. + */ + for (s=0; s<6; s++) { + unsigned selector = guest_cpu->sreg[s].sel.raw; + unsigned index; + /* Only care if selector is not NULL. */ + if ( selector & 0xfffc ) { + if ( (selector & 0x0007) != 3 ) { + /* Either TI=1 (LDT usage) or RPL!=3. */ + retval = Plex86NoExecute_Selector; /* Fail. */ + goto handleFail; + } + index = selector >> 3; + if ( index <= 3 ) { + /* Selector index field uses one of the monitor GDT slots. */ + retval = Plex86NoExecute_Selector; /* Fail. */ + goto handleFail; + } + if ( index >= (MON_GDT_SIZE/8) ) { + /* Selector index field uses a slot beyond the monitor GDT size. */ + retval = Plex86NoExecute_Selector; /* Fail. */ + goto handleFail; + } + if ( guest_cpu->sreg[s].des.dpl != 3 ) { + retval = Plex86NoExecute_DPL; /* Fail. */ + goto handleFail; + } + } + } + + /* EFlags constraints: + * VIP/VIF==0 + * VM==0 + * RF==0 + * NT==0 + * IOPL==0 (We may be able to allow this to be 0..2) + * IF==1 + * TF==0 + * bit1==1 + */ + if ( (guest_cpu->eflags & (0x001b7302)) != + (0x00000202) ) { + retval = Plex86NoExecute_EFlags; /* Fail. */ + goto handleFail; + } + + /* Notes on other stuff: + * - CPUID emulation vs virtualization match. + */ + + /* NOTE: We should commit to executing the guest at this point. + * We must not leave stray entries in the GDT. + */ + +/* Install virtualized guest descriptors in GDT. + * Either use descriptor caches from guest space, or we have + * to chase down the GDT entries using the guest's paging + * system. Might be a cheaper/safe bet to just use the + * descriptor caches. If the guest reloads a descriptor, + * just let the user space deal with it. + */ + for (s=0; s<6; s++) { + if ( (guest_cpu->sreg[s].sel.raw & 0xfffc) != 0) { + vm->host.addr.gdt[ guest_cpu->sreg[s].sel.fields.index ] = + guest_cpu->sreg[s].des; + } + } +#warning "Have to clear out GDT" + + guest_stack_context->gs = guest_cpu->sreg[SRegGS].sel.raw; + guest_stack_context->fs = guest_cpu->sreg[SRegFS].sel.raw; + guest_stack_context->ds = guest_cpu->sreg[SRegDS].sel.raw; + guest_stack_context->es = guest_cpu->sreg[SRegES].sel.raw; + + /* Could use memcpy(); both are in order. Pack both structs. */ + guest_stack_context->edi = guest_cpu->edi; + guest_stack_context->esi = guest_cpu->esi; + guest_stack_context->ebp = guest_cpu->ebp; + guest_stack_context->dummy_esp = 0; /* Not needed. */ + guest_stack_context->ebx = guest_cpu->ebx; + guest_stack_context->edx = guest_cpu->edx; + guest_stack_context->ecx = guest_cpu->ecx; + guest_stack_context->eax = guest_cpu->eax; + + /* Fields vector/error are ignored for return to guest. */ + + /* CS:EIP */ + guest_stack_context->eip = guest_cpu->eip; + guest_stack_context->cs = guest_cpu->sreg[SRegCS].sel.raw; + + guest_stack_context->eflags.raw = guest_cpu->eflags; + vm->veflags.raw = 0; /* Virtualized EFLAGS - implement later. */ + + guest_stack_context->esp = guest_cpu->esp; + guest_stack_context->ss = guest_cpu->sreg[SRegSS].sel.raw; + + /* Pointer to the fields in the nexus.S assembly code. */ + nexus = vm->host.addr.nexus; + +#warning "Monitor CRx hacks" + nexus->mon_cr0 = 0x8001003b | /* PG/WP/NE/ET/TS/MP/PE */ + (guest_cpu->cr0.raw & 0x00040000); /* Pass-thru AM from guest. */ + /* Could move mon_cr3 load to mapMonitor. */ + nexus->mon_cr3 = vm->pages.page_dir << 12; + nexus->mon_cr4 = 0x00000004; /* TSD=1 */ + +/* vm->guest_cpu.cr0.raw = guest_cpu->cr0 | 0x32; */ /* +++ hack for now */ + +// Notes: +// - Implement some of monPagingRemap from old code, since that +// was intended to be run/triggered by an initial mode change. +// - After execution of 1st timeslice, need to copy dynamic state +// from VM to guest_cpu area. +// - Deal with cycle counts etc. + + hostInitShadowPaging(vm); + + for (;;) { + unsigned long eflags; + +#if 0 + /* If print buffer has contents, return to user space to print. */ + if (vm->log_buffer_info.offset) { + vm->mon_msgs.header.msg_type = VMMessagePrintBuf; + vm->mon_msgs.header.msg_len = 0; + vm->mon_request = MonReqNone; /* Request satisfied */ + resetPrintBuf(vm); /* xxx Fix print mess */ + retval = 100; + goto handleFail; + } +#endif + + vm_save_flags(eflags); + vm_restore_flags(eflags & ~0x00004300); /* clear NT/IF/TF */ +#if ANAL_CHECKS + if (!(eflags & 0x200)) { + vm_restore_flags(eflags); + hostOSPrint("ioctlExecute: EFLAGS.IF==0\n"); + retval = 101; /* Fail. */ + goto handlePanic; + } +#endif + + /* Call assembly routine to effect transition. */ + vm->host.__host2mon(); + + /* First check for an asynchronous event (interrupt redirection) */ + if ( vm->mon_request == MonReqRedirect ) { + vm_restore_flags(eflags & ~0x00000200); /* restore all but IF */ + soft_int(vm->redirect_vector); /* sets IF to 1 */ + hostOSInstrumentIntRedirCount(vm->redirect_vector); + vm->mon_request = MonReqNone; /* Request satisfied */ + } + + /* Event was synchronous; monitor requested a switch back to host. */ + else { + vm_restore_flags(eflags); + + /* Perform action requested by monitor. */ + switch ( vm->mon_request ) { + case MonReqRemapMonitor: +#if 0 + if ( mapMonitor(vm) ) { + vm->mon_request = MonReqNone; /* Request satisfied */ + break; + } + else { + hostOSPrint("mapMonitor failed.\n"); + hostOSPrint("Panic w/ abort_code=%u\n", vm->abort_code); + retval = 102; + goto handlePanic; + } +#endif + hostOSPrint("ioctlExecute: case MonReqRemapMonitor.\n"); + retval = 103; + goto handlePanic; + + case MonReqFlushPrintBuf: + hostOSPrint("ioctlExecute: case MonReqFlushPrintBuf.\n"); + retval = 104; + goto handlePanic; + + case MonReqGuestFault: + /* Encountered a guest fault. */ + hostCopyGuestStateToUserSpace(vm); + executeMsg->cyclesExecuted = 0; /* Handle later. */ + executeMsg->instructionsExecuted = 0; /* Handle later. */ + executeMsg->monitorState.state = vm->vmState; + executeMsg->monitorState.request = vm->mon_request; + executeMsg->monitorState.guestFaultNo = vm->guestFaultNo; + vm->mon_request = MonReqNone; + return 0; + + case MonReqPanic: + if (vm->abort_code) + hostOSPrint("Panic w/ abort_code=%u\n", vm->abort_code); + hostOSPrint("ioctlExecute: case MonReqPanic.\n"); + retval = 106; + goto handlePanic; + + case MonReqPinUserPage: + if ( !hostHandlePagePinRequest(vm, vm->pinReqPPI) ) { + retval = 108; + goto handlePanic; + } + continue; /* Back to VM monitor. */ + + default: + hostOSPrint("ioctlExecute: default case (%u).\n", vm->mon_request); + retval = 107; + goto handlePanic; + } + } + + /* Let host decide whether we are allowed another timeslice */ + if ( !hostOSIdle() ) { + /* We are returning only because the host wants to + * schedule other work. + */ + executeMsg->monitorState.state = vm->vmState; + executeMsg->monitorState.request = MonReqNone; + return 0; + } + } + + /* Should not get here. */ + retval = 109; + goto handlePanic; + +handleFail: + /* Handle inabilitiy to execute the guest due to certain state. */ + executeMsg->monitorState.state = vm->vmState; + executeMsg->monitorState.request = vm->mon_request; + return(retval); + +handlePanic: + vm->vmState |= VMStatePanic; + vm->mon_request = MonReqPanic; + executeMsg->monitorState.state = vm->vmState; + executeMsg->monitorState.request = vm->mon_request; + return(retval); +} + + void +hostCopyGuestStateToUserSpace(vm_t *vm) +{ + guest_cpu_t *guest_cpu; + guest_context_t *guest_stack_context; + + /* A pointer to the guest CPU state as passed from host-user space. + * This structure is memory mapped between user and kernel/monitor space. + */ + guest_cpu = vm->host.addr.guest_cpu; + + /* A pointer to the guest CPU state saved on the monitor stack. */ + guest_stack_context = vm->host.addr.guest_context; + + guest_cpu->sreg[SRegES].sel.raw = guest_stack_context->es; + if ( (guest_stack_context->es & 0xfffc) == 0 ) { + guest_cpu->sreg[SRegES].des = nullDescriptor; + guest_cpu->sreg[SRegES].valid = 0; + } + else { + guest_cpu->sreg[SRegES].des = + vm->host.addr.gdt[ guest_cpu->sreg[SRegES].sel.fields.index ]; + guest_cpu->sreg[SRegES].valid = 1; + } + + guest_cpu->sreg[SRegCS].sel.raw = guest_stack_context->cs; + if ( (guest_stack_context->cs & 0xfffc) == 0 ) { + guest_cpu->sreg[SRegCS].des = nullDescriptor; + guest_cpu->sreg[SRegCS].valid = 0; + } + else { + guest_cpu->sreg[SRegCS].des = + vm->host.addr.gdt[ guest_cpu->sreg[SRegCS].sel.fields.index ]; + guest_cpu->sreg[SRegCS].valid = 1; + } + + guest_cpu->sreg[SRegSS].sel.raw = guest_stack_context->ss; + if ( (guest_stack_context->ss & 0xfffc) == 0 ) { + guest_cpu->sreg[SRegSS].des = nullDescriptor; + guest_cpu->sreg[SRegSS].valid = 0; + } + else { + guest_cpu->sreg[SRegSS].des = + vm->host.addr.gdt[ guest_cpu->sreg[SRegSS].sel.fields.index ]; + guest_cpu->sreg[SRegSS].valid = 1; + } + + guest_cpu->sreg[SRegDS].sel.raw = guest_stack_context->ds; + if ( (guest_stack_context->ds & 0xfffc) == 0 ) { + guest_cpu->sreg[SRegDS].des = nullDescriptor; + guest_cpu->sreg[SRegDS].valid = 0; + } + else { + guest_cpu->sreg[SRegDS].des = + vm->host.addr.gdt[ guest_cpu->sreg[SRegDS].sel.fields.index ]; + guest_cpu->sreg[SRegDS].valid = 1; + } + + guest_cpu->sreg[SRegFS].sel.raw = guest_stack_context->fs; + if ( (guest_stack_context->fs & 0xfffc) == 0 ) { + guest_cpu->sreg[SRegFS].des = nullDescriptor; + guest_cpu->sreg[SRegFS].valid = 0; + } + else { + guest_cpu->sreg[SRegFS].des = + vm->host.addr.gdt[ guest_cpu->sreg[SRegFS].sel.fields.index ]; + guest_cpu->sreg[SRegFS].valid = 1; + } + + guest_cpu->sreg[SRegGS].sel.raw = guest_stack_context->gs; + if ( (guest_stack_context->gs & 0xfffc) == 0 ) { + guest_cpu->sreg[SRegGS].des = nullDescriptor; + guest_cpu->sreg[SRegGS].valid = 0; + } + else { + guest_cpu->sreg[SRegGS].des = + vm->host.addr.gdt[ guest_cpu->sreg[SRegGS].sel.fields.index ]; + guest_cpu->sreg[SRegGS].valid = 1; + } + + /* Could use memcpy(); both are in order. Pack both structs. */ + guest_cpu->edi = guest_stack_context->edi; + guest_cpu->esi = guest_stack_context->esi; + guest_cpu->ebp = guest_stack_context->ebp; + guest_cpu->esp = guest_stack_context->esp; + guest_cpu->ebx = guest_stack_context->ebx; + guest_cpu->edx = guest_stack_context->edx; + guest_cpu->ecx = guest_stack_context->ecx; + guest_cpu->eax = guest_stack_context->eax; + + /* CS:EIP */ + guest_cpu->eip = guest_stack_context->eip; + + guest_cpu->eflags = guest_stack_context->eflags.raw; + /* vm->veflags.raw = 0; */ /* Virtualized EFLAGS - implement later. */ +} + + + int +hostIoctlRegisterMem(vm_t *vm, plex86IoctlRegisterMem_t *registerMemMsg) +{ + unsigned error; + + /* Do not allow duplicate allocation. The file descriptor must be + * opened. The guest CPUID info can be filled in later. + */ + if ( (vm->vmState & ~VMStateGuestCPUID) != VMStateFDOpened ) + return -Plex86ErrnoEBUSY; + + if (vm->pages.guest_n_megs != 0) + return -Plex86ErrnoEBUSY; + + /* Check that the amount of memory is reasonable. */ + if ( (registerMemMsg->nMegs > PLEX86_MAX_PHY_MEGS) || + (registerMemMsg->nMegs < 4) || + (registerMemMsg->nMegs & 0x3) ) + return -Plex86ErrnoEINVAL; + + /* Check that the guest memory vector is page aligned. */ + if ( registerMemMsg->guestPhyMemVector & 0xfff ) + return -Plex86ErrnoEINVAL; + + /* Check that the log buffer area is page aligned. */ + if ( registerMemMsg->logBufferWindow & 0xfff ) + return -Plex86ErrnoEINVAL; + + /* Check that the guest CPU area is page aligned. */ + if ( registerMemMsg->guestCPUWindow & 0xfff ) + return -Plex86ErrnoEINVAL; + + /* Check that none of the user areas overlap. In case we have a + * number of regions, use some generic code to handle N regions. + */ + { +#define NumUserRegions 3 + struct { + Bit32u min, max; + } userRegion[NumUserRegions]; + unsigned i,j; + + userRegion[0].min = registerMemMsg->guestPhyMemVector; + userRegion[0].max = userRegion[0].min + (registerMemMsg->nMegs<<20) - 1; + userRegion[1].min = registerMemMsg->logBufferWindow; + userRegion[1].max = userRegion[1].min + LOG_BUFF_SIZE - 1; + userRegion[2].min = registerMemMsg->guestCPUWindow; + userRegion[2].max = userRegion[2].min + (4096) - 1; + + for (i=1; i= userRegion[i].min) && + (userRegion[j].min <= userRegion[i].max) ) + return -Plex86ErrnoEINVAL; + /* Check for max(j) contained in region(i). */ + if ( (userRegion[j].max >= userRegion[i].min) && + (userRegion[j].max <= userRegion[i].max) ) + return -Plex86ErrnoEINVAL; + } + } + } + + + + /* Allocate memory */ + if ( (error = hostAllocVmPages(vm, registerMemMsg)) != 0 ) { + hostOSPrint("plex86: allocVmPages failed at %u\n", + error); + return -Plex86ErrnoENOMEM; + } + + /* Initialize the guests physical memory. */ + if ( hostInitGuestPhyMem(vm) ) { + hostUnallocVmPages(vm); + return -Plex86ErrnoEFAULT; + } + + /* Initialize the monitor. */ + if ( !hostInitMonitor(vm) || + !hostMapMonitor(vm) ) { + hostUnallocVmPages(vm); + return -Plex86ErrnoEFAULT; + } + return 0; +} + + + +/* + * Allocate various pages/memory needed by monitor. + */ + + int +hostAllocVmPages(vm_t *vm, plex86IoctlRegisterMem_t *registerMemMsg) +{ + vm_pages_t *pg = &vm->pages; + vm_addr_t *ad = &vm->host.addr; +#warning "Fix these shortcuts" + unsigned where = 1; + + /* clear out allocated pages lists */ + mon_memzero(pg, sizeof(*pg)); + mon_memzero(ad, sizeof(*ad)); + + /* Guest physical memory pages */ + pg->guest_n_megs = registerMemMsg->nMegs; + pg->guest_n_pages = registerMemMsg->nMegs * 256; + pg->guest_n_bytes = registerMemMsg->nMegs * 1024 * 1024; + if ( pg->guest_n_pages > MAX_MON_GUEST_PAGES) { + /* The size of the user-space allocated guest physical memory must + * fit within the maximum number of guest pages that the VM monitor + * supports. + */ + goto error; + } + where++; + + vm->guestPhyMemAddr = registerMemMsg->guestPhyMemVector; + vm->vmState |= VMStateRegisteredPhyMem; /* Bogus for now. */ + where++; + + { + Bit32u hostPPI, kernelAddr; + + /* Guest CPU state (malloc()'d in user space). */ + if ( !hostOSGetAndPinUserPage(vm, registerMemMsg->guestCPUWindow, + &pg->guest_cpu_hostOSPtr, &hostPPI, &kernelAddr) ) { + goto error; + } + ad->guest_cpu = (guest_cpu_t *) kernelAddr; + pg->guest_cpu = hostPPI; +vm->vmState |= VMStateRegisteredGuestCPU; /* For now. */ + where++; + + /* Log buffer area (malloc()'d in user space). */ + /* LOG_BUFF_PAGES */ + if ( !hostOSGetAndPinUserPage(vm, registerMemMsg->logBufferWindow, + &pg->log_buffer_hostOSPtr[0], &hostPPI, &kernelAddr) ) { + goto error; + } + ad->log_buffer = (Bit8u *) kernelAddr; + pg->log_buffer[0] = hostPPI; + where++; +vm->vmState |= VMStateRegisteredPrintBuffer; /* For now. */ + } + + + /* Monitor page directory */ + if ( !(ad->page_dir = (pageEntry_t *) hostOSAllocZeroedPage()) ) { + goto error; + } + where++; + if (!(pg->page_dir = hostOSGetAllocedPagePhyPage(ad->page_dir))) { + goto error; + } + where++; + + /* Monitor page tables */ + if ( !(ad->page_tbl = hostOSAllocZeroedMem(4096 * MON_PAGE_TABLES)) ) { + goto error; + } + where++; + if (!hostOSGetAllocedMemPhyPages(pg->page_tbl, MON_PAGE_TABLES, + ad->page_tbl, 4096 * MON_PAGE_TABLES)) { + goto error; + } + where++; + + /* Map of the linear addresses of page tables currently */ + /* mapped into the monitor space. */ + if ( !(ad->page_tbl_laddr_map = (unsigned *) hostOSAllocZeroedPage()) ) { + goto error; + } + where++; + if ( !(pg->page_tbl_laddr_map = + hostOSGetAllocedPagePhyPage(ad->page_tbl_laddr_map)) ) { + goto error; + } + where++; + + /* Nexus page table */ + if ( !(ad->nexus_page_tbl = (page_t *) hostOSAllocZeroedPage()) ) { + goto error; + } + where++; + if ( !(pg->nexus_page_tbl = hostOSGetAllocedPagePhyPage(ad->nexus_page_tbl)) ) { + goto error; + } + where++; + + /* Transition page table */ + if ( !(ad->transition_PT = (page_t *) hostOSAllocZeroedPage()) ) { + goto error; + } + where++; + if ( !(pg->transition_PT = hostOSGetAllocedPagePhyPage(ad->transition_PT)) ) { + goto error; + } + where++; + + /* Nexus page */ + if ( !(ad->nexus = (nexus_t *) hostOSAllocZeroedPage()) ) { + goto error; + } + where++; + if ( !(pg->nexus = hostOSGetAllocedPagePhyPage(ad->nexus)) ) { + goto error; + } + where++; + + /* Monitor IDT */ + if ( !(ad->idt = hostOSAllocZeroedMem(MON_IDT_PAGES*4096)) ) { + goto error; + } + where++; + if (!hostOSGetAllocedMemPhyPages(pg->idt, MON_IDT_PAGES, ad->idt, MON_IDT_SIZE)) { + goto error; + } + where++; + + /* Monitor GDT */ + if ( !(ad->gdt = hostOSAllocZeroedMem(MON_GDT_PAGES*4096)) ) { + goto error; + } + where++; + if (!hostOSGetAllocedMemPhyPages(pg->gdt, MON_GDT_PAGES, ad->gdt, MON_GDT_SIZE)) { + goto error; + } + where++; + + /* Monitor LDT */ + if ( !(ad->ldt = hostOSAllocZeroedMem(MON_LDT_PAGES*4096)) ) { + goto error; + } + where++; + if (!hostOSGetAllocedMemPhyPages(pg->ldt, MON_LDT_PAGES, ad->ldt, MON_LDT_SIZE)) { + goto error; + } + where++; + + /* Monitor TSS */ + if ( !(ad->tss = hostOSAllocZeroedMem(MON_TSS_PAGES*4096)) ) { + goto error; + } + where++; + if (!hostOSGetAllocedMemPhyPages(pg->tss, MON_TSS_PAGES, ad->tss, MON_TSS_SIZE)) { + goto error; + } + where++; + + /* Monitor IDT stubs */ + if ( !(ad->idt_stubs = hostOSAllocZeroedMem(MON_IDT_STUBS_PAGES*4096)) ) { + goto error; + } + where++; + if (!hostOSGetAllocedMemPhyPages(pg->idt_stubs, MON_IDT_STUBS_PAGES, + ad->idt_stubs, MON_IDT_STUBS_SIZE)) { + goto error; + } + where++; + + /* Get the physical pages associated with the vm_t structure. */ + if (!hostOSGetAllocedMemPhyPages(pg->vm, MAX_VM_STRUCT_PAGES, vm, sizeof(*vm))) { + goto error; + } + where++; + + vm->vmState |= VMStateMemAllocated; + return 0; /* OK. */ + + error: + hostUnallocVmPages( vm ); + return( where ); +} + + +/* */ +/* Unallocate pages/memory used by monitor */ +/* */ + + void +hostUnallocVmPages( vm_t *vm ) +{ + vm_pages_t *pg = &vm->pages; + vm_addr_t *ad = &vm->host.addr; + + /* Guest physical memory pages */ + if (vm->guestPhyMemAddr) { + hostReleasePinnedUserPages(vm); + vm->guestPhyMemAddr = 0; + } + vm->vmState &= ~VMStateRegisteredPhyMem; /* Bogus for now. */ + + /* Monitor page directory */ + if (ad->page_dir) hostOSFreePage(ad->page_dir); + + /* Monitor page tables */ + if (ad->page_tbl) hostOSFreeMem(ad->page_tbl); + + /* Map of linear addresses of page tables mapped into monitor. */ + if (ad->page_tbl_laddr_map) hostOSFreePage(ad->page_tbl_laddr_map); + + /* Nexus page table */ + if (ad->nexus_page_tbl) hostOSFreePage(ad->nexus_page_tbl); + + /* Guest CPU state. */ + if (ad->guest_cpu) hostOSFreePage(ad->guest_cpu); + + /* Transition page table */ + if (ad->transition_PT) hostOSFreePage(ad->transition_PT); + + if (ad->log_buffer) hostOSFreeMem(ad->log_buffer); + + /* Nexus page */ + if (ad->nexus) hostOSFreePage(ad->nexus); + + /* Monitor IDT */ + if (ad->idt) hostOSFreeMem(ad->idt); + + /* Monitor GDT */ + if (ad->gdt) hostOSFreeMem(ad->gdt); + + /* Monitor LDT */ + if (ad->ldt) hostOSFreeMem(ad->ldt); + + /* Monitor TSS */ + if (ad->tss) hostOSFreeMem(ad->tss); + + /* Monitor IDT stubs */ + if (ad->idt_stubs) hostOSFreeMem(ad->idt_stubs); + + + /* clear out allocated pages lists */ + mon_memzero(pg, sizeof(*pg)); + mon_memzero(ad, sizeof(*ad)); +} + + unsigned +hostGetCpuCapabilities(void) +{ + Bit32u eax, ebx, ecx, edx; + + /* Get the highest allowed cpuid level */ + asm volatile ( + "xorl %%eax,%%eax\n\t" + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : + : "cc" + ); + if (eax < 1) + return(0); /* not enough capabilities */ + + /* Copy vendor string. */ + hostCpuIDInfo.vendorDWord0 = ebx; + hostCpuIDInfo.vendorDWord1 = edx; + hostCpuIDInfo.vendorDWord2 = ecx; + + /* CPUID w/ EAX==1: Processor Signature & Feature Flags */ + asm volatile ( + "movl $1,%%eax\n\t" + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : + : "cc" + ); + hostCpuIDInfo.procSignature.raw = eax; + hostCpuIDInfo.featureFlags.raw = edx; + /* Plex86 needs TSC */ + if (hostCpuIDInfo.featureFlags.fields.tsc==0) + return(0); + + return(1); +} + + +/* Map the monitor and guest into the VM. */ + + unsigned +hostMapMonitor(vm_t *vm) +{ + selector_t monCsSel, monSsSel, monTssSel; + Bit32u laddr, base; + unsigned slot; + guest_context_t *guestContext; + nexus_t *nexus; + descriptor_t *gdt; + + /* For convenience, some pointers. */ + guestContext = vm->host.addr.guest_context; + nexus = vm->host.addr.nexus; + gdt = vm->host.addr.gdt; + +#warning "Is the GDT being cleared of old values?" +/* +++ should zero out GDT, so prev entries do not remain */ + + /* ========================= + * Map in Monitor structures + * ========================= + */ + + /* CS/SS/TSS selectors: + * For now, hardcode in monitor descriptors at slots 1,2,3. As we + * are only running user code in the VM, these are likely safe slots + * as they are often used guest OSes for kernel descriptors. + */ + monCsSel.raw = Selector(1, 0, RPL0); + monSsSel.raw = Selector(2, 0, RPL0); + monTssSel.raw = Selector(3, 0, RPL0); + + /* Search for unused PDE for nexus PT (fixed for now) */ + laddr = 0x70000000; + vm->mon_pde_mask = laddr & 0xffc00000; + vm->mon_pdi = laddr >> 22; + base = MON_BASE_FROM_LADDR(laddr); + + /* Map nexus into monitor/guest address space */ + vm->host.addr.page_dir[laddr >> 22] = vm->host.nexus_pde; + + /* CS/SS/TSS descriptors: Put at fixed GDT location for now. */ + SET_DESCRIPTOR(gdt[monCsSel.fields.index], base, 0xfffff, + D_PG, D_D32, D_AVL0, D_PRESENT, D_DPL0, D_CODE | D_READ) + SET_DESCRIPTOR(gdt[monSsSel.fields.index], base, 0xfffff, + D_PG, D_D32, D_AVL0, D_PRESENT, D_DPL0, D_DATA | D_WRITE) + SET_DESCRIPTOR(gdt[monTssSel.fields.index], + base + (Bit32u) vm->guest.addr.tss, + sizeof(tss_t)-1, + D_BG, 0, D_AVL0, D_PRESENT, D_DPL0, D_TSS) + + + /* Fix up the selectors of all IDT entries. */ + for ( slot = 0; slot < 256; slot++ ) + vm->host.addr.idt[slot].selector = monCsSel; + + /* The monitor GDT/IDT loading info. */ + nexus->mon_gdt_info.base = base + (Bit32u) vm->guest.addr.gdt; + nexus->mon_gdt_info.limit = MON_GDT_SIZE; + nexus->mon_idt_info.base = base + (Bit32u) vm->guest.addr.idt; + nexus->mon_idt_info.limit = MON_IDT_SIZE; + + /* We don't have a monitor LDT for now. */ + nexus->mon_ldt_sel = 0; + + /* The monitor TSS. */ + nexus->mon_tss_sel = monTssSel.raw; + vm->host.addr.tss->esp0 = ((Bit32u)vm->guest.addr.nexus) + PAGESIZE; + vm->host.addr.tss->ss0 = monSsSel.raw; + + /* Monitor code and stack segments. */ + nexus->mon_jmp_info.selector = monCsSel.raw; + nexus->mon_stack_info.selector = monSsSel.raw; + + /* Monitor code/data segment base. */ + nexus->mon_base = base; + + vm->vmState |= VMStateMapMonitor; + return(1); +} + + void +hostInitShadowPaging(vm_t *vm) +{ + pageEntry_t *monPDir; + Bit32u pdi; +/*Bit32u cr3_page_index;*/ +/*phy_page_usage_t *pusage;*/ + +#if 0 + cr3_page_index = A20Addr(vm, vm->guest_cpu.cr3) >> 12; + if ( cr3_page_index >= vm->pages.guest_n_pages) + xxxpanic(vm, "monPagingRemap: CR3 conflicts with monitor space\n"); +#endif + + /* Reset page table heap */ + vm->ptbl_laddr_map_i = 0; + + /* Clear monitor PD except 4Meg range used by monitor */ + monPDir = vm->host.addr.page_dir; + for (pdi=0; pdi<1024; pdi++) { +#if ANAL_CHECKS + vm->host.addr.page_tbl_laddr_map[pdi] = -1; /* max unsigned */ +#endif + if (pdi != vm->mon_pdi) + monPDir[pdi].raw = 0; + } + + /* Update vpaging timestamp. */ + vm->vpaging_tsc = vm_rdtsc(); + +#if 0 + /* When we remap the monitor page tables, IF guest paging is + * enabled, then mark the page containing the guest page directory + * as such. In non-paged mode, there is no page directory. + */ + if (vm->guest_cpu.cr0.fields.pg) { + pusage = &vm->pageInfo[cr3_page_index]; + pusage->tsc = vm->vpaging_tsc; + pusage->attr.raw &= PageUsageSticky; + pusage->attr.raw |= PageUsagePDir; + pusage->attr.fields.access_perm = PagePermNA; + if (pusage->attr.raw & PageBadUsage4PDir) + xxxpanic(vm, "monPagingRemap: BadUsage4PDir\n"); + } +#endif +} + + + void +hostReleasePinnedUserPages(vm_t *vm) +{ + unsigned ppi; + unsigned dirty; + unsigned nPages; + Bit32u kernelAddr; + + /* Unpin the pages associate with the guest physical memory. */ + nPages = vm->pages.guest_n_pages; + for (ppi=0; ppipageInfo[ppi].attr.fields.pinned ) { + void *osSpecificPtr; + + osSpecificPtr = (void *) vm->hostStructPagePtr[ppi]; +#warning "Conditionalize page dirtying before page release." + dirty = 1; /* FIXME: 1 for now. */ + hostOSUnpinUserPage(vm, + vm->guestPhyMemAddr + (ppi<<12), + osSpecificPtr, + ppi, + 0 /* There was no host kernel addr mapped for this page. */, + dirty); + vm->pageInfo[ppi].attr.fields.pinned = 0; + } + } + + /* Unpin the pages associated with the guest_cpu area. */ + kernelAddr = (Bit32u) vm->host.addr.guest_cpu; + hostOSUnpinUserPage(vm, + 0, /* User space address. */ + vm->pages.guest_cpu_hostOSPtr, + vm->pages.guest_cpu, + &kernelAddr, + 1 /* Dirty. */); + + /* Unpin the pages associated with the log buffer area. */ + kernelAddr = (Bit32u) vm->host.addr.log_buffer; + hostOSUnpinUserPage(vm, + 0, /* User space address. */ + vm->pages.log_buffer_hostOSPtr[0], + vm->pages.log_buffer[0], + &kernelAddr, + 1 /* Dirty. */); +#warning "User space address is passed as 0 for now..." +} + + unsigned +hostHandlePagePinRequest(vm_t *vm, Bit32u reqGuestPPI) +{ + Bit32u hostPPI; + unsigned qIndex; + +#warning "We must not unpin open pages (for page walking) here." + if (vm->guestPhyPagePinQueue.nEntries < MaxPhyPagesPinned) { + /* There is room in the Q for another entry - we have not reached + * the upper limit of allowable number of pinned pages. + */ + qIndex = vm->guestPhyPagePinQueue.nEntries; + } + else { + unsigned dirty; + Bit32u unpinGuestPPI; + /* There is no room in the Q for another entry - we have reached + * the upper limit of allowable number of pinned pages. We must + * first unpin a page to free up the limit, then we can pin the + * requested page. This keeps plex86 from pinning an unconstrained + * number of pages at one time. + */ + qIndex = vm->guestPhyPagePinQueue.tail; + dirty = 1; /* FIXME: 1 for now. */ + unpinGuestPPI = vm->guestPhyPagePinQueue.ppi[qIndex]; + hostOSUnpinUserPage(vm, + vm->guestPhyMemAddr + (unpinGuestPPI<<12), + vm->hostStructPagePtr[unpinGuestPPI], + unpinGuestPPI, + 0 /* There was no host kernel addr mapped for this page. */, + dirty); + vm->pageInfo[unpinGuestPPI].attr.fields.pinned = 0; + } + + /* Pin the requested guest physical page in the host OS. */ + if ( !hostOSGetAndPinUserPage(vm, + vm->guestPhyMemAddr + (reqGuestPPI<<12), + &vm->hostStructPagePtr[reqGuestPPI], + &hostPPI, + 0 /* Don't need a host kernel address. */ + ) ) { + hostOSPrint("handlePagePinReq: request to pin failed.\n"); + return(0); /* Fail. */ + } + + /* Pinning activities have succeeded. Mark this physical page as being + * pinnned, and store it's physical address. + */ + vm->pageInfo[reqGuestPPI].attr.fields.pinned = 1; + vm->pageInfo[reqGuestPPI].hostPPI = hostPPI; + + /* Now add this entry to the Q. */ + vm->guestPhyPagePinQueue.ppi[qIndex] = reqGuestPPI; + + if (vm->guestPhyPagePinQueue.nEntries < MaxPhyPagesPinned) { + vm->guestPhyPagePinQueue.nEntries++; + vm->guestPhyPagePinQueue.tail = + vm->guestPhyPagePinQueue.nEntries % MaxPhyPagesPinned; + } + else { + /* Leave .nEntries at the maximum value - Q is full. */ + vm->guestPhyPagePinQueue.tail = + (vm->guestPhyPagePinQueue.tail + 1) % MaxPhyPagesPinned; + } + + return(1); /* OK. */ +} diff --git a/bochs/plex86/kernel/monitor-mon.c b/bochs/plex86/kernel/monitor-mon.c new file mode 100644 index 00000000..ea15a6e4 --- /dev/null +++ b/bochs/plex86/kernel/monitor-mon.c @@ -0,0 +1,63 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * system-mon.c: The 'motherboard' logic which connects the entire + * PC system. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "plex86.h" +#define IN_MONITOR_SPACE +#include "monitor.h" + + void +sysFlushPrintBuf(vm_t *vm) +{ + CLI(); + vm->mon_request = MonReqFlushPrintBuf; + vm->guest.__mon2host(); + STI(); +} + + void +sysRemapMonitor(vm_t *vm) +{ + CLI(); + vm->mon_request = MonReqRemapMonitor; + vm->guest.__mon2host(); + STI(); +} + + void +toHostGuestFault(vm_t *vm, unsigned fault) +{ + CLI(); + vm->mon_request = MonReqGuestFault; + vm->guestFaultNo = fault; + vm->guest.__mon2host(); + STI(); +} + + void +toHostPinUserPage(vm_t *vm, Bit32u ppi) +{ + CLI(); + vm->mon_request = MonReqPinUserPage; + vm->pinReqPPI = ppi; + vm->guest.__mon2host(); + STI(); +} diff --git a/bochs/plex86/kernel/nexus.S b/bochs/plex86/kernel/nexus.S new file mode 100644 index 00000000..61fb498d --- /dev/null +++ b/bochs/plex86/kernel/nexus.S @@ -0,0 +1,326 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2001 Kevin P. Lawton + * + * nexus.S: code to transition between host and monitor/guest + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + + +.text + + +/* This module consists of relocatable code and data necessary to + * effect transitions between the host <--> guest. This information + * is purposely stored in this single page, so that we have access + * to it during our transitions between the monitor interrupt handler, + * and our host. + * + * I coded the relevant parts to use completely relocatable + * accesses to the following fields. This is necessary, so that + * we can float this code page anywhere in the monitor's linear + * address space. + */ + +/* =============================================================== + * NOTE: If you modify ANY of the following fields, you must also + * update the corresponding entries in the C typedef 'nexus_t'. + * That construct is used from C land to access values in this + * relocatable page. + */ + +.globl __nexus_start +__nexus_start: + +__vm: ;.skip 4, 0 + +__host_gdt_info: ;.skip 6, 0 +__host_idt_info: ;.skip 6, 0 +__host_jmp_info: ;.skip 6, 0 +__host_stack_info: ;.skip 6, 0 +__host_ldt_sel: ;.skip 2, 0 +__host_tss_sel: ;.skip 2, 0 +__host_cr0: ;.skip 4, 0 +__host_cr2: ;.skip 4, 0 +__host_cr3: ;.skip 4, 0 +__host_cr4: ;.skip 4, 0 + +__mon_gdt_info: ;.skip 6, 0 +__mon_idt_info: ;.skip 6, 0 +__mon_jmp_info: ;.skip 6, 0 +__mon_stack_info: ;.skip 6, 0 +__mon_ldt_sel: ;.skip 2, 0 +__mon_tss_sel: ;.skip 2, 0 +__mon_base: ;.skip 4, 0 +__mon_cr0: ;.skip 4, 0 +__mon_cr3: ;.skip 4, 0 +__mon_cr4: ;.skip 4, 0 +__mon_eflags: ;.skip 4, 0 + +__transition_pde: ;.skip 4, 0 +__transition_pde_p_host: ;.skip 4, 0 +__transition_pde_p_mon: ;.skip 4, 0 +__transition_laddr: ;.skip 4, 0 + +/* =============================================================== + * End NOTE. + */ + +#define OFFSET_OF(field) [field - __nexus_start] + +/* These are the offsets of the structures above, from the */ +/* beginning of this section. */ +#define HOST_GDT_INFO OFFSET_OF(__host_gdt_info) +#define HOST_IDT_INFO OFFSET_OF(__host_idt_info) +#define HOST_JMP_INFO OFFSET_OF(__host_jmp_info) +#define HOST_STACK_INFO OFFSET_OF(__host_stack_info) +#define HOST_LDT_SEL OFFSET_OF(__host_ldt_sel) +#define HOST_TSS_SEL OFFSET_OF(__host_tss_sel) +#define HOST_CR0 OFFSET_OF(__host_cr0) +#define HOST_CR2 OFFSET_OF(__host_cr2) +#define HOST_CR3 OFFSET_OF(__host_cr3) +#define HOST_CR4 OFFSET_OF(__host_cr4) + +#define MON_GDT_INFO OFFSET_OF(__mon_gdt_info) +#define MON_IDT_INFO OFFSET_OF(__mon_idt_info) +#define MON_JMP_INFO OFFSET_OF(__mon_jmp_info) +#define MON_STACK_INFO OFFSET_OF(__mon_stack_info) +#define MON_LDT_SEL OFFSET_OF(__mon_ldt_sel) +#define MON_TSS_SEL OFFSET_OF(__mon_tss_sel) +#define MON_CR0 OFFSET_OF(__mon_cr0) +#define MON_CR3 OFFSET_OF(__mon_cr3) +#define MON_CR4 OFFSET_OF(__mon_cr4) +#define MON_BASE OFFSET_OF(__mon_base) + +#define TRANSITION_PDE OFFSET_OF(__transition_pde) +#define TRANSITION_PDE_P_HOST OFFSET_OF(__transition_pde_p_host) +#define TRANSITION_PDE_P_MON OFFSET_OF(__transition_pde_p_mon) +#define TRANSITION_LADDR OFFSET_OF(__transition_laddr) + + +/* To make this code page and data accesses to the fields above */ +/* relocatable, I use the following conventions. I load EBX with */ +/* a pointer to the beginning of this page, to be used with an */ +/* access through the CS: segment. We can easily get the */ +/* current EIP with a call/pop EBX, so the combination of CS:EBX, */ +/* accesses this page no matter where it is located. */ + + +/* ================================================================== */ +.globl __host2mon /* Start function __host2mon() */ +__host2mon: + /* Save host context first, so it can be restored later */ + pushfl /* Save host flags */ + pushal /* Save host general regs */ + pushl %es /* Save host segments */ + pushl %ds + pushl %fs + pushl %gs + + /* Put EIP of beginning of this section in EBX to be used to */ + /* access data. */ + call null_call +null_call: + popl %ebx + subl $(OFFSET_OF(null_call)), %ebx + + /* Create identity mapping of this page into the monitor context */ + movl (TRANSITION_PDE_P_HOST)(%ebx), %eax + movl (TRANSITION_PDE)(%ebx), %ebp + xchgl %ebp, (%eax) /* old PDE saved in %ebp to be restored below */ + + /* Save host GDT, LDT, IDT, and TSS */ + sgdt (HOST_GDT_INFO)(%ebx) + sidt (HOST_IDT_INFO)(%ebx) + sldt (HOST_LDT_SEL)(%ebx) + str (HOST_TSS_SEL)(%ebx) + + movl %esp, (HOST_STACK_INFO)(%ebx) /* Save host SS:ESP */ + movw %ss, (4+HOST_STACK_INFO)(%ebx) /* for later restore */ + + leal (OFFSET_OF(__host_cs))(%ebx), %eax /* Save the CS:EIP for monitor to */ + movl %eax, (HOST_JMP_INFO)(%ebx) /* jump to when reloading host CS. */ + movw %cs, (4+HOST_JMP_INFO)(%ebx) /* See __guest2host below. */ + + /* Save host CRx values */ + movl %cr0, %eax + movl %cr2, %ecx + movl %cr4, %edx + movl %cr3, %esi + + movl %eax, (HOST_CR0)(%ebx) + movl %ecx, (HOST_CR2)(%ebx) + movl %edx, (HOST_CR4)(%ebx) + movl %esi, (HOST_CR3)(%ebx) + + /* Compute monitor CRx values */ + movl (MON_CR0)(%ebx), %eax + movl (MON_CR4)(%ebx), %edx + movl (MON_CR3)(%ebx), %esi + + /* Before changing the PSE bit in CR4, we have to switch over */ + /* to the new CR3 (this page identity mapped anyways). Otherwise */ + /* the processor could flush the TLB, and reload the entry for */ + /* this page, only to find it's marked with a 4Meg Page, but we */ + /* have that support turned off, before we actually */ + /* reloaded CR3! */ + movl %esi, %cr3 /* Set monitor CR3 */ + movl %eax, %cr0 /* Set monitor CR0 */ + movl %edx, %cr4 /* Set monitor CR4 */ + movl %esi, %cr3 /* Set monitor CR3 */ + +jmp null_jmp0 +null_jmp0: + + /* Switch to monitor GDT, LDT, and IDT */ + lgdt (MON_GDT_INFO)(%ebx) + lidt (MON_IDT_INFO)(%ebx) + lldt (MON_LDT_SEL)(%ebx) + + /* Switch to monitor stack and CS */ + /* and jump to the monitor-side nexus page */ + lss (MON_STACK_INFO)(%ebx), %esp + ljmp (MON_JMP_INFO)(%ebx) +.globl __mon_cs +__mon_cs: + + /* Reset DS:EBX to point to the monitor-side nexus page */ + movw %ss, %ax + movw %ax, %ds /* copy SS to DS */ + movw %ax, %es /* copy SS to ES */ + movl %esp, %ebx + andl $0xfffff000, %ebx + + /* Clear busy bit of the monitor TSS and switch to it */ + movzwl (MON_TSS_SEL)(%ebx), %eax + andl $0xfffffff8, %eax + addl (MON_GDT_INFO+2)(%ebx), %eax + subl (MON_BASE)(%ebx), %eax + andl $0xfffffdff, 4(%eax) + ltr (MON_TSS_SEL)(%ebx) + + /* We no longer need the nexus page identity mapped. Fix the mapping */ + /* back to the way it should be, in case guest code uses it. */ + movl (TRANSITION_PDE_P_MON)(%ebx), %eax + movl %ebp, (%eax) /* %ebp still contains the original value */ + movl (TRANSITION_LADDR)(%ebx), %eax + invlpg (%eax) /* Tell TLB about the change */ +/* +++ xxx fix this, need to convert pure laddr to offset */ +movl %cr3, %eax /* +++ xxx */ +movl %eax, %cr3 /* +++ xxx */ + + /* */ + /* We can now restore the monitor context from it's stack. */ + /* */ + popl %gs + popl %fs + popal /* Restore mon general registers */ + popfl /* Restore mon eflags */ + ret /* Resume execution in monitor exception handler code. */ + + + +/* ================================================================== */ +.globl __mon2host /* Start function __mon2host() */ +__mon2host: + pushfl /* Save mon flags */ + pushal /* Save mon general registers */ + pushl %fs + pushl %gs + + /* Set EBX to point to this nexus page */ + movl %esp, %ebx + andl $0xfffff000, %ebx + + movl %esp, (MON_STACK_INFO)(%ebx) /* Save mon ESP */ + + /* Identity map this code page to host address space. */ + movl (TRANSITION_PDE_P_MON)(%ebx), %eax + movl (TRANSITION_PDE)(%ebx), %ebp + xchgl %ebp, (%eax) /* old PDE saved in %ebp to be restored below */ + movl (TRANSITION_LADDR)(%ebx), %eax + + /* Switch EBX to point to the identity mapped copy of */ + /* the nexus page, and jump to the copy of this code there. */ + subl (MON_BASE)(%ebx), %eax + invlpg (%eax) /* Tell TLB about the change */ + movl %eax, %ebx + leal (OFFSET_OF(__mon_nexus_jmp))(%ebx), %eax + jmp *%eax +__mon_nexus_jmp: + + /* We are still in the monitor context, but are running at the */ + /* same CS.base+EIP location in either host or monitor context, */ + /* and this page is identity mapped between the 2 contexts. */ + /* We can now switch to the host CR3, and be sure that execution */ + /* will resume at the next instruction. */ + + /* NOTE: Don't try to access the stack after CR3 was reloaded */ + /* but before we switched back to the host stack! */ + + /* Restore host CRx values */ + movl (HOST_CR0)(%ebx), %eax + movl (HOST_CR2)(%ebx), %ecx + movl (HOST_CR4)(%ebx), %edx + movl (HOST_CR3)(%ebx), %esi + + movl %eax, %cr0 + movl %ecx, %cr2 + movl %edx, %cr4 + movl %esi, %cr3 + +jmp null_jmp1 +null_jmp1: + + /* Switch to host GDT, LDT, and IDT */ + lgdt (HOST_GDT_INFO)(%ebx) + lidt (HOST_IDT_INFO)(%ebx) + lldt (HOST_LDT_SEL)(%ebx) + + /* Restore host stack and CS */ + lss (HOST_STACK_INFO)(%ebx), %esp + ljmp (HOST_JMP_INFO)(%ebx) +__host_cs: + + /* Clear busy bit of the host TSS and switch to it */ + /* Note that DS is still the monitor segment with base (MON_BASE). */ + movzwl (HOST_TSS_SEL)(%ebx), %eax + andl $0xfffffff8, %eax + addl (HOST_GDT_INFO+2)(%ebx), %eax + subl (MON_BASE)(%ebx), %eax + andl $0xfffffdff, 4(%eax) + ltr (HOST_TSS_SEL)(%ebx) + + /* We no longer need the nexus page identity mapped, so we clean */ + /* up the monitor page directory in case the host looks at it. */ + /* Note that SS is already the host segment. */ + movl (TRANSITION_PDE_P_HOST)(%ebx), %eax + ss; movl %ebp, (%eax) /* %ebp still contains the original value */ + + /* Now we can restore the rest of */ + /* the host context from the host stack. Look at __host2guest */ + /* for the format of the values stored on the host stack. */ + popl %gs + popl %fs + popl %ds + popl %es + popal + popfl + ret + +.globl __nexus_end +__nexus_end: diff --git a/bochs/plex86/kernel/paging-mon.c b/bochs/plex86/kernel/paging-mon.c new file mode 100644 index 00000000..c73b4a36 --- /dev/null +++ b/bochs/plex86/kernel/paging-mon.c @@ -0,0 +1,767 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * paging-mon.c: Virtualized (monitor) paging functionality. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "plex86.h" +#define IN_MONITOR_SPACE +#include "monitor.h" + + + +static unsigned allocatePT(vm_t *, unsigned pdi); +static unsigned strengthenPagePermissions(vm_t *, phyPageInfo_t *usage, + unsigned new_access_perm); +/*static void sanity_check_pdir(vm_t *vm, unsigned id, Bit32u guest_laddr); */ + +/* +++ fix retrieve mon pages function and .base issue */ +/* also open_guest_phy_page expects shifted page val */ +/* +++ write_physical() has hack to ignore when perm!=RW, fix! */ +/* +++ add async handling in emulation.c, like in preGuest() */ + +/* Cases which would generate a mon #PF */ +/* ==================================== */ +/* lazy map */ +/* r/w to current code page */ +/* guest #PF (access checks of cpl,rw) */ +/* w to RO construct */ +/* r/w to NA construct */ + +/* inhibits */ + + +#if 0 +======= Old notes ===================================================== +IDT,GDT,LDT: limit = 64K; TR is a dont care +What to do with PDir, PTbl? +What to do about coherence probs with page tables and TLB? +When are A,D bits copied between monitor and host? +Need check for mapping of space used by monitor + +Code cache probably should not have laddr in it + +guest.PG==0, how are phy pages unmarked when constructs move? +guest.PG transition: dump everything (flush) + +remapping descriptor tables after page flush +make sure to validate phy_attr everywhere before using it. + +checks for the phy_attr of page that PDir goes in +page fault because of monP?E.RW==0, but guestP?E==1 + +/* +++ what about virtualized linear structs like GDT, IDT, ... */ +#endif + +#warning "Have to be careful unpinning a page which is open" +#warning " via open_guest_phy_page(). Multiple pages could be" +#warning " open in the page walk at one time until D/A bits are set." + + + static inline Bit32u +getHostOSPinnedPage(vm_t *vm, Bit32u ppi) +{ + /* If physical page is already pinned by host OS, then we already + * know the physical address of the page. + */ + if (vm->pageInfo[ppi].attr.fields.pinned) + return( vm->pageInfo[ppi].hostPPI ); + + /* Page is not already pinned by the host OS. We need to request + * from the host OS, that this page is pinned and find the + * physical address. + */ + toHostPinUserPage(vm, ppi); + if ( !vm->pageInfo[ppi].attr.fields.pinned ) + monpanic(vm, "getHostOSPinnedPage: page was not marked pinned.\n"); + return( vm->pageInfo[ppi].hostPPI ); +} + + + unsigned +allocatePT(vm_t *vm, unsigned pdi) +{ + unsigned map_i; + + /* Allocate one of the (preallocated) pages for */ + /* the monitor to use for a page table at the PDI given. */ + + map_i = vm->ptbl_laddr_map_i; + + if (map_i >= MON_PAGE_TABLES) { + monpanic(vm, "allocatePT: out of page tables\n"); + } +#if ANAL_CHECKS + if (vm->guest.addr.page_tbl_laddr_map[pdi] != -1) { + monprint(vm, "allocatePT: check failed.\n"); + monpanic(vm, " pdi=0x%x, laddr_map=0x%x\n", + pdi, vm->guest.addr.page_tbl_laddr_map[pdi]); + } +#endif + vm->guest.addr.page_tbl_laddr_map[pdi] = map_i; + vm->ptbl_laddr_map_i++; + return(map_i); +} + + unsigned +getMonPTi(vm_t *vm, unsigned pdi, unsigned source) +{ + unsigned map_i; + map_i = vm->guest.addr.page_tbl_laddr_map[pdi]; +#if ANAL_CHECKS + if (map_i == -1) { + monprint(vm, "getMonPTi: check failed.\n"); + monpanic(vm, " pdi=0x%x, map_i=0x%x, source=%u\n", + pdi, map_i, source); + } + if (map_i >= MON_PAGE_TABLES) + monpanic(vm, "getMonPTi: map_i OOB\n"); +#endif + return(map_i); +} + + +/* Invalidate the mapping of a guest page in the monitor. + * When situations change, such as a change in the permissions + * necessary to virtualize the page properly, we'll need to do + * this first, before remapping with the new permissions. + */ + unsigned +strengthenPagePermissions(vm_t *vm, phyPageInfo_t *pusage, + unsigned new_access_perm) +{ + pusage->attr.fields.access_perm = new_access_perm; + + if (pusage->attr.fields.lmap_count == 0) { + /* No linear addresses are mapped to this phy page yet. + * Nothing to do. */ + return 0; + } + else if (pusage->attr.fields.lmap_count == 1) { + /* One linear address is mapped to this phy page. */ + Bit32u pdi, pti; + pageEntry_t *monPDE, *monPTE; + page_t *monPTbl; + unsigned map_i; + + pdi = (pusage->attr.fields.laddr_backlink >> 10); + pti = (pusage->attr.fields.laddr_backlink & 0x3ff); + monPDE = &vm->guest.addr.page_dir[pdi]; + if ( !monPDE->fields.P ) + monpanic(vm, "strengthenPP: monPDE.P==0\n"); + map_i = getMonPTi(vm,pdi,10); + monPTbl = &vm->guest.addr.page_tbl[map_i]; + monPTE = &monPTbl->pte[pti]; + if ( !monPTE->fields.P ) { + +/*monprint(vm, "strengthenPP: bl=0x%x, AP=%u\n", + *pusage->attr.fields.laddr_backlink, new_access_perm); */ + + /*monpanic(vm, "strengthenPP: monPTE.P==0\n"); */ + } + else if (pusage->attr.fields.access_perm==PagePermNA) { + /* Permissions were changed to No Access */ + monPTE->raw = 0; + } + else if (pusage->attr.fields.access_perm==PagePermRO) { + /* Permissions were changed to RO */ + monPTE->fields.RW = 0; + } + else { + monpanic(vm, "strengthenPP: PagePermRW\n"); + } + /* Flush the old TLB entry */ + invlpg_mon_offset( + Guest2Monitor(vm, pusage->attr.fields.laddr_backlink<<12) + ); + return 0; + } + else { + /* Multiple linear addresses are mapped to this phy page. */ + /* Since we dont store enough backlink info to virtualize all */ + /* linear addresses which point to this phy page, we have to dump */ + /* all dynamic mappings and start over. */ +monpanic(vm, "strengthenPP: multiple lin addr\n"); +/*monPagingRemap(vm);*/ + return 1; + } +} + + unsigned +addPageAttributes(vm_t *vm, Bit32u ppi, Bit32u req_attr) +{ + phyPageInfo_t *pusage; + unsigned new_access_perm; + + VM_ASSERT(vm, ppi < vm->pages.guest_n_pages); + + pusage = &vm->pageInfo[ppi]; + if (pusage->tsc < vm->vpaging_tsc) { + /* The dynamic attributes for this page are not valid since + * the last remap. getPageUsage() has logic to build attributes. + */ + getPageUsage(vm, ppi); + } + + /* Build new attributes based on old ones, and requested ones. */ + pusage->attr.raw |= req_attr; + + /* Look at strength of new access restrictions */ + if (pusage->attr.raw & PageUsageCausesNA) + new_access_perm = PagePermNA; + else if (pusage->attr.raw & PageUsageCausesRO) + new_access_perm = PagePermRO; + else + new_access_perm = PagePermRW; + + if (new_access_perm > pusage->attr.fields.access_perm) { + /* New usage causes a stronger access restriction. Remap them. */ + return( strengthenPagePermissions(vm, pusage, new_access_perm) ); + } + return 0; +} + + phyPageInfo_t * +getPageUsage(vm_t *vm, Bit32u ppi) +{ + phyPageInfo_t *pusage; + + VM_ASSERT(vm, ppi < vm->pages.guest_n_pages); + pusage = &vm->pageInfo[ppi]; + + if (pusage->tsc < vm->vpaging_tsc) { + /* The dynamic attributes for this page are not valid since + * the last remap. Clear them out, and timestamp. + */ + pusage->tsc = vm_rdtsc(); + pusage->attr.raw &= PageUsageSticky; + if (pusage->attr.raw & PageUsageCausesNA) + pusage->attr.fields.access_perm = PagePermNA; + else if (pusage->attr.raw & PageUsageCausesRO) + pusage->attr.fields.access_perm = PagePermRO; + else + pusage->attr.fields.access_perm = PagePermRW; + } + return(pusage); +} + + + void * +open_guest_phy_page(vm_t *vm, Bit32u ppi, Bit8u *mon_offset) +{ + page_t *pageTable; + Bit32u pti, mon_range_offset; + + VM_ASSERT(vm, ppi < vm->pages.guest_n_pages); + /* Since we rewind our CS/DS.base so that the beginning of our */ + /* monitor pages land on the beginning of a new 4Meg boundary */ + /* (separate PDE), find out what mon_offset is in terms of */ + /* an offset from the beginning of the PDE boundary. */ + mon_range_offset = ( ((Bit32u) mon_offset) - + kernelModulePages.startOffsetPageAligned ); + pti = (mon_range_offset >> 12) & 0x3ff; + pageTable = vm->guest.addr.nexus_page_tbl; + + /* Remap the base field. All the rest of the fields are */ + /* set previously, and can remain the same. */ + pageTable->pte[pti].fields.base = getHostOSPinnedPage(vm, ppi); + invlpg_mon_offset( (Bit32u) mon_offset ); + return(mon_offset); +} + + void +close_guest_phy_page(vm_t *vm, Bit32u ppi) +{ + /* ppi is >> 12 already */ + /* +++ */ +} + + void +virtualize_lconstruct(vm_t *vm, Bit32u l0, Bit32u l1, unsigned perm) +{ + /* Mark pages for a protected construct in linear space as */ + /* virtualized (protected), if it is mapped into monitor space. */ + /* Pages which are not yet mapped in, are virtualized dynamically */ + /* when they are mapped in. */ + + Bit32u pdi, pdi0, pdi1, pti, pti0, pti1; + pageEntry_t *monPDE, *monPTE; + page_t *monPTbl; + +/* +++ For now, can just dump all page mappings and start over */ +/* again. Need to complete this function, so we can virtualize */ +/* only those pages which need it, and keep the other ones. */ +/* +++ Need to look at perm also. */ +monpanic(vm, "vir_lconstruct: unfinished.\n"); +/*monPagingRemap(vm);*/ +return; + + if (vm->guest.addr.guest_cpu->cr0.fields.pg) + monpanic(vm, "virtualize_lconstruct: guest PG==1\n"); + if (l0 >= l1) + monpanic(vm, "virtualize_lconstruct: l0>=l1!\n"); + if ( (l1-l0) > (64*1024) ) + monpanic(vm, "virtualize_lconstruct: span is > 64k!\n"); + pdi0 = l0 >> 22; + pdi1 = l1 >> 22; + pti0 = (l0 >> 12) & 0x000003ff; + for (pdi=pdi0; pdi<=pdi1; pdi++) { + if ( pdi == vm->mon_pdi ) + monpanic(vm, "virtualize_lconstruct: conflict with monitor space\n"); + monPDE = &vm->guest.addr.page_dir[pdi]; + if (monPDE->fields.P) { + if (pdi> 12) & 0x000003ff; /* use index of last address */ + for (pti=pti0; pti<=pti1; pti++) { +/* +++ */ +/* +++ FIX THIS!!!, set depending on guest.CR0.PG */ +/* +++ */ + monPTbl = &vm->guest.addr.page_tbl[pdi]; + monPTE = &monPTbl->pte[pti]; + if (monPTE->fields.P) { + /* +++ finish this! */ + /* The physical page for this linear address is allocated */ + /* and mapped into the monitor. We can access the attributes */ + /* for this physical page. Even if it has been virtualized */ + /* before, we still need to mark it since it could have been */ + /* virtualized due to a physical page constraint. */ + monpanic(vm, "virtualize_lconstruct: finish.\n"); + } + } + } + pti0 = 0; /* start address at boundary of next PDI */ + } +} + + unsigned +mapGuestLinAddr(vm_t *vm, Bit32u guest_laddr, Bit32u *guest_ppi, + unsigned req_us, unsigned req_rw, Bit32u attr, + Bit32u *error) +{ + Bit32u pdi, pti; + Bit32u guest_lpage_index, ptbl_ppi; + page_t *monPTbl; + pageEntry_t *monPDE, *monPTE; + pageEntry_t *guestPDir, guestPDE, *guestPTbl, guestPTE; + Bit32u guest_pdir_page_index; + unsigned pt_index, us, rw; + phyPageInfo_t *pusage; + unsigned wasRemap = 0; + + guest_lpage_index = guest_laddr >> 12; + pdi = guest_lpage_index >> 10; + pti = guest_lpage_index & 0x3ff; + monPDE = &vm->guest.addr.page_dir[pdi]; + + if (vm->guest.addr.guest_cpu->cr0.fields.pg) { + /* Check out the guest's mapping of this address to see */ + /* if would allow for an access. */ + /* First, get the guest PDE */ + guest_pdir_page_index = A20Addr(vm, vm->guest.addr.guest_cpu->cr3) >> 12; + if (guest_pdir_page_index >= vm->pages.guest_n_pages) + monpanic(vm, "mapGuestLinAddr: PG=1 guest PDE OOB\n"); + /* Open a window into guest physical memory */ + guestPDir = open_guest_phy_page(vm, guest_pdir_page_index, + vm->guest.addr.tmp_phy_page0); + guestPDE = guestPDir[pdi]; + + /* See if present, before fetching PTE */ + if (guestPDE.fields.P==0) { + *error = 0x00000000; /* RSVD=0, P=0 */ + goto np_exception; + } + +#if 0 + if (vm->guestCpuIDInfo.procSignature.fields.family < 6) { + /* Update A bit of PDE memory image if not already */ + if ( guestPDE.fields.A == 0 ) { + guestPDE.fields.A = 1; + guestPDir[pdi] = guestPDE; + } + } +#endif + + /* Second, get the guest PDE */ + ptbl_ppi = A20PageIndex(vm, guestPDE.fields.base); + if (ptbl_ppi >= vm->pages.guest_n_pages) + monpanic(vm, "mapGuestLinAddr: PG=1 guest PTE OOB\n"); + guestPTbl = open_guest_phy_page(vm, ptbl_ppi, + vm->guest.addr.tmp_phy_page1); + guestPTE = guestPTbl[pti]; + + if (guestPTE.fields.P==0) { + *error = 0x00000000; /* RSVD=0, P=0 */ + goto np_exception; + } + +#if 0 +/* +++ */ + if (guestPDE.raw & PDEUnhandled) + monpanic(vm, "mapGuestLinAddr: guestPDE 0x%08x\n", guestPDE.raw); +#endif + /* See if requested guest priv is weaker than guest PDE priv */ + if (req_us > guestPDE.fields.US) { + *error = 0x00000001; /* RSVD=0, P=1 */ + goto access_exception; + } + if ( (req_rw > guestPDE.fields.RW) && + (vm->guest.addr.guest_cpu->cr0.fields.wp || req_us) ) { + *error = 0x00000001; /* RSVD=0, P=1 */ + goto access_exception; + } + +#warning "ignoring PTEUnhandled bits" +#if 0 + if (guestPTE.raw & PTEUnhandled) + monpanic(vm, "mapGuestLinAddr: guestPTE 0x%08x\n", guestPTE.raw); +#endif + if (req_us > guestPTE.fields.US) { + *error = 0x00000001; /* RSVD=0, P=1 */ + goto access_exception; + } + if ( (req_rw > guestPTE.fields.RW) && + (vm->guest.addr.guest_cpu->cr0.fields.wp || req_us) ) { + *error = 0x00000001; /* RSVD=0, P=1 */ + goto access_exception; + } + +#if 0 + if (vm->guestCpuIDInfo.procSignature.fields.family >= 6) { + /* Update A bit of PDE memory image if not already */ + if ( guestPDE.fields.A == 0 ) { + guestPDE.fields.A = 1; + guestPDir[pdi] = guestPDE; + } + } + + /* Update A bit in PTE memory image if not already */ + if ( (guestPTE.fields.A == 0) || + ((req_rw==1) && !guestPTE.fields.D) ) { + guestPTE.fields.A = 1; + if (req_rw==1) + guestPTE.fields.D = 1; + guestPTbl[pti] = guestPTE; + } +#endif + + *guest_ppi = A20PageIndex(vm, guestPTE.fields.base); + } + else { + /* guest paging is off, linear address is physical address */ + guest_pdir_page_index = 0; /* keep compiler quiet */ + *guest_ppi = A20PageIndex(vm, guest_lpage_index); + } + if (*guest_ppi >= vm->pages.guest_n_pages) + return(MapLinPPageOOB); + +/* +++ mapping in guest pages, check static phy_attr bits first before */ +/* +++ allowing non-protected. */ + + +mapIntoMonitor: + + /* At this point, we know that the guest's paging system + * (if enabled) would allow for this access. Now we have to + * see about mapping it into the monitor linear address space. + */ + pusage = getPageUsage(vm, *guest_ppi); + + if (wasRemap > 1) + monpanic(vm, "wasRemap>1\n"); + + /* + * Check monitor PDE + */ + if (monPDE->fields.P == 0) { + /* OK, Lazy PT map/allocate */ + if (vm->guest.addr.guest_cpu->cr0.fields.pg) { + phyPageInfo_t *pde_pusage; + + pde_pusage = + getPageUsage(vm, A20PageIndex(vm, guestPDE.fields.base)); + if (pde_pusage->attr.raw & PageBadUsage4PTbl) { + +#warning "PDE->PDir hack" +/*monprint(vm, "PDE.base=0x%x CR3=0x%x\n", + * A20PageIndex(vm, guestPDE.fields.base), + * A20Addr(vm, vm->guest_cpu.cr3)); + */ +return(MapLinEmulate); + } + + if (pde_pusage->attr.raw & PageUsagePTbl) { + /* It is possible that multiple PDE entries will point to */ + /* the same Page Table. In this case, we need to search to */ + /* find which one the monitor already mapped in, and get */ + /* a pointer to the Page Table allocated by the monitor. */ + Bit32u guest_ptbl_index; + unsigned i; + + guestPDir = open_guest_phy_page(vm, guest_pdir_page_index, + vm->guest.addr.tmp_phy_page0); + guest_ptbl_index = A20PageIndex(vm, guestPDir[pdi].fields.base); + monPTbl = (void *) 0; + pt_index = 0; /* keep compiler quiet */ + for (i=0; i<1024; i++) { + if (i==pdi) continue; /* skip current PDI */ + guestPDE = guestPDir[i]; + if ( guestPDE.fields.P && + (A20PageIndex(vm, guestPDE.fields.base)==guest_ptbl_index) ) { + /* OK, guest has a PDE which matches. If it is mapped into */ + /* the monitor already, then we are done searching. */ + if (vm->guest.addr.page_dir[i].fields.P) { + pt_index = getMonPTi(vm, i, 11); + vm->guest.addr.page_tbl_laddr_map[pdi] = pt_index; + monPTbl = &vm->guest.addr.page_tbl[pt_index]; + break; + } + } + } + close_guest_phy_page(vm, guest_pdir_page_index); + if (i>=1024) + monpanic(vm, "mapGuestLinAddr: PDE maps to existing PTbl.\n"); + } + else { + /* Allocate PT using paged scheme. */ + pt_index = allocatePT(vm, pdi); + monPTbl = &vm->guest.addr.page_tbl[pt_index]; + mon_memzero(monPTbl, sizeof(*monPTbl)); + } + + if (vm->guest.addr.guest_cpu->sreg[SRegCS].des.dpl==3) { + /* For user code, we can use the guest US & RW values as-is, */ + /* since they are honored as such with either CR0.WP value. */ + us = guestPDE.fields.US; + rw = guestPDE.fields.RW; + } + else { /* guest supervisor code */ + /* For supervisor code, access rules are different dependent on */ + /* the value of CR0.WP. */ + if (vm->guest.addr.guest_cpu->cr0.fields.wp==0) { + /* If CR0.WP=0, then supervisor code can write to any page, */ + /* and permissions are effectively ignored. */ + us = 1; + rw = 1; + } + else { /* CR0.WP==1 */ + /* If CR0.WP=0, then supervisor code can read from any page, */ + /* but write permission depends on the RW bit. */ + us = 1; + rw = guestPDE.fields.RW; + } + } + + + /* Base/Avail=0/G=0/PS=0/D=d/A=a/PCD=0/PWT=0/US=us/RW=rw/P=1 */ + monPDE->raw = + (vm->pages.page_tbl[pt_index] << 12) | (guestPDE.raw & 0x60) | + (us<<2) | (rw<<1) | 1; + if ( addPageAttributes(vm, A20PageIndex(vm, guestPDE.fields.base), + PageUsagePTbl) ) { + wasRemap++; + goto mapIntoMonitor; + } + } + else { + /* Allocate PT using non-paged scheme. */ + pt_index = allocatePT(vm, pdi); + monPTbl = &vm->guest.addr.page_tbl[pt_index]; + mon_memzero(monPTbl, 4096); + /* Base/Avail=0/G=0/PS=0/D=0/A=0/PCD=0/PWT=0/US=1/RW=1/P=1 */ + monPDE->raw = + (vm->pages.page_tbl[pt_index] << 12) | 0x7; + } + } + else { + /* monPDE->P == 1 */ + + /* Make sure this laddr does not conflict with monitor space */ + /* This can only happen when monPDE.P==1, since the monitor */ + /* is always mapped in. */ + if ( (guest_laddr & 0xffc00000) == vm->mon_pde_mask ) + return(MapLinMonConflict); + + pt_index = getMonPTi(vm, pdi, 12); + monPTbl = &vm->guest.addr.page_tbl[pt_index]; + } + + monPTE = &monPTbl->pte[pti]; + + /* + * Check monitor PTE + */ + if (monPTE->fields.P == 0) { + if (vm->guest.addr.guest_cpu->cr0.fields.pg) { + if (vm->guest.addr.guest_cpu->sreg[SRegCS].des.dpl==3) { + /* For user code, we can use the guest US & RW values as-is, */ + /* since they are honored as such with either CR0.WP value. */ + us = guestPTE.fields.US; + rw = guestPTE.fields.RW; + } + else { /* guest supervisor code */ + /* For supervisor code, access rules are different dependent on */ + /* the value of CR0.WP. */ + if (vm->guest.addr.guest_cpu->cr0.fields.wp==0) { + /* If CR0.WP=0, then supervisor code can write to any page, */ + /* and permissions are effectively ignored. */ + us = 1; + rw = 1; + } + else { /* CR0.WP==1 */ + /* If CR0.WP=0, then supervisor code can read from any page, */ + /* but write permission depends on the RW bit. */ + us = 1; + rw = guestPTE.fields.RW; + } + } + if (pusage->attr.fields.access_perm==PagePermRO) { + rw = 0; + if (req_rw) + return(MapLinEmulate); + } + else if (pusage->attr.fields.access_perm==PagePermNA) + return(MapLinEmulate); + + /* Base/Avail=0/G=0/PS=0/D=d/A=a/PCD=0/PWT=0/US=1/RW=rw/P=1 */ + monPTE->raw = + (getHostOSPinnedPage(vm, *guest_ppi) << 12) | (guestPTE.raw & 0x60) | + 0x5 | (rw<<1); + } + else { /* CR0.PG==0 */ + rw = 1; /* Paging off is effectively RW */ + if (pusage->attr.fields.access_perm==PagePermRO) { + rw = 0; + if (req_rw) + return(MapLinEmulate); + } + else if (pusage->attr.fields.access_perm==PagePermNA) + return(MapLinEmulate); + /* Base/Avail=0/G=0/PS=0/D=0/A=0/PCD=0/PWT=0/US=1/RW=rw/P=1 */ + monPTE->raw = + (getHostOSPinnedPage(vm, *guest_ppi) << 12) | 0x5 | (rw<<1); + } + + /* Mark physical page as having an unvirtualized linear address + * mapped to it. + */ + if (pusage->attr.fields.lmap_count == 0) { + pusage->attr.fields.lmap_count = 1; + pusage->attr.fields.laddr_backlink = guest_lpage_index; + } + else if (pusage->attr.fields.lmap_count == 1) { + pusage->attr.fields.lmap_count = 2; /* max out count */ + /* Count maxed out, we only store laddr_backlink of 1st mapping. */ + } + else { + /* Count maxed out, we don't store any more info. */ + } + + invlpg_mon_offset( Guest2Monitor(vm, guest_laddr) ); + return(MapLinOK); + } + else { + /* PTE.P == 1 */ + return(MapLinAlreadyMapped); + } + +np_exception: +access_exception: + *error |= (req_us<<2) | (req_rw<<1); + return(MapLinException); +} + + + void +guestPageFault(vm_t *vm, guest_context_t *context, Bit32u cr2) +{ + Bit32u guest_ppi, error, gerror; + unsigned us, rw; + + /* Make sure this laddr does not conflict with monitor space */ + if ( (cr2 & 0xffc00000) == vm->mon_pde_mask ) + monpanic(vm, "PageFault: guest access to monitor space\n"); + + error = context->error; + if (error & 0x8) /* If RSVD bits used in PDir */ + monpanic(vm, "guestPageFault: RSVD\n"); + + us = vm->guest.addr.guest_cpu->sreg[SRegCS].des.dpl == 3; + rw = (error >> 1) & 1; + +/* +++ should base attr (currently 0) on whether this is */ +/* code or data??? only if siv==1 */ + switch (mapGuestLinAddr(vm, cr2, &guest_ppi, us, rw, 0, &gerror)) { + case MapLinOK: + return; + case MapLinMonConflict: + monpanic(vm, "guestPageFault: MapLinMonConflict:\n"); + case MapLinAlreadyMapped: + monpanic(vm, "guestPageFault: MapLinAlreadyMapped:\n"); + /*emulate_instr(vm, context, 2);*/ + return; + case MapLinPPageOOB: + monpanic(vm, "guestPageFault: MapLinPPageOOB (0x%x):\n", cr2); + case MapLinEmulate: + monpanic(vm, "guestPageFault: MapLinEmulate:\n"); + /*emulate_instr(vm, context, 3);*/ + return; + + case MapLinException: + /*monpanic(vm, "guestPageFault: emulate_exception was here.\n");*/ + /*emulate_exception(vm, ExceptionPF, gerror);*/ + toHostGuestFault(vm, ExceptionPF); + return; + + default: + monpanic(vm, "guestPageFault: MapLin: default case:\n"); + } +} + +#if 0 + void +sanity_check_pdir(vm_t *vm, unsigned id, Bit32u guest_laddr) +{ + pageEntry_t *monPDE; + Bit32u pdi; + unsigned pt_index; + + for (pdi=0; pdi<1024; pdi++) { + monPDE = &vm->guest.addr.page_dir[pdi]; + if ( (pdi!=vm->mon_pdi) && + monPDE->fields.P ) { + + pt_index = vm->guest.addr.page_tbl_laddr_map[pdi]; + if (pt_index == -1) + monpanic(vm, "sanity_check_pdir: pt_index==-1\n"); + if (pt_index >= vm->pages.guest_n_pages) + monpanic(vm, "sanity_check_pdir: pt_index OOB\n"); + if ( monPDE->fields.base != vm->pages.page_tbl[pt_index] ) { + monprint(vm, "gaddr=0x%x\n", guest_laddr); + monprint(vm, "pt_index=%u\n", pt_index); + monprint(vm, "map[0x302]=%u\n", + vm->guest.addr.page_tbl_laddr_map[0x302]); + monpanic(vm, "sanity_check_pdir: id=%u " + "pdi=0x%x\n", id, pdi); + } + } + } +} +#endif diff --git a/bochs/plex86/kernel/panic-mon.c b/bochs/plex86/kernel/panic-mon.c new file mode 100644 index 00000000..b083d45e --- /dev/null +++ b/bochs/plex86/kernel/panic-mon.c @@ -0,0 +1,71 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * panic-mon.c: Monitor panic facility. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "plex86.h" +#define IN_MONITOR_SPACE +#include "monitor.h" + +extern int mon_vprint(vm_t *vm, char *fmt, va_list args); + + +/*======================================== */ +/* Only to be used in monitor/guest space! */ +/*======================================== */ + + void +monpanic(vm_t *vm, char *fmt, ...) +{ + monprint(vm, "plex86 panic: "); + if (fmt) + { + va_list args; + va_start(args, fmt); + mon_vprint(vm, fmt, args); + va_end(args); + } + +loop: + + CLI(); + + vm->mon_request = MonReqPanic; + vm->guest.__mon2host(); + + /* mon2host() should never return in this case. In case it ever */ + /* does because our logic is broken, keep returning back to */ + /* the host so we at least don't hang the machine. */ + goto loop; +} + + void +monpanic_nomess(vm_t *vm) +{ +loop: + CLI(); + vm->mon_request = MonReqPanic; + vm->guest.__mon2host(); + + /* mon2host() should never return in this case. In case it ever */ + /* does because our logic is broken, keep returning back to */ + /* the host so we at least don't hang the machine. */ + goto loop; +} diff --git a/bochs/plex86/kernel/print-mon.c b/bochs/plex86/kernel/print-mon.c new file mode 100644 index 00000000..0961f7e5 --- /dev/null +++ b/bochs/plex86/kernel/print-mon.c @@ -0,0 +1,262 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * print-nexus.c: Monitor debug print facility + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "plex86.h" +#define IN_MONITOR_SPACE +#include "monitor.h" + +int mon_vprint(vm_t *vm, char *fmt, va_list args); + +static unsigned int power_of_ten[] = { + 1, + 10, + 100, + 1000, + 10000, + 100000, + 1000000, + 10000000, + 100000000, + 1000000000, + }; + + int +monprint(vm_t *vm, char *fmt, ...) +{ + va_list args; + int ret; + + va_start(args, fmt); + ret = mon_vprint(vm, fmt, args); + va_end(args); + return(ret); +} + + int +mon_vprint(vm_t *vm, char *fmt, va_list args) +{ + unsigned offset, size; + unsigned char *log_buff_p; + int ret; + + if (vm->log_buffer_info.locked) + return 0; + + vm->log_buffer_info.locked = 1; + vm->log_buffer_info.event = 1; + offset = vm->log_buffer_info.offset; + + /* Sanity check */ + if (offset >= LOG_BUFF_SIZE) { + vm->guest.addr.log_buffer[0] = 0; /* Null terminate. */ + resetPrintBuf(vm); + return(0); + } + + size = LOG_BUFF_SIZE - offset; + log_buff_p = &vm->guest.addr.log_buffer[offset]; + + ret = mon_vsnprintf(log_buff_p, size, fmt, args); + + if (ret == -1) { + /* Terminate current contents since new print request did not work. */ + *log_buff_p = 0; + /* If we are in the monitor space, then we can request that the + * current buffer contents be printed. + */ + resetPrintBuf(vm); + sysFlushPrintBuf(vm); + + /* Print request did not fit. dump buffer contents and try again + * using whole buffer. + */ + size = LOG_BUFF_SIZE; + log_buff_p = &vm->guest.addr.log_buffer[0]; + ret = mon_vsnprintf(log_buff_p, size, fmt, args); + if (ret == -1) { + /* We have serious problems. This print request will not even + * fit in the whole buffer. + */ + vm->guest.addr.log_buffer[0] = 0; /* Null terminate. */ + resetPrintBuf(vm); + /* xxx Put error in buffer here. */ + return(0); + } + } + vm->log_buffer_info.offset += ret; + vm->log_buffer_info.locked = 0; +#if 0 /* Fri Dec 27 21:43:05 EST 2002 */ + resetPrintBuf(vm); + sysFlushPrintBuf(vm); +#endif + return(ret); +} + + void +resetPrintBuf(vm_t *vm) +{ + vm->log_buffer_info.event = 0; + vm->log_buffer_info.locked = 0; + vm->log_buffer_info.offset = 0; + vm->log_buffer_info.error = 0; +} + + +/* For now, this is a simple vsnprintf() type of function. We need + * to fill this out a little. + */ + + int +mon_vsnprintf(char *str, unsigned size, const char *fmt, va_list args) +{ + int count = 0; + unsigned format_width; + unsigned char c; + + while (*fmt) { + switch (*fmt) { + + case '%': + format_width = 0; + fmt++; + c = *fmt++; + /* Get optional field width */ + if ( (c>='0') && (c<='9') ) { + do { + format_width = (format_width * 10) + (c - '0'); + c = *fmt++; + } while ( (c>='0') && (c<='9') ); + } + /* %x: hexadecimal */ + if ( c == 'x' ) { + unsigned int val, leadin; + int j; + unsigned nibble; + + val = va_arg(args, unsigned int); + leadin = 1; + + for (j=7; j>=0; j--) { + nibble = (val >> (4 * j)) & 0x0f; + if (leadin && j && !format_width && !nibble) + continue; + if (leadin && j && format_width && ((j+1)>format_width) && + !nibble) + continue; + leadin = 0; + if ( (count+2) >= size ) goto error; + if (nibble <= 9) + *str++ = nibble + '0'; + else + *str++ = (nibble-10) + 'A'; + count++; + } + break; + } + + /* %c: character */ + if ( c == 'c' ) { + unsigned char val; + val = va_arg(args, unsigned); + if ( (count+2) >= size ) goto error; + *str++ = val; + count++; + break; + } + + /* %s: string */ + if ( c == 's' ) { + unsigned char *s; + s = va_arg(args, unsigned char *); + if ( (count+2) >= size ) goto error; + count++; + while (*s) { + if ( (count+2) >= size ) goto error; + *str++ = *s++; /* Copy char from string to output buffer. */ + count++; + } + break; + } + + /* %u: unsigned int */ + if ( c == 'u' ) { + unsigned int val, leadin; + int j; + unsigned digit; + + val = va_arg(args, unsigned int); + leadin = 1; + + for (j=9; j>=0; j--) { + if (leadin && j && !format_width && (val < power_of_ten[j])) + continue; + if (leadin && j && format_width && ((j+1)>format_width) && + (val < power_of_ten[j])) + continue; + leadin = 0; + digit = (val / power_of_ten[j]); + if ( (count+2) >= size ) goto error; + *str++ = digit + '0'; + count++; + val -= (digit * power_of_ten[j]); + } + break; + } + /* %b : binary (non-standard but useful) */ + if ( c == 'b' ) { + unsigned int val, bit, leadin; + int j; + val = va_arg(args, unsigned int); + leadin = 1; + for (j=31; j>=0; j--) { + bit = (val >> j) & 1; + if (leadin && j && !format_width && !bit) + continue; + if (leadin && j && format_width && ((j+1)>format_width) && !bit) + continue; + leadin = 0; + if ( (count+2) >= size ) goto error; + *str++ = bit + '0'; + count++; + } + break; + } + + /* Error, unrecognized format char */ + goto error; + break; + + default: + /* pass char through */ + if ( (count+2) >= size ) goto error; + *str++ = *fmt++; + count++; + break; + } + } + + *str = 0; /* Complete string with null char */ + return(count); + +error: + return(-1); +} diff --git a/bochs/plex86/kernel/util-nexus.c b/bochs/plex86/kernel/util-nexus.c new file mode 100644 index 00000000..1c33eeef --- /dev/null +++ b/bochs/plex86/kernel/util-nexus.c @@ -0,0 +1,57 @@ +/* + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * util-nexus.c: convenience routines which can be accessed from + * either space. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "plex86.h" +/* These functions are available from either space. */ +#define IN_MONITOR_SPACE +#define IN_HOST_SPACE +#include "monitor.h" + + + + void +mon_memzero(void *ptr, int size) +{ + char *p = ptr; + while (size--) + *p++ = 0; +} + + void +mon_memcpy(void *dst, void *src, int size) +{ + char *d = dst; + char *s = src; + while (size--) + *d++ = *s++; +} + + void * +mon_memset(void *dst, unsigned c, unsigned n) +{ + unsigned char *d = dst; + while (n--) { + *d++ = c; + } + return(dst); +} diff --git a/bochs/plex86/misc/load_module.sh b/bochs/plex86/misc/load_module.sh new file mode 100755 index 00000000..fb74d067 --- /dev/null +++ b/bochs/plex86/misc/load_module.sh @@ -0,0 +1,55 @@ +#! /bin/bash +# +# A simple script to load up the kernel module and create the device nodes +# for it. +# +# Note: +# this must be run as root +# + +# Work out where the module is +kmodule="`dirname $0`/../kernel/plex86.o" + +# Check that root is executing us +if [ "$EUID" != "0" ]; then + echo "Sorry, you need to be root for this script to work." + echo "use 'su -c $0' and enter the root password when prompted" + exit -1 +fi + +# Check if the module exists +if [ ! -f "$kmodule" ]; then + echo "The kernel module ($kmodule) does not exist!" + exit -1 +fi + +# Check if the module is already loaded +if [ "x`grep plex86 /proc/devices`" != "x" ]; then + echo "The kernel module is already loaded!" + exit -1 +fi + +# Remove any stale device nodes +# (extend for any minor devices created in the future) +rm -f /dev/plex86 + +# Load up the module with insmod +/sbin/insmod $kmodule + +# Check if the module loaded +major=`grep plex86 /proc/devices | awk '/plex86/ {print $1;}'` +if [ "x$major" = "x" ]; then + echo "The kernel module failed to load!" + exit -1 +fi + +# Create the device node and set its permissions +# (extend for any minor devices created in the future) +if [ ! -c /dev/plex86 ]; then + /bin/mknod /dev/plex86 c $major 0 +fi +chmod a+rw /dev/plex86 + +# Job done - Give a little positive feedback +echo "The kernel module is sucessfully installed." +exit 0 diff --git a/bochs/plex86/misc/netbsd_post.sh b/bochs/plex86/misc/netbsd_post.sh new file mode 100755 index 00000000..851c5ce9 --- /dev/null +++ b/bochs/plex86/misc/netbsd_post.sh @@ -0,0 +1,17 @@ +#! /bin/sh +# +# This is the post-install script called by modload after it has loaded +# the module. +# +# Sample modload commandline: +# +# modload -e plex86_lkmentry -p netbsd_post.sh plex86.o +# +if [ $# -ne 3 ]; then + echo "$0 should only be called from modload(8) with 3 args" + exit 1 +fi + +rm -f /dev/plex86 +mknod /dev/plex86 c $3 0 +exit 0 diff --git a/bochs/plex86/misc/unload_module.sh b/bochs/plex86/misc/unload_module.sh new file mode 100755 index 00000000..d4a1a35e --- /dev/null +++ b/bochs/plex86/misc/unload_module.sh @@ -0,0 +1,34 @@ +#! /bin/bash +# +# A simple script to unload the kernel module and remove the old device nodes +# for it. +# +# Note: +# this must be run as root +# + +# Check that root is executing us +if [ "$EUID" != "0" ]; then + echo "Sorry, you need to be root for this script to work." + echo "use 'su -c $0' and enter the root password when prompted" + exit -1 +fi + +# Check if the module is already loaded +if [ "x`grep plex86 /proc/devices`" != "x" ]; then + /sbin/rmmod plex86 + + # Check that it really went (OK - I'm paranoid) + if [ "x`grep plex86 /proc/devices`" != "x" ]; then + echo "The kernel module failed to unload!" + exit -1 + fi +fi + +# Remove any stale device nodes +# (extend for any minor devices created in the future) +rm -f /dev/plex86 + +# Job done - Give a little positive feedback +echo "The kernel module is no longer installed." +exit 0 diff --git a/bochs/plex86/plex86.h b/bochs/plex86/plex86.h new file mode 100644 index 00000000..c347e934 --- /dev/null +++ b/bochs/plex86/plex86.h @@ -0,0 +1,259 @@ +/************************************************************************ + * $Id$ + ************************************************************************ + * + * plex86: run multiple x86 operating systems concurrently + * Copyright (C) 1999-2003 Kevin P. Lawton + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __PLEX86_H__ +#define __PLEX86_H__ + +#include "config.h" +#include "descriptor.h" + + + + +typedef struct { + selector_t sel; + descriptor_t des; + unsigned valid; + } __attribute__ ((packed)) guest_sreg_t; + +#define SRegES 0 +#define SRegCS 1 +#define SRegSS 2 +#define SRegDS 3 +#define SRegFS 4 +#define SRegGS 5 + + +typedef union { + Bit32u raw; + struct { + Bit32u pe:1; + Bit32u mp:1; + Bit32u em:1; + Bit32u ts:1; + Bit32u et:1; + Bit32u ne:1; + Bit32u R15_6:10; + Bit32u wp:1; + Bit32u R17:1; + Bit32u am:1; + Bit32u R28_19:10; + Bit32u nw:1; + Bit32u cd:1; + Bit32u pg:1; + } __attribute__ ((packed)) fields; + } __attribute__ ((packed)) cr0_t; + +typedef union { + Bit32u raw; + struct { + Bit32u vme:1; + Bit32u pvi:1; + Bit32u tsd:1; + Bit32u de:1; + Bit32u pse:1; + Bit32u pae:1; + Bit32u mce:1; + Bit32u pge:1; + Bit32u pce:1; + Bit32u reserved:23; + } __attribute__ ((packed)) fields; + } __attribute__ ((packed)) cr4_t; + +typedef struct { + Bit32u vendorDWord0; + Bit32u vendorDWord1; + Bit32u vendorDWord2; + union { + Bit32u raw; + struct { + Bit32u stepping:4; + Bit32u model:4; + Bit32u family:4; + Bit32u procType:2; + Bit32u Reserved31_14:18; + } __attribute__ ((packed)) fields; + } __attribute__ ((packed)) procSignature; + union { + Bit32u raw; + struct { + Bit32u fpu:1; + Bit32u vme:1; + Bit32u de:1; + Bit32u pse:1; + Bit32u tsc:1; + Bit32u msr:1; + Bit32u pae:1; + Bit32u mce:1; + Bit32u cx8:1; + Bit32u apic:1; + Bit32u Reserved10:1; + Bit32u sep:1; + Bit32u mtrr:1; + Bit32u pge:1; + Bit32u mca:1; + Bit32u cmov:1; + Bit32u pat:1; + Bit32u pse36:1; + Bit32u Reserved22_18:5; + Bit32u mmx:1; + Bit32u fxsr:1; + Bit32u Reserved31_25:7; + } __attribute__ ((packed)) fields; + } __attribute__ ((packed)) featureFlags; + } __attribute__ ((packed)) cpuid_info_t; + +typedef struct { + Bit32u edi; + Bit32u esi; + Bit32u ebp; + Bit32u esp; + Bit32u ebx; + Bit32u edx; + Bit32u ecx; + Bit32u eax; + + Bit32u eflags; + Bit32u eip; + guest_sreg_t sreg[6]; + guest_sreg_t ldtr; + guest_sreg_t tr; + gdt_info_t gdtr; + gdt_info_t idtr; + Bit32u dr0, dr1, dr2, dr3, dr6, dr7; + Bit32u tr3, tr4, tr5, tr6, tr7; + cr0_t cr0; + Bit32u cr1, cr2, cr3; + cr4_t cr4; + unsigned a20Enable; + } __attribute__ ((packed)) guest_cpu_t; + + + + + + +/* + * ioctl() names. + */ + +#if defined(__linux__) || defined(__NetBSD__) || defined(__NetBSD_kernel__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +#ifdef __linux__ +#include +#else +#include +#endif +#define PLEX86_RESET _IO('k', 3) +#define PLEX86_TEARDOWN _IO('k', 4) +#define PLEX86_EXECUTE _IO('k', 5) +#define PLEX86_CPUID _IO('k', 6) +#define PLEX86_REGISTER_MEMORY _IO('k', 7) +#else +#define PLEX86_RESET 0x6b03 +#define PLEX86_TEARDOWN 0x6b04 +#define PLEX86_EXECUTE 0x6b05 +#define PLEX86_CPUID 0x6b06 +#define PLEX86_REGISTER_MEMORY 0x6b07 +#endif + +/* Reasons why plex86 could not execute the guest context in the VM. */ +#define Plex86NoExecute_Method 1 +#define Plex86NoExecute_CR0 2 +#define Plex86NoExecute_CR4 3 +#define Plex86NoExecute_CS 4 +#define Plex86NoExecute_A20 5 +#define Plex86NoExecute_Selector 6 +#define Plex86NoExecute_DPL 7 +#define Plex86NoExecute_EFlags 8 +#define Plex86NoExecute_Panic 9 +#define Plex86NoExecute_VMState 10 + + +/* Requests that the VM monitor makes to host-kernel space or + * host-user space. + */ +#define MonReqNone 0 +#define MonReqFlushPrintBuf 1 +#define MonReqRedirect 4 /* Only to host-kernel. */ +#define MonReqRemapMonitor 5 +#define MonReqGuestFault 6 +#define MonReqPinUserPage 7 +#define MonReqPanic 8 + +#define VMStateFDOpened 0x001 +#define VMStateMemAllocated 0x002 +#define VMStateGuestCPUID 0x004 +#define VMStateRegisteredPhyMem 0x008 +#define VMStateRegisteredPrintBuffer 0x010 +#define VMStateRegisteredGuestCPU 0x020 +#define VMStateInitMonitor 0x040 +#define VMStateMapMonitor 0x080 +#define VMStatePanic 0x100 + + /* State where the VM/monitor is ready to execute. */ +#define VMStateReady (VMStateFDOpened | \ + VMStateMemAllocated | \ + VMStateGuestCPUID | \ + VMStateRegisteredPhyMem | \ + VMStateRegisteredPrintBuffer | \ + VMStateRegisteredGuestCPU | \ + VMStateInitMonitor | \ + VMStateMapMonitor) + + /* State where all user-space memory constructs are registered with + * the plex86 kernel module. + */ +#define VMStateRegisteredAll \ + (VMStateRegisteredPhyMem | \ + VMStateRegisteredPrintBuffer | \ + VMStateRegisteredGuestCPU) + +typedef struct { + unsigned state; + unsigned request; + unsigned guestFaultNo; + } plex86MonitorState_t; + +typedef struct { +#define Plex86ExecuteMethodNative 10 +#define Plex86ExecuteMethodBreakpoint 11 + unsigned executeMethod; + + /* User space --> Monitor space. */ + Bit64u cyclesRequested; + unsigned instructionsRequested; + + /* Monitor space --> User space. */ + Bit64u cyclesExecuted; + unsigned instructionsExecuted; + plex86MonitorState_t monitorState; + } plex86IoctlExecute_t; + +typedef struct { + unsigned nMegs; + Bit32u guestPhyMemVector; + + Bit32u logBufferWindow; + Bit32u guestCPUWindow; + } plex86IoctlRegisterMem_t; + +#endif /* #ifndef __PLEX86_H__ */ diff --git a/bochs/plugin.cc b/bochs/plugin.cc new file mode 100644 index 00000000..8aed9ada --- /dev/null +++ b/bochs/plugin.cc @@ -0,0 +1,773 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// +// +// This file defines the plugin and plugin-device registration functions and +// the device registration functions. It handles dynamic loading of modules, +// using the LTDL library for cross-platform support. +// +// This file is based on the plugin.c file from plex86, but with significant +// changes to make it work in Bochs. +// Plex86 is Copyright (C) 1999-2000 The plex86 developers team +// +///////////////////////////////////////////////////////////////////////// + +#include "bochs.h" +#include "iodev/iodev.h" +#include "plugin.h" + +#define LOG_THIS genlog-> + +#define PLUGIN_INIT_FMT_STRING "lib%s_LTX_plugin_init" +#define PLUGIN_FINI_FMT_STRING "lib%s_LTX_plugin_fini" +#define PLUGIN_PATH "" + +#ifndef WIN32 +#define PLUGIN_FILENAME_FORMAT "libbx_%s.so" +#else +#define PLUGIN_FILENAME_FORMAT "bx_%s.dll" +#endif + +extern "C" { + +void (*pluginRegisterIRQ)(unsigned irq, const char* name) = 0; +void (*pluginUnregisterIRQ)(unsigned irq, const char* name) = 0; + +void (*pluginSetHRQ)(unsigned val) = 0; +void (*pluginSetHRQHackCallback)(void (*callback)(void)) = 0; + +int (*pluginRegisterIOReadHandler)(void *thisPtr, ioReadHandler_t callback, + unsigned base, const char *name, Bit8u mask) = 0; +int (*pluginRegisterIOWriteHandler)(void *thisPtr, ioWriteHandler_t callback, + unsigned base, const char *name, Bit8u mask) = 0; +int (*pluginUnregisterIOReadHandler)(void *thisPtr, ioReadHandler_t callback, + unsigned base, Bit8u mask) = 0; +int (*pluginUnregisterIOWriteHandler)(void *thisPtr, ioWriteHandler_t callback, + unsigned base, Bit8u mask) = 0; +int (*pluginRegisterIOReadHandlerRange)(void *thisPtr, ioReadHandler_t callback, + unsigned base, unsigned end, const char *name, Bit8u mask) = 0; +int (*pluginRegisterIOWriteHandlerRange)(void *thisPtr, ioWriteHandler_t callback, + unsigned base, unsigned end, const char *name, Bit8u mask) = 0; +int (*pluginUnregisterIOReadHandlerRange)(void *thisPtr, ioReadHandler_t callback, + unsigned begin, unsigned end, Bit8u mask) = 0; +int (*pluginUnregisterIOWriteHandlerRange)(void *thisPtr, ioWriteHandler_t callback, + unsigned begin, unsigned end, Bit8u mask) = 0; +int (*pluginRegisterDefaultIOReadHandler)(void *thisPtr, ioReadHandler_t callback, + const char *name, Bit8u mask) = 0; +int (*pluginRegisterDefaultIOWriteHandler)(void *thisPtr, ioWriteHandler_t callback, + const char *name, Bit8u mask) = 0; +int (*pluginRegisterTimer)(void *this_ptr, void (*funct)(void *), + Bit32u useconds, bx_bool continuous, +bx_bool active, const char* name) = 0; + void (*pluginActivateTimer)(unsigned id, Bit32u usec, bx_bool continuous) = 0; + +void (*pluginHRQHackCallback)(void); +unsigned pluginHRQ = 0; + +plugin_t *plugins = NULL; /* Head of the linked list of plugins */ +#if BX_PLUGINS +static void plugin_init_one(plugin_t *plugin); +#endif + +device_t *devices = NULL; /* Head of the linked list of registered devices */ + +plugin_t *current_plugin_context = NULL; + +/************************************************************************/ +/* Builtins declarations */ +/************************************************************************/ + + static void +builtinRegisterIRQ(unsigned irq, const char* name) +{ +#if 0 + pluginlog->panic("builtinRegisterIRQ called, no pic plugin loaded?"); +#else + bx_devices.register_irq(irq, name); +#endif +} + + static void +builtinUnregisterIRQ(unsigned irq, const char* name) +{ +#if 0 + pluginlog->panic("builtinUnregisterIRQ called, no pic plugin loaded?"); +#else + bx_devices.unregister_irq(irq, name); +#endif +} + + static void +builtinSetHRQ(unsigned val) +{ +#if 0 + pluginlog->panic("builtinSetHRQ called, no plugin loaded?"); +#else + pluginHRQ = val; +#endif +} + + static void +builtinSetHRQHackCallback(void (*callback)(void)) +{ +#if 0 + pluginlog->panic("builtinSetHRQHackCallback called, no plugin loaded?"); +#else + pluginHRQHackCallback = callback; +#endif +} + + static int +builtinRegisterIOReadHandler(void *thisPtr, ioReadHandler_t callback, + unsigned base, const char *name, Bit8u mask) +{ + int ret; + BX_ASSERT(mask<8); + ret = bx_devices.register_io_read_handler (thisPtr, callback, base, name, mask); + pluginlog->ldebug("plugin %s registered I/O read address at %04x", name, base); + return ret; +} + + static int +builtinRegisterIOWriteHandler(void *thisPtr, ioWriteHandler_t callback, + unsigned base, const char *name, Bit8u mask) +{ + int ret; + BX_ASSERT(mask<8); + ret = bx_devices.register_io_write_handler (thisPtr, callback, base, name, mask); + pluginlog->ldebug("plugin %s registered I/O write address at %04x", name, base); + return ret; +} + + static int +builtinUnregisterIOReadHandler(void *thisPtr, ioReadHandler_t callback, + unsigned base, Bit8u mask) +{ + int ret; + BX_ASSERT(mask<8); + ret = bx_devices.unregister_io_read_handler (thisPtr, callback, base, mask); + pluginlog->ldebug("plugin unregistered I/O read address at %04x", base); + return ret; +} + + static int +builtinUnregisterIOWriteHandler(void *thisPtr, ioWriteHandler_t callback, + unsigned base, Bit8u mask) +{ + int ret; + BX_ASSERT(mask<8); + ret = bx_devices.unregister_io_write_handler (thisPtr, callback, base, mask); + pluginlog->ldebug("plugin unregistered I/O write address at %04x", base); + return ret; +} + + static int +builtinRegisterIOReadHandlerRange(void *thisPtr, ioReadHandler_t callback, + unsigned base, unsigned end, const char *name, Bit8u mask) +{ + int ret; + BX_ASSERT(mask<8); + ret = bx_devices.register_io_read_handler_range (thisPtr, callback, base, end, name, mask); + pluginlog->ldebug("plugin %s registered I/O read addresses %04x to %04x", name, base, end); + return ret; +} + + static int +builtinRegisterIOWriteHandlerRange(void *thisPtr, ioWriteHandler_t callback, + unsigned base, unsigned end, const char *name, Bit8u mask) +{ + int ret; + BX_ASSERT(mask<8); + ret = bx_devices.register_io_write_handler_range (thisPtr, callback, base, end, name, mask); + pluginlog->ldebug("plugin %s registered I/O write addresses %04x to %04x", name, base, end); + return ret; +} + + static int +builtinUnregisterIOReadHandlerRange(void *thisPtr, ioReadHandler_t callback, + unsigned begin, unsigned end, Bit8u mask) +{ + int ret; + BX_ASSERT(mask<8); + ret = bx_devices.unregister_io_read_handler_range (thisPtr, callback, begin, end, mask); + pluginlog->ldebug("plugin unregistered I/O read addresses %04x to %04x", begin, end); + return ret; +} + + static int +builtinUnregisterIOWriteHandlerRange(void *thisPtr, ioWriteHandler_t callback, + unsigned begin, unsigned end, Bit8u mask) +{ + int ret; + BX_ASSERT(mask<8); + ret = bx_devices.unregister_io_write_handler_range (thisPtr, callback, begin, end, mask); + pluginlog->ldebug("plugin unregistered I/O write addresses %04x to %04x", begin, end); + return ret; +} + + static int +builtinRegisterDefaultIOReadHandler(void *thisPtr, ioReadHandler_t callback, + const char *name, Bit8u mask) +{ + BX_ASSERT(mask<8); + bx_devices.register_default_io_read_handler (thisPtr, callback, name, mask); + pluginlog->ldebug("plugin %s registered default I/O read ", name); + return 0; +} + + static int +builtinRegisterDefaultIOWriteHandler(void *thisPtr, ioWriteHandler_t callback, + const char *name, Bit8u mask) +{ + BX_ASSERT(mask<8); + bx_devices.register_default_io_write_handler (thisPtr, callback, name, mask); + pluginlog->ldebug("plugin %s registered default I/O write ", name); + return 0; +} + + static int +builtinRegisterTimer(void *this_ptr, void (*funct)(void *), + Bit32u useconds, bx_bool continuous, + bx_bool active, const char* name) +{ + int id = bx_pc_system.register_timer (this_ptr, funct, useconds, continuous, active, name); + pluginlog->ldebug("plugin %s registered timer %d", name, id); + return id; +} + + static void +builtinActivateTimer(unsigned id, Bit32u usec, bx_bool continuous) +{ + bx_pc_system.activate_timer (id, usec, continuous); + pluginlog->ldebug("plugin activated timer %d", id); +} + +#if BX_PLUGINS +/************************************************************************/ +/* Plugin initialization / deinitialization */ +/************************************************************************/ + +void plugin_init_all (void) +{ + plugin_t *plugin; + + pluginlog->info("Initializing plugins"); + + for (plugin = plugins; plugin; plugin = plugin->next) + { + char *arg_ptr = plugin->args; + + /* process the command line */ + plugin->argc = 0; + while (plugin->argc < MAX_ARGC) + { + while (*arg_ptr && isspace (*arg_ptr)) + arg_ptr++; + + if (!*arg_ptr) break; + plugin->argv[plugin->argc++] = arg_ptr; + + while (*arg_ptr && !isspace (*arg_ptr)) + arg_ptr++; + + if (!*arg_ptr) break; + *arg_ptr++ = '\0'; + } + + /* initialize the plugin */ + if (plugin->plugin_init (plugin, plugin->type, plugin->argc, plugin->argv)) + { + pluginlog->panic("Plugin initialization failed for %s", plugin->name); + plugin_abort(); + } + + plugin->initialized = 1; + } +} + +void plugin_init_one(plugin_t *plugin) +{ + char *arg_ptr = plugin->args; + + /* process the command line */ + plugin->argc = 0; + while (plugin->argc < MAX_ARGC) + { + while (*arg_ptr && isspace (*arg_ptr)) + arg_ptr++; + + if (!*arg_ptr) break; + plugin->argv[plugin->argc++] = arg_ptr; + + while (*arg_ptr && !isspace (*arg_ptr)) + arg_ptr++; + + if (!*arg_ptr) break; + *arg_ptr++ = '\0'; + } + + /* initialize the plugin */ + if (plugin->plugin_init (plugin, plugin->type, plugin->argc, plugin->argv)) + { + pluginlog->info("Plugin initialization failed for %s", plugin->name); + plugin_abort(); + } + + plugin->initialized = 1; +} + + +plugin_t *plugin_unload(plugin_t *plugin) +{ + plugin_t *dead_plug; + + if (plugin->initialized) + plugin->plugin_fini(); + + lt_dlclose(plugin->handle); + delete [] plugin->name; + + dead_plug = plugin; + plugin = plugin->next; + free(dead_plug); + + return plugin; +} + +void plugin_fini_all (void) +{ + plugin_t *plugin; + + for (plugin = plugins; plugin; plugin = plugin_unload(plugin)); +} + +void plugin_load(char *name, char *args, plugintype_t type) +{ + plugin_t *plugin, *temp; + + if (plugins != NULL) { + temp = plugins; + + while (temp != NULL) { + if (!strcmp(name, temp->name)) { + BX_PANIC(("plugin '%s' already loaded", name)); + return; + } + temp = temp->next; + } + } + + plugin = (plugin_t *)malloc (sizeof(plugin_t)); + if (!plugin) + { + BX_PANIC(("malloc plugin_t failed")); + } + + plugin->type = type; + plugin->name = name; + plugin->args = args; + plugin->initialized = 0; + + char plugin_filename[BX_PATHNAME_LEN], buf[BX_PATHNAME_LEN]; + sprintf(buf, PLUGIN_FILENAME_FORMAT, name); + sprintf(plugin_filename, "%s%s", PLUGIN_PATH, buf); + + // Set context so that any devices that the plugin registers will + // be able to see which plugin created them. The registration will + // be called from either dlopen (global constructors) or plugin_init. + BX_ASSERT(current_plugin_context == NULL); + current_plugin_context = plugin; + plugin->handle = lt_dlopen (plugin_filename); + BX_INFO(("lt_dlhandle is %p", plugin->handle)); + if (!plugin->handle) + { + current_plugin_context = NULL; + BX_PANIC(("dlopen failed for module '%s': %s", name, lt_dlerror ())); + free (plugin); + return; + } + + if (type != PLUGTYPE_USER) { + sprintf(buf, PLUGIN_INIT_FMT_STRING, name); + } else { + sprintf(buf, PLUGIN_INIT_FMT_STRING, "user"); + } + plugin->plugin_init = + (int (*)(struct _plugin_t *, enum plugintype_t, int, char *[])) /* monster typecast */ + lt_dlsym (plugin->handle, buf); + if (plugin->plugin_init == NULL) { + pluginlog->panic("could not find plugin_init: %s", lt_dlerror ()); + plugin_abort (); + } + + if (type != PLUGTYPE_USER) { + sprintf(buf, PLUGIN_FINI_FMT_STRING, name); + } else { + sprintf(buf, PLUGIN_FINI_FMT_STRING, "user"); + } + plugin->plugin_fini = (void (*)(void)) lt_dlsym (plugin->handle, buf); + if (plugin->plugin_fini == NULL) { + pluginlog->panic("could not find plugin_fini: %s", lt_dlerror ()); + plugin_abort(); + } + pluginlog->info("loaded plugin %s",plugin_filename); + + /* Insert plugin at the _end_ of the plugin linked list. */ + plugin->next = NULL; + + if (!plugins) + { + /* Empty list, this become the first entry. */ + plugins = plugin; + } + else + { + /* Non-empty list. Add to end. */ + temp = plugins; + + while (temp->next) + temp = temp->next; + + temp->next = plugin; + } + + plugin_init_one(plugin); + + // check that context didn't change. This should only happen if we + // need a reentrant plugin_load. + BX_ASSERT(current_plugin_context == plugin); + current_plugin_context = NULL; +} + +void plugin_abort(void) +{ + pluginlog->panic("plugin load aborted"); +} + +#endif /* end of #if BX_PLUGINS */ + +/************************************************************************/ +/* Plugin system: initialisation of plugins entry points */ +/************************************************************************/ + + void +plugin_startup(void) +{ + pluginRegisterIRQ = builtinRegisterIRQ; + pluginUnregisterIRQ = builtinUnregisterIRQ; + + pluginSetHRQHackCallback = builtinSetHRQHackCallback; + pluginSetHRQ = builtinSetHRQ; + + pluginRegisterIOReadHandler = builtinRegisterIOReadHandler; + pluginRegisterIOWriteHandler = builtinRegisterIOWriteHandler; + + pluginUnregisterIOReadHandler = builtinUnregisterIOReadHandler; + pluginUnregisterIOWriteHandler = builtinUnregisterIOWriteHandler; + + pluginRegisterIOReadHandlerRange = builtinRegisterIOReadHandlerRange; + pluginRegisterIOWriteHandlerRange = builtinRegisterIOWriteHandlerRange; + + pluginUnregisterIOReadHandlerRange = builtinUnregisterIOReadHandlerRange; + pluginUnregisterIOWriteHandlerRange = builtinUnregisterIOWriteHandlerRange; + + pluginRegisterDefaultIOReadHandler = builtinRegisterDefaultIOReadHandler; + pluginRegisterDefaultIOWriteHandler = builtinRegisterDefaultIOWriteHandler; + + pluginRegisterTimer = builtinRegisterTimer; + pluginActivateTimer = builtinActivateTimer; + +#if BX_PLUGINS + pluginlog = new logfunctions(); + pluginlog->put("PLGIN"); + int status = lt_dlinit (); + if (status != 0) { + BX_ERROR (("initialization error in ltdl library (for loading plugins)")); + BX_PANIC (("error message was: %s", lt_dlerror ())); + } +#endif +} + + +/************************************************************************/ +/* Plugin system: Device registration */ +/************************************************************************/ + +void pluginRegisterDeviceDevmodel(plugin_t *plugin, plugintype_t type, bx_devmodel_c *devmodel, const char *name) +{ + device_t *device; + + device = (device_t *)malloc (sizeof (device_t)); + if (!device) + { + pluginlog->panic("can't allocate device_t"); + } + + device->name = name; + BX_ASSERT(devmodel != NULL); + device->devmodel = devmodel; + device->plugin = plugin; // this can be NULL + device->next = NULL; + + // Don't add every kind of device to the list. + switch (type) { + case PLUGTYPE_CORE: + // Core devices are present whether or not we are using plugins, so + // they are managed by the same code in iodev/devices.cc whether + // plugins are on or off. + free(device); + return; // Do not add core devices to the devices list. + case PLUGTYPE_OPTIONAL: + case PLUGTYPE_USER: + default: + // The plugin system will manage optional and user devices only. + break; + } + + if (!devices) { + /* Empty list, this become the first entry. */ + devices = device; + } + else { + /* Non-empty list. Add to end. */ + device_t *temp = devices; + + while (temp->next) + temp = temp->next; + + temp->next = device; + } +} + +/************************************************************************/ +/* Plugin system: Remove registered plugin device */ +/************************************************************************/ + +void pluginUnregisterDeviceDevmodel(plugin_t *plugin) +{ + device_t *device, *prev = NULL; + + for (device = devices; device; device = device->next) { + if (device->plugin == plugin) { + if (prev == NULL) { + devices = device->next; + } else { + prev->next = device->next; + } + free(device); + break; + } else { + prev = device; + } + } +} + +/************************************************************************/ +/* Plugin system: Check if a plugin is loaded */ +/************************************************************************/ + +bx_bool pluginDevicePresent(char *name) +{ + device_t *device; + + for (device = devices; device; device = device->next) + { + if (strcmp(device->name,name)==0) return true; + } + + return false; +} + +#if BX_PLUGINS +/************************************************************************/ +/* Plugin system: Load one plugin */ +/************************************************************************/ + +int bx_load_plugin(const char *name, plugintype_t type) +{ + char *namecopy = new char[1+strlen(name)]; + strcpy(namecopy, name); + plugin_load(namecopy, (char*)"", type); + return 0; +} + +void bx_unload_plugin(const char *name, bx_bool devflag) +{ + plugin_t *plugin, *prev = NULL; + + for (plugin = plugins; plugin; plugin = plugin->next) { + if (!strcmp(plugin->name, name)) { + if (devflag) { + pluginUnregisterDeviceDevmodel(plugin); + } + plugin = plugin_unload(plugin); + if (prev == NULL) { + plugins = plugin; + } else { + prev->next = plugin; + } + break; + } else { + prev = plugin; + } + } +} + +#endif /* end of #if BX_PLUGINS */ + +/*************************************************************************/ +/* Plugin system: Execute init function of all registered plugin-devices */ +/*************************************************************************/ + +void bx_init_plugins() +{ + device_t *device; + +#if BX_PLUGINS + for (device = devices; device; device = device->next) { + if (device->plugin->type == PLUGTYPE_OPTIONAL) { + pluginlog->info("init_dev of '%s' plugin device by virtual method",device->name); + device->devmodel->init(); + } + } + for (device = devices; device; device = device->next) { + if (device->plugin->type == PLUGTYPE_USER) { + pluginlog->info("init_dev of '%s' plugin device by virtual method",device->name); + device->devmodel->init(); + } + } +#else + for (device = devices; device; device = device->next) { + pluginlog->info("init_dev of '%s' plugin device by virtual method",device->name); + device->devmodel->init(); + } +#endif +} + +/**************************************************************************/ +/* Plugin system: Execute reset function of all registered plugin-devices */ +/**************************************************************************/ + +void bx_reset_plugins(unsigned signal) +{ + device_t *device; + +#if BX_PLUGINS + for (device = devices; device; device = device->next) { + if (device->plugin->type == PLUGTYPE_OPTIONAL) { + pluginlog->info("reset of '%s' plugin device by virtual method",device->name); + device->devmodel->reset(signal); + } + } + for (device = devices; device; device = device->next) { + if (device->plugin->type == PLUGTYPE_USER) { + pluginlog->info("reset of '%s' plugin device by virtual method",device->name); + device->devmodel->reset(signal); + } + } +#else + for (device = devices; device; device = device->next) { + pluginlog->info("reset of '%s' plugin device by virtual method",device->name); + device->devmodel->reset(signal); + } +#endif +} + +/*******************************************************/ +/* Plugin system: Unload all registered plugin-devices */ +/*******************************************************/ + +void bx_unload_plugins() +{ + device_t *device, *next; + + device = devices; + while (device != NULL) { + if (device->plugin != NULL) { +#if BX_PLUGINS + bx_unload_plugin(device->name, 0); +#endif + } else { + delete device->devmodel; + } + next = device->next; + free(device); + device = next; + } + devices = NULL; +} + +/**************************************************************************/ +/* Plugin system: Register device state of all registered plugin-devices */ +/**************************************************************************/ + +void bx_plugins_register_state() +{ + device_t *device; + +#if BX_PLUGINS + for (device = devices; device; device = device->next) { + if (device->plugin->type == PLUGTYPE_OPTIONAL) { + pluginlog->info("register state of '%s' plugin device by virtual method",device->name); + device->devmodel->register_state(); + } + } + for (device = devices; device; device = device->next) { + if (device->plugin->type == PLUGTYPE_USER) { + pluginlog->info("register state of '%s' plugin device by virtual method",device->name); + device->devmodel->register_state(); + } + } +#else + for (device = devices; device; device = device->next) { + pluginlog->info("register state of '%s' plugin device by virtual method",device->name); + device->devmodel->register_state(); + } +#endif +} + +/***************************************************************************/ +/* Plugin system: Execute code after restoring state of all plugin devices */ +/***************************************************************************/ + +void bx_plugins_after_restore_state() +{ + device_t *device; + +#if BX_PLUGINS + for (device = devices; device; device = device->next) { + if (device->plugin->type == PLUGTYPE_OPTIONAL) { + device->devmodel->after_restore_state(); + } + } + for (device = devices; device; device = device->next) { + if (device->plugin->type == PLUGTYPE_USER) { + device->devmodel->after_restore_state(); + } + } +#else + for (device = devices; device; device = device->next) { + device->devmodel->after_restore_state(); + } +#endif +} + +} diff --git a/bochs/plugin.h b/bochs/plugin.h new file mode 100644 index 00000000..7768d991 --- /dev/null +++ b/bochs/plugin.h @@ -0,0 +1,428 @@ +///////////////////////////////////////////////////////////////////////// +// $Id$ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2009 The Bochs Project +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// +// +// This file provides macros and types needed for plugins. It is based on +// the plugin.h file from plex86, but with significant changes to make +// it work in Bochs. +// Plex86 is Copyright (C) 1999-2000 The plex86 developers team +// +///////////////////////////////////////////////////////////////////////// + +#ifndef __PLUGIN_H +#define __PLUGIN_H + +#include "extplugin.h" + +class bx_devices_c; +BOCHSAPI extern logfunctions *pluginlog; + +#ifdef __cplusplus +extern "C" { +#endif + +#define BX_PLUGIN_UNMAPPED "unmapped" +#define BX_PLUGIN_BIOSDEV "biosdev" +#define BX_PLUGIN_CMOS "cmos" +#define BX_PLUGIN_VGA "vga" +#define BX_PLUGIN_FLOPPY "floppy" +#define BX_PLUGIN_PARALLEL "parallel" +#define BX_PLUGIN_SERIAL "serial" +#define BX_PLUGIN_KEYBOARD "keyboard" +#define BX_PLUGIN_BUSMOUSE "busmouse" +#define BX_PLUGIN_HARDDRV "harddrv" +#define BX_PLUGIN_HDIMAGE "hdimage" +#define BX_PLUGIN_DMA "dma" +#define BX_PLUGIN_PIC "pic" +#define BX_PLUGIN_PIT "pit" +#define BX_PLUGIN_PCI "pci" +#define BX_PLUGIN_PCI2ISA "pci2isa" +#define BX_PLUGIN_PCI_IDE "pci_ide" +#define BX_PLUGIN_SOUNDMOD "soundmod" +#define BX_PLUGIN_SB16 "sb16" +#define BX_PLUGIN_NE2K "ne2k" +#define BX_PLUGIN_EXTFPUIRQ "extfpuirq" +#define BX_PLUGIN_PCIVGA "pcivga" +#define BX_PLUGIN_PCIDEV "pcidev" +#define BX_PLUGIN_USB_COMMON "usb_common" +#define BX_PLUGIN_USB_UHCI "usb_uhci" +#define BX_PLUGIN_USB_OHCI "usb_ohci" +#define BX_PLUGIN_PCIPNIC "pcipnic" +#define BX_PLUGIN_GAMEPORT "gameport" +#define BX_PLUGIN_SPEAKER "speaker" +#define BX_PLUGIN_ACPI "acpi" +#define BX_PLUGIN_IODEBUG "iodebug" +#define BX_PLUGIN_IOAPIC "ioapic" + + +#define BX_REGISTER_DEVICE_DEVMODEL(a,b,c,d) pluginRegisterDeviceDevmodel(a,b,c,d) + +#if BX_PLUGINS + +#define PLUG_load_plugin(name,type) {bx_load_plugin(#name,type);} +#define PLUG_load_opt_plugin(name) {bx_load_plugin(name,PLUGTYPE_OPTIONAL);} +#define PLUG_load_user_plugin(name) {bx_load_plugin(name,PLUGTYPE_USER);} +#define PLUG_unload_plugin(name) {bx_unload_plugin(#name,1);} +#define PLUG_unload_user_plugin(name) {bx_unload_plugin(name,1);} + +#define DEV_register_ioread_handler(b,c,d,e,f) pluginRegisterIOReadHandler(b,c,d,e,f) +#define DEV_register_iowrite_handler(b,c,d,e,f) pluginRegisterIOWriteHandler(b,c,d,e,f) +#define DEV_unregister_ioread_handler(b,c,d,e) pluginUnregisterIOReadHandler(b,c,d,e) +#define DEV_unregister_iowrite_handler(b,c,d,e) pluginUnregisterIOWriteHandler(b,c,d,e) +#define DEV_register_ioread_handler_range(b,c,d,e,f,g) pluginRegisterIOReadHandlerRange(b,c,d,e,f,g) +#define DEV_register_iowrite_handler_range(b,c,d,e,f,g) pluginRegisterIOWriteHandlerRange(b,c,d,e,f,g) +#define DEV_unregister_ioread_handler_range(b,c,d,e,f) pluginUnregisterIOReadHandlerRange(b,c,d,e,f) +#define DEV_unregister_iowrite_handler_range(b,c,d,e,f) pluginUnregisterIOWriteHandlerRange(b,c,d,e,f) +#define DEV_register_default_ioread_handler(b,c,d,e) pluginRegisterDefaultIOReadHandler(b,c,d,e) +#define DEV_register_default_iowrite_handler(b,c,d,e) pluginRegisterDefaultIOWriteHandler(b,c,d,e) + +#define DEV_register_irq(b,c) pluginRegisterIRQ(b,c) +#define DEV_unregister_irq(b,c) pluginUnregisterIRQ(b,c) + +#else + +// When plugins are off, PLUG_load_plugin will call the plugin_init function +// directly. +#define PLUG_load_plugin(name,type) {lib##name##_LTX_plugin_init(NULL,type,0,NULL);} +#define PLUG_unload_plugin(name) {lib##name##_LTX_plugin_fini();} +#define DEV_register_ioread_handler(b,c,d,e,f) bx_devices.register_io_read_handler(b,c,d,e,f) +#define DEV_register_iowrite_handler(b,c,d,e,f) bx_devices.register_io_write_handler(b,c,d,e,f) +#define DEV_unregister_ioread_handler(b,c,d,e) bx_devices.unregister_io_read_handler(b,c,d,e) +#define DEV_unregister_iowrite_handler(b,c,d,e) bx_devices.unregister_io_write_handler(b,c,d,e) +#define DEV_register_ioread_handler_range(b,c,d,e,f,g) bx_devices.register_io_read_handler_range(b,c,d,e,f,g) +#define DEV_register_iowrite_handler_range(b,c,d,e,f,g) bx_devices.register_io_write_handler_range(b,c,d,e,f,g) +#define DEV_unregister_ioread_handler_range(b,c,d,e,f) bx_devices.unregister_io_read_handler_range(b,c,d,e,f) +#define DEV_unregister_iowrite_handler_range(b,c,d,e,f) bx_devices.unregister_io_write_handler_range(b,c,d,e,f) +#define DEV_register_default_ioread_handler(b,c,d,e) bx_devices.register_default_io_read_handler(b,c,d,e) +#define DEV_register_default_iowrite_handler(b,c,d,e) bx_devices.register_default_io_write_handler(b,c,d,e) +#define DEV_register_irq(b,c) bx_devices.register_irq(b,c) +#define DEV_unregister_irq(b,c) bx_devices.unregister_irq(b,c) + +#endif // #if BX_PLUGINS + +///////// Common device macros +#define DEV_init_devices() {bx_devices.init(BX_MEM(0)); } +#define DEV_reset_devices(type) {bx_devices.reset(type); } +#define DEV_register_state() {bx_devices.register_state(); } +#define DEV_after_restore_state() {bx_devices.after_restore_state(); } + +#define DEV_register_timer(a,b,c,d,e,f) bx_pc_system.register_timer(a,b,c,d,e,f) +#define DEV_mouse_enabled_changed(en) (bx_devices.mouse_enabled_changed(en)) +#define DEV_mouse_motion(dx, dy, state) (bx_devices.mouse_motion(dx, dy, 0, state)) +#define DEV_mouse_motion_ext(dx, dy, dz, state) (bx_devices.mouse_motion(dx, dy, dz, state)) + +///////// Removable devices macros +#define DEV_optional_key_enq(a) (bx_devices.optional_key_enq(a)) +#define DEV_register_removable_keyboard(a,b) (bx_devices.register_removable_keyboard(a,b)) +#define DEV_unregister_removable_keyboard(a) (bx_devices.unregister_removable_keyboard(a)) +#define DEV_register_default_mouse(a,b,c) (bx_devices.register_default_mouse(a,b,c)) +#define DEV_register_removable_mouse(a,b,c) (bx_devices.register_removable_mouse(a,b,c)) +#define DEV_unregister_removable_mouse(a) (bx_devices.unregister_removable_mouse(a)) + +///////// I/O APIC macros +#define DEV_ioapic_present() (bx_devices.pluginIOAPIC != &bx_devices.stubIOAPIC) +#define DEV_ioapic_receive_eoi(a) (bx_devices.pluginIOAPIC->receive_eoi(a)) +#define DEV_ioapic_set_irq_level(a,b) (bx_devices.pluginIOAPIC->set_irq_level(a,b)) + +///////// CMOS macros +#define DEV_cmos_get_reg(a) (bx_devices.pluginCmosDevice->get_reg(a)) +#define DEV_cmos_set_reg(a,b) (bx_devices.pluginCmosDevice->set_reg(a,b)) +#define DEV_cmos_checksum() (bx_devices.pluginCmosDevice->checksum_cmos()) +#define DEV_cmos_get_timeval() (bx_devices.pluginCmosDevice->get_timeval()) +#define DEV_cmos_present() (bx_devices.pluginCmosDevice != &bx_devices.stubCmos) + +///////// keyboard macros +#define DEV_kbd_gen_scancode(key) \ + (bx_devices.pluginKeyboard->gen_scancode(key)) +#define DEV_kbd_paste_bytes(bytes, count) \ + (bx_devices.pluginKeyboard->paste_bytes(bytes,count)) + +///////// hard drive macros +#define DEV_hd_read_handler(a, b, c) \ + (bx_devices.pluginHardDrive->virt_read_handler(b, c)) +#define DEV_hd_write_handler(a, b, c, d) \ + (bx_devices.pluginHardDrive->virt_write_handler(b, c, d)) +#define DEV_hd_get_first_cd_handle() \ + (bx_devices.pluginHardDrive->get_first_cd_handle()) +#define DEV_hd_get_device_handle(a,b) \ + (bx_devices.pluginHardDrive->get_device_handle(a,b)) +#define DEV_hd_get_cd_media_status(handle) \ + (bx_devices.pluginHardDrive->get_cd_media_status(handle)) +#define DEV_hd_set_cd_media_status(handle, status) \ + (bx_devices.pluginHardDrive->set_cd_media_status(handle, status)) +#define DEV_hd_present() (bx_devices.pluginHardDrive != &bx_devices.stubHardDrive) +#define DEV_hd_bmdma_read_sector(a,b,c) bx_devices.pluginHardDrive->bmdma_read_sector(a,b,c) +#define DEV_hd_bmdma_write_sector(a,b) bx_devices.pluginHardDrive->bmdma_write_sector(a,b) +#define DEV_hd_bmdma_complete(a) bx_devices.pluginHardDrive->bmdma_complete(a) +#define DEV_hdimage_init_image(a,b,c) bx_devices.pluginHDImageCtl->init_image(a,b,c) + +#define DEV_bulk_io_quantum_requested() (bx_devices.bulkIOQuantumsRequested) +#define DEV_bulk_io_quantum_transferred() (bx_devices.bulkIOQuantumsTransferred) +#define DEV_bulk_io_host_addr() (bx_devices.bulkIOHostAddr) + +///////// FLOPPY macro +#define DEV_floppy_set_media_status(drive, status) bx_devices.pluginFloppyDevice->set_media_status(drive, status) + +///////// DMA macros +#define DEV_dma_register_8bit_channel(channel, dmaRead, dmaWrite, name) \ + (bx_devices.pluginDmaDevice->registerDMA8Channel(channel, dmaRead, dmaWrite, name)) +#define DEV_dma_register_16bit_channel(channel, dmaRead, dmaWrite, name) \ + (bx_devices.pluginDmaDevice->registerDMA16Channel(channel, dmaRead, dmaWrite, name)) +#define DEV_dma_unregister_channel(channel) \ + (bx_devices.pluginDmaDevice->unregisterDMAChannel(channel)) +#define DEV_dma_set_drq(channel, val) \ + (bx_devices.pluginDmaDevice->set_DRQ(channel, val)) +#define DEV_dma_get_tc() \ + (bx_devices.pluginDmaDevice->get_TC()) +#define DEV_dma_raise_hlda() \ + (bx_devices.pluginDmaDevice->raise_HLDA()) + +///////// PIC macros +#define DEV_pic_lower_irq(b) (bx_devices.pluginPicDevice->lower_irq(b)) +#define DEV_pic_raise_irq(b) (bx_devices.pluginPicDevice->raise_irq(b)) +#define DEV_pic_set_mode(a,b) (bx_devices.pluginPicDevice->set_mode(a,b)) +#define DEV_pic_iac() (bx_devices.pluginPicDevice->IAC()) +#define DEV_pic_debug_dump() (bx_devices.pluginPicDevice->debug_dump()) + +///////// VGA macros +#define DEV_vga_mem_read(addr) (bx_devices.pluginVgaDevice->mem_read(addr)) +#define DEV_vga_mem_write(addr, val) (bx_devices.pluginVgaDevice->mem_write(addr, val)) +#define DEV_vga_redraw_area(left, top, right, bottom) \ + (bx_devices.pluginVgaDevice->redraw_area(left, top, right, bottom)) +#define DEV_vga_get_text_snapshot(rawsnap, height, width) \ + (bx_devices.pluginVgaDevice->get_text_snapshot(rawsnap, height, width)) +#define DEV_vga_refresh() \ + (bx_devices.pluginVgaDevice->trigger_timer(bx_devices.pluginVgaDevice)) +#define DEV_vga_get_actl_pal_idx(index) (bx_devices.pluginVgaDevice->get_actl_palette_idx(index)) +#define DEV_vga_debug_dump() (bx_devices.pluginVgaDevice->debug_dump()) +#define DEV_vbe_set_base_addr(a,b) (bx_devices.pluginVgaDevice->vbe_set_base_addr(a,b)) + +///////// PCI macros +#define DEV_register_pci_handlers(a,b,c,d) \ + (bx_devices.pluginPciBridge->register_pci_handlers(a,b,c,d)) +#define DEV_is_pci_device(name) bx_devices.pluginPciBridge->is_pci_device(name) +#define DEV_pci_set_irq(a,b,c) bx_devices.pluginPci2IsaBridge->pci_set_irq(a,b,c) +#define DEV_pci_set_base_mem(a,b,c,d,e,f) \ + (bx_devices.pluginPciBridge->pci_set_base_mem(a,b,c,d,e,f)) +#define DEV_pci_set_base_io(a,b,c,d,e,f,g,h) \ + (bx_devices.pluginPciBridge->pci_set_base_io(a,b,c,d,e,f,g,h)) +#define DEV_pci_rd_memtype(addr) bx_devices.pluginPciBridge->rd_memType(addr) +#define DEV_pci_wr_memtype(addr) bx_devices.pluginPciBridge->wr_memType(addr) +#define DEV_pci_debug_dump() bx_devices.pluginPciBridge->debug_dump() +#define DEV_ide_bmdma_present() bx_devices.pluginPciIdeController->bmdma_present() +#define DEV_ide_bmdma_set_irq(a) bx_devices.pluginPciIdeController->bmdma_set_irq(a) +#define DEV_acpi_generate_smi(a) bx_devices.pluginACPIController->generate_smi(a) + +///////// NE2000 macro +#define DEV_ne2k_print_info(file,page,reg,brief) \ + bx_devices.pluginNE2kDevice[0]->print_info(file,page,reg,brief) + +///////// Speaker macros +#define DEV_speaker_beep_on(frequency) bx_devices.pluginSpeaker->beep_on(frequency) +#define DEV_speaker_beep_off() bx_devices.pluginSpeaker->beep_off() + +///////// Memory macros +#define DEV_register_memory_handlers(param,rh,wh,b,e) \ + bx_devices.mem->registerMemoryHandlers(param,rh,wh,b,e) +#define DEV_unregister_memory_handlers(rh,wh,b,e) \ + bx_devices.mem->unregisterMemoryHandlers(rh,wh,b,e) + +///////// USB device macros +#define DEV_usb_init_device(a,b,c,d) (usbdev_type)bx_devices.pluginUsbDevCtl->init_device(a,b,(void**)c,d) +#define DEV_usb_send_msg(a,b) bx_devices.pluginUsbDevCtl->usb_send_msg((void*)a,b) + +///////// Sound macro +#define DEV_sound_init_module(a,b,c) bx_devices.pluginSoundModCtl->init_module(a,(void**)b,c) + + +#if BX_HAVE_DLFCN_H +#include +#endif + +typedef Bit32u (*ioReadHandler_t)(void *, Bit32u, unsigned); +typedef void (*ioWriteHandler_t)(void *, Bit32u, Bit32u, unsigned); + +extern plugin_t *plugins; + +typedef struct _device_t +{ + const char *name; + plugin_t *plugin; + + class bx_devmodel_c *devmodel; // BBD hack + + struct _device_t *next; +} device_t; + + +extern device_t *devices; + +void plugin_startup(void); +void plugin_load(char *name, char *args, plugintype_t); +plugin_t *plugin_unload(plugin_t *plugin); +void plugin_init_all(void); +void plugin_fini_all(void); + +/* === Device Stuff === */ +typedef void (*deviceInitMem_t)(BX_MEM_C *); +typedef void (*deviceInitDev_t)(void); +typedef void (*deviceReset_t)(unsigned); + +BOCHSAPI void pluginRegisterDeviceDevmodel(plugin_t *plugin, plugintype_t type, bx_devmodel_c *dev, const char *name); +BOCHSAPI bx_bool pluginDevicePresent(char *name); + +/* === IO port stuff === */ +BOCHSAPI extern int (*pluginRegisterIOReadHandler)(void *thisPtr, ioReadHandler_t callback, + unsigned base, const char *name, Bit8u mask); +BOCHSAPI extern int (*pluginRegisterIOWriteHandler)(void *thisPtr, ioWriteHandler_t callback, + unsigned base, const char *name, Bit8u mask); +BOCHSAPI extern int (*pluginUnregisterIOReadHandler)(void *thisPtr, ioReadHandler_t callback, + unsigned base, Bit8u mask); +BOCHSAPI extern int (*pluginUnregisterIOWriteHandler)(void *thisPtr, ioWriteHandler_t callback, + unsigned base, Bit8u mask); +BOCHSAPI extern int (*pluginRegisterIOReadHandlerRange)(void *thisPtr, ioReadHandler_t callback, + unsigned base, unsigned end, const char *name, Bit8u mask); +BOCHSAPI extern int (*pluginRegisterIOWriteHandlerRange)(void *thisPtr, ioWriteHandler_t callback, + unsigned base, unsigned end, const char *name, Bit8u mask); +BOCHSAPI extern int (*pluginUnregisterIOReadHandlerRange)(void *thisPtr, ioReadHandler_t callback, + unsigned begin, unsigned end, Bit8u mask); +BOCHSAPI extern int (*pluginUnregisterIOWriteHandlerRange)(void *thisPtr, ioWriteHandler_t callback, + unsigned begin, unsigned end, Bit8u mask); +BOCHSAPI extern int (*pluginRegisterDefaultIOReadHandler)(void *thisPtr, ioReadHandler_t callback, + const char *name, Bit8u mask); +BOCHSAPI extern int (*pluginRegisterDefaultIOWriteHandler)(void *thisPtr, ioWriteHandler_t callback, + const char *name, Bit8u mask); + +/* === A20 enable line stuff === */ +BOCHSAPI extern unsigned (*pluginGetA20E)(void); +BOCHSAPI extern void (*pluginSetA20E)(unsigned val); + +/* === IRQ stuff === */ +BOCHSAPI extern void (*pluginRegisterIRQ)(unsigned irq, const char *name); +BOCHSAPI extern void (*pluginUnregisterIRQ)(unsigned irq, const char *name); + +/* === Floppy stuff ===*/ +BOCHSAPI extern unsigned (* pluginFloppyGetMediaStatus)(unsigned drive); +BOCHSAPI extern unsigned (* pluginFloppySetMediaStatus)(unsigned drive, unsigned status); + +/* === VGA stuff === */ +BOCHSAPI extern void (* pluginVGARedrawArea)(unsigned x0, unsigned y0, + unsigned width, unsigned height); +BOCHSAPI extern Bit8u (* pluginVGAMemRead)(Bit32u addr); +BOCHSAPI extern void (* pluginVGAMemWrite)(Bit32u addr, Bit8u value); +BOCHSAPI extern void (* pluginVGAGetTextSnapshot)(Bit8u **text_snapshot, + unsigned *txHeight, unsigned *txWidth); +BOCHSAPI extern void (* pluginVGARefresh)(void *); +BOCHSAPI extern void (* pluginVGASetUpdateInterval)(unsigned); +BOCHSAPI extern Bit8u (* pluginVGAGetActlPaletteIdx)(Bit8u index); + +/* === Timer stuff === */ +BOCHSAPI extern int (*pluginRegisterTimer)(void *this_ptr, void (*funct)(void *), + Bit32u useconds, bx_bool continuous, + bx_bool active, const char *name); + +BOCHSAPI extern void (*pluginActivateTimer)(unsigned id, Bit32u usec, bx_bool continuous); +BOCHSAPI extern void (*pluginDeactivateTimer)(unsigned id); + +/* === HRQ stuff === */ +BOCHSAPI extern void (*pluginSetHRQ)(unsigned val); +BOCHSAPI extern void (*pluginSetHRQHackCallback)(void (*callback)(void)); + +/* === PCI stuff === */ +BOCHSAPI extern bx_bool (*pluginRegisterPCIDevice)(void *this_ptr, + Bit32u (*bx_pci_read_handler)(void *, Bit8u, unsigned), + void(*bx_pci_write_handler)(void *, Bit8u, Bit32u, unsigned), + Bit8u *devfunc, const char *name, const char *descr); +BOCHSAPI extern Bit8u (*pluginRd_memType)(Bit32u addr); +BOCHSAPI extern Bit8u (*pluginWr_memType)(Bit32u addr); + +void plugin_abort(void); + +int bx_load_plugin(const char *name, plugintype_t type); +extern void bx_unload_plugin(const char *name, bx_bool devflag); +extern void bx_init_plugins(void); +extern void bx_reset_plugins(unsigned); +extern void bx_unload_plugins(void); +extern void bx_plugins_register_state(void); +extern void bx_plugins_after_restore_state(void); + +// every plugin must define these, within the extern"C" block, so that +// a non-mangled function symbol is available in the shared library. +void plugin_fini(void); +int plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]); + +// still in extern "C" +#define DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(mod) \ + int lib##mod##_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]); \ + void lib##mod##_LTX_plugin_fini(void); + +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(harddrv) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(hdimage) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(keyboard) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(busmouse) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(serial) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(unmapped) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(biosdev) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(cmos) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(dma) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pic) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pit) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(vga) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(floppy) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(parallel) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pci) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pci2isa) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pci_ide) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pcivga) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pcidev) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(usb_common) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(usb_uhci) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(usb_ohci) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pcipnic) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(soundmod) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(sb16) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(ne2k) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(extfpuirq) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(gameport) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(speaker) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(acpi) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(iodebug) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(ioapic) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(amigaos) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(beos) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(carbon) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(macintosh) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(nogui) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(rfb) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(sdl) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(svga) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(term) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(win32) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(wx) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(x) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(user) + + +#ifdef __cplusplus +} +#endif + +#endif /* __PLUGIN_H */ diff --git a/bochs/win32_enh_dbg.rc b/bochs/win32_enh_dbg.rc new file mode 100755 index 00000000..7b19482b --- /dev/null +++ b/bochs/win32_enh_dbg.rc @@ -0,0 +1,86 @@ +#include +#include "gui/wenhdbg_res.h" + +MENU_1 MENU + BEGIN + POPUP "&Command" + BEGIN + MENUITEM "Continue [c]\tF5",CMD_CONT + MENUITEM "Step [s]\tF11",CMD_STEP1 + MENUITEM "Step #...\tF9",CMD_STEPN + MENUITEM "Break\tCtrl+C",CMD_BREAK + MENUITEM SEPARATOR + MENUITEM "Breakpoint (ASM selected)\tF6",CMD_BRKPT + MENUITEM "Watch Write (PhysDump selected)\tF6",CMD_WPTWR + MENUITEM "Watch Read (PhysDump selected)\tCtrl+F6",CMD_WPTRD + MENUITEM SEPARATOR + MENUITEM "Find...\tCtrl+F",CMD_FIND + MENUITEM "Refresh Screen\tF4",CMD_RFRSH + END + POPUP "&View" + BEGIN + MENUITEM "Physical Dump...\tCtrl+F7",CMD_PHYDMP + MENUITEM "Linear Dump...\tF7",CMD_LINDMP + MENUITEM "Stack\tF2",CMD_STACK + MENUITEM "GDT\tCtrl+F2",CMD_GDTV + MENUITEM "IDT\tShift+F2",CMD_IDTV + MENUITEM "Page Table\tAlt+F2",CMD_PAGEV + MENUITEM "Current MemDump\tEsc",CMD_CMEM + MENUITEM SEPARATOR + MENUITEM "Bochs param_tree\tCtrl+F3",CMD_PTREE + MENUITEM "Disassemble...\tCtrl+D",CMD_DISASM + END + + POPUP "&Options" + BEGIN + MENUITEM "Break on CPU mode change\tShift+F6",CMD_MODEB + MENUITEM "Default disassembled lines ...",CMD_DADEF + MENUITEM "Toggle Intel/ATT syntax\tF3",CMD_ATTI + MENUITEM SEPARATOR + MENUITEM "Font...",CMD_FONT + MENUITEM "Text in UPPERCASE",CMD_UCASE + MENUITEM "Show Input/Output Windows",CMD_IOWIN + MENUITEM "Show Buttons",CMD_SBTN + MENUITEM SEPARATOR + MENUITEM "MemDump in Hex\tAlt+F7",CMD_MHEX + MENUITEM "MemDump in ASCII\tShift+F7",CMD_MASCII + MENUITEM "LittleEndian",CMD_LEND + POPUP "Dump 'Wordsize'" + BEGIN + MENUITEM "1 byte\tAlt+1",CMD_WS_1 + MENUITEM "2 bytes\tAlt+2",CMD_WS_2 + MENUITEM "4 bytes\tAlt+4",CMD_WS_4 + MENUITEM "8 bytes\tAlt+8",CMD_WS_8 + MENUITEM "16 bytes\tAlt+6 ",CMD_WS16 + END + MENUITEM SEPARATOR + MENUITEM "Ignore extra ASM lines",CMD_IGNSA + MENUITEM "Ignore 'Next at t='",CMD_IGNNT + MENUITEM SEPARATOR + MENUITEM "Colorize Register Types",CMD_RCLR +// the next 8 MUST be in strict menuID order + MENUITEM "Show 32bit Registers",CMD_EREG + MENUITEM "Show Segment Registers",CMD_SREG + MENUITEM "Show System Registers",CMD_SYSR + MENUITEM "Show Control Registers",CMD_CREG + MENUITEM "Show MMX/FPU Registers\tAlt+F3",CMD_FPUR + MENUITEM "Show SSE Registers\tCtrl+F4",CMD_XMMR + MENUITEM "Show Debug Registers\tShift+F4",CMD_DREG + MENUITEM "Show Test Registers",CMD_TREG + END + POPUP "&Help" + BEGIN + MENUITEM "About...",CMD_ABOUT + END + END + +DIALOG_AT DIALOGEX 0, 0, 365, 62 +STYLE DS_ABSALIGN | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | 0x200L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX +FONT 8, "Tahoma", 400, 0 +BEGIN + CONTROL "", 101, "static", SS_CENTER | WS_CHILD | WS_VISIBLE, 10, 9, 284, 26 + CONTROL "", 102, "edit", ES_AUTOHSCROLL | ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 10, 41, 285, 15 + CONTROL "OK", IDOK, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 303, 22, 50, 14 + CONTROL "Cancel", IDCANCEL, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 303, 41, 50, 14 +END + diff --git a/bochs/win32res.rc b/bochs/win32res.rc new file mode 100644 index 00000000..22573beb --- /dev/null +++ b/bochs/win32res.rc @@ -0,0 +1,116 @@ +#define ISOLATION_AWARE_ENABLED +#include +#include "gui\win32res.h" + +ICON_BOCHS ICON build\win32\nsis\logo.ico +1 ICON build\win32\nsis\bochs.ico + +#ifndef _WIN64 +// Manifest for 32-bit Windows +1 24 build\win32\bochs.win32.manifest +#else +// Manifest for 64-bit Windows +1 24 build\win32\bochs.win64.manifest +#endif + +ASK_DLG DIALOG 30, 30, 200, 100 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Event" +FONT 8, "Helv" +BEGIN + LTEXT "Device", IDASKTX1, 10, 12, 40, 14 + EDITTEXT IDASKDEV, 45, 10, 145, 14, ES_READONLY + LTEXT "Message", IDASKTX2, 10, 27, 40, 14 + EDITTEXT IDASKMSG, 45, 25, 145, 14, ES_READONLY | ES_AUTOHSCROLL + LISTBOX IDASKLIST, 10, 50, 120, 45, WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 140, 50, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 140, 70, 50, 14 +END + +STRING_DLG DIALOG 30, 30, 130, 65 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Param" +FONT 8, "Helv" +BEGIN + EDITTEXT IDSTRING, 15, 15, 100, 14 + DEFPUSHBUTTON "OK", IDOK, 10, 40, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 70, 40, 50, 14 +END + +FLOPPY_DLG DIALOG 30, 30, 240, 130 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Param" +FONT 8, "Helv" +BEGIN + LTEXT "Device Type", IDDEVTX, 5, 12, 45, 14 + EDITTEXT IDDEVTYPE, 50, 10, 40, 14, ES_READONLY | NOT WS_TABSTOP + LTEXT "Path", IDPATHTX, 5, 32, 40, 14 + EDITTEXT IDPATH, 50, 30, 120, 14, ES_AUTOHSCROLL + PUSHBUTTON "Browse...", IDBROWSE, 180, 30, 50, 14 + LTEXT "Media Type", IDMEDIATX, 5, 52, 45, 14 + COMBOBOX IDMEDIATYPE, 50, 50, 40, 14, CBS_DROPDOWNLIST | WS_TABSTOP + AUTOCHECKBOX "Inserted", IDSTATUS, 50, 70, 50, 14 + AUTOCHECKBOX "Write Protection", IDREADONLY, 116, 70, 70, 14 + LTEXT "Clicking OK signals a media change for this drive.", + IDCHANGETX, 35, 90, 185, 8 + PUSHBUTTON "Create Image", IDCREATE, 35, 105, 50, 14 + DEFPUSHBUTTON "OK", IDOK, 95, 105, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 155, 105, 50, 14 +END + +MAINMENU_DLG DIALOG 30, 30, 275, 130 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Bochs Start Menu" +FONT 8, "Helv" +BEGIN + GROUPBOX "Configuration", IDCONFIG, 10, 10, 70, 97 + PUSHBUTTON "L&oad", IDREADRC, 20, 25, 50, 14 + PUSHBUTTON "&Save", IDWRITERC, 20, 45, 50, 14 + PUSHBUTTON "&Edit", IDEDITCFG, 20, 65, 50, 14 + PUSHBUTTON "Rese&t", IDRESETCFG, 20, 85, 50, 14 + GROUPBOX "Edit Options", IDEDITGRP, 90, 10, 95, 107 + LISTBOX IDEDITBOX, 95, 20, 85, 100, WS_VSCROLL | WS_TABSTOP + GROUPBOX "Simulation", IDSIMU, 195, 10, 70, 77 + DEFPUSHBUTTON "Sta&rt", IDOK, 205, 25, 50, 14 + PUSHBUTTON "Restore St&ate", IDRESTORE, 205, 45, 50, 14 + PUSHBUTTON "&Quit", IDCANCEL, 205, 65, 50, 14 +END + +LOGOPT_DLG DIALOG 30, 30, 240, 180 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Log Options" +FONT 8, "Helv" +BEGIN + LISTBOX IDDEVLIST, 15, 25, 45, 100, LBS_SORT | WS_VSCROLL | WS_TABSTOP + LTEXT "Debug events", IDLOGLBL1, 70, 27, 55, 14 + COMBOBOX IDLOGEVT1, 155, 25, 65, 56, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP + LTEXT "Info events", IDLOGLBL2, 70, 47, 55, 14 + COMBOBOX IDLOGEVT2, 155, 45, 65, 56, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP + LTEXT "Error events", IDLOGLBL3, 70, 67, 55, 14 + COMBOBOX IDLOGEVT3, 155, 65, 65, 56, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP + LTEXT "Panic events", IDLOGLBL4, 70, 87, 55, 14 + COMBOBOX IDLOGEVT4, 155, 85, 65, 56, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP + LTEXT "Pass events", IDLOGLBL5, 70, 107, 55, 14 + COMBOBOX IDLOGEVT5, 155, 105, 65, 56, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP + AUTOCHECKBOX "Specify log options per device", IDADVLOGOPT, 50, 135, 112, 14, BS_LEFTTEXT | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 35, 155, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 95, 155, 50, 14 + PUSHBUTTON "Apply", IDAPPLY, 155, 155, 50, 14 +END + +PARAM_DLG DIALOG 30, 30, 200, 65 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Param" +FONT 8, "Helv" +BEGIN + DEFPUSHBUTTON "OK", IDOK, 45, 40, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 105, 40, 50, 14 +END + +#include "bxversion.rc" +#include "win32_enh_dbg.rc" diff --git a/bochs/wxbochs.rc b/bochs/wxbochs.rc new file mode 100644 index 00000000..a5336db8 --- /dev/null +++ b/bochs/wxbochs.rc @@ -0,0 +1,8 @@ +#include "config.h" +icon_bochs ICON build\win32\nsis\bochs.ico +#include "wx/msw/wx.rc" +#if BX_WITH_WIN32 +#include "win32res.rc" +#else +#include "bxversion.rc" +#endif diff --git a/cmake/FindLibDwarf.cmake b/cmake/FindLibDwarf.cmake new file mode 100644 index 00000000..8d39deea --- /dev/null +++ b/cmake/FindLibDwarf.cmake @@ -0,0 +1,62 @@ +# - Try to find libdwarf +# Once done this will define +# +# LIBDWARF_FOUND - system has libdwarf +# LIBDWARF_INCLUDE_DIRS - the libdwarf include directory +# LIBDWARF_LIBRARIES - Link these to use libdwarf +# LIBDWARF_DEFINITIONS - Compiler switches required for using libdwarf +# + +# Locate libelf library at first +if (NOT LIBELF_FOUND) + find_package (LibElf REQUIRED) +endif (NOT LIBELF_FOUND) + +if (LIBDWARF_LIBRARIES AND LIBDWARF_INCLUDE_DIRS) + set (LibDwarf_FIND_QUIETLY TRUE) +endif (LIBDWARF_LIBRARIES AND LIBDWARF_INCLUDE_DIRS) + +find_path (DWARF_INCLUDE_DIR + NAMES + dwarf.h + PATHS + /usr/include + /usr/local/include + /opt/local/include + /sw/include + ENV CPATH) # PATH and INCLUDE will also work +#find_path (LIBDW_INCLUDE_DIR +# NAMES +# elfutils/libdw.h +# PATHS +# /usr/include +# /usr/local/include +# /opt/local/include +# /sw/include +# ENV CPATH) +if (DWARF_INCLUDE_DIR) # AND LIBDW_INCLUDE_DIR) + set (LIBDWARF_INCLUDE_DIRS ${DWARF_INCLUDE_DIR} ) +endif (DWARF_INCLUDE_DIR) + +find_library (LIBDWARF_LIBRARIES + NAMES + dwarf + PATHS + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib + ENV LIBRARY_PATH # PATH and LIB will also work + ENV LD_LIBRARY_PATH) + +include (FindPackageHandleStandardArgs) + + +# handle the QUIETLY and REQUIRED arguments and set LIBDWARF_FOUND to TRUE +# if all listed variables are TRUE +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibDwarf DEFAULT_MSG + LIBDWARF_LIBRARIES + LIBDWARF_INCLUDE_DIRS) + +mark_as_advanced(LIBDW_INCLUDE_DIR DWARF_INCLUDE_DIR) +mark_as_advanced(LIBDWARF_INCLUDE_DIRS LIBDWARF_LIBRARIES) diff --git a/cmake/FindLibElf.cmake b/cmake/FindLibElf.cmake new file mode 100644 index 00000000..4a3b78fa --- /dev/null +++ b/cmake/FindLibElf.cmake @@ -0,0 +1,55 @@ +# - Try to find libelf +# Once done this will define +# +# LIBELF_FOUND - system has libelf +# LIBELF_INCLUDE_DIRS - the libelf include directory +# LIBELF_LIBRARIES - Link these to use libelf +# LIBELF_DEFINITIONS - Compiler switches required for using libelf +# +# Copyright (c) 2008 Bernhard Walle +# +# Redistribution and use is allowed according to the terms of the New +# BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# + + +if (LIBELF_LIBRARIES AND LIBELF_INCLUDE_DIRS) + set (LibElf_FIND_QUIETLY TRUE) +endif (LIBELF_LIBRARIES AND LIBELF_INCLUDE_DIRS) + +find_path (LIBELF_INCLUDE_DIRS + NAMES + libelf.h + PATHS + /usr/include + /usr/include/libelf + /usr/local/include + /usr/local/include/libelf + /opt/local/include + /opt/local/include/libelf + /sw/include + /sw/include/libelf + ENV CPATH) + +find_library (LIBELF_LIBRARIES + NAMES + elf + PATHS + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib + ENV LIBRARY_PATH + ENV LD_LIBRARY_PATH) + +include (FindPackageHandleStandardArgs) + + +# handle the QUIETLY and REQUIRED arguments and set LIBELF_FOUND to TRUE if all listed variables are TRUE +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibElf DEFAULT_MSG + LIBELF_LIBRARIES + LIBELF_INCLUDE_DIRS) + + +mark_as_advanced(LIBELF_INCLUDE_DIRS LIBELF_LIBRARIES) diff --git a/cmake/compilerconfig.cmake b/cmake/compilerconfig.cmake new file mode 100644 index 00000000..1a1434da --- /dev/null +++ b/cmake/compilerconfig.cmake @@ -0,0 +1,66 @@ + +##### Verbose make #### +option( VERBOSE_MAKE "Verbose Makefile output" OFF) # defaults to OFF + set(CMAKE_VERBOSE_MAKEFILE ${VERBOSE_MAKE}) + + +##### Compilers.. ##### +SET( COMPILER "ag++" CACHE STRING "Use clang/gcc/ag++") # Defaults to ag++ +#SET( PARALLELBUILDS "4" CACHE STRING "Parallel builds forc compiling Bochs (-j N)") + +if(${COMPILER} STREQUAL "clang") + set(CMAKE_C_COMPILER "clang") + set(CMAKE_CXX_COMPILER "clang++") + +elseif(${COMPILER} STREQUAL "gcc") + set(CMAKE_C_COMPILER "gcc") + set(CMAKE_CXX_COMPILER "g++") + +elseif(${COMPILER} STREQUAL "ag++") + set(CMAKE_C_COMPILER "ag++") + set(CMAKE_CXX_COMPILER "ag++") + ## Here we add the build dir holding the generated header files (protobuf) + add_definitions("-p ${CMAKE_SOURCE_DIR} --real-instances --Xcompiler" ) + +else(${COMPILER} STREQUAL "clang") + set(CMAKE_C_COMPILER "gcc") + set(CMAKE_CXX_COMPILER "g++") + +endif(${COMPILER} STREQUAL "clang") + +message(STATUS "[${PROJECT_NAME}] Compiler: ${CMAKE_C_COMPILER}/${CMAKE_CXX_COMPILER}" ) + +#### Add some custom targets for the autoconf-based Bochs +if(BUILD_BOCHS) + + set(bochs_src_dir ${CMAKE_CURRENT_SOURCE_DIR}/bochs ) + + add_custom_target( bochsclean + COMMAND +make -C ${bochs_src_dir} clean + COMMENT "[${PROJECT_NAME}] Cleaning all up (clean in bochs)" + ) + + add_custom_target( bochsallclean + COMMAND +make -C ${bochs_src_dir} all-clean + COMMENT "[${PROJECT_NAME}] Cleaning all up (all-clean in bochs)" + ) + + add_custom_target( bochs + COMMAND +make -C ${bochs_src_dir} CXX=\"ag++ -p ${CMAKE_SOURCE_DIR} -I${CMAKE_SOURCE_DIR}/core -I${CMAKE_BINARY_DIR}/core --real-instances --Xcompiler\" LIBTOOL=\"/bin/sh ./libtool --tag=CXX\" + COMMENT "[${PROJECT_NAME}] Building Bochs" + ) + add_dependencies(bochs fail) + + + add_custom_target( bochsinstall + COMMAND +make -C ${bochs_src_dir} CXX=\"ag++ -p ${CMAKE_SOURCE_DIR} -I${CMAKE_SOURCE_DIR}/core -I${CMAKE_BINARY_DIR}/core --real-instances --Xcompiler\" LIBTOOL=\"/bin/sh ./libtool --tag=CXX\" install + COMMENT "[${PROJECT_NAME}] Installing Bochs..." + ) + + add_custom_target( bochsuninstall + COMMAND +make -C ${bochs_src_dir} uninstall + COMMENT "[${PROJECT_NAME}] Uninstalling Bochs..." + ) + +endif(BUILD_BOCHS) + diff --git a/cmake/config_failbochs.sh.in b/cmake/config_failbochs.sh.in new file mode 100755 index 00000000..e6920b46 --- /dev/null +++ b/cmake/config_failbochs.sh.in @@ -0,0 +1,19 @@ +#!/bin/bash + +SOURCE_DIR=@CMAKE_SOURCE_DIR@ +BINARY_DIR=@CMAKE_BINARY_DIR@ +PREFIX_DIR=@BOCHS_PREFIX_DIR@ + +if [ ! -d "$SOURCE_DIR" ]; then + echo Source directory does not exists! $SOURCE_DIR + exit 2 +fi + +if [ ! -d "$PREFIX_DIR" ]; then + echo Prefix directory does not exists! $BINARY_DIR + exit 2 +fi + + +./configure CXX="ag++ -p $SOURCE_DIR -I$SOURCE_DIR/core -I"$BINARY_DIR"/core --real-instances --Xcompiler" LIBTOOL="/bin/sh ./libtool --tag=CXX" --prefix=$PREFIX_DIR --enable-{a20-pin,x86-64,cpu-level=6,ne2000,acpi,pci,usb,repeat-speedups,trace-cache,fast-function-calls,host-specific-asms,disasm,all-optimizations,readline,clgd54xx,fpu,vmx=2,monitor-mwait,cdrom,sb16=linux,gdb-stub} --with-all-libs + diff --git a/cmake/mergelib.sh b/cmake/mergelib.sh new file mode 100755 index 00000000..98b88c75 --- /dev/null +++ b/cmake/mergelib.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# +# Merge all static (.a) libraries into $LIBFAIL, and avoid .o naming conflicts. +# +set -e + +LIBFAIL=libfail.a + +cd "$1" +rm -f $LIBFAIL +ar rc $LIBFAIL + +for lib in *.a +do + [ "$lib" = "$LIBFAIL" ] && continue + + echo "[FAIL*] Unpacking/merging: $lib "; + # unpack .o files to cwd + ar x "$lib" + + # make sure the .o file names are unique + for f in *.o + do + mv $f ${lib}_$f + done + + # move into merged library + ar r $LIBFAIL *.o + rm -f *.o +done diff --git a/core/AspectConfig.hpp b/core/AspectConfig.hpp new file mode 100644 index 00000000..d7bb5e9e --- /dev/null +++ b/core/AspectConfig.hpp @@ -0,0 +1,30 @@ +#ifndef __ASPECT_CONFIG_HPP__ + #define __ASPECT_CONFIG_HPP__ + +// The following configuration macros to disable (0) / enable (1) the various +// event sources, fault injection sinks, and miscellaneous other features. + +// Event sources +#define CONFIG_EVENT_CPULOOP 0 +#define CONFIG_EVENT_MEMREAD 0 +#define CONFIG_EVENT_MEMWRITE 0 +#define CONFIG_EVENT_GUESTSYS 0 +#define CONFIG_EVENT_INTERRUPT 0 +#define CONFIG_EVENT_TRAP 0 +#define CONFIG_EVENT_JUMP 0 + +// Save/restore functionality +#define CONFIG_SR_RESTORE 0 +#define CONFIG_SR_SAVE 0 +#define CONFIG_SR_REBOOT 0 + +// Miscellaneous +#define CONFIG_STFU 0 +#define CONFIG_SUPPRESS_INTERRUPTS 0 +#define CONFIG_DISABLE_KEYB_INTERRUPTS 0 + +// Fault injection +#define CONFIG_FI_MEM_ACCESS_BITFLIP 0 + + +#endif /* __ASPECT_CONFIG_HPP__ */ diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt new file mode 100644 index 00000000..a4765dda --- /dev/null +++ b/core/CMakeLists.txt @@ -0,0 +1,65 @@ +### Setup search paths for headers ## +include_directories(${CMAKE_CURRENT_BINARY_DIR}) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) + +### Add Boost and Threads +find_package(Boost 1.42 COMPONENTS thread REQUIRED) +find_package(Threads) +include_directories(${Boost_INCLUDE_DIRS}) +link_directories(${Boost_LIBRARY_DIRS}) + +### Setup doxygen documentation +# TODO put into helpers.cmake +find_package(Doxygen) +if(DOXYGEN_FOUND) +# Using a .in file means we can use CMake to insert project settings +# into the doxyfile. For example, CMake will replace @PROJECT_NAME@ in +# a configured file with the CMake PROJECT_NAME variable's value. +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in + ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY} +) + +## call make doc to generate documentation +add_custom_target( doc + ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "[${PROJECT_NAME}] Generating fail* documentation with Doxygen" VERBATIM +) +endif(DOXYGEN_FOUND) + +## Add CMakeLists from subdirectories ## +# The autogenerated header files +# FIXME disabled for now; we'll need it later on for other configuration stuff. +#add_subdirectory(config) + +# fail* targets +add_subdirectory(jobserver) +add_subdirectory(controller) +add_subdirectory(SAL) +add_subdirectory(util) + +# Here we add all user-defined experiments (which fills the target list) +add_subdirectory(experiments/) +message(STATUS "[${PROJECT_NAME}] chosen experiment targets:") +foreach(experiment_name ${EXPERIMENTS_ACTIVATED}) + message(STATUS "[${PROJECT_NAME}] -> ${experiment_name}") +endforeach(experiment_name) + +# Here we add activated plugins +add_subdirectory(plugins/) +message(STATUS "[${PROJECT_NAME}] chosen plugin targets:") +foreach(plugin_name ${PLUGINS_ACTIVATED}) + message(STATUS "[${PROJECT_NAME}] -> ${plugin_name}") +endforeach(plugin_name) + +## Merge all resulting fail* libs into a single libfail.a and copy it into the fail source directory +add_custom_target(fail + COMMAND ${CMAKE_SOURCE_DIR}/cmake/mergelib.sh ${LIBRARY_OUTPUT_PATH} && ${CMAKE_COMMAND} -E copy ${LIBRARY_OUTPUT_PATH}/libfail.a ${CMAKE_SOURCE_DIR}/core +) +## Setup build dependencies of the fail* lib +## -> the fail* targets and user defined experiment targets +add_dependencies(fail SAL util controller jobserver protomessages ${EXPERIMENTS_ACTIVATED} ${PLUGINS_ACTIVATED}) + +# Let make clean also delete libfail.a +set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${LIBRARY_OUTPUT_PATH}/libfail.a) diff --git a/core/Doxyfile.in b/core/Doxyfile.in new file mode 100644 index 00000000..0a0701f1 --- /dev/null +++ b/core/Doxyfile.in @@ -0,0 +1,1553 @@ +# Doxyfile 1.6.2-20100124 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +## The project name will be set by cmake's project name +PROJECT_NAME = @PROJECT_NAME@ + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +## The current version is also replaced on the fly by cmake +PROJECT_NUMBER = @FAILSTAR_VERSION@ + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it parses. +# With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this tag. +# The format is ext=language, where ext is a file extension, and language is one of +# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, +# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penality. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will rougly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by +# doxygen. The layout file controls the global structure of the generated output files +# in an output format independent way. The create the layout file that represents +# doxygen's defaults, run doxygen with the -l option. You can optionally specify a +# file name after the option, if omitted DoxygenLayout.xml will be used as the name +# of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @CMAKE_CURRENT_SOURCE_DIR@ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = NO + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER +# are set, an additional index file will be generated that can be used as input for +# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated +# HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. +# For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's +# filter section matches. +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/core/SAL/CMakeLists.txt b/core/SAL/CMakeLists.txt new file mode 100644 index 00000000..aa153b74 --- /dev/null +++ b/core/SAL/CMakeLists.txt @@ -0,0 +1,10 @@ +set(SRCS + Memory.cc + Register.cc + SimulatorController.cc + ${VARIANT}/Controller.cc +) + + +add_library(SAL ${SRCS}) + diff --git a/core/SAL/Memory.cc b/core/SAL/Memory.cc new file mode 100644 index 00000000..ac9c0573 --- /dev/null +++ b/core/SAL/Memory.cc @@ -0,0 +1,12 @@ + +// Author: Adrian Böckenkamp +// Date: 09.09.2011 + +#include "Memory.hpp" + +#include + +namespace sal +{ + const guest_address_t ADDR_INV = NULL; +} diff --git a/core/SAL/Memory.hpp b/core/SAL/Memory.hpp new file mode 100644 index 00000000..442ba0b7 --- /dev/null +++ b/core/SAL/Memory.hpp @@ -0,0 +1,77 @@ +#ifndef __MEMORY_HPP__ + #define __MEMORY_HPP__ + +// Author: Adrian Böckenkamp +// Date: 07.09.2011 + +#include +#include +#include // Added for size_t support + +#include "SALConfig.hpp" + +namespace sal +{ + +/** + * \class MemoryManager + * Defines an abstract interface to access the simulated memory pool + * and query meta information, e.g. the memory size. + */ +class MemoryManager +{ + public: + virtual ~MemoryManager() { } + /** + * Retrieves the size of the available simulated memory. + * @return the size of the memory pool in bytes + */ + virtual size_t getPoolSize() const = 0; + /** + * Retrieves the starting address of the host memory. This is the + * first valid address in memory. + * @return the starting address + */ + virtual host_address_t getStartAddr() const = 0; + /** + * Retrieves the byte at address \a addr in the memory. + * @param addr The guest address where the byte is located. + * The address is expected to be valid. + * @return the byte at \a addr + */ + virtual byte_t getByte(guest_address_t addr) = 0; + /** + * Retrieves \a cnt bytes at address \a addr in the memory. + * @param addr The guest address where the bytes are located. + * The address is expected to be valid. + * @param cnt the number of bytes to be retrieved. \a addr + \a cnt + * is expected to not exceed the memory limit. + * @param dest the destination buffer to write the bytes to + */ + virtual void getBytes(guest_address_t addr, size_t cnt, std::vector& dest) = 0; + /** + * Writes the byte \a data to memory. + * @param addr The guest address to write. + * The address is expected to be valid. + * @param data The new byte to write + */ + virtual void setByte(guest_address_t addr, byte_t data) = 0; + /** + * Writes the bytes \a data to memory. Consequently data.size() bytes + * will be written. + * @param addr The guest address to write. + * The address is expected to be valid. + * @param data The new bytes to write + */ + virtual void setBytes(guest_address_t addr, const std::vector& data) = 0; + /** + * Transforms the guest address \a addr to a host address. + * @param addr The guest address to be transformed + * @return the transformed (host) address or \c ADDR_INV on errors + */ + virtual host_address_t guestToHost(guest_address_t addr) = 0; +}; + +} // end-of-namespace: sal + +#endif /* __MEMORY_HPP__ */ diff --git a/core/SAL/Register.cc b/core/SAL/Register.cc new file mode 100644 index 00000000..870a935e --- /dev/null +++ b/core/SAL/Register.cc @@ -0,0 +1,72 @@ + +// Author: Adrian Böckenkamp +// Date: 07.09.2011 + +#include "Register.hpp" + +namespace sal +{ + Register* UniformRegisterSet::getRegister(size_t i) + { + assert(i < m_Regs.size() && "FATAL ERROR: Invalid index provided!"); + return (m_Regs[i]); + } + + Register* RegisterManager::getRegister(size_t i) + { + assert(i < m_Registers.size() && "FATAL ERROR: Invalid index provided!"); + return (m_Registers[i]); + } + + void RegisterManager::add(Register* reg) + { + assert(!reg->isAssigned() && "FATAL ERROR: The register is already assigned!"); + m_Registers.push_back(reg); + + UniformRegisterSet* urs = getSetOfType(reg->getType()); + if(urs == NULL) { + urs = new UniformRegisterSet(reg->getType()); + m_Subsets.push_back(urs); + } + urs->m_add(reg); + } + + void UniformRegisterSet::m_add(Register* preg) + { + assert(!preg->m_Assigned && + "FATAL ERROR: The register has already been assigned."); + m_Regs.push_back(preg); + preg->m_Assigned = true; + preg->m_Index = m_Regs.size()-1; // the index within the vector (set) + } + + size_t RegisterManager::count() const + { + return (m_Registers.size()); + } + + UniformRegisterSet& RegisterManager::getSet(size_t i) + { + assert(i < m_Subsets.size() && "FATAL ERROR: Invalid index provided!"); + return (*m_Subsets[i]); + } + + UniformRegisterSet* RegisterManager::getSetOfType(RegisterType t) + { + for(std::vector< UniformRegisterSet* >::iterator it = m_Subsets.begin(); + it != m_Subsets.end(); it++) + { + if((*it)->getType() == t) + return (*it); + } + return (NULL); + } + + void RegisterManager::clear() + { + for(std::vector< UniformRegisterSet* >::iterator it = m_Subsets.begin(); + it != m_Subsets.end(); it++) + delete (*it); + m_Subsets.clear(); + } +} diff --git a/core/SAL/Register.hpp b/core/SAL/Register.hpp new file mode 100644 index 00000000..4bb614bd --- /dev/null +++ b/core/SAL/Register.hpp @@ -0,0 +1,279 @@ +#ifndef __REGISTER_HPP__ + #define __REGISTER_HPP__ + +// Author: Adrian Böckenkamp +// Date: 06.09.2011 + +#include +#include +#include +#include +#include + +#include "SALConfig.hpp" + +namespace sal +{ + +/** + * \enum RegisterType + * Lists the different register types. You need to expand this enumeration + * to provide more detailed types for your concrete derived register classes + * specific to a simulator. + */ +enum RegisterType +{ + RT_GP, //!< general purpose + RT_PC, //!< program counter / instruction pointer + RT_ST //!< status register +}; + +/** + * \class Register + * Represents the basic generic register class. A set of registers is composed + * of classes which had been derived from this class. + */ +class Register +{ + protected: + RegisterType m_Type; //!< the type of this register + regwidth_t m_Width; //!< the register width + unsigned int m_Id; //!< the unique id of this register + //! \c true if register has already been assigned, \c false otherwise + bool m_Assigned; + //! The index in it's register set if assigned (\c -1 otherwise) + size_t m_Index; + std::string m_Name; //!< The (optional) name, maybe empty + friend class UniformRegisterSet; + public: + /** + * Creates a new register. + * @param id the unique id of this register (simulator specific) + * @param t the type of the register to be constructed + * @param w the width of the register in bits + */ + Register(unsigned int id, RegisterType t, regwidth_t w) + : m_Type(t), m_Width(w), m_Id(id), m_Assigned(false), + m_Index(static_cast(-1)) { } + /** + * Returns the (fixed) type of this register. + * @return the type of this register + */ + RegisterType getType() const { return (m_Type); } + /** + * Returns the (fixed) width of this register. + * @return the width in bits + */ + regwidth_t getWidth() const { return (m_Width); } + /** + * Returns the data referenced by this register. In a concrete + * derived class this method has to be defined appropriately. + * @return the current data + */ + virtual regdata_t getData() /*!const*/ = 0; + /** + * Sets new data to be stored in this register. + * @param data the data to be written to the register + */ + virtual void setData(regdata_t data) = 0; + /** + * Sets the (optional) name of this register. + * @param name the textual register name, e.g. "EAX" + */ + void setName(const std::string& name) { m_Name = name; } + /** + * Retrieves the register name. + * @return the name + */ + const std::string& getName() const { return (m_Name); } + /** + * Retrieves the unique index within it's assigned register set. + * If the register has not been assigned, \c (size_t)-1 will be + * returned. + * @return the register index or -1 if not assigned + * @see isAssigned() + */ + size_t getIndex() const { return (m_Index); } + /** + * Checks whether this register has already been assigned. On + * creation the register isn't initially assigned. + * @return \c true if assigned, \c false otherwise + */ + bool isAssigned() const { return (m_Assigned); } + /** + * Returns the unique id of this register. + * @return the unique id + */ + unsigned int getId() const { return (m_Id); } +}; + +/** + * \class UniformRegisterSet + * Represents a (type-uniform) set of registers, e.g. all general purpose + * registers. The granularity of the register type is determined by the + * enumeration \c RegisterType. (All registers within this set must be of the + * same register type.) The capacity of the set is managed automatically. + */ +class UniformRegisterSet +{ + private: + std::vector< Register* > m_Regs; //!< the unique set of registers + RegisterType m_Type; //!< the overall type of this container (set) + void m_add(Register* preg); + friend class RegisterManager; + public: + /** + * The iterator of this class used to loop through the list of + * added registers. To retrieve an iterator to the first element, call + * begin(). end() returns the iterator, pointing after the last element. + * (This behaviour equals the STL iterator in C++.) + */ + typedef std::vector< Register* >::iterator iterator; + /** + * Returns an iterator to the beginning of the internal data structure. + * \code + * [1|2| ... |n] + * ^ + * \endcode + */ + iterator begin() { return (m_Regs.begin()); } + /** + * Returns an iterator to the end of the interal data structure. + * \code + * [1|2| ... |n]X + * ^ + * \endcode + */ + iterator end() { return (m_Regs.end()); } + /** + * Constructs a new register set with type \a containerType. + * @param containerType the type of registers which should be stored + * in this set + */ + UniformRegisterSet(RegisterType containerType) + : m_Type(containerType) { } + /** + * Returns the type of this set. + * @return the type + */ + RegisterType getType() const { return (m_Type); } + /** + * Gets the number of registers of this set. + * @return the number of registers + */ + size_t count() const { return (m_Regs.size()); } + /** + * Retrieves the \a i-th register within this set. + * @return a pointer to the \a i-th register; if \a i is invalid, an + * assertion is thrown + */ + Register* getRegister(size_t i); + /** + * Retrieves the first register within this set (syntactical sugar). + * @return a pointer to the first register (if existing -- otherwise an + * assertion is thrown) + */ + virtual Register* first() { return (getRegister(0)); } +}; + +/** + * \class RegisterManager + * Represents a complete set of (inhomogeneous) registers specific to a concrete + * architecture, e.g. x86 or ARM. + */ +class RegisterManager +{ + protected: + std::vector< Register* > m_Registers; + //!< the managed set of homogeneous sets + std::vector< UniformRegisterSet* > m_Subsets; + public: + /** + * The iterator of this class used to loop through the list of + * added registers. To retrieve an iterator to the first element, call + * begin(). end() returns the iterator, pointing after the last element. + * (This behaviour equals the STL iterator in C++.) + */ + typedef std::vector< Register* >::iterator iterator; + /** + * Returns an iterator to the beginning of the internal data structure. + * \code + * [1|2| ... |n] + * ^ + * \endcode + */ + iterator begin() { return (m_Registers.begin()); } + /** + * Returns an iterator to the end of the interal data structure. + * \code + * [1|2| ... |n]X + * ^ + * \endcode + */ + iterator end() { return (m_Registers.end()); } + + RegisterManager() { } + ~RegisterManager() { clear(); } + /** + * Retrieves the total number of registers over all homogeneous sets. + * @return the total register count + */ + virtual size_t count() const; + /** + * Retrieves the number of managed homogeneous register sets. + * @return the number of sets + */ + virtual size_t subsetCount() const { return (m_Subsets.size()); } + /** + * Gets the \a i-th register set. + * @param i the index of the set to be returned + * @return a reference to the uniform register set + * @see subsetCount() + */ + virtual UniformRegisterSet& getSet(size_t i); + /** + * Returns the set with register type \a t. The set can be used to + * loop over all registers of type \a t. + * @param t the type to check for + * @return a pointer to the retrieved register set (if found), NULL + * otherwise + */ + virtual UniformRegisterSet* getSetOfType(RegisterType t); + /** + * Adds a new register to this set. The register object needs to be + * typed (see Register::getType). + * @param reg a pointer to the register object to be added + * @see getType() + */ + void add(Register* reg); + /** + * Retrieves the \a i-th register. + * @return a pointer to the \a i-th register; if \a i is invalid, an + * assertion is thrown + */ + Register* getRegister(size_t i); + /** + * Removes all registers and sets from the RegisterManager. + */ + virtual void clear(); + /** + * Returns the current instruction pointer. + * @return the current eip + */ + virtual address_t getInstructionPointer() = 0; + /** + * Retruns the top address of the stack. + * @return the starting address of the stack + */ + virtual address_t getStackPointer() = 0; + /** + * Retrieves the base ptr (holding the address of the + * current stack frame). + * @return the base pointer + */ + virtual address_t getBasePointer() = 0; +}; + +} // end-of-namespace: sal + +#endif /* __REGISTER_HPP__ */ diff --git a/core/SAL/SALConfig.hpp b/core/SAL/SALConfig.hpp new file mode 100644 index 00000000..f292e60f --- /dev/null +++ b/core/SAL/SALConfig.hpp @@ -0,0 +1,45 @@ +#ifndef __SAL_CONFIG_HPP__ + #define __SAL_CONFIG_HPP__ + + + +#include +#include "../variant_config.h" + +#if defined BUILD_BOCHS + +#include "bochs/BochsConfig.hpp" // current simulator config + +namespace sal +{ + +typedef guest_address_t address_t; //!< common address type to be used in experiment flows +typedef uint8_t byte_t; //!< 8 bit type for memory access (read or write) +typedef uint32_t regwidth_t; //!< type of register width [bits] +typedef register_data_t regdata_t; //!< type of register data + +extern const address_t ADDR_INV; //!< invalid address flag (defined in Memory.cc) + +} + +#elif defined BUILD_OVP + +#include "ovp/OVPConfig.hpp" // current simulator config + +namespace sal +{ + +typedef guest_address_t address_t; //!< common address type to be used in experiment flows +typedef uint8_t byte_t; //!< 8 bit type for memory access (read or write) +typedef uint32_t regwidth_t; //!< type of register width [bits] +typedef register_data_t regdata_t; //!< type of register data + +extern const address_t ADDR_INV; //!< invalid address flag (defined in Memory.cc) + +} +#else +#error SAL Config Target not defined +#endif + + +#endif // __SAL_CONFIG_HPP__ diff --git a/core/SAL/SALInst.hpp b/core/SAL/SALInst.hpp new file mode 100644 index 00000000..9f1b31f8 --- /dev/null +++ b/core/SAL/SALInst.hpp @@ -0,0 +1,35 @@ +#ifndef __SAL_INSTANCE_HPP__ + #define __SAL_INSTANCE_HPP__ + +#include "SALConfig.hpp" +#include "../variant_config.h" + +#ifdef BUILD_BOCHS + +#include "bochs/BochsController.hpp" + +namespace sal +{ + +typedef BochsController ConcreteSimulatorController; //!< concrete simulator (type) +extern ConcreteSimulatorController simulator; //!< the global simulator-controller instance + +} + +#elif defined BUILD_OVP + +#include "ovp/OVPController.hpp" + +namespace sal +{ + +typedef OVPController ConcreteSimulatorController; //!< concrete simulator (type) +extern ConcreteSimulatorController simulator; //!< the global simulator-controller instance + +} + +#else +#error SAL Instance not defined +#endif + +#endif /* __SAL_INSTANCE_HPP__ */ diff --git a/core/SAL/SimulatorController.cc b/core/SAL/SimulatorController.cc new file mode 100644 index 00000000..85e70256 --- /dev/null +++ b/core/SAL/SimulatorController.cc @@ -0,0 +1,285 @@ + +// Author: Adrian Böckenkamp +// Date: 23.01.2012 + +#include "SimulatorController.hpp" +#include "SALInst.hpp" +#include "../controller/Event.hpp" + +namespace sal +{ + +// External reference declared in SALInst.hpp +ConcreteSimulatorController simulator; + +fi::EventId SimulatorController::addEvent(fi::BaseEvent* ev) +{ + return (m_EvList.add(ev, m_Flows.getCurrent())); +} + +fi::BaseEvent* SimulatorController::waitAny(void) +{ + m_Flows.resume(); + assert(m_EvList.getLastFired() != NULL && + "FATAL ERROR: getLastFired() expected to be non-NULL!"); + return (m_EvList.getLastFired()); +} + +void SimulatorController::startup() +{ + // Some greetings to the user: + std::cout << "[SimulatorController] Initializing..." << std::endl; + + // TODO: Retrieve ExperimentData from the job-server (*before* each + // experiment-routine gets started)...! + + // Activate previously added experiments to allow initialization: + initExperiments(); +} + +void SimulatorController::initExperiments() +{ + /* empty. */ +} + +void SimulatorController::onBreakpointEvent(address_t instrPtr) +{ + assert(false && + "FIXME: SimulatorController::onBreakpointEvent() has not been tested before"); + + // FIXME: Performanz verbessern + + // Loop through all events of type BP*Event: + fi::EventList::iterator it = m_EvList.begin(); + while(it != m_EvList.end()) + { + fi::BaseEvent* pev = *it; + fi::BPEvent* pbp; fi::BPRangeEvent* pbpr; + if((pbp = dynamic_cast(pev)) && pbp->isMatching(instrPtr)) + { + pbp->setTriggerInstructionPointer(instrPtr); + it = m_EvList.makeActive(it); + // "it" has already been set to the next element (by calling + // makeActive()): + continue; // -> skip iterator increment + } + else if((pbpr = dynamic_cast(pev)) && + pbpr->isMatching(instrPtr)) + { + pbpr->setTriggerInstructionPointer(instrPtr); + it = m_EvList.makeActive(it); + continue; // dito + } + ++it; + } + m_EvList.fireActiveEvents(); +} + +void SimulatorController::onMemoryAccessEvent(address_t addr, size_t len, + bool is_write, address_t instrPtr) +{ + // FIXME: Performanz verbessern (falls Iteratorlogik bleibt, wäre + // ein "hasMoreOf(typeid(MemEvents))" denkbar... + + fi::MemAccessEvent::accessType_t accesstype = + is_write ? fi::MemAccessEvent::MEM_WRITE + : fi::MemAccessEvent::MEM_READ; + + fi::EventList::iterator it = m_EvList.begin(); + while(it != m_EvList.end()) // check for active events + { + fi::BaseEvent* pev = *it; + fi::MemAccessEvent* ev = dynamic_cast(pev); + // Is this a MemAccessEvent? Correct access type? + if(!ev || !ev->isMatching(addr, accesstype)) + { + ++it; + continue; // skip event activation + } + ev->setTriggerAddress(addr); + ev->setTriggerWidth(len); + ev->setTriggerInstructionPointer(instrPtr); + ev->setTriggerAccessType(accesstype); + it = m_EvList.makeActive(it); + } + m_EvList.fireActiveEvents(); +} + +void SimulatorController::onInterruptEvent(unsigned interruptNum, bool nmi) +{ + fi::EventList::iterator it = m_EvList.begin(); + while(it != m_EvList.end()) // check for active events + { + fi::BaseEvent* pev = *it; + fi::InterruptEvent* pie = dynamic_cast(pev); + if(!pie || !pie->isMatching(interruptNum)) + { + ++it; + continue; // skip event activation + } + pie->setTriggerNumber(interruptNum); + pie->setNMI(nmi); + it = m_EvList.makeActive(it); + } + m_EvList.fireActiveEvents(); +} + +bool SimulatorController::isSuppressedInterrupt(unsigned interruptNum) +{ + for(size_t i = 0; i < m_SuppressedInterrupts.size(); i++) + if(m_SuppressedInterrupts[i] == interruptNum || + m_SuppressedInterrupts[i] == fi::ANY_INTERRUPT) + return (true); + return (false); +} + +bool SimulatorController::addSuppressedInterrupt(unsigned interruptNum) +{ + // Check if already existing: + if(isSuppressedInterrupt(interruptNum)) + return (false); // already added: nothing to do here + m_SuppressedInterrupts.push_back(interruptNum); + return (true); +} + +bool SimulatorController::removeSuppressedInterrupt(unsigned interruptNum) +{ + for(size_t i = 0; i < m_SuppressedInterrupts.size(); i++) + { + if(m_SuppressedInterrupts[i] == interruptNum) + { + m_SuppressedInterrupts.erase(m_SuppressedInterrupts.begin() + i); + return (true); + } + } + return (false); +} + +void SimulatorController::onTrapEvent(unsigned trapNum) +{ + fi::EventList::iterator it = m_EvList.begin(); + while(it != m_EvList.end()) // check for active events + { + fi::BaseEvent* pev = *it; + fi::TrapEvent* pte = dynamic_cast(pev); + if(!pte || !pte->isMatching(trapNum)) + { + ++it; + continue; // skip event activation + } + pte->setTriggerNumber(trapNum); + it = m_EvList.makeActive(it); + } + m_EvList.fireActiveEvents(); +} + +void SimulatorController::onGuestSystemEvent(char data, unsigned port) +{ + // TODO: Eher ein Entwurf... + + fi::EventList::iterator it = m_EvList.begin(); + while(it != m_EvList.end()) // check for active events + { + fi::BaseEvent* pev = *it; + fi::GuestEvent* pge = dynamic_cast(pev); + if(pge != NULL) + { + pge->setData(data); + pge->setPort(port); + it = m_EvList.makeActive(it); + continue; // dito. + } + ++it; + } + m_EvList.fireActiveEvents(); +} + +void SimulatorController::onJumpEvent(bool flagTriggered, unsigned opcode) +{ + fi::EventList::iterator it = m_EvList.begin(); + while(it != m_EvList.end()) // check for active events + { + fi::JumpEvent* pje = dynamic_cast(*it); + if(pje != NULL) + { + pje->setOpcode(opcode); + pje->setFlagTriggered(flagTriggered); + it = m_EvList.makeActive(it); + continue; // dito. + } + ++it; + } + m_EvList.fireActiveEvents(); +} + +void SimulatorController::cleanup(fi::ExperimentFlow* pExp) +{ + // remove related events: + std::vector evlist; + m_EvList.getEventsOf(pExp, evlist); + for(size_t i = 0; i < evlist.size(); i++) + m_EvList.remove(evlist[i]); +} + +void SimulatorController::addFlow(fi::ExperimentFlow* flow) +{ + // Store the (flow,corohandle)-tuple internally and create its coroutine: + m_Flows.create(flow); + // let it run for the first time + m_Flows.toggle(flow); +} + +void SimulatorController::removeFlow(fi::ExperimentFlow* flow) +{ + // remove all remaining events of this flow + cleanup(flow); + // remove coroutine + m_Flows.remove(flow); +} + +fi::BaseEvent* SimulatorController::addEventAndWait(fi::BaseEvent* ev) +{ + addEvent(ev); + return (waitAny()); +} + +template +T* SimulatorController::getExperimentData() +{ + //BEGIN ONLY FOR TESTING------REMOVE--------REMOVE---------REMOVE--------REMOVE-------REMOVE------- + //Daten in Struktur schreiben und in Datei speichern + ofstream fileWrite; + fileWrite.open("test.txt"); + + T* faultCovExWrite = new T();; + faultCovExWrite->set_data_name("Testfall 42"); + + //Namen setzen + faultCovExWrite->set_data_name("Testfall 42"); + //Instruktionpointer 1 + faultCovExWrite->set_m_instrptr1(0x4711); + //Instruktionpointer 2 + faultCovExWrite->set_m_instrptr2(0x1122); + + //In ExperimentData verpacken + fi::ExperimentData exDaWrite(faultCovExWrite); + //Serialisierung ueber Wrapper-Methode in ExperimentData + exDaWrite.serialize(&fileWrite); + + //cout << "Ausgabe: " << out << endl; + + fileWrite.close(); + + ifstream fileRead; + fileRead.open("test.txt"); + //END ONLY FOR TESTING------REMOVE--------REMOVE---------REMOVE--------REMOVE-------REMOVE------- + //TODO: implement server-client communication---------------------------------------------- + + T* concreteExpDat = new T(); + fi::ExperimentData exDaRead(concreteExpDat); + exDaRead.unserialize(&fileRead); + + return (concreteExpDat); +} + +} // end-of-namespace: sal diff --git a/core/SAL/SimulatorController.hpp b/core/SAL/SimulatorController.hpp new file mode 100644 index 00000000..5189d961 --- /dev/null +++ b/core/SAL/SimulatorController.hpp @@ -0,0 +1,250 @@ +#ifndef __SIMULATOR_CONTROLLER_HPP__ + #define __SIMULATOR_CONTROLLER_HPP__ + +// Author: Adrian Böckenkamp +// Date: 23.01.2012 + +#include +#include +#include +#include + +// +//>END ONLY FOR TEST + +#include "../controller/Event.hpp" +#include "../controller/EventList.hpp" +#include "../controller/CoroutineManager.hpp" +#include "../controller/ExperimentData.hpp" +#include "SALConfig.hpp" + +using namespace std; + +namespace fi { +class ExperimentFlow; +} + +/// Simulator Abstraction Layer namespace +namespace sal +{ + +// incomplete types suffice here +class RegisterManager; +class MemoryManager; + +/** + * \class SimulatorController + * + * \brief The abstract interface for controlling simulators and + * accessing experiment data/flows. + * + * This class manages (1..N) experiments and provides access to the underlying + * simulator/debugger system. Experiments can enlist arbritrary events + * (Breakpoint, Memory access, Traps, etc.). The SimulatorController then + * activates the specific experiment There are further methods to read/write + * registers and memory, and control the SUT (save/restore/reset). + */ +class SimulatorController +{ + protected: + fi::EventList m_EvList; //!< storage where events are being buffered + fi::CoroutineManager m_Flows; //!< managed experiment flows + RegisterManager *m_Regs; //!< access to cpu register + MemoryManager *m_Mem; //!< access to memory pool + //! list of suppressed interrupts + std::vector m_SuppressedInterrupts; + friend class fi::EventList; //!< "outsources" the event management + public: + SimulatorController() + : m_Regs(NULL), m_Mem(NULL) { } + SimulatorController(RegisterManager* regs, MemoryManager* mem) + : m_Regs(regs), m_Mem(mem) { } + virtual ~SimulatorController() { } + /** + * @brief Global startup function each implementation needs to call + * on startup + * This static function needs to be invoked once the simulator starts, + * and allows the SimulatorController's member startup() to instantiate + * all needed experiment components. + */ + virtual void startup(); + /** + * Experiments need to hook here. + */ + static void initExperiments(); + /* ******************************************************************** + * Standard Event Handler API (SEH-API): + * ********************************************************************/ + /** + * Breakpoint event handler. This routine needs to be called in the + * simulator specific backend each time a breakpoint event occurs. + * @param instrPtr the instruction pointer of the breakpoint event + */ + virtual void onBreakpointEvent(address_t instrPtr); + /** + * Memory access event handler (read/write). + * @param addr the accessed memory address + * @param len the length of the accessed memory + * @param is_write \c true if memory is written, \c false if read + * @param instrPtr the address of the instruction causing the memory + * access + * + * FIXME: should instrPtr be part of this interface? + */ + virtual void onMemoryAccessEvent(address_t addr, size_t len, + bool is_write, address_t instrPtr); + /** + * Interrupt event handler. + * @param interruptNum the interrupt-type id + * @param nmi nmi-value from guest-system + */ + virtual void onInterruptEvent(unsigned interruptNum, bool nmi); + /** + * Trap event handler. + * @param trapNum the trap-type id + */ + virtual void onTrapEvent(unsigned trapNum); + /** + * Guest system communication handler. + * @param data the "message" from the guest system + * @param port the port of the event + */ + virtual void onGuestSystemEvent(char data, unsigned port); + /** + * (Conditional) Jump-instruction handler. + * @param flagTriggered \c true if the jump was triggered due to a + * specific FLAG (zero/carry/sign/overflow/parity flag) + * @param opcode the opcode of the conrecete jump instruction + */ + virtual void onJumpEvent(bool flagTriggered, unsigned opcode); + /* ******************************************************************** + * Simulator Controller & Access API (SCA-API): + * ********************************************************************/ + /** + * Save simulator state. + * @param path Location to store state information + */ + virtual void save(const string& path) = 0; + /** + * Restore simulator state. + * @param path Location to previously saved state information + */ + virtual void restore(const string& path) = 0; + /** + * Reboot simulator. + */ + virtual void reboot() = 0; + /** + * Terminate simulator + * @param exCode Individual exit code + */ + virtual void terminate(int exCode = EXIT_SUCCESS) = 0; + /** + * Check whether the interrupt should be suppressed. + * @param interruptNum the interrupt-type id + * @return \c true if the interrupt is suppressed, \c false oterwise + */ + virtual bool isSuppressedInterrupt(unsigned interruptNum); + /** + * Add a Interrupt to the list of suppressed. + * @param interruptNum the interrupt-type id + * @return \c true if sucessfully added, \c false otherwise (already + * existing) + */ + virtual bool addSuppressedInterrupt(unsigned interruptNum); + /** + * Remove a Interrupt from the list of suppressed. + * @param interruptNum the interrupt-type id + * @return \c true if sucessfully removed, \c false otherwise (not + * found) + */ + virtual bool removeSuppressedInterrupt(unsigned interruptNum); + /** + * Returns the (constant) initialized register manager. + * @return a reference to the register manager + */ + RegisterManager& getRegisterManager() { return (*m_Regs); } + const RegisterManager& getRegisterManager() const { return (*m_Regs); } + /** + * Sets the register manager. + * @param pReg the new register manager (or a concrete derived class of + * RegisterManager) + */ + void setRegisterManager(RegisterManager* pReg) { m_Regs = pReg; } + /** + * Returns the (constant) initialized memory manager. + * @return a reference to the memory manager + */ + MemoryManager& getMemoryManager() { return (*m_Mem); } + const MemoryManager& getMemoryManager() const { return (*m_Mem); } + /** + * Sets the memory manager. + * @param pMem a new concrete memory manager + */ + void setMemoryManager(MemoryManager* pMem) { m_Mem = pMem; } + /* ******************************************************************** + * Experiment-Flow & Event Management API (EFEM-API): + * ********************************************************************/ + /** + * Adds the specified experiment or plugin and creates a coroutine to + * run it in. + * @param flow the experiment flow object to be added + */ + void addFlow(fi::ExperimentFlow* flow); + /** + * Removes the specified experiment or plugin and destroys its coroutine + * and all associated events. + * @param flow the experiment flow object to be removed + */ + void removeFlow(fi::ExperimentFlow* flow); + /** + * Add event ev to the event management. This causes the event to be + * active. + * @param ev the event pointer to be added for the current flow + * @return the id of the event used to identify the object on occurrence + */ + fi::EventId addEvent(fi::BaseEvent* ev); + /** + * Removes the event with the specified id. + * @param ev the pointer of the event-object to be removed; if \a ev is + * equal to \c NULL all events (for all experiments) will be + * removed + */ + void removeEvent(fi::BaseEvent* ev) { m_EvList.remove(ev); } + /** + * Removes all previously added events for all experiments. This is + * equal to removeEvent(NULL); + */ + void clearEvents() { removeEvent(NULL); } + /** + * Waits on any events which have been added to the event management. If + * one of those events occour, waitAny() will return the id of that + * event. + * @return the previously occurred event + */ + fi::BaseEvent* waitAny(); + /** + * Add event \a ev to the global buffer and wait for it (combines + * \c addEvent() and \c waitAny()). + * @param ev the event pointer to be added + * @return the pointer of the occurred event (it is not guaranteed that + * this pointer will be equal to ev) + */ + fi::BaseEvent* addEventAndWait(fi::BaseEvent* ev); + /** + * Removes all residual events associated with the specified experiment + * flow \a pExp. + * @param pExp the experiment whose events should be removed + */ + void cleanup(fi::ExperimentFlow* pExp); + /** + * Fetches data for the experiments from the Job-Server. + * @return the Experiment-Data from the Job-Server. + */ + template T* getExperimentData(); +}; + +} // end-of-namespace: sal + +#endif /* __SIMULATOR_CONTROLLER_HPP__ */ diff --git a/core/SAL/bochs/BochsConfig.hpp b/core/SAL/bochs/BochsConfig.hpp new file mode 100644 index 00000000..3481a7b0 --- /dev/null +++ b/core/SAL/bochs/BochsConfig.hpp @@ -0,0 +1,24 @@ +#ifndef __BOCHS_CONFIG_HPP__ + #define __BOCHS_CONFIG_HPP__ + +#include "../../../bochs/bochs.h" +#include "../../../bochs/config.h" + +// Type definitions and configuration settings for +// the Bochs simulator. + +namespace sal +{ + +typedef bx_address guest_address_t; //!< the guest memory address type +typedef Bit8u* host_address_t; //!< the host memory address type +#if BX_SUPPORT_X86_64 + typedef Bit64u register_data_t; //!< register data type (64 bit) +#else + typedef Bit32u register_data_t; //!< register data type (32 bit) +#endif + +}; + +#endif /* __BOCHS_CONFIG_HPP__ */ + diff --git a/core/SAL/bochs/BochsController.hpp b/core/SAL/bochs/BochsController.hpp new file mode 100644 index 00000000..ca131022 --- /dev/null +++ b/core/SAL/bochs/BochsController.hpp @@ -0,0 +1,106 @@ +#ifndef __BOCHS_CONTROLLER_HPP__ + #define __BOCHS_CONTROLLER_HPP__ + +#define DEBUG + +#include +#include +#include +#include +#include +#include + +#include "failbochs.hpp" + +#include "../SimulatorController.hpp" +#include "../../controller/Event.hpp" + +#include "../../../bochs/bochs.h" +#include "../../../bochs/cpu/cpu.h" +#include "../../../bochs/config.h" + +using namespace std; + +namespace fi { class ExperimentFlow; } + +/// Simulator Abstraction Layer namespace +namespace sal +{ + +/** + * \class BochsController + * Bochs-specific implementation of a SimulatorController. + */ +class BochsController : public SimulatorController +{ + private: + /** + * stores the current flow for save/restore-operations + */ + fi::ExperimentFlow* m_CurrFlow; + #ifdef DEBUG + unsigned m_Regularity; + unsigned m_Counter; + std::ostream* m_pDest; + #endif + public: + // Initialize the controller. + BochsController(); + ~BochsController(); + /* ******************************************************************** + * Standard Event Handler API (SEH-API): + * ********************************************************************/ + /** + * Instruction pointer modification handler. This method is called (from + * the CPULoop aspect) every time when the Bochs-internal IP changes. + * @param instrPtr + */ + void onInstrPtrChanged(address_t instrPtr); + /* ******************************************************************** + * Simulator Controller & Access API (SCA-API): + * ********************************************************************/ + /** + * Save simulator state. + * @param path Location to store state information + */ + void save(const string& path); + /** + * Save finished: Callback from Simulator + */ + void saveDone(); + /** + * Restore simulator state. Clears all Events. + * @param path Location to previously saved state information + */ + void restore(const string& path); + /** + * Restore finished: Callback from Simulator + */ + void restoreDone(); + /** + * Reboot simulator. Clears all Events. + */ + void reboot(); + /** + * Reboot finished: Callback from Simulator + */ + void rebootDone(); + /** + * Terminate simulator + * @param exCode Individual exit code + */ + void terminate(int exCode = EXIT_SUCCESS); + #ifdef DEBUG + /** + * Enables instruction pointer debugging output. + * @param regularity the output regularity; 1 to display every + * instruction pointer, 0 to disable + * @param dest specifies the output destition; defaults to \c std::cout + */ + void dbgEnableInstrPtrOutput(unsigned regularity, std::ostream* dest = &cout); + #endif +}; + +} // end-of-namespace: sal + +#endif /* __BOCHS_CONTROLLER_HPP__ */ diff --git a/core/SAL/bochs/BochsMemory.hpp b/core/SAL/bochs/BochsMemory.hpp new file mode 100644 index 00000000..597b7b79 --- /dev/null +++ b/core/SAL/bochs/BochsMemory.hpp @@ -0,0 +1,115 @@ +#ifndef __BOCHS_MEMORY_HPP__ + #define __BOCHS_MEMORY_HPP__ + +#include "../Memory.hpp" + +namespace sal +{ + +/** + * \class BochsMemoryManager + * Represents a concrete implemenation of the abstract + * MemoryManager to provide access to Bochs' memory pool. + */ +class BochsMemoryManager : public MemoryManager +{ + public: + /** + * Constructs a new MemoryManager object and initializes + * it's attributes appropriately. + */ + BochsMemoryManager() : MemoryManager() { } + /** + * Retrieves the size of the available simulated memory. + * @return the size of the memory pool in bytes + */ + size_t getPoolSize() const + { + return (static_cast(BX_MEM(0)->get_memory_len())); + } + /** + * Retrieves the starting address of the host memory. This is the + * first valid address in memory. + * @return the starting address + */ + host_address_t getStartAddr() const + { + return (0); + } + /** + * Retrieves the byte at address \a addr in the memory. + * @param addr The guest address where the byte is located. + * The address is expected to be valid. + * @return the byte at \a addr + */ + byte_t getByte(guest_address_t addr) + { + host_address_t haddr = guestToHost(addr); + assert(haddr != (host_address_t)ADDR_INV && "FATAL ERROR: Invalid guest address provided!"); + return (static_cast(*reinterpret_cast(haddr))); + } + /** + * Retrieves \a cnt bytes at address \a addr in the memory. + * @param addr The guest address where the bytes are located. + * The address is expected to be valid. + * @param cnt The number of bytes to be retrieved. \a addr + \a cnt + * is expected to not exceed the memory limit. + * @param dest The destination buffer to write the bytes to + */ + void getBytes(guest_address_t addr, size_t cnt, std::vector& dest) + { + for(size_t i = 0; i < cnt; i++) + dest.push_back(getByte(addr+i)); + } + /** + * Writes the byte \a data to memory. + * @param addr The guest address to write. + * The address is expected to be valid. + * @param data The new byte to write + */ + void setByte(guest_address_t addr, byte_t data) + { + host_address_t haddr = guestToHost(addr); + assert(haddr != (host_address_t)ADDR_INV && + "FATAL ERROR: Invalid guest address provided!"); + *reinterpret_cast(haddr) = data; + } + /** + * Writes the bytes \a data to memory. Consequently \c data.size() + * bytes will be written. + * @param addr The guest address to write. + * The address is expected to be valid. + * @param data The new bytes to write + */ + void setBytes(guest_address_t addr, const std::vector& data) + { + for(size_t i = 0; i < data.size(); i++) + setByte(addr+i, data[i]); + } + /** + * Transforms the guest address \a addr to a host address. + * @param addr The (logical) guest address to be transformed + * @return the transformed (host) address or \c ADDR_INV on errors + */ + host_address_t guestToHost(guest_address_t addr) + { + const unsigned SEGMENT_SELECTOR_IDX = 2; // always the code segment + const bx_address logicalAddr = static_cast(addr); // offset within the segment + // Get the linear address: + Bit32u linearAddr = BX_CPU(0)->get_laddr32(SEGMENT_SELECTOR_IDX/*seg*/, logicalAddr/*offset*/); + // Map the linear address to the physical address: + bx_phy_address physicalAddr; + bx_bool fValid = BX_CPU(0)->dbg_xlate_linear2phy(linearAddr, (bx_phy_address*)&physicalAddr); + // Determine the *host* address of the physical address: + Bit8u* hostAddr = BX_MEM(0)->getHostMemAddr(BX_CPU(0), physicalAddr, BX_READ); + // Now, hostAddr contains the "final" address + if(!fValid) + return ((host_address_t)ADDR_INV); // error + else + return (reinterpret_cast(hostAddr)); // okay + } +}; + +} + +#endif diff --git a/core/SAL/bochs/BochsRegister.hpp b/core/SAL/bochs/BochsRegister.hpp new file mode 100644 index 00000000..7525eded --- /dev/null +++ b/core/SAL/bochs/BochsRegister.hpp @@ -0,0 +1,219 @@ +#ifndef __BOCHS_REGISTER_HPP__ + #define __BOCHS_REGISTER_HPP__ + +#include "../Register.hpp" + +#include "../../../bochs/bochs.h" +#include + +namespace sal { + +/** + * \class BochsRegister + * Bochs-specific implementation of x86 registers. + */ +class BochsRegister : public Register +{ + protected: + regdata_t* m_pData; + public: + /** + * Constructs a new register object. + * @param id the global unique id + * @param width width of the register (8, 16, 32 or 64 bit should + * suffice) + * @param link pointer to bochs interal register memory + * @param t type of the register + */ + BochsRegister(unsigned int id, regwidth_t width, regdata_t* link, RegisterType t) + : Register(id, t, width), m_pData(link) { } + /** + * Retrieves the data of the register. + * @return the current register data + */ + regdata_t getData() { return (*m_pData); } + /** + * Sets the content of the register. + * @param data the new register data to be written + */ + virtual void setData(regdata_t data) { *m_pData = data; } +}; + +/** + * \class BxGPReg + * Bochs-specific implementation of x86 general purpose (GP) registers. + */ +class BxGPReg : public BochsRegister +{ + public: + /** + * Constructs a new general purpose register. + * @param id the global unique id + * @param width width of the register (8, 16, 32 or 64 bit should + * suffice) + * @param link pointer to bochs interal register memory + */ + BxGPReg(unsigned int id, regwidth_t width, regdata_t* link) + : BochsRegister(id, width, link, RT_GP) { } +}; + +/** + * \enum GPRegisterId + * Symbolic identifier to access Bochs' general purpose register + * (within the corresponding GP set), e.g. + * \code + * // Print %eax register data: + * BochsController bc(...); + * cout << bc.getRegisterManager().getSetOfType(RT_GP) + * .getRegister(RID_EAX)->getData(); + * \endcode + */ +enum GPRegisterId +{ + #if BX_SUPPORT_X86_64 // 64 bit register id's: + RID_RAX = 0, RID_RCX, RID_RDX, RID_RBX, RID_RSP, RID_RBP, RID_RSI, RID_RDI, + RID_R8, RID_R9, RID_R10, RID_R11, RID_R12, RID_R13, RID_R14, RID_R15, + #else // 32 bit register id's: + RID_EAX = 0, RID_ECX, RID_EDX, RID_EBX, RID_ESP, RID_EBP, RID_ESI, RID_EDI, + #endif + RID_LAST_GP_ID +}; + +/** + * \enum PCRegisterId + * Symbolic identifier to access Bochs' program counter register. + */ +enum PCRegisterId { RID_PC = RID_LAST_GP_ID, RID_LAST_PC_ID }; + +/** + * \enum FlagsRegisterId + * Symbolic identifier to access Bochs' flags register. + */ +enum FlagsRegisterId { RID_FLAGS = RID_LAST_PC_ID }; + +/** + * \class BxPCReg + * Bochs-specific implementation of the x86 program counter register. + */ +class BxPCReg : public BochsRegister +{ + public: + /** + * Constructs a new program counter register. + * @param id the global unique id + * @param width width of the register (8, 16, 32 or 64 bit should + * suffice) + * @param link pointer to bochs internal register memory + */ + BxPCReg(unsigned int id, regwidth_t width, regdata_t* link) + : BochsRegister(id, width, link, RT_PC) { } +}; + +/** + * \class BxFlagsReg + * Bochs-specific implementation of the FLAGS status register. + */ +class BxFlagsReg : public BochsRegister +{ + public: + /** + * Constructs a new FLAGS status register. The refenced FLAGS are + * allocated as follows: + * -------------------------------------------------- + * 31|30|29|28| 27|26|25|24| 23|22|21|20| 19|18|17|16 + * ==|==|=====| ==|==|==|==| ==|==|==|==| ==|==|==|== + * 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|ID|VP| VF|AC|VM|RF + * + * 15|14|13|12| 11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0 + * ==|==|=====| ==|==|==|==| ==|==|==|==| ==|==|==|== + * 0|NT| IOPL| OF|DF|IF|TF| SF|ZF| 0|AF| 0|PF| 1|CF + * -------------------------------------------------- + * @param id the global unique id + * @param link pointer to bochs internal register memory + */ + BxFlagsReg(unsigned int id, regdata_t* link) + : BochsRegister(id, 32, link, RT_ST) { } + + /** + * Returns \c true if the corresponding flag is set, or \c false + * otherwise. + */ + bool getCarryFlag() const { return (BX_CPU(0)->get_CF()); } + bool getParityFlag() const { return (BX_CPU(0)->get_PF()); } + bool getZeroFlag() const { return (BX_CPU(0)->get_ZF()); } + bool getSignFlag() const { return (BX_CPU(0)->get_SF()); } + bool getOverflowFlag() const { return (BX_CPU(0)->get_OF()); } + + /** + * Sets/resets various status FLAGS. + */ + void setCarryFlag(bool bit) { BX_CPU(0)->set_CF(bit); } + void setParityFlag(bool bit) { BX_CPU(0)->set_PF(bit); } + void setZeroFlag(bool bit) { BX_CPU(0)->set_ZF(bit); } + void setSignFlag(bool bit) { BX_CPU(0)->set_SF(bit); } + void setOverflowFlag(bool bit) { BX_CPU(0)->set_OF(bit); } + + /** + * Sets the content of the status register. + * @param data the new register data to be written; note that only the + * 32 lower bits are used (bits 32-63 are ignored in 64 bit mode) + */ + void setData(regdata_t data) + { + #ifdef BX_SUPPORT_X86_64 + // We are in 64 bit mode: Just assign the lower 32 bits! + (*m_pData) = ((*m_pData) & 0xFFFFFFFF00000000ULL) | + (data & 0xFFFFFFFFULL); + #else + *m_pData = data; + #endif + } +}; + +/** + * \class BochsRegister + * Bochs-specific implementation of the RegisterManager. + */ +class BochsRegisterManager : public RegisterManager +{ + public: + /** + * Returns the current instruction pointer. + * @return the current eip + */ + address_t getInstructionPointer() + { + return (static_cast( + getSetOfType(RT_PC)->first()->getData() + )); + } + /** + * Retruns the top address of the stack. + * @return the starting address of the stack + */ + address_t getStackPointer() + { + #if BX_SUPPORT_X86_64 + return (static_cast(getRegister(RID_RSP)->getData())); + #else + return (static_cast(getRegister(RID_ESP)->getData())); + #endif + } + /** + * Retrieves the base ptr (holding the address of the + * current stack frame). + * @return the base pointer + */ + address_t getBasePointer() + { + #if BX_SUPPORT_X86_64 + return (static_cast(getRegister(RID_RBP)->getData())); + #else + return (static_cast(getRegister(RID_EBP)->getData())); + #endif + } +}; + +} // end-of-namespace: sal + +#endif /* __BOCHS_REGISTER_HPP__ */ diff --git a/core/SAL/bochs/CPULoop.ah b/core/SAL/bochs/CPULoop.ah new file mode 100644 index 00000000..ec3c3c63 --- /dev/null +++ b/core/SAL/bochs/CPULoop.ah @@ -0,0 +1,35 @@ +#ifndef __CPU_LOOP_AH__ + #define __CPU_LOOP_AH__ + +#include "../../AspectConfig.hpp" + +#if CONFIG_EVENT_CPULOOP == 1 + +#include "../../../bochs/bochs.h" // for "BX_CPU_C" +#include "../../../bochs/cpu/cpu.h" // for "bxInstruction_c" +#include "../SALInst.hpp" + +aspect CPULoop +{ + pointcut cpuLoop() = "void defineCPULoopJoinPoint(...)"; + + // + // Event source: "instruction pointer" + // + advice execution (cpuLoop()) : after () + { + // Points to the cpu class: "this" if BX_USE_CPU_SMF == 0, + // BX_CPU(0) otherwise + BX_CPU_C* pThis = *(tjp->arg<0>()); + // Points to the *current* bxInstruction-object + bxInstruction_c* pInstr = *(tjp->arg<1>()); + + // report this event to the Bochs controller: + sal::simulator.onInstrPtrChanged(pThis->get_instruction_pointer()); + // Note: get_bx_opcode_name(pInstr->getIaOpcode()) retrieves the mnemonics. + } +}; + +#endif // CONFIG_EVENT_CPULOOP + +#endif /* __CPU_LOOP_AH__ */ diff --git a/core/SAL/bochs/Controller.cc b/core/SAL/bochs/Controller.cc new file mode 100644 index 00000000..bcba4064 --- /dev/null +++ b/core/SAL/bochs/Controller.cc @@ -0,0 +1,179 @@ +#include "BochsController.hpp" +#include "BochsMemory.hpp" +#include "BochsRegister.hpp" +#include "../Register.hpp" + +namespace sal +{ + +bx_bool restore_bochs_request = false; +bx_bool save_bochs_request = false; +bx_bool reboot_bochs_request = false; +std::string sr_path = ""; + +BochsController::BochsController() + : SimulatorController(new BochsRegisterManager(), new BochsMemoryManager()) +{ + // ------------------------------------- + // Add the general purpose register: + #if BX_SUPPORT_X86_64 + // -- 64 bit register -- + const string names[] = { "RAX", "RCX", "RDX", "RBX", "RSP", "RBP", "RSI", + "RDI", "R8", "R9", "R10", "R11", "R12", "R13", + "R14", "R15" }; + for(unsigned short i = 0; i < 16; i++) + { + BxGPReg* pReg = new BxGPReg(i, 64, &(BX_CPU(0)->gen_reg[i].rrx)); + pReg->setName(names[i]); + m_Regs->add(pReg); + } + #else + // -- 32 bit register -- + const string names[] = { "EAX", "ECX", "EDX", "EBX", "ESP", "EBP", "ESI", + "EDI" }; + for(unsigned short i = 0; i < 8; i++) + { + BxGPReg* pReg = new BxGPReg(i, 32, &(BX_CPU(0)->gen_reg[i].dword.erx)); + pReg->setName(names[i]); + m_Regs->add(pReg); + } + #endif // BX_SUPPORT_X86_64 + #ifdef DEBUG + m_Regularity = 0; // disabled + m_Counter = 0; + m_pDest = NULL; + #endif + // ------------------------------------- + // Add the Program counter register: + #if BX_SUPPORT_X86_64 + BxPCReg* pPCReg = new BxPCReg(RID_PC, 64, &(BX_CPU(0)->gen_reg[BX_64BIT_REG_RIP].rrx)); + pPCReg->setName("RIP"); + #else + BxPCReg* pPCReg = new BxPCReg(RID_PC, 32, &(BX_CPU(0)->gen_reg[BX_32BIT_REG_EIP].dword.erx)); + pFlagReg->setName("EIP"); + #endif // BX_SUPPORT_X86_64 + // ------------------------------------- + // Add the Status register (x86 cpu FLAGS): + BxFlagsReg* pFlagReg = new BxFlagsReg(RID_FLAGS, reinterpret_cast(&(BX_CPU(0)->eflags))); + // Note: "eflags" is (always) of type Bit32u which matches the regdata_t only in + // case of the 32 bit version (id est !BX_SUPPORT_X86_64). Therefor we need + // to ensure to assign only 32 bit to the Bochs internal register variable + // (see SAL/bochs/BochsRegister.hpp, setData) if we are in 64 bit mode. + pFlagReg->setName("FLAGS"); + m_Regs->add(pFlagReg); + m_Regs->add(pPCReg); +} + +BochsController::~BochsController() +{ + for(RegisterManager::iterator it = m_Regs->begin(); it != m_Regs->end(); it++) + delete (*it); // free the memory, allocated in the constructor + m_Regs->clear(); + delete m_Regs; + delete m_Mem; +} + +#ifdef DEBUG +void BochsController::dbgEnableInstrPtrOutput(unsigned regularity, std::ostream* dest) +{ + m_Regularity = regularity; + m_pDest = dest; + m_Counter = 0; +} +#endif // DEBUG + +void BochsController::onInstrPtrChanged(address_t instrPtr) +{ + #ifdef DEBUG + if(m_Regularity != 0 && ++m_Counter % m_Regularity == 0) + (*m_pDest) << "0x" << std::hex << instrPtr; + #endif + // Check for active breakpoint-events: + fi::EventList::iterator it = m_EvList.begin(); + while(it != m_EvList.end()) + { + // FIXME: Performance verbessern (dazu muss entsprechend auch die Speicherung + // in EventList(.cc|.hpp) angepasst bzw. verbessert werden). + fi::BPEvent* pEvBreakpt = dynamic_cast(*it); + if(pEvBreakpt && (instrPtr == pEvBreakpt->getWatchInstructionPointer() || + pEvBreakpt->getWatchInstructionPointer() == fi::ANY_ADDR)) + { + pEvBreakpt->setTriggerInstructionPointer(instrPtr); + it = m_EvList.makeActive(it); + // "it" has already been set to the next element (by calling + // makeActive()): + continue; // -> skip iterator increment + } + fi::BPRangeEvent* pEvRange = dynamic_cast(*it); + if(pEvRange && pEvRange->isMatching(instrPtr)) + { + pEvBreakpt->setTriggerInstructionPointer(instrPtr); + it = m_EvList.makeActive(it); + continue; // dito. + } + it++; + } + m_EvList.fireActiveEvents(); + // Note: SimulatorController::onBreakpointEvent will not be invoked in this + // implementation. +} + +void BochsController::save(const string& path) +{ + int stat; + + stat = mkdir(path.c_str(), 0777); + if(!(stat == 0 || errno == EEXIST)) + std::cout << "[FAIL] Can not create target-directory to save!" << std::endl; + // TODO: (Non-)Verbose-Mode? Maybe better: use return value to indicate failure? + + save_bochs_request = true; + sr_path = path; + m_CurrFlow = m_Flows.getCurrent(); + m_Flows.resume(); +} + +void BochsController::saveDone() +{ + save_bochs_request = false; + m_Flows.toggle(m_CurrFlow); +} + +void BochsController::restore(const string& path) +{ + clearEvents(); + restore_bochs_request = true; + sr_path = path; + m_CurrFlow = m_Flows.getCurrent(); + m_Flows.resume(); +} + +void BochsController::restoreDone() +{ + restore_bochs_request = false; + m_Flows.toggle(m_CurrFlow); +} + +void BochsController::reboot() +{ + clearEvents(); + reboot_bochs_request = true; + m_CurrFlow = m_Flows.getCurrent(); + m_Flows.resume(); +} + +void BochsController::rebootDone() +{ + reboot_bochs_request = false; + m_Flows.toggle(m_CurrFlow); +} + +void BochsController::terminate(int exCode) +{ + // Attention: This could cause Problems, e.g. because of non-closed sockets + std::cout << "[FAIL] Exit called by experiment with exit code: " << exCode << std::endl; + // TODO: (Non-)Verbose-Mode? + exit(exCode); +} + +} // end-of-namespace: sal diff --git a/core/SAL/bochs/GuestSysCom.ah b/core/SAL/bochs/GuestSysCom.ah new file mode 100644 index 00000000..f6a2efd9 --- /dev/null +++ b/core/SAL/bochs/GuestSysCom.ah @@ -0,0 +1,37 @@ +#ifndef __GUESTSYS_COM_AH__ + #define __GUESTSYS_COM_AH__ + +#include "../../AspectConfig.hpp" + +#if CONFIG_EVENT_GUESTSYS == 1 + +#include "../../../bochs/bochs.h" +#include "../../../bochs/cpu/cpu.h" +#include "../SALInst.hpp" + +#include "bochs_helpers.hpp" + +// Fixed "port number" for "Guest system >> Bochs" communication +#define BOCHS_COM_PORT 0x378 + +aspect GuestSysCom +{ + + pointcut outInstructions() = "% ...::bx_cpu_c::OUT_DX%(...)"; + + advice execution (outInstructions()) : after () + { + // + // Event source: "guest system" + // + unsigned rDX = getCPU(tjp->that())->gen_reg[2].word.rx; // port number + unsigned rAL = getCPU(tjp->that())->gen_reg[0].word.byte.rl; // data + if (rDX == BOCHS_COM_PORT) { + sal::simulator.onGuestSystemEvent((char)rAL, rDX); + } + } +}; + +#endif // CONFIG_EVENT_GUESTSYS + +#endif /* __GUESTSYS_COM_AH__ */ diff --git a/core/SAL/bochs/Interrupt.ah b/core/SAL/bochs/Interrupt.ah new file mode 100644 index 00000000..7c0f08de --- /dev/null +++ b/core/SAL/bochs/Interrupt.ah @@ -0,0 +1,40 @@ +#ifndef __INTERRUPT_AH__ + #define __INTERRUPT_AH__ + +#include "../../AspectConfig.hpp" + +#if CONFIG_EVENT_INTERRUPT == 1 + +#include "../../../bochs/bochs.h" +#include "../../../bochs/cpu/cpu.h" +#include "../SALInst.hpp" + +aspect Interrupt +{ + // cpu/exception.cc + pointcut interrupt_method() = "void bx_cpu_c::interrupt(...)"; + + advice execution (interrupt_method()) : before () + { + // There are six different type-arguments for the interrupt-method + // in cpu.h (lines 3867-3872): + // - BX_EXTERNAL_INTERRUPT = 0, + // - BX_NMI = 2, + // - BX_HARDWARE_EXCEPTION = 3, + // - BX_SOFTWARE_INTERRUPT = 4, + // - BX_PRIVILEGED_SOFTWARE_INTERRUPT = 5, + // - BX_SOFTWARE_EXCEPTION = 6 + // Only the first and the second types are relevant for this aspect. + + unsigned vector = *(tjp->arg<0>()); + unsigned type = *(tjp->arg<1>()); + if(type == BX_EXTERNAL_INTERRUPT) + sal::simulator.onInterruptEvent(vector, false); + else if(type == BX_NMI) + sal::simulator.onInterruptEvent(vector, true); + } +}; + +#endif // CONFIG_EVENT_INTERRUPT + +#endif /* __INTERRUPT_AH__ */ diff --git a/core/SAL/bochs/Interrupt_suppression.ah b/core/SAL/bochs/Interrupt_suppression.ah new file mode 100644 index 00000000..2912a343 --- /dev/null +++ b/core/SAL/bochs/Interrupt_suppression.ah @@ -0,0 +1,28 @@ +#ifndef __INTERRUPT_SUPPRESSION_AH__ + #define __INTERRUPT_SUPPRESSION_AH__ + +#include "../../AspectConfig.hpp" + +#if CONFIG_SUPPRESS_INTERRUPTS == 1 + +#include "../../../bochs/bochs.h" +#include "../../../bochs/cpu/cpu.h" +#include "../SALInst.hpp" + +aspect Interrupt_FI +{ + pointcut interrupt_method() = "void bx_cpu_c::interrupt(...)"; + + advice execution (interrupt_method()) : around () + { + unsigned type = *(tjp->arg<1>()); + + if(!sal::simulator.isSuppressedInterrupt(type)){ + tjp->proceed(); + } + } +}; + +#endif // CONFIG_SUPPRESS_INTERRUPTS + +#endif /* __INTERRUPT_SUPPRESSION_AH__ */ diff --git a/core/SAL/bochs/Jump.ah b/core/SAL/bochs/Jump.ah new file mode 100644 index 00000000..8c40074a --- /dev/null +++ b/core/SAL/bochs/Jump.ah @@ -0,0 +1,139 @@ +#ifndef __JUMP_AH__ + #define __JUMP_AH__ + +#include "../../AspectConfig.hpp" + +#if CONFIG_EVENT_JUMP == 1 + +#include +#include +#include +#include +#include "../../../bochs/bochs.h" +#include "../SALInst.hpp" + +using namespace std; + +aspect Jump +{ + // Note: Have a look at the Bochs-Code (cpu/cpu.h) and the Intel + // Architecture Software Developer's Manual - Instruction Set Reference + // p. 3-329 (PDF p. 369) for further information: + // http://www.intel.com/design/intarch/manuals/243191.htm + + // Default conditional-jump instructions: they are evaluating the FLAGS, + // defined in ctrl_xfer[16 | 32 | 64].cc, Postfix: 16-Bit: w, 32-Bit: d, 64-Bit: q + pointcut defJumpInstructions() = + "% ...::bx_cpu_c::JO_J%(...)" || + "% ...::bx_cpu_c::JNO_J%(...)" || + "% ...::bx_cpu_c::JB_J%(...)" || + "% ...::bx_cpu_c::JNB_J%(...)" || + "% ...::bx_cpu_c::JZ_J%(...)" || + "% ...::bx_cpu_c::JNZ_J%(...)" || + "% ...::bx_cpu_c::JBE_J%(...)" || + "% ...::bx_cpu_c::JNBE_J%(...)" || + "% ...::bx_cpu_c::JS_J%(...)" || + "% ...::bx_cpu_c::JNS_J%(...)" || + "% ...::bx_cpu_c::JP_J%(...)" || + "% ...::bx_cpu_c::JNP_J%(...)" || + "% ...::bx_cpu_c::JL_J%(...)" || + "% ...::bx_cpu_c::JNL_J%(...)" || + "% ...::bx_cpu_c::JLE_J%(...)" || + "% ...::bx_cpu_c::JNLE_J%(...)"; + + // Special cases: they are evaluating the content of the CX-/ECX-/RCX-registers + // (NOT the FLAGS): + pointcut regJumpInstructions() = + "% ...::bx_cpu_c::JCXZ_Jb(...)" || // ctrl_xfer16.cc + "% ...::bx_cpu_c::JECXZ_Jb(...)" || // ctrl_xfer32.cc + "% ...::bx_cpu_c::JRCXZ_Jb(...)"; // ctrl_xfer64.cc + +/* TODO: Loop-Instructions needed? Example: "LOOPNE16_Jb" + pointcut loopInstructions() = ...; + +*/ +/* TODO: Conditional-Data-Moves needed? Example: "CMOVZ_GwEwR" + pointcut dataMoveInstructions() = ...; + +*/ + advice execution (defJumpInstructions()) : around() + { + bxInstruction_c* pInstr = *(tjp->arg<0>()); // bxInstruction_c-object + sal::simulator.onJumpEvent(true, pInstr->getIaOpcode()); +/* + JoinPoint::That* pThis = tjp->that(); + if(pThis == NULL) + pThis = BX_CPU(0); + assert(pThis != NULL && "FATAL ERROR: tjp->that() returned null ptr! (Maybe called on a static instance?)"); + // According to the Intel-Spec (p. 3-329f), the following flags are relevant: + bool fZeroFlag = pThis->get_ZF(); + bool fCarryFlag = pThis->get_CF(); + bool fSignFlag = pThis->get_SF(); + bool fOverflowFlag = pThis->get_OF(); + bool fParityFlag = pThis->get_PF(); + + // + // Step-1: Modify one or more of the fxxxFlag according to the error you want to inject + // (using pThis->set_XX(new_val)) + // Step-2: Call tjp->proceed(); + // Step-3: Eventually, unwind the changes of Step-1 + // + + // Example: + if(g_fEnableInjection) // event fired? + { + g_fEnableInjection = false; + // Obviously, this advice matches *all* jump-instructions so that it is not clear + // which flag have to be modified in order to invert the jump. For simplification, + // we will invert *all* flags. This avoids a few case differentiations. + cout << ">>> Manipulating jump-destination (inverted)... \"" << tjp->signature() << "\" "; + pThis->set_ZF(!fZeroFlag); + pThis->set_SF(!fSignFlag); + pThis->set_CF(!fCarryFlag); + pThis->set_OF(!fOverflowFlag); + pThis->set_PF(!fParityFlag); + tjp->proceed(); + pThis->set_ZF(fZeroFlag); + pThis->set_SF(fSignFlag); + pThis->set_CF(fCarryFlag); + pThis->set_OF(fOverflowFlag); + pThis->set_PF(fParityFlag); + cout << "finished (jump taken)!" << endl; + } + else +*/ + tjp->proceed(); + } + + advice execution (regJumpInstructions()) : around () + { + bxInstruction_c* pInstr = *(tjp->arg<0>()); // bxInstruction_c-object + sal::simulator.onJumpEvent(false, pInstr->getIaOpcode()); +/* + JoinPoint::That* pThis = tjp->that(); + + assert(pThis != NULL && "Unexpected: tjp->that() returned null ptr! (Maybe called on a static instance?)"); + + // Note: Direct access to the registers using the bochs-macros (defined in + // bochs.h) is not possibly due to the fact that they are using the this-ptr. + + Bit16u CX = (Bit16u)(pThis->gen_reg[1].word.rx); + Bit32u ECX = (Bit32u)(pThis->gen_reg[1].dword.erx); + #if BX_SUPPORT_X86_64 + Bit64u RCX = (Bit64u)(pThis->gen_reg[1].rrx); + #endif + + // + // Step-1: Modify CX, ECX or RCX according to the error you want to inject + // Step-2: Call tjp->proceed(); + // Step-3: Eventually, unwind the changes of Step-1 + // +*/ + tjp->proceed(); + } +}; + +#endif // CONFIG_EVENT_JUMP + +#endif /* __JUMP_AH__ */ + diff --git a/core/SAL/bochs/JumpToPreviousCtx.ah b/core/SAL/bochs/JumpToPreviousCtx.ah new file mode 100644 index 00000000..5029c602 --- /dev/null +++ b/core/SAL/bochs/JumpToPreviousCtx.ah @@ -0,0 +1,33 @@ +#ifndef __JUMP_TO_PREVIOUS_CTX_AH__ + #define __JUMP_TO_PREVIOUS_CTX_AH__ + +#include "../../AspectConfig.hpp" + +#if 0 +// #if CONFIG_SR_RESTORE == 1 || CONFIG_SR_REBOOT == 1 + +#include "bochs.h" +#include "../SALInst.hpp" + +aspect jumpToPreviousCtx +{ + pointcut end_reset_handler() = "void bx_gui_c::reset_handler(...)"; + //|| "int bxmain()"; + + + advice execution (end_reset_handler()) : after () + { + + if (sal::restore_bochs_request || sal::reboot_bochs_request ) + { + sal::restore_bochs_request = false; + sal::reboot_bochs_request = false; + sal::simulator.toPreviousCtx(); + } + + } +}; + +#endif // CONFIG_SR_RESTORE == 1 || CONFIG_SR_REBOOT + +#endif // __JUMP_TO_PREVIOUS_CTX_AH__ diff --git a/core/SAL/bochs/MemAccessBitFlip.ah b/core/SAL/bochs/MemAccessBitFlip.ah new file mode 100644 index 00000000..a6841b5d --- /dev/null +++ b/core/SAL/bochs/MemAccessBitFlip.ah @@ -0,0 +1,100 @@ +#ifndef __MEM_ACCESS_BIT_FLIP_AH__ + #define __MEM_ACCESS_BIT_FLIP_AH__ + +#include "../../AspectConfig.hpp" + +#if CONFIG_FI_MEM_ACCESS_BITFLIP == 1 + +#include +#include +#include +#include "bochs.h" + +#include "../../controller/EventList.hpp" +#include "../../controller/Event.hpp" + +using namespace std; + +// FIXME this code doesn't make any sense for the read_virtual_% functions +// (the fault would need to be injected into their *return* value) + +aspect MemAccessBitFlip +{ + pointcut injection_methods() + = "% ...::bx_cpu_c::read_virtual_%(...)" || // -> access32/64.cc +/* + "% ...::bx_cpu_c::read_RMW_virtual_%(...)" || // -> access32.cc + "% ...::bx_cpu_c::system_read_%(...)" || // -> access.cc + "% ...::bx_cpu_c::v2h_read_byte(...)" || // -> access.cc +*/ + "% ...::bx_cpu_c::write_virtual_%(...)"; // -> access32/64.cc +/* + "% ...::bx_cpu_c::write_RMW_virtual_%(...)" || // -> access32.cc + "% ...::bx_cpu_c::write_new_stack_%(...)" || // -> access32/64.cc + "% ...::bx_cpu_c::system_write_%(...)" || // -> access.cc + "% ...::bx_cpu_c::v2h_write_byte(...)"; // -> access.cc +*/ + + + // + // Injects a bitflip each time the guest system requests to write/read + // data to/from RAM at the (hardcoded) addresses defined above: + // + // Event source: "memory write/read access" + // + advice execution (injection_methods()) : before () + { + for(size_t i = 0; i < fi::evbuf.getEventCount(); i++) // check for active events + { + fi::SimpleBitFlip* pEv = dynamic_cast(fi::evbuf.getEvent(i)); // FIXME: Performance verbessern + if(pEv && *(tjp->arg<1>())/*typed!*/ == pEv->getAddress()) + { + cout << " " << tjp->signature() << endl; + + // Get a pointer to the data that should be written to RAM + // *before* it is actually written: + Bit32u* pData = (Bit32u*)(tjp->arg(JoinPoint::ARGS-1)); + + // Flip bit at position pEv->getBitPos(): + char* ptr = (char*)pData; // For simplification we're just looking at the + // first byte of the data + ptr[0] = (ptr[0]) ^ (pEv->getMask() << pEv->getBitPos()); + + cout << " >>> Bit flipped at index " << pEv->getBitPos() + << " at address 0x" << hex << (*(tjp->arg<1>())) << "!" << endl; + fi::evbuf.fireEvent(pEv); + // Continue... (maybe more events to process) + } + } + } +/* + // + // Shows the mapping of a virtual address (within eCos) to a *host* address: + // + if(g_fEnableInjection) // event fired? + { + g_fEnableInjection = false; + const unsigned SEGMENT_SELECTOR_IDX = 2; // always the code segment (seg-base-addr should be zero) + const bx_address logicalAddr = MEM_ADDR_TO_INJECT; // offset within the segment ("local eCos address") + + // Get the linear address: + Bit32u linearAddr = pThis->get_laddr32(SEGMENT_SELECTOR_IDX/ *seg* /, logicalAddr/ *offset* /); + // Map the linear address to the physical address: + bx_phy_address physicalAddr; + bx_bool fValid = pThis->dbg_xlate_linear2phy(linearAddr, (bx_phy_address*)&physicalAddr); + // Determine the *host* address of the physical address: + Bit8u* hostAddr = BX_MEM(0)->getHostMemAddr(pThis, physicalAddr, BX_READ); + // Now, hostAddr contains the "final" address where we are allowed to inject errors: + *(unsigned*)hostAddr = BAD_VALUE; // inject error + if(!fValid) + printf("[Error]: Could not map logical address to host address.\n"); + else + printf("[Info]: Error injected at logical addr %p (host addr %p).\n", logicalAddr, hostAddr); + } +*/ +}; + +#endif // CONFIG_FI_MEM_ACCESS_BITFLIP + +#endif // __MEM_ACCESS_BIT_FLIP_AH__ + diff --git a/core/SAL/bochs/MemEvents.ah b/core/SAL/bochs/MemEvents.ah new file mode 100644 index 00000000..99992071 --- /dev/null +++ b/core/SAL/bochs/MemEvents.ah @@ -0,0 +1,146 @@ +#ifndef __MEM_EVENTS_AH__ + #define __MEM_EVENTS_AH__ + +#include +#include "../../AspectConfig.hpp" + +#if CONFIG_EVENT_MEMREAD == 1 || CONFIG_EVENT_MEMWRITE == 1 + +#include "../../../bochs/bochs.h" +#include "../../../bochs/cpu/cpu.h" +#include "../SALInst.hpp" + +#include "bochs_helpers.hpp" + +// FIXME we currently assume a "flat" memory model and ignore the segment +// parameter of all memory accesses +// TODO instruction fetch? +// TODO warn on uncovered memory accesses +aspect MemEvents +{ + sal::address_t rmw_address; + + pointcut write_methods() = + "% ...::bx_cpu_c::write_virtual_%(...)" && // -> access32/64.cc + // not an actual memory access: + !"% ...::bx_cpu_c::write_virtual_checks(...)"; + pointcut write_methods_RMW() = + "% ...::bx_cpu_c::write_RMW_virtual_%(...)"; + pointcut write_methods_new_stack() = + "% ...::bx_cpu_c::write_new_stack_%(...)" && // -> access32.cc + !"% ...::bx_cpu_c::write_new_stack_%_64(...)"; + pointcut write_methods_new_stack_64() = + "% ...::bx_cpu_c::write_new_stack_%_64(...)"; // -> access64.cc + pointcut write_methods_system() = + "% ...::bx_cpu_c::system_write_%(...)"; // -> access.cc + // FIXME not covered: + /* "% ...::bx_cpu_c::v2h_write_byte(...)"; // -> access.cc */ + + pointcut read_methods() = + "% ...::bx_cpu_c::read_virtual_%(...)" && + // sizeof() doesn't work here (see next pointcut) + !"% ...::bx_cpu_c::read_virtual_dqword_%(...)" && // -> access32/64.cc + // not an actual memory access: + !"% ...::bx_cpu_c::read_virtual_checks(...)"; + pointcut read_methods_dqword() = + "% ...::bx_cpu_c::read_virtual_dqword_%(...)"; // -> access32/64.cc + pointcut read_methods_RMW() = + "% ...::bx_cpu_c::read_RMW_virtual_%(...)"; + pointcut read_methods_system() = + "% ...::bx_cpu_c::system_read_%(...)"; // -> access.cc + // FIXME not covered: + /* "% ...::bx_cpu_c::v2h_read_byte(...)"; // -> access.cc */ + + // + // Fire a memory-write-event each time the guest system requests + // to write data to RAM: + // + // Event source: "memory write access" + // +#if CONFIG_EVENT_MEMWRITE == 1 + advice execution (write_methods()) : after () { + sal::simulator.onMemoryAccessEvent( + *(tjp->arg<1>()), sizeof(*(tjp->arg<2>())), true, + getCPU(tjp->that())->prev_rip); + } + + advice execution (write_methods_RMW()) : after () { + sal::simulator.onMemoryAccessEvent( + rmw_address, sizeof(*(tjp->arg<0>())), true, + getCPU(tjp->that())->prev_rip); + } + + advice execution (write_methods_new_stack()) : after () { + std::cerr << "WOOOOOT write_methods_new_stack" << std::endl; + sal::simulator.onMemoryAccessEvent( + *(tjp->arg<1>()), sizeof(*(tjp->arg<3>())), true, + getCPU(tjp->that())->prev_rip); + } + + advice execution (write_methods_new_stack_64()) : after () { + std::cerr << "WOOOOOT write_methods_new_stack_64" << std::endl; + sal::simulator.onMemoryAccessEvent( + *(tjp->arg<0>()), sizeof(*(tjp->arg<2>())), true, + getCPU(tjp->that())->prev_rip); + } + + advice execution (write_methods_system()) : after () { + // We don't do anything here for now: This type of memory + // access is used when the hardware itself needs to access + // memory (e.g., to read vectors from the interrupt vector + // table). +/* + sal::simulator.onMemoryAccessEvent( + *(tjp->arg<0>()), sizeof(*(tjp->arg<1>())), true, + getCPU(tjp->that())->prev_rip); +*/ + } +#endif + + // + // Fire a memory-read-event each time the guest system requests + // to read data in RAM: + // + // Event source: "memory read access" + // +#if CONFIG_EVENT_MEMREAD == 1 + advice execution (read_methods()) : before () { + sal::simulator.onMemoryAccessEvent( + *(tjp->arg<1>()), sizeof(*(tjp->result())), false, + getCPU(tjp->that())->prev_rip); + } + + advice execution (read_methods_dqword()) : before () { + sal::simulator.onMemoryAccessEvent( + *(tjp->arg<1>()), 16, false, + getCPU(tjp->that())->prev_rip); + } +#endif + + advice execution (read_methods_RMW()) : before () { + rmw_address = *(tjp->arg<1>()); +#if CONFIG_EVENT_MEMREAD == 1 + sal::simulator.onMemoryAccessEvent( + *(tjp->arg<1>()), sizeof(*(tjp->result())), false, + getCPU(tjp->that())->prev_rip); +#endif + } + +#if CONFIG_EVENT_MEMREAD == 1 + advice execution (read_methods_system()) : before () { + // We don't do anything here for now: This type of memory + // access is used when the hardware itself needs to access + // memory (e.g., to read vectors from the interrupt vector + // table). +/* + sal::simulator.onMemoryAccessEvent( + *(tjp->arg<0>()), sizeof(*(tjp->result())), false, + getCPU(tjp->that())->prev_rip); +*/ + } +#endif +}; + +#endif // CONFIG_EVENT_MEMACCESS + +#endif /* __MEM_EVENTS_AH__ */ diff --git a/core/SAL/bochs/Trap.ah b/core/SAL/bochs/Trap.ah new file mode 100644 index 00000000..ad2cda39 --- /dev/null +++ b/core/SAL/bochs/Trap.ah @@ -0,0 +1,27 @@ +#ifndef __TRAP_AH__ + #define __TRAP_AH__ + +#include "../../AspectConfig.hpp" + +#if CONFIG_EVENT_TRAP == 1 + +#include "../../../bochs/bochs.h" +#include "../../../bochs/cpu/cpu.h" + +#include "../SALInst.hpp" + +aspect Trap +{ + pointcut exception_method() = "void bx_cpu_c::exception(...)"; + + advice execution (exception_method()) : before () + { + sal::simulator.onTrapEvent(*(tjp->arg<0>())); + // TODO: There are some different types of exceptions at cpu.h (line 265-281) + // Which kind of a trap are these types? + } +}; + +#endif // CONFIG_EVENT_TRAP + +#endif /* __TRAP_AH__ */ diff --git a/core/SAL/bochs/bochs_helpers.hpp b/core/SAL/bochs/bochs_helpers.hpp new file mode 100644 index 00000000..31f627b7 --- /dev/null +++ b/core/SAL/bochs/bochs_helpers.hpp @@ -0,0 +1,15 @@ +#ifndef __BOCHS_HELPERS_HPP__ + #define __BOCHS_HELPERS_HPP__ + +#include "../../../bochs/cpu/cpu.h" + +static inline BX_CPU_C *getCPU(BX_CPU_C *that) +{ +#if BX_USE_CPU_SMF == 0 + return that; +#else + return BX_CPU_THIS; +#endif +} + +#endif diff --git a/core/SAL/bochs/credits.ah b/core/SAL/bochs/credits.ah new file mode 100644 index 00000000..3f2c7a9a --- /dev/null +++ b/core/SAL/bochs/credits.ah @@ -0,0 +1,27 @@ +#ifndef __CREDITS_AH__ + #define __CREDITS_AH__ + +#include + +aspect credits { + bool first; + credits() : first(true) {} + + advice call ("% bx_center_print(...)") + && within ("void bx_print_header()") + && args(file, line, maxwidth) + : around (FILE *file, const char *line, unsigned maxwidth) { + if (!first) { + tjp->proceed(); + return; + } + // FIXME take version from global configuration + char buf[256] = "FailBochs 0.0.1, based on the "; + strncat(buf, line, 128); + first = false; + *(tjp->arg<1>()) = buf; + tjp->proceed(); + } +}; + +#endif // __CREDITS_AH__ diff --git a/core/SAL/bochs/disable_add_remove_logfn.ah b/core/SAL/bochs/disable_add_remove_logfn.ah new file mode 100644 index 00000000..95893e7d --- /dev/null +++ b/core/SAL/bochs/disable_add_remove_logfn.ah @@ -0,0 +1,19 @@ +#ifndef __DISABLE_ADD_REMOVE_LOGFN_AH__ + #define __DISABLE_ADD_REMOVE_LOGFN_AH__ + +/* Hack to prevent Bochs' logfunctions list (bochs.h) to overflow if the + * experiment restores simulator state more than ~1000 times. + * + * The "proper" fix would be to completely unregister all log functions before + * restore, i.e. to destroy all objects deriving from class logfunctions. We + * decided to simply ignore this tiny memory leak and to hack around the + * problem by disabling iofunctions::add/remove_logfn(). + */ +aspect DisableLogfn { + pointcut add_remove_logfn() = + "void iofunctions::add_logfn(...)" || + "void iofunctions::remove_logfn(...)"; + advice execution (add_remove_logfn()) : around () {} +}; + +#endif /* __DISABLE_ADD_REMOVE_LOGFN_AH__ */ diff --git a/core/SAL/bochs/disable_keyboard_interrupt.ah b/core/SAL/bochs/disable_keyboard_interrupt.ah new file mode 100644 index 00000000..3640de07 --- /dev/null +++ b/core/SAL/bochs/disable_keyboard_interrupt.ah @@ -0,0 +1,25 @@ +#ifndef __DISABLE_KEYBOARD_INTERRUPT_AH__ + #define __DISABLE_KEYBOARD_INTERRUPT_AH__ + +#include "../../AspectConfig.hpp" + +#if CONFIG_DISABLE_KEYB_INTERRUPTS + +#include "../../../bochs/iodev/keyboard.h" + +aspect DisableKeybInt { + pointcut heyboard_interrupt() = + "void bx_keyb_c::timer_handler(...)"; + + advice execution (heyboard_interrupt()) : around () { + + bx_keyb_c *class_ptr = (bx_keyb_c *) tjp->arg<0>(); + unsigned retval; + + retval=class_ptr->periodic(1); + } +}; + +#endif /* CONFIG_DISABLE_KEYB_INTERRUPTS */ + +#endif /* __DISABLE_KEYBOARD_INTERRUPT_AH__ */ diff --git a/core/SAL/bochs/failbochs.hpp b/core/SAL/bochs/failbochs.hpp new file mode 100644 index 00000000..8571b429 --- /dev/null +++ b/core/SAL/bochs/failbochs.hpp @@ -0,0 +1,21 @@ +#ifndef FAILBOCHS_H +#define FAILBOCHS_H + +#include +#include + +#include "config.h" + +namespace sal{ + + //DanceOS Richard Hellwig +#ifdef DANCEOS_RESTORE + extern bx_bool restore_bochs_request; + extern bx_bool save_bochs_request; + extern bx_bool reboot_bochs_request; + extern std::string sr_path; +#endif + +} + +#endif //FAILBOCHS_H diff --git a/core/SAL/bochs/fireTimer.ah b/core/SAL/bochs/fireTimer.ah new file mode 100644 index 00000000..546d4556 --- /dev/null +++ b/core/SAL/bochs/fireTimer.ah @@ -0,0 +1,27 @@ +#ifndef __FIRETIMER_AH__ + #define __FIRETIMER_AH__ + +#include + + +aspect fireTimer { + + advice "bx_pc_system_c" : slice class { + public: + void fireTimer(Bit32u timerNum){ + if(timerNum <= numTimers){ + if(!timer[timerNum].active){ + std::cout << "[FAIL] WARNING: The selected timer is actually NOT active!" << std::endl; + } + currCountdownPeriod = Bit64u(1); + timer[timerNum].timeToFire = Bit64u(currCountdownPeriod) + ticksTotal; + std::cout << "[FAIL] Timer " << timerNum <<" will fire now!" << std::endl; + }else{ + std::cout << "[FAIL] There are actually only " << numTimers <<" allocated!" << std::endl; + } + } + }; +}; + + +#endif // __FIRETIMER_AH__ diff --git a/core/SAL/bochs/init.ah b/core/SAL/bochs/init.ah new file mode 100644 index 00000000..6d7cfb9f --- /dev/null +++ b/core/SAL/bochs/init.ah @@ -0,0 +1,12 @@ +#ifndef __BXINIT_AH__ + #define __BXINIT_AH__ + +#include "../SALInst.hpp" + +aspect BochsInit { + advice call("int bxmain()") : before () { + sal::simulator.startup(); + } +}; + +#endif // __BXINIT_AH__ diff --git a/core/SAL/bochs/reboot.ah b/core/SAL/bochs/reboot.ah new file mode 100644 index 00000000..ade78023 --- /dev/null +++ b/core/SAL/bochs/reboot.ah @@ -0,0 +1,27 @@ +#ifndef __REBOOT_AH__ + #define __REBOOT_AH__ + +#include "../../AspectConfig.hpp" +#include "../SALInst.hpp" + +#if CONFIG_SR_REBOOT == 1 + +#include "bochs.h" + +aspect reboot { + pointcut cpuLoop() = "void defineCPULoopJoinPoint(...)"; + + advice execution (cpuLoop()) : after () { + if (!sal::reboot_bochs_request) { + return; + } + + bx_gui_c::reset_handler(); + std::cout << "[FAIL] Reboot finished" << std::endl; + sal::simulator.rebootDone(); + } +}; + +#endif // CONFIG_SR_REBOOT + +#endif // __REBOOT_AH__ diff --git a/core/SAL/bochs/restore.ah b/core/SAL/bochs/restore.ah new file mode 100644 index 00000000..5120bdbb --- /dev/null +++ b/core/SAL/bochs/restore.ah @@ -0,0 +1,23 @@ +#ifndef __RESTORE_AH__ + #define __RESTORE_AH__ + +#include +#include "../../AspectConfig.hpp" +#include "../SALInst.hpp" + +#if CONFIG_SR_RESTORE == 1 + +#include "bochs.h" + +aspect restore { + pointcut restoreState() = "void bx_sr_after_restore_state()"; + + advice execution (restoreState()) : after () { + std::cout << "[FAIL] Restore finished" << std::endl; + sal::simulator.restoreDone(); + } +}; + +#endif // CONFIG_SR_RESTORE + +#endif // __RESTORE_AH__ diff --git a/core/SAL/bochs/save.ah b/core/SAL/bochs/save.ah new file mode 100644 index 00000000..11f3130a --- /dev/null +++ b/core/SAL/bochs/save.ah @@ -0,0 +1,32 @@ +#ifndef __SAVE_AH__ + #define __SAVE_AH__ + +#include "../../AspectConfig.hpp" + +#if CONFIG_SR_SAVE == 1 + +#include "bochs.h" +#include "../SALInst.hpp" + +aspect save { + pointcut cpuLoop() = "void defineCPULoopJoinPoint(...)"; + + // make sure the "save" aspect comes *after* the breakpoint stuff: In + // an "after" advice this means it must get a *higher* precedence, + // therefore it's first in the order list. + advice execution (cpuLoop()) : order ("save", "CPULoop"); + + advice execution (cpuLoop()) : after () { + if (!sal::save_bochs_request) { + return; + } + assert(sal::sr_path.size() > 0 && "[FAIL] tried to save state without valid path"); + SIM->save_state(sal::sr_path.c_str()); + std::cout << "[FAIL] Save finished" << std::endl; + sal::simulator.saveDone(); + } +}; + +#endif // CONFIG_SR_SAVE + +#endif // _SAVE_AH__ diff --git a/core/SAL/bochs/stfu.ah b/core/SAL/bochs/stfu.ah new file mode 100644 index 00000000..222c9102 --- /dev/null +++ b/core/SAL/bochs/stfu.ah @@ -0,0 +1,54 @@ +#ifndef __NONVERBOSE_AH__ + #define __NONVERBOSE_AH__ + +#include "../../AspectConfig.hpp" + +#if CONFIG_STFU == 1 + +#include "bochs.h" + +// Doesn't work because AspectC++ doesn't deal properly with variadic parameter +// lists: +/* +aspect nonverbose { + // needed to suppress Bochs output *before* a state restore finished + // FIXME ac++ segfaults if we use call() instead of execution() + advice execution("% logfunctions::debug(...)") + || execution("% logfunctions::info(...)") + || execution("% logfunctions::pass(...)") + || execution("% logfunctions::error(...)") + : around () { + } +}; +*/ + +aspect nonverbose { + // needed to suppress Bochs output *before* a state restore finished + advice call("int logfunctions::get_default_action(int)") + : around () { + int action; + switch (*(tjp->arg<0>())) { + case LOGLEV_DEBUG: + case LOGLEV_PASS: + case LOGLEV_INFO: + action = ACT_IGNORE; + break; + case LOGLEV_ERROR: + action = ACT_REPORT; + break; + case LOGLEV_PANIC: + default: + action = ACT_FATAL; + } + *(tjp->result()) = action; + } + + // no credits header + advice call("void bx_print_header()") + : around () { + } +}; + +#endif + +#endif diff --git a/core/SAL/ovp/Controller.cc b/core/SAL/ovp/Controller.cc new file mode 100644 index 00000000..d7b9f13e --- /dev/null +++ b/core/SAL/ovp/Controller.cc @@ -0,0 +1,139 @@ +#include +#include "OVPController.hpp" +#include "OVPMemory.hpp" +#include "OVPRegister.hpp" +#include "../../../ovp/OVPStatusRegister.hpp" + +namespace sal { + +OVPController::OVPController() + : SimulatorController(new OVPRegisterManager(), new OVPMemoryManager()) +{ + //FIXME: This should be obsolete now... + //set = new UniformRegisterSet(RT_GP); + //setStatus = new UniformRegisterSet(RT_ST); + //setPC= new UniformRegisterSet(RT_PC); +} + +OVPController::~OVPController() +{ + //FIXME: This should be obsolete now... + //delete set; + //delete setStatus; + //delete setPC; + + // Free memory of OVPRegister objects (actually allocated in make*Register): + for(RegisterManager::iterator it = m_Regs->begin(); it != m_Regs->end(); it++) + delete (*it); // free the memory, allocated in the constructor +} + +void OVPController::makeGPRegister(int width, void *link, const string& name) { + // Add general purpose register + OVPRegister *reg = new OVPRegister(m_currentRegId++, width, link, RT_GP); + reg->setName(name); + m_Regs->add(reg); + // Note: The RegisterManager (aka m_Regs) automatically assigns the + // added registers (herein typed OVPRegister) to their matching + // UniformRegisterSet (@see RegisterManager::add). +} + + +void OVPController::makeSTRegister(Register *reg, const string& name) { + // Add status register + reg->setName(name); + cerr << "Add Status Register: " << reg << endl; + m_Regs->add(reg); +} + +void OVPController::makePCRegister(int width, void *link, const string& name) { + // Add general purpose register + OVPRegister *reg = new OVPRegister(m_currentRegId++, width, link, RT_PC); + reg->setName(name); + m_Regs->add(reg); +} + +//FIXME: This should be obsolete now... +//void OVPController::finishedRegisterCreation() { +// m_Regs->add(*set); +// m_Regs->add(*setStatus); +// m_Regs->add(*setPC); +//} + +void OVPController::onInstrPtrChanged(address_t instrPtr) +{ + // make some funny outputs + unsigned int r0 = m_Regs->getSetOfType(RT_GP)->getRegister(0)->getData(); + OVPRegisterManager *ovp_Regs = (OVPRegisterManager *) m_Regs; + // FIXME: This cast seems to be invalid: RT_GP vs. OVPStatusRegister (= RT_ST)? + OVPStatusRegister *rid_st = (OVPStatusRegister *) m_Regs->getSetOfType(RT_GP)->first(); +// cerr << "Addr: " << rid_st << endl; + unsigned int st = rid_st->getData(); +// cerr << "instrPtr: 0x" << hex << instrPtr << " SP: 0x" << hex << m_Regs->getStackPointer() \ + << " R0: 0x" << hex << r0 << " ST: 0x" << hex << st << endl; + + // Check for active breakpoint-events: + fi::EventList::iterator it = m_EvList.begin(); + while(it != m_EvList.end()) + { + // FIXME: Performance verbessern (dazu muss entsprechend auch die Speicherung + // in EventList(.cc|.hpp) angepasst bzw. verbessert werden). + fi::BPEvent* pEvBreakpt = dynamic_cast(*it); + if(pEvBreakpt && (instrPtr == pEvBreakpt->getWatchInstructionPointer() || + pEvBreakpt->getWatchInstructionPointer() == fi::ANY_ADDR)) + { + pEvBreakpt->setTriggerInstructionPointer(instrPtr); + it = m_EvList.makeActive(it); + // "it" has already been set to the next element (by calling + // makeActive()): + continue; // -> skip iterator increment + } + fi::BPRangeEvent* pEvRange = dynamic_cast(*it); + if(pEvRange && pEvRange->isMatching(instrPtr)) + { + pEvBreakpt->setTriggerInstructionPointer(instrPtr); + it = m_EvList.makeActive(it); + continue; // dito. + } + it++; + } + m_EvList.fireActiveEvents(); +} + +void OVPController::save(const string& path) +{ + //TODO + //SIM->save_state(path.c_str()); + //bx_gui_c::power_handler(); +} + +void OVPController::restore(const string& path) +{ + //TODO + //bx_pc_system.restore_bochs_request = true; + assert(path.length() > 0 && + "FATAL ERROR: Tried to restore state without valid path!"); + //strncpy(bx_pc_system.sr_path, path.c_str(), 512 /*CI_PATH_LENGTH, @see gui/textconfig.cc*/); +} + +void OVPController::reboot() +{ + //TODO + //bx_pc_system.Reset(BX_RESET_HARDWARE); + //bx_gui_c::reset_handler();//TODO: leider protected, so geht das also nicht... +} + +void OVPController::toPreviousCtx() +{ + // TODO +} + +void OVPController::terminate(int exCode){ + +} + + +void OVPController::fireTimer(uint32_t){ + +}; + +}; diff --git a/core/SAL/ovp/OVPConfig.hpp b/core/SAL/ovp/OVPConfig.hpp new file mode 100644 index 00000000..91ec5eef --- /dev/null +++ b/core/SAL/ovp/OVPConfig.hpp @@ -0,0 +1,18 @@ +#ifndef __OVP_CONFIG_HPP__ + #define __OVP_CONFIG_HPP__ + + +// Type definitions and configuration settings for +// the OVP simulator. + +namespace sal +{ + +typedef uint32_t guest_address_t; //!< the guest memory address type +typedef uint8_t* host_address_t; //!< the host memory address type +typedef uint32_t register_data_t; //!< register data type (32 bit) + +}; + +#endif /* __OVP_CONFIG_HPP__ */ + diff --git a/core/SAL/ovp/OVPController.hpp b/core/SAL/ovp/OVPController.hpp new file mode 100644 index 00000000..5c850492 --- /dev/null +++ b/core/SAL/ovp/OVPController.hpp @@ -0,0 +1,90 @@ +#ifndef __OVP_CONTROLLER_HPP__ + #define __OVP_CONTROLLER_HPP__ + +#include +#include +#include +#include + +#include "../SimulatorController.hpp" +#include "../../controller/Event.hpp" + +#include "../../../ovp/OVPPlatform.hpp" + +#include "../Register.hpp" + +using namespace std; + +extern OVPPlatform ovpplatform; + +/// Simulator Abstraction Layer namespace +namespace sal +{ + +/** + * \class OVPController + * OVP-specific implementation of a SimulatorController. + */ +class OVPController : public SimulatorController +{ + private: + //FIXME: This should be obsolete now... + //UniformRegisterSet *set; //(RT_GP); + //UniformRegisterSet *setStatus;//(RT_ST); + //UniformRegisterSet *setPC;//(RT_PC); + + // (FIXME: perhaps this should be declared as a static member) + unsigned int m_currentRegId; + // NOTE: Constants (such as GPRegisterId in SAL/bochs/BochsRegister.hpp) + // are much easier to read... + public: + // Initialize the controller. + OVPController(); + virtual ~OVPController(); + virtual void onInstrPtrChanged(address_t instrPtr); + /** + * Save simulator state. + * @param path Location to store state information + */ + virtual void save(const string& path); + /** + * Restore simulator state. + * @param path Location to previously saved state information + */ + virtual void restore(const string& path); + /** + * Reboot simulator. + */ + virtual void reboot(); + /** + * Handles the control back to the previous coroutine which + * triggered the reboot. Need not to be called explicitly. + */ + void toPreviousCtx(); + /** + * Returns the current instruction pointer. + * @return the current eip + */ + + /** + * Terminate simulator + */ + virtual void terminate(int exCode = EXIT_SUCCESS); + + virtual void fireTimer(uint32_t); + + void makeGPRegister(int, void*, const string&); + void makeSTRegister(Register *, const string&); + void makePCRegister(int, void*, const string&); + + //DELETE-ME:This should be obsolete now... + /** + * Due to empty RegisterSets are not allowed, OVP platform + * must tell OVPController when it is finished + */ + //void finishedRegisterCreation(); + +}; +}; + +#endif diff --git a/core/SAL/ovp/OVPMemory.hpp b/core/SAL/ovp/OVPMemory.hpp new file mode 100644 index 00000000..4bd8d901 --- /dev/null +++ b/core/SAL/ovp/OVPMemory.hpp @@ -0,0 +1,92 @@ +#ifndef __OVP_MEMORY_HPP__ + #define __OVP_MEMORY_HPP__ + +#include "../Memory.hpp" + +namespace sal +{ + +/** + * \class OVPMemoryManager + * Represents a concrete implemenation of the abstract + * MemoryManager to provide access to OVP's memory pool. + */ +class OVPMemoryManager : public MemoryManager +{ + public: + /** + * Constructs a new MemoryManager object and initializes + * it's attributes appropriately. + */ + OVPMemoryManager() : MemoryManager() { } + /** + * Retrieves the size of the available simulated memory. + * @return the size of the memory pool in bytes + */ + size_t getPoolSize() const + { + return 0; + } + /** + * Retrieves the starting address of the host memory. This is the + * first valid address in memory. + * @return the starting address + */ + host_address_t getStartAddr() const + { + return (0); + } + /** + * Retrieves the byte at address \a addr in the memory. + * @param addr The guest address where the byte is located. + * The address is expected to be valid. + * @return the byte at \a addr + */ + byte_t getByte(guest_address_t addr) + { + return (0); + } + /** + * Retrieves \a cnt bytes at address \a addr in the memory. + * @param addr The guest address where the bytes are located. + * The address is expected to be valid. + * @param cnt The number of bytes to be retrieved. \a addr + \a cnt + * is expected to not exceed the memory limit. + * @param dest The destination buffer to write the bytes to + */ + void getBytes(guest_address_t addr, size_t cnt, std::vector& dest) + { + } + /** + * Writes the byte \a data to memory. + * @param addr The guest address to write. + * The address is expected to be valid. + * @param data The new byte to write + */ + void setByte(guest_address_t addr, byte_t data) + { + } + /** + * Writes the bytes \a data to memory. Consequently \c data.size() + * bytes will be written. + * @param addr The guest address to write. + * The address is expected to be valid. + * @param data The new bytes to write + */ + void setBytes(guest_address_t addr, const std::vector& data) + { + } + /** + * Transforms the guest address \a addr to a host address. + * @param addr The (logical) guest address to be transformed + * @return the transformed (host) address or \c ADDR_INV on errors + */ + host_address_t guestToHost(guest_address_t addr) + { + return (0); + } +}; + +} + +#endif diff --git a/core/SAL/ovp/OVPRegister.hpp b/core/SAL/ovp/OVPRegister.hpp new file mode 100644 index 00000000..7b78ca03 --- /dev/null +++ b/core/SAL/ovp/OVPRegister.hpp @@ -0,0 +1,80 @@ +#ifndef __OVP_REGISTER_HPP__ + #define __OVP_REGISTER_HPP__ + +#include "../Register.hpp" +#include "../../../ovp/OVPPlatform.hpp" +//#include "../../../ovp/OVPStatusRegister.hpp" + +extern OVPPlatform ovpplatform; + +namespace sal { + +/** + * \class OVPRegister + * OVP-specific implementation of x86 registers. + */ +class OVPRegister : public Register +{ + private: + void *reg; + + public: + /** + * Constructs a new register object. + * @param id the unique id of this register (simulator specific) + * @param width width of the register (8, 16, 32 or 64 bit should suffice) + * @param link pointer to bochs internal register memory + * @param t type of the register + */ + OVPRegister(unsigned int id, regwidth_t width, void* link, RegisterType t) + : Register(id, t, width) { + reg = link; + } + /** + * Retrieves the data of the register. + * @return the current register data + */ + regdata_t getData() { return ovpplatform.getRegisterData(reg); } + /** + * Sets the content of the register. + * @param data the new register data to be written + */ + void setData(regdata_t data) { ovpplatform.setRegisterData(reg, data); } +}; + +/** + * \class OVPRegister + * OVP-specific implementation of the RegisterManager. + */ +class OVPRegisterManager : public RegisterManager +{ + public: + /** + * Returns the current instruction pointer. + * @return the current eip + */ + virtual address_t getInstructionPointer() + { + return ovpplatform.getPC(); + } + /** + * Retruns the top address of the stack. + * @return the starting address of the stack + */ + virtual address_t getStackPointer() + { + return ovpplatform.getSP(); + } + /** + * Retrieves the base ptr (holding the address of the + * current stack frame). + * @return the base pointer + */ + virtual address_t getBasePointer() + { + return 0; + } + +}; +} +#endif diff --git a/core/SAL/ovp/init.ah b/core/SAL/ovp/init.ah new file mode 100644 index 00000000..4054373a --- /dev/null +++ b/core/SAL/ovp/init.ah @@ -0,0 +1,13 @@ +#ifndef __OVPINIT_AH__ + #define __OVPINIT_AH__ + +#include "../SALInst.hpp" + +aspect OVPInit { + advice call("% ...::startSimulation(...)") : before () { + cout << "OVP init aspect!" << endl; + sal::simulator.startup(); + } +}; + +#endif // __OVPINIT_AH__ diff --git a/core/config/CMakeLists.txt b/core/config/CMakeLists.txt new file mode 100644 index 00000000..32020019 --- /dev/null +++ b/core/config/CMakeLists.txt @@ -0,0 +1,13 @@ + +option( EXP_MHTEST "MH Testcampaign" on) +option( EXP_FAULTCOV "Fault coverage experiment" OFF) +option( EXP_HSCSIMPLE "HSC simple experiment" OFF) +option( EXP_COOLCHECKSUM "Test campaign for chb's cool checksum" OFF) +option( EXP_CHECKSUM_OOSTUBS "OOStuBS Checksum" OFF) + + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/experiments.hpp.in + ${CMAKE_CURRENT_BINARY_DIR}/experiments.hpp @ONLY} +) + + diff --git a/core/config/experiments.hpp.in b/core/config/experiments.hpp.in new file mode 100644 index 00000000..679bef95 --- /dev/null +++ b/core/config/experiments.hpp.in @@ -0,0 +1,24 @@ +/** + * Copyright DanceOS Project + * http://www.danceos.org + * + * \file experiments.h.in + * \brief Experiment configuration + * \author Martin Hoffmann + * + * The defines are generated by cmake. + * \attention THIS FILE IS AUTOGENERATED, DO NOT EDIT! + */ + + +#ifndef EXPERIMENTS_H +#define EXPERIMENTS_H + +#cmakedefine EXP_MHTEST +#cmakedefine EXP_FAULTCOV +#cmakedefine EXP_HSCSIMPLE +#cmakedefine EXP_COOLCHECKSUM +#cmakedefine EXP_CHECKSUM_OOSTUBS + +#endif // EXPERIMENTS_H + diff --git a/core/controller/CMakeLists.txt b/core/controller/CMakeLists.txt new file mode 100644 index 00000000..0c1ef0c4 --- /dev/null +++ b/core/controller/CMakeLists.txt @@ -0,0 +1,11 @@ +set(SRCS + CampaignManager.cc + CoroutineManager.cc + Event.cc + EventList.cc + ExperimentDataQueue.cc + Signal.cc + SynchronizedExperimentDataQueue.cc +) + +add_library(controller ${SRCS}) diff --git a/core/controller/Campaign.hpp b/core/controller/Campaign.hpp new file mode 100644 index 00000000..0d98e323 --- /dev/null +++ b/core/controller/Campaign.hpp @@ -0,0 +1,31 @@ +#ifndef __CAMPAIGN_HPP__ + #define __CAMPAIGN_HPP__ + +// Author: Martin Hoffmann +// Date: 09.12.2011 + + +namespace fi +{ + +/** + * \class Campaign + * Basic interface for user-defined campaigns. To create a new + * campaign, derive your own class from Campaign, + * define the run method, and add it to the CampaignManager. + */ +class Campaign +{ + + public: + Campaign() { }; + /** + * Defines the campaign. + * @return \c true if the campaign was successful, \c false otherwise + */ + virtual bool run() = 0; +}; + +} + +#endif /* __CAMPAIGN_HPP__ */ diff --git a/core/controller/CampaignManager.cc b/core/controller/CampaignManager.cc new file mode 100644 index 00000000..6d4f165a --- /dev/null +++ b/core/controller/CampaignManager.cc @@ -0,0 +1,9 @@ +#include "CampaignManager.hpp" + + +namespace fi +{ + +CampaignManager campaignmanager; + +}//end-of-namespace \ No newline at end of file diff --git a/core/controller/CampaignManager.hpp b/core/controller/CampaignManager.hpp new file mode 100644 index 00000000..7bdb0712 --- /dev/null +++ b/core/controller/CampaignManager.hpp @@ -0,0 +1,90 @@ +/** + * \brief The manager for an entire campaign + * + * The CampaignManager allows a user-campaign access to all constant + * simulator information and forwards single experiments to the JobServer. + * + * \author Martin Hoffmann + * + */ + +#ifndef __CAMPAIGN_MANAGER_H__ +#define __CAMPAIGN_MANAGER_H__ + +#include "SAL/SALInst.hpp" +#include "ExperimentData.hpp" +#include "jobserver/JobServer.hpp" +#include "controller/Campaign.hpp" + +namespace fi +{ +/** + * \class CampaignManager + * Class manageing an FI campaign. + */ +class CampaignManager +{ + + JobServer m_jobserver; + Campaign* m_currentCampaign; + + public: + CampaignManager(){}; + + /** + * Executes a user campaign + */ + bool runCampaign(Campaign* c){ + m_currentCampaign = c; + bool ret = c->run(); + m_jobserver.done(); + return ret; + } + + /** + * Returns a const reference for acquiring constant simlator specific information. + * e.g., Registernames, to ease experiment data construction. + * The campaign description is not allowed to change the simulator + * state, as the actual simulation runs within another process (Minion) + * @return c constant reference to the current simulator backend. + */ + sal::SimulatorController const& getSimulator() const { return sal::simulator; }; + + /** + * Add a experiment parameter set. + * The user campaign has to allocate the Parameter object, + * and deallocate it after result reception. + * A Parameter set includes space for results. + * @param exp A pointer to a ExperimentData set. + */ + void addParam(ExperimentData* exp){ m_jobserver.addParam(exp); }; + + /** + * A user campaign can request a single result (blocking) from the queue. + * + * @return Pointer to a parameter object with filled result data @see addParam. + */ + ExperimentData* getDone() { return m_jobserver.getDone(); }; + + /** + * Signal, that there will not come any further parameter sets. + */ + void noMoreParameters() { m_jobserver.setNoMoreExperiments(); }; + + /** + * Wait actively, until all experiments expired. + */ + // void waitForCompletion(); + + /** + * User campaign has finished.. + */ + void done() { m_jobserver.done(); }; + + + +}; + +extern CampaignManager campaignmanager; +} //end-of-namespace +#endif diff --git a/core/controller/CoroutineManager.cc b/core/controller/CoroutineManager.cc new file mode 100644 index 00000000..f12c983a --- /dev/null +++ b/core/controller/CoroutineManager.cc @@ -0,0 +1,96 @@ + +// Author: Adrian Böckenkamp +// Date: 05.10.2011 + +#include +#include "CoroutineManager.hpp" +#include "../controller/ExperimentFlow.hpp" + +namespace fi +{ + +void CoroutineManager::m_invoke(void* pData) +{ + //std::cerr << "CORO m_invoke " << co_current() << std::endl; + reinterpret_cast(pData)->coroutine_entry(); + co_exit(); // deletes the associated coroutine memory as well + + // we really shouldn't get here + std::cerr << "CoroutineManager::m_invoke() shitstorm unloading" << std::endl; + while (1) ; +} + +CoroutineManager::~CoroutineManager() +{ +} + +void CoroutineManager::toggle(ExperimentFlow* flow) +{ + m_togglerstack.push(co_current()); + //std::cerr << "CORO toggle from " << m_togglerstack.top() << " to "; + if (flow == SIM_FLOW) { + co_call(m_simCoro); + return; + } + + flowmap_t::iterator it = m_Flows.find(flow); + assert(it != m_Flows.end() && "FATAL ERROR: Flow does not exist!"); + //std::cerr << it->second << std::endl; + co_call(it->second); +} + +void CoroutineManager::create(ExperimentFlow* flow) +{ + corohandle_t res = co_create(CoroutineManager::m_invoke, flow, NULL, + STACK_SIZE_DEFAULT); + //std::cerr << "CORO create " << res << std::endl; + m_Flows.insert(std::pair(flow, res)); +} + +void CoroutineManager::remove(ExperimentFlow* flow) +{ + // find coroutine handle for this flow + flowmap_t::iterator it = m_Flows.find(flow); + if (it == m_Flows.end()) { + assert(false && "FATAL ERROR: Cannot remove flow"); + return; + } + corohandle_t coro = it->second; + //std::cerr << "CORO remove " << coro << std::endl; + + // remove flow from active list + m_Flows.erase(it); + + // FIXME make sure resume() keeps working + + // delete coroutine (and handle the special case we're removing + // ourselves) + if (coro == co_current()) { + co_exit(); + } else { + co_delete(coro); + } +} + +void CoroutineManager::resume() +{ + corohandle_t next = m_togglerstack.top(); + m_togglerstack.pop(); + //std::cerr << "CORO resume from " << co_current() << " to " << next << std::endl; + co_call(next); +} + +ExperimentFlow* CoroutineManager::getCurrent() +{ + coroutine_t cr = co_current(); + for(std::map::iterator it = m_Flows.begin(); + it != m_Flows.end(); it++) + if(it->second == cr) + return (it->first); + assert(false && "FATAL ERROR: The current flow could not be retrieved!"); + return 0; +} + +const ExperimentFlow* CoroutineManager::SIM_FLOW = NULL; + +} diff --git a/core/controller/CoroutineManager.hpp b/core/controller/CoroutineManager.hpp new file mode 100644 index 00000000..8e49baad --- /dev/null +++ b/core/controller/CoroutineManager.hpp @@ -0,0 +1,78 @@ +#ifndef __COROUTINE_MANAGER_HPP__ + #define __COROUTINE_MANAGER_HPP__ + +// Author: Adrian Böckenkamp +// Date: 05.10.2011 + +#include +#include + +#include // the underlying "portable coroutine library" + + +namespace fi +{ + +class ExperimentFlow; + +/** + * \class CoroutineManager + * Manages the experiments flow encapsulated in coroutines. Each + * experiment (flow) has it's associated data structure which is + * represented by the ExperimentData-class. + */ +class CoroutineManager +{ + private: + //! the default stack size for coroutines (= experiment flows) + static const unsigned STACK_SIZE_DEFAULT = 4096*4096; + //! the abstraction for coroutine identification + typedef coroutine_t corohandle_t; + typedef std::map flowmap_t; + //! the mapping "flows <-> coro-handle" + flowmap_t m_Flows; + //! the simulator/backend coroutine handle + corohandle_t m_simCoro; + //! stack of coroutines that explicitly activated another one with toggle() + std::stack m_togglerstack; + //! manages the run-calls for each ExperimentFlow-object + static void m_invoke(void* pData); + public: + static const ExperimentFlow* SIM_FLOW; //!< the simulator coroutine flow + + CoroutineManager() : m_simCoro(co_current()) { } + ~CoroutineManager(); + /** + * Creates a new coroutine for the specified experiment flow. + * @param flow the flow to be executed in the newly created coroutine + */ + void create(ExperimentFlow* flow); + /** + * Destroys coroutine for the specified experiment flow. + * @param flow the flow to be removed + */ + void remove(ExperimentFlow* flow); + /** + * Switches the control flow to the experiment \a flow. If \a flow is + * equal to \c SIM_FLOW, the control will be handed back to the + * simulator. The current control flow is pushed onto an + * internal stack. + * @param flow the destination control flow or \c SIM_FLOW (= \c NULL ) + */ + void toggle(ExperimentFlow* flow); + /** + * Gives the control back to the coroutine that toggle()d the + * current one, by drawing from the internal stack built from + * calls to toggle(). + */ + void resume(); + /** + * Retrieves the current (active) coroutine (= flow). + * @return the current experiment flow. + */ + ExperimentFlow* getCurrent(); +}; + +} // end-of-namespace: fi + +#endif /* __COROUTINE_MANAGER_HPP__ */ diff --git a/core/controller/Event.cc b/core/controller/Event.cc new file mode 100644 index 00000000..ea388382 --- /dev/null +++ b/core/controller/Event.cc @@ -0,0 +1,79 @@ + +// Author: Adrian Böckenkamp +// Date: 08.06.2011 + +#include "Event.hpp" + +namespace fi +{ + +EventId BaseEvent::m_Counter = 0; + +bool TroubleEvent::isMatching(unsigned troubleNum) const +{ + for(unsigned i = 0; i < m_WatchNumbers.size(); i++) + { + if(m_WatchNumbers[i] == troubleNum || + m_WatchNumbers[i] == ANY_TRAP) + return true; + } + return false; +} + +bool TroubleEvent::removeWatchNumber(unsigned troubleNum) +{ + for(unsigned i = 0; i < m_WatchNumbers.size(); i++) + { + if(m_WatchNumbers[i] == troubleNum) + { + m_WatchNumbers.erase(m_WatchNumbers.begin()+i); + return true; + } + } + return false; +} + +bool TroubleEvent::addWatchNumber(unsigned troubleNumber) +{ + for(unsigned i = 0; i < m_WatchNumbers.size(); i++) + { + + if(m_WatchNumbers[i] == troubleNumber) + return false; + } + m_WatchNumbers.push_back(troubleNumber); + return true; +} + +bool MemAccessEvent::isMatching(sal::address_t addr, accessType_t accesstype) const +{ + if(!(m_WatchType & accesstype)) + return (false); + else if(m_WatchAddr != addr && + m_WatchAddr != ANY_ADDR) + return (false); + return (true); +} + +void BPRangeEvent::setWatchInstructionPointerRange(sal::address_t start, sal::address_t end) +{ + m_WatchStartAddr = start; + m_WatchEndAddr = end; +} + +bool BPRangeEvent::isMatching(sal::address_t addr) const +{ + if ((m_WatchStartAddr != ANY_ADDR && addr < m_WatchStartAddr) || + (m_WatchEndAddr != ANY_ADDR && addr > m_WatchEndAddr)) + return false; + return true; +} + +bool BPEvent::isMatching(sal::address_t addr) const +{ + if(m_WatchInstrPtr == ANY_ADDR || m_WatchInstrPtr == addr) + return (true); + return (false); +} + +} // end-of-namespace: fi diff --git a/core/controller/Event.hpp b/core/controller/Event.hpp new file mode 100644 index 00000000..d8e60a43 --- /dev/null +++ b/core/controller/Event.hpp @@ -0,0 +1,486 @@ +#ifndef __EVENT_HPP__ + #define __EVENT_HPP__ + +#include +#include +#include +#include + +#include "../SAL/SALConfig.hpp" + +namespace fi +{ +class ExperimentFlow; + +typedef unsigned long EventId; //!< type of event ids + +//! invalid event id (used as a return indicator) +const EventId INVALID_EVENT = (EventId)-1; +//! address wildcard (e.g. for BPEvent) +const sal::address_t ANY_ADDR = static_cast(-1); +//! instruction wildcard +const unsigned ANY_INSTR = static_cast(-1); +//! trap wildcard +const unsigned ANY_TRAP = static_cast(-1); +//! interrupt wildcard +const unsigned ANY_INTERRUPT = static_cast(-1); + +/** + * \class BaseEvent + * This is the base class for all event types. + */ +class BaseEvent +{ + private: + //! current class-scoped id counter to provide \a unique id's + static EventId m_Counter; + protected: + EventId m_Id; //!< unique id of this event + time_t m_tStamp; //!< time stamp of event + unsigned int m_OccCounter; //!< event fires when 0 is reached + unsigned int m_OccCounterInit; //!< initial value for m_OccCounter + ExperimentFlow* m_Parent; //!< this event belongs to experiment m_Parent + public: + BaseEvent() : m_Id(++m_Counter), m_OccCounter(1), m_OccCounterInit(1), m_Parent(NULL) + { updateTime(); } + virtual ~BaseEvent() { } + /** + * Retrieves the unique event id for this event. + * @return the unique id + */ + EventId getId() const { return (m_Id); } + /** + * Retrieves the time stamp of this event. The time stamp is set when + * the event gets created, id est the constructor is called. The meaning + * of this value depends on the actual event type. + * @return the time stamp + */ + std::time_t getTime() const { return (m_tStamp); } + /** + * Decreases the event counter by one. When this counter reaches zero, the + * event will be triggered. + */ + void decreaseCounter() { --m_OccCounter; } + /** + * Sets the event counter to the specified value (default is one). + * @param val the new counter value + */ + void setCounter(unsigned int val = 1) { m_OccCounter = m_OccCounterInit = val; } + /** + * Returns the current counter value. + * @return the counter value + */ + unsigned int getCounter() const { return (m_OccCounter); } + /** + * Resets the event counter to its default value, or the last + * value that was set through setCounter(). + */ + void resetCounter() { m_OccCounter = m_OccCounterInit; } + /** + * Sets the time stamp for this event to the current system time. + */ + void updateTime() { time(&m_tStamp); } + /** + * Returns the parent experiment of this event (context). + * If the event was created temporarily or wasn't linked to a context, + * the return value is \c NULL (unknown identity). + */ + ExperimentFlow* getParent() const { return (m_Parent); } + /** + * Sets the parent (context) of this event. The default context + * is \c NULL (unknown identity). + */ + void setParent(ExperimentFlow* pFlow) { m_Parent = pFlow; } +}; +// FIXME: Dynamische Casts zur Laufzeit evtl. zu uneffizient? +// (vgl. auf NULL evtl. akzeptabel?) Bessere Lösungen? + +// ---------------------------------------------------------------------------- +// Specialized events: +// + +/** + * \class BPEvent + * A Breakpoint event to observe specific instruction pointers. + * FIXME consider renaming to BPSingleEvent, introducing common BPEvent base class + */ +class BPEvent : virtual public BaseEvent +{ + private: + sal::address_t m_WatchInstrPtr; + sal::address_t m_TriggerInstrPtr; + public: + /** + * Creates a new breakpoint event. + * @param ip the instruction pointer of the breakpoint. If the control + * flow reaches this address and its counter value is zero, the + * event will be triggered. \a eip can be set to the ANY_ADDR + * wildcard to allow arbitrary addresses. + */ + BPEvent(sal::address_t ip = 0) + : m_WatchInstrPtr(ip), m_TriggerInstrPtr(ANY_ADDR) { } + /** + * Returns the instruction pointer this event waits for. + */ + sal::address_t getWatchInstructionPointer() const + { return m_WatchInstrPtr; } + /** + * Sets the instruction pointer this event waits for. + */ + void setWatchInstructionPointer(sal::address_t iptr) + { m_WatchInstrPtr = iptr; } + /** + * Checks whether a given address is matching. + */ + bool isMatching(sal::address_t addr) const; + /** + * Returns the instruction pointer that triggered this event. + */ + sal::address_t getTriggerInstructionPointer() const + { return m_TriggerInstrPtr; } + /** + * Sets the instruction pointer that triggered this event. Should not + * be used by experiment code. + */ + void setTriggerInstructionPointer(sal::address_t iptr) + { m_TriggerInstrPtr = iptr; } +}; + +/** + * \class BPRangeEvent + * A event type to observe ranges of instruction pointers. + */ +class BPRangeEvent : virtual public BaseEvent +{ + private: + sal::address_t m_WatchStartAddr; + sal::address_t m_WatchEndAddr; + sal::address_t m_TriggerInstrPtr; + public: + /** + * Creates a new breakpoint-range event. The range's ends are both + * inclusive, i.e. an address matches if start <= addr <= end. + * ANY_ADDR denotes the lower respectively the upper end of the address + * space. + */ + BPRangeEvent(sal::address_t start = 0, sal::address_t end = 0) + : m_WatchStartAddr(start), m_WatchEndAddr(end), + m_TriggerInstrPtr(ANY_ADDR) { } + /** + * Sets the instruction pointer watch range. Both ends of the range + * may be ANY_ADDR (cf. constructor). + */ + void setWatchInstructionPointerRange(sal::address_t start, + sal::address_t end); + /** + * Checks whether a given address is within the range. + */ + bool isMatching(sal::address_t addr) const; + /** + * Returns the instruction pointer that triggered this event. + */ + sal::address_t getTriggerInstructionPointer() const + { return m_TriggerInstrPtr; } + /** + * Sets the instruction pointer that triggered this event. Should not + * be used by experiment code. + */ + void setTriggerInstructionPointer(sal::address_t iptr) + { m_TriggerInstrPtr = iptr; } +}; + +/** + * \class MemAccessEvent + * Observes memory read/write accesses. + * FIXME? currently >8-bit accesses only match if their lowest address is being watched + * (e.g., a 32-bit write to 0x4 also accesses 0x7, but this cannot be matched) + */ +class MemAccessEvent : virtual public BaseEvent +{ + public: + enum accessType_t + { + MEM_UNKNOWN = 0x0, + MEM_READ = 0x1, + MEM_WRITE = 0x2, + MEM_READWRITE = 0x3 + }; + private: + //! Specific guest system address to watch, or ANY_ADDR. + sal::address_t m_WatchAddr; + /** + * Memory access type we want to watch + * (MEM_READ || MEM_WRITE || MEM_READWRITE). + */ + accessType_t m_WatchType; + //! Specific guest system address that actually triggered the event. + sal::address_t m_TriggerAddr; + //! Width of the memory access (# bytes). + size_t m_TriggerWidth; + //! Address of the instruction that caused the memory access. + sal::address_t m_TriggerIP; + //! Memory access type at m_TriggerAddr. + accessType_t m_AccessType; + public: + MemAccessEvent(accessType_t watchtype = MEM_READWRITE) + : m_WatchAddr(ANY_ADDR), m_WatchType(watchtype), + m_TriggerAddr(ANY_ADDR), m_TriggerIP(ANY_ADDR), + m_AccessType(MEM_UNKNOWN) { } + MemAccessEvent(sal::address_t addr, + accessType_t watchtype = MEM_READWRITE) + : m_WatchAddr(addr), m_WatchType(watchtype), + m_TriggerAddr(ANY_ADDR), m_TriggerIP(ANY_ADDR), + m_AccessType(MEM_UNKNOWN) { } + /** + * Returns the memory address to be observed. + */ + sal::address_t getWatchAddress() const { return m_WatchAddr; } + /** + * Sets the memory address to be observed. (Wildcard: ANY_ADDR) + */ + void setWatchAddress(sal::address_t addr) { m_WatchAddr = addr; } + /** + * Checks whether a given address is matching. + */ + bool isMatching(sal::address_t addr, accessType_t accesstype) const; + /** + * Returns the specific memory address that actually triggered the + * event. + */ + sal::address_t getTriggerAddress() const { return (m_TriggerAddr); } + /** + * Sets the specific memory address that actually triggered the event. + * Should not be used by experiment code. + */ + void setTriggerAddress(sal::address_t addr) { m_TriggerAddr = addr; } + /** + * Returns the specific memory address that actually triggered the + * event. + */ + size_t getTriggerWidth() const { return (m_TriggerWidth); } + /** + * Sets the specific memory address that actually triggered the event. + * Should not be used by experiment code. + */ + void setTriggerWidth(size_t width) { m_TriggerWidth = width; } + /** + * Returns the address of the instruction causing this memory + * access. + */ + sal::address_t getTriggerInstructionPointer() const + { return (m_TriggerIP); } + /** + * Sets the address of the instruction causing this memory + * access. Should not be used by experiment code. + */ + void setTriggerInstructionPointer(sal::address_t addr) + { m_TriggerIP = addr; } + /** + * Returns type (MEM_READ || MEM_WRITE) of the memory access that + * triggered this event. + */ + accessType_t getTriggerAccessType() const { return (m_AccessType); } + /** + * Sets type of the memory access that triggered this event. Should + * not be used by experiment code. + */ + void setTriggerAccessType(accessType_t type) { m_AccessType = type; } + /** + * Returns memory access types (MEM_READ || MEM_WRITE || MEM_READWRITE) + * this event watches. Should not be used by experiment code. + */ + accessType_t getWatchAccessType() const { return (m_WatchType); } +}; +/** + * \class MemReadEvent + * Observes memory read accesses. + */ +class MemReadEvent : virtual public MemAccessEvent +{ + public: + MemReadEvent() + : MemAccessEvent(MEM_READ) { } + MemReadEvent(sal::address_t addr) + : MemAccessEvent(addr, MEM_READ) { } +}; + +/** + * \class MemWriteEvent + * Observes memory write accesses. + */ +class MemWriteEvent : virtual public MemAccessEvent +{ + public: + MemWriteEvent() + : MemAccessEvent(MEM_READ) { } + MemWriteEvent(sal::address_t addr) + : MemAccessEvent(addr, MEM_WRITE) { } +}; + +/** + * \class TroubleEvent + * Observes interrupt/trap activties. + */ +class TroubleEvent : virtual public BaseEvent +{ + private: + /** + * Specific guest system interrupt/trap number that actually + * trigger the event. + */ + int m_TriggerNumber; + /** + * Specific guest system interrupt/trap numbers to watch, + * or ANY_INTERRUPT/ANY_TRAP. + */ + std::vector m_WatchNumbers; + public: + TroubleEvent() : m_TriggerNumber (-1) { } + TroubleEvent(unsigned troubleNumber) + : m_TriggerNumber(-1) + { addWatchNumber(troubleNumber); } + /** + * Add an interrupt/trap-number which should be observed + * @param troubleNumber number of an interrupt or trap + * @return \c true if number is added to the list \c false if the number + * was already in the list + */ + bool addWatchNumber(unsigned troubleNumber); + /** + * Remove an interrupt/trap-number which is in the list of observed + * numbers + * @param troubleNumber number of an interrupt or trap + * @return \c true if the number was found and removed \c false if the + * number was not in the list + */ + bool removeWatchNumber(unsigned troubleNum); + /** + * Returns the list of observed numbers + * @return a copy of the list which contains all observed numbers + */ + std::vector getWatchNumbers() { return (m_WatchNumbers); } + /** + * Checks whether a given interrupt-/trap-number is matching. + */ + bool isMatching(unsigned troubleNum) const; + /** + * Sets the specific interrupt-/trap-number that actually triggered + * the event. Should not be used by experiment code. + */ + void setTriggerNumber(unsigned troubleNum) + { m_TriggerNumber = troubleNum; } + /** + * Returns the specific interrupt-/trap-number that actually triggered + * the event. + */ + unsigned getTriggerNumber() { return (m_TriggerNumber); } +}; + +/** + * \class InterruptEvent + * Observes interrupts of the guest system. + */ +class InterruptEvent : virtual public TroubleEvent +{ + private: + bool m_IsNMI; //!< non maskable interrupt flag + public: + InterruptEvent() : m_IsNMI(false) { } + InterruptEvent(unsigned interrupt) : m_IsNMI(false) + { addWatchNumber(interrupt); } + /** + * Returns \c true if the interrupt is non maskable, \c false otherwise. + */ + bool isNMI() { return (m_IsNMI); } + /** + * Sets the interrupt type (non maskable or not). + */ + void setNMI(bool enabled) { m_IsNMI = enabled; } +}; + +/** + * \class TrapEvent + * Observes traps of the guest system. + */ +class TrapEvent : virtual public TroubleEvent +{ + public: + TrapEvent() { } + TrapEvent(unsigned trap) { addWatchNumber(trap); } +}; + +/** + * \class GuestEvent + * Used to receive data from the guest system. + */ +class GuestEvent : virtual public BaseEvent +{ + private: + char m_Data; + unsigned m_Port; + public: + GuestEvent() : m_Data(0), m_Port(0) { } + /** + * Returns the data, transmitted by the guest system. + */ + char getData() const { return (m_Data); } + /** + * Sets the data which had been transmitted by the guest system. + */ + void setData(char data) { m_Data = data; } + /** + * Returns the data length, transmitted by the guest system. + */ + unsigned getPort() const { return (m_Data); } + /** + * Sets the data length which had been transmitted by the guest system. + */ + void setPort(unsigned port) { m_Port = port; } +}; + +/** + * \class JumpEvent + * JumpEvents are used to observe condition jumps (if...else if...else). + */ +class JumpEvent : virtual public BaseEvent +{ + private: + unsigned m_Opcode; + bool m_FlagTriggered; + public: + /** + * Constructs a new event object. + * @param parent the parent object + * @param opcode the opcode of the jump-instruction to be observed + * or ANY_INSTR to match all jump-instructions + */ + JumpEvent(unsigned opcode = ANY_INSTR) + : m_Opcode(opcode), m_FlagTriggered(false) { } + /** + * Retrieves the opcode of the jump-instruction. + */ + unsigned getOpcode() const { return (m_Opcode); } + /** + * Returns \c true, of the event was triggered due to specific register + * content, \c false otherwise. + */ + bool isRegisterTriggered() { return (!m_FlagTriggered); } + /** + * Returns \c true, of the event was triggered due to specific FLAG + * state, \c false otherwise. This is the common case. + */ + bool isFlagTriggered() { return (m_FlagTriggered); } + /** + * Sets the requestet jump-instruction opcode. + */ + void setOpcode(unsigned oc) { oc = m_Opcode; } + /** + * Sets the trigger flag. + */ + void setFlagTriggered(bool flagTriggered) + { m_FlagTriggered = flagTriggered; } +}; + +} // end-of-namespace: fi + +#endif /* __EVENT_HPP__ */ diff --git a/core/controller/EventList.cc b/core/controller/EventList.cc new file mode 100644 index 00000000..276c06d9 --- /dev/null +++ b/core/controller/EventList.cc @@ -0,0 +1,136 @@ +#include + +#include "EventList.hpp" +#include "../SAL/SALInst.hpp" + +namespace fi +{ + +EventId EventList::add(BaseEvent* ev, ExperimentFlow* pExp) +{ + assert(ev != NULL && "FATAL ERROR: Event (of base type BaseEvent*) cannot be NULL!"); + // a zero counter does not make sense + assert(ev->getCounter() != 0); + ev->setParent(pExp); // event is linked to experiment flow + m_BufferList.push_back(ev); + return (ev->getId()); +} + +bool EventList::remove(BaseEvent* ev) +{ + if(ev != NULL) + { + iterator it = std::find(m_BufferList.begin(), m_BufferList.end(), ev); + if(it != end()) + { + m_BufferList.erase(it); + m_DeleteList.push_back(ev); + return (true); + } + } + else + { + for(iterator it = m_BufferList.begin(); it != m_BufferList.end(); + it++) + m_DeleteList.push_back(*it); + m_BufferList.clear(); + return (true); + } + return (false); +} + +EventList::iterator EventList::remove(iterator it) +{ + return (m_remove(it, false)); +} + +EventList::iterator EventList::m_remove(iterator it, bool skip_deletelist) +{ + if(!skip_deletelist) + m_DeleteList.push_back(*it); + return (m_BufferList.erase(it)); +} + +void EventList::getEventsOf(ExperimentFlow* pWhat, + std::vector& dest) const +{ + assert(pWhat && "FATAL ERROR: The context cannot be NULL!"); + for(bufferlist_t::const_iterator it = m_BufferList.begin(); + it != m_BufferList.end(); it++) + if((*it)->getParent() == pWhat) + dest.push_back(*it); +} + +EventList::~EventList() +{ + // nothing to do here yet +} + +BaseEvent* EventList::getEventFromId(EventId id) +{ + // Loop through all events: + for(bufferlist_t::iterator it = m_BufferList.begin(); + it != m_BufferList.end(); it++) + if((*it)->getId() == id) + return (*it); + return (NULL); // Nothing found. +} + +void EventList::makeActive(BaseEvent* ev) +{ + assert(ev && "FATAL ERROR: Event object pointer cannot be NULL!"); + ev->decreaseCounter(); + if (ev->getCounter() > 0) { + return; + } + ev->resetCounter(); + if(remove(ev)) // remove event from buffer-list + m_FireList.push_back(ev); +} + +EventList::iterator EventList::makeActive(iterator it) +{ + assert(it != m_BufferList.end() && + "FATAL ERROR: Iterator has already reached the end!"); + BaseEvent* ev = *it; + assert(ev && "FATAL ERROR: Event object pointer cannot be NULL!"); + ev->decreaseCounter(); + if (ev->getCounter() > 0) { + return ++it; + } + ev->resetCounter(); + // Note: This is the one and only situation in which remove() should NOT + // store the removed item in the delete-list. + iterator it_next = m_remove(it, true); // remove event from buffer-list + m_FireList.push_back(ev); + return (it_next); +} + +void EventList::fireActiveEvents() +{ + for(firelist_t::iterator it = m_FireList.begin(); + it != m_FireList.end(); it++) + { + if(std::find(m_DeleteList.begin(), m_DeleteList.end(), *it) + == m_DeleteList.end()) // not found in delete-list? + { + m_pFired = *it; + ExperimentFlow* pFlow = m_pFired->getParent(); + assert(pFlow && "FATAL ERROR: The event has no parent experiment (owner)!"); + sal::simulator.m_Flows.toggle(pFlow); + } + } + m_FireList.clear(); + m_DeleteList.clear(); +} + +size_t EventList::getContextCount() const +{ + set uniqueFlows; // count unique ExperimentFlow-ptr + for(bufferlist_t::const_iterator it = m_BufferList.begin(); + it != m_BufferList.end(); it++) + uniqueFlows.insert((*it)->getParent()); + return (uniqueFlows.size()); +} + +} // end-of-namespace: fi diff --git a/core/controller/EventList.hpp b/core/controller/EventList.hpp new file mode 100644 index 00000000..4b62bd7c --- /dev/null +++ b/core/controller/EventList.hpp @@ -0,0 +1,201 @@ +#ifndef __EVENT_LIST_HPP__ + #define __EVENT_LIST_HPP__ + +// Author: Adrian Böckenkamp +// Date: 04.02.2012 + +#include +#include +#include +#include + +#include "Event.hpp" + +namespace fi +{ + +class ExperimentFlow; + +/** + * Buffer-list for a specific experiment; acts as a simple storage container + * for events to watch for: + */ +typedef std::list bufferlist_t; +/** + * List of events that match the current simulator event; these events will + * be triggered next (the list is used temporarily). + */ +typedef std::vector firelist_t; +/** + * List of events that have been deleted during a toggled experiment flow while + * triggering the events in the fire-list. This list is used to skip already + * deleted events (therefore it is used temporarily either). + */ +typedef std::vector deletelist_t; + +/** + * \class EventList + * + * \brief This class manages the events of the Fail* implementation. + * + * If a event is triggered, the internal data structure will be updated (id est, + * the event will be removed from the so called buffer-list and added to the + * fire-list). Additionaly, if an experiment-flow deletes an "active" event + * which is currently stored in the fire-list, the event (to be removed) will + * be added to a -so called- delete-list. This ensures to prevent triggering + * "active" events which have already been deleted by a previous experiment + * flow. (See makeActive() and fireActiveEvent() for implementation specific + * details.) EventList is part of the SimulatorController and "outsources" + * it's event management. + */ +class EventList +{ + private: + bufferlist_t m_BufferList; //!< the storage for events added by exp. + firelist_t m_FireList; //!< the active events (used temporarily) + deletelist_t m_DeleteList; //!< the deleted events (used temporarily) + // TODO: Hashing? + BaseEvent* m_pFired; //!< the recently fired Event-object + public: + /** + * The iterator of this class used to loop through the list of + * added events. To retrieve an iterator to the first element, call + * begin(). end() returns the iterator, pointing after the last element. + * (This behaviour equals the STL iterator in C++.) + */ + typedef bufferlist_t::iterator iterator; + + EventList() : m_pFired(NULL) { } + ~EventList(); + /** + * Adds the specified event object for the given ExperimentFlow to the + * list of events to be watched for. + * @param ev pointer to the event object to be added (cannot be \c NULL) + * @param pExp the event context (a pointer to the experiment object + * which is interested in such events, cannot be \c NULL) + * @return the id of the added event object, that is ev->getId() + */ + EventId add(BaseEvent* ev, ExperimentFlow* pExp); + /** + * Removes the event based upon the specified \a ev pointer (requires + * to loop through the whole buffer-list). + * @param ev the pointer of the event to be removed; if ev is set to + * \c NULL, all events (for \a all experiments) will be + * removed + * @return \c true if the object has been removed or \c false if the + * pointer could not be found + */ + bool remove(BaseEvent* ev); + /** + * Behaves like remove(BaseEvent) and additionally updates the provided + * iteration. + * @return the updated iterator which will point to the next element + */ + iterator remove(iterator it); + private: + /** + * Internal implementation of remove(iterator it) that allows + * to skip the delete-list. + * @return the updated iterator which will point to the next element + */ + iterator m_remove(iterator it, bool skip_deletelist); + public: + /** + * Returns an iterator to the beginning of the internal data structure. + * Don't forget to update the returned iterator when calling one of the + * modifying methods like makeActive() or remove(). Therefore you need + * to call the iterator-based variants of makeActive() and remove(). + * \code + * [X|1|2| ... |n] + * ^ + * \endcode + */ + iterator begin() { return (m_BufferList.begin()); } + /** + * Returns an iterator to the end of the interal data structure. + * Don't forget to update the returned iterator when calling one of the + * modifying methods like makeActive() or remove(). Therefore you need + * to call the iterator-based variants of makeActive() and remove(). + * \code + * [1|2| ... |n]X + * ^ + * \endcode + */ + iterator end() { return (m_BufferList.end()); } + /** + * Retrieves the event object for the given \a id. The internal data + * remains unchanged. + * @param id of event to be retrieved. + * @return pointer to event or \c NULL of \a id could not be found + */ + BaseEvent* getEventFromId(EventId id); + /** + * Retrieves all events for the specified experiment. + * @param pWhat pointer to experiment context (this pointer is expected + * to be valid!) + * @param dest a reference to a vector-object to be used as the + * destination buffer for the machting event objects. This + * objects may remains unchanged if no matching event objects + * were found. + */ + void getEventsOf(ExperimentFlow* pWhat, std::vector& dest) const; + /** + * Retrieves the number of experiments which currently have active + * events. This number is trivially equal to the (current) total + * number of ExperimentFlow-objects. + * @return number of experiments having active events + */ + size_t getContextCount() const; + /** + * Retrieves the total number of events. + * @return the total event count (for all flows) + */ + size_t getEventCount() const { return (m_BufferList.size()); } + /** + * Retrieves the recently triggered event object. To map this object to + * it's context (id est, the related ExerimentFlow), use + * \c getLastFiredDest(). + * @return a pointer to the recent event or \c NULL if nothing has been + * triggered so far + */ + BaseEvent* getLastFired() { return (m_pFired); } + /** + * Retrieves the ExperimentFlow-object for the given BaseEvent (it's + * \a context). + * @param pEv the event object to be looked up + * @return a pointer to the context of \a pEv or \c NULL if the + * corresponding context could not be found + */ + ExperimentFlow* getExperimentOf(BaseEvent* pEv); + /** + * Moves the events from the (internal) buffer-list to the fire-list. To + * actually fire the events activated by calling makeActive(), call + * fireActiveEvents(). + * @param ev the event to trigger + * TODO: besserer Name statt "makeActive"? + */ + void makeActive(BaseEvent* ev); + /** + * Behaves like makeActive(BaseEvent) and additionally returns an + * updated iterator which points to the next BaseEvent-element. + * @param ev the event to trigger + * @return returns the updated iteration, pointing to the next element + * after makeActive returns, "it" is invalid, so the returned + * iterator should be used to continue the iteration + * TODO: besserer Name statt "makeActive"? + */ + iterator makeActive(iterator it); + /** + * Triggers the active events. Each event is triggered if it has not + * recently been removed (id est: is not found in the delete-list). See + * makeActive() for more details. The recently triggered event can be + * retrieved by calling \a getLastFired(). After all events have been + * triggered, the (internal) fire- and delete-list will be cleared. + * TODO: besserer Name statt "fireActiveEvents"? + */ + void fireActiveEvents(); +}; + +}; // end-of-namespace: fi + +#endif /* __EVENT_LIST_HPP__ */ diff --git a/core/controller/ExperimentData.hpp b/core/controller/ExperimentData.hpp new file mode 100644 index 00000000..4e4a4746 --- /dev/null +++ b/core/controller/ExperimentData.hpp @@ -0,0 +1,56 @@ +/** + * \brief ExperimentData interface + * + * This is the base class for all user-defined data types for + * expirement parameter and results. + * + * \author Martin Hoffmann, Richard Hellwig + * + */ + +#ifndef __EXPERIMENT_DATA_H__ +#define __EXPERIMENT_DATA_H__ + +#include +#include +using namespace std; + +namespace fi{ + +/** + * \class ExperimentData + * Container for experiment data with wrapper methods for serialization and deserialization. + */ + + class ExperimentData + { + protected: + google::protobuf::Message* msg; + uint32_t m_workloadID; + public: + ExperimentData() : msg(0), m_workloadID(0) {}; + ExperimentData(google::protobuf::Message* m) : msg(m) , m_workloadID(0) {}; + + google::protobuf::Message& getMessage() { return *msg; }; + uint32_t getWorkloadID() const { return m_workloadID;}; + void setWorkloadID(uint32_t id) { m_workloadID = id; }; + /** + * Serializes the ExperimentData. + * @param ped output the target-stream. + * @return \c true if the serialization was successful, \c false otherwise + */ + bool serialize(ostream * output) const { return msg->SerializeToOstream(output); } + /** + * Unserializes the ExperimentData. + * @param ped input the stream which is read from + * @return \c true if the unserialization was successful, \c false otherwise + */ + bool unserialize(istream * input) { return msg->ParseFromIstream(input); } + string DebugString() const { return msg->DebugString(); }; + }; + +}; + +#endif //__EXPERIMENT_DATA_H__ + + diff --git a/core/controller/ExperimentDataQueue.cc b/core/controller/ExperimentDataQueue.cc new file mode 100644 index 00000000..56ff8edc --- /dev/null +++ b/core/controller/ExperimentDataQueue.cc @@ -0,0 +1,22 @@ +#include "ExperimentDataQueue.hpp" + +#include + +namespace fi +{ + +void ExperimentDataQueue::addData(ExperimentData* exp) +{ + assert(exp != 0); + m_queue.push_front(exp); +} + +ExperimentData* ExperimentDataQueue::getData() +{ + ExperimentData* ret = m_queue.back(); + m_queue.pop_back(); + return ret; +} + + +} diff --git a/core/controller/ExperimentDataQueue.hpp b/core/controller/ExperimentDataQueue.hpp new file mode 100644 index 00000000..09cae82c --- /dev/null +++ b/core/controller/ExperimentDataQueue.hpp @@ -0,0 +1,53 @@ +/** + * \brief A queue for experiment data. + * + * + * \author Martin Hoffmann, Richard Hellwig + * + */ + +#ifndef __EXPERIMENT_DATA_QUEUE_H__ +#define __EXPERIMENT_DATA_QUEUE_H__ + + +#include +#include "ExperimentData.hpp" + + +namespace fi{ + +/** + * \class ExperimentDataQueue + * Class which manage ExperimentData in a queue. + */ + class ExperimentDataQueue + { + protected: + std::deque m_queue; + + public: + ExperimentDataQueue() {} + ~ExperimentDataQueue() {} + + /** + * Adds ExperimentData to the queue. + * @param exp ExperimentData that is to be added to the queue. + */ + void addData(ExperimentData* exp); + /** + * Returns an item from the queue + * @return the next element of the queue + */ + ExperimentData* getData(); + /** + * Returns the number of elements in the queue + * @return the size of teh queue + */ + size_t size() const { return m_queue.size(); }; + }; + +}; + +#endif //__EXPERIMENT_DATA_QUEUE_H__ + + diff --git a/core/controller/ExperimentFlow.hpp b/core/controller/ExperimentFlow.hpp new file mode 100644 index 00000000..60a48267 --- /dev/null +++ b/core/controller/ExperimentFlow.hpp @@ -0,0 +1,41 @@ +#ifndef __EXPERIMENT_FLOW_HPP__ + #define __EXPERIMENT_FLOW_HPP__ + +// Author: Adrian Böckenkamp +// Date: 09.09.2011 + +#include "../SAL/SALInst.hpp" + +namespace fi +{ + +/** + * \class ExperimentFlow + * Basic interface for user-defined experiments. To create a new + * experiment, derive your own class from ExperimentFlow and + * define the run method. + */ +class ExperimentFlow +{ + public: + ExperimentFlow() { } + /** + * Defines the experiment flow. + * @return \c true if the experiment was successful, \c false otherwise + */ + virtual bool run() = 0; + + /** + * The entry point for this experiment's coroutine. + * Should do some cleanup afterwards. + */ + void coroutine_entry() + { + run(); + sal::simulator.cleanup(this); // remove residual events + } +}; + +} + +#endif /* __EXPERIMENT_FLOW_HPP__ */ diff --git a/core/controller/Minion.hpp b/core/controller/Minion.hpp new file mode 100644 index 00000000..93141e89 --- /dev/null +++ b/core/controller/Minion.hpp @@ -0,0 +1,67 @@ +/** + * \brief The representation of a minion. + * + * \author Richard Hellwig + * + */ + +#ifndef __MINION_HPP__ + #define __MINION_HPP__ + +#include "controller/ExperimentData.hpp" + +namespace fi +{ +/** + * \class Minion + * + * Contains all informations about a minion. + */ +class Minion +{ + private: + string hostname; + bool isWorking; + ExperimentData* currentExperimentData; + int sockfd; + public: + Minion() : isWorking(false), currentExperimentData(0), sockfd(-1) { } + + void setSocketDescriptor(int sock) { sockfd = sock; } + int getSocketDescriptor() const { return (sockfd); } + + /** + * Returns the hostname of the minion. + * @return the hostname + */ + string getHostname() { return (hostname); } + /** + * Sets the hostname of the minion. + * @param host the hostname + */ + void setHostname(string host) { hostname = host; } + /** + * Returns the current ExperimentData which the minion is working with. + * @return a pointer of the current ExperimentData + */ + ExperimentData* getCurrentExperimentData() { return currentExperimentData; } + /** + * Sets the current ExperimentData which the minion is working with. + * @param exp the current ExperimentData + */ + void setCurrentExperimentData(ExperimentData* exp) { currentExperimentData = exp; } + /** + * Returns the current state of the minion. + * @return the current state + */ + bool isBusy() { return (isWorking); } + /** + * Sets the current state of the minion + * @param state the current state + */ + void setBusy(bool state) { isWorking = state; } +}; + +}; + +#endif /* __MINION_HPP__ */ diff --git a/core/controller/Signal.cc b/core/controller/Signal.cc new file mode 100644 index 00000000..1a6be53e --- /dev/null +++ b/core/controller/Signal.cc @@ -0,0 +1,14 @@ + +// Author: Adrian Böckenkamp +// Date: 15.06.2011 + +#include "Signal.hpp" + +namespace fi +{ + +std::auto_ptr Signal::m_This; +Mutex Signal::m_InstanceMutex; + + +} // end-of-namespace: fi diff --git a/core/controller/Signal.hpp b/core/controller/Signal.hpp new file mode 100644 index 00000000..dcb6db04 --- /dev/null +++ b/core/controller/Signal.hpp @@ -0,0 +1,136 @@ +#ifndef __SIGNAL_HPP__ + #define __SIGNAL_HPP__ + +// Author: Adrian Böckenkamp +// Date: 15.06.2011 + +#include +#include +#include +#ifndef __puma +#include +#include + +#include +#include +#endif + +namespace fi +{ + +#ifndef __puma +typedef boost::mutex Mutex; // lock/unlock +typedef boost::mutex::scoped_lock ScopeLock; // use RAII with lock/unlock mechanism +typedef boost::condition_variable ConditionVariable; // wait/notify_one +#else +typedef int Mutex; +typedef int ScopeLock; +typedef int ConditionVariable; +#endif + +// Simulate a "private" semaphore using boost-mechanisms: +class Semaphore +{ + private: + Mutex m_Mutex; + ConditionVariable m_CondVar; + unsigned long m_Value; + public: + // Create a semaphore object based on a mutex and a condition variable + // and initialize it to value "init". + Semaphore(unsigned long init = 0) : m_Value(init) { } + + void post() + { + ScopeLock lock(m_Mutex); + ++m_Value; // increase semaphore value: +#ifndef __puma + m_CondVar.notify_one(); // wake up other thread, currently waiting on condition var. +#endif + } + + void wait() + { + ScopeLock lock(m_Mutex); +#ifndef __puma + while(!m_Value) // "wait-if-zero" + m_CondVar.wait(lock); +#endif + --m_Value; // decrease semaphore value + } +}; + +class Signal +{ + private: + static Mutex m_InstanceMutex; // used to sync calls to getInst() + static std::auto_ptr m_This; // the one and only instance + + Semaphore m_semBochs; + Semaphore m_semContr; + Semaphore m_semSimCtrl; + bool m_Locked; // prevent misuse of thread-sync + + // Singleton class (forbid creation, copying and assignment): + Signal() + : m_semBochs(0), m_semContr(0), + m_semSimCtrl(0), m_Locked(false) { } + Signal(Signal const& s) + : m_semBochs(), m_semContr(), + m_semSimCtrl(), m_Locked(false) { } // never called. + Signal& operator=(Signal const&) { return *this; } // dito. + ~Signal() { } + friend class std::auto_ptr; + public: + static Signal& getInst() + { + ScopeLock lock(m_InstanceMutex); // lock/unlock handled by RAII principle + if(!m_This.get()) + m_This.reset(new Signal()); + return (*m_This); + } + + // Called from Experiment-Controller class ("beyond Bochs"): + void lockExperiment() + { + assert(!m_Locked && + "[Signal::lockExperiment]: lockExperiment called twice without calling unlockExperiment() in between."); + m_Locked = true; + m_semContr.wait(); // suspend experiment process + } + + // Called from Experiment-Controller class ("beyond Bochs"): + void unlockExperiment() + { + assert(m_Locked && + "[Signal::unlockExperiment]: unlockExperiment called twice without calling lockExperiment() in between."); + m_Locked = false; + m_semBochs.post(); // resume experiment (continue bochs simulation) + } + + // Called from Advice-Code ("within Bochs") to trigger event occurrence: + void signalEvent() + { + m_semContr.post(); // Signal event (to Experiment-Controller) + m_semBochs.wait(); // Wait upon handling to finish + } + + // Called from Experiment-Controller to allow simulation start: + void startSimulation() + { + m_semSimCtrl.post(); + } + + // Called from Bochs, directly after thread creation for Experiment-Controller: + // (This ensures that Bochs waits until the experiment has been set up in the + // Experiment-Controller.) + void waitForStartup() + { + m_semSimCtrl.wait(); + } +}; + +} // end-of-namespace: fi + +#endif /* __SIGNAL_HPP__ */ + diff --git a/core/controller/SynchronizedExperimentDataQueue.cc b/core/controller/SynchronizedExperimentDataQueue.cc new file mode 100644 index 00000000..52523393 --- /dev/null +++ b/core/controller/SynchronizedExperimentDataQueue.cc @@ -0,0 +1,23 @@ +#include "SynchronizedExperimentDataQueue.hpp" + +namespace fi { + +void SynchronizedExperimentDataQueue::addData(ExperimentData* exp){ + // + m_sema_full.wait(); + ExperimentDataQueue::addData(exp); + m_sema_empty.post(); + // +} + + +ExperimentData* SynchronizedExperimentDataQueue::getData(){ + // + m_sema_empty.wait(); + return ExperimentDataQueue::getData(); + m_sema_full.post(); + // +} + + +}; \ No newline at end of file diff --git a/core/controller/SynchronizedExperimentDataQueue.hpp b/core/controller/SynchronizedExperimentDataQueue.hpp new file mode 100644 index 00000000..ddd2ec0a --- /dev/null +++ b/core/controller/SynchronizedExperimentDataQueue.hpp @@ -0,0 +1,55 @@ +/** + * \brief A queue for experiment data. + * + * + * \author Martin Hoffmann, Richard Hellwig + * + */ + +#ifndef __SYNC_EXPERIMENT_DATA_QUEUE_H__ +#define __SYNC_EXPERIMENT_DATA_QUEUE_H__ + +#include "ExperimentDataQueue.hpp" +#include "Signal.hpp" + +namespace fi{ + +/** + * \class SynchronizedExperimentDataQueue + * Class which manage ExperimentData in a queue. + * Thread safe using semphores. + */ + class SynchronizedExperimentDataQueue : public ExperimentDataQueue + { + private: + /// There are maxSize elements in at a time + /// Or do we allow a really possibly huge queue? + Semaphore m_sema_full; + Semaphore m_sema_empty; + + public: + SynchronizedExperimentDataQueue(int maxSize = 1024) : m_sema_full(maxSize), m_sema_empty(0) {} + ~SynchronizedExperimentDataQueue() {} + + /** + * Adds ExperimentData to the queue. + * @param exp ExperimentData that is to be added to the queue. + */ + void addData(ExperimentData* exp); + /** + * Returns an item from the queue + * @return the next element of the queue + */ + ExperimentData* getData(); + /** + * Returns the number of elements in the queue + * @return the size of the queue + */ + size_t size() const { return m_queue.size(); }; + }; + +}; + +#endif //__EXPERIMENT_DATA_QUEUE_H__ + + diff --git a/core/experiments/CMakeLists.txt b/core/experiments/CMakeLists.txt new file mode 100644 index 00000000..b3e35afb --- /dev/null +++ b/core/experiments/CMakeLists.txt @@ -0,0 +1,6 @@ +# Note that we're allowing *multiple* experiments to be enabled at once. +set(EXPERIMENTS_ACTIVATED coolchecksum CACHE STRING "Activated experiments (a semicolon-separated list of fail/experiments/ subdirectories)") + +foreach(experiment_name ${EXPERIMENTS_ACTIVATED}) + add_subdirectory(${experiment_name}) +endforeach(experiment_name) diff --git a/core/experiments/FaultCoverageExperiment/CMakeLists.txt b/core/experiments/FaultCoverageExperiment/CMakeLists.txt new file mode 100644 index 00000000..60ae68fc --- /dev/null +++ b/core/experiments/FaultCoverageExperiment/CMakeLists.txt @@ -0,0 +1,18 @@ +#FaultCoverage experiment +set(EXPERIMENT_NAME FaultCoverageExperiment) +set(EXPERIMENT_TYPE FaultCoverageExperiment) +configure_file(../instantiate-experiment.ah.in + ${CMAKE_CURRENT_BINARY_DIR}/instantiate-${EXPERIMENT_NAME}.ah @ONLY +) + +#experiment sources +set(MY_EXPERIMENT_SRCS + experiment.cc + experiment.hpp +) + +#### include directories #### +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +## build library +add_library(${EXPERIMENT_NAME} ${MY_EXPERIMENT_SRCS}) diff --git a/core/experiments/FaultCoverageExperiment/experiment.cc b/core/experiments/FaultCoverageExperiment/experiment.cc new file mode 100644 index 00000000..4373b232 --- /dev/null +++ b/core/experiments/FaultCoverageExperiment/experiment.cc @@ -0,0 +1,140 @@ +#include +#include +#include +#include +#include + +#include "experiment.hpp" +#include "SAL/SALInst.hpp" +#include "SAL/bochs/BochsRegister.hpp" +#include "../../util/Logger.hpp" + +using namespace std; +using namespace sal; +using namespace fi; +using namespace sal; + +bool FaultCoverageExperiment::run() +{ + /* + Experimentskizze: + - starte Gastsystem + - setze Breakpoint auf Beginn der betrachteten Funktion; warte darauf + - sichere Zustand + - iteriere über alle Register + -- iteriere über alle 32 Bit in diesem Register + --- iteriere über alle Instruktionsadressen innerhalb der betrachteten Funktion + ---- setze Breakpoint auf diese Adresse; warte darauf + ---- flippe Bit x in Register y + ---- setze Breakpoint auf Verlassen der Funktion; warte darauf + ---- bei Erreichen des Breakpoint: sichere Funktionsergebnis (irgendein bestimmtes Register) + ---- lege Ergebnisdaten ab: + a) Ergebnis korrekt (im Vergleich zum bekannt korrekten Ergebnis für die Eingabe) + b) Ergebnis falsch + c) Breakpoint wird nicht erreicht, Timeout (z.B. gefangen in Endlosschleife) + d) Trap wurde ausgelöst + ---- stelle zuvor gesicherten Zustand wieder her + */ + + // set breakpoint at start address of the function to be analyzed ("observed"); + // wait until instruction pointer reaches that address + cout << "[FaultCoverageExperiment] Setting up experiment. Allowing to start now." << endl; + BPEvent ev_func_start(INST_ADDR_FUNC_START); + simulator.addEvent(&ev_func_start); + + cout << "[FaultCoverageExperiment] Waiting for function start address..." << endl; + while(simulator.waitAny() != &ev_func_start) + ; + + // store current state + cout << "[FaultCoverageExperiment] Saving state in ./bochs_save_point ..."; cout.flush(); + simulator.save("./bochs_save_point"); + cout << "done!" << endl; + + // log the results on std::cout + Logger res; + cout << "[FaultCoverageExperiment] Logging results on std::cout." << endl; + + RegisterManager& regMan = simulator.getRegisterManager(); + // iterate over all registers + for(RegisterManager::iterator it = regMan.begin(); it != regMan.end(); it++) + { + Register* pReg = *it; // get a ptr to the current register-object + // loop over the 32 bits within this register + for(regwidth_t bitnr = 0; bitnr < pReg->getWidth(); ++bitnr) + { + // loop over all instruction addresses of observed function + for(int instr = 0; ; ++instr) + { + // clear event queues + simulator.clearEvents(); + + // restore previously saved simulator state + cout << "[FaultCoverageExperiment] Restoring previous simulator state..."; cout.flush(); + simulator.restore("./bochs_save_point"); + cout << "done!" << endl; + + // breakpoint at function exit + BPEvent ev_func_end(INST_ADDR_FUNC_END); + simulator.addEvent(&ev_func_end); + + // no need to continue simulation if we want to + // inject *now* + if (instr > 0) { + // breakpoint $instr instructions in the future + BPEvent ev_instr_reached(ANY_ADDR); + ev_instr_reached.setCounter(instr); + simulator.addEvent(&ev_instr_reached); + + // if we reach the exit first, this round is done + if (simulator.waitAny() == &ev_func_end) + break; + } + + // inject bit-flip at bit $bitnr in register $reg + regdata_t data = pReg->getData(); + data ^= 1 << bitnr; + pReg->setData(data); // write back data to register + + // catch traps and timeout + TrapEvent ev_trap; // any traps + simulator.addEvent(&ev_trap); + BPEvent ev_timeout(ANY_ADDR); + ev_timeout.setCounter(1000); + simulator.addEvent(&ev_timeout); + + // wait for function exit, trap or timeout + BaseEvent* ev = simulator.waitAny(); + if(ev == &ev_func_end) + { + // log result + #if BX_SUPPORT_X86_64 + const GPRegisterId targetreg = sal::RID_RAX; + const size_t expected_size = sizeof(uint32_t)*8; + #else + const GPRegisterId targetreg = sal::RID_EAX; + const size_t expected_size = sizeof(uint64_t)*8; + #endif + Register* pEAX = simulator.getRegisterManager().getSetOfType(RT_GP)->getRegister(targetreg); + assert(expected_size == pEAX->getWidth()); // we assume to get 32(64) bits... + regdata_t result = pEAX->getData(); + res << "[FaultCoverageExperiment] Reg: " << pReg->getName() + << ", #Bit: " << bitnr << ", Instr-Idx: " << instr + << ", Data: " << result; + } + else if(ev == &ev_trap) + res << "[FaultCoverageExperiment] Reg: " << pReg->getName() + << ", #Bit: " << bitnr << ", Instr-Idx: " << instr + << ", Trap#: " << ev_trap.getTriggerNumber() << " (Trap)"; + else if(ev == &ev_timeout) + res << "[FaultCoverageExperiment] Reg: " << pReg->getName() + << ", #Bit: " << bitnr << ", Instr-Idx: " << instr + << " (Timeout)"; + else + cout << "We've received an unkown event! " + << "What the hell is going on?" << endl; + } + } + } + return (true); +} diff --git a/core/experiments/FaultCoverageExperiment/experiment.hpp b/core/experiments/FaultCoverageExperiment/experiment.hpp new file mode 100644 index 00000000..2d1c5e85 --- /dev/null +++ b/core/experiments/FaultCoverageExperiment/experiment.hpp @@ -0,0 +1,32 @@ +#ifndef __FAULTCOVERAGE_EXPERIMENT_HPP__ + #define __FAULTCOVERAGE_EXPERIMENT_HPP__ + +#include +#include + +#include "AspectConfig.hpp" +#include "controller/ExperimentFlow.hpp" + +#define INST_ADDR_FUNC_START 0x4ae6 +#define INST_ADDR_FUNC_END 0x4be6 + +/* +// Check if aspect dependencies are satisfied: +#if CONFIG_EVENT_CPULOOP != 1 || CONFIG_EVENT_TRAP != 1 || \ + CONFIG_SR_RESTORE != 1 || CONFIG_SR_SAVE != 1 + #error At least one of the following aspect-dependencies are not satisfied: \ + cpu loop, traps, save/restore. Enable aspects first (see AspectConfig.hpp)! +#endif +// This is disabled because the AspectConfig.hpp-header disables +// all aspects on default. +*/ +using namespace fi; + +class FaultCoverageExperiment : public ExperimentFlow +{ + public: + bool run(); +}; + +#endif // __FAULTCOVERAGE_EXPERIMENT_HPP__ + diff --git a/core/experiments/MHTestCampaign/CMakeLists.txt b/core/experiments/MHTestCampaign/CMakeLists.txt new file mode 100644 index 00000000..9485934f --- /dev/null +++ b/core/experiments/MHTestCampaign/CMakeLists.txt @@ -0,0 +1,31 @@ +set(EXPERIMENT_NAME MHTestCampaign) +set(EXPERIMENT_TYPE MHTestExperiment) +configure_file(../instantiate-experiment.ah.in + ${CMAKE_CURRENT_BINARY_DIR}/instantiate-${EXPERIMENT_NAME}.ah @ONLY +) + +## Setup desired protobuf descriptions HERE ## +set(MY_PROTOS + MHTest.proto +) + +set(MY_CAMPAIGN_SRCS + MHTestCampaign.hpp + MHTestCampaign.cc + experiment.hpp + experiment.cc +) + +#### PROTOBUFS #### +find_package(Protobuf REQUIRED) +include_directories(${PROTOBUF_INCLUDE_DIRS}) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${MY_PROTOS}) + +## Build library +add_library(${EXPERIMENT_NAME} ${PROTO_SRCS} ${PROTO_HDRS} ${MY_CAMPAIGN_SRCS}) + +## This is the example's campaign server distributing experiment parameters +add_executable(${EXPERIMENT_NAME}-server mhcampaign.cc) +target_link_libraries(${EXPERIMENT_NAME}-server fail ${PROTOBUF_LIBRARY} ${Boost_THREAD_LIBRARY}) diff --git a/core/experiments/MHTestCampaign/MHTest.proto b/core/experiments/MHTestCampaign/MHTest.proto new file mode 100644 index 00000000..94e88bb7 --- /dev/null +++ b/core/experiments/MHTestCampaign/MHTest.proto @@ -0,0 +1,5 @@ +message MHTestData { + optional string foo = 1; + optional int32 input = 2; + optional int32 output = 3; +} diff --git a/core/experiments/MHTestCampaign/MHTestCampaign.cc b/core/experiments/MHTestCampaign/MHTestCampaign.cc new file mode 100644 index 00000000..90c60cfd --- /dev/null +++ b/core/experiments/MHTestCampaign/MHTestCampaign.cc @@ -0,0 +1,42 @@ +#include "MHTestCampaign.hpp" +#include +#include + +using namespace fi; + + +bool MHTestCampaign::run() +{ + + MHExperimentData* datas[m_parameter_count]; + cout << "[MHTestCampaign] Adding " << m_parameter_count << " values." << endl; + for(int i = 1; i <= m_parameter_count; i++){ + datas[i] = new MHExperimentData; + datas[i]->msg.set_input(i); + + campaignmanager.addParam(datas[i]); + usleep(100 * 1000); // 100 ms + } + campaignmanager.noMoreParameters(); + // test results. + int f; + int res = 0; + int res2 = 0; + MHExperimentData * exp; + for(int i = 1; i <= m_parameter_count; i++){ + exp = static_cast( campaignmanager.getDone() ); + f = exp->msg.output(); +// cout << ">>>>>>>>>>>>>>> Output: " << i << "^2 = " << f << endl; + res += f; + res2 += (i*i); + delete exp; + } + if (res == res2) { + cout << "TEST SUCCESSFUL FINISHED! " << "[" << res << "==" << res2 << "]" << endl; + }else{ + cout << "TEST FAILED!" << " [" << res << "!=" << res2 << "]" << endl; + } + cout << "thats all... " << endl; + + return true; +} diff --git a/core/experiments/MHTestCampaign/MHTestCampaign.hpp b/core/experiments/MHTestCampaign/MHTestCampaign.hpp new file mode 100644 index 00000000..786f24a5 --- /dev/null +++ b/core/experiments/MHTestCampaign/MHTestCampaign.hpp @@ -0,0 +1,27 @@ +#ifndef __TESTCAMPAIGN_HPP__ +#define __TESTCAMPAIGN_HPP__ + + +#include +#include "controller/ExperimentData.hpp" +#include + +using namespace fi; + +class MHExperimentData : public ExperimentData { + public: + MHTestData msg; + public: + MHExperimentData() : ExperimentData(&msg){ }; +}; + + +class MHTestCampaign : public Campaign { + int m_parameter_count; + public: + MHTestCampaign(int parametercount) : m_parameter_count(parametercount){}; + virtual bool run(); +}; + + +#endif diff --git a/core/experiments/MHTestCampaign/experiment.cc b/core/experiments/MHTestCampaign/experiment.cc new file mode 100644 index 00000000..570e4cfe --- /dev/null +++ b/core/experiments/MHTestCampaign/experiment.cc @@ -0,0 +1,42 @@ +#include "experiment.hpp" +#include "MHTestCampaign.hpp" +#include "SAL/SALInst.hpp" +#include "SAL/Register.hpp" +#include "controller/Event.hpp" + +#include + +bool MHTestExperiment::run() +{ + + cout << "[MHTestExperiment] Let's go" << endl; +#if 0 + fi::BPEvent mainbp(0x00003c34); + sal::simulator.addEventAndWait(&mainbp); + cout << "[MHTestExperiment] breakpoint reached, saving" << endl; + sal::simulator.save("hello.main"); +#else + MHExperimentData par; + if(m_jc.getParam(par)){ + + int num = par.msg.input(); + cout << "[MHExperiment] stepping " << num << " instructions" << endl; + if (num > 0) { + fi::BPEvent nextbp(fi::ANY_ADDR); + nextbp.setCounter(num); + sal::simulator.addEventAndWait(&nextbp); + } + sal::address_t instr = sal::simulator.getRegisterManager().getInstructionPointer(); + cout << "[MHTestExperiment] Reached instruction: " + << hex << instr + << endl; + par.msg.set_output(instr); + m_jc.sendResult(par); + } else { + cout << "No data for me? :(" << endl; + } +#endif + sal::simulator.terminate(); + return true; +} + diff --git a/core/experiments/MHTestCampaign/experiment.hpp b/core/experiments/MHTestCampaign/experiment.hpp new file mode 100644 index 00000000..7cab5919 --- /dev/null +++ b/core/experiments/MHTestCampaign/experiment.hpp @@ -0,0 +1,17 @@ +#ifndef __TESTEXPERIMENT_HPP__ +#define __TESTEXPERIMENT_HPP__ + +#include "controller/ExperimentFlow.hpp" +#include "jobserver/JobClient.hpp" + +class MHTestExperiment : public fi::ExperimentFlow { + fi::JobClient m_jc; + public: + MHTestExperiment(){}; + ~MHTestExperiment(){}; + bool run(); +}; + + + +#endif diff --git a/core/experiments/MHTestCampaign/mhcampaign.cc b/core/experiments/MHTestCampaign/mhcampaign.cc new file mode 100644 index 00000000..97535bb6 --- /dev/null +++ b/core/experiments/MHTestCampaign/mhcampaign.cc @@ -0,0 +1,25 @@ +#include "controller/CampaignManager.hpp" +#include "experiments/MHTestCampaign/MHTestCampaign.hpp" +#include +#include + +using namespace std; + +int main(int argc, char**argv){ + + int paramcount = 0; + if(argc == 2){ + paramcount = atoi(argv[1]); + }else{ + paramcount = 10; + } + cout << "Running MHTestCampaign [" << paramcount << " parameter sets]" << endl; + + MHTestCampaign mhc(paramcount); + campaignmanager.runCampaign(&mhc); + + cout << "Campaign complete." << endl; + + return 0; + +} diff --git a/core/experiments/TracingTest/CMakeLists.txt b/core/experiments/TracingTest/CMakeLists.txt new file mode 100644 index 00000000..5c5b3dcf --- /dev/null +++ b/core/experiments/TracingTest/CMakeLists.txt @@ -0,0 +1,15 @@ +set(EXPERIMENT_NAME TracingTest) +set(EXPERIMENT_TYPE TracingTest) +configure_file(../instantiate-experiment.ah.in + ${CMAKE_CURRENT_BINARY_DIR}/instantiate-${EXPERIMENT_NAME}.ah @ONLY +) + +set(MY_CAMPAIGN_SRCS + experiment.hpp + experiment.cc +) + +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +## Build library +add_library(${EXPERIMENT_NAME} ${PROTO_SRCS} ${PROTO_HDRS} ${MY_CAMPAIGN_SRCS}) diff --git a/core/experiments/TracingTest/experiment.cc b/core/experiments/TracingTest/experiment.cc new file mode 100644 index 00000000..b5b29068 --- /dev/null +++ b/core/experiments/TracingTest/experiment.cc @@ -0,0 +1,79 @@ +#include + +#include "SAL/SALInst.hpp" +#include "SAL/Register.hpp" +#include "experiment.hpp" +#include "plugins/tracing/TracingPlugin.hpp" + +/* +#include +#include +*/ + +using std::cout; +using std::endl; +using namespace fi; +using namespace sal; + +bool TracingTest::run() +{ + cout << "[TracingTest] Setting up experiment" << endl; + +#if 1 + // STEP 1: run until interesting function starts, and save state + BPEvent breakpoint(0x00101658); + simulator.addEventAndWait(&breakpoint); + cout << "[TracingTest] main() reached, saving" << endl; + + simulator.save("state"); +#else + // STEP 2: test tracing plugin + simulator.restore("state"); + + cout << "[TracingTest] enabling tracing" << endl; + + TracingPlugin tp; + tp.setOstream(&cout); + Trace trace; + tp.setTraceMessage(&trace); + // this must be done *after* configuring the plugin: + simulator.addFlow(&tp); + + cout << "[TracingTest] tracing 1000000 instructions" << endl; + BPEvent timeout(fi::ANY_ADDR); + timeout.setCounter(1000000); + simulator.addEvent(&timeout); + + InterruptEvent ie(fi::ANY_INTERRUPT); + while (simulator.addEventAndWait(&ie) != &timeout) { + cout << "INTERRUPT #" << ie.getTriggerNumber() << "\n"; + } + + cout << "[TracingTest] disabling tracing (trace size: " + << std::dec << trace.ByteSize() << " bytes)\n"; + simulator.removeFlow(&tp); + +/* + // serialize trace to file + std::ofstream of("trace.pb"); + if (of.fail()) { return false; } + trace.SerializeToOstream(&of); + of.close(); + + // serialize trace to gzip-compressed file + int fd = open("trace.pb.gz", O_WRONLY | O_CREAT | O_TRUNC, 0666); + if (!fd) { return false; } + google::protobuf::io::FileOutputStream fo(fd); + google::protobuf::io::GzipOutputStream::Options options; + options.compression_level = 9; + google::protobuf::io::GzipOutputStream go(&fo, options); + trace.SerializeToZeroCopyStream(&go); + go.Close(); + fo.Close(); +*/ +#endif + cout << "[TracingTest] Finished." << endl; + simulator.terminate(); + + return true; +} diff --git a/core/experiments/TracingTest/experiment.hpp b/core/experiments/TracingTest/experiment.hpp new file mode 100644 index 00000000..62c0515a --- /dev/null +++ b/core/experiments/TracingTest/experiment.hpp @@ -0,0 +1,12 @@ +#ifndef __TRACING_TEST_HPP__ + #define __TRACING_TEST_HPP__ + +#include "controller/ExperimentFlow.hpp" + +class TracingTest : public fi::ExperimentFlow +{ +public: + bool run(); +}; + +#endif /* __TRACING_TEST_HPP__ */ diff --git a/core/experiments/attic/DataRetrievalExperiment.cc b/core/experiments/attic/DataRetrievalExperiment.cc new file mode 100644 index 00000000..2de4ee80 --- /dev/null +++ b/core/experiments/attic/DataRetrievalExperiment.cc @@ -0,0 +1,36 @@ +#include + +#include "DataRetrievalExperiment.hpp" +#include "../SAL/SALInst.hpp" +#include "../controller/Event.hpp" +#include "ExperimentDataExample/FaultCoverageExperiment.pb.h" + +using std::cout; +using std::endl; +using std::hex; + +#define MEMTEST86_BREAKPOINT 0x4EDC + +bool DataRetrievalExperiment::run() +{ + cout << "[getExperimentDataExperiment] Experiment start." << endl; + + // Breakpoint address for Memtest86: + fi::BPEvent mainbp(MEMTEST86_BREAKPOINT); + sal::simulator.addEventAndWait(&mainbp); + cout << "[getExperimentDataExperiment] Breakpoint reached." << endl; + + FaultCoverageExperimentData* test = NULL; + cout << "[getExperimentDataExperiment] Getting ExperimentData (FaultCoverageExperiment)..." << endl; + test = sal::simulator.getExperimentData(); + cout << "[getExperimentDataExperiment] Content of ExperimentData (FaultCoverageExperiment):" << endl; + + if(test->has_data_name()) + cout << "Name: "<< test->data_name() << endl; + // m_instrptr1 augeben + cout << "m_instrptr1: " << hex << test->m_instrptr1() << endl; + // m_instrptr2 augeben + cout << "m_instrptr2: " << hex << test->m_instrptr2() << endl; + + return (true); // experiment successful +} diff --git a/core/experiments/attic/DataRetrievalExperiment.hpp b/core/experiments/attic/DataRetrievalExperiment.hpp new file mode 100644 index 00000000..89aea0d5 --- /dev/null +++ b/core/experiments/attic/DataRetrievalExperiment.hpp @@ -0,0 +1,14 @@ +#ifndef __DATA_RETRIEVAL_EXPERIMENT_HPP__ + #define __DATA_RETRIEVAL_EXPERIMENT_HPP__ + +#include "../controller/ExperimentFlow.hpp" + +class DataRetrievalExperiment : public fi::ExperimentFlow +{ + public: + DataRetrievalExperiment() { } + + bool run(); +}; + +#endif /* __DATA_RETRIEVAL_EXPERIMENT_HPP__ */ diff --git a/core/experiments/attic/ExperimentDataExample/CMakeLists.txt b/core/experiments/attic/ExperimentDataExample/CMakeLists.txt new file mode 100644 index 00000000..53084df2 --- /dev/null +++ b/core/experiments/attic/ExperimentDataExample/CMakeLists.txt @@ -0,0 +1,19 @@ +## Setup desired protobuf descriptions HERE ## +set(MY_PROTOS + FaultCoverageExperiment.proto +) + +set(SRCS + example.cc +) + +#### PROTOBUFS #### +find_package(Protobuf REQUIRED) +include_directories(${PROTOBUF_INCLUDE_DIRS}) +include_directories(${CMAKE_CURRNET_BINARY_DIR}) + +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${MY_PROTOS} ) + +## Build library +add_library(fcexperimentmessage ${PROTO_SRCS} ${SRCS} ) + diff --git a/core/experiments/attic/ExperimentDataExample/FaultCoverageExperiment.proto b/core/experiments/attic/ExperimentDataExample/FaultCoverageExperiment.proto new file mode 100644 index 00000000..831cc292 --- /dev/null +++ b/core/experiments/attic/ExperimentDataExample/FaultCoverageExperiment.proto @@ -0,0 +1,7 @@ +message FaultCoverageExperimentData{ + + optional string data_name = 1; + required int64 m_InstrPtr1 = 2; + required int64 m_InstrPtr2 = 3; + +} diff --git a/core/experiments/attic/ExperimentDataExample/build_example.sh b/core/experiments/attic/ExperimentDataExample/build_example.sh new file mode 100755 index 00000000..8a012673 --- /dev/null +++ b/core/experiments/attic/ExperimentDataExample/build_example.sh @@ -0,0 +1,3 @@ +#!/bin/bash +cd $(dirname $0) +g++ ../../controller/JobServer.cc ../../controller/ExperimentDataQueue.cc example.cc FaultCoverageExperiment.pb.cc -o ./ExperimentData_example -l protobuf -pthread diff --git a/core/experiments/attic/ExperimentDataExample/example.cc b/core/experiments/attic/ExperimentDataExample/example.cc new file mode 100644 index 00000000..4abb2812 --- /dev/null +++ b/core/experiments/attic/ExperimentDataExample/example.cc @@ -0,0 +1,89 @@ +#include +#include +#include "controller/ExperimentData.hpp" +#include "controller/ExperimentDataQueue.hpp" +#include "jobserver/JobServer.hpp" +#include "FaultCoverageExperiment.pb.h" + +using namespace std; + +int main(int argc, char* argv[]){ + + + fi::ExperimentDataQueue exDaQu; + fi::ExperimentData* readFromQueue; + + + //Daten in Struktur schreiben und in Datei speichern + + ofstream fileWrite; + fileWrite.open("test.txt"); + + + FaultCoverageExperimentData faultCovExWrite; + + //Namen setzen + faultCovExWrite.set_data_name("Testfall 42"); + + //Instruktionpointer 1 + faultCovExWrite.set_m_instrptr1(0x4711); + + + //Instruktionpointer 2 + faultCovExWrite.set_m_instrptr2(0x1122); + + + //In ExperimentData verpacken + fi::ExperimentData exDaWrite(&faultCovExWrite); + + //In Queue einbinden + exDaQu.addData(&exDaWrite); + + //Aus Queue holen + if(exDaQu.size() != 0) + readFromQueue = exDaQu.getData(); + + //Serialisierung ueber Wrapper-Methode in ExperimentData + readFromQueue->serialize(&fileWrite); + + //cout << "Ausgabe: " << out << endl; + + fileWrite.close(); + + + +//------------------------------------------------------------------------------------------------- + + + + + //Daten aus Datei lesen und in Struktur schreiben + + + ifstream fileRead; + fileRead.open("test.txt"); + + + FaultCoverageExperimentData faultCovExRead; + + fi::ExperimentData exDaRead(&faultCovExRead); + + exDaRead.unserialize( &fileRead); + + + //Wenn Name, dann ausgeben + if(faultCovExRead.has_data_name()){ + cout << "Name: "<< faultCovExRead.data_name() << endl; + } + + //m_instrptr1 augeben + cout << "m_instrptr1: " << faultCovExRead.m_instrptr1() << endl; + + //m_instrptr2 augeben + cout << "m_instrptr2: " << faultCovExRead.m_instrptr2() << endl; + + fileRead.close(); + + + return 0; +} diff --git a/core/experiments/attic/JumpAndRunExperiment/JumpAndRunExperiment.hpp b/core/experiments/attic/JumpAndRunExperiment/JumpAndRunExperiment.hpp new file mode 100644 index 00000000..ca1bc1bd --- /dev/null +++ b/core/experiments/attic/JumpAndRunExperiment/JumpAndRunExperiment.hpp @@ -0,0 +1,80 @@ +#ifndef __JUMP_AND_RUN_EXPERIMENT_HPP__ + #define __JUMP_AND_RUN_EXPERIMENT_HPP__ + +// Author: Adrian Böckenkamp +// Date: 07.11.2011 + +#include + +#include "../controller/ExperimentFlow.hpp" +#include "../SAL/SALInst.hpp" +#include "../SAL/bochs/BochsRegister.hpp" +#include "../AspectConfig.hpp" + +// Check if aspect dependencies are satisfied: +#if CONFIG_EVENT_CPULOOP != 1 || CONFIG_EVENT_JUMP != 1 + #error Breakpoint- and jump-events needed! Enable aspects first (see AspectConfig.hpp)! +#endif + +using namespace fi; +using namespace std; +using namespace sal; + +class JumpAndRunExperiment : public fi::ExperimentFlow +{ + public: + bool run() + { + /************************************ + * Description of experiment flow. * + ************************************/ + // Wait for function entry adresss: + cout << "[JumpAndRunExperiment] Setting up experiment. Allowing to " + << "start now." << endl; + BPEvent mainFuncEntry(0x3c1f); + simulator.addEvent(&mainFuncEntry); + if(&mainFuncEntry != simulator.waitAny()) + { + cerr << "[JumpAndRunExperiment] Now, we are completely lost! " + << "It's time to cry! :-(" << endl; + return (false); + } + else + cout << "[JumpAndRunExperiment] Entry of main function reached! " + << " Let's see who's jumping around here..." << endl; + + const unsigned COUNTER = 20000; + unsigned i = 0; + BxFlagsReg* pFlags = dynamic_cast(simulator. + getRegisterManager().getSetOfType(RT_ST).snatch()); + assert(pFlags != NULL && "FATAL ERROR: NULL ptr not expected!"); + JumpEvent ev; + // Catch the next "counter" jumps: + while(++i <= COUNTER) + { + ev.setWatchInstructionPointer(ANY_INSTR); + simulator.addEvent(&ev); + if(simulator.waitAny() != &ev) + { + cerr << "[JumpAndRunExperiment] Damn! Something went " + << "terribly wrong! Who added that event?! :-(" << endl; + return (false); + } + else + cout << "[JumpAndRunExperiment] Jump detected. Instruction: " + << "0x" hex << ev.getTriggerInstructionPointer() + << " -- FLAGS [CF, ZF, OF, PF, SF] = [" + << pFlags->getCarryFlag() << ", " + << pFlags->getZeroFlag() << ", " + << pFlags->getOverflowFlag() << ", " + << pFlags->getParityFlag() << ", " + << pFlags->getSignFlag() << "]." << endl; + } + cout << "[JumpAndRunExperiment] " << dec << counter + << " jump(s) detected -- enough for today...exiting! :-)" + << endl; + return (true); + } +}; + +#endif /* __JUMP_AND_RUN_EXPERIMENT_HPP__ */ diff --git a/core/experiments/attic/MemWriteExperiment.hpp b/core/experiments/attic/MemWriteExperiment.hpp new file mode 100644 index 00000000..08d84de6 --- /dev/null +++ b/core/experiments/attic/MemWriteExperiment.hpp @@ -0,0 +1,76 @@ +#ifndef __MEM_WRITE_EXPERIMENT_HPP__ + #define __MEM_WRITE_EXPERIMENT_HPP__ + +// Author: Adrian Böckenkamp +// Date: 16.06.2011 + +#include + +#include "../controller/ExperimentFlow.hpp" +#include "../SAL/SALInst.hpp" +#include "../AspectConfig.hpp" + +// Check aspect dependencies: +#if CONFIG_EVENT_CPULOOP != 1 || CONFIG_EVENT_MEMACCESS != 1 || CONFIG_SR_SAVE != 1 || CONFIG_FI_MEM_ACCESS_BITFLIP != 1 + #error Event dependecies not satisfied! Enabled needed aspects in AspectConfig.hpp! +#endif + +using namespace fi; +using namespace std; +using sal::simulator; + +class MemWriteExperiment : public ExperimentFlow +{ + public: + bool run() // Example experiment (defines "what we wanna do") + { + /************************************ + * Description of experiment flow. * + ************************************/ + + // 1. Add some events (set up the experiment): + cout << "[MemWriteExperiment] Setting up experiment. Allowing to" + << " start now." << endl; + MemWriteEvent mem1(0x000904F0), mem2(0x02ff0916), mem3(0x0050C8E8); + BPEvent breakpt(0x4ae6); + simulator.addEvent(&mem1); + simulator.addEvent(&mem2); + simulator.addEvent(&mem3); + simulator.addEvent(&breakpt); + + // 2. Wait for event condition "(id1 && id2) || id3" to become true: + cout << "[MemWriteExperiment] Waiting for condition (1) (\"(id1 &&" + << " id2) || id3\") to become true..." << endl; + bool f1 = false, f2 = false, f3 = false, f4 = false; + while(!(f1 || f2 || f3 || f4)) + { + BPEvent* pev = simulator.waitAny(); + cout << "[MemWriteExperiment] Received event id=" << id + << "." << endl; + if(pev == &mem4) + f4 = true; + if(pev == &mem3) + f3 = true; + if(pev == &mem2) + f2 = true; + if(pev == &mem1) + f1 = true; + } + cout << "[MemWriteExperiment] Condition (1) satisfied! Ready to " + << "add next event..." << endl; + // 3. Add a new event now: + cout << "[MemWriteExperiment] Adding new Event..."; cout.flush(); + simulator.clearEvents(); // remove residual events in the buffer + // (we're just interested in the new event) + simulator.save("./bochs_save_point"); + cout << "done!" << endl; + + // 4. Continue simulation (waitAny) and inject bitflip: + // ... + + return (true); + } +}; + +#endif /* __MEM_WRITE_EXPERIMENT_HPP__ */ + diff --git a/core/experiments/attic/MyExperiment.hpp b/core/experiments/attic/MyExperiment.hpp new file mode 100644 index 00000000..db7ee92b --- /dev/null +++ b/core/experiments/attic/MyExperiment.hpp @@ -0,0 +1,64 @@ +#ifndef __MY_EXPERIMENT_HPP__ + #define __MY_EXPERIMENT_HPP__ + +// Author: Adrian Böckenkamp +// Date: 16.06.2011 + +#include + +#include "../controller/ExperimentFlow.hpp" +#include "../SAL/SALInst.hpp" + +using namespace fi; +using namespace std; +using sal::simulator; + +class MyExperiment : public fi::ExperimentFlow +{ + public: + bool run() // Example experiment (defines "what we wanna do") + { + /************************************ + * Description of experiment flow. * + ************************************/ + + // 1. Add some events (set up the experiment): + cout << "[MyExperiment] Setting up experiment. Allowing to start" + << " now." << endl; + BPEvent ev1(0x8048A00), ev2(0x8048F01), ev3(0x3c1f); + simulator.addEvent(&ev1); + simulator.addEvent(&ev2); + simulator.addEvent(&ev3); + + // 2. Wait for event condition "(id1 && id2) || id3" to become true: + BPEvent* pev; + cout << "[MyExperiment] Waiting for condition (1) (\"(id1 && id2)" + << " || id3\") to become true..." << endl; + bool f1 = false, f2 = false, f3 = false; + while(!((f1 && f2) || f3)) + { + pev = simulator.waitAny(); + cout << "[MyExperiment] Received event id=" << pev->getId() + << "." << endl; + if(pev == &ev3) + f3 = true; + if(pev == &ev2) + f2 = true; + if(pev == &ev1) + f1 = true; + } + cout << "[MyExperiment] Condition (1) satisfied! Ready..." << endl; + // Remove residual (for all active experiments!) + // events in the buffer: + simulator.clearEvents(); + BPEvent foobar(ANY_ADDR); + foobar.setCounter(400); + cout << "[MyExperiment] Adding breakpoint-event, firing after the" + << " next 400 instructions..."; cout.flush(); + simulator.addEventAndWait(&foobar); + cout << "cought! Exiting now." << endl; + return (true); + } +}; + +#endif /* __MY_EXPERIMENT_HPP__ */ diff --git a/core/experiments/attic/SingleSteppingExperiment.hpp b/core/experiments/attic/SingleSteppingExperiment.hpp new file mode 100644 index 00000000..a6a0a54b --- /dev/null +++ b/core/experiments/attic/SingleSteppingExperiment.hpp @@ -0,0 +1,64 @@ +#ifndef __SINGLE_STEPPING_EXPERIMENT_HPP__ + #define __SINGLE_STEPPING_EXPERIMENT_HPP__ + +// Author: Adrian Böckenkamp +// Date: 09.11.2011 + +#include + +#include "../controller/ExperimentFlow.hpp" +#include "../SAL/SALInst.hpp" +#include "../AspectConfig.hpp" +#include "../SAL/bochs/BochsRegister.hpp" + +// Check if aspect dependency is satisfied: +#if CONFIG_EVENT_CPULOOP != 1 + #error Breakpoint-events needed! Enable aspect first (see AspectConfig.hpp)! +#endif + +using namespace fi; +using namespace std; +using namespace sal; + +#define FUNCTION_ENTRY_ADDRESS 0x3c1f + +class SingleSteppingExperiment : public fi::ExperimentFlow +{ + public: + bool run() + { + /************************************ + * Description of experiment flow. * + ************************************/ + // Wait for function entry adresss: + cout << "[SingleSteppingExperiment] Setting up experiment. Allowing" + << " to start now." << endl; + BPEvent mainFuncEntry(FUNCTION_ENTRY_ADDRESS); + simulator.addEvent(&mainFuncEntry); + if(&mainFuncEntry != simulator.waitAny()) + { + cerr << "[SingleSteppingExperiment] Now, we are completely lost!" + << " It's time to cry! :-(" << endl; + return (false); + } + cout << "[SingleSteppingExperiment] Entry of main function reached!" + << " Beginning single-stepping..." << endl; + char action; + while(true) + { + BPEvent bp(ANY_ADDR); + simulator.addEvent(&bp); + simulator.waitAny(); + cout << "0x" << hex + << simulator.getRegisterManager().getInstructionPointer() + << endl; + cout << "Continue (y/n)? "; + cin >> action; cin.sync(); cin.clear(); + if(action != 'y') + break; + } + return (true); + } +}; + +#endif /* __SINGLE_STEPPING_EXPERIMENT_HPP__ */ diff --git a/core/experiments/attic/instantiate-experiment.ah.template b/core/experiments/attic/instantiate-experiment.ah.template new file mode 100644 index 00000000..79ed1d85 --- /dev/null +++ b/core/experiments/attic/instantiate-experiment.ah.template @@ -0,0 +1,16 @@ +#ifndef __INSTANTIATE_EXPERIMENT_AH__ + #define __INSTANTIATE_EXPERIMENT_AH__ + +// copy this file to a .ah file and instantiate the experiment(s) you need + +#include "hscsimple.hpp" +#include "../SAL/SALInst.hpp" + +aspect hscsimple { + hscsimpleExperiment experiment; + advice execution ("void sal::SimulatorController::initExperiments()") : after () { + sal::simulator.addFlow(&experiment); + } +}; + +#endif // __INSTANTIATE_EXPERIMENT_AH__ diff --git a/core/experiments/checksum-oostubs/CMakeLists.txt b/core/experiments/checksum-oostubs/CMakeLists.txt new file mode 100644 index 00000000..328a3bd6 --- /dev/null +++ b/core/experiments/checksum-oostubs/CMakeLists.txt @@ -0,0 +1,31 @@ +set(EXPERIMENT_NAME checksum-oostubs) +set(EXPERIMENT_TYPE CoolChecksumExperiment) # FIXME naming conflict +configure_file(../instantiate-experiment.ah.in + ${CMAKE_CURRENT_BINARY_DIR}/instantiate-${EXPERIMENT_NAME}.ah @ONLY +) + +## Setup desired protobuf descriptions HERE ## +set(MY_PROTOS + checksum-oostubs.proto +) + +set(MY_CAMPAIGN_SRCS + experiment.hpp + experiment.cc + campaign.hpp + campaign.cc +) + +#### PROTOBUFS #### +find_package(Protobuf REQUIRED) +include_directories(${PROTOBUF_INCLUDE_DIRS}) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${MY_PROTOS}) + +## Build library +add_library(${EXPERIMENT_NAME} ${PROTO_SRCS} ${PROTO_HDRS} ${MY_CAMPAIGN_SRCS}) + +## This is the example's campaign server distributing experiment parameters +add_executable(${EXPERIMENT_NAME}-server main.cc) +target_link_libraries(${EXPERIMENT_NAME}-server ${EXPERIMENT_NAME} fail ${PROTOBUF_LIBRARY} ${Boost_THREAD_LIBRARY}) diff --git a/core/experiments/checksum-oostubs/MemoryMap.hpp b/core/experiments/checksum-oostubs/MemoryMap.hpp new file mode 120000 index 00000000..75a95d8e --- /dev/null +++ b/core/experiments/checksum-oostubs/MemoryMap.hpp @@ -0,0 +1 @@ +../../util/MemoryMap.hpp \ No newline at end of file diff --git a/core/experiments/checksum-oostubs/campaign.cc b/core/experiments/checksum-oostubs/campaign.cc new file mode 100644 index 00000000..0ad3ad27 --- /dev/null +++ b/core/experiments/checksum-oostubs/campaign.cc @@ -0,0 +1,140 @@ +#include + +#include "campaign.hpp" +#include "experimentInfo.hpp" +#include "controller/CampaignManager.hpp" +#include "util/Logger.hpp" + +using namespace fi; +using std::endl; + +char const * const results_csv = "chksumoostubs.csv"; + +//TODO: generate new values for the updated experiment +const unsigned memoryMap[49][2] = { +{0x109134, 4}, +{0x10913c, 4}, +{0x109184, 4}, +{0x1091cc, 1}, +{0x109238, 256}, +{0x109344, 4}, +{0x109350, 4}, +{0x109354, 4}, +{0x109368, 1}, +{0x109374, 4}, +{0x109388, 1}, +{0x109398, 4}, +{0x1093a0, 4}, +{0x1093b4, 4}, +{0x1093b8, 4}, +{0x1093c0, 4}, +{0x1093d0, 4}, +{0x1093dc, 4}, +{0x1093e0, 4}, +{0x1093e8, 1}, +{0x1093f0, 4}, +{0x1093f4, 4}, +{0x10a460, 4}, +{0x10a468, 4}, +{0x10a470, 4}, +{0x10a478, 4}, +{0x10a480, 4}, +{0x10a488, 4}, +{0x10a494, 4}, +{0x10a498, 4}, +{0x10a4a8, 4}, +{0x10a4ad, 1}, +{0x10a4b4, 4}, +{0x10a4b8, 4}, +{0x10a4c8, 4}, +{0x10a4cd, 1}, +{0x10a4d4, 4}, +{0x10a4d8, 4}, +{0x10a4e8, 4}, +{0x10a4ed, 1}, +{0x10a4f4, 4}, +{0x10a4f8, 4}, +{0x10a500, 4}, +{0x10d350, 4}, +{0x10d358, 4}, +{0x10d37c, 4}, +{0x10d384, 4}, +{0x10d3a8, 4}, +{0x10d3b0, 4}, +}; + + + +bool CoolChecksumCampaign::run() +{ + Logger log("CoolChecksumCampaign"); + + ifstream test(results_csv); + if (test.is_open()) { + log << results_csv << " already exists" << endl; + return false; + } + ofstream results(results_csv); + if (!results.is_open()) { + log << "failed to open " << results_csv << endl; + return false; + } + + log << "startup" << endl; + + unsigned count = 0; + + for(int member = 0; member < 49; ++member){ //TODO: 49 -> constant + for (int bit_offset = 0; bit_offset < (memoryMap[member][1])*8; ++bit_offset) { + for (int instr_offset = 0; instr_offset < OOSTUBS_NUMINSTR; ++instr_offset) { + CoolChecksumExperimentData *d = new CoolChecksumExperimentData; + d->msg.set_instr_offset(instr_offset); + d->msg.set_mem_addr(memoryMap[member][0]); + d->msg.set_bit_offset(bit_offset); + + fi::campaignmanager.addParam(d); + ++count; + } + } + } + + #if 0 + for (int bit_offset = 0; bit_offset < COOL_ECC_OBJUNDERTEST_SIZE*8; ++bit_offset) { + for (int instr_offset = 0; instr_offset < OOSTUBS_NUMINSTR; ++instr_offset) { + CoolChecksumExperimentData *d = new CoolChecksumExperimentData; + d->msg.set_instr_offset(instr_offset); + d->msg.set_mem_addr(0x0); + d->msg.set_bit_offset(bit_offset); + + fi::campaignmanager.addParam(d); + ++count; + } + } + #endif + + fi::campaignmanager.noMoreParameters(); + log << "done enqueueing parameter sets (" << count << ")." << endl; + + // collect results + CoolChecksumExperimentData *res; + int rescount = 0; + results << "injection_ip\tinstr_offset\tinjection_bit\tresulttype\tresultdata\terror_corrected\tdetails" << endl; + while ((res = static_cast(fi::campaignmanager.getDone()))) { + rescount++; + + results + << res->msg.injection_ip() << "\t" + << res->msg.instr_offset() << "\t" + << res->msg.mem_addr() << "\t" + << res->msg.bit_offset() << "\t" + << res->msg.resulttype() << "\t" + << res->msg.resultdata() << "\t" + << res->msg.error_corrected() << "\t" + << res->msg.details() << "\n"; + delete res; + } + log << "done. sent " << count << " received " << rescount << endl; + results.close(); + + return true; +} diff --git a/core/experiments/checksum-oostubs/campaign.hpp b/core/experiments/checksum-oostubs/campaign.hpp new file mode 100644 index 00000000..315466f2 --- /dev/null +++ b/core/experiments/checksum-oostubs/campaign.hpp @@ -0,0 +1,20 @@ +#ifndef __COOLCAMPAIGN_HPP__ +#define __COOLCAMPAIGN_HPP__ + +#include "controller/Campaign.hpp" +#include "controller/ExperimentData.hpp" +#include "checksum-oostubs.pb.h" + +class CoolChecksumExperimentData : public fi::ExperimentData { +public: + OOStuBSProtoMsg msg; + CoolChecksumExperimentData() : fi::ExperimentData(&msg) {} +}; + + +class CoolChecksumCampaign : public fi::Campaign { +public: + virtual bool run(); +}; + +#endif diff --git a/core/experiments/checksum-oostubs/checksum-oostubs.proto b/core/experiments/checksum-oostubs/checksum-oostubs.proto new file mode 100644 index 00000000..9cca70d1 --- /dev/null +++ b/core/experiments/checksum-oostubs/checksum-oostubs.proto @@ -0,0 +1,29 @@ +message OOStuBSProtoMsg { + // parameters + required int32 instr_offset = 1; + required int32 mem_addr = 2; + required int32 bit_offset = 3; + + // results + // make these optional to reduce overhead for server->client communication + enum ResultType { + CALCDONE = 1; + TIMEOUT = 2; + TRAP = 3; + UNKNOWN = 4; + } + // instruction pointer where injection was done + optional uint32 injection_ip = 4; + // result type, see above + optional ResultType resulttype = 5; + // result data, depending on resulttype: + // CALCDONE: resultdata = calculated value + // TIMEOUT: resultdata = latest EIP + // TRAP: resultdata = latest EIP + // UNKNOWN: resultdata = latest EIP + optional uint32 resultdata = 6; + // did ECC correct the fault? + optional int32 error_corrected = 7; + // optional textual description of what happened + optional string details = 8; +} diff --git a/core/experiments/checksum-oostubs/experiment.cc b/core/experiments/checksum-oostubs/experiment.cc new file mode 100644 index 00000000..5a8f5e34 --- /dev/null +++ b/core/experiments/checksum-oostubs/experiment.cc @@ -0,0 +1,180 @@ +#include + +#include "util/Logger.hpp" + +#include "experiment.hpp" +#include "experimentInfo.hpp" +#include "campaign.hpp" + +#include "SAL/SALConfig.hpp" +#include "SAL/SALInst.hpp" +#include "SAL/Memory.hpp" +#include "SAL/bochs/BochsRegister.hpp" +#include "controller/Event.hpp" + +#include "checksum-oostubs.pb.h" + +using std::endl; + +bool CoolChecksumExperiment::run() +{ +#if BX_SUPPORT_X86_64 + int targetreg = sal::RID_RDX; +#else + int targetreg = sal::RID_EDX; +#endif + Logger log("Checksum-OOStuBS", false); + fi::BPEvent bp; + + log << "startup" << endl; + +#if 1 + fi::GuestEvent g; + while (true) { + sal::simulator.addEventAndWait(&g); + std::cout << g.getData() << std::flush; + } +#elif 0 + // STEP 1: run until interesting function starts, and save state + bp.setWatchInstructionPointer(OOSTUBS_FUNC_ENTRY); + sal::simulator.addEventAndWait(&bp); + log << "test function entry reached, saving state" << endl; + log << "EIP = " << std::hex << bp.getTriggerInstructionPointer() << " or " << sal::simulator.getRegisterManager().getInstructionPointer() << endl; + log << "error_corrected = " << std::dec << ((int)sal::simulator.getMemoryManager().getByte(OOSTUBS_ERROR_CORRECTED)) << endl; + sal::simulator.save("checksum-oostubs.state"); +#elif 1 + // STEP 2: determine # instructions from start to end + log << "restoring state" << endl; + sal::simulator.restore("checksum-oostubs.state"); + log << "EIP = " << std::hex << sal::simulator.getRegisterManager().getInstructionPointer() << endl; + + // make sure the timer interrupt doesn't disturb us + //sal::simulator.deactivateTimer(0); // leave it on, explicitly + + unsigned count; + bp.setWatchInstructionPointer(fi::ANY_ADDR); + for (count = 0; bp.getTriggerInstructionPointer() != OOSTUBS_FUNC_DONE; ++count) { + //for (count = 0; count < OOSTUBS_NUMINSTR; ++count) { //TODO? + sal::simulator.addEventAndWait(&bp); + //log << "EIP = " << std::hex << sal::simulator.getRegisterManager().getInstructionPointer() << endl; + } + log << "experiment finished after " << count << " instructions" << endl; + + unsigned char results[OOSTUBS_RESULTS_BYTES]; + for(int i=0; i 0x" << ((int)newdata) << endl; + + // aftermath + fi::BPEvent ev_done(COOL_ECC_CALCDONE); + sal::simulator.addEvent(&ev_done); + fi::BPEvent ev_timeout(fi::ANY_ADDR); + ev_timeout.setCounter(COOL_ECC_NUMINSTR + 3000); + sal::simulator.addEvent(&ev_timeout); + fi::TrapEvent ev_trap(fi::ANY_TRAP); + sal::simulator.addEvent(&ev_trap); + + fi::BaseEvent* ev = sal::simulator.waitAny(); + if (ev == &ev_done) { + int32_t data = sal::simulator.getRegisterManager().getSetOfType(sal::RT_GP).getRegister(targetreg)->getData(); + log << std::dec << "Result EDX = " << data << endl; + param.msg.set_resulttype(CoolChecksumProtoMsg_ResultType_CALCDONE); + param.msg.set_resultdata(data); + } else if (ev == &ev_timeout) { + log << std::dec << "Result TIMEOUT" << endl; + param.msg.set_resulttype(CoolChecksumProtoMsg_ResultType_TIMEOUT); + param.msg.set_resultdata(sal::simulator.getRegisterManager().getInstructionPointer()); + } else if (ev == &ev_trap) { + log << std::dec << "Result TRAP #" << ev_trap.getTriggerNumber() << endl; + param.msg.set_resulttype(CoolChecksumProtoMsg_ResultType_TRAP); + param.msg.set_resultdata(sal::simulator.getRegisterManager().getInstructionPointer()); + } else { + log << std::dec << "Result WTF?" << endl; + param.msg.set_resulttype(CoolChecksumProtoMsg_ResultType_UNKNOWN); + param.msg.set_resultdata(sal::simulator.getRegisterManager().getInstructionPointer()); + + std::stringstream ss; + ss << "eventid " << ev << " EIP " << sal::simulator.getRegisterManager().getInstructionPointer(); + param.msg.set_details(ss.str()); + } + int32_t error_corrected = sal::simulator.getMemoryManager().getByte(COOL_ECC_ERROR_CORRECTED); + param.msg.set_error_corrected(error_corrected); + m_jc.sendResult(param); + + } +#endif + // FIXME We currently need to explicitly terminate. See below. + sal::simulator.terminate(); + + // FIXME Simply returning currently fails, because afterwards + // a) the ExperimentFlow base class cleans up this experiment's + // remaining events, + // b) the CoroutineManager deletes this coroutine and frees the + // associated stack (and in particular the memory the event that + // most recently activated us lies in), + // c) BochsController tries to dynamic_cast(pBase) + // this very event (bochs/Controller.cc:112). + // This could be partially fixed by adding a "continue;" to the first + // if() in this loop in BochsController, but it would still fail if + // there were more events waiting to be fired. The general problem is + // that we're removing events while we're in BochsController's (or + // whose ever) event handling loop. + // + // Outline for a proper fix: Split all event handling loops into two + // parts, + // 1. collect all events to be fired in some kind of list data + // structure, + // 2. fire all collected events in a centralized SimulatorController + // function. + // The data structure and the centralized function should be chosen in + // a way that this construct *can* deal with events being removed while + // iterating over them. + return true; +} diff --git a/core/experiments/checksum-oostubs/experiment.hpp b/core/experiments/checksum-oostubs/experiment.hpp new file mode 100644 index 00000000..2ae6052e --- /dev/null +++ b/core/experiments/checksum-oostubs/experiment.hpp @@ -0,0 +1,14 @@ +#ifndef __COOLEXPERIMENT_HPP__ +#define __COOLEXPERIMENT_HPP__ + +#include "controller/ExperimentFlow.hpp" +#include "jobserver/JobClient.hpp" + +class CoolChecksumExperiment : public fi::ExperimentFlow { + fi::JobClient m_jc; +public: + CoolChecksumExperiment() : m_jc("ios.cs.tu-dortmund.de") {} + bool run(); +}; + +#endif diff --git a/core/experiments/checksum-oostubs/experimentInfo.hpp b/core/experiments/checksum-oostubs/experimentInfo.hpp new file mode 100644 index 00000000..2218c9b8 --- /dev/null +++ b/core/experiments/checksum-oostubs/experimentInfo.hpp @@ -0,0 +1,48 @@ +#ifndef __EXPERIMENT_INFO_HPP__ +#define __EXPERIMENT_INFO_HPP__ + +// FIXME autogenerate this + +#if 1 // with ECC + +// the task function's entry address: +// nm -C ecc.elf|fgrep main +#define OOSTUBS_FUNC_ENTRY 0x00103f2c +// empty function that is called explicitly when the experiment finished +// nm -C ecc.elf|fgrep "finished()" +#define OOSTUBS_FUNC_DONE 0x001093f0 +// number of instructions the target executes under non-error conditions from ENTRY to DONE: +// (result of experiment's step #2) +#define OOSTUBS_NUMINSTR 0x4a3401 +// number of instructions that are executed additionally for error corrections +// (this is a rough guess ... TODO) +#define OOSTUBS_RECOVERYINSTR 0x2000 +// the ECC protected object's address: +// nm -C ecc.elf|fgrep objectUnderTest +#define COOL_ECC_OBJUNDERTEST 0x002127a4 //FIXME +// the ECC protected object's payload size: +// (we know that from the object's definition and usual memory layout) +#define COOL_ECC_OBJUNDERTEST_SIZE 10 //FIXME +// the variable that's increased if ECC corrects an error: +// nm -C ecc.elf|fgrep errors_corrected +#define OOSTUBS_ERROR_CORRECTED 0x0010e3a4 +// +// nm -C ecc.elf|fgrep results +#define OOSTUBS_RESULTS_ADDR 0x0010d794 +#define OOSTUBS_RESULTS_BYTES 12 +#define OOSTUBS_RESULT0 0xab3566a9 +#define OOSTUBS_RESULT1 0x44889112 +#define OOSTUBS_RESULT2 0x10420844 + +#else // without ECC + +#define COOL_ECC_FUNC_ENTRY 0x00200a90 +#define COOL_ECC_CALCDONE 0x00200ab7 +#define COOL_ECC_NUMINSTR 97 +#define COOL_ECC_OBJUNDERTEST 0x0021263c +#define COOL_ECC_OBJUNDERTEST_SIZE 10 +#define COOL_ECC_ERROR_CORRECTED 0x002127b0 // dummy + +#endif + +#endif diff --git a/core/experiments/checksum-oostubs/main.cc b/core/experiments/checksum-oostubs/main.cc new file mode 100644 index 00000000..2270895f --- /dev/null +++ b/core/experiments/checksum-oostubs/main.cc @@ -0,0 +1,15 @@ +#include +#include + +#include "controller/CampaignManager.hpp" +#include "experiments/checksum-oostubs/campaign.hpp" + +int main(int argc, char **argv) +{ + CoolChecksumCampaign c; + if (fi::campaignmanager.runCampaign(&c)) { + return 0; + } else { + return 1; + } +} diff --git a/core/experiments/coolchecksum/CMakeLists.txt b/core/experiments/coolchecksum/CMakeLists.txt new file mode 100644 index 00000000..0c49e904 --- /dev/null +++ b/core/experiments/coolchecksum/CMakeLists.txt @@ -0,0 +1,31 @@ +set(EXPERIMENT_NAME coolchecksum) +set(EXPERIMENT_TYPE CoolChecksumExperiment) +configure_file(../instantiate-experiment.ah.in + ${CMAKE_CURRENT_BINARY_DIR}/instantiate-${EXPERIMENT_NAME}.ah @ONLY +) + +## Setup desired protobuf descriptions HERE ## +set(MY_PROTOS + coolchecksum.proto +) + +set(MY_CAMPAIGN_SRCS + experiment.hpp + experiment.cc + campaign.hpp + campaign.cc +) + +#### PROTOBUFS #### +find_package(Protobuf REQUIRED) +include_directories(${PROTOBUF_INCLUDE_DIRS}) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${MY_PROTOS}) + +## Build library +add_library(${EXPERIMENT_NAME} ${PROTO_SRCS} ${PROTO_HDRS} ${MY_CAMPAIGN_SRCS}) + +## This is the example's campaign server distributing experiment parameters +add_executable(${EXPERIMENT_NAME}-server main.cc) +target_link_libraries(${EXPERIMENT_NAME}-server ${EXPERIMENT_NAME} fail ${PROTOBUF_LIBRARY} ${Boost_THREAD_LIBRARY}) diff --git a/core/experiments/coolchecksum/campaign.cc b/core/experiments/coolchecksum/campaign.cc new file mode 100644 index 00000000..d8e32107 --- /dev/null +++ b/core/experiments/coolchecksum/campaign.cc @@ -0,0 +1,273 @@ +#include + +#include "campaign.hpp" +#include "experimentInfo.hpp" +#include "controller/CampaignManager.hpp" +#include "util/Logger.hpp" +#include "SAL/SALConfig.hpp" + +#if COOL_FAULTSPACE_PRUNING +#include "plugins/tracing/TracingPlugin.hpp" +char const * const trace_filename = "trace.pb"; +#endif + +using namespace fi; +using std::endl; + +char const * const results_csv = "coolcampaign.csv"; + +// equivalence class type: addr, [i1, i2] +// addr: byte to inject a bit-flip into +// [i1, i2]: interval of instruction numbers, counted from experiment +// begin +struct equivalence_class { + unsigned byte_offset; + int instr1, instr2; + sal::address_t instr2_absolute; // FIXME we could record them all here +}; + +bool CoolChecksumCampaign::run() +{ + Logger log("CoolChecksumCampaign"); + + ifstream test(results_csv); + if (test.is_open()) { + log << results_csv << " already exists" << endl; + return false; + } + ofstream results(results_csv); + if (!results.is_open()) { + log << "failed to open " << results_csv << endl; + return false; + } + + log << "startup" << endl; + +#if !COOL_FAULTSPACE_PRUNING + int count = 0; + for (int bit_offset = 0; bit_offset < COOL_ECC_OBJUNDERTEST_SIZE*8; ++bit_offset) { + for (int instr_offset = 0; instr_offset < COOL_ECC_NUMINSTR; ++instr_offset) { + CoolChecksumExperimentData *d = new CoolChecksumExperimentData; + d->msg.set_instr_offset(instr_offset); + d->msg.set_bit_offset(bit_offset); + + fi::campaignmanager.addParam(d); + ++count; + } + } + fi::campaignmanager.noMoreParameters(); + log << "done enqueueing parameter sets (" << count << ")." << endl; + + // collect results + CoolChecksumExperimentData *res; + int rescount = 0; + results << "injection_ip\tinstr_offset\tinjection_bit\tresulttype\tresultdata\terror_corrected\tdetails" << endl; + while ((res = static_cast(fi::campaignmanager.getDone()))) { + rescount++; + + results + << res->msg.injection_ip() << "\t" + << res->msg.instr_offset() << "\t" + << res->msg.bit_offset() << "\t" + << res->msg.resulttype() << "\t" + << res->msg.resultdata() << "\t" + << res->msg.error_corrected() << "\t" + << res->msg.details() << "\n"; + delete res; + } +#else + // load trace + ifstream tracef(trace_filename); + if (tracef.fail()) { + log << "couldn't open " << trace_filename << endl; + return false; + } + Trace trace; + trace.ParseFromIstream(&tracef); + tracef.close(); + + // set of equivalence classes that need one (rather: eight, one for + // each bit in that byte) experiment to determine them all + std::vector ecs_need_experiment; + // set of equivalence classes that need no experiment, because we know + // they'd be identical to the golden run + std::vector ecs_no_effect; + + Trace_Event end_event; // pseudo event + equivalence_class current_ec; + + // for every injection address ... + // XXX in more complex cases we'll need to iterate over a MemoryMap here + for (unsigned byte_offset = 0; byte_offset < COOL_ECC_OBJUNDERTEST_SIZE; ++byte_offset) { + + current_ec.instr1 = 0; + // for every section in the trace between subsequent memory + // accesses to that address ... + // XXX reorganizing the trace for efficient seeks could speed this up + int instr = 0; + sal::address_t instr_absolute = 0; // FIXME this one probably should also be recorded ... + Trace_Event const *ev; + for (int eventnr = 0; eventnr < trace.event_size(); ++eventnr) { + ev = &trace.event(eventnr); + + // only count instruction events + if (!ev->has_memaddr()) { + // new instruction + instr++; + instr_absolute = ev->ip(); + continue; + + // skip accesses to other data + } else if (ev->memaddr() != byte_offset + COOL_ECC_OBJUNDERTEST) { + continue; + + // skip zero-sized intervals: these can + // occur when an instruction accesses a + // memory location more than once + // (e.g., INC, CMPXCHG) + } else if (current_ec.instr1 > instr) { + continue; + } + + // we now have an interval-terminating R/W + // event to the memaddr we're currently looking + // at: + + // complete the equivalence interval + current_ec.instr2 = instr; + current_ec.instr2_absolute = instr_absolute; + current_ec.byte_offset = byte_offset; + + if (ev->accesstype() == ev->READ) { + // a sequence ending with READ: we need + // to do one experiment to cover it + // completely + ecs_need_experiment.push_back(current_ec); + } else if (ev->accesstype() == ev->WRITE) { + // a sequence ending with WRITE: an + // injection anywhere here would have + // no effect. + ecs_no_effect.push_back(current_ec); + } else { + log << "WAT" << endl; + } + + // next interval must start at next + // instruction; the aforementioned + // skipping mechanism wouldn't work + // otherwise + current_ec.instr1 = instr + 1; + } + + // close the last interval: + // Why -1? In most cases it does not make sense to inject before the + // very last instruction, as we won't execute it anymore. This *only* + // makes sense if we also inject into parts of the result vector. This + // is not the case in this experiment, and with -1 we'll get a + // result comparable to the non-pruned campaign. + current_ec.instr2 = instr - 1; + current_ec.instr2_absolute = 0; // won't be used + current_ec.byte_offset = byte_offset; + // zero-sized? skip. + if (current_ec.instr1 > current_ec.instr2) { + continue; + } + // as the experiment ends, this byte is a "don't care": + ecs_no_effect.push_back(current_ec); + } + + log << "equivalence classes generated:" + << " need_experiment = " << ecs_need_experiment.size() + << " no_effect = " << ecs_no_effect.size() << endl; + + // statistics + int num_dumb_experiments = 0; + for (std::vector::const_iterator it = ecs_need_experiment.begin(); + it != ecs_need_experiment.end(); ++it) { + num_dumb_experiments += (*it).instr2 - (*it).instr1 + 1; + } + for (std::vector::const_iterator it = ecs_no_effect.begin(); + it != ecs_no_effect.end(); ++it) { + num_dumb_experiments += (*it).instr2 - (*it).instr1 + 1; + } + log << "pruning: reduced " << num_dumb_experiments * 8 << + " experiments to " << ecs_need_experiment.size() * 8 << endl; + + // map for efficient access when results come in + std::map experiment_ecs; + int count = 0; + for (std::vector::iterator it = ecs_need_experiment.begin(); + it != ecs_need_experiment.end(); ++it) { + for (int bitnr = 0; bitnr < 8; ++bitnr) { + CoolChecksumExperimentData *d = new CoolChecksumExperimentData; + // we pick the rightmost instruction in that interval + d->msg.set_instr_offset((*it).instr2); + d->msg.set_instr_address((*it).instr2_absolute); + d->msg.set_bit_offset((*it).byte_offset * 8 + bitnr); + + experiment_ecs[d] = &(*it); + + fi::campaignmanager.addParam(d); + ++count; + } + } + fi::campaignmanager.noMoreParameters(); + log << "done enqueueing parameter sets (" << count << ")." << endl; + + // CSV header + results << "injection_ip\tinstr_offset\tinjection_bit\tresulttype\tresultdata\terror_corrected\tdetails" << endl; + + // store no-effect "experiment" results + // (for comparison reasons; we'll store that more compactly later) + for (std::vector::const_iterator it = ecs_no_effect.begin(); + it != ecs_no_effect.end(); ++it) { + for (int bitnr = 0; bitnr < 8; ++bitnr) { + for (int instr = (*it).instr1; instr <= (*it).instr2; ++instr) { + results + << (*it).instr2_absolute << "\t" // incorrect in all but one case! + << instr << "\t" + << ((*it).byte_offset * 8 + bitnr) << "\t" + << "1" << "\t" + << "45" << "\t" + << "0" << "\t" + << "" << "\n"; + } + } + } + + // collect results + CoolChecksumExperimentData *res; + int rescount = 0; + while ((res = static_cast(fi::campaignmanager.getDone()))) { + rescount++; + + equivalence_class *ec = experiment_ecs[res]; + + // sanity check + if (ec->instr2 != res->msg.instr_offset()) { + results << "WTF" << endl; + log << "WTF" << endl; + delete res; + continue; + } + + // explode equivalence class to single "experiments" + // (for comparison reasons; we'll store that more compactly later) + for (int instr = ec->instr1; instr <= ec->instr2; ++instr) { + results + << res->msg.injection_ip() << "\t" // incorrect in all but one case! + << instr << "\t" + << res->msg.bit_offset() << "\t" + << res->msg.resulttype() << "\t" + << res->msg.resultdata() << "\t" + << res->msg.error_corrected() << "\t" + << res->msg.details() << "\n"; + } + delete res; + } +#endif + log << "done. sent " << count << " received " << rescount << endl; + results.close(); + + return true; +} diff --git a/core/experiments/coolchecksum/campaign.hpp b/core/experiments/coolchecksum/campaign.hpp new file mode 100644 index 00000000..3dad9502 --- /dev/null +++ b/core/experiments/coolchecksum/campaign.hpp @@ -0,0 +1,20 @@ +#ifndef __COOLCAMPAIGN_HPP__ +#define __COOLCAMPAIGN_HPP__ + +#include "controller/Campaign.hpp" +#include "controller/ExperimentData.hpp" +#include "coolchecksum.pb.h" + +class CoolChecksumExperimentData : public fi::ExperimentData { +public: + CoolChecksumProtoMsg msg; + CoolChecksumExperimentData() : fi::ExperimentData(&msg) {} +}; + + +class CoolChecksumCampaign : public fi::Campaign { +public: + virtual bool run(); +}; + +#endif diff --git a/core/experiments/coolchecksum/coolchecksum.proto b/core/experiments/coolchecksum/coolchecksum.proto new file mode 100644 index 00000000..9bcd36f2 --- /dev/null +++ b/core/experiments/coolchecksum/coolchecksum.proto @@ -0,0 +1,29 @@ +message CoolChecksumProtoMsg { + // parameters + required int32 instr_offset = 1; + optional int32 instr_address = 8; // for sanity checks + required int32 bit_offset = 2; + + // results + // make these optional to reduce overhead for server->client communication + enum ResultType { + CALCDONE = 1; + TIMEOUT = 2; + TRAP = 3; + UNKNOWN = 4; + } + // instruction pointer where injection was done + optional uint32 injection_ip = 3; + // result type, see above + optional ResultType resulttype = 4; + // result data, depending on resulttype: + // CALCDONE: resultdata = calculated value + // TIMEOUT: resultdata = latest EIP + // TRAP: resultdata = latest EIP + // UNKNOWN: resultdata = latest EIP + optional uint32 resultdata = 5; + // did ECC correct the fault? + optional int32 error_corrected = 6; + // optional textual description of what happened + optional string details = 7; +} diff --git a/core/experiments/coolchecksum/experiment.cc b/core/experiments/coolchecksum/experiment.cc new file mode 100644 index 00000000..9d627733 --- /dev/null +++ b/core/experiments/coolchecksum/experiment.cc @@ -0,0 +1,197 @@ +#include + +#include "util/Logger.hpp" + +#include "experiment.hpp" +#include "experimentInfo.hpp" +#include "campaign.hpp" + +#include "SAL/SALConfig.hpp" +#include "SAL/SALInst.hpp" +#include "SAL/Memory.hpp" +#include "SAL/bochs/BochsRegister.hpp" +#include "controller/Event.hpp" + +#if COOL_FAULTSPACE_PRUNING +#include "plugins/tracing/TracingPlugin.hpp" +#endif + +#include "coolchecksum.pb.h" + +using std::endl; + +bool CoolChecksumExperiment::run() +{ +#if BX_SUPPORT_X86_64 + int targetreg = sal::RID_RDX; +#else + int targetreg = sal::RID_EDX; +#endif + Logger log("CoolChecksum", false); + fi::BPEvent bp; + + log << "startup" << endl; + +#if 0 + // STEP 1: run until interesting function starts, and save state + bp.setWatchInstructionPointer(COOL_ECC_FUNC_ENTRY); + sal::simulator.addEventAndWait(&bp); + log << "test function entry reached, saving state" << endl; + log << "EIP = " << std::hex << bp.getTriggerInstructionPointer() << " or " << sal::simulator.getRegisterManager().getInstructionPointer() << endl; + log << "error_corrected = " << std::dec << ((int)sal::simulator.getMemoryManager().getByte(COOL_ECC_ERROR_CORRECTED)) << endl; + sal::simulator.save("coolecc.state"); +#elif 0 + + // STEP 2: determine # instructions from start to end + log << "restoring state" << endl; + sal::simulator.restore("coolecc.state"); + log << "EIP = " << std::hex << sal::simulator.getRegisterManager().getInstructionPointer() << endl; + +#if COOL_FAULTSPACE_PRUNING + // STEP 2.5: Additionally do a golden run with memory access tracing + // for fault-space pruning. (optional!) + log << "enabling tracing" << endl; + TracingPlugin tp; + + // restrict memory access logging to injection target + MemoryMap mm; + mm.add(COOL_ECC_OBJUNDERTEST, COOL_ECC_OBJUNDERTEST_SIZE); + tp.restrictMemoryAddresses(&mm); + + // record trace + Trace trace; + tp.setTraceMessage(&trace); + + // this must be done *after* configuring the plugin: + sal::simulator.addFlow(&tp); +#endif + + // make sure the timer interrupt doesn't disturb us + sal::simulator.addSuppressedInterrupt(32); + + int count; + bp.setWatchInstructionPointer(fi::ANY_ADDR); + for (count = 0; bp.getTriggerInstructionPointer() != COOL_ECC_CALCDONE; ++count) { + sal::simulator.addEventAndWait(&bp); + // log << "EIP = " << std::hex << sal::simulator.getRegisterManager().getInstructionPointer() << endl; + } + log << "test function calculation position reached after " << std::dec << count << " instructions" << endl; + log << std::dec << "EDX = " << sal::simulator.getRegisterManager().getRegister(targetreg)->getData() << endl; + +#if COOL_FAULTSPACE_PRUNING + sal::simulator.removeFlow(&tp); + + // serialize trace to file + std::ofstream of("trace.pb"); + if (of.fail()) { + log << "failed to write trace.pb" << endl; + return false; + } + trace.SerializeToOstream(&of); + of.close(); +#endif + +#elif 1 + // FIXME consider moving experiment repetition into Fail* or even the + // SAL -- whether and how this is possible with the chosen backend is + // backend specific + for (int i = 0; i < 2000; ++i) { + + // STEP 3: The actual experiment. + log << "restoring state" << endl; + sal::simulator.restore("coolecc.state"); + + log << "asking job server for experiment parameters" << endl; + CoolChecksumExperimentData param; + if (!m_jc.getParam(param)) { + log << "Dying." << endl; + // communicate that we were told to die + sal::simulator.terminate(1); // "return (false);" ? + } + int id = param.getWorkloadID(); + int instr_offset = param.msg.instr_offset(); + int bit_offset = param.msg.bit_offset(); + log << "job " << id << " instr " << instr_offset << " bit " << bit_offset << endl; + + // FIXME could be improved (especially for backends supporting + // breakpoints natively) by utilizing a previously recorded instruction + // trace + bp.setWatchInstructionPointer(fi::ANY_ADDR); + for (int count = 0; count < instr_offset; ++count) { + sal::simulator.addEventAndWait(&bp); + } + + // inject + sal::guest_address_t inject_addr = COOL_ECC_OBJUNDERTEST + bit_offset / 8; + sal::MemoryManager& mm = sal::simulator.getMemoryManager(); + sal::byte_t data = mm.getByte(inject_addr); + sal::byte_t newdata = data ^ (1 << (bit_offset % 8)); + mm.setByte(inject_addr, newdata); + // note at what IP we did it + int32_t injection_ip = sal::simulator.getRegisterManager().getInstructionPointer(); + param.msg.set_injection_ip(injection_ip); + log << "inject @ ip " << injection_ip + << " (offset " << std::dec << instr_offset << ")" + << " bit " << bit_offset << ": 0x" + << std::hex << ((int)data) << " -> 0x" << ((int)newdata) << endl; + // sanity check (only works if we're working with an instruction trace) + if (param.msg.has_instr_address() && + injection_ip != param.msg.instr_address()) { + std::stringstream ss; + ss << "SANITY CHECK FAILED: " << injection_ip + << " != " << param.msg.instr_address() << endl; + log << ss.str(); + param.msg.set_resulttype(param.msg.UNKNOWN); + param.msg.set_resultdata(injection_ip); + param.msg.set_details(ss.str()); + + sal::simulator.clearEvents(); + m_jc.sendResult(param); + continue; + } + + // aftermath + fi::BPEvent ev_done(COOL_ECC_CALCDONE); + sal::simulator.addEvent(&ev_done); + fi::BPEvent ev_timeout(fi::ANY_ADDR); + ev_timeout.setCounter(COOL_ECC_NUMINSTR + 3000); + sal::simulator.addEvent(&ev_timeout); + fi::TrapEvent ev_trap(fi::ANY_TRAP); + sal::simulator.addEvent(&ev_trap); + + fi::BaseEvent* ev = sal::simulator.waitAny(); + if (ev == &ev_done) { + int32_t data = sal::simulator.getRegisterManager().getRegister(targetreg)->getData(); + log << std::dec << "Result EDX = " << data << endl; + param.msg.set_resulttype(param.msg.CALCDONE); + param.msg.set_resultdata(data); + } else if (ev == &ev_timeout) { + log << std::dec << "Result TIMEOUT" << endl; + param.msg.set_resulttype(param.msg.TIMEOUT); + param.msg.set_resultdata(sal::simulator.getRegisterManager().getInstructionPointer()); + } else if (ev == &ev_trap) { + log << std::dec << "Result TRAP #" << ev_trap.getTriggerNumber() << endl; + param.msg.set_resulttype(param.msg.TRAP); + param.msg.set_resultdata(sal::simulator.getRegisterManager().getInstructionPointer()); + } else { + log << std::dec << "Result WTF?" << endl; + param.msg.set_resulttype(param.msg.UNKNOWN); + param.msg.set_resultdata(sal::simulator.getRegisterManager().getInstructionPointer()); + + std::stringstream ss; + ss << "eventid " << ev << " EIP " << sal::simulator.getRegisterManager().getInstructionPointer(); + param.msg.set_details(ss.str()); + } + sal::simulator.clearEvents(); + int32_t error_corrected = sal::simulator.getMemoryManager().getByte(COOL_ECC_ERROR_CORRECTED); + param.msg.set_error_corrected(error_corrected); + m_jc.sendResult(param); + } + + // we do not want the simulator to continue running, especially for + // headless and distributed experiments + sal::simulator.terminate(); +#endif + // simulator continues to run + return true; +} diff --git a/core/experiments/coolchecksum/experiment.hpp b/core/experiments/coolchecksum/experiment.hpp new file mode 100644 index 00000000..2ae6052e --- /dev/null +++ b/core/experiments/coolchecksum/experiment.hpp @@ -0,0 +1,14 @@ +#ifndef __COOLEXPERIMENT_HPP__ +#define __COOLEXPERIMENT_HPP__ + +#include "controller/ExperimentFlow.hpp" +#include "jobserver/JobClient.hpp" + +class CoolChecksumExperiment : public fi::ExperimentFlow { + fi::JobClient m_jc; +public: + CoolChecksumExperiment() : m_jc("ios.cs.tu-dortmund.de") {} + bool run(); +}; + +#endif diff --git a/core/experiments/coolchecksum/experimentInfo.hpp b/core/experiments/coolchecksum/experimentInfo.hpp new file mode 100644 index 00000000..94dc31f7 --- /dev/null +++ b/core/experiments/coolchecksum/experimentInfo.hpp @@ -0,0 +1,40 @@ +#ifndef __EXPERIMENT_INFO_HPP__ +#define __EXPERIMENT_INFO_HPP__ + +#define COOL_FAULTSPACE_PRUNING 0 + +// FIXME autogenerate this + +#if 1 // with ECC + +// the task function's entry address: +// nm -C ecc.elf|fgrep Alpha::functionTaskTask0 +#define COOL_ECC_FUNC_ENTRY 0x00200b32 +// one of the last instructions before the task calls printf: +// (objdump -Cd ecc.elf|less) +#define COOL_ECC_CALCDONE 0x00200bdf +// number of instructions the target executes under non-error conditions from ENTRY to CALCDONE: +// (result of experiment's step #2) +#define COOL_ECC_NUMINSTR 1995 +// the ECC protected object's address: +// nm -C ecc.elf|fgrep objectUnderTest +#define COOL_ECC_OBJUNDERTEST 0x002127a4 +// the ECC protected object's payload size: +// (we know that from the object's definition and usual memory layout) +#define COOL_ECC_OBJUNDERTEST_SIZE 10 +// the variable that's increased if ECC corrects an error: +// nm -C ecc.elf|fgrep error_corrected +#define COOL_ECC_ERROR_CORRECTED 0x002127b0 + +#else // without ECC + +#define COOL_ECC_FUNC_ENTRY 0x00200a90 +#define COOL_ECC_CALCDONE 0x00200ab7 +#define COOL_ECC_NUMINSTR 97 +#define COOL_ECC_OBJUNDERTEST 0x0021263c +#define COOL_ECC_OBJUNDERTEST_SIZE 10 +#define COOL_ECC_ERROR_CORRECTED 0x002127b0 // dummy + +#endif + +#endif diff --git a/core/experiments/coolchecksum/main.cc b/core/experiments/coolchecksum/main.cc new file mode 100644 index 00000000..e49f9a9d --- /dev/null +++ b/core/experiments/coolchecksum/main.cc @@ -0,0 +1,15 @@ +#include +#include + +#include "controller/CampaignManager.hpp" +#include "experiments/coolchecksum/campaign.hpp" + +int main(int argc, char **argv) +{ + CoolChecksumCampaign c; + if (fi::campaignmanager.runCampaign(&c)) { + return 0; + } else { + return 1; + } +} diff --git a/core/experiments/hscsimple/CMakeLists.txt b/core/experiments/hscsimple/CMakeLists.txt new file mode 100644 index 00000000..2b92c3cb --- /dev/null +++ b/core/experiments/hscsimple/CMakeLists.txt @@ -0,0 +1,17 @@ +set(EXPERIMENT_NAME hscsimple) +set(EXPERIMENT_TYPE hscsimpleExperiment) +configure_file(../instantiate-experiment.ah.in + ${CMAKE_CURRENT_BINARY_DIR}/instantiate-${EXPERIMENT_NAME}.ah @ONLY +) + +#experiment sources +set(MY_EXPERIMENT_SRCS + experiment.hpp + experiment.cc +) + +#### include directories #### +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +## build library +add_library(${EXPERIMENT_NAME} ${MY_EXPERIMENT_SRCS}) diff --git a/core/experiments/hscsimple/experiment.cc b/core/experiments/hscsimple/experiment.cc new file mode 100644 index 00000000..a67e60db --- /dev/null +++ b/core/experiments/hscsimple/experiment.cc @@ -0,0 +1,49 @@ +#include + +#include + +#include "experiment.hpp" +#include "SAL/SALInst.hpp" +#include "SAL/bochs/BochsRegister.hpp" +#include "controller/Event.hpp" + +using std::cout; +using std::endl; + +bool hscsimpleExperiment::run() +{ + cout << "[HSC] experiment start" << endl; + + // do funny things here... +#if 0 + fi::BPEvent mainbp(0x00003c34); + sal::simulator.addEventAndWait(&mainbp); + cout << "[HSC] breakpoint reached, saving" << endl; + sal::simulator.save("hello.main"); +#elif 1 + cout << "[HSC] restoring ..." << endl; + sal::simulator.restore("hello.main"); + cout << "[HSC] restored!" << endl; + + cout << "[HSC] waiting for last square() instruction" << endl; + fi::BPEvent breakpoint(0x3c9e); // square(x) ret instruction + sal::simulator.addEventAndWait(&breakpoint); + cout << "[HSC] injecting hellish fault" << endl; +#if BX_SUPPORT_X86_64 + int reg = sal::RID_RAX; +#else + int reg = sal::RID_EAX; +#endif + sal::simulator.getRegisterManager().getSetOfType(sal::RT_GP).getRegister(reg)->setData(666); + cout << "[HSC] waiting for last main() instruction" << endl; + breakpoint.setWatchInstructionPointer(0x3c92); + sal::simulator.addEventAndWait(&breakpoint); + + cout << "[HSC] reached" << endl; + + // FIXME this shouldn't fail: + sal::simulator.addEventAndWait(&breakpoint); +#endif + + return true; +} diff --git a/core/experiments/hscsimple/experiment.hpp b/core/experiments/hscsimple/experiment.hpp new file mode 100644 index 00000000..663d7e1f --- /dev/null +++ b/core/experiments/hscsimple/experiment.hpp @@ -0,0 +1,14 @@ +#ifndef __HSCSIMPLE_EXPERIMENT_HPP__ + #define __HSCSIMPLE_EXPERIMENT_HPP__ + +#include "controller/ExperimentFlow.hpp" + +class hscsimpleExperiment : public fi::ExperimentFlow +{ + public: + hscsimpleExperiment() { } + + bool run(); +}; + +#endif // __HSCSIMPLE_EXPERIMENT_HPP__ diff --git a/core/experiments/instantiate-experiment.ah.in b/core/experiments/instantiate-experiment.ah.in new file mode 100644 index 00000000..ccdb8088 --- /dev/null +++ b/core/experiments/instantiate-experiment.ah.in @@ -0,0 +1,19 @@ +#ifndef __INSTANTIATE_@EXPERIMENT_TYPE@_AH__ + #define __INSTANTIATE_@EXPERIMENT_TYPE@_AH__ + +// FIXME: cmake does not remove these .ah files when the user configures +// another experiment (or even makes "clean"). Currently, this needs to be +// worked around by manually removing $BUILDDIR/core/experiments/*/*.ah . + +// Make sure your experiment declaration is in experiment.hpp: +#include "experiments/@EXPERIMENT_NAME@/experiment.hpp" +#include "SAL/SALInst.hpp" + +aspect @EXPERIMENT_TYPE@ExperimentHook { + @EXPERIMENT_TYPE@ experiment; + advice execution ("void sal::SimulatorController::initExperiments()") : after () { + sal::simulator.addFlow(&experiment); + } +}; + +#endif // __INSTANTIATE_@EXPERIMENT_TYPE@_AH__ diff --git a/core/jobserver/CMakeLists.txt b/core/jobserver/CMakeLists.txt new file mode 100644 index 00000000..c95995ec --- /dev/null +++ b/core/jobserver/CMakeLists.txt @@ -0,0 +1,8 @@ +set(SRCS + JobClient.cc + JobServer.cc + SocketComm.cc +) +add_subdirectory(messagedefs) +add_library(jobserver ${SRCS}) +add_dependencies(jobserver protomessages) diff --git a/core/jobserver/JobClient.cc b/core/jobserver/JobClient.cc new file mode 100644 index 00000000..b524feb8 --- /dev/null +++ b/core/jobserver/JobClient.cc @@ -0,0 +1,101 @@ +#include "JobClient.hpp" +namespace fi { + +JobClient::JobClient(std::string server, int port) +{ + m_server_port = port; + m_server = server; + m_server_ent = gethostbyname(m_server.c_str()); + if(m_server_ent == NULL){ + perror("Cannot resolve host."); + exit(1); + } +} + +bool JobClient::connectToServer(){ + // Connect to server + struct sockaddr_in serv_addr; + m_sockfd = socket(AF_INET, SOCK_STREAM, 0); + if(m_sockfd < 0){ + perror("socket"); + exit(0); + } + /* Enable address reuse */ + int on = 1; + setsockopt( m_sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) ); + + memset(&serv_addr, 0, sizeof(serv_addr)); + serv_addr.sin_family = AF_INET; + memcpy(&serv_addr.sin_addr.s_addr, m_server_ent->h_addr, m_server_ent->h_length); + serv_addr.sin_port = htons(m_server_port); + + if (connect(m_sockfd, (sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { + perror("connect()"); + return false; + } + + + return true; +} + +bool JobClient::getParam(ExperimentData& exp){ + while(1) { //!< Here we try to acquire a parameter set + switch(tryToGetExperimentData(exp)){ + //!< Jobserver will sent workload, params are set in \c exp + case FailControlMessage_Command_WORK_FOLLOWS: return true; + //!< Nothing to do right now, but maybe later + case FailControlMessage_Command_COME_AGAIN: + sleep(1); + continue; + default: + return false; + } + } +} +FailControlMessage_Command JobClient::tryToGetExperimentData(ExperimentData& exp) +{ + //!< Connection failed, minion can die + if( !connectToServer() ) return FailControlMessage_Command_DIE; + + // Retrieve ExperimentData + FailControlMessage ctrlmsg; + ctrlmsg.set_command(FailControlMessage_Command_NEED_WORK); + ctrlmsg.set_build_id(42); + + SocketComm::send_msg(m_sockfd, ctrlmsg); + ctrlmsg.Clear(); + SocketComm::rcv_msg(m_sockfd, ctrlmsg); + + switch(ctrlmsg.command()){ + case FailControlMessage_Command_WORK_FOLLOWS: + SocketComm::rcv_msg(m_sockfd, exp.getMessage()); + exp.setWorkloadID(ctrlmsg.workloadid()); // Store workload id of experiment data + break; + case FailControlMessage_Command_COME_AGAIN: + break; + + default: + break; + } + close(m_sockfd); + return ctrlmsg.command(); +} + +bool JobClient::sendResult(ExperimentData& result) +{ + if (!connectToServer() ) return false; + // Send back results + FailControlMessage ctrlmsg; + ctrlmsg.set_command(FailControlMessage_Command_RESULT_FOLLOWS); + ctrlmsg.set_build_id(42); + ctrlmsg.set_workloadid(result.getWorkloadID()); + cout << "Sending back result [" << std::dec << result.getWorkloadID() << "]" << endl; + SocketComm::send_msg(m_sockfd, ctrlmsg); + SocketComm::send_msg(m_sockfd, result.getMessage()); + // close connection. + close(m_sockfd); + return true; +} + + +} diff --git a/core/jobserver/JobClient.hpp b/core/jobserver/JobClient.hpp new file mode 100644 index 00000000..bcd837a7 --- /dev/null +++ b/core/jobserver/JobClient.hpp @@ -0,0 +1,63 @@ +/** + * \brief The Minion's JobClient requests ExperimentData and returns results. + * + * \author Martin Hoffmann + */ + + +#ifndef __JOB_CLIENT_H__ +#define __JOB_CLIENT_H__ + +#include "SocketComm.hpp" +#include +#include "controller/ExperimentData.hpp" +#include "jobserver/messagedefs/FailControlMessage.pb.h" + +namespace fi { + + /** + * \class JobClient + * + * \brief Manages communication with JobServer + * + */ + class JobClient { + + std::string m_server; + int m_server_port; + struct hostent* m_server_ent; + int m_sockfd; + + bool connectToServer(); + + FailControlMessage_Command tryToGetExperimentData(ExperimentData& exp); + public: + JobClient(std::string server = "localhost", int port = 1111); + /** + * Receive experiment data set from (remote) JobServer + * The caller (experiment developer) is responsible for + * allocating his ExperimentData object. + * + * @param exp Reference to a ExperimentData object allocated by the caller! + * @result \c true if parameter have been received and put into \c exp, \c false else. + */ + bool getParam(ExperimentData& exp); + + /** + * Send back experiment result to the (remote) JobServer + * The caller (experiment developer) is responsible for + * destroying his ExperimentData object afterwards. + * + * @param exp Reference to the ExperimentData holding result values + * @return \c true Result successfully sent, \c else. + */ + bool sendResult(ExperimentData& result); + + }; + + + +} + + +#endif diff --git a/core/jobserver/JobServer.cc b/core/jobserver/JobServer.cc new file mode 100644 index 00000000..01a48afe --- /dev/null +++ b/core/jobserver/JobServer.cc @@ -0,0 +1,220 @@ +// Author: Martin Hoffmann, Richard Hellwig +// Date: 07.10.11 + +// needs to be included before *.pb.h, otherwise ac++/Puma chokes on the latter +#include + +#include "JobServer.hpp" +#include +#include +#include +#include +#include +#include +#include +#include + +#include "jobserver/messagedefs/FailControlMessage.pb.h" +#include "SocketComm.hpp" +#include "controller/Minion.hpp" +#ifndef __puma +#include +#include +#endif + +using namespace std; + +namespace fi { + + +void JobServer::addParam(ExperimentData* exp){ +#ifndef __puma + m_undoneJobs.Enqueue(exp); +#endif +} + +ExperimentData *JobServer::getDone() +{ + // FIXME race condition, need to synchronize with + // sendPendingExperimentData() and receiveExperimentResults() +#ifndef __puma + if (m_undoneJobs.Size() == 0 + && noMoreExperiments() + && m_runningJobs.Size() == 0 + && m_doneJobs.Size() == 0) { + // FRICKEL workaround + sleep(1); + ExperimentData *exp; + if (m_doneJobs.Dequeue_nb(exp)) { + return exp; + } + return 0; + } + return m_doneJobs.Dequeue(); +#endif +} + +#ifndef __puma +/** + * This is a predicate class for the remove_if operator + * on the thread list. The operator waits for + * timeout milliseconds to join each thread in the list. + * If the join was successful, the exited thread is deallocated + * and removed from the list. + */ +struct timed_join_successful { + int timeout_ms; + timed_join_successful(int timeout) : timeout_ms(timeout){}; + + bool operator()( boost::thread * threadelement ){ + boost::posix_time::time_duration timeout = boost::posix_time::milliseconds(timeout_ms); + if(threadelement->timed_join(timeout)){ + delete threadelement; + return true; + }else{ + return false; + } + +} +}; +#endif + +void JobServer::run(){ + struct sockaddr_in clientaddr; + socklen_t clen = sizeof(clientaddr); + + // implementation of server-client communication + int s = socket(AF_INET, SOCK_STREAM, 0); + + /* Enable address reuse */ + int on = 1; + setsockopt( s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) ); + + /* IPv4, Port: 1111, accept all IP adresses */ + struct sockaddr_in saddr; + saddr.sin_family = AF_INET; + saddr.sin_port = htons(m_port); + saddr.sin_addr.s_addr = htons(INADDR_ANY); + + /* bind to port */ + bind(s, (struct sockaddr*) &saddr, sizeof(saddr)); + + /* Listen with a backlog of maxThreads */ + listen(s, m_maxThreads); + cout << "JobServer listening...." << endl; +#ifndef __puma + boost::thread* th; + while(!m_finish){ + // Accept connection + int cs = accept(s, (struct sockaddr*) &clientaddr, &clen); + // Spawn a thread for further communication, + // and add this thread to a list threads + // We can limit the generation of threads here. + if(m_threadlist.size() < m_maxThreads){ + th = new boost::thread(CommThread(cs, *this)); + m_threadlist.push_back(th); + }else{ + /// Run over list with a timed_join, + /// removing finished threads. + do { + m_threadlist.remove_if( timed_join_successful(m_threadtimeout) ); + } while(m_threadlist.size() == m_maxThreads); + /// Start new thread + th = new boost::thread(CommThread(cs, *this)); + m_threadlist.push_back(th); + } + + } + close(s); + // when all undone Jobs are distributed -> call a timed_join on all spawned + // TODO: interrupt threads that do not want to join.. + while(m_threadlist.size() > 0){ + m_threadlist.remove_if( timed_join_successful(m_threadtimeout) ); + } +#endif +} + +/// Communication thread implementation +void CommThread::operator()() +{ + Minion minion; + FailControlMessage ctrlmsg; + minion.setSocketDescriptor(m_sock); + + if (!SocketComm::rcv_msg(minion.getSocketDescriptor(), ctrlmsg)) { + cout << "!![Server] failed to read complete message from client" << endl; + close(m_sock); + return; + } + + switch (ctrlmsg.command()) { + case FailControlMessage_Command_NEED_WORK: + // give minion something to do.. + sendPendingExperimentData(minion); + break; + case FailControlMessage_Command_RESULT_FOLLOWS: + // get results and put to done queue. + receiveExperimentResults(minion, ctrlmsg.workloadid()); + break; + default: + // hm.. don't know what to do. please die. + cout << "!![Server] no idea what to do with command #" + << ctrlmsg.command() << ", telling minion to die." << endl; + ctrlmsg.Clear(); + ctrlmsg.set_command(FailControlMessage_Command_DIE); + ctrlmsg.set_build_id(42); + SocketComm::send_msg(minion.getSocketDescriptor(), ctrlmsg); + } + + close(m_sock); +} + +bool CommThread::sendPendingExperimentData(Minion& minion) +{ + FailControlMessage ctrlmsg; + ctrlmsg.set_build_id(42); + ExperimentData * exp = 0; + if(m_js.m_undoneJobs.Dequeue_nb(exp) == true){ + /// Got an element from queue, assign ID to workload and send to minion + uint32_t workloadID = m_js.m_counter.increment(); // increment workload counter + exp->setWorkloadID(workloadID); // store ID for identification when receiving result + if(!m_js.m_runningJobs.insert(workloadID, exp)){ + cout << "!![Server]could not insert workload id: [" << workloadID << "] double entry?" << endl; + } + ctrlmsg.set_command(FailControlMessage_Command_WORK_FOLLOWS); + ctrlmsg.set_workloadid(workloadID); // set workload id + //cout << ">>[Server] Sending workload [" << workloadID << "]" << endl; + cout << ">>[" << workloadID << "] " << flush; + SocketComm::send_msg(minion.getSocketDescriptor(), ctrlmsg); + SocketComm::send_msg(minion.getSocketDescriptor(), exp->getMessage()); + }else if( m_js.noMoreExperiments() == false ){ + /// Currently we have no workload, but the campaign is not over yet. Minion can try again later + ctrlmsg.set_command(FailControlMessage_Command_COME_AGAIN); + SocketComm::send_msg(minion.getSocketDescriptor(), ctrlmsg); + cout << "--[Server] No workload, come again..." << endl; + }else{ + /// No more elements, and campaign is over. Minion can die. + ctrlmsg.set_command(FailControlMessage_Command_DIE); + cout << "--[Server] No workload, and no campaign, please die." << endl; + SocketComm::send_msg(minion.getSocketDescriptor(), ctrlmsg); + } + return true; +} + + +bool CommThread::receiveExperimentResults(Minion& minion, uint32_t workloadID) +{ + ExperimentData * exp; // Get exp* from running jobs + //cout << "<<[Server] Received result for workload id [" << workloadID << "]" << endl; + cout << "<<[" << workloadID << "] " << flush; + if( m_js.m_runningJobs.remove(workloadID, exp) ){ /// ExperimentData* found + SocketComm::rcv_msg(minion.getSocketDescriptor(), exp->getMessage() ); /// deserialize results. + m_js.m_doneJobs.Enqueue(exp); /// Put results in done queue.. + return true; + }else{ + cout << "!![Server] workload id not found in running jobs map :( [" << workloadID << "]" << endl; + return false; + } +} + +}; diff --git a/core/jobserver/JobServer.hpp b/core/jobserver/JobServer.hpp new file mode 100644 index 00000000..8ce4bb93 --- /dev/null +++ b/core/jobserver/JobServer.hpp @@ -0,0 +1,159 @@ +/** + * \brief The JobServer supplies the Minions with ExperimentData's and receives the result data. + * + * \author Martin Hoffmann, Richard Hellwig + */ + + +#ifndef __JOB_SERVER_H__ +#define __JOB_SERVER_H__ + +#include "controller/Minion.hpp" +#include "util/SynchronizedQueue.hpp" +#include "util/SynchronizedCounter.hpp" +#include "util/SynchronizedMap.hpp" + +#include +#ifndef __puma +#include +#endif + +namespace fi { + +class CommThread; + +/** + * \class JobServer + * Manages the campaigns parameter distributions. + * The Campaign Controller can add experiment parameter sets, + * which the Jobserver will distribute to requesting clients. + * The campaign controller can wait for all results, or a timeout. + */ +class JobServer +{ + //! The TCP Port number + int m_port; + //! TODO nice termination concept + bool m_finish; + //! Campaign signaled last expirement data set + bool m_noMoreExps; + //! the maximal number of threads spawned for TCP communication + unsigned m_maxThreads; + //! the maximal timeout per communication thread + int m_threadtimeout; + //! A of spawned threads +#ifndef __puma + typedef std::list Tthreadlist; + Tthreadlist m_threadlist; + + boost::thread* m_serverThread; +#endif // puma + + //! Atomic counter for Workload IDs. + SynchronizedCounter m_counter; + //! Map of running jobs (referenced by Workload ID + SynchronizedMap m_runningJobs; + //! List of undone jobs, here the campaigns jobs enter + SynchronizedQueue m_undoneJobs; + //! List of finished experiment results. + SynchronizedQueue m_doneJobs; + friend class CommThread; //!< CommThread is allowed access the job queues. + +public: + JobServer(int port = 1111) : m_port(port), m_finish(false), m_noMoreExps(false), m_maxThreads(32), m_threadtimeout(500) { +#ifndef __puma + m_serverThread = new boost::thread(&JobServer::run, this); // run operator()() in a thread. +#endif + }; + ~JobServer() {} + + private: + + /** + * The actual startup of the Jobserver. + * Here we initalize the network socket + * and listen for connections. + */ + void run(); + + void sendWork(int sockfd); + +public: + + /** + * Adds a new experiment data set to the job queue. + * @param data Pointer to an expoeriment data object + */ + void addParam(ExperimentData* data); + + /** + * Retrieve an experiment result. + * + * Blocks if we currently have no results. Returns NULL if no results + * are to be expected, because no parameter sets were enqueued + * beforehand. + */ + ExperimentData* getDone(); + + /** + * The Campaign controller must signalize, that + * there will be no more parameter sets. + * We need this, as we allow concurrent parameter + * generation and distribution. + */ + void setNoMoreExperiments(){ m_noMoreExps = true; }; + + /** + * corresponding getter-method @see setNoMoreExperiments + */ + bool noMoreExperiments()const { return m_noMoreExps; }; + + /** + * The Campaign Controller can signalize, that + * the jobserver can stop listening for client + * connections. + */ + void done() { m_finish = true; }; +}; + + +/** + * @class CommThread + * Implementation of the communication threads. + * This class implements the actual communication + * with the minions. + */ +class CommThread { + int m_sock; //! Socket descriptor of the connection + JobServer& m_js; //! Calling jobserver +public: + CommThread(int sockfd, JobServer& p) : m_sock(sockfd), m_js(p) {}; + /** + * The thread's entry point + */ + void operator() (); +private: + /// FIXME concerns are not really separated yet ;) + /** + * Called after minion calls for work. + * Tries to deque a parameter set non blocking, and + * sends it back to the requesting minion. + * @param minion The minion asking for input + * @return FIXME return value not evaluated yet. + */ + bool sendPendingExperimentData(Minion& minion); + + /** + * Called after minion offers a result message. + * Evaluates the Workload ID and puts the corresponding + * job result into the result queue. + * @param minion The minion offering results + * @param workloadID The workload id of the result message + * @return \c true if Worload ID could be mapped, \c false if not + */ + bool receiveExperimentResults(Minion& minion, uint32_t workloadID); +}; + +}; + +#endif //__JOB_SERVER_H__ diff --git a/core/jobserver/SocketComm.cc b/core/jobserver/SocketComm.cc new file mode 100644 index 00000000..0d2101c4 --- /dev/null +++ b/core/jobserver/SocketComm.cc @@ -0,0 +1,49 @@ +#include "SocketComm.hpp" + +namespace fi { + +bool SocketComm::send_msg(int sockfd, google::protobuf::Message& msg) +{ +#ifdef USE_SIZE_PREFIX + int size = htonl(msg.ByteSize()); + if (write(sockfd, &size, sizeof(size)) != sizeof(size)) { + return false; + } + std::string buf; + msg.SerializeToString(&buf); + if (write(sockfd, buf.c_str(), buf.size()) != (ssize_t) buf.size()) { + return false; + } +#else + char c = 0; + if (!msg.SerializeToFileDescriptor(sockfd) || write(sockfd, &c, 1) != 1) { + return false; + } +#endif + return true; +} + +bool SocketComm::rcv_msg(int sockfd, google::protobuf::Message& msg) +{ +#ifdef USE_SIZE_PREFIX + int size; + // FIXME: read() may need to be called multiple times until all data was read + if (read(sockfd, &size, sizeof(size)) != sizeof(size)) { + return false; + } + size = ntohl(size); + char *buf = new char[size]; + // FIXME: read() may need to be called multiple times until all data was read + if (read(sockfd, buf, size) != size) { + delete[] buf; + return false; + } + std::string st(buf, size); + delete[] buf; + msg.ParseFromString(st); + return true; +#else + return msg.ParseFromFileDescriptor(sockfd); +#endif +} +} diff --git a/core/jobserver/SocketComm.hpp b/core/jobserver/SocketComm.hpp new file mode 100644 index 00000000..5863c39a --- /dev/null +++ b/core/jobserver/SocketComm.hpp @@ -0,0 +1,44 @@ +/** + * \brief Socket based communictaion + * + * \author Horst Schirmeier, Martin Hoffmann + */ + +#ifndef __SOCKETCOMM_HPP__ +#define __SOCKETCOMM_HPP__ + +#include +#include +#include +#include +#include +#include +#include +#include +#define USE_SIZE_PREFIX + +namespace fi { + +class SocketComm { +public: + + /** + * Send Protobuf-generated message + * @param sockfd open socket descriptor to write to + * @param Msg Reference to Protobuf generated message type + * \return false if message sending failed + */ + static bool send_msg(int sockfd, google::protobuf::Message& msg); + + /** + * Receive Protobuf-generated message + * @param sockfd open socket descriptor to write to + * @param Msg Reference to Protobuf generated message type + * \return false if message reception failed + */ + static bool rcv_msg(int sockfd, google::protobuf::Message& msg); +}; + +} + +#endif diff --git a/core/jobserver/messagedefs/CMakeLists.txt b/core/jobserver/messagedefs/CMakeLists.txt new file mode 100644 index 00000000..7746f070 --- /dev/null +++ b/core/jobserver/messagedefs/CMakeLists.txt @@ -0,0 +1,15 @@ +## Setup desired protobuf descriptions HERE ## +set(MY_PROTOS + FailControlMessage.proto +) + +#### PROTOBUFS #### +find_package(Protobuf REQUIRED) +include_directories(${PROTOBUF_INCLUDE_DIRS}) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${MY_PROTOS} ) + +## Build library +add_library(protomessages ${PROTO_SRCS} ${PROTO_HDRS} ) + diff --git a/core/jobserver/messagedefs/FailControlMessage.proto b/core/jobserver/messagedefs/FailControlMessage.proto new file mode 100644 index 00000000..1ae33311 --- /dev/null +++ b/core/jobserver/messagedefs/FailControlMessage.proto @@ -0,0 +1,16 @@ +message FailControlMessage { + enum Command { + // Minions may send these: + NEED_WORK = 0; // server replies with WORK_FOLLOWS or DIE + RESULT_FOLLOWS = 1; // followed by experiment-specific ExperimentData message (holding both original parameters and experiment result) + + // JobServer may send these: + WORK_FOLLOWS = 5; // followed by experiment-specific ExperimentData message + COME_AGAIN = 6; // no experiment-specific ExperimentData at the moment, but Campaign is not over yet + DIE = 7; // tells the client to terminate + } + + required Command command = 1; + optional uint32 workloadID = 2; + required uint64 build_id = 3; // identifying the client/server build (e.g., build time in unixtime format) +} diff --git a/core/jobserver/messagedefs/protogen.sh b/core/jobserver/messagedefs/protogen.sh new file mode 100755 index 00000000..5e6f0fa8 --- /dev/null +++ b/core/jobserver/messagedefs/protogen.sh @@ -0,0 +1,2 @@ +#!/bin/bash +protoc --cpp_out=. FailControlMessage.proto diff --git a/core/plugins/CMakeLists.txt b/core/plugins/CMakeLists.txt new file mode 100644 index 00000000..9a81d159 --- /dev/null +++ b/core/plugins/CMakeLists.txt @@ -0,0 +1,6 @@ +# Note that we're allowing *multiple* plugins to be enabled at once. +set(PLUGINS_ACTIVATED "" CACHE STRING "Activated plugins (a semicolon-separated list of fail/plugins/ subdirectories)") + +foreach(plugin_name ${PLUGINS_ACTIVATED}) + add_subdirectory(${plugin_name}) +endforeach(plugin_name) diff --git a/core/plugins/tracing/CMakeLists.txt b/core/plugins/tracing/CMakeLists.txt new file mode 100644 index 00000000..5cd43761 --- /dev/null +++ b/core/plugins/tracing/CMakeLists.txt @@ -0,0 +1,18 @@ +set(PLUGIN_NAME tracing) + +#### PROTOBUFS #### +set(MY_PROTOS + trace.proto +) +find_package(Protobuf REQUIRED) +include_directories(${PROTOBUF_INCLUDE_DIRS}) +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${MY_PROTOS}) + +set(MY_PLUGIN_SRCS + TracingPlugin.cc + TracingPlugin.hpp +) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +## Build library +add_library(${PLUGIN_NAME} ${MY_PLUGIN_SRCS} ${PROTO_SRCS} ${PROTO_HDRS}) diff --git a/core/plugins/tracing/TracingPlugin.cc b/core/plugins/tracing/TracingPlugin.cc new file mode 100644 index 00000000..e9c7cc97 --- /dev/null +++ b/core/plugins/tracing/TracingPlugin.cc @@ -0,0 +1,75 @@ +#include + +#include "SAL/SALInst.hpp" +#include "SAL/Register.hpp" +#include "TracingPlugin.hpp" + +using std::cout; +using std::endl; + +using namespace fi; +using namespace sal; + +bool TracingPlugin::run() +{ + MemAccessEvent ev_mem(ANY_ADDR); + BPEvent ev_step(ANY_ADDR); + BaseEvent *ev; + + if (m_iponly || !m_memonly) { + simulator.addEvent(&ev_step); + } + if (m_memonly || !m_iponly) { + simulator.addEvent(&ev_mem); + } + + while (true) { + ev = simulator.waitAny(); + + if (ev == &ev_step) { + simulator.addEvent(&ev_step); + + address_t ip = ev_step.getTriggerInstructionPointer(); + if (m_ipMap && !m_ipMap->isMatching(ip)) { + continue; + } + + if (m_os) + *m_os << "[Tracing] IP " << hex << ip << "\n"; + if (m_trace) { + Trace_Event *e = m_trace->add_event(); + e->set_ip(ip); + } + } else if (ev == &ev_mem) { + simulator.addEvent(&ev_mem); + + address_t ip = ev_mem.getTriggerInstructionPointer(); + address_t addr = ev_mem.getTriggerAddress(); + size_t width = ev_mem.getTriggerWidth(); + if ((m_ipMap && !m_ipMap->isMatching(ip)) || + (m_memMap && !m_memMap->isMatching(addr, width))) { + continue; + } + + if (m_os) + *m_os << hex << "[Tracing] MEM " + << ((ev_mem.getTriggerAccessType() & + MemAccessEvent::MEM_READ) ? "R " : "W ") + << addr << " width " << width << " IP " << ip << "\n"; + if (m_trace) { + Trace_Event *e = m_trace->add_event(); + e->set_ip(ip); + e->set_memaddr(addr); + e->set_width(width); + e->set_accesstype( + (ev_mem.getTriggerAccessType() & MemAccessEvent::MEM_READ) ? + e->READ : e->WRITE); + } + } else { + if (m_os) + *m_os << "[Tracing] SOMETHING IS SERIOUSLY WRONG\n"; + } + } + + return true; +} diff --git a/core/plugins/tracing/TracingPlugin.hpp b/core/plugins/tracing/TracingPlugin.hpp new file mode 100644 index 00000000..6bc6157b --- /dev/null +++ b/core/plugins/tracing/TracingPlugin.hpp @@ -0,0 +1,76 @@ +#ifndef __TRACING_PLUGIN_HPP__ + #define __TRACING_PLUGIN_HPP__ + +#include +#include "controller/ExperimentFlow.hpp" +#include "util/MemoryMap.hpp" + +#include "plugins/tracing/trace.pb.h" + +/** + * \class TracingPlugin + * + * \brief Plugin to record instruction traces and memory accesses. + * + * This plugin is supposed to be instantiated, configured and run by + * experiments needing instruction or memory access traces. Tracing can be + * restricted to a memory or instruction address map; the restrictions are + * applied together, i.e., a memory access is only logged if neither its + * instruction address nor its memory address is restricted. + * + * TODO: document usage by example + * FIXME: handle configuration changes after tracing start properly + * FIXME: more explicit startup/shutdown; listener-based event interface needed? + * -> should simulator.removeFlow make sure all remaining active events + * are delivered? + */ +class TracingPlugin : public fi::ExperimentFlow +{ +private: + MemoryMap *m_memMap; //!< address restriction for memory accesses + MemoryMap *m_ipMap; //!< instruction address restriction + bool m_memonly; //!< log instructions only if they are memory accesses + bool m_iponly; //!< log instruction addresses only + + Trace *m_trace; //!< protobuf message to store trace in + std::ostream *m_os; //!< ostream to write human-readable trace into + +public: + TracingPlugin() + : m_memMap(0), m_ipMap(0), m_memonly(false), m_iponly(false), + m_trace(0), m_os(0) { } + bool run(); + /** + * Restricts tracing to memory addresses listed in this MemoryMap. An + * access wider than 8 bit *is* logged if *one* of the bytes it + * reads/writes is listed. + */ + void restrictMemoryAddresses(MemoryMap *mm) { m_memMap = mm; } + /** + * Restricts tracing to instruction addresses listed in this MemoryMap. + * This restriction currently silently assumes instructions are only + * one byte wide; make sure your memory map covers this first byte of + * the instructions you want to trace. + */ + void restrictInstructionAddresses(MemoryMap *mm) { m_ipMap = mm; } + /** + * If invoked with memonly=true, instructions are only logged if they + * conducted a memory access. Defaults to false: All instructions are + * logged. + */ + void setLogMemOnly(bool memonly) { m_memonly = memonly; } + /** + * If invoked with iponly=true, only instruction addresses are logged. + */ + void setLogIPOnly(bool iponly) { m_iponly = iponly; } + /** + * ostream to trace into (human-readable) + */ + void setOstream(std::ostream *os) { m_os = os; } + /** + * Protobuf message to trace into (trace.proto instance) + */ + void setTraceMessage(Trace *trace) { m_trace = trace; } +}; + +#endif /* __TRACING_PLUGIN_HPP__ */ diff --git a/core/plugins/tracing/dump-trace.py b/core/plugins/tracing/dump-trace.py new file mode 100755 index 00000000..ccdc0c2e --- /dev/null +++ b/core/plugins/tracing/dump-trace.py @@ -0,0 +1,34 @@ +#! /usr/bin/env python + +# create python bindings before running: +# protoc --python_out=. trace.proto + +import trace_pb2 +import sys + +if len(sys.argv) != 2: + print "Usage:", sys.argv[0], "tracefile.pb" + sys.exit(-1) + +trace = trace_pb2.Trace() + +# Read trace +try: + f = open(sys.argv[1], "rb") + trace.ParseFromString(f.read()) + f.close() +except IOError: + print sys.argv[1] + ": Could not open file." + sys.exit(-1) + +# This works for any type of pb message: +#print trace + +# More compact dump for traces: +for event in trace.event: + if not event.HasField("memaddr"): + print "IP {0:x}".format(event.ip) + else: + print "MEM {0} {1:x} width {2:d} IP {3:x}".format( + "R" if event.accesstype == trace_pb2.Trace.Event.READ else "W", + event.memaddr, event.width, event.ip) diff --git a/core/plugins/tracing/trace.proto b/core/plugins/tracing/trace.proto new file mode 100644 index 00000000..ce91207d --- /dev/null +++ b/core/plugins/tracing/trace.proto @@ -0,0 +1,12 @@ +message Trace { + repeated group Event = 1{ + required uint64 ip = 1; + optional uint64 memaddr = 2; + optional uint32 width = 3; + enum AccessType { + READ = 1; + WRITE = 2; + } + optional AccessType accesstype = 4; + } +} diff --git a/core/tests/CMakeLists.txt b/core/tests/CMakeLists.txt new file mode 100644 index 00000000..e994624d --- /dev/null +++ b/core/tests/CMakeLists.txt @@ -0,0 +1,34 @@ +## Setup desired protobuf descriptions HERE ## +#set(MY_PROTOS +# TestData.proto +#) + +set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) + +#find_package (LibElf REQUIRED) +#find_package (LibDwarf REQUIRED) + +#### PROTOBUFS #### +#find_package(Protobuf REQUIRED) +#include_directories(${PROTOBUF_INCLUDE_DIRS}) +include_directories(${CMAKE_BINARY_DIR}) +include_directories(${CMAKE_CURERNT_BINARY_DIR}) + +#PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${MY_PROTOS} ) + +## Build library +#add_library(testmessages ${PROTO_SRCS}) + +## Add some tests +#add_executable(testclient client.cc ) +#add_executable(testclient testjc.cc ) +#add_executable(testserver server.cc) +#target_link_libraries(testclient fail ${PROTOBUF_LIBRARY} ${CMAKE_THREAD_LIBS_INIT} anexperimentmessage protomessages) +#target_link_libraries(testserver fail ${PROTOBUF_LIBRARY} ${CMAKE_THREAD_LIBS_INIT} anexperimentmessage protomessages) + + +#add_executable(dwarf dwarf.cc) +#target_link_libraries(dwarf ${LIBDWARF_LIBRARIES} ${LIBELF_LIBRARIES} ) +#include_directories(${CMAKE_BINARY_DIR}/core/experiments/MHTestCampaign) +#add_executable(mhcampaign mhcampaign.cc) +#target_link_libraries(mhcampaign mhtestcampaign fail ${PROTOBUF_LIBRARY} ${Boost_THREAD_LIBRARY}) diff --git a/core/tests/TestData.proto b/core/tests/TestData.proto new file mode 100644 index 00000000..5f01e07e --- /dev/null +++ b/core/tests/TestData.proto @@ -0,0 +1,6 @@ +message TestData { + optional string foo = 1; + optional int64 input = 2; + + optional int64 output = 3; +} diff --git a/core/tests/client.cc b/core/tests/client.cc new file mode 100644 index 00000000..831ea62c --- /dev/null +++ b/core/tests/client.cc @@ -0,0 +1,110 @@ +#include + +#include "jobserver/messagedefs/FailControlMessage.pb.h" +#include "jobserver/SocketComm.hpp" + +#include "experiments/AnExperiment/AnExperiment.pb.h" + +#include + +using namespace std; + +void error(const char *s) +{ + perror(s); + exit(0); +} + + +template +Message *get_job(int sockfd) +{ + Message *msg = new Message; + FailControlMessage ctrlmsg; + + ctrlmsg.set_command(FailControlMessage_Command_NEED_WORK); + ctrlmsg.set_build_id(42); + + cout << "Sending need work msg: " << ctrlmsg.build_id() << ", Command: " << ctrlmsg.command() << endl; + fi::SocketComm::send_msg(sockfd, ctrlmsg); + cout << "sent ctrl message." << endl; + fi::SocketComm::rcv_msg(sockfd, ctrlmsg); + cout << "Received ctrl message: " << ctrlmsg.command() << endl; + switch(ctrlmsg.command()){ + case FailControlMessage_Command_DIE: return 0; + case FailControlMessage_Command_WORK_FOLLOWS: + fi::SocketComm::rcv_msg(sockfd, *msg); + return msg; + default: + cerr << "wtf?" << endl; + } + return 0; +} + +template +void return_result(int sockfd, Message *msg) +{ + FailControlMessage ctrlmsg; + + ctrlmsg.set_command(FailControlMessage_Command_RESULT_FOLLOWS); + ctrlmsg.set_build_id(42); + cout << "Sending Result msg: " << ctrlmsg.build_id() << ", Command: " << ctrlmsg.command() << endl; + fi::SocketComm::send_msg(sockfd, ctrlmsg); + fi::SocketComm::send_msg(sockfd, *msg); + delete msg; +} + +int main(int argc, char **argv){ + int portno; + struct hostent *server; + + cout << "JobClient" << endl; + + if (argc < 3) { + cerr << "usage: " << argv[0] << " hostname port" << endl; + return 1; + } + portno = atoi(argv[2]); + server = gethostbyname(argv[1]); + if (server == NULL) { + cerr << "cannot resolve host " << argv[1] << endl; + return 1; + } + + int i = 1; + while (1) { + int sockfd; + struct sockaddr_in serv_addr; + cout << ">>>>>>>>>Durchgang " << i++ << endl; + sockfd = socket(AF_INET, SOCK_STREAM, 0); + if (sockfd < 0) { + error("socket()"); + } + memset(&serv_addr, 0, sizeof(serv_addr)); + serv_addr.sin_family = AF_INET; + memcpy(&serv_addr.sin_addr.s_addr, server->h_addr, server->h_length); + serv_addr.sin_port = htons(portno); + + if (connect(sockfd, (sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { + error("connect()"); + } + + MHTestData *msg = get_job(sockfd); + if(!msg){ + break; + close(sockfd); + } + cout << "[Minion] received job input: " << msg->input() << endl; + cout << "[Minion] Calculating " << msg->input() << "^2 = " << msg->input() * msg->input() << endl; + msg->set_output(msg->input() * msg->input()); + sleep(1); + cout << "[Minion] returning result: " << msg->output() << endl; + + return_result(sockfd, msg); + + close(sockfd); + } + cout << "ByeBye" << endl; + return 0; +} + diff --git a/core/tests/dwarf.cc b/core/tests/dwarf.cc new file mode 100644 index 00000000..27fa6efd --- /dev/null +++ b/core/tests/dwarf.cc @@ -0,0 +1,163 @@ +/* Code sample: Using libdwarf for getting the address of a function +** from DWARF in an ELF executable. +** Not much error-handling or resource-freeing is done here... +** +** Eli Bendersky (http://eli.thegreenplace.net) +** This code is in the public domain. +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +void die(char* fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vfprintf(stderr, fmt, args); + va_end(args); + + exit(EXIT_FAILURE); +} + + +/* List a function if it's in the given DIE. +*/ +void list_func_in_die(Dwarf_Debug dgb, Dwarf_Die the_die) +{ + char* die_name = 0; + const char* tag_name = 0; + Dwarf_Error err; + Dwarf_Half tag; + Dwarf_Attribute* attrs; + Dwarf_Addr lowpc, highpc; + Dwarf_Signed attrcount, i; + int rc = dwarf_diename(the_die, &die_name, &err); + + if (rc == DW_DLV_ERROR) + die("Error in dwarf_diename\n"); + else if (rc == DW_DLV_NO_ENTRY) + return; + + if (dwarf_tag(the_die, &tag, &err) != DW_DLV_OK) + die("Error in dwarf_tag\n"); + + /* Only interested in subprogram DIEs here */ + if (tag != DW_TAG_subprogram) + return; + + if (dwarf_get_TAG_name(tag, &tag_name) != DW_DLV_OK) + die("Error in dwarf_get_TAG_name\n"); + + printf("DW_TAG_subprogram: '%s'\n", die_name); + + /* Grab the DIEs attributes for display */ + if (dwarf_attrlist(the_die, &attrs, &attrcount, &err) != DW_DLV_OK) + die("Error in dwarf_attlist\n"); + + for (i = 0; i < attrcount; ++i) { + Dwarf_Half attrcode; + if (dwarf_whatattr(attrs[i], &attrcode, &err) != DW_DLV_OK) + die("Error in dwarf_whatattr\n"); + + /* We only take some of the attributes for display here. + ** More can be picked with appropriate tag constants. + */ + if (attrcode == DW_AT_low_pc) + dwarf_formaddr(attrs[i], &lowpc, 0); + else if (attrcode == DW_AT_high_pc) + dwarf_formaddr(attrs[i], &highpc, 0); + } + + printf("low pc : 0x%08llx\n", lowpc); + printf("high pc : 0x%08llx\n", highpc); +} + + +/* List all the functions from the file represented by the given descriptor. +*/ +void list_funcs_in_file(Dwarf_Debug dbg) +{ + Dwarf_Unsigned cu_header_length, abbrev_offset, next_cu_header; + Dwarf_Half version_stamp, address_size; + Dwarf_Error err; + Dwarf_Die no_die = 0, cu_die, child_die; + + /* Find compilation unit header */ + while (dwarf_next_cu_header( + dbg, + &cu_header_length, + &version_stamp, + &abbrev_offset, + &address_size, + &next_cu_header, + &err) != DW_DLV_ERROR) { + + /* Expect the CU to have a single sibling - a DIE */ + if (dwarf_siblingof(dbg, no_die, &cu_die, &err) == DW_DLV_ERROR) + die("Error getting sibling of CU\n"); + + /* Expect the CU DIE to have children */ + if (dwarf_child(cu_die, &child_die, &err) == DW_DLV_ERROR) + die("Error getting child of CU DIE\n"); + + /* Now go over all children DIEs */ + while (1) { + int rc; + list_func_in_die(dbg, child_die); + + rc = dwarf_siblingof(dbg, child_die, &child_die, &err); + + if (rc == DW_DLV_ERROR) + die("Error getting sibling of DIE\n"); + else if (rc == DW_DLV_NO_ENTRY) + break; /* done */ + } +} +} + +int main(int argc, char** argv) +{ + Dwarf_Debug dbg = 0; + Dwarf_Error err; + const char* progname; + int fd = -1; + + if (argc < 2) { + fprintf(stderr, "Expected a program name as argument\n"); + return 1; + } + + progname = argv[1]; + if ((fd = open(progname, O_RDONLY)) < 0) { + perror("open"); + return 1; + } + + if (dwarf_init(fd, DW_DLC_READ, 0, 0, &dbg, &err) != DW_DLV_OK) { + fprintf(stderr, "Failed DWARF initialization\n"); + return 1; + } + + list_funcs_in_file(dbg); + + if (dwarf_finish(dbg, &err) != DW_DLV_OK) { + fprintf(stderr, "Failed DWARF finalization\n"); + return 1; + } + + close(fd); + return 0; +} + + + diff --git a/core/tests/main.elf b/core/tests/main.elf new file mode 100755 index 0000000000000000000000000000000000000000..526ef3a0f086fb51fa9cb341402a4c23ba04d1d6 GIT binary patch literal 313919 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

?QgiU-=_!x)BfUhX;opNjcW!Tep7Sjs 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 z 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

Vi1ux0!wkpIfkS(CczzR1mBR50`T1S&@vdB3 zqOm+_{04Y8!nk<(>94nspidz$zW{b=aB(7NtX&H6lnGsATp8l&Z-fu|oj&|1_-W-w z`JfHJ{uRrI`tV0tN!W!YeLWtvx2S%*uoNM*U~kmX8ukBtWmxp!cf40S z-e9~#8o%HzIoisoZ6=MM?Jh*)SG&Fsw=$XjWV@7lBgP!NVGmO7u%X>}M*?|ATPBSk zytYXEI_4veU%ZBMG2-~m>y^Sce~!hxFM)@@Rd`UQFs{qwJt~J+dx3r1JZAi)@$1wv z4I?@c#}8APcaS6YNF2XRRoSecIxcCHUhD}QeoY$j>U=KA%lKQ!ly~FJ`Rk_S=>`wK z?bI<_;0{JJK4jT`)bBlktZi^ISA^r%(OIw%>Pd#q8;a??uv~|@Z$xB@xw!E75#x|AW=d<`}c{k=+ zWqDe_w~%f2FTz9JE0*Vg$bs%H(OAvVm={{^QMyRur(BfpF5h)`)JFJ+d%4f;;EEkjPK_T66dhxRa;{D z>N^mP^t;&d_CvPlXV=G)yv*~PEid(9o74!G3`gFFZ8%@n!TTnTrfr(8B{|$$r&F*d zBUVP3cL&3{b|4Jv zaE%^7Iu=mp5OwY<~S`pY|ooJBW^= z>*!!bg6!_<$^X&-Rb@Yn#?=)S}eEG7=Ql;|Do)-Bl&eTnI z0^hY|aXOdD*7CV}4$gS3X0iqT4-9M>F{8a*qa$XdP%G54`mJTv?8#OpXSU;e)pE6F zW+A5|3sJ>dHM>`l+4AHhq~L^#Vm;eUxwA7hd}Cb5w@l!~56HKX6~(Phm88%yrIAP8OKfkG*KO=a z@II@Mhv3fQ`@!7Ag_2im+L2jlN#1bZkf?${W-EbV#MIZ`l^xnQgHx}nIKi#WR13L$ z=l*)3O(^M!3unsv@Zr*)Lf*2N?5@Ez2({63_Ml;=7-m0?E}xy?2Sys6D5joKj`WQ7 zjBM}ej^Y^9EPvCRY^K|5dry~JSSEac^`;v+(b?alTJtmRYm(Y?fh)xl-|>Lbf6#Mxl|7RtklD zwykxb_o5*7q1k$Ns5|6n_Y7f@X{>GQX{|QT_Te+)0<#x+Hf1~%ND5-<8}1fux^NiR zg`x;-93_hnkt3A>m1nZ}Dmj}+sWbBlw}P`$EtV18ep8<+)(mo@Ehc-LSIQOSAe0)m zWr>3K`QK_XBYmSi9&Y!(HQu+@`_@IVc-#i>>xih?bRP@=cBpymien3E4bzY-jq-EF zfS!tzPN1>@v_vVl<~&OEbSa0s`m_^Gl6c!mM~9o zn61{zRWs97o<)Bnxw500t4Q00;>y-4xf#!|wu>CqFSVmgw5|HU?3@#U778Ya7`1+x z@eAc7izVjicqun?A&L!AAqRZ?(xV$8YCHpl>2h^HE28H?nug2lJ8_k2#bZ0Sj>MfV@wl;Yi8tK_OwX~#kpb$koD?vpS zLya``=}K0I6-zO)_4}&XiRnCLxUys0A>9p|xg}Y_S{gO$LU%fo&ZfJ&M>L&-LnEUj z=>aXSu;Upo!-V(Fu4%W0>g_mb2oTr_!q}DML1(TJW$tWa|`i);9?-q1nok8_=L~)$6QY5GBoy z3hbP%WoD~0=_)E%zI(PRT`f9oX-0i%?qHWL=l**Xj|v(t$}q_I`fIdJV0hSr8JAXO zNv+97Ugjuy0~3&>vVE6$V-;0RKatx#b7&;MKB!pqVLOq+{^FjgCD!N-Xs($h+M3($W=ZC<(br}+T1#yvtA#yi zY+NfTW*Q7)me8TMwdJFlC)qdbJ4TMX*&3OE#jqLI&JDE^(bKSGtYn8O7Z{GgHbo<_ z+0yD3LOKMSEuFQr)NQnlMz$kJAWTCGx@LR@kEfo-X1b;d6X=0w>Ks>LI489{u-|AD z3~Sd;UmF6Q>L3=|BI4$b!kpPJz2uV0WP{ZjI*Y`v{&TvEdy6&pT0TLjU#!&15sjC8 zLfBMEIJ4;gKN-=qy+BEE+v+3E?V}yvIvK_*4!I4Gx() zK}cfcV8N)i{ znj(Yjq}S#pz3ryr4hGBi_J{e{5e3EU4hb0P>B>a74K4>^YyI0YJuub%f)Y0JcMbJp z1x2!u38(5oA+)m)lx;B6GnNUX#t23z$aoqB{abr7UA^fMtO;bsREfw!q7+Gj#D?Ho zFU$14?^HSpx$uVb+aP0bNG0gEW;)H8)d}^x3LHJ{}-v#>CoqsGkP&MXb3LB(KBg zz!>6HGh!}D21;#hHCkz1+zh;3lDBgpx5r^&V^UzkYbrSwiBw6ga>6f_tY;ACm=E{$ zvpUR4;Z|}uhG&9HJCa}2!!|7R+I*qc<_f(wL+M?M>enyF??!n}yv<#DH<&T1O3kI{ ztY@cF9u+@O-j?uAQxPR?-j0>6MLOeMZ|2x4I&gz653!5h9auwQK(U#=!S0^1?6$$a zp+Pg1M(1KGQfi}xQh#ng8YrCTldWv46{@bH!>s#oDyg)Qm^sdreRDJklSV7FuZW>e zeP6kIKTgD-t#!|N2G>vLDr~JV97JCwRkc{ zK^sY$LlD;*mul09BVWSJ4Kh)Wq`P?zyU++rRnk_K2)l8%lE)$iYyzUykJ(V8xT!8A z&I<~5AC#umAXci)*d?WDNoo2bS;yTrtWHLPt?wKdZtYmtwie78%&<8Dz(TD?Y>Df+ z7PxH~xM?0-ylMVY`B{uB2p$vN1{%)RtJPGlMi>)?>AjAbY=j&3VQShl)TLUSW3lTb z_P$b2&)%u2kxbU+ovB#a29h}o?in4WIxb3IdgId-q?ARc$#5GG617XJmPf;gYd&J+ zx8s+r$u#7zdw!c7=86sH?1hUOHp@+BSQg6-mgLgigtnsm@?$&Ov7nD7so9z?_-E_9 zI|RESxqKF@d-=lNBBs)(=km1;9c$O1)B zZ%^OWUYJ~VZ+*O!t<t%87oghkb`(^Y()294w$5(s)X56+wu&sp!a%yVY{d#)e|ognZ@6LHGP=Je zTREn8w1;~etmgZ%L_dvOo?g>F+1ASQc+OTcZ?o0#-)XFFMj zhBN2%?8I)V-B=@`ZDcevA|7&(QxH(LR-Ua+6s$-Y*99tN${X5~u^n`?vs4_fE&USo zu7T0M(bKyI)|}ogZP@5+rGh&&yK zt7{n7PwCJ&gAx%5TmVKY?F888a+b>z$ZFx~%cwh;9_*HEq1>EXRLpesk3@Z+Jc_bnv`&HLozoJ-vjZ%*ZAOA^^h|?RkZ9qQBoLvn0<_Utq&~noW)r)5?m%7 zm>UeMRyBo*3AUL+X6{WEWZV|S+n2!sntAk3n1U#J-ujS5qp++}!|6u>y3o2})goO-KRZ5KFDxLX zx40`Zg>lT^wHbwuNC*G9*fCSVJ`l1ZJKB@c{alWqup5icPv%3i$J?_Px5Fut=@VRF zP6&_dwM7iuS1ZU(!j!!y)0-VA|ATS50@>YmW?ZkXxUT}B~REO4Q2v4|OKlnkcNTCfY*kM|XXt~yBuQb3y-NDrgXY`VDW zmfjM)pn}wKuL?_z7Xc{4uQy|&fy*W2 z^^15DLC&sRX=1j7W^=fwOISwBll6U=+>UV1n${$*!(>be>xc!~nd!yiX?9Ds@U~gm zvL;=wKZlUf43-c@tPLp3Ez`xil|E;x6BF49z64SeKH#ysfIUQH4#NdjD`jP zGH$53I!3ZI@)8|)_hL;4u|aWiN};dugxxNg(j&u6Wo4ptVVlur(AGp!y9d%P58&lm zs-y@bXQD^9b#-yxMo!3OBIRuf+XRaM49e^lt`nr0RYJ~}h{78}b21w385zOKA~j{D z2b$G^GO(&pK%XZWL3j();2xNN-6JUZ(E)7rrLnkN_DX|geYSfI#8(5O2C~pLm){Oe|j?E3@sHDLgRkBqf?W*v0 z7ps^=I4eb2(-f3U(`1#9L7!%p)k}>wX_>@wFss8EU(JZ_=bK4zLmQ2=3z->)7ni^| z+~3c{TJOMYNxT?#t8kwiTx`HgXb3UTH56!PvzY{T$6Lx(9nV+m+bY67l40T7=96q3 zmp9OyifCbwY1?QgLIsHa(LSdq(xw*DP^cyaf!l0ot&6M)@z{ORh~{SCEUp2uEf!JI zG|&Uhf|xYwKr^Vrp^mMw44_F4STr?(kf?5uUqy;~$h;t&wpT*%6_5d}iKtMeqpgzerG^z%v+RKn4wW7!#yeSvyZ6vjUbm&F3IKtshOJPE` z*q9~VBk3IjL)|?Z#4Y@js}kgx26L>^*&&y)W}vwyt(%1L`**spF~@O~OfKirQjA!W z$AXV2fqfb@q!@ietNoVBtRcIW0T=p}MM7-l%X;3YEX3JV30bk*y0Y29*=Z)S)(($s z`bbDpXtbbop;zmh(Hz;pzI0_ zaER@3GnfIhd7vqE_iRU*V;da3Aa)=elK}0yqvXTYu{9E~qM_t~(2_&S9J>(WX{Wkt zNGN2HZ5Y`N0R_5{j(JQcM#)ekia1ncKXTYHsR+a=9!&N;>?4zY;{ z-0w7pE>vFL5gIDxHM+QxvRm3;n5-KxbPxChd!6J)<}lSZok2ci2i%^|7PK4LOn*nm zx{cX3L&#c3Zo;)HG%NLQTvBsIUNIbzEqhraLSpK(F`+er(R3GT7uL%a`zqwYR$g3N zxMM)}&T>;xP$H7DkccU{ZHdI8@e9lpUu8hSn+hQyrOD~rj!Ay5ilu#O$QxQlGwDnZ zwqNlY_Z;5cMtQj6)~Aj zOina_nPaodFnu$7(Gle_1JR5~W7>dDvDPz(Wg%|pV&zCWfb1|f3MB5zB;JE9u_LHd zN3oW~n5WV*y0@80jJ#tAu`UTl1qfTFT(Os8;De9ap1wS@XrGxF=Wv9Hf%(qlnFr#w zNfcD;I9dQqAEqKsy4lv>=^q_0#W7&|Z3*xs@-f|9_Rd3v^94l^Mt7i58{ z$ZI2vwyTPz9akDPH6+cuHpx8l1j%VjkJqp{gaI7Oixrp|xL?XQtFH}VxDwr3CfU|q z$WdR!W2Qz?2~0(H&mnmj@8j$H47N)|MVA=6dLb8W1J(|xfabgAfaX45IH6|t8Ym4U zY2h%jW~Pc%j5a#uw44Hl7F5A?qM`sMPerakNM8(TSlQ0Xy8%_!01+wqL`e+ntT-#$ zab_Vr-35I4LV6zWD1xU}!@Eh=0$5)(b1-Sil%3T~>Dx$>0$(M_i;6Hb1B0btxkiZt z-hz)xY6T~x<1pPWtsqPVDq6cqA89u=szzjRRwa2JB(n$i#IoklT1PkS+iaess z3i8M16VqT@3du{9SCDfwHpoyRwLODnnOYMg83A!+#Foh;md$M?!84vjRJqE=n>^OUW>WOS_=D~dFj!rwKkgK97!o3shgI2k6a z$OhW<%+;$o9lTZKy$tZM&($kT86q1rqEZg%)>SddU2RozcEErawRoi;mJ<=B$@bud zs~j$kb2b|dKZ`orJFDBYikuB3GMFnJ(VH@=a^g_N+ZG3D!#ve2(w`BJnkw~-BbbfBE$xq zNCNB*v)MwYE*y%+5&K}-&vjG?S%>S@K*Ur#I)`+%iuVGXD86&%2J0FuA%!cyrY=zi zlD5rI2g6ZBZvk^e=prdWf^*}7aS@2Fi~$I#FP()+%=eN4kvcy&Q9Xk6Qc06hN>6TGWL*aoUk{}7vlg2lX(z8px7p1}S${V#0Z6&ewi5?#2gC0d())w0^ z2@OgilcPys^ky3cvQVK=E?LjU?Qw>xOW~M2Q`SO_T{{gxYJI@nIej2elZ2qfqXV4Rue{&oUo_) z5}XUJb9g%=MGt~aACAh|PP;sbA@TYh-_~dFI5)4hZ-ABeFCjr(WxxhE#&@9~K~X5+ zs(tx{VUKl-OV+n49XQU1^S&Y3n03{Mx07$$X;#-R4a3+iKVzm$i;uvjUbZfSE zXy_aXTA5U8Z@G+3E{JvaVp5PG*pdeloJ66?5+R88t80eWjs&r4k05Y=Ij1$2MCh#~ z%Z(&!&m$69GU%9WIW<7p9E#taPEisp<-C+~sFFO|oKckOP9pHL<*lE!B z+klqn^oi!<^D#1xag~aq#9u)LOd_MOGp%L>|14-b=%AY2Id%`Rq(wm2&Okz(@9MuZjM7s9M|ZJl)yo_LU($s)}{(nA}4N`b>GjxlgC=!Tp1m{7Cj!<;RaRU^ThFC<~hHzhd1&X0WkTL4Il&yiOMdG10}jvLb6w@Gq9}Ql1e6o z144wt<>?k+IN?Ak&PTfR%QzC8(YRHkwlIgLnB{>%dMZ1BpX$ZpKop2f!os%84nX~d zt_u)0b zj1II^3CAP@7Avz0GLn=8&Z^ZH+!d;sW$zA^yFS0$#B+q+Zs_u!PxyI+iu?#~SDc|c zX6bZqP(P1Fk>AaL|5R~??k(z1(d8YVkn4E~e^zmZ?%nE7(dGS|;N=l3u^)AGKloFD zzs32Tdk|h8`x5&dgxBj!o!+H-8M;@iKSh^!hC+ttC47hC3|+kkG|E#Kc_Ln)=g&8t zcZJ?(^`m>g`crgyS7?|P!aq=)q5GKnQ*?QEXvj%ZJ z+oJvyUEV{sgnW7~bzIDLJ)OFprTQ7Vypt`oSHjyZo$i4Io$#fWPWQS5{ZR6dVLxbP z(fve17VpHn&C==KuKpBV-cJ|iG2z1%XXqZG{uEu_R|j5ii-b>6oT0l~{VBSaDYyxcXW1mMFJXXx@`*D!MlpJM5B*C*&MQiO3{1Al0MJ`s-L zAiUndcp>Z=HeR}$)SsfeSN&ctFNnQJafa^2>KB)nz#_gD7q@d0I(TCXc^UR54R7e) zto{^TULXrzuLI$)DbCRSy82Ue-~aNs4!mIYgNieBuUCJH?ss1u=jDa7-&dTW`>6U; zbU%R$XG48?0qt#yGjwlPe~KU1W7}y<8>~=J1^}tl-uG7*7F?k zdK+=_6LQ14vX~CfmUprI4dr$?J)L_HeGf(M^Od&6^j%EHCDVD??w_h%8M-+1ob|+q zC;UZAr^^d>LH9OB_;AG;x<{x#MfZC3ds&1(qBukM7WI2sgg;^FbZ=FEiY_nb4fP_t zOL2zox#}19){}(S=ON+S6ldt(uKpC=r_}FtB>XeQ8M;raKSlTOH;PEo5_b&CP=zc~0UI$+I`!&TGx<66B&nI5?`=q7QJ!X}}<>`c9 zr8q-(rTSBJdGT+UkAyoFXXxUPXVO!2cd6g&buQrZ6=&$~R)2~vF9r_f623xlhVGT> zPtoN?!67f-lhH&-LI+N>wrU;kNBqI4BZFSpQ6i)ghRQ6k5ZhWyIlP#y1ZC8 zQB+#u70lrFCN~dI79bb^{41wp?=THi->QB*qTK%4v@H2`t zbj>NEqqv_{zqh?Z8I;|Pu=i+qL-$_wr|9zH;xHcwe^YUWE-x_->4bk`>2#k^e~K%>b3}Uev0_D9!Wg5B%)SsezkNUk~@;2r#D$daTlKNA0 z4Q`+f3r%3fnP#}Wc^7nF=+AKn>~(yO<@z#tj^#dI`aWNB4<#QCh4;DCcQM;~zUkpW zbFp-JU05$(ZtDqM-Z=ei>j}diXJyenUi~S$yqP*yKdnIn=S-WE2Cp~yPth=j?iq>j zn*n!PI$hpOy#&3zeDZ(LhNsILti$kxZ?bf{H{cfPknWTQ&Us^#9*10rPI)(}OhcEq zO)o+IVz%web+Pz=Q9AYgzUpk~@`mUo=>L4{=gW72^!=jr#q|G0%ja3uVdnjM&3{Ap z2e^eBWzpjDz_|#qw&gyjXJh)rb#=s#9k}w^RLIK5zWqV(D~u zCFqN#?^)6p(|<9#*Pl0spKtZ2%Ui#Z*2Qckw1vfZqqrdZe3ftL?pA+_E^ib^yk2j@ zH!050y;=P!y1Y#sysa+poXawDKlpvTGIZjw7cGx33n>a(B%#EVOvl59hOd)x6y}m!gpFaUEV?;(idwB$^WDc zPnS2tA4>Sep}SW7DZ0Gr9%=Qm2)|cxhVHfMPtiRQx7LGq zmD7jt8x&{g_Nw384dJsboo>JSQ*`Il@8czWk>U*9i`Ac^d*YiV-c}zk;5R7F(A}(l zA1~ofOQ*{l?w3%WVcWD=-Z$iBJm=eZ>F!p4iY{-uhYpL$^=WWvMHuIOPRBRY=MPmU zL-$Vg`|`L8@MkTZF0Kua*@;ssq2FTZ3-hhT$#8B$)-QwC+wu~0@Og7cyv#SvJ3}|6 z{uJHK>R(I;ZxiJ2)G&r_xB63bx2yk9@_(`P_;|-4dzZ>LbPuTC(+OW{>2z;M&2z;ae~Rvx)bDj6e4pYB-TT#_qWhToJul(M6=&#noVg?$4eiRyT0)unyk$IRXk3Qw zCiSQ2-mQMmOZXne8M^nXU)+{-;%yKjPQb&8K(|%>KBEb@TRPpf>QB)cyb-D}mKqIQB-AuKK;)M*x3cafa@r>QB+_?H0M7m+;w&Gj#japQ3w4kMOQ?Iymi4`$kn45Wjj-by-q6K`AFMwqy3eRTO4}CD z_@I8#O{qUc_d)eXyjF>Wr41F#TmMj>OaECngV=* zrPD2`KSj6FE3#T0FX5`<4Bfi=Q*^iY32%qv9Rs{eafa@>>QB)<;q16v7v>;o_hoe= z!oESn8@j91pQ4*le~Xhxc)Q{Z-S?~Cr~Nv>AGCD3w+_uOS&B1sZ&1I_bHX=SI^CPqpQ3xj zNIdNeq{quzfF5?ZUa$Xyygnb7pu?f?E;(&@1@vJTw|5gpawwVV4VeXYlopzyyIlP# zx)t>=mLMPR0q|d{VGP~N)Ssd|Ga5It3gD{Z4Bfi=Q*=8rapNU?hT;s}P3lk4y-xjJ zN5UUeoS}QY`crhjt$xqzGBS~mq4D{AS^{s2<8kgmR(Ln#pquCy^!}sE1&K$J49C>p75&_XXvg}e~RwY>Thv*NB9}V8MPVujDyo5iiI79aV_4{}Uf6dbAK9Qgke$vwEKBfK?-4*A?^Sc7LsyIWpuKpC= z8`SUfgYZp?GjyL&zt_v@pRl=K8lCz)Y4xM~l+};!kIs{H`?M^eYuGp(3a_{ICCEJ# zUatf7|B0r-(0xMvDY^&FkC!RoOBHA6UZ(yO-N)4Lr;U5 zv~;?gC*q2`hz`*(Lu2r|P=<00pUMYoS}P*`crhzo|5wQI`jh` zRGguUi`SQ8YhEw%Utq)2EvY|6_geLPUc&EJoS}Q2`crhjq<+s!_&&uMy7#L;MR$Es zboA+6LOvb}uh-!@mh1C;3369C9_J=(WU;!j7(KMH#o~G)tE9j;4tuv zc6G|lA!Y>tFiph*IW*f!F^nyn=c^VX7iKd zjJX%eFc)|-i{5~Fg@xoA(a!_mnHEa=iiL!<3^GWP+sEWCS-AkP1(*;4f4Atx77@D)^>-qqzb*83i}SbNzBiQn=EGF3+#|Ww0`5G?H~v~s8sXiN zqX|Y7hRNb-HZMQLnD-*a(40F#fzgU3X5gop3ovZ~vGYF$P=oP<>uU|DX%_ujqE* z<7#n@=<53Z!A7C@u$Qbj{=cLQy(vR~7O8srfggY@zTm6(=DK>WYSQ@KbjI9)Mh2 zLWo-i&6|;47sWN;X*RDr0~Ion3kz4s_fRfU`eC{qW*v-G!%V}ZA6ze~wiIxs2$}N&&x#r`ddL zmoe`|hLJxefGo!f%j$ED`MzbT;TRpXrTlFd;>*uB=D36*E}WYiAtrt!+#|s7UVyNi z^1wBl)j4C{b)+#UuBf)edWBm-39ewc3!uLj?c1cGhv30WIFwM1Ksti4yDPAwJJmX4 z=;#Wr+d_PFW7Y}CYA+?a3G1C9I=bWPXAW(zewu$h*n`MDkr!MJ<#OXh)E}iC?1Hho zLaxy0Pec1cv?>0KK7qi?oEH|0i&v#y24a zVI^x?P`h2AG@DKgI-Y=b8z6@x5r3^jr$y-a<5~;J_~Rb{BrmFHLA-J>WOOaZYN9C9 zUQXd|?_iw|@#eRIU}tYfK^F3wyxSrq?k`#(G4^>W65|FBdO5s|QQm6Ne(W8gFw0{%_=+E@ME91 zSVU~>b9RLEW1oE%=f^%fL%Gjbs*HV(I^5;Co~8W*Gz)$t8jgK9(AL6H#$Q9A}zf01mbGsHQ>vDn-g<%WwEocC^EO-ep-b~Dk z1^FvfkeF_wy}#>v3sX4mPZ!joAaxz9F_WY3yD-tY?B>JFL6A^H0oF~jxEu#T$R8ZKlL4A z+v4WE64h71>k3ah44Fg6S_qk1OB>+24d1rB4QcejrER%?9_Fn|bYdyi`% z>}*-v7VR_QbLbxmXV8zZ%b3@;#M=8cwl@2=CFnAk5a2UoW}D?ggX7y49DEjUTk^KC zA%{8A_6X9CyfV=}{B)tV<#h>0TFUWwn$1Tr_2saK1Ei>J0bu%2NX=&8c4IyXjou54 z&+};6;~(dtC2QYg3)mOg`mn^M$lSn!smcnbB`icKvQmH%xxWL%{I36_2`syV+XNRB z*(+RWhsz$X4XngGWdUDgFO6FMsK}0skiN*aTAc3=P7dWVGk*h5vw7yz#(WGu%mpPg zr4ZpaABMKg=A(BS^FL86?*t|)i@&ju)SSlwuo$%d{)dHxw8mz!oMJ6E{N%z+kIL*% z=bPeVM&HSwA_0v?5`DkC>{$I+{R(2~`m-jnF?y%B_C!V?mVufPN%F$O$aQPCYc+Z2(! zujqFhqrai(@U|Bin&Hw>v)TK1#!R5p57Iw<+?u5t>8C6tMtYwGBwxP?0Gcx&_rUmq zeEf`pJ|Amw@^_DMCR=-k*@un!Ye4b*BwdFto4$i(bb|OP#-LodgAid3d&C%81AlM8(`;@7<}Xnz z?gk{8z*{DkLtA@~2hiq~kkM?W{{^ifEb$Uxd_{f92_{Vg<;j6|BY^DN+IzGtH2@)bGk(TWL16o#Go{`oV;spjq-l%rA>xKcW_=EJKVCO$)H`ApN9VM%bLv30UtcH z@?QV)Ci9a;d0!8XX7h)yXfmAIxJg*-ULnT6M%e!7l}%;_%5!o|+w&tda|bXOdLj4he;mzl}T zZZ=n*)FiJ0%^M85-1lQVhS7R=+8dh8AHP`dewFK;7UY*tZ8GnBu^@l-3vwLqA-!0T zeZTqz`JbC!EJ*f#;e_p1Y)Esu^sCo&H_39C>sNIU!zEyjYJ)2hqi*$eTbj&!UTlqj zmCK&x+idQ@qV&ZW?8S$(vB~-`dx^hK6l))DGH77@)J>L|CPCs#cw&8THpTOs%+v7wE*|O}t&#v?D_S9oegU($7f|VF_Wuk^`fN_(iv2>_uY%WO z`;BkJJ%@sI!t;YdlR4>#q~KV~{CQgvFD|3X#>NZo(-m#wUy7y07i8ztRcSJtUsz4) z!%aBetXUu4;>!oEJ*t8JZib&X^zylCnc>$5rqM$hZ@cBgTW($WBrj=S#FNA)VHch^ z)bi$8KDR|eLb1NU-p6c+We0b3zA6{zcw>^rSvXm^$;W8>bKbysyT=^z*)&O?b}2+<1+nm(4n<_-GrjCejg3!V?pba#5w z&oj^+e5kI=2g>02=zMtgIUk;J&WGohJHA`tfA|dOfagg(4o@DQW$s}5c~&_eo*kal zi#VRs?f8@QBurkO29MdI z$Im)`9w*CVV)^iRSRM(>qh9&&SXUn9dcxUJJUoJxN2~JTk*YjKl}DxWnLG#K@$iUK zc?RI(;c=rbKKgm2sDtU}v7vl;JSZQYEa~Xal}njCm68unn{;yN=LwTMRg$Mgy7Hl) zCqg=y{%;4c3%{7_!t+qYmTghI4)4M{m^?hx(BYj+91k#beDw2>LI=~&LkbR5I{aW?2iu*_2a_>{P^(TK0Z8@j}H&ObMh8)$-{%>7NReNclt9d50~S^ zgX8${P&hujalo77qyMsTeQtou=MFqPr;X>QIlg3kq+M$to|DGsK|GFM{P_sx8E8D` z%+Yzq8P7FyFwZpOIc5D>1U%)vafjOUa&*y+Qw$aof)gBNm>;gWogPFXz5%fSor z@f-I@h`-e40ouolS^GL4fN(&R6JwK$)o@5sR-_epXWlk@Q#l-o&n`x`gzWi zgX!nlP7ZeAotwlTD!h;!hflhT$zO~=Nq4Z5%QJm=c8`OT^fZ?VbA{Y^(KNjQ-ov`e z)p}v>)PXhT@S}ch;K=5er;cfQWz(ydt!z5B>A0rX9&S#n?Vqma#^Khh>P|Ty0@lrG z)p9;p&zaNof4o*Rr)6hr)ml9_aiKYFqC7oam;qb9Fh08{o2%w#_7uRPU}biECN~|y z#hJ;nqvgiOtA)J|D&dG3=bx-1j02#I^OnjJ&I`fy{gp_ti#9zna9Xa8LpsK1>!2RO zkBjWg&BHa!5$1p~t8vVN`{5lT`MnPRF57^}&_wX3Tk*>ONnR&Pi2>T@#|j@t$N!eOT4*uL3|<8Ye#@c;P_WA+6%oTSb5sPt zx6HgG0pok-;J3^K6&UzshA$FFzh&m75dhyZ$+-x%45bq0Q_B4K=Qc*k50)M!KHTIK zZxW3`rC$@kq;s`8q(^47Tl)u$pUKNj&@}t>a`jxrDE}h?O#Qg39@39UMKI}HZ4c=u1~BPdeGlm!0Zckq<3oCH z0F%yDdPgVB)%g(SDt!nae^?yms%1#$DyM^4o)-r&<#Tm2q+c7rq+geSx%%q(N$2XS zgDL;`qav7euG%{~VXodgSnU5L5iIfonDl#t@|@Lx^6%_7+5yn|!_|H#pYpis?_kQi zK7dK*E`XyG=5Bz4B|Xa{nDk8nOnQF+lU@p7(k~8R(yt3((yuu>F8|sD%v}kv;n!p? z$NvWaZ$VS&>P!DCBRb^|2QcM-{nc^$g9(_s9bm%`eK!8T2lzg;{Z4)>c0q&;I_0lT zz}zKqbjJ6i--uxHbN3{qUv+#0lg?e0kbY|blm4Rw%w3m|ztwjO%cWmdTGT#p7bfJt z-wxi`p75;$_jC5dT@uCVJN6#~tRJXq`niMR=uGd^0Ze_ls}j<$31HH>+v4b7fak-2 z+0!t;N#`z%qu&qD#{u7B>5Q-c#E4FQ?$*G;PusIwPKsdCxr-xYE1$bL4yL?MS%~@Z zH6_Tu>z`UHj=x#-;4;S&K&`L_lz_2JGD9Q-uB+&ywI`LE$%Lw?K6 zcbylmDoFn8G;Kk3{>b1=hqua02Sxx41*gt@EcVDfha_C|O(0Z#=m z!^>`*2xu}Ke|!P*Ho;_&r;n7iEYgGl#t>E|w=;!K8CHFQgy;3WeDIz9W%d>Idc)Kye~NbIG{0N8J0?Gc?+wC#qd|J39lIvZ18m$K zFzIUpnDUSJJB*rt+`Wv24`7DpuBM|C<_>2Fb9d9hqJIFBpF5u+{m}$m=c1|nmdjyr z4szuk?U<@PJ(UQ5ykBQpE^AU@cGfKGny29uloOkce#f=TBtF{z{z=5DcomcOGrf=TBtvZE8`u5k!+ z*Eoc^dmO^tJ$CT*(EnS2Ge9`~S8a{xl+Rse$4{8M%?|zq!WRK^i-+M!=PtCP^NZlO z0scM^j?Ud_NB=DI5Ab~fox9bJPI=t54q@(IJNSzT{{g_X4=10y+Kw*zo)d?;%kAh= z9s?0fe(rudI$`d9JDB{(3`Q{N+zog1hoH}E0Jp$(`MGvDqLZJy=8m88t_xt&xtku+ zpZKi^CY`(Dj{XD0b0pv?AY6Q(F{MQEI566=7{fJV>L)sn?Rv8Lke1em>+^h^1&7J({4FHvo z^#S`^Zg@J5`#FB@@+(gHE3bDP%jM)82a%uYy=I@|*ZDPf|6Ta4kpDWsZa%~O;#&ZY z&hY*I4FHYrfgrx^4fKoNAW;4ec8>B}Zb}J$%6}lpuYI5s#u~0+d-)Ey7@M?c`>Eqm z!YWT;tY2C<#kFFtXU56{M9G(Bz!vWvifc{~mmqp;}C*N)Wh+mVr1N1Kd z9tPy>clnNp&ivzB5acHR7s3BZz>flQ{7(gR^7Cy8a+Ci7@c$R!yPG2Z+jmBE^7E|< zVF&+1;QtI@?x#5U_Xl+H^X&`A|4-omD&TOu@>oD8Ki|@D{5(POr+|+~y>RkV=SFn$ z^KA~t&+^O%FzI~D!_f)zZ4U>N|FHm;_ybtz=f(N+fj#{k`njL0AAHM0aZTpeQP4jI zd^HeG|2e$%;pmKyZ-Y3P@jV*Ar1LG2keb;m3Bz;cK`BF2CjG)igZ& zbNcR1@E;hD!c#uqMA0BxpRNyJ()o6ZqZ8&^Dh{ST$GlM?j-O9x5P$SWi^{)dA_`A= ze4{0lcS``1&bM4b`qvZi#Xod};=rP8VYTN;GtTQp((tpR_g0YBfe z3HdVt{{;>B`4&#dKNs-NHQ?u4IwAjc0soZ^`1ux3$bWah|KAh*EKkU2QT~+SQQm~f z#`cos!MA^uuK9V)o;dtSAphose1_-SK4JI=_!5EqmYdHs;OAREO4s-{`HlYN275{V z=j@$t<%IkP-sD)8o4;$o&$o6${u>hTgF*OzX%Ieo<45&Nad0ia<>r|N{Co>Y>B^r^ zz^y@ep1JCNE`5AkC=5Rp@SoIxKYFuBSMFto6_|pmfyVr{g?)Htk>Hg`i}v6H`i}zo zXByC_PK)yI!3Oke0{Wv3=uZUnpERH!2na4e-iuC-59Tv{tRHYS1n+A8QR06j*RQ~8o=(?0?+AyKaKf%9)5;@ z3t(K>(!yw7hW>mI@FnQ)m_MZN0vx9If&_dK;6ALk@aRDD|51Yekpz4j;7@kqZC1g zzER7A@c#h3zYA|&TX}y2_`goZTkV$r=YT&3d*pnI{4YTRdD!dmmcHeG1>n!YUL3s( z@KZthGJwPUc`IO~tp&mHwpPmI0ACJ$*8-;eDqu8kEe8NIfAJNmxg7RDI@5Or;FC7$ ze2wtcfWHxh$GauwX~fTA48wmC@M{j!^pgJ`z@a_=e}L1Q@Rg~R|9!yU!+sg(v*dpg zFy1$%`9WWl`f~K|fju4#_(s$R$A3Iv?x!+8Xz!;2X8(RS>I31o0KN+P0Tlht0eoIN z;hzNj_6@oo!uWsv*W>a3Cg3AsPq$kBRe;yE;_CpLo_4?+ zk)E?Gy%R9X#+J`AGX(fB&`$)N<^OiT-@$s$X3PJFfbnbL-wN!ny$^7h{*M8^Iw<8?|yqWM5iSWOMvCgN1^uHGH>kxj04c`X% zbEsc55bB=;{9l-Fa0oJzs7-U>L4_K54_ zOwR>?PdYo&|6=l^ePDaY^uG)6myy01%m3j7{Z_zHf0HtI0RA-exzh6gb%Ot4z}Q3Z z@jnjuaVNqzq)VBA6F+o!)sgnt0=bwPQ33-CtNhrHGQ zp8@a0`U=N6nsGinD+K27;+fjn-lQafX_tx@A|*} zfI0tKiFpCrTJ>i;#s zXTqLgCX%0z0{$V^?@AW_8Q{=fQz)pTVGoo?dsqQD?4Mr;IP7oN0X`4yg)5)UfZqpu z=&!z2yh$vCzsyu0S@K;JK#^Fzjp1{(}4ND7m_XY^C%E@B7LsD9}74Pe-dD< z@%ZxE1o+*@USOBx1AgHH@79|f0Ka!Apt)Qcq7IiSK9dg6Y!bHKR14VDH^Wg zIgvfR9x&GMy?w0(9FEU70}k~Y27F9lU%LVSG#EeZ1B_(JZw1z`E(QD^*pDlZcLV+^ z?BxWj-+u=j%Ks?f2ah!^6u|l8ZGb<9{^cW<|MP&G(Eq;I!e0g4hxx0sj}+cz3FWPn zcUziTzz%so{&@@FKSzIX8(_At?Fs%az-&L1f0;QO@DGFW+4+Dk$M}K_3||8rw$F2b z(HFF!`bzm<4){M#!WZqjfI-xK)w*RbH9;w7M({x<^-;|3j9Sb<*KNau^fxd4}(1#N6ZooP02c2m1_iYLKr3v_&1bhSF6NCKy3&3If z^fw9qZxasMqsIY1hV}u;7yI}bVD2Bo<|KboXy|vMzMf{&dpzM2FC^f~)~8t}^yKg*xx*MxTgLV3pl?ni!JiE#tlOM?$i ztM%E+X%pteyg9LMitQ7pO-z{VuC;Ah+`^Qr7bmhsTs&ROm5LVuD$itdGx==3fG+XS%m@xLT-9 zWOC!Bf=PFG1rUyJ#D~WPFv?xvUF8}1mYAnH;%3asC_d1g*#jyOTg!FEDDF;m#)Pn~ zOF6dZO7O^0!L8Y?g_%ONNELvPV1;^Dxm2$9&EyMnJZBPj9Ca6J7uL&_9mSb^c^{Z| z4B&4NUo*4(fHk<|yI65rW&3Kp2E33rSsSnyhEpoEt4Io*@&S>p49iQww$%!VwO**! z0GMn#pU;$G8U4i?pe=}df1A2dK}|_`G^op~|uVRzP@joj_k`G>fEaF`xQ@ zg9cO_AA)bG77ChWCOcZZsLYB<`S@W0*S`qyY&jPkA>I>{F&2%%Nuti&1%=m^#)Fx$}E=<=7j%T1y z-BSp{43zhV;LyxDh5ZPag(IQK3Y)T#S&_6H8Y)1TZs0}vd7J8C)kTqZvVvsFo#lGH zjP`)2t}5ELiCjr@T5-rMDS@u3Vkz%Y-V$g(U_r&)J6aqsX`Qo32^V3J-f5%?GA2=3 z;cQty*8!(gn_knpCSRIjGc!J2Y3+brO_(z8y|YafeB-l|#3Ef{dB|u~#&(y+9Rr#2 z>;xo8=BPamuAp0l=&&Zw_{x@~=1>xQ*!I$Aq= z6jS*UimAx4Ryt1Fb<&4VchFdA@5EGe>e6Qx295t(ewA9k^% zfa~`Z>XmY>XQVjVmZg>*Ls_Vay3*Bd2N`K;a8WS_a&y{B7Hie)UNjozYAsuyoUDZd ziw+JfXcaVbR7$3?EgMf`Z?2l(!fN6ZNee8LAX4p^7K!UX0l?^UCFxE3U>E({GL*MI z%rFcaGDY+eF25MGZw8&6m4${4{Tw>E;qBeAaNT`FA*|t~qeHD|V@GFO8PNu&(d|Cs!2#ULQJJI==*HV^kXeHaOEO8Bj!;wx=7c>{MIBiN@FCr z7wSk3jM^qSR!rTkC?=HKqGrAx_Q;avpfYKUQr42^7%Zgg+H`c5t9gtTmLz;*Wwx%? z-7|a+hZj0l?Ghs&mQfXPi`SYB<0XtH3NuI)^~p^|gCmnI$gnJ1M)hek$6 z(gR&sKFj7&C!}eU%%lPL=U{r&L#xqLdj*m++e2lvx}dIPGyNSM>o#WF)Hn(g97C9` z!!Xq0;><{4I>%AqWN}Ye;o4Z?q`Ax1*>8y*wT5~q5!7>xwcCd==&el2Xr9@E(RN!l*0N$6RKXkr zvlu3hRa-2)zco8nt_~OH3MKRe`C2(UB^8Q=vAFH5%X8k+GcBTmV#;!OiCQa_c67L} zEtwM)7HxXCPnwBLdSJL`B+24c4CG2Yc8-Oj(bjw$tUc-}Y=*QYGKBH5Hrt^&8dj!o z(JI_go2ZscrP+#YnMYx51&-pfyYi)BsWEI`WMnNSgq#hAkYHZ9D+7zHNcv|-I!j(8zsrmS@c=7gz!jYb$R8+Oy#@xmURpvmxWl;b|%FjXcq#pyz| zXRd&me_#>wbVp&1McJ*BJT)^vzd<3jC7K$PPdMX~0Ao=}#wQ;l9$l@Sak?ItWlYAt z+Tbn`fbwU%g?Q^a`?j`4#7=33$icZ_4Rf=%#mX@@dXTm_X1h`xu`Hy)Wib{&iHm+B zn#~?nf{G?HOzTSLQLsy?#v9OCQhSUGr!X``iN#8rl`m*QmQ+*L@2h63g*_MmQrX-@ zZ1DALN3a_pl=cRxVLgc1MXokcEM`0A+SX&$NTxo%Qe>qgq&}5N8VHjtGaWST6LYz2 z1v7~3-Xd1XFv267^wi8#=3=5j;b4^G^R{)_wpi!JdVy|Z2&*JZXhGL=;!w!z3KTUWrCqE? z>1~d+K&6*pKUL?l6O`3Z(h6Ce70Z|fgfHXFUQgkJ(1MHOJ}HnqWhxQYJ#4aq)3vb7 zyqWp;TIA(yQHGUfx{n?#;4>6~x_$?87n$uEu*QkCX+Fq}V`rh*xUF~+sr_FYBQ;;uP!3(04!xd2mxufEpHc~ zfrehoe+035O`p5Qwueh{0e->Ac#?!9CDORdvA>TK18J4THZ1eyv-YEeYDMczKqPE3 z-R-MfKB3Ng8VHS?rbR^A!+^xQs_1jSmv7S0fVd2<9a>Bh4^uR0%sP=L2@tcoIyTxQ z4UcZ^XhVE1;&-1}Wb)wK)<~ovD9$yfdLZ!CWQob|%ZJed!sNs6Fg*re*s<*zA3&0k zPcRy&&{LpSs2{gEyPb`_FUG8e>fUWSoXhSIY`J<0WYqusmWLJK(x8~AQZUNpS!fbc zHpcheCecO(-k%qRxB^2a`wecLWX=?$2YvcvmK9U|AXY#G7K8lMS#~O6G*|_@!8A61 zR!KBrbm^@u!UCKHrZvun@<}aE9|g{@W)i=}{&$F56uaWnO&BGH5?Il8sK36MD-kK| z{_5kY1!Clk00zLimw%XBVvzjt&ujYf?ueU3A~{bTycChHP-4MojU82(zg0i(^>7w- g^48d22w?1>!>5 +#include "experiments/AnExperiment.hpp" + +#include + + +fi::JobServer js; +using namespace std; + +static const int nums = 30; + +void exec_js(){ + js.waitForConnections(); + cout << "That's it.." << endl; + +} + + + +int main(int argc, char**argv){ + + + cout << "Testing Jobserver" << endl; + boost::thread th(exec_js); + + AnExperimentData* datas[nums]; + + for(int i = 1; i <= nums; i++){ + datas[i] = new AnExperimentData; + datas[i]->setInput(i); + js.addExperiment(datas[i]); + usleep(100 * 1000); // 100 ms + } + js.setNoMoreExperiments(); + + // test results. + int f; + int res = 0; + int res2 = 0; + AnExperimentData * exp; + for(int i = 1; i <= nums; i++){ + exp = static_cast( js.m_doneJobs.Dequeue() ); + f = exp->getOutput(); +// cout << ">>>>>>>>>>>>>>> Output: " << i << "^2 = " << f << endl; + res += f; + res2 += (i*i); + delete exp; + } + if (res == res2) { + cout << "TEST SUCCESSFUL FINISHED! " << "[" << res << "==" << res2 << "]" << endl; + }else{ + cout << "TEST FAILED!" << " [" << res << "!=" << res2 << "]" << endl; + } + cout << "thats all, waiting for server thread. " << endl; + js.done(); + + th.join(); + + return 0; +} + diff --git a/core/tests/testjc.cc b/core/tests/testjc.cc new file mode 100644 index 00000000..be6850f2 --- /dev/null +++ b/core/tests/testjc.cc @@ -0,0 +1,42 @@ +#include +#include "jobserver/JobClient.hpp" + +#include "experiments/AnExperiment.hpp" + + +using namespace std; +using namespace fi; +int main(int argc, char** argv){ + + int portno; + JobClient* jc; + cout << "JobClient" << endl; + if(argc == 1){ + jc = new JobClient(); + }else if(argc == 3){ + portno = atoi(argv[2]); + jc = new JobClient(argv[1], portno); + }else{ + cerr << "usage: " << argv[0] << " hostname port" << endl; + return 1; + } + + AnExperimentData exp; + + while(1){ + if(jc->getExperimentData(exp)){ + /// Do some work. + cout << "Got data: " << exp.getInput() << endl; + int result = exp.getInput() * exp.getInput(); + usleep(500 * 1000); // 500 ms + /// Send back. + exp.setOutput(result); + jc->sendResult(exp); + }else{ + cout << "No (more) data for me :(" << endl; + break; + } + } + delete jc; + +} \ No newline at end of file diff --git a/core/util/CMakeLists.txt b/core/util/CMakeLists.txt new file mode 100644 index 00000000..a655bd13 --- /dev/null +++ b/core/util/CMakeLists.txt @@ -0,0 +1,7 @@ +set(SRCS + SynchronizedCounter.cc + Logger.hpp + Logger.cc +) + +add_library(util ${SRCS}) diff --git a/core/util/Logger.cc b/core/util/Logger.cc new file mode 100644 index 00000000..a32f0196 --- /dev/null +++ b/core/util/Logger.cc @@ -0,0 +1,29 @@ +// Author: Adrian Böckenkamp +// Date: 21.11.2011 + +#include +#include +#include +#include + +#include "Logger.hpp" + +using std::endl; + +void Logger::add(const std::string& what, const std::string& descr) +{ + (*m_pDest) << "[" << descr; + if(m_showTime) + { + time_t rawtime; + struct tm* timeinfo; + char buffer [80]; + + time(&rawtime); + timeinfo = localtime(&rawtime); + + strftime(buffer, 80, "%H:%M:%S", timeinfo); + (*m_pDest) << " " << buffer; + } + (*m_pDest) << "] " << what; +} diff --git a/core/util/Logger.hpp b/core/util/Logger.hpp new file mode 100644 index 00000000..f98009c9 --- /dev/null +++ b/core/util/Logger.hpp @@ -0,0 +1,67 @@ +#ifndef __LOGGER_HPP__ + #define __LOGGER_HPP__ + +// Author: Adrian Böckenkamp +// Date: 21.11.2011 + +#include +#include + +/** + * \class Logger + * Provides logging mechanisms. + */ +class Logger +{ + private: + std::ostream* m_pDest; + std::string m_description; + bool m_showTime; + public: + /** + * Constructor. + * @param description Description shown alongside each log entry in + * square brackets [ ]. Can be overridden in single add() calls. + * @param show_time Show a timestamp with each log entry. + * @param dest Stream to log into. + */ + Logger(const std::string& description = "Fail*", bool show_time = true, + std::ostream& dest = std::cout) + : m_pDest(&dest), m_description(description), m_showTime(show_time) { } + /** + * Change the default description which is shown alongside each log + * entry in square brackets [ ]. + * @param descr The description text. + */ + void setDescription(const std::string& descr) + { + m_description = descr; + } + /** + * Add a new log entry. + * @param what Message for log entry. + * @param descr Description shown alongside this log entry in square + * brackets [ ]. + */ + void add(const std::string& what, const std::string& descr); + /** + * Add a new log entry. + * @param what Message for log entry. The default description is + * being used in square brackets [ ]. + */ + void add(const std::string& what) { add(what, m_description); } + /** + * Simplifies the logging. + * @param v data to log + */ + template + inline std::ostream& operator <<(const T& v) + { + std::stringstream ss; + ss << v; + add(ss.str()); + return (*m_pDest); + } +}; + +#endif /* __LOGGER_HPP__ */ diff --git a/core/util/MemoryMap.hpp b/core/util/MemoryMap.hpp new file mode 100644 index 00000000..26984449 --- /dev/null +++ b/core/util/MemoryMap.hpp @@ -0,0 +1,50 @@ +#ifndef __MEMORYMAP_HPP__ + #define __MEMORYMAP_HPP__ + +#ifdef BOOST_1_46_OR_NEWER +#include +using namespace boost::icl; +#endif + +#include +#include "SAL/SALConfig.hpp" + +/** + * \class MemoryMap + * An efficient container for memory maps with holes. + */ +class MemoryMap +{ +#ifdef BOOST_1_46_OR_NEWER + typedef interval::type address_interval; + typedef interval_set::type address_set; + + address_set as; +public: + MemoryMap() {} + void clear() { as.clear(); } + void add(sal::address_t addr, int size) { as.add(address_interval(addr, addr+size-1)); } + void isMatching(sal::address_t addr, int size) { return intersects(as, address_interval(addr, addr+size-1)); } +#endif + std::set as; +public: + MemoryMap() {} + void clear() { as.clear(); } + void add(sal::address_t addr, int size = 1) + { + for (int i = 0; i < size; ++i) { + as.insert(addr + i); + } + } + bool isMatching(sal::address_t addr, int size = 1) + { + for (int i = 0; i < size; ++i) { + if (as.find(addr + i) != as.end()) { + return true; + } + } + return false; + } +}; + +#endif diff --git a/core/util/SynchronizedCounter.cc b/core/util/SynchronizedCounter.cc new file mode 100644 index 00000000..989c698a --- /dev/null +++ b/core/util/SynchronizedCounter.cc @@ -0,0 +1,30 @@ + +#include "SynchronizedCounter.hpp" + +int SynchronizedCounter::increment() +{ + // Acquire lock on the queue +#ifndef __puma + boost::unique_lock lock(m_mutex); +#endif + return ++m_counter; +} // Lock is automatically released here + +int SynchronizedCounter::decrement() +{ +// Acquire lock on the queue +#ifndef __puma + boost::unique_lock lock(m_mutex); +#endif + return --m_counter; +} // Lock is automatically released here + +int SynchronizedCounter::getValue() +{ + // Acquire lock on the queue +#ifndef __puma + boost::unique_lock lock(m_mutex); +#endif + return m_counter; +} // Lock is automatically released here + \ No newline at end of file diff --git a/core/util/SynchronizedCounter.hpp b/core/util/SynchronizedCounter.hpp new file mode 100644 index 00000000..2e4465b0 --- /dev/null +++ b/core/util/SynchronizedCounter.hpp @@ -0,0 +1,26 @@ +// Thread safe counter + +#ifndef __SYNCHRONIZED_COUNTER_HPP__ +#define __SYNCHRONIZED_COUNTER_HPP__ + +#ifndef __puma +#include +#include +#endif + +class SynchronizedCounter +{ +private: + int m_counter; +#ifndef __puma + boost::mutex m_mutex; // The mutex to synchronise on +#endif + public: + SynchronizedCounter() : m_counter(0) {}; + + int increment(); + int decrement(); + int getValue(); +}; + +#endif \ No newline at end of file diff --git a/core/util/SynchronizedMap.hpp b/core/util/SynchronizedMap.hpp new file mode 100644 index 00000000..4761ddc6 --- /dev/null +++ b/core/util/SynchronizedMap.hpp @@ -0,0 +1,75 @@ +// Map class that has thread synchronisation +// TODO We should consider to use Aspects for synchronisation primitives.. + +#ifndef __SYNCHRONIZED_MAP_HPP__ +#define __SYNCHRONIZED_MAP_HPP__ + +#include +#ifndef __puma +#include +#endif + +template +class SynchronizedMap +{ +private: + typedef std::map< Tkey, Tvalue > Tmap; + typedef typename Tmap::iterator Tit; + + Tmap m_map; // Use STL map to store data +#ifndef __puma + boost::mutex m_mutex; // The mutex to synchronise on +#endif + public: + int Size(){ +#ifndef __puma + boost::unique_lock lock(m_mutex); +#endif + return m_map.size(); + } + /** + * Add data to the map, return false if already present + * @param key Map key + * @param value value according to key + * @return false if key already present + */ + bool insert(const Tkey& key, const Tvalue& value ) + { + // Acquire lock on the queue +#ifndef __puma + boost::unique_lock lock(m_mutex); +#endif + if( m_map.find(key) == m_map.end() ){ // not present, add it + m_map[key] = value; + return true; + }else{ // item is already in, oops + return false; + } + + } // Lock is automatically released here + + /** + * Remove value from the map. + * @param key The Map key to remove + * @return false if key was not present + * + */ + bool remove(const Tkey& key, Tvalue& value) + { + // Acquire lock on the queue +#ifndef __puma + boost::unique_lock lock(m_mutex); +#endif + Tit iterator; + if ( (iterator = m_map.find(key)) != m_map.end() ) { + value = iterator->second; + m_map.erase(iterator); + return true; + }else{ + return false; + } + } // Lock is automatically released here + + +}; +#endif diff --git a/core/util/SynchronizedQueue.hpp b/core/util/SynchronizedQueue.hpp new file mode 100644 index 00000000..9246f4c3 --- /dev/null +++ b/core/util/SynchronizedQueue.hpp @@ -0,0 +1,90 @@ +// Queue class that has thread synchronisation +// from: http://www.quantnet.com/cplusplus-multithreading-boost/ + +#ifndef __SYNCHRONIZED_QUEUE_HPP__ +#define __SYNCHRONIZED_QUEUE_HPP__ + +#include +#ifndef __puma +#include +#endif + +template +class SynchronizedQueue +{ +private: + std::queue m_queue; // Use STL queue to store data +#ifndef __puma + boost::mutex m_mutex; // The mutex to synchronise on + boost::condition_variable m_cond; // The condition to wait for +#endif + public: + int Size(){ +#ifndef __puma + boost::unique_lock lock(m_mutex); +#endif + return m_queue.size(); + } + // Add data to the queue and notify others + void Enqueue(const T& data) + { + // Acquire lock on the queue +#ifndef __puma + boost::unique_lock lock(m_mutex); +#endif + // Add the data to the queue + m_queue.push(data); + // Notify others that data is ready +#ifndef __puma + m_cond.notify_one(); +#endif + } // Lock is automatically released here + + /** + * Get data from the queue. Wait for data if not available + */ + T Dequeue() + { + // Acquire lock on the queue +#ifndef __puma + boost::unique_lock lock(m_mutex); +#endif + // When there is no data, wait till someone fills it. + // Lock is automatically released in the wait and obtained + // again after the wait +#ifndef __puma + while (m_queue.size()==0) m_cond.wait(lock); +#endif + // Retrieve the data from the queue + T result=m_queue.front(); m_queue.pop(); + return result; + } // Lock is automatically released here + + + /** + * Get data from the queue. Non blocking variant. + * @param d Pointer to copy queue element to + * @return false if no element in queue + * + */ + bool Dequeue_nb(T& d) + { + // Acquire lock on the queue +#ifndef __puma + boost::unique_lock lock(m_mutex); +#endif + // When there is no data, return false. + // Lock is automatically released in the wait and obtained + // again after the wait + if (m_queue.size() > 0){ + // Retrieve the data from the queue + d = m_queue.front(); m_queue.pop(); + return true; + }else{ + return false; + } + } // Lock is automatically released here + + +}; +#endif diff --git a/core/variant_config.h.cmake b/core/variant_config.h.cmake new file mode 100644 index 00000000..d2b8d456 --- /dev/null +++ b/core/variant_config.h.cmake @@ -0,0 +1,8 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#cmakedefine BUILD_OVP +#cmakedefine BUILD_BOCHS + +#endif + diff --git a/doc/class-diagram.dia b/doc/class-diagram.dia new file mode 100644 index 00000000..27272ba7 --- /dev/null +++ b/doc/class-diagram.dia @@ -0,0 +1,15603 @@ + + + + + + + + + + + + + #A4# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #SimulatorController# + + + #global instance# + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Regs# + + + #RegisterManager*# + + + ## + + + ## + + + + + + + + + + + + + + #m_Mem# + + + #MemoryManager*# + + + ## + + + ## + + + + + + + + + + + + + + #m_EvList# + + + #EventList# + + + ## + + + ## + + + + + + + + + + + + + + #m_Flows# + + + #CoroutineManager# + + + ## + + + ## + + + + + + + + + + + + + + #m_SuppressedInterrupts# + + + #std::vector<unsigned># + + + ## + + + ## + + + + + + + + + + + + + + + + #startup# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #initExperiments# + + + ## + + + #void# + + + + + + #empty hook for experiment instantiations# + + + + + + + + + + + + + + + + + + #addFlow# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #flow# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + #removeFlow# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #flow# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + #save# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #path# + + + #const string&# + + + ## + + + ## + + + + + + + + + + #restore# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #path# + + + #const string&# + + + ## + + + ## + + + + + + + + + + #reboot# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #terminate# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #exCode# + + + #int# + + + #EXIT_SUCCESS# + + + ## + + + + + + + + + + #fireTimer# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #timer# + + + #uint32_t# + + + ## + + + ## + + + + + + + + + + #getRegisterManager# + + + ## + + + #RegisterManager&# + + + + + + ## + + + + + + + + + + + + + + + + + + #getRegisterManager# + + + ## + + + #RegisterManager&# + + + + + + ## + + + + + + + + + + + + + + + + + + #setRegisterManager# + + + ## + + + ## + + + + + + ## + + + + + + + + + + + + + + + + + #pReg# + + + #RegisterManager*# + + + ## + + + ## + + + + + + + + + + #setMemoryManager# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #MemoryManager*# + + + #pMem# + + + ## + + + ## + + + + + + + + + + #getMemoryManager# + + + ## + + + #MemoryManager&# + + + + + + ## + + + + + + + + + + + + + + + + + + #getMemoryManager# + + + ## + + + #MemoryManager&# + + + + + + ## + + + + + + + + + + + + + + + + + + #addEvent# + + + ## + + + #EventId# + + + + + + ## + + + + + + + + + + + + + + + + + #ev# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + + + #addEventAndWait# + + + ## + + + #BaseEvent*# + + + + + + ## + + + + + + + + + + + + + + + + + #ev# + + + #BaseEvent# + + + ## + + + ## + + + + + + + + + + #inject# + + + ## + + + #EventId# + + + + + + ## + + + + + + + + + + + + + + + + + #job# + + + #FaultInjectionJob# + + + ## + + + ## + + + + + + + + + + #removeEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #ev# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + + + #clearEvents# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #waitAny# + + + ## + + + #BaseEvent*# + + + + + + ## + + + + + + + + + + + + + + + + + + #getExperimentData# + + + ## + + + #<template class T> T*# + + + + + + ## + + + + + + + + + + + + + + + + + + #isSuppressedInterrupt# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #interruptNum# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #addSuppressedInterrupt# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #interruptNum# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #removeSuppressedInterrupt# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #interruptNum# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #onBreakpointEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #instrPtr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #onMemoryAccessEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #address_t# + + + ## + + + ## + + + + + + + + #len# + + + #size_t# + + + ## + + + ## + + + + + + + + #rw# + + + #bool# + + + ## + + + ## + + + + + + + + + + #onInterruptEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #type# + + + #unsigned# + + + ## + + + ## + + + + + + + + #nmi# + + + #bool# + + + ## + + + ## + + + + + + + + + + #onTrapEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #type# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #onGuestSystemEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #data# + + + #char# + + + ## + + + ## + + + + + + + + #port# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #onJumpEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #flagTriggered# + + + #bool# + + + ## + + + ## + + + + + + + + #opcode# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #cleanup# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #pExp# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #BochsController# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Regularity# + + + #unsigned# + + + ## + + + ##ifdef DEBUG# + + + + + + + + + + + + + + #m_Counter# + + + #unsigned# + + + ## + + + ##ifdef DEBUG# + + + + + + + + + + + + + + #m_pDest# + + + #std::ostream*# + + + ## + + + ##ifdef DEBUG# + + + + + + + + + + + + + + #m_CurrFlow# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + + + + + + + #save# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #path# + + + #const string&# + + + ## + + + ## + + + + + + + + + + #restore# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #path# + + + #const string&# + + + ## + + + ## + + + + + + + + + + #reboot# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #rebootDone# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #onInstrPtrChanged# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #instrPtr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #dbgEnableInstrPtrOutput# + + + ## + + + #void# + + + + + + ##ifdef DEBUG# + + + + + + + + + + + + + + + + + #regularity# + + + #unsigned# + + + ## + + + ## + + + + + + + + #dest# + + + #std::ostream*# + + + #&cout# + + + ## + + + + + + + + + + #restoreDone# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #saveDone# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #fireInterrupt# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #TODO# + + + #TODO# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #OVPController# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #EventList# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_pFired# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + + + + + + + #m_BufferList# + + + #bufferlist_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_FireList# + + + #firelist_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_DeleteList# + + + #deletelist_t# + + + ## + + + ## + + + + + + + + + + + + + + + + #add# + + + ## + + + #EvendId# + + + + + + ## + + + + + + + + + + + + + + + + + #ev# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + #pExp# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + #remove# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #ev# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + + + #getEventFromId# + + + ## + + + #BaseEvent*# + + + + + + ## + + + + + + + + + + + + + + + + + #id# + + + #EventId# + + + ## + + + ## + + + + + + + + + + #getEventsOf# + + + ## + + + #const eventlist_t*# + + + + + + ## + + + + + + + + + + + + + + + + + #pWhat# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + #getContextCount# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getLastFired# + + + ## + + + #BaseEvent*# + + + + + + ## + + + + + + + + + + + + + + + + + + #makeActive# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #ev# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + + + #makeActive# + + + ## + + + #iterator# + + + + + + ## + + + + + + + + + + + + + + + + + #it# + + + #iterator# + + + ## + + + ## + + + + + + + + + + #getExperimentOf# + + + ## + + + #ExperimentFlow*# + + + + + + ## + + + + + + + + + + + + + + + + + #pEv# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + + + #getEventCount# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #m_remove# + + + ## + + + #iterator# + + + + + + ## + + + + + + + + + + + + + + + + + #it# + + + #iterator# + + + ## + + + ## + + + + + + + + #skip_deletelist# + + + #bool# + + + ## + + + ## + + + + + + + + + + #remove# + + + ## + + + #iterator# + + + + + + ## + + + + + + + + + + + + + + + + + #it# + + + #iterator # + + + ## + + + ## + + + + + + + + + + #begin# + + + ## + + + #iterator# + + + + + + ## + + + + + + + + + + + + + + + + + + #end# + + + ## + + + #iterator# + + + + + + ## + + + + + + + + + + + + + + + + + + #fireActiveEvents# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #BaseEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Counter# + + + #EventId# + + + ## + + + ## + + + + + + + + + + + + + + #m_Id# + + + #EventId# + + + ## + + + ## + + + + + + + + + + + + + + #m_tStamp# + + + #time_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_OccCounter# + + + #unsigned int# + + + ## + + + ## + + + + + + + + + + + + + + #m_Parent# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + + + + + + + #getId# + + + ## + + + #EvendId# + + + + + + ## + + + + + + + + + + + + + + + + + + #getTime# + + + ## + + + #time_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #decreaseCounter# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #setCounter# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #val# + + + #unsigned int# + + + #0# + + + ## + + + + + + + + + + #getCounter# + + + ## + + + #unsigned int# + + + + + + ## + + + + + + + + + + + + + + + + + + #updateTime# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #getParent# + + + ## + + + #ExperimentFlow*# + + + + + + ## + + + + + + + + + + + + + + + + + + #setParent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #pFlow# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + #1# + + + + + + + + + ## + + + #*# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #BPEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_WatchInstrPtr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_TriggerInstrPtr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + + + #getWatchInstructionPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setWatchInstructionPointer# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #iptr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #isMatching# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #getTriggerInstructionPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setTriggerInstructionPointer(# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #iptr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #ExperimentFlow# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #run# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #ped# + + + #ExperimentData*# + + + ## + + + ## + + + + + + + + + + #coroutine_entry# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #FaultCoverageExperiment# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #MemAccessTracingCoExperiment# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + + + + + + + + + + ## + + + #1# + + + + + + + + + ## + + + #*# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #CampaignController# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #getSimulator# + + + ## + + + #SimulatorController const *# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Campaign# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #run# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + #1# + + + + + + + + + ## + + + #n# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #FaultCoverageCampaign# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #ExperimentData# + + + ## + + + #Data structure for experiment input and output data# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #msg# + + + #google::protobuf::Message*# + + + ## + + + ## + + + + + + + + + + + + + + #m_workloadID# + + + #uint32_t# + + + ## + + + ## + + + + + + + + + + + + + + + + #getMessage# + + + ## + + + #google::protobuf::Message&# + + + + + + ## + + + + + + + + + + + + + + + + + + #getWorkloadID# + + + ## + + + #uint32_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setWorkloadID# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #id# + + + #uint32_t# + + + ## + + + ## + + + + + + + + + + #serialize# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #output# + + + #ostream*# + + + ## + + + ## + + + + + + + + + + #unserialize# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #input# + + + #istream*# + + + ## + + + ## + + + + + + + + + + #DebugString# + + + ## + + + #string# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #FaultCoverageExperimentData# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ExperimentController::getExperimentData# + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ExperimentDataQueue# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_queue# + + + #dequeue<ExperimentData*># + + + ## + + + ## + + + + + + + + + + + + + + + + #getData# + + + ## + + + #ExperimentData*# + + + + + + ## + + + + + + + + + + + + + + + + + + #addData# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #exp# + + + #ExperimentData*# + + + ## + + + ## + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + #1# + + + + + + + + + ## + + + #*# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #JobServer# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #undoneJobs# + + + #ExperimentDataQueue# + + + ## + + + ## + + + + + + + + + + + + + + + + #waitForConnections# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #sendPendingExperimentData# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #dest_minion# + + + #Minion# + + + ## + + + ## + + + + + + + + + + #receiveExperimentResults# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #exp_results# + + + #ExperimentData* # + + + ## + + + ## + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + #MinionList# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #minion_pool# + + + #vector<Minion*># + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Minion# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #isWorking# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + #hostname# + + + #string# + + + ## + + + ## + + + + + + + + + + + + + + #currentExperimentData# + + + #ExperimentData *# + + + ## + + + ## + + + + + + + + + + + + + + #sockfd# + + + #int# + + + ## + + + ## + + + + + + + + + + + + + + + + #getCurrentExperimentData# + + + ## + + + #ExperimentData*# + + + + + + ## + + + + + + + + + + + + + + + + + + #setCurrentExperimentData# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #exp# + + + #ExperimentData*# + + + ## + + + ## + + + + + + + + + + #isBusy# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #setBusy# + + + ## + + + ## + + + + + + ## + + + + + + + + + + + + + + + + + #state# + + + #bool# + + + ## + + + ## + + + + + + + + + + #getHostname# + + + ## + + + #string# + + + + + + ## + + + + + + + + + + + + + + + + + + #setHostname# + + + ## + + + ## + + + + + + ## + + + + + + + + + + + + + + + + + #host# + + + #string# + + + ## + + + ## + + + + + + + + + + #setSocketDescriptor# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #sock# + + + #int# + + + ## + + + ## + + + + + + + + + + #getSocketDescriptor# + + + ## + + + #int# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + #1# + + + + + + + + + ## + + + #*# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ExperimentDataStorage# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #FaultCoverageExperimentDataStorage# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Register# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Type# + + + #RegisterType# + + + ## + + + ## + + + + + + + + + + + + + + #m_Width# + + + #regwidth_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_Assigned# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + #m_Index# + + + #size_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_Name# + + + #std::string# + + + ## + + + ## + + + + + + + + + + + + + + + + #getType# + + + ## + + + #RegisterType# + + + + + + ## + + + + + + + + + + + + + + + + + + #getWidth# + + + ## + + + #regwidth_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getData# + + + ## + + + #regdata_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setData# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #data# + + + #regdata_t# + + + ## + + + ## + + + + + + + + + + #setName# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #name# + + + #const std::string&# + + + ## + + + ## + + + + + + + + + + #getName# + + + ## + + + #const std::string&# + + + + + + ## + + + + + + + + + + + + + + + + + + #getIndex# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #isAssigned# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #MemoryManager# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #getPoolSize# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getStartAddr# + + + ## + + + #host_address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getByte# + + + ## + + + #byte_t# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #guest_address_t# + + + ## + + + ## + + + + + + + + + + #getBytes# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #guest_address_t# + + + ## + + + ## + + + + + + + + #cnt# + + + #size_t# + + + ## + + + ## + + + + + + + + #dest# + + + #std::vector<byte_t>&# + + + ## + + + ## + + + + + + + + + + #setByte# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #guest_address_t# + + + ## + + + ## + + + + + + + + #data# + + + #byte_t# + + + ## + + + ## + + + + + + + + + + #setBytes# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #guest_address_t# + + + ## + + + ## + + + + + + + + #data# + + + #const std::vector<byte_t>&# + + + ## + + + ## + + + + + + + + + + #guestToHost# + + + ## + + + #host_address_t# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #guest_address_t# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #RegisterManager# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Subsets# + + + #std::vector< UniformRegisterSet ># + + + ## + + + ## + + + + + + + + + + + + + + + + #count# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #subsetCount# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getSet# + + + ## + + + #UniformRegisterSet&# + + + + + + ## + + + + + + + + + + + + + + + + + #i# + + + #size_t# + + + ## + + + ## + + + + + + + + + + #getSetOfType# + + + ## + + + #UniformRegisterSet&# + + + + + + ## + + + + + + + + + + + + + + + + + #t# + + + #RegisterType# + + + ## + + + ## + + + + + + + + + + #add# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #reg# + + + #UniformRegisterSet&# + + + ## + + + ## + + + + + + + + + + #clear# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #getInstructionPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getStackPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getBasePointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #RegisterIterator# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_RegIter# + + + #std::vector< Register* >::iterator# + + + ## + + + ## + + + + + + + + + + + + + + #m_pSetRef# + + + #UniformRegisterSet*# + + + ## + + + ## + + + + + + + + + + + + + + #m_SetIter# + + + #std::vector< UniformRegisterSet >::iterator# + + + ## + + + ## + + + + + + + + + + + + + + #m_pManRef# + + + #RegisterManager*# + + + ## + + + ## + + + + + + + + + + + + + + #m_End# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + + + #reset# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #next# + + + ## + + + #Register*# + + + + + + ## + + + + + + + + + + + + + + + + + + #hasMore# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #UniformRegisterSet# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Regs# + + + #std::vector< Register* ># + + + ## + + + ## + + + + + + + + + + + + + + #m_Type# + + + #RegisterType# + + + ## + + + ## + + + + + + + + + + + + + + + + #getType# + + + ## + + + #RegisterType# + + + + + + ## + + + + + + + + + + + + + + + + + + #count# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getRegister# + + + ## + + + #Register*# + + + + + + ## + + + + + + + + + + + + + + + + + #i# + + + #size_t# + + + ## + + + ## + + + + + + + + + + #add# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #reg# + + + #Register*# + + + ## + + + ## + + + + + + + + + + #clear# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + #1..*# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + #1..*# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #BochsRegister# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_pData# + + + #void*# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #BxGPReg# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #BxPCReg# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #BochsMemoryManager# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #BPRangeEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_WatchStartAddr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_WatchEndAddr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_TriggerInstrPtr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + + + #setWatchInstructionPointerRange# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #start# + + + #address_t# + + + ## + + + ## + + + + + + + + #end# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #isMatching# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #getTriggerInstructionPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setTriggerInstructionPointer# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #iptr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #InterruptEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_IsNMI# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + + + #isNMI# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #setNMI# + + + ## + + + ## + + + + + + ## + + + + + + + + + + + + + + + + + #enabled# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #TrapEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #MemAccessEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_WatchAddr# + + + #address_t # + + + ## + + + ## + + + + + + + + + + + + + + #m_WatchType# + + + #accessType_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_TriggerAddr# + + + #sal::address_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_TriggerWidth# + + + #size_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_TriggerIP# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_AccessType# + + + #accessType_t# + + + ## + + + ## + + + + + + + + + + + + + + + + #getWatchAddress# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setWatchAddress# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #isMatching# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #address_t# + + + ## + + + ## + + + + + + + + #accessType# + + + #accessType_t# + + + ## + + + ## + + + + + + + + + + #getTriggerAddress# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getTriggerWidth# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setTriggerWidth# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #width# + + + #size_t# + + + ## + + + ## + + + + + + + + + + #getTriggerInstructionPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setTriggerInstructionPointer# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #getTriggerAccessType# + + + ## + + + #accessType_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setTriggerAccessType# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #type# + + + #accessType_t# + + + ## + + + ## + + + + + + + + + + #getWatchAccessType# + + + ## + + + #accessType_t# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #CoroutineManager# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #STACK_SIZE_DEFAULT# + + + #const unsigned# + + + #4096# + + + ## + + + + + + + + + + + + + + #m_Flows# + + + #std::map<ExperimentFlow*, corohandle_t># + + + ## + + + ## + + + + + + + + + + + + + + #m_simCoro# + + + #corohandle_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_togglerstack# + + + #std::stack<corohandle_t># + + + ## + + + ## + + + + + + + + + + + + + + #SIM_FLOW# + + + #const ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + + + + + + + #m_invoke# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #pData# + + + #void# + + + ## + + + ## + + + + + + + + + + #create# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #flow# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + #data# + + + #ExperimentData*# + + + ## + + + ## + + + + + + + + + + #toggle# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #flow# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + #resume# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #getCurrent# + + + ## + + + #ExperimentFlow*# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #BochsRegisterManager# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #getInstructionPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getStackPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getBasePointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #BxFlagsReg# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #getCarryFlag# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #getParityFlag# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #getZeroFlag# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #getSignFlag# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #getOverflowFlag# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #setCarryFlag# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #bit# + + + #bool# + + + ## + + + ## + + + + + + + + + + #setParityFlag# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #bit# + + + #booĺ# + + + ## + + + ## + + + + + + + + + + #setZeroFlag# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #bit# + + + #bool# + + + ## + + + ## + + + + + + + + + + #setSignFlag# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #bit# + + + #bool# + + + ## + + + ## + + + + + + + + + + #setOverflowFlag# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #bit# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #TroubleEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_TriggerNumber# + + + #int# + + + ## + + + ## + + + + + + + + + + + + + + #m_WatchNumbers# + + + #std::vector<unsigned># + + + ## + + + ## + + + + + + + + + + + + + + + + #addWatchNumber# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #troubleNumber# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #removeWatchNumber# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #troubleNum# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #getWatchNumbers# + + + ## + + + #std::vector<unsigned># + + + + + + ## + + + + + + + + + + + + + + + + + + #isMatching# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #troubleNum# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #setTriggerNumber# + + + ## + + + ## + + + + + + ## + + + + + + + + + + + + + + + + + #troubleNum# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #getTriggerNumber# + + + ## + + + #unsigned# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #MemReadEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #MemWriteEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #GuestEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Data# + + + #char# + + + ## + + + ## + + + + + + + + + + + + + + #m_Port# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + + + + + + + #getData# + + + ## + + + #char# + + + + + + ## + + + + + + + + + + + + + + + + + + #setData# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #data# + + + #char# + + + ## + + + ## + + + + + + + + + + #getPort# + + + ## + + + #unsigned# + + + + + + ## + + + + + + + + + + + + + + + + + + #setPort# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #port# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #JumpEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Opcode# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + + + + + #m_FlagTriggered# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + + + #getOpcode# + + + ## + + + #unsigned# + + + + + + ## + + + + + + + + + + + + + + + + + + #isRegisterTriggered# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #setOpcode# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #oc# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #setFlagTriggered# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #flagTriggered# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + diff --git a/doc/class-diagram.png b/doc/class-diagram.png new file mode 100644 index 00000000..27272ba7 --- /dev/null +++ b/doc/class-diagram.png @@ -0,0 +1,15603 @@ + + + + + + + + + + + + + #A4# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #SimulatorController# + + + #global instance# + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Regs# + + + #RegisterManager*# + + + ## + + + ## + + + + + + + + + + + + + + #m_Mem# + + + #MemoryManager*# + + + ## + + + ## + + + + + + + + + + + + + + #m_EvList# + + + #EventList# + + + ## + + + ## + + + + + + + + + + + + + + #m_Flows# + + + #CoroutineManager# + + + ## + + + ## + + + + + + + + + + + + + + #m_SuppressedInterrupts# + + + #std::vector<unsigned># + + + ## + + + ## + + + + + + + + + + + + + + + + #startup# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #initExperiments# + + + ## + + + #void# + + + + + + #empty hook for experiment instantiations# + + + + + + + + + + + + + + + + + + #addFlow# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #flow# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + #removeFlow# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #flow# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + #save# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #path# + + + #const string&# + + + ## + + + ## + + + + + + + + + + #restore# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #path# + + + #const string&# + + + ## + + + ## + + + + + + + + + + #reboot# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #terminate# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #exCode# + + + #int# + + + #EXIT_SUCCESS# + + + ## + + + + + + + + + + #fireTimer# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #timer# + + + #uint32_t# + + + ## + + + ## + + + + + + + + + + #getRegisterManager# + + + ## + + + #RegisterManager&# + + + + + + ## + + + + + + + + + + + + + + + + + + #getRegisterManager# + + + ## + + + #RegisterManager&# + + + + + + ## + + + + + + + + + + + + + + + + + + #setRegisterManager# + + + ## + + + ## + + + + + + ## + + + + + + + + + + + + + + + + + #pReg# + + + #RegisterManager*# + + + ## + + + ## + + + + + + + + + + #setMemoryManager# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #MemoryManager*# + + + #pMem# + + + ## + + + ## + + + + + + + + + + #getMemoryManager# + + + ## + + + #MemoryManager&# + + + + + + ## + + + + + + + + + + + + + + + + + + #getMemoryManager# + + + ## + + + #MemoryManager&# + + + + + + ## + + + + + + + + + + + + + + + + + + #addEvent# + + + ## + + + #EventId# + + + + + + ## + + + + + + + + + + + + + + + + + #ev# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + + + #addEventAndWait# + + + ## + + + #BaseEvent*# + + + + + + ## + + + + + + + + + + + + + + + + + #ev# + + + #BaseEvent# + + + ## + + + ## + + + + + + + + + + #inject# + + + ## + + + #EventId# + + + + + + ## + + + + + + + + + + + + + + + + + #job# + + + #FaultInjectionJob# + + + ## + + + ## + + + + + + + + + + #removeEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #ev# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + + + #clearEvents# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #waitAny# + + + ## + + + #BaseEvent*# + + + + + + ## + + + + + + + + + + + + + + + + + + #getExperimentData# + + + ## + + + #<template class T> T*# + + + + + + ## + + + + + + + + + + + + + + + + + + #isSuppressedInterrupt# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #interruptNum# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #addSuppressedInterrupt# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #interruptNum# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #removeSuppressedInterrupt# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #interruptNum# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #onBreakpointEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #instrPtr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #onMemoryAccessEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #address_t# + + + ## + + + ## + + + + + + + + #len# + + + #size_t# + + + ## + + + ## + + + + + + + + #rw# + + + #bool# + + + ## + + + ## + + + + + + + + + + #onInterruptEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #type# + + + #unsigned# + + + ## + + + ## + + + + + + + + #nmi# + + + #bool# + + + ## + + + ## + + + + + + + + + + #onTrapEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #type# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #onGuestSystemEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #data# + + + #char# + + + ## + + + ## + + + + + + + + #port# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #onJumpEvent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #flagTriggered# + + + #bool# + + + ## + + + ## + + + + + + + + #opcode# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #cleanup# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #pExp# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #BochsController# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Regularity# + + + #unsigned# + + + ## + + + ##ifdef DEBUG# + + + + + + + + + + + + + + #m_Counter# + + + #unsigned# + + + ## + + + ##ifdef DEBUG# + + + + + + + + + + + + + + #m_pDest# + + + #std::ostream*# + + + ## + + + ##ifdef DEBUG# + + + + + + + + + + + + + + #m_CurrFlow# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + + + + + + + #save# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #path# + + + #const string&# + + + ## + + + ## + + + + + + + + + + #restore# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #path# + + + #const string&# + + + ## + + + ## + + + + + + + + + + #reboot# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #rebootDone# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #onInstrPtrChanged# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #instrPtr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #dbgEnableInstrPtrOutput# + + + ## + + + #void# + + + + + + ##ifdef DEBUG# + + + + + + + + + + + + + + + + + #regularity# + + + #unsigned# + + + ## + + + ## + + + + + + + + #dest# + + + #std::ostream*# + + + #&cout# + + + ## + + + + + + + + + + #restoreDone# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #saveDone# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #fireInterrupt# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #TODO# + + + #TODO# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #OVPController# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #EventList# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_pFired# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + + + + + + + #m_BufferList# + + + #bufferlist_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_FireList# + + + #firelist_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_DeleteList# + + + #deletelist_t# + + + ## + + + ## + + + + + + + + + + + + + + + + #add# + + + ## + + + #EvendId# + + + + + + ## + + + + + + + + + + + + + + + + + #ev# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + #pExp# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + #remove# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #ev# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + + + #getEventFromId# + + + ## + + + #BaseEvent*# + + + + + + ## + + + + + + + + + + + + + + + + + #id# + + + #EventId# + + + ## + + + ## + + + + + + + + + + #getEventsOf# + + + ## + + + #const eventlist_t*# + + + + + + ## + + + + + + + + + + + + + + + + + #pWhat# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + #getContextCount# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getLastFired# + + + ## + + + #BaseEvent*# + + + + + + ## + + + + + + + + + + + + + + + + + + #makeActive# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #ev# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + + + #makeActive# + + + ## + + + #iterator# + + + + + + ## + + + + + + + + + + + + + + + + + #it# + + + #iterator# + + + ## + + + ## + + + + + + + + + + #getExperimentOf# + + + ## + + + #ExperimentFlow*# + + + + + + ## + + + + + + + + + + + + + + + + + #pEv# + + + #BaseEvent*# + + + ## + + + ## + + + + + + + + + + #getEventCount# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #m_remove# + + + ## + + + #iterator# + + + + + + ## + + + + + + + + + + + + + + + + + #it# + + + #iterator# + + + ## + + + ## + + + + + + + + #skip_deletelist# + + + #bool# + + + ## + + + ## + + + + + + + + + + #remove# + + + ## + + + #iterator# + + + + + + ## + + + + + + + + + + + + + + + + + #it# + + + #iterator # + + + ## + + + ## + + + + + + + + + + #begin# + + + ## + + + #iterator# + + + + + + ## + + + + + + + + + + + + + + + + + + #end# + + + ## + + + #iterator# + + + + + + ## + + + + + + + + + + + + + + + + + + #fireActiveEvents# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #BaseEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Counter# + + + #EventId# + + + ## + + + ## + + + + + + + + + + + + + + #m_Id# + + + #EventId# + + + ## + + + ## + + + + + + + + + + + + + + #m_tStamp# + + + #time_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_OccCounter# + + + #unsigned int# + + + ## + + + ## + + + + + + + + + + + + + + #m_Parent# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + + + + + + + #getId# + + + ## + + + #EvendId# + + + + + + ## + + + + + + + + + + + + + + + + + + #getTime# + + + ## + + + #time_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #decreaseCounter# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #setCounter# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #val# + + + #unsigned int# + + + #0# + + + ## + + + + + + + + + + #getCounter# + + + ## + + + #unsigned int# + + + + + + ## + + + + + + + + + + + + + + + + + + #updateTime# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #getParent# + + + ## + + + #ExperimentFlow*# + + + + + + ## + + + + + + + + + + + + + + + + + + #setParent# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #pFlow# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + #1# + + + + + + + + + ## + + + #*# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #BPEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_WatchInstrPtr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_TriggerInstrPtr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + + + #getWatchInstructionPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setWatchInstructionPointer# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #iptr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #isMatching# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #getTriggerInstructionPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setTriggerInstructionPointer(# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #iptr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #ExperimentFlow# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #run# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #ped# + + + #ExperimentData*# + + + ## + + + ## + + + + + + + + + + #coroutine_entry# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #FaultCoverageExperiment# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #MemAccessTracingCoExperiment# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + + + + + + + + + + ## + + + #1# + + + + + + + + + ## + + + #*# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #CampaignController# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #getSimulator# + + + ## + + + #SimulatorController const *# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Campaign# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #run# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + #1# + + + + + + + + + ## + + + #n# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #FaultCoverageCampaign# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #ExperimentData# + + + ## + + + #Data structure for experiment input and output data# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #msg# + + + #google::protobuf::Message*# + + + ## + + + ## + + + + + + + + + + + + + + #m_workloadID# + + + #uint32_t# + + + ## + + + ## + + + + + + + + + + + + + + + + #getMessage# + + + ## + + + #google::protobuf::Message&# + + + + + + ## + + + + + + + + + + + + + + + + + + #getWorkloadID# + + + ## + + + #uint32_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setWorkloadID# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #id# + + + #uint32_t# + + + ## + + + ## + + + + + + + + + + #serialize# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #output# + + + #ostream*# + + + ## + + + ## + + + + + + + + + + #unserialize# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #input# + + + #istream*# + + + ## + + + ## + + + + + + + + + + #DebugString# + + + ## + + + #string# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #FaultCoverageExperimentData# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ExperimentController::getExperimentData# + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ExperimentDataQueue# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_queue# + + + #dequeue<ExperimentData*># + + + ## + + + ## + + + + + + + + + + + + + + + + #getData# + + + ## + + + #ExperimentData*# + + + + + + ## + + + + + + + + + + + + + + + + + + #addData# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #exp# + + + #ExperimentData*# + + + ## + + + ## + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + #1# + + + + + + + + + ## + + + #*# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #JobServer# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #undoneJobs# + + + #ExperimentDataQueue# + + + ## + + + ## + + + + + + + + + + + + + + + + #waitForConnections# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #sendPendingExperimentData# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #dest_minion# + + + #Minion# + + + ## + + + ## + + + + + + + + + + #receiveExperimentResults# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #exp_results# + + + #ExperimentData* # + + + ## + + + ## + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + #MinionList# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #minion_pool# + + + #vector<Minion*># + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Minion# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #isWorking# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + #hostname# + + + #string# + + + ## + + + ## + + + + + + + + + + + + + + #currentExperimentData# + + + #ExperimentData *# + + + ## + + + ## + + + + + + + + + + + + + + #sockfd# + + + #int# + + + ## + + + ## + + + + + + + + + + + + + + + + #getCurrentExperimentData# + + + ## + + + #ExperimentData*# + + + + + + ## + + + + + + + + + + + + + + + + + + #setCurrentExperimentData# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #exp# + + + #ExperimentData*# + + + ## + + + ## + + + + + + + + + + #isBusy# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #setBusy# + + + ## + + + ## + + + + + + ## + + + + + + + + + + + + + + + + + #state# + + + #bool# + + + ## + + + ## + + + + + + + + + + #getHostname# + + + ## + + + #string# + + + + + + ## + + + + + + + + + + + + + + + + + + #setHostname# + + + ## + + + ## + + + + + + ## + + + + + + + + + + + + + + + + + #host# + + + #string# + + + ## + + + ## + + + + + + + + + + #setSocketDescriptor# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #sock# + + + #int# + + + ## + + + ## + + + + + + + + + + #getSocketDescriptor# + + + ## + + + #int# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + #1# + + + + + + + + + ## + + + #*# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ExperimentDataStorage# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #FaultCoverageExperimentDataStorage# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Register# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Type# + + + #RegisterType# + + + ## + + + ## + + + + + + + + + + + + + + #m_Width# + + + #regwidth_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_Assigned# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + #m_Index# + + + #size_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_Name# + + + #std::string# + + + ## + + + ## + + + + + + + + + + + + + + + + #getType# + + + ## + + + #RegisterType# + + + + + + ## + + + + + + + + + + + + + + + + + + #getWidth# + + + ## + + + #regwidth_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getData# + + + ## + + + #regdata_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setData# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #data# + + + #regdata_t# + + + ## + + + ## + + + + + + + + + + #setName# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #name# + + + #const std::string&# + + + ## + + + ## + + + + + + + + + + #getName# + + + ## + + + #const std::string&# + + + + + + ## + + + + + + + + + + + + + + + + + + #getIndex# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #isAssigned# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #MemoryManager# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #getPoolSize# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getStartAddr# + + + ## + + + #host_address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getByte# + + + ## + + + #byte_t# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #guest_address_t# + + + ## + + + ## + + + + + + + + + + #getBytes# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #guest_address_t# + + + ## + + + ## + + + + + + + + #cnt# + + + #size_t# + + + ## + + + ## + + + + + + + + #dest# + + + #std::vector<byte_t>&# + + + ## + + + ## + + + + + + + + + + #setByte# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #guest_address_t# + + + ## + + + ## + + + + + + + + #data# + + + #byte_t# + + + ## + + + ## + + + + + + + + + + #setBytes# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #guest_address_t# + + + ## + + + ## + + + + + + + + #data# + + + #const std::vector<byte_t>&# + + + ## + + + ## + + + + + + + + + + #guestToHost# + + + ## + + + #host_address_t# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #guest_address_t# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #RegisterManager# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Subsets# + + + #std::vector< UniformRegisterSet ># + + + ## + + + ## + + + + + + + + + + + + + + + + #count# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #subsetCount# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getSet# + + + ## + + + #UniformRegisterSet&# + + + + + + ## + + + + + + + + + + + + + + + + + #i# + + + #size_t# + + + ## + + + ## + + + + + + + + + + #getSetOfType# + + + ## + + + #UniformRegisterSet&# + + + + + + ## + + + + + + + + + + + + + + + + + #t# + + + #RegisterType# + + + ## + + + ## + + + + + + + + + + #add# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #reg# + + + #UniformRegisterSet&# + + + ## + + + ## + + + + + + + + + + #clear# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #getInstructionPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getStackPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getBasePointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #RegisterIterator# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_RegIter# + + + #std::vector< Register* >::iterator# + + + ## + + + ## + + + + + + + + + + + + + + #m_pSetRef# + + + #UniformRegisterSet*# + + + ## + + + ## + + + + + + + + + + + + + + #m_SetIter# + + + #std::vector< UniformRegisterSet >::iterator# + + + ## + + + ## + + + + + + + + + + + + + + #m_pManRef# + + + #RegisterManager*# + + + ## + + + ## + + + + + + + + + + + + + + #m_End# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + + + #reset# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #next# + + + ## + + + #Register*# + + + + + + ## + + + + + + + + + + + + + + + + + + #hasMore# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #UniformRegisterSet# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Regs# + + + #std::vector< Register* ># + + + ## + + + ## + + + + + + + + + + + + + + #m_Type# + + + #RegisterType# + + + ## + + + ## + + + + + + + + + + + + + + + + #getType# + + + ## + + + #RegisterType# + + + + + + ## + + + + + + + + + + + + + + + + + + #count# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getRegister# + + + ## + + + #Register*# + + + + + + ## + + + + + + + + + + + + + + + + + #i# + + + #size_t# + + + ## + + + ## + + + + + + + + + + #add# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #reg# + + + #Register*# + + + ## + + + ## + + + + + + + + + + #clear# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + #1..*# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + #1..*# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #BochsRegister# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_pData# + + + #void*# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #BxGPReg# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #BxPCReg# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #BochsMemoryManager# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #BPRangeEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_WatchStartAddr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_WatchEndAddr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_TriggerInstrPtr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + + + #setWatchInstructionPointerRange# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #start# + + + #address_t# + + + ## + + + ## + + + + + + + + #end# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #isMatching# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #getTriggerInstructionPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setTriggerInstructionPointer# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #iptr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #InterruptEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_IsNMI# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + + + #isNMI# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #setNMI# + + + ## + + + ## + + + + + + ## + + + + + + + + + + + + + + + + + #enabled# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #TrapEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #MemAccessEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_WatchAddr# + + + #address_t # + + + ## + + + ## + + + + + + + + + + + + + + #m_WatchType# + + + #accessType_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_TriggerAddr# + + + #sal::address_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_TriggerWidth# + + + #size_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_TriggerIP# + + + #address_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_AccessType# + + + #accessType_t# + + + ## + + + ## + + + + + + + + + + + + + + + + #getWatchAddress# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setWatchAddress# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #isMatching# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #address_t# + + + ## + + + ## + + + + + + + + #accessType# + + + #accessType_t# + + + ## + + + ## + + + + + + + + + + #getTriggerAddress# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getTriggerWidth# + + + ## + + + #size_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setTriggerWidth# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #width# + + + #size_t# + + + ## + + + ## + + + + + + + + + + #getTriggerInstructionPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setTriggerInstructionPointer# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #addr# + + + #address_t# + + + ## + + + ## + + + + + + + + + + #getTriggerAccessType# + + + ## + + + #accessType_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #setTriggerAccessType# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #type# + + + #accessType_t# + + + ## + + + ## + + + + + + + + + + #getWatchAccessType# + + + ## + + + #accessType_t# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #CoroutineManager# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #STACK_SIZE_DEFAULT# + + + #const unsigned# + + + #4096# + + + ## + + + + + + + + + + + + + + #m_Flows# + + + #std::map<ExperimentFlow*, corohandle_t># + + + ## + + + ## + + + + + + + + + + + + + + #m_simCoro# + + + #corohandle_t# + + + ## + + + ## + + + + + + + + + + + + + + #m_togglerstack# + + + #std::stack<corohandle_t># + + + ## + + + ## + + + + + + + + + + + + + + #SIM_FLOW# + + + #const ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + + + + + + + #m_invoke# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #pData# + + + #void# + + + ## + + + ## + + + + + + + + + + #create# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #flow# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + #data# + + + #ExperimentData*# + + + ## + + + ## + + + + + + + + + + #toggle# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #flow# + + + #ExperimentFlow*# + + + ## + + + ## + + + + + + + + + + #resume# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + + #getCurrent# + + + ## + + + #ExperimentFlow*# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + ## + + + ## + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #BochsRegisterManager# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #getInstructionPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getStackPointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + #getBasePointer# + + + ## + + + #address_t# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #BxFlagsReg# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #getCarryFlag# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #getParityFlag# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #getZeroFlag# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #getSignFlag# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #getOverflowFlag# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #setCarryFlag# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #bit# + + + #bool# + + + ## + + + ## + + + + + + + + + + #setParityFlag# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #bit# + + + #booĺ# + + + ## + + + ## + + + + + + + + + + #setZeroFlag# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #bit# + + + #bool# + + + ## + + + ## + + + + + + + + + + #setSignFlag# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #bit# + + + #bool# + + + ## + + + ## + + + + + + + + + + #setOverflowFlag# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #bit# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #TroubleEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_TriggerNumber# + + + #int# + + + ## + + + ## + + + + + + + + + + + + + + #m_WatchNumbers# + + + #std::vector<unsigned># + + + ## + + + ## + + + + + + + + + + + + + + + + #addWatchNumber# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #troubleNumber# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #removeWatchNumber# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #troubleNum# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #getWatchNumbers# + + + ## + + + #std::vector<unsigned># + + + + + + ## + + + + + + + + + + + + + + + + + + #isMatching# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + #troubleNum# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #setTriggerNumber# + + + ## + + + ## + + + + + + ## + + + + + + + + + + + + + + + + + #troubleNum# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #getTriggerNumber# + + + ## + + + #unsigned# + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #MemReadEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #MemWriteEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + #GuestEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Data# + + + #char# + + + ## + + + ## + + + + + + + + + + + + + + #m_Port# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + + + + + + + #getData# + + + ## + + + #char# + + + + + + ## + + + + + + + + + + + + + + + + + + #setData# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #data# + + + #char# + + + ## + + + ## + + + + + + + + + + #getPort# + + + ## + + + #unsigned# + + + + + + ## + + + + + + + + + + + + + + + + + + #setPort# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #port# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #JumpEvent# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #m_Opcode# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + + + + + #m_FlagTriggered# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + + + #getOpcode# + + + ## + + + #unsigned# + + + + + + ## + + + + + + + + + + + + + + + + + + #isRegisterTriggered# + + + ## + + + #bool# + + + + + + ## + + + + + + + + + + + + + + + + + + #setOpcode# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #oc# + + + #unsigned# + + + ## + + + ## + + + + + + + + + + #setFlagTriggered# + + + ## + + + #void# + + + + + + ## + + + + + + + + + + + + + + + + + #flagTriggered# + + + #bool# + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + ## + + + + + + + + diff --git a/doc/collaboration.dia b/doc/collaboration.dia new file mode 100644 index 0000000000000000000000000000000000000000..e476570a63a59a2f953b71b0786fb52c6762a7fe GIT binary patch literal 4878 zcmV+p6Y=aHiwFP!000021MOW~bK6LEe%G&H$uCKY)9U+Wx%SkKXJ@mi-I_`4&BMN^ zAQ7gJ1xYOk*;XF%+tUXiB@zNC5RHaNsX65-Q-*NZVD~xSxqavNKYpL5qpxwcN|uZF z=LF&NQM|ZbPLsv#{rTTM|MG)A|MA1w@25%hJNsvrMe~vUjl~Myy+6On^V{EDTzvcX z4W;+1C|_nMP43VtzWBc=O`{8Y(Z%_Pv(ae#2Gb~y;AiWfMtPnkS9f_lT14~s{rOdN z{f}9;yjx7q%d6JcT`$vRHu@T+@6X?TDPHFn>)TxH+-J|dZ=+d!mBrCNns1Hm%a|^= zzKyf$ZRfYkRbns6?{A-6(r_R6|JF6@t5)`+#q7hoKk#?uM_T{j@m_Twv{6VtkFr^^ zcq+#}o3wlo6lr4M#TeyO8TIf?4i|UTN*txsK6_!b!HO%=U0gb>xNKN)$?EcUndMoO z)Jk;@<$bGU5H4d`#4+Q{-;MfJz9Uk*05xE z@%bpa&Xcd3cU#Y7dG$Z>b-rHgFX{5z^-YxJqaQ{;Ex(^Xq7aKglIi>NU-9nKs;An3t(PDKzD!z|GDVD$b?{WGy&XenC+W;K?37(wA+V4c;-4}Ngx~r~hwVFV* z&}sq^?h}HUnGSgA=^>VSej2F{lMV;1JzmqYC55@^4 z9Wx|$?_A$jKTlmM@gTdim|jL%w*1!Y1ykyH>&rA=%=RZGgsX^W(;h7)z_)KVnLQD! zCl+P%FQXfKhSqvGUltzx=<#3eS0SJ5g_>U`>tANgzq~p8m5;F7C;Kbg-`hCzPdK>Q6h}hcKVNbgpYP5ySYF5nlg=$XFUB(V@EYU zjaE0$YgxV%@Ujlsn+^}%M&A~rv(Gp7b5B(+8M#774v!(d{p3MFp%_@CcVnE3X<EF_FxsP z$E&g)AEWtgWEI5ON2}YjWts*vGC)X(Sm0;1g|>h*SdpFs$$R4|1oxIQ_8n3th!a*s zm5sG14ACNkY@G!rrO%j3!vgnRxc92{UT<{~m`|=lSmn@+?6aBWYAz`RZUzqARAMjc zkhqO`(GWCo?lOde7Yqe2zE$Rf9B4EoT58ZJiV*EpU)HbA;lhoV+4eexWKfwwWxjHi zsSi<^+Iy(`uhDD)9?IzF>~3DCHl2GSsYXmGI;I@?>}~-uv=pPnglQxc)noh9uEmM- zIFFulU#H1+?lrXT{OsC9M<7|qg`@&wAU{xEOCK2$yQOc&LHi9=`1qh|@Am52s)u@r zh%ZT+wh*yPJ$S0Ml}`HHlsuJy<7w{ez0z~bj9kIw${F20LHV9R@c zgd#-+8&ipR2yAt%cKVVgx0g2-mjAEaPEqO$1s7s0Y=O<_O~~r*3g{@~^Uhl9;CAEX z^HVb(Y+MkNs}}dJT|M6jsp+ge49Hd;xn6g}t8d#wX70_y8Y_ zp(QLLev__DXaTi5K;|)_6k$ztfnPfF0JQGLZ(3%3zLfDzjS)GbX8aW}R{4s3Z{6Hq z^m|*#i^jhRbLq+Vo-}Ma?e0za9ARSw1Q8S_UXQz##0>~y82l}uTC&GaA>5UhsQp=Q zT4a4Jn_&u^cHgJyBXgmEO+QpHISj*Le0 zXc5ig)o2uy(?I=-l`ZK_KUHgNf_`d~J@baE{UpzNL8ojeeCgag%5*uR#An8TBLf4z zG>BV|5r(3i1j4+J1M!@HJ^pkP29SA*b8?*94~4Q`C?>ucYpoa}N-YK6F zeRVA1gsw-nKTd-)}FbXnwGftO1kg52PdlSb=~9oVXQzX9_?qW z06(O5wCZHifl~XF_b?iYNUjUE3Qd^bMia)EEW9u+*~I#k#>m3AgPmmy@*#TI=RcZ!iI>zIR;$<6~s5U#rHW%H4 zrZTV_h(wI~)l}M)a%iEdL?IQDdtUoo+?N-oH-_nr?;h+_7~eRgsbUt&K(1aPE<=o= z_c6eGDBP)YKer%=n6e<2dF`OIa`;*f1nI$m|zU%#DYjsI^vx9 ztu1a?-5&R%^@R>Wk~T%dFIX7tX!f7Y#8jKsLndb6OiZg36NXRMS7+3>0^Z<#u;Lq?|xcd->fcv{qNAj=%4XHBE`!5 zN2oUMn=xiTc&0sA6eb1$&mgCSu@hMo1{qNCT1v0rxnXsCws7kUT`X`w&z;e;M_#r7 z%zNRjs{|*>fL?$;#0#)!{6!iNnR7?Aple-f9eJ+-k4HH~h>2iUUsDNh%}H>5eS(o} z0seW9G1qU$*T5L~ic7Fs^#3vER%u}%TUBI!{Z@{`xbU@{iR5dcrgQ7uQDn{CpIytW zc`vkBEjs}9wlJo6=l~2IfFWz%kTw4b3G>hZI7keOAWbc}r3wkDLUmq9lpjwAAamwn z5OQ6CXLmOhUh5aFBnAz33K1pg1W=5?2HqRmbqYl5F2Kfh?txbd2>8M%^wDvTLJz?@ zAMvy5w0C?^0F8TYXlzo4vWGSyt&JX229w*pauN!p3|1hCDM=>K!6PIq8NHZqZP>KT z8vXREP<; z&_yc=L*Ma91mfdG8l2c6SZwO|<7?oOek+4pkBDZ!C$y$dWsC#H&&}(WX*NN`q!fPlvD(y7LeM39v^j~Y!=P@H-0_7KE^Q%N()Y0&l8zBu*gY7 z6g3kLULP*rYa_XD3ar{S)~FCbk($GGBIuByLk{L9rY=zzA{S(fl^D{&k23d7lG8%F$wsqEOHf3L1{6pn*F#!ftxlA+;qv_xv-+ z*I7B(u!(^FAY&j*!*$oj|Mm&I`c>|s`RLBD4{+5sI8av3}GM?L9n$EcU_+|+` z+QcbN(Jt~Uk@XlD2*O6%LrxIG#1vs0VtgO+re*HoQL~?yD-$9&L6f*ef2E5e5d)>^ zx%&iCjZ|U8CGxFD3et?CV?#i#50nx^g&{qOH2t6AJWT5wJZE3OIfIvWblr0;Fpv9e zQR}k{pnGN7Ynir{Low5ZB*x9ezBg1ch!qgx-LGj_<-QO`aB5yz5~=Fc9F&RX_+=Qp zxaeVcuz@-c$n1CpBjCJ5{l>zbJ57Ky4`}CLZlz!1S9^Sl zIhq_>x6q0u7z!8-;2+}oj5jT^{z_3&yvU=gVD!UIcYN$?RRT4_hB{8pEd`RV_m4yK zcWWMHql@-;A|xpelpsZWydm1R(QH~~?SXpeh7Y~)p%?z`A&Y7^JHbO~Gw0?8&MhK0 zY)lAJn)|Fvwvx17OJbZ(xIlQ_wWNHf$(t5gf2nX|PJ7`g-^TdEAKd35YUE?}dW3{? zRX=QG2?OMn=M=Hsn%wXL4;aJX09hYefKx3x&md@jhU!;Ye_`Q7Q^dmw8uA1^X^&yO zr#AM?$rSDrO6-m)nmjDh z2q_H}gkqyj7?>FbW`<^&`rOxB8;waUFyT@&CNRUCa-zHwelqLI2n7joLl_PDuFxMd ze1A+s$*XW5>tkKt0vvJV6@xvBAuuLRBdiz&2qwiTRJ{Ie6=$QfY5c|7u4$++@UC-f zcjaqPxUYCnM13WkU_Fp<8eV4ml-CwMyV1>B4w(pv1TQJl1o1k)!F_pQj%BEVd-uoh zw{ez$20Hs_?MJpu(>M#J%KK2GP3tXzo}S+c8B7jBKT-~+O-QiM)imv-bhxyPow)d`*2piv43V+H2-k+|HU6##BW6b09`kK ArT_o{ literal 0 HcmV?d00001 diff --git a/doc/collaboration.png b/doc/collaboration.png new file mode 100644 index 0000000000000000000000000000000000000000..932ebd0e8a392b21d66e42b3e3583c1c9d49e429 GIT binary patch literal 62938 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 a@qu5* (optional) Cleanup previous cmake remnants +find -name CMakeCache.txt | xargs rm + +> Create out of source build directory +mkdir build + +> Enter out-of-source build directory +> All generated files end up there. +cd build + +>> Generate cmake environment. +cmake .. +>> Setup build configuration +> Select BUILD_BOCHS or BUILD_OVP +> Select an experiment to enable by naming its experiments/ subdirectory under +> EXPERIMENTS_ACTIVATED +> Press 'c', 'g' to regenerate the build system +> (alternatively use "cmake-gui ." for a Qt GUI) +ccmake . + +> Additionally make sure Bochs is at least configured (see below). + +After changes to Fail* code +--------------------------- +> Compile (optionally add -jN for parallel building) +make + +> cmake will build all fail* libraries, merge them into +> a libfail.a and put it into failbochs/fail. +> (as the current Bochs Makefile expects it there..) + +Debug build +----------- +> Choose "Debug" as the build type: +ccmake . + +Add new (fail*) sources to build chain +-------------------------------------- +To add new files to the build, see CMakeLists.txt in +failbochs/fail, which is hopefully self explanatory. :) + +Add new user-defined experiment/campaign +---------------------------------------- +Look at experiments/coolchecksum/ as a template. After creating a new +subdirectory in experiments/, activate it in the cmake configuration step (see +above). + + +Build Bochs +=========== +For the first time +------------------ +cd ../bochs +./configure --prefix=$(echo ~/localroot/usr) --enable-{a20-pin,x86-64,cpu-level=6,ne2000,acpi,pci,usb,repeat-speedups,trace-cache,fast-function-calls,host-specific-asms,disasm,all-optimizations,readline,clgd54xx,fpu,vmx=2,monitor-mwait,cdrom,sb16=linux,gdb-stub} --disable-docbook --with-all-libs +> Instead of --with-all-libs, you could use --with-nogui for "headless" +> experiments, additionally removing lots of library dependencies (thus +> reducing startup overhead). --with-x11 enables only the "x" (X11), --with-wx +> only the "wx" (wxWidgets) GUI. Note that "wx" does not play well together +> with Fail*'s "restore" feature (FailBochs will fall back to "x" if available, +> or die trying.) +> +> Once you know everything works as it should, you may want to add the +> following flags before running larger campaigns: +> --disable-logging --disable-assert-checks +> +> FIXME remove more redundant flags/libraries + +After changes to Bochs code or Bochs-affecting aspects +------------------------------------------------------ +> The make call from the make-ag++.sh is now invokable by calling (still in +> your build dir, optionally adding -jN for parallel building): +cd ../build +make bochs + +> The former make all-clean is now invokable by +make bochsallclean + +> For installing the bochs executable (former make install) +make bochsinstall +> (see >make help< for a target listing.) + +> You may use scripts/rebuild-bochs.sh to speed up repetitive tasks regarding +> Fail/Bochs builds. This script contains a concise documentation on itself. + +Debug build +----------- +> Configure Bochs to use debugging-related compiler flags: +cd ../bochs +CXXFLAGS="-g -O0" ./configure --prefix=... ... (see above) + +Profiling-based optimization build +---------------------------------- +> FIXME: ag++ needs to be run with --keep_woven +> Configure Bochs to use compiler flags to enable profiling: +cd ../bochs +CXXFLAGS="-fprofile-generate" LDFLAGS="-fprofile-generate" ./configure --prefix=... ... (see above) +> Build Bochs normally, and run it. +> Configure Bochs to use compiler flags to enable optimizations based on profiling results: +CXXFLAGS="-fprofile-use -Wcoverage-mismatch" LDFLAGS="-fprofile-use" ./configure --prefix=... ... (see above) + +Benchmarking +------------ +> Simple instructions/second measurement: +> - configure Bochs with --enable-show-ips (see above) +> - bochsrc: print_timestamps: enabled=1 +> Comparison IPS numbers are shown in the default bochsrc. +> Headless bochsrc configuration, all aspects disabled, guest system executes +> endless loop, host CPU Xeon X5470 (3.33GHz): IPS: 66124283 average = 66964789 + +Steps to run a boot image in FailBochs: +--------------------------------------- +Follow the Bochs documentation, and start your own "bochsrc" configuration file based on the +$PREFIX/share/doc/bochs/bochsrc-sample.txt template (or +/usr/share/doc/bochs/examples/bochsrc.gz on Debian systems with Bochs +installed). + - Add your floppy/cdrom/hdd image in the floppya/ata0-master/ata0-slave + sections; configure the boot: section appropriately. + - Comment out com1 and parport1. + - For "headless" experiments: + config_interface: textconfig + display_library: nogui + - For an X11 GUI: + config_interface: textconfig + display_library: x + - For a wxWidgets GUI (does not play well with Fail*'s "restore" feature): + config_interface: wx + display_library: wx + - Reduce the guest system's RAM to a minimum to reduce FailBochs's memory + footprint and save/restore overhead, e.g.: + memory: guest=16, host=16 + - If you want to redirect FailBochs's output to a file using the shell's + redirection operator '>', make sure /dev/stdout is not used as a target + file for logging. (The Debian bochsrc template unfortunately does this in + two places. It suffices to comment out these entries.) + - To make FailBochs terminate if something unexpected happens in a larger + campaign, be sure it doesn't "ask" in these cases, e.g.: + panic: action=fatal + error: action=fatal + info: action=ignore + debug: action=ignore + pass: action=ignore + - If you need a quick-and-dirty way to pass data from the guest system to the + outside world, and you don't want to write an experiment utilizing + GuestEvents, you can use the "port e9 hack" that prints all outb's to port + 0xe9 to the console: + port_e9_hack: enabled=1 + - Determinism: (Fail)Bochs is deterministic regarding timer interrupts, + i.e., two experiment runs after calling simulator.restore() will count the + same number of instructions between two interrupts. Though, you need to be + careful when running (Fail)Bochs with a GUI enabled: Typing "bochs -q" + on the command line may lead to the GUI window receiving a "return key + released" event, resulting in a keyboard interrupt for the guest system. + This can be avoided by starting Bochs with "sleep 1; bochs -q", or + disabling the GUI (see "headless experiments" above). + + +Build OVP for Cortex-M3 +======================= +For the first time +------------------ +> Get a license from ovpworld.org +> Download: +> - Downloads -> Main OVP Download including OVPsim Simulator +> - Downloads -> ARM -> ARM OVP Cortex-M Profile Model +> - -> Self contained ARM Cortex-M examples +> - -> ARM GNU GCC and GDB tools +> Install OVP by running the self-extracting archives. +> +> Get Sourcery CodeBench Lite Edition from +> http://www.mentor.com/embedded-software/codesourcery +> - ARM processors -> EABI release +> Install the self-extracting archive, or use the installation in +> /fs/proj/compiler/codesourcery-arm-eabi (DO, ios/kos) +> +> TODO source setup.sh, setupImperas ... +> TODO hard-coded paths + +===================================== +Example experiments and code snippets +===================================== + +hscsimple +--------- +A simple standalone experiment (without a separate campaign). + +MHTestCampaign +-------------- +An example for separate campaign/experiment implementations. + +1. execute Campaign (job server): + /core/experiments/MHTestCampaign/mhcampaign + +2. run the FailBochs instance, in properly defined environment: + bochs + +Dwarf example (tests/dwarf.cc) +------------------------------ +Dependencies: + LibDwarf: (debian/ubuntu package: libdwarf-dev) + LibElf: (debian/ubuntu package: libelf-dev) + +Build with cmake: +cd {your-out-of-source-dir} +cmake {path to fail dir} + -> cmake checks if libelf and libdwarf are present + +make dwarf +./tests/dwarf main.elf diff --git a/doc/todo.txt b/doc/todo.txt new file mode 100644 index 00000000..eb1844dc --- /dev/null +++ b/doc/todo.txt @@ -0,0 +1,180 @@ +FailBochs-Bausteine TODO +======================== +Wer gerade an was arbeitet, steht in Klammern hinter dem TODO. + +Bochs: + - Determinismus: Wie kann für Mikroexperimente sichergestellt werden, dass + externe Ereignisse (Timer, Eingang von Netzwerkpaketen, ...) reproduzierbar + zum selben Zeitpunkt eintreffen? (rh) + - Interrupts teilweise oder komplett sperren + - optional: Interrupts auslösen + - gemeinsame Namen fuer RDX/EDX (ab) + +Abstraktionen: + - Backend-Schnittstelle (z.B. direkte Anbindung an Simulator vs. + GDB-Schnittstelle zu Simulator vs. Anbindung an reale HW) von + Backend-Metainformationen (welche Register gibt es, wie breit ist der + Datenbus, welche Traps können ausgelöst werden) + - Endianness? + - Merkmalmodell von Implementierungsdetails trennen (hsc) + -> automatische Konfigurierung anhand Experimentauswahl + -> Annotierung von Experimentcode, automatisches Nachladen von Aspekten + - zum Verpacken in ExperimentData-Nachrichten Register<->String-Konvertierung + vereinfachen (ab) + - Namespace Confusion: was gehört in fi::, was in sal::? Brauchen wir noch + beides, brauchen wir was Zusätzliches? + - einheitliches Namensschema für Backend-Beeinflussungen (Interrupt-Synthese, + Interrupt-Unterdrückung, Speicher schreiben, Register schreiben, ...) finden + -> "Fehlerinjektion" ist das ja nicht immer + - (Allgemeine) Testfälle? + -> Modifikationen an FAIL* sind damit leichter zu verifizieren + - Ausgaben (z.B. im Bochs-Controller, siehe BochsController::save) + vereinheitlichen, evtl. zusätzlich via (Non-)Verbose-Mode(s) + -> "Ausgabesystem", "Logger" + +Events: + - sobald mehrere Aspekte an derselben Stelle hooken, muss in einer Schleife + nach jeder Kontrollübergabe an den SimulatorController geprüft werden, ob + neue Events oder Fehlerinjektionsaufträge vorliegen + -> Anwendungsfall z.B. Breakpoint an Adresse X, danach Zustandssicherung; + man will natürlich EIP==X in dem gesicherten Zustand haben, nicht X+y (hsc) + - MemEvents: Instruction-Fetch und weitere CPU-interne Speicherzugriffe + (Interrupt-Kontextsicherung, HW-Tasks, Interrupt-Vektoren, ...) ermöglichen + und konfigurierbar machen + +Parallelisierung: + - Momentan landen initial *alle* Parametersätze im Speicher. Sobald das viel + mehr werden, wird das eventuell eng. + -> BoundedSynchronizedQueue basteln, Kampagne blockiert dann, wenn die voll ist + -> eingehende Resultate nicht in der Kampagne "verarbeiten" (rausschreiben) + -- sonst bekommen wir dasselbe Problem mit der Queue der Resultate; + stattdessen z.B. die Idee der ExperimentDataStorage weiterverfolgen, + Ergebnisse werden asynchron zur Kampagne weggeschrieben + (oder: Zweiteilung der Kampagne vornehmen, "Verarbeitung" in eigenem + Thread) + - coolcampaign fährt momentan ziemlich Achterbahn bei RAM-Benutzung + -> Grund analysieren, ggf. beheben (Ressourcenverwaltung? Threadpool?) + - warum skalieren die Experimente/s nicht (ganz) linear mit der Anzahl der + Cores auf einer Maschine? Jobserver-Problem, oder lokal Contention auf dem + Client (Kernel, Disk-IO)? + -> mal Experimente ohne Kommunikation laufenlassen, Durchsatz messen + -> mal mit mehreren Maschinen durchmessen + - JobServer Statistiken ausgeben lassen, dafür keine Meldung mehr bei jedem Auftrag + * Anzahl Hosts + * Anzahl Clients (momentan ununterscheidbar ...) + * Aufträge pro Sekunde + * ETA bis Kampagne komplett + - Client/Server-TCP-Verbindungen aufrechterhalten + - Client-Timeouts untersuchen, Server-Implementierung tunen? Retries im Client? + - unbeantwortete Jobs am Ende einer Kampagne erneut vergeben + - die Möglichkeit schaffen, im Server mehr Informationen über einen Job + vorhält (und dann auch loggt), als man an den Client kommuniziert + -> bei Fault-Space-Pruning hat man im Server Äquivalenzklassen, aus denen + man nur einen einzelnen Parametersatz auswählt und dem Client zum + Ausprobieren gibt; die Informationen über die Äquivalenzklasse müss(t)en + nicht über die Leitung, werden aber am Schluss zur Auswertung gebraucht + +Implementierungsdetails: + - EventList, RegisterIterator, ...: nach Möglichkeit keine selbstgebauten + Container/Iteratoren etc. benutzen, sondern in der STL bedienen (z.B. von + std::list ableiten) + * falls doch ein Eigenbau notwendig ist, unbedingt STL-Schnittstellen + nachbilden + - einheitliche Fehlerbehandlung + - einheitliches Logging (Loglevels?) + +Effizienz: + - zuerst: Bottleneck identifizieren! + - getrennte Queues? + - Queue-Suche optimieren (z.B. Hash-Idee)? + - boolean/Counter für Events (um Durchlaufen der Queue zu verhindern)? + - Dynamic AspectC++ ausprobieren + - Löschliste in EventList via Hashing implementieren (o.Ä.)? + +Buildsystem: + - (mittelfristig) in cmake nur wirklich Build-spezifische Dinge konfigurieren + (verwendeter Compiler, Installationsverzeichnis, ...), den Rest in einem + brauchbaren Konfigurationswerkzeug mit Ausdrucksmöglichkeiten für + Merkmalmodelle, Abhängigkeiten, Mehrfachauswahl etc. (kconfig?) + * Bochs / OVP sind Alternativen, nicht beide anschaltbar (?) + - EXP*-options nur einmal in config/, nicht in drei verschiedenen Dateien + (config/CMakelists.txt, config/experiments.hpp.in, + experiments/CMakeLists.txt) + * Hinzufügen eines neuen Experiments konkreter dokumentieren (howto-build.txt?) + - AspectConfig.hpp in cmake-config einbinden (genauso behandeln wie experiments.hpp!) + -> generierte Datei landet in Buildtree, wird nicht mehr eingecheckt + - variant_config.h in cmake-config einbinden (genauso behandeln wie experiments.hpp!) + -> generierte Datei landet in Buildtree, wird nicht mehr eingecheckt + +Dokumentation: + - Änderungen im Klassendiagramm nachziehen (hsc) + + ------------------------------------------------ + Erledigt: + - alle Events mit Zähler versehen, so dass sie erst bei Erreichen der 0 feuern + * z.B. erst nach dem 5ten Mal Lesen von Adresse X auslösen + - Bereiche von Instruction-Pointern + - Wrapper für häufig auftretende Experimentmuster, z.B. einzelnes Event + anlegen und dann genau darauf warten + - Wildcards für beliebige Instruktions- bzw. Speicheradresse (ANY_ADDR, siehe Event.hpp), + inkl. Anpassung des ausgelösten Events + - Registerzugriff aus dem Experiment-Controller, RegisterBitflip vorbereitet + - Auslösen von Reboot (rh) + - Auslesen von Register- und Speicherzustand (Kontext Golden-Run-Vergleiche etc.) + - Coroutinen-Bibliothek (oder getcontext/setcontext) statt Threads+Synchronisation? + - Bitflips in Register + - nach Eintreten eines Events wird das Event- (oder FI-)Objekt mit + Detailinformationen befüllt + -> insbesondere bei "Wildcards" (ANY_TRAP) will man ja im + Experimentablauf wissen, was jetzt eigentlich passiert ist + - Event-Aspekt zur Kommunikation mit dem Gastsystem fertig stellen (siehe events/GuestSysCom.ah) + - Bochs-Spezifika von Bochs-unabhängigen Codeteilen trennen + -> Simulator-Abstraktionsschicht + -> Schnittstelle für Informationen über Plattformspezifika, z.B. Register + Bitbreiten + -> Bochs-spezifische Aspekte leiten nur noch Kontrollfluss um, + Implementierung von Ereignissen separat + - (sofern möglich) Ereignisse von FI trennen + - Scattering-Graphik (ab) + - ohne GUI bzw. gesetztem $DISPLAY lauffähig? (rh) + - Save (rh): + - Zielverzeichnis anlegen, falls nicht existent + - Fehlermeldung, falls Zielverzeichnis nicht schreibbar + - FI-Jobs gibt's nicht mehr, überall rauswerfen (ab) + - Traps und Interrupts (alle, oder Match auf beliebige Teilmenge) + (Aspekte existieren bereits. Matchen auf beliebige Teilmenge der Traps ist noch nicht moeglich) + (rh) + - die schlimmsten Speicherlecks in Bochs eliminieren (rh) + - Event-IDs als Identifikationsmittel für Events auf den zweiten Platz verweisen + -> IDs gibt's weiterhin (getId()), aber z.B. waitAny() liefert einen Pointer + - Brauchen wir eigentlich IDs als Handles für Events, oder genügt es nicht + eigentlich, die Event-Objektadresse zu verwenden? + - Event-Match-Schleife von Event-Feuer-Schleife trennen (ab): + - erst alle Events, die aktuell matchen, sammeln (Code ggf. spezifisch für die Ereignisart) + - dann sequentiell feuern (Code zentral in SimulatorController) + -> keine Probleme mit nachträglich hinzukommenden Events + - dann leider immer noch Probleme mit nachträglich entfernten Events + -> siehe fail/experiments/coolchecksum/experiment.cc FIXME am Ende + -> Lösung: Löschliste + - ggf. zusammen mit Datenstruktur-Implementierungsdetails-TODO (s.u.) angehen + +================================== +Theorie TODO +================================== +Problem Fork von FI Tools -> Merging eklig. +-> Liste mit konkreten Beispielen + + + +======================== +FailOVP-Bausteine TODO +======================== + - save/restore implementieren -> Speicher-, Register-, Timer-, ??- Zustaende + - Sections aus ELF Datei extrahieren, entsprechende Speicherbereiche (generisch) anlegen (rz) + - Symbole aus ELF extrahieren -> Adressen von globalen Objekten/Funktionen in Experimenten angeben (rz) + - Prozessormodell per cmake cleanen und neu bauen (mh) + - CiAO ELF in OVP ausfuehren + +ERLEDIGT +======================== + + diff --git a/firesults/buildplots.py b/firesults/buildplots.py new file mode 100755 index 00000000..cea114d2 --- /dev/null +++ b/firesults/buildplots.py @@ -0,0 +1,101 @@ +#!/usr/bin/python +import os +import glob +import re +from numpy import * +import matplotlib.pyplot as plt +import matplotlib.cm as cm +import pylab as pli +import matplotlib as mpl + + +result = { + 'EDM , TRAP': zeros((32,16), dtype=int), + 'FAIL_SILENT': zeros((32,16), dtype=int), + 'FAIL_SILENT_VIOLATION': zeros((32,16), dtype=int) , + 'TIMEOUT': zeros((32,16), dtype=int) } + +registertype = 'X' + +def eval_fault(bitnumber, regtype, regnumber, faulttype): + regn = int(regnumber) + bitn = int(bitnumber) + result[faulttype][bitn,regn] +=1 + +def eval_file(filename): + # parse filename: bitnumber and register type + pattern = re.compile('.-(\S{1})-bit(\d{1,2})') + exp = pattern.search(filename).groups() + bitnumber = exp[1] + regtype = exp[0] + # parse file: Fault type (FAIL_SILENT) and register number d(14) + pattern = re.compile('(.*)\s+-\s+\S{1}(.{1,2})') + with open(filename, 'r') as f: + for line in f: + if line.startswith('='): + break + exp = pattern.search(line).groups() + eval_fault(bitnumber, regtype, exp[1].rstrip(), exp[0].rstrip()) + return regtype.rstrip() + + + +def print_results(ftype): + print ftype + for i in range(16): + print '\t' + registertype + str(i) , + j = 0 + print '' + for row in result[ftype]: + print 'bit' + str(j) + '\t', + for i in row: + print str(i) + '\t', + print '' + j+=1 + print '' + return + + +def print_plot(what, title, subplot, regtp): + X = result[what] + ax = fig.add_subplot(subplot) + cax = ax.imshow(X, cmap=cm.gist_yarg, interpolation='nearest') + ax.set_title(title, verticalalignment='baseline') + ax.invert_yaxis() + ax.set_xticks(arange(16)) + ax.set_yticks(arange(32)) + ax.set_xlabel(regtp) + ax.set_ylabel('Bit#') + cbar = fig.colorbar(cax, format='%d', shrink=0.5 , ticks=linspace(0,53,25) ); + + for label in ax.get_xticklabels() + ax.get_yticklabels() + cbar.ax.get_yticklabels(): + label.set_fontsize(10) + + +#### Set desired path of FI results here### +path = 'exp3' +#### ^^^^^^^ Set desired path of FI results here### + +## Traverse all *.dat files in path: +for infile in glob.glob( os.path.join(path, '*.dat')): + registertype = eval_file(infile) + +#for faulttype in result: +# print_results(faulttype) + +## Set verbose register name +if registertype == 'd': + regtp = 'Data Registers' +elif registertype == 'a': + regtp = 'Address Registers' + +# plot figure. +fig = plt.figure() +#plt.suptitle('Distribution of Fault Injection Results ' +'(' + regtp + ')', fontsize=12 ) +print_plot('FAIL_SILENT_VIOLATION', 'Fail-Silent Violations',121 , regtp) +print_plot('EDM , TRAP', 'Traps', 122, regtp) +#print_plot('FAIL_SILENT', 'Fail Silent', 221, regtp) +#print_plot('TIMEOUT', 'Timeout', 224, regtp) +plt.show() + + diff --git a/firesults/exp3/exp1290163825.-d-bit0.dat b/firesults/exp3/exp1290163825.-d-bit0.dat new file mode 100644 index 00000000..0b3289e1 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit0.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x0B at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x0B at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x0B at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x0B at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x0B at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x0B at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x0B at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x0B at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x0B at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x0B at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x0B at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD3 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD3 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD3 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD3 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD3 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD3 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD3 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD3 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD3 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD3 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD3 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD3 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x84 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x84 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x84 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x84 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x84 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x84 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x84 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x84 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x84 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x84 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x84 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x7A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x7A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x7A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x7A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x7A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x7A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x7A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x7A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x7A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E7 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000001 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800001 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x38 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x38 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x38 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x38 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x38 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x38 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x38 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x38 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x58 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x58 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x58 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x58 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x58 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x58 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x58 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x58 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001969 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x4 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x4 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0350 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x4 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x4 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001979 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0001971 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0001971 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0001971 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001971 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001971 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083425 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083425 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083425 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083425 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083425 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083425 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083425 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083425 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080101 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x1 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x1 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x1 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x1 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x1 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x1 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x1 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x1 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A81 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10001 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC00001 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x2 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x2 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x2 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x3 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8B8 | injected = 0x8B9 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8B8 | injected = 0x8B9 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x8D3 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x8D3 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x3 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB6F0 | injected = 0xB6F1 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB6F0 | injected = 0xB6F1 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0xB708 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB708 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x2 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x3 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x73DC at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x73DC at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73F9 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73F9 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x2 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73F9 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73F9 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001911 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x3 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6B26 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6B26 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x6B3E at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 1306 +================================== +Fail Silent: 791 +Fail Silent Violation: 31 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit1.dat b/firesults/exp3/exp1290163825.-d-bit1.dat new file mode 100644 index 00000000..776b07cf --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit1.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x87 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x87 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x87 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x87 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x87 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x87 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x87 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x87 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x87 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x87 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x87 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x79 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x79 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x79 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x79 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x79 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x79 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x79 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x79 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x79 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E4 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000002 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A04F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999998 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800002 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3B at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3B at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3B at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3B at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3B at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3B at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3B at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3B at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x5B at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x5B at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x5B at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x5B at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x5B at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x5B at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x5B at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x5B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x7 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x7 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x7 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x7 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0353 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x7 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x7 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x7 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x7 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001972 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001972 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001972 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001972 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001972 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083426 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083426 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083426 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083426 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083426 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083426 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083426 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083426 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080102 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x2 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x2 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x2 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x2 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x2 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x2 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A82 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10002 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D00E at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC00002 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x1 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x1 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x1 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8B8 | injected = 0x8BA at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8B8 | injected = 0x8BA at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x8D0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x8D0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x1 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB6F0 | injected = 0xB6F2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB6F0 | injected = 0xB6F2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB70B at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB70B at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x1 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73DD | injected = 0x73DF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73DD | injected = 0x73DF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73FA at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73FA at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x1 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73FA at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73FA at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001912 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6B25 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6B25 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x6B3D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 2612 +================================== +Fail Silent: 789 +Fail Silent Violation: 59 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit10.dat b/firesults/exp3/exp1290163825.-d-bit10.dat new file mode 100644 index 00000000..48c62b5f --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit10.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x40A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x40A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x40A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x40A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x40A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x40A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x40A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x40A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x40A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x40A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x40A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x4D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x4D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x4D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x4D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x4D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x4D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x4D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x4D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x4D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x4D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x4D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x4D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x485 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x485 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x485 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x485 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x485 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x485 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x485 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x485 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x485 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x485 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x485 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x47B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x47B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x47B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x47B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x47B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x47B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x47B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x47B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x47B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02DE6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000400 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A44D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999D9A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800400 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x439 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x439 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x439 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x439 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x439 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x439 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x439 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x439 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x459 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x459 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x459 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x459 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x459 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x459 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x459 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x459 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x405 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x405 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x405 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x405 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0751 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x405 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x405 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x405 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x405 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001D70 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001D70 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001D70 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001D70 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001D70 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083024 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083024 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083024 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083024 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083024 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083024 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083024 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083024 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080500 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x400 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x400 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x400 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x400 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x400 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x400 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x400 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000E80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10400 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D40C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC00400 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x403 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x403 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x403 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x403 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x403 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x403 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x403 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x402 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0xCB8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0xCB8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0xCD2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0xCD2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x403 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x403 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x402 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB2F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB2F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0xB309 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB309 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x403 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x403 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x402 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x77DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x77DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x77F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x77F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x403 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x403 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x77F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x77F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x402 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6F27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6F27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x6F3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 14373 +================================== +Fail Silent: 781 +Fail Silent Violation: 67 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit11.dat b/firesults/exp3/exp1290163825.-d-bit11.dat new file mode 100644 index 00000000..ee82d921 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit11.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x80A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x80A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x80A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x80A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x80A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x80A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x80A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x80A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x80A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x80A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x80A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x8D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x8D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x8D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x8D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x8D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x8D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x8D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x8D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x8D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x8D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x8D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x8D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x885 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x885 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x885 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x885 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x885 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x885 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x885 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x885 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x885 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x885 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x885 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x87B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x87B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x87B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x87B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x87B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x87B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x87B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x87B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x87B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED021E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000800 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A84D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99919A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800800 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x839 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x839 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x839 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x839 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x839 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x839 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x839 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x839 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x859 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x859 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x859 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x859 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x859 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x859 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x859 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x859 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001168 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x805 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x805 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x805 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x805 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0B51 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x805 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x805 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x805 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x805 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001178 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001170 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001170 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001170 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001170 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001170 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083C24 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083C24 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083C24 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083C24 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083C24 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083C24 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083C24 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083C24 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080900 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x800 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x800 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x800 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x800 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x800 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x800 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x800 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000280 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10800 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D80C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC00800 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x803 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x803 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x803 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x803 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x803 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x803 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x803 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x802 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0xB8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0xB8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0xD2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0xD2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x803 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x803 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x802 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xBEF0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xBEF0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0xBF09 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xBF09 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x803 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x803 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x802 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x7BDD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x7BDD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x7BF8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x7BF8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x803 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x803 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x7BF8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x7BF8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001110 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x802 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6327 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6327 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x633F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 15679 +================================== +Fail Silent: 781 +Fail Silent Violation: 67 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit12.dat b/firesults/exp3/exp1290163825.-d-bit12.dat new file mode 100644 index 00000000..8701780f --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit12.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x100A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x100A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x100A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x100A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x100A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x100A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x100A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x100A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x100A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x100A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x100A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x10D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x10D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x10D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x10D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x10D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x10D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x10D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x10D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x10D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x10D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x10D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x10D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x1085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x1085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x1085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x1085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x1085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x1085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x1085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x1085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x1085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x1085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x1085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x107B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x107B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x107B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x107B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x107B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x107B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x107B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x107B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x107B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED039E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F001000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68B04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99899A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE801000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x1059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x1059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x1059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x1059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x1059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x1059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x1059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x1059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0000968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x1005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x1005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x1005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x1005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D1351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x1005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x1005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x1005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x1005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0000978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0000970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0000970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0000970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0000970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0000970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1082424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1082424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1082424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1082424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1082424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1082424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1082424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1082424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1081100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8001A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x11000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102C00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC01000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x1003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x1003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x1003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x1002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x18B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x18B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x18D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x18D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x1003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x1002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xA6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xA6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0xA709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xA709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x1003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x1002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x63DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x63DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x63F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x63F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x1003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x63F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x63F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0000910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x1002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x7B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x7B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x7B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 16985 +================================== +Fail Silent: 781 +Fail Silent Violation: 67 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit13.dat b/firesults/exp3/exp1290163825.-d-bit13.dat new file mode 100644 index 00000000..f62afb4d --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit13.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x200A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x200A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x200A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x200A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x200A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x200A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x200A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x200A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x200A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x200A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x200A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x20D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x20D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x20D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x20D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x20D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x20D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x20D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x20D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x20D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x20D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x20D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x20D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x2085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x2085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x2085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x2085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x2085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x2085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x2085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x2085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x2085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x2085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x2085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x207B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x207B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x207B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x207B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x207B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x207B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x207B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x207B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x207B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED009E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F002000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68804D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99B99A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE802000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x2059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x2059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x2059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x2059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x2059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x2059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x2059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x2059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0003968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x2005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x2005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x2005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x2005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D2351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x2005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x2005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x2005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x2005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0003978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0003970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0003970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0003970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0003970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0003970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1081424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1081424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1081424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1081424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1081424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1081424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1081424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1081424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1082100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8002A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x12000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102F00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC02000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x2003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x2003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x2003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x2002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x28B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x28B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x28D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x28D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x2003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x2002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x96F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x96F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x9709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x9709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x2003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x2002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x53DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x53DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x53F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x53F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x2003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x53F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x53F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0003910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x2002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x4B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x4B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x4B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 18290 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit14.dat b/firesults/exp3/exp1290163825.-d-bit14.dat new file mode 100644 index 00000000..6a975cbf --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit14.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x400A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x400A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x400A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x400A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x400A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x400A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x400A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x400A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x400A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x400A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x400A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x40D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x40D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x40D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x40D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x40D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x40D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x40D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x40D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x40D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x40D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x40D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x40D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x4085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x4085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x4085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x4085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x4085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x4085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x4085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x4085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x4085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x4085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x4085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x407B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x407B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x407B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x407B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x407B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x407B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x407B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x407B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x407B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED069E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F004000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68E04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99D99A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE804000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x4059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x4059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x4059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x4059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x4059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x4059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x4059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x4059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0005968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x4005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x4005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x4005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x4005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D4351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x4005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x4005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x4005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x4005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0005978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0005970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0005970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0005970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0005970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0005970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1087424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1087424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1087424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1087424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1087424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1087424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1087424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1087424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1084100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8004A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x14000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102900C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC04000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x4003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x4003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x4003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x4002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x48B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x48B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x48D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x48D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x4003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x4002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xF6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xF6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0xF709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xF709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x4003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x4002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x33DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x33DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x33F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x33F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x4003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x33F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x33F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0005910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x4002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x2B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x2B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x2B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 19595 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit15.dat b/firesults/exp3/exp1290163825.-d-bit15.dat new file mode 100644 index 00000000..b57453f3 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit15.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x800A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x800A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x800A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x800A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x800A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x800A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x800A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x800A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x800A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x800A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x800A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x80D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x80D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x80D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x80D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x80D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x80D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x80D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x80D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x80D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x80D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x80D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x80D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x807B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x807B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x807B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x807B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x807B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x807B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x807B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x807B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x807B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED0A9E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F008000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68204D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99199A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE808000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x8059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x8059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x8059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x8059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x8059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x8059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x8059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x8059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0009968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x8005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x8005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x8005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x8005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D8351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x8005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x8005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x8005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x8005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0009978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0009970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0009970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0009970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0009970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0009970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108B424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108B424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108B424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108B424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108B424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108B424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108B424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108B424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1088100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8008A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x18000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102500C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC08000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x8003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x8003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x8003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x8002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x88B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x88B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x88D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x88D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x8003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x8002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x36F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x36F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x3709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x3709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x8003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x8002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0xF3DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0xF3DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0xF3F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0xF3F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x8003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0xF3F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0xF3F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0009910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x8002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0xEB27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0xEB27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0xEB3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 20899 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit16.dat b/firesults/exp3/exp1290163825.-d-bit16.dat new file mode 100644 index 00000000..10b05dc0 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit16.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x100D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x100D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x100D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x100D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x100D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x100D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x100D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x100D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x100D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x100D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x100D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x100D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x10085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x10085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x10085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x10085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x10085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x10085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x10085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x10085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x10085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x10085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x10085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x1007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x1007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x1007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x1007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x1007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x1007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x1007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x1007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x1007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED129E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F010000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF69A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E98999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE810000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x10059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x10059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x10059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x10059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x10059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x10059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x10059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x10059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0011968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x10005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x10005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x10005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x10005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18C0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x10005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x10005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x10005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x10005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0011978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0011970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0011970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0011970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0011970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0011970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1093424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1093424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1093424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1093424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1093424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1093424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1093424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1093424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1090100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8010A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8103D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC10000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x10003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x10003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x10003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x10002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x108B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x108B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x108D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x108D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x10003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x10002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x1B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x1B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x1B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x1B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x10003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x10002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x173DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x173DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x173F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x173F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x10003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x173F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x173F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0011910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x10002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x16B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x16B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x16B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 22204 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit17.dat b/firesults/exp3/exp1290163825.-d-bit17.dat new file mode 100644 index 00000000..3efac373 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit17.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x200D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x200D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x200D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x200D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x200D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x200D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x200D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x200D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x200D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x200D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x200D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x200D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x20085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x20085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x20085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x20085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x20085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x20085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x20085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x20085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x20085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x20085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x20085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x2007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x2007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x2007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x2007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x2007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x2007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x2007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x2007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x2007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED229E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F020000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6AA04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9B999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE820000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x20059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x20059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x20059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x20059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x20059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x20059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x20059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x20059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0021968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x20005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x20005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x20005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x20005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18F0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x20005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x20005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x20005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x20005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0021978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0021970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0021970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0021970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0021970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0021970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10A3424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10A3424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10A3424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10A3424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10A3424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10A3424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10A3424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10A3424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10A0100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8020A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x30000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8100D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC20000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x20003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x20003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x20003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x20002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x208B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x208B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x208D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x208D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x20003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x20002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x2B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x2B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x2B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x2B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x20003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x20002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x273DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x273DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x273F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x273F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x20003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x273F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x273F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0021910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x20002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x26B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x26B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x26B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 23508 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit18.dat b/firesults/exp3/exp1290163825.-d-bit18.dat new file mode 100644 index 00000000..a29f7b4a --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit18.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x400D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x400D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x400D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x400D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x400D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x400D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x400D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x400D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x400D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x400D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x400D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x400D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x40085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x40085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x40085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x40085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x40085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x40085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x40085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x40085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x40085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x40085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x40085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x4007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x4007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x4007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x4007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x4007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x4007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x4007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x4007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x4007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED429E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F040000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF6CA04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9D999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE840000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x40059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x40059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x40059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x40059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x40059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x40059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x40059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x40059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0041968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x40005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x40005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x40005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x40005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1890351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x40005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x40005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x40005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x40005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0041978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0041970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0041970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0041970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0041970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0041970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10C3424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10C3424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10C3424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10C3424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10C3424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10C3424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10C3424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10C3424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA10C0100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8040A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x50000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8106D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC40000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x40003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x40003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x40003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x40002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x408B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x408B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x408D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x408D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x40003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x40002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x4B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x4B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x4B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x4B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x40003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x40002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x473DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x473DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x473F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x473F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x40003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x473F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x473F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0041910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x40002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x46B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x46B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x46B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 24813 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit19.dat b/firesults/exp3/exp1290163825.-d-bit19.dat new file mode 100644 index 00000000..f1f03666 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit19.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x800D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x800D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x800D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x800D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x800D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x800D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x800D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x800D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x800D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x800D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x800D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x800D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x80085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x80085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x80085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x80085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x80085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x80085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x80085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x80085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x80085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x80085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x80085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x8007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x8007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x8007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x8007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x8007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x8007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x8007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x8007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x8007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED829E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F080000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF60A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E91999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE880000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x80059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x80059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x80059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x80059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x80059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x80059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x80059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x80059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0081968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x80005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x80005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x80005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x80005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1850351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x80005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x80005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x80005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x80005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0081978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0081970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0081970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0081970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0081970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0081970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1003424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1003424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1003424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1003424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1003424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1003424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1003424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1003424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1000100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8080A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x90000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x810AD00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC80000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x80003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x80003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x80003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x80002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x808B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x808B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x808D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x808D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x80003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x80002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x8B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x8B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x8B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x8B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x80003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x80002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x873DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x873DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x873F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x873F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x80003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x873F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x873F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0081910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x80002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x86B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x86B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x86B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 26118 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit2.dat b/firesults/exp3/exp1290163825.-d-bit2.dat new file mode 100644 index 00000000..66c522b1 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit2.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x0E at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x0E at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x0E at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x0E at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x0E at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x0E at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x0E at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x0E at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x0E at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x0E at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x0E at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xD6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xD6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x81 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x81 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x81 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x81 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x81 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x81 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x81 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x81 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x81 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x81 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x81 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x7F at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x7F at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x7F at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x7F at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x7F at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x7F at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x7F at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x7F at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x7F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029E2 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000004 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A049 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99999E at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800004 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x3D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x5D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x5D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x5D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x5D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x5D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x5D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x5D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x5D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD000196C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x1 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x1 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x1 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x1 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0355 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x1 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x1 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x1 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x1 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD000197C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001974 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001974 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001974 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001974 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001974 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083420 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083420 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083420 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083420 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083420 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083420 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083420 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083420 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080104 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x4 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x4 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x4 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x4 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A84 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10004 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D008 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC00004 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x7 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x7 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x7 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x7 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x7 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x7 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x7 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8B8 | injected = 0x8BC at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8B8 | injected = 0x8BC at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x8D6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x8D6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x7 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x7 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB6F0 | injected = 0xB6F4 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB6F0 | injected = 0xB6F4 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB70D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB70D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x7 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x7 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x73D9 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x73D9 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73FC at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73FC at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x7 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x7 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73FC at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73FC at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001914 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6B23 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6B23 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x6B3B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 3919 +================================== +Fail Silent: 792 +Fail Silent Violation: 56 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit20.dat b/firesults/exp3/exp1290163825.-d-bit20.dat new file mode 100644 index 00000000..80c41fd3 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit20.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x10000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x10000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x10000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x10000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x10000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x10000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x10000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x10000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x10000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x10000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x10000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x1000D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x1000D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x1000D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x1000D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x1000D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x1000D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x1000D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x1000D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x1000D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x1000D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x1000D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x1000D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x100085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x100085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x100085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x100085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x100085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x100085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x100085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x100085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x100085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x100085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x100085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x10007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x10007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x10007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x10007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x10007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x10007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x10007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x10007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x10007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEC029E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F100000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF78A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E89999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE900000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x100039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x100039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x100039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x100039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x100039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x100039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x100039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x100039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x100059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x100059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x100059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x100059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x100059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x100059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x100059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x100059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0101968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x100005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x100005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x100005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x100005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x19D0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x100005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x100005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x100005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x100005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0101978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0101970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0101970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0101970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0101970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0101970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1183424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1183424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1183424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1183424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1183424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1183424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1183424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1183424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1180100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x100000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x100000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x100000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x100000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x100000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x100000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x100000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x100000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8100A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x110000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8112D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FD00000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x100003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x100003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x100003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x100003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x100003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x100003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x100003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x100002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x1008B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x1008B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x1008D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x1008D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x100003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x100003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x100002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x10B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x10B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x10B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x10B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x100003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x100003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x100002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x1073DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x1073DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x1073F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x1073F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x100003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x100003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x1073F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x1073F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0101910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x100002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x106B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x106B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x106B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 27424 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit21.dat b/firesults/exp3/exp1290163825.-d-bit21.dat new file mode 100644 index 00000000..775d17bb --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit21.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x20000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x20000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x20000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x20000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x20000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x20000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x20000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x20000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x20000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x20000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x20000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x2000D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x2000D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x2000D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x2000D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x2000D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x2000D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x2000D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x2000D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x2000D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x2000D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x2000D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x2000D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x200085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x200085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x200085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x200085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x200085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x200085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x200085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x200085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x200085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x200085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x200085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x20007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x20007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x20007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x20007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x20007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x20007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x20007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x20007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x20007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBEF029E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F200000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF48A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3EB9999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEA00000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x200039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x200039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x200039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x200039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x200039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x200039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x200039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x200039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x200059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x200059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x200059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x200059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x200059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x200059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x200059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x200059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0201968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x200005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x200005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x200005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x200005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1AD0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x200005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x200005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x200005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x200005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0201978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0201970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0201970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0201970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0201970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0201970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1283424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1283424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1283424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1283424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1283424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1283424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1283424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1283424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1280100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x200000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x200000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x200000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x200000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x200000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x200000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x200000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x200000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8200A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x210000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8122D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FE00000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x200003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x200003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x200003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x200003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x200003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x200003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x200003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x200002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x2008B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x2008B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x2008D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x2008D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x200003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x200003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x200002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x20B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x20B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x20B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x20B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x200003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x200003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x200002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x2073DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x2073DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x2073F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x2073F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x200003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x200003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x2073F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x2073F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0201910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x200002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x206B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x206B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x206B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 28729 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit22.dat b/firesults/exp3/exp1290163825.-d-bit22.dat new file mode 100644 index 00000000..4d1e223a --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit22.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x400000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x400000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x400000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x40000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x40000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x40000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x40000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x40000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x40000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x40000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x40000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x40000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x40000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x40000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x4000D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x4000D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x4000D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x4000D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x4000D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x4000D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x4000D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x4000D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x4000D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x4000D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x4000D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x4000D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x400085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x400085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x400085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x400085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x400085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x400085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x400085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x400085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x400085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x400085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x400085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x40007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x40007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x40007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x40007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x40007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x40007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x40007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x40007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x40007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE9029E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F400000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF28A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3ED9999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBEC00000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x400039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x400039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x400039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x400039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x400039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x400039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x400039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x400039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x400059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x400059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x400059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x400059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x400059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x400059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x400059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x400059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0401968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x400005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x400005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x400005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x400005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x1CD0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x400005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x400005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x400005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x400005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0401978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0401970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0401970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0401970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0401970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0401970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x400000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1483424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1483424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1483424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1483424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1483424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1483424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1483424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1483424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1480100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x400000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x400000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x400000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x400000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x400000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x400000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x400000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x400000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8400A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x410000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8142D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7F800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x400003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x400003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x400003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x400003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x400003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x400003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x400003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x400002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x4008B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x4008B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x4008D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x4008D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x400003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x400003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x400002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x40B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x40B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x40B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x40B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x400003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x400003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x400002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x4073DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x4073DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x4073F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x4073F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x400003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x400003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x4073F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x4073F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0401910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x400002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x406B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x406B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x406B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 30034 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit23.dat b/firesults/exp3/exp1290163825.-d-bit23.dat new file mode 100644 index 00000000..3a79385d --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit23.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x80000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x80000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x80000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x80000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x80000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x80000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x80000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x80000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x80000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x80000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x80000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x8000D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x8000D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x8000D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x8000D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x8000D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x8000D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x8000D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x8000D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x8000D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x8000D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x8000D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x8000D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x800085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x800085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x800085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x800085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x800085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x800085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x800085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x800085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x800085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x800085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x800085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x80007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x80007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x80007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x80007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x80007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x80007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x80007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x80007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x80007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBE5029E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBFE8A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E19999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x800039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x800039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x800039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x800039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x800039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x800039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x800039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x800039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x800059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x800059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x800059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x800059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x800059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x800059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x800059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x800059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0801968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x800005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x800005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x800005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x800005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x10D0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x800005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x800005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x800005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x800005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0801978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0801970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0801970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD0801970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0801970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0801970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1883424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1883424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1883424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1883424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1883424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1883424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1883424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1883424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1880100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8800A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x810000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8182D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7F400000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x800003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x800003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x800003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x800003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x800003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x800003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x800003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x800002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x8008B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x8008B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x8008D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x8008D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x800003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x800003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x800002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x80B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x80B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x80B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x80B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x800003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x800003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x800002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x8073DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x8073DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x8073F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x8073F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x800003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x800003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x8073F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x8073F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0801910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x800002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x806B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x806B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x806B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 31339 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit24.dat b/firesults/exp3/exp1290163825.-d-bit24.dat new file mode 100644 index 00000000..494b4ee0 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit24.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x1000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x1000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x1000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x100000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x100000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x100000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x100000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x100000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x100000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x100000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x100000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x100000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x100000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x100000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x10000D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x10000D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x10000D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x10000D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x10000D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x10000D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x10000D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x10000D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x10000D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x10000D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x10000D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x10000D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x1000085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x1000085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x1000085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x1000085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x1000085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x1000085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x1000085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x1000085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x1000085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x1000085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x1000085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x100007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x100007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x100007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x100007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x100007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x100007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x100007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x100007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x100007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBFD029E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3E000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBE68A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3F99999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBF800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1000039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1000039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1000039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1000039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1000039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1000039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1000039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x1000039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x1000059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x1000059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x1000059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x1000059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x1000059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x1000059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x1000059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x1000059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD1001968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x1000005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x1000005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x1000005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x1000005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x8D0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x1000005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x1000005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x1000005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x1000005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD1001978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD1001970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD1001970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD1001970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD1001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD1001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x1000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA0083424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA0083424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA0083424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA0083424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA0083424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA0083424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA0083424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA0083424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA0080100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x1000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x9000A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x1010000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8002D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7EC00000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x1000003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x1000003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1000003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1000003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1000003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1000003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x1000003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x1000002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x10008B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x10008B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x10008D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x10008D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1000003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x1000003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x1000002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x100B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x100B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x100B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x100B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1000003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x1000003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x1000002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x10073DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x10073DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x10073F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x10073F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x1000003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x1000003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x10073F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x10073F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD1001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x1000002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x1006B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x1006B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x1006B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 32644 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit25.dat b/firesults/exp3/exp1290163825.-d-bit25.dat new file mode 100644 index 00000000..212d5c68 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit25.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x2000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x2000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x2000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x200000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x200000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x200000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x200000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x200000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x200000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x200000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x200000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x200000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x200000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x200000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x20000D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x20000D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x20000D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x20000D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x20000D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x20000D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x20000D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x20000D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x20000D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x20000D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x20000D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x20000D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x2000085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x2000085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x2000085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x2000085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x2000085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x2000085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x2000085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x2000085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x2000085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x2000085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x2000085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x200007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x200007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x200007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x200007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x200007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x200007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x200007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x200007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x200007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBCD029E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3D000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBD68A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3C99999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBC800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2000039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2000039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2000039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2000039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2000039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2000039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2000039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x2000039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x2000059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x2000059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x2000059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x2000059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x2000059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x2000059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x2000059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x2000059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD2001968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x2000005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x2000005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x2000005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x2000005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x38D0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x2000005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x2000005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x2000005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x2000005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD2001978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD2001970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD2001970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD2001970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD2001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD2001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x2000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA3083424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA3083424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA3083424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA3083424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA3083424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA3083424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA3083424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA3083424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA3080100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x2000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA000A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x2010000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8302D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7DC00000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x2000003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x2000003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2000003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2000003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2000003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2000003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x2000003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x2000002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x20008B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x20008B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x20008D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x20008D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2000003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x2000003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x2000002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x200B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x200B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x200B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x200B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2000003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x2000003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x2000002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x20073DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x20073DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x20073F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x20073F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x2000003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x2000003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x20073F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x20073F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD2001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x2000002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x2006B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x2006B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x2006B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 33949 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit26.dat b/firesults/exp3/exp1290163825.-d-bit26.dat new file mode 100644 index 00000000..f9a05342 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit26.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x4000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x4000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x4000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x400000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x400000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x400000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x400000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x400000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x400000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x400000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x400000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x400000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x400000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x400000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x40000D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x40000D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x40000D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x40000D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x40000D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x40000D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x40000D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x40000D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x40000D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x40000D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x40000D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x40000D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x4000085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x4000085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x4000085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x4000085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x4000085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x4000085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x4000085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x4000085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x4000085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x4000085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x4000085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x400007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x400007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x400007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x400007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x400007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x400007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x400007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x400007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x400007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBAD029E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3B000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBB68A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3A99999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBA800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4000039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4000039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4000039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4000039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4000039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4000039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4000039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x4000039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x4000059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x4000059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x4000059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x4000059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x4000059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x4000059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x4000059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x4000059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD4001968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x4000005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x4000005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x4000005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x4000005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x58D0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x4000005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x4000005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x4000005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x4000005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD4001978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD4001970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD4001970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD4001970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD4001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD4001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x4000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA5083424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA5083424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA5083424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA5083424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA5083424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA5083424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA5083424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA5083424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA5080100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x4000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xC000A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x4010000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8502D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7BC00000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x4000003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x4000003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4000003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4000003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4000003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4000003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x4000003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x4000002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x40008B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x40008B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x40008D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x40008D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4000003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x4000003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x4000002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x400B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x400B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x400B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x400B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4000003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x4000003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x4000002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x40073DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x40073DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x40073F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x40073F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x4000003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x4000003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x40073F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x40073F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD4001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x4000002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x4006B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x4006B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x4006B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 35255 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit27.dat b/firesults/exp3/exp1290163825.-d-bit27.dat new file mode 100644 index 00000000..7cb32fe8 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit27.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x800000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x800000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x800000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x800000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x800000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x800000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x800000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x800000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x800000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x800000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x800000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x80000D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x80000D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x80000D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x80000D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x80000D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x80000D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x80000D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x80000D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x80000D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x80000D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x80000D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x80000D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8000085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8000085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8000085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8000085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8000085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8000085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8000085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8000085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8000085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8000085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8000085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x800007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x800007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x800007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x800007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x800007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x800007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x800007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x800007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x800007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xB6D029E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x37000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xB768A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3699999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xB6800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8000039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8000039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8000039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8000039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8000039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8000039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8000039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x8000039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x8000059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x8000059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x8000059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x8000059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x8000059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x8000059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x8000059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x8000059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD8001968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x8000005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x8000005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x8000005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x8000005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x98D0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x8000005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x8000005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x8000005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x8000005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD8001978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD8001970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD8001970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0xD8001970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD8001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD8001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA9083424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA9083424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA9083424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA9083424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA9083424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA9083424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA9083424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA9083424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA9080100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x8000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0xA80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x8010000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8902D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x77C00000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x8000003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x8000003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8000003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8000003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8000003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8000003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x8000003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x8000002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x80008B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x80008B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x80008D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x80008D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8000003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x8000003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x8000002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x800B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x800B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x800B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x800B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8000003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x8000003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x8000002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x80073DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x80073DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x80073F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x80073F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x8000003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x8000003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x80073F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x80073F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD8001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x8000002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x8006B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x8006B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x8006B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 36560 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit28.dat b/firesults/exp3/exp1290163825.-d-bit28.dat new file mode 100644 index 00000000..80deadfd --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit28.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1000000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1000000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1000000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1000000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1000000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1000000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1000000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1000000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1000000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1000000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1000000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x100000D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x100000D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x100000D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x100000D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x100000D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x100000D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x100000D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x100000D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x100000D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x100000D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x100000D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x100000D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x10000085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x10000085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x10000085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x10000085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x10000085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x10000085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x10000085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x10000085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x10000085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x10000085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x10000085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x1000007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x1000007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x1000007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x1000007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x1000007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x1000007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x1000007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x1000007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x1000007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xAED029E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x2F000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xAF68A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x2E99999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xAE800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10000039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10000039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10000039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10000039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10000039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10000039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10000039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x10000039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x10000059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x10000059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x10000059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x10000059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x10000059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x10000059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x10000059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x10000059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xC0001968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x10000005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x10000005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x10000005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x10000005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x118D0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x10000005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x10000005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x10000005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x10000005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xC0001978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xC0001970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xC0001970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xC0001970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xC0001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xC0001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xB1083424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xB1083424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xB1083424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xB1083424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xB1083424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xB1083424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xB1083424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xB1083424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xB1080100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x10000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x18000A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x9102D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x6FC00000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x10000003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x10000003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10000003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10000003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10000003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10000003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x10000003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x10000002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x100008B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x100008B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x100008D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x100008D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10000003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x10000003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x10000002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x1000B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x1000B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x1000B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x1000B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10000003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x10000003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x10000002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x100073DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x100073DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x100073F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x100073F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x10000003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x10000003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x100073F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x100073F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xC0001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x10000002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x10006B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x10006B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x10006B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 37866 +================================== +Fail Silent: 781 +Fail Silent Violation: 67 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit29.dat b/firesults/exp3/exp1290163825.-d-bit29.dat new file mode 100644 index 00000000..e0d5be5d --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit29.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2000000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2000000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2000000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2000000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2000000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2000000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2000000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2000000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2000000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2000000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2000000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x200000D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x200000D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x200000D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x200000D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x200000D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x200000D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x200000D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x200000D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x200000D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x200000D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x200000D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x200000D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x20000085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x20000085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x20000085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x20000085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x20000085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x20000085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x20000085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x20000085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x20000085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x20000085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x20000085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x2000007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x2000007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x2000007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x2000007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x2000007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x2000007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x2000007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x2000007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x2000007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x9ED029E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x1F000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x9F68A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x1E99999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x9E800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20000039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20000039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20000039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20000039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20000039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20000039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20000039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x20000039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x20000059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x20000059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x20000059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x20000059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x20000059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x20000059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x20000059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x20000059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xF0001968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x20000005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x20000005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x20000005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x20000005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x218D0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x20000005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x20000005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x20000005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x20000005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xF0001978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xF0001970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xF0001970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xF0001970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xF0001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xF0001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x81083424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x81083424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x81083424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x81083424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x81083424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x81083424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x81083424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x81083424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x81080100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x20000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x28000A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x20010000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xA102D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x5FC00000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x20000003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x20000003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20000003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20000003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20000003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20000003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x20000003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x20000002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x200008B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x200008B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x200008D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x200008D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20000003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x20000003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x20000002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x2000B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x2000B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x2000B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x2000B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20000003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x20000003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x20000002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x200073DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x200073DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x200073F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x200073F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x20000003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x20000003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x200073F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x200073F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xF0001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x20000002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x20006B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x20006B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x20006B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 39170 +================================== +Fail Silent: 781 +Fail Silent Violation: 67 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit3.dat b/firesults/exp3/exp1290163825.-d-bit3.dat new file mode 100644 index 00000000..f3e4ed7d --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit3.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xDA at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xDA at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xDA at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xDA at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xDA at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xDA at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xDA at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xDA at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xDA at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xDA at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xDA at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xDA at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x8D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x8D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x73 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x73 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x73 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x73 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x73 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x73 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x73 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x73 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x73 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029EE at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000008 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A045 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999992 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800008 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x31 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x31 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x31 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x31 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x31 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x31 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x31 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x31 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x51 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x51 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x51 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x51 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x51 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x51 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x51 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x51 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001960 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x0D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x0D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x0D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x0D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0359 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x0D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x0D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x0D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x0D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001970 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001978 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001978 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001978 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001978 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001978 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108342C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108342C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108342C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108342C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108342C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108342C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108342C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA108342C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080108 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A88 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10008 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D004 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC00008 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x0B at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x0B at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x0B at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x0B at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x0B at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x0B at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x0B at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x0A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x8B0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x8B0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x8DA at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x8DA at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x0B at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x0B at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x0A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB6F0 | injected = 0xB6F8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB6F0 | injected = 0xB6F8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0xB701 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB701 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x0B at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x0B at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x0A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x73D5 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x73D5 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x73F0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73F0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x0B at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x0B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73F0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73F0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001918 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x0A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x6B27 | injected = 0x6B2F at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x6B27 | injected = 0x6B2F at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x6B37 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 5226 +================================== +Fail Silent: 790 +Fail Silent Violation: 58 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit30.dat b/firesults/exp3/exp1290163825.-d-bit30.dat new file mode 100644 index 00000000..376fedcf --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit30.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4000000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4000000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4000000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4000000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4000000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4000000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4000000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4000000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4000000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4000000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4000000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x400000D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x400000D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x400000D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x400000D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x400000D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x400000D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x400000D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x400000D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x400000D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x400000D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x400000D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x400000D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x40000085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x40000085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x40000085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x40000085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x40000085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x40000085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x40000085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x40000085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x40000085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x40000085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x40000085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x4000007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x4000007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x4000007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x4000007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x4000007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x4000007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x4000007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x4000007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x4000007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xFED029E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x7F000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xFF68A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x7E99999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xFE800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40000039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40000039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40000039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40000039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40000039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40000039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40000039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x40000039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x40000059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x40000059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x40000059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x40000059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x40000059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x40000059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x90001960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x40000059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x40000059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x90001968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x40000005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x40000005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x40000005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x40000005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x418D0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x40000005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x40000005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x40000005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x40000005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x90001978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0x90001970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0x90001970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0x90001970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0x90001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0x90001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xE1083424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xE1083424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xE1083424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xE1083424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xE1083424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xE1083424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xE1083424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xE1083424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xE1080100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x40000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x48000A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x40010000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0xC102D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x3FC00000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x40000003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x40000003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40000003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40000003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40000003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40000003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x40000003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x40000002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x400008B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x400008B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x400008D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x400008D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40000003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x40000003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x40000002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x4000B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x4000B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x4000B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x4000B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40000003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x40000003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x40000002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x400073DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x400073DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x400073F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x400073F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x40000003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x40000003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x400073F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x400073F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x90001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x40000002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x40006B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x40006B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x40006B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 40475 +================================== +Fail Silent: 781 +Fail Silent Violation: 67 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit31.dat b/firesults/exp3/exp1290163825.-d-bit31.dat new file mode 100644 index 00000000..23355c71 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit31.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8000000A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8000000A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8000000A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8000000A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8000000A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8000000A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8000000A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8000000A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8000000A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8000000A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8000000A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x800000D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x800000D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x800000D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x800000D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x800000D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x800000D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x800000D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x800000D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x800000D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x800000D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x800000D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x800000D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x80000085 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x80000085 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x80000085 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x80000085 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x80000085 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x80000085 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x80000085 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x80000085 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x80000085 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x80000085 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x80000085 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x8000007B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x8000007B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x8000007B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x8000007B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x8000007B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x8000007B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x8000007B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x8000007B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x8000007B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0x3ED029E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0xBF000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0x3F68A04D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0xBE99999A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0x3E800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80000039 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80000039 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80000039 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80000039 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80000039 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80000039 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80000039 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x80000039 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x80000059 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x80000059 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x80000059 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x80000059 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x80000059 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x80000059 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0x50001960 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x80000059 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x80000059 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0x50001968 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x80000005 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x80000005 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x80000005 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x80000005 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x818D0351 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x80000005 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x80000005 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x80000005 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x80000005 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0x50001978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0x50001970 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0x50001970 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d9 = 0xD0001970 | injected = 0x50001970 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0x50001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0x50001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x21083424 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x21083424 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x21083424 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x21083424 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x21083424 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x21083424 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x21083424 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0x21083424 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0x21080100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x80000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x88000A80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x80010000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x102D00C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0xFFC00000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x80000003 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x80000003 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80000003 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80000003 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80000003 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80000003 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x80000003 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x80000002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x800008B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x800008B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x800008D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x800008D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80000003 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x80000003 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x80000002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x8000B6F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0x8000B6F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0x8000B709 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0x8000B709 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80000003 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x80000003 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x80000002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x800073DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x800073DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x800073F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x800073F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x80000003 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x80000003 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x800073F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x800073F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0x50001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x80000002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x80006B27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x80006B27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x80006B3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 41780 +================================== +Fail Silent: 781 +Fail Silent Violation: 41 +EDM sum: 26 +EDM Masked: 0 +Trap: 26 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit4.dat b/firesults/exp3/exp1290163825.-d-bit4.dat new file mode 100644 index 00000000..dec586e5 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit4.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x10 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x10 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x10 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x1A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x1A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xC2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xC2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xC2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xC2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xC2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xC2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xC2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xC2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xC2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xC2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xC2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xC2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x95 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x95 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x95 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x95 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x95 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x95 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x95 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x95 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x95 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x95 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x95 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x6B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x6B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x6B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x6B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x6B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x6B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x6B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x6B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x6B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029F6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000010 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A05D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99998A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800010 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x29 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x29 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x29 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x29 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x29 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x29 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x29 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x29 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x49 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x49 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x49 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x49 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x49 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x49 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x49 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x49 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001978 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x15 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x15 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x15 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x15 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0341 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x15 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x15 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x15 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x15 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001968 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001960 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001960 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001960 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001960 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001960 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x10 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083434 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083434 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083434 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083434 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083434 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083434 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083434 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083434 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080110 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x10 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x10 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x10 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x10 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x10 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x10 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x10 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x10 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A90 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10010 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D01C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC00010 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x13 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x13 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x13 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x13 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x13 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x13 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x13 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x12 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x8A8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x8A8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x8C2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x8C2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x13 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x13 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x12 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB6E0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB6E0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB719 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB719 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x13 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x13 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x12 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x73CD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x73CD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x73E8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73E8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x13 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x13 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73E8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73E8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001900 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x12 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x6B27 | injected = 0x6B37 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x6B27 | injected = 0x6B37 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x6B2F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 6533 +================================== +Fail Silent: 788 +Fail Silent Violation: 60 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit5.dat b/firesults/exp3/exp1290163825.-d-bit5.dat new file mode 100644 index 00000000..8c9ed5a5 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit5.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x20 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x20 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x20 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x2A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x2A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xF2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xF2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xF2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xF2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xF2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0xF2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xF2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xF2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xF2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xF2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xF2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0xF2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0xA5 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0xA5 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0xA5 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0xA5 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0xA5 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0xA5 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0xA5 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0xA5 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0xA5 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0xA5 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0xA5 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x5B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x5B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x5B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x5B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x5B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x5B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x5B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x5B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x5B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029C6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000020 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A06D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999BA at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800020 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x19 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x19 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x19 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x19 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x19 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x19 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x19 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x19 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x79 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x79 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x79 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x79 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x79 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x79 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x79 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x79 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001948 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x25 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x25 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x25 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x25 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0371 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x25 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x25 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x25 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x25 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001958 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001950 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001950 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001950 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001950 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001950 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x20 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083404 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083404 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083404 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083404 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083404 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083404 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083404 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083404 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080120 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x20 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x20 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x20 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x20 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x20 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x20 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x20 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x20 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AA0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10020 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D02C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC00020 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x23 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x23 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x23 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x23 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x23 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x23 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x23 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x22 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x898 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x898 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x8F2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x8F2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x23 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x23 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x22 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB6D0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB6D0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB729 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB729 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x23 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x23 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x22 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73DD | injected = 0x73FD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73DD | injected = 0x73FD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x73D8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73D8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x23 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x23 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73D8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73D8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001930 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x22 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6B07 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6B07 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x6B1F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 7839 +================================== +Fail Silent: 789 +Fail Silent Violation: 59 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit6.dat b/firesults/exp3/exp1290163825.-d-bit6.dat new file mode 100644 index 00000000..d785764e --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit6.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x40 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x40 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x40 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x4A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x4A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x92 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x92 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x92 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x92 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x92 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x92 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x92 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x92 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x92 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x92 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x92 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x92 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0xC5 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0xC5 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0xC5 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0xC5 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0xC5 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0xC5 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0xC5 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0xC5 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0xC5 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0xC5 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0xC5 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x3B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x3B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x3B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x3B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x3B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x3B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x3B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x3B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x3B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED029A6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000040 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A00D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E9999DA at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800040 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x79 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x79 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x79 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x79 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x79 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x79 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x79 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x79 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x19 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x19 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x19 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x19 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x19 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x19 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x19 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x19 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001928 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x45 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x45 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x45 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x45 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0311 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x45 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x45 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x45 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x45 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001938 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001930 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001930 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001930 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001930 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001930 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x40 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083464 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083464 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083464 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083464 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083464 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083464 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083464 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083464 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080140 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x40 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x40 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x40 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x40 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x40 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x40 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x40 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x40 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000AC0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10040 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D04C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC00040 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x43 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x43 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x43 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x43 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x43 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x43 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x43 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x42 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8B8 | injected = 0x8F8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8B8 | injected = 0x8F8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x892 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x892 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x43 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x43 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x42 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB6B0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB6B0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB749 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB749 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x43 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x43 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x42 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x739D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x739D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x73B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x43 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x43 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x73B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001950 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x42 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x6B27 | injected = 0x6B67 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x6B27 | injected = 0x6B67 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x6B3F | injected = 0x6B7F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 9145 +================================== +Fail Silent: 791 +Fail Silent Violation: 57 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit7.dat b/firesults/exp3/exp1290163825.-d-bit7.dat new file mode 100644 index 00000000..4a537299 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit7.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x80 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x8A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x8A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x52 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x52 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x52 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x52 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x52 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x52 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x52 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x52 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x52 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x52 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x52 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x52 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x5 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x5 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x5 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x5 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x5 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x5 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x5 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x5 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x5 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x5 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x5 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0xFB at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0xFB at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0xFB at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0xFB at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0xFB at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0xFB at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0xFB at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0xFB at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0xFB at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02966 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000080 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A0CD at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99991A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800080 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0xB9 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0xB9 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0xB9 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0xB9 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0xB9 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0xB9 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0xB9 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0xB9 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0xD9 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0xD9 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0xD9 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0xD9 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0xD9 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0xD9 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0xD9 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0xD9 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x85 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x85 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x85 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x85 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D03D1 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x85 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x85 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x85 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x85 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD00019F0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD00019F0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD00019F0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD00019F0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD00019F0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10834A4 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10834A4 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10834A4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10834A4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10834A4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10834A4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10834A4 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA10834A4 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080180 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x80 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x80 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x80 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x80 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x80 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x80 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x80 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x80 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000A00 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10080 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D08C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC00080 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x83 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x83 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x83 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x83 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x83 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x83 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x83 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x82 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x838 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x838 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x852 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x852 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x83 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x83 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x82 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB670 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB670 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB789 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB789 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x83 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x83 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x82 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x735D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x735D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x7378 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x7378 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x83 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x83 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x7378 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x7378 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001990 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x2 | injected = 0x82 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x6B27 | injected = 0x6BA7 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x6B27 | injected = 0x6BA7 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x6B3F | injected = 0x6BBF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 10452 +================================== +Fail Silent: 789 +Fail Silent Violation: 59 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit8.dat b/firesults/exp3/exp1290163825.-d-bit8.dat new file mode 100644 index 00000000..ca1d24e4 --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit8.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x10A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x10A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x10A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x10A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x10A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x10A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x10A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x10A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x10A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x10A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x10A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x1D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x1D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x1D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x1D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x1D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x1D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x1D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x1D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x1D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x1D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x1D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x1D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x185 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x185 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x185 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x185 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x185 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x185 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x185 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x185 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x185 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x185 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x185 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x17B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x17B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x17B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x17B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x17B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x17B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x17B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x17B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x17B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED028E6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A14D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E99989A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x139 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x139 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x139 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x139 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x139 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x139 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x139 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x139 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x159 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x159 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x159 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x159 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x159 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x159 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x159 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x159 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001868 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x105 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x105 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x105 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x105 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0251 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x105 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x105 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x105 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x105 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001878 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001870 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001870 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001870 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001870 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001870 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083524 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083524 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083524 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083524 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083524 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083524 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083524 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083524 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x100 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x100 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x100 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x100 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x100 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x100 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x100 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000B80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D10C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC00100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x103 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x103 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x103 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x103 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x103 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x103 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x103 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x102 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x9B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0x9B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0x9D2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0x9D2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x103 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x103 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x102 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB7F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB7F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0xB609 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB609 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x103 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x103 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x102 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x72DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x72DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x72F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x72F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x103 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x103 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x72F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x72F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001810 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x102 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6A27 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6A27 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x6A3F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 11759 +================================== +Fail Silent: 781 +Fail Silent Violation: 67 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp3/exp1290163825.-d-bit9.dat b/firesults/exp3/exp1290163825.-d-bit9.dat new file mode 100644 index 00000000..5cf770ea --- /dev/null +++ b/firesults/exp3/exp1290163825.-d-bit9.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d0 = 0x0 | injected = 0x200 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d1 = 0x0 | injected = 0x200 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0 | injected = 0x200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x20A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x20A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x20A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x20A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x0A | injected = 0x20A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x20A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x20A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x20A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x20A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x20A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x0A | injected = 0x20A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x2D2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x2D2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x2D2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x2D2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x2D2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0xD2 | injected = 0x2D2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x2D2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x2D2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x2D2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x2D2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x2D2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0xD2 | injected = 0x2D2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x285 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x285 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x285 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x285 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x285 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x85 | injected = 0x285 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x285 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x285 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x285 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x285 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x85 | injected = 0x285 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x27B at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x27B at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x27B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x27B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x27B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d2 = 0x7B | injected = 0x27B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x27B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x27B at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d2 = 0x7B | injected = 0x27B at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d3 = 0xBED029E6 | injected = 0xBED02BE6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d4 = 0x3F000000 | injected = 0x3F000200 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d5 = 0xBF68A04D | injected = 0xBF68A24D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d6 = 0x3E99999A | injected = 0x3E999B9A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d7 = 0xBE800000 | injected = 0xBE800200 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x239 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x239 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x239 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x239 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x239 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x239 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x239 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x39 | injected = 0x239 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x259 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d8 = 0x59 | injected = 0x259 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x259 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0x59 | injected = 0x259 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x259 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0x59 | injected = 0x259 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d8 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0x59 | injected = 0x259 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0x59 | injected = 0x259 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d8 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x205 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x5 | injected = 0x205 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x205 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x5 | injected = 0x205 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d9 = 0x18D0351 | injected = 0x18D0151 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x205 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0x5 | injected = 0x205 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0x5 | injected = 0x205 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0x5 | injected = 0x205 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001B70 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001B70 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d9 = 0xD0001970 | injected = 0xD0001B70 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001B70 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d9 = 0xD0001970 | injected = 0xD0001B70 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d10 = 0x0 | injected = 0x200 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083624 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083624 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083624 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083624 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083624 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083624 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083624 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1083424 | injected = 0xA1083624 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d11 = 0xA1080100 | injected = 0xA1080300 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x0 | injected = 0x200 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x200 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x0 | injected = 0x200 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x200 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x0 | injected = 0x200 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x0 | injected = 0x200 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x0 | injected = 0x200 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d12 = 0x8000A80 | injected = 0x8000880 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d13 = 0x10000 | injected = 0x10200 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d14 = 0x8102D00C | injected = 0x8102D20C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x7FC00000 | injected = 0x7FC00200 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x203 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x3 | injected = 0x203 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x203 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x203 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x203 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x203 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0x3 | injected = 0x203 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x202 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0xAB8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8B8 | injected = 0xAB8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x8D2 | injected = 0xAD2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x8D2 | injected = 0xAD2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x203 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - d15 = 0x3 | injected = 0x203 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x202 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB4F0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB6F0 | injected = 0xB4F0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xB709 | injected = 0xB509 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xB709 | injected = 0xB509 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x203 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - d15 = 0x3 | injected = 0x203 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x202 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x71DD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73DD | injected = 0x71DD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x73F8 | injected = 0x71F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x71F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x3 | injected = 0x203 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x3 | injected = 0x203 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x71F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0x73F8 | injected = 0x71F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - d15 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x2 | injected = 0x202 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6927 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B27 | injected = 0x6927 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - d15 = 0x6B3F | injected = 0x693F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 13065 +================================== +Fail Silent: 781 +Fail Silent Violation: 67 +EDM sum: 0 +EDM Masked: 0 +Trap: 0 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit0.dat b/firesults/exp4/exp1290265642.-a-bit0.dat new file mode 100644 index 00000000..5fa00865 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit0.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B9 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE1 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFE at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088001 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184D at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102AAA8 | injected = 0x8102AAA9 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a11 = 0x8102AAA8 | injected = 0x8102AAA9 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102AAC4 | injected = 0x8102AAC5 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a11 = 0x8102AAC4 | injected = 0x8102AAC5 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102AAE4 | injected = 0x8102AAE5 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a11 = 0x8102AAE4 | injected = 0x8102AAE5 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102AB02 | injected = 0x8102AB03 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a11 = 0x8102AB02 | injected = 0x8102AB03 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0x8102B787 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001845 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001845 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001845 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001845 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001845 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050001 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050529 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050529 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050529 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050529 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050529 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050529 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050529 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050529 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001989 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001989 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001989 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084269 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084269 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084269 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084269 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084269 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084269 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084269 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084269 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001911 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192D at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192D at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192D at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192D at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192D at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192D at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192D at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192D at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192D at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050001 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050001 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192D at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0001961 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001961 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050001 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050001 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001961 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0001979 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001979 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050001 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050001 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001979 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0001969 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0001969 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001969 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050001 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050001 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001969 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190B at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0001971 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0001971 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 1311 +================================== +Fail Silent: 649 +Fail Silent Violation: 53 +EDM sum: 146 +EDM Masked: 0 +Trap: 146 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit1.dat b/firesults/exp4/exp1290265642.-a-bit1.dat new file mode 100644 index 00000000..8343d711 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit1.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BA at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE2 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A2E at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFD at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088002 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000184E at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102AAAA at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102AAAA at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8102AAC6 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8102AAC6 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8102AAE6 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8102AAE6 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102AB00 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102AB00 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B784 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001846 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001846 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001846 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001846 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001846 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050002 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198A at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD000198A at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD000198A at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426A at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426A at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426A at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426A at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426A at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426A at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001912 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192E at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192E at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192E at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192E at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192E at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192E at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192E at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192E at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192E at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050002 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050002 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000192E at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001962 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001962 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050002 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050002 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001962 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD000197A at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD000197A at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD000197A at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD000197A at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050002 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050002 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD000197A at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD000197A at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD000196A at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD000196A at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD000196A at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050002 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050002 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD000196A at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001908 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001972 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001972 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 2623 +================================== +Fail Silent: 596 +Fail Silent Violation: 114 +EDM sum: 138 +EDM Masked: 0 +Trap: 138 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit10.dat b/firesults/exp4/exp1290265642.-a-bit10.dat new file mode 100644 index 00000000..3eb6c4f4 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit10.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E0B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035AE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001E2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFBFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088400 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001C4C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102AEA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102AEA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8102AEC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8102AEC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x8102AEE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x8102AEE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102AF02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102AF02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B386 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001C44 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001C44 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001C44 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001C44 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001C44 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050400 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050128 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050128 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050128 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050128 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050128 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050128 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050128 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050128 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001D88 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084668 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084668 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084668 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084668 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084668 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084668 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084668 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084668 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001D10 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001D2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001D2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001D2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001D2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001D2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001D2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001D2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001D2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001D2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050400 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050400 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001D2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050400 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050400 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001D60 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050400 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050400 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001D78 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050400 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050400 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001D68 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001D0A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001D70 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001D70 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 14432 +================================== +Fail Silent: 596 +Fail Silent Violation: 118 +EDM sum: 134 +EDM Masked: 0 +Trap: 134 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit11.dat b/firesults/exp4/exp1290265642.-a-bit11.dat new file mode 100644 index 00000000..353b81e7 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit11.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106ECB8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810356E0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000122C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFF7FF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088800 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000104C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102A2A8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102A2A8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8102A2C4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8102A2C4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8102A2E4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8102A2E4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AB02 | injected = 0x8102A302 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AB02 | injected = 0x8102A302 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102BF86 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001044 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001044 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001044 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001044 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001044 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050800 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050D28 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050D28 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050D28 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050D28 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050D28 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050D28 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050D28 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050D28 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001188 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001188 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001188 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084A68 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084A68 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084A68 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084A68 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084A68 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084A68 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084A68 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084A68 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001110 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000112C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000112C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000112C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000112C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000112C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000112C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000112C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000112C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000112C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050800 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050800 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000112C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001160 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001160 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050800 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050800 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001160 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001178 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001178 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050800 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050800 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001178 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001168 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001168 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001168 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050800 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050800 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001168 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000110A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001170 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001170 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 15745 +================================== +Fail Silent: 596 +Fail Silent Violation: 118 +EDM sum: 134 +EDM Masked: 0 +Trap: 134 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit12.dat b/firesults/exp4/exp1290265642.-a-bit12.dat new file mode 100644 index 00000000..c55a2718 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit12.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106F4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81034EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0000A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFEFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1089000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000084C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102AAA8 | injected = 0x8102BAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +TIMEOUT - a11 = 0x8102AAA8 | injected = 0x8102BAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8102BAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8102BAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8102BAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8102BAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102BB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102BB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +TIMEOUT - a11 = 0x8102B786 | injected = 0x8102A786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0000844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0000844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0000844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0000844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0000844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1051000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1051528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1051528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1051528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1051528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1051528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1051528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1051528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1051528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0000988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0000988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0000988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1085268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1085268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1085268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1085268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1085268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1085268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1085268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1085268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0000910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000092C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000092C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000092C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000092C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000092C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000092C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000092C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000092C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000092C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1051000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1051000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000092C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0000960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0000960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1051000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1051000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0000960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0000978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0000978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1051000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1051000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0000978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0000968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0000968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0000968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1051000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1051000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0000968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000090A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0000970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0000970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 17057 +================================== +Fail Silent: 596 +Fail Silent Violation: 112 +EDM sum: 93 +EDM Masked: 0 +Trap: 93 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 47 diff --git a/firesults/exp4/exp1290265642.-a-bit13.dat b/firesults/exp4/exp1290265642.-a-bit13.dat new file mode 100644 index 00000000..209ad030 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit13.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106C4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81037EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0003A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFDFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108A000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000384C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x81028AA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x81028AA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x81028AC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x81028AC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x81028AE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x81028AE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x81028B02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x81028B02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81029786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0003844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0003844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0003844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0003844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0003844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1052000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1052528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1052528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1052528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1052528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1052528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1052528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1052528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1052528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0003988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0003988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0003988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1086268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1086268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1086268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1086268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1086268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1086268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1086268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1086268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0003910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000392C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000392C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000392C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000392C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000392C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000392C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000392C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000392C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000392C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1052000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1052000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000392C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0003960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0003960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1052000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1052000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0003960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0003978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0003978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1052000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1052000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0003978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0003968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0003968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0003968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1052000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1052000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0003968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000390A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0003970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0003970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 18368 +================================== +Fail Silent: 596 +Fail Silent Violation: 45 +EDM sum: 207 +EDM Masked: 0 +Trap: 207 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit14.dat b/firesults/exp4/exp1290265642.-a-bit14.dat new file mode 100644 index 00000000..afebaa69 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit14.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106A4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81031EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0005A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFBFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA108C000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000584C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8102EAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8102EAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8102EAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8102EAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8102EAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8102EAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102EB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102EB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102F786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0005844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0005844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0005844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0005844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0005844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1054000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1054528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1054528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1054528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1054528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1054528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1054528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1054528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1054528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0005988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0005988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0005988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1080268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1080268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1080268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1080268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1080268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1080268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1080268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1080268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0005910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000592C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000592C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000592C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000592C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000592C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000592C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000592C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000592C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000592C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1054000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1054000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000592C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0005960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0005960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1054000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1054000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0005960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0005978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0005978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1054000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1054000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0005978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0005968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0005968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0005968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1054000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1054000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0005968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000590A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0005970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0005970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 19679 +================================== +Fail Silent: 596 +Fail Silent Violation: 2 +EDM sum: 250 +EDM Masked: 0 +Trap: 250 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit15.dat b/firesults/exp4/exp1290265642.-a-bit15.dat new file mode 100644 index 00000000..798338a2 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit15.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10664B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x8103DEE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0009A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFF7FFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1080000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000984C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x81022AA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x81022AA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x81022AC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x81022AC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x81022AE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x81022AE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x81022B02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x81022B02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x81023786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0009844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0009844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0009844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0009844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0009844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1058000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1058528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1058528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1058528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1058528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1058528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1058528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1058528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1058528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0009988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0009988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0009988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108C268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108C268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108C268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108C268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108C268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108C268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108C268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108C268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0009910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000992C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000992C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000992C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000992C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000992C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000992C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000992C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000992C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000992C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1058000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1058000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000992C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0009960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0009960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1058000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1058000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0009960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0009978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0009978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1058000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1058000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0009978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0009968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0009968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0009968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1058000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1058000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0009968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000990A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0009970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0009970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 20991 +================================== +Fail Silent: 596 +Fail Silent Violation: 49 +EDM sum: 203 +EDM Masked: 0 +Trap: 203 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit16.dat b/firesults/exp4/exp1290265642.-a-bit16.dat new file mode 100644 index 00000000..41201b0e --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit16.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA107E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81025EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0011A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFEFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1098000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD001184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8103AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8103AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8103AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8103AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8103AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8103AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8103AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8103AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8103B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0011844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0011844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0011844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0011844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0011844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1040000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1040528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1040528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1040528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1040528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1040528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1040528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1040528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1040528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0011988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0011988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0011988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1094268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1094268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1094268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1094268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1094268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1094268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1094268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1094268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0011910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD001192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD001192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD001192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD001192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD001192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD001192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD001192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD001192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD001192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1040000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1040000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD001192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0011960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0011960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1040000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1040000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0011960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0011978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0011978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1040000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1040000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0011978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0011968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0011968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0011968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1040000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1040000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0011968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD001190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0011970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0011970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 22302 +================================== +Fail Silent: 596 +Fail Silent Violation: 0 +EDM sum: 252 +EDM Masked: 0 +Trap: 252 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit17.dat b/firesults/exp4/exp1290265642.-a-bit17.dat new file mode 100644 index 00000000..8b902f56 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit17.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA104E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81015EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0021A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFDFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10A8000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD002184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8100AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8100AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8100AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8100AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x8100AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x8100AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8100AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8100AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8100B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0021844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0021844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0021844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0021844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0021844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1070000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1070528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1070528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1070528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1070528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1070528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1070528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1070528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1070528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0021988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0021988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0021988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10A4268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10A4268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10A4268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10A4268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10A4268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10A4268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10A4268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10A4268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0021910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD002192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD002192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD002192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD002192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD002192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD002192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD002192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD002192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD002192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1070000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1070000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD002192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0021960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0021960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1070000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1070000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0021960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0021978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0021978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1070000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1070000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0021978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0021968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0021968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0021968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1070000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1070000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0021968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD002190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0021970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0021970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 23613 +================================== +Fail Silent: 596 +Fail Silent Violation: 6 +EDM sum: 246 +EDM Masked: 0 +Trap: 246 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit18.dat b/firesults/exp4/exp1290265642.-a-bit18.dat new file mode 100644 index 00000000..3308c57f --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit18.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA102E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81075EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0041A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFBFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA10C8000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD004184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8106AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8106AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8106AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8106AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8106AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8106AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8106AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8106AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8106B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0041844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0041844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0041844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0041844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0041844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1010000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1010528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1010528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1010528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1010528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1010528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1010528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1010528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1010528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0041988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0041988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0041988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10C4268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10C4268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10C4268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10C4268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10C4268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10C4268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10C4268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10C4268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0041910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD004192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD004192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD004192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD004192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD004192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD004192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD004192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD004192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD004192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1010000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1010000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD004192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0041960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0041960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1010000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1010000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0041960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0041978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0041978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1010000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1010000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0041978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0041968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0041968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0041968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1010000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1010000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0041968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD004190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0041970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0041970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 24923 +================================== +Fail Silent: 596 +Fail Silent Violation: 0 +EDM sum: 252 +EDM Masked: 0 +Trap: 252 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit19.dat b/firesults/exp4/exp1290265642.-a-bit19.dat new file mode 100644 index 00000000..cb977aaf --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit19.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA10EE4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x810B5EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0081A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFF7FFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1008000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD008184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x810AAAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x810AAAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x810AAAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x810AAAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x810AAAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x810AAAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x810AAB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x810AAB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x810AB786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0081844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0081844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0081844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0081844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0081844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10D0528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10D0528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10D0528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10D0528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10D0528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10D0528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10D0528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10D0528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0081988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0081988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0081988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1004268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1004268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1004268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1004268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1004268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1004268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1004268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1004268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0081910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD008192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD008192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD008192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD008192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD008192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD008192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD008192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD008192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD008192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD008192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0081960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0081960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0081960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0081978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0081978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0081978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0081968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0081968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0081968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA10D0000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0081968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD008190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0081970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0081970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 26235 +================================== +Fail Silent: 596 +Fail Silent Violation: 0 +EDM sum: 252 +EDM Masked: 0 +Trap: 252 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit2.dat b/firesults/exp4/exp1290265642.-a-bit2.dat new file mode 100644 index 00000000..fe8282af --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit2.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4BC at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE4 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A28 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFFB at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD000198C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088004 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001848 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102AAAC at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102AAAC at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102AAC4 | injected = 0x8102AAC0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a11 = 0x8102AAC4 | injected = 0x8102AAC0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102AAE4 | injected = 0x8102AAE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a11 = 0x8102AAE4 | injected = 0x8102AAE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AB02 | injected = 0x8102AB06 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AB02 | injected = 0x8102AB06 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B782 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001840 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001840 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001840 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001840 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001840 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050004 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA105052C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD000198C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD000198C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD000198C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA108426C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001914 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001928 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001928 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001928 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001928 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001928 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001928 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001928 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001928 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001928 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050004 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050004 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001928 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001964 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001964 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050004 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050004 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001964 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD000197C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD000197C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD000197C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD000197C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050004 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050004 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD000197C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD000197C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD000196C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD000196C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD000196C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050004 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050004 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD000196C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000190E at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001974 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001974 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 3936 +================================== +Fail Silent: 600 +Fail Silent Violation: 150 +EDM sum: 98 +EDM Masked: 0 +Trap: 98 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit20.dat b/firesults/exp4/exp1290265642.-a-bit20.dat new file mode 100644 index 00000000..4de9fcf0 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit20.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA116E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81135EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0101A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFEFFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1188000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD010184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8112AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8112AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8112AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8112AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8112AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8112AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8112AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8112AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8112B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0101844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0101844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0101844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0101844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0101844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1150000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1150528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1150528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1150528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1150528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1150528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1150528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1150528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1150528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0101988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0101988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0101988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1184268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1184268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1184268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1184268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1184268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1184268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1184268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1184268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0101910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD010192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD010192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD010192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD010192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD010192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD010192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD010192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD010192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD010192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1150000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1150000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD010192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0101960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0101960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1150000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1150000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0101960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0101978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0101978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1150000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1150000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0101978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0101968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0101968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0101968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1150000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1150000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0101968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD010190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0101970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0101970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 27547 +================================== +Fail Silent: 596 +Fail Silent Violation: 0 +EDM sum: 252 +EDM Masked: 0 +Trap: 252 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit21.dat b/firesults/exp4/exp1290265642.-a-bit21.dat new file mode 100644 index 00000000..1af9d10f --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit21.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA126E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81235EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0201A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFDFFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1288000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD020184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8122AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8122AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8122AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8122AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8122AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8122AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8122AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8122AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8122B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0201844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0201844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0201844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0201844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0201844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1250000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1250528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1250528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1250528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1250528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1250528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1250528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1250528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1250528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0201988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0201988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0201988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1284268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1284268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1284268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1284268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1284268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1284268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1284268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1284268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0201910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD020192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD020192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD020192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD020192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD020192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD020192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD020192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD020192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD020192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1250000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1250000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD020192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0201960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0201960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1250000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1250000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0201960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0201978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0201978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1250000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1250000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0201978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0201968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0201968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0201968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1250000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1250000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0201968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD020190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0201970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0201970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 28858 +================================== +Fail Silent: 596 +Fail Silent Violation: 0 +EDM sum: 252 +EDM Masked: 0 +Trap: 252 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit22.dat b/firesults/exp4/exp1290265642.-a-bit22.dat new file mode 100644 index 00000000..f516790c --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit22.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA146E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81435EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0401A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFBFFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x400000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x400000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x400000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x400000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1488000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD040184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8142AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8142AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8142AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8142AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8142AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8142AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8142AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8142AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8142B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0401844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0401844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0401844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0401844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0401844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1450000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1450528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1450528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1450528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1450528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1450528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1450528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1450528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1450528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0401988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0401988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0401988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1484268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1484268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1484268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1484268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1484268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1484268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1484268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1484268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0401910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD040192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD040192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD040192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD040192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD040192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD040192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD040192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD040192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD040192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1450000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1450000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD040192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0401960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0401960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1450000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1450000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0401960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0401978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0401978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1450000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1450000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0401978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0401968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0401968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0401968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1450000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1450000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0401968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD040190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0401970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0401970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 30170 +================================== +Fail Silent: 596 +Fail Silent Violation: 0 +EDM sum: 252 +EDM Masked: 0 +Trap: 252 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit23.dat b/firesults/exp4/exp1290265642.-a-bit23.dat new file mode 100644 index 00000000..02e29194 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit23.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA186E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81835EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0801A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFF7FFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x800000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1888000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD080184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8182AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8182AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8182AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8182AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8182AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8182AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8182AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8182AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8182B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0801844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0801844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0801844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0801844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0801844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1850000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1850528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1850528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1850528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1850528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1850528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1850528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1850528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1850528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0801988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0801988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0801988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1884268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1884268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1884268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1884268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1884268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1884268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1884268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1884268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0801910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD080192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD080192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD080192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD080192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD080192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD080192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD080192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD080192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD080192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1850000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1850000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD080192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD0801960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0801960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1850000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1850000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0801960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD0801978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0801978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1850000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1850000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0801978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0801968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD0801968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0801968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1850000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1850000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0801968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD080190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0801970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD0801970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 31482 +================================== +Fail Silent: 596 +Fail Silent Violation: 0 +EDM sum: 252 +EDM Masked: 0 +Trap: 252 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit24.dat b/firesults/exp4/exp1290265642.-a-bit24.dat new file mode 100644 index 00000000..a2c9ca6f --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit24.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA006E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x80035EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD1001A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFEFFFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x1000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x1000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x1000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x1000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA0088000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD100184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8002AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8002AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8002AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8002AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8002AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8002AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8002AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8002AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8002B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD1001844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD1001844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD1001844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD1001844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD1001844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA0050000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA0050528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA0050528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA0050528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA0050528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA0050528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA0050528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA0050528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA0050528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD1001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD1001988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD1001988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA0084268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA0084268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA0084268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA0084268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA0084268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA0084268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA0084268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA0084268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD1001910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD100192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD100192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD100192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD100192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD100192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD100192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD100192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD100192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD100192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA0050000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA0050000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD100192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD1001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD1001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA0050000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA0050000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD1001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD1001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD1001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA0050000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA0050000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD1001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD1001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD1001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD1001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA0050000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA0050000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD1001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD100190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD1001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD1001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 32794 +================================== +Fail Silent: 596 +Fail Silent Violation: 0 +EDM sum: 252 +EDM Masked: 0 +Trap: 252 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit25.dat b/firesults/exp4/exp1290265642.-a-bit25.dat new file mode 100644 index 00000000..da15b9a7 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit25.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA306E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x83035EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD2001A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFDFFFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x2000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x2000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x2000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x2000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA3088000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD200184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8302AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8302AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8302AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8302AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8302AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8302AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8302AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8302AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8302B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD2001844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD2001844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD2001844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD2001844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD2001844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA3050000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA3050528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA3050528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA3050528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA3050528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA3050528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA3050528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA3050528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA3050528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD2001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD2001988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD2001988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA3084268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA3084268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA3084268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA3084268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA3084268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA3084268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA3084268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA3084268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD2001910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD200192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD200192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD200192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD200192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD200192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD200192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD200192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD200192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD200192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA3050000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA3050000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD200192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD2001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD2001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA3050000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA3050000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD2001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD2001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD2001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA3050000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA3050000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD2001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD2001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD2001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD2001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA3050000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA3050000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD2001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD200190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD2001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD2001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 34105 +================================== +Fail Silent: 596 +Fail Silent Violation: 0 +EDM sum: 252 +EDM Masked: 0 +Trap: 252 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit26.dat b/firesults/exp4/exp1290265642.-a-bit26.dat new file mode 100644 index 00000000..31be0dca --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit26.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA506E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x85035EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD4001A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFBFFFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x4000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x4000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x4000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x4000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA5088000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD400184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8502AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8502AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8502AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8502AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8502AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8502AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8502AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8502AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8502B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD4001844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD4001844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD4001844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD4001844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD4001844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA5050000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA5050528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA5050528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA5050528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA5050528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA5050528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA5050528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA5050528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA5050528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD4001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD4001988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD4001988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA5084268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA5084268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA5084268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA5084268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA5084268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA5084268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA5084268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA5084268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD4001910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD400192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD400192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD400192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD400192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD400192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD400192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD400192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD400192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD400192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA5050000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA5050000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD400192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD4001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD4001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA5050000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA5050000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD4001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD4001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD4001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA5050000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA5050000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD4001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD4001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD4001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD4001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA5050000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA5050000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD4001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD400190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD4001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD4001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 35416 +================================== +Fail Silent: 596 +Fail Silent Violation: 0 +EDM sum: 252 +EDM Masked: 0 +Trap: 252 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit27.dat b/firesults/exp4/exp1290265642.-a-bit27.dat new file mode 100644 index 00000000..6a493660 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit27.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA906E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x89035EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD8001A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xF7FFFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA9088000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD800184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8902AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8902AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8902AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8902AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8902AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8902AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8902AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8902AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8902B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD8001844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD8001844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD8001844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD8001844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD8001844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA9050000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA9050528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA9050528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA9050528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA9050528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA9050528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA9050528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA9050528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA9050528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD8001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD8001988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD8001988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA9084268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA9084268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA9084268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA9084268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA9084268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA9084268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA9084268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA9084268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD8001910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD800192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD800192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD800192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD800192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD800192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD800192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD800192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD800192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD800192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA9050000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA9050000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD800192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0xD8001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD8001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA9050000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA9050000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD8001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0xD8001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD8001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA9050000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA9050000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD8001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD8001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0xD8001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD8001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA9050000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA9050000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD8001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD800190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD8001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0xD8001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 36727 +================================== +Fail Silent: 596 +Fail Silent Violation: 0 +EDM sum: 252 +EDM Masked: 0 +Trap: 252 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit28.dat b/firesults/exp4/exp1290265642.-a-bit28.dat new file mode 100644 index 00000000..87d3c9b2 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit28.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xB106E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x91035EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xC0001A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xEFFFFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xB1088000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xC000184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x9102AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x9102AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x9102AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x9102AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x9102AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x9102AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x9102AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x9102AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x9102B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xC0001844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xC0001844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xC0001844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xC0001844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xC0001844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xB1050000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xB1050528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xB1050528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xB1050528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xB1050528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xB1050528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xB1050528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xB1050528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xB1050528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xC0001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xC0001988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xC0001988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xB1084268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xB1084268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xB1084268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xB1084268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xB1084268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xB1084268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xB1084268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xB1084268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xC0001910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xC000192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xC000192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xC000192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xC000192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xC000192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xC000192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xC000192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xC000192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xC000192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xB1050000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xB1050000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xC000192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xC0001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xC0001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xB1050000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xB1050000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xC0001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xC0001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xC0001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xB1050000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xB1050000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xC0001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xC0001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xC0001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xC0001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xB1050000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xB1050000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xC0001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xC000190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xC0001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xC0001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 38039 +================================== +Fail Silent: 596 +Fail Silent Violation: 112 +EDM sum: 140 +EDM Masked: 0 +Trap: 140 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit29.dat b/firesults/exp4/exp1290265642.-a-bit29.dat new file mode 100644 index 00000000..398d2a16 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit29.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x8106E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xA1035EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xF0001A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xDFFFFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x81088000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xF000184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102AAA8 | injected = 0xA102AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a11 = 0x8102AAA8 | injected = 0xA102AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102AAC4 | injected = 0xA102AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a11 = 0x8102AAC4 | injected = 0xA102AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102AAE4 | injected = 0xA102AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a11 = 0x8102AAE4 | injected = 0xA102AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102AB02 | injected = 0xA102AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a11 = 0x8102AB02 | injected = 0xA102AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102B786 | injected = 0xA102B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xF0001844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xF0001844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xF0001844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xF0001844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xF0001844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x81050000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x81050528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x81050528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x81050528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x81050528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x81050528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x81050528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x81050528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x81050528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xF0001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xF0001988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xF0001988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x81084268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x81084268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x81084268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x81084268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x81084268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x81084268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x81084268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x81084268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xF0001910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xF000192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xF000192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xF000192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xF000192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xF000192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xF000192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xF000192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xF000192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xF000192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x81050000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x81050000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xF000192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xF0001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xF0001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x81050000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x81050000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xF0001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xF0001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xF0001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x81050000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x81050000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xF0001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xF0001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xF0001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xF0001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x81050000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x81050000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xF0001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xF000190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xF0001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xF0001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 39352 +================================== +Fail Silent: 682 +Fail Silent Violation: 112 +EDM sum: 54 +EDM Masked: 0 +Trap: 54 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit3.dat b/firesults/exp4/exp1290265642.-a-bit3.dat new file mode 100644 index 00000000..a2adccd1 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit3.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4B0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EE8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A24 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFF7 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088008 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001844 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102AAA8 | injected = 0x8102AAA0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a11 = 0x8102AAA8 | injected = 0x8102AAA0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8102AACC at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8102AACC at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x8102AAEC at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x8102AAEC at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AB02 | injected = 0x8102AB0A at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AB02 | injected = 0x8102AB0A at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B78E at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD000184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD000184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD000184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD000184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD000184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050008 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050520 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050520 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050520 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050520 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050520 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050520 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050520 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050520 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001980 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001980 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001980 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084260 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084260 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084260 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084260 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084260 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084260 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084260 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084260 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001918 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001924 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001924 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001924 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001924 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001924 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001924 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001924 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001924 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001924 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050008 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050008 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001924 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001968 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001968 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050008 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050008 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001968 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001970 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001970 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050008 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050008 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001970 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001960 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001960 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001960 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050008 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050008 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001960 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001902 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001978 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001978 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 5248 +================================== +Fail Silent: 598 +Fail Silent Violation: 162 +EDM sum: 88 +EDM Masked: 0 +Trap: 88 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit30.dat b/firesults/exp4/exp1290265642.-a-bit30.dat new file mode 100644 index 00000000..d586b37b --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit30.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xE106E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0xC1035EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x90001A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xBFFFFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0x90001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0x90001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0x90001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0x90001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0x90001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0x90001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0x90001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x90001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xE1088000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x9000184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0xC102AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0xC102AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0xC102AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0xC102AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0xC102AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0xC102AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0xC102AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0xC102AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0xC102B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0x90001844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0x90001844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0x90001844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0x90001844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0x90001844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x90001910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x90001910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x90001910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x90001910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x90001910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x90001910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x90001910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x90001910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xE1050000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0x90001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0x90001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0x90001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0x90001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xE1050528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xE1050528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xE1050528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xE1050528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xE1050528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xE1050528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xE1050528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xE1050528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x90001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0x90001988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0x90001988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xE1084268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xE1084268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xE1084268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xE1084268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xE1084268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xE1084268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xE1084268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xE1084268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0x90001910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x9000192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x9000192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x9000192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x9000192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x9000192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x9000192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x9000192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x9000192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x9000192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xE1050000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xE1050000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x9000192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0x90001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0x90001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0x90001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0x90001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xE1050000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xE1050000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0x90001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0x90001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0x90001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0x90001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0x90001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0x90001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xE1050000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xE1050000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0x90001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0x90001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0x90001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0x90001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0x90001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xE1050000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xE1050000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0x90001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x9000190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0x90001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0x90001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 40664 +================================== +Fail Silent: 596 +Fail Silent Violation: 47 +EDM sum: 205 +EDM Masked: 0 +Trap: 205 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit31.dat b/firesults/exp4/exp1290265642.-a-bit31.dat new file mode 100644 index 00000000..3f3679eb --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit31.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0x2106E4B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x1035EE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0x50001A2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0x7FFFFFFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0x50001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0x50001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0x50001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0x50001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0x50001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0x50001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0x50001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0x50001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80000000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0x21088000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0x5000184C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x102AAA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x102AAA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x102AAC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x102AAC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x102AAE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x102AAE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x102AB02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x102AB02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x102B786 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0x50001844 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0x50001844 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0x50001844 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0x50001844 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0x50001844 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x50001910 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x50001910 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x50001910 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x50001910 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x50001910 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x50001910 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x50001910 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0x50001910 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0x21050000 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0x50001910 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0x50001910 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0x50001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0x50001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x21050528 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x21050528 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x21050528 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x21050528 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x21050528 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x21050528 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x21050528 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0x21050528 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0x50001988 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0x50001988 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0x50001988 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x21084268 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x21084268 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x21084268 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x21084268 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x21084268 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x21084268 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x21084268 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0x21084268 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0x50001910 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x5000192C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x5000192C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x5000192C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x5000192C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x5000192C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x5000192C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x5000192C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x5000192C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x5000192C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x21050000 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x21050000 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0x5000192C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0x50001960 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001960 | injected = 0x50001960 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0x50001960 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0x50001960 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x21050000 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x21050000 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0x50001960 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0x50001960 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0x50001978 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001978 | injected = 0x50001978 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0x50001978 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0x50001978 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x21050000 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x21050000 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0x50001978 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0x50001978 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0x50001968 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001968 | injected = 0x50001968 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0x50001968 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x21050000 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0x21050000 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0x50001968 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0x5000190A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0x50001970 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a15 = 0xD0001970 | injected = 0x50001970 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 41977 +================================== +Fail Silent: 596 +Fail Silent Violation: 0 +EDM sum: 252 +EDM Masked: 0 +Trap: 252 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit4.dat b/firesults/exp4/exp1290265642.-a-bit4.dat new file mode 100644 index 00000000..ad7126b2 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit4.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4A8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EF0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A3C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFEF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x10 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x10 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x10 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x10 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088010 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000185C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102AAB8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102AAB8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8102AAD4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8102AAD4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8102AAF4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8102AAF4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102AB12 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102AB12 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B796 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001854 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001854 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001854 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001854 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001854 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050010 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050538 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050538 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050538 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050538 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050538 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050538 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050538 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050538 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001998 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001998 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001998 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084278 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084278 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084278 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084278 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084278 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084278 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084278 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084278 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001900 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000193C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000193C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000193C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000193C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000193C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000193C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000193C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000193C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000193C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050010 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050010 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000193C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001970 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001970 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050010 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050010 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001970 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001968 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001968 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050010 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050010 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001968 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001978 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001978 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001978 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050010 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050010 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001978 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000191A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001960 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001960 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 6560 +================================== +Fail Silent: 596 +Fail Silent Violation: 115 +EDM sum: 137 +EDM Masked: 0 +Trap: 137 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit5.dat b/firesults/exp4/exp1290265642.-a-bit5.dat new file mode 100644 index 00000000..abb68d39 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit5.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E498 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EC0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A0C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFDF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x20 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x20 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x20 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x20 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088020 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000186C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8102AA88 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102AAA8 | injected = 0x8102AA88 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8102AAE4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8102AAE4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x8102AAC4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x8102AAC4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AB02 | injected = 0x8102AB22 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AB02 | injected = 0x8102AB22 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7A6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001864 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001864 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001864 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001864 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001864 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050020 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050508 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050508 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050508 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050508 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050508 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050508 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050508 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050508 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD00019A8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084248 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084248 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084248 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084248 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084248 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084248 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084248 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084248 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001930 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000190C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000190C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000190C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000190C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000190C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000190C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000190C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000190C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000190C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050020 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050020 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000190C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001940 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001940 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050020 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050020 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001940 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001958 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001958 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050020 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050020 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001958 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001948 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001948 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001948 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050020 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050020 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001948 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000192A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001950 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001950 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 7873 +================================== +Fail Silent: 596 +Fail Silent Violation: 163 +EDM sum: 89 +EDM Masked: 0 +Trap: 89 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit6.dat b/firesults/exp4/exp1290265642.-a-bit6.dat new file mode 100644 index 00000000..bd92f8b2 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit6.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E4F8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035EA0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001A6C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFFBF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x40 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x40 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x40 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x40 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088040 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000180C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102AAE8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102AAE8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8102AA84 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8102AA84 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a11 = 0x8102AAE4 | injected = 0x8102AAA4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a11 = 0x8102AAE4 | injected = 0x8102AAA4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102AB42 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102AB42 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102B786 | injected = 0x8102B7C6 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001804 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001804 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001804 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001804 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001804 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050040 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050568 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050568 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050568 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050568 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050568 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050568 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050568 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050568 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD00019C8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084228 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084228 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084228 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084228 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084228 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084228 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084228 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084228 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001950 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000196C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000196C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000196C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000196C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000196C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000196C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000196C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000196C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000196C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050040 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050040 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000196C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001920 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001920 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050040 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050040 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001920 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001938 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001938 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050040 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050040 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001938 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001928 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001928 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001928 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050040 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050040 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001928 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000194A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001930 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001930 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 9185 +================================== +Fail Silent: 598 +Fail Silent Violation: 159 +EDM sum: 91 +EDM Masked: 0 +Trap: 91 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit7.dat b/firesults/exp4/exp1290265642.-a-bit7.dat new file mode 100644 index 00000000..06252c9d --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit7.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E438 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035E60 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001AAC at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFF7F at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x80 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088080 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD00018CC at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102AA28 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102AA28 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8102AA44 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102AAC4 | injected = 0x8102AA44 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x8102AA64 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x8102AA64 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AB02 | injected = 0x8102AB82 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AB02 | injected = 0x8102AB82 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B706 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD00018C4 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD00018C4 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD00018C4 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD00018C4 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD00018C4 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050080 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10505A8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10505A8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10505A8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10505A8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10505A8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10505A8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10505A8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA10505A8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001908 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001908 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001908 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10842E8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10842E8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10842E8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10842E8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10842E8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10842E8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10842E8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA10842E8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001990 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD00019AC at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD00019AC at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD00019AC at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD00019AC at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD00019AC at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD00019AC at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD00019AC at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD00019AC at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD00019AC at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050080 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050080 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD00019AC at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050080 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050080 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD00019E0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050080 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050080 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD00019F8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050080 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050080 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD00019E8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000198A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD00019F0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD00019F0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 10497 +================================== +Fail Silent: 596 +Fail Silent Violation: 118 +EDM sum: 134 +EDM Masked: 0 +Trap: 134 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit8.dat b/firesults/exp4/exp1290265642.-a-bit8.dat new file mode 100644 index 00000000..f3883aaf --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit8.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E5B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035FE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD0001B2C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFEFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD000194C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102ABA8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102ABA8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8102ABC4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8102ABC4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8102ABE4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102AAE4 | injected = 0x8102ABE4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AB02 | injected = 0x8102AA02 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AB02 | injected = 0x8102AA02 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B686 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001944 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001944 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001944 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001944 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001944 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050100 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050428 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050428 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050428 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050428 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050428 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050428 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050428 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050428 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001888 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001888 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001888 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084368 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084368 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084368 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084368 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084368 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084368 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084368 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084368 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001810 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000182C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000182C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000182C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000182C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000182C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000182C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000182C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000182C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000182C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050100 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050100 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD000182C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001860 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001860 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050100 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050100 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001860 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001878 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001878 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050100 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050100 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001878 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001868 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001868 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001868 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050100 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050100 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001868 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD000180A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001870 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001870 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 11808 +================================== +Fail Silent: 596 +Fail Silent Violation: 118 +EDM sum: 134 +EDM Masked: 0 +Trap: 134 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/firesults/exp4/exp1290265642.-a-bit9.dat b/firesults/exp4/exp1290265642.-a-bit9.dat new file mode 100644 index 00000000..a3bdc7e1 --- /dev/null +++ b/firesults/exp4/exp1290265642.-a-bit9.dat @@ -0,0 +1,862 @@ +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a0 = 0xA106E4B8 | injected = 0xA106E6B8 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a1 = 0x81035EE0 | injected = 0x81035CE0 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a2 = 0xD0001A2C | injected = 0xD000182C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a3 = 0xFFFFFFFF | injected = 0xFFFFFDFF at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a4 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a4 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a5 = 0x0 | injected = 0x200 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a6 = 0x0 | injected = 0x200 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a7 = 0x0 | injected = 0x200 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a8 = 0x0 | injected = 0x200 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a9 = 0xA1088000 | injected = 0xA1088200 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a10 = 0xD000184C | injected = 0xD0001A4C at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102A8A8 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAA8 | injected = 0x8102A8A8 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8102A8C4 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAC4 | injected = 0x8102A8C4 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x8102A8E4 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a11 = 0x8102AAE4 | injected = 0x8102A8E4 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102A902 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102AB02 | injected = 0x8102A902 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a11 = 0x8102B786 | injected = 0x8102B586 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001A44 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001A44 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001A44 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001A44 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001844 | injected = 0xD0001A44 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a12 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +EDM , TRAP - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a12 = 0xA1050000 | injected = 0xA1050200 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050728 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050728 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050728 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050728 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050728 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050728 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050728 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xA1050528 | injected = 0xA1050728 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a13 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001988 | injected = 0xD0001B88 at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084068 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084068 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084068 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084068 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084068 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084068 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084068 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a14 = 0xA1084268 | injected = 0xA1084068 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a14 = 0xD0001910 | injected = 0xD0001B10 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001B2C at 0x8102AA3C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001B2C at 0x8102AA3E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001B2C at 0x8102AA40:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001B2C at 0x8102AA94:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001B2C at 0x8102AA98:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001B2C at 0x8102AA9C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001B2C at 0x8102AA9E:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001B2C at 0x8102AAA0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001B2C at 0x8102AAA4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050200 at 0x8102AA24:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050200 at 0x8102AA28:\\System\FlightControl\AttitudeControllerModelClass<1>::getth1out() +FAIL_SILENT - a15 = 0xD000192C | injected = 0xD0001B2C at 0x8102AAA8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AAAC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AAAE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AAB2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AAB6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAB8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AABC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AABE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAC0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050200 at 0x8102AA2A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050200 at 0x8102AA2E:\\System\FlightControl\AttitudeControllerModelClass<1>::getth4out() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAC4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001960 | injected = 0xD0001B60 at 0x8102AAC8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AACC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AACE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AAD2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AAD6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAD8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AADC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AADE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAE0:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050200 at 0x8102AA30:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050200 at 0x8102AA34:\\System\FlightControl\AttitudeControllerModelClass<1>::getth3out() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAE4:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001978 | injected = 0xD0001B78 at 0x8102AAE8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AAEC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AAEE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AAF2:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AAF6:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AAF8:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AAFC:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AAFE:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050200 at 0x8102AA36:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xA1050000 | injected = 0xA1050200 at 0x8102AA3A:\\System\FlightControl\AttitudeControllerModelClass<1>::getth2out() +FAIL_SILENT - a15 = 0xD0001968 | injected = 0xD0001B68 at 0x8102AB02:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AB06:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AB08:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AB0C:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AB10:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT - a15 = 0xD000190A | injected = 0xD0001B0A at 0x8102AB14:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001B70 at 0x8102AB16:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +FAIL_SILENT_VIOLATION - a15 = 0xD0001970 | injected = 0xD0001B70 at 0x8102AB1A:\\System\FlightControl\FlightControlImpl<1>::calcEngineThrottle() +============END of Experiment====== +Number of injections: 848 +Experiment duration. 13120 +================================== +Fail Silent: 596 +Fail Silent Violation: 118 +EDM sum: 134 +EDM Masked: 0 +Trap: 134 +EDM Branch Signature: 0 +EDM Branch Check: 0 +EDM No decision: 0 +EDM Decode Check: 0 +Timeout: 0 diff --git a/ovp/CMakeLists.txt b/ovp/CMakeLists.txt new file mode 100644 index 00000000..e6db585b --- /dev/null +++ b/ovp/CMakeLists.txt @@ -0,0 +1,53 @@ + + + # PreDefined environment variables (setupImperas) + # IMPERAS_HOME + # IMPERAS_ARCA + + # And the variables set in Imperas/bin/Makefile.include + # IMPERAS_LIB + # IMPERAS_BIN + # IMPERAS_VMISTUBS + # IMPERAS_VMIINC + # SHRSUF + # +#TODO test ist IMPERAS_HOME is set. + + +message(STATUS "Imperas Home: $ENV{IMPERAS_HOME}") +message(STATUS "Imperas License: $ENV{IMPERASD_LICENSE_FILE}") + + +message(STATUS "Arch: $ENV{IMPERAS_ARCH}") +#message(STATUS "VLNV: $ENV{IMPERAS_VLNV}") +#set(IMPERAS_LIB $ENV{IMPERAS_HOME}/lib/$ENV{IMPERAS_ARCH}) + +set(IMPERAS_BIN $ENV{IMPERAS_HOME}/bin/$ENV{IMPERAS_ARCH}) +set(IMPERAS_VMISTUBS ${IMPERAS_BIN}/vmiStubs.a) +set(IMPERAS_VMIINC + -I$ENV{IMPERAS_HOME}/ImpPublic/include/host +) + +## This is needed when building a shared library +set(HOST_LDFLAGS "-Wl,--version-script=$ENV{IMPERAS_HOME}/ImperasLib/source/buildutils/version.script") + +## This is needed by a platform executable +set(SIM_LDFLAGS $ENV{IMPERAS_HOME}/bin/$ENV{IMPERAS_ARCH}/libRuntimeLoader.so) + + +include_directories(${CMAKE_SOURCE_DIR}/fail) +include_directories(${CMAKE_BINARY_DIR}/fail) +include_directories($ENV{IMPERAS_HOME}/ImpPublic/include/host) + +#add_subdirectory(ovpworld.org/mmc/flakyMemory/1.0/model) +add_subdirectory(cortexM3) + +include(ExternalProject) +#### Put resulting (model) library file in /lib #### +ExternalProject_Add( + OVParmmModel + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/armmModel + INSTALL_COMMAND "" + CMAKE_ARGS -DFAIL_BASE=${CMAKE_SOURCE_DIR}/fail -DLIBRARY_OUTPUT_PATH=${LIBRARY_OUTPUT_PATH} +) + diff --git a/ovp/OVPCpu.hpp b/ovp/OVPCpu.hpp new file mode 100644 index 00000000..a718781f --- /dev/null +++ b/ovp/OVPCpu.hpp @@ -0,0 +1,132 @@ +#ifndef _OVPCpu_HPP_ +#define _OVPCpu_HPP_ + +#include "icm/icmCpuManager.hpp" +#include "SAL/Register.hpp" +#include "OVPPlatform.hpp" + +extern OVPPlatform ovpplatform; + + +using namespace icmCpuManager; + +/** + * \class OVPCpu + * Abstract class which contains methods OVP platforms must implement. + * As there is the possibility to create different platforms this class + * is an interface for the OVPPlatform. + */ +class OVPCpu { + protected: + icmPlatform *platform; + icmProcessorObject *cpu; + icmAttrListObject *attrList; + icmProcessorP processorP; + + // for MMC + icmMmcObject *mmcInstr; + icmMmcObject *mmcData; + icmBusObject *instrBus; + icmBusObject *dataBus; + icmBusObject *mainBus; + icmMemoryObject *icmMem0; + icmMemoryObject *icmMem1; + icmMemoryObject *icmMem2; + + icmRegInfoP rid_sp; + + public: + unsigned char *mem; + Int16 *textmem; + size_t offset; + size_t memSize; + size_t textOffset; + size_t textMemSize; + + /** + * Initialize platform. + * @param gdb set if GDB functionality should be enabled + */ + virtual void init(bool) = 0; + + /** + * Simulate the platform + * @param app Name/Path to the application to run + */ + virtual int startSimulation(const char*) = 0; + + /** + * Create a full MMC to have memory control. + * @param vlnRoot Path to OVP model. Default: 0 -> default OVP path will be taken + */ + virtual void createFullMMC(const char *) = 0; + + /** + * Set general purpose register in SAL + */ + virtual void makeGPRegister() = 0; + + /** + * Set status register in SAL + */ + virtual void makeSTRegister() = 0; + + /** + * Set program counter register in SAL + */ + virtual void makePCRegister() = 0; + + /** + * Create local mirrored memory to handle memory manipulations + * during the memory callback + * @param sizeText Size of the text segment + * @param offText Address the text segment starts + * @param sizeMem Size of the other segments + * @param offMem Address the other segments start + */ + virtual void makeCallbackMemory(size_t sizeText, size_t offText, size_t sizeMem, size_t offMem) = 0; + + /** + * Returns the private icmProcessorObject pointer needed for some OVP action + * @return icmProcessorObject + */ + icmProcessorObject *getProcessor() { + return cpu; + } + + /** + * Returns the private ProcessorP struct needed for some OVP action + * @return ProcessorP + */ + icmProcessorP getProcessorP() { + return processorP; + } + + /** + * Set the pointer to the stack pointer register + * @param reg icmRegInfoP of the stack pointer register + */ + void setSPReg(icmRegInfoP reg) { + rid_sp = reg; + } + + /** + * Returns the private stack pointer register pointer + * @return stack pointer register + */ + icmRegInfoP getSPReg() { + return rid_sp; + } + + /** + * Fills the callback memory with program data. This function + * must be called after the application is loaded to local memory + * and before the start of the simulation. + */ + void fillCallbackMemory() { + mainBus->read(offset, mem, memSize, cpu); + mainBus->read(textOffset, textmem, textMemSize, cpu); + } +}; + +#endif diff --git a/ovp/OVPPlatform.cc b/ovp/OVPPlatform.cc new file mode 100644 index 00000000..d26fb3c4 --- /dev/null +++ b/ovp/OVPPlatform.cc @@ -0,0 +1,49 @@ +#include "OVPCpu.hpp" +#include "OVPStatusRegister.hpp" +#include "OVPPlatform.hpp" +#include "SAL/Register.hpp" +#include "SAL/SALInst.hpp" + + +OVPPlatform ovpplatform; + +// current CPU +OVPCpu *platform; +icmProcessorObject *processor; +icmProcessorP cpuP; + +void OVPPlatform::setCpu(void *ovpcpu) { + platform = (OVPCpu *)ovpcpu; + processor = platform->getProcessor(); + cpuP = processor->getProcessorP(); +} + +void OVPPlatform::setRegisterData(void * link, unsigned int val) { + icmWriteRegInfoValue(cpuP, (icmRegInfoP)link, (void *) &val); +} + +unsigned int OVPPlatform::getRegisterData(void *link) { + unsigned int res; + + icmReadRegInfoValue(cpuP, (icmRegInfoP)link, (void *)&res); + return res; +} + +uint32_t OVPPlatform::getPC() { + return (uint32_t) processor->getPC(); +} + +void OVPPlatform::setPC(uint32_t val) { + processor->setPC(val); +} + + +uint32_t OVPPlatform::getSP() { + uint32_t res; + void *buf = &res; + + icmReadRegInfoValue(cpuP, platform->getSPReg(), buf); + + return res; + +} diff --git a/ovp/OVPPlatform.hpp b/ovp/OVPPlatform.hpp new file mode 100644 index 00000000..f6343b75 --- /dev/null +++ b/ovp/OVPPlatform.hpp @@ -0,0 +1,53 @@ +#ifndef __OVPPLATFORM_HPP__ +#define __OVPPLATFORM_HPP__ + +#include + +/** + * \class OVPPlatform + * OVPPlatform is the layer/interface which connects SAL and the OVP platform. + */ +class OVPPlatform { + +public: + /** + * The current OVP platform has to set a pointer to itself so that + * OVPPlatform can execute OVP functions using the correct platform + * @param ovpcpu void ptr to the OVPCpu object + */ + void setCpu(void *); + + /** + * Set value to a register + * @param link Pointer to the OVP register + * @param val Value the register is set to + */ + void setRegisterData(void *, unsigned int); + + /** + * Retrieves value from a register + * @param link Pointer to the OVP register + * @return value of the register + */ + unsigned int getRegisterData(void *); + + /** + * Get the program counter + * @return current program counter + */ + uint32_t getPC(); + + /** + * Set the program counter + */ + void setPC(uint32_t); + + /** + * Get the stack pointer + * @return current stack pointer + */ + uint32_t getSP(); + +}; + +#endif diff --git a/ovp/OVPStatusRegister.hpp b/ovp/OVPStatusRegister.hpp new file mode 100644 index 00000000..0cb6a97e --- /dev/null +++ b/ovp/OVPStatusRegister.hpp @@ -0,0 +1,52 @@ +#ifndef __OVPSTATUSREGISTER_HPP__ +#define __OVPSTATUSREGISTER_HPP__ + +#include "SAL/ovp/OVPRegister.hpp" + +/** + * \class OVPStatusRegister + * Abstract class for status register implementation + */ +class OVPStatusRegister : public sal::OVPRegister { + + protected: + + public: + OVPStatusRegister(uint32_t width, void *link) + : sal::OVPRegister(width, link, sal::RT_ST) { } + ~OVPStatusRegister() {} + + virtual bool getSignFlag() const = 0; + virtual bool getZeroFlag() const = 0; + virtual bool getCarryFlag() const = 0; + virtual bool getOverflowFlag() const = 0; + + virtual void setSignFlag(bool) = 0; + virtual void setZeroFlag(bool) = 0; + virtual void setCarryFlag(bool) = 0; + virtual void setOverflowFlag(bool) = 0; + + /** + * Invert bit at specific position of status register + * @param pos position of bit to invert + */ +/* void invertBit(int pos) { + size_t val; + size_t chpos = 1 << pos; + + icmReadRegInfoValue(cpuP, cpsr, (void *)&val); + + // get bit + bool bit = (val >> pos) & 0x1; + + if(bit == 0) { + chpos = ~chpos; + val = val & chpos; + } else { + val = val | chpos; + } + + }*/ +}; + +#endif diff --git a/ovp/README b/ovp/README new file mode 100644 index 00000000..c0917cf1 --- /dev/null +++ b/ovp/README @@ -0,0 +1,7 @@ +Env setzen: . ./setImperas.sh + +64 bit Systeme brauchen ia32-libs +evtl unter Ubuntu: ln -s /usr/lib32/libstdc++.so.6 /usr/lib32/libstdc++.so + +License Server in Env-Variable: +export IMPERASD_LICENSE_FILE=@faui49.informatik.uni-erlangen.de diff --git a/ovp/armmModel/CMakeLists.txt b/ovp/armmModel/CMakeLists.txt new file mode 100644 index 00000000..078b1bb9 --- /dev/null +++ b/ovp/armmModel/CMakeLists.txt @@ -0,0 +1,98 @@ +Project(OVPCM3_Model) +cmake_minimum_required(VERSION 2.8) + + +message(STATUS "Imperas Home: $ENV{IMPERAS_HOME}") +message(STATUS "Imperas License: $ENV{IMPERASD_LICENSE_FILE}") + + +message(STATUS "Arch: $ENV{IMPERAS_ARCH}") +set(IMPERAS_BIN $ENV{IMPERAS_HOME}/bin/$ENV{IMPERAS_ARCH}) +set(IMPERAS_VMISTUBS ${IMPERAS_BIN}/vmiStubs.a) +set(IMPERAS_VMIINC + -I$ENV{IMPERAS_HOME}/ImpPublic/include/host +) + +## This is needed when building a shared library +set(HOST_LDFLAGS "-Wl,--version-script=$ENV{IMPERAS_HOME}/ImperasLib/source/buildutils/version.script") + +## This is needed by a platform executable +set(SIM_LDFLAGS $ENV{IMPERAS_HOME}/bin/$ENV{IMPERAS_ARCH}/libRuntimeLoader.so) + + + +message(STATUS "Fail* base dir included: ${FAIL_BASE}") +include_directories(${FAIL_BASE}) +include_directories($ENV{IMPERAS_HOME}/ImpPublic/include/host) + +set(CMAKE_C_COMPILER "gcc") +set(CMAKE_CXX_COMPILER "g++") + +#### Put resulting (model) library file in /lib #### + +set(SRCS + failSALlink.cc + armAttributeEntriesThumb16.h + armAttributeEntriesThumb32.h + armBitMacros.h + armBus.c + armConfig.h + armDebug.h + armDecodeEntriesThumb16.h + armDecodeEntriesThumb32.h + armDecode.h + armDecodeThumb.h + armDecodeTypes.h + armDisassembleFormats.h + armDisassemble.h + armEmit.h + armExceptions.h + armExceptionTypes.h + armFPConstants.h + armFunctions.h + armInfo.c + armmAttrs.c + armmConfigList.c + armmDebug.c + armmDecode.c + armmDecodeThumb.c + armmDisassemble.c + armmDoc.c + armmDoc.h + armmEmit.c + armMessage.h + armmExceptions.c + armmMain.c + armmMorphFunctions.c + armmMorphTable.c + armMode.h + armMorphEntries.h + armMorphFunctions.h + armMorph.h + armmParameters.c + armmParameters.h + armmSemiHost.c + armmSys.c + armmUtils.c + armmVFP.c + armmVM.c + armRegisters.h + armStructure.h + armSys.h + armSysRegisters.h + armTypeRefs.h + armUtils.h + armVariant.h + armVFP.h + armVM.h +) +add_definitions("-m32") +message(STATUS "armmModel ld flags: ${HOST_LDFLAGS}") +add_library(armmModel SHARED ${SRCS}) + +#add_dependencies(armmModel SAL) +set_target_properties(armmModel PROPERTIES LINK_FLAGS "${HOST_LDFLAGS} -m32") + +#target_link_libraries(armmModel ${IMPERAS_VMISTUBS} ${LIBRARY_OUTPUT_PATH}/libSAL.a) +target_link_libraries(armmModel ${IMPERAS_VMISTUBS}) + diff --git a/ovp/armmModel/Makefile b/ovp/armmModel/Makefile new file mode 100644 index 00000000..1401e03d --- /dev/null +++ b/ovp/armmModel/Makefile @@ -0,0 +1,5 @@ +IMPERAS_HOME := $(shell getpath.exe "$(IMPERAS_HOME)") + +LDFLAGS+=-lm + +include $(IMPERAS_HOME)/ImperasLib/source/buildutils/Makefile.host diff --git a/ovp/armmModel/armAttributeEntriesThumb16.h b/ovp/armmModel/armAttributeEntriesThumb16.h new file mode 100644 index 00000000..60e12051 --- /dev/null +++ b/ovp/armmModel/armAttributeEntriesThumb16.h @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_ATTRIBUTE_ENTRIES_THUMB16_H +#define ARM_ATTRIBUTE_ENTRIES_THUMB16_H + +#include "armDisassembleFormats.h" + +// +// Attribute entries for 16-bit Thumb instructions like ADC +// +#define ATTR_SET_16_ADC(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, f:SF_IT, r1:R3_0, r2:R3_3} + +// +// Attribute entries for 16-bit Thumb instructions like ADD (1) +// +#define ATTR_SET_16_ADD1(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_SIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, f:SF_IT, r1:R3_0, r2:R3_3, cs:CS_U_3_6} + +// +// Attribute entries for 16-bit Thumb instructions like ADD (2) +// +#define ATTR_SET_16_ADD2(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_SIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, f:SF_IT, r1:R3_8, cs:CS_U_8_0} + +// +// Attribute entries for 16-bit Thumb instructions like ADD (3) +// +#define ATTR_SET_16_ADD3(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, f:SF_IT, r1:R3_0, r2:R3_3, r3:R3_6} + +// +// Attribute entries for 16-bit Thumb instructions like ADD (4) +// +#define ATTR_SET_16_ADD4(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_0H7, r2:R4_3H6} + +// +// Attribute entries for 16-bit Thumb instructions like ADD (5) +// +#define ATTR_SET_16_ADD5(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_SIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R3_8, r2:R_PC, cs:CS_U_8_0x4} + +// +// Attribute entries for 16-bit Thumb instructions like ADD (6) +// +#define ATTR_SET_16_ADD6(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_SIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R3_8, r2:R_SP, cs:CS_U_8_0x4} + +// +// Attribute entries for 16-bit Thumb instructions like ADD (7) +// +#define ATTR_SET_16_ADD7(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_SIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R_SP, cs:CS_U_7_0x4} + +// +// Attribute entries for 16-bit Thumb instructions like ASR (1) +// +#define ATTR_SET_16_ASR1(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _SS) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_SIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, f:SF_IT, r1:R3_0, r2:R3_3, cs:CS_U_5_6, ss:_SS} + +// +// Attribute entries for 16-bit Thumb instructions like ASR (2) +// +#define ATTR_SET_16_ASR2(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _SS) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, f:SF_IT, r1:R3_0, r2:R3_3, ss:_SS} + +// +// Attribute entries for 16-bit Thumb instructions like MOV (2) +// +#define ATTR_SET_16_MOV2(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, f:SF_IT, r1:R3_0, r2:R3_3, cs:CS_U_5_6, ss:SS_LSL} + +// +// Attribute entries for 16-bit Thumb instructions like CMP (1) +// +#define ATTR_SET_16_CMP1(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_SIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, f:SF_I, r1:R3_8, cs:CS_U_8_0} + +// +// Attribute entries for 16-bit Thumb instructions like CMP (2) +// +#define ATTR_SET_16_CMP2(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, f:SF_I, r1:R3_0, r2:R3_3} + +// +// Attribute entries for 16-bit Thumb instructions like CMP (3) +// +#define ATTR_SET_16_CMP3(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, f:SF_I, r1:R4_0H7, r2:R4_3H6} + +// +// Attribute entries for 16-bit Thumb instructions like B (1) +// +#define ATTR_SET_16_B1(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_T, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, cond:CO_8, ts:TC_S8} + +// +// Attribute entries for 16-bit Thumb instructions like B (2) +// +#define ATTR_SET_16_B2(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_T, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, ts:TC_S11} + +// +// Attribute entries for 16-bit Thumb instructions like BLX (2) +// +#define ATTR_SET_16_BLX2(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_3H6} + +// +// Attribute entries for 16-bit Thumb instructions like SXTH +// +#define ATTR_SET_16_SXTH(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R3_0, r2:R3_3} + +// +// Attribute entries for 16-bit Thumb instructions like BKPT +// +#define ATTR_SET_16_BKPT(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_XIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, cs:CS_U_8_0} + +// +// Attribute entries for 16-bit Thumb instructions like SETEND +// +#define ATTR_SET_16_SETEND(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_ENDIAN, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, cs:CS_U_1_3} + +// +// Attribute entries for 16-bit Thumb instructions like CPS +// +#define ATTR_SET_16_CPS(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_FLAGS_OPT_MODE, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, imod:IS_4, aif:AIF_0} + +// +// Attribute entries for 16-bit Thumb instructions like CBNZ +// +#define ATTR_SET_16_CBNZ(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_T, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R3_0, ts:TC_U9_7_3} + +// +// Attribute entries for 16-bit Thumb instructions like LDMIA +// +#define ATTR_SET_16_LDMIA(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _RLIST, _INC, _UA45, _UA67) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_RLIST, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R3_8, wb:WB_1_NB, rList:_RLIST, incDec:_INC, ua45:_UA45, ua67:_UA67} + +// +// Attribute entries for 16-bit Thumb instructions like LDR (1) +// +#define ATTR_SET_16_LDR1(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_ADDR_R2_SIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R3_0, r2:R3_3, cs:CS_U_5_6_SZ, sz:_SZ, xs:_XS, ua45:_UA45, ua67:_UA67} + +// +// Attribute entries for 16-bit Thumb instructions like LDR (2) +// +#define ATTR_SET_16_LDR2(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_ADDR_R2_R3, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R3_0, r2:R3_3, r3:R3_6, sz:_SZ, xs:_XS, ua45:_UA45, ua67:_UA67} + +// +// Attribute entries for 16-bit Thumb instructions like LDR (3) +// +#define ATTR_SET_16_LDR3(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_ADDR_R2_SIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R3_8, r2:R_PC, cs:CS_U_8_0_SZ, sz:_SZ, xs:_XS, ua45:_UA45, ua67:_UA67} + +// +// Attribute entries for 16-bit Thumb instructions like LDR (4) +// +#define ATTR_SET_16_LDR4(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_ADDR_R2_SIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R3_8, r2:R_SP, cs:CS_U_8_0_SZ, sz:_SZ, xs:_XS, ua45:_UA45, ua67:_UA67} + +// +// Attribute entries for 16-bit Thumb instructions like POP +// +#define ATTR_SET_16_POP(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _RLIST, _INC, _UA45, _UA67) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_RLIST, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R_SP, pi:PI_1, wb:WB_1, rList:_RLIST, incDec:_INC, ua45:_UA45, ua67:_UA67} + +// +// Attribute entries for 16-bit Thumb instructions like STMIA +// +#define ATTR_SET_16_STMIA(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _RLIST, _INC, _UA45, _UA67) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_R1_RLIST_T, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R3_8, pi:PI_1, wb:WB_1, rList:_RLIST, incDec:_INC, ua45:_UA45, ua67:_UA67} + +// +// Attribute entries for 16-bit Thumb instructions like IT +// +#define ATTR_SET_16_IT(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_ITC, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, cs:CS_U_4_4, it:1} + +// +// Attribute entries for 16-bit Thumb instructions like NOP +// +#define ATTR_SET_16_NOP(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_NONE, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR} + +// +// Attribute entries for 16-bit Thumb instructions like BL_H10 +// +#define ATTR_SET_16_BL_H10(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_SIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, cs:CS_S_11_0S12} + +// +// Attribute entries for 16-bit Thumb instructions like BL_H11 +// +#define ATTR_SET_16_BL_H11(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT16_##_NAME] = {opcode:_OPCODE, format:FMT_UIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, cs:CS_U_11_0S1} + +// +// Attribute entry for undecoded 16-bit Thumb instruction +// +#define ATTR_SET_16_UNDECODED(_NAME) \ + [TT16_##_NAME] = {type:ARM_IT_LAST} + +#endif + diff --git a/ovp/armmModel/armAttributeEntriesThumb32.h b/ovp/armmModel/armAttributeEntriesThumb32.h new file mode 100644 index 00000000..4420b7e2 --- /dev/null +++ b/ovp/armmModel/armAttributeEntriesThumb32.h @@ -0,0 +1,635 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_ATTRIBUTE_ENTRIES_THUMB32_H +#define ARM_ATTRIBUTE_ENTRIES_THUMB32_H + +#include "armDisassembleFormats.h" + +// +// Attribute entries for 32-bit Thumb instructions like AND +// +#define ATTR_SET_32_AND(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME##_IMM] = {opcode:_OPCODE, format:FMT_R1_R2_UIMM, type:ARM_IT_##_NAME##_IMM, support:_SUPPORT, isar:_ISAR, f:SF_20_V, r1:R4_8, r2:R4_16, r3:0, cs:CS_MI, ss:0 }, \ + [TT32_##_NAME##_RM_SHFT_IMM] = {opcode:_OPCODE, format:FMT_R1_R2_R3_SHIFT_SIMM, type:ARM_IT_##_NAME##_RM_SHFT_IMM, support:_SUPPORT, isar:_ISAR, f:SF_20_V, r1:R4_8, r2:R4_16, r3:R4_0, cs:CS_PI5, ss:SS2_4 }, \ + [TT32_##_NAME##_RM_RRX] = {opcode:_OPCODE, format:FMT_R1_R2_R3_SHIFT, type:ARM_IT_##_NAME##_RM_RRX, support:_SUPPORT, isar:_ISAR, f:SF_20_V, r1:R4_8, r2:R4_16, r3:R4_0, cs:CS_NA, ss:SS_RRX} + +// +// Attribute entries for 32-bit Thumb instructions like TST +// +#define ATTR_SET_32_TST(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME##_IMM] = {opcode:_OPCODE, format:FMT_R1_UIMM, type:ARM_IT_##_NAME##_IMM, support:_SUPPORT, isar:_ISAR, f:SF_I, r1:R4_16, r2:0, cs:CS_MI, ss:0 }, \ + [TT32_##_NAME##_RM_SHFT_IMM] = {opcode:_OPCODE, format:FMT_R1_R2_SHIFT_SIMM, type:ARM_IT_##_NAME##_RM_SHFT_IMM, support:_SUPPORT, isar:_ISAR, f:SF_I, r1:R4_16, r2:R4_0, cs:CS_PI5, ss:SS2_4 }, \ + [TT32_##_NAME##_RM_RRX] = {opcode:_OPCODE, format:FMT_R1_R2_SHIFT, type:ARM_IT_##_NAME##_RM_RRX, support:_SUPPORT, isar:_ISAR, f:SF_I, r1:R4_16, r2:R4_0, cs:CS_NA, ss:SS_RRX} + +// +// Attribute entries for 32-bit Thumb instructions like MOV +// +#define ATTR_SET_32_MOV(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME##_IMM] = {opcode:_OPCODE, format:FMT_R1_UIMM, type:ARM_IT_##_NAME##_IMM, support:_SUPPORT, isar:_ISAR, f:SF_20_V, r1:R4_8, r2:0, cs:CS_MI, ss:0 }, \ + [TT32_##_NAME##_RM_SHFT_IMM] = {opcode:_OPCODE, format:FMT_R1_R2_SHIFT_SIMM, type:ARM_IT_##_NAME##_RM_SHFT_IMM, support:_SUPPORT, isar:_ISAR, f:SF_20_V, r1:R4_8, r2:R4_0, cs:CS_PI5, ss:SS2_4 }, \ + [TT32_##_NAME##_RM_RRX] = {opcode:_OPCODE, format:FMT_R1_R2_SHIFT, type:ARM_IT_##_NAME##_RM_RRX, support:_SUPPORT, isar:_ISAR, f:SF_20_V, r1:R4_8, r2:R4_0, cs:CS_NA, ss:SS_RRX} + +// +// Attribute entries for 32-bit Thumb instructions like PKHBT +// +#define ATTR_SET_32_PKHBT(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3_SHIFT_SIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0, cs:CS_PI5, ss:SS2_4} + +// +// Attribute entries for 32-bit Thumb instructions like ADD (plain binary immediate) +// +#define ATTR_SET_32_ADD_PI(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_UIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, cs:CS_PI12} + +// +// Attribute entries for 32-bit Thumb instructions like MOV (plain binary immediate) +// +#define ATTR_SET_32_MOV_PI(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_UIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_8, cs:CS_PI16} + +// +// Attribute entries for 32-bit Thumb instructions like SSAT +// +#define ATTR_SET_32_SSAT(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_WIDTH_R2_SHIFT_SIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, cs:CS_PI5, ss:SS2_20, w:WS_WIDTH5M1} + +// +// Attribute entries for 32-bit Thumb instructions like SSAT16 +// +#define ATTR_SET_32_SSAT16(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_WIDTH_R2, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, w:WS_WIDTH4M1} + +// +// Attribute entries for 32-bit Thumb instructions like USAT +// +#define ATTR_SET_32_USAT(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_WIDTH_R2_SHIFT_SIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, cs:CS_PI5, ss:SS2_20, w:WS_WIDTH5} + +// +// Attribute entries for 32-bit Thumb instructions like USAT16 +// +#define ATTR_SET_32_USAT16(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_WIDTH_R2, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, w:WS_WIDTH4} + +// +// Attribute entries for 32-bit Thumb instructions like SBFX +// +#define ATTR_SET_32_SBFX(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_LSB_WIDTH, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, cs:CS_PI5, w:WS_WIDTH5M1} + +// +// Attribute entries for 32-bit Thumb instructions like BFI +// +#define ATTR_SET_32_BFI(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_LSB_WIDTH, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, cs:CS_PI5, w:WS_MSB} + +// +// Attribute entries for 32-bit Thumb instructions like BFC +// +#define ATTR_SET_32_BFC(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_LSB_WIDTH, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_8, cs:CS_PI5, w:WS_MSB} + +// +// Attribute entries for 32-bit Thumb instructions like LSL +// +#define ATTR_SET_32_LSL(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, f:SF_20_V, r1:R4_8, r2:R4_16, r3:R4_0, ss:SS2_21} + +// +// Attribute entries for 32-bit Thumb instructions like SXTAH +// +#define ATTR_SET_32_SXTAH(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3_SHIFT_SIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0, cs:CS_U_2_4x8, ss:SS_ROR} + +// +// Attribute entries for 32-bit Thumb instructions like SXTH +// +#define ATTR_SET_32_SXTH(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_SHIFT_SIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_0, cs:CS_U_2_4x8, ss:SS_ROR} + +// +// Attribute entries for 32-bit Thumb parallel add/subtract instructions +// +#define ATTR_SET_32_PAS(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_S##_NAME] = {opcode:"s" _OPCODE, format:FMT_R1_R2_R3, type:ARM_IT_S##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0}, \ + [TT32_Q##_NAME] = {opcode:"q" _OPCODE, format:FMT_R1_R2_R3, type:ARM_IT_Q##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0}, \ + [TT32_SH##_NAME] = {opcode:"sh"_OPCODE, format:FMT_R1_R2_R3, type:ARM_IT_SH##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0}, \ + [TT32_U##_NAME] = {opcode:"u" _OPCODE, format:FMT_R1_R2_R3, type:ARM_IT_U##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0}, \ + [TT32_UQ##_NAME] = {opcode:"uq"_OPCODE, format:FMT_R1_R2_R3, type:ARM_IT_UQ##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0}, \ + [TT32_UH##_NAME] = {opcode:"uh"_OPCODE, format:FMT_R1_R2_R3, type:ARM_IT_UH##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0} + +// +// Attribute entries for 32-bit Thumb instructions like QADD +// +#define ATTR_SET_32_QADD(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_0, r3:R4_16} + +// +// Attribute entries for 32-bit Thumb instructions like CLZ +// +#define ATTR_SET_32_CLZ(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_0} + +// +// Attribute entries for 32-bit Thumb instructions like SEL +// +#define ATTR_SET_32_SEL(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0} + +// +// Attribute entries for 32-bit Thumb instructions like MLA +// +#define ATTR_SET_32_MLA(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0, r4:R4_12} + +// +// Attribute entries for 32-bit Thumb instructions like SMLAL +// +#define ATTR_SET_32_SMLAL(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_8, r3:R4_16, r4:R4_0} + +// +// Attribute entries for 32-bit Thumb instructions like MUL +// +#define ATTR_SET_32_MUL(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0} + +// +// Attribute entries for 32-bit Thumb instructions like SMLA +// +#define ATTR_SET_32_SMLA_XY(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME##BB] = {opcode:_OPCODE"bb", format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME##BB, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0, r4:R4_12}, \ + [TT32_##_NAME##BT] = {opcode:_OPCODE"bt", format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME##BT, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0, r4:R4_12}, \ + [TT32_##_NAME##TB] = {opcode:_OPCODE"tb", format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME##TB, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0, r4:R4_12}, \ + [TT32_##_NAME##TT] = {opcode:_OPCODE"tt", format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME##TT, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0, r4:R4_12} + +// +// Attribute entries for 32-bit Thumb instructions like SMUL +// +#define ATTR_SET_32_SMUL_XY(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME##BB] = {opcode:_OPCODE"bb", format:FMT_R1_R2_R3, type:ARM_IT_##_NAME##BB, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0}, \ + [TT32_##_NAME##BT] = {opcode:_OPCODE"bt", format:FMT_R1_R2_R3, type:ARM_IT_##_NAME##BT, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0}, \ + [TT32_##_NAME##TB] = {opcode:_OPCODE"tb", format:FMT_R1_R2_R3, type:ARM_IT_##_NAME##TB, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0}, \ + [TT32_##_NAME##TT] = {opcode:_OPCODE"tt", format:FMT_R1_R2_R3, type:ARM_IT_##_NAME##TT, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0} + +// +// Attribute entries for 32-bit Thumb instructions like SMLAL +// +#define ATTR_SET_32_SMLAL_XY(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME##BB] = {opcode:_OPCODE"bb", format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME##BB, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_8, r3:R4_16, r4:R4_0}, \ + [TT32_##_NAME##BT] = {opcode:_OPCODE"bt", format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME##BT, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_8, r3:R4_16, r4:R4_0}, \ + [TT32_##_NAME##TB] = {opcode:_OPCODE"tb", format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME##TB, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_8, r3:R4_16, r4:R4_0}, \ + [TT32_##_NAME##TT] = {opcode:_OPCODE"tt", format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME##TT, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_8, r3:R4_16, r4:R4_0} + +// +// Attribute entries for 32-bit Thumb instructions like SMLAD +// +#define ATTR_SET_32_SMLAD(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0, r4:R4_12}, \ + [TT32_##_NAME##X] = {opcode:_OPCODE"x", format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME##X, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0, r4:R4_12} + +// +// Attribute entries for 32-bit Thumb instructions like SMUAD +// +#define ATTR_SET_32_SMUAD(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0}, \ + [TT32_##_NAME##X] = {opcode:_OPCODE"x", format:FMT_R1_R2_R3, type:ARM_IT_##_NAME##X, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0} + +// +// Attribute entries for DSP instructions like SMLAW +// +#define ATTR_SET_32_SMLAW(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME##B] = {opcode:_OPCODE"b", format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME##B, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0, r4:R4_12}, \ + [TT32_##_NAME##T] = {opcode:_OPCODE"t", format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME##T, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0, r4:R4_12} + +// +// Attribute entries for DSP instructions like SMULW +// +#define ATTR_SET_32_SMULW(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME##B] = {opcode:_OPCODE"b", format:FMT_R1_R2_R3, type:ARM_IT_##_NAME##B, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0}, \ + [TT32_##_NAME##T] = {opcode:_OPCODE"t", format:FMT_R1_R2_R3, type:ARM_IT_##_NAME##T, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0} + +// +// Attribute entries for instructions like SMMLA +// +#define ATTR_SET_32_SMMLA(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0, r4:R4_12}, \ + [TT32_##_NAME##R] = {opcode:_OPCODE"r", format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME##R, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0, r4:R4_12} + +// +// Attribute entries for instructions like SMMUL +// +#define ATTR_SET_32_SMMUL(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0}, \ + [TT32_##_NAME##R] = {opcode:_OPCODE"r", format:FMT_R1_R2_R3, type:ARM_IT_##_NAME##R, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_16, r3:R4_0} + +// +// Attribute entries for 32-bit Thumb instructions like SMLALD +// +#define ATTR_SET_32_SMLALD(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_8, r3:R4_16, r4:R4_0}, \ + [TT32_##_NAME##X] = {opcode:_OPCODE"x", format:FMT_R1_R2_R3_R4, type:ARM_IT_##_NAME##X, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_8, r3:R4_16, r4:R4_0} + +// +// Attribute entries for 32-bit Thumb instructions like B (1) +// +#define ATTR_SET_32_B1(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_T, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, cond:CO_22, ts:TC_S20_T2} + +// +// Attribute entries for 32-bit Thumb instructions like BL +// +#define ATTR_SET_32_BL(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_T, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, ts:TC_S24_T2} + +// +// Attribute entries for 32-bit Thumb instructions like BLX +// +#define ATTR_SET_32_BLX(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_T, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, ts:TC_S24_T4} + +// +// Attribute entries for 32-bit Thumb instructions like BXJ +// +#define ATTR_SET_32_BXJ(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_16} + +// +// Attribute entries for 32-bit Thumb instructions like MSR +// +#define ATTR_SET_32_MSR(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_SR_R1, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_16, cs:CS_U_8_0, mask:MSRMASK_10} + +// +// Attribute entries for 32-bit Thumb instructions like MRS +// +#define ATTR_SET_32_MRS(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_SR, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, cs:CS_U_8_0} + +// +// Attribute entries for 32-bit Thumb instructions like DSB +// +#define ATTR_SET_32_DSB(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_LIM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, cs:CS_U_4_0} + +// +// Attribute entries for 32-bit Thumb instructions like SUBS_PC_LR +// +#define ATTR_SET_32_SUBS_PC_LR(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_SIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, f:SF_V, r1:R_PC, r2:R_LR, cs:CS_U_8_0} + +// +// Attribute entries for 32-bit Thumb instructions like CPS +// +#define ATTR_SET_32_CPS(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_FLAGS_OPT_MODE, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, cs:CS_U_5_0, imod:IS_9, m:1, aif:AIF_5} + +// +// Attribute entries for 32-bit Thumb instructions like NOP +// +#define ATTR_SET_32_NOP(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_NONE, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR} + +// +// Attribute entries for 32-bit Thumb instructions like DBG +// +#define ATTR_SET_32_DBG(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_UIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, cs:CS_U_4_0} + +// +// Attribute entries for 32-bit Thumb instructions like SRS +// +#define ATTR_SET_32_SRS(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _INCDEC, _UA45, _UA67) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_WB_UIMM, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R_SP, cs:CS_U_5_0, wb:WB_21, incDec:_INCDEC, ua45:_UA45, ua67:_UA67} + +// +// Attribute entries for 32-bit Thumb instructions like RFE +// +#define ATTR_SET_32_RFE(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _INCDEC, _UA45, _UA67) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_WB, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_16, wb:WB_21, incDec:_INCDEC, ua45:_UA45, ua67:_UA67} + +// +// Attribute entries for 32-bit Thumb instructions like LDM +// +#define ATTR_SET_32_LDM(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _INCDEC, _RLIST, _UA45, _UA67) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_RLIST, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_16, wb:WB_21, rList:_RLIST, incDec:_INCDEC, ua45:_UA45, ua67:_UA67} + +// +// Attribute entries for 32-bit Thumb instructions like POPM +// +#define ATTR_SET_32_POPM(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _INCDEC, _RLIST, _UA45, _UA67) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_RLIST, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_16, wb:WB_21, rList:_RLIST, incDec:_INCDEC, ua45:_UA45, ua67:_UA67} + +// +// Attribute entries for 32-bit Thumb instructions like LDRD_IMM +// +#define ATTR_SET_32_LDRD_IMM(_NAME, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R4_ADDR_R2_SIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_16, r4:R4_8, cs:CS_U_8_0x4_U, sz:_SZ, xs:_XS, pi:PI_24, wb:WB_21, ua45:_UA45, ua67:_UA67, u:US_23} + +// +// Attribute entries for 32-bit Thumb instructions like LDREX +// +#define ATTR_SET_32_LDREX(_NAME, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_ADDR_R2_SIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_16, cs:CS_U_8_0_SZ, sz:_SZ, xs:_XS, ua45:_UA45, ua67:_UA67, ea:1} + +// +// Attribute entries for 32-bit Thumb instructions like LDREXB +// +#define ATTR_SET_32_LDREXB(_NAME, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_ADDR_R2_SIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_16, sz:_SZ, xs:_XS, ua45:_UA45, ua67:_UA67, ea:1} + +// +// Attribute entries for 32-bit Thumb instructions like LDREXD +// +#define ATTR_SET_32_LDREXD(_NAME, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R4_ADDR_R2_SIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_16, r4:R4_8, sz:_SZ, xs:_XS, ua45:_UA45, ua67:_UA67, ea:1} + +// +// Attribute entries for 32-bit Thumb instructions like STREX +// +#define ATTR_SET_32_STREX(_NAME, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_ADDR_R3_SIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_8, r2:R4_12, r3:R4_16, cs:CS_U_8_0_SZ, sz:_SZ, xs:_XS, ua45:_UA45, ua67:_UA67, ea:1} + +// +// Attribute entries for 32-bit Thumb instructions like STREXB +// +#define ATTR_SET_32_STREXB(_NAME, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_ADDR_R3_SIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_0, r2:R4_12, r3:R4_16, sz:_SZ, xs:_XS, ua45:_UA45, ua67:_UA67, ea:1} + +// +// Attribute entries for 32-bit Thumb instructions like STREXD +// +#define ATTR_SET_32_STREXD(_NAME, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_R4_ADDR_R3_SIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_0, r2:R4_12, r3:R4_16, r4:R4_8, sz:_SZ, xs:_XS, ua45:_UA45, ua67:_UA67, ea:1} + +// +// Attribute entries for 32-bit Thumb instructions like TBB +// +#define ATTR_SET_32_TBB(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:ADDR_R1_R2_SZSHIFT, type:ARM_IT_##_TYPE, support:_SUPPORT, isar:_ISAR, r1:R4_16, r2:R4_0, sz:_SZ, xs:_XS, ua45:_UA45, ua67:_UA67} + +// +// Attribute entries for 32-bit Thumb instructions like LDR +// +#define ATTR_SET_32_LDR(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT32_##_NAME##_IMM1] = {opcode:_OPCODE, format:FMT_R1_ADDR_R2_SIMM, type:ARM_IT_##_TYPE##_IMM, support:_SUPPORT, isar:ARM_ISAR_NA, r1:R4_12, r2:R4_16, r3:0, cs:CS_U_12_0, ss:0, sz:_SZ, xs:_XS, tl:0, pi:0, wb:0, ua45:_UA45, ua67:_UA67, u:0 }, \ + [TT32_##_NAME##_IMM2] = {opcode:_OPCODE, format:FMT_R1_ADDR_R2_SIMM, type:ARM_IT_##_TYPE##_IMM, support:_SUPPORT, isar:ARM_ISAR_NA, r1:R4_12, r2:R4_16, r3:0, cs:CS_U_8_0_U, ss:0, sz:_SZ, xs:_XS, tl:0, pi:PI_10, wb:WB_8, ua45:_UA45, ua67:_UA67, u:US_9 }, \ + [TT32_##_NAME##_IMM3] = {opcode:_OPCODE, format:FMT_R1_ADDR_R2_SIMM, type:ARM_IT_##_TYPE##_IMM, support:_SUPPORT, isar:ARM_ISAR_NA, r1:R4_12, r2:R4_16, r3:0, cs:CS_U_12_0_U, ss:0, sz:_SZ, xs:_XS, tl:0, pi:0, wb:0, ua45:_UA45, ua67:_UA67, u:US_23}, \ + [TT32_##_NAME##_RM] = {opcode:_OPCODE, format:FMT_R1_ADDR_R2_R3, type:ARM_IT_##_TYPE##_RM, support:_SUPPORT, isar:ARM_ISAR_NA, r1:R4_12, r2:R4_16, r3:R4_0, cs:0, ss:0, sz:_SZ, xs:_XS, tl:0, pi:0, wb:0, ua45:_UA45, ua67:_UA67, u:0 }, \ + [TT32_##_NAME##_RM_SHFT_IMM] = {opcode:_OPCODE, format:FMT_R1_ADDR_R2_R3_SHIFT_SIMM, type:ARM_IT_##_TYPE##_RM_SHFT_IMM, support:_SUPPORT, isar:ARM_ISAR_NA, r1:R4_12, r2:R4_16, r3:R4_0, cs:CS_U_2_4, ss:SS_LSL, sz:_SZ, xs:_XS, tl:0, pi:0, wb:0, ua45:_UA45, ua67:_UA67, u:0 }, \ + [TT32_##_NAME##T_IMM] = {opcode:_OPCODE, format:FMT_R1_ADDR_R2_SIMM, type:ARM_IT_##_TYPE##T_IMM, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_16, r3:0, cs:CS_U_8_0_U, ss:0, sz:_SZ, xs:_XS, tl:1, pi:PI_10, wb:WB_8, ua45:_UA45, ua67:_UA67, u:US_9 } + +// +// Attribute entries for 32-bit Thumb instructions like PLD +// +#define ATTR_SET_32_PLD(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE, _SZ, _XS, _UA45, _UA67) \ + [TT32_##_NAME##_IMM1] = {opcode:_OPCODE, format:FMT_ADDR_R1_SIMM, type:ARM_IT_##_TYPE##_IMM, support:_SUPPORT, isar:_ISAR, r1:R4_16, r2:0, cs:CS_U_12_0, ss:0, sz:_SZ, xs:_XS, pi:0, wb:0, ua45:_UA45, ua67:_UA67, u:0 }, \ + [TT32_##_NAME##_IMM2] = {opcode:_OPCODE, format:FMT_ADDR_R1_SIMM, type:ARM_IT_##_TYPE##_IMM, support:_SUPPORT, isar:_ISAR, r1:R4_16, r2:0, cs:CS_U_8_0_U, ss:0, sz:_SZ, xs:_XS, pi:PI_10, wb:WB_8, ua45:_UA45, ua67:_UA67, u:US_9 }, \ + [TT32_##_NAME##_IMM3] = {opcode:_OPCODE, format:FMT_ADDR_R1_SIMM, type:ARM_IT_##_TYPE##_IMM, support:_SUPPORT, isar:_ISAR, r1:R4_16, r2:0, cs:CS_U_12_0_U, ss:0, sz:_SZ, xs:_XS, pi:0, wb:0, ua45:_UA45, ua67:_UA67, u:US_23}, \ + [TT32_##_NAME##_RM] = {opcode:_OPCODE, format:FMT_ADDR_R1_R2, type:ARM_IT_##_TYPE##_RM, support:_SUPPORT, isar:_ISAR, r1:R4_16, r2:R4_0, cs:0, ss:0, sz:_SZ, xs:_XS, pi:0, wb:0, ua45:_UA45, ua67:_UA67, u:0 }, \ + [TT32_##_NAME##_RM_SHFT_IMM] = {opcode:_OPCODE, format:FMT_ADDR_R1_R2_SHIFT_SIMM, type:ARM_IT_##_TYPE##_RM_SHFT_IMM, support:_SUPPORT, isar:_ISAR, r1:R4_16, r2:R4_0, cs:CS_U_2_4, ss:SS_LSL, sz:_SZ, xs:_XS, pi:0, wb:0, ua45:_UA45, ua67:_UA67, u:0 } + +// +// Attribute entries for 32-bit Thumb instructions like UHINTH +// +#define ATTR_SET_32_UHINTH(_NAME, _TYPE, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_NONE, type:ARM_IT_NOP, support:_SUPPORT, isar:_ISAR} + +// +// Attribute entries for 32-bit Thumb undefined instructions +// +#define ATTR_SET_32_UND(_NAME, _SUPPORT, _ISAR) \ + [TT32_##_NAME] = {type:ARM_IT_LAST, support:_SUPPORT, isar:_ISAR} + +// +// Attribute entries for 32-bit Thumb instructions like CDP +// +#define ATTR_SET_32_CDP(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_CPNUM_COP1_CR1_CR2_CR3_COP2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, cond:CO_28, r1:R4_12, r2:R4_16, r3:R4_0, cpNum:1, cpOp1:COP_4_20, cpOp2:1} + +// +// Attribute entries for 32-bit Thumb instructions like CDP2 +// +#define ATTR_SET_32_CDP2(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_CPNUM_COP1_CR1_CR2_CR3_COP2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_16, r3:R4_0, cpNum:1, cpOp1:COP_4_20, cpOp2:1} + +// +// Attribute entries for 32-bit Thumb instructions like LDC +// +#define ATTR_SET_32_LDC(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME##_IMM] = {opcode:_OPCODE, format:FMT_CPNUM_CR1_SIMM, type:ARM_IT_##_NAME##_IMM, support:_SUPPORT, isar:_ISAR, cond:CO_28, r1:R4_12, r2:R4_16, cs:CS_U_8_0x4_U, pi:PI_24, wb:WB_21, ll:1, cpNum:1, u:US_23}, \ + [TT32_##_NAME##_UNINDEXED] = {opcode:_OPCODE, format:FMT_CPNUM_CR1_UNINDEXED, type:ARM_IT_##_NAME##_UNINDEXED, support:_SUPPORT, isar:_ISAR, cond:CO_28, r1:R4_12, r2:R4_16, cs:CS_U_8_0, pi:PI_24, wb:WB_21, ll:1, cpNum:1, u:0 } + +// +// Attribute entries for 32-bit Thumb instructions like LDC2 +// +#define ATTR_SET_32_LDC2(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME##_IMM] = {opcode:_OPCODE, format:FMT_CPNUM_CR1_SIMM, type:ARM_IT_##_NAME##_IMM, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_16, cs:CS_U_8_0x4_U, pi:PI_24, wb:WB_21, ll:1, cpNum:1, u:US_23}, \ + [TT32_##_NAME##_UNINDEXED] = {opcode:_OPCODE, format:FMT_CPNUM_CR1_UNINDEXED, type:ARM_IT_##_NAME##_UNINDEXED, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_16, cs:CS_U_8_0, pi:PI_24, wb:WB_21, ll:1, cpNum:1, u:0 } + +// +// Attribute entries for 32-bit Thumb instructions like MCR +// +#define ATTR_SET_32_MCR(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_CPNUM_COP1_R1_CR2_CR3_COP2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, cond:CO_28, r1:R4_12, r2:R4_16, r3:R4_0, cpNum:1, cpOp1:COP_3_21, cpOp2:1} + +// +// Attribute entries for 32-bit Thumb instructions like MCR2 +// +#define ATTR_SET_32_MCR2(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_CPNUM_COP1_R1_CR2_CR3_COP2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_16, r3:R4_0, cpNum:1, cpOp1:COP_3_21, cpOp2:1} + +// +// Attribute entries for 32-bit Thumb instructions like MRC +// +#define ATTR_SET_32_MRC(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_CPNUM_COP1_R1F_CR2_CR3_COP2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, cond:CO_28, r1:R4_12, r2:R4_16, r3:R4_0, cpNum:1, cpOp1:COP_3_21, cpOp2:1} + +// +// Attribute entries for 32-bit Thumb instructions like MRC2 +// +#define ATTR_SET_32_MRC2(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_CPNUM_COP1_R1F_CR2_CR3_COP2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_16, r3:R4_0, cpNum:1, cpOp1:COP_3_21, cpOp2:1} + +// +// Attribute entries for instructions like MCRR +// +#define ATTR_SET_32_MCRR(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_CPNUM_COP1_R1_R2_CR3, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, cond:CO_28, r1:R4_12, r2:R4_16, r3:R4_0, cpNum:1, cpOp1:COP_4_4} + +// +// Attribute entries for instructions like MCRR2 +// +#define ATTR_SET_32_MCRR2(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_CPNUM_COP1_R1_R2_CR3, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_16, r3:R4_0, cpNum:1, cpOp1:COP_4_4} + +// +// Attribute entries for instructions like VMRS +// +#define ATTR_SET_32_VMRS(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_FPSCR, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12} + +// +// Attribute entries for instructions like VMSR +// +#define ATTR_SET_32_VMSR(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_FPSCR_R1, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12} + +// +// Attribute entries for instructions like VMOVRS +// +#define ATTR_SET_32_VMOVRS(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_S2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:V_16_7} + +// +// Attribute entries for instructions like VMOVSR +// +#define ATTR_SET_32_VMOVSR(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_S1_R2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:V_16_7, r2:R4_12} + +// +// Attribute entries for instructions VMOVZR +// +#define ATTR_SET_32_VMOVZR(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_Z1_R2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:V_7_16, r2:R4_12, index:IDX_21} + +// +// Attribute entries for instructions VMOVRZ +// +#define ATTR_SET_32_VMOVRZ(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME ] = {opcode:_OPCODE, format:FMT_R1_Z2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:V_7_16, index:IDX_21} + +// +// Attribute entries for instructions like VMOVRRD +// +#define ATTR_SET_32_VMOVRRD(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_D3, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_16, r3:V_5_0} + +// +// Attribute entries for instructions like VMOVDRR +// +#define ATTR_SET_32_VMOVDRR(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_D1_R2_R3, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:V_5_0, r2:R4_12, r3:R4_16} + +// +// Attribute entries for instructions like VMOVRRSS +// +#define ATTR_SET_32_VMOVRRSS(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_R1_R2_SS3, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:R4_12, r2:R4_16, r3:V_0_5} + +// +// Attribute entries for instructions like VMOVSSRR +// +#define ATTR_SET_32_VMOVSSRR(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_SS1_R2_R3, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, r1:V_0_5, r2:R4_12, r3:R4_16} + +// +// Attribute entries for SIMD/VFP load/store multiple instructions w/ 1 arm reg and a reg list (initial reg + number of consecutive regs) +// D/S versions +// +#define ATTR_SET_32_SDFP_LDSTM(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME##_D] = {opcode:_OPCODE, format:FMT_R1_SIMD_RL, type:ARM_IT_##_NAME##_D, support:_SUPPORT, isar:_ISAR, r1:R4_16, r2:V_22_12, nregs:NREG_7_1, incDec:ID_U_P, wb:WB_21, ua67:ARM_UA_DABORT}, \ + [TT32_##_NAME##_S] = {opcode:_OPCODE, format:FMT_R1_VFP_RL, type:ARM_IT_##_NAME##_S, support:_SUPPORT, isar:_ISAR, r1:R4_16, r2:V_12_22, nregs:NREG_8_0, incDec:ID_U_P, wb:WB_21, ua67:ARM_UA_DABORT} + +// +// Attribute entries for SIMD/VFP load/store instructions w/ 1 reg and 1 arm reg and an immediate +// D/S versions +// +#define ATTR_SET_32_SDFP_LDST(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME##_D] = {opcode:_OPCODE, format:FMT_D1_ADDR_R2_SIMM, type:ARM_IT_##_NAME##_D, support:_SUPPORT, isar:_ISAR, r1:V_22_12, r2:R4_16, cs:CS_U_8_0x4_U, u:US_23, ua67:ARM_UA_DABORT}, \ + [TT32_##_NAME##_S] = {opcode:_OPCODE, format:FMT_S1_ADDR_R2_SIMM, type:ARM_IT_##_NAME##_S, support:_SUPPORT, isar:_ISAR, r1:V_12_22, r2:R4_16, cs:CS_U_8_0x4_U, u:US_23, ua67:ARM_UA_DABORT} + +// +// Attribute entries for SIMD/VFP push/pop instructions w/ arm reg SP and a reg list (initial reg + number of consecutive regs) +// D/S versions +// +#define ATTR_SET_32_SDFP_PUSH(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME##_D] = {opcode:_OPCODE, format:FMT_SIMD_RL, type:ARM_IT_##_NAME##_D, support:_SUPPORT, isar:_ISAR, r1:R4_16, r2:V_22_12, nregs:NREG_7_1, incDec:ID_U_P_IMP, wb:WB_21, ua67:ARM_UA_DABORT}, \ + [TT32_##_NAME##_S] = {opcode:_OPCODE, format:FMT_VFP_RL, type:ARM_IT_##_NAME##_S, support:_SUPPORT, isar:_ISAR, r1:R4_16, r2:V_12_22, nregs:NREG_8_0, incDec:ID_U_P_IMP, wb:WB_21, ua67:ARM_UA_DABORT} + +// +// Attribute entries for VFP data processing instructions w/ 3 regs same length: +// +#define ATTR_SET_32_VFP_RRR(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_S1_S2_S3, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, dt1:ARM_SDFPT_F32, r1:V_12_22, r2:V_16_7, r3:V_0_5} + +// +// Attribute entries for VFP data processing instructions w/ 2 regs same length: +// +#define ATTR_SET_32_VFP_RR(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_S1_S2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, dt1:ARM_SDFPT_F32, r1:V_12_22, r2:V_0_5} + +// +// Attribute entries for VFP data processing instructions w/ 1 reg and modified immediate: +// Note: immediate value 'abcdefgh' is in c (for disassembly purposes). Must still be converted to modified imm value at morph time +// +#define ATTR_SET_32_VFP_RI(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_S1_SDFP_MI, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, dt1:ARM_SDFPT_F32, r1:V_12_22, sdfpMI:SDFP_MI_VFP_S} + +// +// Attribute entries for VFP data processing instructions w/ 2 regs same length: +// S version only 2 dt1 sizes specified +// +#define ATTR_SET_32_VFP_RR_S_S2(_NAME, _SUPPORT, _ISAR, _OPCODE, _S1, _S2) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_S1_S2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, dt1:ARM_SDFPT_F##_S1, dt2:ARM_SDFPT_F##_S2, r1:V_12_22, r2:V_0_5} + +// +// Attribute entries for VFP data processing instructions w/ 1 reg and implied immediate 0.0 value +// +#define ATTR_SET_32_VFP_R0(_NAME, _SUPPORT, _ISAR, _OPCODE) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_S1_F0, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, dt1:ARM_SDFPT_F32, r1:V_12_22, r2:V_0_5} + +// +// Attribute entries for VFP data processing instructions w/ 2 regs SS: Type for dt2 specified +// +#define ATTR_SET_32_VFP_LS_T(_NAME, _SUPPORT, _ISAR, _OPCODE, _T) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_S1_S2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, dt1:ARM_SDFPT_F32, dt2:ARM_SDFPT##_T##32, r1:V_12_22, r2:V_0_5} + +// +// Attribute entries for VFP data processing instructions w/ 2 regs SS: Type for dt1 specified +// +#define ATTR_SET_32_VFP_NS_T(_NAME, _SUPPORT, _ISAR, _OPCODE, _T) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_S1_S2, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, dt1:ARM_SDFPT##_T##32, dt2:ARM_SDFPT_F32, r1:V_12_22, r2:V_0_5} + +// +// Attribute entries for VFP data processing instructions w/ 1 reg and an immediate: +// 2 ftypes with sizes specified A modifier for the constant specified +// +#define ATTR_SET_32_VFP_RI_T2C(_NAME, _SUPPORT, _ISAR, _OPCODE, _TS1, _TS2, _C) \ + [TT32_##_NAME] = {opcode:_OPCODE, format:FMT_S1_S2_UIMM, type:ARM_IT_##_NAME, support:_SUPPORT, isar:_ISAR, dt1:ARM_SDFPT##_TS1, dt2:ARM_SDFPT##_TS2, r1:V_12_22, r2:V_12_22, cs:CS_U_5_0_5M##_C} + + +#endif + diff --git a/ovp/armmModel/armBitMacros.h b/ovp/armmModel/armBitMacros.h new file mode 100644 index 00000000..823d200a --- /dev/null +++ b/ovp/armmModel/armBitMacros.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_BIT_MACROS_H +#define ARM_BIT_MACROS_H + +// +// mask the argument _ARG to be _BITS bits wide +// +#define WIDTH(_BITS, _ARG) ((_ARG)&((1<<(_BITS))-1)) + +#endif diff --git a/ovp/armmModel/armBus.c b/ovp/armmModel/armBus.c new file mode 100644 index 00000000..e77ea25f --- /dev/null +++ b/ovp/armmModel/armBus.c @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + +// VMI header files +#include "vmi/vmiMessage.h" +#include "vmi/vmiRt.h" + +// model header files +#include "armFunctions.h" + +static vmiBusPort busPorts[] = { + {"INSTRUCTION", vmi_BP_MASTER, vmi_DOM_CODE, 32, 1 }, + {"DATA" , vmi_BP_MASTER, vmi_DOM_DATA, 32, 0 }, + { 0 } +}; + +// +// Get the next bus port +// +VMI_BUS_PORT_SPECS_FN(armGetBusPortSpec) { + if (!prev) { + return busPorts; + } + prev++; + if (prev->name) { + return prev; + } + return 0; +} + diff --git a/ovp/armmModel/armConfig.h b/ovp/armmModel/armConfig.h new file mode 100644 index 00000000..e79a7e7f --- /dev/null +++ b/ovp/armmModel/armConfig.h @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_CONFIG_H +#define ARM_CONFIG_H + +// basic number types +#include "hostapi/impTypes.h" + +// model header files +#include "armSysRegisters.h" +#include "armTypeRefs.h" +#include "armVariant.h" + +// +// Use this to define a write mask entry in the structure below +// +#define SCS_MASK_DECL(_N) union { \ + Uns32 value32; \ + SCS_REG_STRUCT_DECL(_N) fields; \ +} _N + +// +// This structure hold configuration information about an ARM variant +// +typedef struct armConfigS { + + // name of configuration + const char *name; + + // configuration not held in system registers + armArchitecture arch :16; // specific ISA supported + Uns32 numInterrupts :16; // number of external interrupt lines + Uns32 ERG : 4; // exclusives reservation granule + Bool rotateUnaligned: 1; // rotate unaligned LDR/LDRT/SWP? + Bool align64as32 : 1; // align 64-bit load/store on 32-bit + Bool STRoffsetPC12 : 1; // STR/STM store PC with offset 12? + Uns32 priorityBitsM1 : 3; // number of priority bits, minus 1 + + // default values for system registers + struct { + SCS_REG_DECL(ICTR); + SCS_REG_DECL(ACTLR); + SCS_REG_DECL(CPUID); + SCS_REG_DECL(CPACR); + SCS_REG_DECL(SYST_CALIB); + SCS_REG_DECL(ID_PFR0); + SCS_REG_DECL(ID_PFR1); + SCS_REG_DECL(ID_DFR0); + SCS_REG_DECL(ID_AFR0); + SCS_REG_DECL(ID_MMFR0); + SCS_REG_DECL(ID_MMFR1); + SCS_REG_DECL(ID_MMFR2); + SCS_REG_DECL(ID_MMFR3); + SCS_REG_DECL(ID_ISAR0); + SCS_REG_DECL(ID_ISAR1); + SCS_REG_DECL(ID_ISAR2); + SCS_REG_DECL(ID_ISAR3); + SCS_REG_DECL(ID_ISAR4); + SCS_REG_DECL(ID_ISAR5); + SCS_REG_DECL(MVFR0); + SCS_REG_DECL(MVFR1); + SCS_REG_DECL(MPU_TYPE); + } regDefaults; + + // write masks for system registers + struct { + SCS_MASK_DECL(CPACR); + } regMasks; + +} armConfig; + +DEFINE_CS(armConfig); + +// +// This specifies configuration information for each supported variant +// +extern const struct armConfigS armConfigTable[]; + +// +// Predicates for system features +// + +// is MPU enabled? +#define MPU_ENABLED(_A) SCS_FIELD(_A, MPU_CONTROL, ENABLE) + +// is MPU unified? +#define MPU_UNIFIED(_A) (!SCS_FIELD(_A, MPU_TYPE, SEPARATE)) + +// is MPU present? +#define MPU_PRESENT(_A) SCS_FIELD(_A, MPU_TYPE, DREGION) +#define MPUS_PRESENT(_A) (MPU_PRESENT(_A) && !MPU_UNIFIED(_A)) + + +// is alignment checking enabled? +#define ALIGN_ENABLED(_A) SCS_FIELD(_A, CCR, UNALIGN_TRP) +#define DO_UNALIGNED(_A) !ALIGN_ENABLED(_A) + +// is Jazelle present? +#define JAZELLE_PRESENT(_A) ARM_SUPPORT((_A)->configInfo.arch, ARM_J) + +// get number of priority bits supported +#define PRIORITY_BITS(_A) ((_A)->configInfo.priorityBitsM1+1) + +// get number of interrupt lines +#define NUM_INTERRUPTS(_A) ((_A)->configInfo.numInterrupts) + +// is FPU present? +#define FPU_PRESENT(_A) SCS_FIELD((_A), MVFR0, A_SIMD_Registers) + +// is DSP present? +#define DSP_PRESENT(_A) (SCS_FIELD((_A), ID_ISAR3, SIMD_instrs)>2) + +#endif + diff --git a/ovp/armmModel/armDebug.h b/ovp/armmModel/armDebug.h new file mode 100644 index 00000000..fda62474 --- /dev/null +++ b/ovp/armmModel/armDebug.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_DEBUG_H +#define ARM_DEBUG_H + +// model header files +#include "armTypeRefs.h" + +// +// Add programmer's view of all system registers +// +void armAddSysRegistersView(armP arm, vmiViewObjectP processorObject); + +#endif diff --git a/ovp/armmModel/armDecode.h b/ovp/armmModel/armDecode.h new file mode 100644 index 00000000..be88ac5a --- /dev/null +++ b/ovp/armmModel/armDecode.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_DECODE_H +#define ARM_DECODE_H + +// basic number types +#include "hostapi/impTypes.h" + +// model header files +#include "armDecodeTypes.h" +#include "armTypeRefs.h" + +// +// Decode the instruction at the passed address. The 'info' structure is filled +// with details of the instruction. +// +void armDecode(armP arm, Uns32 thisPC, armInstructionInfoP info); + +// +// Return the size of the instruction at the passed address and the mode +// +Uns32 armGetInstructionSizeMode(armP arm, Uns32 thisPC, Bool isThumb); + +// +// Return the size of the instruction at the passed address +// +Uns32 armGetInstructionSize(armP arm, Uns32 thisPC); + +#endif + diff --git a/ovp/armmModel/armDecodeEntriesThumb16.h b/ovp/armmModel/armDecodeEntriesThumb16.h new file mode 100644 index 00000000..a5f040fa --- /dev/null +++ b/ovp/armmModel/armDecodeEntriesThumb16.h @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_DECODE_ENTRIES_THUMB16_H +#define ARM_DECODE_ENTRIES_THUMB16_H + +// VMI header files +#include "vmi/vmiDecode.h" + +// +// This macro adds a decode table entry for a 16-bit Thumb instruction class +// +#define DECODE_TT16(_PRIORITY, _NAME, _PATTERN) \ + {type:TT16_##_NAME, priority:_PRIORITY, name:#_NAME"_T", pattern:_PATTERN} + +// +// Decode entries for 16-bit Thumb instructions like ADC +// +#define DECODE_SET_16_ADC(_NAME, _OP) \ + DECODE_TT16(1, _NAME, "|"_OP"|...|...|") + +// +// Decode entries for 16-bit Thumb instructions like ADD (1) +// +#define DECODE_SET_16_ADD1(_NAME, _OP) \ + DECODE_TT16(0, _NAME, "|"_OP"|...|...|...|") + +// +// Decode entries for 16-bit Thumb instructions like ADD (2) +// +#define DECODE_SET_16_ADD2(_NAME, _OP) \ + DECODE_TT16(0, _NAME, "|"_OP"|...|........|") + +// +// Decode entries for 16-bit Thumb instructions like ADD (4) +// +#define DECODE_SET_16_ADD4(_NAME, _OP) \ + DECODE_TT16(1, _NAME, "|"_OP"|...|...|") + +// +// Decode entries for 16-bit Thumb instructions like ADD (7) +// +#define DECODE_SET_16_ADD7(_NAME, _OP) \ + DECODE_TT16(0, _NAME, "|"_OP"|.......|") + +// +// Decode entries for 16-bit Thumb instructions like ASR (1) +// +#define DECODE_SET_16_ASR1(_NAME, _OP) \ + DECODE_TT16(0, _NAME, "|"_OP"|.....|...|...|") + +// +// Decode entries for 16-bit Thumb instructions like B (1) +// +#define DECODE_SET_16_B1(_NAME, _OP) \ + DECODE_TT16(0, _NAME, "|1101|" _OP "|........|") + +// +// Decode entries for 16-bit Thumb instructions like B (2) +// +#define DECODE_SET_16_B2(_NAME, _OP) \ + DECODE_TT16(0, _NAME, "|111|" _OP "...........|") + +// +// Decode entries for 16-bit Thumb instructions like BLX (2) +// +#define DECODE_SET_16_BLX2(_NAME, _OP) \ + DECODE_TT16(0, _NAME, "|"_OP"|....|...|") + +// +// Decode entries for undefined 16-bit Thumb instructions like SWI +// +#define DECODE_SET_16_SWI(_NAME, _OP) \ + DECODE_TT16(1, _NAME, "|1101|" _OP "|........|") + +// +// Decode entries for 16-bit Thumb instructions like BKPT +// +#define DECODE_SET_16_BKPT(_NAME, _OP) \ + DECODE_TT16(1, _NAME, "1011|"_OP"|.....|") + +// +// Decode entries for 16-bit Thumb instructions like POP +// +#define DECODE_SET_16_POP(_NAME, _OP) \ + DECODE_TT16(0, _NAME, "|"_OP"|.|........|") + +// +// Decode entries for 16-bit Thumb instructions like IT +// +#define DECODE_SET_16_IT(_NAME, _OP1, _OP2) \ + DECODE_TT16(0, _NAME, "|1011|1111|" _OP1 "|" _OP2 "|") + +// +// Decode entries for 16-bit Thumb hint instructions like NOP +// +#define DECODE_SET_16_HINT1(_NAME, _OP1, _OP2) \ + DECODE_TT16(1, _NAME, "|1011|1111|" _OP1 "|" _OP2 "|") + +// +// Decode entries for 16-bit Thumb hint instructions like YIELD +// +#define DECODE_SET_16_HINT2(_NAME, _OP1, _OP2) \ + DECODE_TT16(2, _NAME, "|1011|1111|" _OP1 "|" _OP2 "|") + +#endif + diff --git a/ovp/armmModel/armDecodeEntriesThumb32.h b/ovp/armmModel/armDecodeEntriesThumb32.h new file mode 100644 index 00000000..44fba36a --- /dev/null +++ b/ovp/armmModel/armDecodeEntriesThumb32.h @@ -0,0 +1,390 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_DECODE_ENTRIES_THUMB32_H +#define ARM_DECODE_ENTRIES_THUMB32_H + +// VMI header files +#include "vmi/vmiDecode.h" + +// +// This macro adds a decode table entry for a 32-bit Thumb instruction class +// +#define DECODE_TT32(_PRIORITY, _NAME, _PATTERN) \ + {type:TT32_##_NAME, priority:_PRIORITY, name:#_NAME"_T", pattern:_PATTERN} + +// +// This macro adds an undefined instruction decode table entry for a 32-bit Thumb instruction class +// +#define DECODE_LAST(_PRIORITY, _PATTERN) \ + {type:TT_LAST, priority:_PRIORITY, name:"LAST_T", pattern:_PATTERN} + +// +// Decode entries for 32-bit Thumb instructions like AND +// +#define DECODE_SET_32_AND(_NAME, _OP) \ + DECODE_TT32(0, _NAME##_IMM, "|111|10.0|" _OP "|.|....|0...|....|........"), \ + DECODE_TT32(0, _NAME##_RM_SHFT_IMM, "|111|0101|" _OP "|.|....|....|....|........"), \ + DECODE_TT32(1, _NAME##_RM_RRX, "|111|0101|" _OP "|.|....|.000|....|0011....") + +// +// Decode entries for 32-bit Thumb instructions like TST +// +#define DECODE_SET_32_TST(_NAME, _OP) \ + DECODE_TT32(2, _NAME##_IMM, "|111|10.0|" _OP "|1|....|0...|1111|........"), \ + DECODE_TT32(2, _NAME##_RM_SHFT_IMM, "|111|0101|" _OP "|1|....|....|1111|........"), \ + DECODE_TT32(3, _NAME##_RM_RRX, "|111|0101|" _OP "|1|....|.000|1111|0011....") + +// +// Decode entries for 32-bit Thumb instructions like MOV +// +#define DECODE_SET_32_MOV(_NAME, _OP) \ + DECODE_TT32(2, _NAME##_IMM, "|111|10.0|" _OP "|.|1111|0...|....|........"), \ + DECODE_TT32(2, _NAME##_RM_SHFT_IMM, "|111|0101|" _OP "|.|1111|....|....|........"), \ + DECODE_TT32(3, _NAME##_RM_RRX, "|111|0101|" _OP "|.|1111|.000|....|0011....") + +// +// Decode entries for 32-bit Thumb instructions like PKHBT +// +#define DECODE_SET_32_PKHBT(_NAME, _OP) \ + DECODE_TT32(0, _NAME, "|111|01|01|0110|0|....|....|....|.." _OP "0|....") + +// +// Decode entries for 32-bit Thumb instructions like ADD (plain binary immediate) +// +#define DECODE_SET_32_ADD_PI(_NAME, _OP) \ + DECODE_TT32(0, _NAME, "|111|10|.1|" _OP "|....|0|...|....|........") + +// +// Decode entries for 32-bit Thumb instructions like ADR (plain binary immediate) +// +#define DECODE_SET_32_ADR_PI(_NAME, _OP) \ + DECODE_TT32(1, _NAME, "|111|10|.1|" _OP "|1111|0|...|....|........") + +// +// Decode entries for 32-bit Thumb instructions like SSAT16 +// +#define DECODE_SET_32_SSAT16(_NAME, _OP) \ + DECODE_TT32(1, _NAME, "|111|10|.1|" _OP "|....|0|000|....|00......") + +// +// Decode entries for 32-bit Thumb instructions like LSL +// +#define DECODE_SET_32_LSL(_NAME, _OP1, _OP2, _OP3) \ + DECODE_TT32(0, _NAME, "|111|1101|0|" _OP1 "|" _OP3 "|1111|....|" _OP2 "|....") + +// +// Decode entries for 32-bit Thumb instructions like SXTH +// +#define DECODE_SET_32_SXTH(_NAME, _OP1, _OP2, _OP3) \ + DECODE_TT32(1, _NAME, "|111|1101|0|" _OP1 "|" _OP3 "|1111|....|" _OP2 "|....") + +// +// Decode entries for parallel add/subtract instructions +// +#define DECODE_SET_32_PAS(_NAME, _OP) \ + DECODE_TT32(0, S##_NAME, "111|1101|01|" _OP "|....|1111|....|0000|....|"), \ + DECODE_TT32(0, Q##_NAME, "111|1101|01|" _OP "|....|1111|....|0001|....|"), \ + DECODE_TT32(0, SH##_NAME, "111|1101|01|" _OP "|....|1111|....|0010|....|"), \ + DECODE_TT32(0, U##_NAME, "111|1101|01|" _OP "|....|1111|....|0100|....|"), \ + DECODE_TT32(0, UQ##_NAME, "111|1101|01|" _OP "|....|1111|....|0101|....|"), \ + DECODE_TT32(0, UH##_NAME, "111|1101|01|" _OP "|....|1111|....|0110|....|") + +// +// Decode entries for 32-bit Thumb instructions like MLA +// +#define DECODE_SET_32_MLA(_NAME, _OP1, _OP2) \ + DECODE_TT32(0, _NAME, "|111|1101|1|" _OP1 "|....|....|....|" _OP2 "|....") + +// +// Decode entries for 32-bit Thumb instructions like MUL +// +#define DECODE_SET_32_MUL(_NAME, _OP1, _OP2) \ + DECODE_TT32(1, _NAME, "|111|1101|1|" _OP1 "|....|1111|....|" _OP2 "|....") + +// +// Decode entries for 32-bit Thumb DSP instructions like SMLA +// +#define DECODE_SET_32_SMLA_XY(_NAME, _OP1, _OP2) \ + DECODE_TT32(0, _NAME##BB, "|111|1101|1|" _OP1 "|....|....|....|" _OP2 "00|...."), \ + DECODE_TT32(0, _NAME##BT, "|111|1101|1|" _OP1 "|....|....|....|" _OP2 "01|...."), \ + DECODE_TT32(0, _NAME##TB, "|111|1101|1|" _OP1 "|....|....|....|" _OP2 "10|...."), \ + DECODE_TT32(0, _NAME##TT, "|111|1101|1|" _OP1 "|....|....|....|" _OP2 "11|....") + +// +// Decode entries for 32-bit Thumb DSP instructions like SMUL +// +#define DECODE_SET_32_SMUL_XY(_NAME, _OP1, _OP2) \ + DECODE_TT32(1, _NAME##BB, "|111|1101|1|" _OP1 "|....|1111|....|" _OP2 "00|...."), \ + DECODE_TT32(1, _NAME##BT, "|111|1101|1|" _OP1 "|....|1111|....|" _OP2 "01|...."), \ + DECODE_TT32(1, _NAME##TB, "|111|1101|1|" _OP1 "|....|1111|....|" _OP2 "10|...."), \ + DECODE_TT32(1, _NAME##TT, "|111|1101|1|" _OP1 "|....|1111|....|" _OP2 "11|....") + +// +// Decode entries for 32-bit Thumb DSP instructions like SMLAD +// +#define DECODE_SET_32_SMLAD(_NAME, _OP1, _OP2) \ + DECODE_TT32(0, _NAME, "|111|1101|1|" _OP1 "|....|....|....|" _OP2 "0|...."), \ + DECODE_TT32(0, _NAME##X, "|111|1101|1|" _OP1 "|....|....|....|" _OP2 "1|....") + +// +// Decode entries for 32-bit Thumb DSP instructions like SMUAD +// +#define DECODE_SET_32_SMUAD(_NAME, _OP1, _OP2) \ + DECODE_TT32(1, _NAME, "|111|1101|1|" _OP1 "|....|1111|....|" _OP2 "0|...."), \ + DECODE_TT32(1, _NAME##X, "|111|1101|1|" _OP1 "|....|1111|....|" _OP2 "1|....") + +// +// Decode entries for 32-bit Thumb DSP instructions like SMLAW +// +#define DECODE_SET_32_SMLAW(_NAME, _OP1, _OP2) \ + DECODE_TT32(0, _NAME##B, "|111|1101|1|" _OP1 "|....|....|....|" _OP2 "0|...."), \ + DECODE_TT32(0, _NAME##T, "|111|1101|1|" _OP1 "|....|....|....|" _OP2 "1|....") + +// +// Decode entries for 32-bit Thumb DSP instructions like SMULW +// +#define DECODE_SET_32_SMULW(_NAME, _OP1, _OP2) \ + DECODE_TT32(1, _NAME##B, "|111|1101|1|" _OP1 "|....|1111|....|" _OP2 "0|...."), \ + DECODE_TT32(1, _NAME##T, "|111|1101|1|" _OP1 "|....|1111|....|" _OP2 "1|....") + +// +// Decode entries for 32-bit Thumb DSP instructions like SMMLA +// +#define DECODE_SET_32_SMMLA(_NAME, _OP1, _OP2) \ + DECODE_TT32(0, _NAME, "|111|1101|1|" _OP1 "|....|....|....|" _OP2 "0|...."), \ + DECODE_TT32(0, _NAME##R, "|111|1101|1|" _OP1 "|....|....|....|" _OP2 "1|....") + +// +// Decode entries for 32-bit Thumb DSP instructions like SMMUL +// +#define DECODE_SET_32_SMMUL(_NAME, _OP1, _OP2) \ + DECODE_TT32(1, _NAME, "|111|1101|1|" _OP1 "|....|1111|....|" _OP2 "0|...."), \ + DECODE_TT32(1, _NAME##R, "|111|1101|1|" _OP1 "|....|1111|....|" _OP2 "1|....") + +// +// Decode entries for 32-bit Thumb instructions like BFC +// +#define DECODE_SET_32_BFC(_NAME, _OP) \ + DECODE_TT32(1, _NAME, "|111|10|.1|" _OP "|1111|0|...|....|........") + +// +// Decode entries for 32-bit Thumb instructions like B (1) +// +#define DECODE_SET_32_B1(_NAME, _OP1, _OP2) \ + DECODE_TT32(0, _NAME, "|111|10|...........|1|" _OP1 "|..........." _OP2) + +// +// Decode entries for 32-bit Thumb undefined instructions +// +#define DECODE_SET_32_UNDEF(_NAME, _OP1, _OP2) \ + DECODE_TT32(1, _NAME, "|111|10|" _OP2 "|....|1|" _OP1 "|....|........") + +// +// Decode entries for 32-bit Thumb instructions like MSR +// +#define DECODE_SET_32_MSR(_NAME, _OP1, _OP2) \ + DECODE_TT32(2, _NAME, "|111|10|" _OP2 "|....|1|" _OP1 "|....|........") + +// +// Decode entries for 32-bit Thumb hint instructions like NOP +// +#define DECODE_SET_32_HINT1(_NAME, _OP1, _OP2, _OP3) \ + DECODE_TT32(3, _NAME, "|111|10|" _OP2 "|....|1|" _OP1 "|.000|" _OP3) + +// +// Decode entries for 32-bit Thumb hint instructions like YIELD +// +#define DECODE_SET_32_HINT2(_NAME, _OP1, _OP2, _OP3) \ + DECODE_TT32(4, _NAME, "|111|10|" _OP2 "|....|1|" _OP1 "|.000|" _OP3) + +// +// Decode entries for 32-bit Thumb instructions like CLREX +// +#define DECODE_SET_32_CLREX(_NAME, _OP) \ + DECODE_TT32(2, _NAME, "|111|10|0111011|....|10.0|....|" _OP "|....") + +// +// Decode entries for 32-bit Thumb instructions like SRS +// +#define DECODE_SET_32_SRS(_NAME, _OP1, _OP2) \ + DECODE_TT32(1, _NAME, "|111|0100|" _OP1 "|0|" _OP2 "|................") + +// +// Decode entries for 32-bit Thumb instructions like POPM +// +#define DECODE_SET_32_POPM(_NAME, _OP1, _OP2) \ + DECODE_TT32(2, _NAME, "|111|0100|" _OP1 "|0|" _OP2 "|................") + +// +// Decode entries for 32-bit Thumb instructions like LDRD_IMM +// +#define DECODE_SET_32_LDRD_IMM(_NAME, _OP1, _OP2, _OP3) \ + DECODE_TT32(0, _NAME, "|111|0100|" _OP1 "|1|" _OP2 "|....|........" _OP3 "....") + +// +// Decode entries for 32-bit Thumb instructions like LDREX +// +#define DECODE_SET_32_LDREX(_NAME, _OP1, _OP2, _OP3) \ + DECODE_TT32(1, _NAME, "|111|0100|" _OP1 "|1|" _OP2 "|....|........" _OP3 "....") + +// +// Decode entries for 32-bit Thumb instructions like LDR +// +#define DECODE_SET_32_LDR(_NAME, _SIGN, _SZ) \ + DECODE_TT32(0, _NAME##_IMM1, "|111|1100|" _SIGN "1|" _SZ "|1|....|....|......|......"), \ + DECODE_TT32(1, _NAME##_IMM2, "|111|1100|" _SIGN "0|" _SZ "|1|....|....|1..1..|......"), \ + DECODE_TT32(1, _NAME##_IMM2, "|111|1100|" _SIGN "0|" _SZ "|1|....|....|1100..|......"), \ + DECODE_TT32(3, _NAME##_IMM3, "|111|1100|" _SIGN "0|" _SZ "|1|1111|....|......|......"), \ + DECODE_TT32(2, _NAME##_RM, "|111|1100|" _SIGN "0|" _SZ "|1|....|....|000000|00...."), \ + DECODE_TT32(1, _NAME##_RM_SHFT_IMM, "|111|1100|" _SIGN "0|" _SZ "|1|....|....|000000|......"), \ + DECODE_TT32(1, _NAME##T_IMM, "|111|1100|" _SIGN "0|" _SZ "|1|....|....|1110..|......") + +// +// Decode entries for 32-bit Thumb instructions like STR +// +#define DECODE_SET_32_STR(_NAME, _SIGN, _SZ) \ + DECODE_TT32(0, _NAME##_IMM1, "|111|1100|" _SIGN "1|" _SZ "|0|....|....|......|......"), \ + DECODE_TT32(1, _NAME##_IMM2, "|111|1100|" _SIGN "0|" _SZ "|0|....|....|1..1..|......"), \ + DECODE_TT32(1, _NAME##_IMM2, "|111|1100|" _SIGN "0|" _SZ "|0|....|....|1100..|......"), \ + DECODE_TT32(3, _NAME##_IMM3, "|111|1100|" _SIGN "0|" _SZ "|0|1111|....|......|......"), \ + DECODE_TT32(2, _NAME##_RM, "|111|1100|" _SIGN "0|" _SZ "|0|....|....|000000|00...."), \ + DECODE_TT32(1, _NAME##_RM_SHFT_IMM, "|111|1100|" _SIGN "0|" _SZ "|0|....|....|000000|......"), \ + DECODE_TT32(1, _NAME##T_IMM, "|111|1100|" _SIGN "0|" _SZ "|0|....|....|1110..|......") + +// +// Decode entries for 32-bit Thumb instructions like PLD +// +#define DECODE_SET_32_PLD(_NAME, _SIGN, _SZ) \ + DECODE_TT32(5, _NAME##_IMM1, "|111|1100|" _SIGN "1|" _SZ "|1|....|1111|......|......"), \ + DECODE_TT32(6, _NAME##_IMM2, "|111|1100|" _SIGN "0|" _SZ "|1|....|1111|1100..|......"), \ + DECODE_TT32(8, _NAME##_IMM3, "|111|1100|" _SIGN "0|" _SZ "|1|1111|1111|......|......"), \ + DECODE_TT32(7, _NAME##_RM, "|111|1100|" _SIGN "0|" _SZ "|1|....|1111|000000|00...."), \ + DECODE_TT32(6, _NAME##_RM_SHFT_IMM, "|111|1100|" _SIGN "0|" _SZ "|1|....|1111|000000|......") + +// +// Decode entries for 32-bit Thumb instructions like UHINTH +// +#define DECODE_SET_32_UHINTH(_NAME, _SZ) \ + DECODE_TT32(4, _NAME, "|111|1100|..|" _SZ "|1|....|1111|......|......") + +// +// Decode entries for 32-bit Thumb instructions like CDP +// +#define DECODE_SET_32_CDP(_NAME) \ + DECODE_TT32(0, _NAME, "....|1110|....|....|....|....|...|0|....") + +// +// Decode entries for 32-bit Thumb instructions like CDP2 +// +#define DECODE_SET_32_CDP2(_NAME) \ + DECODE_TT32(1, _NAME, "1111|1110|....|....|....|....|...|0|....") + +// +// Decode entries for 32-bit Thumb instructions like LDC +// +#define DECODE_SET_32_LDC(_NAME, _OP) \ + DECODE_TT32(0, _NAME##_IMM, "....|110|...." _OP "|....|....|....|........"), \ + DECODE_TT32(1, _NAME##_UNINDEXED, "....|110|0..0" _OP "|....|....|....|........") + +// +// Decode entries for 32-bit Thumb instructions like LDC2 +// +#define DECODE_SET_32_LDC2(_NAME, _OP) \ + DECODE_TT32(2, _NAME##_IMM, "1111|110|...." _OP "|....|....|....|........"), \ + DECODE_TT32(3, _NAME##_UNINDEXED, "1111|110|0..0" _OP "|....|....|....|........") + +// +// Decode entries for 32-bit Thumb instructions like MCR +// +#define DECODE_SET_32_MCR(_NAME, _OP) \ + DECODE_TT32(0, _NAME, "....|1110|...|" _OP "|....|....|....|...|1|....") + +// +// Decode entries for 32-bit Thumb instructions like MCR2 +// +#define DECODE_SET_32_MCR2(_NAME, _OP) \ + DECODE_TT32(1, _NAME, "1111|1110|...|" _OP "|....|....|....|...|1|....") + +// +// Decode entries for 32-bit Thumb DSP instructions like MCRR +// +#define DECODE_SET_32_MCRR(_NAME, _OP) \ + DECODE_TT32(4, _NAME, "....|1100010" _OP "|....|....|....|....|....") + +// +// Decode entries for 32-bit Thumb DSP instructions like MCRR2 +// +#define DECODE_SET_32_MCRR2(_NAME, _OP) \ + DECODE_TT32(5, _NAME, "1111|1100010" _OP "|....|....|....|....|....") + +// +// Decode entries for VFP/SIMD instructions like VMRS +// Note - When bit 28=1 manual states this is an undefined instruction so extra +// decode is added. Without it this decodes as MRC and gives NOCP fault. +// +#define DECODE_SET_32_VMRS(_NAME, _OPL, _OPC, _OPA, _OPB) \ + DECODE_TT32(2, _NAME, "1110|1110" _OPA _OPL "|....|....|101" _OPC "|." _OPB "1|...."), \ + DECODE_LAST(2, "1111|1110" _OPA _OPL "|....|....|101" _OPC "|." _OPB "1|....") + +// +// Decode entries for VFP instructions like VMOVRRD +// +#define DECODE_SET_32_VMOVRRD(_NAME, _OPL, _OPC, _OP) \ + DECODE_TT32(6, _NAME, "1110|1100|010" _OPL "........|101" _OPC _OP "|...."), \ + DECODE_LAST(6, "1111|1100|010" _OPL "........|101" _OPC _OP "|....") + +// +// Decode entries for SIMD/VFP load/store instructions +// +#define DECODE_SET_32_SDFP_LDST(_NAME, _OP) \ + DECODE_TT32(4, _NAME##_D, "1110|110" _OP "|....|....|1011|....|...."), \ + DECODE_TT32(4, _NAME##_S, "1110|110" _OP "|....|....|1010|....|...."), \ + DECODE_LAST(6, "1111|110" _OP "|....|....|101.|....|....") + +// +// Decode entries for SIMD/VFP PUSH/POP instructions +// +#define DECODE_SET_32_SDFP_PUSH_POP(_NAME, _OP) \ + DECODE_TT32(5, _NAME##_D, "1110|110" _OP "|1101|....|1011|....|...."), \ + DECODE_TT32(5, _NAME##_S, "1110|110" _OP "|1101|....|1010|....|....") + +// +// Decode entries for VFP instructions S version only +// +#define DECODE_SET_32_VFP_S(_NAME, _OP1, _OP2, _OP3) \ + DECODE_TT32(2, _NAME, "1110|1110|" _OP1 _OP2 "|....|1010|" _OP3 ".0|...."), \ + DECODE_LAST(3, "1111|1110|" _OP1 _OP2 "|....|1010|" _OP3 ".0|....") +#endif + diff --git a/ovp/armmModel/armDecodeThumb.h b/ovp/armmModel/armDecodeThumb.h new file mode 100644 index 00000000..1f56bb93 --- /dev/null +++ b/ovp/armmModel/armDecodeThumb.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_DECODE_THUMB_H +#define ARM_DECODE_THUMB_H + +// basic number types +#include "hostapi/impTypes.h" + +// model header files +#include "armDecodeTypes.h" +#include "armTypeRefs.h" + +// +// Return size in bytes of Thumb instruction at the passed address +// +Uns32 armGetThumbInstructionSize(armP arm, Uns32 thisPC); + +// +// Decode the Thumb instruction at the passed address. The 'info' structure is +// filled with details of the instruction. +// +void armDecodeThumb(armP arm, Uns32 thisPC, armInstructionInfoP info); + +#endif + diff --git a/ovp/armmModel/armDecodeTypes.h b/ovp/armmModel/armDecodeTypes.h new file mode 100644 index 00000000..a0401e6f --- /dev/null +++ b/ovp/armmModel/armDecodeTypes.h @@ -0,0 +1,762 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_DECODE_TYPES_H +#define ARM_DECODE_TYPES_H + +// basic number types +#include "hostapi/impTypes.h" + +// model header files +#include "armVariant.h" + + +// +// Instruction type for an instruction with a single variant +// +#define ITYPE_SINGLE(_NAME) \ + ARM_IT_##_NAME + +// +// Instruction types for normal instructions like ADC +// +#define ITYPE_SET_ADC(_NAME) \ + ARM_IT_##_NAME##_IMM, \ + ARM_IT_##_NAME##_RM, \ + ARM_IT_##_NAME##_RM_SHFT_IMM, \ + ARM_IT_##_NAME##_RM_RRX, \ + ARM_IT_##_NAME##_IT, \ + ARM_IT_##_NAME##_RT + +// +// Instruction types for normal instructions like LDC +// +#define ITYPE_SET_LDC(_NAME) \ + ARM_IT_##_NAME##_IMM, \ + ARM_IT_##_NAME##_UNINDEXED + +// +// Instruction types for normal instructions like LDR +// +#define ITYPE_SET_LDR(_NAME) \ + ARM_IT_##_NAME##_IMM, \ + ARM_IT_##_NAME##_RM, \ + ARM_IT_##_NAME##_RM_SHFT_IMM + +// +// Instruction types for normal instructions like LDRH +// +#define ITYPE_SET_LDRH(_NAME) \ + ARM_IT_##_NAME##_IMM, \ + ARM_IT_##_NAME##_RM \ + +// +// Instruction types for normal instructions like MOV +// +#define ITYPE_SET_MOV(_NAME) \ + ARM_IT_##_NAME##_IMM, \ + ARM_IT_##_NAME##_RM, \ + ARM_IT_##_NAME##_RM_SHFT_IMM, \ + ARM_IT_##_NAME##_RM_SHFT_RS, \ + ARM_IT_##_NAME##_RM_RRX, \ + ARM_IT_##_NAME##_RM_SHFT_RST + +// +// Instruction types for DSP instructions like SMLA +// +#define ITYPE_SET_SMLA_XY(_NAME) \ + ARM_IT_##_NAME##BB, \ + ARM_IT_##_NAME##BT, \ + ARM_IT_##_NAME##TB, \ + ARM_IT_##_NAME##TT + +// +// Instruction types for DSP instructions like SMLAW +// +#define ITYPE_SET_SMLAW_Y(_NAME) \ + ARM_IT_##_NAME##B, \ + ARM_IT_##_NAME##T + +// +// Instruction types for normal instructions like PLD +// +#define ITYPE_SET_PLD(_NAME) \ + ARM_IT_##_NAME##_IMM, \ + ARM_IT_##_NAME##_RM, \ + ARM_IT_##_NAME##_RM_SHFT_IMM + +// +// Instruction types for parallel add/subtract Media instructions +// +#define ITYPE_SET_PAS(_NAME) \ + ARM_IT_S##_NAME, \ + ARM_IT_Q##_NAME, \ + ARM_IT_SH##_NAME, \ + ARM_IT_U##_NAME, \ + ARM_IT_UQ##_NAME, \ + ARM_IT_UH##_NAME + +// +// Instruction types for Media instructions with optional argument exchange +// +#define ITYPE_MEDIA_X(_NAME) \ + ARM_IT_##_NAME, \ + ARM_IT_##_NAME##X + +// +// Instruction types for Media instructions with optional result rounding +// +#define ITYPE_MEDIA_R(_NAME) \ + ARM_IT_##_NAME, \ + ARM_IT_##_NAME##R + +// +// Instruction types for VFP instructions with D and S variants +// +#define ITYPE_VFP_DS(_NAME) \ + ARM_IT_##_NAME##_D, \ + ARM_IT_##_NAME##_S + +// +// Instruction type enumeration +// +typedef enum armInstructionTypeE { + + //////////////////////////////////////////////////////////////////////////// + // ARM INSTRUCTIONS + //////////////////////////////////////////////////////////////////////////// + + // data processing instructions + ITYPE_SET_ADC (ADC), + ITYPE_SET_ADC (ADD), + ITYPE_SET_ADC (AND), + ITYPE_SET_ADC (BIC), + ITYPE_SET_ADC (EOR), + ITYPE_SET_MOV (MOV), + ITYPE_SET_ADC (MUL), + ITYPE_SET_MOV (MVN), + ITYPE_SET_MOV (NEG), + ITYPE_SET_ADC (ORN), + ITYPE_SET_ADC (ORR), + ITYPE_SET_ADC (RSB), + ITYPE_SET_ADC (RSC), + ITYPE_SET_ADC (SBC), + ITYPE_SET_ADC (SUB), + + // ARMv6T2 move instructions + ITYPE_SINGLE (MOVT), + ITYPE_SINGLE (MOVW), + + // multiply instructions + ITYPE_SINGLE (MLA ), + ITYPE_SINGLE (MLS ), + ITYPE_SINGLE (MUL ), + ITYPE_SINGLE (SMLAL), + ITYPE_SINGLE (SMULL), + ITYPE_SINGLE (UMAAL), + ITYPE_SINGLE (UMLAL), + ITYPE_SINGLE (UMULL), + + // compare instructions + ITYPE_SET_ADC (CMN), + ITYPE_SET_ADC (CMP), + ITYPE_SET_ADC (TEQ), + ITYPE_SET_ADC (TST), + + // branch instructions + ITYPE_SINGLE (B ), + ITYPE_SINGLE (BL ), + ITYPE_SINGLE (BLX2), + ITYPE_SINGLE (BX ), + + // miscellaneous instructions + ITYPE_SINGLE (BKPT), + ITYPE_SINGLE (CLZ ), + ITYPE_SINGLE (SWI ), + + // load and store instructions + ITYPE_SET_LDR (LDR ), + ITYPE_SET_LDR (LDRB ), + ITYPE_SET_LDR (LDRBT), + ITYPE_SET_LDRH (LDRH ), + ITYPE_SET_LDRH (LDRSB), + ITYPE_SET_LDRH (LDRSH), + ITYPE_SET_LDR (LDRT ), + ITYPE_SET_LDR (STR ), + ITYPE_SET_LDR (STRB ), + ITYPE_SET_LDR (STRBT), + ITYPE_SET_LDRH (STRH ), + ITYPE_SET_LDR (STRT ), + + // load and store multiple instructions + ITYPE_SINGLE (LDM1), + ITYPE_SINGLE (STM1), + + // ARMv6T2 load and store instructions + ITYPE_SET_LDRH (LDRHT ), + ITYPE_SET_LDRH (LDRSBT), + ITYPE_SET_LDRH (LDRSHT), + ITYPE_SET_LDRH (STRHT ), + + // synchronization primitives + ITYPE_SINGLE (LDREX ), + ITYPE_SINGLE (LDREXB), + ITYPE_SINGLE (LDREXH), + ITYPE_SINGLE (STREX ), + ITYPE_SINGLE (STREXB), + ITYPE_SINGLE (STREXH), + + // coprocessor instructions + ITYPE_SINGLE (CDP ), + ITYPE_SINGLE (CDP2), + ITYPE_SET_LDC (LDC ), + ITYPE_SET_LDC (LDC2), + ITYPE_SINGLE (MCR ), + ITYPE_SINGLE (MCR2), + ITYPE_SINGLE (MRC ), + ITYPE_SINGLE (MRC2), + ITYPE_SET_LDC (STC ), + ITYPE_SET_LDC (STC2), + + // status register access instructions + ITYPE_SINGLE (MRS), + ITYPE_SINGLE (MSR), + + // hints + ITYPE_SINGLE (NOP ), + ITYPE_SINGLE (YIELD), + ITYPE_SINGLE (WFE ), + ITYPE_SINGLE (WFI ), + ITYPE_SINGLE (SEV ), + ITYPE_SINGLE (DBG ), + + // ARMv6 miscellaneous instructions + ITYPE_SINGLE (CPS ), + ITYPE_SINGLE (CLREX ), + ITYPE_SINGLE (DSB ), + ITYPE_SINGLE (ISB ), + + // ARMv7 hint instructions + ITYPE_SET_PLD (PLD), + ITYPE_SET_PLD (PLI), + ITYPE_SINGLE (DMB), + + //////////////////////////////////////////////////////////////////////////// + // DSP INSTRUCTIONS + //////////////////////////////////////////////////////////////////////////// + + // data processing instructions + ITYPE_SINGLE (QADD ), + ITYPE_SINGLE (QDADD), + ITYPE_SINGLE (QDSUB), + ITYPE_SINGLE (QSUB ), + + // multiply instructions + ITYPE_SET_SMLA_XY (SMLA ), + ITYPE_SET_SMLA_XY (SMLAL), + ITYPE_SET_SMLAW_Y (SMLAW), + ITYPE_SET_SMLA_XY (SMUL ), + ITYPE_SET_SMLAW_Y (SMULW), + + // load and store instructions + ITYPE_SET_LDRH (LDRD), + ITYPE_SET_LDRH (STRD), + + // coprocessor instructions + ITYPE_SINGLE (MCRR ), + ITYPE_SINGLE (MCRR2), + ITYPE_SINGLE (MRRC ), + ITYPE_SINGLE (MRRC2), + + //////////////////////////////////////////////////////////////////////////// + // MEDIA INSTRUCTIONS + //////////////////////////////////////////////////////////////////////////// + + // basic instructions + ITYPE_SINGLE (USAD8 ), + ITYPE_SINGLE (USADA8), + ITYPE_SINGLE (SBFX ), + ITYPE_SINGLE (BFC ), + ITYPE_SINGLE (BFI ), + ITYPE_SINGLE (UBFX ), + + // parallel add/subtract instructions + ITYPE_SET_PAS (ADD16), + ITYPE_SET_PAS (ASX ), + ITYPE_SET_PAS (SAX ), + ITYPE_SET_PAS (SUB16), + ITYPE_SET_PAS (ADD8 ), + ITYPE_SET_PAS (SUB8 ), + + // packing, unpacking, saturation and reversal instructions + ITYPE_SINGLE (PKHBT ), + ITYPE_SINGLE (PKHTB ), + ITYPE_SINGLE (SSAT ), + ITYPE_SINGLE (SSAT16 ), + ITYPE_SINGLE (USAT ), + ITYPE_SINGLE (USAT16 ), + ITYPE_SINGLE (SXTAB ), + ITYPE_SINGLE (UXTAB ), + ITYPE_SINGLE (SXTAB16), + ITYPE_SINGLE (UXTAB16), + ITYPE_SINGLE (SXTAH ), + ITYPE_SINGLE (UXTAH ), + ITYPE_SINGLE (SXTB ), + ITYPE_SINGLE (UXTB ), + ITYPE_SINGLE (SXTB16 ), + ITYPE_SINGLE (UXTB16 ), + ITYPE_SINGLE (SXTH ), + ITYPE_SINGLE (UXTH ), + ITYPE_SINGLE (SEL ), + ITYPE_SINGLE (REV ), + ITYPE_SINGLE (REV16 ), + ITYPE_SINGLE (RBIT ), + ITYPE_SINGLE (REVSH ), + + // signed multiply instructions + ITYPE_MEDIA_X (SMLAD ), + ITYPE_MEDIA_X (SMUAD ), + ITYPE_MEDIA_X (SMLSD ), + ITYPE_MEDIA_X (SMUSD ), + ITYPE_MEDIA_X (SMLALD), + ITYPE_MEDIA_X (SMLSLD), + ITYPE_MEDIA_R (SMMLA ), + ITYPE_MEDIA_R (SMMUL ), + ITYPE_MEDIA_R (SMMLS ), + + // VFP data processing instructions + ITYPE_SINGLE (VMLA_VFP), + ITYPE_SINGLE (VMLS_VFP), + ITYPE_SINGLE (VNMLS_VFP), + ITYPE_SINGLE (VNMLA_VFP), + ITYPE_SINGLE (VMUL_VFP), + ITYPE_SINGLE (VNMUL_VFP), + ITYPE_SINGLE (VADD_VFP), + ITYPE_SINGLE (VSUB_VFP), + ITYPE_SINGLE (VDIV_VFP), + ITYPE_SINGLE (VFMA_VFP), + ITYPE_SINGLE (VFMS_VFP), + ITYPE_SINGLE (VFNMS_VFP), + ITYPE_SINGLE (VFNMA_VFP), + ITYPE_SINGLE (VMOVI_VFP), + ITYPE_SINGLE (VMOVR_VFP), + ITYPE_SINGLE (VABS_VFP), + ITYPE_SINGLE (VNEG_VFP), + ITYPE_SINGLE (VSQRT_VFP), + ITYPE_SINGLE (VCVTBFH_VFP), + ITYPE_SINGLE (VCVTTFH_VFP), + ITYPE_SINGLE (VCVTBHF_VFP), + ITYPE_SINGLE (VCVTTHF_VFP), + ITYPE_SINGLE (VCMP_VFP), + ITYPE_SINGLE (VCMPE_VFP), + ITYPE_SINGLE (VCMP0_VFP), + ITYPE_SINGLE (VCMPE0_VFP), + ITYPE_SINGLE (VCVTFU_VFP), + ITYPE_SINGLE (VCVTFS_VFP), + ITYPE_SINGLE (VCVTFXUH_VFP), + ITYPE_SINGLE (VCVTFXUW_VFP), + ITYPE_SINGLE (VCVTFXSH_VFP), + ITYPE_SINGLE (VCVTFXSW_VFP), + ITYPE_SINGLE (VCVTUF_VFP), + ITYPE_SINGLE (VCVTRUF_VFP), + ITYPE_SINGLE (VCVTSF_VFP), + ITYPE_SINGLE (VCVTRSF_VFP), + ITYPE_SINGLE (VCVTXFSH_VFP), + ITYPE_SINGLE (VCVTXFSW_VFP), + ITYPE_SINGLE (VCVTXFUH_VFP), + ITYPE_SINGLE (VCVTXFUW_VFP), + + // Extension register load/store instructions + ITYPE_VFP_DS (VSTMIA), + ITYPE_VFP_DS (VSTMIAW), + ITYPE_VFP_DS (VSTR), + ITYPE_VFP_DS (VSTMDBW), + ITYPE_VFP_DS (VPUSH), + ITYPE_VFP_DS (VLDMIA), + ITYPE_VFP_DS (VLDMIAW), + ITYPE_VFP_DS (VPOP), + ITYPE_VFP_DS (VLDR), + ITYPE_VFP_DS (VLDMDBW), + + // 8, 16 and 32-bit transfer instructions between ARM core regs and extension regs + ITYPE_SINGLE (VMRS), + ITYPE_SINGLE (VMSR), + ITYPE_SINGLE (VMOVRS), + ITYPE_SINGLE (VMOVSR), + ITYPE_SINGLE (VMOVZR), + ITYPE_SINGLE (VMOVRZ), + + // 64-bit transfer instructions between ARM core regs and extension regs + ITYPE_SINGLE (VMOVRRD), + ITYPE_SINGLE (VMOVDRR), + ITYPE_SINGLE (VMOVRRSS), + ITYPE_SINGLE (VMOVSSRR), + + //////////////////////////////////////////////////////////////////////////// + // THUMB INSTRUCTIONS (WHEN DISTINCT FROM ARM INSTRUCTIONS) + //////////////////////////////////////////////////////////////////////////// + + // data processing instructions + ITYPE_SINGLE (ADD4), + ITYPE_SINGLE (ADD6), + ITYPE_SINGLE (ADD7), + ITYPE_SINGLE (SUB4), + ITYPE_SINGLE (MOV3), + + // address instructions + ITYPE_SINGLE (ADD_ADR), + ITYPE_SINGLE (SUB_ADR), + + // branch instructions + ITYPE_SINGLE (CBNZ), + ITYPE_SINGLE (CBZ ), + ITYPE_SINGLE (TB ), + + // divide instructions + ITYPE_SINGLE (SDIV), + ITYPE_SINGLE (UDIV), + + // KEEP LAST + ITYPE_SINGLE (LAST) + +} armInstructionType; + +// +// Condition code enumeration +// +typedef enum armConditionE { + + ARM_C_EQ, // ZF==1 + ARM_C_NE, // ZF==0 + ARM_C_CS, // CF==1 + ARM_C_CC, // CF==0 + ARM_C_MI, // NF==1 + ARM_C_PL, // NF==0 + ARM_C_VS, // VF==1 + ARM_C_VC, // VF==0 + ARM_C_HI, // (CF==1) && (ZF==0) + ARM_C_LS, // (CF==0) || (ZF==1) + ARM_C_GE, // NF==VF + ARM_C_LT, // NF!=VF + ARM_C_GT, // (ZF==0) && (NF==VF) + ARM_C_LE, // (ZF==1) || (NF!=VF) + ARM_C_AL, // always + ARM_C_NV, // never + + // KEEP LAST + ARM_C_LAST + +} armCondition; + +// +// This defines whether the instruction sets flags +// +typedef enum armSetFlagsE { + ARM_SF_0, // don't set flags + ARM_SF_V, // set flags, show in disassembly using "s" suffix + ARM_SF_I, // set flags, not shown in instruction disassembly + ARM_SF_IT, // only when not in if-then block +} armSetFlags; + +// +// This defines shift operations +// +typedef enum armShiftOpE { + ARM_SO_NA, // no shift operation + ARM_SO_LSL, // logical shift left + ARM_SO_LSR, // logical shift right + ARM_SO_ASR, // arithmetic shift right + ARM_SO_ROR, // rotate right + ARM_SO_RRX // rotate right with extend +} armShiftOp; + +// +// This defines increment/decrement actions +// +typedef enum armIncDecE { + ARM_ID_NA = 0x0, // no increment/decrement spec present + ARM_ID_D = 0x0, // decrement + ARM_ID_I = 0x1, // increment + ARM_ID_A = 0x0, // after + ARM_ID_B = 0x2, // before + ARM_ID_NS = 0x4, // not shown in disassembly + ARM_ID_P = 0x8, // increment/decrement spec present + ARM_ID_DA = ARM_ID_P | ARM_ID_D | ARM_ID_A, // decrement after + ARM_ID_IA = ARM_ID_P | ARM_ID_I | ARM_ID_A, // increment after + ARM_ID_DB = ARM_ID_P | ARM_ID_D | ARM_ID_B, // decrement before + ARM_ID_IB = ARM_ID_P | ARM_ID_I | ARM_ID_B, // increment before + ARM_ID_IAI = ARM_ID_IA | ARM_ID_NS, // IA, not shown in disassembly + ARM_ID_IBI = ARM_ID_IB | ARM_ID_NS, // IB, not shown in disassembly + ARM_ID_DAI = ARM_ID_DA | ARM_ID_NS, // DA, not shown in disassembly + ARM_ID_DBI = ARM_ID_DB | ARM_ID_NS // DB, not shown in disassembly +} armIncDec; + +// +// This defines bits in a field mask +// +typedef enum armSRFieldMaskE { + ARM_SR_C = 0x1, // control field mask bit + ARM_SR_X = 0x2, // extension field mask bit + ARM_SR_S = 0x4, // status field mask bit + ARM_SR_F = 0x8 // flags field mask bit +} armSRFieldMask; + +// +// This defines actions to be taken for unaligned memory accesses +// +typedef enum armUnalignedActionE { + ARM_UA_DABORT, // take data abort exception + ARM_UA_ROTATE, // rotate if unaligned (some ARMv4 and ARMv5 reads) + ARM_UA_ALIGN, // force alignment + ARM_UA_UNALIGNED, // allow unaligned access +} armUnalignedAction; + +// +// This specifies the effect on any interrupt flags of this instruction +// +typedef enum armFlagActionE { + ARM_FACT_NA = 0, // no flag action + ARM_FACT_BAD = 1, // (illegal value) + ARM_FACT_IE = 2, // interrupts enabled + ARM_FACT_ID = 3 // interrupts disabled +} armFlagAction; + +// +// This specifies flags affected by this instruction +// +typedef enum armFlagAffectE { + ARM_FAFF_NA = 0x0, // no flags affected + ARM_FAFF_F = 0x1, // F flag affected + ARM_FAFF_I = 0x2, // I flag affected + ARM_FAFF_A = 0x4, // A flag affected +} armFlagAffect; + +// +// This specifies system registers for MSR/MRS +// +typedef enum armSysRegIdE { + ASRID_APSR = 0, + ASRID_IAPSR = 1, + ASRID_EAPSR = 2, + ASRID_XPSR = 3, + ASRID_IPSR = 5, + ASRID_EPSR = 6, + ASRID_IEPSR = 7, + ASRID_MSP = 8, + ASRID_PSP = 9, + ASRID_PRIMASK = 16, + ASRID_BASEPRI = 17, + ASRID_BASEPRI_MAX = 18, + ASRID_FAULTMASK = 19, + ASRID_CONTROL = 20 +} armSysRegId; + +// +// This specifies bits specified by mask field of MSR +// +typedef enum armPSRBitsE { + ARM_PSRBITS_NA = 0, // no bits specified + ARM_PSRBITS_GE = 1, // GE only, no flags + ARM_PSRBITS_FLAGS = 2, // Flags only, no GE + ARM_PSRBITS_ALL = 3, // GE and flags +} armPSRBits; + +// +// This specifies SIMD/VFP type +// +typedef enum armSDFPTypeE { + ARM_SDFPT_NA, // no SIMD/VFP type + ARM_SDFPT_8, // 8 bit value - type not specified + ARM_SDFPT_16, // 16 bit value - type not specified + ARM_SDFPT_32, // 32 bit value - type not specified + ARM_SDFPT_64, // 64 bit value - type not specified + ARM_SDFPT_F16, // floating point 16 bit value + ARM_SDFPT_F32, // floating point 32 bit value + ARM_SDFPT_F64, // floating point 64 bit value + ARM_SDFPT_I8, // integer 8 bit value + ARM_SDFPT_I16, // integer 16 bit value + ARM_SDFPT_I32, // integer 32 bit value + ARM_SDFPT_I64, // integer 64 bit value + ARM_SDFPT_P8, // polynomial 8 bit value + ARM_SDFPT_S8, // signed 8 bit value + ARM_SDFPT_S16, // signed 16 bit value + ARM_SDFPT_S32, // signed 32 bit value + ARM_SDFPT_S64, // signed 64 bit value + ARM_SDFPT_U8, // unsigned 8 bit value + ARM_SDFPT_U16, // unsigned 16 bit value + ARM_SDFPT_U32, // unsigned 32 bit value + ARM_SDFPT_U64, // unsigned 64 bit value +} armSDFPType; + +// +// Type to hold a modified immediate constant value for SIMD and VFP instructions +// +typedef union armSdfpMItypeU { + Uns64 u64; + Flt64 f64; + Flt32 f32; + struct { + Uns32 w0; + Uns32 w1; + } u32; + struct { + Uns16 h0; + Uns16 h1; + Uns16 h2; + Uns16 h3; + } u16; + struct { + Uns8 b0; + Uns8 b1; + Uns8 b2; + Uns8 b3; + Uns8 b4; + Uns8 b5; + Uns8 b6; + Uns8 b7; + } u8; +} armSdfpMItype; + +// +// This specifies instruction support implied by ISAR registers +// +typedef enum armISARSupportE { + ARM_ISAR_NA = 0, // no ISAR restriction + ARM_ISAR_DIV, // SDIV/UDIV support + ARM_ISAR_BKPT, // BKPT support + ARM_ISAR_CBZ, // CBZ/CBNZ support + ARM_ISAR_BFC, // BFC/BFI/SBFX/UBFX support + ARM_ISAR_CLZ, // CLZ support + ARM_ISAR_SWP, // SWP/SWPB support + ARM_ISAR_BXJ, // BXJ support + ARM_ISAR_BX, // BX support + ARM_ISAR_BLX, // BX support + ARM_ISAR_MOVT, // MOVT/MOV(16)/ADD(12) etc support + ARM_ISAR_IT, // IT support + ARM_ISAR_SXTB, // SXTB/SXTH/UXTB/UXTH support + ARM_ISAR_SXTAB, // SXTAB/SXTAH/UXTAB/UXTAH support + ARM_ISAR_SXTB16, // SXTB16/SXTAB16/UXTB16/UXTAB16 support + ARM_ISAR_SRS, // SRS/RFE and A/R profile CPS + ARM_ISAR_LDM_UR, // user mode LDM/STM, exception return LDM + ARM_ISAR_SETEND, // SETEND support + ARM_ISAR_REV, // REV/REV16/REVSH support + ARM_ISAR_RBIT, // RBIT support + ARM_ISAR_MRS_AR, // A/R profile MRS/MSR and exception return support + ARM_ISAR_UMULL, // UMULL/UMLAL support + ARM_ISAR_UMAAL, // UMAAL support + ARM_ISAR_SMULL, // SMULL/SMLAL support + ARM_ISAR_SMLABB, // SMLABB/SMLABT ... SMULWB/SMULWT support + ARM_ISAR_SMLAD, // SMLAD/SMLADX ... SMUSD/SMUSDX support + ARM_ISAR_MLA, // MLA support + ARM_ISAR_MLS, // MLS support + ARM_ISAR_PLD, // PLD support + ARM_ISAR_PLI, // PLI support + ARM_ISAR_LDRD, // LDRD/STRD support + ARM_ISAR_NOP, // NOP support + ARM_ISAR_MOVLL, // Thumb MOV low->low support + ARM_ISAR_TBB, // TBB/TBH support + ARM_ISAR_LDREX, // LDREX/STREX support + ARM_ISAR_CLREX, // CLREX/LDREXB/LDREXH/STREXB/STREXH support + ARM_ISAR_LDREXD, // LDREXD/STREXD support + ARM_ISAR_SVC, // SVC support + ARM_ISAR_SSAT, // SSAT/USAT support + ARM_ISAR_PKHBT, // PKHBT/PKHTB ... USUB8/USAX support + ARM_ISAR_QADD, // QADD/QDADD/QDSUB/QSUB support + ARM_ISAR_MRS_M, // M profile CPS/MRS/MSR support + ARM_ISAR_DMB, // DMB/DSB/ISB support + ARM_ISAR_LDRBT, // LDRBT/LDRT/STRBT/STRT support + ARM_ISAR_LDRHT, // LDRHT/LDRSBT/LDRSHT/STRHT support + ARM_ISAR_VMRS, // load, store, cp moves to SIMD regs supported (VFP2,VFP3,SIMD) + ARM_ISAR_VFPSQRT, // VFP VSQRT support + ARM_ISAR_VFPDIV, // VFP VDIV support + ARM_ISAR_VFPV3, // VFP v3-only support (also check double/single precision support) + ARM_ISAR_VFPV2, // VFP v2 and later support (also check double/single precision support) + ARM_ISAR_VFPFMAC, // VFP fused multilply accumulate support + ARM_ISAR_VFPCVT3, // VFP v3-only conversion support + ARM_ISAR_VFPCVT2, // VFP v2 and later conversion support + ARM_ISAR_VFPHP, // VFP half precision convert support +} armISARSupport; + +// +// This structure is filled with information extracted from the decoded +// instruction +// +typedef struct armInstructionInfoS { + const char *opcode; // opcode name + const char *format; // disassembly format string + armArchitecture support; // variants on which instruction supported + armISARSupport isar; // ISAR instruction support + Uns32 thisPC; // instruction address + Uns32 instruction; // instruction word + armInstructionType type; // instruction type + armCondition cond; // condition under which instruction executes + armSetFlags f; // set flags? + armShiftOp so; // shifter operation to apply to arg 2 + armIncDec incDec; // increment/decrement action + Uns32 c; // constant value + Uns32 t; // target address + Uns32 rList; // register list + Uns8 crotate; // constant rotation from instruction + Uns8 bytes; // instruction size in bytes (1, 2 or 4) + Uns8 r1; // register 1 + Uns8 r2; // register 2 + Uns8 r3; // register 3 + Uns8 r4; // register 4 + Uns8 sz; // load/store size + Int8 w; // bit operation width + Uns8 cpNum; // coprocessor number + Uns8 cpOp1; // coprocessor opcode1 + Uns8 cpOp2; // coprocessor opcode2 + Bool xs; // sign extend? + Bool tl; // translate? + Bool pi; // post-indexed? + Bool wb; // instruction specifies writeback? + Bool u; // instruction U bit set? + Bool ll; // instruction specifies long load? + Bool ea; // load/store is exclusive access? + armUnalignedAction ua; // unaligned action + Bool ma; // mode action (CPS) + armFlagAction fact; // flag action (CPS) + armFlagAffect faff; // flags affected (CPS) + armPSRBits psrbits; // MSR instruction bits value + Uns8 it; // IT block specification + Uns8 index; // index for VFP scalars + Uns8 nregs; // number of registers for vfp register lists + armSDFPType dt1; // VFP first data type + armSDFPType dt2; // VFP second data type + armSdfpMItype sdfpMI; // VFP modified immediate constant value +} armInstructionInfo; + +#endif + diff --git a/ovp/armmModel/armDisassemble.h b/ovp/armmModel/armDisassemble.h new file mode 100644 index 00000000..5a6b439f --- /dev/null +++ b/ovp/armmModel/armDisassemble.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_DISASSEMBLE_H +#define ARM_DISASSEMBLE_H + +// basic number types +#include "hostapi/impTypes.h" + +// model header files +#include "armTypeRefs.h" + +// +// ARM disassembler, decoded instruction interface +// +const char *armDisassembleInfo(armP arm, armInstructionInfoP info); + +#endif + diff --git a/ovp/armmModel/armDisassembleFormats.h b/ovp/armmModel/armDisassembleFormats.h new file mode 100644 index 00000000..504b8539 --- /dev/null +++ b/ovp/armmModel/armDisassembleFormats.h @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_DISASSEMBLE_FORMATS_H +#define ARM_DISASSEMBLE_FORMATS_H + +// +// These are placeholders in disassembly decoder +// +#define EMIT_R1 '\001' +#define EMIT_R2 '\002' +#define EMIT_R3 '\003' +#define EMIT_R4 '\004' +#define EMIT_CU '\005' +#define EMIT_CS '\006' +#define EMIT_CX '\007' +#define EMIT_T '\010' +#define EMIT_SHIFT '\011' +#define EMIT_SHIFT_C '\012' +#define EMIT_CPNUM '\013' +#define EMIT_COP1 '\014' +#define EMIT_COP2 '\015' +#define EMIT_CR1 '\016' +#define EMIT_CR2 '\017' +#define EMIT_CR3 '\020' +#define EMIT_OPT '\021' +#define EMIT_WB '\022' +#define EMIT_RLIST '\023' +#define EMIT_U '\024' +#define EMIT_SR '\025' +#define EMIT_FLAGS '\026' +#define EMIT_OPT_MODE '\027' +#define EMIT_LIM '\031' +#define EMIT_WIDTH '\032' +#define EMIT_ITC '\033' +#define EMIT_SZSHIFT '\034' +#define EMIT_R1F '\035' +#define EMIT_FPSCR '\036' +#define EMIT_S1 '\302' +#define EMIT_S2 '\303' +#define EMIT_S3 '\304' +#define EMIT_D1 '\305' +#define EMIT_D2 '\306' +#define EMIT_D3 '\307' +#define EMIT_Z1 '\313' +#define EMIT_Z2 '\314' +#define EMIT_SS1 '\316' +#define EMIT_SS3 '\317' +#define EMIT_C0F '\324' +#define EMIT_SDFP_MI '\325' +#define EMIT_SIMD_RL '\326' +#define EMIT_VFP_RL '\327' + +// +// These are placeholders in disassembly format strings +// +#define EMIT_R1_S "\001" +#define EMIT_R2_S "\002" +#define EMIT_R3_S "\003" +#define EMIT_R4_S "\004" +#define EMIT_CU_S "\005" +#define EMIT_CS_S "\006" +#define EMIT_CX_S "\007" +#define EMIT_T_S "\010" +#define EMIT_SHIFT_S "\011" +#define EMIT_SHIFT_C_S "\012" +#define EMIT_CPNUM_S "\013" +#define EMIT_COP1_S "\014" +#define EMIT_COP2_S "\015" +#define EMIT_CR1_S "\016" +#define EMIT_CR2_S "\017" +#define EMIT_CR3_S "\020" +#define EMIT_OPT_S "\021" +#define EMIT_WB_S "\022" +#define EMIT_RLIST_S "\023" +#define EMIT_U_S "\024" +#define EMIT_SR_S "\025" +#define EMIT_FLAGS_S "\026" +#define EMIT_OPT_MODE_S "\027" +#define EMIT_LIM_S "\031" +#define EMIT_WIDTH_S "\032" +#define EMIT_ITC_S "\033" +#define EMIT_SZSHIFT_S "\034" +#define EMIT_R1F_S "\035" +#define EMIT_FPSCR_S "\036" +#define EMIT_S1_S "\302" +#define EMIT_S2_S "\303" +#define EMIT_S3_S "\304" +#define EMIT_D1_S "\305" +#define EMIT_D2_S "\306" +#define EMIT_D3_S "\307" +#define EMIT_Z1_S "\313" +#define EMIT_Z2_S "\314" +#define EMIT_SS1_S "\316" +#define EMIT_SS3_S "\317" +#define EMIT_C0F_S "\324" +#define EMIT_SDFP_MI_S "\325" +#define EMIT_SIMD_RL_S "\326" +#define EMIT_VFP_RL_S "\327" + +// +// These are disassembly format strings +// +#define FMT_NONE "" +#define FMT_R1 EMIT_R1_S +#define FMT_R1_R2 EMIT_R1_S "," EMIT_R2_S +#define FMT_R1_R2_R3 EMIT_R1_S "," EMIT_R2_S "," EMIT_R3_S +#define FMT_R1_R2_R3_R4 EMIT_R1_S "," EMIT_R2_S "," EMIT_R3_S "," EMIT_R4_S +#define FMT_XIMM EMIT_CX_S +#define FMT_SIMM EMIT_CS_S +#define FMT_UIMM EMIT_CU_S +#define FMT_R1_SIMM EMIT_R1_S "," EMIT_CS_S +#define FMT_R1_UIMM EMIT_R1_S "," EMIT_CU_S +#define FMT_R1_R2_SIMM EMIT_R1_S "," EMIT_R2_S "," EMIT_CS_S +#define FMT_R1_R2_UIMM EMIT_R1_S "," EMIT_R2_S "," EMIT_CU_S +#define FMT_R1_R2_SHIFT_SIMM EMIT_R1_S "," EMIT_R2_S "," EMIT_SHIFT_C_S +#define FMT_R1_R2_SHIFT_R3 EMIT_R1_S "," EMIT_R2_S "," EMIT_SHIFT_S " " EMIT_R3_S +#define FMT_R1_R2_SHIFT EMIT_R1_S "," EMIT_R2_S "," EMIT_SHIFT_S +#define FMT_R1_R2_R3_SHIFT_SIMM EMIT_R1_S "," EMIT_R2_S "," EMIT_R3_S "," EMIT_SHIFT_C_S +#define FMT_R1_R2_R3_SHIFT_R4 EMIT_R1_S "," EMIT_R2_S "," EMIT_R3_S "," EMIT_SHIFT_S " " EMIT_R4_S +#define FMT_R1_R2_R3_SHIFT EMIT_R1_S "," EMIT_R2_S "," EMIT_R3_S "," EMIT_SHIFT_S +#define FMT_R1_WIDTH_R2 EMIT_R1_S "," EMIT_WIDTH_S "," EMIT_R2_S +#define FMT_R1_WIDTH_R2_SHIFT_SIMM EMIT_R1_S "," EMIT_WIDTH_S "," EMIT_R2_S "," EMIT_SHIFT_C_S +#define FMT_R1_ADDR_R2_SIMM EMIT_R1_S ",[" EMIT_R2_S "1],*" EMIT_CS_S "2]" EMIT_WB_S +#define FMT_R1_ADDR_R2_R3 EMIT_R1_S ",[" EMIT_R2_S "1]," EMIT_U_S EMIT_R3_S "2]" EMIT_WB_S +#define FMT_R1_ADDR_R2_R3_SHIFT_SIMM EMIT_R1_S ",[" EMIT_R2_S "1]," EMIT_U_S EMIT_R3_S "," EMIT_SHIFT_C_S "2]" EMIT_WB_S +#define FMT_R1_ADDR_R2_R3_SHIFT EMIT_R1_S ",[" EMIT_R2_S "1]," EMIT_U_S EMIT_R3_S "," EMIT_SHIFT_S "2]" EMIT_WB_S +#define FMT_R1_R4_ADDR_R2_SIMM EMIT_R1_S "," EMIT_R4_S ",[" EMIT_R2_S "1],*" EMIT_CS_S "2]" EMIT_WB_S +#define FMT_ADDR_R1_SIMM "[" EMIT_R1_S "1],*" EMIT_CS_S "2]" EMIT_WB_S +#define FMT_ADDR_R1_R2 "[" EMIT_R1_S "1]," EMIT_U_S EMIT_R2_S "2]" EMIT_WB_S +#define FMT_ADDR_R1_R2_SHIFT_SIMM "[" EMIT_R1_S "1]," EMIT_U_S EMIT_R2_S "," EMIT_SHIFT_C_S "2]" EMIT_WB_S +#define FMT_ADDR_R1_R2_SHIFT "[" EMIT_R1_S "1]," EMIT_U_S EMIT_R2_S "," EMIT_SHIFT_S "2]" EMIT_WB_S +#define FMT_R1_R2_ADDR_R3_SIMM EMIT_R1_S "," EMIT_R2_S ",[" EMIT_R3_S "1],*" EMIT_CS_S "2]" +#define FMT_R1_R2_R4_ADDR_R3_SIMM EMIT_R1_S "," EMIT_R2_S "," EMIT_R4_S ",[" EMIT_R3_S "1],*" EMIT_CS_S "2]" +#define FMT_R1_R4_ADDR_R2_SIMM EMIT_R1_S "," EMIT_R4_S ",[" EMIT_R2_S "1],*" EMIT_CS_S "2]" EMIT_WB_S +#define ADDR_R1_R2_SZSHIFT ",[" EMIT_R1_S "," EMIT_R2_S ",*" EMIT_SZSHIFT_S "]" +#define FMT_CPNUM_CR1_SIMM EMIT_CPNUM_S "," EMIT_CR1_S ",[" EMIT_R2_S "1],*" EMIT_CS_S "2]" EMIT_WB_S +#define FMT_CPNUM_CR1_UNINDEXED EMIT_CPNUM_S "," EMIT_CR1_S ",[" EMIT_R2_S "],{" EMIT_OPT_S "}" +#define FMT_SR_R1 EMIT_SR_S "," EMIT_R1_S +#define FMT_R1_SR EMIT_R1_S "," EMIT_SR_S +#define FMT_R1_WB EMIT_R1_S EMIT_WB_S +#define FMT_R1_WB_UIMM EMIT_R1_S EMIT_WB_S "," EMIT_CU_S +#define FMT_T EMIT_T_S +#define FMT_R1_T EMIT_R1_S "," EMIT_T_S +#define FMT_CPNUM_COP1_CR1_CR2_CR3_COP2 EMIT_CPNUM_S "," EMIT_COP1_S "," EMIT_CR1_S "," EMIT_CR2_S "," EMIT_CR3_S ",{" EMIT_COP2_S "}" +#define FMT_CPNUM_COP1_R1_R2_CR3 EMIT_CPNUM_S "," EMIT_COP1_S "," EMIT_R1_S "," EMIT_R2_S "," EMIT_CR3_S +#define FMT_CPNUM_COP1_R1_CR2_CR3_COP2 EMIT_CPNUM_S "," EMIT_COP1_S "," EMIT_R1_S "," EMIT_CR2_S "," EMIT_CR3_S ",{" EMIT_COP2_S "}" +#define FMT_CPNUM_COP1_R1F_CR2_CR3_COP2 EMIT_CPNUM_S "," EMIT_COP1_S "," EMIT_R1F_S "," EMIT_CR2_S "," EMIT_CR3_S ",{" EMIT_COP2_S "}" +#define FMT_RLIST EMIT_RLIST_S +#define FMT_SIMD_RL EMIT_SIMD_RL_S +#define FMT_VFP_RL EMIT_VFP_RL_S +#define FMT_R1_RLIST EMIT_R1_S EMIT_WB_S "," EMIT_RLIST_S +#define FMT_R1_RLIST_T EMIT_R1_S "!," EMIT_RLIST_S +#define FMT_R1_RLIST_UM EMIT_R1_S EMIT_WB_S "," EMIT_RLIST_S "^" +#define FMT_R1_VFP_RL EMIT_R1_S EMIT_WB_S "," EMIT_VFP_RL_S +#define FMT_R1_SIMD_RL EMIT_R1_S EMIT_WB_S "," EMIT_SIMD_RL_S +#define FMT_FLAGS_OPT_MODE EMIT_FLAGS_S ",*" EMIT_OPT_MODE_S +#define FMT_LIM EMIT_LIM_S +#define FMT_R1_R2_LSB_WIDTH EMIT_R1_S "," EMIT_R2_S "," EMIT_CU_S "," EMIT_WIDTH_S +#define FMT_R1_LSB_WIDTH EMIT_R1_S "," EMIT_CU_S "," EMIT_WIDTH_S +#define FMT_ITC EMIT_ITC_S +#define FMT_R1_FPSCR EMIT_R1F_S "," EMIT_FPSCR_S +#define FMT_FPSCR_R1 EMIT_FPSCR_S "," EMIT_R1_S +#define FMT_R1_S2 EMIT_R1_S "," EMIT_S2_S +#define FMT_R1_Z2 EMIT_R1_S "," EMIT_Z2_S +#define FMT_S1_F0 EMIT_S1_S "," EMIT_C0F_S +#define FMT_S1_S2 EMIT_S1_S "," EMIT_S2_S +#define FMT_S1_R2 EMIT_S1_S "," EMIT_R2_S +#define FMT_S1_S2_S3 EMIT_S1_S "," EMIT_S2_S "," EMIT_S3_S +#define FMT_S1_S2_UIMM EMIT_S1_S "," EMIT_S2_S "," EMIT_CU_S +#define FMT_S1_SDFP_MI EMIT_S1_S "," EMIT_SDFP_MI_S +#define FMT_S1_ADDR_R2_SIMM EMIT_S1_S ",[" EMIT_R2_S "1],*" EMIT_CS_S "2]" +#define FMT_S1_SDFP_MI EMIT_S1_S "," EMIT_SDFP_MI_S +#define FMT_Z1_R2 EMIT_Z1_S "," EMIT_R2_S +#define FMT_R1_R2_D3 EMIT_R1_S "," EMIT_R2_S "," EMIT_D3_S +#define FMT_D1_R2_R3 EMIT_D1_S "," EMIT_R2_S "," EMIT_R3_S +#define FMT_D1_ADDR_R2_SIMM EMIT_D1_S ",[" EMIT_R2_S "1],*" EMIT_CS_S "2]" +#define FMT_R1_R2_SS3 EMIT_R1_S "," EMIT_R2_S "," EMIT_SS3_S +#define FMT_SS1_R2_R3 EMIT_SS1_S "," EMIT_R2_S "," EMIT_R3_S + + +#endif diff --git a/ovp/armmModel/armEmit.h b/ovp/armmModel/armEmit.h new file mode 100644 index 00000000..80f10f1d --- /dev/null +++ b/ovp/armmModel/armEmit.h @@ -0,0 +1,540 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_EMIT_H +#define ARM_EMIT_H + +// VMI header files +#include "vmi/vmiTypes.h" + +// model header files +#include "armMode.h" +#include "armTypeRefs.h" + + +//////////////////////////////////////////////////////////////////////////////// +// INTERWORKING +//////////////////////////////////////////////////////////////////////////////// + +// +// Emit code to interwork if required, depending on LSB of target address +// +void armEmitInterworkLSB(armMorphStateP state, vmiReg ra); + + +//////////////////////////////////////////////////////////////////////////////// +// INTEGER OPCODES +//////////////////////////////////////////////////////////////////////////////// + +// +// rd = simPC (true) +// +void armEmitGetTruePC(armMorphStateP state, vmiReg rd); + +// +// r15 = simPC (accoring to ARM pipeline) +// +void armEmitGetPC(armMorphStateP state); + +// +// rd = c +// +void armEmitMoveRC( + armMorphStateP state, + Uns32 bits, + vmiReg rd, + Uns64 c +); + +// +// rd = ra +// +void armEmitMoveRR( + armMorphStateP state, + Uns32 bits, + vmiReg rd, + vmiReg ra +); + +// +// rd = ra +// +void armEmitMoveExtendRR( + armMorphStateP state, + Uns32 destBits, + vmiReg rd, + Uns32 srcBits, + vmiReg ra, + Bool signExtend +); + +// +// rd = (flag==select1) ? c1 : c2 +// +void armEmitCondMoveRCC( + armMorphStateP state, + Uns32 bits, + vmiReg flag, + Bool select1, + vmiReg rd, + Uns64 c1, + Uns64 c2 +); + +// +// rd = ra +// +void armEmitUnopRR( + armMorphStateP state, + Uns32 bits, + vmiUnop op, + vmiReg rd, + vmiReg ra, + vmiFlagsCP flags +); + +// +// rd = c +// +void armEmitUnopRC( + armMorphStateP state, + Uns32 bits, + vmiUnop op, + vmiReg rd, + Uns64 c, + vmiFlagsCP flags +); + +// +// rd = rd ra +// +void armEmitBinopRR( + armMorphStateP state, + Uns32 bits, + vmiBinop op, + vmiReg rd, + vmiReg ra, + vmiFlagsCP flags +); + +// +// rd = rd c +// +void armEmitBinopRC( + armMorphStateP state, + Uns32 bits, + vmiBinop op, + vmiReg rd, + Uns64 c, + vmiFlagsCP flags +); + +// +// rd = ra rb +// +void armEmitBinopRRR( + armMorphStateP state, + Uns32 bits, + vmiBinop op, + vmiReg rd, + vmiReg ra, + vmiReg rb, + vmiFlagsCP flags +); + +// +// rd = ra c +// +void armEmitBinopRRC( + armMorphStateP state, + Uns32 bits, + vmiBinop op, + vmiReg rd, + vmiReg ra, + Uns64 c, + vmiFlagsCP flags +); + +// +// Generate shift mask prefix (sets mask to 255) +// +void armEmitSetShiftMask(void); + +// +// rdh:rdl = ra*rb +// +void armEmitMulopRRR( + armMorphStateP state, + Uns32 bits, + vmiBinop op, + vmiReg rdh, + vmiReg rdl, + vmiReg ra, + vmiReg rb, + vmiFlagsCP flags +); + + +//////////////////////////////////////////////////////////////////////////////// +// FLOATING POINT OPCODES +//////////////////////////////////////////////////////////////////////////////// + +// +// fd = fa fb fc +// +void armEmitFTernopSimdRRRR( + armMorphStateP state, + vmiFType type, + Uns32 num, + vmiFTernop op, + vmiReg fd, + vmiReg fa, + vmiReg fb, + vmiReg fc, + Bool roundInt +); + +// +// fd = fa fb +// +void armEmitFBinopSimdRRR( + armMorphStateP state, + vmiFType type, + Uns32 num, + vmiFBinop op, + vmiReg fd, + vmiReg fa, + vmiReg fb +); + +// +// fd = fa +// +void armEmitFUnopSimdRR( + armMorphStateP state, + vmiFType type, + Uns32 num, + vmiFUnop op, + vmiReg fd, + vmiReg fa +); + +// +// fd = fa +// +void armEmitFConvertRR( + armMorphStateP state, + vmiFType destType, + vmiReg fd, + vmiFType srcType, + vmiReg fa, + vmiFPRC round +); + +// +// compare fa to fb, setting relation and flags +// +void armEmitFCompareRR( + armMorphStateP state, + vmiFType type, + vmiReg relation, + vmiReg fa, + vmiReg fb, + Bool allowQNaN, + Bool setSticky +); + + +//////////////////////////////////////////////////////////////////////////////// +// LOAD AND STORE OPCODES +//////////////////////////////////////////////////////////////////////////////// + +// +// mem[ra+offset] = rb (when ra!=VMI_NOREG) +// mem[offset] = rb (when ra==VMI_NOREG) +// +void armEmitStoreRRO( + armMorphStateP state, + Uns32 bits, + Uns32 offset, + vmiReg ra, + vmiReg rb +); + +// +// mem[ra+offset] = rbH:rbL (when ra!=VMI_NOREG) +// mem[offset] = rbH:rbL (when ra==VMI_NOREG) +// +void armEmitStoreRRRO( + armMorphStateP state, + Uns32 bits, + Uns32 offset, + vmiReg ra, + vmiReg rbL, + vmiReg rbH +); + +// +// rd = mem[ra+offset] (when ra!=VMI_NOREG) +// rd = mem[offset] (when ra==VMI_NOREG) +// +void armEmitLoadRRO( + armMorphStateP state, + Uns32 bits, + Uns32 offset, + vmiReg rd, + vmiReg ra, + Bool signExtend, + Bool isReturn +); + +// +// rdH:rdL = mem[ra+offset] (when ra!=VMI_NOREG) +// rdH:rdL = mem[offset] (when ra==VMI_NOREG) +// +void armEmitLoadRRRO( + armMorphStateP state, + Uns32 bits, + Uns32 offset, + vmiReg rdL, + vmiReg rdH, + vmiReg ra, + vmiReg rt, + Bool signExtend, + Bool isReturn +); + +// +// trystore mem[ra+offset] (when ra!=VMI_NOREG) +// trystore mem[offset] (when ra==VMI_NOREG) +// +void armEmitTryStoreRC( + armMorphStateP state, + Uns32 bits, + Addr offset, + vmiReg ra +); + + +//////////////////////////////////////////////////////////////////////////////// +// COMPARE OPERATIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// flag = ra rb +// +void armEmitCompareRR( + armMorphStateP state, + Uns32 bits, + vmiCondition cond, + vmiReg ra, + vmiReg rb, + vmiReg flag +); + +// +// flag = ra c +// +void armEmitCompareRC( + armMorphStateP state, + Uns32 bits, + vmiCondition cond, + vmiReg ra, + Uns64 c, + vmiReg flag +); + + +//////////////////////////////////////////////////////////////////////////////// +// INTER-INSTRUCTION CONDITIONAL AND UNCONDITIONAL JUMPS +//////////////////////////////////////////////////////////////////////////////// + +// +// Structure holding information about a jump +// +typedef struct armJumpInfoS { + vmiReg linkReg; // link register + vmiJumpHint hint; // call hint + Uns32 linkPC; // address to put in link register +} armJumpInfo, *armJumpInfoP; + +// +// Perform an unconditional direct jump. +// +void armEmitUncondJump( + armMorphStateP state, + armJumpInfoP ji +); + +// +// Perform an unconditional indirect jump. +// +void armEmitUncondJumpReg( + armMorphStateP state, + armJumpInfoP ji, + vmiReg toReg +); + +// +// Perform a conditional direct jump if the condition flag is non-zero +// (jumpIfTrue) or zero (not jumpIfTrue). +// +void armEmitCondJump( + armMorphStateP state, + armJumpInfoP ji, + vmiReg flag, + Bool jumpIfTrue +); + +// +// Perform an implicit unconditional direct jump if required +// +void armEmitImplicitUncondJump(armMorphStateP state); + + +//////////////////////////////////////////////////////////////////////////////// +// INTRA-INSTRUCTION CONDITIONAL AND UNCONDITIONAL JUMPS +//////////////////////////////////////////////////////////////////////////////// + +// +// Create and return a new label. +// +vmiLabelP armEmitNewLabel(void); + +// +// Insert a label previously created by vmimtNewLabel at the current location. +// +void armEmitInsertLabel(vmiLabelP label); + +// +// Perform an unconditional jump to the passed local label. +// +void armEmitUncondJumpLabel(vmiLabelP toLabel); + +// +// Perform a conditional jump if the condition flag is non-zero (jumpIfTrue) +// or zero (not jumpIfTrue). The target location is the passed local label. +// +void armEmitCondJumpLabel(vmiReg flag, Bool jumpIfTrue, vmiLabelP toLabel); + +// +// Test the register value by performing bitwise AND with the passed constant +// value, and jump to 'toLabel' if condition 'cond' is satisfied. +// +void armEmitTestRCJumpLabel( + Uns32 bits, + vmiCondition cond, + vmiReg r, + Uns64 c, + vmiLabelP toLabel +); + +// +// Compare the register value by performing subtraction of the passed constant +// value, and jump to 'toLabel' if condition 'cond' is satisfied. +// +void armEmitCompareRCJumpLabel( + Uns32 bits, + vmiCondition cond, + vmiReg r, + Uns64 c, + vmiLabelP toLabel +); + + +//////////////////////////////////////////////////////////////////////////////// +//// CALLBACK FUNCTION INTERFACE +//////////////////////////////////////////////////////////////////////////////// + +// +// Add processor argument to the stack frame +// +void armEmitArgProcessor(armMorphStateP state); + +// +// Add Uns32 argument to the stack frame +// +void armEmitArgUns32(armMorphStateP state, Uns32 arg); + +// +// Add register argument to the stack frame +// +void armEmitArgReg(armMorphStateP state, Uns32 bits, vmiReg r); + +// +// Add program counter argument to the stack frame +// +void armEmitArgSimPC(armMorphStateP state, Uns32 bits); + +// +// Make a call with all current stack frame arguments +// +void armEmitCall(armMorphStateP state, vmiCallFn arg); + +// +// As above but generate a function result (placed in rd) +// +void armEmitCallResult( + armMorphStateP state, + vmiCallFn arg, + Uns32 bits, + vmiReg rd +); + + +//////////////////////////////////////////////////////////////////////////////// +// SIMULATOR CONTROL +//////////////////////////////////////////////////////////////////////////////// + +// +// Stop simulation of the current processor +// +void armEmitExit(void); + +// +// Emit code to wait for the passed reason +// +void armEmitWait(armMorphStateP state, armDisable reason); + +// +// Terminate the current block +// +void armEmitEndBlock(void); + +// +// Emit code to validate the current block mode +// +void armEmitValidateBlockMask(armBlockMask blockMask); + +#endif diff --git a/ovp/armmModel/armExceptionTypes.h b/ovp/armmModel/armExceptionTypes.h new file mode 100644 index 00000000..7810f72d --- /dev/null +++ b/ovp/armmModel/armExceptionTypes.h @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_EXCEPTION_TYPES_H +#define ARM_EXCEPTION_TYPES_H + +// +// This enumerates exceptions +// +typedef enum armExceptNumE { + AEN_None = 0, + AEN_Reset = 1, + AEN_NMI = 2, + AEN_HardFault = 3, + AEN_MemManage = 4, + AEN_BusFault = 5, + AEN_UsageFault = 6, + AEN_SVCall = 11, + AEN_DebugMonitor = 12, + AEN_PendSV = 14, + AEN_SysTick = 15, + AEN_ExternalInt0 = 16, + AEN_LAST = 512 // KEEP LAST: for sizing +} armExceptNum; + +// +// This identifies whether the passed exception is an interrupt (and whether +// SCR.SLEEPONEXIT applies to this exception type) +// +#define EX_IS_INTERRUPT(_E) ((_E)>=AEN_PendSV) + +// +// This enumerates the context of a load/store exception +// +typedef enum armExceptCxtE { + AEC_None = 0, + AEC_PushStack, + AEC_PopStack, + AEC_ReadVector, + AEC_PreserveFPState +} armExceptCxt; + +// +// This defines permanently-enabled exceptions +// +#define ARM_EXCEPT_PERMANENT_ENABLE ( \ + (1 << AEN_Reset) | \ + (1 << AEN_NMI) | \ + (1 << AEN_HardFault) | \ + (1 << AEN_SVCall) | \ + (1 << AEN_PendSV) | \ + (1 << AEN_SysTick) \ +) + +// +// Utility macros for accessing exception bitmasks +// +#define EX_MASK_INDEX(_N) ((_N)/32) +#define EX_MASK_BIT(_N) ((_N)&31) +#define EX_MASK_MASK(_N) (1<> EX_MASK_BIT(_N)) & 1) +#define EX_MASK_SET_1(_M, _N) _M[EX_MASK_INDEX(_N)] |= EX_MASK_MASK(_N) +#define EX_MASK_SET_0(_M, _N) _M[EX_MASK_INDEX(_N)] &= ~EX_MASK_MASK(_N) + +#define EX_MASK_SET_V(_M, _N, _V) { \ + EX_MASK_SET_0(_M, _N); \ + _M[EX_MASK_INDEX(_N)] |= ((_V)<> ARM_FP32_EXP_SHIFT) +#define ARM_FP32_FRACTION(_F) ((_F) & ((1<> ARM_FP16_EXP_SHIFT) +#define ARM_FP16_FRACTION(_F) ((_F) & ((1< +// +#define MORPH_SET_SMLA_XY(_NAME) \ + [ARM_IT_##_NAME##BB] = {morphCB:armEmit##_NAME##BB}, \ + [ARM_IT_##_NAME##BT] = {morphCB:armEmit##_NAME##BT}, \ + [ARM_IT_##_NAME##TB] = {morphCB:armEmit##_NAME##TB}, \ + [ARM_IT_##_NAME##TT] = {morphCB:armEmit##_NAME##TT} + +// +// Morpher attributes for ARM instructions like SMLAW +// +#define MORPH_SET_SMLAW_Y(_NAME) \ + [ARM_IT_##_NAME##B] = {morphCB:armEmit##_NAME##B}, \ + [ARM_IT_##_NAME##T] = {morphCB:armEmit##_NAME##T} + +// +// Morpher attributes for parallel add/subtract instructions +// +#define MORPH_SET_PAS(_NAME, _OP1, _OP2, _SEXTEND, _SETGE, _HALVE) \ + [ARM_IT_##_NAME##ADD16] = {morphCB:armEmitParallelBinop16, binop:_OP1, binop2:_OP1, exchange:0, sextend:_SEXTEND, setGE:_SETGE, halve:_HALVE}, \ + [ARM_IT_##_NAME##ASX] = {morphCB:armEmitParallelBinop16, binop:_OP2, binop2:_OP1, exchange:1, sextend:_SEXTEND, setGE:_SETGE, halve:_HALVE}, \ + [ARM_IT_##_NAME##SAX] = {morphCB:armEmitParallelBinop16, binop:_OP1, binop2:_OP2, exchange:1, sextend:_SEXTEND, setGE:_SETGE, halve:_HALVE}, \ + [ARM_IT_##_NAME##SUB16] = {morphCB:armEmitParallelBinop16, binop:_OP2, binop2:_OP2, exchange:0, sextend:_SEXTEND, setGE:_SETGE, halve:_HALVE}, \ + [ARM_IT_##_NAME##ADD8] = {morphCB:armEmitParallelBinop8, binop:_OP1, exchange:0, sextend:_SEXTEND, setGE:_SETGE, halve:_HALVE}, \ + [ARM_IT_##_NAME##SUB8] = {morphCB:armEmitParallelBinop8, binop:_OP2, exchange:0, sextend:_SEXTEND, setGE:_SETGE, halve:_HALVE} + +// +// Morpher attributes for signed multiply instructions with optional argument exchange +// +#define MORPH_SET_MEDIA_X(_NAME, _OP1, _OP2) \ + [ARM_IT_##_NAME] = {morphCB:armEmit##_OP1, binop:_OP2, exchange:0}, \ + [ARM_IT_##_NAME##X] = {morphCB:armEmit##_OP1, binop:_OP2, exchange:1} + +// +// Morpher attributes for signed multiply instructions with optional rounding +// +#define MORPH_SET_MEDIA_R(_NAME, _OP1, _OP2, _ACC) \ + [ARM_IT_##_NAME] = {morphCB:armEmit##_OP1, binop:_OP2, round:0, accumulate:_ACC}, \ + [ARM_IT_##_NAME##R] = {morphCB:armEmit##_OP1, binop:_OP2, round:1, accumulate:_ACC} + +// +// Morpher attributes for ARM instructions like PLD +// +#define MORPH_SET_PLD(_NAME) \ + [ARM_IT_##_NAME##_IMM] = {morphCB:armEmitNOP}, \ + [ARM_IT_##_NAME##_RM] = {morphCB:armEmitNOP}, \ + [ARM_IT_##_NAME##_RM_SHFT_IMM] = {morphCB:armEmitNOP} + + +//////////////////////////////////////////////////////////////////////////////// +// THUMB INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Morpher attributes for Thumb instructions like ADD (4) +// +#define MORPH_SET_ADD4(_NAME, _OP, _FLAGS_RW, _FLAGS_R, _COUT) \ + [ARM_IT_##_NAME] = {morphCB:armEmitBinopRT, binop:_OP, flagsRW:_FLAGS_RW, flagsR:_FLAGS_R, shiftCOut:_COUT} + +// +// Morpher attributes for Thumb instructions like ADD (6) +// +#define MORPH_SET_ADD6(_NAME, _OP, _FLAGS_RW, _FLAGS_R, _COUT) \ + [ARM_IT_##_NAME] = {morphCB:armEmitBinopI, binop:_OP, flagsRW:_FLAGS_RW, flagsR:_FLAGS_R, shiftCOut:_COUT} + +// +// Morpher attributes for Thumb instructions like ADD (7) +// +#define MORPH_SET_ADD7(_NAME, _OP, _FLAGS_RW, _FLAGS_R, _COUT) \ + [ARM_IT_##_NAME] = {morphCB:armEmitBinopIT, binop:_OP, flagsRW:_FLAGS_RW, flagsR:_FLAGS_R, shiftCOut:_COUT} + +// +// Morpher attributes for Thumb instructions like MOV (3) +// +#define MORPH_SET_MOV3(_NAME, _OP, _FLAGS_RW, _FLAGS_R, _COUT) \ + [ARM_IT_##_NAME] = {morphCB:armEmitUnopR, unop:_OP, flagsRW:_FLAGS_RW, flagsR:_FLAGS_R, shiftCOut:_COUT} + +// +// Morpher attributes for Thumb instructions like ADR +// +#define MORPH_SET_ADR(_NAME, _NEGATE) \ + [ARM_IT_##_NAME] = {morphCB:armEmitBinopADR, binop:vmi_ADD, negate:_NEGATE} + +// +// Morpher attributes for Thumb instructions like CBZ +// +#define MORPH_SET_CBZ(_NAME, _JUMP_IF_TRUE) \ + [ARM_IT_##_NAME] = {morphCB:armEmitCBZ, jumpIfTrue:_JUMP_IF_TRUE} + +// +// Morpher attributes for Thumb instructions like SDIV +// +#define MORPH_SET_SDIV(_NAME, _OP) \ + [ARM_IT_##_NAME] = {morphCB:armEmitDIV, binop:_OP} + +// +// Morpher attributes for Single entry VFP instructions +// +#define MORPH_SET_SINGLE_VFP(_NAME) \ + [ARM_IT_##_NAME] = {morphCB:armEmit##_NAME, iType:ARM_TY_VFP} + +// +// Morpher attributes for VFP instructions with D and S versions +// +#define MORPH_SET_VFP_DS(_NAME, _FUNC) \ + [ARM_IT_##_NAME##_S] = {morphCB:armEmit##_FUNC, iType:ARM_TY_VFP, ebytes:4}, \ + [ARM_IT_##_NAME##_D] = {morphCB:armEmit##_FUNC, iType:ARM_TY_VFP, ebytes:8} + +// +// Morpher attributes for VFP instructions with S version only +// +#define MORPH_SET_VFP_S(_NAME, _FUNC) \ + [ARM_IT_##_NAME] = {morphCB:armEmit##_FUNC, iType:ARM_TY_VFP, ebytes:4} + +// +// Morpher attributes for VFP instructions doing single precision binary floating point op +// +#define MORPH_SET_VFP_RRR_F(_NAME, _FUNC, _OP, _NEGATE) \ + [ARM_IT_##_NAME] = {morphCB:armEmit##_FUNC, iType:ARM_TY_VFP, fbinop:_OP, ebytes:4, negate:_NEGATE} + +// +// Morpher attributes for VFP instructions doing single precision unary floating point op +// +#define MORPH_SET_VFP_RR_F(_NAME, _OP) \ + [ARM_IT_##_NAME] = {morphCB:armEmitVFPUnop, iType:ARM_TY_VFP, funop:_OP, ebytes:4} + +// +// Morpher attributes for VFP VCMP instructions +// +#define MORPH_SET_VFP_VCMP(_NAME, _FUNC, _QNAN) \ + [ARM_IT_##_NAME] = {morphCB:armEmit##_FUNC, iType:ARM_TY_VFP, ebytes:4, allowQNaN:_QNAN} + +// +// Morpher attributes for VFP VCVT instructions +// +#define MORPH_SET_VFP_VCVT(_NAME, _FUNC, _BYTES, _SIGN, _RND) \ + [ARM_IT_##_NAME] = {morphCB:armEmit##_FUNC, iType:ARM_TY_VFP, ebytes:_BYTES, sextend:_SIGN, roundFPSCR:_RND} + +// +// Morpher attributes for VFP VCVT half precision instructions which may specify top or bottom half +// +#define MORPH_SET_VFP_VCVT_H(_NAME, _FUNC, _BYTES, _TOP) \ + [ARM_IT_##_NAME] = {morphCB:armEmit##_FUNC, iType:ARM_TY_VFP, ebytes:_BYTES, highhalf:_TOP} + +// +// Morpher attributes for single precision VFP Fused Multiply instructions +// +#define MORPH_SET_VFP_FMAC_F(_NAME, _SUB, _NEGATE) \ + [ARM_IT_##_NAME] = {morphCB:armEmitVFusedMAC, iType:ARM_TY_VFP, subtract:_SUB, negate:_NEGATE} + +#endif diff --git a/ovp/armmModel/armMorphFunctions.h b/ovp/armmModel/armMorphFunctions.h new file mode 100644 index 00000000..0223d076 --- /dev/null +++ b/ovp/armmModel/armMorphFunctions.h @@ -0,0 +1,240 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_MORPH_FUNCTIONS_H +#define ARM_MORPH_FUNCTIONS_H + +// model header files +#include "armMode.h" +#include "armMorph.h" + +// unop instructions +ARM_MORPH_FN(armEmitUnopI); +ARM_MORPH_FN(armEmitUnopR); +ARM_MORPH_FN(armEmitUnopRSI); +ARM_MORPH_FN(armEmitUnopRSR); +ARM_MORPH_FN(armEmitUnopRSRT); +ARM_MORPH_FN(armEmitUnopRX); + +// binop instructions +ARM_MORPH_FN(armEmitBinopI); +ARM_MORPH_FN(armEmitBinopR); +ARM_MORPH_FN(armEmitBinopRT); +ARM_MORPH_FN(armEmitBinopIT); +ARM_MORPH_FN(armEmitBinopADR); +ARM_MORPH_FN(armEmitBinopRSI); +ARM_MORPH_FN(armEmitBinopRSR); +ARM_MORPH_FN(armEmitBinopRX); + +// cmpop instructions +ARM_MORPH_FN(armEmitCmpopI); +ARM_MORPH_FN(armEmitCmpopR); +ARM_MORPH_FN(armEmitCmpopRSI); +ARM_MORPH_FN(armEmitCmpopRX); + +// multiply and divide instructions +ARM_MORPH_FN(armEmitMUL); +ARM_MORPH_FN(armEmitMLA); +ARM_MORPH_FN(armEmitMLS); +ARM_MORPH_FN(armEmitDIV); +ARM_MORPH_FN(armEmitMULL); +ARM_MORPH_FN(armEmitMLAL); + +// branch instructions +ARM_MORPH_FN(armEmitBranchC); +ARM_MORPH_FN(armEmitBranchR); +ARM_MORPH_FN(armEmitBLX); + +// miscellaneous instructions +ARM_MORPH_FN(armEmitCLZ); +ARM_MORPH_FN(armEmitBKPT); +ARM_MORPH_FN(armEmitSWI); + +// load and store instructions +ARM_MORPH_FN(armEmitLDRI); +ARM_MORPH_FN(armEmitLDRR); +ARM_MORPH_FN(armEmitLDRRSI); +ARM_MORPH_FN(armEmitLDM1); +ARM_MORPH_FN(armEmitSTRI); +ARM_MORPH_FN(armEmitSTRR); +ARM_MORPH_FN(armEmitSTRRSI); +ARM_MORPH_FN(armEmitSTM1); + +// coprocessor instructions +ARM_MORPH_FN(armEmitUsageFaultCP); + +// status register access instructions +ARM_MORPH_FN(armEmitMRS); +ARM_MORPH_FN(armEmitMSR); + +// DSP data processing instructions +ARM_MORPH_FN(armEmitQADD); +ARM_MORPH_FN(armEmitQSUB); +ARM_MORPH_FN(armEmitQDADD); +ARM_MORPH_FN(armEmitQDSUB); + +// DSP multiply instructions +ARM_MORPH_FN(armEmitSMLABB); +ARM_MORPH_FN(armEmitSMLABT); +ARM_MORPH_FN(armEmitSMLATB); +ARM_MORPH_FN(armEmitSMLATT); +ARM_MORPH_FN(armEmitSMLALBB); +ARM_MORPH_FN(armEmitSMLALBT); +ARM_MORPH_FN(armEmitSMLALTB); +ARM_MORPH_FN(armEmitSMLALTT); +ARM_MORPH_FN(armEmitSMLAWB); +ARM_MORPH_FN(armEmitSMLAWT); +ARM_MORPH_FN(armEmitSMULBB); +ARM_MORPH_FN(armEmitSMULBT); +ARM_MORPH_FN(armEmitSMULTB); +ARM_MORPH_FN(armEmitSMULTT); +ARM_MORPH_FN(armEmitSMULWB); +ARM_MORPH_FN(armEmitSMULWT); + +// hint instructions +ARM_MORPH_FN(armEmitNOP); +ARM_MORPH_FN(armEmitWFE); +ARM_MORPH_FN(armEmitWFI); +ARM_MORPH_FN(armEmitSEV); + +// move instructions +ARM_MORPH_FN(armEmitMOVW); +ARM_MORPH_FN(armEmitMOVT); + +// multiply instructions +ARM_MORPH_FN(armEmitMAAL); + +// synchronization instructions +ARM_MORPH_FN(armEmitLDREX); +ARM_MORPH_FN(armEmitSTREX); +ARM_MORPH_FN(armEmitCLREX); + +// miscellaneous instructions +ARM_MORPH_FN(armEmitCPS); + +// branch instructions +ARM_MORPH_FN(armEmitCBZ); +ARM_MORPH_FN(armEmitTB); + +// basic media instructions +ARM_MORPH_FN(armEmitUSAD8); +ARM_MORPH_FN(armEmitUSADA8); +ARM_MORPH_FN(armEmitSBFX); +ARM_MORPH_FN(armEmitBFC); +ARM_MORPH_FN(armEmitBFI); +ARM_MORPH_FN(armEmitUBFX); + +// parallel add/subtract instructions +ARM_MORPH_FN(armEmitParallelBinop8); +ARM_MORPH_FN(armEmitParallelBinop16); + +// packing, unpacking, saturation and reversal instructions +ARM_MORPH_FN(armEmitPKHBT); +ARM_MORPH_FN(armEmitPKHTB); +ARM_MORPH_FN(armEmitSSAT); +ARM_MORPH_FN(armEmitSSAT16); +ARM_MORPH_FN(armEmitUSAT); +ARM_MORPH_FN(armEmitUSAT16); +ARM_MORPH_FN(armEmitSXTAB); +ARM_MORPH_FN(armEmitUXTAB); +ARM_MORPH_FN(armEmitSXTAB16); +ARM_MORPH_FN(armEmitUXTAB16); +ARM_MORPH_FN(armEmitSXTAH); +ARM_MORPH_FN(armEmitUXTAH); +ARM_MORPH_FN(armEmitSXTB); +ARM_MORPH_FN(armEmitUXTB); +ARM_MORPH_FN(armEmitSXTB16); +ARM_MORPH_FN(armEmitUXTB16); +ARM_MORPH_FN(armEmitSXTH); +ARM_MORPH_FN(armEmitUXTH); +ARM_MORPH_FN(armEmitSEL); +ARM_MORPH_FN(armEmitREV); +ARM_MORPH_FN(armEmitREV16); +ARM_MORPH_FN(armEmitRBIT); +ARM_MORPH_FN(armEmitREVSH); + +// signed multiply instructions +ARM_MORPH_FN(armEmitSMLXD); +ARM_MORPH_FN(armEmitSMUXD); +ARM_MORPH_FN(armEmitSMLXLD); +ARM_MORPH_FN(armEmitSMMLX); + +// VFP data processing instructions +ARM_MORPH_FN(armEmitVFPUnop); +ARM_MORPH_FN(armEmitVFPBinop); +ARM_MORPH_FN(armEmitVMulAcc_VFP); +ARM_MORPH_FN(armEmitVFusedMAC); +ARM_MORPH_FN(armEmitVMOVI_VFP); +ARM_MORPH_FN(armEmitVMOVR_VFP); +ARM_MORPH_FN(armEmitVABS_VFP); +ARM_MORPH_FN(armEmitVNEG_VFP); +ARM_MORPH_FN(armEmitVCMP_VFP); +ARM_MORPH_FN(armEmitVCMP0_VFP); +ARM_MORPH_FN(armEmitVCVT_SD_VFP); +ARM_MORPH_FN(armEmitVCVT_SH_VFP); +ARM_MORPH_FN(armEmitVCVT_HS_VFP); +ARM_MORPH_FN(armEmitVCVT_XF_VFP); +ARM_MORPH_FN(armEmitVCVT_FX_VFP); +ARM_MORPH_FN(armEmitVCVT_IF_VFP); +ARM_MORPH_FN(armEmitVCVT_FI_VFP); + +// VFP Extension register load/store instructions +ARM_MORPH_FN(armEmitVLDR); +ARM_MORPH_FN(armEmitVSTR); +ARM_MORPH_FN(armEmitVLDM); +ARM_MORPH_FN(armEmitVSTM); + +// VFP 8, 16 and 32-bit transfer instructions +ARM_MORPH_FN(armEmitVMRS); +ARM_MORPH_FN(armEmitVMSR); +ARM_MORPH_FN(armEmitVMOVRS); +ARM_MORPH_FN(armEmitVMOVSR); +ARM_MORPH_FN(armEmitVMOVRZ); +ARM_MORPH_FN(armEmitVMOVZR); +ARM_MORPH_FN(armEmitVDUPR); + +// VFP 64-bit transfer instructions +ARM_MORPH_FN(armEmitVMOVRRD); +ARM_MORPH_FN(armEmitVMOVDRR); +ARM_MORPH_FN(armEmitVMOVRRSS); +ARM_MORPH_FN(armEmitVMOVSSRR); + +// +// If the register index specifies a banked register, return a vmiReg structure +// for the banked register; otherwise, return VMI_NOREG. Also, validate the +// current block mode for banked registers. +// +vmiReg armGetBankedRegMode(Bool useSPProcess, Uns32 r); + +#endif diff --git a/ovp/armmModel/armRegisters.h b/ovp/armmModel/armRegisters.h new file mode 100644 index 00000000..d81c54d2 --- /dev/null +++ b/ovp/armmModel/armRegisters.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_REGISTERS_H +#define ARM_REGISTERS_H + +// VMI header files +#include "vmi/vmiTypes.h" + +// model header files +#include "armTypeRefs.h" + + +//////////////////////////////////////////////////////////////////////////////// +// REGISTER ACCESS MACROS +//////////////////////////////////////////////////////////////////////////////// + +// aliases for specific GPRs +#define ARM_REG_SP 13 +#define ARM_REG_LR 14 +#define ARM_REG_PC 15 + +// morph-time macros to calculate offsets to registers in an arm structure +#define ARM_CPU_OFFSET(_F) VMI_CPU_OFFSET(armP, _F) +#define ARM_CPU_REG(_F) VMI_CPU_REG(armP, _F) +#define ARM_CPU_REG_CONST(_F) VMI_CPU_REG_CONST(armP, _F) +#define ARM_CPU_TEMP(_F) VMI_CPU_TEMP(armP, _F) + +// morph-time macros to calculate constant offsets to flags in an arm structure +#define ARM_ZF_CONST ARM_CPU_REG_CONST(aflags.ZF) +#define ARM_NF_CONST ARM_CPU_REG_CONST(aflags.NF) +#define ARM_CF_CONST ARM_CPU_REG_CONST(aflags.CF) +#define ARM_VF_CONST ARM_CPU_REG_CONST(aflags.VF) +#define ARM_HI_CONST ARM_CPU_REG_CONST(oflags.HI) +#define ARM_LT_CONST ARM_CPU_REG_CONST(oflags.LT) +#define ARM_LE_CONST ARM_CPU_REG_CONST(oflags.LE) + +// morph-time macros to calculate variable offsets to flags in an arm structure +#define ARM_AFLAGS ARM_CPU_REG(aflags) +#define ARM_ZF ARM_CPU_REG(aflags.ZF) +#define ARM_NF ARM_CPU_REG(aflags.NF) +#define ARM_CF ARM_CPU_REG(aflags.CF) +#define ARM_VF ARM_CPU_REG(aflags.VF) +#define ARM_QF ARM_CPU_REG(oflags.QF) + +// morph-time macros to calculate offsets to fields in an arm structure +#define ARM_REG(_R) ARM_CPU_REG(regs[_R]) +#define ARM_TREG(_R) ARM_CPU_TEMP(regs[_R]) +#define ARM_TEMP(_R) ARM_CPU_TEMP(temps[_R]) +#define ARM_SP ARM_REG(ARM_REG_SP) +#define ARM_LR ARM_REG(ARM_REG_LR) +#define ARM_PC ARM_TREG(ARM_REG_PC) + +// morph-time macros to calculate offsets to control registers +#define ARM_PSR ARM_CPU_REG(sregs.PSR) +#define ARM_CONTROL ARM_CPU_REG(sregs.CONTROL) +#define ARM_PRIMASK ARM_CPU_REG(sregs.PRIMASK) +#define ARM_FAULTMASK ARM_CPU_REG(sregs.FAULTMASK) +#define ARM_BASEPRI ARM_CPU_REG(sregs.BASEPRI) +#define ARM_FPSCR ARM_CPU_REG(sregs.FPSCR) + +// morph-time macros to calculate offsets to banked registers in an arm structure +#define ARM_BANK_REG(_N, _SET) ARM_CPU_REG(bank.R##_N##_##_SET) +#define ARM_BANK_SP ARM_BANK_REG(13, process) + +// morph-time macro to calculate offset to EA tag in an arm structure +#define ARM_EA_TAG ARM_CPU_REG(exclusiveTag) + +// morph-time macro to calculate offset to ITSTATE in an arm structure +#define ARM_IT_STATE ARM_CPU_REG(itStateRT) + +// morph-time macro to calculate offset to divide target index in an arm structure +#define ARM_DIVIDE_TARGET ARM_CPU_REG(divideTarget) + +// morph-time macro to calculate offset to disable reason, event register and +// pending interrupt state in an arm structure +#define ARM_DISABLE_REASON ARM_CPU_REG(disableReason) +#define ARM_EVENT ARM_CPU_REG(eventRegister) +#define ARM_PENDING ARM_CPU_REG(pendingInterrupt) + +// morph-time macros to calculate offsets to floating point registers in an arm +// structure +#define ARM_FP_FLAGS ARM_CPU_REG(sdfpFlags) +#define ARM_FP_STICKY ARM_CPU_REG(sdfpSticky) +#define ARM_BREG(_R) ARM_CPU_REG(vregs.b[_R]) +#define ARM_HREG(_R) ARM_CPU_REG(vregs.h[_R]) +#define ARM_WREG(_R) ARM_CPU_REG(vregs.w[_R]) +#define ARM_DREG(_R) ARM_CPU_REG(vregs.d[_R]) + +#endif + diff --git a/ovp/armmModel/armStructure.h b/ovp/armmModel/armStructure.h new file mode 100644 index 00000000..d464283b --- /dev/null +++ b/ovp/armmModel/armStructure.h @@ -0,0 +1,359 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_STRUCTURE_H +#define ARM_STRUCTURE_H + +// VMI header files +#include "vmi/vmiPorts.h" +#include "vmi/vmiTypes.h" + +// model header files +#include "armConfig.h" +#include "armExceptionTypes.h" +#include "armSysRegisters.h" +#include "armMode.h" +#include "armTypeRefs.h" +#include "armVariant.h" + +// processor debug flags +#define ARM_DISASSEMBLE_MASK 0x00000001 +#define ARM_THUMB_MASK 0x00000002 +#define ARM_DEBUG_MMU_MASK 0x00000004 +#define ARM_DEBUG_EXCEPT_MASK 0x00000008 +#define ARM_DUMP_SDFP_REG_MASK 0x00000010 + +#define ARM_DISASSEMBLE(_P) ((_P)->flags & ARM_DISASSEMBLE_MASK) +#define ARM_THUMB(_P) ((_P)->flags & ARM_THUMB_MASK) +#define ARM_DEBUG_MMU(_P) ((_P)->flags & ARM_DEBUG_MMU_MASK) +#define ARM_DEBUG_EXCEPT(_P) ((_P)->flags & ARM_DEBUG_EXCEPT_MASK) +#define ARM_DUMP_SDFP_REG(_P) ((_P)->flags & ARM_DUMP_SDFP_REG_MASK) + +#define ARM_GPR_BITS 32 +#define ARM_GPR_BYTES (ARM_GPR_BITS/8) +#define ARM_GPR_NUM 16 +#define ARM_TEMP_NUM 12 + +#define ARM_VFP_REG_BITS 64 +#define ARM_VFP_REG_BYTES 8 +#define ARM_VFP16_REG_NUM 16 +#define ARM_VFP32_REG_NUM 32 + +#define ARM_EXCEPT_NUM 512 +#define ARM_EXCEPT_MASK_NUM ((ARM_EXCEPT_NUM+31)/32) +#define ARM_INTERRUPT_NUM 496 + +#define ARM_NO_TAG -1 + +// simulator compatibility modes +typedef enum armCompatModeE { + COMPAT_ISA, // conform to the documented ISA + COMPAT_GDB, // conform to gdb simulator + COMPAT_CODE_SOURCERY // conform to ARM CodeSourcery toolchain output (ignore BKPT) +} armCompatMode; + +// arithmetic flags +typedef struct armArithFlagsS { + Uns8 ZF; // zero flag + Uns8 NF; // sign flag + Uns8 CF; // carry flag + Uns8 VF; // overflow flag +} armArithFlags; + +// other flags +typedef struct armOtherFlagsS { + Uns8 HI; // hi flag (created on demand) + Uns8 LT; // lt flag (created on demand) + Uns8 LE; // le flag (created on demand) + Uns8 QF; // saturation flag +} armOtherFlags; + +// ARM PSR (combines APSR, IPSR and EPSR) +typedef union armPSRU { + struct { + Uns32 exceptNum : 9; // exception number + Uns32 align4 : 1; // 4 byte alignment (in stack) + Uns32 IT72 : 6; // if-then state, bits 7:2 + Uns32 GE : 4; // GE bits (unused when no DSP) + Uns32 _u1 : 4; // unused bits + Uns32 T : 1; // Thumb mode bit + Uns32 IT10 : 2; // if-then state, bits 1:0 + Uns32 Q : 1; // DSP overflow/saturate flag + Uns32 V : 1; // overflow flag + Uns32 C : 1; // carry flag + Uns32 Z : 1; // zero flag + Uns32 N : 1; // sign flag + } fields; + Uns32 reg; +} armPSR; + +// PSR Access Macros +#define PSR_FIELD(_A, _F) ((_A)->sregs.PSR.fields._F) +#define IN_USER_MODE(_A) (!PSR_FIELD(_A, exceptNum) && CONTROL_FIELD(_A, threadUnpriv)) +#define IN_THUMB_MODE(_A) PSR_FIELD(_A, T) +#define IN_HANDLER_MODE(_A) (PSR_FIELD(_A, exceptNum) && True) +#define IN_BASE_MODE(_A) IN_USER_MODE(_A) +#define IN_PRIV_MPU_MODE(_A) (!IN_USER_MODE(_A) && MPU_ENABLED(_A)) + +// Masks for fields in PSR +#define PSR_FLAGS 0xf8000000 +#define PSR_NZCV 0xf0000000 +#define PSR_EXCEPT_NUM 0x000001ff +#define PSR_THUMB 0x01000000 +#define PSR_IT10 0x06000000 +#define PSR_IT72 0x0000fc00 +#define PSR_GE 0x000f0000 +#define PSR_GE3 0x00080000 +#define PSR_GE2 0x00040000 +#define PSR_GE1 0x00020000 +#define PSR_GE0 0x00010000 +#define PSR_GE32 (PSR_GE3|PSR_GE2) +#define PSR_GE10 (PSR_GE1|PSR_GE0) +#define PSR_GE30 (PSR_GE32|PSR_GE10) +#define PSR_IT (PSR_IT72 | PSR_IT10) +#define PSR_ALL (PSR_FLAGS | PSR_IT | PSR_THUMB | PSR_GE | PSR_EXCEPT_NUM) +#define PSR_NOT_FLAGS (PSR_ALL & ~(PSR_FLAGS | PSR_GE)) + +// ARM CONTROL +typedef union armCONTROLU { + struct { + Uns32 threadUnpriv : 1; // is thread mode unprivileged? + Uns32 useSP_Process : 1; // use SP_process stack + Uns32 FPCA : 1; // Is FP active in current context? + } fields; + Uns32 reg; +} armCONTROL; + +// CONTROL Access Macros +#define CONTROL_FIELD(_A, _F) ((_A)->sregs.CONTROL.fields._F) +#define USE_SP_PROCESS(_A) CONTROL_FIELD(_A, useSP_Process) + +// Masks for fields in CONTROL +#define CONTROL_FPCA 0x00000004 + +// ARM FPSCR +typedef union armFPSCRU { + struct { + Uns32 IOC : 1; + Uns32 DZC : 1; + Uns32 OFC : 1; + Uns32 UFC : 1; + Uns32 IXC : 1; + Uns32 _u1 : 2; + Uns32 IDC : 1; + Uns32 _u2 : 14; + Uns32 RMode : 2; + Uns32 FZ : 1; + Uns32 DN : 1; + Uns32 AHP : 1; + Uns32 _u3 : 1; + Uns32 V : 1; + Uns32 C : 1; + Uns32 Z : 1; + Uns32 N : 1; + } fields; + Uns32 reg; +} armFPSCR; + +// FPSCR Access Macros +#define FPSCR_MASK 0xf7c0009f +#define FPSCR_REG(_A) ((_A)->sregs.FPSCR.reg) +#define FPSCR_FIELD(_A, _F) ((_A)->sregs.FPSCR.fields._F) + +// Write Masks for fields in other control registers (with no structs) +#define PRIMASK_MASK 0x00000001 +#define FAULTMASK_MASK 0x00000001 +#define BASEPRI_MASK 0x000000ff + +// Special register definitions +typedef struct armSpecialRegsS { + armPSR PSR; + armCONTROL CONTROL; + Uns32 PRIMASK; + Uns32 FAULTMASK; + Uns32 BASEPRI; + armFPSCR FPSCR; +} armSpecialRegs; + +// Banked registers +typedef struct armBankRegsS { + + // process stack pointer + Uns32 R13_process; + +} armBankRegs; + +typedef struct armDomainSetS { + memDomainP external; // external memory domain + memDomainP vmPriv; // virtual code domain, privileged mode + memDomainP vmUser; // virtual code domain, user mode + memDomainP system; // system domain +} armDomainSet, *armDomainSetP; + +typedef enum armPIDSetE { + APS_PHYS, // physical domains (privileged or user mode) + APS_VM_P, // MMU/MPU-managed privileged mode domains + APS_VM_U, // MMU/MPU-managed user mode domains + APS_LAST // KEEP LAST: for sizing +} armPIDSet; + +// decoder callback function to decode instruction at the passed address +#define ARM_DECODER_FN(_NAME) void _NAME( \ + armP arm, \ + Uns32 thisPC, \ + armInstructionInfoP info \ +) +typedef ARM_DECODER_FN((*armDecoderFn)); + +// Callback function to return size of instruction at the passed for the specified mode +#define ARM_ISIZE_FN(_NAME) Uns32 _NAME( \ + armP arm, \ + Uns32 thisPC, \ + Bool isThumb \ +) +typedef ARM_ISIZE_FN((*armIsizeFn)); + +// opaque type for MPU protection region +typedef struct protRegionS *protRegionP; + +// VFP register bank +typedef union armVFPRS { + Uns8 b[ARM_VFP16_REG_NUM*8]; // when viewed as bytes + Uns16 h[ARM_VFP16_REG_NUM*4]; // When viewed as 16 bit halfwords + Uns32 w[ARM_VFP16_REG_NUM*2]; // when viewed as 32-bit words + Uns64 d[ARM_VFP16_REG_NUM]; // when viewed as 64-bit double words +} armVFPR; + +#define FP_REG(_A, _I) ((_A)->vregs.w[(_I)]) + +// floating point control word type +typedef union armFPCWU { + Uns32 u32; // when viewed as composed value + vmiFPControlWord cw; // when viewed as fields +} armFPCW; + +// processor structure +typedef struct armS { + + // TRUE PROCESSOR REGISTERS + armArithFlags aflags; // arithmetic flags + armOtherFlags oflags; // other flags + Uns32 regs[ARM_GPR_NUM]; // current mode GPRs + armSpecialRegs sregs; // special purpose registers + + // SIMULATOR SUPPORT + Uns32 temps[ARM_TEMP_NUM]; // temporary registers + Uns8 itStateRT; // if-then state (run time) + Uns8 itStateMT; // if-then state (morph time) + Uns8 divideTarget; // target of divide instruction + Uns8 disableReason; // reason why processor disabled + Bool eventRegister; // event register + Bool pendingInterrupt; // is interrupt pending? + armMode mode :8; // current processor mode + Bool validHI :1; // is hi flag valid? + Bool validLT :1; // is lt flag valid? + Bool validLE :1; // is le flag valid? + Bool checkEndian :1; // check endian using blockMask? + Bool checkL4 :1; // check interwork using blockMask? + Bool checkUnaligned :1; // check alignment mode using blockMask? + Bool disableTimerRVR0 :1; // disable timer (SYST_RVR==0)? + Bool sleepOnExit :1; // sleeping at exception exit? + Bool denormalInput :1; // input denormal sticky flag + memEndian instructionEndian:1; // instruction endianness + armExceptCxt exceptionContext :3; // exception context + Uns32 exclusiveTag; // tag for active exclusive access + Uns32 exclusiveTagMask; // mask to select exclusive tag bits + Uns32 priorityMask; // priority mask + Uns32 exceptNum; // total number of exceptions + Uns32 exceptMaskNum; // number of words in exception masks + Uns32 timerModulus; // modulus value for counter + Uns64 timerBase; // nominal counter base value + + // SYSTEM AND BANKED REGISTERS (INFREQUENTLY USED AT RUN TIME) + armBankRegs bank; // banked registers + armSCSRegs scs; // SCS registers + + // VFP REGISTERS + armFPCW currentCW; // current control word + armArithFlags sdfpAFlags; // FPU comparison flags + Uns8 sdfpFlags; // FPU operation flags + Uns8 sdfpSticky; // FPU sticky flags + armVFPR vregs; // VFP data registers + + // VARIANT CONFIGURATION + Uns32 flags; // configuration flags + armConfig configInfo; // configuration register defaults + armCompatMode compatMode :2; // compatibility mode + Bool simEx :1; // simulate exceptions? + Bool verbose :1; // verbose messages enabled? + Bool showHiddenRegs :1; // show hidden registers in reg dump + Bool UAL :1; // disassemble using UAL syntax + Bool disableBitBand :1; // bit banding disabled + + // MEMORY SUBSYSTEM SUPPORT + Bool restoreDomain :1; // whether to resore domain (LDRT, STRT) + protRegionP impu; // instruction/unified MPU + protRegionP dmpu; // data MPU (if not unified) + armDomainSet ids; // instruction domain set + armDomainSet dds; // data domain set + + // NET HANDLES (used for NVIC) + Uns32 sysResetReq; // system reset requested + Uns32 intISS; // interrupt service started + Uns32 eventOut; // event output signal + Uns32 lockup; // lockup output signal + + // EXCEPTION SUPPORT + Int32 unboostedPriority; // unboosted execution priority + Int32 executionPriority; // current execution priority + armExceptNum enabledException; // current enabled exception + armExceptNum pendingException; // current pending exception + armExceptNum derivedException; // pushStack/popStack exception + Uns32 nestedActivation; // used for handler->thread check + Uns32 xPend[ARM_EXCEPT_MASK_NUM]; // pending exceptions + Uns32 xActive[ARM_EXCEPT_MASK_NUM];// active exceptions + Uns32 xEnable[ARM_EXCEPT_MASK_NUM];// exception enables + Uns8 xPriority[ARM_EXCEPT_NUM]; // exception priorities + vmiNetPortP netPorts; // net ports on this variant + memDomainP FPCARdomain; // memory domain associated with the FPCAR + + // INTERCEPT LIBRARY SUPPORT + armDecoderFn decoderCB; // generic instruction decoder + armIsizeFn isizeCB; // instruction size callback + +} arm; + + +#endif + diff --git a/ovp/armmModel/armSys.h b/ovp/armmModel/armSys.h new file mode 100644 index 00000000..d488f76d --- /dev/null +++ b/ovp/armmModel/armSys.h @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_SYS_H +#define ARM_SYS_H + +// VMI header files +#include "vmi/vmiTypes.h" + +// model header files +#include "armSysRegisters.h" +#include "armTypeRefs.h" + +// +// These are the bounds of the Peripheral region +// +#define PERIPH_LOW 0x40000000 +#define PERIPH_HIGH 0x4fffffff + +// +// These are the bounds of the System Control Space +// +#define DEVICE_LOW 0xa0000000 +#define DEVICE_HIGH 0xdfffffff + +// +// These are the bounds of the System Control Space +// +#define SYSTEM_LOW 0xe0000000 +#define SYSTEM_HIGH 0xffffffff + +// +// These are the bounds of the Private Peripheral Bus +// +#define PPB_LOW 0xe0000000 +#define PPB_HIGH 0xe00fffff + +// +// Call on initialization +// +void armSysInitialize(armP arm); + +// +// Call on reset +// +void armSysReset(armP arm); + +// +// Is the indicated system register supported on this processor? +// +Bool armGetSysRegSupported(armSCSRegId id, armP arm); + +// +// Perform a privileged-mode read of the system register +// +Bool armReadSysRegPriv(armSCSRegId id, armP arm, Uns32 *result); + +// +// Perform a privileged-mode write of the system register +// +Bool armWriteSysRegPriv(armSCSRegId id, armP arm, Uns32 value); + +// +// Add programmer's view of system register +// +void armAddSysRegisterView( + armSCSRegId id, + armP arm, + vmiViewObjectP baseObject, + const char *name +); + +// +// Structure filled with system register description by +// armGetSysRegisterDesc +// +typedef struct armSysRegDescS { + const char *name; + armSCSRegId id; + Uns32 address; + const char *privRW; + const char *userRW; +} armSysRegDesc, *armSysRegDescP; + +// +// Iterator filling 'desc' with the next system register description - +// 'desc.name' should be initialized to NULL prior to the first call +// +Bool armGetSysRegisterDesc(armSysRegDescP desc); + +// +// Insert SCS region into the passed domain at the standard location +// +void armSysCreateSCSRegion(armP arm, memDomainP domain); + +#endif + diff --git a/ovp/armmModel/armSysRegisters.h b/ovp/armmModel/armSysRegisters.h new file mode 100644 index 00000000..f7c5d5d5 --- /dev/null +++ b/ovp/armmModel/armSysRegisters.h @@ -0,0 +1,1026 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_SYS_REGISTERS_H +#define ARM_SYS_REGISTERS_H + +// model header files +#include "armRegisters.h" + + +// +// Implementor codes +// +typedef enum armImplementorE { + AI_ARM = 0x41, + AI_DEC = 0x44, + AI_INTEL = 0x69, +} armImplementor; + +// ----------------------------------------------------------------------------- +// SYSTEM REGISTERS +// ----------------------------------------------------------------------------- + +// construct enumeration member name from register name +#define SCS_ID(_R) SCS_ID_##_R + +// morph-time macro to access a field in a system register +#define ARM_SCS_REG(_ID) ARM_CPU_REG(scs.regs[_ID]) + +// access an entire system register as an Uns32 +#define SCS_REG_UNS32(_P, _R) ((_P)->scs.regs[SCS_ID(_R)]) + +// access an entire system register as a structure +#define SCS_REG_STRUCT(_P, _R) ((_P)->scs.fields._R) + +// access a field in a system register +#define SCS_FIELD(_P, _R, _F) SCS_REG_STRUCT(_P, _R)._F + +// get mask to use when writing a system register +#define SCS_MASK_UNS32(_P, _R) ((_P)->configInfo.regMasks._R.value32) + +// get mask to use when writing a system register +#define SCS_MASK_FIELD(_P, _R, _F) ((_P)->configInfo.regMasks._R.fields._F) + +// access default value for an entire system register as a structure +#define SCS_REG_STRUCT_DEFAULT(_P, _R) ((_P)->configInfo.regDefaults._R) + +// access default value for a field in a system register +#define SCS_FIELD_DEFAULT(_P, _R, _F) (SCS_REG_STRUCT_DEFAULT(_P, _R)._F) + +// should CPUID registers be used to determine feature presence? +#define SCS_USE_CPUID(_P) (SCS_FIELD(_P, CPUID, ARCHITECTURE)==0xf) + +// access to ID_ISAR field +#define ARM_ISAR(_N, _F) SCS_FIELD(arm, ID_ISAR##_N, _F) + + +// +// Identifiers for each implemented system register +// +typedef enum armSCSRegIdE { + + // this code defines an invalid system register specification + SCS_ID(INVALID)=-1, + + // system control register entries (represented in processor structure) + SCS_ID(ICTR), + SCS_ID(ACTLR), + SCS_ID(CPUID), + SCS_ID(VTOR), + SCS_ID(AIRCR), + SCS_ID(SCR), + SCS_ID(CCR), + SCS_ID(CFSR), + SCS_ID(HFSR), + SCS_ID(AFSR), + SCS_ID(MMAR), + SCS_ID(BFAR), + SCS_ID(CPACR), + + // timer control register entries (represented in processor structure) + SCS_ID(SYST_CSR), + SCS_ID(SYST_RVR), + SCS_ID(SYST_CVR), + SCS_ID(SYST_CALIB), + + // CPU Id register entries (represented in processor structure) + SCS_ID(ID_PFR0), + SCS_ID(ID_PFR1), + SCS_ID(ID_DFR0), + SCS_ID(ID_AFR0), + SCS_ID(ID_MMFR0), + SCS_ID(ID_MMFR1), + SCS_ID(ID_MMFR2), + SCS_ID(ID_MMFR3), + SCS_ID(ID_ISAR0), + SCS_ID(ID_ISAR1), + SCS_ID(ID_ISAR2), + SCS_ID(ID_ISAR3), + SCS_ID(ID_ISAR4), + SCS_ID(ID_ISAR5), + + // FP Registers (represented in processor structure) + SCS_ID(FPCCR), + SCS_ID(FPCAR), + SCS_ID(FPDSCR), + SCS_ID(MVFR0), + SCS_ID(MVFR1), + + // MPU control register entries (represented in processor structure) + SCS_ID(MPU_TYPE), + SCS_ID(MPU_CONTROL), + SCS_ID(MPU_RNR), + + // marker for pseudo-registers (not represented in processor structure) + SCS_ID(FirstPseudoReg), + + // system control register entries + SCS_ID(ICSR) = SCS_ID(FirstPseudoReg), + SCS_ID(SHCSR), + SCS_ID(SHPR1), + SCS_ID(SHPR2), + SCS_ID(SHPR3), + SCS_ID(STIR), + + // NVIC operations + SCS_ID(NVIC_ISERx16), + SCS_ID(NVIC_ICERx16), + SCS_ID(NVIC_ISPRx16), + SCS_ID(NVIC_ICPRx16), + SCS_ID(NVIC_IABRx16), + SCS_ID(NVIC_IPRx255), + + // MPU operations + SCS_ID(MPU_RBAR), + SCS_ID(MPU_RASR), + SCS_ID(MPU_RBAR_A1), + SCS_ID(MPU_RASR_A1), + SCS_ID(MPU_RBAR_A2), + SCS_ID(MPU_RASR_A2), + SCS_ID(MPU_RBAR_A3), + SCS_ID(MPU_RASR_A3), + + // keep last (used to define size of the enumeration) + SCS_ID(Size), + +} armSCSRegId; + +// use this to declare a register structure below +#define SCS_REG_STRUCT_DECL(_N) armSCSReg_##_N + + +// ----------------------------------------------------------------------------- +// ICTR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 INTLINESNUM : 4; + Uns32 _u1 : 28; +} SCS_REG_STRUCT_DECL(ICTR); + +#define SCS_WRITE_MASK_ICTR 0x00000000 +#define SCS_ADDRESS_ICTR 0x004 + +// ----------------------------------------------------------------------------- +// ACTLR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 value; +} SCS_REG_STRUCT_DECL(ACTLR); + +#define SCS_WRITE_MASK_ACTLR 0xffffffff +#define SCS_ADDRESS_ACTLR 0x008 + +// ----------------------------------------------------------------------------- +// CPUID +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 REVISION : 4; + Uns32 PARTNO : 12; + Uns32 ARCHITECTURE : 4; + Uns32 VARIANT : 4; + armImplementor IMPLEMENTER : 8; +} SCS_REG_STRUCT_DECL(CPUID); + +#define SCS_WRITE_MASK_CPUID 0x00000000 +#define SCS_ADDRESS_CPUID 0xd00 + +// ----------------------------------------------------------------------------- +// ICSR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 VECTACTIVE : 9; + Uns32 _u1 : 2; + Uns32 RETTOBASE : 1; + Uns32 VECTPENDING : 9; + Uns32 _u2 : 1; + Uns32 ISRPENDING : 1; + Uns32 ISRPREEMPT : 1; + Uns32 _u3 : 1; + Uns32 PENDSTCLR : 1; + Uns32 PENDSTSET : 1; + Uns32 PENDSVCLR : 1; + Uns32 PENDSVSET : 1; + Uns32 _u4 : 2; + Uns32 NMIPENDSET : 1; +} SCS_REG_STRUCT_DECL(ICSR); + +#define SCS_WRITE_MASK_ICSR 0xffffffff +#define SCS_ADDRESS_ICSR 0xd04 + +// ----------------------------------------------------------------------------- +// VTOR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 _u1 : 7; + Uns32 TBLOFF : 22; + Uns32 TBLBASE : 1; + Uns32 _u2 : 2; +} SCS_REG_STRUCT_DECL(VTOR); + +#define SCS_WRITE_MASK_VTOR 0x3fffff80 +#define SCS_ADDRESS_VTOR 0xd08 + +// ----------------------------------------------------------------------------- +// AIRCR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 VECTRESET : 1; // TODO: not implemented, debug feature + Uns32 VECTCLRACTIVE : 1; // TODO: not implemented, debug feature + Uns32 SYSRESETREQ : 1; + Uns32 _u1 : 5; + Uns32 PRIGROUP : 3; + Uns32 _u2 : 4; + Uns32 ENDIANNESS : 1; + Uns32 VECTKEY : 16; +} SCS_REG_STRUCT_DECL(AIRCR); + +#define SCS_WRITE_MASK_AIRCR 0xffff7fff +#define SCS_ADDRESS_AIRCR 0xd0c + +// ----------------------------------------------------------------------------- +// SCR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 _u1 : 1; + Uns32 SLEEPONEXIT : 1; + Uns32 SLEEPDEEP : 1; + Uns32 _u2 : 1; + Uns32 SEVONPEND : 1; + Uns32 _u3 : 27; +} SCS_REG_STRUCT_DECL(SCR); + +#define SCS_WRITE_MASK_SCR 0x00000016 +#define SCS_ADDRESS_SCR 0xd10 + +// ----------------------------------------------------------------------------- +// CCR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 NONBASETHRDENA : 1; + Uns32 USERSETMPEND : 1; + Uns32 _u1 : 1; + Uns32 UNALIGN_TRP : 1; + Uns32 DIV_0_TRP : 1; + Uns32 _u2 : 3; + Uns32 BFHFNMIGN : 1; + Uns32 STKALIGN : 1; + Uns32 _u3 : 22; +} SCS_REG_STRUCT_DECL(CCR); + +#define SCS_WRITE_MASK_CCR 0x0000031b +#define SCS_ADDRESS_CCR 0xd14 + +// ----------------------------------------------------------------------------- +// SHPR1 ... SHPR3 +// ----------------------------------------------------------------------------- + +#define SCS_WRITE_MASK_SHPR1 0x00ffffff +#define SCS_ADDRESS_SHPR1 0xd18 +#define SCS_WRITE_MASK_SHPR2 0xff000000 +#define SCS_ADDRESS_SHPR2 0xd1c +#define SCS_WRITE_MASK_SHPR3 0xffff00ff +#define SCS_ADDRESS_SHPR3 0xd20 + +// ----------------------------------------------------------------------------- +// STIR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 INTID : 10; + Uns32 _u1 : 22; +} SCS_REG_STRUCT_DECL(STIR); + +#define SCS_WRITE_MASK_STIR 0xffffffff +#define SCS_ADDRESS_STIR 0xf00 + +// ----------------------------------------------------------------------------- +// NVIC_ISER0 ... NVIC_ISER15 +// ----------------------------------------------------------------------------- + +#define SCS_WRITE_MASK_NVIC_ISER 0xffffffff +#define SCS_ADDRESS_NVIC_ISER 0x100 + +// ----------------------------------------------------------------------------- +// NVIC_ICER0 ... NVIC_ICER15 +// ----------------------------------------------------------------------------- + +#define SCS_WRITE_MASK_NVIC_ICER 0xffffffff +#define SCS_ADDRESS_NVIC_ICER 0x180 + +// ----------------------------------------------------------------------------- +// NVIC_ISPR0 ... NVIC_ISPR15 +// ----------------------------------------------------------------------------- + +#define SCS_WRITE_MASK_NVIC_ISPR 0xffffffff +#define SCS_ADDRESS_NVIC_ISPR 0x200 + +// ----------------------------------------------------------------------------- +// NVIC_ICPR0 ... NVIC_ICPR15 +// ----------------------------------------------------------------------------- + +#define SCS_WRITE_MASK_NVIC_ICPR 0xffffffff +#define SCS_ADDRESS_NVIC_ICPR 0x280 + +// ----------------------------------------------------------------------------- +// NVIC_IABR0 ... NVIC_IABR15 +// ----------------------------------------------------------------------------- + +#define SCS_WRITE_MASK_NVIC_IABR 0xffffffff +#define SCS_ADDRESS_NVIC_IABR 0x300 + +// ----------------------------------------------------------------------------- +// NVIC_IPR0 ... NVIC_IPR255 +// ----------------------------------------------------------------------------- + +#define SCS_WRITE_MASK_NVIC_IPR 0xffffffff +#define SCS_ADDRESS_NVIC_IPR 0x400 + +// ----------------------------------------------------------------------------- +// SHCSR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 MEMFAULTACT : 1; + Uns32 BUSFAULTACT : 1; + Uns32 _u1 : 1; + Uns32 USGFAULTACT : 1; + Uns32 _u2 : 3; + Uns32 SVCALLACT : 1; + Uns32 MONITORACT : 1; + Uns32 _u3 : 1; + Uns32 PENDSVACT : 1; + Uns32 SYSTICKACT : 1; + Uns32 USGFAULTPENDED : 1; + Uns32 MEMFAULTPENDED : 1; + Uns32 BUSFAULTPENDED : 1; + Uns32 SVCALLPENDED : 1; + Uns32 MEMFAULTENA : 1; + Uns32 BUSFAULTENA : 1; + Uns32 USGFAULTENA : 1; + Uns32 _u4 : 13; +} SCS_REG_STRUCT_DECL(SHCSR); + +#define SCS_WRITE_MASK_SHCSR 0xffffffff +#define SCS_ADDRESS_SHCSR 0xd24 + +// ----------------------------------------------------------------------------- +// CFSR +// ----------------------------------------------------------------------------- + +typedef struct { + // MMFSR + Uns32 IACCVIOL : 1; + Uns32 DACCVIOL : 1; + Uns32 _u1 : 1; + Uns32 MUNSTKERR : 1; + Uns32 MSTKERR : 1; + Uns32 _u2 : 2; + Uns32 MMARVALID : 1; + // BFSR + Uns32 IBUSERR : 1; + Uns32 PRECISERR : 1; + Uns32 IMPRECISERR : 1; + Uns32 UNSTKERR : 1; + Uns32 STKERR : 1; + Uns32 _u3 : 2; + Uns32 BFARVALID : 1; + // UFSR + Uns32 UNDEFINSTR : 1; + Uns32 INVSTATE : 1; + Uns32 INVPC : 1; + Uns32 NOCP : 1; + Uns32 _u4 : 4; + Uns32 UNALIGNED : 1; + Uns32 DIVBYZERO : 1; + Uns32 _u5 : 6; +} SCS_REG_STRUCT_DECL(CFSR); + +#define SCS_WRITE_MASK_CFSR 0xffffffff +#define SCS_ADDRESS_CFSR 0xd28 + +// ----------------------------------------------------------------------------- +// HFSR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 _u1 : 1; + Uns32 VECTTBL : 1; + Uns32 _u2 : 28; + Uns32 FORCED : 1; + Uns32 DEBUGEVT : 1; +} SCS_REG_STRUCT_DECL(HFSR); + +#define SCS_WRITE_MASK_HFSR 0xffffffff +#define SCS_ADDRESS_HFSR 0xd2c + +// ----------------------------------------------------------------------------- +// AFSR +// ----------------------------------------------------------------------------- + +#define SCS_WRITE_MASK_AFSR 0xffffffff +#define SCS_ADDRESS_AFSR 0xd3c + +// ----------------------------------------------------------------------------- +// MMAR +// ----------------------------------------------------------------------------- + +#define SCS_WRITE_MASK_MMAR 0xffffffff +#define SCS_ADDRESS_MMAR 0xd34 + +// ----------------------------------------------------------------------------- +// BFAR +// ----------------------------------------------------------------------------- + +#define SCS_WRITE_MASK_BFAR 0xffffffff +#define SCS_ADDRESS_BFAR 0xd38 + +// ----------------------------------------------------------------------------- +// CPACR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 cp0 : 2; + Uns32 cp1 : 2; + Uns32 cp2 : 2; + Uns32 cp3 : 2; + Uns32 cp4 : 2; + Uns32 cp5 : 2; + Uns32 cp6 : 2; + Uns32 cp7 : 2; + Uns32 _u1 : 4; + Uns32 cp10 : 2; + Uns32 cp11 : 2; + Uns32 _u2 : 8; +} SCS_REG_STRUCT_DECL(CPACR); + +#define SCS_WRITE_MASK_CPACR 0xffffffff /* Actual mask used is from config data */ +#define SCS_ADDRESS_CPACR 0xd88 + +// ----------------------------------------------------------------------------- +// SYST_CSR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 ENABLE : 1; + Uns32 TICKINT : 1; + Uns32 CLKSOURCE : 1; + Uns32 _u1 : 13; + Uns32 COUNTFLAG : 1; + Uns32 _u2 : 15; +} SCS_REG_STRUCT_DECL(SYST_CSR); + +#define SCS_WRITE_MASK_SYST_CSR 0x00000007 +#define SCS_ADDRESS_SYST_CSR 0x010 + +// ----------------------------------------------------------------------------- +// SYST_RVR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 RELOAD : 24; + Uns32 _u1 : 8; +} SCS_REG_STRUCT_DECL(SYST_RVR); + +#define SCS_WRITE_MASK_SYST_RVR 0x00ffffff +#define SCS_ADDRESS_SYST_RVR 0x014 + +// ----------------------------------------------------------------------------- +// SYST_CVR +// ----------------------------------------------------------------------------- + +#define SCS_WRITE_MASK_SYST_CVR 0xffffffff +#define SCS_ADDRESS_SYST_CVR 0x018 + +// ----------------------------------------------------------------------------- +// SYST_CALIB +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 TENMS : 24; + Uns32 _u1 : 6; + Uns32 SKEW : 1; + Uns32 NOREF : 1; +} SCS_REG_STRUCT_DECL(SYST_CALIB); + +#define SCS_WRITE_MASK_SYST_CALIB 0x00000000 +#define SCS_ADDRESS_SYST_CALIB 0x01c + +// ----------------------------------------------------------------------------- +// ID_PFR0 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 State0 : 4; + Uns32 State1 : 4; + Uns32 State2 : 4; + Uns32 State3 : 4; + Uns32 _u1 : 16; +} SCS_REG_STRUCT_DECL(ID_PFR0); + +#define SCS_WRITE_MASK_ID_PFR0 0x00000000 +#define SCS_ADDRESS_ID_PFR0 0xd40 + +// ----------------------------------------------------------------------------- +// ID_PFR1 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 ProgrammersModel : 4; + Uns32 SecurityExtension : 4; + Uns32 MicroProgrammersModel : 4; + Uns32 _u1 : 20; +} SCS_REG_STRUCT_DECL(ID_PFR1); + +#define SCS_WRITE_MASK_ID_PFR1 0x00000000 +#define SCS_ADDRESS_ID_PFR1 0xd44 + +// ----------------------------------------------------------------------------- +// ID_DFR0 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 CoreDebug : 4; + Uns32 SecureDebug : 4; + Uns32 EmbeddedDebug : 4; + Uns32 TraceDebugCP : 4; + Uns32 TraceDebugMM : 4; + Uns32 MicroDebug : 4; + Uns32 _u1 : 8; +} SCS_REG_STRUCT_DECL(ID_DFR0); + +#define SCS_WRITE_MASK_ID_DFR0 0x00000000 +#define SCS_ADDRESS_ID_DFR0 0xd48 + +// ----------------------------------------------------------------------------- +// ID_AFR0 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 _u1 : 32; +} SCS_REG_STRUCT_DECL(ID_AFR0); + +#define SCS_WRITE_MASK_ID_AFR0 0x00000000 +#define SCS_ADDRESS_ID_AFR0 0xd4c + +// ----------------------------------------------------------------------------- +// ID_MMFR0 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 VMSA : 4; + Uns32 PMSA : 4; + Uns32 Cache_Agent : 4; + Uns32 Cache_DMA : 4; + Uns32 TCM_DMA : 4; + Uns32 AuxControl : 4; + Uns32 FCSE : 4; + Uns32 _u1 : 4; +} SCS_REG_STRUCT_DECL(ID_MMFR0); + +#define SCS_WRITE_MASK_ID_MMFR0 0x00000000 +#define SCS_ADDRESS_ID_MMFR0 0xd50 + +// ----------------------------------------------------------------------------- +// ID_MMFR1 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 L1VAHarvard : 4; + Uns32 L1VAUnified : 4; + Uns32 L1SWHarvard : 4; + Uns32 L1SWUnified : 4; + Uns32 L1Harvard : 4; + Uns32 L1Unified : 4; + Uns32 L1TestClean : 4; + Uns32 BTB : 4; +} SCS_REG_STRUCT_DECL(ID_MMFR1); + +#define SCS_WRITE_MASK_ID_MMFR1 0x00000000 +#define SCS_ADDRESS_ID_MMFR1 0xd54 + +// ----------------------------------------------------------------------------- +// ID_MMFR2 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 L1FgndPrefetchHarvard : 4; + Uns32 L1BgndPrefetchHarvard : 4; + Uns32 L1MaintRangeHarvard : 4; + Uns32 TLBMaintHarvard : 4; + Uns32 TLBMaintUnified : 4; + Uns32 MemoryBarrierCP15 : 4; + Uns32 WaitForInterruptStall : 4; + Uns32 HWAccessFlag : 4; +} SCS_REG_STRUCT_DECL(ID_MMFR2); + +#define SCS_WRITE_MASK_ID_MMFR2 0x00000000 +#define SCS_ADDRESS_ID_MMFR2 0xd58 + +// ----------------------------------------------------------------------------- +// ID_MMFR3 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 HierMaintSW : 4; + Uns32 HierMaintMVA : 4; + Uns32 BPMaint : 4; + Uns32 _u1 : 20; +} SCS_REG_STRUCT_DECL(ID_MMFR3); + +#define SCS_WRITE_MASK_ID_MMFR3 0x00000000 +#define SCS_ADDRESS_ID_MMFR3 0xd5c + +// ----------------------------------------------------------------------------- +// ID_ISAR0 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 Swap_instrs : 4; + Uns32 BitCount_instrs : 4; + Uns32 BitField_instrs : 4; + Uns32 CmpBranch_instrs : 4; + Uns32 Coproc_instrs : 4; + Uns32 Debug_instrs : 4; + Uns32 Divide_instrs : 4; + Uns32 _u1 : 4; +} SCS_REG_STRUCT_DECL(ID_ISAR0); + +#define SCS_WRITE_MASK_ID_ISAR0 0x00000000 +#define SCS_ADDRESS_ID_ISAR0 0xd60 + +// ----------------------------------------------------------------------------- +// ID_ISAR1 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 Endian_instrs : 4; + Uns32 Except_instrs : 4; + Uns32 Except_AR_instrs : 4; + Uns32 Extend_instrs : 4; + Uns32 IfThen_instrs : 4; + Uns32 Immediate_instrs : 4; + Uns32 Interwork_instrs : 4; + Uns32 Jazelle_instrs : 4; +} SCS_REG_STRUCT_DECL(ID_ISAR1); + +#define SCS_WRITE_MASK_ID_ISAR1 0x00000000 +#define SCS_ADDRESS_ID_ISAR1 0xd64 + +// ----------------------------------------------------------------------------- +// ID_ISAR2 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 LoadStore_instrs : 4; + Uns32 MemHint_instrs : 4; + Uns32 MultiAccessInt_instrs : 4; + Uns32 Mult_instrs : 4; + Uns32 MultS_instrs : 4; + Uns32 MultU_instrs : 4; + Uns32 PSR_AR_instrs : 4; + Uns32 Reversal_instrs : 4; +} SCS_REG_STRUCT_DECL(ID_ISAR2); + +#define SCS_WRITE_MASK_ID_ISAR2 0x00000000 +#define SCS_ADDRESS_ID_ISAR2 0xd68 + +// ----------------------------------------------------------------------------- +// ID_ISAR3 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 Saturate_instrs : 4; + Uns32 SIMD_instrs : 4; + Uns32 SVC_instrs : 4; + Uns32 SynchPrim_instrs : 4; + Uns32 TabBranch_instrs : 4; + Uns32 ThumbCopy_instrs : 4; + Uns32 TrueNOP_instrs : 4; + Uns32 T2ExeEnvExtn_instrs : 4; +} SCS_REG_STRUCT_DECL(ID_ISAR3); + +#define SCS_WRITE_MASK_ID_ISAR3 0x00000000 +#define SCS_ADDRESS_ID_ISAR3 0xd6c + +// ----------------------------------------------------------------------------- +// ID_ISAR4 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 Unpriv_instrs : 4; + Uns32 WithShifts_instrs : 4; + Uns32 Writeback_instrs : 4; + Uns32 SMI_instrs : 4; + Uns32 Barrier_instrs : 4; + Uns32 SynchPrim_instrs_frac : 4; + Uns32 PSR_M_instrs : 4; + Uns32 SWP_frac : 4; +} SCS_REG_STRUCT_DECL(ID_ISAR4); + +#define SCS_WRITE_MASK_ID_ISAR4 0x00000000 +#define SCS_ADDRESS_ID_ISAR4 0xd70 + +// ----------------------------------------------------------------------------- +// ID_ISAR5 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 _u1 : 32; +} SCS_REG_STRUCT_DECL(ID_ISAR5); + +#define SCS_WRITE_MASK_ID_ISAR5 0x00000000 +#define SCS_ADDRESS_ID_ISAR5 0xd74 + +// ----------------------------------------------------------------------------- +// FPCCR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 LSPACT : 1; // Blockmask bit + Uns32 USER : 1; + Uns32 _u1 : 1; + Uns32 THREAD : 1; + Uns32 HFRDY : 1; + Uns32 MMRDY : 1; + Uns32 BFRDY : 1; + Uns32 _u2 : 1; + Uns32 MONRDY : 1; + Uns32 _u3 : 21; + Uns32 LSPEN : 1; + Uns32 ASPEN : 1; // Blockmask bit +} SCS_REG_STRUCT_DECL(FPCCR); + +#define SCS_WRITE_MASK_FPCCR 0xc000017b +#define SCS_ADDRESS_FPCCR 0xf34 + +// Bits in FPCCR that are part of the block mask +#define SCS_BLOCKMASK_FPCCR 0x80000001 + +// ----------------------------------------------------------------------------- +// FPCAR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 _u1 : 3; + Uns32 ADDRESS : 29; +} SCS_REG_STRUCT_DECL(FPCAR); + +#define SCS_WRITE_MASK_FPCAR 0xfffffff8 +#define SCS_ADDRESS_FPCAR 0xf38 + +// ----------------------------------------------------------------------------- +// FPDSCR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 _u1 : 22; + Uns32 RMode : 2; + Uns32 FZ : 1; + Uns32 DN : 1; + Uns32 AHP : 1; + Uns32 _u2 : 5; +} SCS_REG_STRUCT_DECL(FPDSCR); + +#define SCS_WRITE_MASK_FPDSCR 0x07c00000 +#define SCS_ADDRESS_FPDSCR 0xf3c + +// ----------------------------------------------------------------------------- +// MVFR0 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 A_SIMD_Registers : 4; + Uns32 SinglePrecision : 4; + Uns32 DoublePrecision : 4; + Uns32 VFP_ExceptionTrap : 4; + Uns32 Divide : 4; + Uns32 SquareRoot : 4; + Uns32 ShortVectors : 4; + Uns32 VFP_RoundingModes : 4; +} SCS_REG_STRUCT_DECL(MVFR0); + +#define SCS_WRITE_MASK_MVFR0 0x00000000 +#define SCS_ADDRESS_MVFR0 0xf40 + +// ----------------------------------------------------------------------------- +// MVFR1 +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 FlushToZeroMode : 4; + Uns32 DefaultNaNMode : 4; + Uns32 _u1 : 16; + Uns32 VFP_HalfPrecision : 4; + Uns32 VFP_FusedMAC : 4; +} SCS_REG_STRUCT_DECL(MVFR1); + +#define SCS_WRITE_MASK_MVFR1 0x00000000 +#define SCS_ADDRESS_MVFR1 0xf44 + +// ----------------------------------------------------------------------------- +// MPU_TYPE +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 SEPARATE : 1; + Uns32 _u1 : 7; + Uns32 DREGION : 8; + Uns32 IREGION : 8; + Uns32 _u2 : 8; +} SCS_REG_STRUCT_DECL(MPU_TYPE); + +#define SCS_WRITE_MASK_MPU_TYPE 0x00000000 +#define SCS_ADDRESS_MPU_TYPE 0xd90 + +// ----------------------------------------------------------------------------- +// MPU_CONTROL +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 ENABLE : 1; + Uns32 HFNMIENA : 1; + Uns32 PRIVDEFENA : 1; + Uns32 _u1 : 29; +} SCS_REG_STRUCT_DECL(MPU_CONTROL); + +#define SCS_WRITE_MASK_MPU_CONTROL 0x00000007 +#define SCS_ADDRESS_MPU_CONTROL 0xd94 + +// ----------------------------------------------------------------------------- +// MPU_RNR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 REGION : 8; + Uns32 _u1 : 24; +} SCS_REG_STRUCT_DECL(MPU_RNR); + +#define SCS_WRITE_MASK_MPU_RNR 0x000000ff +#define SCS_ADDRESS_MPU_RNR 0xd98 + +// ----------------------------------------------------------------------------- +// MPU_RBAR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 REGION : 4; + Uns32 VALID : 1; + Uns32 ADDR : 27; +} SCS_REG_STRUCT_DECL(MPU_RBAR), + SCS_REG_STRUCT_DECL(MPU_RBAR_A1), + SCS_REG_STRUCT_DECL(MPU_RBAR_A2), + SCS_REG_STRUCT_DECL(MPU_RBAR_A3); + +#define SCS_MASK_MPU_RBAR_ADDR 0xffffffe0 +#define SCS_WRITE_MASK_MPU_RBAR 0xffffffff +#define SCS_WRITE_MASK_MPU_RBAR_A1 0xffffffff +#define SCS_WRITE_MASK_MPU_RBAR_A2 0xffffffff +#define SCS_WRITE_MASK_MPU_RBAR_A3 0xffffffff +#define SCS_ADDRESS_MPU_RBAR 0xd9c +#define SCS_ADDRESS_MPU_RBAR_A1 0xda4 +#define SCS_ADDRESS_MPU_RBAR_A2 0xdac +#define SCS_ADDRESS_MPU_RBAR_A3 0xdb4 + +// ----------------------------------------------------------------------------- +// MPU_RASR +// ----------------------------------------------------------------------------- + +typedef struct { + Uns32 ENABLE : 1; + Uns32 SIZE : 5; + Uns32 _u1 : 2; + Uns32 SRD : 8; + Uns32 B : 1; + Uns32 C : 1; + Uns32 S : 1; + Uns32 TEX : 3; + Uns32 _u2 : 2; + Uns32 AP : 3; + Uns32 _u3 : 1; + Uns32 XN : 1; + Uns32 _u4 : 3; +} SCS_REG_STRUCT_DECL(MPU_RASR), + SCS_REG_STRUCT_DECL(MPU_RASR_A1), + SCS_REG_STRUCT_DECL(MPU_RASR_A2), + SCS_REG_STRUCT_DECL(MPU_RASR_A3); + +#define SCS_WRITE_MASK_MPU_RASR 0xffffffff +#define SCS_WRITE_MASK_MPU_RASR_A1 0xffffffff +#define SCS_WRITE_MASK_MPU_RASR_A2 0xffffffff +#define SCS_WRITE_MASK_MPU_RASR_A3 0xffffffff +#define SCS_ADDRESS_MPU_RASR 0xda0 +#define SCS_ADDRESS_MPU_RASR_A1 0xda8 +#define SCS_ADDRESS_MPU_RASR_A2 0xdb0 +#define SCS_ADDRESS_MPU_RASR_A3 0xdb8 + + +// ----------------------------------------------------------------------------- +// IGNORED OPERATION WRITE MASK +// ----------------------------------------------------------------------------- + +#define SCS_WRITE_MASK_Ignored 0x00000000 + + +// ----------------------------------------------------------------------------- +// CONTAINER +// ----------------------------------------------------------------------------- + +// use this to define a field-based register entry in armSCSRegsU below +#define SCS_REG_DECL(_N) SCS_REG_STRUCT_DECL(_N) _N + +// use this to define a plain register entry in armSCSRegsU below +#define SCS_UNS32_DECL(_N) Uns32 _N + +// +// This type defines the entire implemented system register set +// +typedef union armSCSRegsU { + + Uns32 regs[SCS_ID(FirstPseudoReg)]; // use this for by-register access + + struct { // use this for by-field access + // system register entries + SCS_REG_DECL(ICTR); + SCS_UNS32_DECL(ACTLR); + SCS_REG_DECL(CPUID); + SCS_REG_DECL(VTOR); + SCS_REG_DECL(AIRCR); + SCS_REG_DECL(SCR); + SCS_REG_DECL(CCR); + SCS_REG_DECL(CFSR); + SCS_REG_DECL(HFSR); + SCS_UNS32_DECL(AFSR); + SCS_UNS32_DECL(MMAR); + SCS_UNS32_DECL(BFAR); + SCS_REG_DECL(CPACR); + SCS_REG_DECL(SYST_CSR); + SCS_REG_DECL(SYST_RVR); + SCS_UNS32_DECL(SYST_CVR); + SCS_REG_DECL(SYST_CALIB); + SCS_REG_DECL(ID_PFR0); + SCS_REG_DECL(ID_PFR1); + SCS_REG_DECL(ID_DFR0); + SCS_REG_DECL(ID_AFR0); + SCS_REG_DECL(ID_MMFR0); + SCS_REG_DECL(ID_MMFR1); + SCS_REG_DECL(ID_MMFR2); + SCS_REG_DECL(ID_MMFR3); + SCS_REG_DECL(ID_ISAR0); + SCS_REG_DECL(ID_ISAR1); + SCS_REG_DECL(ID_ISAR2); + SCS_REG_DECL(ID_ISAR3); + SCS_REG_DECL(ID_ISAR4); + SCS_REG_DECL(ID_ISAR5); + SCS_REG_DECL(FPCCR); + SCS_REG_DECL(FPCAR); + SCS_REG_DECL(FPDSCR); + SCS_REG_DECL(MVFR0); + SCS_REG_DECL(MVFR1); + SCS_REG_DECL(MPU_TYPE); + SCS_REG_DECL(MPU_CONTROL); + SCS_REG_DECL(MPU_RNR); + } fields; + +} armSCSRegs, *armSCSRegsP; + +#endif diff --git a/ovp/armmModel/armTypeRefs.h b/ovp/armmModel/armTypeRefs.h new file mode 100644 index 00000000..871c7dcb --- /dev/null +++ b/ovp/armmModel/armTypeRefs.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_TYPEREFS_H +#define ARM_TYPEREFS_H + +// VMI header files +#include "hostapi/typeMacros.h" + +DEFINE_S(arm); +DEFINE_S(armInstructionInfo); +DEFINE_S(armMorphState); +DEFINE_CS(armMorphAttr); + +#endif diff --git a/ovp/armmModel/armUtils.h b/ovp/armmModel/armUtils.h new file mode 100644 index 00000000..2a9419f5 --- /dev/null +++ b/ovp/armmModel/armUtils.h @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_UTILS_H +#define ARM_UTILS_H + +// model header files +#include "armTypeRefs.h" + +// +// Set the initial endianness for the model +// +void armSetInitialEndian(armP arm, Bool isBigEndian); + +// +// Return the name of a GPR +// +const char *armGetGPRName(armP arm, Uns32 index); + +// +// Return the name of a CPR +// +const char *armGetCPRName(armP arm, Uns32 index); + +// +// Update processor block mask +// +void armSetBlockMask(armP arm); + +// +// Switch banked registers on switch to the passed mode +// +void armSwitchRegs(armP arm, Bool oldUseSPProcess, Bool newUseSPProcess); + +// +// Write CONTROL.SP_PROCESS field +// +void armWriteSPProcess(armP arm, Bool newSPProcess); + +// +// Read CPSR register +// +Uns32 armReadCPSR(armP arm); + +// +// Write CPSR register +// +void armWriteCPSR(armP arm, Uns32 value, Uns32 mask); + +// +// Write PRIMASK register +// +void armWritePRIMASK(armP arm, Uns32 value); + +// +// Write BASEPRI register +// +void armWriteBASEPRI(armP arm, Uns32 value); + +// +// Write BASEPRI register (using BASEPRI_MAX semantics) +// +void armWriteBASEPRI_MAX(armP arm, Uns32 value); + +// +// Write FAULTMASK register +// +void armWriteFAULTMASK(armP arm, Uns32 value); + +// +// read CONTROL register +// +Uns32 armReadCONTROL(armP arm); + +// +// Write CONTROL register +// +void armWriteCONTROL(armP arm, Uns32 value); + +// +// update the CONTROL.FPCA bit to the value. If it changes then set the block mask +// +void armUpdateFPCA(armP arm, Bool value); + +// +// update the FPCCR.LSPACT bit to the value. If it changes then set the block mask +// +void armUpdateLSPACT(armP arm, Bool value); + +// +// Write SP register +// +void armWriteSP(armP arm, Uns32 value); + +// +// Switch processor mode if required +// +void armSwitchMode(armP arm); + +// +// Abort any active exclusive access +// +void armAbortExclusiveAccess(armP arm); + +#endif diff --git a/ovp/armmModel/armVFP.h b/ovp/armmModel/armVFP.h new file mode 100644 index 00000000..4d0605ca --- /dev/null +++ b/ovp/armmModel/armVFP.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_SIMD_VFP_H +#define ARM_SIMD_VFP_H + +// VMI header files +#include "vmi/vmiTypes.h" + +// model header files +#include "armTypeRefs.h" + +// +// Write VFP FPSCR register +// +void armWriteFPSCR(armP arm, Uns32 newValue, Uns32 writeMask); + +// +// Read VFP FPSCR register +// +Uns32 armReadFPSCR(armP arm); + +// +// Call on initialization +// +void armFPInitialize(armP arm); + +// +// Call on reset +// +void armFPReset(armP arm); + +// +// Convert from half-precision to single-precision +// +Uns32 armFPHalfToSingle(armP arm, Uns16 half); + +// +// Convert from single-precision to half-precision +// +Uns16 armFPSingleToHalf(armP arm, Uns32 single); + +// +// Return True if the single-precision floating point values op1 and op2 are 0 +// and infinity (in either order), setting the denormal sticky bit if so +// +Bool armFPInfinityAndZero(armP arm, Uns32 op1, Uns32 op2); + +#endif diff --git a/ovp/armmModel/armVM.h b/ovp/armmModel/armVM.h new file mode 100644 index 00000000..80b4a24e --- /dev/null +++ b/ovp/armmModel/armVM.h @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_VM_H +#define ARM_VM_H + +// VMI header files +#include "vmi/vmiTypes.h" + +// model header files +#include "armTypeRefs.h" + + +// +// This is the minimum page size (1Kb) +// +#define MIN_PAGE_SIZE 1024 + +// +// Enumation describing actions performed by armVMMiss +// +typedef enum armVMActionE { + MA_OK, // memory was mapped, access can proceed + MA_EXCEPTION // memory was not mapped, exception was triggered +} armVMAction; + +// +// Try mapping memory at the passed address for the specified access type and +// return a status code indicating whether the mapping succeeded +// +armVMAction armVMMiss( + armP arm, + memPriv requiredPriv, + Uns32 address, + Uns32 bytes, + memAccessAttrs attrs +); + +// +// Set the privileged mode data domain to the user domain (for LDRT, STRT) +// +void armVMSetUserPrivilegedModeDataDomain(armP arm); + +// +// Restore the normal data domain for the current mode (for LDRT, STRT) +// +void armVMRestoreNormalDataDomain(armP arm); + +// +// Write the indexed MPU RBAR register value +// +void armVMWriteRBAR(armP arm, Uns32 index, Bool isData, Uns32 newValue); + +// +// Read the indexed MPU RBAR register value +// +Uns32 armVMReadRBAR(armP arm, Uns32 index, Bool isData); + +// +// Write the indexed MPU RASR register value +// +void armVMWriteRASR(armP arm, Uns32 index, Bool isData, Uns32 newValue); + +// +// Read the indexed MPU RASR register value +// +Uns32 armVMReadRASR(armP arm, Uns32 index, Bool isData); + +// +// Flush the privileged mode MPU +// +void armVMFlushMPUPriv(armP arm); + +// +// Reset VM structures +// +void armVMReset(armP arm); + +// +// Free structures used for virtual memory management +// +void armVMFree(armP arm); + +#endif + diff --git a/ovp/armmModel/armVariant.h b/ovp/armmModel/armVariant.h new file mode 100644 index 00000000..1541e5de --- /dev/null +++ b/ovp/armmModel/armVariant.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARM_VARIANT_H +#define ARM_VARIANT_H + +// this defines the architecture options and variants +typedef enum armArchitectureE { + + // ARCHITECTURE OPTIONS + ARM_VM = 0x0010, // enable long multiply instructions + ARM_VT = 0x0020, // enable thumb instructions + ARM_VD = 0x0040, // enable basic DSP instructions + ARM_VD2 = 0x0080, // enable LDRD, MCRR, MRRC, PLD and STRD insns + ARM_SS = 0x0100, // enable supersections, TEX and S bits + ARM_BX = 0x0200, // enable BX instruction + ARM_J = 0x0400, // enable trivial Jazelle extension + ARM_K = 0x0800, // enable multi-processing instructions + ARM_VT2 = 0x1000, // enable Thumb-2 instructions + + // ARCHITECTURE VERSIONS + ARM_V4XM = 4, + ARM_V4 = 4 | ARM_VM, + ARM_V4TXM = 4 | ARM_BX | ARM_VT, + ARM_V4T = 4 | ARM_BX | ARM_VM | ARM_VT, + ARM_V5XM = 5 | ARM_BX, + ARM_V5 = 5 | ARM_BX | ARM_VM, + ARM_V5TXM = 5 | ARM_BX | ARM_VT, + ARM_V5T = 5 | ARM_BX | ARM_VM | ARM_VT, + ARM_V5TEXP = 5 | ARM_BX | ARM_VM | ARM_VT | ARM_VD, + ARM_V5TE = 5 | ARM_BX | ARM_VM | ARM_VT | ARM_VD | ARM_VD2 | ARM_SS, + ARM_V5TEJ = 5 | ARM_BX | ARM_VM | ARM_VT | ARM_VD | ARM_VD2 | ARM_SS | ARM_J, + ARM_V6 = 6 | ARM_BX | ARM_VM | ARM_VT | ARM_VD | ARM_VD2 | ARM_SS | ARM_J, + ARM_V6K = 6 | ARM_BX | ARM_VM | ARM_VT | ARM_VD | ARM_VD2 | ARM_SS | ARM_J | ARM_K, + ARM_V6T2 = 6 | ARM_BX | ARM_VM | ARM_VT | ARM_VD | ARM_VD2 | ARM_SS | ARM_J | ARM_VT2, + ARM_V7 = 7 | ARM_BX | ARM_VM | ARM_VT | ARM_VD | ARM_VD2 | ARM_SS | ARM_J | ARM_K | ARM_VT2 + +} armArchitecture; + +// this defines thumb versions +typedef enum armThumbVersionE { + ARM_THUMB_NONE, // no thumb instructions + ARM_THUMB_V1, // version 1 thumb instructions + ARM_THUMB_V2 // version 2 thumb instructions +} armThumbVersion; + +// this selects armArchitecture bits specifying instruction version +#define ARM_MASK_VERSION 0xf + +// this is used to restrict availability of features to certain variants +#define ARM_SUPPORT(_V, _M) (((_V) & (_M)) == (_M)) + +// get the main instruction set version +#define ARM_INSTRUCTION_VERSION(_V) ((_V) & ARM_MASK_VERSION) + +// get the thumb instruction set version +#define ARM_THUMB_VERSION(_V) ( \ + !ARM_SUPPORT(_V, ARM_VT) ? ARM_THUMB_NONE : \ + (ARM_INSTRUCTION_VERSION(_V)==4) ? ARM_THUMB_V1 : ARM_THUMB_V2 \ +) + +// get architecture index for the passed variant +#define ARM_VARIANT_ARCH(_V) \ + ({ \ + Uns32 _IV = ARM_INSTRUCTION_VERSION(_V); \ + (_IV>=7) ? 0xf : \ + (_IV==6) ? 0x7 : \ + (_IV==5) && ((_V)&ARM_J) ? 0x6 : \ + (_IV==5) && ((_V)&ARM_VD2) ? 0x5 : \ + (_IV==5) && ((_V)&ARM_VT) ? 0x4 : \ + (_IV==5) ? 0x3 : \ + (_IV==4) && ((_V)&ARM_VT) ? 0x2 : \ + (_IV==4) ? 0x1 : 0x0; \ + }) + +#endif diff --git a/ovp/armmModel/armmAttrs.c b/ovp/armmModel/armmAttrs.c new file mode 100644 index 00000000..0d322bb4 --- /dev/null +++ b/ovp/armmModel/armmAttrs.c @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// VMI header files +#include "vmi/vmiAttrs.h" + +// model header files +#include "armStructure.h" +#include "armFunctions.h" + +static const char *dictNames[] = {"PRIV", "USER", "PRIV_MPU", "USER_MPU", "ARM", 0}; + +// +// Configuration block for instruction-accurate modelling +// +const vmiIASAttr modelAttrs = { + + //////////////////////////////////////////////////////////////////////// + // VERSION & SIZE ATTRIBUTES + //////////////////////////////////////////////////////////////////////// + + .versionString = VMI_VERSION, + .modelType = VMI_PROCESSOR_MODEL, + .dictNames = dictNames, + .cpuSize = sizeof(arm), + + //////////////////////////////////////////////////////////////////////// + // CREATE/DELETE ROUTINES + //////////////////////////////////////////////////////////////////////// + + .constructorCB = armConstructor, + .vmInitCB = armVMInit, + .destructorCB = armDestructor, + + //////////////////////////////////////////////////////////////////////// + // MORPHER CORE ROUTINES + //////////////////////////////////////////////////////////////////////// + + .morphCB = armMorphInstruction, + .fetchSnapCB = armFetchSnap, + + //////////////////////////////////////////////////////////////////////// + // SIMULATION SUPPORT ROUTINES + //////////////////////////////////////////////////////////////////////// + + .getEndianCB = armGetEndian, + .nextPCCB = armNextInstruction, + .disCB = armDisassemble, + .switchCB = armContextSwitchCB, + + //////////////////////////////////////////////////////////////////////// + // EXCEPTION ROUTINES + //////////////////////////////////////////////////////////////////////// + + .rdPrivExceptCB = armRdPrivExceptionCB, + .wrPrivExceptCB = armWrPrivExceptionCB, + .rdAlignExceptCB = armRdAlignExceptionCB, + .wrAlignExceptCB = armWrAlignExceptionCB, + .rdAbortExceptCB = armRdAbortExceptionCB, + .wrAbortExceptCB = armWrAbortExceptionCB, + .arithExceptCB = armArithExceptionCB, + .ifetchExceptCB = armIFetchExceptionCB, + .icountExceptCB = armICountPendingCB, + + //////////////////////////////////////////////////////////////////////// + // DEBUGGER INTEGRATION SUPPORT ROUTINES + //////////////////////////////////////////////////////////////////////// + + .regGroupCB = armRegGroup, + .regInfoCB = armRegInfo, + .exceptionInfoCB = armExceptionInfo, + .modeInfoCB = armModeInfo, + .getExceptionCB = armGetException, + .getModeCB = armGetMode, + .debugCB = armDumpRegisters, + + //////////////////////////////////////////////////////////////////////// + // PARAMETER SUPPORT ROUTINES + //////////////////////////////////////////////////////////////////////// + + .paramSpecsCB = armGetParamSpec, + .paramValueSizeCB = armParamValueSize, + + //////////////////////////////////////////////////////////////////////// + // PORT ROUTINES + //////////////////////////////////////////////////////////////////////// + + .busPortSpecsCB = armGetBusPortSpec, + .netPortSpecsCB = armGetNetPortSpec, + + //////////////////////////////////////////////////////////////////////// + // IMPERAS INTERCEPTED FUNCTION SUPPORT ROUTINES + //////////////////////////////////////////////////////////////////////// + + .intReturnCB = armIntReturnCB, + .intResultCB = armIntResultCB, + .intParCB = armIntParCB, + + //////////////////////////////////////////////////////////////////////// + // PROCESSOR INFO ROUTINE + //////////////////////////////////////////////////////////////////////// + + .procInfoCB = armProcInfo, +}; diff --git a/ovp/armmModel/armmConfigList.c b/ovp/armmModel/armmConfigList.c new file mode 100644 index 00000000..70b50386 --- /dev/null +++ b/ovp/armmModel/armmConfigList.c @@ -0,0 +1,488 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// model header files +#include "armConfig.h" +#include "armVariant.h" + +const struct armConfigS armConfigTable[] = { + + //////////////////////////////////////////////////////////////////////////// + // ISA CONFIGURATIONS + //////////////////////////////////////////////////////////////////////////// + + {.name = "ARMv7-M", .arch = ARM_V7, .rotateUnaligned = True}, + + //////////////////////////////////////////////////////////////////////////// + // PROCESSOR MODEL CONFIGURATIONS + //////////////////////////////////////////////////////////////////////////// + + { + .name = "Cortex-M3", + .arch = ARM_V7, + .numInterrupts = 16, + .rotateUnaligned = False, + .align64as32 = True, // ARMv7-M has no 64-bit load/stores + .STRoffsetPC12 = False, // required value for ARMv7 on + .priorityBitsM1 = 2, // number of priority bits (minus 1) + + .regDefaults = { + .CPUID = { + .REVISION = 0, + .PARTNO = 0xc23, + .ARCHITECTURE = 0xf, + .VARIANT = 0x2, + .IMPLEMENTER = AI_ARM + }, + .ID_PFR0 = { + .State0 = 0, // 32-bit ARM instruction set support + .State1 = 3, // Thumb encoding support + .State2 = 0, // Jazelle support + .State3 = 0 // ThumbEE support + }, + .ID_PFR1 = { + .ProgrammersModel = 0, // ARM programmer's model + .SecurityExtension = 0, // Security Extensions support + .MicroProgrammersModel = 2 // Microcontroller programmer's model + }, + .ID_DFR0 = { + .CoreDebug = 0, // Core debug model + .SecureDebug = 0, // Secure debug model + .EmbeddedDebug = 0, // Embedded debug model + .TraceDebugCP = 0, // Trace debug model, coprocessor-based + .TraceDebugMM = 0, // Trace debug model, memory mapped + .MicroDebug = 0, // Microcontroller debug model + }, + .ID_MMFR0 = { + .VMSA = 0, // VMSA support + .PMSA = 3, // PMSA support + .Cache_Agent = 0, // Cache coherency + CPU agent + .Cache_DMA = 0, // Cache coherency + associated DMA + .TCM_DMA = 0, // TCM + associated DMA + .AuxControl = 0, // ARMv6 Auxillary Control register + .FCSE = 0, // FCSE support + }, + .ID_MMFR1 = { + .L1VAHarvard = 0, // L1 maintainence by VA, Harvard + .L1VAUnified = 0, // L1 maintainence by VA, unified + .L1SWHarvard = 0, // L1 maintainence by Set/Way, Harvard + .L1SWUnified = 0, // L1 maintainence by Set/Way, unified + .L1Harvard = 0, // L1 maintainence, Harvard + .L1Unified = 0, // L1 maintainence, unified + .L1TestClean = 0, // L1 test and clean + .BTB = 0 // Branch target buffer + }, + .ID_MMFR2 = { + .L1FgndPrefetchHarvard = 0, // L1 F/ground cache p/fetch range, Harvard + .L1BgndPrefetchHarvard = 0, // L1 B/ground cache p/fetch range, Harvard + .L1MaintRangeHarvard = 0, // L1 maintanence range, Harvard + .TLBMaintHarvard = 0, // TLB maintanence, Harvard + .TLBMaintUnified = 0, // TLB maintanence, Unified + .MemoryBarrierCP15 = 0, // Memory Barrier, CP15 based + .WaitForInterruptStall = 0, // Wait-for-interrupt stalling + .HWAccessFlag = 0 // hardware access flag support + }, + .ID_MMFR3 = { + .HierMaintSW = 0, // Hierarchical cache maintainence, set/way + .HierMaintMVA = 0, // Hierarchical cache maintainence, MVA + .BPMaint = 0, // Branch predictor maintainence + }, + .ID_ISAR0 = { + .Swap_instrs = 0, // Atomic instructions + .BitCount_instrs = 1, // BitCount instructions + .BitField_instrs = 1, // BitField instructions + .CmpBranch_instrs = 1, // CmpBranch instructions + .Coproc_instrs = 4, // Coprocessor instructions + .Debug_instrs = 1, // Debug instructions + .Divide_instrs = 1, // Divide instructions + }, + .ID_ISAR1 = { + .Endian_instrs = 0, // Endian instructions + .Except_instrs = 0, // Exception instructions + .Except_AR_instrs = 0, // A/R profile exception instructions + .Extend_instrs = 1, // Extend instructions + .IfThen_instrs = 1, // IfThen instructions + .Immediate_instrs = 1, // Immediate instructions + .Interwork_instrs = 2, // Interwork instructions + .Jazelle_instrs = 0 // Jazelle instructions + }, + .ID_ISAR2 = { + .LoadStore_instrs = 1, // LoadStore instructions + .MemHint_instrs = 3, // MemoryHint instructions + .MultiAccessInt_instrs = 2, // Multi-access interruptible instructions + .Mult_instrs = 2, // Multiply instructions + .MultS_instrs = 1, // Multiply instructions, advanced signed + .MultU_instrs = 1, // Multiply instructions, advanced unsigned + .PSR_AR_instrs = 1, // A/R profile PSR instructions + .Reversal_instrs = 2 // Reversal instructions + }, + .ID_ISAR3 = { + .Saturate_instrs = 0, // Saturate instructions + .SIMD_instrs = 1, // SIMD instructions + .SVC_instrs = 1, // SVC instructions + .SynchPrim_instrs = 1, // SynchPrim instructions + .TabBranch_instrs = 1, // TableBranch instructions + .ThumbCopy_instrs = 1, // ThumbCopy instructions + .TrueNOP_instrs = 1, // TrueNOP instructions + .T2ExeEnvExtn_instrs = 0 // Thumb-2 Execution env extensions + }, + .ID_ISAR4 = { + .Unpriv_instrs = 2, // Unprivileged instructions + .WithShifts_instrs = 0, // Shift instructions + .Writeback_instrs = 1, // Writeback instructions + .SMI_instrs = 0, // SMI instructions + .Barrier_instrs = 1, // Barrier instructions + .SynchPrim_instrs_frac = 3, // Fractional support for sync primitive instructions + .PSR_M_instrs = 1, // M-profile forms of PSR instructions + .SWP_frac = 0 // memory system bus locking + }, + .ICTR = { + .INTLINESNUM = 0 // number of interrupt lines supported + }, + .ACTLR = {0}, // auxillary control register + .MPU_TYPE = { + .SEPARATE = 0, // unified MPU + .DREGION = 8, // number of data/unified memory regions + .IREGION = 0 // number of instruction memory regions + }, + .SYST_CALIB = { + .NOREF = 0, // reference clock provided + .SKEW = 0, // whether calibration value inexact + .TENMS = 0 // 10ms reload value + } + }, + + .regMasks = { + } + }, + + { + .name = "Cortex-M4", + .arch = ARM_V7, + .numInterrupts = 16, + .rotateUnaligned = False, + .align64as32 = True, // ARMv7-M has no 64-bit load/stores + .STRoffsetPC12 = False, // required value for ARMv7 on + .priorityBitsM1 = 2, // number of priority bits (minus 1) + + .regDefaults = { + .CPUID = { + .REVISION = 1, + .PARTNO = 0xc24, + .ARCHITECTURE = 0xf, + .VARIANT = 0x0, + .IMPLEMENTER = AI_ARM + }, + .ID_PFR0 = { + .State0 = 0, // 32-bit ARM instruction set support + .State1 = 3, // Thumb encoding support + .State2 = 0, // Jazelle support + .State3 = 0 // ThumbEE support + }, + .ID_PFR1 = { + .ProgrammersModel = 0, // ARM programmer's model + .SecurityExtension = 0, // Security Extensions support + .MicroProgrammersModel = 2 // Microcontroller programmer's model + }, + .ID_DFR0 = { + .CoreDebug = 0, // Core debug model + .SecureDebug = 0, // Secure debug model + .EmbeddedDebug = 0, // Embedded debug model + .TraceDebugCP = 0, // Trace debug model, coprocessor-based + .TraceDebugMM = 0, // Trace debug model, memory mapped + .MicroDebug = 0, // Microcontroller debug model + }, + .ID_MMFR0 = { + .VMSA = 0, // VMSA support + .PMSA = 3, // PMSA support + .Cache_Agent = 0, // Cache coherency + CPU agent + .Cache_DMA = 0, // Cache coherency + associated DMA + .TCM_DMA = 0, // TCM + associated DMA + .AuxControl = 0, // ARMv6 Auxillary Control register + .FCSE = 0, // FCSE support + }, + .ID_MMFR1 = { + .L1VAHarvard = 0, // L1 maintainence by VA, Harvard + .L1VAUnified = 0, // L1 maintainence by VA, unified + .L1SWHarvard = 0, // L1 maintainence by Set/Way, Harvard + .L1SWUnified = 0, // L1 maintainence by Set/Way, unified + .L1Harvard = 0, // L1 maintainence, Harvard + .L1Unified = 0, // L1 maintainence, unified + .L1TestClean = 0, // L1 test and clean + .BTB = 0 // Branch target buffer + }, + .ID_MMFR2 = { + .L1FgndPrefetchHarvard = 0, // L1 F/ground cache p/fetch range, Harvard + .L1BgndPrefetchHarvard = 0, // L1 B/ground cache p/fetch range, Harvard + .L1MaintRangeHarvard = 0, // L1 maintanence range, Harvard + .TLBMaintHarvard = 0, // TLB maintanence, Harvard + .TLBMaintUnified = 0, // TLB maintanence, Unified + .MemoryBarrierCP15 = 0, // Memory Barrier, CP15 based + .WaitForInterruptStall = 0, // Wait-for-interrupt stalling + .HWAccessFlag = 0 // hardware access flag support + }, + .ID_MMFR3 = { + .HierMaintSW = 0, // Hierarchical cache maintainence, set/way + .HierMaintMVA = 0, // Hierarchical cache maintainence, MVA + .BPMaint = 0, // Branch predictor maintainence + }, + .ID_ISAR0 = { + .Swap_instrs = 0, // Atomic instructions + .BitCount_instrs = 1, // BitCount instructions + .BitField_instrs = 1, // BitField instructions + .CmpBranch_instrs = 1, // CmpBranch instructions + .Coproc_instrs = 4, // Coprocessor instructions + .Debug_instrs = 1, // Debug instructions + .Divide_instrs = 1, // Divide instructions + }, + .ID_ISAR1 = { + .Endian_instrs = 0, // Endian instructions + .Except_instrs = 0, // Exception instructions + .Except_AR_instrs = 0, // A/R profile exception instructions + .Extend_instrs = 2, // Extend instructions + .IfThen_instrs = 1, // IfThen instructions + .Immediate_instrs = 1, // Immediate instructions + .Interwork_instrs = 2, // Interwork instructions + .Jazelle_instrs = 0 // Jazelle instructions + }, + .ID_ISAR2 = { + .LoadStore_instrs = 1, // LoadStore instructions + .MemHint_instrs = 3, // MemoryHint instructions + .MultiAccessInt_instrs = 2, // Multi-access interruptible instructions + .Mult_instrs = 2, // Multiply instructions + .MultS_instrs = 3, // Multiply instructions, advanced signed + .MultU_instrs = 2, // Multiply instructions, advanced unsigned + .PSR_AR_instrs = 1, // A/R profile PSR instructions + .Reversal_instrs = 2 // Reversal instructions + }, + .ID_ISAR3 = { + .Saturate_instrs = 1, // Saturate instructions + .SIMD_instrs = 3, // SIMD instructions + .SVC_instrs = 1, // SVC instructions + .SynchPrim_instrs = 1, // SynchPrim instructions + .TabBranch_instrs = 1, // TableBranch instructions + .ThumbCopy_instrs = 1, // ThumbCopy instructions + .TrueNOP_instrs = 1, // TrueNOP instructions + .T2ExeEnvExtn_instrs = 0 // Thumb-2 Execution env extensions + }, + .ID_ISAR4 = { + .Unpriv_instrs = 2, // Unprivileged instructions + .WithShifts_instrs = 3, // Shift instructions + .Writeback_instrs = 1, // Writeback instructions + .SMI_instrs = 0, // SMI instructions + .Barrier_instrs = 1, // Barrier instructions + .SynchPrim_instrs_frac = 3, // Fractional support for sync primitive instructions + .PSR_M_instrs = 1, // M-profile forms of PSR instructions + .SWP_frac = 0 // memory system bus locking + }, + .ICTR = { + .INTLINESNUM = 0 // number of interrupt lines supported + }, + .ACTLR = {0}, // auxillary control register + .MPU_TYPE = { + .SEPARATE = 0, // unified MPU + .DREGION = 8, // number of data/unified memory regions + .IREGION = 0 // number of instruction memory regions + }, + .SYST_CALIB = { + .NOREF = 0, // reference clock provided + .SKEW = 0, // whether calibration value inexact + .TENMS = 0 // 10ms reload value + }, + }, + + .regMasks = { + } + }, + + { + .name = "Cortex-M4F", + .arch = ARM_V7, + .numInterrupts = 16, + .rotateUnaligned = False, + .align64as32 = True, // ARMv7-M has no 64-bit load/stores + .STRoffsetPC12 = False, // required value for ARMv7 on + .priorityBitsM1 = 2, // number of priority bits (minus 1) + + .regDefaults = { + .CPUID = { + .REVISION = 1, + .PARTNO = 0xc24, + .ARCHITECTURE = 0xf, + .VARIANT = 0x0, + .IMPLEMENTER = AI_ARM + }, + .ID_PFR0 = { + .State0 = 0, // 32-bit ARM instruction set support + .State1 = 3, // Thumb encoding support + .State2 = 0, // Jazelle support + .State3 = 0 // ThumbEE support + }, + .ID_PFR1 = { + .ProgrammersModel = 0, // ARM programmer's model + .SecurityExtension = 0, // Security Extensions support + .MicroProgrammersModel = 2 // Microcontroller programmer's model + }, + .ID_DFR0 = { + .CoreDebug = 0, // Core debug model + .SecureDebug = 0, // Secure debug model + .EmbeddedDebug = 0, // Embedded debug model + .TraceDebugCP = 0, // Trace debug model, coprocessor-based + .TraceDebugMM = 0, // Trace debug model, memory mapped + .MicroDebug = 0, // Microcontroller debug model + }, + .ID_MMFR0 = { + .VMSA = 0, // VMSA support + .PMSA = 3, // PMSA support + .Cache_Agent = 0, // Cache coherency + CPU agent + .Cache_DMA = 0, // Cache coherency + associated DMA + .TCM_DMA = 0, // TCM + associated DMA + .AuxControl = 0, // ARMv6 Auxillary Control register + .FCSE = 0, // FCSE support + }, + .ID_MMFR1 = { + .L1VAHarvard = 0, // L1 maintainence by VA, Harvard + .L1VAUnified = 0, // L1 maintainence by VA, unified + .L1SWHarvard = 0, // L1 maintainence by Set/Way, Harvard + .L1SWUnified = 0, // L1 maintainence by Set/Way, unified + .L1Harvard = 0, // L1 maintainence, Harvard + .L1Unified = 0, // L1 maintainence, unified + .L1TestClean = 0, // L1 test and clean + .BTB = 0 // Branch target buffer + }, + .ID_MMFR2 = { + .L1FgndPrefetchHarvard = 0, // L1 F/ground cache p/fetch range, Harvard + .L1BgndPrefetchHarvard = 0, // L1 B/ground cache p/fetch range, Harvard + .L1MaintRangeHarvard = 0, // L1 maintanence range, Harvard + .TLBMaintHarvard = 0, // TLB maintanence, Harvard + .TLBMaintUnified = 0, // TLB maintanence, Unified + .MemoryBarrierCP15 = 0, // Memory Barrier, CP15 based + .WaitForInterruptStall = 0, // Wait-for-interrupt stalling + .HWAccessFlag = 0 // hardware access flag support + }, + .ID_MMFR3 = { + .HierMaintSW = 0, // Hierarchical cache maintainence, set/way + .HierMaintMVA = 0, // Hierarchical cache maintainence, MVA + .BPMaint = 0, // Branch predictor maintainence + }, + .ID_ISAR0 = { + .Swap_instrs = 0, // Atomic instructions + .BitCount_instrs = 1, // BitCount instructions + .BitField_instrs = 1, // BitField instructions + .CmpBranch_instrs = 1, // CmpBranch instructions + .Coproc_instrs = 4, // Coprocessor instructions + .Debug_instrs = 1, // Debug instructions + .Divide_instrs = 1, // Divide instructions + }, + .ID_ISAR1 = { + .Endian_instrs = 0, // Endian instructions + .Except_instrs = 0, // Exception instructions + .Except_AR_instrs = 0, // A/R profile exception instructions + .Extend_instrs = 2, // Extend instructions + .IfThen_instrs = 1, // IfThen instructions + .Immediate_instrs = 1, // Immediate instructions + .Interwork_instrs = 2, // Interwork instructions + .Jazelle_instrs = 0 // Jazelle instructions + }, + .ID_ISAR2 = { + .LoadStore_instrs = 1, // LoadStore instructions + .MemHint_instrs = 3, // MemoryHint instructions + .MultiAccessInt_instrs = 2, // Multi-access interruptible instructions + .Mult_instrs = 2, // Multiply instructions + .MultS_instrs = 3, // Multiply instructions, advanced signed + .MultU_instrs = 2, // Multiply instructions, advanced unsigned + .PSR_AR_instrs = 1, // A/R profile PSR instructions + .Reversal_instrs = 2 // Reversal instructions + }, + .ID_ISAR3 = { + .Saturate_instrs = 1, // Saturate instructions + .SIMD_instrs = 3, // SIMD instructions + .SVC_instrs = 1, // SVC instructions + .SynchPrim_instrs = 1, // SynchPrim instructions + .TabBranch_instrs = 1, // TableBranch instructions + .ThumbCopy_instrs = 1, // ThumbCopy instructions + .TrueNOP_instrs = 1, // TrueNOP instructions + .T2ExeEnvExtn_instrs = 0 // Thumb-2 Execution env extensions + }, + .ID_ISAR4 = { + .Unpriv_instrs = 2, // Unprivileged instructions + .WithShifts_instrs = 3, // Shift instructions + .Writeback_instrs = 1, // Writeback instructions + .SMI_instrs = 0, // SMI instructions + .Barrier_instrs = 1, // Barrier instructions + .SynchPrim_instrs_frac = 3, // Fractional support for sync primitive instructions + .PSR_M_instrs = 1, // M-profile forms of PSR instructions + .SWP_frac = 0 // memory system bus locking + }, + .ICTR = { + .INTLINESNUM = 0 // number of interrupt lines supported + }, + .ACTLR = {0}, // auxillary control register + .MPU_TYPE = { + .SEPARATE = 0, // unified MPU + .DREGION = 8, // number of data/unified memory regions + .IREGION = 0 // number of instruction memory regions + }, + .SYST_CALIB = { + .NOREF = 0, // reference clock provided + .SKEW = 0, // whether calibration value inexact + .TENMS = 0 // 10ms reload value + }, + .MVFR0 = { + .A_SIMD_Registers = 1, // 16x64-bit media register bank + .SinglePrecision = 2, // single precision supported + .DoublePrecision = 0, // double precision not supported + .VFP_ExceptionTrap = 0, // trapped exceptions not supported + .Divide = 1, // VFP hardware divide supported + .SquareRoot = 1, // VFP hardware square root supported + .ShortVectors = 0, // VFP short vector not supported + .VFP_RoundingModes = 1 // all VFP rounding modes supported + }, + .MVFR1 = { + .FlushToZeroMode = 1, // VFP denormal arithmetic supported + .DefaultNaNMode = 1, // VFP NaN propagation supported + .VFP_HalfPrecision = 1, // VFP half-precision not supported + .VFP_FusedMAC = 1, // Fused multiply accumulate supported + } + }, + + .regMasks = { + } + }, + + + // null terminator + {0} +}; + diff --git a/ovp/armmModel/armmDebug.c b/ovp/armmModel/armmDebug.c new file mode 100644 index 00000000..11e8edb0 --- /dev/null +++ b/ovp/armmModel/armmDebug.c @@ -0,0 +1,683 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Standard header files +#include "string.h" +#include "stdio.h" + +// Imperas header files +#include "hostapi/impAlloc.h" + +// VMI header files +#include "vmi/vmiAttrs.h" +#include "vmi/vmiDbg.h" +#include "vmi/vmiMessage.h" +#include "vmi/vmiOSLib.h" +#include "vmi/vmiRt.h" + +// model header files +#include "armRegisters.h" +#include "armStructure.h" +#include "armUtils.h" +#include "armSys.h" +#include "armVFP.h" + + +// +// Prefix for messages from this module +// +#define CPU_PREFIX "ARM_DEBUG" + + +//////////////////////////////////////////////////////////////////////////////// +// REGISTER GROUPS +//////////////////////////////////////////////////////////////////////////////// + +// +// This describes the register groups in the processor +// +typedef enum armRegGroupIdE { + ARM_RG_CORE, // Core group + ARM_RG_CONTROL, // control register group + ARM_RG_SYSTEM, // memory-mapped system register group + ARM_RG_FPR, // VFP register group + ARM_RG_LAST // KEEP LAST: for sizing +} armRegGroupId; + +// +// This provides information about each group +// +static const vmiRegGroup groups[ARM_RG_LAST+1] = { + [ARM_RG_CORE] = {name: "Core" }, + [ARM_RG_CONTROL] = {name: "Control"}, + [ARM_RG_SYSTEM] = {name: "System" }, + [ARM_RG_FPR] = {name: "VFP" }, +}; + +// +// Macro to specify a the group for a register +// +#define ARM_GROUP(_G) &groups[ARM_RG_##_G] + + +//////////////////////////////////////////////////////////////////////////////// +// MACROS FOR REGISTER ACCESS +//////////////////////////////////////////////////////////////////////////////// + +// +// Macro to specify a register that can be accessed using raw read/write +// callbacks +// +#define ARM_RAW_REG(_R, _G) \ + VMI_REG_RAW_READ_CB, \ + VMI_REG_RAW_WRITE_CB, \ + (void *)ARM_CPU_OFFSET(_R), \ + _G + +// +// Core registers +// +#define ARM_CORE_REG(_I) ARM_RAW_REG(regs[_I], ARM_GROUP(CORE)) + +// +// Macro to specify the PC accessible for read/write +// +#define ARM_PC_RW readPC, writePC, 0, ARM_GROUP(CORE) + +// +// Macro to specify access for the stack pointer register +// +#define ARM_SP_REG(_R) \ + VMI_REG_RAW_READ_CB, \ + writeSP, \ + (void *)ARM_CPU_OFFSET(regs[_R]), \ + ARM_GROUP(CORE) + +// +// Macro to specify the control registers +// +#define ARM_CONTROL_RW(_ID) read##_ID, write##_ID, 0, ARM_GROUP(CONTROL) + +// +// Some registers are hidden in gdb, but we allow access to them +// +#define ARM_GDB_HIDDEN_INDEX 99 +#define IS_GDB_HIDDEN_REG(_I) ((_I)>=ARM_GDB_HIDDEN_INDEX) + +// +// system registers do not have access +// +#define ARM_CP_INDEX 0x1000 +#define IS_SCS_REG(_I) ((_I)>=ARM_CP_INDEX) + +// +// VFP registers - must check for existence in the variant +// +#define ARM_FPSCR_INDEX 24 +#define ARM_VFP0_INDEX 700 +#define ARM_VFP15_INDEX 715 +#define IS_VFP_REG(_I) ((_I)==ARM_FPSCR_INDEX || IS_VFP_DATA_REG(_I)) +#define IS_VFP_DATA_REG(_I) (((_I)>=ARM_VFP0_INDEX) && ((_I)<=ARM_VFP15_INDEX)) +#define ARM_VFP_INDEX(_I) ((_I)-ARM_VFP0_INDEX) +#define ARM_VFP_DATA_REG(_I) ARM_RAW_REG(vregs.d[_I], ARM_GROUP(FPR)) + +//////////////////////////////////////////////////////////////////////////////// +// DEBUGGER REGISTER INTERFACE +//////////////////////////////////////////////////////////////////////////////// + +// +// Return current vmiRegInfoCP structure for the passed banked vmiRegInfoCP +// +vmiRegInfoCP getCurrentInfo(vmiRegInfoCP reg); + +// +// Return system register id for vmiRegInfoCP +// +static armSCSRegId getSysId(vmiRegInfoCP reg) { + if(!IS_SCS_REG(reg->gdbIndex)) { + return SCS_ID(INVALID); + } else { + return (armSCSRegId)reg->userData; + } +} + +// +// Write callback for sp +// +static VMI_REG_WRITE_FN(writeSP) { + armWriteSP((armP)processor, *(Uns32*)buffer); + return True; +} + +// +// Read callback for pc +// +static VMI_REG_READ_FN(readPC) { + *(Uns32*)buffer = ((Uns32)vmirtGetPC(processor)); + return True; +} + +// +// Write callback for pc +// +static VMI_REG_WRITE_FN(writePC) { + Uns32 simPC = *(Uns32*)buffer; + vmirtSetPC(processor, simPC & ~1); + return True; +} + +// +// Read callback for PSR +// +static VMI_REG_READ_FN(readPSR) { + *(Uns32*)buffer = armReadCPSR((armP)processor); + return True; +} + +// +// Write callback for PSR +// +static VMI_REG_WRITE_FN(writePSR) { + armP arm = (armP)processor; + armWriteCPSR(arm, *(Uns32*)buffer, PSR_ALL); + return True; +} + +// +// Read callback for FPSCR +// +static VMI_REG_READ_FN(readFPSCR) { + *(Uns32*)buffer = armReadFPSCR((armP)processor); + return True; +} + +// +// Write callback for FPSCR +// +static VMI_REG_WRITE_FN(writeFPSCR) { + armP arm = (armP)processor; + armWriteFPSCR(arm, *(Uns32*)buffer, FPSCR_MASK); + return True; +} + +// +// Read callback for CONTROL +// +static VMI_REG_READ_FN(readControl) { + *(Uns32*)buffer = armReadCONTROL((armP)processor); + return True; +} + +// +// Write callback for CONTROL +// +static VMI_REG_WRITE_FN(writeControl) { + armP arm = (armP)processor; + armWriteCONTROL(arm, *(Uns32*)buffer); + return True; +} + +// +// Read callback for PRIMASK +// +static VMI_REG_READ_FN(readPRIMASK) { + armP arm = (armP)processor; + *(Uns32*)buffer = arm->sregs.PRIMASK; + return True; +} + +// +// Write callback for PRIMASK +// +static VMI_REG_WRITE_FN(writePRIMASK) { + armP arm = (armP)processor; + armWritePRIMASK(arm, *(Uns32*)buffer); + return True; +} + + +// +// Read callback for FAULTMASK +// +static VMI_REG_READ_FN(readFAULTMASK) { + armP arm = (armP)processor; + *(Uns32*)buffer = arm->sregs.FAULTMASK; + return True; +} +// +// Write callback for FAULTMASK +// +static VMI_REG_WRITE_FN(writeFAULTMASK) { + armP arm = (armP)processor; + armWriteFAULTMASK(arm, *(Uns32*)buffer); + return True; +} + +// +// Read callback for FAULTMASK +// +static VMI_REG_READ_FN(readBASEPRI) { + armP arm = (armP)processor; + *(Uns32*)buffer = arm->sregs.BASEPRI; + return True; +} + +// +// Write callback for BASEPRI +// +static VMI_REG_WRITE_FN(writeBASEPRI) { + armP arm = (armP)processor; + armWriteBASEPRI(arm, *(Uns32*)buffer); + return True; +} + +// +// Read callback for banked register +// +static VMI_REG_READ_FN(readBank) { + + armP arm = (armP)processor; + Bool trueUseSPProcess = USE_SP_PROCESS(arm); + Bool tempUseSPProcess = True; + + armSwitchRegs(arm, trueUseSPProcess, tempUseSPProcess); + Bool result = vmiosRegRead(processor, getCurrentInfo(reg), buffer); + armSwitchRegs(arm, tempUseSPProcess, trueUseSPProcess); + + return result; +} + +// +// Write callback for banked register +// +static VMI_REG_WRITE_FN(writeBank) { + + armP arm = (armP)processor; + Bool trueUseSPProcess = USE_SP_PROCESS(arm); + Bool tempUseSPProcess = True; + + armSwitchRegs(arm, trueUseSPProcess, tempUseSPProcess); + Bool result = vmiosRegWrite(processor, getCurrentInfo(reg), buffer); + armSwitchRegs(arm, tempUseSPProcess, trueUseSPProcess); + + return result; +} + +// +// Read callback for system register +// +static VMI_REG_READ_FN(readSCS) { + + armP arm = (armP)processor; + armSCSRegId id = getSysId(reg); + + if(!armReadSysRegPriv(id, arm, (Uns32*)buffer)) { + + return False; + + } else if(id!=SCS_ID(CPUID)) { + + return True; + + } else { + + union {Uns32 u32; SCS_REG_DECL(CPUID);} u = {*(Uns32*)buffer}; + + if(!u.u32) { + armArchitecture variant = arm->configInfo.arch; + u.CPUID.ARCHITECTURE = ARM_VARIANT_ARCH(variant); + *(Uns32*)buffer = u.u32; + } + + return True; + } +} + +// +// Write callback for system register +// +static VMI_REG_WRITE_FN(writeSCS) { + return armWriteSysRegPriv(getSysId(reg), (armP)processor, *(Uns32*)buffer); +} + +// +// Static const array holding information about the registers in the cpu, +// used for debugger interaction +// +static const vmiRegInfo basicRegisters[] = { + + // current mode registers (visible in gdb) + {"r0", 0, vmi_REG_NONE, 32, False, ARM_CORE_REG(0) }, + {"r1", 1, vmi_REG_NONE, 32, False, ARM_CORE_REG(1) }, + {"r2", 2, vmi_REG_NONE, 32, False, ARM_CORE_REG(2) }, + {"r3", 3, vmi_REG_NONE, 32, False, ARM_CORE_REG(3) }, + {"r4", 4, vmi_REG_NONE, 32, False, ARM_CORE_REG(4) }, + {"r5", 5, vmi_REG_NONE, 32, False, ARM_CORE_REG(5) }, + {"r6", 6, vmi_REG_NONE, 32, False, ARM_CORE_REG(6) }, + {"r7", 7, vmi_REG_NONE, 32, False, ARM_CORE_REG(7) }, + {"r8", 8, vmi_REG_NONE, 32, False, ARM_CORE_REG(8) }, + {"r9", 9, vmi_REG_NONE, 32, False, ARM_CORE_REG(9) }, + {"r10", 10, vmi_REG_NONE, 32, False, ARM_CORE_REG(10) }, + {"r11", 11, vmi_REG_FP, 32, False, ARM_CORE_REG(11) }, + {"r12", 12, vmi_REG_NONE, 32, False, ARM_CORE_REG(12) }, + {"sp", 13, vmi_REG_SP, 32, False, ARM_SP_REG (13) }, + {"lr", 14, vmi_REG_NONE, 32, False, ARM_CORE_REG(14) }, + {"pc", 15, vmi_REG_PC, 32, False, ARM_PC_RW }, + {"fps", 24, vmi_REG_NONE, 32, False, ARM_CONTROL_RW(FPSCR) }, + {"cpsr", 25, vmi_REG_NONE, 32, False, ARM_CONTROL_RW(PSR) }, + + // control and SP_process (not visible in gdb) + {"control", 100, vmi_REG_NONE, 32, False, ARM_CONTROL_RW(Control)}, + {"primask", 101, vmi_REG_NONE, 32, False, ARM_CONTROL_RW(PRIMASK)}, + {"faultmask", 102, vmi_REG_NONE, 32, False, ARM_CONTROL_RW(FAULTMASK)}, + {"basepri", 103, vmi_REG_NONE, 32, False, ARM_CONTROL_RW(BASEPRI)}, + {"sp_process", 113, vmi_REG_SP, 32, False, ARM_CONTROL_RW(Bank) }, + + // VFP registers - double word view only (not visible in gdb) + {"d0", 700, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(0) }, + {"d1", 701, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(1) }, + {"d2", 702, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(2) }, + {"d3", 703, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(3) }, + {"d4", 704, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(4) }, + {"d5", 705, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(5) }, + {"d6", 706, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(6) }, + {"d7", 707, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(7) }, + {"d8", 708, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(8) }, + {"d9", 709, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(9) }, + {"d10", 710, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(10)}, + {"d11", 711, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(11)}, + {"d12", 712, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(12)}, + {"d13", 713, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(13)}, + {"d14", 714, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(14)}, + {"d15", 715, vmi_REG_NONE, 64, False, ARM_VFP_DATA_REG(15)}, + + {0}, +}; + +// +// Return ARM register descriptions +// +static vmiRegInfoCP getRegisters(void) { + + static vmiRegInfo *allRegisters; + + if(!allRegisters) { + + armSysRegDesc desc; + Uns32 basicNum = 0; + Uns32 sysNum = 0; + Uns32 i; + + // count basic registers + while(basicRegisters[basicNum].name) { + basicNum++; + } + + // count system registers + desc.name = 0; + while(armGetSysRegisterDesc(&desc)) { + sysNum++; + } + + // allocate full register information, including terminating NULL entry + // TODO: This is never freed! Need to free description too + allRegisters = STYPE_CALLOC_N(vmiRegInfo, basicNum+sysNum+1); + + // fill basic entries + for(i=0; iname = desc.name; + reg->usage = vmi_REG_NONE; + reg->bits = 32; + reg->readonly = False; + reg->readCB = readSCS; + reg->writeCB = writeSCS; + reg->userData = (void *)desc.id; + reg->group = ARM_GROUP(SYSTEM); + + // synthesize a description + char descStr[64]; + snprintf(descStr, 64, "Addr: 0x%08x Priv:%s User:%s", desc.address, desc.privRW, desc.userRW); + reg->description = strdup(descStr); + + // use address as gdb pseudo-index + reg->gdbIndex = desc.address; + } + } + + // return register set + return allRegisters; +} + +// +// Return current vmiRegInfoCP structure for the passed banked vmiRegInfoCP +// +vmiRegInfoCP getCurrentInfo(vmiRegInfoCP reg) { + + Uns32 index = reg->gdbIndex % 100; + vmiRegInfoCP info; + + for(info=getRegisters(); info->name; info++) { + if(info->gdbIndex == index) { + return info; + } + } + + return 0; +} + +// +// Is the passed register supported on this processor? +// +static Bool isRegSupported(armP arm, vmiRegInfoCP reg, Bool gdbFrame) { + + if(gdbFrame && IS_GDB_HIDDEN_REG(reg->gdbIndex)) { + + // if this is a GDB frame request then registers that should be hidden + // from GDB should be ignored + return False; + + } else if(IS_VFP_REG(reg->gdbIndex)) { + + // VFP registers are supported if in variant + return FPU_PRESENT(arm); + + } else if(IS_SCS_REG(reg->gdbIndex)) { + + // system registers are supported only if the associated unit is present + return armGetSysRegSupported(getSysId(reg), arm); + + } + + // other registers are always supported + return True; + +} + +// +// Return next supported register on this processor +// +static vmiRegInfoCP getNextRegister(armP arm, vmiRegInfoCP reg, Bool gdbFrame) { + + do { + if(!reg) { + reg = getRegisters(); + } else if((reg+1)->name) { + reg = reg+1; + } else { + reg = 0; + } + } while(reg && !isRegSupported(arm, reg, gdbFrame)); + + return reg; +} + +// +// Is the passed register group supported on this processor? +// +static Bool isGroupSupported(armP arm, vmiRegGroupCP group) { + + vmiRegInfoCP info = 0; + + while((info=getNextRegister(arm, info, False))) { + if(info->group == group) { + return True; + } + } + + return False; +} + +// +// Return next supported group on this processor +// +static vmiRegGroupCP getNextGroup(armP arm, vmiRegGroupCP group) { + + do { + if(!group) { + group = groups; + } else if((group+1)->name) { + group = group+1; + } else { + group = 0; + } + } while(group && !isGroupSupported(arm, group)); + + return group; +} + +// +// Register structure iterator +// +VMI_REG_INFO_FN(armRegInfo) { + return getNextRegister((armP)processor, prev, gdbFrame); +} + +// +// Register group iterator +// +VMI_REG_GROUP_FN(armRegGroup) { + return getNextGroup((armP)processor, prev); +} + + +//////////////////////////////////////////////////////////////////////////////// +// REGISTER DUMP INTERFACE +//////////////////////////////////////////////////////////////////////////////// + +// +// Dump processor registers +// +VMI_DEBUG_FN(armDumpRegisters) { + + armP arm = (armP)processor; + Bool showHiddenRegs = arm->showHiddenRegs; + Uns32 nameWidth = showHiddenRegs ? 10 : 7; + vmiRegInfoCP info = 0; + + while((info=getNextRegister(arm, info, False))) { + + if(IS_SCS_REG(info->gdbIndex)) { + + // ignore system registers + + } else if(IS_VFP_DATA_REG(info->gdbIndex)) { + + // print VFP regs if enabled + if(ARM_DUMP_SDFP_REG(arm)) { + + const char *fmt = " %-*s 0x" FMT_640Nx "\n"; + Uns64 value; + + // read and print register value + vmiosRegRead(processor, info, &value); + vmiPrintf(fmt, nameWidth, info->name, value); + } + + } else if(!IS_GDB_HIDDEN_REG(info->gdbIndex) || showHiddenRegs) { + + const char *fmt; + Uns32 value; + + // read register value + vmiosRegRead(processor, info, &value); + + // select approriate format string + if((info->usage==vmi_REG_SP) || (info->usage==vmi_REG_PC)) { + fmt = " %-*s 0x%-8x 0x%x\n"; + } else { + fmt = " %-*s 0x%-8x %u\n"; + } + + // print register using selected format + vmiPrintf(fmt, nameWidth, info->name, value, value); + } + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// SCS PROGRAMMER'S VIEW +//////////////////////////////////////////////////////////////////////////////// + +// +// Add programmer's view of all system registers +// +void armAddSysRegistersView(armP arm, vmiViewObjectP processorObject) { + + vmiRegInfoCP info = 0; + + // create coprocessor 15 child object + vmiViewObjectP baseObject = vmirtAddViewObject(processorObject, "SCS", 0); + + while((info=getNextRegister(arm, info, False))) { + + if(IS_SCS_REG(info->gdbIndex)) { + + const char *name = info->name; + armSCSRegId id = getSysId(info); + + armAddSysRegisterView(id, arm, baseObject, name); + } + } +} + diff --git a/ovp/armmModel/armmDecode.c b/ovp/armmModel/armmDecode.c new file mode 100644 index 00000000..dfe3d8df --- /dev/null +++ b/ovp/armmModel/armmDecode.c @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// VMI header files +#include "vmi/vmiMessage.h" + +// model header files +#include "armDecodeThumb.h" +#include "armDecodeTypes.h" +#include "armStructure.h" + + +// +// Prefix for messages from this module +// +#define CPU_PREFIX "ARM_DECODE" + + +// +// Decode the instruction at the passed address. The 'info' structure is filled +// with details of the instruction. +// +ARM_DECODER_FN(armDecode) { + + // record current PC in decoded structure + info->thisPC = thisPC; + + // do decode (Thumb mode only) + armDecodeThumb(arm, thisPC, info); +} + +// +// Return the size of the instruction at the passed address and the mode +// +ARM_ISIZE_FN(armGetInstructionSizeMode) { + return isThumb ? armGetThumbInstructionSize(arm, thisPC) : 4; +} + +// +// Return the size of the instruction at the passed address +// +Uns32 armGetInstructionSize(armP arm, Uns32 thisPC) { + return armGetInstructionSizeMode(arm, thisPC, IN_THUMB_MODE(arm)); +} + diff --git a/ovp/armmModel/armmDecodeThumb.c b/ovp/armmModel/armmDecodeThumb.c new file mode 100644 index 00000000..2b65b58b --- /dev/null +++ b/ovp/armmModel/armmDecodeThumb.c @@ -0,0 +1,2725 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// VMI header files +#include "vmi/vmiCxt.h" +#include "vmi/vmiDecode.h" +#include "vmi/vmiMessage.h" +#include "vmi/vmiRt.h" + +// model header files +#include "armAttributeEntriesThumb16.h" +#include "armAttributeEntriesThumb32.h" +#include "armBitMacros.h" +#include "armDecode.h" +#include "armDecodeEntriesThumb16.h" +#include "armDecodeEntriesThumb32.h" +#include "armDecodeThumb.h" +#include "armRegisters.h" +#include "armStructure.h" +#include "armSysRegisters.h" +#include "armVariant.h" + + +// +// Prefix for messages from this module +// +#define CPU_PREFIX "ARM_DECODE_THUMB" + + +//////////////////////////////////////////////////////////////////////////////// +// THUMB INSTRUCTION TYPES +//////////////////////////////////////////////////////////////////////////////// + +// +// Decode entries for 32-bit Thumb instructions like LDR +// +#define TT32_SET_LDR(_NAME) \ + TT32_##_NAME##_IMM1, \ + TT32_##_NAME##_IMM2, \ + TT32_##_NAME##_IMM3, \ + TT32_##_NAME##_RM, \ + TT32_##_NAME##_RM_SHFT_IMM, \ + TT32_##_NAME##T_IMM + +// +// Decode entries for 32-bit Thumb instructions like PLD +// +#define TT32_SET_PLD(_NAME) \ + TT32_##_NAME##_IMM1, \ + TT32_##_NAME##_IMM2, \ + TT32_##_NAME##_IMM3, \ + TT32_##_NAME##_RM, \ + TT32_##_NAME##_RM_SHFT_IMM + +// +// Decode entries for 32-bit Thumb instructions like ADD +// +#define TT32_SET_ADD(_NAME) \ + TT32_##_NAME##_IMM, \ + TT32_##_NAME##_RM_SHFT_IMM, \ + TT32_##_NAME##_RM_RRX + +// +// Instruction types for 32-bit Thumb parallel add/subtract Media instructions +// +#define TT32_SET_PAS(_NAME) \ + TT32_S##_NAME, \ + TT32_Q##_NAME, \ + TT32_SH##_NAME, \ + TT32_U##_NAME, \ + TT32_UQ##_NAME, \ + TT32_UH##_NAME + +// +// Instruction types for 32-bit Thumb DSP instructions like SMLA +// +#define TT32_SET_SMLA_XY(_NAME) \ + TT32_##_NAME##BB, \ + TT32_##_NAME##BT, \ + TT32_##_NAME##TB, \ + TT32_##_NAME##TT + +// +// Instruction types for 32-bit Thumb DSP instructions like SMLAW +// +#define TT32_SET_SMLAW_Y(_NAME) \ + TT32_##_NAME##B, \ + TT32_##_NAME##T + +// +// Instruction types for 32-bit Thumb instructions with optional argument exchange +// +#define TT32_SET_MEDIA_X(_NAME) \ + TT32_##_NAME, \ + TT32_##_NAME##X + +// +// Instruction types for 32-bit Thumb instructions with optional result rounding +// +#define TT32_SET_MEDIA_R(_NAME) \ + TT32_##_NAME, \ + TT32_##_NAME##R + +// +// Instruction types for 32-bit Thumb instructions like LDC +// +#define TT32_SET_LDC(_NAME) \ + TT32_##_NAME##_IMM, \ + TT32_##_NAME##_UNINDEXED + +// +// Instruction types for VFP instructions with D and S variants +// +#define TT32_VFP_DS(_NAME) \ + TT32_##_NAME##_D, \ + TT32_##_NAME##_S + +// +// Instruction type enumeration +// +typedef enum armThumbTypeE { + + //////////////////////////////////////////////////////////////////////////// + // 16-bit instructions + //////////////////////////////////////////////////////////////////////////// + + // data processing instructions + TT16_ADC, + TT16_ADD1, + TT16_ADD2, + TT16_ADD3, + TT16_ADD4LL, + TT16_ADD4LH, + TT16_ADD4H, + TT16_ADD5, + TT16_ADD6, + TT16_ADD7, + TT16_AND, + TT16_ASR1, + TT16_ASR2, + TT16_BIC, + TT16_EOR, + TT16_LSL1, + TT16_LSL2, + TT16_LSR1, + TT16_LSR2, + TT16_MOV1, + TT16_MOV2, + TT16_MOV3LL, + TT16_MOV3LH, + TT16_MOV3H, + TT16_MUL, + TT16_MVN, + TT16_NEG, + TT16_ORR, + TT16_ROR, + TT16_SBC, + TT16_SUB1, + TT16_SUB2, + TT16_SUB3, + TT16_SUB4, + + // compare instructions + TT16_CMN, + TT16_CMP1, + TT16_CMP2, + TT16_CMP3LH, + TT16_CMP3H, + TT16_TST, + + // branch instructions + TT16_B1, + TT16_B2, + TT16_BLX2, + TT16_BX, + TT16_SWI, + TT16_BU, + + // miscellaneous instructions + TT16_CPS, + TT16_CBNZ, + TT16_CBZ, + TT16_SXTH, + TT16_SXTB, + TT16_UXTH, + TT16_UXTB, + TT16_REV, + TT16_REV16, + TT16_REVSH, + TT16_BKPT, + + // load and store instructions + TT16_LDR1, + TT16_LDR2, + TT16_LDR3, + TT16_LDR4, + TT16_LDRB1, + TT16_LDRB2, + TT16_LDRH1, + TT16_LDRH2, + TT16_LDRSB, + TT16_LDRSH, + TT16_STR1, + TT16_STR2, + TT16_STR3, + TT16_STRB1, + TT16_STRB2, + TT16_STRH1, + TT16_STRH2, + + // load and store multiple instructions + TT16_LDMIA, + TT16_POP, + TT16_PUSH, + TT16_STMIA, + + // if-then and hints + TT16_IT, + TT16_NOP, + TT16_YIELD, + TT16_WFE, + TT16_WFI, + TT16_SEV, + + //////////////////////////////////////////////////////////////////////////// + // 32-bit instructions + //////////////////////////////////////////////////////////////////////////// + + // data processing + TT32_SET_ADD (AND), + TT32_SET_ADD (TST), + TT32_SET_ADD (BIC), + TT32_SET_ADD (ORR), + TT32_SET_ADD (MOV), + TT32_SET_ADD (ORN), + TT32_SET_ADD (MVN), + TT32_SET_ADD (EOR), + TT32_SET_ADD (TEQ), + TT32_SET_ADD (ADD), + TT32_SET_ADD (CMN), + TT32_SET_ADD (ADC), + TT32_SET_ADD (SBC), + TT32_SET_ADD (SUB), + TT32_SET_ADD (CMP), + TT32_SET_ADD (RSB), + + // pack halfword + TT32_PKHBT, + TT32_PKHTB, + + // data processing (plain binary immediate) + TT32_ADD_PI, + TT32_ADD_ADR_PI, + TT32_SUB_PI, + TT32_SUB_ADR_PI, + TT32_MOV_PI, + TT32_MOVT_PI, + TT32_SSAT, + TT32_SSAT16, + TT32_SBFX, + TT32_BFI, + TT32_BFC, + TT32_USAT, + TT32_USAT16, + TT32_UBFX, + + // data processing (register) + TT32_LSL, + TT32_LSR, + TT32_ASR, + TT32_ROR, + TT32_SXTAH, + TT32_SXTH, + TT32_UXTAH, + TT32_UXTH, + TT32_SXTAB16, + TT32_SXTB16, + TT32_UXTAB16, + TT32_UXTB16, + TT32_SXTAB, + TT32_SXTB, + TT32_UXTAB, + TT32_UXTB, + + // parallel add/subtract instructions + TT32_SET_PAS (ADD16), + TT32_SET_PAS (ASX ), + TT32_SET_PAS (SAX ), + TT32_SET_PAS (SUB16), + TT32_SET_PAS (ADD8 ), + TT32_SET_PAS (SUB8 ), + + // miscellaneous operation instructions + TT32_QADD, + TT32_QDADD, + TT32_QSUB, + TT32_QDSUB, + TT32_REV, + TT32_REV16, + TT32_RBIT, + TT32_REVSH, + TT32_SEL, + TT32_CLZ, + + // multiply, divide, multiply accumulate and absolute difference instructions + TT32_MLA, + TT32_MUL, + TT32_MLS, + TT32_SDIV, + TT32_UDIV, + TT32_SET_SMLA_XY (SMLA), + TT32_SET_SMLA_XY (SMUL), + TT32_SET_MEDIA_X (SMLAD), + TT32_SET_MEDIA_X (SMUAD), + TT32_SET_SMLAW_Y (SMLAW), + TT32_SET_SMLAW_Y (SMULW), + TT32_SET_MEDIA_X (SMLSD), + TT32_SET_MEDIA_X (SMUSD), + TT32_SET_MEDIA_R (SMMLA), + TT32_SET_MEDIA_R (SMMUL), + TT32_SET_MEDIA_R (SMMLS), + TT32_USAD8, + TT32_USADA8, + TT32_SMLAL, + TT32_SMULL, + TT32_UMAAL, + TT32_UMLAL, + TT32_UMULL, + TT32_SET_SMLA_XY (SMLAL), + TT32_SET_MEDIA_X (SMLALD), + TT32_SET_MEDIA_X (SMLSLD), + + // branch and miscellaneous control instructions + TT32_B1, + TT32_B2, + TT32_BL, + TT32_MSR, + TT32_NOP, + TT32_YIELD, + TT32_WFE, + TT32_WFI, + TT32_SEV, + TT32_DBG, + TT32_MRS, + TT32_UNDEF, + TT32_CLREX, + TT32_DSB, + TT32_DMB, + TT32_ISB, + + // load and store multiple instructions + TT32_STMDB, + TT32_STMIA, + TT32_LDMDB, + TT32_LDMIA, + TT32_POPM, + TT32_PUSHM, + + // dual and exclusive instructions + TT32_LDRD_IMM, + TT32_STRD_IMM, + TT32_LDREX, + TT32_LDREXB, + TT32_LDREXH, + TT32_STREX, + TT32_STREXB, + TT32_STREXH, + TT32_TBB, + TT32_TBH, + + // load and store instructions + TT32_SET_LDR (LDR ), + TT32_SET_LDR (LDRH ), + TT32_SET_LDR (LDRB ), + TT32_SET_LDR (LDRSH), + TT32_SET_LDR (LDRSB), + TT32_SET_LDR (STR ), + TT32_SET_LDR (STRH ), + TT32_SET_LDR (STRB ), + TT32_SET_PLD (PLD ), + TT32_SET_PLD (PLI ), + TT32_UHINTH, + TT32_UHINTB, + + // coprocessor instructions + TT32_CDP, + TT32_CDP2, + TT32_SET_LDC (LDC ), + TT32_SET_LDC (LDC2), + TT32_MCR, + TT32_MCR2, + TT32_MRC, + TT32_MRC2, + TT32_SET_LDC (STC ), + TT32_SET_LDC (STC2), + TT32_MCRR, + TT32_MCRR2, + TT32_MRRC, + TT32_MRRC2, + + // VFP data processing instructions + TT32_VMLA_VFP, + TT32_VMLS_VFP, + TT32_VNMLS_VFP, + TT32_VNMLA_VFP, + TT32_VMUL_VFP, + TT32_VNMUL_VFP, + TT32_VADD_VFP, + TT32_VSUB_VFP, + TT32_VDIV_VFP, + TT32_VFNMA_VFP, + TT32_VFNMS_VFP, + TT32_VFMA_VFP, + TT32_VFMS_VFP, + TT32_VMOVI_VFP, + TT32_VMOVR_VFP, + TT32_VABS_VFP, + TT32_VNEG_VFP, + TT32_VSQRT_VFP, + TT32_VCVTBFH_VFP, + TT32_VCVTTFH_VFP, + TT32_VCVTBHF_VFP, + TT32_VCVTTHF_VFP, + TT32_VCMP_VFP, + TT32_VCMPE_VFP, + TT32_VCMP0_VFP, + TT32_VCMPE0_VFP, + TT32_VCVTFU_VFP, + TT32_VCVTFS_VFP, + TT32_VCVTFXUH_VFP, + TT32_VCVTFXUW_VFP, + TT32_VCVTFXSH_VFP, + TT32_VCVTFXSW_VFP, + TT32_VCVTUF_VFP, + TT32_VCVTRUF_VFP, + TT32_VCVTSF_VFP, + TT32_VCVTRSF_VFP, + TT32_VCVTXFSH_VFP, + TT32_VCVTXFSW_VFP, + TT32_VCVTXFUH_VFP, + TT32_VCVTXFUW_VFP, + + // Extension register load/store instructions + TT32_VFP_DS (VSTMIA), + TT32_VFP_DS (VSTMIAW), + TT32_VFP_DS (VSTR), + TT32_VFP_DS (VSTMDBW), + TT32_VFP_DS (VPUSH), + TT32_VFP_DS (VLDMIA), + TT32_VFP_DS (VLDMIAW), + TT32_VFP_DS (VPOP), + TT32_VFP_DS (VLDR), + TT32_VFP_DS (VLDMDBW), + + // 8, 16 and 32-bit transfer instructions between ARM core regs and extension regs + TT32_VMRS, + TT32_VMSR, + TT32_VMOVRS, + TT32_VMOVSR, + TT32_VMOVZR, + TT32_VMOVRZ, + + // 64-bit transfer instructions between ARM core regs and extension regs + TT32_VMOVRRD, + TT32_VMOVDRR, + TT32_VMOVRRSS, + TT32_VMOVSSRR, + + // KEEP LAST + TT_LAST + +} armThumbType; + + +//////////////////////////////////////////////////////////////////////////////// +// FIELD EXTRACTION MACROS +//////////////////////////////////////////////////////////////////////////////// + +#define OP_R0(_I) WIDTH(4,(_I)>> 0) +#define OP_R12(_I) WIDTH(4,(_I)>>12) +#define OP_R16(_I) WIDTH(4,(_I)>>16) +#define OP_F20(_I) WIDTH(1,(_I)>>20) +#define OP_COND_8(_I) WIDTH(4,(_I)>> 8) +#define OP_COND_22(_I) WIDTH(4,(_I)>>22) +#define OP_COND_28(_I) WIDTH(4,(_I)>>28) +#define OP_IT(_I) WIDTH(8,(_I)>> 0) +#define OP_R3_0(_I) WIDTH(3,(_I)>> 0) +#define OP_R3_3(_I) WIDTH(3,(_I)>> 3) +#define OP_R3_6(_I) WIDTH(3,(_I)>> 6) +#define OP_R3_8(_I) WIDTH(3,(_I)>> 8) +#define OP_R4_0(_I) WIDTH(4,(_I)>> 0) +#define OP_R4_8(_I) WIDTH(4,(_I)>> 8) +#define OP_R4_12(_I) WIDTH(4,(_I)>>12) +#define OP_R4_16(_I) WIDTH(4,(_I)>>16) +#define OP_U_1_5(_I) WIDTH(1,(_I)>> 5) +#define OP_U_1_7(_I) WIDTH(1,(_I)>> 7) +#define OP_U_1_19(_I) WIDTH(1,(_I)>>19) +#define OP_U_1_21(_I) WIDTH(1,(_I)>>21) +#define OP_U_2_4(_I) WIDTH(2,(_I)>> 4) +#define OP_U_2_10(_I) WIDTH(2,(_I)>>10) +#define OP_U_2_20(_I) WIDTH(2,(_I)>>20) +#define OP_U_2_21(_I) WIDTH(2,(_I)>>21) +#define OP_U_3_0(_I) WIDTH(3,(_I)>> 0) +#define OP_U_3_6(_I) WIDTH(3,(_I)>> 6) +#define OP_U_4_0(_I) WIDTH(4,(_I)>> 0) +#define OP_U_4_4(_I) WIDTH(4,(_I)>> 4) +#define OP_U_5_0(_I) WIDTH(5,(_I)>> 0) +#define OP_U_5_0_5(_I) (((WIDTH(4,(_I)>>0))<<1)|WIDTH(1,(_I)>>5)) +#define OP_U_5_6(_I) WIDTH(5,(_I)>> 6) +#define OP_U_7_0(_I) WIDTH(7,(_I)>> 0) +#define OP_U_7_1(_I) WIDTH(7,(_I)>> 1) +#define OP_U_8_0(_I) WIDTH(8,(_I)>> 0) +#define OP_U_8_16_0(_I) (((WIDTH(4,(_I)>>16))<<4) | WIDTH(4,(_I)>>0)) +#define OP_U_9(_I) WIDTH(1,(_I)>> 9) +#define OP_U_12_0(_I) WIDTH(12,(_I)>>0) +#define OP_U_23(_I) WIDTH(1,(_I)>>23) +#define OP_R4_0_H7(_I) (((WIDTH(1,(_I)>>7))<<3)|OP_R3_0(_I)) +#define OP_R4_3_H6(_I) (((WIDTH(1,(_I)>>6))<<3)|OP_R3_3(_I)) +#define OP_TS8(_I) (((Int32)((_I)<<24))>>23) +#define OP_TS11(_I) (((Int32)((_I)<<21))>>20) +#define OP_TU9_7_3(_I) ((WIDTH(1,(_I)>>9)<<6) | (WIDTH(5,(_I)>>3)<<1)) +#define OP_RL_16(_I) WIDTH(8,(_I)>>0) +#define OP_RL_16_LR(_I) (OP_RL_16(_I) | (((_I)&0x100) ? (1<>0) +#define OP_RL_32_SP(_I) (OP_RL_32(_I) & ~(1<> 4) +#define OP_AIF_0(_I) WIDTH(3,(_I)>> 0) +#define OP_MA(_I) WIDTH(1,(_I)>> 8) +#define OP_PI_10(_I) WIDTH(1,(_I)>>10) +#define OP_PI_24(_I) WIDTH(1,(_I)>>24) +#define OP_WB_8(_I) WIDTH(1,(_I)>> 8) +#define OP_WB_21(_I) WIDTH(1,(_I)>>21) +#define OP_CPNUM(_I) WIDTH(4,(_I)>> 8) +#define OP_CPOP1_4_4(_I) WIDTH(4,(_I)>> 4) +#define OP_CPOP1_4_20(_I) WIDTH(4,(_I)>>20) +#define OP_CPOP1_3_21(_I) WIDTH(3,(_I)>>21) +#define OP_CPOP2(_I) WIDTH(3,(_I)>> 5) +#define OP_LL(_I) WIDTH(1,(_I)>>22) +#define OP_V0_5(_I) ((OP_R0(_I) <<1) | WIDTH(1,(_I)>> 5)) +#define OP_V16_7(_I) ((OP_R16(_I)<<1) | WIDTH(1,(_I)>> 7)) +#define OP_V12_22(_I) ((OP_R12(_I)<<1) | WIDTH(1,(_I)>>22)) +#define OP_V5_0(_I) ((WIDTH(1,(_I)>>5) <<4) | OP_R0(_I)) +#define OP_V22_12(_I) ((WIDTH(1,(_I)>>22)<<4) | OP_R12(_I)) +#define OP_V7_16(_I) ((WIDTH(1,(_I)>>7) <<4) | OP_R16(_I)) +#define OP_U(_I) WIDTH(1,(_I)>>23) +#define OP_PI(_I) WIDTH(1,(_I)>>24) + + +//////////////////////////////////////////////////////////////////////////////// +// INSTRUCTION ATTRIBUTE TABLE +//////////////////////////////////////////////////////////////////////////////// + +// +// This defines whether the instruction sets flags +// +typedef enum setFlagsE { + SF_0, // don't set flags + SF_V, // set flags, show in disassembly using "s" suffix + SF_I, // set flags, not shown in instruction disassembly + SF_20_V, // set flags if field 20 set, show in disassembly + SF_IT, // only when not in if-then block +} setFlags; + +// +// This defines whether the instruction sets flags +// +typedef enum condSpecE { + CO_NA, // no condition + CO_8, // condition at 11:8 + CO_22, // condition at 25:22 + CO_28, // condition at 31:28 +} condSpec; + +// +// Define the location of register in an instruction +// +typedef enum rSpecE { + R_NA, // no register + R3_0, // 3-bit register specification at 2:0 + R3_3, // 3-bit register specification at 5:3 + R3_6, // 3-bit register specification at 8:6 + R3_8, // 3-bit register specification at 10:8 + R4_0, // 4-bit register specification at 3:0 + R4_8, // 4-bit register specification at 11:8 + R4_12, // 4-bit register specification at 15:12 + R4_16, // 4-bit register specification at 19:16 + R4_0H7, // 4-bit register specification at 7,2:0 + R4_3H6, // 4-bit register specification at 6,5:3 + R_PC, // register PC + R_SP, // register SP + R_LR, // register LR + V_0_5, // register at 3:0,5 + V_12_22, // register at 15:12,22 + V_16_7, // register at 19:16,7 + V_5_0, // register at 5,3:0 + V_22_12, // register at 22,15:12 + V_7_16, // register at 7,19:16 + V3_0, // register is 3bits wide at 2:0 +} rSpec; + +// +// Define the location of a constant in an instruction +// +typedef enum constSpecE { + CS_NA, // instruction has no constant + CS_U_2_4, // 2-bit unsigned constant at 5:4 + CS_U_2_4x8, // 2-bit unsigned constant at 5:4*8 + CS_U_2_10, // 2-bit unsigned constant at 11:10 + CS_U_3_6, // 3-bit unsigned constant at 8:6 + CS_U_4_4, // 4-bit unsigned constant at 8:5 + CS_U_4_0, // 4-bit unsigned constant at 4:0 + CS_U_5_6, // 5-bit unsigned constant at 10:6 + CS_U_5_6_SZ, // 5-bit unsigned constant at 10:6, scaled by size + CS_U_5_0_5M16, // 5-bit unsigned constant at 3:0, 5. Subtract from 16 to get value + CS_U_5_0_5M32, // 5-bit unsigned constant at 3:0, 5. Subtract from 32 to get value + CS_U_7_0x4, // 7-bit unsigned constant at 6:0*4 + CS_U_8_0, // 8-bit unsigned constant at 7:0 + CS_U_8_0_U, // 8-bit unsigned constant at 7:0, negated if U=0 + CS_U_8_0_SZ, // 8-bit unsigned constant at 7:0, scaled by size + CS_U_8_0x4_U, // 8-bit unsigned constant at 7:0*4, negated if U=0 + CS_U_8_0x4, // 8-bit unsigned constant at 7:0*4 + CS_U_12_0, // 12-bit unsigned constant at 11:0 + CS_U_12_0_U, // 12-bit unsigned constant at 11:0, negated if U=0 + CS_PI5, // 5-bit plain immediate + CS_PI12, // 12-bit plain immediate + CS_PI16, // 16-bit plain immediate + CS_MI // modified immediate +} constSpec; + +// +// This defines target address field in the instruction +// +typedef enum targetSpecE { + TC_NA, // no target + TC_S8, // target PC + s8 field (2-byte aligned) + TC_S11, // target PC + s11 field (2-byte aligned) + TC_S20_T2, // target PC + s20 field (2-byte aligned) + TC_S24_T2, // target PC + s24 field (2-byte aligned) + TC_U9_7_3 // target PC + unsigned constant at 9,7:3*2 +} targetSpec; + +// +// This defines shift in the instruction +// +typedef enum shiftSpecE { + SS_NA, // no shift operation + SS_ASR, // ASR + SS_LSL, // LSL + SS_LSR, // LSR + SS_ROR, // ROR + SS_RRX, // RRX + SS2_4, // shift spec at offset 5:4 + SS2_20, // shift spec at offset 21:20 + SS2_21, // shift spec at offset 22:21 +} shiftSpec; + +// +// This defines whether the instruction specifies post-indexed addressing +// +typedef enum postIndexSpecE { + PI_0, // not post-indexed + PI_1, // post-indexed + PI_10, // post-indexed at position 10 + PI_24, // post-indexed at position 24 +} postIndexSpec; + +// +// This defines whether the instruction specifies writeback +// +typedef enum writebackSpecE { + WB_0, // no writeback + WB_1, // writeback + WB_1_NB, // writeback unless base in register list + WB_8, // writeback at position 8 + WB_21 // writeback at position 21 +} writebackSpec; + +// +// This defines coprocessor opcode field in the instruction +// +typedef enum cpOp1SpecE { + COP_NA, // no opcode1 field + COP_4_4, // 4-bit constant at offset 7:4 + COP_4_20, // 4-bit constant at offset 23:20 + COP_3_21 // 3-bit constant at offset 23:21 +} cpOp1Spec; + +// +// This defines register list field in the instruction +// +typedef enum rListSpecE { + RL_NA, // no register list + RL_16, // register list in 16-bit Thumb opcode + RL_16_LR, // register list in 16-bit Thumb opcode, possibly including LR + RL_16_PC, // register list in 16-bit Thumb opcode, possibly including PC + RL_32_SP, // register list in 32-bit Thumb opcode, excluding SP + RL_32_PCSP, // register list in 32-bit Thumb opcode, excluding PC & SP +} rListSpec; + +// +// This defines increment/decrement specification in the instruction +// +typedef enum incDecSpecE { + ID_NA, // no increment/decrement specification + ID_U_P, // increment/decrement defined by U and P bits + ID_DB, // increment/decrement specification is Decrement Before + ID_IA, // increment/decrement specification is Increment After + ID_U_P_IAI, // increment/decrement defined by U and P bits, IA is implicit in disassembly (UAL only) + ID_U_P_IMP, // increment/decrement defined by U and P bits, IA is always implicit in disassembly + ID_DB_I, // increment/decrement specification is Decrement Before, Implicit in disassembly + ID_IA_I, // increment/decrement specification is Increment After, Implicit in disassembly +} incDecSpec; + +// +// This defines interrupt enable/disable fields in the instruction +// +typedef enum imodSpecE { + IS_NA, // no imod spec + IS_4 // imod spec at bit 4 +} imodSpec; + +// +// This defines interrupt disable bits in the instruction +// +typedef enum aifSpecE { + AIF_NA, // no aif spec + AIF_0 // aif field at 2:0 +} aifSpec; + +// +// This defines width field in the instruction +// +typedef enum widthSpecE { + WS_NA, // no width specification + WS_WIDTH4, // width in field 3:0 + WS_WIDTH4M1, // width in field 3:0+1 + WS_WIDTH5, // width in field 4:0 + WS_WIDTH5M1, // width in field 4:0+1 + WS_MSB // width in field 4:0 - {14:12,7:6} + 1; +} widthSpec; + +// +// This defines u field in the instruction +// +typedef enum uSpecE { + US_1, // u=1 + US_9, // u in field at position 9 + US_23, // u in field at position 23 +} uSpec; + +// +// This defines mask field in MSR instruction +// +typedef enum maskSpecE { + MSRMASK_NA, // no MSR mask spec + MSRMASK_10 // mask field in bits 11:10 +} maskSpec; + +// +// Define a SIMD/VFP modified immediate constant type +// +typedef enum sdfpMISpecE { + SDFP_MI_NA, // instruction has no SIMD/VFP modified immediate constant + SDFP_MI_VFP_S, // single precision VFP modified immediate value +} sdfpMISpec; + +// +// This defines the SIMD scalar index field in the instruction +// +typedef enum indexSpecE { + IDX_NA, // no index specification + IDX_21, // index is 1 bit wide, in bit 21 + IDX_5, // index is 1 bit wide, in bit 5 + IDX_7, // index is 1 bit wide, in bit 7 + IDX_19, // index is 1 bit wide, in bit 19 +} indexSpec; + +// +// This defines the number of regs in a VFP register list +// +typedef enum nregSpecE { + NREG_NA, // no alignment specification + NREG_7_1, // Nregs is 7 bits wide in bits 7:1 + NREG_8_0, // Nregs is 8 bits wide in bits 7:0 +} nregSpec; + +// +// Structure defining characteristics of each opcode type +// +typedef struct opAttrsS { + const char *opcode; // opcode name + const char *format; // format string + armInstructionType type; // equivalent ARM instruction + armArchitecture support:16; // variants on which instruction supported + armISARSupport isar : 8; // ISAR instruction support + setFlags f : 4; // does this opcode set flags? + condSpec cond : 4; // condition field specification + rSpec r1 : 8; // does instruction have r1? + rSpec r2 : 8; // does instruction have r2? + rSpec r3 : 8; // does instruction have r3? + rSpec r4 : 8; // does instruction have r4? + constSpec cs : 8; // location of constant + targetSpec ts : 4; // target specification + shiftSpec ss : 4; // shifter specification + Uns8 sz : 4; // load/store size + Uns8 xs : 4; // sign extend? + Uns8 tl : 4; // translate? + postIndexSpec pi : 4; // instruction specifies post-indexed address? + writebackSpec wb : 4; // instruction specifies writeback? + Uns8 ll : 4; // instruction specifies long load? + Uns8 cpNum : 4; // does instruction have coprocessor number? + cpOp1Spec cpOp1 : 4; // does instruction have coprocessor op 1? + Uns8 cpOp2 : 4; // does instruction have coprocessor op 2? + rListSpec rList : 4; // does instruction have register list? + incDecSpec incDec : 4; // does instruction have increment/decrement? + armUnalignedAction ua45 : 4; // action if unaligned (Control.U=0) + armUnalignedAction ua67 : 4; // action if unaligned (Control.U=1) + Bool ea : 1; // exclusive access? + imodSpec imod : 4; // imod field specification + Bool m : 1; // M field present? + aifSpec aif : 4; // A/I/F fields specification + Bool it : 1; // IT specification present? + widthSpec w : 4; // width specification + uSpec u : 4; // U bit specification + maskSpec mask : 4; // mask specification (MSR instruction) + indexSpec index : 4; // VFP scalar index specification? + nregSpec nregs : 4; // number of regs in VFP register list specification? + sdfpMISpec sdfpMI : 4; // SIMD/floating point modified immediate constant? + armSDFPType dt1 : 8; // SIMD/VFP first data type? + armSDFPType dt2 : 8; // SIMD/VFP second data type? +} opAttrs; + +typedef const struct opAttrsS *opAttrsCP; + +// +// This specifies attributes for each opcode +// +const static opAttrs attrsArray[TT_LAST+1] = { + + //////////////////////////////////////////////////////////////////////////// + // 16-bit instructions + //////////////////////////////////////////////////////////////////////////// + + // data processing instructions + ATTR_SET_16_ADC (ADC, ADC_RT, ARM_VT, ARM_ISAR_NA, "adc" ), + ATTR_SET_16_ADD1 (ADD1, ADD_IMM, ARM_VT, ARM_ISAR_NA, "add" ), + ATTR_SET_16_ADD2 (ADD2, ADD_IT, ARM_VT, ARM_ISAR_NA, "add" ), + ATTR_SET_16_ADD3 (ADD3, ADD_RM, ARM_VT, ARM_ISAR_NA, "add" ), + ATTR_SET_16_ADD4 (ADD4LL, ADD4, ARM_VT2, ARM_ISAR_NA, "add" ), + ATTR_SET_16_ADD4 (ADD4LH, ADD4, ARM_VT, ARM_ISAR_NA, "add" ), + ATTR_SET_16_ADD4 (ADD4H, ADD4, ARM_VT, ARM_ISAR_NA, "add" ), + ATTR_SET_16_ADD5 (ADD5, ADD_ADR, ARM_VT, ARM_ISAR_NA, "add" ), + ATTR_SET_16_ADD6 (ADD6, ADD6, ARM_VT, ARM_ISAR_NA, "add" ), + ATTR_SET_16_ADD7 (ADD7, ADD7, ARM_VT, ARM_ISAR_NA, "add" ), + ATTR_SET_16_ASR1 (ASR1, MOV_RM_SHFT_IMM, ARM_VT, ARM_ISAR_NA, "asr", SS_ASR), + ATTR_SET_16_ASR2 (ASR2, MOV_RM_SHFT_RST, ARM_VT, ARM_ISAR_NA, "asr", SS_ASR), + ATTR_SET_16_ADC (AND, AND_RT, ARM_VT, ARM_ISAR_NA, "and" ), + ATTR_SET_16_ADC (BIC, BIC_RT, ARM_VT, ARM_ISAR_NA, "bic" ), + ATTR_SET_16_ADC (EOR, EOR_RT, ARM_VT, ARM_ISAR_NA, "eor" ), + ATTR_SET_16_ASR1 (LSL1, MOV_RM_SHFT_IMM, ARM_VT, ARM_ISAR_NA, "lsl", SS_LSL), + ATTR_SET_16_ASR2 (LSL2, MOV_RM_SHFT_RST, ARM_VT, ARM_ISAR_NA, "lsl", SS_LSL), + ATTR_SET_16_ASR1 (LSR1, MOV_RM_SHFT_IMM, ARM_VT, ARM_ISAR_NA, "lsr", SS_LSR), + ATTR_SET_16_ASR2 (LSR2, MOV_RM_SHFT_RST, ARM_VT, ARM_ISAR_NA, "lsr", SS_LSR), + ATTR_SET_16_ADD2 (MOV1, MOV_IMM, ARM_VT, ARM_ISAR_NA, "mov" ), + ATTR_SET_16_MOV2 (MOV2, MOV_RM_SHFT_IMM, ARM_VT, ARM_ISAR_NA, "mov" ), + ATTR_SET_16_ADD4 (MOV3LL, MOV3, 6|ARM_VT, ARM_ISAR_MOVLL, "mov" ), + ATTR_SET_16_ADD4 (MOV3LH, MOV3, ARM_VT, ARM_ISAR_NA, "mov" ), + ATTR_SET_16_ADD4 (MOV3H, MOV3, ARM_VT, ARM_ISAR_NA, "mov" ), + ATTR_SET_16_ADC (MUL, MUL_RT, ARM_VT, ARM_ISAR_NA, "mul" ), + ATTR_SET_16_ADC (MVN, MVN_RM, ARM_VT, ARM_ISAR_NA, "mvn" ), + ATTR_SET_16_ADC (NEG, NEG_RM, ARM_VT, ARM_ISAR_NA, "neg" ), + ATTR_SET_16_ADC (ORR, ORR_RT, ARM_VT, ARM_ISAR_NA, "orr" ), + ATTR_SET_16_ASR2 (ROR, MOV_RM_SHFT_RST, ARM_VT, ARM_ISAR_NA, "ror", SS_ROR), + ATTR_SET_16_ADC (SBC, SBC_RT, ARM_VT, ARM_ISAR_NA, "sbc" ), + ATTR_SET_16_ADD1 (SUB1, SUB_IMM, ARM_VT, ARM_ISAR_NA, "sub" ), + ATTR_SET_16_ADD2 (SUB2, SUB_IT, ARM_VT, ARM_ISAR_NA, "sub" ), + ATTR_SET_16_ADD3 (SUB3, SUB_RM, ARM_VT, ARM_ISAR_NA, "sub" ), + ATTR_SET_16_ADD7 (SUB4, SUB4, ARM_VT, ARM_ISAR_NA, "sub" ), + + // compare instructions + ATTR_SET_16_CMP2 (CMN, CMN_RM, ARM_VT, ARM_ISAR_NA, "cmn"), + ATTR_SET_16_CMP1 (CMP1, CMP_IMM, ARM_VT, ARM_ISAR_NA, "cmp"), + ATTR_SET_16_CMP2 (CMP2, CMP_RM, ARM_VT, ARM_ISAR_NA, "cmp"), + ATTR_SET_16_CMP3 (CMP3LH, CMP_RM, ARM_VT, ARM_ISAR_NA, "cmp"), + ATTR_SET_16_CMP3 (CMP3H, CMP_RM, ARM_VT, ARM_ISAR_NA, "cmp"), + ATTR_SET_16_CMP2 (TST, TST_RM, ARM_VT, ARM_ISAR_NA, "tst"), + + // branch instructions + ATTR_SET_16_B1 (B1, B, ARM_VT, ARM_ISAR_NA, "b" ), + ATTR_SET_16_B2 (B2, B, ARM_VT, ARM_ISAR_NA, "b" ), + ATTR_SET_16_BLX2 (BLX2, 5|ARM_VT, ARM_ISAR_BLX, "blx"), + ATTR_SET_16_BLX2 (BX, ARM_VT, ARM_ISAR_BX, "bx" ), + ATTR_SET_16_BKPT (SWI, ARM_VT, ARM_ISAR_SVC, "svc"), + ATTR_SET_16_UNDECODED (BU ), + + // miscellaneous instructions + ATTR_SET_16_CPS (CPS, 6|ARM_VT, ARM_ISAR_MRS_M, "cps" ), + ATTR_SET_16_CBNZ (CBNZ, ARM_VT2, ARM_ISAR_CBZ, "cbnz" ), + ATTR_SET_16_CBNZ (CBZ, ARM_VT2, ARM_ISAR_CBZ, "cbz" ), + ATTR_SET_16_SXTH (SXTH, 6|ARM_VT, ARM_ISAR_SXTB, "sxth" ), + ATTR_SET_16_SXTH (SXTB, 6|ARM_VT, ARM_ISAR_SXTB, "sxtb" ), + ATTR_SET_16_SXTH (UXTH, 6|ARM_VT, ARM_ISAR_SXTB, "uxth" ), + ATTR_SET_16_SXTH (UXTB, 6|ARM_VT, ARM_ISAR_SXTB, "uxtb" ), + ATTR_SET_16_SXTH (REV, 6|ARM_VT, ARM_ISAR_REV, "rev" ), + ATTR_SET_16_SXTH (REV16, 6|ARM_VT, ARM_ISAR_REV, "rev16"), + ATTR_SET_16_SXTH (REVSH, 6|ARM_VT, ARM_ISAR_REV, "revsh"), + ATTR_SET_16_BKPT (BKPT, 5|ARM_VT, ARM_ISAR_BKPT, "bkpt" ), + + // load and store instructions + ATTR_SET_16_LDR1 (LDR1, LDR_IMM, ARM_VT, ARM_ISAR_NA, "ldr", 4, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR2 (LDR2, LDR_RM, ARM_VT, ARM_ISAR_NA, "ldr", 4, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR3 (LDR3, LDR_IMM, ARM_VT, ARM_ISAR_NA, "ldr", 4, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR4 (LDR4, LDR_IMM, ARM_VT, ARM_ISAR_NA, "ldr", 4, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR1 (LDRB1, LDR_IMM, ARM_VT, ARM_ISAR_NA, "ldr", 1, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR2 (LDRB2, LDR_RM, ARM_VT, ARM_ISAR_NA, "ldr", 1, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR1 (LDRH1, LDR_IMM, ARM_VT, ARM_ISAR_NA, "ldr", 2, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR2 (LDRH2, LDR_RM, ARM_VT, ARM_ISAR_NA, "ldr", 2, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR2 (LDRSB, LDR_RM, ARM_VT, ARM_ISAR_NA, "ldr", 1, True, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR2 (LDRSH, LDR_RM, ARM_VT, ARM_ISAR_NA, "ldr", 2, True, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR1 (STR1, STR_IMM, ARM_VT, ARM_ISAR_NA, "str", 4, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR2 (STR2, STR_RM, ARM_VT, ARM_ISAR_NA, "str", 4, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR4 (STR3, STR_IMM, ARM_VT, ARM_ISAR_NA, "str", 4, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR1 (STRB1, STR_IMM, ARM_VT, ARM_ISAR_NA, "str", 1, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR2 (STRB2, STR_RM, ARM_VT, ARM_ISAR_NA, "str", 1, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR1 (STRH1, STR_IMM, ARM_VT, ARM_ISAR_NA, "str", 2, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_16_LDR2 (STRH2, STR_RM, ARM_VT, ARM_ISAR_NA, "str", 2, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + + // load and store multiple instructions + ATTR_SET_16_LDMIA (LDMIA, LDM1, ARM_VT, ARM_ISAR_NA, "ldm", RL_16, ID_IA, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_16_POP (POP, LDM1, ARM_VT, ARM_ISAR_NA, "pop", RL_16_PC, ID_IA_I, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_16_POP (PUSH, STM1, ARM_VT, ARM_ISAR_NA, "push", RL_16_LR, ID_DB_I, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_16_STMIA (STMIA, STM1, ARM_VT, ARM_ISAR_NA, "stm", RL_16, ID_IA, ARM_UA_ALIGN, ARM_UA_DABORT), + + // if-then and hints + ATTR_SET_16_IT (IT, NOP, ARM_VT2, ARM_ISAR_IT, "it" ), + ATTR_SET_16_NOP (NOP, NOP, ARM_VT2, ARM_ISAR_NOP, "nop" ), + ATTR_SET_16_NOP (YIELD, YIELD, ARM_VT2, ARM_ISAR_NOP, "yield"), + ATTR_SET_16_NOP (WFE, WFE, ARM_VT2, ARM_ISAR_NOP, "wfe" ), + ATTR_SET_16_NOP (WFI, WFI, ARM_VT2, ARM_ISAR_NOP, "wfi" ), + ATTR_SET_16_NOP (SEV, SEV, ARM_VT2, ARM_ISAR_NOP, "sev" ), + + //////////////////////////////////////////////////////////////////////////// + // 32-bit instructions + //////////////////////////////////////////////////////////////////////////// + + // data processing + ATTR_SET_32_AND (AND, ARM_VT2, ARM_ISAR_NA, "and"), + ATTR_SET_32_TST (TST, ARM_VT2, ARM_ISAR_NA, "tst"), + ATTR_SET_32_AND (BIC, ARM_VT2, ARM_ISAR_NA, "bic"), + ATTR_SET_32_AND (ORR, ARM_VT2, ARM_ISAR_NA, "orr"), + ATTR_SET_32_MOV (MOV, ARM_VT2, ARM_ISAR_NA, "mov"), + ATTR_SET_32_AND (ORN, ARM_VT2, ARM_ISAR_NA, "orn"), + ATTR_SET_32_MOV (MVN, ARM_VT2, ARM_ISAR_NA, "mvn"), + ATTR_SET_32_AND (EOR, ARM_VT2, ARM_ISAR_NA, "eor"), + ATTR_SET_32_TST (TEQ, ARM_VT2, ARM_ISAR_NA, "teq"), + ATTR_SET_32_AND (ADD, ARM_VT2, ARM_ISAR_NA, "add"), + ATTR_SET_32_TST (CMN, ARM_VT2, ARM_ISAR_NA, "cmn"), + ATTR_SET_32_AND (ADC, ARM_VT2, ARM_ISAR_NA, "adc"), + ATTR_SET_32_AND (SBC, ARM_VT2, ARM_ISAR_NA, "sbc"), + ATTR_SET_32_AND (SUB, ARM_VT2, ARM_ISAR_NA, "sub"), + ATTR_SET_32_TST (CMP, ARM_VT2, ARM_ISAR_NA, "cmp"), + ATTR_SET_32_AND (RSB, ARM_VT2, ARM_ISAR_NA, "rsb"), + + // pack halfword + ATTR_SET_32_PKHBT (PKHBT, ARM_VT2, ARM_ISAR_PKHBT, "pkhbt"), + ATTR_SET_32_PKHBT (PKHTB, ARM_VT2, ARM_ISAR_PKHBT, "pkhtb"), + + // data processing (plain binary immediate) + ATTR_SET_32_ADD_PI (ADD_PI, ADD_IMM, ARM_VT2, ARM_ISAR_MOVT, "addw"), + ATTR_SET_32_ADD_PI (ADD_ADR_PI, ADD_ADR, ARM_VT2, ARM_ISAR_MOVT, "addw"), + ATTR_SET_32_ADD_PI (SUB_PI, SUB_IMM, ARM_VT2, ARM_ISAR_MOVT, "subw"), + ATTR_SET_32_ADD_PI (SUB_ADR_PI, SUB_ADR, ARM_VT2, ARM_ISAR_MOVT, "subw"), + ATTR_SET_32_MOV_PI (MOV_PI, MOVW, ARM_VT2, ARM_ISAR_MOVT, "movw"), + ATTR_SET_32_MOV_PI (MOVT_PI, MOVT, ARM_VT2, ARM_ISAR_MOVT, "movt"), + ATTR_SET_32_SSAT (SSAT, SSAT, ARM_VT2, ARM_ISAR_SSAT, "ssat"), + ATTR_SET_32_SSAT16 (SSAT16, SSAT16, ARM_VT2, ARM_ISAR_PKHBT, "ssat16"), + ATTR_SET_32_SBFX (SBFX, SBFX, ARM_VT2, ARM_ISAR_BFC, "sbfx"), + ATTR_SET_32_BFI (BFI, BFI, ARM_VT2, ARM_ISAR_BFC, "bfi" ), + ATTR_SET_32_BFC (BFC, BFC, ARM_VT2, ARM_ISAR_BFC, "bfc" ), + ATTR_SET_32_USAT (USAT, USAT, ARM_VT2, ARM_ISAR_SSAT, "usat"), + ATTR_SET_32_USAT16 (USAT16, USAT16, ARM_VT2, ARM_ISAR_PKHBT, "usat16"), + ATTR_SET_32_SBFX (UBFX, UBFX, ARM_VT2, ARM_ISAR_BFC, "ubfx"), + + // data processing (register) + ATTR_SET_32_LSL (LSL, MOV_RM_SHFT_RS, ARM_VT2, ARM_ISAR_NA, "lsl" ), + ATTR_SET_32_LSL (LSR, MOV_RM_SHFT_RS, ARM_VT2, ARM_ISAR_NA, "lsr" ), + ATTR_SET_32_LSL (ASR, MOV_RM_SHFT_RS, ARM_VT2, ARM_ISAR_NA, "asr" ), + ATTR_SET_32_LSL (ROR, MOV_RM_SHFT_RS, ARM_VT2, ARM_ISAR_NA, "ror" ), + ATTR_SET_32_SXTAH (SXTAH, ARM_VT2, ARM_ISAR_SXTAB, "sxtah" ), + ATTR_SET_32_SXTH (SXTH, ARM_VT2, ARM_ISAR_SXTB, "sxth" ), + ATTR_SET_32_SXTAH (UXTAH, ARM_VT2, ARM_ISAR_SXTAB, "uxtah" ), + ATTR_SET_32_SXTH (UXTH, ARM_VT2, ARM_ISAR_SXTB, "uxth" ), + ATTR_SET_32_SXTAH (SXTAB16, ARM_VT2, ARM_ISAR_SXTB16, "sxtab16"), + ATTR_SET_32_SXTH (SXTB16, ARM_VT2, ARM_ISAR_SXTB16, "sxtb16" ), + ATTR_SET_32_SXTAH (UXTAB16, ARM_VT2, ARM_ISAR_SXTB16, "uxtab16"), + ATTR_SET_32_SXTH (UXTB16, ARM_VT2, ARM_ISAR_SXTB16, "uxtb16" ), + ATTR_SET_32_SXTAH (SXTAB, ARM_VT2, ARM_ISAR_SXTAB, "sxtab" ), + ATTR_SET_32_SXTH (SXTB, ARM_VT2, ARM_ISAR_SXTB, "sxtb" ), + ATTR_SET_32_SXTAH (UXTAB, ARM_VT2, ARM_ISAR_SXTAB, "uxtab" ), + ATTR_SET_32_SXTH (UXTB, ARM_VT2, ARM_ISAR_SXTB, "uxtb" ), + + // parallel add/subtract instructions + ATTR_SET_32_PAS (ADD16, ARM_VT2, ARM_ISAR_PKHBT, "add16"), + ATTR_SET_32_PAS (ASX, ARM_VT2, ARM_ISAR_PKHBT, "asx" ), + ATTR_SET_32_PAS (SAX, ARM_VT2, ARM_ISAR_PKHBT, "sax" ), + ATTR_SET_32_PAS (SUB16, ARM_VT2, ARM_ISAR_PKHBT, "sub16"), + ATTR_SET_32_PAS (ADD8, ARM_VT2, ARM_ISAR_PKHBT, "add8" ), + ATTR_SET_32_PAS (SUB8, ARM_VT2, ARM_ISAR_PKHBT, "sub8" ), + + // miscellaneous operation instructions + ATTR_SET_32_QADD (QADD, ARM_VT2, ARM_ISAR_QADD, "qadd" ), + ATTR_SET_32_QADD (QDADD, ARM_VT2, ARM_ISAR_QADD, "qdadd"), + ATTR_SET_32_QADD (QSUB, ARM_VT2, ARM_ISAR_QADD, "qsub" ), + ATTR_SET_32_QADD (QDSUB, ARM_VT2, ARM_ISAR_QADD, "qdsub"), + ATTR_SET_32_CLZ (REV, ARM_VT2, ARM_ISAR_REV, "rev" ), + ATTR_SET_32_CLZ (REV16, ARM_VT2, ARM_ISAR_REV, "rev16"), + ATTR_SET_32_CLZ (RBIT, ARM_VT2, ARM_ISAR_RBIT, "rbit" ), + ATTR_SET_32_CLZ (REVSH, ARM_VT2, ARM_ISAR_REV, "revsh"), + ATTR_SET_32_SEL (SEL, ARM_VT2, ARM_ISAR_PKHBT, "sel" ), + ATTR_SET_32_CLZ (CLZ, ARM_VT2, ARM_ISAR_CLZ, "clz" ), + + // multiply, multiply accumulate and absolute difference instructions + ATTR_SET_32_MLA (MLA, ARM_VT2, ARM_ISAR_MLA, "mla" ), + ATTR_SET_32_MUL (MUL, ARM_VT2, ARM_ISAR_NA, "mul" ), + ATTR_SET_32_MLA (MLS, ARM_VT2, ARM_ISAR_MLS, "mls" ), + ATTR_SET_32_MUL (SDIV, 7, ARM_ISAR_DIV, "sdiv" ), + ATTR_SET_32_MUL (UDIV, 7, ARM_ISAR_DIV, "udiv" ), + ATTR_SET_32_SMLA_XY (SMLA, ARM_VT2, ARM_ISAR_SMLABB, "smla" ), + ATTR_SET_32_SMUL_XY (SMUL, ARM_VT2, ARM_ISAR_SMLABB, "smul" ), + ATTR_SET_32_SMLAD (SMLAD, ARM_VT2, ARM_ISAR_SMLAD, "smlad" ), + ATTR_SET_32_SMUAD (SMUAD, ARM_VT2, ARM_ISAR_SMLAD, "smuad" ), + ATTR_SET_32_SMLAW (SMLAW, ARM_VT2, ARM_ISAR_SMLABB, "smlaw" ), + ATTR_SET_32_SMULW (SMULW, ARM_VT2, ARM_ISAR_SMLABB, "smulw" ), + ATTR_SET_32_SMLAD (SMLSD, ARM_VT2, ARM_ISAR_SMLAD, "smlsd" ), + ATTR_SET_32_SMUAD (SMUSD, ARM_VT2, ARM_ISAR_SMLAD, "smusd" ), + ATTR_SET_32_SMMLA (SMMLA, ARM_VT2, ARM_ISAR_SMLAD, "smmla" ), + ATTR_SET_32_SMMUL (SMMUL, ARM_VT2, ARM_ISAR_SMLAD, "smmul" ), + ATTR_SET_32_SMMLA (SMMLS, ARM_VT2, ARM_ISAR_SMLAD, "smmls" ), + ATTR_SET_32_MUL (USAD8, ARM_VT2, ARM_ISAR_PKHBT, "usad8" ), + ATTR_SET_32_MLA (USADA8, ARM_VT2, ARM_ISAR_PKHBT, "usada8"), + ATTR_SET_32_SMLAL (SMLAL, ARM_VT2, ARM_ISAR_SMULL, "smlal" ), + ATTR_SET_32_SMLAL (SMULL, ARM_VT2, ARM_ISAR_SMULL, "smull" ), + ATTR_SET_32_SMLAL (UMAAL, ARM_VT2, ARM_ISAR_UMAAL, "umaal" ), + ATTR_SET_32_SMLAL (UMLAL, ARM_VT2, ARM_ISAR_UMULL, "umlal" ), + ATTR_SET_32_SMLAL (UMULL, ARM_VT2, ARM_ISAR_UMULL, "umull" ), + ATTR_SET_32_SMLAL_XY (SMLAL, ARM_VT2, ARM_ISAR_SMLABB, "smlal" ), + ATTR_SET_32_SMLALD (SMLALD, ARM_VT2, ARM_ISAR_SMLAD, "smlald"), + ATTR_SET_32_SMLALD (SMLSLD, ARM_VT2, ARM_ISAR_SMLAD, "smlsld"), + + // branch and miscellaneous control instructions + ATTR_SET_32_B1 (B1, B, ARM_VT2, ARM_ISAR_NA, "b" ), + ATTR_SET_32_BL (B2, B, ARM_VT2, ARM_ISAR_NA, "b" ), + ATTR_SET_32_BL (BL, BL, ARM_VT, ARM_ISAR_NA, "bl" ), + ATTR_SET_32_MSR (MSR, 7, ARM_ISAR_MRS_M, "msr" ), + ATTR_SET_32_NOP (NOP, ARM_VT2, ARM_ISAR_NOP, "nop" ), + ATTR_SET_32_NOP (YIELD, ARM_VT2, ARM_ISAR_NOP, "yield"), + ATTR_SET_32_NOP (WFE, ARM_VT2, ARM_ISAR_NOP, "wfe" ), + ATTR_SET_32_NOP (WFI, ARM_VT2, ARM_ISAR_NOP, "wfi" ), + ATTR_SET_32_NOP (SEV, ARM_VT2, ARM_ISAR_NOP, "sev" ), + ATTR_SET_32_DBG (DBG, ARM_VT2, ARM_ISAR_NOP, "dbg" ), + ATTR_SET_32_MRS (MRS, 7, ARM_ISAR_MRS_M, "mrs" ), + ATTR_SET_32_UND (UNDEF, ARM_VT2, ARM_ISAR_NA ), + ATTR_SET_32_NOP (CLREX, 7, ARM_ISAR_CLREX, "clrex"), + ATTR_SET_32_DSB (DSB, 7, ARM_ISAR_DMB, "dsb" ), + ATTR_SET_32_DSB (DMB, 7, ARM_ISAR_DMB, "dmb" ), + ATTR_SET_32_DSB (ISB, 7, ARM_ISAR_DMB, "isb" ), + + // load and store multiple instructions + ATTR_SET_32_LDM (STMDB, STM1, ARM_VT2, ARM_ISAR_NA, "stm", ID_DB, RL_32_PCSP, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_LDM (STMIA, STM1, ARM_VT2, ARM_ISAR_NA, "stm", ID_IA, RL_32_PCSP, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_LDM (LDMDB, LDM1, ARM_VT2, ARM_ISAR_NA, "ldm", ID_DB, RL_32_SP, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_LDM (LDMIA, LDM1, ARM_VT2, ARM_ISAR_NA, "ldm", ID_IA, RL_32_SP, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_POPM (POPM, LDM1, ARM_VT2, ARM_ISAR_NA, "pop", ID_IA_I, RL_32_SP, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_POPM (PUSHM, STM1, ARM_VT2, ARM_ISAR_NA, "push", ID_DB_I, RL_32_PCSP, ARM_UA_ALIGN, ARM_UA_DABORT), + + // dual and exclusive instructions + ATTR_SET_32_LDRD_IMM (LDRD_IMM, ARM_VT2, ARM_ISAR_LDRD, "ldr", 8, False, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_LDRD_IMM (STRD_IMM, ARM_VT2, ARM_ISAR_LDRD, "str", 8, False, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_LDREX (LDREX, ARM_VT2, ARM_ISAR_LDREX, "ldr", 4, False, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_LDREXB (LDREXB, 7, ARM_ISAR_CLREX, "ldr", 1, False, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_LDREXB (LDREXH, 7, ARM_ISAR_CLREX, "ldr", 2, False, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_STREX (STREX, ARM_VT2, ARM_ISAR_LDREX, "str", 4, False, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_STREXB (STREXB, 7, ARM_ISAR_CLREX, "str", 1, False, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_STREXB (STREXH, 7, ARM_ISAR_CLREX, "str", 2, False, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_TBB (TBB, TB, ARM_VT2, ARM_ISAR_TBB, "tb", 1, False, ARM_UA_ALIGN, ARM_UA_DABORT), + ATTR_SET_32_TBB (TBH, TB, ARM_VT2, ARM_ISAR_TBB, "tb", 2, False, ARM_UA_ALIGN, ARM_UA_DABORT), + + // load instructions + ATTR_SET_32_LDR (LDR, LDR, ARM_VT2, ARM_ISAR_LDRBT, "ldr", 4, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_32_LDR (LDRH, LDR, ARM_VT2, ARM_ISAR_LDRHT, "ldr", 2, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_32_LDR (LDRB, LDR, ARM_VT2, ARM_ISAR_LDRBT, "ldr", 1, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_32_LDR (LDRSH, LDR, ARM_VT2, ARM_ISAR_LDRHT, "ldr", 2, True, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_32_LDR (LDRSB, LDR, ARM_VT2, ARM_ISAR_LDRHT, "ldr", 1, True, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_32_LDR (STR, STR, ARM_VT2, ARM_ISAR_LDRBT, "str", 4, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_32_LDR (STRH, STR, ARM_VT2, ARM_ISAR_LDRHT, "str", 2, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_32_LDR (STRB, STR, ARM_VT2, ARM_ISAR_LDRBT, "str", 1, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_32_PLD (PLD, PLD, ARM_VT2, ARM_ISAR_PLD, "pld", 4, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_32_PLD (PLI, PLI, ARM_VT2, ARM_ISAR_PLI, "pli", 4, False, ARM_UA_ALIGN, ARM_UA_UNALIGNED), + ATTR_SET_32_UHINTH (UHINTH, NOP, ARM_VT2, ARM_ISAR_NA, "nop" ), + ATTR_SET_32_UHINTH (UHINTB, NOP, ARM_VT2, ARM_ISAR_NA, "nop" ), + + // coprocessor instructions + ATTR_SET_32_CDP (CDP, ARM_VT2, ARM_ISAR_NA, "cdp" ), + ATTR_SET_32_CDP2 (CDP2, ARM_VT2, ARM_ISAR_NA, "cdp2" ), + ATTR_SET_32_LDC (LDC, ARM_VT2, ARM_ISAR_NA, "ldc" ), + ATTR_SET_32_LDC2 (LDC2, ARM_VT2, ARM_ISAR_NA, "ldc2" ), + ATTR_SET_32_MCR (MCR, ARM_VT2, ARM_ISAR_NA, "mcr" ), + ATTR_SET_32_MCR2 (MCR2, ARM_VT2, ARM_ISAR_NA, "mcr2" ), + ATTR_SET_32_MRC (MRC, ARM_VT2, ARM_ISAR_NA, "mrc" ), + ATTR_SET_32_MRC2 (MRC2, ARM_VT2, ARM_ISAR_NA, "mrc2" ), + ATTR_SET_32_LDC (STC, ARM_VT2, ARM_ISAR_NA, "stc" ), + ATTR_SET_32_LDC2 (STC2, ARM_VT2, ARM_ISAR_NA, "stc2" ), + ATTR_SET_32_MCRR (MCRR, ARM_VT2, ARM_ISAR_NA, "mcrr" ), + ATTR_SET_32_MCRR2 (MCRR2, ARM_VT2, ARM_ISAR_NA, "mcrr2"), + ATTR_SET_32_MCRR (MRRC, ARM_VT2, ARM_ISAR_NA, "mrrc" ), + ATTR_SET_32_MCRR2 (MRRC2, ARM_VT2, ARM_ISAR_NA, "mrrc2"), + + //////////////////////////////////////////////////////////////////////////// + // VFP Instructions (single precision only) + //////////////////////////////////////////////////////////////////////////// + + // VFP data processing instructions + ATTR_SET_32_VFP_RRR (VMLA_VFP, 7, ARM_ISAR_VFPV2, "vmla"), + ATTR_SET_32_VFP_RRR (VMLS_VFP, 7, ARM_ISAR_VFPV2, "vmls"), + ATTR_SET_32_VFP_RRR (VNMLS_VFP, 7, ARM_ISAR_VFPV2, "vnmls"), + ATTR_SET_32_VFP_RRR (VNMLA_VFP, 7, ARM_ISAR_VFPV2, "vnmla"), + ATTR_SET_32_VFP_RRR (VMUL_VFP, 7, ARM_ISAR_VFPV2, "vmul"), + ATTR_SET_32_VFP_RRR (VNMUL_VFP, 7, ARM_ISAR_VFPV2, "vnmul"), + ATTR_SET_32_VFP_RRR (VADD_VFP, 7, ARM_ISAR_VFPV2, "vadd"), + ATTR_SET_32_VFP_RRR (VSUB_VFP, 7, ARM_ISAR_VFPV2, "vsub"), + ATTR_SET_32_VFP_RRR (VDIV_VFP, 7, ARM_ISAR_VFPDIV, "vdiv"), + ATTR_SET_32_VFP_RRR (VFNMA_VFP, 7, ARM_ISAR_VFPFMAC, "vfnma"), + ATTR_SET_32_VFP_RRR (VFNMS_VFP, 7, ARM_ISAR_VFPFMAC, "vfnms"), + ATTR_SET_32_VFP_RRR (VFMA_VFP, 7, ARM_ISAR_VFPFMAC, "vfma"), + ATTR_SET_32_VFP_RRR (VFMS_VFP, 7, ARM_ISAR_VFPFMAC, "vfms"), + ATTR_SET_32_VFP_RI (VMOVI_VFP, 7, ARM_ISAR_VFPV3, "vmov"), + ATTR_SET_32_VFP_RR (VMOVR_VFP, 7, ARM_ISAR_VFPV2, "vmov"), + ATTR_SET_32_VFP_RR (VABS_VFP, 7, ARM_ISAR_VFPV2, "vabs"), + ATTR_SET_32_VFP_RR (VNEG_VFP, 7, ARM_ISAR_VFPV2, "vneg"), + ATTR_SET_32_VFP_RR (VSQRT_VFP, 7, ARM_ISAR_VFPSQRT, "vsqrt"), + ATTR_SET_32_VFP_RR_S_S2 (VCVTBFH_VFP, 7, ARM_ISAR_VFPHP, "vcvtb", 32, 16), + ATTR_SET_32_VFP_RR_S_S2 (VCVTTFH_VFP, 7, ARM_ISAR_VFPHP, "vcvtt", 32, 16), + ATTR_SET_32_VFP_RR_S_S2 (VCVTBHF_VFP, 7, ARM_ISAR_VFPHP, "vcvtb", 16, 32), + ATTR_SET_32_VFP_RR_S_S2 (VCVTTHF_VFP, 7, ARM_ISAR_VFPHP, "vcvtt", 16, 32), + ATTR_SET_32_VFP_RR (VCMP_VFP, 7, ARM_ISAR_VFPV2, "vcmp"), + ATTR_SET_32_VFP_RR (VCMPE_VFP, 7, ARM_ISAR_VFPV2, "vcmpe"), + ATTR_SET_32_VFP_R0 (VCMP0_VFP, 7, ARM_ISAR_VFPV2, "vcmp"), + ATTR_SET_32_VFP_R0 (VCMPE0_VFP, 7, ARM_ISAR_VFPV2, "vcmpe"), + ATTR_SET_32_VFP_LS_T (VCVTFU_VFP, 7, ARM_ISAR_VFPCVT2, "vcvt", _U), + ATTR_SET_32_VFP_LS_T (VCVTFS_VFP, 7, ARM_ISAR_VFPCVT2, "vcvt", _S), + ATTR_SET_32_VFP_RI_T2C (VCVTFXUH_VFP, 7, ARM_ISAR_VFPCVT3, "vcvt", _F32, _U16, 16), + ATTR_SET_32_VFP_RI_T2C (VCVTFXUW_VFP, 7, ARM_ISAR_VFPCVT3, "vcvt", _F32, _U32, 32), + ATTR_SET_32_VFP_RI_T2C (VCVTFXSH_VFP, 7, ARM_ISAR_VFPCVT3, "vcvt", _F32, _S16, 16), + ATTR_SET_32_VFP_RI_T2C (VCVTFXSW_VFP, 7, ARM_ISAR_VFPCVT3, "vcvt", _F32, _S32, 32), + ATTR_SET_32_VFP_NS_T (VCVTRUF_VFP, 7, ARM_ISAR_VFPCVT2, "vcvtr", _U), + ATTR_SET_32_VFP_NS_T (VCVTUF_VFP, 7, ARM_ISAR_VFPCVT2, "vcvt", _U), + ATTR_SET_32_VFP_NS_T (VCVTRSF_VFP, 7, ARM_ISAR_VFPCVT2, "vcvtr", _S), + ATTR_SET_32_VFP_NS_T (VCVTSF_VFP, 7, ARM_ISAR_VFPCVT2, "vcvt", _S), + ATTR_SET_32_VFP_RI_T2C (VCVTXFSH_VFP, 7, ARM_ISAR_VFPCVT3, "vcvt", _S16, _F32, 16), + ATTR_SET_32_VFP_RI_T2C (VCVTXFSW_VFP, 7, ARM_ISAR_VFPCVT3, "vcvt", _S32, _F32, 32), + ATTR_SET_32_VFP_RI_T2C (VCVTXFUH_VFP, 7, ARM_ISAR_VFPCVT3, "vcvt", _U16, _F32, 16), + ATTR_SET_32_VFP_RI_T2C (VCVTXFUW_VFP, 7, ARM_ISAR_VFPCVT3, "vcvt", _U32, _F32, 32), + + // Extension register load/store instructions + ATTR_SET_32_SDFP_LDSTM (VSTMIA, 7, ARM_ISAR_VMRS, "vstm"), + ATTR_SET_32_SDFP_LDSTM (VSTMIAW, 7, ARM_ISAR_VMRS, "vstm"), + ATTR_SET_32_SDFP_LDST (VSTR, 7, ARM_ISAR_VMRS, "vstr"), + ATTR_SET_32_SDFP_LDSTM (VSTMDBW, 7, ARM_ISAR_VMRS, "vstm"), + ATTR_SET_32_SDFP_PUSH (VPUSH, 7, ARM_ISAR_VMRS, "vpush"), + ATTR_SET_32_SDFP_LDSTM (VLDMIA, 7, ARM_ISAR_VMRS, "vldm"), + ATTR_SET_32_SDFP_LDSTM (VLDMIAW, 7, ARM_ISAR_VMRS, "vldm"), + ATTR_SET_32_SDFP_PUSH (VPOP, 7, ARM_ISAR_VMRS, "vpop"), + ATTR_SET_32_SDFP_LDST (VLDR, 7, ARM_ISAR_VMRS, "vldr"), + ATTR_SET_32_SDFP_LDSTM (VLDMDBW, 7, ARM_ISAR_VMRS, "vldm"), + + // 8, 16 and 32-bit transfer instructions between ARM core regs and extension regs + ATTR_SET_32_VMRS (VMRS, 7, ARM_ISAR_VMRS, "vmrs"), + ATTR_SET_32_VMSR (VMSR, 7, ARM_ISAR_VMRS, "vmsr"), + ATTR_SET_32_VMOVRS (VMOVRS, 7, ARM_ISAR_VMRS, "vmov"), + ATTR_SET_32_VMOVSR (VMOVSR, 7, ARM_ISAR_VMRS, "vmov"), + ATTR_SET_32_VMOVZR (VMOVZR, 7, ARM_ISAR_VMRS, "vmov"), + ATTR_SET_32_VMOVRZ (VMOVRZ, 7, ARM_ISAR_VMRS, "vmov"), + + // 64-bit transfer instructions between ARM core regs and extension regs + ATTR_SET_32_VMOVRRD (VMOVRRD, 7, ARM_ISAR_VMRS, "vmov"), + ATTR_SET_32_VMOVDRR (VMOVDRR, 7, ARM_ISAR_VMRS, "vmov"), + ATTR_SET_32_VMOVRRSS (VMOVRRSS, 7, ARM_ISAR_VMRS, "vmov"), + ATTR_SET_32_VMOVSSRR (VMOVSSRR, 7, ARM_ISAR_VMRS, "vmov"), + + //////////////////////////////////////////////////////////////////////////// + // terminator + //////////////////////////////////////////////////////////////////////////// + + // dummy entry for undecoded instruction + [TT_LAST] = {type:ARM_IT_LAST} +}; + + +//////////////////////////////////////////////////////////////////////////////// +// GENERIC DECODE TYPES +//////////////////////////////////////////////////////////////////////////////// + +// +// This type specifies the pattern for a decode table entry +// +typedef struct decodeEntryS { + armThumbType type :16; + Uns32 priority:16; + const char *name; + const char *pattern; +} decodeEntry; + + +//////////////////////////////////////////////////////////////////////////////// +// 16-BIT INSTRUCTION DECODE TABLE +//////////////////////////////////////////////////////////////////////////////// + +// +// Create the 16-bit Thumb instruction decode table +// +static vmidDecodeTableP createDecodeTableThumb16(void) { + + const static decodeEntry entries[] = { + + // data processing instructions + DECODE_SET_16_ADC (ADC, "010000|0101"), + DECODE_SET_16_ADD1 (ADD1, "0001110"), + DECODE_SET_16_ADD2 (ADD2, "00110"), + DECODE_SET_16_ADD1 (ADD3, "0001100"), + DECODE_SET_16_ADD4 (ADD4LL, "01000100|0|0"), + DECODE_SET_16_ADD4 (ADD4LH, "01000100|0|1"), + DECODE_SET_16_ADD4 (ADD4H, "01000100|1|."), + DECODE_SET_16_ADD2 (ADD5, "10100"), + DECODE_SET_16_ADD2 (ADD6, "10101"), + DECODE_SET_16_ADD7 (ADD7, "101100000"), + DECODE_SET_16_ADC (AND, "010000|0000"), + DECODE_SET_16_ASR1 (ASR1, "00010"), + DECODE_SET_16_ADC (ASR2, "010000|0100"), + DECODE_SET_16_ADC (BIC, "010000|1110"), + DECODE_SET_16_ADC (EOR, "010000|0001"), + DECODE_SET_16_ASR1 (LSL1, "00000"), + DECODE_SET_16_ADC (LSL2, "010000|0010"), + DECODE_SET_16_ASR1 (LSR1, "00001"), + DECODE_SET_16_ADC (LSR2, "010000|0011"), + DECODE_SET_16_ADD2 (MOV1, "00100"), + DECODE_SET_16_ADC (MOV2, "000000|0000"), + DECODE_SET_16_ADD4 (MOV3LL, "01000110|0|0"), + DECODE_SET_16_ADD4 (MOV3LH, "01000110|0|1"), + DECODE_SET_16_ADD4 (MOV3H, "01000110|1|."), + DECODE_SET_16_ADC (MVN, "010000|1111"), + DECODE_SET_16_ADC (NEG, "010000|1001"), + DECODE_SET_16_ADC (ORR, "010000|1100"), + DECODE_SET_16_ADC (ROR, "010000|0111"), + DECODE_SET_16_ADC (SBC, "010000|0110"), + DECODE_SET_16_ADD1 (SUB1, "0001111"), + DECODE_SET_16_ADD2 (SUB2, "00111"), + DECODE_SET_16_ADD1 (SUB3, "0001101"), + DECODE_SET_16_ADD7 (SUB4, "101100001"), + + // multiply instructions + DECODE_SET_16_ADC (MUL, "010000|1101"), + + // compare instructions + DECODE_SET_16_ADC (CMN, "010000|1011"), + DECODE_SET_16_ADD2 (CMP1, "00101"), + DECODE_SET_16_ADC (CMP2, "010000|1010"), + DECODE_SET_16_ADD4 (CMP3LH, "01000101|0|1"), + DECODE_SET_16_ADD4 (CMP3H, "01000101|1|."), + DECODE_SET_16_ADC (TST, "010000|1000"), + + // branch instructions + DECODE_SET_16_B1 (B1, "...."), + DECODE_SET_16_B2 (B2, "00"), + DECODE_SET_16_BLX2 (BLX2, "010001111"), + DECODE_SET_16_BLX2 (BX, "010001110"), + DECODE_SET_16_SWI (SWI, "1111"), + DECODE_SET_16_SWI (BU, "1110"), + + // miscellaneous instructions + DECODE_SET_16_BKPT (CPS, "0110011"), + DECODE_SET_16_BKPT (CBNZ, "10.1..."), + DECODE_SET_16_BKPT (CBZ, "00.1..."), + DECODE_SET_16_BKPT (SXTH, "001000."), + DECODE_SET_16_BKPT (SXTB, "001001."), + DECODE_SET_16_BKPT (UXTH, "001010."), + DECODE_SET_16_BKPT (UXTB, "001011."), + DECODE_SET_16_BKPT (REV, "101000."), + DECODE_SET_16_BKPT (REV16, "101001."), + DECODE_SET_16_BKPT (REVSH, "101011."), + DECODE_SET_16_BKPT (BKPT, "1110..."), + + // load and store instructions + DECODE_SET_16_ASR1 (LDR1, "01101"), + DECODE_SET_16_ADD1 (LDR2, "0101100"), + DECODE_SET_16_ADD2 (LDR3, "01001"), + DECODE_SET_16_ADD2 (LDR4, "10011"), + DECODE_SET_16_ASR1 (LDRB1, "01111"), + DECODE_SET_16_ADD1 (LDRB2, "0101110"), + DECODE_SET_16_ASR1 (LDRH1, "10001"), + DECODE_SET_16_ADD1 (LDRH2, "0101101"), + DECODE_SET_16_ADD1 (LDRSB, "0101011"), + DECODE_SET_16_ADD1 (LDRSH, "0101111"), + DECODE_SET_16_ASR1 (STR1, "01100"), + DECODE_SET_16_ADD1 (STR2, "0101000"), + DECODE_SET_16_ADD2 (STR3, "10010"), + DECODE_SET_16_ASR1 (STRB1, "01110"), + DECODE_SET_16_ADD1 (STRB2, "0101010"), + DECODE_SET_16_ASR1 (STRH1, "10000"), + DECODE_SET_16_ADD1 (STRH2, "0101001"), + + // load and store multiple instructions + DECODE_SET_16_ADD2 (LDMIA, "11001"), + DECODE_SET_16_POP (POP, "1011110"), + DECODE_SET_16_POP (PUSH, "1011010"), + DECODE_SET_16_ADD2 (STMIA, "11000"), + + // if-then and hints + DECODE_SET_16_IT (IT, "....", "...."), + DECODE_SET_16_HINT1 (NOP, "....", "0000"), + DECODE_SET_16_HINT2 (YIELD, "0001", "0000"), + DECODE_SET_16_HINT2 (WFE, "0010", "0000"), + DECODE_SET_16_HINT2 (WFI, "0011", "0000"), + DECODE_SET_16_HINT2 (SEV, "0100", "0000"), + + // terminator + {0} + }; + + // create the table + vmidDecodeTableP table = vmidNewDecodeTable(16, TT_LAST); + const decodeEntry *entry; + + // add all entries to the decode table + for(entry=entries; entry->pattern; entry++) { + vmidNewEntryFmtBin( + table, + entry->name, + entry->type, + entry->pattern, + entry->priority + ); + } + + return table; +} + +// +// Create the 32-bit Thumb instruction decode table +// +static vmidDecodeTableP createDecodeTableThumb32(void) { + + const static decodeEntry entries[] = { + + // data processing + DECODE_SET_32_AND (AND, "0000"), + DECODE_SET_32_TST (TST, "0000"), + DECODE_SET_32_AND (BIC, "0001"), + DECODE_SET_32_AND (ORR, "0010"), + DECODE_SET_32_MOV (MOV, "0010"), + DECODE_SET_32_AND (ORN, "0011"), + DECODE_SET_32_MOV (MVN, "0011"), + DECODE_SET_32_AND (EOR, "0100"), + DECODE_SET_32_TST (TEQ, "0100"), + DECODE_SET_32_AND (ADD, "1000"), + DECODE_SET_32_TST (CMN, "1000"), + DECODE_SET_32_AND (ADC, "1010"), + DECODE_SET_32_AND (SBC, "1011"), + DECODE_SET_32_AND (SUB, "1101"), + DECODE_SET_32_TST (CMP, "1101"), + DECODE_SET_32_AND (RSB, "1110"), + + // pack halfword + DECODE_SET_32_PKHBT (PKHBT, "0"), + DECODE_SET_32_PKHBT (PKHTB, "1"), + + // data processing (plain binary immediate) + DECODE_SET_32_ADD_PI (ADD_PI, "00000"), + DECODE_SET_32_ADR_PI (ADD_ADR_PI, "00000"), + DECODE_SET_32_ADD_PI (SUB_PI, "01010"), + DECODE_SET_32_ADR_PI (SUB_ADR_PI, "01010"), + DECODE_SET_32_ADD_PI (MOV_PI, "00100"), + DECODE_SET_32_ADD_PI (MOVT_PI, "01100"), + DECODE_SET_32_ADD_PI (SSAT, "100.0"), + DECODE_SET_32_SSAT16 (SSAT16, "10010"), + DECODE_SET_32_ADD_PI (SBFX, "10100"), + DECODE_SET_32_ADD_PI (BFI, "10110"), + DECODE_SET_32_BFC (BFC, "10110"), + DECODE_SET_32_ADD_PI (UBFX, "11100"), + DECODE_SET_32_ADD_PI (USAT, "110.0"), + DECODE_SET_32_SSAT16 (USAT16, "11010"), + + // data processing (register) + DECODE_SET_32_LSL (LSL, "000.", "0000", "...."), + DECODE_SET_32_LSL (LSR, "001.", "0000", "...."), + DECODE_SET_32_LSL (ASR, "010.", "0000", "...."), + DECODE_SET_32_LSL (ROR, "011.", "0000", "...."), + DECODE_SET_32_LSL (SXTAH, "0000", "1...", "...."), + DECODE_SET_32_SXTH (SXTH, "0000", "1...", "1111"), + DECODE_SET_32_LSL (UXTAH, "0001", "1...", "...."), + DECODE_SET_32_SXTH (UXTH, "0001", "1...", "1111"), + DECODE_SET_32_LSL (SXTAB16, "0010", "1...", "...."), + DECODE_SET_32_SXTH (SXTB16, "0010", "1...", "1111"), + DECODE_SET_32_LSL (UXTAB16, "0011", "1...", "...."), + DECODE_SET_32_SXTH (UXTB16, "0011", "1...", "1111"), + DECODE_SET_32_LSL (SXTAB, "0100", "1...", "...."), + DECODE_SET_32_SXTH (SXTB, "0100", "1...", "1111"), + DECODE_SET_32_LSL (UXTAB, "0101", "1...", "...."), + DECODE_SET_32_SXTH (UXTB, "0101", "1...", "1111"), + + // parallel add/subtract instructions + DECODE_SET_32_PAS (ADD16, "001"), + DECODE_SET_32_PAS (ASX, "010"), + DECODE_SET_32_PAS (SAX, "110"), + DECODE_SET_32_PAS (SUB16, "101"), + DECODE_SET_32_PAS (ADD8, "000"), + DECODE_SET_32_PAS (SUB8, "100"), + + // miscellaneous operation instructions + DECODE_SET_32_LSL (QADD, "1000", "1000", "...."), + DECODE_SET_32_LSL (QDADD, "1000", "1001", "...."), + DECODE_SET_32_LSL (QSUB, "1000", "1010", "...."), + DECODE_SET_32_LSL (QDSUB, "1000", "1011", "...."), + DECODE_SET_32_LSL (REV, "1001", "1000", "...."), + DECODE_SET_32_LSL (REV16, "1001", "1001", "...."), + DECODE_SET_32_LSL (RBIT, "1001", "1010", "...."), + DECODE_SET_32_LSL (REVSH, "1001", "1011", "...."), + DECODE_SET_32_LSL (SEL, "1010", "1000", "...."), + DECODE_SET_32_LSL (CLZ, "1011", "1000", "...."), + + // multiply, multiply accumulate and absolute difference instructions + DECODE_SET_32_MLA (MLA, "0000", "0000"), + DECODE_SET_32_MUL (MUL, "0000", "0000"), + DECODE_SET_32_MLA (MLS, "0000", "0001"), + DECODE_SET_32_MLA (SDIV, "1001", "1111"), + DECODE_SET_32_MLA (UDIV, "1011", "1111"), + DECODE_SET_32_SMLA_XY (SMLA, "0001", "00" ), + DECODE_SET_32_SMUL_XY (SMUL, "0001", "00" ), + DECODE_SET_32_SMLAD (SMLAD, "0010", "000" ), + DECODE_SET_32_SMUAD (SMUAD, "0010", "000" ), + DECODE_SET_32_SMLAW (SMLAW, "0011", "000" ), + DECODE_SET_32_SMULW (SMULW, "0011", "000" ), + DECODE_SET_32_SMLAD (SMLSD, "0100", "000" ), + DECODE_SET_32_SMUAD (SMUSD, "0100", "000" ), + DECODE_SET_32_SMMLA (SMMLA, "0101", "000" ), + DECODE_SET_32_SMMUL (SMMUL, "0101", "000" ), + DECODE_SET_32_SMMLA (SMMLS, "0110", "000" ), + DECODE_SET_32_MUL (USAD8, "0111", "0000"), + DECODE_SET_32_MLA (USADA8, "0111", "0000"), + DECODE_SET_32_MLA (SMLAL, "1100", "0000"), + DECODE_SET_32_MLA (SMULL, "1000", "0000"), + DECODE_SET_32_MLA (UMAAL, "1110", "0110"), + DECODE_SET_32_MLA (UMLAL, "1110", "0000"), + DECODE_SET_32_MLA (UMULL, "1010", "0000"), + DECODE_SET_32_SMLA_XY (SMLAL, "1100", "10" ), + DECODE_SET_32_SMLAD (SMLALD, "1100", "110" ), + DECODE_SET_32_SMLAD (SMLSLD, "1101", "110" ), + + // branch and miscellaneous control instructions + DECODE_SET_32_B1 (B1, "0.0", "."), + DECODE_SET_32_B1 (B2, "0.1", "."), + DECODE_SET_32_B1 (BL, "1.1", "."), + DECODE_SET_32_MSR (MSR, "0.0", "011100."), + DECODE_SET_32_HINT1 (NOP, "0.0", "0111010", "........"), + DECODE_SET_32_HINT2 (YIELD, "0.0", "0111010", "00000001"), + DECODE_SET_32_HINT2 (WFE, "0.0", "0111010", "00000010"), + DECODE_SET_32_HINT2 (WFI, "0.0", "0111010", "00000011"), + DECODE_SET_32_HINT2 (SEV, "0.0", "0111010", "00000100"), + DECODE_SET_32_HINT2 (DBG, "0.0", "0111010", "1111...."), + DECODE_SET_32_MSR (MRS, "0.0", "011111."), + DECODE_SET_32_UNDEF (UNDEF, "0.0", ".111..."), + DECODE_SET_32_CLREX (CLREX, "0010"), + DECODE_SET_32_CLREX (DSB, "0100"), + DECODE_SET_32_CLREX (DMB, "0101"), + DECODE_SET_32_CLREX (ISB, "0110"), + + // load and store multiple instructions + DECODE_SET_32_SRS (STMDB, "10", ".0...."), + DECODE_SET_32_SRS (STMIA, "01", ".0...."), + DECODE_SET_32_SRS (LDMDB, "10", ".1...."), + DECODE_SET_32_SRS (LDMIA, "01", ".1...."), + DECODE_SET_32_POPM (POPM, "01", "111101"), + DECODE_SET_32_POPM (PUSHM, "10", "101101"), + + // dual and exclusive instructions + DECODE_SET_32_LDRD_IMM (LDRD_IMM, "0.", "11", "...."), + DECODE_SET_32_LDRD_IMM (LDRD_IMM, "1.", ".1", "...."), + DECODE_SET_32_LDRD_IMM (STRD_IMM, "0.", "10", "...."), + DECODE_SET_32_LDRD_IMM (STRD_IMM, "1.", ".0", "...."), + DECODE_SET_32_LDREX (LDREX, "00", "01", "...."), + DECODE_SET_32_LDREX (LDREXB, "01", "01", "0100"), + DECODE_SET_32_LDREX (LDREXH, "01", "01", "0101"), + DECODE_SET_32_LDREX (STREX, "00", "00", "...."), + DECODE_SET_32_LDREX (STREXB, "01", "00", "0100"), + DECODE_SET_32_LDREX (STREXH, "01", "00", "0101"), + DECODE_SET_32_LDREX (TBB, "01", "01", "0000"), + DECODE_SET_32_LDREX (TBH, "01", "01", "0001"), + + // load instructions + DECODE_SET_32_LDR (LDR, "0", "10"), + DECODE_SET_32_LDR (LDRH, "0", "01"), + DECODE_SET_32_LDR (LDRB, "0", "00"), + DECODE_SET_32_LDR (LDRSH, "1", "01"), + DECODE_SET_32_LDR (LDRSB, "1", "00"), + DECODE_SET_32_STR (STR, "0", "10"), + DECODE_SET_32_STR (STRH, "0", "01"), + DECODE_SET_32_STR (STRB, "0", "00"), + DECODE_SET_32_PLD (PLD, "0", "00"), + DECODE_SET_32_PLD (PLI, "1", "00"), + DECODE_SET_32_UHINTH (UHINTH, "01"), + DECODE_SET_32_UHINTH (UHINTB, "00"), + + // coprocessor instructions + DECODE_SET_32_CDP (CDP ), + DECODE_SET_32_CDP2 (CDP2 ), + DECODE_SET_32_LDC (LDC, "1"), + DECODE_SET_32_LDC2 (LDC2, "1"), + DECODE_SET_32_MCR (MCR, "0"), + DECODE_SET_32_MCR2 (MCR2, "0"), + DECODE_SET_32_MCR (MRC, "1"), + DECODE_SET_32_MCR2 (MRC2, "1"), + DECODE_SET_32_LDC (STC, "0"), + DECODE_SET_32_LDC2 (STC2, "0"), + DECODE_SET_32_MCRR (MCRR, "0"), + DECODE_SET_32_MCRR2 (MCRR2, "0"), + DECODE_SET_32_MCRR (MRRC, "1"), + DECODE_SET_32_MCRR2 (MRRC2, "1"), + + // VFP data processing instructions + DECODE_SET_32_VFP_S (VMLA_VFP, "0.00", "....", ".0"), + DECODE_SET_32_VFP_S (VMLS_VFP, "0.00", "....", ".1"), + DECODE_SET_32_VFP_S (VNMLS_VFP, "0.01", "....", ".0"), + DECODE_SET_32_VFP_S (VNMLA_VFP, "0.01", "....", ".1"), + DECODE_SET_32_VFP_S (VMUL_VFP, "0.10", "....", ".0"), + DECODE_SET_32_VFP_S (VNMUL_VFP, "0.10", "....", ".1"), + DECODE_SET_32_VFP_S (VADD_VFP, "0.11", "....", ".0"), + DECODE_SET_32_VFP_S (VSUB_VFP, "0.11", "....", ".1"), + DECODE_SET_32_VFP_S (VDIV_VFP, "1.00", "....", ".0"), + // Note: Arm docs wrong: op=1 is VFNMA, not VFNMS + DECODE_SET_32_VFP_S (VFNMA_VFP, "1.01", "....", ".1"), + DECODE_SET_32_VFP_S (VFNMS_VFP, "1.01", "....", ".0"), + DECODE_SET_32_VFP_S (VFMA_VFP, "1.10", "....", ".0"), + DECODE_SET_32_VFP_S (VFMS_VFP, "1.10", "....", ".1"), + DECODE_SET_32_VFP_S (VMOVI_VFP, "1.11", "....", ".0"), + DECODE_SET_32_VFP_S (VMOVR_VFP, "1.11", "0000", "01"), + DECODE_SET_32_VFP_S (VABS_VFP, "1.11", "0000", "11"), + DECODE_SET_32_VFP_S (VNEG_VFP, "1.11", "0001", "01"), + DECODE_SET_32_VFP_S (VSQRT_VFP, "1.11", "0001", "11"), + DECODE_SET_32_VFP_S (VCVTBFH_VFP, "1.11", "0010", "01"), + DECODE_SET_32_VFP_S (VCVTTFH_VFP, "1.11", "0010", "11"), + DECODE_SET_32_VFP_S (VCVTBHF_VFP, "1.11", "0011", "01"), + DECODE_SET_32_VFP_S (VCVTTHF_VFP, "1.11", "0011", "11"), + DECODE_SET_32_VFP_S (VCMP_VFP, "1.11", "0100", "01"), + DECODE_SET_32_VFP_S (VCMPE_VFP, "1.11", "0100", "11"), + DECODE_SET_32_VFP_S (VCMP0_VFP, "1.11", "0101", "01"), + DECODE_SET_32_VFP_S (VCMPE0_VFP, "1.11", "0101", "11"), + DECODE_SET_32_VFP_S (VCVTFU_VFP, "1.11", "1000", "01"), + DECODE_SET_32_VFP_S (VCVTFS_VFP, "1.11", "1000", "11"), + DECODE_SET_32_VFP_S (VCVTFXSH_VFP, "1.11", "1010", "01"), + DECODE_SET_32_VFP_S (VCVTFXSW_VFP, "1.11", "1010", "11"), + DECODE_SET_32_VFP_S (VCVTFXUH_VFP, "1.11", "1011", "01"), + DECODE_SET_32_VFP_S (VCVTFXUW_VFP, "1.11", "1011", "11"), + DECODE_SET_32_VFP_S (VCVTRUF_VFP, "1.11", "1100", "01"), + DECODE_SET_32_VFP_S (VCVTUF_VFP, "1.11", "1100", "11"), + DECODE_SET_32_VFP_S (VCVTRSF_VFP, "1.11", "1101", "01"), + DECODE_SET_32_VFP_S (VCVTSF_VFP, "1.11", "1101", "11"), + DECODE_SET_32_VFP_S (VCVTXFSH_VFP, "1.11", "1110", "01"), + DECODE_SET_32_VFP_S (VCVTXFSW_VFP, "1.11", "1110", "11"), + DECODE_SET_32_VFP_S (VCVTXFUH_VFP, "1.11", "1111", "01"), + DECODE_SET_32_VFP_S (VCVTXFUW_VFP, "1.11", "1111", "11"), + + // Extension register load/store instructions + DECODE_SET_32_SDFP_LDST (VSTMIA, "01.00"), + DECODE_SET_32_SDFP_LDST (VSTMIAW, "01.10"), + DECODE_SET_32_SDFP_LDST (VSTR, "1..00"), + DECODE_SET_32_SDFP_LDST (VSTMDBW, "10.10"), + DECODE_SET_32_SDFP_PUSH_POP (VPUSH, "10.10"), + DECODE_SET_32_SDFP_LDST (VLDMIA, "01.01"), + DECODE_SET_32_SDFP_LDST (VLDMIAW, "01.11"), + DECODE_SET_32_SDFP_PUSH_POP (VPOP, "01.11"), + DECODE_SET_32_SDFP_LDST (VLDR, "1..01"), + DECODE_SET_32_SDFP_LDST (VLDMDBW, "10.11"), + + // 8, 16 and 32-bit transfer instructions between ARM core regs and extension regs + DECODE_SET_32_VMRS (VMRS, "1", "0", "111", ".."), + DECODE_SET_32_VMRS (VMSR, "0", "0", "111", ".."), + DECODE_SET_32_VMRS (VMOVRS, "1", "0", "000", ".."), + DECODE_SET_32_VMRS (VMOVSR, "0", "0", "000", ".."), + DECODE_SET_32_VMRS (VMOVRZ, "1", "1", "00.", "00"), + DECODE_SET_32_VMRS (VMOVZR, "0", "1", "00.", "00"), + + // 64-bit transfer instructions between ARM core regs and extension regs + DECODE_SET_32_VMOVRRD (VMOVRRD, "1", "1", "00.1"), + DECODE_SET_32_VMOVRRD (VMOVDRR, "0", "1", "00.1"), + DECODE_SET_32_VMOVRRD (VMOVRRSS, "1", "0", "00.1"), + DECODE_SET_32_VMOVRRD (VMOVSSRR, "0", "0", "00.1"), + + // terminator + {0} + }; + + // create the table + vmidDecodeTableP table = vmidNewDecodeTable(32, TT_LAST); + const decodeEntry *entry; + + // add all entries to the decode table + for(entry=entries; entry->pattern; entry++) { + vmidNewEntryFmtBin( + table, + entry->name, + entry->type, + entry->pattern, + entry->priority + ); + } + + return table; +} + +// +// Get the 16-bit Thumb instruction decode table +// +static vmidDecodeTableP getDecodeTableThumb16(void) { + + static vmidDecodeTableP table; + + if(!table) { + table = createDecodeTableThumb16(); + } + + return table; +} + +// +// Get the 32-bit Thumb instruction decode table +// +static vmidDecodeTableP getDecodeTableThumb32(void) { + + static vmidDecodeTableP table; + + if(!table) { + table = createDecodeTableThumb32(); + } + + return table; +} + +// +// Return effect that the instruction has on the flags (note that this may +// depend on whether the instruction is in an if-then block) +// +static armSetFlags getSetFlagsThumb(armP arm, Uns32 instr, armSetFlags sf) { + + armSetFlags result; + + switch(sf) { + + case SF_0: + result = ARM_SF_0; + break; + + case SF_V: + result = ARM_SF_V; + break; + + case SF_I: + result = ARM_SF_I; + break; + + case SF_20_V: + result = OP_F20(instr) ? ARM_SF_V : ARM_SF_0; + break; + + case SF_IT: + if(arm->itStateMT) { + result = ARM_SF_0; + } else if(arm->UAL) { + result = ARM_SF_V; + } else { + result = ARM_SF_I; + } + break; + + default: + VMI_ABORT("%s: unimplemented case", FUNC_NAME); + break; + } + + return result; +} + +// +// Return condition associated with the instruction (note that this may depend +// on whether the instruction is in an if-then block) +// +static armCondition getConditionThumb(armP arm, Uns32 instr, condSpec cond) { + + armCondition result = ARM_C_AL; + + if(arm->itStateMT) { + result = arm->itStateMT>>4; + } else switch(cond) { + case CO_NA: break; + case CO_8: result = OP_COND_8(instr); break; + case CO_22: result = OP_COND_22(instr); break; + case CO_28: result = OP_COND_28(instr); break; + default: VMI_ABORT("%s: unimplemented case", FUNC_NAME); break; + } + + return result; +} + +// +// Return register index encoded in the Thumb instruction +// +static Uns8 getRegisterThumb(Uns32 instr, rSpec r) { + + Uns8 result = 0; + + switch(r) { + case R_NA: break; + case R3_0: result = OP_R3_0(instr); break; + case R3_3: result = OP_R3_3(instr); break; + case R3_6: result = OP_R3_6(instr); break; + case R3_8: result = OP_R3_8(instr); break; + case R4_0: result = OP_R4_0(instr); break; + case R4_8: result = OP_R4_8(instr); break; + case R4_12: result = OP_R4_12(instr); break; + case R4_16: result = OP_R4_16(instr); break; + case R4_0H7: result = OP_R4_0_H7(instr); break; + case R4_3H6: result = OP_R4_3_H6(instr); break; + case R_PC: result = ARM_REG_PC; break; + case R_SP: result = ARM_REG_SP; break; + case R_LR: result = ARM_REG_LR; break; + case V_0_5: result = OP_V0_5(instr); break; + case V_16_7: result = OP_V16_7(instr); break; + case V_12_22: result = OP_V12_22(instr); break; + case V_5_0: result = OP_V5_0(instr); break; + case V_22_12: result = OP_V22_12(instr); break; + case V_7_16: result = OP_V7_16(instr); break; + case V3_0: result = OP_U_3_0(instr); break; + default: VMI_ABORT("%s: unimplemented case", FUNC_NAME); break; + } + + return result; +} + +/// +// Return shift operation encoded in the Thumb instruction +// +static armShiftOp getShiftOpThumb(Uns32 instr, shiftSpec ss) { + + Uns32 result = ARM_SO_NA; + + const static armShiftOp shiftMap[] = { + ARM_SO_LSL, ARM_SO_LSR, ARM_SO_ASR, ARM_SO_ROR + }; + + switch(ss) { + case SS_NA: + break; + case SS_ASR: + result = ARM_SO_ASR; + break; + case SS_LSL: + result = ARM_SO_LSL; + break; + case SS_LSR: + result = ARM_SO_LSR; + break; + case SS_ROR: + result = ARM_SO_ROR; + break; + case SS_RRX: + result = ARM_SO_RRX; + break; + case SS2_4: + result = shiftMap[OP_U_2_4(instr)]; + break; + case SS2_20: + result = shiftMap[OP_U_2_20(instr)]; + break; + case SS2_21: + result = shiftMap[OP_U_2_21(instr)]; + break; + default: + VMI_ABORT("%s: unimplemented case", FUNC_NAME); + break; + } + + return result; +} + +// +// Allow for cases where constant value of zero is interpreted as 32 +// +static Uns32 adjustShift(Uns32 result, constSpec c, armShiftOp so) { + + if((result==0) && (c!=CS_NA) && ((so==ARM_SO_LSR) || (so==ARM_SO_ASR))) { + result = 32; + } + + return result; +} + +// +// Return a 5-bit plain immediate constant encoded within the Thumb instruction +// +static Uns32 plainImmediateThumb5(Uns32 instr) { + + // bitfield to extract instruction parts + union { + Uns32 instr; + struct { + Uns32 _u1 : 6; + Uns32 imm2 : 2; + Uns32 _u2 : 4; + Uns32 imm3 : 3; + Uns32 _u3 : 17; + } f; + } u1 = {instr}; + + // compose result + return ((u1.f.imm3)<<2) | u1.f.imm2; +} + +// +// Return a 12-bit plain immediate constant encoded within the Thumb instruction +// +static Uns32 plainImmediateThumb12(Uns32 instr) { + + // bitfield to extract instruction parts + union { + Uns32 instr; + struct { + Uns32 imm8 : 8; + Uns32 _u1 : 4; + Uns32 imm3 : 3; + Uns32 _u2 : 11; + Uns32 i : 1; + Uns32 _u3 : 5; + } f; + } u1 = {instr}; + + // compose result + return ((u1.f.i)<<11) | ((u1.f.imm3)<<8) | u1.f.imm8; +} + +// +// Return a 16-bit plain immediate constant encoded within the Thumb instruction +// +static Uns32 plainImmediateThumb16(Uns32 instr) { + + // bitfield to extract instruction parts + union { + Uns32 instr; + struct { + Uns32 imm8 : 8; + Uns32 _u1 : 4; + Uns32 imm3 : 3; + Uns32 _u2 : 1; + Uns32 imm4 : 4; + Uns32 _u3 : 6; + Uns32 i : 1; + Uns32 _u4 : 5; + } f; + } u1 = {instr}; + + // compose result + return ((u1.f.imm4)<<12) | ((u1.f.i)<<11) | ((u1.f.imm3)<<8) | u1.f.imm8; +} + +// +// Return a modified immediate constant encoded within the Thumb instruction +// and set byref 'crotate' to any constant rotation +// +static Uns32 modifiedImmediateThumb(Uns32 instr, Uns8 *crotate) { + + Uns32 result; + + // bitfield to extract instruction parts + union { + Uns32 instr; + struct { + Uns32 bcdefgh : 7; + Uns32 a : 1; + Uns32 _u1 : 4; + Uns32 imm3 : 3; + Uns32 _u2 : 11; + Uns32 i : 1; + Uns32 _u3 : 5; + } f; + } u1 = {instr}; + + // compose code + Uns32 code = ((u1.f.i)<<4) | ((u1.f.imm3)<<1) | u1.f.a; + Uns32 abcdefgh = (u1.f.a<<7) | u1.f.bcdefgh; + + // derive result from code + switch(code) { + + case 0x00: case 0x01: + result = abcdefgh; + break; + + case 0x02: case 0x03: + result = (abcdefgh<<16) | abcdefgh; + break; + + case 0x04: case 0x05: + result = (abcdefgh<<24) | (abcdefgh<<8); + break; + + case 0x06: case 0x07: + result = (abcdefgh<<24) | (abcdefgh<<16) | (abcdefgh<<8) | abcdefgh; + break; + + default: { + Uns32 shift = 32-code; + result = (1<<7) | u1.f.bcdefgh; + result <<= shift; + *crotate = code; + break; + } + } + + return result; +} + +// +// Negate the argument if U bit of Thumb instruction is zero +// +inline static Uns32 negateIfU(armInstructionInfoP info, Uns32 result) { + return info->u ? result : -result; +} + +// +// Return a constant encoded within the Thumb instruction and set byref +// 'crotate' to any constant rotation +// +static Uns32 getConstantThumb( + armP arm, + armInstructionInfoP info, + Uns32 instr, + constSpec c, + armShiftOp so, + Uns8 *crotate +) { + Uns32 result = 0; + + // assume constant rotation is zero + *crotate = 0; + + switch(c) { + case CS_NA: + break; + case CS_U_2_4: + result = OP_U_2_4(instr); + break; + case CS_U_2_4x8: + result = OP_U_2_4(instr)*8; + break; + case CS_U_2_10: + result = OP_U_2_10(instr); + break; + case CS_U_3_6: + result = OP_U_3_6(instr); + break; + case CS_U_4_4: + result = OP_U_4_4(instr); + break; + case CS_U_4_0: + result = OP_U_4_0(instr); + break; + case CS_U_5_6: + result = OP_U_5_6(instr); + break; + case CS_U_5_6_SZ: + result = OP_U_5_6(instr)*info->sz; + break; + case CS_U_5_0_5M16: + result = OP_U_5_0_5(instr); + result = 16 - (result > 16 ? 0 : result); + break; + case CS_U_5_0_5M32: + result = 32 - OP_U_5_0_5(instr); + break; + case CS_U_7_0x4: + result = OP_U_7_0(instr)*4; + break; + case CS_U_8_0: + result = OP_U_8_0(instr); + break; + case CS_U_8_0_U: + result = negateIfU(info, OP_U_8_0(instr)); + break; + case CS_U_8_0_SZ: + result = OP_U_8_0(instr)*info->sz; + break; + case CS_U_8_0x4_U: + result = negateIfU(info, OP_U_8_0(instr)*4); + break; + case CS_U_8_0x4: + result = OP_U_8_0(instr)*4; + break; + case CS_U_12_0: + result = OP_U_12_0(instr); + break; + case CS_U_12_0_U: + result = negateIfU(info, OP_U_12_0(instr)); + break; + case CS_PI5: + result = plainImmediateThumb5(instr); + break; + case CS_PI12: + result = plainImmediateThumb12(instr); + break; + case CS_PI16: + result = plainImmediateThumb16(instr); + break; + case CS_MI: + result = modifiedImmediateThumb(instr, crotate); + break; + default: + VMI_ABORT("%s: unimplemented case", FUNC_NAME); + break; + } + + // allow for cases where constant value of zero is interpreted as 32 + return adjustShift(result, c, so); +} + +// +// Return nregs, fixed or encoded within the Thumb instruction +// +static Uns8 getNRegsThumb(Uns32 instr, nregSpec nRegs) { + + Uns8 result = 0; + + switch(nRegs) { + case NREG_NA: + break; + case NREG_7_1: + result = OP_U_7_1(instr); + break; + case NREG_8_0: + result = OP_U_8_0(instr); + break; + default: + VMI_ABORT("%s: unimplemented case", FUNC_NAME); break; + } + + return result; +} + +// +// Return bit operation width encoded in the ARM instruction +// +static Int8 getWidthThumb(Uns32 instr, widthSpec w) { + + Int8 result = 0; + + switch(w) { + case WS_NA: + break; + case WS_WIDTH4: + result = OP_U_4_0(instr); + break; + case WS_WIDTH4M1: + result = OP_U_4_0(instr)+1; + break; + case WS_WIDTH5: + result = OP_U_5_0(instr); + break; + case WS_WIDTH5M1: + result = OP_U_5_0(instr)+1; + break; + case WS_MSB: + result = OP_U_5_0(instr)-plainImmediateThumb5(instr)+1; + break; + default: + VMI_ABORT("%s: unimplemented case", FUNC_NAME); + break; + } + + return result; +} + +// +// Get post-indexed attributes for the Thumb instruction +// +static Bool getPostIndexedThumb(Uns32 instr, postIndexSpec pi) { + + Bool result = False; + + switch(pi) { + case PI_0: + result = False; + break; + case PI_1: + result = True; + break; + case PI_10: + result = !OP_PI_10(instr); + break; + case PI_24: + result = !OP_PI_24(instr); + break; + default: + VMI_ABORT("%s: unimplemented case", FUNC_NAME); + break; + } + + return result; +} + +// +// Get writeback attributes for the Thumb instruction +// +static Bool getWritebackThumb( + Uns32 instr, + writebackSpec wb, + Uns32 base, + Uns32 rList +) { + Bool result = False; + + switch(wb) { + case WB_0: + result = False; + break; + case WB_1: + result = True; + break; + case WB_1_NB: + result = !(rList & (1<thisPC + displacement; +} + +// +// Return a 20-bit target address encoded within the Thumb instruction +// +static Uns32 getTarget20(armInstructionInfoP info, Uns32 instr) { + + // bitfield to extract instruction parts + union { + Uns32 instr; + struct { + Uns32 imm11 : 11; + Uns32 j2 : 1; + Uns32 _u1 : 1; + Uns32 j1 : 1; + Uns32 _u2 : 2; + Uns32 imm6 : 6; + Uns32 _u3 : 4; + Uns32 s : 1; + Uns32 _u4 : 5; + } f; + } u1 = {instr}; + + // bitfield to compose target + union { + Uns32 offset; + struct { + Uns32 zero : 1; + Uns32 imm11 : 11; + Uns32 imm6 : 6; + Uns32 j2 : 1; + Uns32 j1 : 1; + Uns32 s : 12; + } f; + } u2; + + // fill target fields; + u2.f.zero = 0; + u2.f.imm11 = u1.f.imm11; + u2.f.imm6 = u1.f.imm6; + u2.f.j2 = u1.f.j2; + u2.f.j1 = u1.f.j1; + u2.f.s = -u1.f.s; + + // return target address + return getTarget(info, u2.offset+4); +} + +// +// Return a 24-bit target address encoded within the Thumb instruction +// +static Uns32 getTarget24(armInstructionInfoP info, Uns32 instr) { + + // bitfield to extract instruction parts + union { + Uns32 instr; + struct { + Uns32 imm11 : 11; + Uns32 j2 : 1; + Uns32 _u1 : 1; + Uns32 j1 : 1; + Uns32 _u2 : 2; + Uns32 imm10 : 10; + Uns32 s : 1; + Uns32 _u3 : 5; + } f; + } u1 = {instr}; + + // bitfield to compose target + union { + Uns32 offset; + struct { + Uns32 zero : 1; + Uns32 imm11 : 11; + Uns32 imm10 : 10; + Uns32 i2 : 1; + Uns32 i1 : 1; + Uns32 s : 8; + } f; + } u2; + + // compose i1 and i2 fields; + Uns32 s = u1.f.s; + Uns32 i1 = !(u1.f.j1 ^ s); + Uns32 i2 = !(u1.f.j2 ^ s); + + // fill target fields; + u2.f.zero = 0; + u2.f.imm11 = u1.f.imm11; + u2.f.imm10 = u1.f.imm10; + u2.f.i2 = i2; + u2.f.i1 = i1; + u2.f.s = -s; + + // return target address + return getTarget(info, u2.offset+4); +} + +// +// Return a target address encoded within the Thumb instruction +// +static Uns32 getTargetThumb( + armInstructionInfoP info, + Uns32 instr, + targetSpec t +) { + Uns32 result = 0; + + switch(t) { + case TC_NA: + break; + case TC_S8: + result = getTarget(info, OP_TS8(instr)+4); + break; + case TC_S11: + result = getTarget(info, OP_TS11(instr)+4); + break; + case TC_S20_T2: + result = getTarget20(info, instr); + break; + case TC_S24_T2: + result = getTarget24(info, instr); + break; + case TC_U9_7_3: + result = getTarget(info, OP_TU9_7_3(instr)+4); + break; + default: + VMI_ABORT("%s: unimplemented case", FUNC_NAME); + break; + } + + return result; +} + +// +// Return coprocessor opcode1 encoded within the Thumb instruction +// +static Uns32 getCpOp1Thumb( + armP arm, + armInstructionInfoP info, + Uns32 instr, + cpOp1Spec cpOp1 +) { + Uns32 result = 0; + + switch(cpOp1) { + case COP_NA: break; + case COP_4_4: result = OP_CPOP1_4_4(instr); break; + case COP_4_20: result = OP_CPOP1_4_20(instr); break; + case COP_3_21: result = OP_CPOP1_3_21(instr); break; + default: VMI_ABORT("%s: unimplemented case", FUNC_NAME); break; + } + + return result; +} + +// +// Return register list encoded within the Thumb instruction +// +static Uns32 getRListThumb(Uns32 instr, rListSpec rList) { + + Uns32 result = 0; + + switch(rList) { + case RL_NA: break; + case RL_16: result = OP_RL_16(instr); break; + case RL_16_LR: result = OP_RL_16_LR(instr); break; + case RL_16_PC: result = OP_RL_16_PC(instr); break; + case RL_32_SP: result = OP_RL_32_SP(instr); break; + case RL_32_PCSP: result = OP_RL_32_PCSP(instr); break; + default: VMI_ABORT("%s: unimplemented case", FUNC_NAME); break; + } + + return result; +} + +// +// Return increment/decrement action encoded within the Thumb instruction +// +static armIncDec getIncDecThumb( + armInstructionInfoP info, + armP arm, + Uns32 instr, + incDecSpec incDec +) { + armIncDec result = ARM_ID_NA; + + switch (incDec) { + case ID_NA: break; + case ID_DB: result = ARM_ID_DB; break; + case ID_IA: result = ARM_ID_IA; break; + case ID_DB_I: result = ARM_ID_DBI; break; + case ID_IA_I: result = ARM_ID_IAI; break; + case ID_U_P: + case ID_U_P_IMP: + case ID_U_P_IAI: { + armIncDec USpec = OP_U (instr) ? ARM_ID_I : ARM_ID_D; + armIncDec PSpec = OP_PI(instr) ? ARM_ID_B : ARM_ID_A; + + result = (ARM_ID_P | USpec | PSpec); + + if (incDec==ID_U_P_IMP) { + // inc/dec spec is always implicit (VPUSH/VPOP) + result |= ARM_ID_NS; + } else if(arm->UAL && (result==ARM_ID_IA) && (incDec==ID_U_P_IAI)) { + // inc/dec spec is implicit in UAL mode when it is IA + result |= ARM_ID_NS; + } + break; + } + default: VMI_ABORT("%s: unimplemented case", FUNC_NAME); break; + } + + return result; +} + +// +// Return indication of whether Thumb instruction enables or disables interrupts +// (CPS) +// +static armFlagAction getFlagActionThumb( + armInstructionInfoP info, + imodSpec imod, + Uns32 instr +) { + armFlagAction result = ARM_FACT_NA; + + switch(imod) { + case IS_NA: break; + case IS_4: result = OP_IS_4(instr) ? ARM_FACT_ID : ARM_FACT_IE; break; + default: VMI_ABORT("%s: unimplemented case", FUNC_NAME); break; + } + + return result; +} + +// +// Return interrupt flag list in Thumb instruction +// +static armFlagAffect getFlagAffectThumb( + armInstructionInfoP info, + aifSpec aif, + Uns32 instr +) { + armFlagAffect result = ARM_FAFF_NA; + + if((info->fact==ARM_FACT_IE) || (info->fact==ARM_FACT_ID)) { + switch(aif) { + case AIF_0: result = OP_AIF_0(instr); break; + default: VMI_ABORT("%s: unimplemented case", FUNC_NAME); break; + } + } + + return result; +} + +// +// Get the value of the U bit in the instruction +// +static Bool getUThumb(Uns32 instr, uSpec u) { + + Bool result = False; + + switch(u) { + case US_1: + result = True; + break; + case US_9: + result = OP_U_9(instr); + break; + case US_23: + result = OP_U_23(instr); + break; + default: + VMI_ABORT("%s: unimplemented case", FUNC_NAME); + break; + } + + return result; +} + +// +// Return indication of PSR bits specified by the instruction, if any +// +static armPSRBits getPSRBitsThumb( + armInstructionInfoP info, + maskSpec mask, + Uns32 instr +) { + armPSRBits result = ARM_PSRBITS_NA; + + switch(mask) { + case MSRMASK_NA: break; + case MSRMASK_10: result = OP_U_2_10(instr); break; + default: VMI_ABORT("%s: unimplemented case", FUNC_NAME); break; + } + + return result; +} + +// +// Return a modified immediate constant for the given immediate value +// If single is true then form a single precision value, +// otherwise form the high order 32 bits of a double precision value (low order 32 bits are always all 0's) +// +static armSdfpMItype modifiedImmediateVFPthumb(Uns32 imm, Bool single) { + + armSdfpMItype result; + + if (single) { + + // Set the sign bit to be a + result.u32.w0 = (imm & 0x80) ? 0x80000000 : 0; + + // Set the exponent sign to be Bbbbbb - where B = Not b + result.u32.w0 |= (imm & 0x40) ? 0x3e000000 : 0x40000000; + + // set the mantissa to cdefgh + result.u32.w0 |= (imm & 0x3f) << 19; + + // CLear the high order bits just to be safe + result.u32.w1 = 0; + + } else { + // Set the sign bit to be a + result.u64 = (imm & 0x80) ? 0x8000000000000000ULL : 0ULL; + + // Set the exponent sign to be Bbbbbbbbb - where B = Not b + result.u64 |= (imm & 0x40) ? 0x3fc0000000000000ULL : 0x4000000000000000ULL; + + // set the mantissa to cdefgh + result.u64 |= ((Uns64) (imm & 0x3f)) << 48; + + } + + return result; +} + +// +// Decode and return a SIMD/VFP modified immediate constant encoded within the ARM instruction +// +static armSdfpMItype getSdfpMIthumb( + Uns32 instr, + sdfpMISpec s, + armSDFPType dt +) { + + armSdfpMItype result; + + result.u64 = 0; + + switch (s) { + + case SDFP_MI_NA: + break; + case SDFP_MI_VFP_S: + VMI_ASSERT(dt == ARM_SDFPT_F32, "VFP Modified immediate constant type does not match dt"); + result = modifiedImmediateVFPthumb(OP_U_8_16_0(instr), True); + break; + default: + VMI_ABORT("%s: unimplemented case", FUNC_NAME); + break; + } + + return result; +} + +// +// Return the VFP scalar index encoded in the Thumb instruction +// +static Int8 getIndexThumb(Uns32 instr, indexSpec index) { + + Int8 result = 0; + + switch(index) { + case IDX_NA: + break; + case IDX_21: + result = OP_U_1_21(instr); + break; + case IDX_5: + result = OP_U_1_5(instr); + break; + case IDX_7: + result = OP_U_1_7(instr); + break; + case IDX_19: + result = OP_U_1_19(instr); + break; + default: + VMI_ABORT("%s: unimplemented case", FUNC_NAME); + break; + } + + return result; +} + +//////////////////////////////////////////////////////////////////////////////// +// PUBLIC INTERFACE +//////////////////////////////////////////////////////////////////////////////// + +// +// Bitmasks for identification of 32-bit Thumb instructions +// +#define THUMB32_MASK 0xf800 +#define THUMB32_BL_H01 0xe800 +#define THUMB32_BL_H10 0xf000 +#define THUMB32_BL_H11 0xf800 + +// +// Return size in bytes of Thumb instruction at the passed address +// +Uns32 armGetThumbInstructionSize(armP arm, Uns32 thisPC) { + + Uns16 instr1 = vmicxtFetch2Byte((vmiProcessorP)arm, thisPC); + Uns16 hw1 = instr1 & THUMB32_MASK; + Bool isBL_H01 = (hw1==THUMB32_BL_H01); + Bool isBL_H10 = (hw1==THUMB32_BL_H10); + Bool isBL_H11 = (hw1==THUMB32_BL_H11); + + return (isBL_H01 || isBL_H10 || isBL_H11) ? 4 : 2; +} + +// +// Decode the Thumb instruction at the passed address. The 'info' structure is +// filled with details of the instruction. +// +void armDecodeThumb(armP arm, Uns32 thisPC, armInstructionInfoP info) { + + vmiProcessorP processor = (vmiProcessorP)arm; + Uns32 bytes = armGetThumbInstructionSize(arm, thisPC); + Uns32 instr = vmicxtFetch2Byte(processor, thisPC); + armThumbType type; + + // fetch instruction and decode it based on size + if(bytes==2) { + type = vmidDecode(getDecodeTableThumb16(), instr); + } else { + instr = (instr<<16) | vmicxtFetch2Byte(processor, thisPC+2); + type = vmidDecode(getDecodeTableThumb32(), instr); + } + + // save instruction + info->instruction = instr; + + // get instruction attributes based on type + opAttrsCP attrs = &attrsArray[type]; + + // get the equivalent main series type + info->type = attrs->type; + + // specify the name and format for the opcode + info->opcode = attrs->opcode; + info->format = attrs->format; + + // specify required architecture for the instruction + info->support = attrs->support; + info->isar = attrs->isar; + + // save instruction bytes + info->bytes = bytes; + + // get any flags set in the instruction + info->f = getSetFlagsThumb(arm, instr, attrs->f); + + // indicate whether the instruction is conditional + info->cond = getConditionThumb(arm, instr, attrs->cond); + + // get registers used by this instruction + info->r1 = getRegisterThumb(instr, attrs->r1); + info->r2 = getRegisterThumb(instr, attrs->r2); + info->r3 = getRegisterThumb(instr, attrs->r3); + info->r4 = getRegisterThumb(instr, attrs->r4); + + // get shiftop for the instruction + info->so = getShiftOpThumb(instr, attrs->ss); + + // get load/store size, sign extension, translate and exclusive access + // settings + info->sz = attrs->sz; + info->w = getWidthThumb(instr, attrs->w); + info->xs = attrs->xs; + info->tl = attrs->tl; + info->ea = attrs->ea; + + // does the opcode have a long load field? + info->ll = attrs->ll ? OP_LL(instr) : 0; + + // get U bit (must be valid *before* getConstantThumb which uses it) + info->u = getUThumb(instr, attrs->u); + + // get any constant value and constant rotate associated with the instruction + info->c = getConstantThumb( + arm, info, instr, attrs->cs, info->so, &info->crotate + ); + + // get any constant target address associated with the instruction + info->t = getTargetThumb(info, instr, attrs->ts); + + // get any coprocessor fields associated with the instruction + info->cpNum = attrs->cpNum ? OP_CPNUM(instr) : 0; + info->cpOp1 = getCpOp1Thumb(arm, info, instr, attrs->cpOp1); + info->cpOp2 = attrs->cpOp2 ? OP_CPOP2(instr) : 0; + + // get any _bits specification for MSR instructions + info->psrbits = getPSRBitsThumb(info, attrs->mask, instr); + + // get any register list and increment/decrement specification + info->rList = getRListThumb(instr, attrs->rList); + info->incDec = getIncDecThumb(info, arm, instr, attrs->incDec); + + // get post-indexed and writeback attributes for the instruction + info->pi = getPostIndexedThumb(instr, attrs->pi); + info->wb = info->pi || getWritebackThumb(instr, attrs->wb, info->r1, info->rList); + + // specify action on unaligned access + info->ua = attrs->ua67; + + // get flag and mode effect fields (CPS instruction) + info->ma = attrs->m ? OP_MA(instr) : 0; + info->fact = getFlagActionThumb(info, attrs->imod, instr); + info->faff = getFlagAffectThumb(info, attrs->aif, instr); + + // get if-then specification + info->it = attrs->it ? OP_IT(instr) : 0; + + // Get VFP specifications + info->index = getIndexThumb(instr, attrs->index); + info->nregs = getNRegsThumb(instr, attrs->nregs); + + // get any SIMD modified immediate constant value (64 bits long) + info->sdfpMI = getSdfpMIthumb (instr, attrs->sdfpMI, attrs->dt1); + + // get floating point type specification + info->dt1 = attrs->dt1; + info->dt2 = attrs->dt2; +} diff --git a/ovp/armmModel/armmDisassemble.c b/ovp/armmModel/armmDisassemble.c new file mode 100644 index 00000000..e7144897 --- /dev/null +++ b/ovp/armmModel/armmDisassemble.c @@ -0,0 +1,929 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// standard includes +#include +#include + +// VMI header files +#include "vmi/vmiCxt.h" +#include "vmi/vmiMessage.h" + +// model header files +#include "armDecode.h" +#include "armDisassemble.h" +#include "armDisassembleFormats.h" +#include "armFunctions.h" +#include "armStructure.h" +#include "armUtils.h" + +// +// Prefix for messages from this module +// +#define CPU_PREFIX "ARM_DISASS" + +// +// This defines the minimum string width to use for the opcode +// +#define OP_WIDTH 7 + +// +// Condition names +// +static const char *condNames[] = { + "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc", + "hi", "ls", "ge", "lt", "gt", "le", "" , "" +}; + +// +// Condition names in an IT block +// +static const char *condNamesIT[] = { + "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc", + "hi", "ls", "ge", "lt", "gt", "le", "al", "al" +}; + +// +// Limitation names +// +static const char *limNames[] = { + "#0", "#1", "oshst", "osh", "#4", "#5", "nshst", "nsh", + "#8", "#9", "ishst", "ish", "#12", "#13", "st", "sy" +}; + +// +// Increment/decrement names +// +static const char *incDecNames[] = { + [ARM_ID_NA] = "", + [ARM_ID_IA] = "ia", + [ARM_ID_IB] = "ib", + [ARM_ID_DA] = "da", + [ARM_ID_DB] = "db", + [ARM_ID_IAI] = "", + [ARM_ID_IBI] = "", + [ARM_ID_DBI] = "", + [ARM_ID_DAI] = "" +}; + +// +// Flag action names +// +static const char *flagActionNames[] = { + [ARM_FACT_NA] = "", + [ARM_FACT_BAD] = "", + [ARM_FACT_IE] = "ie", + [ARM_FACT_ID] = "id" +}; + +// +// Size names +// +static const char *sizeNames[] = {"", "b", "h", "", "", "", "", "", "d"}; + +// +// Shift names +// +static const char *shiftNames[] = {"???", "lsl", "lsr", "asr", "ror", "rrx"}; + +// +// Names for armSDFPType values +// Note most not used in single precision VFP-Only M profile +// +static const char *ftypeNames[] = { + [ARM_SDFPT_NA] = "", // no floating point type + [ARM_SDFPT_8] = ".8", + [ARM_SDFPT_16] = ".16", + [ARM_SDFPT_32] = ".32", + [ARM_SDFPT_64] = ".64", + [ARM_SDFPT_F16] = ".f16", + [ARM_SDFPT_F32] = ".f32", + [ARM_SDFPT_F64] = ".f64", + [ARM_SDFPT_I8] = ".i8", + [ARM_SDFPT_I16] = ".i16", + [ARM_SDFPT_I32] = ".i32", + [ARM_SDFPT_I64] = ".i64", + [ARM_SDFPT_P8] = ".p8", + [ARM_SDFPT_S8] = ".s8", + [ARM_SDFPT_S16] = ".s16", + [ARM_SDFPT_S32] = ".s32", + [ARM_SDFPT_S64] = ".s64", + [ARM_SDFPT_U8] = ".u8", + [ARM_SDFPT_U16] = ".u16", + [ARM_SDFPT_U32] = ".u32", + [ARM_SDFPT_U64] = ".u64", +}; + +// +// Append the character to to the result +// +static void putChar(char **result, char ch) { + + // get the tail pointer + char *tail = *result; + + // do the append + *tail++ = ch; + + // add null terminator + *tail = 0; + + // update the tail pointer + *result = tail; +} + +// +// Append the string to to the result +// +static void putString(char **result, const char *string) { + + // get the tail pointer + char *tail = *result; + char ch; + + // do the append + while((ch=*string++)) { + *tail++ = ch; + } + + // add null terminator + *tail = 0; + + // update the tail pointer + *result = tail; +} + +// +// Append comma separator, unless previous character is space or comma (allows +// for omitted optional arguments) +// +static void putComma(char **result) { + + char *tail = *result; + + switch(tail[-1]) { + case ',': + case ' ': + break; + default: + putChar(result, ','); + break; + } +} + +// +// Append right bracket, overwriting any previous comma (allows for omitted +// optional arguments) +// +static void putRBracket(char **result) { + + char *tail = *result; + + switch(tail[-1]) { + case ',': + tail[-1] = ']'; + break; + default: + putChar(result, ']'); + break; + } +} + +// +// Emit hexadecimal argument using format 0x%x +// +static void put0x(char **result, Uns32 value) { + char tmp[32]; + sprintf(tmp, "0x%x", value); + putString(result, tmp); +} + +// +// Emit hexadecimal Uns64 argument using format 0x%x +// +static void put0xll(char **result, Uns64 value) { + char tmp[32]; + sprintf(tmp, "0x"FMT_640Nx, value); + putString(result, tmp); +} + +// +// Emit unsigned argument +// +static void putU(char **result, Uns32 value) { + char tmp[32]; + sprintf(tmp, "%u", value); + putString(result, tmp); +} + +// +// Emit floating point argument +// +static void putF(char **result, Flt64 value) { + char tmp[32]; + sprintf(tmp, "%g", value); + putString(result, tmp); +} + +// +// Emit signed argument +// +static void putD(char **result, Uns32 value) { + char tmp[32]; + sprintf(tmp, "%d", value); + putString(result, tmp); +} + +// +// Emit unsigned argument preceded with hash +// +static void putHashU(char **result, Uns32 value) { + putChar(result, '#'); + putU(result, value); +} + +// +// Emit constant 0 floating point argument preceded with hash +// +static void putHashF0(char **result) { + putString(result, "#0.0"); +} + +// +// Emit signed argument preceded with hash, unless optional and zero +// +static void putHashD(char **result, Uns32 value, Bool opt) { + if(!opt || value) { + putChar(result, '#'); + putD(result, value); + } +} + +// +// Emit minus sign if required +// +static void putMinus(char **result, Bool uBit) { + if(!uBit) { + putChar(result, '-'); + } +} + +// +// Emit instruction format if required +// +static void putInstruction(armP arm, armInstructionInfoP info, char **result) { + + char tmp[32]; + + // emit basic opcode string + sprintf(tmp, info->bytes==2 ? "%04x " : "%08x ", info->instruction); + putString(result, tmp); +} + +// +// Emit GPR argument +// +static void putGPR(armP arm, char **result, Uns32 r) { + putString(result, armGetGPRName(arm, r)); +} + +// +// Emit GPR argument, or flags if r15 and UAL mode +// +static void putGPROrFlagsIfR15(armP arm, char **result, Uns32 r) { + if(!arm->UAL || (r!=15)) { + putString(result, armGetGPRName(arm, r)); + } else { + putString(result, "APSR_nzcv"); + } +} + +// +// Emit singleword register argument +// +static void putSR(armP arm, char **result, Uns32 r) { + putChar(result, 's'); + putU(result, r); +} + +// +// Emit consecutive pair of singleword registers argument +// +static void putSSR(armP arm, char **result, Uns32 r) { + putChar(result, 's'); + putU(result, r); + putString(result, ",s"); + putU(result, r+1); +} + +// +// Emit doubleword register argument +// +static void putDR(armP arm, char **result, Uns32 r) { + putChar(result, 'd'); + putU(result, r); +} + +// +// Emit scalar argument +// +static void putScalar(armP arm, char **result, Uns32 d, Uns32 index) { + putChar(result, 'd'); + putU(result, d); + putChar(result, '['); + putU(result, index); + putChar(result, ']'); +} + +// +// Emit CPR argument +// +static void putCPR(armP arm, char **result, Uns32 r) { + putString(result, armGetCPRName(arm, r)); +} + +// +// Emit fpscr argument (M-profile only supports "fpscr" on vmrs/vmsr) +// +static void putFPSCR(armP arm, char **result) { + putString(result, "fpscr"); +} + +// +// Emit jump target +// +static void putTarget(char **result, Uns32 value) { + char tmp[32]; + sprintf(tmp, "%x", value); + putString(result, tmp); +} + +// +// Emit shiftop argument +// +static void putShift(char **result, armShiftOp so) { + putString(result, shiftNames[so]); +} + +// +// Emit constant shift if non-zero +// +static void putShiftC(char **result, armShiftOp so, Uns32 value) { + if(value) { + putShift(result, so); + putChar(result, ' '); + putHashD(result, value, False); + } +} + +// +// Emit constant shift equivalent to size if non-zero +// +static void putSizeShift(char **result, Uns32 sz) { + + Uns32 shift = 0; + + while(sz>1) { + sz >>= 1; + shift++; + } + + putShiftC(result, ARM_SO_LSL, shift); +} + +// +// Emit writeback argument +// +static void putWB(char **result, Bool pi, Bool wb) { + if(wb && !pi) { + putChar(result, '!'); + } +} + +// +// Emit register list argument +// +static void putRList(armP arm, char **result, Uns32 rList) { + + Uns32 r; + Uns32 mask; + Bool first = True; + + putChar(result, '{'); + + for(r=0, mask=0x0001; r<16; r++, mask<<=1) { + if(rList&mask) { + if(!first) { + putChar(result, ','); + } + putGPR(arm, result, r); + first = False; + } + } + + putChar(result, '}'); +} + +// +// Return string for _ of MSR instruction defined +// by the instruction's mask field +// +static char *msrBits(armPSRBits bits) { + + char *s; + + switch (bits) { + case ARM_PSRBITS_GE: s = "_g"; break; + // Support for the GE bits was added by Arm in Q3 2010 so now + // this should be s = "_nzcvq", but toolchains do not seem to support it yet + // so continue using the (deprecated) empty string for now + case ARM_PSRBITS_FLAGS: s = NULL; break; + case ARM_PSRBITS_ALL: s = "_nzcvqg"; break; + default: s = NULL; break; + } + + return s; +} + +// +// Emit special register argument +// +static void putSpecialReg(char **result, armSysRegId SYSm, armPSRBits bits) { + + const char *regName; + const char *bitsName = NULL; + + switch(SYSm) { + case ASRID_APSR: regName = "APSR"; bitsName = msrBits(bits); break; + case ASRID_IAPSR: regName = "IAPSR"; bitsName = msrBits(bits); break; + case ASRID_EAPSR: regName = "EAPSR"; bitsName = msrBits(bits); break; + case ASRID_XPSR: regName = "XPSR"; bitsName = msrBits(bits); break; + case ASRID_IPSR: regName = "IPSR"; break; + case ASRID_EPSR: regName = "EPSR"; break; + case ASRID_IEPSR: regName = "IEPSR"; break; + case ASRID_MSP: regName = "MSP"; break; + case ASRID_PSP: regName = "PSP"; break; + case ASRID_PRIMASK: regName = "PRIMASK"; break; + case ASRID_BASEPRI: regName = "BASEPRI"; break; + case ASRID_BASEPRI_MAX: regName = "BASEPRI_MAX"; break; + case ASRID_FAULTMASK: regName = "FAULTMASK"; break; + case ASRID_CONTROL: regName = "CONTROL"; break; + default: regName = "RSVD"; break; + } + + putString(result, regName); + if (bitsName != NULL) putString(result, bitsName); +} + +// +// Emit flags argument (CPS instruction) +// +static void putFlags(char **result, armFlagAffect faff) { + if(faff & ARM_FAFF_A) {putChar(result, 'a');} + if(faff & ARM_FAFF_I) {putChar(result, 'i');} + if(faff & ARM_FAFF_F) {putChar(result, 'f');} +} + +// +// Emit optional mode argument (CPS instruction) +// +static void putOptMode(char **result, Bool ma, Uns32 c) { + if(ma) {putHashU(result, c);} +} + +// +// Emit limitation (DMB, DSB and ISB instructions) +// +static void putLim(char **result, Uns32 lim) { + putString(result, limNames[lim]); +} + +// +// Emit true/else condition list for IT block +// +static void putIT(char **result, Uns32 it) { + + Bool negate = (it&0x10) ? False : True; + + while(it & 0x7) { + Bool select = (it & 0x8) ? True : False; + putChar(result, (select ^ negate) ? 't' : 'e'); + it <<= 1; + } +} + +// +// Emit a single register in a register list +// May be a scalar which may or may not have a valid index +// +static void putRListReg(char **result, Uns32 rn, char regType, Bool scalar, Int32 index) { + + putChar(result, regType); + putU(result, rn); + if (scalar) { + putChar(result, '['); + if (index >= 0) putU(result, (Uns32) index); + putChar(result, ']'); + } +} + +// +// Emit SIMD/VFP type register list argument +// +static void putSdfpRList( + char **result, + Uns32 nRegs, + Uns32 incr, + Uns32 rn, + char regType, + Bool scalar, + Int32 index, + Bool forceList +) { + + putChar(result, '{'); + putRListReg(result, rn, regType, scalar, index); + + if (incr > 1 || forceList) { + + // when there is an incr (or when forced) use a list of regs rx, ry,...rz + int i; + + // If forcing a list make sure incr is valid + if (incr == 0) incr = 1; + + for (i = 1; i < nRegs; i++) { + putChar(result, ','); + putRListReg(result, rn+(incr*i), regType, scalar, index); + } + + } else { + + // When there is no incr, disassembler uses rx-rz notation for multiple registers + if (nRegs > 1) { + putChar(result, '-'); + putRListReg(result, rn+nRegs-1, regType, scalar, index); + } + + } + + putChar(result, '}'); +} + +// +// Emit a SIMD/VFP Modified Immediate constant value +// +static void putSdfpMI(char **result, armSdfpMItype mi, armSDFPType ftype) +{ + putChar(result, '#'); + + switch (ftype) { + + case ARM_SDFPT_I8: + putD(result, mi.u8.b0); + break; + case ARM_SDFPT_I16: + putD(result, mi.u16.h0); + break; + case ARM_SDFPT_I32: + putD(result, mi.u32.w0); + break; + case ARM_SDFPT_I64: + put0xll(result, mi.u64); + break; + case ARM_SDFPT_F32: + putF(result, mi.f32); + break; + case ARM_SDFPT_F64: + putF(result, mi.f64); + break; + default: + // Only above values for dt1 are supported for instructions with modified immediate constants + VMI_ABORT("Unsupported ftype %d withSIMD/VFP modified immediate constant", ftype); + + } +} + +// +// Generate instruction disassembly using the format string +// +static void disassembleFormat( + armP arm, + armInstructionInfoP info, + char **result, + const char *format +) { + const char *opcode = info->opcode; + + // in UAL mode, some instances of MOV instruction get reclassed as shift + // pseudo-ops + if(!arm->UAL) { + // no action + } else if((info->type==ARM_IT_MOV_RM_SHFT_IMM) && info->c) { + opcode = shiftNames[info->so]; + format = FMT_R1_R2_SIMM; + } else if(info->type==ARM_IT_MOV_RM_SHFT_RS) { + opcode = shiftNames[info->so]; + format = FMT_R1_R2_R3; + } else if(info->type==ARM_IT_MOV_RM_RRX) { + opcode = shiftNames[info->so]; + format = FMT_R1_R2; + } + + // generate instruction pattern + putInstruction(arm, info, result); + + // get offset at opcode start + const char *opcodeStart = *result; + + // generate opcode text + putString(result, opcode); + + if(arm->UAL) { + // disassemble using UAL syntax + if(info->xs) putChar(result, 's'); + if(info->ea) putString(result, "ex"); + putString(result, sizeNames[info->sz]); + if(info->f==ARM_SF_V) putChar(result, 's'); + putString(result, incDecNames[info->incDec]); + putString(result, condNames[info->cond]); + putString(result, flagActionNames[info->fact]); + if(info->tl) putChar(result, 't'); + if(info->ll) putChar(result, 'l'); + if(info->it) putIT(result, info->it); + putString(result, ftypeNames[info->dt1]); + putString(result, ftypeNames[info->dt2]); + } else { + // disassemble using pre-UAL syntax + putString(result, condNames[info->cond]); + putString(result, incDecNames[info->incDec]); + putString(result, flagActionNames[info->fact]); + if(info->xs) putChar(result, 's'); + if(info->ea) putString(result, "ex"); + putString(result, sizeNames[info->sz]); + if(info->tl) putChar(result, 't'); + if(info->ll) putChar(result, 'l'); + if(info->f==ARM_SF_V) putChar(result, 's'); + if(info->it) putIT(result, info->it); + putString(result, ftypeNames[info->dt1]); + putString(result, ftypeNames[info->dt2]); + } + + if(*format) { + + // calculate length of opcode text + const char *opcodeEnd = *result; + Uns32 len = opcodeEnd-opcodeStart; + char ch; + + // pad to minimum width + for(; lenr1); + break; + case EMIT_R2: + putGPR(arm, result, info->r2); + break; + case EMIT_R3: + putGPR(arm, result, info->r3); + break; + case EMIT_R4: + putGPR(arm, result, info->r4); + break; + case EMIT_S1: + putSR(arm, result, info->r1); + break; + case EMIT_S2: + putSR(arm, result, info->r2); + break; + case EMIT_S3: + putSR(arm, result, info->r3); + break; + case EMIT_D1: + putDR(arm, result, info->r1); + break; + case EMIT_D2: + putDR(arm, result, info->r2); + break; + case EMIT_D3: + putDR(arm, result, info->r3); + break; + case EMIT_Z1: + putScalar(arm, result, info->r1, info->index); + break; + case EMIT_Z2: + putScalar(arm, result, info->r2, info->index); + break; + case EMIT_SS1: + putSSR(arm, result, info->r1); + break; + case EMIT_SS3: + putSSR(arm, result, info->r3); + break; + case EMIT_CU: + putHashU(result, info->c); + break; + case EMIT_CS: + putHashD(result, info->c, opt); + break; + case EMIT_CX: + put0x(result, info->c); + break; + case EMIT_T: + putTarget(result, info->t); + break; + case EMIT_SHIFT: + putShift(result, info->so); + break; + case EMIT_SHIFT_C: + putShiftC(result, info->so, info->c); + break; + case EMIT_CPNUM: + putU(result, info->cpNum); + break; + case EMIT_COP1: + putU(result, info->cpOp1); + break; + case EMIT_COP2: + putU(result, info->cpOp2); + break; + case EMIT_CR1: + putCPR(arm, result, info->r1); + break; + case EMIT_CR2: + putCPR(arm, result, info->r2); + break; + case EMIT_CR3: + putCPR(arm, result, info->r3); + break; + case EMIT_OPT: + putU(result, info->c); + break; + case EMIT_WB: + putWB(result, info->pi, info->wb); + break; + case EMIT_RLIST: + putRList(arm, result, info->rList); + break; + case EMIT_U: + putMinus(result, info->u); + break; + case EMIT_SR: + putSpecialReg(result, info->c, info->psrbits); + break; + case EMIT_FLAGS: + putFlags(result, info->faff); + break; + case EMIT_OPT_MODE: + putOptMode(result, info->ma, info->c); + break; + case EMIT_LIM: + putLim(result, info->c); + break; + case EMIT_WIDTH: + putHashD(result, info->w, False); + break; + case EMIT_ITC: + putString(result, condNamesIT[info->it>>4]); + break; + case EMIT_SZSHIFT: + putSizeShift(result, info->sz); + break; + case EMIT_R1F: + putGPROrFlagsIfR15(arm, result, info->r1); + break; + case EMIT_FPSCR: + putFPSCR(arm, result); + break; + case EMIT_C0F: + putHashF0(result); + break; + case EMIT_SIMD_RL: + putSdfpRList(result, info->nregs, 0, info->r2, 'd', False, 0, False); + break; + case EMIT_SDFP_MI: + putSdfpMI(result, info->sdfpMI, info->dt1); + break; + case EMIT_VFP_RL: + putSdfpRList(result, info->nregs, 0, info->r2, 's', False, 0, False); + break; + case '1': + if(!info->pi) format++; + break; + case '2': + if(info->pi) format++; + break; + case ',': + putComma(result); + break; + case ']': + putRBracket(result); + break; + case '*': + nextOpt = True; + break; + default: + putChar(result, ch); + break; + } + } + } + + // strip trailing whitespace and commas + char *tail = (*result)-1; + while((*tail == ' ') || (*tail == ',')) { + *tail-- = 0; + } +} + +// +// ARM disassembler, decoded instruction interface +// +const char *armDisassembleInfo(armP arm, armInstructionInfoP info) { + + // static buffer to hold disassembly result + static char result[256]; + const char *format = info->format; + char *tail = result; + + // disassemble using the format for the type + if(format) { + disassembleFormat(arm, info, &tail, format); + } else if(info->bytes==2) { + sprintf(result, "0x%04x", info->instruction); + } else { + sprintf(result, "0x%08x", info->instruction); + } + + // return the result + return result; +} + +// +// ARM disassembler, VMI interface +// +VMI_DISASSEMBLE_FN(armDisassemble) { + + // static buffer to hold disassembly result + armP arm = (armP)processor; + armInstructionInfo info; + + // get instruction and instruction type + arm->itStateMT = arm->itStateRT; + armDecode(arm, thisPC, &info); + + // return disassembled instruction + return armDisassembleInfo(arm, &info); +} + + diff --git a/ovp/armmModel/armmDoc.c b/ovp/armmModel/armmDoc.c new file mode 100644 index 00000000..2701ac52 --- /dev/null +++ b/ovp/armmModel/armmDoc.c @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// VMI header files +#include "vmi/vmiAttrs.h" +#include "vmi/vmiModelInfo.h" +#include "vmi/vmiDoc.h" + +#include "armmDoc.h" +#include "armmParameters.h" +#include "armStructure.h" +#include "armConfig.h" + +void armmDoc(vmiProcessorP processor, armParamValuesP parameters) { + vmiDocNodeP root = vmidocAddSection(0, "Root"); + vmiDocNodeP desc = vmidocAddSection(root, "Description"); + vmidocAddText(desc, "ARMM Processor Model"); + + vmiDocNodeP lic = vmidocAddSection(root, "Licensing"); + vmidocAddText(lic, "Imperas Modified Apache 2.0 Open Source License"); + + vmiDocNodeP lim = vmidocAddSection(root, "Limitations"); + vmidocAddText(lim, "Security Extensions are not yet implemented."); + vmidocAddText(lim, "Performance Monitors are not implemented."); + + vmiDocNodeP verif = vmidocAddSection(root, "Verification"); + vmidocAddText(verif, "Models have been validated correct by Imperas " + "running through extensive unit and full operating system tests " + "and validated in some cases against hardware"); + + armP arm = (armP) processor; + + vmiDocNodeP features = vmidocAddSection(root, "Features"); + + if (MPU_PRESENT(arm)) { + vmidocAddText(features, "MPU is implemented."); + } + + if (ARM_SUPPORT(arm->configInfo.arch, ARM_VT)) { + vmidocAddText(features, "Thumb instructions are supported."); + } + if (ARM_SUPPORT(arm->configInfo.arch, ARM_VT2)) { + vmidocAddText(features, "Thumb-2 instructions are supported."); + } + if (ARM_SUPPORT(arm->configInfo.arch, ARM_J)) { + vmidocAddText(features, "Jazelle trap is implemented."); + } + + vmidocProcessor(processor, root); +} diff --git a/ovp/armmModel/armmDoc.h b/ovp/armmModel/armmDoc.h new file mode 100644 index 00000000..fc70a94f --- /dev/null +++ b/ovp/armmModel/armmDoc.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARMM_DOC_H +#define ARMM_DOC_H + +#include "vmi/vmiTyperefs.h" +#include "armmParameters.h" + +void armmDoc(vmiProcessorP processor, armParamValuesP parameters); + +#endif diff --git a/ovp/armmModel/armmEmit.c b/ovp/armmModel/armmEmit.c new file mode 100644 index 00000000..6cab46ca --- /dev/null +++ b/ovp/armmModel/armmEmit.c @@ -0,0 +1,1123 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// VMI header files +#include "vmi/vmiAttrs.h" +#include "vmi/vmiMt.h" +#include "vmi/vmiRt.h" +#include "vmi/vmiMessage.h" + +// model header files +#include "armDecode.h" +#include "armEmit.h" +#include "armExceptions.h" +#include "armFunctions.h" +#include "armMode.h" +#include "armMorph.h" +#include "armStructure.h" +#include "armRegisters.h" +#include "armUtils.h" + + +// +// Prefix for messages from this module +// +#define CPU_PREFIX "ARM_EMIT" + + +//////////////////////////////////////////////////////////////////////////////// +// SPECIAL HANDLING FOR PC UPDATES +//////////////////////////////////////////////////////////////////////////////// + +// +// Is the passed register the link register? +// +inline static Bool isLinkReg(vmiReg ra) { + return VMI_REG_EQUAL(ra, ARM_LR); +} + +// +// Invalidate derived flags dependent on ZF +// +inline static void invalidateZF(armMorphStateP state) { + state->arm->validLE = False; + state->arm->validHI = False; +} + +// +// Invalidate derived flags dependent on NF +// +inline static void invalidateNF(armMorphStateP state) { + state->arm->validLE = False; + state->arm->validLT = False; +} + +// +// Invalidate derived flags dependent on CF +// +inline static void invalidateCF(armMorphStateP state) { + state->arm->validHI = False; +} + +// +// Invalidate derived flags dependent on VF +// +inline static void invalidateVF(armMorphStateP state) { + state->arm->validLE = False; + state->arm->validLT = False; +} + +// +// Invalidate any derived flags if a flag register is being assigned +// +static void invalidateDerivedReg(armMorphStateP state, vmiReg rd) { + if(VMI_REG_EQUAL(rd, ARM_ZF)) { + invalidateZF(state); + } else if(VMI_REG_EQUAL(rd, ARM_NF)) { + invalidateNF(state); + } else if(VMI_REG_EQUAL(rd, ARM_CF)) { + invalidateCF(state); + } else if(VMI_REG_EQUAL(rd, ARM_VF)) { + invalidateVF(state); + } +} + +// +// Invalidate derived flags for all flags assigned in the flags structure +// +static void invalidateDerivedFlags(armMorphStateP state, vmiFlagsCP flags) { + if(flags) { + invalidateDerivedReg(state, flags->f[vmi_CF]); + invalidateDerivedReg(state, flags->f[vmi_ZF]); + invalidateDerivedReg(state, flags->f[vmi_SF]); + invalidateDerivedReg(state, flags->f[vmi_OF]); + } +} + +// +// Called when register is assigned a variable value +// +static void setVariable(armMorphStateP state, vmiReg rd, Bool isReturn) { + + armP arm = state->arm; + + // assignment to a flag should invalidate any derived flags + invalidateDerivedReg(state, rd); + + // possibly a special jump if PC is being assigned + if(VMI_REG_EQUAL(rd, ARM_PC)) { + + Uns32 version = ARM_INSTRUCTION_VERSION(arm->configInfo.arch); + Bool interwork = False; + + switch(state->attrs->interwork) { + + case ARM_IW_L4: + // always an interworking instruction + interwork = True; + break; + + case ARM_IW_ARM_V7: + // an interworking instruction if ARMv7 or above and an ARM + // instruction that does not set flags (not Thumb) + interwork = ((version>=7) && !IN_THUMB_MODE(arm) && !state->info.f); + break; + + default: + // never an interworking instruction (or an explicit + // interworking instruction) + break; + } + + state->pcSet = isReturn ? ASPC_R15_RET : ASPC_R15; + state->setMode = interwork; + } +} + +// +// Called to mask result value if required +// +static void maskResult(vmiReg rd) { + + if(VMI_REG_EQUAL(rd, ARM_SP)) { + + // sp_main is 4-byte aligned + vmimtBinopRC(ARM_GPR_BITS, vmi_AND, rd, ~3, 0); + + } else if(VMI_REG_EQUAL(rd, ARM_BANK_SP)) { + + // sp_process is 4-byte aligned + vmimtBinopRC(ARM_GPR_BITS, vmi_AND, rd, ~3, 0); + } +} + +// +// Called when register is assigned a constant value +// +static Bool setConstant(armMorphStateP state, vmiReg rd, Uns32 c) { + + // assignment to a flag should invalidate any derived flags + invalidateDerivedReg(state, rd); + + // special jump if PC is being assigned + if(!VMI_REG_EQUAL(rd, ARM_PC)) { + return False; + } else { + state->pcSet = ASPC_IMM; + state->pcImmediate = c; + return True; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// MODE SWITCH +//////////////////////////////////////////////////////////////////////////////// + +// +// Emit code to switch state between normal and Thumb mode +// +void armEmitInterwork(armMorphStateP state) { + + // toggle Thumb bit in PSR + vmimtBinopRC(ARM_GPR_BITS, vmi_XOR, ARM_PSR, PSR_THUMB, 0); + + // make call to switch to ARM mode (will immediately take exception) + vmimtArgProcessor(); + vmimtCall((vmiCallFn)armSwitchMode); +} + + +//////////////////////////////////////////////////////////////////////////////// +// INTEGER OPCODES +//////////////////////////////////////////////////////////////////////////////// + +// +// Get delta applied to the current PC to get the value returned when PC is a +// source argument +// +inline static Uns32 getPCDelta(armMorphStateP state) { + return (IN_THUMB_MODE(state->arm) ? 4 : 8); +} + +// +// rd = simPC (true) +// +void armEmitGetTruePC(armMorphStateP state, vmiReg rd) { + vmimtMoveRSimPC(ARM_GPR_BITS, rd); +} + +// +// r15 = simPC (according to ARM pipeline) +// +void armEmitGetPC(armMorphStateP state) { + if(!state->pcFetched) { + state->pcFetched = True; + vmimtMoveRSimPC(ARM_GPR_BITS, ARM_PC); + vmimtBinopRC(ARM_GPR_BITS, vmi_ADD, ARM_PC, getPCDelta(state), 0); + } +} + +// +// rd = c +// +void armEmitMoveRC( + armMorphStateP state, + Uns32 bits, + vmiReg rd, + Uns64 c +) { + if(!setConstant(state, rd, c)) { + vmimtMoveRC(bits, rd, c); + } +} + +// +// rd = ra +// +void armEmitMoveRR( + armMorphStateP state, + Uns32 bits, + vmiReg rd, + vmiReg ra +) { + setVariable(state, rd, isLinkReg(ra)); + vmimtMoveRR(bits, rd, ra); + maskResult(rd); +} + +// +// rd = ra +// +void armEmitMoveExtendRR( + armMorphStateP state, + Uns32 destBits, + vmiReg rd, + Uns32 srcBits, + vmiReg ra, + Bool signExtend +) { + setVariable(state, rd, False); + vmimtMoveExtendRR(destBits, rd, srcBits, ra, signExtend); + maskResult(rd); +} + +// +// rd = (flag==select1) ? c1 : c2 +// +void armEmitCondMoveRCC( + armMorphStateP state, + Uns32 bits, + vmiReg flag, + Bool select1, + vmiReg rd, + Uns64 c1, + Uns64 c2 +) { + setVariable(state, rd, False); + vmimtCondMoveRCC(bits, flag, select1, rd, c1, c2); + maskResult(rd); +} + +// +// rd = ra +// +void armEmitUnopRR( + armMorphStateP state, + Uns32 bits, + vmiUnop op, + vmiReg rd, + vmiReg ra, + vmiFlagsCP flags +) { + invalidateDerivedFlags(state, flags); + setVariable(state, rd, (op==vmi_MOV) && isLinkReg(ra)); + vmimtUnopRR(bits, op, rd, ra, flags); + maskResult(rd); +} + +// +// rd = c +// +void armEmitUnopRC( + armMorphStateP state, + Uns32 bits, + vmiUnop op, + vmiReg rd, + Uns64 c, + vmiFlagsCP flags +) { + invalidateDerivedFlags(state, flags); + + // convert constant so that value can be moved directly + if(op==vmi_MOV) { + // no action + } else if(op==vmi_NOT) { + op = vmi_MOV; + c = ~c; + } else { + VMI_ABORT("unexpected unary opcode %u", op); + } + + // operation is only required if the target is not the program counter or + // if flags are needed + if(!setConstant(state, rd, c) || flags) { + vmimtUnopRC(bits, op, rd, c, flags); + maskResult(rd); + } +} + +// +// rd = rd ra +// +void armEmitBinopRR( + armMorphStateP state, + Uns32 bits, + vmiBinop op, + vmiReg rd, + vmiReg ra, + vmiFlagsCP flags +) { + invalidateDerivedFlags(state, flags); + setVariable(state, rd, False); + vmimtBinopRR(bits, op, rd, ra, flags); + maskResult(rd); +} + +// +// rd = rd c +// +void armEmitBinopRC( + armMorphStateP state, + Uns32 bits, + vmiBinop op, + vmiReg rd, + Uns64 c, + vmiFlagsCP flags +) { + invalidateDerivedFlags(state, flags); + setVariable(state, rd, False); + vmimtBinopRC(bits, op, rd, c, flags); + maskResult(rd); +} + +// +// rd = ra rb +// +void armEmitBinopRRR( + armMorphStateP state, + Uns32 bits, + vmiBinop op, + vmiReg rd, + vmiReg ra, + vmiReg rb, + vmiFlagsCP flags +) { + invalidateDerivedFlags(state, flags); + setVariable(state, rd, False); + vmimtBinopRRR(bits, op, rd, ra, rb, flags); + maskResult(rd); +} + +// +// rd = ra c +// +void armEmitBinopRRC( + armMorphStateP state, + Uns32 bits, + vmiBinop op, + vmiReg rd, + vmiReg ra, + Uns64 c, + vmiFlagsCP flags +) { + invalidateDerivedFlags(state, flags); + setVariable(state, rd, False); + vmimtBinopRRC(bits, op, rd, ra, c, flags); + maskResult(rd); +} + +// +// Generate shift mask prefix (sets mask to 255) +// +void armEmitSetShiftMask(void) { + vmimtSetShiftMask(255); +} + +// +// rdh:rdl = ra*rb +// +void armEmitMulopRRR( + armMorphStateP state, + Uns32 bits, + vmiBinop op, + vmiReg rdH, + vmiReg rdL, + vmiReg ra, + vmiReg rb, + vmiFlagsCP flags +) { + invalidateDerivedFlags(state, flags); + setVariable(state, rdL, False); + setVariable(state, rdH, False); + vmimtMulopRRR(bits, op, rdH, rdL, ra, rb, flags); + maskResult(rdH); + maskResult(rdL); +} +//////////////////////////////////////////////////////////////////////////////// +// FLOATING POINT OPCODES +//////////////////////////////////////////////////////////////////////////////// + +// +// Perform actions after a floating point operation +// +static void endFPOperation(armMorphStateP state, Bool setSticky) { + + if(setSticky) { + // merge sticky flags + vmimtBinopRR(8, vmi_OR, ARM_FP_STICKY, ARM_FP_FLAGS, 0); + } +} + +// +// fd = fa fb fc +// +void armEmitFTernopSimdRRRR( + armMorphStateP state, + vmiFType type, + Uns32 num, + vmiFTernop op, + vmiReg fd, + vmiReg fa, + vmiReg fb, + vmiReg fc, + Bool roundInt +) { + + // do the ternop + vmimtFTernopSimdRRRR(type, num, op, fd, fa, fb, fc, ARM_FP_FLAGS, roundInt); + + // do epilogue actions + endFPOperation(state, True); +} + + +// +// fd = fa fb +// +void armEmitFBinopSimdRRR( + armMorphStateP state, + vmiFType type, + Uns32 num, + vmiFBinop op, + vmiReg fd, + vmiReg fa, + vmiReg fb +) { + + // do the binop + vmimtFBinopSimdRRR(type, num, op, fd, fa, fb, ARM_FP_FLAGS); + + // do epilogue actions + endFPOperation(state, True); +} + +// +// fd = fa +// +void armEmitFUnopSimdRR( + armMorphStateP state, + vmiFType type, + Uns32 num, + vmiFUnop op, + vmiReg fd, + vmiReg fa +) { + + // do the unop + vmimtFUnopSimdRR(type, num, op, fd, fa, ARM_FP_FLAGS); + + // do epilogue actions + endFPOperation(state, True); +} + +// +// fd = fa +// +void armEmitFConvertRR( + armMorphStateP state, + vmiFType destType, + vmiReg fd, + vmiFType srcType, + vmiReg fa, + vmiFPRC round +) { + // conversions from integer values to longer values (integer or floating + // point) never produce exceptions or require rounding + Bool srcIsFP = !VMI_FTYPE_IS_INT(srcType); + Uns32 srcBits = VMI_FTYPE_BITS(srcType); + Uns32 destBits = VMI_FTYPE_BITS(destType); + Bool exceptOrRound = (srcIsFP || (srcBits>=destBits)); + + // do the conversion + vmimtFConvertRR(destType, fd, srcType, fa, round, ARM_FP_FLAGS); + + // do epilogue actions if exceptions were possible + if(exceptOrRound) { + endFPOperation(state, True); + } +} + +// +// compare fa to fb, setting relation and flags +// +void armEmitFCompareRR( + armMorphStateP state, + vmiFType type, + vmiReg relation, + vmiReg fa, + vmiReg fb, + Bool allowQNaN, + Bool setSticky +) { + + // do the compare + vmimtFCompareRR(type, relation, fa, fb, ARM_FP_FLAGS, allowQNaN); + + // do epilogue actions + endFPOperation(state, setSticky); +} + + +//////////////////////////////////////////////////////////////////////////////// +// LOAD AND STORE OPCODES +//////////////////////////////////////////////////////////////////////////////// + +// +// Return processor endianness (and add blockMask check to validate it if +// required) +// +static memEndian getEndian(armMorphStateP state, Uns32 bits) { + + armP arm = state->arm; + + // validate endianness for memory operations wider than a byte + if(arm->checkEndian && (bits>8)) { + vmimtValidateBlockMask(ARM_BM_BIG_ENDIAN); + } + + // return current endianness + return armGetEndian((vmiProcessorP)arm, False); +} + +// +// Indicate whether instruction requires alignment checking (and add blockMask +// check to validate it if required) +// +static Bool getAlign(armMorphStateP state, Uns32 bits) { + + armP arm = state->arm; + + // validate alignment checking for memory operations wider than a byte + if(arm->checkUnaligned && (bits>8)) { + vmimtValidateBlockMask(ARM_BM_UNALIGNED); + } + + // alignment checking required if ua is not ARM_UA_UNALIGNED + return !(DO_UNALIGNED(arm) && (state->info.ua==ARM_UA_UNALIGNED)); +} + +// +// mem[ra+offset] = rb (when ra!=VMI_NOREG) +// mem[offset] = rb (when ra==VMI_NOREG) +// +void armEmitStoreRRO( + armMorphStateP state, + Uns32 bits, + Uns32 offset, + vmiReg ra, + vmiReg rb +) { + memEndian endian = getEndian(state, bits); + Bool align = getAlign(state, bits); + + // emit single store + vmimtStoreRRO(bits, offset, ra, rb, endian, align); +} + +// +// mem[ra+offset] = rbH:rbL (when ra!=VMI_NOREG) +// mem[offset] = rbH:rbL (when ra==VMI_NOREG) +// +void armEmitStoreRRRO( + armMorphStateP state, + Uns32 bits, + Uns32 offset, + vmiReg ra, + vmiReg rbL, + vmiReg rbH +) { + Uns32 regBits = ARM_GPR_BITS; + armP arm = state->arm; + memEndian endian = getEndian(state, bits); + Bool align = getAlign(state, bits); + + // generate exception for misaligned or inaccessible address if required + if(!arm->configInfo.align64as32) { + vmimtTryStoreRC(bits, offset, ra, align); + } + + // emit two word stores + vmimtStoreRRO(regBits, offset, ra, rbL, endian, align); + vmimtStoreRRO(regBits, offset+4, ra, rbH, endian, align); +} + +// +// rd = mem[ra+offset] (when ra!=VMI_NOREG) +// rd = mem[offset] (when ra==VMI_NOREG) +// +void armEmitLoadRRO( + armMorphStateP state, + Uns32 bits, + Uns32 offset, + vmiReg rd, + vmiReg ra, + Bool signExtend, + Bool isReturn +) { + Uns32 regBits = ARM_GPR_BITS; + memEndian endian = getEndian(state, bits); + Bool align = getAlign(state, bits); + + // emit single load + vmimtLoadRRO(regBits, bits, offset, rd, ra, endian, signExtend, align); + setVariable(state, rd, isReturn); + maskResult(rd); +} + +// +// rdH:rdL = mem[ra+offset] (when ra!=VMI_NOREG) +// rdH:rdL = mem[offset] (when ra==VMI_NOREG) +// +void armEmitLoadRRRO( + armMorphStateP state, + Uns32 bits, + Uns32 offset, + vmiReg rdL, + vmiReg rdH, + vmiReg ra, + vmiReg rt, + Bool signExtend, + Bool isReturn +) { + Uns32 regBits = ARM_GPR_BITS; + armP arm = state->arm; + memEndian endian = getEndian(state, bits); + Bool align = getAlign(state, bits); + + // generate exception for misaligned or inaccessible address if required + if(!arm->configInfo.align64as32) { + vmimtTryLoadRC(bits, offset, ra, align); + } + + // emit two word loads (the first into a temporary in case the second fails) + vmimtLoadRRO(regBits, regBits, offset, rt, ra, endian, False, align); + vmimtLoadRRO(regBits, regBits, offset+4, rdH, ra, endian, False, align); + vmimtMoveRR(regBits, rdL, rt); + setVariable(state, rdL, isReturn); + setVariable(state, rdH, isReturn); +} + +// +// trystore mem[ra+offset] (when ra!=VMI_NOREG) +// trystore mem[offset] (when ra==VMI_NOREG) +// +void armEmitTryStoreRC( + armMorphStateP state, + Uns32 bits, + Addr offset, + vmiReg ra +) { + vmimtTryStoreRC(bits, offset, ra, getAlign(state, bits)); +} + + +//////////////////////////////////////////////////////////////////////////////// +// COMPARE OPERATIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// flag = ra rb +// +void armEmitCompareRR( + armMorphStateP state, + Uns32 bits, + vmiCondition cond, + vmiReg ra, + vmiReg rb, + vmiReg flag +) { + vmimtCompareRR(bits, cond, ra, rb, flag); +} + +// +// flag = ra c +// +void armEmitCompareRC( + armMorphStateP state, + Uns32 bits, + vmiCondition cond, + vmiReg ra, + Uns64 c, + vmiReg flag +) { + vmimtCompareRC(bits, cond, ra, c, flag); +} + + +//////////////////////////////////////////////////////////////////////////////// +// INTER-INSTRUCTION CONDITIONAL AND UNCONDITIONAL JUMPS +//////////////////////////////////////////////////////////////////////////////// + +// +// Emit code to clear ITSTATE if required +// +static void emitClearITState(armMorphStateP state) { + if(state->arm->itStateMT) { + armEmitMoveRC(state, 8, ARM_IT_STATE, 0); + } +} + +// +// Set address mask to mask off the bottom bit of the target address +// +static void emitAddressMask(void) { + vmimtSetAddressMask(~1); +} + +// +// Perform an unconditional direct jump. +// +void armEmitUncondJump( + armMorphStateP state, + armJumpInfoP ji +) { + emitAddressMask(); + emitClearITState(state); + vmimtUncondJump( + ji->linkPC, + state->info.t, + ji->linkReg, + ji->hint + ); +} + +// +// Perform an unconditional indirect jump. +// +void armEmitUncondJumpReg( + armMorphStateP state, + armJumpInfoP ji, + vmiReg toReg +) { + emitAddressMask(); + emitClearITState(state); + vmimtUncondJumpReg( + ji->linkPC, + toReg, + ji->linkReg, + ji->hint + ); +} + +// +// Perform a conditional direct jump if the condition flag is non-zero +// (jumpIfTrue) or zero (not jumpIfTrue). +// +void armEmitCondJump( + armMorphStateP state, + armJumpInfoP ji, + vmiReg flag, + Bool jumpIfTrue +) { + emitAddressMask(); + emitClearITState(state); + vmimtCondJump( + flag, + jumpIfTrue, + ji->linkPC, + state->info.t, + ji->linkReg, + ji->hint + ); +} + +// +// Jump to the label if the register masked with the mask is non-zero (if +// jumpIfNonZero) or zero (if !jumpIfNonZero) +// +static void emitJumpLabelOnMask( + armMorphStateP state, + Uns32 bits, + vmiLabelP label, + vmiReg reg, + Uns32 mask, + Bool jumpIfNonZero +) { + vmiCondition cond = jumpIfNonZero ? vmi_COND_NZ : vmi_COND_Z; + vmimtTestRCJumpLabel(bits, cond, reg, mask, label); +} + +// +// Emit code to interwork if required, depending on LSB of target address, or +// handle exception return +// +void armEmitInterworkLSB(armMorphStateP state, vmiReg ra) { + + Uns32 bits = ARM_GPR_BITS; + armP arm = state->arm; + vmiLabelP noSwitch = armEmitNewLabel(); + Bool inThumbMode = IN_THUMB_MODE(arm); + + // special behavior is required if this is a possible handler mode exception + // return + if(!IN_USER_MODE(arm)) { + + vmiLabelP noExceptionReturn = vmimtNewLabel(); + + // jump past exception return unless target address is the magic value + vmimtCompareRCJumpLabel( + bits, vmi_COND_C, ra, EXC_RETURN_MAGIC, noExceptionReturn + ); + + // jump past exception return unless processor is in handler mode + vmimtTestRCJumpLabel( + bits, vmi_COND_Z, ARM_PSR, PSR_EXCEPT_NUM, noExceptionReturn + ); + + // do exception return + vmimtArgProcessor(); + vmimtArgReg(bits, ra); + vmimtCall((vmiCallFn)armExceptionReturn); + + // here if not an exception return + vmimtInsertLabel(noExceptionReturn); + } + + // skip mode switch unless mode has changed + emitJumpLabelOnMask(state, bits, noSwitch, ra, 1, inThumbMode); + + // switch processor mode + armEmitInterwork(state); + + // here if no mode switch required + armEmitInsertLabel(noSwitch); +} + +// +// Check for mode switch depending on setting of bottom bit of target address +// +static void emitCheckSetMode(armMorphStateP state) { + + if(state->info.f) { + + // instruction variants that assign the PC and set flags are illegal + Uns32 bits = ARM_GPR_BITS; + + // update UFSR (CFSR) + vmimtBinopRC( + bits, vmi_OR, ARM_SCS_REG(SCS_ID(CFSR)), EXC_UNDEF_UNDEFINSTR, 0 + ); + + // take UsageFault exception + vmimtArgProcessor(); + vmimtArgSimPC(bits); + vmimtCall((vmiCallFn)armUsageFault); + + } else { + + // switch mode if LSB of PC implies a different mode + if(state->setMode) { + armEmitInterworkLSB(state, ARM_PC); + } + + // mask off LSB of target address + emitAddressMask(); + } +} + +// +// Perform an implicit unconditional direct jump if required +// +void armEmitImplicitUncondJump(armMorphStateP state) { + + switch(state->pcSet) { + + case ASPC_NA: + // no action unless PC was set by the instruction + break; + + case ASPC_R15: + // indirect jump to current value in R15 + emitCheckSetMode(state); + emitClearITState(state); + vmimtUncondJumpReg(0, ARM_PC, VMI_NOREG, vmi_JH_NONE); + break; + + case ASPC_R15_RET: + // return to current value in R15 + emitCheckSetMode(state); + emitClearITState(state); + vmimtUncondJumpReg(0, ARM_PC, VMI_NOREG, vmi_JH_RETURN); + break; + + case ASPC_IMM: + // direct jump to immediate address + emitClearITState(state); + vmimtUncondJump(0, state->pcImmediate, VMI_NOREG, vmi_JH_NONE); + break; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// INTRA-INSTRUCTION CONDITIONAL AND UNCONDITIONAL JUMPS +//////////////////////////////////////////////////////////////////////////////// + +// +// Create and return a new label +// +vmiLabelP armEmitNewLabel(void) { + return vmimtNewLabel(); +} + +// +// Insert a label previously created by vmimtNewLabel at the current location. +// +void armEmitInsertLabel(vmiLabelP label) { + vmimtInsertLabel(label); +} + +// +// Perform an unconditional jump to the passed local label. +// +void armEmitUncondJumpLabel(vmiLabelP toLabel) { + vmimtUncondJumpLabel(toLabel); +} + +// +// Perform a conditional jump if the condition flag is non-zero (jumpIfTrue) +// or zero (not jumpIfTrue). The target location is the passed local label. +// +void armEmitCondJumpLabel(vmiReg flag, Bool jumpIfTrue, vmiLabelP toLabel) { + vmimtCondJumpLabel(flag, jumpIfTrue, toLabel); +} + +// +// Test the register value by performing bitwise AND with the passed constant +// value, and jump to 'toLabel' if condition 'cond' is satisfied. +// +void armEmitTestRCJumpLabel( + Uns32 bits, + vmiCondition cond, + vmiReg r, + Uns64 c, + vmiLabelP toLabel +) { + vmimtTestRCJumpLabel(bits, cond, r, c, toLabel); +} + +// +// Compare the register value by performing subtraction of the passed constant +// value, and jump to 'toLabel' if condition 'cond' is satisfied. +// +void armEmitCompareRCJumpLabel( + Uns32 bits, + vmiCondition cond, + vmiReg r, + Uns64 c, + vmiLabelP toLabel +) { + vmimtCompareRCJumpLabel(bits, cond, r, c, toLabel); +} + + +//////////////////////////////////////////////////////////////////////////////// +// CALLBACK FUNCTION INTERFACE +//////////////////////////////////////////////////////////////////////////////// + +// +// Add processor argument to the stack frame +// +void armEmitArgProcessor(armMorphStateP state) { + vmimtArgProcessor(); +} + +// +// Add Uns32 argument to the stack frame +// +void armEmitArgUns32(armMorphStateP state, Uns32 arg) { + vmimtArgUns32(arg); +} + +// +// Add register argument to the stack frame +// +void armEmitArgReg(armMorphStateP state, Uns32 bits, vmiReg r) { + vmimtArgReg(bits, r); +} + +// +// Add program counter argument to the stack frame +// +void armEmitArgSimPC(armMorphStateP state, Uns32 bits) { + vmimtArgSimPC(bits); +} + +// +// Make a call with all current stack frame arguments +// +void armEmitCall(armMorphStateP state, vmiCallFn arg) { + vmimtCall(arg); +} + +// +// As above but generate a function result (placed in rd) +// +void armEmitCallResult( + armMorphStateP state, + vmiCallFn arg, + Uns32 bits, + vmiReg rd +) { + setVariable(state, rd, False); + vmimtCallResult(arg, bits, rd); + maskResult(rd); +} + + +//////////////////////////////////////////////////////////////////////////////// +// SIMULATOR CONTROL +//////////////////////////////////////////////////////////////////////////////// + +// +// Stop simulation of the current processor +// +void armEmitExit(void) { + vmimtExit(); +} + +// +// Emit code to wait for the passed reason +// +void armEmitWait(armMorphStateP state, armDisable reason) { + vmimtBinopRC(8, vmi_OR, ARM_DISABLE_REASON, reason, 0); + vmimtHalt(); +} + +// +// Terminate the current block +// +void armEmitEndBlock(void) { + vmimtEndBlock(); +} + +// +// Emit code to validate the current block mode +// +void armEmitValidateBlockMask(armBlockMask blockMask) { + vmimtValidateBlockMask(blockMask); +} + + diff --git a/ovp/armmModel/armmExceptions.c b/ovp/armmModel/armmExceptions.c new file mode 100644 index 00000000..5e7c0c0b --- /dev/null +++ b/ovp/armmModel/armmExceptions.c @@ -0,0 +1,2378 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include + +// Imperas header files +#include "hostapi/impAlloc.h" + +// VMI header files +#include "vmi/vmiMessage.h" +#include "vmi/vmiRt.h" +#include "vmi/vmiPorts.h" + +// model header files +#include "armConfig.h" +#include "armDecode.h" +#include "armExceptions.h" +#include "armFunctions.h" +#include "armMessage.h" +#include "armStructure.h" +#include "armSys.h" +#include "armSysRegisters.h" +#include "armUtils.h" +#include "armVariant.h" +#include "armVM.h" +#include "armVFP.h" + +// +// Prefix for messages from this module +// +#define CPU_PREFIX "ARM_EXCEPTION" + +// +// This value is used when no exception priority is specified +// +#define EXC_NO_PRIORITY 0x7fffffff + + +//////////////////////////////////////////////////////////////////////////////// +// UTILITIES +//////////////////////////////////////////////////////////////////////////////// + +// +// Return processor endianness +// +inline static memEndian getEndian(armP arm) { + return armGetEndian((vmiProcessorP)arm, False); +} + +// +// Is the processor halted? +// +inline static Bool isHalted(armP arm) { + return vmirtIsHalted((vmiProcessorP)arm); +} + +// +// Return current program counter +// +inline static Uns32 getPC(armP arm) { + return vmirtGetPC((vmiProcessorP)arm); +} + +// +// Return current program counter +// +inline static const char *getName(armP arm) { + return vmirtProcessorName((vmiProcessorP)arm); +} + +// +// Get vector table base address +// +inline static Uns32 getVectorTable(armP arm) { + return SCS_REG_UNS32(arm, VTOR) & 0x3fffff80; +} + +// +// Jump to address +// +inline static void setPC(armP arm, Uns32 newPC) { + vmirtSetPC((vmiProcessorP)arm, newPC); +} + +// +// Jump to exception vector +// +inline static void setPCException(armP arm, Uns32 newPC) { + vmirtSetPCException((vmiProcessorP)arm, newPC); +} + +// +// Is the processor in handler mode (note special case when sleep on ISR return) +// +inline static Bool inHandlerMode(armP arm) { + return IN_HANDLER_MODE(arm) && !arm->sleepOnExit; +} + +// +// Load a value from the passed memory domain, returning a boolean indicating if +// the load succeeded +// +static Bool loadWord(armP arm, memDomainP domain, Uns32 address, Uns32 *result) { + + // do the read + *result = vmirtRead4ByteDomain(domain, address, getEndian(arm), MEM_AA_TRUE); + + // indicate whether the write succeeded + return (arm->derivedException==AEN_None); +} + +// +// Store a value to the passed memory domain, returning a boolean indicating if +// the store succeeded +// +static Bool storeWord(armP arm, memDomainP domain, Uns32 address, Uns32 value) { + + // do the write + vmirtWrite4ByteDomain(domain, address, getEndian(arm), value, MEM_AA_TRUE); + + // indicate whether the write succeeded + return (arm->derivedException==AEN_None); +} + +// +// Load a value from the default system address map domain, returning a boolean +// indicating if the load succeeded +// +static Bool loadWordDefault(armP arm, Uns32 address, Uns32 *result) { + + // save current derived exception and context + armExceptNum oldDerivedException = arm->derivedException; + armExceptCxt oldContext = arm->exceptionContext; + Bool ok; + + // reset derived exception and context + arm->derivedException = AEN_None; + arm->exceptionContext = AEC_ReadVector; + + // do the load using default address map, restoring previous derived + // exception if it succeeds + if((ok=loadWord(arm, arm->dds.system, address, result))) { + arm->derivedException = oldDerivedException; + } + + // restore previous context + arm->exceptionContext = oldContext; + + return ok; +} + +// +// Write a value to the passed net +// +inline static void writeNet(armP arm, Uns32 netHandle, Uns32 value) { + if(netHandle) { + vmirtWriteNetPort((vmiProcessorP)arm, netHandle, value); + } +} + +// +// Suspend the executing processor +// +static void suspend(armP arm, Uns32 haltPC, armDisable reason) { + + arm->disableReason |= reason; + + setPC(arm, haltPC); + + vmirtHalt((vmiProcessorP)arm); +} + +// +// Enter lockup state +// +static void lockup(armP arm, Uns32 haltPC) { + + suspend(arm, haltPC, AD_LOCKUP); + + writeNet(arm, arm->lockup, 1); + + if(ARM_DEBUG_EXCEPT(arm)) { + vmiMessage("W", CPU_PREFIX "LOCKUP", + "ARM %s lock up at 0x%08x\n", + getName(arm), haltPC + ); + } +} + +// +// If the processor was waiting for the passed reason, restart it and return +// True; otherwise, return False +// +static Bool restart(armP arm, armDisable reason) { + + if(arm->disableReason) { + + arm->disableReason &= ~reason; + + if(!arm->disableReason) { + vmirtRestartNext((vmiProcessorP)arm); + return True; + } + } + + return False; +} + + +//////////////////////////////////////////////////////////////////////////////// +// EXCEPTION INFORMATION (FOR DEBUGGER INTEGRATION) +//////////////////////////////////////////////////////////////////////////////// + +// +// Helper macro for creation of exception entry in exceptions table +// +#define ARM_EXCEPTION_INFO(_D) [AEN_##_D] = {name:#_D, code:AEN_##_D} + +// +// Helper macro for creation of interrupt entry in exceptions table +// +#define ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, MINOR_S, MINOR_N) \ + [(_MAJOR_N*16)+MINOR_N+16] = { \ + name : "ExternalInt"#_MAJOR_S#MINOR_S, \ + code : (_MAJOR_N*16)+MINOR_N+16 \ + } + +// +// Helper macro for creation of 16 interrupt entries in exceptions table +// +#define ARM_INTERRUPT_INFOx16(_MAJOR_S, _MAJOR_N) \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, 0, 0), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, 1, 1), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, 2, 2), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, 3, 3), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, 4, 4), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, 5, 5), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, 6, 6), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, 7, 7), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, 8, 8), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, 9, 9), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, a, 10), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, b, 11), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, c, 12), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, d, 13), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, e, 14), \ + ARM_INTERRUPT_INFO(_MAJOR_S, _MAJOR_N, f, 15) \ + +// +// Table of exception mode descriptors +// +static const vmiExceptionInfo exceptions[AEN_LAST] = { + ARM_EXCEPTION_INFO(Reset), + ARM_EXCEPTION_INFO(NMI), + ARM_EXCEPTION_INFO(HardFault), + ARM_EXCEPTION_INFO(MemManage), + ARM_EXCEPTION_INFO(BusFault), + ARM_EXCEPTION_INFO(UsageFault), + ARM_EXCEPTION_INFO(SVCall), + ARM_EXCEPTION_INFO(DebugMonitor), + ARM_EXCEPTION_INFO(PendSV), + ARM_EXCEPTION_INFO(SysTick), + ARM_INTERRUPT_INFOx16(00, 0), + ARM_INTERRUPT_INFOx16(01, 1), + ARM_INTERRUPT_INFOx16(02, 2), + ARM_INTERRUPT_INFOx16(03, 3), + ARM_INTERRUPT_INFOx16(04, 4), + ARM_INTERRUPT_INFOx16(05, 5), + ARM_INTERRUPT_INFOx16(06, 6), + ARM_INTERRUPT_INFOx16(07, 7), + ARM_INTERRUPT_INFOx16(08, 8), + ARM_INTERRUPT_INFOx16(09, 9), + ARM_INTERRUPT_INFOx16(0a, 10), + ARM_INTERRUPT_INFOx16(0b, 11), + ARM_INTERRUPT_INFOx16(0c, 12), + ARM_INTERRUPT_INFOx16(0d, 13), + ARM_INTERRUPT_INFOx16(0e, 14), + ARM_INTERRUPT_INFOx16(0f, 15), + ARM_INTERRUPT_INFOx16(10, 16), + ARM_INTERRUPT_INFOx16(11, 17), + ARM_INTERRUPT_INFOx16(12, 18), + ARM_INTERRUPT_INFOx16(13, 19), + ARM_INTERRUPT_INFOx16(14, 20), + ARM_INTERRUPT_INFOx16(15, 21), + ARM_INTERRUPT_INFOx16(16, 22), + ARM_INTERRUPT_INFOx16(17, 23), + ARM_INTERRUPT_INFOx16(18, 24), + ARM_INTERRUPT_INFOx16(19, 25), + ARM_INTERRUPT_INFOx16(1a, 26), + ARM_INTERRUPT_INFOx16(1b, 27), + ARM_INTERRUPT_INFOx16(1c, 28), + ARM_INTERRUPT_INFOx16(1d, 29), + ARM_INTERRUPT_INFOx16(1e, 30) +}; + +// +// Return the current processor exception +// +VMI_GET_EXCEPTION_FN(armGetException) { + armP arm = (armP)processor; + return &exceptions[arm->enabledException]; +} + +// +// Exception mode iterator +// +VMI_EXCEPTION_INFO_FN(armExceptionInfo) { + + armP arm = (armP)processor; + Uns32 intNum = NUM_INTERRUPTS(arm); + armExceptNum last = intNum+16; + vmiExceptionInfoCP end = exceptions+last; + vmiExceptionInfoCP this; + + // on the first call, start with the first member of the table + if(!prev) { + prev = exceptions-1; + } + + // search for the next member with seeded name + for(this=prev+1; this!=end; this++) { + if(this->name) { + return this; + } + } + + // no more exceptions + return 0; +} + + +//////////////////////////////////////////////////////////////////////////////// +// MODE INFORMATION (FOR DEBUGGER INTEGRATION) +//////////////////////////////////////////////////////////////////////////////// + +// +// Table of processor mode descriptions +// +static const vmiModeInfo modes[] = { + {name:"Thread", code:0}, + {name:"Handler", code:1}, + {0} +}; + +// +// Processor mode iterator +// +VMI_MODE_INFO_FN(armModeInfo) { + + // on the first call, start with the first member of the table + if(!prev) { + prev = modes-1; + } + + vmiModeInfoCP this = prev+1; + + return this->name ? this : 0; +} + +// +// Return the current processor mode +// +VMI_GET_MODE_FN(armGetMode) { + armP arm = (armP)processor; + return &modes[IN_HANDLER_MODE(arm)]; +} + + +//////////////////////////////////////////////////////////////////////////////// +// EXCEPTION ACTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// This specifies valid combinations for exception return +// +typedef enum armExcReturnTypeE { + AXRT_HANDLER_MAIN = 1, + AXRT_THREAD_MAIN = 9, + AXRT_THREAD_PROCESS = 13 +} armExcReturnType; + +// +// This macro returns a mask to select sub-priority bits +// +#define SUB_PRI_MASK(_A) ((2<xPriority[num] & ~SUB_PRI_MASK(arm)); +} + +// +// Return the sub-priority of the numbered exception +// NOTE: AEN_Reset, AEN_NMI and AEN_HardFault always return zero +// +inline static Uns32 subPriority(armP arm, armExceptNum num) { + return arm->xPriority[num] & SUB_PRI_MASK(arm); +} + +// +// Is the numbered exception enabled? +// +inline static Bool isEnabled(armP arm, armExceptNum num) { + return ( + EX_MASK_GET(arm->xEnable, num) && + (groupPriority(arm, num)executionPriority) + ); +} + +// +// Return the number of any pending enabled exception that should be taken now, +// assuming the processor is in the mode specified +// +static armExceptNum exceptionEnabled(armP arm, Bool handlerMode) { + + armExceptNum num = arm->enabledException; + + // return the selected exception if it has a priority number less than the + // current priority + if(num==AEN_None) { + return num; + } else if(!handlerMode) { + return num; + } else if(groupPriority(arm, num)executionPriority) { + return num; + } else { + return AEN_None; + } +} + +// +// Take exception immediately if required (may require processor restart) +// +static void takeExceptionNow(armP arm) { + + armExceptNum exceptNum = exceptionEnabled(arm, inHandlerMode(arm)); + + if(exceptNum && (!arm->disableReason || restart(arm, AD_WFI|AD_WFE))) { + vmirtDoSynchronousInterrupt((vmiProcessorP)arm); + } +} + +// +// Type representing number and priority of an exception +// +typedef struct exceptionDescS { + armExceptNum num; // exception number + Int32 groupPri; // exception group priority + Uns32 subPri; // exception sub-priority +} exceptionDesc, *exceptionDescP; + +// +// Update exceptionDesc to the passed exception if it is the highest priority +// one found so far +// +static void selectHighestPriority( + armP arm, + exceptionDescP desc, + armExceptNum num +) { + Int32 groupPri = groupPriority(arm, num); + Uns32 subPri = subPriority(arm, num); + + if( + // this is the highest group priority exception + (groupPrigroupPri) || + // this is the highest sub-priority exception + ((groupPri==desc->groupPri) && (subPrisubPri)) + ) { + desc->num = num; + desc->groupPri = groupPri; + desc->subPri = subPri; + } +} + +// +// Recalculate the boosted execution priority +// +static void refreshBoostedPriority(armP arm) { + + Int32 oldPriority = arm->executionPriority; + Int32 newPriority = arm->unboostedPriority; + Int32 BASEPRI = arm->sregs.BASEPRI; + + // allow for FAULTMASK, PRIMASK and BASEPRI execution priority boost + if(arm->sregs.FAULTMASK && (newPriority>-1)) { + newPriority = -1; + } else if(arm->sregs.PRIMASK && (newPriority>0)) { + newPriority = 0; + } else if(BASEPRI && (newPriority>BASEPRI)) { + newPriority = BASEPRI; + } + + // has execution priority changed? + if(oldPriority != newPriority) { + + // report execution priority change + if(ARM_DEBUG_EXCEPT(arm)) { + vmiPrintf( + "Execution priority %d -> %d\n", + oldPriority, newPriority + ); + } + + // save the new priority + arm->executionPriority = newPriority; + + // if the MPU is generally enabled but disabled when in a handler with + // negative execution priority (MPU_CONTROL.HFNMIENA=0), the MPU must be + // *disabled* when the old priority is non-negative and the new priority + // is negative, and *enabled* if the priority is negative and the new + // priority is non-negative + if(MPU_ENABLED(arm) && !SCS_FIELD(arm, MPU_CONTROL, HFNMIENA)) { + + Bool oldNegative = (oldPriority<0); + Bool newNegative = (newPriority<0); + + if(oldNegative!=newNegative) { + armSwitchMode(arm); + } + } + } +} + +// +// Recalculate the unboosted execution priority +// +static void refreshUnboostedPriority(armP arm) { + + exceptionDesc desc = {num:AEN_None, groupPri:EXC_NO_PRIORITY}; + Uns32 index; + + // process array of active exceptions, high to low priority + for(index=0; indexexceptMaskNum; index++) { + + Uns32 entry = arm->xActive[index]; + + if(entry) { + + Uns32 bit = 0; + Uns32 mask = 1; + + do { + + // is this bit selected? + if(entry & mask) { + + // calculate armExceptNum for this index/bit pair + armExceptNum num = (index*32) + bit; + + // select the exception if it is higher priority than any + // found so far + selectHighestPriority(arm, &desc, num); + + // remove the selected bit from the mask + entry &= ~mask; + } + + // step to the next bit + mask <<= 1; + bit++; + + } while(entry); + } + } + + // save the new unboosted priority + arm->unboostedPriority = desc.groupPri; + + // refresh the boosted priority + refreshBoostedPriority(arm); +} + +// +// Calculate the highest-priority pending exception number +// +static void refreshPendingException(armP arm) { + + exceptionDesc enabledDesc = {num:AEN_None, groupPri:EXC_NO_PRIORITY}; + exceptionDesc pendingDesc = {num:AEN_None, groupPri:EXC_NO_PRIORITY}; + Uns32 index; + + // assume no interrupts are pending initially + arm->pendingInterrupt = False; + + // process array of pending exceptions, high to low priority + for(index=0; indexexceptMaskNum; index++) { + + Uns32 entry = arm->xPend[index]; + + if(entry) { + + Uns32 bit = 0; + Uns32 mask = 1; + + do { + + // is this bit selected? + if(entry & mask) { + + // calculate armExceptNum for this index/bit pair + armExceptNum num = (index*32) + bit; + + // set ICSR.ISRPENDING if this is a pending interrupt + if(num>=AEN_ExternalInt0) { + arm->pendingInterrupt = True; + } + + // find the highest priority pending exception (regardless + // of enabled) + selectHighestPriority(arm, &pendingDesc, num); + + // find the highest priority enabled exception + if(isEnabled(arm, num)) { + selectHighestPriority(arm, &enabledDesc, num); + } + + // remove the selected bit from the mask + entry &= ~mask; + } + + // step to the next bit + mask <<= 1; + bit++; + + } while(entry); + } + } + + // has highest-priority pending exception changed? + if(arm->pendingException != pendingDesc.num) { + + // report execution priority change + if(ARM_DEBUG_EXCEPT(arm)) { + vmiPrintf( + "Pending exception %u -> %u (priority %d)\n", + arm->pendingException, pendingDesc.num, pendingDesc.groupPri + ); + } + + // save the highest-priority pending exception + arm->pendingException = pendingDesc.num; + } + + // has highest-priority enabled exception changed? + if(arm->enabledException != enabledDesc.num) { + + // report execution priority change + if(ARM_DEBUG_EXCEPT(arm)) { + vmiPrintf( + "Enabled exception %u -> %u (priority %d)\n", + arm->enabledException, enabledDesc.num, enabledDesc.groupPri + ); + } + + // save the highest-priority pending exception + arm->enabledException = enabledDesc.num; + } +} + +// +// Derive value of ICSR.RETTOBASE +// +Bool armGetRetToBase(armP arm) { + + Uns32 index; + + // process array of active exceptions + for(index=0; indexexceptMaskNum; index++) { + + Uns32 entry = arm->xActive[index]; + + if(entry) { + + Uns32 bit = 0; + Uns32 mask = 1; + + do { + + // is this bit selected? + if(entry & mask) { + + // calculate armExceptNum for this index/bit pair + armExceptNum thisNum = (index*32) + bit; + + // return False if the active exception is not the currently + // executing one + if(thisNum != PSR_FIELD(arm, exceptNum)) { + return False; + } + + // remove the selected bit from the mask + entry &= ~mask; + } + + // step to the next bit + mask <<= 1; + bit++; + + } while(entry); + } + } + + // no other exceptions are active + return True; +} + +// +// ARMv7-M ClearExclusiveLocal implementation +// +inline static void clearExclusiveLocal(armP arm) { + arm->exclusiveTag = ARM_NO_TAG; +} + +// +// ARMv7-M ARM SetEventRegister implementation +// +inline static void setEventRegister(armP arm) { + arm->eventRegister = !restart(arm, AD_WFE); +} + +// +// ARMv7-M ARM Raise implementation +// +static void raise(armP arm, armExceptNum num) { + + // restart the processor on reset, or if it is waiting-for-event and + // SCR.SEVONPEND is set + if(num==AEN_Reset) { + restart(arm, AD_WFE|AD_WFI|AD_LOCKUP); + } else if(!EX_MASK_GET(arm->xPend, num) && SCS_FIELD(arm, SCR, SEVONPEND)) { + restart(arm, AD_WFE); + } + + // set pending bit AFTER restart + EX_MASK_SET_1(arm->xPend, num); + + // refresh pending exception + refreshPendingException(arm); +} + +// +// ARMv7-M ARM Raise implementation, takes effect next instruction +// +inline static void raiseNext(armP arm, armExceptNum num) { + + raise(arm, num); +} + +// +// ARMv7-M ARM Raise implementation, takes effect immediately +// +inline static void raiseNow(armP arm, armExceptNum num) { + + raise(arm, num); + + // refresh pending exception + takeExceptionNow(arm); +} + +// +// ARMv7-M ARM Lower implementation +// +static void lower(armP arm, armExceptNum num) { + + EX_MASK_SET_0(arm->xPend, num); + + // refresh pending exception + if(num==arm->enabledException) { + refreshPendingException(arm); + } +} + +// +// ARMv7-M ARM Activate implementation +// +static void activate(armP arm, armExceptNum num) { + + EX_MASK_SET_0(arm->xPend, num); + EX_MASK_SET_1(arm->xActive, num); + + arm->nestedActivation++; + + // refresh execution priority and pending exception + refreshUnboostedPriority(arm); + refreshPendingException(arm); +} + +// +// ARMv7-M ARM Deactivate implementation +// +static void deactivate(armP arm, armExceptNum num) { + + EX_MASK_SET_0(arm->xActive, num); + + // clear FAULTMASK on any return except NMI + if(PSR_FIELD(arm, exceptNum) != AEN_NMI) { + arm->sregs.FAULTMASK = 0; + } + + arm->nestedActivation--; + + // refresh execution priority and pending exception + refreshUnboostedPriority(arm); + refreshPendingException(arm); +} + +// +// ARMv7-M ARM DeactivateAll implementation +// +static void deactivateAll(armP arm) { + + Uns32 i; + + // set all exceptions inactive + for(i=0; iexceptMaskNum; i++) { + arm->xPend [i] = 0; + arm->xActive[i] = 0; + } + + arm->nestedActivation = 0; + + // refresh execution priority and pending exception + refreshUnboostedPriority(arm); + refreshPendingException(arm); +} + +// +// This is the UpdateFPCCR psuedo-code function +// Called on exception entry when lazy context save is active +// +static void updateFPCCR(armP arm, Uns32 frameptr, memDomainP domain) { + + if (CONTROL_FIELD(arm, FPCA) && SCS_FIELD(arm, FPCCR, LSPEN)) { + + Uns32 fpFramePtr = frameptr + 0x20; + Uns32 pri = arm->executionPriority; + + // Save the pointer to the unfilled space on the stack for the FP state + // (also save the domain to use with the pointer) + SCS_FIELD(arm, FPCAR, ADDRESS) = fpFramePtr >> 3; + arm->FPCARdomain = domain; + + armUpdateLSPACT(arm, 1); + + SCS_FIELD(arm, FPCCR, USER) = IN_USER_MODE(arm); + SCS_FIELD(arm, FPCCR, THREAD) = !IN_HANDLER_MODE(arm); + SCS_FIELD(arm, FPCCR, HFRDY) = pri > -1; + SCS_FIELD(arm, FPCCR, BFRDY) = EX_MASK_GET(arm->xEnable, AEN_BusFault) && (pri > arm->xPriority[AEN_BusFault]); + SCS_FIELD(arm, FPCCR, MMRDY) = EX_MASK_GET(arm->xEnable, AEN_MemManage) && (pri > arm->xPriority[AEN_MemManage]); + SCS_FIELD(arm, FPCCR, MONRDY) = EX_MASK_GET(arm->xEnable, AEN_DebugMonitor) && (pri > arm->xPriority[AEN_DebugMonitor]); + + } +} + +// +// Run-time check if the VFP is currently enabled for the current mode +// TODO: Should this use the mode being returned to?? +// +static Bool doVFPEnabled(armP arm) { + + Bool inUserMode = IN_USER_MODE(arm); + Uns32 cp10Enable = SCS_FIELD(arm, CPACR, cp10); + Bool enabled = True; + + // check CPACR for permission to use cp10 (and cp11) in the current user/privilege mode + if(inUserMode && !(cp10Enable&2)) { + enabled = False; + } else if(!inUserMode && !(cp10Enable&1)) { + enabled = False; + } + + if (!enabled) { + // VFP disabled - usage fault + SCS_FIELD(arm, CFSR, NOCP) = 1; + arm->derivedException = AEN_UsageFault; + return False; + } + + return True; + +} + +// +// Save the FP state on the exception stack frame +// +static Bool pushFP(armP arm, Uns32 fpFramePtr, memDomainP domain) { + + Uns32 i; + + for (i = 0; i < 16; i++) { + if (!storeWord(arm, domain, fpFramePtr+(i*4), FP_REG(arm, i))) + return False; + } + + if (!storeWord(arm, domain, fpFramePtr+64, FPSCR_REG(arm))) { + return False; + } + + return True; + +} + +// +// ARMv7-M ARM PushStack implementation +// +static void pushStack(armP arm, memDomainP domain, Uns32 returnAddress) { + + // NOTE: stack pointer currently in arm->regs[ARM_REG_SP] is always + // consistent with CONTROL.useSP_Process at this point + // TODO: When this is updated to support FP, must also update armmCpuHelper + Bool haveFPExt = FPU_PRESENT(arm); + Bool fpCtxtActive = haveFPExt && CONTROL_FIELD(arm, FPCA); + Uns32 frameSize = fpCtxtActive ? 0x68 : 0x20; + Uns32 frameptr = arm->regs[ARM_REG_SP] - frameSize; + Bool frameptralign = (SCS_FIELD(arm, CCR, STKALIGN) || fpCtxtActive) && (frameptr&4); + + // allow for alignment + if(frameptralign) { + frameptr &= ~4; + } + + // save modified stack pointer + arm->regs[ARM_REG_SP] = frameptr; + + // get the PSR and modify the align4 field + armPSR tmpPSR = {reg:armReadCPSR(arm)}; + tmpPSR.fields.align4 = frameptralign; + Uns32 value = tmpPSR.reg; + + // save the registers, terminating on derived exception + if (storeWord(arm, domain, frameptr, arm->regs[0] ) && + storeWord(arm, domain, frameptr+0x4, arm->regs[1] ) && + storeWord(arm, domain, frameptr+0x8, arm->regs[2] ) && + storeWord(arm, domain, frameptr+0xc, arm->regs[3] ) && + storeWord(arm, domain, frameptr+0x10, arm->regs[12] ) && + storeWord(arm, domain, frameptr+0x14, arm->regs[ARM_REG_LR]) && + storeWord(arm, domain, frameptr+0x18, returnAddress ) && + storeWord(arm, domain, frameptr+0x1c, value )) + { + // if normal stack context successfully saved then save FP context if indicated + if (fpCtxtActive) { + if (SCS_FIELD(arm, FPCCR, LSPEN) == 0) { + if (doVFPEnabled(arm)) { + pushFP(arm, frameptr+0x20, domain); + } + } else { + updateFPCCR(arm, frameptr, domain); + } + } + } + + // determine exception return type + armExcReturnType returnType; + + if(inHandlerMode(arm)) { + returnType = AXRT_HANDLER_MAIN; + } else if(!USE_SP_PROCESS(arm)) { + returnType = AXRT_THREAD_MAIN; + } else { + returnType = AXRT_THREAD_PROCESS; + } + + // update LR for correct return behavior + if (fpCtxtActive) { + // Bit 4 = 0 indicates fp context was active + arm->regs[ARM_REG_LR] = 0xffffffe0 | returnType; + } else { + arm->regs[ARM_REG_LR] = 0xfffffff0 | returnType; + } +} + +// +// Restore the FP state from the exception stack frame +// +static Bool popFP(armP arm, Uns32 frameptr, Uns32 *fp, memDomainP domain, Bool *restore) { + + *restore = False; + + if (SCS_FIELD(arm, FPCCR, LSPACT)) { + + // State in FP is still valid, do not need to restore + armUpdateLSPACT(arm, 0); + + } else if (!doVFPEnabled(arm)) { + + // VFP disabled - usage fault generated + return False; + + } else { + + // Restore fp state, aborting if error occurs + Uns32 fpFramePtr = frameptr + 0x20; + Uns32 i; + + for (i = 0; i < 16; i++) { + if (!loadWord(arm, domain, fpFramePtr+(i*4), fp+i)) + return False; + } + + if (!loadWord(arm, domain, fpFramePtr+64, fp+16)) { + return False; + } + + *restore = True; + } + + return True; +} + +// +// ARMv7-M ARM PopStack implementation +// +static void popStack(armP arm, Uns32 targetPC, memDomainP domain, Bool requiredHandlerMode) { + + // these hold intermediate values prior to commit + Uns32 r0, r1, r2, r3, r12, lr, pc, psr, fp[17]; + Bool restoreFP = False; + + // NOTE: stack pointer currently in arm->regs[ARM_REG_SP] is always + // consistent with CONTROL.useSP_Process at this point + Bool haveFPExt = FPU_PRESENT(arm); + Bool fpca = (targetPC & 0x10) == 0; + Bool fpCtxtActive = haveFPExt && fpca; + Uns32 frameSize = fpCtxtActive ? 0x68 : 0x20; + Uns32 frameptr = arm->regs[ARM_REG_SP]; + + // load stack frame, terminating on derived exception + if( + loadWord(arm, domain, frameptr, &r0 ) && + loadWord(arm, domain, frameptr+0x4, &r1 ) && + loadWord(arm, domain, frameptr+0x8, &r2 ) && + loadWord(arm, domain, frameptr+0xc, &r3 ) && + loadWord(arm, domain, frameptr+0x10, &r12) && + loadWord(arm, domain, frameptr+0x14, &lr ) && + loadWord(arm, domain, frameptr+0x18, &pc ) && + loadWord(arm, domain, frameptr+0x1c, &psr) && + (!fpCtxtActive || popFP(arm, frameptr, fp, domain, &restoreFP)) + ) { + + // extract PSR fields + armPSR tmpPSR = {reg:psr}; + Bool actualHandlerMode = tmpPSR.fields.exceptNum && True; + + // if fp exists restore the fpca value that existed on exception entry + if (haveFPExt) { + armUpdateFPCA(arm, fpca); + } + + // 1. must be returning to Thumb mode + // 2. must be returning to consistent Handler mode + if(!(tmpPSR.fields.T && (requiredHandlerMode==actualHandlerMode))) { + + SCS_FIELD(arm, CFSR, INVPC) = 1; + arm->derivedException = AEN_UsageFault; + + } else { + + // commit loaded values + arm->regs[0] = r0; + arm->regs[1] = r1; + arm->regs[2] = r2; + arm->regs[3] = r3; + arm->regs[12] = r12; + arm->regs[ARM_REG_LR] = lr; + if (restoreFP) { + Uns32 i; + for (i = 0; i < 16; i++) { + FP_REG(arm, i) = fp[i]; + } + FPSCR_REG(arm) = fp[16]; + } + + // commit PC (NOTE: least significant bit should be zero, but we mask it + // here to be sure) + setPC(arm, pc & ~1); + + // adjust stack pointer + // NOTE: stack pointer currently in arm->regs[ARM_REG_SP] is + // always consistent with CONTROL.useSP_Process at this point + arm->regs[ARM_REG_SP] += frameSize; + + // restore 4-byte alignment if required + if(tmpPSR.fields.align4 && (SCS_FIELD(arm, CCR, STKALIGN) || fpCtxtActive)) { + arm->regs[ARM_REG_SP] |= 4; + } + + // write valid PSR bits + armWriteCPSR(arm, psr, PSR_ALL); + } + } +} + +// +// Do reset exception +// +static void takeReset(armP arm) { + + Uns32 table = getVectorTable(arm); + + // these hold intermediate values prior to commit + Uns32 sp, pc; + + // get initial values of spMain and PC + if( + loadWordDefault(arm, table, &sp) && + loadWordDefault(arm, table+4, &pc) + ) { + // reset stack pointers and link register + arm->regs[ARM_REG_SP] = sp & 0xfffffffc; + arm->bank.R13_process = 0; + arm->regs[ARM_REG_LR] = 0xffffffff; + + // set PSR + armPSR psr = {fields:{T:pc&1}}; + armWriteCPSR(arm, psr.reg, PSR_ALL); + + // force other special registers to reset value (effects of this are + // accounted for in deactivateAll below) + arm->sregs.CONTROL.reg = 0; + arm->sregs.PRIMASK = 0; + arm->sregs.FAULTMASK = 0; + arm->sregs.BASEPRI = 0; + + // reset system state and VM structures + armSysReset(arm); + armVMReset(arm); + armFPReset(arm); + + // Set the block mask since regs with fields in block mask have been reset + armSetBlockMask(arm); + + // deactivate all exceptions + deactivateAll(arm); + + // processor is not in exclusive access mode + clearExclusiveLocal(arm); + setEventRegister(arm); + + // jump to reset address (Thumb mode bit masked off) + setPCException(arm, pc & ~1); + } +} + +// +// Do common exception actions +// +static void takeException(armP arm, armExceptNum exceptionNumber) { + + Uns32 table = getVectorTable(arm); + Uns32 pc; + + // get vector address + if(loadWordDefault(arm, table+(4*exceptionNumber), &pc)) { + + // set PSR (all fields except flags) + armPSR psr = {fields:{T:pc&1, exceptNum:exceptionNumber}}; + armWriteCPSR(arm, psr.reg, PSR_NOT_FLAGS); + + // Clear CONTROL.FPCA if FP present + // Note: Documentation says to set to 1 here but that makes no sense!!!! + if (FPU_PRESENT(arm)) { + armUpdateFPCA(arm, 0); + } + + // current stack is Main + armWriteSPProcess(arm, False); + + // activate exception + activate(arm, exceptionNumber); + + // processor is not in exclusive access mode + clearExclusiveLocal(arm); + setEventRegister(arm); + + // if this is an interrupt, signal to any external interrupt controller + // that it is being serviced + if(exceptionNumber>=AEN_ExternalInt0) { + writeNet(arm, arm->intISS, exceptionNumber-AEN_ExternalInt0); + } + + // jump to exception vector (Thumb mode bit masked off) + setPCException(arm, pc & ~1); + } +} + +// +// Escalate priority to AEN_HardFault if this exception is not enabled or lower +// or equal priority to the execution priority +// +static armExceptNum escalatePriority(armP arm, armExceptNum exceptionNumber) { + + if(isEnabled(arm, exceptionNumber)) { + return exceptionNumber; + } else if(exceptionNumber==AEN_DebugMonitor) { + SCS_FIELD(arm, HFSR, DEBUGEVT) = 1; + } else { + SCS_FIELD(arm, HFSR, FORCED) = 1; + } + + return AEN_HardFault; +} + +// +// Return the memory domain to use for pushStack/popStack when executing with +// the passed priority +// +static memDomainP getPriorityStackDomain(armP arm, Int32 priority) { + if(!MPU_ENABLED(arm)) { + return arm->dds.system; + } else if(priority>=0) { + return arm->dds.vmPriv; + } else if(SCS_FIELD(arm, MPU_CONTROL, HFNMIENA)) { + return arm->dds.vmPriv; + } else { + return arm->dds.system; + } +} + +// +// Do common actions at start of attempt to take exception - actual exception +// taken may be an escalated one +// +static void startException( + armP arm, + armExceptNum exceptionNumber, + Uns32 returnAddress +) { + Int32 oldPriority = arm->executionPriority; + Bool lockupDerived; + + if(arm->exceptionContext == AEC_PreserveFPState) { + // TODO: Remove this when this exception is fully modeled + vmiMessage("E", CPU_PREFIX "_LFPSPE", "Exceptions during lazy FP state preservation not supported yet"); + vmirtStop(); + } + + // restore normal data domain for this mode (in case this exception is a + // result of LDRT or STRT, for example) + if(arm->restoreDomain) { + armVMRestoreNormalDataDomain(arm); + } + + // escalate priority to AEN_HardFault if this exception is not enabled + // or lower or equal priority to the execution priority + exceptionNumber = escalatePriority(arm, exceptionNumber); + + // indicate that we are entering the exception prologue + arm->exceptionContext = AEC_PushStack; + arm->derivedException = AEN_None; + + // do exception-specific actions + if(exceptionNumber==AEN_Reset) { + + // any derived exception here causes lockup + lockupDerived = True; + + // do reset operations + takeReset(arm); + + } else { + + // any derived exception here causes lockup only if the current priority + // is negative + lockupDerived = (oldPriority<0); + + // get the appropriate memory domain to use for vector reads and + // pushStack writes + Int32 priority = groupPriority(arm, exceptionNumber); + memDomainP domain = getPriorityStackDomain(arm, priority); + + // save register state + pushStack(arm, domain, returnAddress); + + // take the exception unless pushStack created unrecoverable errors + if(!(lockupDerived && arm->derivedException)) { + takeException(arm, exceptionNumber); + } + } + + // if there is a derived exception, either activate it or enter lockup state + if(!arm->derivedException) { + // no action + } else if(lockupDerived) { + lockup(arm, 0xffffffff); + } else { + raiseNext(arm, escalatePriority(arm, arm->derivedException)); + } + + // indicate exception prologue is no longer active + arm->exceptionContext = AEC_None; +} + +// +// Take a derived exception (uses tail chaining) +// +static void derivedException( + armP arm, + armExceptNum exceptionNumber, + Uns32 targetPC +) { + // save target address in LR + arm->regs[ARM_REG_LR] = targetPC; + + // deactivate the running exception + deactivate(arm, PSR_FIELD(arm, exceptNum)); + + // take the derived exception (tail-chained) + takeException(arm, escalatePriority(arm, exceptionNumber)); +} + +// +// Should the processor sleet on exit from the exception? +// +inline static Bool doSleepOnExit(armP arm, armExceptNum exceptNum) { + return EX_IS_INTERRUPT(exceptNum) && SCS_FIELD(arm, SCR, SLEEPONEXIT); +} + +// +// Handle exception return +// +void armExceptionReturn(armP arm, Uns32 targetPC) { + + armExceptNum returningExceptionNumber = PSR_FIELD(arm, exceptNum); + armExcReturnType type = targetPC & EXC_RETURN_TYPE; + Bool handlerMode = (type==AXRT_HANDLER_MAIN); + + // sanity check we are being called in handler mode + VMI_ASSERT( + inHandlerMode(arm), + "require handler mode" + ); + + // sanity check this is indeed an exception return + VMI_ASSERT( + (targetPC&EXC_RETURN_MAGIC) == EXC_RETURN_MAGIC, + "targetPC is not an exception return address" + ); + + // initially assume no derived exception + arm->derivedException = AEN_None; + + if(!EX_MASK_GET(arm->xActive, returningExceptionNumber)) { + + // returning from inactive handler + SCS_FIELD(arm, CFSR, INVPC) = 1; + arm->derivedException = AEN_UsageFault; + + } else switch(type) { + + case AXRT_HANDLER_MAIN: + // return to Handler + if(arm->nestedActivation==1) { + SCS_FIELD(arm, CFSR, INVPC) = 1; + arm->derivedException = AEN_UsageFault; + } else { + armWriteSPProcess(arm, False); + } + break; + + case AXRT_THREAD_MAIN: + // return to Thread using Main stack + if((arm->nestedActivation!=1) && SCS_FIELD(arm, CCR, NONBASETHRDENA)) { + SCS_FIELD(arm, CFSR, INVPC) = 1; + arm->derivedException = AEN_UsageFault; + } else { + armWriteSPProcess(arm, False); + } + break; + + case AXRT_THREAD_PROCESS: + // return to Thread using Process stack + if((arm->nestedActivation!=1) && SCS_FIELD(arm, CCR, NONBASETHRDENA)) { + SCS_FIELD(arm, CFSR, INVPC) = 1; + arm->derivedException = AEN_UsageFault; + } else { + armWriteSPProcess(arm, True); + } + break; + + default: + // illegal EXC_RETURN + SCS_FIELD(arm, CFSR, INVPC) = 1; + arm->derivedException = AEN_UsageFault; + break; + } + + if(!arm->derivedException) { + + // get data domain *before* deactivating the exception (for popStack) + memDomainP domain = getPriorityStackDomain(arm, arm->executionPriority); + + // deactivate the terminating exception (NOTE: this can update execution + // priority and so affect the stack domain) + deactivate(arm, returningExceptionNumber); + + if(exceptionEnabled(arm, handlerMode)) { + + // take tail-chained exception + arm->regs[ARM_REG_LR] = targetPC; + takeException(arm, arm->enabledException); + + } else if(doSleepOnExit(arm, returningExceptionNumber)) { + + // return to top level with SCR.SLEEPONEXIT set should suspend the + // processor (reawaken it when the next interrupt comes in) + arm->regs[ARM_REG_LR] = targetPC; + suspend(arm, getPC(arm), AD_WFI); + arm->sleepOnExit = True; + + } else { + + // restore register state (may set arm->derivedException) + arm->exceptionContext = AEC_PopStack; + popStack(arm, targetPC, domain, handlerMode); + arm->exceptionContext = AEC_None; + + // error in load operations or inconsistent IPSR - reincrement + // nestedActivation (to undo the effect of deactivate above) + if(arm->derivedException) { + arm->nestedActivation++; + } + } + + // processor is not in exclusive access mode + clearExclusiveLocal(arm); + setEventRegister(arm); + } + + // handle any derived exception as a tail-chained one at higher activation + // depth + if(!arm->derivedException) { + // no action + } else if((arm->executionPriority<0) && (returningExceptionNumber==AEN_NMI)) { + lockup(arm, 0xffffffff); + } else { + derivedException(arm, arm->derivedException, targetPC); + } +} + +// +// Perform actions required for alignment fault +// +inline static void doAlign(armP arm) { + startException(arm, AEN_UsageFault, getPC(arm)); +} + +// +// Do breakpoint exception (prefetch abort) +// +void armBKPT(armP arm, Uns32 thisPC) { + + if(arm->executionPriority<0) { + lockup(arm, thisPC); + } else { + startException(arm, AEN_DebugMonitor, thisPC); + } +} + +// +// Do software exception +// +void armSWI(armP arm, Uns32 thisPC) { + + if(arm->executionPriority<0) { + lockup(arm, thisPC); + } else { + startException(arm, AEN_SVCall, thisPC+2); + } +} + +// +// Do UsageFault exception +// +void armUsageFault(armP arm, Uns32 thisPC) { + + if(arm->executionPriority<0) { + lockup(arm, thisPC); + } else { + startException(arm, AEN_UsageFault, thisPC); + } +} + +// +// Do BusFault exception +// +void armBusFault(armP arm, Uns32 faultAddress, memPriv priv) { + + Int32 priority = arm->executionPriority; + Bool ignoreFault = False; + Bool lockUpAtFFF = False; + + // clear valid bits + SCS_FIELD(arm, CFSR, BFARVALID) = 0; + + // update fault status + if(priv==MEM_PRIV_X) { + SCS_FIELD(arm, CFSR, IBUSERR) = 1; + } else if(arm->exceptionContext==AEC_PushStack) { + SCS_FIELD(arm, CFSR, STKERR) = 1; + } else if(arm->exceptionContext==AEC_PopStack) { + SCS_FIELD(arm, CFSR, UNSTKERR) = 1; + } else if(arm->exceptionContext==AEC_ReadVector) { + SCS_FIELD(arm, HFSR, VECTTBL) = 1; + lockUpAtFFF = True; + } else { + + SCS_FIELD(arm, CFSR, PRECISERR) = 1; + SCS_FIELD(arm, CFSR, BFARVALID) = 1; + SCS_REG_UNS32(arm, BFAR) = faultAddress; + + // ignore this fault if priority is negative and CCR.BFHFNMIGN is set + ignoreFault = (priority<0) && SCS_FIELD(arm, CCR, BFHFNMIGN); + } + + if(ignoreFault) { + // no action if fault is ignored for some reason + } else if(priority<0) { + arm->derivedException = AEN_HardFault; + lockup(arm, lockUpAtFFF ? 0xffffffff : getPC(arm)); + } else if(arm->exceptionContext == AEC_ReadVector) { + arm->derivedException = AEN_HardFault; + } else if(arm->exceptionContext != AEC_None) { + arm->derivedException = AEN_BusFault; + if(arm->exceptionContext == AEC_PreserveFPState) { + // TODO: Remove this when this exception is fully modeled + vmiMessage("E", CPU_PREFIX "_LFPSPE", "Exceptions during lazy FP state preservation not supported yet"); + vmirtStop(); + } + } else { + startException(arm, AEN_BusFault, getPC(arm)); + } +} + +// +// Do MemManage exception +// +void armMemoryAbort(armP arm, Uns32 faultAddress, memPriv priv) { + + // clear valid bits + SCS_FIELD(arm, CFSR, MMARVALID) = 0; + + // update fault status + if(priv==MEM_PRIV_X) { + SCS_FIELD(arm, CFSR, IACCVIOL) = 1; + } else if(arm->exceptionContext==AEC_PushStack) { + SCS_FIELD(arm, CFSR, MSTKERR) = 1; + } else if(arm->exceptionContext==AEC_PopStack) { + SCS_FIELD(arm, CFSR, MUNSTKERR) = 1; + } else { + SCS_FIELD(arm, CFSR, DACCVIOL) = 1; + SCS_FIELD(arm, CFSR, MMARVALID) = 1; + SCS_REG_UNS32(arm, MMAR) = faultAddress; + } + + // either take immediately or handle as a derived exception later + if(arm->executionPriority<0) { + arm->derivedException = AEN_MemManage; + lockup(arm, getPC(arm)); + } else if(arm->exceptionContext != AEC_None) { + arm->derivedException = AEN_MemManage; + if(arm->exceptionContext == AEC_PreserveFPState) { + // TODO: Remove this when this exception is fully modeled + vmiMessage("E", CPU_PREFIX "_LFPSPE", "Exceptions during lazy FP state preservation not supported yet"); + vmirtStop(); + } + } else { + startException(arm, AEN_MemManage, getPC(arm)); + } +} + +// +// Refresh execution priority on any state change which affects it +// +void armRefreshExecutionPriority(armP arm) { + + // refresh execution priority + Int32 oldPriority = arm->executionPriority; + refreshBoostedPriority(arm); + Int32 newPriority = arm->executionPriority; + + // if execution priority has been lowered, determine whether pending + // exception is now active + if((arm->pendingException!=AEN_None) && (newPriority>oldPriority)) { + + armExceptNum num = arm->pendingException; + Int32 priority = groupPriority(arm, num); + + if(priority %u (priority %d)\n", + arm->enabledException, num, priority + ); + } + + // save the highest-priority pending exception + arm->enabledException = num; + + // take exceptions now if required + takeExceptionNow(arm); + } + } +} + +// +// Refresh pending exception state on any state change which affects it +// +void armRefreshPendingException(armP arm) { + + // refresh pending exception + refreshPendingException(arm); + + // take exceptions now if required + takeExceptionNow(arm); +} + +// +// Refresh execution priority and pending exception state on any state change +// which affects them +// +void armRefreshExecutionPriorityPendingException(armP arm) { + + // refresh execution priority + refreshUnboostedPriority(arm); + refreshPendingException(arm); + + // take exceptions now if required + takeExceptionNow(arm); +} + + +//////////////////////////////////////////////////////////////////////////////// +// PRIVILEGE, ALIGNMENT AND FETCH EXCEPTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Read privilege exception handler +// +VMI_RD_PRIV_EXCEPT_FN(armRdPrivExceptionCB) { + + armP arm = (armP)processor; + Uns32 faultAddr = (Uns32)address; + memPriv priv = MEM_PRIV_R; + armVMAction action = armVMMiss(arm, priv, faultAddr, bytes, attrs); + + if(action == MA_OK) { + memDomainP domain = vmirtGetProcessorDataDomain(processor); + vmirtReadNByteDomain(domain, faultAddr, value, bytes, 0, attrs); + } +} + +// +// Write privilege exception handler +// +VMI_WR_PRIV_EXCEPT_FN(armWrPrivExceptionCB) { + + armP arm = (armP)processor; + Uns32 faultAddr = (Uns32)address; + memPriv priv = MEM_PRIV_W; + armVMAction action = armVMMiss(arm, priv, faultAddr, bytes, attrs); + + if(action == MA_OK) { + memDomainP domain = vmirtGetProcessorDataDomain(processor); + vmirtWriteNByteDomain(domain, faultAddr, value, bytes, 0, attrs); + } +} + +// +// Read alignment exception handler +// +VMI_RD_ALIGN_EXCEPT_FN(armRdAlignExceptionCB) { + + armP arm = (armP)processor; + + SCS_FIELD(arm, CFSR, UNALIGNED) = 1; + doAlign(arm); + + return 0; +} + +// +// Write alignment exception handler +// +VMI_WR_ALIGN_EXCEPT_FN(armWrAlignExceptionCB) { + + armP arm = (armP)processor; + + SCS_FIELD(arm, CFSR, UNALIGNED) = 1; + doAlign(arm); + + return 0; +} + +// +// Read abort exception handler (generated by calls to icmAbortRead in memory +// read callbacks) +// +VMI_RD_ABORT_EXCEPT_FN(armRdAbortExceptionCB) { + + armP arm = (armP)processor; + + if(isFetch) { + armBusFault(arm, address, MEM_PRIV_X); + } else { + armBusFault(arm, address, MEM_PRIV_R); + } +} + +// +// Write abort exception handler (generated by calls to icmAbortWrite in memory +// write callbacks) +// +VMI_WR_ABORT_EXCEPT_FN(armWrAbortExceptionCB) { + + armP arm = (armP)processor; + + armBusFault(arm, address, MEM_PRIV_W); +} + +// +// Validate instruction fetch from the passed address +// +static Bool validateFetchAddress( + armP arm, + Uns32 thisPC, + Uns32 snap, + Bool complete +) { + vmiProcessorP processor = (vmiProcessorP)arm; + memAccessAttrs attrs = complete ? MEM_AA_TRUE : MEM_AA_FALSE; + armVMAction action; + + if(vmirtIsExecutable(processor, thisPC)) { + + // no exception pending + return True; + + } else if((action=armVMMiss(arm, MEM_PRIV_X, thisPC, 2, attrs)) == MA_EXCEPTION) { + + // permission exception of some kind, handled by armVMMiss, so no + // further action required here. + return False; + + } else { + + // no exception pending + return True; + } +} + +// +// This is called by the simulator when fetching from an instruction address. +// It gives the model an opportunity to take an exception instead. +// +VMI_IFETCH_FN(armIFetchExceptionCB) { + + armP arm = (armP)processor; + Uns32 thisPC = (Uns32)address; + Uns32 snap = IN_THUMB_MODE(arm) ? 1 : 3; + armExceptNum exceptNum = exceptionEnabled(arm, inHandlerMode(arm)); + Bool fetchOK; + + if(exceptNum!=AEN_None) { + + // exception pending + fetchOK = False; + + if(!complete) { + + // no action + + } else if(!arm->sleepOnExit) { + + // update registers to complete exception if required + startException(arm, exceptNum, thisPC); + + } else { + + // restart after SCR.SLEEPONEXIT, taking tail-chained exception + arm->sleepOnExit = False; + + // indicate that we are entering the exception epilogue + arm->exceptionContext = AEC_PopStack; + arm->derivedException = AEN_None; + + // take tail-chained exception + takeException(arm, exceptNum); + + // indicate exception epilogue is no longer active + arm->exceptionContext = AEC_None; + } + + } else if(!IN_THUMB_MODE(arm)) { + + // unsupported ARM mode execution + fetchOK = False; + + // update registers to complete exception if required + if(complete) { + armUsageFault(arm, thisPC); + } + + } else if(!validateFetchAddress(arm, thisPC, snap, complete)) { + + // fetch exception (handled in validateFetchAddress) + fetchOK = False; + + } else if((thisPC+2) & (MIN_PAGE_SIZE-1)) { + + // simPC isn't two bytes before page end - success + fetchOK = True; + + } else if(armGetInstructionSize(arm, thisPC) == 2) { + + // instruction at simPC is a two-byte instruction - success + fetchOK = True; + + } else if(!validateFetchAddress(arm, thisPC+2, snap, complete)) { + + // fetch exception (handled in validateFetchAddress) + fetchOK = False; + + } else { + + // no exception + fetchOK = True; + } + + // return appropriate result + if(fetchOK) { + return VMI_FETCH_NONE; + } else if(complete) { + return VMI_FETCH_EXCEPTION_COMPLETE; + } else { + return VMI_FETCH_EXCEPTION_PENDING; + } +} + +// +// This is called by the simulator on a simulated arithmetic exception +// +VMI_ARITH_EXCEPT_FN(armArithExceptionCB) { + + armP arm = (armP)processor; + + if(exceptionContext==VMI_EXCEPT_CXT_CALL) { + + // not expecting any arithmetic exceptions in calls from morphed code + return VMI_NUMERIC_UNHANDLED; + + } else switch(exceptionType) { + + case VMI_INTEGER_DIVIDE_BY_ZERO: + // handle divide-by-zero + if(SCS_FIELD(arm, CCR, DIV_0_TRP)) { + SCS_FIELD(arm, CFSR, DIVBYZERO) = 1; + armUsageFault(arm, getPC(arm)); + } else { + arm->regs[arm->divideTarget] = 0; + } + return VMI_NUMERIC_ABORT; + + case VMI_INTEGER_OVERFLOW: + // handle overflow (MIN_INT / -1) + arm->regs[arm->divideTarget] = 0x80000000; + return VMI_NUMERIC_ABORT; + + default: + // not expecting any other arithmetic exception types + return VMI_NUMERIC_UNHANDLED; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// TICK TIMER +//////////////////////////////////////////////////////////////////////////////// + +// +// Return lower 32 bits of the instruction count +// +inline static Uns64 getThisICount(armP arm) { + return vmirtGetICount((vmiProcessorP)arm); +} + +// +// Is the tick timer enabled? +// +static Bool timerEnabled(armP arm) { + return ( + !arm->disableTimerRVR0 && + SCS_FIELD(arm, SYST_CSR, ENABLE) && + SCS_FIELD(arm, SYST_CSR, CLKSOURCE) + ); +} + +// +// Must the model timer be set? +// +static Bool setModelTimer(armP arm) { + return ( + timerEnabled(arm) && + ( + // must set model timer if SysTick interrupt is enabled + SCS_FIELD(arm, SYST_CSR, TICKINT) || + // must set model timer if COUNTFLAG must be set on wrap + !SCS_FIELD(arm, SYST_CSR, COUNTFLAG) || + // must set model timer if reset value will change from before + (SCS_REG_UNS32(arm, SYST_RVR) != (arm->timerModulus-1)) + ) + ); +} + +// +// Return calculated SYST_CVR register value +// +static Uns32 getSYST_CVR(armP arm) { + + if(timerEnabled(arm)) { + + Uns64 current = getThisICount(arm); + Uns32 timerModulus = arm->timerModulus; + Uns32 delta = (current-arm->timerBase) % timerModulus; + + return delta ? timerModulus-delta : 0; + + } else { + + return SCS_REG_UNS32(arm, SYST_CVR); + } +} + +// +// Set SYST_CVR register value, enabling interrupts if required +// +static void setSYST_CVR(armP arm, Uns32 SYST_CVR) { + + Uns32 SYST_RVR = SCS_REG_UNS32(arm, SYST_RVR); + + // if both SYST_CVR and SYST_RVR are zero, timer is disabled + arm->disableTimerRVR0 = !(SYST_CVR || SYST_RVR); + + if(timerEnabled(arm)) { + + // allow for reset to SYST_RVR on decrement through zero + if(!SYST_CVR) { + SYST_CVR = arm->timerModulus = SYST_RVR+1; + } + + // set base instruction count + arm->timerBase = getThisICount(arm) - arm->timerModulus + SYST_CVR; + + } else { + + // timer stopped, record current value + SCS_REG_UNS32(arm, SYST_CVR) = SYST_CVR; + } + + // set model interrupt if required + if(setModelTimer(arm)) { + + Uns32 timerDelta = SYST_CVR-1; + + // show tick timer timeout delta + if(ARM_DEBUG_EXCEPT(arm)) { + vmiPrintf( + "Tick timer expiry scheduled in %u instructions\n", + timerDelta + ); + } + + vmirtSetICountInterrupt((vmiProcessorP)arm, timerDelta); + + } else { + + vmirtClearICountInterrupt((vmiProcessorP)arm); + } +} + +// +// Read SYST_CVR register +// +Uns32 armReadSYST_CVR(armP arm) { + return getSYST_CVR(arm); +} + +// +// Write SYST_CVR register +// +void armWriteSYST_CVR(armP arm, Uns32 newValue) { + + // SYST_CSR.COUNTFLAG is cleared by a write to SYST_CVR + SCS_FIELD(arm, SYST_CSR, COUNTFLAG) = 0; + + // set new count value, accounting for pending exceptions + setSYST_CVR(arm, newValue); +} + +// +// Read SYST_CSR register +// +Uns32 armReadSYST_CSR(armP arm) { + + Uns32 oldValue = SCS_REG_UNS32(arm, SYST_CSR); + + // action only required if SYST_CSR.COUNTFLAG is set + if(SCS_FIELD(arm, SYST_CSR, COUNTFLAG)) { + + // get current value of count register prior to SYST_CSR update + Uns32 SYST_CVR = getSYST_CVR(arm); + + // SYST_CSR.COUNTFLAG is cleared by a read of SYST_CSR + SCS_FIELD(arm, SYST_CSR, COUNTFLAG) = 0; + + // restore original count value, accounting for pending exceptions + setSYST_CVR(arm, SYST_CVR); + } + + return oldValue; +} + +// +// Write SYST_CSR register +// +void armWriteSYST_CSR(armP arm, Uns32 newValue) { + + // get current value of count register prior to SYST_CSR update + Uns32 SYST_CVR = getSYST_CVR(arm); + Uns32 oldValue = SCS_REG_UNS32(arm, SYST_CSR); + + // update the register + SCS_REG_UNS32(arm, SYST_CSR) = ( + (oldValue & ~SCS_WRITE_MASK_SYST_CSR) | + (newValue & SCS_WRITE_MASK_SYST_CSR) + ); + + // restore original count value, accounting for pending exceptions + setSYST_CVR(arm, SYST_CVR); +} + +// +// Write SYST_RVR register +// +void armWriteSYST_RVR(armP arm, Uns32 newValue) { + + // mask to allowed range + newValue &= SCS_WRITE_MASK_SYST_RVR; + + // action only required if SYST_RVR has changed + if(newValue != SCS_REG_UNS32(arm, SYST_RVR)) { + + // get current value of count register prior to SYST_CSR update + Uns32 SYST_CVR = getSYST_CVR(arm); + + // update the register + SCS_REG_UNS32(arm, SYST_RVR) = newValue; + + // restore original count value, accounting for pending exceptions + setSYST_CVR(arm, SYST_CVR); + } +} + +// +// This is called when the tick timer has expired. It should set the interrupt +// pending bit for this exception. The exception is subsequently handled in the +// instruction fetch handler, armIFetchExceptionCB. +// +VMI_ICOUNT_FN(armICountPendingCB) { + + armP arm = (armP)processor; + Uns32 SYST_RVR = SCS_REG_UNS32(arm, SYST_RVR); + + // report tick timer expiry + if(ARM_DEBUG_EXCEPT(arm)) { + vmiPrintf("Tick timer expired\n"); + } + + // sanity check that the timer is enabled + VMI_ASSERT(timerEnabled(arm), "timer interrupt, but timer was disabled"); + + // indicate timer has expired + SCS_FIELD(arm, SYST_CSR, COUNTFLAG) = 1; + + // if interrupt generation is enabled, raise SysTick exception + if(SCS_FIELD(arm, SYST_CSR, TICKINT)) { + raiseNow(arm, AEN_SysTick); + } + + // this is the length of the countdown timer cycle + arm->timerModulus = SYST_RVR+1; + + // schedule the next interrupt event, including one instruction from this + // cycle + setSYST_CVR(arm, SYST_RVR ? arm->timerModulus+1 : 0); +} + + +//////////////////////////////////////////////////////////////////////////////// +// EXTERNAL INTERRUPTS +//////////////////////////////////////////////////////////////////////////////// + +// +// Called by the simulator when an external reset is raised +// +static VMI_NET_CHANGE_FN(externalReset) { + raiseNow((armP)processor, AEN_Reset); +} + +// +// Called by the simulator when an external reset is raised +// +static VMI_NET_CHANGE_FN(externalNMI) { + raiseNow((armP)processor, AEN_NMI); +} + + +static void externalInterrupt(armP arm, Uns32 intNum, Bool raise) { + + armExceptNum exceptNum = intNum+16; + + if(intNum>=NUM_INTERRUPTS(arm)) { + + // interrupt out of range + vmiMessage("W", CPU_PREFIX "NET", + "ARM external interrupt ID is %u but must be 0..%u - ignored", + intNum, NUM_INTERRUPTS(arm)-1 + ); + + } else if(raise) { + + // interrupt being raised + raiseNow(arm, exceptNum); + + } else { + + // interrupt being lowered + lower(arm, exceptNum); + } +} + +// +// Called by the simulator when an external scalar interrupt is raised. +// In this model the net value is either zero (low) or non-zero (high) +// + +static VMI_NET_CHANGE_FN(externalScalarInterrupt) { + + armP arm = (armP)processor; + UnsPS intNum = (UnsPS)userData; + + externalInterrupt(arm, intNum, newValue); +} + +// +// Called by the simulator when an external vector interrupt is raised. +// In this model the value encodes the interrupt number in bits 31-1, +// and the level in bit0. The model ignores an interrupt number if too big. +// +static VMI_NET_CHANGE_FN(externalVectorInterrupt) { + + armP arm = (armP)processor; + Uns32 intNum = (newValue>>1); + Bool raise = newValue&1; + + externalInterrupt(arm, intNum, raise); +} + +// +// Called by the simulator when an external memory prefetch abort is raised +// +static VMI_NET_CHANGE_FN(externalPAbort) { + armBusFault((armP)processor, 0, MEM_PRIV_X); +} + +// +// Called by the simulator when an external memory data abort is raised +// +static VMI_NET_CHANGE_FN(externalDAbort) { + // TODO : newValue needs to be the (data) address that failed + armBusFault((armP)processor, newValue, MEM_PRIV_RW); +} + +// +// Called by the simulator when an external event is raised +// +static VMI_NET_CHANGE_FN(externalEvent) { + setEventRegister((armP)processor); +} + +// +// Raise an exception +// +void armRaise(armP arm, armExceptNum num) { + raiseNow(arm, num); +} + +// +// Perform SEV instruction actions +// +void armSEV(armP arm) { + writeNet(arm, arm->eventOut, 1); +} + + +//////////////////////////////////////////////////////////////////////////////// +// NET PORTS +//////////////////////////////////////////////////////////////////////////////// + +// +// Return number of members of an array +// +#define NUM_MEMBERS(_A) (sizeof(_A)/sizeof((_A)[0])) + +// +// Create port specifications +// +void armNewPortSpecs(armP arm) { + + // declare template port structure for fixed ports + vmiNetPort template[] = { + + // output ports + {"sysResetReq",vmi_NP_OUTPUT, (void*)0, 0, &arm->sysResetReq }, + {"intISS", vmi_NP_OUTPUT, (void*)0, 0, &arm->intISS }, + {"eventOut", vmi_NP_OUTPUT, (void*)0, 0, &arm->eventOut }, + {"lockup", vmi_NP_OUTPUT, (void*)0, 0, &arm->lockup }, + + // input ports + {"int", vmi_NP_INPUT, (void*)2, externalVectorInterrupt }, + {"reset", vmi_NP_INPUT, (void*)0, externalReset }, + {"nmi", vmi_NP_INPUT, (void*)0, externalNMI }, + {"pabort", vmi_NP_INPUT, (void*)0, externalPAbort }, + {"dabort", vmi_NP_INPUT, (void*)0, externalDAbort }, + {"eventIn", vmi_NP_INPUT, (void*)0, externalEvent }, + }; + + // calculate number of members + Uns32 numFixed = NUM_MEMBERS(template); + Uns32 numInterrupts = NUM_INTERRUPTS(arm); + Uns32 i; + + // allocate permanent port structure (including terminator) + vmiNetPortP result = STYPE_CALLOC_N(vmiNetPort, numFixed+numInterrupts+1); + + // fill fixed members, replacing names with an allocated copy + for(i=0; iname = strdup(netName); + this->type = vmi_NP_INPUT; + this->userData = (void*)(UnsPS)i; + this->netChangeCB = externalScalarInterrupt; + } + + // save ports on processor + arm->netPorts = result; +} + +// +// Free net port list +// +void armFreePortSpecs(armP arm) { + + Uns32 i; + + for(i=0; arm->netPorts[i].name; i++) { + STYPE_FREE(arm->netPorts[i].name); + } + + STYPE_FREE(arm->netPorts); +} + +// +// Get the next net port +// +VMI_NET_PORT_SPECS_FN(armGetNetPortSpec) { + + armP arm = (armP)processor; + vmiNetPortP this; + + if(!prev) { + this = arm->netPorts; + } else { + this = prev + 1; + } + + return this->name ? this : 0; +} + + +//////////////////////////////////////////////////////////////////////////////// +// FLOATING POINT SUPPORT +//////////////////////////////////////////////////////////////////////////////// + +// +// This is the ARM PreserveFPState primitive +// +void armPreserveFPState(armP arm) { + +// TODO: accesses need to be done at priv level indicated by FPCCR +// Bool isPriv = SCS_FIELD(arm, FPCCR, USER) == 0; + Uns32 fpFramePtr = SCS_REG_UNS32(arm, FPCAR); + memDomainP domain = arm->FPCARdomain; + + // Sanity checks + VMI_ASSERT(domain!=0, "FPCAR memory domain is NULL"); + VMI_ASSERT(SCS_FIELD(arm, FPCCR, LSPACT), "FPCCR.LSPACT not active"); + + // Clear FPCRdomain since it cannot be used again until LSPACT is set, + // and it will be reset at that time + arm->FPCARdomain = 0; + + // TODO: exceptions occurring during this routine need special handling + // For now just do an assertion if an exception occurs at this point + armExceptCxt oldContext = arm->exceptionContext; + arm->exceptionContext = AEC_PreserveFPState; + + // Push the floating point state onto the space allocated on the stack for it + pushFP(arm, fpFramePtr, domain); + + // Turn off the LSPACT flag + armUpdateLSPACT(arm, 0); + + // restore previous context + arm->exceptionContext = oldContext; + +} diff --git a/ovp/armmModel/armmMain.c b/ovp/armmModel/armmMain.c new file mode 100644 index 00000000..5fc8da5e --- /dev/null +++ b/ovp/armmModel/armmMain.c @@ -0,0 +1,284 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// standard header files +#include + +// VMI header files +#include "vmi/vmiAttrs.h" +#include "vmi/vmiCommand.h" +#include "vmi/vmiMessage.h" +#include "vmi/vmiRt.h" + +// model header files +#include "armConfig.h" +#include "armDecode.h" +#include "armDebug.h" +#include "armmDoc.h" +#include "armExceptions.h" +#include "armFunctions.h" +#include "armMode.h" +#include "armmParameters.h" +#include "armStructure.h" +#include "armSys.h" +#include "armSysRegisters.h" +#include "armUtils.h" +#include "armVM.h" +#include "armVFP.h" + +#include +// +// Prefix for messages from this module +// +#define CPU_PREFIX "ARM_MAIN" + +//////////////////////////////////////////////////////////////////////////////// +// PARSING CONFIGURATION OPTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Return processor configuration variant argument +// +static armConfigCP getConfigVariantArg(armP arm, armParamValuesP params) { + + armConfigCP match; + + if(params->SETBIT(variant)) { + + match = &armConfigTable[params->variant]; + + } else { + + match = armConfigTable; + + if(arm->verbose) { + + // report the value specified for an option in verbose mode + vmiMessage("I", CPU_PREFIX"_ANS1", + "Attribute '%s' not specified; defaulting to '%s'", + "variant", + match->name + ); + } + } + + // return matching configuration + return match; +} + +//////////////////////////////////////////////////////////////////////////////// +// CONSTRUCTOR AND DESTRUCTOR +//////////////////////////////////////////////////////////////////////////////// + +// specify default value for entire system register +#define SET_SCS_REG_DEFAULT(_R, _V) \ + union {Uns32 u32; SCS_REG_DECL(_R);} _U = {_V}; \ + SCS_REG_STRUCT_DEFAULT(arm, _R) = _U._R + +// +// Initialize processor exclusiveTagMask +// +static void setExclusiveTagMask(armP arm) { + arm->exclusiveTagMask = (-1 << (arm->configInfo.ERG+2)); +} + +void failSALset(unsigned int pointer); +// +// ARM processor constructor +// +VMI_CONSTRUCTOR_FN(armConstructor) { + + armP arm = (armP)processor; + armParamValuesP params = (armParamValuesP)parameterValues; + + + // initialize exclusive tag + arm->exclusiveTag = ARM_NO_TAG; + + // save flags on processor structure + arm->flags = vmirtProcessorFlags(processor); + + unsigned int failp = params->fail_salp; + failSALset(failp); + + + // get string configuration options + arm->simEx = simulateExceptions; + arm->verbose = params->verbose; + arm->compatMode = params->compatibility; + arm->showHiddenRegs = params->showHiddenRegs; + arm->UAL = params->UAL; + arm->disableBitBand = params->disableBitBand; + + // get default variant information + arm->configInfo = *getConfigVariantArg(arm, params); + + // override data endianness + armSetInitialEndian(arm, params->endian); + + // override instruction endianness + arm->instructionEndian = params->instructionEndian; + + // override other configuration values + if(params->SETBIT(override_debugMask)) { + arm->flags = params->override_debugMask; + } + if(params->SETBIT(override_CPUID)) { + SET_SCS_REG_DEFAULT(CPUID, params->override_CPUID); + } + if(params->SETBIT(override_MPU_TYPE)) { + SET_SCS_REG_DEFAULT(MPU_TYPE, params->override_MPU_TYPE); + } + if(params->SETBIT(override_InstructionAttributes0)) { + SET_SCS_REG_DEFAULT(ID_ISAR0, params->override_InstructionAttributes0); + } + if(params->SETBIT(override_InstructionAttributes1)) { + SET_SCS_REG_DEFAULT(ID_ISAR1, params->override_InstructionAttributes1); + } + if(params->SETBIT(override_InstructionAttributes2)) { + SET_SCS_REG_DEFAULT(ID_ISAR2, params->override_InstructionAttributes2); + } + if(params->SETBIT(override_InstructionAttributes3)) { + SET_SCS_REG_DEFAULT(ID_ISAR3, params->override_InstructionAttributes3); + } + if(params->SETBIT(override_InstructionAttributes4)) { + SET_SCS_REG_DEFAULT(ID_ISAR4, params->override_InstructionAttributes4); + } + if(params->SETBIT(override_InstructionAttributes5)) { + SET_SCS_REG_DEFAULT(ID_ISAR5, params->override_InstructionAttributes5); + } + if(params->SETBIT(override_MVFR0)) { + SET_SCS_REG_DEFAULT(MVFR0, params->override_MVFR0); + } + if(params->SETBIT(override_MVFR1)) { + SET_SCS_REG_DEFAULT(MVFR1, params->override_MVFR1); + } + if(params->SETBIT(override_rotateUnaligned)) { + arm->configInfo.rotateUnaligned = params->override_rotateUnaligned; + } + if(params->SETBIT(override_align64as32)) { + arm->configInfo.align64as32 = params->override_align64as32; + } + if(params->SETBIT(override_STRoffsetPC12)) { + arm->configInfo.STRoffsetPC12 = params->override_STRoffsetPC12; + } + if(params->SETBIT(override_ERG)) { + arm->configInfo.ERG = params->override_ERG; + } + if(params->SETBIT(override_priorityBits)) { + arm->configInfo.priorityBitsM1 = params->override_priorityBits-1; + } + if(params->SETBIT(override_numInterrupts)) { + NUM_INTERRUPTS(arm) = params->override_numInterrupts; + } + + // set read-only registers to their initial state (AFTER applying overrides) + armSysInitialize(arm); + + // register view objects and event handlers (AFTER armSysInitialize) + vmiViewObjectP viewObject = vmirtGetProcessorViewObject(processor); + armAddSysRegistersView(arm, viewObject); + + // Initialize FPU if present + armFPInitialize(arm); + + // Check for user enable of VFP instructions at reset? + if (params->SETBIT(enableVFPAtReset) && params->enableVFPAtReset) { + SCS_FIELD_DEFAULT(arm, CPACR, cp10) = 3; + SCS_FIELD_DEFAULT(arm, CPACR, cp11) = 3; + } + + // initialize exclusiveTagMask + setExclusiveTagMask(arm); + + // initialize priority mask + Uns32 priorityBits = PRIORITY_BITS(arm); + arm->priorityMask = ((1<priorityMask |= arm->priorityMask << 8; + arm->priorityMask |= arm->priorityMask << 16; + + // ensure number of external interrupts is in bounds + if(NUM_INTERRUPTS(arm)>ARM_INTERRUPT_NUM) { + NUM_INTERRUPTS(arm) = ARM_INTERRUPT_NUM; + } + + // initialize exception mask number and top mask + arm->exceptNum = NUM_INTERRUPTS(arm) + AEN_ExternalInt0; + arm->exceptMaskNum = (arm->exceptNum+31)/32; + + // indicate reset exception is pending; otherwise, force into Thumb mode + // (default is ARM mode) + if(!ARM_DISASSEMBLE(arm) && params->resetAtTime0) { + armRaise(arm, AEN_Reset); + } else { + IN_THUMB_MODE(arm) = 1; + } + + // reset stack pointer (and banked variants) in gdb compatibility mode + if(arm->compatMode==COMPAT_GDB) { + arm->regs[ARM_REG_SP] = 0x800; + arm->bank.R13_process = 0x800; + } + + // force into thumb mode if required + if(ARM_THUMB(arm)) { + IN_THUMB_MODE(arm) = 1; + } + + // set callbacks (for intercept libraries) + arm->decoderCB = armDecode; + arm->isizeCB = armGetInstructionSizeMode; + + // create port specifications + armNewPortSpecs(arm); + + // install documentation + armmDoc(processor, parameterValues); +} + +// +// ARM processor destructor +// +VMI_DESTRUCTOR_FN(armDestructor) { + + armP arm = (armP)processor; + + // free port specifications + armFreePortSpecs(arm); + + // free virtual memory structures + armVMFree(arm); +} + + diff --git a/ovp/armmModel/armmMorphFunctions.c b/ovp/armmModel/armmMorphFunctions.c new file mode 100644 index 00000000..44dcae38 --- /dev/null +++ b/ovp/armmModel/armmMorphFunctions.c @@ -0,0 +1,5141 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// VMI header files +#include "vmi/vmiMessage.h" + +// model header files +#include "armConfig.h" +#include "armDecode.h" +#include "armEmit.h" +#include "armExceptions.h" +#include "armFunctions.h" +#include "armMessage.h" +#include "armMorph.h" +#include "armMorphFunctions.h" +#include "armRegisters.h" +#include "armStructure.h" +#include "armUtils.h" +#include "armVariant.h" +#include "armVM.h" +#include "armVFP.h" + + +// +// Prefix for messages from this module +// +#define CPU_PREFIX "ARM_MORPH" + + +//////////////////////////////////////////////////////////////////////////////// +// EXCEPTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Generic exception callback +// +#define EXCEPTION_FN(_NAME) void _NAME(armP arm, Uns32 thisPC) +typedef EXCEPTION_FN((*exceptionFn)); + +// +// Emit call to exception function +// +static void emitExceptionCall(armMorphStateP state, exceptionFn cb) { + + Uns32 bits = ARM_GPR_BITS; + + // emit processor argument + armEmitArgProcessor(state); + armEmitArgSimPC(state, bits); + armEmitCall(state, (vmiCallFn)cb); + + // terminate the current block + armEmitEndBlock(); +} + + +//////////////////////////////////////////////////////////////////////////////// +// UNIMPLEMENTED/UNDEFINED INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Called for an unimplemented instruction +// +static void unimplemented(armP arm, Uns32 thisPC) { + + vmiMessage("F", CPU_PREFIX"_UII", + SRCREF_FMT "unimplemented instruction", + SRCREF_ARGS(arm, thisPC) + ); +} + +// +// Default morpher callback for unimplemented instructions +// +static void emitUnimplemented(armMorphStateP state) { + armEmitArgProcessor(state); + armEmitArgSimPC(state, ARM_GPR_BITS); + armEmitCall(state, (vmiCallFn)unimplemented); + armEmitExit(); +} + +// +// Called for UsageFault exception +// +static void usageFault(armP arm, Uns32 thisPC) { + + vmiMessage("E", CPU_PREFIX"_UDI", + SRCREF_FMT "usage fault - enable simulated exceptions " + "to continue simulation if this behavior is desired", + SRCREF_ARGS(arm, thisPC) + ); +} + +// +// Emit code for a UsageFault exception +// +static void emitUsageFault(armMorphStateP state, Uns32 reason) { + + Uns32 bits = ARM_GPR_BITS; + + // update UFSR (CFSR) + armEmitBinopRC(state, bits, vmi_OR, ARM_SCS_REG(SCS_ID(CFSR)), reason, 0); + + // handle UsageFault + if(state->arm->simEx) { + emitExceptionCall(state, armUsageFault); + } else { + armEmitArgProcessor(state); + armEmitArgSimPC(state, bits); + armEmitCall(state, (vmiCallFn)usageFault); + armEmitExit(); + } +} + +// +// Called for an instruction that isn't supported on this variant +// +static void notVariantMessage(armP arm, Uns32 thisPC) { + + vmiMessage("W", CPU_PREFIX"_NSV", + SRCREF_FMT "not supported on this variant", + SRCREF_ARGS(arm, thisPC) + ); +} + +// +// Morpher callback for instructions that are not valid on this processor +// variant +// +static ARM_MORPH_FN(emitNotVariant) { + + // report the offending instruction in verbose mode + if(state->arm->verbose) { + armEmitArgProcessor(state); + armEmitArgSimPC(state, ARM_GPR_BITS); + armEmitCall(state, (vmiCallFn)notVariantMessage); + } + + // take UsageFault exception + emitUsageFault(state, EXC_UNDEF_UNDEFINSTR); +} + +// +// Called for an undefined coprocessor instruction +// +static void undefinedCPMessage(armP arm, Uns32 thisPC) { + + vmiMessage("a", CPU_PREFIX"_UCA", + SRCREF_FMT "unsupported coprocessor access", + SRCREF_ARGS(arm, thisPC) + ); +} + + +//////////////////////////////////////////////////////////////////////////////// +// FLAGS +//////////////////////////////////////////////////////////////////////////////// + +const static vmiFlags flagsCIn = { + ARM_CF_CONST, + { + [vmi_CF] = VMI_NOFLAG_CONST, + [vmi_PF] = VMI_NOFLAG_CONST, + [vmi_ZF] = VMI_NOFLAG_CONST, + [vmi_SF] = VMI_NOFLAG_CONST, + [vmi_OF] = VMI_NOFLAG_CONST + } +}; + +const static vmiFlags flagsCOut = { + ARM_CF_CONST, + { + [vmi_CF] = ARM_CF_CONST, + [vmi_PF] = VMI_NOFLAG_CONST, + [vmi_ZF] = VMI_NOFLAG_CONST, + [vmi_SF] = VMI_NOFLAG_CONST, + [vmi_OF] = VMI_NOFLAG_CONST + } +}; + +// Macro accessors for flags +#define FLAGS_CIN &flagsCIn +#define FLAGS_COUT &flagsCOut + +// +// Return condition flags associated with an instruction, or null if no flags +// are applicable +// +static vmiFlagsCP getFlagsOrNull(armMorphStateP state) { + return state->info.f ? state->attrs->flagsRW : 0; +} + +// +// Return condition flags associated with an instruction, or FLAGS_CIN if no +// flags are applicable +// +static vmiFlagsCP getFlagsOrCIn(armMorphStateP state, vmiReg rd) { + if(!state->info.f) { + return state->attrs->flagsR; + } else if(!VMI_REG_EQUAL(rd, ARM_PC)) { + return state->attrs->flagsRW; + } else { + return state->attrs->flagsR; + } +} + +// +// If the instruction sets flags from the shifter output, return FLAGS_COUT +// +static vmiFlagsCP getShifterCOut(armMorphStateP state, vmiReg rd) { + if(!state->info.f) { + return FLAGS_CIN; + } else if(!state->attrs->shiftCOut) { + return FLAGS_CIN; + } else if(!VMI_REG_EQUAL(rd, ARM_PC)) { + return FLAGS_COUT; + } else { + return FLAGS_CIN; + } +} + +// +// Do the flags specify that the shifter sets the carry out? +// +inline static Bool shifterSetsCOut(vmiFlagsCP flags) { + return (flags==FLAGS_COUT); +} + +//////////////////////////////////////////////////////////////////////////////// +// REGISTER ACCESS UTILITIES +//////////////////////////////////////////////////////////////////////////////// + +// +// Register access macros +// +#define GET_RD(_S, _R) getRD(_S, _S->info._R) +#define GET_RS(_S, _R) getRS(_S, _S->info._R) + +// VFP register access macros +#define GET_VFP_REG(_S, _R, _SZ) getVFPReg((_S), (_S)->info._R, (_SZ)) +#define GET_VFP_SREG(_S, _R) getVFPReg((_S), (_S)->info._R, 4) +#define GET_VFP_DREG(_S, _R) getVFPReg((_S), (_S)->info._R, 8) +#define GET_VFP_SCALAR(_S, _R, _IDX) getVFPReg((_S), (2*((_S)->info._R))+(_IDX), 4) + +// +// Return vmiReg for GPR with the passed index +// NOTE: PC is a temporary, others are true registers +// +static vmiReg getGPR(armMorphStateP state, Uns32 index) { + return index==ARM_REG_PC ? ARM_PC : ARM_REG(index); +} + +// +// Return vmiReg for target GPR with the passed index +// +static vmiReg getRD(armMorphStateP state, Uns32 index) { + return getGPR(state, index); +} + +// +// Return vmiReg for source GPR with the passed index +// +static vmiReg getRS(armMorphStateP state, Uns32 index) { + + vmiReg r = getGPR(state, index); + + // ensure PC is created on demand if required + if(VMI_REG_EQUAL(r, ARM_PC)) { + armEmitGetPC(state); + } + + return r; +} + +// +// Return vmiReg object for low half of 32-bit register +// +inline static vmiReg getR32Lo(vmiReg reg32) { + return reg32; +} + +// +// Return vmiReg object for high half of 32-bit register +// +inline static vmiReg getR32Hi(vmiReg reg32) { + return VMI_REG_DELTA(reg32, sizeof(Uns16)); +} + +// +// Return vmiReg object for low half of 64-bit register +// +inline static vmiReg getR64Lo(vmiReg reg64) { + return reg64; +} + +// +// Return vmiReg object for high half of 64-bit register +// +inline static vmiReg getR64Hi(vmiReg reg64) { + return VMI_REG_DELTA(reg64, sizeof(Uns32)); +} + +// +// Return vmiReg for VFP register, addressed as a Single or Double precision +// +static vmiReg getVFPReg(armMorphStateP state, Uns32 regNum, Uns32 ebytes) { + + VMI_ASSERT(ebytes==2 || ebytes==4 || ebytes == 8, "Invalid VFP ebytes %d", ebytes); + + armP arm = state->arm; + vmiReg reg = VMI_NOREG; + Uns32 vfpRegisters = SCS_FIELD(arm, MVFR0, A_SIMD_Registers); + Uns32 numRegs = (vfpRegisters == 1) ? ARM_VFP16_REG_NUM : ARM_VFP32_REG_NUM; + + + if(!vfpRegisters) { + + // VFP Registers are not present + emitUsageFault(state, EXC_UNDEF_UNDEFINSTR); + + } else if((regNum*ebytes) >= (numRegs*ARM_VFP_REG_BYTES)) { + + // Register number is out of range of the implemented number of registers + emitUsageFault(state, EXC_UNDEF_UNDEFINSTR); + + } else { + + // get the indicated register + switch (ebytes) { + case 1: reg = ARM_BREG(regNum); break; + case 2: reg = ARM_HREG(regNum); break; + case 4: reg = ARM_WREG(regNum); break; + case 8: reg = ARM_DREG(regNum); break; + default: VMI_ABORT("Invalid ebytes %d", ebytes); + } + } + + return reg; +} + + +//////////////////////////////////////////////////////////////////////////////// +// INSTRUCTION SKIPPING UTILITIES +//////////////////////////////////////////////////////////////////////////////// + +// +// Save the skip label on the info structure +// +inline static void setSkipLabel(armMorphStateP state, vmiLabelP label) { + state->skipLabel = label; +} + +// +// Return the skip label on the info structure +// +inline static vmiLabelP getSkipLabel(armMorphStateP state) { + return state->skipLabel; +} + +// +// Insert a label +// +inline static void emitLabel(vmiLabelP label) { + + if(label) { + armEmitInsertLabel(label); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// MISCELLANEOUS UTILITIES +//////////////////////////////////////////////////////////////////////////////// + +// +// Return the version of the instruction set implemented by the processor +// +inline static Uns32 getInstructionVersion(armP arm) { + return ARM_INSTRUCTION_VERSION(arm->configInfo.arch); +} + +// +// Return the constant value adjusted so that when added to the PC the result +// is always word aligned +// +inline static Uns32 alignConstWithPC(armMorphStateP state, Uns32 c) { + return c - (state->info.thisPC & 2); +} + + +//////////////////////////////////////////////////////////////////////////////// +// TEMPORARIES +//////////////////////////////////////////////////////////////////////////////// + +// +// Get the current active temporary +// +inline static vmiReg getTemp(armMorphStateP state) { + VMI_ASSERT(state->tempIdxtempIdx); +} + +// +// Allocate a new 32-bit temporary +// +inline static vmiReg newTemp32(armMorphStateP state) { + vmiReg temp = getTemp(state); + state->tempIdx++; + return temp; +} + +// +// Free a 32-bit temporary +// +inline static void freeTemp32(armMorphStateP state) { + VMI_ASSERT(state->tempIdx, "%s: temporary overflow", FUNC_NAME); + state->tempIdx--; +} + +// +// Allocate a new 64-bit temporary +// +inline static vmiReg newTemp64(armMorphStateP state) { + vmiReg temp = newTemp32(state); newTemp32(state); + return temp; +} + +// +// Free a 64-bit temporary +// +inline static void freeTemp64(armMorphStateP state) { + freeTemp32(state); freeTemp32(state); +} + +// +// Allocate a new 128-bit temporary +// +inline static vmiReg newTemp128(armMorphStateP state) { + vmiReg temp = newTemp64(state); newTemp64(state); + return temp; +} + +// +// Free a 128-bit temporary +// +inline static void freeTemp128(armMorphStateP state) { + freeTemp64(state); freeTemp64(state); +} + +//////////////////////////////////////////////////////////////////////////////// +// TEMPORARY FLAGS +//////////////////////////////////////////////////////////////////////////////// + +// +// Return vmiFlags generating sign and overflow in temporary +// +static vmiFlags getSFOFFlags(vmiReg tf) { + + vmiFlags flags = VMI_NOFLAGS; + + // define overflow and sign flags + vmiReg of = tf; + vmiReg sf = VMI_REG_DELTA(of, 1); + + // define vmiFlags structure using the overflow and sign flags + flags.f[vmi_SF] = sf; + flags.f[vmi_OF] = of; + + // return vmiFlags structure + return flags; +} + +// +// Return vmiFlags generating overflow in temporary +// +static vmiFlags getOFFlags(vmiReg tf) { + + vmiFlags flags = VMI_NOFLAGS; + + // define vmiFlags structure using the overflow flag + flags.f[vmi_OF] = tf; + + // return vmiFlags structure + return flags; +} + +// +// Return vmiFlags generating zero flag in temporary +// +static vmiFlags getZFFlags(vmiReg tf) { + + vmiFlags flags = VMI_NOFLAGS; + + // define vmiFlags structure using the carry flag + flags.f[vmi_ZF] = tf; + + // return vmiFlags structure + return flags; +} + +// +// Return vmiFlags generating and using carry in temporary +// +static vmiFlags getCFFlags(vmiReg tf) { + + vmiFlags flags = VMI_NOFLAGS; + + // define vmiFlags structure using the carry flag + flags.cin = tf; + flags.f[vmi_CF] = tf; + + // return vmiFlags structure + return flags; +} + +//////////////////////////////////////////////////////////////////////////////// +// CONDITIONAL INSTRUCTION EXECUTION +//////////////////////////////////////////////////////////////////////////////// + +// +// For conditions, this enumeration describes the circumstances under which the +// condition is satisfied +// +typedef enum armCondOpE { + ACO_ALWAYS = 0, // condition always True + ACO_FALSE = 1, // condition satisfied if flag unset + ACO_TRUE = 2, // condition satisfied if flag set +} armCondOp; + +// +// For conditions, this structure describes a flag and a value for a match +// +typedef struct armCondS { + vmiReg flag; + armCondOp op; +} armCond, *armCondP; + +// +// Emit code to prepare a conditional operation and return an armCond structure +// giving the offset of a flag to compare against +// +static armCond emitPrepareCondition(armMorphStateP state) { + + const static armCond condTable[ARM_C_LAST] = { + [ARM_C_EQ] = {ARM_ZF_CONST, ACO_TRUE }, // ZF==1 + [ARM_C_NE] = {ARM_ZF_CONST, ACO_FALSE }, // ZF==0 + [ARM_C_CS] = {ARM_CF_CONST, ACO_TRUE }, // CF==1 + [ARM_C_CC] = {ARM_CF_CONST, ACO_FALSE }, // CF==0 + [ARM_C_MI] = {ARM_NF_CONST, ACO_TRUE }, // NF==1 + [ARM_C_PL] = {ARM_NF_CONST, ACO_FALSE }, // NF==0 + [ARM_C_VS] = {ARM_VF_CONST, ACO_TRUE }, // VF==1 + [ARM_C_VC] = {ARM_VF_CONST, ACO_FALSE }, // VF==0 + [ARM_C_HI] = {ARM_HI_CONST, ACO_TRUE }, // (CF==1) && (ZF==0) + [ARM_C_LS] = {ARM_HI_CONST, ACO_FALSE }, // (CF==0) || (ZF==1) + [ARM_C_GE] = {ARM_LT_CONST, ACO_FALSE }, // NF==VF + [ARM_C_LT] = {ARM_LT_CONST, ACO_TRUE }, // NF!=VF + [ARM_C_GT] = {ARM_LE_CONST, ACO_FALSE }, // (ZF==0) && (NF==VF) + [ARM_C_LE] = {ARM_LE_CONST, ACO_TRUE }, // (ZF==1) || (NF!=VF) + [ARM_C_AL] = {VMI_NOREG, ACO_ALWAYS}, // always + [ARM_C_NV] = {VMI_NOREG, ACO_ALWAYS} // always (historically never) + }; + + // get the table entry corresponding to the instruction condition + armCond cond = condTable[state->info.cond]; + vmiReg tf = cond.flag; + armP arm = state->arm; + + switch(state->info.cond) { + + case ARM_C_AL: + case ARM_C_NV: + // unconditional execution + break; + + case ARM_C_EQ: + case ARM_C_NE: + case ARM_C_CS: + case ARM_C_CC: + case ARM_C_MI: + case ARM_C_PL: + case ARM_C_VS: + case ARM_C_VC: + // basic flags, always valid + break; + + case ARM_C_GT: // (ZF==0) && (NF==VF) + case ARM_C_LE: // (ZF==1) || (NF!=VF) + // derived LE flag + if(!arm->validLE) { + arm->validLE = True; + armEmitBinopRRR(state, 8, vmi_XOR, tf, ARM_NF, ARM_VF, 0); + armEmitBinopRR(state, 8, vmi_OR, tf, ARM_ZF, 0); + } + break; + + case ARM_C_GE: // NF==VF + case ARM_C_LT: // NF!=VF + // derived LT flag + if(!arm->validLT) { + arm->validLT = True; + armEmitBinopRRR(state, 8, vmi_XOR, tf, ARM_NF, ARM_VF, 0); + } + break; + + case ARM_C_HI: // (CF==1) && (ZF==0) + case ARM_C_LS: // (CF==0) || (ZF==1) + // derived HI flag + if(!arm->validHI) { + arm->validHI = True; + armEmitBinopRRR(state, 8, vmi_ANDN, tf, ARM_CF, ARM_ZF, 0); + } + break; + + default: + // not reached + VMI_ABORT("%s: unimplemented condition", FUNC_NAME); + } + + // return the condition description + return cond; +} + +// +// Create code to jump to a new label if the instruction is conditional +// +static vmiLabelP emitStartSkip(armMorphStateP state) { + + armCond cond = emitPrepareCondition(state); + vmiLabelP doSkip = 0; + + if(cond.op!=ACO_ALWAYS) { + doSkip = armEmitNewLabel(); + armEmitCondJumpLabel(cond.flag, cond.op==ACO_FALSE, doSkip); + } + + return doSkip; +} + +// +// Force all derived flag values to be regenerated +// +static void resetDerivedFlags(armMorphStateP state) { + + armP arm = state->arm; + + arm->validHI = False; + arm->validLT = False; + arm->validLE = False; +} + + +//////////////////////////////////////////////////////////////////////////////// +// ARGUMENT GENERATION +//////////////////////////////////////////////////////////////////////////////// + +// +// Map from armShiftOp to vmiBinop +// +static vmiBinop mapShiftOp(armShiftOp so) { + switch(so) { + case ARM_SO_LSL: return vmi_SHL; + case ARM_SO_LSR: return vmi_SHR; + case ARM_SO_ASR: return vmi_SAR; + case ARM_SO_ROR: return vmi_ROR; + default: VMI_ABORT("%s: unimplemented case", FUNC_NAME); return 0; + } +} + +// +// Generate register argument by shifting register 'ra' by constant, placing +// result in register 't' +// +static void getShiftedRC( + armMorphStateP state, + vmiReg t, + vmiReg ra, + vmiFlagsCP shiftCOut +) { + Uns32 shift = state->info.c; + vmiBinop op = mapShiftOp(state->info.so); + + armEmitBinopRRC(state, ARM_GPR_BITS, op, t, ra, shift, shiftCOut); +} + +// +// Generate register argument by shifting register 'ra' by register 'rs', +// placing result in register 't' +// +static void getShiftedRR( + armMorphStateP state, + vmiReg t, + vmiReg ra, + vmiReg rs, + vmiFlagsCP shiftCOut +) { + vmiBinop op = mapShiftOp(state->info.so); + + armEmitSetShiftMask(); + armEmitBinopRRR(state, ARM_GPR_BITS, op, t, ra, rs, shiftCOut); +} + +// +// Generate register argument by rotate right of register 'ra' through carry +// +static void getExtendedR( + armMorphStateP state, + vmiReg t, + vmiReg ra, + vmiFlagsCP shiftCOut +) { + armEmitBinopRRC(state, ARM_GPR_BITS, vmi_RCR, t, ra, 1, shiftCOut); +} + + +//////////////////////////////////////////////////////////////////////////////// +// UNOPS +//////////////////////////////////////////////////////////////////////////////// + +#define vmiFlagsCPU vmiFlagsCP __attribute__ ((unused)) + +// +// Macro for emission of declarations for generic unop +// +#define EMIT_UNOP_DECLS(_S) \ + vmiReg rd = GET_RD(_S, r1); \ + vmiUnop op = _S->attrs->unop; \ + vmiFlagsCP opFlags = getFlagsOrCIn(_S, rd); \ + vmiFlagsCPU shiftCOut = getShifterCOut(_S, rd) + +// +// Macro for emission of call implementing generic unop +// +#define EMIT_UNOP_CALL(_S, _F, _S1) \ + _F(_S, ARM_GPR_BITS, op, rd, _S1, opFlags) + +// +// Macro for emission of generic unop with unshifted argument +// +#define EMIT_UNOP_NO_SHIFT(_S, _F, _S1) \ + EMIT_UNOP_DECLS(_S); \ + EMIT_UNOP_CALL(_S, _F, _S1) + +// +// Macro for emission of generic unop with shifted argument +// +#define EMIT_UNOP_SHIFT(_S, _T) \ + EMIT_UNOP_DECLS(_S); \ + _T; \ + EMIT_UNOP_CALL(_S, armEmitUnopRR, rd); + +// +// Unop with immediate +// +ARM_MORPH_FN(armEmitUnopI) { + + Uns32 c = state->info.c; + + // emit register/constant unop with unshifted argument + EMIT_UNOP_NO_SHIFT(state, armEmitUnopRC, c); + + // set carry from bit 31 of rotated constant if constant rotation was + // non-zero + if(shifterSetsCOut(shiftCOut) && state->info.crotate) { + armEmitMoveRC(state, 8, ARM_CF, (c & 0x80000000) ? 1 : 0); + } +} + +// +// Unop with register +// +ARM_MORPH_FN(armEmitUnopR) { + EMIT_UNOP_NO_SHIFT(state, armEmitUnopRR, GET_RS(state, r2)); +} + +// +// Unop with register shifted by immediate addressing mode +// +ARM_MORPH_FN(armEmitUnopRSI) { + EMIT_UNOP_SHIFT( + state, + getShiftedRC(state, rd, GET_RS(state, r2), shiftCOut) + ); +} + +// +// Unop with register shifted by register addressing mode +// +ARM_MORPH_FN(armEmitUnopRSR) { + EMIT_UNOP_SHIFT( + state, + getShiftedRR(state, rd, GET_RS(state, r2), GET_RS(state, r3), shiftCOut) + ); +} + +// +// Unop with register shifted by register addressing mode (Thumb variant) +// +ARM_MORPH_FN(armEmitUnopRSRT) { + EMIT_UNOP_SHIFT( + state, + getShiftedRR(state, rd, GET_RS(state, r1), GET_RS(state, r2), shiftCOut) + ); +} + +// +// Unop with rotate right with extend addressing mode +// +ARM_MORPH_FN(armEmitUnopRX) { + EMIT_UNOP_SHIFT( + state, + getExtendedR(state, rd, GET_RS(state, r2), shiftCOut) + ); +} + + +//////////////////////////////////////////////////////////////////////////////// +// BINOPS +//////////////////////////////////////////////////////////////////////////////// + +// +// Macro for emission of declarations for generic binop +// +#define EMIT_BINOP_DECLS(_S, _S1) \ + vmiReg rd = GET_RD(_S, r1); \ + vmiReg rs1 = GET_RS(_S, _S1); \ + vmiBinop op = _S->attrs->binop; \ + vmiFlagsCP opFlags = getFlagsOrCIn(_S, rd); \ + vmiFlagsCPU shiftCOut = getShifterCOut(_S, rd) + +// +// Macro for emission of call implementing generic binop +// +#define EMIT_BINOP_CALL(_S, _F, _S2) \ + _F(_S, ARM_GPR_BITS, op, rd, rs1, _S2, opFlags) + +// +// Macro for emission of generic binop with unshifted argument +// +#define EMIT_BINOP_NO_SHIFT(_S, _F, _S1, _S2) \ + EMIT_BINOP_DECLS(_S, _S1); \ + EMIT_BINOP_CALL(_S, _F, _S2) + +// +// Macro for emission of generic binop with shifted argument +// +#define EMIT_BINOP_SHIFT(_S, _S1, _RS2, _T) \ + EMIT_BINOP_DECLS(_S, _S1); \ + vmiReg _RS2 = newTemp32(_S); \ + _T; \ + EMIT_BINOP_CALL(_S, armEmitBinopRRR, _RS2); \ + freeTemp32(_S) + +// +// Binop with immediate +// +ARM_MORPH_FN(armEmitBinopI) { + + Uns32 c = state->info.c; + + // emit register/constant binop with unshifted argument + EMIT_BINOP_NO_SHIFT(state, armEmitBinopRRC, r2, c); + + // set carry from bit 31 of rotated constant if constant rotation was + // non-zero + if(shifterSetsCOut(shiftCOut) && state->info.crotate) { + armEmitMoveRC(state, 8, ARM_CF, (c & 0x80000000) ? 1 : 0); + } +} + +// +// Binop with three registers +// +ARM_MORPH_FN(armEmitBinopR) { + EMIT_BINOP_NO_SHIFT(state, armEmitBinopRRR, r2, GET_RS(state, r3)); +} + +// +// Binop with two registers (Thumb variant) +// +ARM_MORPH_FN(armEmitBinopRT) { + EMIT_BINOP_NO_SHIFT(state, armEmitBinopRRR, r1, GET_RS(state, r2)); +} + +// +// Binop with register and immediate (Thumb variant) +// +ARM_MORPH_FN(armEmitBinopIT) { + EMIT_BINOP_NO_SHIFT(state, armEmitBinopRRC, r1, state->info.c); +} + +// +// Binop with register, program counter and immediate (ADR) +// +ARM_MORPH_FN(armEmitBinopADR) { + Uns32 c = state->attrs->negate ? -state->info.c : state->info.c; + EMIT_BINOP_NO_SHIFT(state, armEmitBinopRRC, r2, alignConstWithPC(state, c)); +} + +// +// Binop with register shifted by immediate addressing mode +// +ARM_MORPH_FN(armEmitBinopRSI) { + EMIT_BINOP_SHIFT( + state, r2, rs2, + getShiftedRC(state, rs2, GET_RS(state, r3), shiftCOut) + ); +} + +// +// Binop with rotate right with extend addressing mode +// +ARM_MORPH_FN(armEmitBinopRX) { + EMIT_BINOP_SHIFT( + state, r2, rs2, + getExtendedR(state, rs2, GET_RS(state, r3), shiftCOut) + ); +} + + +//////////////////////////////////////////////////////////////////////////////// +// CMPOPS +//////////////////////////////////////////////////////////////////////////////// + +// +// Macro for emission of declarations for generic cmpop +// +#define EMIT_CMPOP_DECLS(_S) \ + vmiReg rd = VMI_NOREG; \ + vmiReg rs1 = GET_RS(_S, r1); \ + vmiBinop op = _S->attrs->binop; \ + vmiFlagsCP opFlags = getFlagsOrCIn(_S, rd); \ + vmiFlagsCPU shiftCOut = getShifterCOut(_S, rd) + +// +// Macro for emission of call implementing generic cmpop +// +#define EMIT_CMPOP_CALL(_S, _F, _S2) \ + _F(_S, ARM_GPR_BITS, op, rd, rs1, _S2, opFlags) + +// +// Macro for emission of generic cmpop with unshifted argument +// +#define EMIT_CMPOP_NO_SHIFT(_S, _F, _S2) \ + EMIT_CMPOP_DECLS(_S); \ + EMIT_CMPOP_CALL(_S, _F, _S2) + +// +// Macro for emission of generic cmpop with shifted argument +// +#define EMIT_CMPOP_SHIFT(_S, _RS2, _T) \ + EMIT_CMPOP_DECLS(_S); \ + vmiReg _RS2 = newTemp32(_S); \ + _T; \ + EMIT_CMPOP_CALL(_S, armEmitBinopRRR, _RS2); \ + freeTemp32(_S) + +// +// Cmpop with immediate +// +ARM_MORPH_FN(armEmitCmpopI) { + + Uns32 c = state->info.c; + + // emit register/constant cmpop with unshifted argument + EMIT_CMPOP_NO_SHIFT(state, armEmitBinopRRC, c); + + // set carry from bit 31 of rotated constant if constant rotation was + // non-zero + if(shifterSetsCOut(shiftCOut) && state->info.crotate) { + armEmitMoveRC(state, 8, ARM_CF, (c & 0x80000000) ? 1 : 0); + } +} + +// +// Cmpop with register +// +ARM_MORPH_FN(armEmitCmpopR) { + EMIT_CMPOP_NO_SHIFT(state, armEmitBinopRRR, GET_RS(state, r2)); +} + +// +// Cmpop with register shifted by immediate addressing mode +// +ARM_MORPH_FN(armEmitCmpopRSI) { + EMIT_CMPOP_SHIFT( + state, rs2, + getShiftedRC(state, rs2, GET_RS(state, r2), shiftCOut) + ); +} + +// +// Cmpop with rotate right with extend addressing mode +// +ARM_MORPH_FN(armEmitCmpopRX) { + EMIT_CMPOP_SHIFT( + state, rs2, + getExtendedR(state, rs2, GET_RS(state, r2), shiftCOut) + ); +} + + +//////////////////////////////////////////////////////////////////////////////// +// MULTIPLY AND DIVIDE INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Emit code for MUL instruction +// +ARM_MORPH_FN(armEmitMUL) { + + vmiFlagsCP flags = getFlagsOrNull(state); + vmiReg rd = GET_RD(state, r1); + vmiReg rm = GET_RS(state, r2); + vmiReg rs = GET_RS(state, r3); + + armEmitBinopRRR(state, ARM_GPR_BITS, vmi_IMUL, rd, rm, rs, flags); +} + +// +// Emit code for SDIV and UDIV instructions +// +ARM_MORPH_FN(armEmitDIV) { + + vmiBinop op = state->attrs->binop; + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + vmiReg rm = GET_RS(state, r3); + + // record the target of the divide instruction (in case of exception) + armEmitMoveRC(state, 8, ARM_DIVIDE_TARGET, state->info.r1); + armEmitBinopRRR(state, ARM_GPR_BITS, op, rd, rn, rm, 0); +} + +// +// Emit code for MLA or MLS instructions +// +static void emitMLAMLS(armMorphStateP state, vmiBinop op) { + + vmiFlagsCP flags = getFlagsOrNull(state); + vmiReg rd = GET_RD(state, r1); + vmiReg rm = GET_RS(state, r2); + vmiReg rs = GET_RS(state, r3); + vmiReg rn = GET_RS(state, r4); + vmiReg t = VMI_REG_EQUAL(rd, rn) ? getTemp(state) : rd; + + armEmitBinopRRR(state, ARM_GPR_BITS, vmi_IMUL, t, rm, rs, 0); + armEmitBinopRRR(state, ARM_GPR_BITS, op, rd, t, rn, flags); +} + +// +// MLA instruction +// +ARM_MORPH_FN(armEmitMLA) { + emitMLAMLS(state, vmi_ADD); +} + +// +// MLS instruction +// +ARM_MORPH_FN(armEmitMLS) { + emitMLAMLS(state, vmi_RSUB); +} + +// +// [SU]MULL instructions +// +ARM_MORPH_FN(armEmitMULL) { + + vmiBinop op = state->attrs->binop; + vmiFlagsCP flags = getFlagsOrNull(state); + vmiReg rdlo = GET_RD(state, r1); + vmiReg rdhi = GET_RD(state, r2); + vmiReg rm = GET_RS(state, r3); + vmiReg rs = GET_RS(state, r4); + + armEmitMulopRRR(state, ARM_GPR_BITS, op, rdhi, rdlo, rm, rs, flags); +} + +// +// [SU]MLAL instructions +// +ARM_MORPH_FN(armEmitMLAL) { + + Uns32 bits = ARM_GPR_BITS; + vmiBinop op = state->attrs->binop; + vmiFlagsCP flags = getFlagsOrNull(state); + vmiReg rdlo = GET_RS(state, r1); + vmiReg rdhi = GET_RS(state, r2); + vmiReg rm = GET_RS(state, r3); + vmiReg rs = GET_RS(state, r4); + vmiReg t = newTemp64(state); + vmiReg t164lo = getR64Lo(t); + vmiReg t164hi = getR64Hi(t); + + // perform initial multiply, result in temporary t164lo/t164hi + armEmitMulopRRR(state, bits, op, t164hi, t164lo, rm, rs, 0); + + if(VMI_REG_EQUAL(rdhi, getR64Hi(rdlo))) { + + // rdlo/rdhi are an adjacent pair + armEmitBinopRR(state, bits*2, vmi_ADD, rdlo, t164lo, flags); + + } else { + + // rdlo/rdhi are not an adjacent pair + vmiReg t = newTemp64(state); + vmiReg t264lo = getR64Lo(t); + vmiReg t264hi = getR64Hi(t); + + // move rdlo/rdhi into adjacent pair + armEmitMoveRR(state, bits, t264hi, rdhi); + armEmitMoveRR(state, bits, t264lo, rdlo); + + // perform addition using adjacent pair + armEmitBinopRR(state, bits*2, vmi_ADD, t264lo, t164lo, flags); + + // move to rdlo/rdhi from adjacent pair + armEmitMoveRR(state, bits, rdhi, t264hi); + armEmitMoveRR(state, bits, rdlo, t264lo); + + freeTemp64(state); + } + + freeTemp64(state); +} + + +//////////////////////////////////////////////////////////////////////////////// +// BRANCH INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Return link address from state +// +static Uns32 getStateLinkPC(armMorphStateP state) { + return state->nextPC | (IN_THUMB_MODE(state->arm) ? 1 : 0); +} + +// +// Fill armJumpInfo structure with information about a jump to a target address +// +static void seedJumpInfo( + armJumpInfoP ji, + armMorphStateP state, + Bool isLink, + Bool isReturn, + Bool isRelative +) { + ji->linkReg = isLink ? ARM_LR : VMI_NOREG; + ji->hint = isRelative ? vmi_JH_RELATIVE : vmi_JH_NONE; + ji->hint |= isReturn ? vmi_JH_RETURN : isLink ? vmi_JH_CALL : vmi_JH_NONE; + ji->linkPC = isLink ? getStateLinkPC(state) : 0; +} + +// +// Emit an explicit unconditional jump to target address +// +static void emitUncondJumpC(armMorphStateP state, Bool isLink) { + + // get information about the jump + armJumpInfo ji; + seedJumpInfo(&ji, state, isLink, False, True); + + // do the jump + armEmitUncondJump(state, &ji); +} + +// +// Emit an explicit conditional jump to target address +// +static void emitCondJumpC( + armMorphStateP state, + vmiReg tf, + Bool jumpIfTrue, + Bool isLink +) { + // get information about the jump + armJumpInfo ji; + seedJumpInfo(&ji, state, isLink, False, True); + + // do the jump + armEmitCondJump(state, &ji, tf, jumpIfTrue); +} + +// +// Macro defining the body of a (possibly conditional) jump to target +// +#define COND_OR_UNCOND_BRANCH_BODY(_UNCOND_CB, _COND_CB) \ + \ + armCond cond = emitPrepareCondition(state); \ + Bool isLink = state->attrs->isLink; \ + \ + if(cond.op==ACO_ALWAYS) { \ + /* unconditional jump */ \ + _UNCOND_CB(state, isLink); \ + } else { \ + /* conditional jump */ \ + _COND_CB(state, cond.flag, cond.op==ACO_TRUE, isLink); \ + } \ + +// +// Emit conditional branch to constant address, possibly with link +// +ARM_MORPH_FN(armEmitBranchC) { + COND_OR_UNCOND_BRANCH_BODY(emitUncondJumpC, emitCondJumpC); +} + +// +// Emit unconditional branch to register address, possibly with link +// +ARM_MORPH_FN(armEmitBranchR) { + + vmiReg ra = GET_RS(state, r1); + Bool isLink = state->attrs->isLink; + + // switch mode if LSB of target address implies a different mode + armEmitInterworkLSB(state, ra); + + // get information about the jump + armJumpInfo ji; + seedJumpInfo(&ji, state, isLink, state->info.r1==ARM_REG_LR, False); + + // do the jump + armEmitUncondJumpReg(state, &ji, ra); +} + + +//////////////////////////////////////////////////////////////////////////////// +// MISCELLANEOUS INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Called for an unimplemented instruction +// +static void ignoreBKPT(armP arm, Uns32 thisPC) { + + vmiMessage("W", CPU_PREFIX"_BII", + SRCREF_FMT "BKPT instruction ignored in nopBKPT compatability mode", + SRCREF_ARGS(arm, thisPC) + ); +} + +// +// Emit call to perform CLZ +// +ARM_MORPH_FN(armEmitCLZ) { + + vmiReg rd = GET_RD(state, r1); + vmiReg rm = GET_RS(state, r2); + + armEmitUnopRR(state, ARM_GPR_BITS, vmi_CLZ, rd, rm, 0); +} + +// +// Emit call to perform BKPT +// +ARM_MORPH_FN(armEmitBKPT) { + if(state->arm->compatMode==COMPAT_CODE_SOURCERY) { + armEmitArgProcessor(state); + armEmitArgSimPC(state, ARM_GPR_BITS); + armEmitCall(state, (vmiCallFn)ignoreBKPT); + } else { + emitExceptionCall(state, armBKPT); + } +} + +// +// Emit call to perform SWI +// +ARM_MORPH_FN(armEmitSWI) { + emitExceptionCall(state, armSWI); +} + + +//////////////////////////////////////////////////////////////////////////////// +// SPECIAL PURPOSE REGISTER ACCESS INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Emit code for MRS +// +ARM_MORPH_FN(armEmitMRS) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + vmiReg rs = VMI_NOREG; + Bool privMode = !IN_USER_MODE(state->arm); + armSysRegId SYSm = state->info.c; + + switch(SYSm>>3) { + + case 0: { + + // extract fields from PSR + Uns32 mask = 0; + + // include exceptNum field if required + if((SYSm&1) && privMode) { + mask |= PSR_EXCEPT_NUM; + } + + // include flags field if required + if(!(SYSm&4)) { + mask |= PSR_FLAGS; + } + + // get masked result value + if(mask) { + armEmitArgProcessor(state); + armEmitCallResult(state, (vmiCallFn)armReadCPSR, bits, rd); + armEmitBinopRC(state, bits, vmi_AND, rd, mask, 0); + rs = rd; + } + + break; + } + + case 1: + + // return SP_main or SP_process + if(privMode) { + + // this code is mode specific + armEmitValidateBlockMask(ARM_BM_USE_SP_PROCESS); + + // select source register + if((SYSm&1) == USE_SP_PROCESS(state->arm)) { + rs = ARM_SP; + } else { + rs = ARM_BANK_SP; + } + } + + break; + + case 2: + + // return PRIMASK, BASEPRI, FAULTMASK or CONTROL + switch(SYSm&7) { + case 0: rs = privMode ? ARM_PRIMASK : VMI_NOREG; break; + case 1: rs = privMode ? ARM_BASEPRI : VMI_NOREG; break; + case 2: rs = privMode ? ARM_BASEPRI : VMI_NOREG; break; + case 3: rs = privMode ? ARM_FAULTMASK : VMI_NOREG; break; + case 4: rs = ARM_CONTROL; break; + default: break; + } + + break; + + default: + break; + } + + // get the register + armEmitMoveRR(state, bits, rd, rs); +} + +// +// Emit code for MSR +// +ARM_MORPH_FN(armEmitMSR) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rs = GET_RD(state, r1); + Bool privMode = !IN_USER_MODE(state->arm); + armSysRegId SYSm = state->info.c; + + switch(SYSm>>3) { + + case 0: { + + // insert fields in PSR + Uns32 wrMask = 0; + + // include flags field if required + if(!(SYSm&4)) { + armPSRBits bits = state->info.psrbits; + if (bits==ARM_PSRBITS_ALL || bits==ARM_PSRBITS_FLAGS) { + wrMask |= PSR_FLAGS; + } + if (bits==ARM_PSRBITS_ALL || bits==ARM_PSRBITS_GE) { + if (DSP_PRESENT(state->arm)) { + wrMask |= PSR_GE; + } + } + } + + // set masked result value + if(wrMask) { + armEmitArgProcessor(state); + armEmitArgReg(state, bits, rs); + armEmitArgUns32(state, wrMask); + armEmitCall(state, (vmiCallFn)armWriteCPSR); + } + + break; + } + + case 1: + + // set SP_main or SP_process + if(privMode) { + + vmiReg rd; + + // this code is mode specific + armEmitValidateBlockMask(ARM_BM_USE_SP_PROCESS); + + // select destination register + if((SYSm&1) == USE_SP_PROCESS(state->arm)) { + rd = ARM_SP; + } else { + rd = ARM_BANK_SP; + } + + // set the register + armEmitMoveRR(state, bits, rd, rs); + } + + break; + + case 2: + + // assign PRIMASK, BASEPRI, FAULTMASK or CONTROL + if(privMode) { + + switch(SYSm&7) { + + case 0: + armEmitArgProcessor(state); + armEmitArgReg(state, bits, rs); + armEmitCall(state, (vmiCallFn)armWritePRIMASK); + break; + + case 1: + armEmitArgProcessor(state); + armEmitArgReg(state, bits, rs); + armEmitCall(state, (vmiCallFn)armWriteBASEPRI); + break; + + case 2: + armEmitArgProcessor(state); + armEmitArgReg(state, bits, rs); + armEmitCall(state, (vmiCallFn)armWriteBASEPRI_MAX); + break; + + case 3: + armEmitArgProcessor(state); + armEmitArgReg(state, bits, rs); + armEmitCall(state, (vmiCallFn)armWriteFAULTMASK); + break; + + case 4: + armEmitArgProcessor(state); + armEmitArgReg(state, bits, rs); + armEmitCall(state, (vmiCallFn)armWriteCONTROL); + break; + + default: + break; + } + } + + break; + + default: + break; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// HINT INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Emit NOP +// +ARM_MORPH_FN(armEmitNOP) { + // no action +} + +// +// Emit WFE +// +ARM_MORPH_FN(armEmitWFE) { + + vmiLabelP wait = armEmitNewLabel(); + vmiLabelP done = armEmitNewLabel(); + + // jump to wait code if no event registered + armEmitCondJumpLabel(ARM_EVENT, False, wait); + + // clear event register and finish + armEmitMoveRC(state, 8, ARM_EVENT, 0); + armEmitUncondJumpLabel(done); + + // here if halt is required + armEmitInsertLabel(wait); + + // wait for event + armEmitWait(state, AD_WFE); + + // here when done + armEmitInsertLabel(done); +} + +// +// Emit WFI +// +ARM_MORPH_FN(armEmitWFI) { + + vmiLabelP noWait = armEmitNewLabel(); + + // don't stop if there are pending interrupts + armEmitCompareRCJumpLabel(8, vmi_COND_NZ, ARM_PENDING, 0, noWait); + + // halt the processor at the end of this instruction + armEmitWait(state, AD_WFI); + + // here if interrupt is currently pending + emitLabel(noWait); +} + +// +// Emit SEV +// +ARM_MORPH_FN(armEmitSEV) { + armEmitArgProcessor(state); + armEmitCall(state, (vmiCallFn)armSEV); +} + + +//////////////////////////////////////////////////////////////////////////////// +// LOAD AND STORE INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// This indicates that the register being loaded is also the base in an LDM +// +#define LDM_BASE_REG -1 + +// +// If this is an STM with the base register in the list and also writeback, is +// the value written the *final* value of the base register? +// +#define STM_WB_BASE_FINAL False + +// +// Callback function for load/store +// +#define LOAD_STORE_FN(_NAME) void _NAME( \ + armMorphStateP state, \ + vmiReg base, \ + Int32 offset \ +) +typedef LOAD_STORE_FN((*loadStoreFn)); + +// +// Callback function for one register of a load/store multiple +// +#define LOAD_STORE_M_FN(_NAME) void _NAME( \ + armMorphStateP state, \ + vmiReg base, \ + Int32 offset, \ + Uns32 r, \ + Bool isWBNotFirst, \ + Int32 frameDelta \ +) +typedef LOAD_STORE_M_FN((*loadStoreMFn)); + +// +// Should increment/decrement be performed before access? +// +inline static Bool doBefore(armMorphStateP state) { + armIncDec incDec = state->info.incDec; + return ((incDec==ARM_ID_IB) || (incDec==ARM_ID_DA)); +} + +// +// Does load/store multiple increment? +// +inline static Bool doIncrement(armMorphStateP state) { + return state->info.incDec & ARM_ID_I; +} + +// +// Return the step to apply before load/store multiple +// +inline static Int32 getStepBefore(armMorphStateP state, Uns32 bytes) { + return doBefore(state) ? bytes : 0; +} + +// +// Return the step to apply after load/store multiple +// +inline static Int32 getStepAfter(armMorphStateP state, Uns32 bytes) { + return doBefore(state) ? 0 : bytes; +} + +// +// Return frame size for a load/store multiple +// +static Uns32 getFrameSize(armMorphStateP state) { + + Uns32 rList = state->info.rList; + Uns32 mask; + Uns32 r; + Int32 size = 0; + + for(r=0, mask=1; rinfo.r1); + + return (isLoad && (state->info.rList & rmMask)); +} + +// +// Is the base register not the highest (first) register in the list? +// +inline static Bool baseIsNotFirst(Uns32 rList, Uns32 rBase) { + return rList & ((1<info.rList; + Uns32 rBase = state->info.r1; + Bool baseLoaded = baseIsLoaded(state, isLoad); + vmiReg base = GET_RS(state, r1); + Bool increment = doIncrement(state); + Int32 stepBefore = getStepBefore(state, ARM_GPR_BYTES); + Int32 stepAfter = getStepAfter(state, ARM_GPR_BYTES); + Uns32 frameSize = getFrameSize(state); + Int32 offset = increment ? 0 : -frameSize; + Int32 frameDelta = increment ? frameSize : -frameSize; + Bool isNotFirst = state->info.wb && baseIsNotFirst(rList, rBase); + Uns32 mask; + Uns32 r; + + // load or store registers + for(r=0, mask=1; rinfo.wb) { + vmiReg rn = GET_RD(state, r1); + armEmitBinopRRC(state, bits, vmi_ADD, rn, base, frameDelta, 0); + } +} + +// +// Macro to emit one register load for LDM +// +#define EMIT_LDM_REG(_S, _BASE, _OFFSET, _R) { \ + \ + Uns32 bits = ARM_GPR_BITS; \ + vmiReg rd = (_R==LDM_BASE_REG) ? getTemp(_S) : getRD(_S, _R); \ + \ + armEmitLoadRRO(_S, bits, _OFFSET, rd, _BASE, False, True); \ +} + +// +// Emit one register load for LDM +// +static LOAD_STORE_M_FN(emitLDMCB) { + EMIT_LDM_REG(state, base, offset, r); +} + +// +// If the source register is the PC, adjust to a 12-byte offset if required +// +static vmiReg emitPCDelta(armMorphStateP state, Uns32 r, vmiReg rs) { + + if((r==ARM_REG_PC) && state->arm->configInfo.STRoffsetPC12) { + vmiReg t = getTemp(state); + armEmitBinopRRC(state, ARM_GPR_BITS, vmi_ADD, t, rs, 4, 0); + return t; + } else { + return rs; + } +} + +// +// Emit one register store for STM +// +static LOAD_STORE_M_FN(emitSTMCB) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rs = getRS(state, r); + + // write the final value of the base register if it is in the register list + if(STM_WB_BASE_FINAL && isWBNotFirst) { + rs = getTemp(state); + armEmitBinopRRC(state, bits, vmi_ADD, rs, base, frameDelta, 0); + } + + // if source register is PC, allow for store offset adjustment + rs = emitPCDelta(state, r, rs); + + // do the store + armEmitStoreRRO(state, bits, offset, base, rs); +} + +// +// Emit code for LDM (1) +// +ARM_MORPH_FN(armEmitLDM1) { + emitLoadStoreMultiple(state, emitLDMCB, True); +} + +// +// Emit code for STM (1) +// +ARM_MORPH_FN(armEmitSTM1) { + emitLoadStoreMultiple(state, emitSTMCB, False); +} + +// +// Should the LDR instruction do writeback? +// +inline static Bool doLDRWriteBack(armMorphStateP state) { + return (state->info.wb && (state->info.r1!=state->info.r2)); +} + +// +// Is translation required? (LDRT, STRT) +// +inline static Bool doTranslate(armMorphStateP state) { + return (state->info.tl && IN_PRIV_MPU_MODE(state->arm)); +} + +// +// If this is an LDRT/STRT instruction and we are currently in privileged mode +// with TLB enabled, emit code to switch to the user mode data memDomain +// +static void emitTranslateOn(armMorphStateP state) { + if(doTranslate(state)) { + armEmitArgProcessor(state); + armEmitCall(state, (vmiCallFn)armVMSetUserPrivilegedModeDataDomain); + } +} + +// +// If this is after a LDRT/STRT instruction and we are currently in privileged +// mode with TLB enabled, emit code to switch back to the privileged mode data +// memDomain. Note that this code is not executed if the prior access causes an +// exception; in this case, mode is restored in armDataAbort. +// +static void emitTranslateOff(armMorphStateP state) { + if(doTranslate(state)) { + armEmitArgProcessor(state); + armEmitCall(state, (vmiCallFn)armVMRestoreNormalDataDomain); + } +} + +// +// Emit code for LDR variant +// +static LOAD_STORE_FN(emitLDR) { + + Uns32 memBits = state->info.sz*8; + Bool isLong = (memBits==64); + vmiReg rd = GET_RD(state, r1); + Bool xs = state->info.xs; + + // start translation (LDRT, STRT) + emitTranslateOn(state); + + // emit load + if(isLong) { + + vmiReg rdH = GET_RD(state, r4); + vmiReg rt = getTemp(state); + + armEmitLoadRRRO(state, memBits, offset, rd, rdH, base, rt, xs, False); + + } else { + + armEmitLoadRRO(state, memBits, offset, rd, base, xs, False); + } + + // end translation (LDRT, STRT) + emitTranslateOff(state); +} + +// +// Emit code for STR variant +// +static LOAD_STORE_FN(emitSTR) { + + Uns32 memBits = state->info.sz*8; + Bool isLong = (memBits==64); + Uns32 r1 = state->info.r1; + vmiReg rs = getRS(state, r1); + + // if source register is PC, allow for store offset adjustment + rs = emitPCDelta(state, r1, rs); + + // start translation (LDRT, STRT) + emitTranslateOn(state); + + // emit store + if(isLong) { + + Uns32 r4 = state->info.r4; + vmiReg rsH = getRS(state, r4); + + armEmitStoreRRRO(state, memBits, offset, base, rs, rsH); + + } else { + + armEmitStoreRRO(state, memBits, offset, base, rs); + } + + // end translation (LDRT, STRT) + emitTranslateOff(state); +} + +// +// Emit code for LDR/STR with immediate offset +// +static void emitLDRSTRI(armMorphStateP state, loadStoreFn cb, Bool align) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg base = GET_RS(state, r2); + Int32 offset = state->info.c; + Int32 memOffset = state->info.pi ? 0 : offset; + + // align the constant if the base register is the program counter (has + // effect for PC-relative Thumb load instructions only) + if(align && VMI_REG_EQUAL(base, ARM_PC)) { + memOffset = alignConstWithPC(state, memOffset); + } + + // emit register load or store + cb(state, base, memOffset); + + // do writeback if required + if(doLDRWriteBack(state)) { + vmiReg ra = GET_RD(state, r2); + armEmitBinopRC(state, bits, vmi_ADD, ra, offset, 0); + } +} + +// +// Emit code for LDR/STR variant +// +static void emitLDRSTRInt(armMorphStateP state, vmiReg offset, loadStoreFn cb) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg base = GET_RS(state, r2); + vmiReg t = newTemp32(state); + vmiReg memReg = state->info.pi ? base : t; + vmiBinop op = state->info.u ? vmi_ADD : vmi_SUB; + + // calculate incremented address + armEmitBinopRRR(state, bits, op, t, base, offset, 0); + + // emit register load + cb(state, memReg, 0); + + // do writeback if required + if(doLDRWriteBack(state)) { + vmiReg ra = GET_RD(state, r2); + armEmitMoveRR(state, bits, ra, t); + } + + freeTemp32(state); +} + +// +// Emit code for LDR/STR with register offset +// +static void emitLDRSTRR(armMorphStateP state, loadStoreFn cb) { + + vmiReg rm = GET_RS(state, r3); + + emitLDRSTRInt(state, rm, cb); +} + +// +// Emit code for LDR/STR with scaled register offset (LSL, LSR, ASR, ROR) +// +static void emitLDRSTRRSI(armMorphStateP state, loadStoreFn cb) { + + vmiReg t = newTemp32(state); + vmiReg rm = GET_RS(state, r3); + + getShiftedRC(state, t, rm, FLAGS_CIN); + + emitLDRSTRInt(state, t, cb); + + freeTemp32(state); +} + +// +// Emit code for LDR with immediate offset +// +ARM_MORPH_FN(armEmitLDRI) { + emitLDRSTRI(state, emitLDR, True); +} + +// +// Emit code for LDR with register offset +// +ARM_MORPH_FN(armEmitLDRR) { + emitLDRSTRR(state, emitLDR); +} + +// +// Emit code for LDR with scaled register offset (LSL, LSR, ASR, ROR) +// +ARM_MORPH_FN(armEmitLDRRSI) { + emitLDRSTRRSI(state, emitLDR); +} + +// +// Emit code for STR with immediate offset +// +ARM_MORPH_FN(armEmitSTRI) { + emitLDRSTRI(state, emitSTR, False); +} + +// +// Emit code for STR with register offset +// +ARM_MORPH_FN(armEmitSTRR) { + emitLDRSTRR(state, emitSTR); +} + +// +// Emit code for STR with scaled register offset (LSL, LSR, ASR, ROR) +// +ARM_MORPH_FN(armEmitSTRRSI) { + emitLDRSTRRSI(state, emitSTR); +} + + +//////////////////////////////////////////////////////////////////////////////// +// DSP INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Minimum and maximum values for clamping +// +#define ARM_MIN 0x80000000 +#define ARM_MAX 0x7fffffff + +// +// Emit code for to perform rd = rs1 op rs2, clamping result and setting Q +// flag if overflow +// +static void emitOpSetQClamp( + armMorphStateP state, + vmiBinop op, + vmiReg rd, + vmiReg rs1, + vmiReg rs2 +) { + Uns32 bits = ARM_GPR_BITS; + vmiFlags flags = getSFOFFlags(getTemp(state)); + vmiLabelP noOverflow = armEmitNewLabel(); + + // do the operation, setting flags + armEmitBinopRRR(state, bits, op, rd, rs1, rs2, &flags); + + // skip clamping and Q flag update unless there was an overflow + armEmitCondJumpLabel(flags.f[vmi_OF], False, noOverflow); + + // clamp depending on sign of result + armEmitCondMoveRCC(state, bits, flags.f[vmi_SF], True, rd, ARM_MAX, ARM_MIN); + + // set the sticky Q flag + armEmitMoveRC(state, 8, ARM_QF, 1); + + // here if the operation didn't overflow + emitLabel(noOverflow); +} + +// +// Emit code to perform rd = rs1 op rs2, setting Q flag if overflow +// +static void emitOpSetQ( + armMorphStateP state, + Uns32 bits, + vmiBinop op, + vmiReg rd, + vmiReg rs1, + vmiReg rs2 +) { + vmiReg tf = getTemp(state); + vmiFlags flags = getOFFlags(tf); + + // do the operation, setting flags + armEmitBinopRRR(state, bits, op, rd, rs1, rs2, &flags); + + // set the sticky Q flag of there was overflow + armEmitBinopRR(state, 8, vmi_OR, ARM_QF, tf, 0); +} + +// +// Emit code for 16 x 16 = 32 multiply +// +static void emitMul1632( + armMorphStateP state, + vmiReg rd, + vmiReg rs1, + vmiReg rs2 +) { + vmiReg rdlo = getR32Lo(rd); + vmiReg rdhi = getR32Hi(rd); + + // do 16 x 16 = 32 multiply + armEmitMulopRRR(state, ARM_GPR_BITS/2, vmi_IMUL, rdhi, rdlo, rs1, rs2, 0); +} + +// +// Emit code for QADD/QSUB +// +static void emitQADDSUB(armMorphStateP state, vmiBinop op) { + + vmiReg rd = GET_RD(state, r1); + vmiReg rs1 = GET_RS(state, r2); + vmiReg rs2 = GET_RS(state, r3); + + emitOpSetQClamp(state, op, rd, rs1, rs2); +} + +// +// Emit code for QDADD/QDSUB +// +static void emitQDADDSUB(armMorphStateP state, vmiBinop op) { + + vmiReg rd = GET_RD(state, r1); + vmiReg rs1 = GET_RS(state, r2); + vmiReg rs2 = GET_RS(state, r3); + vmiReg t = newTemp32(state); + + emitOpSetQClamp(state, vmi_ADD, t, rs2, rs2); + emitOpSetQClamp(state, op, rd, rs1, t); + + freeTemp32(state); +} + +// +// Emit code for QADD +// +ARM_MORPH_FN(armEmitQADD) { + emitQADDSUB(state, vmi_ADD); +} + +// +// Emit code for QSUB +// +ARM_MORPH_FN(armEmitQSUB) { + emitQADDSUB(state, vmi_SUB); +} + +// +// Emit code for QDADD +// +ARM_MORPH_FN(armEmitQDADD) { + emitQDADDSUB(state, vmi_ADD); +} + +// +// Emit code for QDSUB +// +ARM_MORPH_FN(armEmitQDSUB) { + emitQDADDSUB(state, vmi_SUB); +} + +// +// Emit code for SMLA +// +static void emitSMLA(armMorphStateP state, Uns32 xDelta, Uns32 yDelta) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + vmiReg rs1 = VMI_REG_DELTA(GET_RS(state, r2), xDelta); + vmiReg rs2 = VMI_REG_DELTA(GET_RS(state, r3), yDelta); + vmiReg rs3 = GET_RS(state, r4); + vmiReg t = newTemp32(state); + + // do 16 x 16 = 32 multiply + emitMul1632(state, t, rs1, rs2); + + // do the accumulate, setting Q flag on overflow + emitOpSetQ(state, bits, vmi_ADD, rd, rs3, t); + + // free multiply result temporary + freeTemp32(state); +} + +// +// Emit code for SMLABB +// +ARM_MORPH_FN(armEmitSMLABB) { + emitSMLA(state, 0, 0); +} + +// +// Emit code for SMLABT +// +ARM_MORPH_FN(armEmitSMLABT) { + emitSMLA(state, 0, 2); +} + +// +// Emit code for SMLATB +// +ARM_MORPH_FN(armEmitSMLATB) { + emitSMLA(state, 2, 0); +} + +// +// Emit code for SMLATT +// +ARM_MORPH_FN(armEmitSMLATT) { + emitSMLA(state, 2, 2); +} + +// +// Emit code for SMLAL +// +static void emitSMLAL(armMorphStateP state, Uns32 xDelta, Uns32 yDelta) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rdlo = GET_RD(state, r1); + vmiReg rdhi = GET_RD(state, r2); + vmiReg rs1 = VMI_REG_DELTA(GET_RS(state, r3), xDelta); + vmiReg rs2 = VMI_REG_DELTA(GET_RS(state, r4), yDelta); + vmiReg t = newTemp64(state); + vmiReg tlo32 = getR64Lo(t); + vmiReg thi32 = getR64Hi(t); + vmiFlags flags = getCFFlags(getTemp(state)); + + // do 16 x 16 = 32 multiply and extend to 64 bits + emitMul1632(state, t, rs1, rs2); + armEmitMoveExtendRR(state, bits*2, t, bits, tlo32, True); + + // do the accumulate + armEmitBinopRR(state, bits, vmi_ADD, rdlo, tlo32, &flags); + armEmitBinopRR(state, bits, vmi_ADC, rdhi, thi32, &flags); + + // free multiply result temporary + freeTemp64(state); +} + +// +// Emit code for SMLABB +// +ARM_MORPH_FN(armEmitSMLALBB) { + emitSMLAL(state, 0, 0); +} + +// +// Emit code for SMLABT +// +ARM_MORPH_FN(armEmitSMLALBT) { + emitSMLAL(state, 0, 2); +} + +// +// Emit code for SMLATB +// +ARM_MORPH_FN(armEmitSMLALTB) { + emitSMLAL(state, 2, 0); +} + +// +// Emit code for SMLATT +// +ARM_MORPH_FN(armEmitSMLALTT) { + emitSMLAL(state, 2, 2); +} + +// +// Emit code for SMLAW +// +static void emitSMLAW(armMorphStateP state, Uns32 yDelta) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + vmiReg rs1 = GET_RS(state, r2); + vmiReg rs2 = VMI_REG_DELTA(GET_RS(state, r3), yDelta); + vmiReg rs3 = GET_RS(state, r4); + vmiReg t = newTemp64(state); + vmiReg tlo32 = getR64Lo(t); + vmiReg thi32 = getR64Hi(t); + vmiReg t48 = VMI_REG_DELTA(t, 2); + + // sign extend rs2 and place result in temporary + armEmitMoveExtendRR(state, bits, t, bits/2, rs2, True); + + // do 32 x 32 = 64 multiply + armEmitMulopRRR(state, bits, vmi_IMUL, thi32, tlo32, t, rs1, 0); + + // do the accumulate, setting Q flag on overflow + emitOpSetQ(state, bits, vmi_ADD, rd, t48, rs3); + + // free multiply result temporary + freeTemp64(state); +} + +// +// Emit code for SMLAWB +// +ARM_MORPH_FN(armEmitSMLAWB) { + emitSMLAW(state, 0); +} + +// +// Emit code for SMLAWT +// +ARM_MORPH_FN(armEmitSMLAWT) { + emitSMLAW(state, 2); +} + +// +// Emit code for emitSMUL +// +static void emitSMUL(armMorphStateP state, Uns32 xDelta, Uns32 yDelta) { + + vmiReg rd = GET_RD(state, r1); + vmiReg rs1 = VMI_REG_DELTA(GET_RS(state, r2), xDelta); + vmiReg rs2 = VMI_REG_DELTA(GET_RS(state, r3), yDelta); + + emitMul1632(state, rd, rs1, rs2); +} + +// +// Emit code for SMULBB +// +ARM_MORPH_FN(armEmitSMULBB) { + emitSMUL(state, 0, 0); +} + +// +// Emit code for SMULBT +// +ARM_MORPH_FN(armEmitSMULBT) { + emitSMUL(state, 0, 2); +} + +// +// Emit code for SMULTB +// +ARM_MORPH_FN(armEmitSMULTB) { + emitSMUL(state, 2, 0); +} + +// +// Emit code for SMULTT +// +ARM_MORPH_FN(armEmitSMULTT) { + emitSMUL(state, 2, 2); +} + +// +// Emit code for SMULW +// +static void emitSMULW(armMorphStateP state, Uns32 yDelta) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + vmiReg rs1 = GET_RS(state, r2); + vmiReg rs2 = VMI_REG_DELTA(GET_RS(state, r3), yDelta); + vmiReg t = newTemp64(state); + vmiReg tlo32 = getR64Lo(t); + vmiReg thi32 = getR64Hi(t); + vmiReg t48 = VMI_REG_DELTA(t, 2); + + // sign extend rs2 and place result in temporary + armEmitMoveExtendRR(state, bits, t, bits/2, rs2, True); + + // do 32 x 32 = 64 multiply + armEmitMulopRRR(state, bits, vmi_IMUL, thi32, tlo32, t, rs1, 0); + + // assign the result + armEmitMoveRR(state, bits, rd, t48); + + // free multiply result temporary + freeTemp64(state); +} + +// +// Emit code for SMULWB +// +ARM_MORPH_FN(armEmitSMULWB) { + emitSMULW(state, 0); +} + +// +// Emit code for SMULWT +// +ARM_MORPH_FN(armEmitSMULWT) { + emitSMULW(state, 2); +} + +//////////////////////////////////////////////////////////////////////////////// +// COPROCESSOR INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Morpher callback for undefined coprocessor instructions +// +ARM_MORPH_FN(armEmitUsageFaultCP) { + + // generate assertion + armEmitArgProcessor(state); + armEmitArgSimPC(state, ARM_GPR_BITS); + armEmitCall(state, (vmiCallFn)undefinedCPMessage); + + // take UndefinedInstruction exception + emitUsageFault(state, EXC_UNDEF_NOCP); +} + + + +//////////////////////////////////////////////////////////////////////////////// +// MOVE INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// MOVW instruction +// +ARM_MORPH_FN(armEmitMOVW) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + + armEmitMoveRC(state, bits, rd, state->info.c); +} + +// +// MOVT instruction +// +ARM_MORPH_FN(armEmitMOVT) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + + if(!VMI_REG_EQUAL(rd, ARM_PC)) { + + vmiReg rdH = VMI_REG_DELTA(rd, 2); + + armEmitMoveRC(state, bits/2, rdH, state->info.c); + + } else { + + vmiReg rs = getRS(state, ARM_REG_PC); + vmiReg tmp = newTemp32(state); + vmiReg tmpH = VMI_REG_DELTA(tmp, 2); + + armEmitMoveRR(state, bits, tmp, rs); + armEmitMoveRC(state, bits/2, tmpH, state->info.c); + armEmitMoveRR(state, bits, rd, tmp); + + freeTemp32(state); + } +} + +//////////////////////////////////////////////////////////////////////////////// +// MULTIPLY INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// [SU]MAAL instructions +// +ARM_MORPH_FN(armEmitMAAL) { + + Uns32 bits = ARM_GPR_BITS; + vmiBinop op = state->attrs->binop; + vmiReg rdlo = GET_RS(state, r1); + vmiReg rdhi = GET_RS(state, r2); + vmiReg rm = GET_RS(state, r3); + vmiReg rs = GET_RS(state, r4); + vmiReg t = newTemp64(state); + vmiReg t64lo = getR64Lo(t); + vmiReg t64hi = getR64Hi(t); + vmiFlags tf = getCFFlags(getTemp(state)); + + // perform initial multiply, result in temporary t64lo/t64hi + armEmitMulopRRR(state, bits, op, t64hi, t64lo, rm, rs, 0); + + // add in rdhi + armEmitBinopRR(state, bits, vmi_ADD, t64lo, rdhi, &tf); + armEmitBinopRC(state, bits, vmi_ADC, t64hi, 0, &tf); + + // add in rdlo + armEmitBinopRR(state, bits, vmi_ADD, t64lo, rdlo, &tf); + armEmitBinopRC(state, bits, vmi_ADC, t64hi, 0, &tf); + + // move result to rdlo/rdhi + armEmitMoveRR(state, bits, rdhi, t64hi); + armEmitMoveRR(state, bits, rdlo, t64lo); + + freeTemp64(state); +} + +//////////////////////////////////////////////////////////////////////////////// +// SYNCHRONIZATION INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Generate exclusive access tag address ra+offset in register rtag +// +static void generateEATag( + armMorphStateP state, + Uns32 offset, + vmiReg rtag, + vmiReg ra +) { + Uns32 bits = ARM_GPR_BITS; + Uns32 mask = state->arm->exclusiveTagMask; + + armEmitBinopRRC(state, bits, vmi_ADD, rtag, ra, offset, 0); + armEmitBinopRC(state, bits, vmi_AND, rtag, mask, 0); +} + +// +// Emit code to start exclusive access to address ra+offset +// +inline static void startEA(armMorphStateP state, Uns32 offset, vmiReg ra) { + generateEATag(state, offset, ARM_EA_TAG, ra); +} + +// +// Validate the exclusive access and jump to label 'done' if it is invalid, +// setting rd to 1 +// +static vmiLabelP validateEA( + armMorphStateP state, + Uns32 offset, + vmiReg ra, + vmiReg rd +) { + Uns32 bits = ARM_GPR_BITS; + Uns32 memBits = state->info.sz*8; + vmiLabelP done = armEmitNewLabel(); + vmiLabelP ok = armEmitNewLabel(); + vmiReg t = getTemp(state); + + // generate any store exception prior to exclusive access tag check + armEmitTryStoreRC(state, memBits, offset, ra); + + // generate exclusive access tag for this address + generateEATag(state, offset, t, ra); + + // do load and store tags match? + armEmitCompareRR(state, bits, vmi_COND_EQ, ARM_EA_TAG, t, t); + + // commit store if tags match + armEmitCondJumpLabel(t, True, ok); + + // indicate store failed + armEmitMoveRC(state, bits, rd, 1); + + // jump to instruction end + armEmitUncondJumpLabel(done); + + // here to commit store + armEmitInsertLabel(ok); + + return done; +} + +// +// Do actions required to terminate exclusive access +// +static void clearEA(armMorphStateP state) { + + // exclusiveTag becomes ARM_NO_TAG to indicate no active access + armEmitMoveRC(state, ARM_GPR_BITS, ARM_EA_TAG, ARM_NO_TAG); +} + +// +// Do actions required to complete exclusive access +// +static void endEA(armMorphStateP state, vmiReg rd, vmiLabelP done) { + + // indicate store succeeded + armEmitMoveRC(state, ARM_GPR_BITS, rd, 0); + + // insert target label for aborted stores + armEmitInsertLabel(done); + + // terminate exclusive access + clearEA(state); +} + +// +// Emit code for LDREX* +// +ARM_MORPH_FN(armEmitLDREX) { + + // indicate LDREX is now active at address r2+offset + startEA(state, state->info.c, GET_RS(state, r2)); + + // emit load + armEmitLDRI(state); +} + +// +// Emit code for STREX* +// +ARM_MORPH_FN(armEmitSTREX) { + + // validate STREX attempt at address r3+offset + vmiReg rd = GET_RD(state, r1); + vmiLabelP done = validateEA(state, state->info.c, GET_RS(state, r3), rd); + + // move down rt and rn so that they are in the required positions for a + // normal store + state->info.r1 = state->info.r2; + state->info.r2 = state->info.r3; + + // emit store + armEmitSTRI(state); + + // complete STREX attempt + endEA(state, rd, done); +} + +// +// Emit code for CLREX +// +ARM_MORPH_FN(armEmitCLREX) { + clearEA(state); +} + + +//////////////////////////////////////////////////////////////////////////////// +// MISCELLANEOUS INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Function to set PRIMASK and/or FAULTMASK +// +static void setMasks(armP arm, armFlagAffect faff) { + + Bool updateState = False; + + // set PRIMASK if required + if((faff&ARM_FAFF_I) && !arm->sregs.PRIMASK) { + arm->sregs.PRIMASK = 1; + updateState = True; + } + + // set FAULTMASK if required + if((faff&ARM_FAFF_F) && !arm->sregs.FAULTMASK && (arm->executionPriority>-1)) { + arm->sregs.FAULTMASK = 1; + updateState = True; + } + + // update processor state if required + if(updateState) { + armRefreshExecutionPriority(arm); + } +} + +// +// Function to clear PRIMASK and/or FAULTMASK +// +static void clearMasks(armP arm, armFlagAffect faff) { + + Bool updateState = False; + + // set PRIMASK if required + if((faff&ARM_FAFF_I) && arm->sregs.PRIMASK) { + arm->sregs.PRIMASK = 0; + updateState = True; + } + + // set FAULTMASK if required + if((faff&ARM_FAFF_F) && arm->sregs.FAULTMASK) { + arm->sregs.FAULTMASK = 0; + updateState = True; + } + + // update processor state if required + if(updateState) { + armRefreshExecutionPriority(arm); + } +} + +// +// Emit code for CPS +// +ARM_MORPH_FN(armEmitCPS) { + + if(!IN_USER_MODE(state->arm)) { + + armFlagAffect faff = state->info.faff; + Bool set = (state->info.fact==ARM_FACT_ID); + + // emit call to set or clear the masks + armEmitArgProcessor(state); + armEmitArgUns32(state, faff); + armEmitCall(state, set ? (vmiCallFn)setMasks : (vmiCallFn)clearMasks); + + // terminate the current code block + armEmitEndBlock(); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// BRANCH INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Emit code for CPZ/CBNZ +// +ARM_MORPH_FN(armEmitCBZ) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rn = GET_RS(state, r1); + vmiReg tf = getTemp(state); + + // do the comparison + armEmitCompareRC(state, bits, vmi_COND_Z, rn, 0, tf); + + // get information about the jump + armJumpInfo ji; + seedJumpInfo(&ji, state, False, False, True); + + // do the jump + armEmitCondJump(state, &ji, tf, state->attrs->jumpIfTrue); +} + +// +// Emit code for TBB/TBH +// +ARM_MORPH_FN(armEmitTB) { + + Uns32 bits = ARM_GPR_BITS; + Uns32 sz = state->info.sz; + Uns32 memBits = sz*8; + vmiReg rn = GET_RS(state, r1); + vmiReg rm = GET_RS(state, r2); + vmiReg t1 = getTemp(state); + Uns32 shift = 0; + + // convert from size to shift + while(sz>1) { + sz >>= 1; + shift++; + } + + // get offset, shifted if required + armEmitBinopRRC(state, bits, vmi_SHL, t1, rm, shift, 0); + + // compose full address + armEmitBinopRR(state, bits, vmi_ADD, t1, rn, 0); + + // load zero-extended offset from table and double it + armEmitLoadRRO(state, memBits, 0, t1, t1, False, False); + armEmitBinopRR(state, bits, vmi_ADD, t1, t1, 0); + + // add to effective PC to get target address + armEmitBinopRR(state, bits, vmi_ADD, t1, getRS(state, ARM_REG_PC), 0); + + // get information about the jump + armJumpInfo ji; + seedJumpInfo(&ji, state, False, False, True); + + // do the jump + armEmitUncondJumpReg(state, &ji, t1); +} + + +//////////////////////////////////////////////////////////////////////////////// +// BASIC MEDIA INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Common routine for USAD8 and USADA8 +// +static void emitUSAD8Int(armMorphStateP state, vmiReg ra) { + + Uns32 bits = ARM_GPR_BITS; + Uns32 partBits = 8; + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + vmiReg rm = GET_RS(state, r3); + vmiReg t1 = newTemp32(state); + vmiReg t2 = newTemp32(state); + vmiReg t3 = getTemp(state); + Uns32 i; + + // clear result accumulators + armEmitMoveRR(state, bits, t1, ra); + + for(i=0; i<(bits/partBits); i++) { + + // get zero-extended arguments in temporaries + armEmitMoveExtendRR(state, bits, t2, partBits, rn, False); + armEmitMoveExtendRR(state, bits, t3, partBits, rm, False); + + // perform subtraction + armEmitBinopRR(state, bits, vmi_SUB, t2, t3, 0); + + // get absolute result + armEmitUnopRR(state, bits, vmi_ABS, t2, t2, 0); + + // update accumulated result + armEmitBinopRR(state, bits, vmi_ADD, t1, t2, 0); + + // step to next register pair + rn = VMI_REG_DELTA(rn, 1); + rm = VMI_REG_DELTA(rm, 1); + } + + // assign result register + armEmitMoveRR(state, bits, rd, t1); + + // free allocated temporaries + freeTemp32(state); + freeTemp32(state); +} + +// +// Common routine for SBFX and UBFX +// +static void emitBFXInt(armMorphStateP state, vmiBinop op) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + Uns32 lsb = state->info.c; + Uns32 msb = lsb + state->info.w - 1; + + if(msbinfo.c; + Int32 width = state->info.w; + + if(width<=0) { + + // no action + + } else if(width==bits) { + + // optimize to a move + armEmitMoveRC(state, bits, rd, 0); + + } else { + + // general case + Uns32 mask1 = ((1<info.c; + Int32 width = state->info.w; + + if(width<=0) { + + // no action + + } else if(width==bits) { + + // optimize to a move + armEmitMoveRR(state, bits, rd, rs); + + } else { + + // general case + vmiReg t = getTemp(state); + Uns32 mask1 = ((1<attrs->setGE) { + armEmitBinopRC(state, ARM_GPR_BITS, vmi_AND, ARM_PSR, ~PSR_GE30, 0); + } +} + +// +// Emit code to perform part of a parallel operation +// +static void emitParallelBinopInt( + armMorphStateP state, + Uns32 partBits, + vmiBinop op, + vmiReg rd, + vmiReg rn, + vmiReg rm, + Uns32 delta1, + Uns32 delta2, + Uns32 apsrMask +) { + Bool setGE = state->attrs->setGE; + Bool sextend = state->attrs->sextend; + Bool halve = state->attrs->halve; + vmiFlags flags = VMI_NOFLAGS; + vmiReg tf = newTemp32(state); + vmiReg rnTmp; + vmiReg rmTmp; + vmiReg rdTmp; + Uns32 opBits; + + // set up flags to generate CPSR greater-or-equal bits if required + if(!(setGE || halve)) { + // no action + } else if(sextend) { + flags.f[vmi_SF] = tf; + } else { + flags.f[vmi_CF] = flags.cin = tf; + } + + // get shift to appropriate part of each register + rd = VMI_REG_DELTA(rd, delta1); + rn = VMI_REG_DELTA(rn, delta1); + rm = VMI_REG_DELTA(rm, delta2); + + // argument format depends on whether sign extension is required + if(sextend) { + + // sign extension required: perform operation on extended arguments + opBits = ARM_GPR_BITS; + rdTmp = newTemp32(state); + rnTmp = rdTmp; + rmTmp = getTemp(state); + + // sign extend arguments into temporaries + armEmitMoveExtendRR(state, opBits, rnTmp, partBits, rn, True); + armEmitMoveExtendRR(state, opBits, rmTmp, partBits, rm, True); + + } else { + + // use original unextended arguments + opBits = partBits; + rdTmp = rd; + rnTmp = rn; + rmTmp = rm; + } + + // do the operation + armEmitBinopRRR(state, opBits, op, rdTmp, rnTmp, rmTmp, &flags); + + // update CPSR greater-or-equal bits if required + if(setGE) { + + vmiLabelP done = armEmitNewLabel(); + + // skip flag update if required + armEmitCondJumpLabel(tf, (sextend || (op!=vmi_ADD)), done); + + // include apsrMask in CPSR register + armEmitBinopRC(state, ARM_GPR_BITS, vmi_OR, ARM_PSR, apsrMask, 0); + + // jump to here if flag update is not required + armEmitInsertLabel(done); + } + + // halve results if required + if(!halve) { + // no action + } else if(sextend) { + armEmitBinopRC(state, opBits, vmi_SHR, rdTmp, 1, 0); + } else { + armEmitBinopRC(state, opBits, vmi_RCR, rdTmp, 1, &flags); + } + + // write back temporary if required + if(sextend) { + armEmitMoveRR(state, partBits, rd, rdTmp); + freeTemp32(state); + } + + // free temporary flag + freeTemp32(state); +} + +// +// Emit code for parallel add/subtract of 8-bit data +// +ARM_MORPH_FN(armEmitParallelBinop8) { + + Uns32 bits = ARM_GPR_BITS/4; + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + vmiReg rm = GET_RS(state, r3); + vmiBinop op = state->attrs->binop; + + // clear GE flags + emitClearGEFlags(state); + + // perform the parallel operations + emitParallelBinopInt(state, bits, op, rd, rn, rm, 0, 0, PSR_GE0); + emitParallelBinopInt(state, bits, op, rd, rn, rm, 1, 1, PSR_GE1); + emitParallelBinopInt(state, bits, op, rd, rn, rm, 2, 2, PSR_GE2); + emitParallelBinopInt(state, bits, op, rd, rn, rm, 3, 3, PSR_GE3); +} + +// +// Emit code for parallel add/subtract of 16-bit data +// +ARM_MORPH_FN(armEmitParallelBinop16) { + + Uns32 bits = ARM_GPR_BITS/2; + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + vmiReg rm = GET_RS(state, r3); + Bool exch = state->attrs->exchange; + vmiBinop op1 = state->attrs->binop; + vmiBinop op2 = state->attrs->binop2; + vmiReg tmp = newTemp32(state); + + // save rm in temporary if exchange required and it is clobbered + if(exch && VMI_REG_EQUAL(rd, rm)) { + armEmitMoveRR(state, ARM_GPR_BITS, tmp, rm); + rm = tmp; + } + + // clear GE flags + emitClearGEFlags(state); + + // perform the parallel operations + emitParallelBinopInt(state, bits, op1, rd, rn, rm, 0, exch?2:0, PSR_GE10); + emitParallelBinopInt(state, bits, op2, rd, rn, rm, 2, exch?0:2, PSR_GE32); + + // free temporary + freeTemp32(state); +} + + +//////////////////////////////////////////////////////////////////////////////// +// PACKING, UNPACKING, SATURATION AND REVERSAL INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Emit code for SSAT/SSAT16 +// +static void emitSSAT( + armMorphStateP state, + vmiBinop so, + Uns32 bits, + vmiReg rd, + vmiReg rn +) { + vmiReg t1 = newTemp32(state); + vmiReg tf = getTemp(state); + Uns32 shift = state->info.c; + Uns32 width = state->info.w; + vmiFlags flags = getZFFlags(tf); + vmiLabelP done = armEmitNewLabel(); + + // create bitmasks + Uns32 signMask = 1<<(width-1); + Uns32 maxMask = signMask-1; + Uns32 propMask = ~maxMask; + + // mask propMask to the operand width + if(bits!=32) { + propMask &= (1<info.c; + Uns32 width = state->info.w; + vmiLabelP done = armEmitNewLabel(); + + // create bitmasks + Uns32 maxMask = (1<info.c/8; + Uns32 delta1 = rorDelta1[dIndex]; + + // do the extension + armEmitMoveExtendRR(state, bits, t1, 8, VMI_REG_DELTA(rm,delta1), sextend); +} + +// +// Extract word into temporary with sign extension +// +static void emitExtWord( + armMorphStateP state, + vmiReg rm, + vmiReg t1, + Bool sextend +) { + Uns32 bits = ARM_GPR_BITS; + Uns32 dIndex = state->info.c/8; + Uns32 delta1 = rorDelta1[dIndex]; + + // if the word straddles the register boundary, handle it specially + if(delta1==3) { + armEmitBinopRRC(state, bits, vmi_ROR, t1, rm, 24, 0); + rm = t1; + delta1 = 0; + } + + // do the extension + armEmitMoveExtendRR(state, bits, t1, 16, VMI_REG_DELTA(rm,delta1), sextend); +} + +// +// Extract byte pair into temporaries with sign extension +// +static void emitExtBytePair( + armMorphStateP state, + vmiReg rm, + vmiReg t1, + vmiReg t2, + Bool sextend +) { + Uns32 bits = 16; + Uns32 dIndex = state->info.c/8; + Uns32 delta1 = rorDelta1[dIndex]; + Uns32 delta2 = rorDelta2[dIndex]; + + // do the extension + armEmitMoveExtendRR(state, bits, t1, 8, VMI_REG_DELTA(rm,delta1), sextend); + armEmitMoveExtendRR(state, bits, t2, 8, VMI_REG_DELTA(rm,delta2), sextend); +} + +// +// Emit code for SXTAB/UXTAB +// +static void emitXTAB(armMorphStateP state, Bool sextend) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + vmiReg rm = GET_RS(state, r3); + vmiReg t1 = getTemp(state); + + // extract extended byte into temporary + emitExtByte(state, rm, t1, sextend); + + // create result from 32-bit addition + armEmitBinopRRR(state, bits, vmi_ADD, rd, rn, t1, 0); +} + +// +// Emit code for SXTAH/UXTAH +// +static void emitXTAH(armMorphStateP state, Bool sextend) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + vmiReg rm = GET_RS(state, r3); + vmiReg t1 = getTemp(state); + + // extract extended word into temporary + emitExtWord(state, rm, t1, sextend); + + // create result from 32-bit addition + armEmitBinopRRR(state, bits, vmi_ADD, rd, rn, t1, 0); +} + +// +// Emit code for SXTAB16/UXTAB16 +// +static void emitXTAB16(armMorphStateP state, Bool sextend) { + + Uns32 bits = 16; + vmiReg rdL = GET_RD(state, r1); + vmiReg rnL = GET_RS(state, r2); + vmiReg rdH = VMI_REG_DELTA(rdL, 2); + vmiReg rnH = VMI_REG_DELTA(rnL, 2); + vmiReg rm = GET_RS(state, r3); + vmiReg t1 = newTemp32(state); + vmiReg t2 = getTemp(state); + + // extract extended bytes into temporaries + emitExtBytePair(state, rm, t1, t2, sextend); + + // create result from two 16-bit additions + armEmitBinopRRR(state, bits, vmi_ADD, rdL, rnL, t1, 0); + armEmitBinopRRR(state, bits, vmi_ADD, rdH, rnH, t2, 0); + + // free temporary + freeTemp32(state); +} + +// +// Emit code for SXTB16/UXTB16 +// +static void emitXTB16(armMorphStateP state, Bool sextend) { + + Uns32 bits = 16; + vmiReg rdL = GET_RD(state, r1); + vmiReg rdH = VMI_REG_DELTA(rdL, 2); + vmiReg rm = GET_RS(state, r2); + vmiReg t1 = newTemp32(state); + vmiReg t2 = getTemp(state); + + // extract extended bytes into temporaries + emitExtBytePair(state, rm, t1, t2, sextend); + + // create result from two 16-bit moves + armEmitMoveRR(state, bits, rdL, t1); + armEmitMoveRR(state, bits, rdH, t2); + + // free temporary + freeTemp32(state); +} + +// +// Emit code for SXTB/UXTB +// +static void emitXTB(armMorphStateP state, Bool sextend) { + + vmiReg rd = GET_RD(state, r1); + vmiReg rm = GET_RS(state, r2); + + emitExtByte(state, rm, rd, sextend); +} + +// +// Emit code for SXTH/UXTH +// +static void emitXTH(armMorphStateP state, Bool sextend) { + + vmiReg rd = GET_RD(state, r1); + vmiReg rm = GET_RS(state, r2); + + emitExtWord(state, rm, rd, sextend); +} + +// +// Emit code for PKHBT +// +ARM_MORPH_FN(armEmitPKHBT) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + vmiReg rm = GET_RS(state, r3); + vmiReg t1 = newTemp32(state); + vmiReg t2 = getTemp(state); + Uns32 shift = state->info.c; + vmiBinop so = mapShiftOp(state->info.so); + + // create lower half of the result + armEmitBinopRRC(state, bits, vmi_AND, t1, rn, 0xffff, 0); + + // create upper half of the result + armEmitBinopRRC(state, bits, so, t2, rm, shift, 0); + + // mask upper half of the result if required + if(shift<16) { + armEmitBinopRC(state, bits, vmi_AND, t2, 0xffff0000, 0); + } + + // create combined result + armEmitBinopRRR(state, bits, vmi_OR, rd, t1, t2, 0); + + // free temporary + freeTemp32(state); +} + +// +// Emit code for PKHTB +// +ARM_MORPH_FN(armEmitPKHTB) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + vmiReg rm = GET_RS(state, r3); + vmiReg t1 = newTemp32(state); + vmiReg t2 = getTemp(state); + Uns32 shift = state->info.c; + vmiBinop so = mapShiftOp(state->info.so); + + // create upper half of the result + armEmitBinopRRC(state, bits, vmi_AND, t1, rn, 0xffff0000, 0); + + // create lower half of the result + armEmitBinopRRC(state, bits, so, t2, rm, shift, 0); + armEmitBinopRC(state, bits, vmi_AND, t2, 0xffff, 0); + + // create combined result + armEmitBinopRRR(state, bits, vmi_OR, rd, t1, t2, 0); + + // free temporary + freeTemp32(state); +} + +// +// Emit code for SSAT +// +ARM_MORPH_FN(armEmitSSAT) { + + Uns32 bits = ARM_GPR_BITS; + vmiBinop so = mapShiftOp(state->info.so); + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + + emitSSAT(state, so, bits, rd, rn); +} + +// +// Emit code for SSAT16 +// +ARM_MORPH_FN(armEmitSSAT16) { + + Uns32 bits = ARM_GPR_BITS/2; + vmiBinop so = vmi_SHR; + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + + emitSSAT(state, so, bits, VMI_REG_DELTA(rd, 0), VMI_REG_DELTA(rn, 0)); + emitSSAT(state, so, bits, VMI_REG_DELTA(rd, 2), VMI_REG_DELTA(rn, 2)); +} + +// +// Emit code for USAT +// +ARM_MORPH_FN(armEmitUSAT) { + + Uns32 bits = ARM_GPR_BITS; + vmiBinop so = mapShiftOp(state->info.so); + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + + emitUSAT(state, so, bits, rd, rn); +} + +// +// Emit code for USAT16 +// +ARM_MORPH_FN(armEmitUSAT16) { + + Uns32 bits = ARM_GPR_BITS/2; + vmiBinop so = vmi_SHR; + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + + emitUSAT(state, so, bits, VMI_REG_DELTA(rd, 0), VMI_REG_DELTA(rn, 0)); + emitUSAT(state, so, bits, VMI_REG_DELTA(rd, 2), VMI_REG_DELTA(rn, 2)); +} + +// +// Emit code for SXTAB +// +ARM_MORPH_FN(armEmitSXTAB) { + emitXTAB(state, True); +} + +// +// Emit code for UXTAB +// +ARM_MORPH_FN(armEmitUXTAB) { + emitXTAB(state, False); +} + +// +// Emit code for SXTAB16 +// +ARM_MORPH_FN(armEmitSXTAB16) { + emitXTAB16(state, True); +} + +// +// Emit code for UXTAB16 +// +ARM_MORPH_FN(armEmitUXTAB16) { + emitXTAB16(state, False); +} + +// +// Emit code for SXTAH +// +ARM_MORPH_FN(armEmitSXTAH) { + emitXTAH(state, True); +} + +// +// Emit code for UXTAH +// +ARM_MORPH_FN(armEmitUXTAH) { + emitXTAH(state, False); +} + +// +// Emit code for SXTB +// +ARM_MORPH_FN(armEmitSXTB) { + emitXTB(state, True); +} + +// +// Emit code for UXTB +// +ARM_MORPH_FN(armEmitUXTB) { + emitXTB(state, False); +} + +// +// Emit code for SXTB16 +// +ARM_MORPH_FN(armEmitSXTB16) { + emitXTB16(state, True); +} + +// +// Emit code for UXTB16 +// +ARM_MORPH_FN(armEmitUXTB16) { + emitXTB16(state, False); +} + +// +// Emit code for SXTH +// +ARM_MORPH_FN(armEmitSXTH) { + emitXTH(state, True); +} + +// +// Emit code for UXTH +// +ARM_MORPH_FN(armEmitUXTH) { + emitXTH(state, False); +} + +// +// Emit code for SEL +// +ARM_MORPH_FN(armEmitSEL) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + vmiReg rm = GET_RS(state, r3); + vmiReg t1 = newTemp32(state); + vmiReg t2 = getTemp(state); + + // select GE bits from CPSR + armEmitBinopRRC(state, bits, vmi_SHR, t1, ARM_PSR, 16, 0); + armEmitBinopRC (state, bits, vmi_AND, t1, 0xf, 0); + + // convert from 0..15 to bitmask + armEmitBinopRC(state, bits, vmi_IMUL, t1, 0x00204081, 0); + armEmitBinopRC(state, bits, vmi_AND, t1, 0x01010101, 0); + armEmitBinopRC(state, bits, vmi_IMUL, t1, 0xff, 0); + + // get components from each source + armEmitBinopRRR(state, bits, vmi_AND, t2, rn, t1, 0); + armEmitBinopRRR(state, bits, vmi_ANDN, t1, rm, t1, 0); + + // assign result register + armEmitBinopRRR(state, bits, vmi_OR, rd, t1, t2, 0); + + // free temporary + freeTemp32(state); +} + +// +// Emit code for REV +// +ARM_MORPH_FN(armEmitREV) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + vmiReg rm = GET_RS(state, r2); + + armEmitUnopRR(state, bits, vmi_SWP, rd, rm, 0); +} + +// +// Emit code for REV16 +// +ARM_MORPH_FN(armEmitREV16) { + + Uns32 bits = 16; + vmiReg rdL = GET_RD(state, r1); + vmiReg rmL = GET_RS(state, r2); + vmiReg rdH = VMI_REG_DELTA(rdL, 2); + vmiReg rmH = VMI_REG_DELTA(rmL, 2); + + armEmitUnopRR(state, bits, vmi_SWP, rdL, rmL, 0); + armEmitUnopRR(state, bits, vmi_SWP, rdH, rmH, 0); +} + +// +// Emit code for REVSH +// +ARM_MORPH_FN(armEmitREVSH) { + + Uns32 bits = 16; + vmiReg rd = GET_RD(state, r1); + vmiReg rm = GET_RS(state, r2); + + armEmitUnopRR(state, bits, vmi_SWP, rd, rm, 0); + armEmitMoveExtendRR(state, ARM_GPR_BITS, rd, bits, rd, True); +} + +// +// This array will hold bit-reversed byte values for RBIT +// +static Uns8 rbit8[256]; + +// +// Return bit-reversed value +// +static Uns32 doRBIT(Uns32 value) { + + union {Uns32 u32; Uns8 u8[4];} u1 = {value}; + union {Uns32 u32; Uns8 u8[4];} u2; + + // generate reversed result a byte at a time using the lookup table + u2.u8[0] = rbit8[u1.u8[3]]; + u2.u8[1] = rbit8[u1.u8[2]]; + u2.u8[2] = rbit8[u1.u8[1]]; + u2.u8[3] = rbit8[u1.u8[0]]; + + // return the reversed result + return u2.u32; +} + +// +// Emit code for RBIT +// +ARM_MORPH_FN(armEmitRBIT) { + + Uns32 bits = ARM_GPR_BITS; + vmiReg rd = GET_RD(state, r1); + vmiReg rm = GET_RS(state, r2); + + static Bool init; + + // set up rbit8 table if required + if(!init) { + + Uns32 i; + + for(i=0; i<256; i++) { + + Uns8 byte = i; + Uns8 result = 0; + Uns32 j; + + for(j=0; j<8; j++) { + result = (result<<1) | (byte&1); + byte >>= 1; + } + + rbit8[i] = result; + } + + init = True; + } + + // emit embedded call to perform operation + armEmitArgReg(state, bits, rm); + armEmitCallResult(state, (vmiCallFn)doRBIT, bits, rd); +} + +//////////////////////////////////////////////////////////////////////////////// +// SIGNED MULTIPLY INSTRUCTIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Emit code to perform dual multiply, with results in t1 and t2 +// +static void emitDualMultiply( + armMorphStateP state, + vmiReg rnL, + vmiReg rmL, + vmiReg t1, + vmiReg t2 +) { + Uns32 bits = ARM_GPR_BITS; + vmiReg rnH = VMI_REG_DELTA(rnL, 2); + vmiReg rmH = VMI_REG_DELTA(rmL, 2); + vmiReg t3 = getTemp(state); + + // exchange arguments if required + if(state->attrs->exchange) { + vmiReg tmp = rmL; rmL = rmH; rmH = tmp; + } + + // do first multiply + armEmitMoveExtendRR(state, bits, t1, 16, rnL, True); + armEmitMoveExtendRR(state, bits, t3, 16, rmL, True); + armEmitBinopRR(state, bits, vmi_IMUL, t1, t3, 0); + + // do second multiply + armEmitMoveExtendRR(state, bits, t2, 16, rnH, True); + armEmitMoveExtendRR(state, bits, t3, 16, rmH, True); + armEmitBinopRR(state, bits, vmi_IMUL, t2, t3, 0); +} + +// +// Emit code for SMLAD/SMLSD +// +ARM_MORPH_FN(armEmitSMLXD) { + + Uns32 bits = ARM_GPR_BITS; + vmiBinop op = state->attrs->binop; + vmiReg rd = GET_RD(state, r1); + vmiReg rnL = GET_RS(state, r2); + vmiReg rmL = GET_RS(state, r3); + vmiReg ra = GET_RS(state, r4); + vmiReg t1 = newTemp32(state); + vmiReg t2 = newTemp32(state); + + // do dual multiply, results in t1 and t2 + emitDualMultiply(state, rnL, rmL, t1, t2); + + // combine results, setting CPSR.Q if overflow (ADD only, special case of + // 0x8000*0x8000 + 0x8000*0x8000) + if(op==vmi_ADD) { + emitOpSetQ(state, bits, op, t1, t1, t2); + } else { + armEmitBinopRR(state, bits, op, t1, t2, 0); + } + + // accumulate, setting CPSR.Q if overflow + emitOpSetQ(state, bits, vmi_ADD, rd, ra, t1); + + // free temporaries + freeTemp32(state); + freeTemp32(state); +} + +// +// Emit code for SMUAD/SMUSD +// +ARM_MORPH_FN(armEmitSMUXD) { + + Uns32 bits = ARM_GPR_BITS; + vmiBinop op = state->attrs->binop; + vmiReg rd = GET_RD(state, r1); + vmiReg rnL = GET_RS(state, r2); + vmiReg rmL = GET_RS(state, r3); + vmiReg t1 = newTemp32(state); + vmiReg t2 = newTemp32(state); + + // do dual multiply, results in t1 and t2 + emitDualMultiply(state, rnL, rmL, t1, t2); + + // generate result, setting CPSR.Q if overflow (ADD only) + if(op==vmi_ADD) { + emitOpSetQ(state, bits, op, rd, t1, t2); + } else { + armEmitBinopRRR(state, bits, op, rd, t1, t2, 0); + } + + // free temporaries + freeTemp32(state); + freeTemp32(state); +} + +// +// Emit code for SMLALD/SMLSLD +// +ARM_MORPH_FN(armEmitSMLXLD) { + + Uns32 bits = ARM_GPR_BITS; + vmiBinop op = state->attrs->binop; + vmiReg rdLo = GET_RD(state, r1); + vmiReg rdHi = GET_RD(state, r2); + vmiReg rnL = GET_RS(state, r3); + vmiReg rmL = GET_RS(state, r4); + vmiReg t1 = newTemp64(state); + vmiReg t2 = newTemp32(state); + vmiReg tf = t2; + vmiFlags flags = getCFFlags(tf); + + // do dual multiply, results in t1 and t2 + emitDualMultiply(state, rnL, rmL, t1, t2); + + // extend results to 64 bits + armEmitMoveExtendRR(state, 64, t1, bits, t1, True); + armEmitMoveExtendRR(state, 64, t2, bits, t2, True); + + // add/subtract extended results + armEmitBinopRR(state, 64, op, t1, t2, 0); + + // add total to accumulator + armEmitBinopRR(state, bits, vmi_ADD, rdLo, VMI_REG_DELTA(t1, 0), &flags); + armEmitBinopRR(state, bits, vmi_ADC, rdHi, VMI_REG_DELTA(t1, 4), &flags); + + // free temporaries + freeTemp32(state); + freeTemp64(state); +} + +// +// Emit code for SMMLX +// +ARM_MORPH_FN(armEmitSMMLX) { + + Uns32 bits = ARM_GPR_BITS; + vmiBinop op = state->attrs->binop; + vmiReg rd = GET_RD(state, r1); + vmiReg rn = GET_RS(state, r2); + vmiReg rm = GET_RS(state, r3); + vmiReg t1L = newTemp64(state); + vmiReg t1H = VMI_REG_DELTA(t1L, 4); + + // do the multiply + armEmitMulopRRR(state, bits, vmi_IMUL, t1H, t1L, rn, rm, 0); + + // accumulate if required + if(state->attrs->accumulate) { + + vmiReg t2L = getTemp(state); + vmiReg t2H = VMI_REG_DELTA(t2L, 4); + + armEmitMoveRC(state, bits, t2L, 0); + armEmitMoveRR(state, bits, t2H, GET_RS(state, r4)); + + armEmitBinopRR(state, 64, op, t1L, t2L, 0); + } + + // round if required + if(state->attrs->round) { + armEmitBinopRC(state, 64, vmi_ADD, t1L, 0x80000000, 0); + } + + // assign to result + armEmitMoveRR(state, bits, rd, t1H); + + // free temporary + freeTemp64(state); +} + +//////////////////////////////////////////////////////////////////////////////// +// VFP Utility functions +//////////////////////////////////////////////////////////////////////////////// + +// +// Emit NOCP Usage Fault if FPU is disabled +// +#define VFP_DISABLED(_S) emitUsageFault(state, EXC_UNDEF_NOCP); return False; + +// +// This is the ARM CheckVFPEnabled psuedo-code primitive +// +static Bool checkVFPEnabled(armMorphStateP state) { + + armP arm = state->arm; + Bool inUserMode = IN_USER_MODE(arm); + Uns32 cp10Enable = SCS_FIELD(arm, CPACR, cp10); + + // this code block is dependent on the enable state of coprocessor 10 + armEmitValidateBlockMask(ARM_BM_CP10); + + // check CPACR for permission to use cp10 (and cp11) in the current user/privilege mode + if(inUserMode && !(cp10Enable&2)) { + VFP_DISABLED(state); + } else if(!inUserMode && !(cp10Enable&1)) { + VFP_DISABLED(state); + } + + return True; +} + +// +// This is the ARM ExecuteFPCheck primitive +// +static Bool executeFPCheck(armMorphStateP state) { + + armP arm = state->arm; + + VMI_ASSERT(FPU_PRESENT(arm), "FP instruction when no FPU present"); + + if (!checkVFPEnabled(state)) { + + // Access to CP10 not enabled + return False; + + } else { + + Bool endMorphBlock = False; + + // this code block is dependent on the CONTROL.FPCA, FPCCR.ASPEN and FPCCR.LSPACT bits + armEmitValidateBlockMask(ARM_BM_FPCA|ARM_BM_ASPEN|ARM_BM_LSPACT); + + // If FP lazy context save is enabled then save state + if (SCS_FIELD(arm, FPCCR, LSPACT)) { + + // Preserve the FP state in the saved stack space + armEmitArgProcessor(state); + armEmitCall(state, (vmiCallFn)armPreserveFPState); + + // preserveFPState will clear LSPACT so should end block + endMorphBlock = True; + } + + // If ASPEN is on then check is FPCA is off. If it is, then this is the + // first FP instruction in this context + if (SCS_FIELD(arm, FPCCR, ASPEN) && !CONTROL_FIELD(arm, FPCA)) { + + Uns32 bits = ARM_GPR_BITS; + + // copy FPDSCR values to FPSCR + armEmitArgProcessor(state); + armEmitArgReg(state, bits, ARM_SCS_REG(SCS_ID(FPDSCR))); + armEmitArgUns32(state, SCS_WRITE_MASK_FPDSCR); + armEmitCall(state, (vmiCallFn)armWriteFPSCR); + + // Set CONTROL.FPCA bit + armEmitBinopRC(state, 32, vmi_OR, ARM_CONTROL, CONTROL_FPCA, 0); + + // CONTROL.FPCA has changed so should end block + endMorphBlock = True; + } + + if (endMorphBlock) { + // terminate the code block (CONTROL.FPCA or FPCCR.LSPACT has changed) + armEmitEndBlock(); + } + } + + // VFP is available + return True; + +} + +// +// Load the Flt64 register with the floating point constant value of 2^n +// +static vmiReg getFPConstPower2Flt64(armMorphStateP state, Uns32 n) { + + Uns64 twoN = (1ULL << n); + vmiReg r = newTemp64(state); + + union {Flt64 f64; Uns64 u64;} u = {f64:twoN}; + + armEmitMoveRC(state, 64, r, u.u64); + + return r; +} + +// +// Load the Flt80 register with the floating point constant value of 2^n +// +static vmiReg getFPConstPower2Flt80(armMorphStateP state, Uns32 n) { + + Uns64 twoN = (1ULL << n); + vmiReg r = newTemp128(state); + + union {Flt80 f80; Uns64 u64; Uns16 u16[8];} u = {f80:twoN}; + + armEmitMoveRC(state, 64, r, u.u64); + armEmitMoveRC(state, 16, VMI_REG_DELTA(r, 8), u.u16[4]); + + return r; +} + +// +// Get floating point operation type for ARM integer type from size of operand in bytes +// +static vmiFType bytesToIType(Uns32 ebytes, Bool isSigned) { + switch(ebytes) { + case 2: + return isSigned ? vmi_FT_16_INT : vmi_FT_16_UNS; + case 4: + return isSigned ? vmi_FT_32_INT : vmi_FT_32_UNS; + default: + VMI_ABORT("%s: unimplemented size for floating point type: %d bytes", FUNC_NAME, ebytes); + return 0; // Not reached + } +} + +// +// Get floating point operation type for ARM floating point type from size of operand in bytes +// +static vmiFType bytesToFType(Uns32 ebytes) { + switch(ebytes) { + case 4: + return vmi_FT_32_IEEE_754; + case 8: + return vmi_FT_64_IEEE_754; + default: + VMI_ABORT("%s: unimplemented size for floating point type: %d bytes", FUNC_NAME, ebytes); + return 0; // Not reached + } +} + + +// +// This is FPNeg from psuedo-code +// Negate the value in the register by toggling the sign bit +// +static void FPNeg(armMorphStateP state, vmiReg dest, vmiReg src, Uns32 size) { + + Uns64 signBit = 1ULL << (size-1); + + armEmitBinopRRC(state, size, vmi_XOR, dest, src, signBit, 0); +} + +// +// This is FixedToFP from psuedo-code +// Note: fpscr_controlled selection is done automatically in armEmit... call +// +static void fixedToFP( + armMorphStateP state, + vmiReg result, + Uns32 resultBytes, + vmiReg operand, + Uns32 operandBytes, + Uns32 fracBits, + Bool isSigned, + Bool roundToNearest +) { + vmiFPRC round = roundToNearest ? vmi_FPR_NEAREST : vmi_FPR_CURRENT; + vmiFType operandType = bytesToIType(operandBytes, isSigned); + + VMI_ASSERT(operandBytes==4 || operandBytes==2, "operand size in bytes %d must be 2 or 4", operandBytes); + VMI_ASSERT(fracBits <= operandBytes*8, "fracBits = %d must be <= %d", fracBits, operandBytes*8); + + if (fracBits) { + + // Fixed point to floating point - must scale by fracBits + Bool singlePrec = (resultBytes == 4); + vmiReg t = newTemp64(state); + vmiReg power2 = getFPConstPower2Flt64(state, fracBits); + + // Convert integer to double precision floating point (rounding mode unused here) + armEmitFConvertRR(state, vmi_FT_64_IEEE_754, t, operandType, operand, vmi_FPR_CURRENT); + + if (singlePrec) { + + // Get result / 2^fracBits (always exact, so no rounding) + armEmitFBinopSimdRRR(state, vmi_FT_64_IEEE_754, 1, vmi_FDIV, t, t, power2); + + // Convert to single precision (may be rounded) + armEmitFConvertRR(state, vmi_FT_32_IEEE_754, result, vmi_FT_64_IEEE_754, t, round); + + } else { + + // result = value / 2^fracBits (always exact, so no rounding) + armEmitFBinopSimdRRR(state, vmi_FT_64_IEEE_754, 1, vmi_FDIV, result, t, power2); + } + + } else { + + // Just convert integer to target floating point type (may be rounded) + vmiFType resultType = bytesToFType(resultBytes); + + armEmitFConvertRR(state, resultType, result, operandType, operand, round); + } +} + +// +// This is FPToFixed from psuedo-code +// Note: fpscr_controlled selection is done automatically in armEmit... call +// +static void FPToFixed ( + armMorphStateP state, + vmiReg result, + Uns32 resultBytes, + vmiReg operand, + Uns32 operandBytes, + Uns32 fracBits, + Bool isSigned, + Bool roundTowardsZero +) { + vmiFPRC round = roundTowardsZero ? vmi_FPR_ZERO : vmi_FPR_CURRENT; + vmiFType opType = bytesToFType(operandBytes); + + VMI_ASSERT(operandBytes==4 || operandBytes==8, "operand size in bytes %d must be 8 or 4", operandBytes); + VMI_ASSERT(resultBytes==4 || resultBytes==2, "result size in bytes %d must be 2 or 4", resultBytes); + VMI_ASSERT(fracBits <= resultBytes*8, "fracBits = %d must be <= %d", fracBits, resultBytes*8); + + if (fracBits) { + + // Scale by fracBits + vmiReg power2 = getFPConstPower2Flt80(state, fracBits); + vmiReg t = newTemp128(state); + + // Convert operand to 80 bit fp value (rounding mode unused here) + armEmitFConvertRR(state, vmi_FT_80_X87, t, opType, operand, vmi_FPR_CURRENT); + + // t = t * 2^fracBits (always bigger, so no rounding) + armEmitFBinopSimdRRR(state, vmi_FT_80_X87, 1, vmi_FMUL, t, t, power2); + + // Use temporary as operand source + opType = vmi_FT_80_X87; + operand = t; + } + + // convert to required type + vmiFType resultType = bytesToIType(resultBytes, isSigned); + armEmitFConvertRR(state, resultType, result, opType, operand, round); +} + +// +// Set FPSCR flags according to the vmiFPRelation value +// +static void setFPSCRFlags(armP arm, vmiFPRelation relation) { + + if (relation == vmi_FPRL_UNORDERED) { + arm->sdfpAFlags.ZF = arm->sdfpAFlags.NF = 0; + arm->sdfpAFlags.CF = arm->sdfpAFlags.VF = 1; + } else if (relation == vmi_FPRL_EQUAL) { + arm->sdfpAFlags.NF = arm->sdfpAFlags.VF = 0; + arm->sdfpAFlags.ZF = arm->sdfpAFlags.CF = 1; + } else if (relation == vmi_FPRL_LESS) { + arm->sdfpAFlags.ZF = arm->sdfpAFlags.CF= arm->sdfpAFlags.VF = 0; + arm->sdfpAFlags.NF = 1; + } else if (relation == vmi_FPRL_GREATER) { + arm->sdfpAFlags.ZF = arm->sdfpAFlags.NF= arm->sdfpAFlags.VF = 0; + arm->sdfpAFlags.CF = 1; + } else { + VMI_ABORT("unsupported fp relation result 0x%x", relation); + } + +} + +// +// Assign APSR VCMPflags from FPSCR flags +// +static void getFPSCRFlags(armP arm) { + + arm->aflags = arm->sdfpAFlags; + +} + +//////////////////////////////////////////////////////////////////////////////// +// VFP VLD and VST +//////////////////////////////////////////////////////////////////////////////// + +// +// Callback function for V load/store +// +#define V_LOAD_STORE_FN(_NAME) void _NAME( \ + armMorphStateP state, \ + Uns32 memBits, \ + vmiReg base, \ + Int32 offset, \ + vmiReg rd \ +) +typedef V_LOAD_STORE_FN((*VLoadStoreFn)); + + +// +// Swap rdH and rd if endian is big +// +static inline void endianSwapRegs(armMorphStateP state, vmiReg *rdH, vmiReg *rd) { + + memEndian endian = armGetEndian((vmiProcessorP)state->arm, False); + + if (endian == MEM_ENDIAN_BIG) { + + vmiReg t; + + t = *rdH; + *rdH = *rd; + *rd = t; + } +} + +// +// Emit code to load a VFP register from memory address [base]+offset +// +static V_LOAD_STORE_FN(emitVLoad) { + + if (memBits == 2*ARM_GPR_BITS) { + + vmiReg rdH = getR64Hi(rd); + + endianSwapRegs(state, &rdH, &rd); + armEmitLoadRRRO(state, memBits, offset, rd, rdH, base, getTemp(state), False, False); + + } else if (memBits <= ARM_GPR_BITS) { + + armEmitLoadRRO(state, memBits, offset, rd, base, False, False); + + } else { + + VMI_ABORT("Invalid memBits %d", memBits); + + } +} + +// +// Emit code to store a VFP register to memory address [base]+offset +// When double word register adjust register depending on endian +// +static V_LOAD_STORE_FN(emitVStore) { + + if (memBits == 2*ARM_GPR_BITS) { + + vmiReg rdH = getR64Hi(rd); + + endianSwapRegs(state, &rdH, &rd); + armEmitStoreRRRO(state, memBits, offset, base, rd, rdH); + + } else if (memBits <= ARM_GPR_BITS) { + + armEmitStoreRRO(state, memBits, offset, base, rd); + + } else { + + VMI_ABORT("Invalid memBits %d", memBits); + + } +} + + +// +// Common code for a VLDR or VSTR instruction +// +static void emitVLoadStore(armMorphStateP state, VLoadStoreFn cb, Bool isLoad) { + + if(executeFPCheck(state)) { + + Uns32 ebytes = state->attrs->ebytes; + Uns32 memBits = ebytes*8; + vmiReg rd = GET_VFP_REG(state, r1, ebytes); + vmiReg base = GET_RS(state, r2); + Int32 offset = state->info.c; + if (isLoad) { + + // For loads only: align the constant if the base register is the + // program counter (has effect for PC-relative Thumb load instructions only) + if(VMI_REG_EQUAL(base, ARM_PC)) { + offset = alignConstWithPC(state, offset); + } + + } + + (*cb) (state, memBits, base, offset, rd); + + } +} + +// +// Emit code for VLDR S or D, [RN, #imm] +// +ARM_MORPH_FN(armEmitVLDR) { + emitVLoadStore(state, emitVLoad, True); +} + +// +// Emit code for VLDR S or D, [RN, #imm] +// +ARM_MORPH_FN(armEmitVSTR) { + emitVLoadStore(state, emitVStore, False); +} + +// +// Common code for Load or Store Multiple using the passed call back function +// +static void emitVLoadStoreM(armMorphStateP state, VLoadStoreFn cb) { + + if(executeFPCheck(state)) { + + Uns32 ebytes = state->attrs->ebytes; + Uns32 memBits = ebytes*8; + vmiReg base = GET_RS(state, r1); + Uns32 nregs = state->info.nregs; + Bool increment = doIncrement(state); + Uns32 frameSize = nregs * ebytes; + Int32 frameDelta = increment ? frameSize : -frameSize; + Int32 offset = increment ? 0 : -frameSize; + Int32 stepBefore = getStepBefore(state, ebytes); + Int32 stepAfter = getStepAfter (state, ebytes); + Uns32 r; + + // load or store registers + for(r=0; rinfo.wb) { + + armEmitBinopRC(state, ARM_GPR_BITS, vmi_ADD, base, frameDelta, 0); + + } + } +} + +// +// Emit code for VLDM RN{!}, +// +ARM_MORPH_FN(armEmitVLDM) { + emitVLoadStoreM(state, emitVLoad); +} + +// +// Emit code for VSTM RN{!}, +// +ARM_MORPH_FN(armEmitVSTM) { + emitVLoadStoreM(state, emitVStore); +} + +//////////////////////////////////////////////////////////////////////////////// +// VFP VMOV, etc instructions +//////////////////////////////////////////////////////////////////////////////// + +// +// Emit code for VMRS +// +ARM_MORPH_FN(armEmitVMRS) { + + Uns32 bits = ARM_GPR_BITS; + + // FPSCR is accessible if cp10/11 access is enabled + if(!executeFPCheck(state)) { + // no action + } else if(state->info.r1==ARM_REG_PC) { + // assign CPSR flags from FPSCR flags + armEmitArgProcessor(state); + armEmitCall(state, (vmiCallFn)getFPSCRFlags); + + // terminate the code block (derived flags are invalid) + armEmitEndBlock(); + } else { + vmiReg rd = GET_RD(state, r1); + + armEmitArgProcessor(state); + armEmitCallResult(state, (vmiCallFn)armReadFPSCR, bits, rd); + } +} + +// +// Emit code for VMSR +// +ARM_MORPH_FN(armEmitVMSR) { + + Uns32 bits = ARM_GPR_BITS; + + // FPSCR is accessible in user mode + if(executeFPCheck(state)) { + armEmitArgProcessor(state); + armEmitArgReg(state, bits, GET_RS(state, r1)); + armEmitArgUns32(state, FPSCR_MASK); + armEmitCall(state, (vmiCallFn)armWriteFPSCR); + + // terminate the code block (block masks or floating point + // mode may have changed) + armEmitEndBlock(); + } +} + +// +// Emit code for VMOV.F32 Sd, Sm +// +ARM_MORPH_FN(armEmitVMOVR_VFP) { + + if(executeFPCheck(state)) { + + vmiReg rd = GET_VFP_SREG(state, r1); + vmiReg rs = GET_VFP_SREG(state, r2); + + armEmitMoveRR(state, 32, rd, rs); + } +} + +// +// Emit code for VMOV.F32 Sd, # or VMOV.F64 Dd, # +// +ARM_MORPH_FN(armEmitVMOVI_VFP) { + + if(executeFPCheck(state)) { + + vmiReg rd = GET_VFP_SREG(state, r1); + Uns64 mi = state->info.sdfpMI.u64; + + armEmitMoveRC(state, 32, rd, mi); + } +} + +// +// Emit code for VMOV RT, SN +// +ARM_MORPH_FN(armEmitVMOVRS) { + + if(executeFPCheck(state)) { + + vmiReg rd = GET_RD(state, r1); + vmiReg rs = GET_VFP_SREG(state, r2); + + armEmitMoveRR(state, ARM_GPR_BITS, rd, rs); + } +} + +// +// Emit code for VMOV SN, RT +// +ARM_MORPH_FN(armEmitVMOVSR) { + + if(executeFPCheck(state)) { + + vmiReg rd = GET_VFP_SREG(state, r1); + vmiReg rs = GET_RS(state, r2); + + armEmitMoveRR(state, ARM_GPR_BITS, rd, rs); + } +} + +// +// Emit code for VMOV RT, RT2, DN +// +ARM_MORPH_FN(armEmitVMOVRRD) { + + if(executeFPCheck(state)) { + + vmiReg rdL = GET_RD(state, r1); + vmiReg rdH = GET_RD(state, r2); + vmiReg rsL = GET_VFP_DREG(state, r3); + vmiReg rsH = getR64Hi(rsL); + + armEmitMoveRR(state, ARM_GPR_BITS, rdL, rsL); + armEmitMoveRR(state, ARM_GPR_BITS, rdH, rsH); + } +} + +// +// Emit code for VMOV DN, RT, RT2 +// +ARM_MORPH_FN(armEmitVMOVDRR) { + + if(executeFPCheck(state)) { + + vmiReg rdL = GET_VFP_DREG(state, r1); + vmiReg rdH = getR64Hi(rdL); + vmiReg rsL = GET_RS(state, r2); + vmiReg rsH = GET_RS(state, r3); + + armEmitMoveRR(state, ARM_GPR_BITS, rdL, rsL); + armEmitMoveRR(state, ARM_GPR_BITS, rdH, rsH); + } +} + +// +// Emit code for VMOV RT, RT2, SM, SM1 +// +ARM_MORPH_FN(armEmitVMOVRRSS) { + + if(executeFPCheck(state)) { + + vmiReg rdL = GET_RD(state, r1); + vmiReg rdH = GET_RD(state, r2); + vmiReg rsL = GET_VFP_SREG(state, r3); + vmiReg rsH = GET_VFP_SREG(state, r3+1); + + armEmitMoveRR(state, ARM_GPR_BITS, rdL, rsL); + armEmitMoveRR(state, ARM_GPR_BITS, rdH, rsH); + } +} + +// +// Emit code for VMOV SM, SM1, RT, RT2 +// +ARM_MORPH_FN(armEmitVMOVSSRR) { + + if(executeFPCheck(state)) { + + vmiReg rdL = GET_VFP_SREG(state, r1); + vmiReg rdH = GET_VFP_SREG(state, r1+1); + vmiReg rsL = GET_RS(state, r2); + vmiReg rsH = GET_RS(state, r3); + + armEmitMoveRR(state, ARM_GPR_BITS, rdL, rsL); + armEmitMoveRR(state, ARM_GPR_BITS, rdH, rsH); + } +} + +// +// Emit code for VMOV DD[x], RT +// +ARM_MORPH_FN(armEmitVMOVZR) { + + if(executeFPCheck(state)) { + + Uns32 index = state->info.index; + vmiReg rd = GET_VFP_SCALAR(state, r1, index); + vmiReg rs = GET_RS(state, r2); + + armEmitMoveRR(state, ARM_GPR_BITS, rd, rs); + } +} + +// +// Emit code for VMOV RT, DD[x] +// +ARM_MORPH_FN(armEmitVMOVRZ) { + + if(executeFPCheck(state)) { + + Uns32 index = state->info.index; + vmiReg rd = GET_RS(state, r1); + vmiReg rs = GET_VFP_SCALAR(state, r2, index); + + armEmitMoveRR(state, ARM_GPR_BITS, rd, rs); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// VFP Data-Processing Instructions +//////////////////////////////////////////////////////////////////////////////// + +// +// Emit code for VFP single precision floating point , with 3 regs +// +ARM_MORPH_FN(armEmitVFPBinop) { + + if(executeFPCheck(state)) { + + vmiReg r1 = GET_VFP_SREG(state, r1); + vmiReg r2 = GET_VFP_SREG(state, r2); + vmiReg r3 = GET_VFP_SREG(state, r3); + vmiFBinop op = state->attrs->fbinop; + Bool negate = state->attrs->negate; + + armEmitFBinopSimdRRR(state, vmi_FT_32_IEEE_754, 1, op, r1, r2, r3); + + // If negate attribute is selected negate the result + if (negate) FPNeg(state, r1, r1, 32); + } +} + +// +// Emit code for single precision VFP floating point , with 2 regs +// +ARM_MORPH_FN(armEmitVFPUnop) { + + if(executeFPCheck(state)) { + + vmiReg r1 = GET_VFP_SREG(state, r1); + vmiReg r2 = GET_VFP_SREG(state, r2); + vmiFBinop op = state->attrs->funop; + + armEmitFUnopSimdRR(state, vmi_FT_32_IEEE_754, 1, op, r1, r2); + + } +} + +// +// Emit code for VFP VABS Sd, Sm +// Simply mask off sign bit +// +ARM_MORPH_FN(armEmitVABS_VFP) { + + if(executeFPCheck(state)) { + + vmiReg r1 = GET_VFP_SREG(state, r1); + vmiReg r2 = GET_VFP_SREG(state, r2); + + armEmitBinopRRC(state, 32, vmi_ANDN, r1, r2, 0x80000000, 0); + + } +} + +// +// Emit code for VFP VNEG Sd, Sm or VNEG Dd, Dm +// +ARM_MORPH_FN(armEmitVNEG_VFP) { + + if(executeFPCheck(state)) { + + vmiReg r1 = GET_VFP_SREG(state, r1); + vmiReg r2 = GET_VFP_SREG(state, r2); + + // Take negative value by simply toggling the sign bit + FPNeg(state, r1, r2, 32); + + } +} + +// +// Emit code for VFP floating point Multiply (negate) accumulate/subtract instruction +// +ARM_MORPH_FN(armEmitVMulAcc_VFP) { + + if(executeFPCheck(state)) { + + vmiReg r1 = GET_VFP_SREG(state, r1); + vmiReg r2 = GET_VFP_SREG(state, r2); + vmiReg r3 = GET_VFP_SREG(state, r3); + vmiFBinop op = state->attrs->fbinop; + Bool negate = state->attrs->negate; + vmiReg product = newTemp32(state); + vmiReg acc = r1; + + VMI_ASSERT(op==vmi_FSUB || op==vmi_FADD, "Invalid fbinop"); + + // Perform Multiply to temporary + armEmitFBinopSimdRRR(state, vmi_FT_32_IEEE_754, 1, vmi_FMUL, product, r2, r3); + + if (negate) { + + // Negate the accumulation value before adding/subtracting + acc = newTemp64(state); + FPNeg(state, acc, r1, 32); + + } + + // To implement subtraction, negate the value being subtracted and use vmi_FADD + if (op == vmi_FSUB) FPNeg(state, product, product, 32); + + // Add the (possibly negated) product to/from the accumlate value (+/- r1) + armEmitFBinopSimdRRR(state, vmi_FT_32_IEEE_754, 1, vmi_FADD, r1, acc, product); + } +} + +// +// Emit code for VFP single precision fused multiply accumulate +// +ARM_MORPH_FN(armEmitVFusedMAC) { + + if(executeFPCheck(state)) { + + vmiReg rd = GET_VFP_SREG(state, r1); + vmiReg addend = rd; + vmiReg op1 = GET_VFP_SREG(state, r2); + vmiReg op2 = GET_VFP_SREG(state, r3); + Bool negate = state->attrs->negate; + Bool subtract = state->attrs->subtract; + + if (subtract) { + // Use negative of op1 + vmiReg t = newTemp32(state); + FPNeg(state, t, op1, 32); + op1 = t; + } + + if (negate) { + // Use negative of r1 as addend + vmiReg t = newTemp32(state); + FPNeg(state, t, addend, 32); + addend = t; + } + + // Do rd = addend + (op1 * op2) with no rounding of intermediate results + armEmitFTernopSimdRRRR(state, vmi_FT_32_IEEE_754, 1, vmi_FMADD, rd, op1, op2, addend, False); + + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// VFP VCMP Instructions +//////////////////////////////////////////////////////////////////////////////// + +// +// Common code to execute VFP VCMP instructions +// +static void emitVCmpVFP(armMorphStateP state, vmiReg rd, vmiReg rm) { + + Bool allowQNaN = state->attrs->allowQNaN; + vmiReg relation = getTemp(state); + + // Compare the floating point operands, getting vmiFPRelation result in the register relation + armEmitFCompareRR(state, vmi_FT_32_IEEE_754, relation, rd, rm, allowQNaN, True); + + // Set the FPSCR N, Z, C, V flags according to the result + armEmitArgProcessor(state); + armEmitArgReg(state, 8, relation); + armEmitCall(state, (vmiCallFn) setFPSCRFlags); + +} + +// +// Emit code for VFP VCMP/VCMPE instruction: VCMP{E} Sd, Sm +// +ARM_MORPH_FN(armEmitVCMP_VFP) { + + if(executeFPCheck(state)) { + + vmiReg rd = GET_VFP_SREG(state, r1); + vmiReg rm = GET_VFP_SREG(state, r2); + + emitVCmpVFP(state, rd, rm); + + } +} + +// +// Emit code for VFP VCMP/VCMPE immediate 0.0 instruction: VCMP{E} Sd, #0.0 +// Note: VCMP instruction does not use short vectors +// +ARM_MORPH_FN(armEmitVCMP0_VFP) { + + if(executeFPCheck(state)) { + + vmiReg rd = GET_VFP_SREG(state, r1); + vmiReg rm = newTemp32(state); + + armEmitMoveRC(state, 32, rm, 0); + emitVCmpVFP(state, rd, rm); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// VFP VCVT Instructions +//////////////////////////////////////////////////////////////////////////////// + +// +// Emit code for VFP Half to Single precision conversion: VCVTT.F32.F16 Sd, Sm or VCVTB.F32.F16 Sd, Sm +// +ARM_MORPH_FN(armEmitVCVT_SH_VFP) { + + if(executeFPCheck(state)) { + + Uns32 top = state->attrs->highhalf ? 1 : 0; + vmiReg rd = GET_VFP_SREG(state, r1); + vmiReg rm = GET_VFP_SREG(state, r2); + + // point to top half of register when VCVTT + if (top) rm = VMI_REG_DELTA(rm, 2); + + armEmitArgProcessor(state); // argument 1: processor + armEmitArgReg(state, 16, rm); // argument 2: value in rm + armEmitCallResult(state, (vmiCallFn)armFPHalfToSingle, 32, rd); + } +} + +// +// Emit code for VFP Single to Half precision conversion: VCVTT.F16.F32 Sd, Sm or VCVTB.F16.F32 Sd, Sm +// +ARM_MORPH_FN(armEmitVCVT_HS_VFP) { + + if(executeFPCheck(state)) { + + Uns32 top = state->attrs->highhalf ? 1 : 0; + vmiReg rd = GET_VFP_SREG(state, r1); + vmiReg rm = GET_VFP_SREG(state, r2); + + // point to top half of register when VCVTT + if (top) rd = VMI_REG_DELTA(rd, 2); + + armEmitArgProcessor(state); // argument 1: processor + armEmitArgReg(state, 32, rm);// argument 2: value + armEmitCallResult(state, (vmiCallFn)armFPSingleToHalf, 16, rd); + } +} + +// +// Emit code for VFP single precision Floating point to Fixed point (32 or 16 bit) conversion: VCVT +// Note: r1 always equals r2 and the size of the fixed point value is defined by ebytes +// Note: sextend indicates if 16 bit result should be sign extended +// Note: roundFPSCR indicates if the normal rounding mode or round to nearest mode is used +// +ARM_MORPH_FN(armEmitVCVT_XF_VFP) { + + if(executeFPCheck(state)) { + + VMI_ASSERT(state->info.r1== state->info.r2, "r1 must be same as r2"); + + Uns32 fracBits = state->info.c; + Uns32 sextend = state->attrs->sextend; + vmiFPRC roundFPSCR = state->attrs->roundFPSCR; + Uns32 fxBytes = state->attrs->ebytes; + vmiReg rd = GET_VFP_SREG(state, r1); + + FPToFixed(state, rd, fxBytes, rd, 4, fracBits, sextend, !roundFPSCR); + + if (fxBytes != 4) { + // sign extend to fill destination registeru + armEmitMoveExtendRR(state, 32, rd, fxBytes*8, rd, sextend); + } + } +} + +// +// Emit code for VFP single precsion Floating point to signed or unsigned 32 bit Integer conversion: VCVT +// +ARM_MORPH_FN(armEmitVCVT_IF_VFP) { + + if(executeFPCheck(state)) { + + Uns32 sextend = state->attrs->sextend; + vmiFPRC roundFPSCR = state->attrs->roundFPSCR; + vmiReg rd = GET_VFP_SREG(state, r1); + vmiReg rm = GET_VFP_SREG(state, r2); + + FPToFixed(state, rd, 4, rm, 4, 0, sextend, !roundFPSCR); + } +} + +// +// Emit code for VFP Fixed point to single precision Floating point conversion: VCVT +// Note: r1 always equals r2 and the size of the fixed point value is defined by ebytes +// +ARM_MORPH_FN(armEmitVCVT_FX_VFP) { + + if(executeFPCheck(state)) { + + VMI_ASSERT(state->info.r1== state->info.r2, "r1 must be same as r2"); + + Uns32 fracBits = state->info.c; + Uns32 sextend = state->attrs->sextend; + vmiFPRC roundFPSCR = state->attrs->roundFPSCR; + Uns32 fxBytes = state->attrs->ebytes; + vmiReg rd = GET_VFP_SREG(state, r1); + + fixedToFP(state, rd, 4, rd, fxBytes, fracBits, sextend, !roundFPSCR); + } +} + +// +// Emit code for VFP Integer to single precision Floating point conversion: VCVT +// +ARM_MORPH_FN(armEmitVCVT_FI_VFP) { + + if(executeFPCheck(state)) { + + Uns32 sextend = state->attrs->sextend; + vmiFPRC roundFPSCR = state->attrs->roundFPSCR; + vmiReg rd = GET_VFP_SREG(state, r1); + vmiReg rm = GET_VFP_SREG(state, r2); + + fixedToFP(state, rd, 4, rm, 4, 0, sextend, !roundFPSCR); + } +} + +//////////////////////////////////////////////////////////////////////////////// +// DEPRECATED DISASSEMBLY MODE +//////////////////////////////////////////////////////////////////////////////// + +// +// Disassembly mode: SWI 99/9999 terminates the test +// +#define ARM_SWI_EXIT_CODE_THUMB 99 +#define ARM_SWI_EXIT_CODE_NORMAL 9999 + +// +// Should morphing be disabled? (disassembly test mode only) +// +static Bool disableMorph(armMorphStateP state) { + + armP arm = state->arm; + + if(!ARM_DISASSEMBLE(arm)) { + return False; + } else if(state->info.type!=ARM_IT_SWI) { + return True; + } else if( + ( IN_THUMB_MODE(arm) && (state->info.c==ARM_SWI_EXIT_CODE_THUMB)) || + (!IN_THUMB_MODE(arm) && (state->info.c==ARM_SWI_EXIT_CODE_NORMAL)) + ) { + armEmitExit(); + return True; + } else { + return True; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// MORPHER MAIN ROUTINES +//////////////////////////////////////////////////////////////////////////////// + +// +// Advance to the new IT state +// +static Uns8 itAdvance(Uns8 oldState) { + Uns8 newState = (oldState & 0xe0) | ((oldState<<1) & 0x1f); + return (newState & 0xf) ? newState : 0; +} + +// +// Emit code to update ITSTATE if required when the instruction completes (note +// that jumps and branches take special action to reset ITSTATE elsewhere) +// +static void emitUpdateITState(armMorphStateP state) { + + armP arm = state->arm; + + if(state->info.it) { + arm->itStateMT = state->info.it; + armEmitMoveRC(state, 8, ARM_IT_STATE, arm->itStateMT); + } else if(arm->itStateMT) { + arm->itStateMT = itAdvance(arm->itStateMT); + armEmitMoveRC(state, 8, ARM_IT_STATE, arm->itStateMT); + } +} + +// +// Default morpher callback for implemented instructions +// +static void emitImplemented(armMorphStateP state) { + + // start code to skip this instruction conditionally unless it can be + // emitted as a conditional jump + setSkipLabel(state, !state->attrs->condJump ? emitStartSkip(state) : 0); + + // generate instruction code + state->attrs->morphCB(state); + + // generate implicit jump to next instruction if required + armEmitImplicitUncondJump(state); + + // insert conditional instruction skip target label + emitLabel(getSkipLabel(state)); + + // update ITSTATE if required when the instruction completes + emitUpdateITState(state); +} + +// +// Check whether the VFP floating-point type is not supported at the minimum required level +// +static Bool supportVFP(armMorphStateP state, armSDFPType dt, Uns32 minLevel) { + + armP arm = state->arm; + Bool ok; + + VMI_ASSERT (state->attrs->iType==ARM_TY_VFP, "Called with non-VFP instruction"); + + if (!FPU_PRESENT(state->arm)) { + ok = False; + } else if (dt == ARM_SDFPT_F32) { + ok = SCS_FIELD(arm, MVFR0, SinglePrecision) >= minLevel; + } else if (dt == ARM_SDFPT_F64) { + ok = SCS_FIELD(arm, MVFR0, DoublePrecision) >= minLevel; + } else { + ok = True; + } + + return ok; +} + +// +// Determine whether a feature is supported by ISAR +// +static Bool supportedByISAR(armP arm, armMorphStateP state) { + switch(state->info.isar) { + case ARM_ISAR_DIV: + return ARM_ISAR(0, Divide_instrs); + case ARM_ISAR_BKPT: + return ARM_ISAR(0, Debug_instrs); + case ARM_ISAR_CBZ: + return ARM_ISAR(0, CmpBranch_instrs); + case ARM_ISAR_BFC: + return ARM_ISAR(0, BitField_instrs); + case ARM_ISAR_CLZ: + return ARM_ISAR(0, BitCount_instrs); + case ARM_ISAR_SWP: + return ARM_ISAR(0, Swap_instrs); + case ARM_ISAR_BXJ: + return ARM_ISAR(1, Jazelle_instrs); + case ARM_ISAR_BX: + return ARM_ISAR(1, Interwork_instrs)>0; + case ARM_ISAR_BLX: + return ARM_ISAR(1, Interwork_instrs)>1; + case ARM_ISAR_MOVT: + return ARM_ISAR(1, Immediate_instrs); + case ARM_ISAR_IT: + return ARM_ISAR(1, IfThen_instrs); + case ARM_ISAR_SXTB: + return ARM_ISAR(1, Extend_instrs)>0; + case ARM_ISAR_SXTAB: + return ARM_ISAR(1, Extend_instrs)>1; + case ARM_ISAR_SXTB16: + return (ARM_ISAR(1, Extend_instrs)>1) && DSP_PRESENT(arm); + case ARM_ISAR_SRS: + return ARM_ISAR(1, Except_AR_instrs); + case ARM_ISAR_LDM_UR: + return ARM_ISAR(1, Except_instrs); + case ARM_ISAR_SETEND: + return ARM_ISAR(1, Endian_instrs); + case ARM_ISAR_REV: + return ARM_ISAR(2, Reversal_instrs)>0; + case ARM_ISAR_RBIT: + return ARM_ISAR(2, Reversal_instrs)>1; + case ARM_ISAR_MRS_AR: + return ARM_ISAR(2, PSR_AR_instrs); + case ARM_ISAR_UMULL: + return ARM_ISAR(2, MultU_instrs)>0; + case ARM_ISAR_UMAAL: + return ARM_ISAR(2, MultU_instrs)>1; + case ARM_ISAR_SMULL: + return ARM_ISAR(2, MultS_instrs)>0; + case ARM_ISAR_SMLABB: + return ARM_ISAR(2, MultS_instrs)>1; + case ARM_ISAR_SMLAD: + return ARM_ISAR(2, MultS_instrs)>2; + case ARM_ISAR_MLA: + return ARM_ISAR(2, Mult_instrs)>0; + case ARM_ISAR_MLS: + return ARM_ISAR(2, Mult_instrs)>1; + case ARM_ISAR_PLD: + return ARM_ISAR(2, MemHint_instrs)>0; + case ARM_ISAR_PLI: + return ARM_ISAR(2, MemHint_instrs)>2; + case ARM_ISAR_LDRD: + return ARM_ISAR(2, LoadStore_instrs); + case ARM_ISAR_NOP: + return ARM_ISAR(3, TrueNOP_instrs); + case ARM_ISAR_MOVLL: + return ARM_ISAR(3, ThumbCopy_instrs); + case ARM_ISAR_TBB: + return ARM_ISAR(3, TabBranch_instrs); + case ARM_ISAR_LDREX: + return ARM_ISAR(3, SynchPrim_instrs)>0; + case ARM_ISAR_CLREX: + return (ARM_ISAR(3, SynchPrim_instrs)>1) || (ARM_ISAR(4, SynchPrim_instrs_frac)==3); + case ARM_ISAR_LDREXD: + return ARM_ISAR(3, SynchPrim_instrs)>1; + case ARM_ISAR_SVC: + return ARM_ISAR(3, SVC_instrs); + case ARM_ISAR_SSAT: + return ARM_ISAR(3, SIMD_instrs)>0; + case ARM_ISAR_PKHBT: + return DSP_PRESENT(arm); + case ARM_ISAR_QADD: + return ARM_ISAR(3, Saturate_instrs); + case ARM_ISAR_MRS_M: + return ARM_ISAR(4, PSR_M_instrs); + case ARM_ISAR_DMB: + return ARM_ISAR(4, Barrier_instrs); + case ARM_ISAR_LDRBT: + return ARM_ISAR(4, Unpriv_instrs)>0; + case ARM_ISAR_LDRHT: + return ARM_ISAR(4, Unpriv_instrs)>1; + case ARM_ISAR_VMRS: + return FPU_PRESENT(arm); + case ARM_ISAR_VFPV2: + return supportVFP(state, state->info.dt1, 1); + case ARM_ISAR_VFPV3: + return supportVFP(state, state->info.dt1, 2); + case ARM_ISAR_VFPFMAC: + return FPU_PRESENT(arm) && SCS_FIELD(arm, MVFR1, VFP_FusedMAC); + case ARM_ISAR_VFPSQRT: + return SCS_FIELD(arm, MVFR0, SquareRoot) && supportVFP(state, state->info.dt1, 1); + case ARM_ISAR_VFPDIV: + return SCS_FIELD(arm, MVFR0, Divide) && supportVFP(state, state->info.dt1, 1); + case ARM_ISAR_VFPCVT2: + return supportVFP(state, state->info.dt1, 1) && supportVFP(state, state->info.dt2, 1); + case ARM_ISAR_VFPCVT3: + return supportVFP(state, state->info.dt1, 2) && supportVFP(state, state->info.dt2, 2); + case ARM_ISAR_VFPHP: + return FPU_PRESENT(arm) && SCS_FIELD(arm, MVFR1, VFP_HalfPrecision); + default: + VMI_ABORT("unimplemented case"); + return False; + } +} + +// +// Return a boolean indicating whether the processor supports the required +// architecture +// +static Bool supportedOnVariant(armP arm, armMorphStateP state) { + + armArchitecture configVariant = arm->configInfo.arch; + armArchitecture requiredVariant = state->info.support; + + if(ARM_INSTRUCTION_VERSION(requiredVariant) > getInstructionVersion(arm)) { + return False; + } else if(!ARM_SUPPORT(configVariant, requiredVariant & ~ARM_MASK_VERSION)) { + return False; + } else if(state->info.isar && SCS_USE_CPUID(arm)) { + return supportedByISAR(arm, state); + } else { + return True; + } +} + +// +// Create code for the ARM instruction at the simulated address referenced +// by 'thisPC'. +// +VMI_MORPH_FN(armMorphInstruction) { + + armP arm = (armP)processor; + armMorphState state; + + // seed morph-time ITSTATE if this is the first instruction in a code block + if(firstInBlock) { + arm->itStateMT = arm->itStateRT; + } + + // get instruction and instruction type + armDecode(arm, thisPC, &state.info); + + // get morpher attributes for the decoded instruction and initialize other + // state fields + state.attrs = &armMorphTable[state.info.type]; + state.arm = arm; + state.nextPC = state.info.thisPC + state.info.bytes; + state.skipLabel = 0; + state.tempIdx = 0; + state.pcFetched = False; + state.pcSet = ASPC_NA; + state.pcImmediate = 0; + state.setMode = False; + + // if this is the first instruction in the block, mark all derived flags as + // invalid + if(firstInBlock) { + resetDerivedFlags(&state); + } + + if(disableMorph(&state)) { + // no action if in disassembly mode + } else if(!supportedOnVariant(arm, &state)) { + // instruction not supported on this variant + emitNotVariant(&state); + } else if(state.attrs->morphCB) { + // translate the instruction + emitImplemented(&state); + } else if(state.info.type==ARM_IT_LAST) { + // take UsageFault exception + emitUsageFault(&state, EXC_UNDEF_UNDEFINSTR); + } else { + // here if no morph callback specified + emitUnimplemented(&state); + } +} + +// +// Snap instruction fetch addresses to the appropriate boundary +// +VMI_FETCH_SNAP_FN(armFetchSnap) { + + armP arm = (armP)processor; + Uns32 snap = IN_THUMB_MODE(arm) ? 1 : 3; + + return thisPC & ~snap; +} + + diff --git a/ovp/armmModel/armmMorphTable.c b/ovp/armmModel/armmMorphTable.c new file mode 100644 index 00000000..c2ff646c --- /dev/null +++ b/ovp/armmModel/armmMorphTable.c @@ -0,0 +1,423 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// VMI header files +#include "vmi/vmiMessage.h" + +// model header files +#include "armEmit.h" +#include "armMorph.h" +#include "armMorphEntries.h" +#include "armMorphFunctions.h" +#include "armRegisters.h" +#include "armStructure.h" +#include "armUtils.h" + + +//////////////////////////////////////////////////////////////////////////////// +// FLAGS +//////////////////////////////////////////////////////////////////////////////// + +const static vmiFlags flagsZNCV = { + ARM_CF_CONST, + { + [vmi_CF] = ARM_CF_CONST, + [vmi_PF] = VMI_NOFLAG_CONST, + [vmi_ZF] = ARM_ZF_CONST, + [vmi_SF] = ARM_NF_CONST, + [vmi_OF] = ARM_VF_CONST + } +}; + +const static vmiFlags flagsZNBV = { + ARM_CF_CONST, + { + [vmi_CF] = ARM_CF_CONST, + [vmi_PF] = VMI_NOFLAG_CONST, + [vmi_ZF] = ARM_ZF_CONST, + [vmi_SF] = ARM_NF_CONST, + [vmi_OF] = ARM_VF_CONST + }, + vmi_FN_CF_IN|vmi_FN_CF_OUT +}; + +const static vmiFlags flagsZN = { + ARM_CF_CONST, + { + [vmi_CF] = VMI_NOFLAG_CONST, + [vmi_PF] = VMI_NOFLAG_CONST, + [vmi_ZF] = ARM_ZF_CONST, + [vmi_SF] = ARM_NF_CONST, + [vmi_OF] = VMI_NOFLAG_CONST + } +}; + +const static vmiFlags flagsCIn = { + ARM_CF_CONST, + { + [vmi_CF] = VMI_NOFLAG_CONST, + [vmi_PF] = VMI_NOFLAG_CONST, + [vmi_ZF] = VMI_NOFLAG_CONST, + [vmi_SF] = VMI_NOFLAG_CONST, + [vmi_OF] = VMI_NOFLAG_CONST + } +}; + +const static vmiFlags flagsBIn = { + ARM_CF_CONST, + { + [vmi_CF] = VMI_NOFLAG_CONST, + [vmi_PF] = VMI_NOFLAG_CONST, + [vmi_ZF] = VMI_NOFLAG_CONST, + [vmi_SF] = VMI_NOFLAG_CONST, + [vmi_OF] = VMI_NOFLAG_CONST + }, + vmi_FN_CF_IN +}; + +// Macro accessors for flags +#define FLAGS_ZNCV &flagsZNCV +#define FLAGS_ZNBV &flagsZNBV +#define FLAGS_ZN &flagsZN +#define FLAGS_CIN &flagsCIn +#define FLAGS_BIN &flagsBIn + + +//////////////////////////////////////////////////////////////////////////////// +// MORPHER DISPATCH TABLE +//////////////////////////////////////////////////////////////////////////////// + +const armMorphAttr armMorphTable[ARM_IT_LAST+1] = { + + //////////////////////////////////////////////////////////////////////////// + // ARM INSTRUCTIONS + //////////////////////////////////////////////////////////////////////////// + + // data processing instructions + MORPH_SET_ADC (ADC, vmi_ADC, FLAGS_ZNCV, FLAGS_CIN, False), + MORPH_SET_ADC (ADD, vmi_ADD, FLAGS_ZNCV, FLAGS_CIN, False), + MORPH_SET_ADC (AND, vmi_AND, FLAGS_ZN, 0, True ), + MORPH_SET_ADC (BIC, vmi_ANDN, FLAGS_ZN, 0, True ), + MORPH_SET_ADC (EOR, vmi_XOR, FLAGS_ZN, 0, True ), + MORPH_SET_MOV (MOV, vmi_MOV, FLAGS_ZN, 0, True ), + MORPH_SET_ADC (MUL, vmi_MUL, FLAGS_ZN, 0, True ), + MORPH_SET_MOV (MVN, vmi_NOT, FLAGS_ZN, 0, True ), + MORPH_SET_MOV (NEG, vmi_NEG, FLAGS_ZNBV, 0, False), + MORPH_SET_ADC (ORN, vmi_ORN, FLAGS_ZN, 0, True ), + MORPH_SET_ADC (ORR, vmi_OR, FLAGS_ZN, 0, True ), + MORPH_SET_ADC (RSB, vmi_RSUB, FLAGS_ZNBV, FLAGS_BIN, False), + MORPH_SET_ADC (RSC, vmi_RSBB, FLAGS_ZNBV, FLAGS_BIN, False), + MORPH_SET_ADC (SBC, vmi_SBB, FLAGS_ZNBV, FLAGS_BIN, False), + MORPH_SET_ADC (SUB, vmi_SUB, FLAGS_ZNBV, FLAGS_BIN, False), + + // ARMv6T2 move instructions + MORPH_SINGLE (MOVT), + MORPH_SINGLE (MOVW), + + // multiply instructions + MORPH_SET_MLA (MLA, FLAGS_ZN), + MORPH_SET_MLA (MLS, FLAGS_ZN), + MORPH_SET_MLA (MUL, FLAGS_ZN), + MORPH_SET_SMULL (SMLAL, MLAL, vmi_IMUL, FLAGS_ZN), + MORPH_SET_SMULL (SMULL, MULL, vmi_IMUL, FLAGS_ZN), + MORPH_SET_SMULL (UMAAL, MAAL, vmi_MUL, FLAGS_ZN), + MORPH_SET_SMULL (UMLAL, MLAL, vmi_MUL, FLAGS_ZN), + MORPH_SET_SMULL (UMULL, MULL, vmi_MUL, FLAGS_ZN), + + // compare instructions + MORPH_SET_CMN (CMN, vmi_ADD, FLAGS_ZNCV, FLAGS_CIN, False), + MORPH_SET_CMN (CMP, vmi_SUB, FLAGS_ZNBV, FLAGS_BIN, False), + MORPH_SET_CMN (TEQ, vmi_XOR, FLAGS_ZN, 0, True ), + MORPH_SET_CMN (TST, vmi_AND, FLAGS_ZN, 0, True ), + + // branch instructions + MORPH_SET_B (B, False), + MORPH_SET_B (BL, True ), + MORPH_SET_BLX2 (BLX2, True ), + MORPH_SET_BLX2 (BX, False), + + // miscellaneous instructions + MORPH_SINGLE (BKPT), + MORPH_SINGLE (CLZ ), + MORPH_SINGLE (SWI ), + + // load and store instructions + MORPH_SET_LDR (LDR, LDR ), + MORPH_SET_LDR (LDRB, LDR ), + MORPH_SET_LDR (LDRBT, LDR ), + MORPH_SET_LDRH (LDRH, LDR ), + MORPH_SET_LDRH (LDRSB, LDR ), + MORPH_SET_LDRH (LDRSH, LDR ), + MORPH_SET_LDR (LDRT, LDR ), + MORPH_SET_LDR (STR, STR ), + MORPH_SET_LDR (STRB, STR ), + MORPH_SET_LDR (STRBT, STR ), + MORPH_SET_LDRH (STRH, STR ), + MORPH_SET_LDR (STRT, STR ), + + // load and store multiple instructions + MORPH_SET_LDM1 (LDM1), + MORPH_SINGLE (STM1), + + // ARMv6T2 load and store instructions + MORPH_SET_LDRH (LDRHT, LDR), + MORPH_SET_LDRH (LDRSBT, LDR), + MORPH_SET_LDRH (LDRSHT, LDR), + MORPH_SET_LDRH (STRHT, STR), + + // synchronization primitives + MORPH_SET_SWP (LDREX, LDREX), + MORPH_SET_SWP (LDREXB, LDREX), + MORPH_SET_SWP (LDREXH, LDREX), + MORPH_SET_SWP (STREX, STREX), + MORPH_SET_SWP (STREXB, STREX), + MORPH_SET_SWP (STREXH, STREX), + + // coprocessor instructions (all UsageFault) + MORPH_SET_SWP (CDP, UsageFaultCP), + MORPH_SET_SWP (CDP2, UsageFaultCP), + MORPH_SET_LDC (LDC, UsageFaultCP), + MORPH_SET_LDC (LDC2, UsageFaultCP), + MORPH_SET_SWP (MCR, UsageFaultCP), + MORPH_SET_SWP (MCR2, UsageFaultCP), + MORPH_SET_SWP (MRC, UsageFaultCP), + MORPH_SET_SWP (MRC2, UsageFaultCP), + MORPH_SET_LDC (STC, UsageFaultCP), + MORPH_SET_LDC (STC2, UsageFaultCP), + + // status register access instructions + MORPH_SINGLE (MRS), + MORPH_SINGLE (MSR), + + // hint instructions + MORPH_SET_NOP (NOP ), + MORPH_SET_NOP (YIELD), + MORPH_SINGLE (WFE ), + MORPH_SINGLE (WFI ), + MORPH_SINGLE (SEV ), + MORPH_SET_NOP (DBG ), + + // ARMv6 miscellaneous instructions + MORPH_SINGLE (CPS ), + MORPH_SINGLE (CLREX ), + MORPH_SET_NOP (DSB ), + MORPH_SET_NOP (ISB ), + + // ARMv7 miscellaneous instructions + MORPH_SET_PLD (PLD), + MORPH_SET_PLD (PLI), + MORPH_SET_NOP (DMB), + + //////////////////////////////////////////////////////////////////////////// + // DSP INSTRUCTIONS + //////////////////////////////////////////////////////////////////////////// + + // data processing instructions + MORPH_SINGLE (QADD ), + MORPH_SINGLE (QDADD), + MORPH_SINGLE (QDSUB), + MORPH_SINGLE (QSUB ), + + // multiply instructions + MORPH_SET_SMLA_XY (SMLA ), + MORPH_SET_SMLA_XY (SMLAL), + MORPH_SET_SMLAW_Y (SMLAW), + MORPH_SET_SMLA_XY (SMUL ), + MORPH_SET_SMLAW_Y (SMULW), + + // load and store instructions + MORPH_SET_LDRH (LDRD, LDR), + MORPH_SET_LDRH (STRD, STR), + + // coprocessor instructions (all UsageFault) + MORPH_SET_SWP (MCRR, UsageFaultCP), + MORPH_SET_SWP (MCRR2, UsageFaultCP), + MORPH_SET_SWP (MRRC, UsageFaultCP), + MORPH_SET_SWP (MRRC2, UsageFaultCP), + + //////////////////////////////////////////////////////////////////////////// + // MEDIA INSTRUCTIONS + //////////////////////////////////////////////////////////////////////////// + + // basic instructions + MORPH_SINGLE (USAD8 ), + MORPH_SINGLE (USADA8), + MORPH_SINGLE (SBFX ), + MORPH_SINGLE (BFC ), + MORPH_SINGLE (BFI ), + MORPH_SINGLE (UBFX ), + + // parallel add/subtract instructions + MORPH_SET_PAS (S, vmi_ADD, vmi_SUB, True, True, False), + MORPH_SET_PAS (Q, vmi_ADDSQ, vmi_SUBSQ, False, False, False), + MORPH_SET_PAS (SH, vmi_ADD, vmi_SUB, True, False, True ), + MORPH_SET_PAS (U, vmi_ADD, vmi_SUB, False, True, False), + MORPH_SET_PAS (UQ, vmi_ADDUQ, vmi_SUBUQ, False, False, False), + MORPH_SET_PAS (UH, vmi_ADD, vmi_SUB, False, False, True ), + + // packing, unpacking, saturation and reversal instructions + MORPH_SINGLE (PKHBT ), + MORPH_SINGLE (PKHTB ), + MORPH_SINGLE (SSAT ), + MORPH_SINGLE (SSAT16 ), + MORPH_SINGLE (USAT ), + MORPH_SINGLE (USAT16 ), + MORPH_SINGLE (SXTAB ), + MORPH_SINGLE (UXTAB ), + MORPH_SINGLE (SXTAB16), + MORPH_SINGLE (UXTAB16), + MORPH_SINGLE (SXTAH ), + MORPH_SINGLE (UXTAH ), + MORPH_SINGLE (SXTB ), + MORPH_SINGLE (UXTB ), + MORPH_SINGLE (SXTB16 ), + MORPH_SINGLE (UXTB16 ), + MORPH_SINGLE (SXTH ), + MORPH_SINGLE (UXTH ), + MORPH_SINGLE (SEL ), + MORPH_SINGLE (REV ), + MORPH_SINGLE (REV16 ), + MORPH_SINGLE (RBIT ), + MORPH_SINGLE (REVSH ), + + // signed multiply instructions + MORPH_SET_MEDIA_X (SMLAD, SMLXD, vmi_ADD), + MORPH_SET_MEDIA_X (SMUAD, SMUXD, vmi_ADD), + MORPH_SET_MEDIA_X (SMLSD, SMLXD, vmi_SUB), + MORPH_SET_MEDIA_X (SMUSD, SMUXD, vmi_SUB), + MORPH_SET_MEDIA_X (SMLALD, SMLXLD, vmi_ADD), + MORPH_SET_MEDIA_X (SMLSLD, SMLXLD, vmi_SUB), + MORPH_SET_MEDIA_R (SMMLA, SMMLX, vmi_ADD, True ), + MORPH_SET_MEDIA_R (SMMUL, SMMLX, vmi_ADD, False), + MORPH_SET_MEDIA_R (SMMLS, SMMLX, vmi_RSUB, True ), + + // VFP data processing instructions + MORPH_SET_VFP_RRR_F (VMLA_VFP, VMulAcc_VFP, vmi_FADD, 0), + MORPH_SET_VFP_RRR_F (VMLS_VFP, VMulAcc_VFP, vmi_FSUB, 0), + MORPH_SET_VFP_RRR_F (VNMLA_VFP, VMulAcc_VFP, vmi_FSUB, 1), + MORPH_SET_VFP_RRR_F (VNMLS_VFP, VMulAcc_VFP, vmi_FADD, 1), + MORPH_SET_VFP_RRR_F (VNMUL_VFP, VFPBinop, vmi_FMUL, 1), + MORPH_SET_VFP_RRR_F (VMUL_VFP, VFPBinop, vmi_FMUL, 0), + MORPH_SET_VFP_RRR_F (VADD_VFP, VFPBinop, vmi_FADD, 0), + MORPH_SET_VFP_RRR_F (VSUB_VFP, VFPBinop, vmi_FSUB, 0), + MORPH_SET_VFP_RRR_F (VDIV_VFP, VFPBinop, vmi_FDIV, 0), + MORPH_SET_VFP_FMAC_F (VFNMA_VFP, 1, 1), + MORPH_SET_VFP_FMAC_F (VFNMS_VFP, 0, 1), + MORPH_SET_VFP_FMAC_F (VFMA_VFP, 0, 0), + MORPH_SET_VFP_FMAC_F (VFMS_VFP, 1, 0), + MORPH_SET_VFP_S (VMOVI_VFP, VMOVI_VFP), + MORPH_SET_VFP_S (VMOVR_VFP, VMOVR_VFP), + MORPH_SET_VFP_S (VABS_VFP, VABS_VFP), + MORPH_SET_VFP_S (VNEG_VFP, VNEG_VFP), + MORPH_SET_VFP_RR_F (VSQRT_VFP, vmi_FSQRT), + MORPH_SET_VFP_VCMP (VCMP_VFP, VCMP_VFP, 1), + MORPH_SET_VFP_VCMP (VCMPE_VFP, VCMP_VFP, 0), + MORPH_SET_VFP_VCMP (VCMP0_VFP, VCMP0_VFP, 1), + MORPH_SET_VFP_VCMP (VCMPE0_VFP, VCMP0_VFP, 0), + // VCVT between half precision and single precision + MORPH_SET_VFP_VCVT_H (VCVTTFH_VFP, VCVT_SH_VFP, 2, 1), + MORPH_SET_VFP_VCVT_H (VCVTBFH_VFP, VCVT_SH_VFP, 2, 0), + MORPH_SET_VFP_VCVT_H (VCVTTHF_VFP, VCVT_HS_VFP, 2, 1), + MORPH_SET_VFP_VCVT_H (VCVTBHF_VFP, VCVT_HS_VFP, 2, 0), + // VCVT from single precision to Integer (signed or unsigned) with round option + MORPH_SET_VFP_VCVT (VCVTRUF_VFP, VCVT_IF_VFP, 4, 0, 1), + MORPH_SET_VFP_VCVT (VCVTUF_VFP, VCVT_IF_VFP, 4, 0, 0), + MORPH_SET_VFP_VCVT (VCVTRSF_VFP, VCVT_IF_VFP, 4, 1, 1), + MORPH_SET_VFP_VCVT (VCVTSF_VFP, VCVT_IF_VFP, 4, 1, 0), + // VCVT from single precision to Fixed (signed or unsigned, word or half) + MORPH_SET_VFP_VCVT (VCVTXFUW_VFP, VCVT_XF_VFP, 4, 0, 0), + MORPH_SET_VFP_VCVT (VCVTXFSW_VFP, VCVT_XF_VFP, 4, 1, 0), + MORPH_SET_VFP_VCVT (VCVTXFUH_VFP, VCVT_XF_VFP, 2, 0, 0), + MORPH_SET_VFP_VCVT (VCVTXFSH_VFP, VCVT_XF_VFP, 2, 1, 0), + // VCVT from Fixed (signed or unsigned, word or half) to single precision + MORPH_SET_VFP_VCVT (VCVTFXUW_VFP, VCVT_FX_VFP, 4, 0, 0), + MORPH_SET_VFP_VCVT (VCVTFXSW_VFP, VCVT_FX_VFP, 4, 1, 0), + MORPH_SET_VFP_VCVT (VCVTFXUH_VFP, VCVT_FX_VFP, 2, 0, 0), + MORPH_SET_VFP_VCVT (VCVTFXSH_VFP, VCVT_FX_VFP, 2, 1, 0), + // VCVT From Integer (signed or unsigned) to single precision + MORPH_SET_VFP_VCVT (VCVTFU_VFP, VCVT_FI_VFP, 4, 0, 1), + MORPH_SET_VFP_VCVT (VCVTFS_VFP, VCVT_FI_VFP, 4, 1, 1), + + // 8, 16 and 32-bit transfer instructions + MORPH_SET_SINGLE_VFP (VMRS), + MORPH_SET_SINGLE_VFP (VMSR), + MORPH_SET_SINGLE_VFP (VMOVRS), + MORPH_SET_SINGLE_VFP (VMOVSR), + MORPH_SET_SINGLE_VFP (VMOVRZ), + MORPH_SET_SINGLE_VFP (VMOVZR), + + // Extension register load/store instructions + MORPH_SET_VFP_DS (VLDR, VLDR), + MORPH_SET_VFP_DS (VSTR, VSTR), + MORPH_SET_VFP_DS (VLDR, VLDR), + MORPH_SET_VFP_DS (VSTR, VSTR), + MORPH_SET_VFP_DS (VLDMIA, VLDM), + MORPH_SET_VFP_DS (VLDMIAW, VLDM), + MORPH_SET_VFP_DS (VLDMDBW, VLDM), + MORPH_SET_VFP_DS (VPOP, VLDM), + MORPH_SET_VFP_DS (VSTMIA, VSTM), + MORPH_SET_VFP_DS (VSTMIAW, VSTM), + MORPH_SET_VFP_DS (VSTMDBW, VSTM), + MORPH_SET_VFP_DS (VPUSH, VSTM), + + // 64-bit transfer instructions + MORPH_SET_SINGLE_VFP (VMOVRRD), + MORPH_SET_SINGLE_VFP (VMOVDRR), + MORPH_SET_SINGLE_VFP (VMOVRRSS), + MORPH_SET_SINGLE_VFP (VMOVSSRR), + + //////////////////////////////////////////////////////////////////////////// + // THUMB INSTRUCTIONS (WHEN DISTINCT FROM ARM INSTRUCTIONS) + //////////////////////////////////////////////////////////////////////////// + + // data processing instructions + MORPH_SET_ADD4 (ADD4, vmi_ADD, 0, 0, False), + MORPH_SET_ADD6 (ADD6, vmi_ADD, 0, 0, False), + MORPH_SET_ADD7 (ADD7, vmi_ADD, 0, 0, False), + MORPH_SET_ADD7 (SUB4, vmi_SUB, 0, 0, False), + MORPH_SET_MOV3 (MOV3, vmi_MOV, 0, 0, False), + + // address instructions + MORPH_SET_ADR (ADD_ADR, False), + MORPH_SET_ADR (SUB_ADR, True ), + + // branch instructions + MORPH_SET_CBZ (CBNZ, False), + MORPH_SET_CBZ (CBZ, True ), + MORPH_SINGLE (TB), + + // divide instructions + MORPH_SET_SDIV (SDIV, vmi_IDIV), + MORPH_SET_SDIV (UDIV, vmi_DIV ), +}; diff --git a/ovp/armmModel/armmParameters.c b/ovp/armmModel/armmParameters.c new file mode 100644 index 00000000..eb457a37 --- /dev/null +++ b/ovp/armmModel/armmParameters.c @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Imperas header files +#include "hostapi/impAlloc.h" + +// VMI header files +#include "vmi/vmiAttrs.h" +#include "vmi/vmiParameters.h" +#include "vmi/vmiMessage.h" + +#include "armFunctions.h" +#include "armConfig.h" +#include "armmParameters.h" +#include "armStructure.h" +#include "armVariant.h" + +static vmiEnumParameter compatTable[] = { + {"ISA", COMPAT_ISA}, + {"gdb", COMPAT_GDB}, + {"nopBKPT", COMPAT_CODE_SOURCERY}, + { 0, 0 } +}; + +// +// Table of parameter specs +// +static vmiParameter formals[] = { + + VMI_ENUM_PARAM_SPEC( armParamValues, variant, NULL, "Select variant (either a generic ISA or a specific model)"), // filled in by getVariantList() + VMI_ENDIAN_PARAM_SPEC(armParamValues, endian, "Model endian"), + VMI_ENUM_PARAM_SPEC( armParamValues, compatibility, compatTable, "Specify compatibility mode (default: ISA)"), + + VMI_BOOL_PARAM_SPEC( armParamValues, verbose, 1, "Specify verbosity of output" ), + VMI_BOOL_PARAM_SPEC( armParamValues, showHiddenRegs, 0, "Show hidden registers during register tracing" ), + VMI_BOOL_PARAM_SPEC( armParamValues, UAL, 1, "Disassemble using UAL syntax" ), + VMI_BOOL_PARAM_SPEC( armParamValues, enableVFPAtReset, 0, "Enable vector floating point (VFP) instructions at reset. (Enables cp10/11 in CPACR)" ), + VMI_BOOL_PARAM_SPEC( armParamValues, disableBitBand, 0, "Disable bit banding"), + VMI_BOOL_PARAM_SPEC( armParamValues, resetAtTime0, 1, "Reset the model at time=0 (NB: default=1)" ), + + VMI_UNS32_PARAM_SPEC( armParamValues, override_CPUID , 0, 0, VMI_MAXU32, "Override system CPUID register"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_MPU_TYPE , 0, 0, VMI_MAXU32, "Override system MPU_TYPE register"), + + VMI_ENDIAN_PARAM_SPEC(armParamValues, instructionEndian, "The ARMv7-M is defined to always fetch instructions in little endian order; this attribute allows the profile-defined instruction endianness to be overridden if required"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_debugMask , 0, 0, VMI_MAXU32, "Specifies debug mask, enabling debug output for model components"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_MPUType , 0, 0, VMI_MAXU32, "Override MPUType register"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_InstructionAttributes0, 0, 0, VMI_MAXU32, "Override InstructionAttributes0 register"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_InstructionAttributes1, 0, 0, VMI_MAXU32, "Override InstructionAttributes1 register"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_InstructionAttributes2, 0, 0, VMI_MAXU32, "Override InstructionAttributes2 register"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_InstructionAttributes3, 0, 0, VMI_MAXU32, "Override InstructionAttributes3 register"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_InstructionAttributes4, 0, 0, VMI_MAXU32, "Override InstructionAttributes4 register"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_InstructionAttributes5, 0, 0, VMI_MAXU32, "Override InstructionAttributes5 register"), + + VMI_UNS32_PARAM_SPEC( armParamValues, override_MVFR0, 0, 0, VMI_MAXU32, "Override MVFR0 register"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_MVFR1, 0, 0, VMI_MAXU32, "Override MVFR1 register"), + + VMI_UNS32_PARAM_SPEC( armParamValues, override_rotateUnaligned , 0, 0, 1, "Specifies that data from unaligned loads by LDR, LDRT or SWP should be rotated (if 1)"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_align64as32 , 0, 0, 1, "Specifies that 64:bit loads and stores are aligned to 32:bit boundaries (if 1)"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_STRoffsetPC12 , 0, 0, 1, "Specifies that STR/STR of PC should do so with 12:byte offset from the current instruction (if 1), otherwise an 8:byte offset is used"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_ERG , 0, 0, 1024, "Specifies exclusive reservation granule"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_priorityBits , 0, 0, 8 , "Specifies number of priority bits in BASEPRI etc (1-8, default is 3)"), + VMI_UNS32_PARAM_SPEC( armParamValues, override_numInterrupts , 0, 0, 4096, "Specifies number of external interrupt lines (0-495, default is 16)"), + +VMI_UNS32_PARAM_SPEC( armParamValues, fail_salp , 0, 0, VMI_MAXU32, "Address of Fail* SAL Object"), + + VMI_END_PARAM +}; + +static Uns32 countVariants(void) { + armConfigCP cfg = armConfigTable; + Uns32 i = 0; + while(cfg->name) { + cfg++; + i++; + } + return i; +} + +// +// First time through, malloc and fill the variant list from the config table +// +static vmiEnumParameterP getVariantList() { + static vmiEnumParameterP list = NULL; + if (!list) { + Uns32 v = 1+ countVariants(); + list = STYPE_CALLOC_N(vmiEnumParameter, v); + vmiEnumParameterP prm; + armConfigCP cfg; + Uns32 i; + for (i = 0, cfg = armConfigTable, prm = list; + cfg->name; + i++, cfg++, prm++) { + prm->name = cfg->name; + prm->value = i; + } + } + return list; +} + +// +// First time through, fill the formals table +// +static vmiParameterP getFormals(void) { + static Bool first = True; + if(first) { + first = False; + formals[0].u.enumParam.legalValues = getVariantList(); + } + return formals; +} + + +// +// Function to iterate the parameter specs +// +VMI_PROC_PARAM_SPECS_FN(armGetParamSpec) { + if(!prev) { + return getFormals(); + } else { + prev++; + if (prev->name) + return prev; + else + return 0; + } +} + +// +// Get the size of the parameter values table +// +VMI_PROC_PARAM_TABLE_SIZE_FN(armParamValueSize) { + return sizeof(armParamValues); +} + + diff --git a/ovp/armmModel/armmParameters.h b/ovp/armmModel/armmParameters.h new file mode 100644 index 00000000..3bcf8849 --- /dev/null +++ b/ovp/armmModel/armmParameters.h @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ARMM_PARAMETERS_H +#define ARMM_PARAMETERS_H + +// VMI header files +#include "vmi/vmiAttrs.h" +#include "vmi/vmiParameters.h" + +#include "armTypeRefs.h" + +// +// Define the attributes value structure +// +typedef struct armParamValuesS { + VMI_ENUM_PARAM(variant); + VMI_ENDIAN_PARAM(endian); + VMI_ENUM_PARAM(compatibility); + + VMI_BOOL_PARAM(verbose); + VMI_BOOL_PARAM(showHiddenRegs); + VMI_BOOL_PARAM(UAL); + VMI_BOOL_PARAM(enableVFPAtReset); + VMI_BOOL_PARAM(disableBitBand); + VMI_BOOL_PARAM(resetAtTime0); + + VMI_UNS32_PARAM(override_CPUID); + VMI_UNS32_PARAM(override_MPU_TYPE); + + VMI_ENUM_PARAM(instructionEndian); + VMI_UNS32_PARAM(override_debugMask); + VMI_UNS32_PARAM(override_MPUType); + VMI_UNS32_PARAM(override_InstructionAttributes0); + VMI_UNS32_PARAM(override_InstructionAttributes1); + VMI_UNS32_PARAM(override_InstructionAttributes2); + VMI_UNS32_PARAM(override_InstructionAttributes3); + VMI_UNS32_PARAM(override_InstructionAttributes4); + VMI_UNS32_PARAM(override_InstructionAttributes5); + + VMI_UNS32_PARAM(override_MVFR0); + VMI_UNS32_PARAM(override_MVFR1); + + VMI_UNS32_PARAM(override_rotateUnaligned); + VMI_UNS32_PARAM(override_align64as32); + VMI_UNS32_PARAM(override_STRoffsetPC12); + VMI_UNS32_PARAM(override_ERG); + VMI_UNS32_PARAM(override_priorityBits); + VMI_UNS32_PARAM(override_numInterrupts); + + VMI_UNS32_PARAM(fail_salp); + + + +} armParamValues, *armParamValuesP; + +#endif diff --git a/ovp/armmModel/armmSemiHost.c b/ovp/armmModel/armmSemiHost.c new file mode 100644 index 00000000..efae648d --- /dev/null +++ b/ovp/armmModel/armmSemiHost.c @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// VMI header files +#include "vmi/vmiTypes.h" +#include "vmi/vmiMessage.h" +#include "vmi/vmiMt.h" + +// model header files +#include "armFunctions.h" +#include "armRegisters.h" +#include "armStructure.h" + + +// +// Prefix for messages from this module +// +#define CPU_PREFIX "ARM_SEMIHOST" + +// +// Return processor endianness +// +inline static memEndian getEndian(armP arm) { + return armGetEndian((vmiProcessorP)arm, False); +} + +// +// Morph return from an opaque intercepted function +// +VMI_INT_RETURN_FN(armIntReturnCB) { + vmimtUncondJumpReg(0, ARM_REG(ARM_REG_LR), VMI_NOREG, vmi_JH_RETURN); +} + +// +// This callback should create code to assign function result to the standard +// return result register +// +VMI_INT_RESULT_FN(armIntResultCB) { + vmimtMoveRR(32, ARM_REG(0), VMI_FUNCRESULT); +} + +// +// This callback should create code to push 32-bit function parameter 'paramNum' +// +static Uns32 push4ByteArg(vmiProcessorP processor, Uns32 paramNum) { + + if(paramNum<=3) { + + // argument in a register + vmimtArgReg(32, ARM_REG(paramNum)); + + } else { + + // argument on the stack + armP arm = (armP)processor; + + // fetch into a temporary + vmimtLoadRRO( + 32, // destBits + 32, // memBits + (paramNum-4)*4, // offset + ARM_TEMP(0), // destination (rd) + ARM_REG(ARM_REG_SP), // stack address (ra) + getEndian(arm), // endian + False, // signExtend + False // checkAlign + ); + + // push temporary argument + vmimtArgReg(32, ARM_TEMP(0)); + } + + return paramNum+1; +} + +// +// This callback should create code to push 64-bit function parameter 'paramNum' +// +static Uns32 push8ByteArg(vmiProcessorP processor, Uns32 paramNum) { + + paramNum += push4ByteArg(processor, paramNum); + paramNum += push4ByteArg(processor, paramNum); + + return paramNum; +} + +// +// This callback should create code to push address function parameter 'paramNum' +// +static Uns32 pushAddressArg(vmiProcessorP processor, Uns32 paramNum) { + + if(paramNum<=3) { + + // argument in a register + vmimtArgRegSimAddress(32, ARM_REG(paramNum)); + + } else { + + // argument on the stack + armP arm = (armP)processor; + + // fetch into a temporary + vmimtLoadRRO( + 32, // destBits + 32, // memBits + (paramNum-4)*4, // offset + ARM_TEMP(0), // destination (rd) + ARM_REG(ARM_REG_SP), // stack address (ra) + getEndian(arm), // endian + False, // signExtend + False // checkAlign + ); + + // push temporary argument + vmimtArgRegSimAddress(32, ARM_TEMP(0)); + } + + return paramNum+1; +} + +// +// This callback should create code to push function arguments prior to an +// Imperas standard intercept +// +VMI_INT_PAR_FN(armIntParCB) { + + Uns32 paramNum = 0; + char ch; + + while((ch=*format++)) { + + switch(ch) { + + case '4': + paramNum = push4ByteArg(processor, paramNum); + break; + + case '8': + paramNum = push8ByteArg(processor, paramNum); + break; + + case 'a': + paramNum = pushAddressArg(processor, paramNum); + break; + + default: + VMI_ABORT("Unrecognised format character '%c'", ch); + } + } +} + diff --git a/ovp/armmModel/armmSys.c b/ovp/armmModel/armmSys.c new file mode 100644 index 00000000..7a5f1068 --- /dev/null +++ b/ovp/armmModel/armmSys.c @@ -0,0 +1,1683 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// standard header files +#include +#include +#include + +// VMI header files +#include "vmi/vmiMessage.h" +#include "vmi/vmiRt.h" +#include "vmi/vmiView.h" + +// model header files +#include "armExceptions.h" +#include "armExceptionTypes.h" +#include "armMessage.h" +#include "armStructure.h" +#include "armSys.h" +#include "armSysRegisters.h" +#include "armUtils.h" +#include "armVM.h" + + +// +// Prefix for messages from this module +// +#define CPU_PREFIX "ARM_SCS" + + +//////////////////////////////////////////////////////////////////////////////// +// UTILITIES +//////////////////////////////////////////////////////////////////////////////// + +// +// Return current program counter +// +inline static Uns32 getPC(armP arm) { + return vmirtGetPC((vmiProcessorP)arm); +} + +// +// Is the numbered exception enabled? +// +inline static Bool isEnabled(armP arm, armExceptNum num) { + return EX_MASK_GET(arm->xEnable, num); +} + +// +// Is the numbered exception pending? +// +inline static Bool isPending(armP arm, armExceptNum num) { + return EX_MASK_GET(arm->xPend, num); +} + +// +// Is the numbered exception active? +// +inline static Bool isActive(armP arm, armExceptNum num) { + return EX_MASK_GET(arm->xActive, num); +} + +// +// Enable or disabled the numbered exception +// +inline static void setEnabled(armP arm, armExceptNum num, Bool set) { + EX_MASK_SET_V(arm->xEnable, num, set); +} + +// +// Set or clear the pending bit for the passed exception +// +inline static void setPending(armP arm, armExceptNum num, Bool set) { + EX_MASK_SET_V(arm->xPend, num, set); +} + +// +// Set or clear the active bit for the passed exception +// +inline static void setActive(armP arm, armExceptNum num, Bool set) { + EX_MASK_SET_V(arm->xActive, num, set); +} + +// +// Write a value to the passed net +// +inline static void writeNet(armP arm, Uns32 netHandle, Uns32 value) { + if(netHandle) { + vmirtWriteNetPort((vmiProcessorP)arm, netHandle, value); + } +} + +// +// Is the region number valid? +// +inline static Bool validRegion(armP arm, Uns32 region) { + return (region < SCS_FIELD(arm, MPU_TYPE, DREGION)); +} + +//////////////////////////////////////////////////////////////////////////////// +// READ AND WRITE CALLBACKS +//////////////////////////////////////////////////////////////////////////////// + +// +// System register read callback type +// +#define ARM_SCS_READFN(_NAME) Uns32 _NAME( \ + armP arm, \ + armSCSRegId id, \ + Uns32 byteOffset \ +) +typedef ARM_SCS_READFN((*armSCSReadFn)); + +// +// System register write callback type +// +#define ARM_SCS_WRITEFN(_NAME) void _NAME( \ + armP arm, \ + armSCSRegId id, \ + Uns32 newValue, \ + Uns32 byteOffset \ +) +typedef ARM_SCS_WRITEFN((*armSCSWriteFn)); + +// +// Update a system register, preserving read-only bits +// +#define UPDATE_SCS_MASKED(_P, _R, _NEW) \ + SCS_REG_UNS32(_P, _R) = ( \ + (SCS_REG_UNS32(_P, _R) & ~SCS_WRITE_MASK_##_R) | \ + (_NEW & SCS_WRITE_MASK_##_R) \ + ) + +// +// Dummy function to ignore a system register read +// +static ARM_SCS_READFN(ignoreSysRead) { + + Uns32 thisPC = getPC(arm); + + vmiMessage("W", CPU_PREFIX"_ISR", + SRCREF_FMT "SCS register read ignored (return 0)", + SRCREF_ARGS(arm, thisPC) + ); + + return 0; +} + +// +// Dummy function to ignore a system register write +// +static ARM_SCS_WRITEFN(ignoreSysWrite) { + + Uns32 thisPC = getPC(arm); + + vmiMessage("W", CPU_PREFIX"_ISW", + SRCREF_FMT "SCS register write ignored", + SRCREF_ARGS(arm, thisPC) + ); +} + +// +// Write MPU_CONTROL +// +static ARM_SCS_WRITEFN(writeMPU_CONTROL) { + + // update field, preserving read-only bits + Bool oldENABLE = SCS_FIELD(arm, MPU_CONTROL, ENABLE); + Bool oldHFNMIENA = SCS_FIELD(arm, MPU_CONTROL, HFNMIENA); + Bool oldPRIVDEFENA = SCS_FIELD(arm, MPU_CONTROL, PRIVDEFENA); + UPDATE_SCS_MASKED(arm, MPU_CONTROL, newValue); + Bool newENABLE = SCS_FIELD(arm, MPU_CONTROL, ENABLE); + Bool newHFNMIENA = SCS_FIELD(arm, MPU_CONTROL, HFNMIENA); + Bool newPRIVDEFENA = SCS_FIELD(arm, MPU_CONTROL, PRIVDEFENA); + + // mode switch may be required + if((oldENABLE!=newENABLE) || (oldHFNMIENA!=newHFNMIENA)) { + armSwitchMode(arm); + } + + // if PRIVDEFENA has been *cleared*, the privileged mode MPU must be + // refilled + if(oldPRIVDEFENA && !newPRIVDEFENA) { + armVMFlushMPUPriv(arm); + } +} + +// +// Write MPU_RNR +// +static ARM_SCS_WRITEFN(writeMPU_RNR) { + + // out-of-range writes to this register are ignored + if(validRegion(arm, newValue)) { + SCS_REG_UNS32(arm, MPU_RNR) = newValue; + } +} + +// +// Read MPU_RBAR +// +static ARM_SCS_READFN(readMPU_RBAR) { + + Uns32 region = SCS_FIELD(arm, MPU_RNR, REGION); + + // use union to assemble composed value + union {Uns32 u32; SCS_REG_DECL(MPU_RBAR);} u = { + armVMReadRBAR(arm, region, True) + }; + + // MPU_RBAR.VALID is RAZ + u.MPU_RBAR.VALID = 0; + + // MPU_RBAR.REGION is an alias of MPU_RNR.REGION + u.MPU_RBAR.REGION = SCS_FIELD(arm, MPU_RNR, REGION); + + // return composed value + return u.u32; +} + +// +// Write MPU_RBAR +// +static ARM_SCS_WRITEFN(writeMPU_RBAR) { + + Uns32 region; + + // use union to extract value fields + union {Uns32 u32; SCS_REG_DECL(MPU_RBAR);} u = {newValue}; + + // update region if valid and in range, and get the region to update + if(u.MPU_RBAR.VALID && validRegion(arm, u.MPU_RBAR.REGION)) { + region = SCS_FIELD(arm, MPU_RNR, REGION) = u.MPU_RBAR.REGION; + } else { + region = SCS_FIELD(arm, MPU_RNR, REGION); + } + + // update the region + armVMWriteRBAR(arm, region, True, newValue); +} + +// +// Read MPU_RASR +// +static ARM_SCS_READFN(readMPU_RASR) { + + // derive region number, allowing for alias offset + Uns32 region = SCS_FIELD(arm, MPU_RNR, REGION); + + return armVMReadRASR(arm, region, True); +} + +// +// Write MPU_RASR +// +static ARM_SCS_WRITEFN(writeMPU_RASR) { + + // derive region number, allowing for alias offset + Uns32 region = SCS_FIELD(arm, MPU_RNR, REGION); + + armVMWriteRASR(arm, region, True, newValue); +} + +// +// Read ICSR +// +static ARM_SCS_READFN(readICSR) { + + // use union to assemble composed value + union {Uns32 u32; SCS_REG_DECL(ICSR);} u = {0}; + + // seed exception number fields + u.ICSR.VECTACTIVE = PSR_FIELD(arm, exceptNum); + u.ICSR.ISRPENDING = arm->pendingInterrupt; + u.ICSR.VECTPENDING = arm->pendingException; + + // seed pending fields + u.ICSR.PENDSTSET = isPending(arm, AEN_SysTick); + u.ICSR.PENDSVSET = isPending(arm, AEN_PendSV); + u.ICSR.NMIPENDSET = isPending(arm, AEN_NMI); + + // seed RETTOBASE + u.ICSR.RETTOBASE = armGetRetToBase(arm); + + // return composed value + return u.u32; +} + +// +// Write ICSR +// +static ARM_SCS_WRITEFN(writeICSR) { + + // use union to extract value fields + union {Uns32 u32; SCS_REG_DECL(ICSR);} u = {newValue}; + + // raise NMI + if(u.ICSR.NMIPENDSET) { + setPending(arm, AEN_NMI, 1); + } + + // raise/clear PendSV + if(u.ICSR.PENDSVSET) { + setPending(arm, AEN_PendSV, 1); + } else if(u.ICSR.PENDSVCLR) { + setPending(arm, AEN_PendSV, 0); + } + + // raise/clear SysTick + if(u.ICSR.PENDSTSET) { + setPending(arm, AEN_SysTick, 1); + } else if(u.ICSR.PENDSTCLR) { + setPending(arm, AEN_SysTick, 0); + } + + // refresh any pending exception state + armRefreshPendingException(arm); +} + +// +// Read AIRCR +// +static ARM_SCS_READFN(readAIRCR) { + + // VECTKEY field has a fixed magic value + SCS_FIELD(arm, AIRCR, VECTKEY) = 0xfa05; + + // return composed value + return SCS_REG_UNS32(arm, AIRCR); +} + +// +// Write AIRCR +// +static ARM_SCS_WRITEFN(writeAIRCR) { + + // use union to extract value fields + union {Uns32 u32; SCS_REG_DECL(AIRCR);} u = {newValue}; + + // update only on magic code match + if(u.AIRCR.VECTKEY == 0x05fa) { + + // update PRIGROUP if required + if(SCS_FIELD(arm, AIRCR, PRIGROUP) != u.AIRCR.PRIGROUP) { + SCS_FIELD(arm, AIRCR, PRIGROUP) = u.AIRCR.PRIGROUP; + armRefreshExecutionPriorityPendingException(arm); + } + + // assert interrupt request if required + SCS_FIELD(arm, AIRCR, SYSRESETREQ) = u.AIRCR.SYSRESETREQ; + if(SCS_FIELD(arm, AIRCR, SYSRESETREQ)) { + writeNet(arm, arm->sysResetReq, 1); + } + } +} + +// +// Write CCR +// +static ARM_SCS_WRITEFN(writeCCR) { + + // update field, preserving read-only bits + Bool oldUnalignedTrap = SCS_FIELD(arm, CCR, UNALIGN_TRP); + UPDATE_SCS_MASKED(arm, CCR, newValue); + Bool newUnalignedTrap = SCS_FIELD(arm, CCR, UNALIGN_TRP); + + // modify blockMask if anligned access trap has changed + if(oldUnalignedTrap!=newUnalignedTrap) { + + // if this is the first time that unaligned accesses have been enabled + // or disabled, discard the current code dictionaries (they need to be + // regenerated with unaligned access checking enabled in the block mask) + if(!arm->checkUnaligned) { + vmirtFlushAllDicts((vmiProcessorP)arm); + arm->checkUnaligned = True; + } + + // refresh block mask + armSetBlockMask(arm); + } +} + +// +// Write CFSR +// NOTE: register has W1C (write-1-to-clear) semantics +// +static ARM_SCS_WRITEFN(writeCFSR) { + SCS_REG_UNS32(arm, CFSR) &= ~newValue; +} + +// +// Write HFSR +// NOTE: register has W1C (write-1-to-clear) semantics +// +static ARM_SCS_WRITEFN(writeHFSR) { + SCS_REG_UNS32(arm, HFSR) &= ~newValue; +} + +// +// Write CPACR register value +// +static ARM_SCS_WRITEFN(writeCPACR) { + + // get original register value and writable mask + Uns32 oldValue = SCS_REG_UNS32(arm, CPACR); + Uns32 mask = SCS_MASK_UNS32(arm, CPACR); + + // set the new register value, allowing for writable bits + SCS_REG_UNS32(arm, CPACR) = ((oldValue&~mask) | (newValue&mask)); + + // update blockMask to reflect enabled or disabled coprocessors + armSetBlockMask(arm); +} + +// +// Write FPCCR register value +// +static ARM_SCS_WRITEFN(writeFPCCR) { + + // update register, preserving read-only bits + Uns32 oldBMValue = SCS_REG_UNS32(arm, FPCCR) & SCS_BLOCKMASK_FPCCR; + UPDATE_SCS_MASKED(arm, FPCCR, newValue); + Uns32 newBMValue = SCS_REG_UNS32(arm, FPCCR) & SCS_BLOCKMASK_FPCCR; + + // refresh blockMask if any bits included in block mask have changed + if(oldBMValue!=newBMValue) { + armSetBlockMask(arm); + } +} + +// +// Read SYST_CSR +// +static ARM_SCS_READFN(readSYST_CSR) { + return armReadSYST_CSR(arm); +} + +// +// Write SYST_CSR +// +static ARM_SCS_WRITEFN(writeSYST_CSR) { + armWriteSYST_CSR(arm, newValue); +} + +// +// Write SYST_RVR +// +static ARM_SCS_WRITEFN(writeSYST_RVR) { + armWriteSYST_RVR(arm, newValue); +} + +// +// Read SYST_CVR +// +static ARM_SCS_READFN(readSYST_CVR) { + return armReadSYST_CVR(arm); +} + +// +// Write SYST_CVR +// NOTE: value written is always zero (supplied value is ignored) +// +static ARM_SCS_WRITEFN(writeSYST_CVR) { + armWriteSYST_CVR(arm, 0); +} + +// +// Read SHCSR +// +static ARM_SCS_READFN(readSHCSR) { + + // use union to assemble composed value + union {Uns32 u32; SCS_REG_DECL(SHCSR);} u = {0}; + + // seed enable fields + u.SHCSR.USGFAULTENA = isEnabled(arm, AEN_UsageFault); + u.SHCSR.BUSFAULTENA = isEnabled(arm, AEN_BusFault); + u.SHCSR.MEMFAULTENA = isEnabled(arm, AEN_MemManage); + + // seed pending fields + u.SHCSR.SVCALLPENDED = isPending(arm, AEN_SVCall); + u.SHCSR.USGFAULTPENDED = isPending(arm, AEN_UsageFault); + u.SHCSR.BUSFAULTPENDED = isPending(arm, AEN_BusFault); + u.SHCSR.MEMFAULTPENDED = isPending(arm, AEN_MemManage); + + // seed active fields + u.SHCSR.SYSTICKACT = isActive(arm, AEN_SysTick); + u.SHCSR.PENDSVACT = isActive(arm, AEN_PendSV); + u.SHCSR.MONITORACT = isActive(arm, AEN_DebugMonitor); + u.SHCSR.SVCALLACT = isActive(arm, AEN_SVCall); + u.SHCSR.USGFAULTACT = isActive(arm, AEN_UsageFault); + u.SHCSR.BUSFAULTACT = isActive(arm, AEN_BusFault); + u.SHCSR.MEMFAULTACT = isActive(arm, AEN_MemManage); + + // return composed value + return u.u32; +} + +// +// Write SHCSR +// +static ARM_SCS_WRITEFN(writeSHCSR) { + + // use union to extract value fields + union {Uns32 u32; SCS_REG_DECL(SHCSR);} u = {newValue}; + + // extract enable fields + setEnabled(arm, AEN_UsageFault, u.SHCSR.USGFAULTENA); + setEnabled(arm, AEN_BusFault, u.SHCSR.BUSFAULTENA); + setEnabled(arm, AEN_MemManage, u.SHCSR.MEMFAULTENA); + + // extract pending fields + setPending(arm, AEN_SVCall, u.SHCSR.SVCALLPENDED); + setPending(arm, AEN_UsageFault, u.SHCSR.USGFAULTPENDED); + setPending(arm, AEN_BusFault, u.SHCSR.BUSFAULTPENDED); + setPending(arm, AEN_MemManage, u.SHCSR.MEMFAULTPENDED); + + // extract active fields + setActive(arm, AEN_SysTick, u.SHCSR.SYSTICKACT); + setActive(arm, AEN_PendSV, u.SHCSR.PENDSVACT); + setActive(arm, AEN_DebugMonitor, u.SHCSR.MONITORACT); + setActive(arm, AEN_SVCall, u.SHCSR.SVCALLACT); + setActive(arm, AEN_UsageFault, u.SHCSR.USGFAULTACT); + setActive(arm, AEN_BusFault, u.SHCSR.BUSFAULTACT); + setActive(arm, AEN_MemManage, u.SHCSR.MEMFAULTACT); + + // refresh any pending exception state + armRefreshPendingException(arm); +} + +// +// Common routine for SHPR/NVIC_IPR read +// +static Uns32 readPriority(armP arm, Uns32 byteOffset) { + + if(byteOffsetexceptNum) { + return *(Uns32 *)(&arm->xPriority[byteOffset]); + } else { + return 0; + } +} + +// +// Common routine for SHPR/NVIC_IPR write +// +static void writePriority(armP arm, Uns32 byteOffset, Uns32 newValue) { + + if(byteOffsetexceptNum) { + + // priority value must be masked to the supported bits + newValue &= arm->priorityMask; + + // get indexed value in priority array + Uns32 *valueP = (Uns32 *)(&arm->xPriority[byteOffset]); + + // update priority entry if required + if(newValue != *valueP) { + *valueP = newValue; + armRefreshExecutionPriorityPendingException(arm); + } + } +} + +// +// Read SHPR1 +// +static ARM_SCS_READFN(readSHPR1) { + return readPriority(arm, 4); +} + +// +// Write SHPR1 +// +static ARM_SCS_WRITEFN(writeSHPR1) { + writePriority(arm, 4, newValue & SCS_WRITE_MASK_SHPR1); +} + +// +// Read SHPR2 +// +static ARM_SCS_READFN(readSHPR2) { + return readPriority(arm, 8); +} + +// +// Write SHPR2 +// +static ARM_SCS_WRITEFN(writeSHPR2) { + writePriority(arm, 8, newValue & SCS_WRITE_MASK_SHPR2); +} + +// +// Read SHPR3 +// +static ARM_SCS_READFN(readSHPR3) { + return readPriority(arm, 12); +} + +// +// Write SHPR3 +// +static ARM_SCS_WRITEFN(writeSHPR3) { + writePriority(arm, 12, newValue & SCS_WRITE_MASK_SHPR3); +} + +// +// Write STIR +// NOTE: this can be made accessible to user mode +// +static ARM_SCS_WRITEFN(writeSTIR) { + + // use union to extract value fields + union {Uns32 u32; SCS_REG_DECL(STIR);} u = {newValue}; + Uns32 exceptionNum = u.STIR.INTID + AEN_ExternalInt0; + + // ensure interrupt is within bounds + if(exceptionNumexceptNum) { + + // raise the exception + setPending(arm, exceptionNum, 1); + + // refresh any pending exception state + armRefreshPendingException(arm); + } +} + +// +// Return a composed value from an interrupt mask register +// +static Uns32 readIntReg(armP arm, Uns32 *reg, Uns32 byteOffset) { + + Uns32 wordOffset = byteOffset*4; + Uns32 result = 0; + + // validate interrupt register is in bounds + if(wordOffsetexceptMaskNum) { + + // get lower half of the result + result = reg[wordOffset] >> AEN_ExternalInt0; + + // upper half is extracted only if this is not the last entry + if(wordOffset!=(arm->exceptMaskNum-1)) { + result |= reg[wordOffset+1] << (32-AEN_ExternalInt0); + } + } + + return result; +} + +// +// Add one-bits from the passed value into the register +// +static void setIntReg(armP arm, Uns32 *reg, Uns32 byteOffset, Uns32 newValue) { + + Uns32 wordOffset = byteOffset*4; + + // validate interrupt register is in bounds + if(wordOffsetexceptMaskNum) { + + // set lower half of the result + reg[wordOffset] |= (newValue << AEN_ExternalInt0); + + // upper half is set only if this is not the last entry + if(wordOffset!=(arm->exceptMaskNum-1)) { + reg[wordOffset+1] |= (newValue >> (32-AEN_ExternalInt0)); + } + + // refresh any pending exception state + armRefreshPendingException(arm); + } +} + +// +// Remove one-bits from the passed value into the register +// +static void clearIntReg(armP arm, Uns32 *reg, Uns32 byteOffset, Uns32 newValue) { + + Uns32 wordOffset = byteOffset*4; + + // validate interrupt register is in bounds + if(wordOffsetexceptMaskNum) { + + // set lower half of the result + reg[wordOffset] &= ~(newValue << AEN_ExternalInt0); + + // upper half is set only if this is not the last entry + if(wordOffset!=(arm->exceptMaskNum-1)) { + reg[wordOffset+1] &= ~(newValue >> (32-AEN_ExternalInt0)); + } + + // refresh any pending exception state + armRefreshPendingException(arm); + } +} + +// +// Read NVIC_ISER +// +static ARM_SCS_READFN(readNVIC_ISER) { + return readIntReg(arm, arm->xEnable, byteOffset); +} + +// +// Write NVIC_ISER +// +static ARM_SCS_WRITEFN(writeNVIC_ISER) { + setIntReg(arm, arm->xEnable, byteOffset, newValue); +} + +// +// Read NVIC_ICER +// +static ARM_SCS_READFN(readNVIC_ICER) { + return readIntReg(arm, arm->xEnable, byteOffset); +} + +// +// Write NVIC_ICER +// +static ARM_SCS_WRITEFN(writeNVIC_ICER) { + clearIntReg(arm, arm->xEnable, byteOffset, newValue); +} + +// +// Read NVIC_ISPR +// +static ARM_SCS_READFN(readNVIC_ISPR) { + return readIntReg(arm, arm->xPend, byteOffset); +} + +// +// Write NVIC_ISPR +// +static ARM_SCS_WRITEFN(writeNVIC_ISPR) { + setIntReg(arm, arm->xPend, byteOffset, newValue); +} + +// +// Read NVIC_ICPR +// +static ARM_SCS_READFN(readNVIC_ICPR) { + return readIntReg(arm, arm->xPend, byteOffset); +} + +// +// Write NVIC_ICPR +// +static ARM_SCS_WRITEFN(writeNVIC_ICPR) { + clearIntReg(arm, arm->xPend, byteOffset, newValue); +} + +// +// Read NVIC_IABR +// +static ARM_SCS_READFN(readNVIC_IABR) { + return readIntReg(arm, arm->xActive, byteOffset); +} + +// +// Read NVIC_IPR +// +static ARM_SCS_READFN(readNVIC_IPR) { + return readPriority(arm, byteOffset+AEN_ExternalInt0); +} + +// +// Write NVIC_IPR +// +static ARM_SCS_WRITEFN(writeNVIC_IPR) { + writePriority(arm, byteOffset+AEN_ExternalInt0, newValue); +} + + +//////////////////////////////////////////////////////////////////////////////// +// RESET AND INITIALIZATION +//////////////////////////////////////////////////////////////////////////////// + +// +// Macro used to set initial value of read-only system register from configuration +// +#define INITIALIZE_SCS_REG(_P, _N) \ + SCS_REG_STRUCT(_P, _N) = SCS_REG_STRUCT_DEFAULT(_P, _N) + +// +// Macro used to set initial value of read-only system field from configuration +// +#define INITIALIZE_SCS_FIELD(_P, _N, _F) \ + SCS_FIELD(_P, _N, _F) = SCS_FIELD_DEFAULT(_P, _N, _F) + +// +// Macro use to force reset of a system register to a fixed initial value +// +#define RESET_SCS_REG_VALUE(_P, _R, _V) \ + armWriteSysRegPriv(SCS_ID(_R), _P, _V) + +// +// Macro use to force reset of a system register to its initial configured state +// +#define RESET_SCS_REG_CONFIG(_P, _R) { \ + union {SCS_REG_DECL(_R); Uns32 u32;} u = {SCS_REG_STRUCT_DEFAULT(_P, _R)}; \ + RESET_SCS_REG_VALUE(_P, _R, u.u32); \ +} + +// +// Call on initialization +// +void armSysInitialize(armP arm) { + + // initialize SCS registers that are directly represented + INITIALIZE_SCS_REG(arm, ICTR); + INITIALIZE_SCS_REG(arm, CPUID); + INITIALIZE_SCS_REG(arm, SYST_CALIB); + INITIALIZE_SCS_REG(arm, ID_PFR0); + INITIALIZE_SCS_REG(arm, ID_PFR1); + INITIALIZE_SCS_REG(arm, ID_DFR0); + INITIALIZE_SCS_REG(arm, ID_AFR0); + INITIALIZE_SCS_REG(arm, ID_MMFR0); + INITIALIZE_SCS_REG(arm, ID_MMFR1); + INITIALIZE_SCS_REG(arm, ID_MMFR2); + INITIALIZE_SCS_REG(arm, ID_MMFR3); + INITIALIZE_SCS_REG(arm, ID_ISAR0); + INITIALIZE_SCS_REG(arm, ID_ISAR1); + INITIALIZE_SCS_REG(arm, ID_ISAR2); + INITIALIZE_SCS_REG(arm, ID_ISAR3); + INITIALIZE_SCS_REG(arm, ID_ISAR4); + INITIALIZE_SCS_REG(arm, ID_ISAR5); + INITIALIZE_SCS_REG(arm, MVFR0); + INITIALIZE_SCS_REG(arm, MVFR1); + INITIALIZE_SCS_REG(arm, MPU_TYPE); + + // configure permanently-enabled exceptions + arm->xEnable[0] = ARM_EXCEPT_PERMANENT_ENABLE; + + // ICTR.INTLINESNUM depends on the number of configured interrupts + SCS_FIELD(arm, ICTR, INTLINESNUM) = NUM_INTERRUPTS(arm)/32; +} + +// +// Call on reset +// +void armSysReset(armP arm) { + + Uns32 i; + + // reset SCS registers that are directly represented + RESET_SCS_REG_CONFIG(arm, ACTLR); + RESET_SCS_REG_CONFIG(arm, CPACR); + RESET_SCS_REG_VALUE (arm, ICSR, 0x00000000); + RESET_SCS_REG_VALUE (arm, VTOR, 0x00000000); + RESET_SCS_REG_VALUE (arm, AIRCR, 0x05fa0000); + RESET_SCS_REG_VALUE (arm, SCR, 0x00000000); + RESET_SCS_REG_VALUE (arm, CCR, 0x00000200); + RESET_SCS_REG_VALUE (arm, SHCSR, 0x00000000); + RESET_SCS_REG_VALUE (arm, CFSR, 0xffffffff); + RESET_SCS_REG_VALUE (arm, HFSR, 0x00000000); + RESET_SCS_REG_VALUE (arm, SYST_CSR, 0x00000000); + RESET_SCS_REG_VALUE (arm, FPCCR, 0xc0000000); + RESET_SCS_REG_VALUE (arm, FPCAR, 0x00000000); + RESET_SCS_REG_VALUE (arm, FPDSCR, 0x00000000); + + arm->FPCARdomain = NULL; + + // reset exception pending and enable masks + for(i=0; iexceptMaskNum; i++) { + arm->xPend [i] = 0; + arm->xEnable[i] = 0; + } + + // reset exception priority numbers + for(i=0; iexceptNum; i++) { + arm->xPriority[i] = 0; + } + + // configure permanently-enabled exceptions + arm->xEnable[0] = ARM_EXCEPT_PERMANENT_ENABLE; +} + + +//////////////////////////////////////////////////////////////////////////////// +// SYSTEM REGISTER ACCESS +//////////////////////////////////////////////////////////////////////////////// + +// +// PPB address range +// +#define PPB_LOW 0xe0000000 +#define PPB_HIGH 0xe00fffff + +// +// System space base address +// +#define SCS_BASE 0xe000e000 + +// +// Type used to return information enabling a system register to be read +// +typedef struct armSCSReadInfoS { + vmiReg rs; // if the register can be read by a simple access + armSCSReadFn cb; // if the read requires a callback + armSysRegDesc regDesc; // regDesc for read callback +} armSCSReadInfo, *armSCSReadInfoP; + +// +// Type used to return information enabling a system register to be written +// +typedef struct armSCSWriteInfoS { + vmiReg rd; // if the register can be written by a simple access + armSCSWriteFn cb; // if the write requires a callback + armSysRegDesc regDesc; // regDesc for write callback + Uns32 writeMask;// mask of writable bits in this register +} armSCSWriteInfo, *armSCSWriteInfoP; + +// +// Type enumerating the units for which system registers are present +// +typedef enum armUnitE { + AU_ALL, // always present + AU_MPU, // present for cores with MPU only + AU_USM, // access possible in user mode if CCR.USERSETMPEND + AU_FPU, // access possible if FPU implemented +} armUnit; + +// +// Type enumerating classes of access to register +// +typedef enum accessActionE { + + AA_READ = 0x0, + AA_WRITE = 0x1, + AA_PRIV = 0x0, + AA_USER = 0x2, + + AA_PRIV_READ = AA_READ | AA_PRIV, // privileged mode read + AA_PRIV_WRITE = AA_WRITE | AA_PRIV, // privileged mode write + AA_USER_READ = AA_READ | AA_USER, // user mode read + AA_USER_WRITE = AA_WRITE | AA_USER, // user mode write + + AA_LAST + +} accessAction; + +// +// Descr strings for accessAction values +// +static const char *accessActionRW[2][2] = { + {"--", "-w"}, + {"r-", "rw"}, +}; + +// +// This structure records information about each system register +// +typedef struct scsRegAttrsS { + const char *name; + Bool access[AA_LAST]; + armUnit unit; + armSCSReadFn readCB; + armSCSWriteFn writeCB; + Uns32 writeMask; + Uns32 address; + Uns32 numWords; +} scsRegAttrs; + +// +// Macro to initialize one-word entry in scsRegInfo +// +#define SCS_ATTR(_ID, _PR,_PW,_UR,_UW, _UNIT, _READCB, _WRITECB) \ + [SCS_ID(_ID)] = { \ + name : #_ID, \ + access : {_PR,_PW,_UR,_UW}, \ + unit : _UNIT, \ + readCB : _READCB, \ + writeCB : _WRITECB, \ + writeMask : SCS_WRITE_MASK_##_ID, \ + address : SCS_BASE | SCS_ADDRESS_##_ID, \ + numWords : 1 \ + } + +// +// Macro to initialize multi-word entry in scsRegInfo +// +#define SCS_ATTR_N(_ID, _N, _PR,_PW,_UR,_UW, _UNIT, _READCB, _WRITECB) \ + [SCS_ID(_ID##x##_N)] = { \ + name : #_ID"x"#_N, \ + access : {_PR,_PW,_UR,_UW}, \ + unit : _UNIT, \ + readCB : _READCB, \ + writeCB : _WRITECB, \ + writeMask : SCS_WRITE_MASK_##_ID, \ + address : SCS_BASE | SCS_ADDRESS_##_ID, \ + numWords : _N \ + } + +// +// Table of system register attributes +// +const static scsRegAttrs scsRegInfo[SCS_ID(Size)] = { + + //////////////////////////////////////////////////////////////////////////// + // true registers (represented in processor structure) + //////////////////////////////////////////////////////////////////////////// + + // id access unit readCB writeCB + SCS_ATTR( ICTR, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ACTLR, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( CPUID, 1,0,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( VTOR, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( AIRCR, 1,1,0,0, AU_ALL, readAIRCR, writeAIRCR ), + SCS_ATTR( SCR, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( CCR, 1,1,0,0, AU_ALL, 0, writeCCR ), + SCS_ATTR( CFSR, 1,1,0,0, AU_ALL, 0, writeCFSR ), + SCS_ATTR( HFSR, 1,1,0,0, AU_ALL, 0, writeHFSR ), + SCS_ATTR( AFSR, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( MMAR, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( BFAR, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( CPACR, 1,1,0,0, AU_ALL, 0, writeCPACR ), + + // id access unit readCB writeCB + SCS_ATTR( SYST_CSR, 1,1,0,0, AU_ALL, readSYST_CSR, writeSYST_CSR ), + SCS_ATTR( SYST_RVR, 1,1,0,0, AU_ALL, 0, writeSYST_RVR ), + SCS_ATTR( SYST_CVR, 1,1,0,0, AU_ALL, readSYST_CVR, writeSYST_CVR ), + SCS_ATTR( SYST_CALIB, 1,1,0,0, AU_ALL, 0, 0 ), + + // id access unit readCB writeCB + SCS_ATTR( ID_PFR0, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ID_PFR1, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ID_DFR0, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ID_AFR0, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ID_MMFR0, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ID_MMFR1, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ID_MMFR2, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ID_MMFR3, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ID_ISAR0, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ID_ISAR1, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ID_ISAR2, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ID_ISAR3, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ID_ISAR4, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( ID_ISAR5, 1,1,0,0, AU_ALL, 0, 0 ), + + // id access unit readCB writeCB + SCS_ATTR( FPCCR, 1,1,0,0, AU_FPU, 0, writeFPCCR ), + SCS_ATTR( FPCAR, 1,1,0,0, AU_FPU, 0, 0 ), + SCS_ATTR( FPDSCR, 1,1,0,0, AU_FPU, 0, 0 ), + SCS_ATTR( MVFR0, 1,0,0,0, AU_FPU, 0, 0 ), + SCS_ATTR( MVFR1, 1,0,0,0, AU_FPU, 0, 0 ), + + // id access unit readCB writeCB + SCS_ATTR( MPU_TYPE, 1,1,0,0, AU_ALL, 0, 0 ), + SCS_ATTR( MPU_CONTROL, 1,1,0,0, AU_ALL, 0, writeMPU_CONTROL), + SCS_ATTR( MPU_RNR, 1,1,0,0, AU_ALL, 0, writeMPU_RNR ), + + //////////////////////////////////////////////////////////////////////////// + // pseudo-registers (not represented in processor structure) + //////////////////////////////////////////////////////////////////////////// + + // id access unit readCB writeCB + SCS_ATTR( ICSR, 1,1,0,0, AU_ALL, readICSR, writeICSR ), + SCS_ATTR( SHCSR, 1,1,0,0, AU_ALL, readSHCSR, writeSHCSR ), + + // id access unit readCB writeCB + SCS_ATTR( SHPR1, 1,1,0,0, AU_ALL, readSHPR1, writeSHPR1 ), + SCS_ATTR( SHPR2, 1,1,0,0, AU_ALL, readSHPR2, writeSHPR2 ), + SCS_ATTR( SHPR3, 1,1,0,0, AU_ALL, readSHPR3, writeSHPR3 ), + SCS_ATTR( STIR, 1,1,1,1, AU_USM, ignoreSysRead, writeSTIR ), + + // id num access unit readCB writeCB + SCS_ATTR_N(NVIC_ISER, 16, 1,1,0,0, AU_ALL, readNVIC_ISER, writeNVIC_ISER ), + SCS_ATTR_N(NVIC_ICER, 16, 1,1,0,0, AU_ALL, readNVIC_ICER, writeNVIC_ICER ), + SCS_ATTR_N(NVIC_ISPR, 16, 1,1,0,0, AU_ALL, readNVIC_ISPR, writeNVIC_ISPR ), + SCS_ATTR_N(NVIC_ICPR, 16, 1,1,0,0, AU_ALL, readNVIC_ICPR, writeNVIC_ICPR ), + SCS_ATTR_N(NVIC_IABR, 16, 1,1,0,0, AU_ALL, readNVIC_IABR, ignoreSysWrite ), + SCS_ATTR_N(NVIC_IPR, 255, 1,1,0,0, AU_ALL, readNVIC_IPR, writeNVIC_IPR ), + + // id access unit readCB writeCB + SCS_ATTR( MPU_RBAR, 1,1,0,0, AU_MPU, readMPU_RBAR, writeMPU_RBAR ), + SCS_ATTR( MPU_RASR, 1,1,0,0, AU_MPU, readMPU_RASR, writeMPU_RASR ), + SCS_ATTR( MPU_RBAR_A1, 1,1,0,0, AU_MPU, readMPU_RBAR, writeMPU_RBAR ), + SCS_ATTR( MPU_RASR_A1, 1,1,0,0, AU_MPU, readMPU_RASR, writeMPU_RASR ), + SCS_ATTR( MPU_RBAR_A2, 1,1,0,0, AU_MPU, readMPU_RBAR, writeMPU_RBAR ), + SCS_ATTR( MPU_RASR_A2, 1,1,0,0, AU_MPU, readMPU_RASR, writeMPU_RASR ), + SCS_ATTR( MPU_RBAR_A3, 1,1,0,0, AU_MPU, readMPU_RBAR, writeMPU_RBAR ), + SCS_ATTR( MPU_RASR_A3, 1,1,0,0, AU_MPU, readMPU_RASR, writeMPU_RASR ) +}; + +// +// Iterator filling 'desc' with the next system register description - +// 'desc.name' should be initialized to NULL prior to the first call +// +Bool armGetSysRegisterDesc(armSysRegDescP desc) { + + armSCSRegId id = desc->name ? desc->id+1 : 0; + + if(id>=SCS_ID(FirstPseudoReg)) { + + return False; + + } else { + + const scsRegAttrs *attrs = &scsRegInfo[id]; + + desc->name = attrs->name; + desc->id = id; + desc->address = attrs->address; + desc->privRW = accessActionRW[attrs->access[AA_PRIV_READ]][attrs->access[AA_PRIV_WRITE]]; + desc->userRW = accessActionRW[attrs->access[AA_USER_READ]][attrs->access[AA_USER_WRITE]]; + + return True; + } +} + +// +// Can the indicated system register be accessed using the passed action on +// this ARM processor variant? +// +static Bool canAccessSysReg( + armP arm, + const scsRegAttrs *attrs, + accessAction action +) { + if(!attrs->access[action]) { + return False; + } else switch(attrs->unit) { + case AU_MPU: return MPU_PRESENT(arm); + case AU_USM: return !(action&AA_USER) || SCS_FIELD(arm, CCR, USERSETMPEND); + case AU_FPU: return FPU_PRESENT(arm); + default: return True; + } +} + +// +// Fill armSCSReadInfo structure with information about how to perform a system +// register read +// +static Bool getSysReadInfo( + armP arm, + armSCSReadInfoP info, + armSCSRegId id, + accessAction action +) { + info->rs = VMI_NOREG; + + if(id==SCS_ID(INVALID)) { + + // invalid register access + info->cb = ignoreSysRead; + + } else { + + // read of plain register or by callback + if(scsRegInfo[id].readCB) { + info->cb = scsRegInfo[id].readCB; + } else if(idrs = ARM_SCS_REG(id); + } + } + + return True; +} + +// +// Fill armSCSWriteInfo structure with information about how to perform a +// system register write +// +static Bool getSysWriteInfo( + armP arm, + armSCSWriteInfoP info, + Uns32 id, + accessAction action +) { + info->rd = VMI_NOREG; + + if(id==SCS_ID(INVALID)) { + + // invalid register access + info->cb = ignoreSysWrite; + + } else { + + // write of plain register or by callback + if(scsRegInfo[id].writeCB) { + info->cb = scsRegInfo[id].writeCB; + } else if(idrd = ARM_SCS_REG(id); + } + + // get mask of writable bits + info->writeMask = scsRegInfo[id].writeMask; + } + + return True; +} + +// +// Return a value read from a fixed offset in the processor structure +// +static ARM_SCS_READFN(readSCS) { + return arm->scs.regs[id]; +} + +// +// Write a value to a fixed offset in the processor structure +// +static ARM_SCS_WRITEFN(writeSCS) { + + Uns32 writeMask = scsRegInfo[id].writeMask; + Uns32 oldValue = arm->scs.regs[id]; + + arm->scs.regs[id] = ((oldValue&~writeMask) | (newValue&writeMask)); +} + +// +// Is the indicated system register supported on this processor? +// +Bool armGetSysRegSupported(armSCSRegId id, armP arm) { + + const scsRegAttrs *attrs = &scsRegInfo[id]; + + return ( + canAccessSysReg(arm, attrs, AA_PRIV_READ) || + canAccessSysReg(arm, attrs, AA_PRIV_WRITE) + ); +} + +// +// Get system register read callback (privileged mode) +// +static armSCSReadFn getSysPrivRegReadCallBack(armSCSRegId id, armP arm) { + + accessAction action = AA_PRIV_READ; + const scsRegAttrs *attrs = &scsRegInfo[id]; + armSCSReadInfo info = {regDesc : {id:id}}; + + if(!canAccessSysReg(arm, attrs, action)) { + return 0; + } else if(!getSysReadInfo(arm, &info, id, action)) { + return 0; + } else if(info.cb) { + return info.cb; + } else if(!VMI_ISNOREG(info.rs)) { + return readSCS; + } else { + return 0; + } +} + +// +// Get system register write callback (privileged mode) +// +static armSCSWriteFn getSysPrivRegWriteCallBack(armSCSRegId id, armP arm) { + + accessAction action = AA_PRIV_WRITE; + const scsRegAttrs *attrs = &scsRegInfo[id]; + armSCSWriteInfo info = {regDesc : {id:id}}; + + if(!canAccessSysReg(arm, attrs, action)) { + return 0; + } else if(!getSysWriteInfo(arm, &info, id, action)) { + return 0; + } else if(info.cb) { + return info.cb; + } else if(!VMI_ISNOREG(info.rd)) { + return writeSCS; + } else { + return 0; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// INSERT SYSTEM REGISTERS INTO DOMAIN +//////////////////////////////////////////////////////////////////////////////// + +// +// Callback function to write a system register +// +static VMI_MEM_WRITE_FN(writeSys) { + + if(processor) { + + armP arm = (armP)processor; + const scsRegAttrs *attrs = userData; + armSCSRegId id = attrs-scsRegInfo; + Uns32 offset = address - attrs->address; + Uns32 writeMask = attrs->writeMask; + Bool bigEndian = SCS_FIELD(arm, AIRCR, ENDIANNESS); + Uns32 newValue; + + // get the value to write (may be partial register) + if(bytes==1) { + newValue = *(Uns8*)value; + } else if(bytes==2) { + newValue = SWAP_2_BYTE_COND(*(Uns16*)value, bigEndian); + } else if(bytes==4) { + newValue = SWAP_4_BYTE_COND(*(Uns32*)value, bigEndian); + } else { + VMI_ABORT("unimplemented system register size %u bytes", bytes); + } + + if(IN_USER_MODE(arm) && !canAccessSysReg(arm, attrs, AA_USER_WRITE)) { + + // no access to this register in user mode + armBusFault(arm, address, MEM_PRIV_W); + + } else if(attrs->writeCB) { + + // detect partial register write + if((offset&3) || (bytes!=4)) { + + // access within register - do read-modify-write of entire 4-byte + // register + Uns32 offset4 = offset&~3; + Uns32 oldValue; + Uns32 i; + + // get 4-byte value, either directly or by callback + if(attrs->readCB) { + oldValue = attrs->readCB(arm, id, offset4); + } else { + oldValue = arm->scs.regs[id]; + } + + // get 4-byte value with its mask + union {Uns32 u32; Uns8 u8[4];} uValue = {oldValue}; + union {Uns32 u32; Uns8 u8[4];} uMask = {writeMask}; + + // update writable bits in the subrange + for(i=offset; i>= 8; + } + + // put back the modified value + attrs->writeCB(arm, id, uValue.u32, offset4); + + } else { + + // write full register + attrs->writeCB(arm, id, newValue, offset); + } + + } else { + + Uns32 *regValue = &arm->scs.regs[id]; + + // detect partial register write + if((offset&3) || (bytes!=4)) { + + // access within register + Uns8 *regValue8 = (Uns8 *)regValue; + Uns32 i; + + // align writeMask + writeMask >>= (offset*8); + + // update writable bits in the subrange + for(i=offset; i>= 8; + writeMask >>= 8; + } + + } else { + + // write full register + *regValue = ( + (*regValue & ~writeMask) | + (newValue & writeMask) + ); + } + } + } +} + +// +// Callback function to read a system register +// +static VMI_MEM_READ_FN(readSys) { + + if(processor) { + + armP arm = (armP)processor; + const scsRegAttrs *attrs = userData; + armSCSRegId id = attrs-scsRegInfo; + Uns32 offset = address - attrs->address; + Uns32 result = 0; + Bool bigEndian = SCS_FIELD(arm, AIRCR, ENDIANNESS); + + if(IN_USER_MODE(arm) && !canAccessSysReg(arm, attrs, AA_USER_READ)) { + + // no access to this register in user mode + armBusFault(arm, address, MEM_PRIV_R); + + } else if(attrs->readCB) { + + // read using callback + Uns32 offset4 = offset&~3; + Uns32 shift = (offset&3) * 8; + + result = attrs->readCB(arm, id, offset4) >> shift; + + } else { + + // read from processor structure + Uns32 *regValue = &arm->scs.regs[id]; + Uns32 offset4 = offset/4; + Uns32 shift = (offset&3) * 8; + + result = regValue[offset4] >> shift; + } + + // get the value read (may be partial register) + if(bytes==1) { + *(Uns8*)value = result; + } else if(bytes==2) { + *(Uns16*)value = SWAP_2_BYTE_COND(result, bigEndian); + } else if(bytes==4) { + *(Uns32*)value = SWAP_4_BYTE_COND(result, bigEndian); + } else { + VMI_ABORT("unimplemented system register size %u bytes", bytes); + } + } +} + +// +// Callback function to write PPB region not mapped to a system register +// +static VMI_MEM_WRITE_FN(writePPB) { + + armP arm = (armP)processor; + + if(arm && IN_USER_MODE(arm)) { + armBusFault(arm, address, MEM_PRIV_W); + } +} + +// +// Callback function to read PPB region not mapped to a system register +// +static VMI_MEM_READ_FN(readPPB) { + + armP arm = (armP)processor; + + if(arm && IN_USER_MODE(arm)) { + armBusFault(arm, address, MEM_PRIV_W); + } else if(bytes==1) { + *(Uns8*)value = 0; + } else if(bytes==2) { + *(Uns16*)value = 0; + } else if(bytes==4) { + *(Uns32*)value = 0; + } else { + VMI_ABORT("unimplemented system register size %u bytes", bytes); + } +} + +// +// Type used to record SCS register bounds +// +typedef struct SCSRegAddrS { + Uns32 lowAddr; // low address + Uns32 highAddr; // high address +} SCSRegAddr, *SCSRegAddrP; + +// +// Callback used to sort SCS register entries in ascending address +// +static Int32 compareRegAddr(const void *va, const void *vb) { + + const SCSRegAddr *a = va; + const SCSRegAddr *b = vb; + + return a->lowAddrlowAddr ? -1 : 1; +} + +// +// Insert SCS region into the passed domain at the standard location +// +void armSysCreateSCSRegion(armP arm, memDomainP domain) { + + armSCSRegId id; + SCSRegAddr scsRegAddrs[SCS_ID(Size)]; + Uns32 prevLow = PPB_LOW; + Uns32 numRegs = 0; + Uns32 i; + + // remove any existing PPB region mapping + vmirtUnaliasMemory(domain, PPB_LOW, PPB_HIGH); + + // install system registers + for(id=0; idlowAddr = attrs->address; + regAddr->highAddr = regAddr->lowAddr + attrs->numWords*4 - 1; + + // install callbacks to implement the register + vmirtMapCallbacks( + domain, regAddr->lowAddr, regAddr->highAddr, readSys, writeSys, + (void *)attrs + ); + } + } + + // sort register descriptions in ascending address order + qsort(scsRegAddrs, numRegs, sizeof(scsRegAddrs[0]), compareRegAddr); + + // fill unmapped sections in PPB region with default callback + for(i=0; ilowAddr > prevLow) { + vmirtMapCallbacks( + domain, prevLow, regAddr->lowAddr-1, readPPB, writePPB, 0 + ); + } + + prevLow = regAddr->highAddr+1; + } + + // map final PPB subregion using default callbacks + if(prevLowaddress); + + // create new register object + vmiViewObjectP regObject = vmirtAddViewObject( + baseObject, name, description + ); + + // either reference the value directly or use a callback + if(info.cb) { + vmirtSetViewObjectValueCallback(regObject, scsRegViewCB, (void *)id); + } else { + Uns32 *refValue = &arm->scs.regs[id]; + vmirtSetViewObjectRefValue(regObject, VMI_VVT_UNS32, refValue); + } + } +} + + diff --git a/ovp/armmModel/armmUtils.c b/ovp/armmModel/armmUtils.c new file mode 100644 index 00000000..0de184d3 --- /dev/null +++ b/ovp/armmModel/armmUtils.c @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// VMI header files +#include "vmi/vmiCxt.h" +#include "vmi/vmiRt.h" +#include "vmi/vmiMessage.h" + +// model header files +#include "armDecode.h" +#include "armExceptions.h" +#include "armFunctions.h" +#include "armStructure.h" +#include "armSysRegisters.h" +#include "armUtils.h" +#include "armVM.h" + +// +// Return the version of the instruction set implemented by the processor +// +inline static Uns32 getInstructionVersion(armP arm) { + return ARM_INSTRUCTION_VERSION(arm->configInfo.arch); +} + +// +// Return endianness of the processor, public routine +// +VMI_ENDIAN_FN(armGetEndian) { + + armP arm = (armP)processor; + + if(isFetch) { + return arm->instructionEndian; + } else if(SCS_FIELD(arm, AIRCR, ENDIANNESS)) { + return MEM_ENDIAN_BIG; + } else { + return MEM_ENDIAN_LITTLE; + } +} + +// +// Set the initial endianness for the model +// +void armSetInitialEndian(armP arm, Bool isBigEndian) { + SCS_FIELD(arm, AIRCR, ENDIANNESS) = isBigEndian; +} + +// +// Return the next instruction address after 'thisPC'. +// +VMI_NEXT_PC_FN(armNextInstruction) { + return (Uns32)(thisPC + armGetInstructionSize((armP)processor, thisPC)); +} + +// +// Return the name of a GPR +// +const char *armGetGPRName(armP arm, Uns32 index) { + + static const char *gprNames[] = { + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "sl", "fp", "ip", "sp", "lr", "pc" + }; + + return gprNames[index]; +} + +// +// Return the name of a CPR +// +const char *armGetCPRName(armP arm, Uns32 index) { + + static const char *cprNames[] = { + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", + "cr8", "cr9", "cr10", "cr11", "cr12", "cr13", "cr14", "cr15" + }; + + return cprNames[index]; +} + +#define SWAP_REG(_R1, _R2) {Uns32 _V = _R1; _R1= _R2; _R2 = _V;} +#define SWAP_GPR(_N, _SET) SWAP_REG(arm->regs[_N], arm->bank.R##_N##_##_SET) + +// +// Switch banked registers on switch to the passed mode +// +inline static void switchRegs(armP arm, Bool useSPProcess) { + if(useSPProcess) { + SWAP_GPR(13, process); + } +} + +// +// Switch banked registers on switch between the passed modes +// +void armSwitchRegs(armP arm, Bool oldUseSPProcess, Bool newUseSPProcess) { + switchRegs(arm, oldUseSPProcess); + switchRegs(arm, newUseSPProcess); +} + +// +// Return current processor block mask +// +static armBlockMask getBlockMask(armP arm) { + + armBlockMask blockMask = 0; + + // get blockmask component selecting register bank + if(USE_SP_PROCESS(arm)) { + blockMask |= ARM_BM_USE_SP_PROCESS; + } + + // include component for endianness + if(SCS_FIELD(arm, AIRCR, ENDIANNESS)) { + blockMask |= ARM_BM_BIG_ENDIAN; + } + + // include component for alignment checking + if(DO_UNALIGNED(arm)) { + blockMask |= ARM_BM_UNALIGNED; + } + + // include component for cp10 (and cp11) enable checking + // NOTE: arm documentation specifies behavior is undefined if cp10 enable + // differs from cp11 enable, so only cp10 enable is checked here + Uns32 cp10Enable = SCS_FIELD(arm, CPACR, cp10); + if(IN_USER_MODE(arm)) { + if(cp10Enable&2) {blockMask |= ARM_BM_CP10;} + } else { + if(cp10Enable&1) {blockMask |= ARM_BM_CP10;} + } + + // include CONTROL.FPCA bit + if(CONTROL_FIELD(arm, FPCA)) { + blockMask |= ARM_BM_FPCA; + } + + // include FPCCR.ASPEN bit + if(SCS_FIELD(arm, FPCCR, ASPEN)) { + blockMask |= ARM_BM_ASPEN; + } + + // include FPCCR.LSPACT bit + if(SCS_FIELD(arm, FPCCR, LSPACT)) { + blockMask |= ARM_BM_LSPACT; + } + + return blockMask; +} + +// +// Update processor block mask +// +void armSetBlockMask(armP arm) { + vmirtSetBlockMask((vmiProcessorP)arm, getBlockMask(arm)); +} + +// +// Update processor mode when system state that affects it has been written +// +static void updateMode(armP arm) { + + // update block mask + armSetBlockMask(arm); + + // switch mode if required + armSwitchMode(arm); +} + +// +// Write CONTROL.SP_PROCESS field +// +void armWriteSPProcess(armP arm, Bool newUseSPProcess) { + + Bool oldUseSPProcess = USE_SP_PROCESS(arm); + + if(oldUseSPProcess!=newUseSPProcess) { + + // update CONTROL.SP_PROCESS + USE_SP_PROCESS(arm) = newUseSPProcess; + + // switch banked registers + armSwitchRegs(arm, oldUseSPProcess, newUseSPProcess); + + // update block mask + armSetBlockMask(arm); + } +} + +// +// Read CPSR register +// +Uns32 armReadCPSR(armP arm) { + + // seed flag fields from flag structure + PSR_FIELD(arm, Z) = arm->aflags.ZF; + PSR_FIELD(arm, N) = arm->aflags.NF; + PSR_FIELD(arm, C) = arm->aflags.CF; + PSR_FIELD(arm, V) = arm->aflags.VF; + PSR_FIELD(arm, Q) = arm->oflags.QF; + + // seed if-then state fields + PSR_FIELD(arm, IT10) = arm->itStateRT & 0x3; + PSR_FIELD(arm, IT72) = arm->itStateRT >> 2; + + // return derived value + return arm->sregs.PSR.reg; +} + +// +// Read CONTROL register +// +Uns32 armReadCONTROL(armP arm) { + + // return value + return arm->sregs.CONTROL.reg; +} + +// +// Write CPSR register +// +void armWriteCPSR(armP arm, Uns32 value, Uns32 mask) { + + // save current processor mode + Bool oldHandlerMode = IN_HANDLER_MODE(arm); + Bool oldCPSRT = PSR_FIELD(arm, T); + + if (!DSP_PRESENT(arm)) { + // GE fields reserved when DSP not implemented + mask &= ~PSR_GE; + } + + // set new register value (writable bits only) + arm->sregs.PSR.reg = (value & mask) | (arm->sregs.PSR.reg & ~mask); + + // get new processor mode + Bool newHandlerMode = IN_HANDLER_MODE(arm); + Bool newCPSRT = PSR_FIELD(arm, T); + + // update arithmetic flag fields if required + if(mask & PSR_FLAGS) { + arm->aflags.ZF = PSR_FIELD(arm, Z); + arm->aflags.NF = PSR_FIELD(arm, N); + arm->aflags.CF = PSR_FIELD(arm, C); + arm->aflags.VF = PSR_FIELD(arm, V); + arm->oflags.QF = PSR_FIELD(arm, Q); + } + + // update if-then state if required + if(mask & PSR_IT) { + arm->itStateRT = (PSR_FIELD(arm, IT10) | (PSR_FIELD(arm, IT72<<2))); + } + + // update processor mode if required + if((oldHandlerMode!=newHandlerMode) || (oldCPSRT!=newCPSRT)) { + updateMode(arm); + } +} + +// +// Write PRIMASK register +// +void armWritePRIMASK(armP arm, Uns32 value) { + + value &= PRIMASK_MASK; + + if(arm->sregs.PRIMASK != value) { + arm->sregs.PRIMASK = value; + armRefreshExecutionPriority(arm); + } +} + +// +// Write BASEPRI register +// +void armWriteBASEPRI(armP arm, Uns32 value) { + + value &= (BASEPRI_MASK & arm->priorityMask); + + if(arm->sregs.BASEPRI != value) { + arm->sregs.BASEPRI = value; + armRefreshExecutionPriority(arm); + } +} + +// +// Write BASEPRI register (using BASEPRI_MAX semantics) +// +void armWriteBASEPRI_MAX(armP arm, Uns32 value) { + + value &= (BASEPRI_MASK & arm->priorityMask); + + if(value && ((valuesregs.BASEPRI) || !arm->sregs.BASEPRI)) { + arm->sregs.BASEPRI = value; + armRefreshExecutionPriority(arm); + } +} + +// +// Write FAULTMASK register +// +void armWriteFAULTMASK(armP arm, Uns32 value) { + + value &= FAULTMASK_MASK; + + if((arm->executionPriority>-1) && (value!=arm->sregs.FAULTMASK)) { + arm->sregs.FAULTMASK = value; + armRefreshExecutionPriority(arm); + } +} + +// +// update the CONTROL.FPCA bit to the value. If it changes then set the block mask +// +void armUpdateFPCA(armP arm, Bool value) { + + // if CONTROL.FPCA changes set new value and set the block mask + if (CONTROL_FIELD(arm, FPCA) != value) { + + CONTROL_FIELD(arm, FPCA) = value; + armSetBlockMask(arm); + + } +} + +// +// update the FPCCR.LSPACT bit to the value. If it changes then set the block mask +// +void armUpdateLSPACT(armP arm, Bool value) { + + // if FPCCR.LSPACT changes set new value and set the block mask + if (SCS_FIELD(arm, FPCCR, LSPACT) != value) { + + SCS_FIELD(arm, FPCCR, LSPACT) = value; + armSetBlockMask(arm); + + } +} + +// +// Write CONTROL register +// +void armWriteCONTROL(armP arm, Uns32 value) { + + armCONTROL u = {reg:value}; + + // update CONTROL.FPCA (FPCA is only implemented if FPU is present) + if (FPU_PRESENT(arm)) { + armUpdateFPCA(arm, u.fields.FPCA); + } + + // update CONTROL.threadUnpriv + Bool oldUserMode = IN_USER_MODE(arm); + CONTROL_FIELD(arm, threadUnpriv) = u.fields.threadUnpriv; + Bool newUserMode = IN_USER_MODE(arm); + + // handle any switch to user mode + if(oldUserMode!=newUserMode) { + updateMode(arm); + } + + // CONTROL.useSP_Process may only be modified in Thread mode + if(!IN_HANDLER_MODE(arm)) { + armWriteSPProcess(arm, u.fields.useSP_Process); + } +} + +// +// Write SP register +// +void armWriteSP(armP arm, Uns32 value) { + arm->regs[ARM_REG_SP] = value & ~3; +} + +// +// Switch processor mode if required +// +void armSwitchMode(armP arm) { + + armMode mode; + + if(!IN_THUMB_MODE(arm)) { + + // invalid mode + mode = ARM_MODE_ARM; + SCS_FIELD(arm, CFSR, INVSTATE) = 1; + + } else { + + mode = 0; + + // user/kernel mode mask + if(IN_USER_MODE(arm)) { + mode |= ARM_MODE_U; + } + + // add MPU enable mask + if(!MPU_ENABLED(arm)) { + // no action + } else if(arm->executionPriority>=0) { + mode |= ARM_MODE_MPU; + } else if(SCS_FIELD(arm, MPU_CONTROL, HFNMIENA)) { + mode |= ARM_MODE_MPU; + } + } + + // switch mode if required + if(mode != arm->mode) { + vmirtSetMode((vmiProcessorP)arm, mode); + arm->mode = mode; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// PROCESSOR RUN STATE TRANSITION HANDLING +//////////////////////////////////////////////////////////////////////////////// + +// +// If this memory access callback is triggered, abort any active load linked +// +static VMI_MEM_WATCH_FN(abortEA) { + armAbortExclusiveAccess((armP)userData); +} + +// +// Install or remove the exclusive access monitor callback +// +static void updateExclusiveAccessCallback(armP arm, Bool install) { + + memDomainP domain = vmirtGetProcessorDataDomain((vmiProcessorP)arm); + Uns32 simLow = arm->exclusiveTag; + Uns32 simHigh = simLow + ~arm->exclusiveTagMask; + + // install or remove a watchpoint on the current exclusive access address + if(install) { + vmirtAddWriteCallback(domain, simLow, simHigh, abortEA, arm); + } else { + vmirtRemoveWriteCallback(domain, simLow, simHigh, abortEA, arm); + } +} + +// +// Abort any active exclusive access +// +void armAbortExclusiveAccess(armP arm) { + + if(arm->exclusiveTag != ARM_NO_TAG) { + + // remove callback on exclusive access monitor region + updateExclusiveAccessCallback(arm, False); + + // clear exclusive tag (AFTER updateExclusiveAccessCallback) + arm->exclusiveTag = ARM_NO_TAG; + } +} + +// +// This is called on simulator context switch (when this processor is either +// about to start or about to stop simulation) +// +VMI_IASSWITCH_FN(armContextSwitchCB) { + + armP arm = (armP)processor; + + // establish a watchpoint on a pending exclusive address to detect if that + // address is written elsewhere. + if(arm->exclusiveTag != ARM_NO_TAG) { + updateExclusiveAccessCallback(arm, state==RS_SUSPEND); + } + + // if a processor is about to be run, make state consistent with any changes + // that may have occurred while the processor was suspended + if(state==RS_RUN) { + armSetBlockMask(arm); + } +} + diff --git a/ovp/armmModel/armmVFP.c b/ovp/armmModel/armmVFP.c new file mode 100644 index 00000000..d0f6ea1e --- /dev/null +++ b/ovp/armmModel/armmVFP.c @@ -0,0 +1,876 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include + +// VMI header files +#include "vmi/vmiRt.h" +#include "vmi/vmiMessage.h" + +// model header files +#include "armFPConstants.h" +#include "armMessage.h" +#include "armVFP.h" +#include "armSysRegisters.h" +#include "armStructure.h" +#include "armUtils.h" + +// +// Prefix for messages from this module +// +#define CPU_PREFIX "ARMM_VFP" + +// +// Return current program counter +// +inline static Uns32 getPC(armP arm) { + return vmirtGetPC((vmiProcessorP)arm); +} + + +//////////////////////////////////////////////////////////////////////////////// +// FLOATING POINT CONTROL PREDICATES +//////////////////////////////////////////////////////////////////////////////// + +// +// Return the current rounding control +// +static vmiFPRC getRoundingControl(armP arm) { + + // map ARM rounding mode to VMI rounding mode + static const vmiFPRC modeMap[] = { + [0] = vmi_FPR_NEAREST, + [1] = vmi_FPR_POS_INF, + [2] = vmi_FPR_NEG_INF, + [3] = vmi_FPR_ZERO + }; + + if(SCS_USE_CPUID(arm) && !SCS_FIELD(arm, MVFR0, VFP_RoundingModes)) { + // if rounding modes are not supported, use vmi_FPR_NEAREST + return vmi_FPR_NEAREST; + } else { + // return the mapped rounding mode + return modeMap[FPSCR_FIELD(arm, RMode)]; + } +} + +// +// Should the default NaN be returned in any calculation that produces a NaN? +// +inline static Bool returnDefaultNaN(armP arm) { + return ( + // in VFP mode, return the default NaN if FPSCR.DN is set + FPSCR_FIELD(arm, DN) || + // MVFR1.DefaultNaNMode=0 indicates hardware supports only the default + // NaN mode + (SCS_USE_CPUID(arm) && !SCS_FIELD(arm, MVFR1, DefaultNaNMode)) + ); +} + +// +// Is flush-to-zero mode enabled? +// +inline static Bool inFTZMode(armP arm) { + return ( + // flush-to-zero is enabled if FPSCR.FZ is set + FPSCR_FIELD(arm, FZ) || + // MVFR1.FlushToZeroMode=0 indicates hardware supports only + // flush-to-zero mode + (SCS_USE_CPUID(arm) && !SCS_FIELD(arm, MVFR1, FlushToZeroMode)) + ); +} + +// +// Is alternative half precision mode enabled? +// +inline static Bool inAHPMode(armP arm) { + return FPSCR_FIELD(arm, AHP); +} + +//////////////////////////////////////////////////////////////////////////////// +// FLOATING REGISTER ACCESS +//////////////////////////////////////////////////////////////////////////////// + +// +// Set control word +// +inline static void setControlWord(armP arm, armFPCW new) { + if(arm->currentCW.u32 != new.u32) { + arm->currentCW = new; + vmirtSetFPControlWord((vmiProcessorP)arm, new.cw); + } +} + +// +// Update VFP control word to make it consistent with the FPSCR +// +static void updateVFPControlWord(armP arm) { + + // Mask off all exceptions */ + armFPCW newFPCW = {.cw.IM=1, .cw.DM=1, .cw.ZM=1, .cw.OM=1, .cw.UM=1, .cw.PM=1}; + + // set rounding control, denormals-are-zero and flush-to-zero + newFPCW.cw.RC = getRoundingControl(arm); + newFPCW.cw.DAZ = newFPCW.cw.FZ = inFTZMode(arm); + + // Set the new control word + setControlWord(arm, newFPCW); + +} + +// +// Write VFP FPSCR register +// +void armWriteFPSCR(armP arm, Uns32 newValue, Uns32 writeMask) { + + Uns32 oldValue = FPSCR_REG(arm); + + // update raw register + FPSCR_REG(arm) = ((oldValue & ~writeMask) | (newValue & writeMask)); + + // set denormal input sticky flag + arm->denormalInput = FPSCR_FIELD(arm, IDC); + + // set sticky flags + vmiFPFlags sticky = {0}; + sticky.f.I = FPSCR_FIELD(arm, IOC); // invalid operation flag + sticky.f.Z = FPSCR_FIELD(arm, DZC); // divide-by-zero flag + sticky.f.O = FPSCR_FIELD(arm, OFC); // overflow flag + sticky.f.U = FPSCR_FIELD(arm, UFC); // underflow flag + sticky.f.P = FPSCR_FIELD(arm, IXC); // inexact flag + arm->sdfpSticky = sticky.bits; + + // set comparison flags + arm->sdfpAFlags.NF = (FPSCR_FIELD(arm, N)) ? 1 : 0; + arm->sdfpAFlags.ZF = (FPSCR_FIELD(arm, Z)) ? 1 : 0; + arm->sdfpAFlags.CF = (FPSCR_FIELD(arm, C)) ? 1 : 0; + arm->sdfpAFlags.VF = (FPSCR_FIELD(arm, V)) ? 1 : 0; + + // update simulator floating point control word + updateVFPControlWord(arm); + +} + +// +// Read VFP FPSCR register +// +Uns32 armReadFPSCR(armP arm) { + + // compose denormal input flag + FPSCR_FIELD(arm, IDC) = arm->denormalInput; + + // compose remaining sticky flags + vmiFPFlags sticky = {arm->sdfpSticky}; + FPSCR_FIELD(arm, IOC) = sticky.f.I; // invalid operation flag + FPSCR_FIELD(arm, DZC) = sticky.f.Z; // divide-by-zero flag + FPSCR_FIELD(arm, OFC) = sticky.f.O; // overflow flag + FPSCR_FIELD(arm, UFC) = sticky.f.U; // underflow flag + FPSCR_FIELD(arm, IXC) = sticky.f.P; // inexact flag + + // compose comparison flags + FPSCR_FIELD(arm, N) = (arm->sdfpAFlags.NF) ? 1 : 0; + FPSCR_FIELD(arm, Z) = (arm->sdfpAFlags.ZF) ? 1 : 0; + FPSCR_FIELD(arm, C) = (arm->sdfpAFlags.CF) ? 1 : 0; + FPSCR_FIELD(arm, V) = (arm->sdfpAFlags.VF) ? 1 : 0; + + // return composed value + return FPSCR_REG(arm); +} + +//////////////////////////////////////////////////////////////////////////////// +// EXCEPTION FLAG UTILITIES +//////////////////////////////////////////////////////////////////////////////// + +// +// Validate that an exception is disabled +// +inline static void validateFTZ(armP arm) { + VMI_ASSERT( + inFTZMode(arm), + "expected enabled flush-to-zero mode" + ); +} + +// +// Set the denormal sticky bit (when flush-to-zero mode is enabled) +// +static void setDenormalStickyFTZ(armP arm) { + validateFTZ(arm); + arm->denormalInput = 1; +} + +// +// Set the underflow sticky bit (when flush-to-zero mode is enabled) +// +static void setUnderflowStickyFTZ(armP arm) { + validateFTZ(arm); + const static vmiFPFlags underflow = {f:{U:1}}; + arm->sdfpSticky |= underflow.bits; +} + +// +// Raise the denormal exception +// +static void raiseDenormal(armP arm) { + arm->denormalInput = 1; +} + +// +// Raise the underflow exception +// +static void raiseUnderflow(armP arm) { + const static vmiFPFlags underflow = {f:{U:1}}; + arm->sdfpSticky |= underflow.bits; +} + +// +// Raise the overflow exception +// +static void raiseOverflow(armP arm) { + const static vmiFPFlags overflow = {f:{O:1}}; + arm->sdfpSticky |= overflow.bits; +} + +// +// Raise the invalid operation exception +// +static void raiseInvalidOperation(armP arm) { + const static vmiFPFlags invalidOperation = {f:{I:1}}; + arm->sdfpSticky |= invalidOperation.bits; +} + +// +// Raise the inexact exception +// +static void raiseInexact(armP arm) { + const static vmiFPFlags inexact = {f:{P:1}}; + arm->sdfpSticky |= inexact.bits; +} + + +//////////////////////////////////////////////////////////////////////////////// +// HALF-PRECISION OPERATIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// Convert from half-precision to single-precision +// +Uns32 armFPHalfToSingle(armP arm, Uns16 half) { + + Int32 exponent = ARM_FP16_EXPONENT(half); + Uns32 fraction = ARM_FP16_FRACTION(half); + Bool sign = ARM_FP16_SIGN(half); + Bool expAll1 = (exponent==ARM_FP16_EXP_ONES); + Bool isZero = (!exponent && !fraction); + Bool isInfinity = (expAll1 && !fraction); + Bool isNaN = (expAll1 && !isInfinity); + Bool useAHP = inAHPMode(arm); + + if(isInfinity && !useAHP) { + + // infinities require exponent correction + exponent = ARM_FP32_EXPONENT(ARM_FP32_PLUS_INFINITY); + fraction = ARM_FP32_FRACTION(ARM_FP32_PLUS_INFINITY); + + } else if(isZero) { + + // zero values require no special processing + + } else if(isNaN && !useAHP) { + + // argument is an SNaN if MSB of fraction is clear + Bool isSNaN = !(fraction & (1 << (ARM_FP16_EXP_SHIFT-1))); + + // raise Invalid Operation exception if an SNaN + if(isSNaN) { + raiseInvalidOperation(arm); + } + + if(returnDefaultNaN(arm)) { + + // default QNaN is required + exponent = ARM_FP32_EXPONENT(ARM_QNAN_DEFAULT_32); + fraction = ARM_FP32_FRACTION(ARM_QNAN_DEFAULT_32); + sign = ARM_FP32_SIGN(ARM_QNAN_DEFAULT_32); + + } else { + + // NaNs require exponent correction + exponent = ARM_FP32_EXP_ONES; + + // NaNs require fraction correction + fraction = fraction << (ARM_FP32_EXP_SHIFT - ARM_FP16_EXP_SHIFT); + fraction |= ARM_QNAN_MASK_32; + } + + } else { + + // normalize a denormal value if required + if(!exponent) { + + // shift up until implicit MSB is 1 + do { + fraction <<= 1; + exponent--; + } while(!(fraction & (1<> (ARM_FP32_EXP_SHIFT - ARM_FP16_EXP_SHIFT); + fraction |= ARM_QNAN_MASK_16; + } + + } else if(isDenormal && inFTZMode(arm)) { + + // flush denormals to zero if required + setDenormalStickyFTZ(arm); + exponent = 0; + fraction = 0; + + } else { + + // split value into sign, unrounded mantissa and exponent + union {Uns32 u32; Flt32 f32;} u = {single}; + Flt32 result = u.f32; + Flt32 mantissa = sign ? -result : result; + exponent = 0; + while(mantissa<1.0) { + mantissa *= 2.0; exponent--; + } + while(mantissa>=2.0) { + mantissa /= 2.0; exponent++; + } + + // bias the exponent so that the minimum exponent becomes 1, lower + // values 0 (indicating possible underflow) + exponent -= ARM_FP16_EXP_MIN; + while(exponent<0) { + exponent++; + mantissa /= 2.0; + } + + // get the unrounded mantissa as an integer and the "units in last + // place" rounding error + Flt32 mantissaExp2F = mantissa*(1<0.5) || ((error==0.5) && (fraction&1))); + overflowToInf = True; + break; + + case vmi_FPR_POS_INF: + roundUp = (error && !sign); + overflowToInf = !sign; + break; + + case vmi_FPR_NEG_INF: + roundUp = (error && sign); + overflowToInf = sign; + break; + + default: + roundUp = False; + overflowToInf = False; + break; + } + + if(roundUp) { + + fraction++; + + // check for round up from denormalized to normalized + if(fraction==(1<=((1<=(1<isFlt32 && (arg->u32 & ARM_QNAN_MASK_32); +} + +// +// Is the argument a 64-bit QNaN? +// +inline static Bool is64BitQNaN(vmiFPNaNArgP arg) { + return !arg->isFlt32 && (arg->u64 & ARM_QNAN_MASK_64); +} + +// +// Is the argument a 32-bit SNaN? +// +inline static Bool is32BitSNaN(vmiFPNaNArgP arg) { + return arg->isFlt32 && !(arg->u32 & ARM_QNAN_MASK_32); +} + +// +// Is the argument a 64-bit SNaN? +// +inline static Bool is64BitSNaN(vmiFPNaNArgP arg) { + return !arg->isFlt32 && !(arg->u64 & ARM_QNAN_MASK_64); +} + +// +// Handle 32-bit QNaN result +// +static VMI_FP_QNAN32_RESULT_FN(handleQNaN32) { + + armP arm = (armP)processor; + + if(!NaNArgNum || returnDefaultNaN(arm)) { + + return ARM_QNAN_DEFAULT_32; + + } else { + + Uns32 i; + + // PASS 1: if any argument is an 32-bit SNaN, return that (as a QNaN) + for(i=0; icurrentCW.u32 = -1; + + // Initialize FP registers if present (AFTER armSysInitialize) + if (SCS_USE_CPUID(arm) && FPU_PRESENT(arm)) { + + // initialize constant tiny values + initTinyValues(); + + // set up QNaN values and handlers + vmirtConfigureFPU( + (vmiProcessorP)arm, + ARM_QNAN_DEFAULT_32, + ARM_QNAN_DEFAULT_64, + 0, // indeterminate value not used + 0, // indeterminate value not used + 0, // indeterminate value not used + handleQNaN32, + handleQNaN64, + handleIndeterminate16, + handleIndeterminate32, + 0, // 64-bit indeterminate value handler not required + handleTinyResult, + handleTinyArgument, + True + ); + + // Set the write mask for CPACR to allow updating field cp10 and cp11 + SCS_MASK_FIELD(arm, CPACR, cp10) = 3; + SCS_MASK_FIELD(arm, CPACR, cp11) = 3; + + } +} + +// +// Call on reset +// +void armFPReset(armP arm) { + + // no action unless floating point is implemented + if(SCS_USE_CPUID(arm) && FPU_PRESENT(arm)) { + armWriteFPSCR(arm, 0, FPSCR_MASK); + } +} + + + diff --git a/ovp/armmModel/armmVM.c b/ovp/armmModel/armmVM.c new file mode 100644 index 00000000..47784862 --- /dev/null +++ b/ovp/armmModel/armmVM.c @@ -0,0 +1,1271 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * YOUR ACCESS TO THE INFORMATION IN THIS MODEL IS CONDITIONAL + * UPON YOUR ACCEPTANCE THAT YOU WILL NOT USE OR PERMIT OTHERS + * TO USE THE INFORMATION FOR THE PURPOSES OF DETERMINING WHETHER + * IMPLEMENTATIONS OF THE ARM ARCHITECTURE INFRINGE ANY THIRD + * PARTY PATENTS. + * + * THE LICENSE BELOW EXTENDS ONLY TO USE OF THE SOFTWARE FOR + * MODELING PURPOSES AND SHALL NOT BE CONSTRUED AS GRANTING + * A LICENSE TO CREATE A HARDWARE IMPLEMENTATION OF THE + * FUNCTIONALITY OF THE SOFTWARE LICENSED HEREUNDER. + * YOU MAY USE THE SOFTWARE SUBJECT TO THE LICENSE TERMS BELOW + * PROVIDED THAT YOU ENSURE THAT THIS NOTICE IS REPLICATED UNMODIFIED + * AND IN ITS ENTIRETY IN ALL DISTRIBUTIONS OF THE SOFTWARE, + * MODIFIED OR UNMODIFIED, IN SOURCE CODE OR IN BINARY FORM. + * + * Licensed under an Imperas Modfied Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.ovpworld.org/licenses/OVP_MODIFIED_1.0_APACHE_OPEN_SOURCE_LICENSE_2.0.pdf + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include // for sprintf + +// Imperas header files +#include "hostapi/impAlloc.h" + +// VMI header files +#include "vmi/vmiAttrs.h" +#include "vmi/vmiMessage.h" +#include "vmi/vmiRt.h" +#include "vmi/vmiTypes.h" + +// model header files +#include "armExceptions.h" +#include "armFunctions.h" +#include "armStructure.h" +#include "armMessage.h" +#include "armSys.h" +#include "armVM.h" +#include "armUtils.h" + +// +// Prefix for messages from this module +// +#define CPU_PREFIX "ARM_VM" + +// +// This is the minimum region size usable with SRD bits and the number of +// subregions per region +// +#define SRD_MIN_SIZE 256 +#define SRD_REGIONS 8 + + +//////////////////////////////////////////////////////////////////////////////// +// UTILITIES +//////////////////////////////////////////////////////////////////////////////// + +// +// Return current program counter +// +inline static Uns32 getPC(armP arm) { + return vmirtGetPC((vmiProcessorP)arm); +} + +// +// Return instruction memory domain set for the passed processor +// +inline static armDomainSetP getDomainSetI(armP arm) { + return &arm->ids; +} + +// +// Return data memory domain set for the passed processor +// +inline static armDomainSetP getDomainSetD(armP arm) { + return &arm->dds; +} + +// +// Get the current code memDomain +// +inline static memDomainP getVirtualCodeDomain(armP arm) { + return vmirtGetProcessorCodeDomain((vmiProcessorP)arm); +} + +// +// Get the current data memDomain +// +inline static memDomainP getVirtualDataDomain(armP arm) { + return vmirtGetProcessorDataDomain((vmiProcessorP)arm); +} + +// +// Is code demain required for the passed privilege? +// +inline static Bool isFetch(memPriv priv) { + return priv==MEM_PRIV_X; +} + +// +// Return the memory domain set to use for the passed memory access type +// +static armDomainSetP getDomainSetPriv(armP arm, memPriv priv) { + return isFetch(priv) ? getDomainSetI(arm) : getDomainSetD(arm); +} + +// +// Return the virtual memory domain to use for the passed memory access type +// +static memDomainP getVirtualDomainPriv(armP arm, memPriv priv) { + return isFetch(priv) ? getVirtualCodeDomain(arm) : getVirtualDataDomain(arm); +} + +// +// Set the current data memDomain +// +inline static void setVirtualDataDomain(armP arm, memDomainP domain) { + vmirtSetProcessorDataDomain((vmiProcessorP)arm, domain); +} + +// +// Push to a new data memDomain, marking the processor to indicate restoration +// is required +// +inline static void pushVirtualDataDomain(armP arm, memDomainP domain) { + setVirtualDataDomain(arm, domain); + arm->restoreDomain = True; +} + +// +// Return the virtual data domain for the passed mode +// +static memDomainP getVirtualDataDomainMode(armP arm) { + armDomainSetP set = getDomainSetD(arm); + return IN_USER_MODE(arm) ? set->vmUser : set->vmPriv; +} + +// +// Restore correct virtual code domain for the processor, if required +// +static void restoreVirtualDataDomain(armP arm) { + setVirtualDataDomain(arm, getVirtualDataDomainMode(arm)); + arm->restoreDomain = False; +} + +// +// Given a raw privilege (AP format), return the effective privilege based on +// mode only for user mode MPU accesses +// +static memPriv getPrivMPUU(armP arm, Uns8 AP, Bool XN) { + + static const memPriv privMap[] = { + [0] = MEM_PRIV_NONE, + [1] = MEM_PRIV_NONE, + [2] = MEM_PRIV_RX, + [3] = MEM_PRIV_RWX, + [4] = MEM_PRIV_NONE, + [5] = MEM_PRIV_NONE, + [6] = MEM_PRIV_RX, + [7] = MEM_PRIV_NONE + }; + + memPriv result = (AP>7) ? MEM_PRIV_NONE : privMap[AP]; + + // apply XN bit if required + if(XN) {result &= ~MEM_PRIV_X;} + + return result; +} + +// +// Given a raw privilege (AP format), return the effective privilege based on +// mode only for privileged mode MPU accesses +// +static memPriv getPrivMPUP(armP arm, Uns8 AP, Bool XN) { + + static const memPriv privMap[] = { + [0] = MEM_PRIV_NONE, + [1] = MEM_PRIV_RWX, + [2] = MEM_PRIV_RWX, + [3] = MEM_PRIV_RWX, + [4] = MEM_PRIV_NONE, + [5] = MEM_PRIV_RX, + [6] = MEM_PRIV_RX, + [7] = MEM_PRIV_NONE + }; + + memPriv result = (AP>7) ? MEM_PRIV_NONE : privMap[AP]; + + // apply XN bit if required + if(XN) {result &= ~MEM_PRIV_X;} + + return result; +} + +// +// Given a raw privilege (AP format), return the effective privilege considering +// mode only (MPU accesses). A special case is that accesses in kernel mode +// where the current data memDomain is actually the user mode memDomain should +// be treated as user mode accesses (LDRT, STRT). +// +static memPriv getPrivMPU(armP arm, Uns8 AP, Bool XN) { + + if(IN_USER_MODE(arm)) { + // normal user-mode case + return getPrivMPUU(arm, AP, XN); + } else if(getVirtualDataDomain(arm)==getDomainSetD(arm)->vmUser) { + // special case for LDRT and STRT accesses + return getPrivMPUU(arm, AP, XN); + } else { + // normal privileged-mode case + return getPrivMPUP(arm, AP, XN); + } +} + +// +// Return a domian mask (the largest valid address in a domain) +// +static Uns64 getDomainMask(memDomainP domain) { + + Uns8 bits = vmirtGetDomainAddressBits(domain); + + return (bits==64) ? -1ULL : ((1ULL<external, domainV, lowPA, highPA, lowVA, 0, priv, G, ASID + ); +} + +// +// Do required actions when an invalid memory access occurs, either a processor +// access or a DMA unit access +// +static void handleInvalidAccess( + armP arm, + Uns32 MVA, + memPriv requiredPriv, + memAccessAttrs attrs +) { + if(!attrs) { + // no action for artifact access + } else { + // processor-generated exception + armMemoryAbort(arm, MVA, requiredPriv); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// MPU FUNCTIONS +//////////////////////////////////////////////////////////////////////////////// + +typedef enum protRegionCodeE { + PEC_ENABLED, // enabled area description + PEC_DISABLED, // disabled area description + PEC_INVALID_SIZE, // invalid size (less than minumum) + PEC_INVALID_BASE, // invalid base (not a multiple of size) +} protRegionCode; + +// this type represents a single protection area entry +typedef struct protRegionS { + Uns32 Base; // entry base address + Uns32 SRD : 8; // subrange disable + Uns32 Size : 5; // area size + Uns32 TEX : 3; // TEX field (ARMv6 and later) + Uns32 AP : 3; // area permissions + Bool E : 1; // enabled? + Bool XN : 1; // XN bit (ARMv6 and later) + Bool S : 1; // S bit (ARMv6 and later) + Bool C : 1; // C bit (ARMv6 and later) + Bool B : 1; // B bit (ARMv6 and later) +} protRegion; + +// pointer to a constant protRegion +typedef const struct protRegionS *protRegionCP; + +// +// Return description string identifying MPU +// +static const char *getMPUName(armP arm, Bool isData) { + return MPU_UNIFIED(arm) ? "" : isData ? " (D)" : " (I)"; +} + +// +// Return the count of the number of protection regions +// +static Uns32 mpuRegionNum(armP arm, Bool isData) { + if(isData || MPU_UNIFIED(arm)) { + return SCS_FIELD(arm, MPU_TYPE, DREGION); + } else { + return SCS_FIELD(arm, MPU_TYPE, DREGION); + } +} + +// +// Validate that the passed index is a valid MPU region index +// +static Bool validateRegionNum(armP arm, Bool isData, Uns32 index) { + + Uns32 regionNum = mpuRegionNum(arm, isData); + + if(index >= regionNum) { + + vmiMessage("a", CPU_PREFIX"_ROOR", + SRCREF_FMT "protection area index %u exceeds maximum (%u)", + SRCREF_ARGS(arm, getPC(arm)), + index, regionNum-1 + ); + + return False; + + } else { + + return True; + } +} + +// +// Return a pointer to the Protection Area Control registers +// +inline static protRegionP getPACRegs(armP arm, Bool isData) { + return (isData && arm->dmpu) ? arm->dmpu : arm->impu; +} + +// +// If the passed protection entry describes a valid region, set the bounds of +// that region and return PEC_ENABLED; otherwise return an enum member giving +// the reason why it is not valid +// +static protRegionCode getProtectionEntryRange( + armP arm, + protRegionCP pa, + Uns32 *lowP, + Uns32 *highP +) { + if(!pa->E) { + + // disabled region + return PEC_DISABLED; + + } else { + + // minimum region size allowed depends on MPU revision + Uns32 minSize = 4; + Uns32 minDelta = (2 << minSize) - 1; + + // get the region size (minus 1) + Uns32 size = pa->Size; + Uns32 delta = (2 << size) - 1; + + // are some subranges enabled? + Uns32 SRE = ~pa->SRD; + + if(!SRE && (delta>=(SRD_MIN_SIZE-1))) { + + // all subranges disabled + return PEC_DISABLED; + + } else { + + // get the region base address + Uns32 low = pa->Base; + + // return implied bounds + *lowP = low; + *highP = low + delta; + + if(deltaids.vmPriv, arm->dds.vmPriv, low, high, isData); + + // remove user domain access permissions + removePrivMPU(arm, arm->ids.vmUser, arm->dds.vmUser, low, high, isData); +} + +// +// If the indexed protection entry is valid, unmap it +// +static void unmapProtectionEntry(armP arm, Uns32 low, Uns32 high, Bool isData) { + + // remove main mappings + unmapProtectionEntryInt(arm, low, high, isData); +} + +// +// Update MPU status when an MPU region entry has been updated +// +static void resetProtectionEntryRange( + armP arm, + Uns32 index, + Bool isData, + Bool verbose +) { + protRegionP pacRegs = getPACRegs(arm, isData); + protRegionP pacReg = pacRegs+index; + Uns32 low; + Uns32 high; + + // validate new protection area permissions + switch(getProtectionEntryRange(arm, pacReg, &low, &high)) { + + case PEC_ENABLED: + // remove any existing mapping for the new protection entry range + unmapProtectionEntry(arm, low, high, isData); + break; + + case PEC_INVALID_SIZE: + // size error assertion + if(verbose) { + vmiMessage("a", CPU_PREFIX"_PEIS", + SRCREF_FMT "protection area %u has invalid size (%u bytes)", + SRCREF_ARGS(arm, getPC(arm)), + index, high - low + 1 + ); + } + break; + + case PEC_INVALID_BASE: + // base error assertion + if(verbose) { + vmiMessage("a", CPU_PREFIX"_PEIB", + SRCREF_FMT "protection area %u base 0x%08x is not a " + "multiple of size", + SRCREF_ARGS(arm, getPC(arm)), + index, low + ); + } + break; + + default: + // disabled entry + break; + } +} + +// +// Update the indexed region Base, SRD, Size or E fields +// +static void updateRegionBaseSRDSizeE( + armP arm, + Uns32 index, + Bool isData, + Uns32 Base, + Uns32 SRD, + Uns32 Size, + Uns32 E +) { + protRegionP pacRegs = getPACRegs(arm, isData); + protRegionP pacReg = pacRegs+index; + + // action is required only if the register changes value + if( + (pacReg->Base!=Base) || + (pacReg->SRD!=SRD) || + (pacReg->Size!=Size) || + (pacReg->E!=E) + ) { + // remove any current mapping for the protection entry + resetProtectionEntryRange(arm, index, isData, False); + + // update the entry + pacReg->Base = Base; + pacReg->SRD = SRD; + pacReg->Size = Size; + pacReg->E = E; + + // remove any mapping for the new region location + resetProtectionEntryRange(arm, index, isData, True); + } +} + +// +// Modify AP or XN fields for the indexed MPU region +// +static void updateRegionAPXN( + armP arm, + Uns32 index, + Bool isData, + Uns8 newAP, + Bool newXN +) { + protRegionP pacRegs = getPACRegs(arm, isData); + protRegionP pacReg = pacRegs+index; + Uns8 oldAP = pacReg->AP; + Uns8 oldXN = pacReg->XN; + + // update AP and XN fields + pacReg->AP = newAP; + pacReg->XN = newXN; + + // have region permissions on an enabled region changed? + if(pacReg->E && ((oldAP!=newAP) || (oldXN!=newXN))) { + + // get privileges implied by old and new permissions in each mode + memPriv oldPrivU = getPrivMPUU(arm, oldAP, oldXN); + memPriv oldPrivP = getPrivMPUP(arm, oldAP, oldXN); + memPriv newPrivU = getPrivMPUU(arm, newAP, newXN); + memPriv newPrivP = getPrivMPUP(arm, newAP, newXN); + + // if privileges have been reduced, disable all access to the area of + // memory assocaited with the region + if((oldPrivU & ~newPrivU) || (oldPrivP & ~newPrivP)) { + resetProtectionEntryRange(arm, index, isData, False); + } + } +} + +// +// This specifies the regions in the default system address map +// +static const protRegion sysRegions[] = { + {.Base=0x00000000, .Size=0x1c, .AP=3, .TEX=0, .C=1, .B=0, .E=1, .S=1, .XN=0}, + {.Base=0x20000000, .Size=0x1c, .AP=3, .TEX=1, .C=1, .B=1, .E=1, .S=1, .XN=0}, + {.Base=0x40000000, .Size=0x1c, .AP=3, .TEX=0, .C=0, .B=1, .E=1, .S=1, .XN=1}, + {.Base=0x60000000, .Size=0x1c, .AP=3, .TEX=1, .C=1, .B=1, .E=1, .S=1, .XN=0}, + {.Base=0x80000000, .Size=0x1c, .AP=3, .TEX=0, .C=1, .B=0, .E=1, .S=1, .XN=0}, + {.Base=0xa0000000, .Size=0x1c, .AP=3, .TEX=0, .C=0, .B=1, .E=1, .S=1, .XN=1}, + {.Base=0xc0000000, .Size=0x1c, .AP=3, .TEX=2, .C=0, .B=0, .E=1, .S=1, .XN=1}, + {.Base=0xe0000000, .Size=0x1c, .AP=3, .TEX=2, .C=0, .B=0, .E=1, .S=1, .XN=1} +}; + +// +// Return a protRegion structure representing the implicit Private Peripheral +// Bus region +// +static protRegionCP getPPBRegion(void) { + + static const protRegion ppbRegion = { + .Base=PPB_LOW, .Size=0x13, .AP=3, .E=1, .XN=1 + }; + + return &ppbRegion; +} + +// +// If the MVA lies in the region range rlow:rhigh, set by-ref arguments 'low' +// and 'high' with that range; otherwise, exclude the range rlow:rhigh from the +// currennt range in low:high +// +static Bool matchRegion( + Uns32 MVA, + Uns32 rlow, + Uns32 rhigh, + Uns32 *low, + Uns32 *high +) { + if((rlow<=MVA) && (rhigh>=MVA)) { + + // match in this region + *low = rlow; + *high = rhigh; + + return True; + + } else if((rlow>MVA) && (rlow<*high)) { + + // remove part of region ABOVE matching address + *high = rlow-1; + + } else if((rhigh*low)) { + + // remove part of region BELOW matching address + *low = rhigh+1; + } + + return False; +} + +// +// Return a boolean indicating if the passed MVA lies in the protection entry +// and update by-ref arguments 'low' and 'high' with the largest bounds +// enclosing the address +// +static Bool selectProtectionEntry( + armP arm, + protRegionCP try, + Uns32 MVA, + Uns32 *low, + Uns32 *high +) { + Uns32 rlow, rhigh; + + if(getProtectionEntryRange(arm, try, &rlow, &rhigh)!=PEC_ENABLED) { + + // entry is not enabled + return False; + + } else if(try->SRD && ((rhigh-rlow)>=(SRD_MIN_SIZE-1))) { + + // possible match in a subregion + Uns8 SRE = ~try->SRD; + Uns32 delta = ((Uns64)rhigh-rlow+1)/SRD_REGIONS; + Uns32 i; + + // iterate over all enabled subregions + for(i=0; SRE; i++, SRE>>=1) { + + // is this subregion enabled? + if(SRE & 1) { + + // derive subregion bounds + Uns32 srlow = rlow+(delta*i); + Uns32 srhigh = srlow+delta-1; + + // return if subregion matches + if(matchRegion(MVA, srlow, srhigh, low, high)) { + return True; + } + } + } + + // no subregion matches + return False; + + } else { + + // possible match in an entire region + return matchRegion(MVA, rlow, rhigh, low, high); + } +} + +// +// Try mapping memory at the passed address for the specified access type and +// return a Boolean indicating whether the mapping succeeded +// +static Bool mpuMiss( + armP arm, + memPriv requiredPriv, + Uns32 address, + Uns32 *lowVAP, + Uns32 *highVAP +) { + Uns32 MVA = address; + Bool isData = !(requiredPriv & MEM_PRIV_X); + protRegionP pacRegs = getPACRegs(arm, isData); + protRegionCP ppb = getPPBRegion(); + protRegionCP match = 0; + Uns32 regionNum = mpuRegionNum(arm, isData); + Uns32 low = 0; + Uns32 high = 0; + Uns32 i; + + // use the system address map as a background region in privileged mode if + // MPU_CONTROL.PRIVDEFENA is specified + if(!IN_USER_MODE(arm) && SCS_FIELD(arm, MPU_CONTROL, PRIVDEFENA)) { + match = sysRegions+(MVA/0x20000000); + selectProtectionEntry(arm, match, MVA, &low, &high); + } + + // scan regions in lowest-to-highest priority order + for(i=0; iAP; + Bool XN = match->XN; + memPriv priv = getPrivMPU(arm, AP, XN); + Uns32 lowVA = low; + Uns32 highVA = high; + + // if debug mode is enabled, report the range being mapped + if(ARM_DEBUG_MMU(arm)) { + vmiPrintf( + "MPU%s MAP VA 0x%08x:0x%08x PA 0x%08x:0x%08x AP %u%s\n", + getMPUName(arm, isData), + lowVA, highVA, + low, high, + AP, + XN ? "-x" : "" + ); + } + + // does the entry have sufficient permissions? + if((priv & requiredPriv) == requiredPriv) { + + // map MPU entry memory + mapDomainPairRange( + arm, requiredPriv, priv, low, high, lowVA, True, 0 + ); + + // MPU entry permissions are ok, but access may still not be + // possible if no physical memory exists at the physical address + memDomainP domainV = getVirtualDomainPriv(arm, requiredPriv); + memPriv actualPriv = vmirtGetDomainPrivileges(domainV, address); + + // indicate the address range that has been mapped + *lowVAP = lowVA; + *highVAP = highVA; + + return (actualPriv & requiredPriv) && True; + } + } + + // invalid access, either because no matching entry found or existing entry + // has insufficient permissions + return False; +} + +// +// Free an MPU data structure +// +static void freeMPU(protRegionP *mpuHandle) { + + protRegionP mpu = *mpuHandle; + + STYPE_FREE(mpu); + + *mpuHandle = 0; +} + +// +// Free an MPU data structure +// +static protRegionP newMPU(armP arm, Bool isData) { + + Uns32 regionNum = mpuRegionNum(arm, isData); + + return regionNum ? STYPE_CALLOC_N(protRegion, regionNum) : 0; +} + +// +// Reset an MPU data structure +// +static void resetMPU(armP arm, Bool isData) { + + Uns32 regionNum = mpuRegionNum(arm, isData); + Uns32 i; + + for(i=0; iimpu) { + freeMPU(&arm->impu); + } + + // free data MPU if required + if(arm->dmpu) { + freeMPU(&arm->dmpu); + } +} + +// +// Allocate MPU structures for the passed processor +// +static void newMPUs(armP arm) { + + // create instruction/unified MPU + arm->impu = newMPU(arm, False); + + // create data MPU if required + if(!MPU_UNIFIED(arm)) { + arm->dmpu = newMPU(arm, True); + } +} + +// +// Reset MPU contents +// +static void resetMPUs(armP arm) { + + // reset instruction/unified MPU + if(arm->impu) { + resetMPU(arm, False); + } + + // reset data MPU if required + if(arm->dmpu) { + resetMPU(arm, True); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// BIT-BAND REGIONS +//////////////////////////////////////////////////////////////////////////////// + +// +// This is the size of a bit-band region +// +#define BIT_BAND_SIZE 0x100000 + +// +// This is the offset to the alias region from the bit-band base +// +#define ALIAS_OFFSET 0x2000000 + +// +// Callback function to read a system register +// +static VMI_MEM_READ_FN(readBitBand) { + + if(processor) { + + armP arm = (armP)processor; + memDomainP domain = arm->dds.external; + UnsPS regionLow = (UnsPS)userData; + Uns32 aliasLow = regionLow + ALIAS_OFFSET; + Uns32 regionAddr = regionLow + (address - aliasLow) / 32; + Uns32 bitOffset = ((address - aliasLow) % 32) / 4; + + // get byte alias value + Uns8 result = vmirtRead1ByteDomain(domain, regionAddr, MEM_AA_TRUE); + + // extract required bit + result = (result>>bitOffset) & 1; + + // update correct-size result value + if(bytes==1) { + *(Uns8*)value = result; + } else if(bytes==2) { + *(Uns16*)value = result; + } else if(bytes==4) { + *(Uns32*)value = result; + } else { + VMI_ABORT("unimplemented bit-band access size %u bytes", bytes); + } + } +} + +// +// Callback function to read a system register +// +static VMI_MEM_WRITE_FN(writeBitBand) { + + if(processor) { + + armP arm = (armP)processor; + memDomainP domain = arm->dds.external; + UnsPS regionLow = (UnsPS)userData; + Uns32 aliasLow = regionLow + ALIAS_OFFSET; + Uns32 regionAddr = regionLow + (address - aliasLow) / 32; + Uns32 bitOffset = ((address - aliasLow) % 32) / 4; + Uns8 mask = 1<mode&ARM_MODE_MPU) { + + Uns32 lastVA = address+bytes-1; + Uns32 highVA = address-1; + Uns32 lowVA = address; + + // iterate over all MPU ranges straddled by this access + do { + address = highVA+1; + ok = mpuMiss(arm, requiredPriv, address, &lowVA, &highVA); + } while(ok && ((lastVAhighVA))); + } + + // generate exception for the first faulting address + if(ok) { + return MA_OK; + } else { + handleInvalidAccess(arm, address, requiredPriv, attrs); + return MA_EXCEPTION; + } +} + +// +// Set the privileged mode data domain to the user domain (for LDRT, STRT) +// +void armVMSetUserPrivilegedModeDataDomain(armP arm) { + pushVirtualDataDomain(arm, getDomainSetD(arm)->vmUser); +} + +// +// Restore the normal data domain for the current mode +// +void armVMRestoreNormalDataDomain(armP arm) { + restoreVirtualDataDomain(arm); +} + +// +// Write the indexed MPU RBAR register value +// +void armVMWriteRBAR(armP arm, Uns32 index, Bool isData, Uns32 newValue) { + + if(validateRegionNum(arm, isData, index)) { + + protRegionP pacReg = getPACRegs(arm, isData) + index; + + // prepare Base, SRD, Size and E arguments + Uns32 Base = newValue & SCS_MASK_MPU_RBAR_ADDR; + Uns32 SRD = pacReg->SRD; + Uns32 Size = pacReg->Size; + Uns32 E = pacReg->E; + + // update the required register + updateRegionBaseSRDSizeE(arm, index, isData, Base, SRD, Size, E); + } +} + +// +// Read the indexed MPU RBAR register value +// +Uns32 armVMReadRBAR(armP arm, Uns32 index, Bool isData) { + + if(validateRegionNum(arm, isData, index)) { + + protRegionP pacReg = getPACRegs(arm, isData) + index; + + // create mask to select Base field + union {SCS_REG_DECL(MPU_RBAR); Uns32 u32;} uMask = {{ADDR:-1}}; + + // return masked result + return pacReg->Base & uMask.u32; + + } else { + + return 0; + } +} + +// +// Write the indexed MPU RASR register value +// +void armVMWriteRASR(armP arm, Uns32 index, Bool isData, Uns32 newValue) { + + if(validateRegionNum(arm, isData, index)) { + + protRegionP pacReg = getPACRegs(arm, isData) + index; + + // create union to enable field extraction + union {Uns32 u32; SCS_REG_DECL(MPU_RASR);} u = {newValue}; + + // update fields with no simulation effect + pacReg->B = u.MPU_RASR.B; + pacReg->C = u.MPU_RASR.C; + pacReg->S = u.MPU_RASR.S; + pacReg->TEX = u.MPU_RASR.TEX; + + // prepare Base, SRD, Size, E, AP and XN arguments + Uns32 Base = pacReg->Base; + Uns32 SRD = u.MPU_RASR.SRD; + Uns32 Size = u.MPU_RASR.SIZE; + Uns32 E = u.MPU_RASR.ENABLE; + Uns8 AP = u.MPU_RASR.AP; + Bool XN = u.MPU_RASR.XN; + + // update the required register + updateRegionBaseSRDSizeE(arm, index, isData, Base, SRD, Size, E); + updateRegionAPXN(arm, index, isData, AP, XN); + } +} + +// +// Read the indexed MPU RASR register value +// +Uns32 armVMReadRASR(armP arm, Uns32 index, Bool isData) { + + if(validateRegionNum(arm, isData, index)) { + + protRegionP pacReg = getPACRegs(arm, isData) + index; + + // initialize result + union {Uns32 u32; SCS_REG_DECL(MPU_RASR);} u = {0}; + + // extract required fields + u.MPU_RASR.SRD = pacReg->SRD; + u.MPU_RASR.SIZE = pacReg->Size; + u.MPU_RASR.ENABLE = pacReg->E; + u.MPU_RASR.B = pacReg->B; + u.MPU_RASR.C = pacReg->C; + u.MPU_RASR.S = pacReg->S; + u.MPU_RASR.TEX = pacReg->TEX; + u.MPU_RASR.AP = pacReg->AP; + u.MPU_RASR.XN = pacReg->XN; + + // return composed result + return u.u32; + + } else { + + return 0; + } +} + +// +// Flush the privileged mode MPU +// +void armVMFlushMPUPriv(armP arm) { + + Bool isData = True; + + // if debug mode is enabled, report the range being unmapped + if(ARM_DEBUG_MMU(arm)) { + vmiPrintf("MPU%s FLUSH\n", getMPUName(arm, isData)); + } + + // remove privileged domain access permissions + removePrivMPU(arm, arm->ids.vmPriv, arm->dds.vmPriv, 0, -1, isData); +} + +// +// Virtual memory constructor +// +VMI_VMINIT_FN(armVMInit) { + + armP arm = (armP)processor; + Uns32 bits = ARM_GPR_BITS; + memDomainP extCodeDomain = codeDomains[0]; + memDomainP extDataDomain = dataDomains[0]; + memDomainP sysCodeDomain; + memDomainP sysDataDomain; + + // create system physical domains + if(extCodeDomain==extDataDomain) { + extCodeDomain = makeDomainAlias(extCodeDomain, "external"); + extDataDomain = extCodeDomain; + sysCodeDomain = makeDomainAlias(extCodeDomain, "system"); + sysDataDomain = sysCodeDomain; + } else { + extCodeDomain = makeDomainAlias(extCodeDomain, "external Code"); + extDataDomain = makeDomainAlias(extDataDomain, "external Data"); + sysCodeDomain = makeDomainAlias(extCodeDomain, "system Code"); + sysDataDomain = makeDomainAlias(extDataDomain, "system Data"); + } + + // add System Control Space register callbacks + armSysCreateSCSRegion(arm, extDataDomain); + + if (!arm->disableBitBand) { + // create bit-band regions + createBitBandRegion(extDataDomain, 0x20000000); + createBitBandRegion(extDataDomain, 0x40000000); + } + + // addresses in System Control Space are never executable + vmirtProtectMemory( + extCodeDomain, SYSTEM_LOW, SYSTEM_HIGH, MEM_PRIV_X, MEM_PRIV_SUB + ); + + // some addresses in the default system address map are also not executable + vmirtProtectMemory( + sysCodeDomain, PERIPH_LOW, PERIPH_HIGH, MEM_PRIV_X, MEM_PRIV_SUB + ); + vmirtProtectMemory( + sysCodeDomain, DEVICE_LOW, DEVICE_HIGH, MEM_PRIV_X, MEM_PRIV_SUB + ); + + // save physical memDomains on processor structure + arm->ids.external = extCodeDomain; + arm->ids.system = sysCodeDomain; + arm->dds.external = extDataDomain; + arm->dds.system = sysDataDomain; + + // set physical code memDomains for each mode + codeDomains[ARM_MODE_PRIV] = sysCodeDomain; + codeDomains[ARM_MODE_USER] = sysCodeDomain; + + // set physical data memDomains for each mode + dataDomains[ARM_MODE_PRIV] = sysDataDomain; + dataDomains[ARM_MODE_USER] = sysDataDomain; + + // initialize MPU data structures if required + if(MPU_PRESENT(arm)) { + + // create MPU-managed memDomains + arm->ids.vmPriv = vmirtNewDomain("priv MPU Code", bits); + arm->ids.vmUser = vmirtNewDomain("user MPU Code", bits); + arm->dds.vmPriv = vmirtNewDomain("priv MPU Data", bits); + arm->dds.vmUser = vmirtNewDomain("user MPU Data", bits); + + // set MPU code memDomains for each mode + codeDomains[ARM_MODE_PRIV_MPU] = arm->ids.vmPriv; + codeDomains[ARM_MODE_USER_MPU] = arm->ids.vmUser; + + // set MPU data memDomains for each mode + dataDomains[ARM_MODE_PRIV_MPU] = arm->dds.vmPriv; + dataDomains[ARM_MODE_USER_MPU] = arm->dds.vmUser; + + // initialize MPU if required + if(MPU_PRESENT(arm)) { + newMPUs(arm); + } + } +} + +// +// Reset VM structures +// +void armVMReset(armP arm) { + if(MPU_PRESENT(arm)) { + resetMPUs(arm); + } +} + +// +// Free structures used for virtual memory management +// +void armVMFree(armP arm) { + if(MPU_PRESENT(arm)) { + freeMPUs(arm); + } +} + + diff --git a/ovp/armmModel/export.def b/ovp/armmModel/export.def new file mode 100755 index 00000000..4b488d4a --- /dev/null +++ b/ovp/armmModel/export.def @@ -0,0 +1,3 @@ +EXPORTS + vmiStubs + modelAttrs diff --git a/ovp/armmModel/failSALlink.cc b/ovp/armmModel/failSALlink.cc new file mode 100644 index 00000000..4bc3d5dc --- /dev/null +++ b/ovp/armmModel/failSALlink.cc @@ -0,0 +1,15 @@ +#include +#include "SAL/SimulatorController.hpp" + +using namespace std; + + +void hello(unsigned int p){ + cout << "&sal::simulator: " << hex << p << endl; + sal::SimulatorController * salp = reinterpret_cast(p); + +} + +extern "C" void failSALset(unsigned int pointer){ + hello(pointer); +} diff --git a/ovp/cortexM3/CMakeLists.txt b/ovp/cortexM3/CMakeLists.txt new file mode 100644 index 00000000..6de2d0a4 --- /dev/null +++ b/ovp/cortexM3/CMakeLists.txt @@ -0,0 +1,15 @@ +add_definitions(" -m32 ${IMPERAS_VMIINC} ") + +set(SRCS + $ENV{IMPERAS_HOME}/ImpPublic/source/host/icm/icmCpuManager.cpp + platform/platform.cc + ../OVPPlatform.cc +) + +add_executable(ovp_cortexM3 ${SRCS}) + +add_dependencies(ovp_cortexM3 protomessages ) + +target_link_libraries(ovp_cortexM3 ${SIM_LDFLAGS} SAL controller jobserver util ) +## OVP links all needed shared libraries via a runtimeloader +set_target_properties(ovp_cortexM3 PROPERTIES LINK_FLAGS "-L${CMAKE_BINARY_DIR}/lib -lfail -lpcl -m32 ") diff --git a/ovp/cortexM3/platform/platform.cc b/ovp/cortexM3/platform/platform.cc new file mode 100644 index 00000000..3fbc3fe7 --- /dev/null +++ b/ovp/cortexM3/platform/platform.cc @@ -0,0 +1,362 @@ +/* + * Copyright (c) 2005-2011 Imperas Software Ltd., www.imperas.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "platform.hpp" +#include "statreg.hpp" +#include "SAL/SALInst.hpp" + +#include "icm/icmCpuManager.h" +#include "icm/icmQuery.h" + +// enable relaxed scheduling for maximum performance +//#define SIM_ATTRS (ICM_ATTR_RELAXED_SCHED|ICM_ATTR_TRACE) +#define SIM_ATTRS (ICM_ATTR_RELAXED_SCHED) + +// GDB port +#define GDB_PORT 1234 + +// Variables set by arguments +const char *variant = "Cortex-M3"; // the model variant + +using namespace std; + +ARM_Cortex_M3 arm; + +ARM_Cortex_M3::ARM_Cortex_M3() { +} + +ARM_Cortex_M3::~ARM_Cortex_M3() { + delete platform; + delete cpu; + delete attrList; +} + +void ARM_Cortex_M3::init(bool gdb=false) { + + // initialize OVPsim, enabling verbose mode to get statistics at end of execution + platform = new icmPlatform("CortexM3Platform", //name + ICM_VERBOSE|ICM_STOP_ON_CTRLC, //attributes + gdb ? "rsp" : 0, // optional protocol + gdb ? GDB_PORT : 0); // optional port number + + +// const char *armModel = icmGetVlnvString(NULL, "arm.ovpworld.org", "processor", "armm", "1.0", "model"); + const char *armModel = "/srv/scratch/hoffmann/test/build/lib/libarmmModel.so"; + const char *armSemihost = icmGetVlnvString(NULL, "arm.ovpworld.org", "semihosting", "armNewlib", "1.0", "model"); + + attrList = new icmAttrListObject(); + + attrList->addAttr("endian", "little"); + attrList->addAttr("compatibility", "nopBKPT"); + attrList->addAttr("variant", variant); + attrList->addAttr("UAL", "1"); + attrList->addAttr("fail_salp", &sal::simulator); + + char cpuname[64]; + sprintf(cpuname,"cpu-%s", variant); + + // create a processor instance + cpu = new icmProcessorObject( + cpuname, // CPU name + "armm", // CPU type + 0, // CPU cpuId + 0, // CPU model flags + 32, // address bits + armModel, // model file + "modelAttrs", // morpher attributes + SIM_ATTRS, // attributes + attrList, // user-defined attributes + armSemihost, // semi-hosting file + "modelAttrs" // semi-hosting attributes + ); + + // Nominate this processor to be attached to a debugger + if(gdb) cpu->debugThisProcessor(); + + processorP = cpu->getProcessorP(); +} + +void ARM_Cortex_M3::createFullMMC(const char *vlnRoot=0) { +// TODO: ELF Groesse auslesen per OVP (hat funktionen) und dann den Bereich als MMC einrichten... +/* const char *mmc_model = icmGetVlnvString("/srv/scratch/sirozipp/build/lib", "ovpworld.org", "mmc", "failMMC", "1.0", "model"); + if(mmc_model == NULL) { + std::cerr << "mmc_model not found!" << std::endl; + exit(1); + } +*/ + const char *mmc_model = "/srv/scratch/sirozipp/build/lib/libflaky.so"; + + // create full MMCs + mmcInstr = new icmMmcObject("mmci", mmc_model, "modelAttrs", 0, False); + mmcData = new icmMmcObject("mmcd", mmc_model, "modelAttrs", 0, False); + + // create processor instruction and data bus + instrBus = new icmBusObject("instrbus", 32); + dataBus = new icmBusObject("databus", 32); + + // create processor main bus + mainBus = new icmBusObject("mainbus", 32); + + // connect processor ports to their buses + cpu->connect(*instrBus, *dataBus); + + // connect mmcs to buses + mmcInstr->connect(*instrBus, "sp1", False); + mmcData->connect(*dataBus, "sp1", False); + + // connet master ports of mmc to main bus + mmcInstr->connect(*mainBus, "mp1", True); + mmcData->connect(*mainBus, "mp1", True); + + // create simulated memory + Addr appHighAddr, appLowAddr; + + appHighAddr = 0xFFFFFFFF; + appLowAddr = 0x0; + icmMem0 = new icmMemoryObject("mem1", ICM_PRIV_RWX, appHighAddr-appLowAddr); + + // connect memory to main bus + icmMem0->connect("mp1", *mainBus, 0); +} + +static ICM_MEM_READ_FN(extMemRead) { + unsigned char res[4]; +// Int32 tmpres = *(Int32*)value; +// icmPrintf("EXTERNAL MEMORY: Reading 0x%08x from 0x%08x\n", *(Int32*)value, (Int32)address); +// *(Int32*) value = (Int32)arm.mem[(address-arm.offset)>>2]; + + sal::simulator.onMemoryAccessEvent(address, 4, false, ovpplatform.getPC()); + + res[0] = arm.mem[(address-arm.offset)+0]; + res[1] = arm.mem[(address-arm.offset)+1]; + res[2] = arm.mem[(address-arm.offset)+2]; + res[3] = arm.mem[(address-arm.offset)+3]; + +// icmPrintf("Reading [0] 0x%08x, [1] 0x%08x, [2] 0x%08x, [3] 0x%08x\n", arm.mem[(address-arm.offset)+0], arm.mem[(address-arm.offset)+1], arm.mem[(address-arm.offset)+2], arm.mem[(address-arm.offset)+3]); + + *(Int32*)value = (res[3] << 24) | (res[2] << 16) | (res[1] << 8) | res[0]; +// +// icmPrintf("Reading: 0x%08x\n", (res[3] << 24) | (res[2] << 16) | (res[1] << 8) | res[0]); + +// icmPrintf("Callback: Reading 0x%08x from mem[0x%08x] should be 0x%08x from [0x%08x]\n", *(Int32*)value, (Int32)(address-arm.offset), tmpres, (Int32) address); + +} + +static ICM_MEM_WRITE_FN(extMemWrite) { +// icmPrintf("EXTERNAL MEMORY: Writing 0x%08x to 0x%08x\n", (Int32)value, (Int32)address); +// icmPrintf("Callback: Writing 0x%08x to mem[0x%08x] should be 0x%08x from [0x%08x]\n", *(Int32*)value, (Int32)(address-arm.offset), *(Int32*) value, (Int32) address); + sal::simulator.onMemoryAccessEvent(address, 4, true, ovpplatform.getPC()); + + Int32 val = *(Int32*)value; + + arm.mem[(address-arm.offset) + 0] = val & 0xFF; + arm.mem[(address-arm.offset) + 1] = (val >> 8) & 0xFF; + arm.mem[(address-arm.offset) + 2] = (val >> 16) & 0xFF; + arm.mem[(address-arm.offset) + 3] = (val >> 24) & 0xFF; + +// icmPrintf("Writing [0] 0x%08x, [1] 0x%08x, [2] 0x%08x, [3] 0x%08x\n", val & 0xFF, (val >> 8) & 0xFF, (val >> 16) & 0xFF, (val >> 24) & 0xFF); +// icmPrintf("Writing [0] 0x%08x, [1] 0x%08x, [2] 0x%08x, [3] 0x%08x\n", arm.mem[(address-arm.offset)+0], arm.mem[(address-arm.offset)+1], arm.mem[(address-arm.offset)+2], arm.mem[(address-arm.offset)+3]); + +// Int32 res = arm.mem[(address-arm.offset)+0] | arm.mem[(address-arm.offset)+1] << 8 | arm.mem[(address-arm.offset)+2] << 16 | arm.mem[(address-arm.offset)+3] << 24; + +// icmPrintf("Callback: Writing 0x%08x to mem[0x%08x] should be 0x%08x to [0x%08x]\n", res, (Int32)(address-arm.offset), *(Int32*) value, (Int32) address); +// arm.mem[(address-arm.offset) >> 2] = *(Int32*) value; +} + +static ICM_MEM_READ_FN(extTextRead) { +// Int16 val = *(Int16*)value; + *(Int16*) value = (Int16)arm.textmem[(address-arm.textOffset)>>1]; +// icmPrintf("Callback: Reading 0x%04x from textmem[0x%08x] should be 0x%04x from [0x%08x]\n", *(Int16*)value, (Int32)(address-arm.textOffset), val, (Int32) address); +} + +static ICM_MEM_WRITE_FN(extTextWrite) { + arm.textmem[(address-arm.textOffset) >> 1] = *(Int16*) value; +} + +void ARM_Cortex_M3::mapMemToCallback() { + // create processor bus + mainBus = new icmBusObject("mainbus", 32); + + // connect the processor bus + cpu->connect(*mainBus, *mainBus); + + // create simulated memory + Addr appHighAddr, appLowAddr, textLowAddr, textHighAddr, LowAddr, LowAddrH, HighAddr, HighAddrL; + + appLowAddr = offset; + appHighAddr = appLowAddr + memSize - 1; + + textLowAddr = textOffset; + textHighAddr = textLowAddr + textMemSize - 1; + + // check which section is first + if(appLowAddr < textLowAddr) { + LowAddr = appLowAddr; + LowAddrH = appHighAddr; + HighAddr = textHighAddr; + HighAddrL = textLowAddr; + } else { + LowAddr = textLowAddr; + LowAddrH = textHighAddr; + HighAddr = appHighAddr; + HighAddrL = appLowAddr; + } + + // Memory from 0x0 to LowAddr + icmMem0 = new icmMemoryObject("mem0", ICM_PRIV_RWX, LowAddr - 1); + // Memory after callback mem to end + icmMem1 = new icmMemoryObject("mem1", ICM_PRIV_RWX, 0xFFFFFFFF - HighAddr - 1); + // Memory between text and other sections + icmMem2 = new icmMemoryObject("mem2", ICM_PRIV_RWX, HighAddrL - LowAddrH - 1 -1); + + // map the adress range appLowAddr:appHighAddr externally to the processor + mainBus->mapExternalMemory("external", ICM_PRIV_RWX, appLowAddr, appHighAddr, + extMemRead, // read callback + extMemWrite, // write callback + 0); + + mainBus->mapExternalMemory("exttext", ICM_PRIV_RWX, textLowAddr, textHighAddr, + extTextRead, + extTextWrite, + 0); + + // just build memory before external memory if it's not at the beginning + if(LowAddr > 0x0) { + icmMem0->connect("mp1", *mainBus, 0x0); + } + + if(HighAddr < 0xffffffff) { + icmMem1->connect("mp2", *mainBus, HighAddr+1); + } + + if(LowAddrH != HighAddrL) { + icmMem2->connect("mp3", *mainBus, LowAddrH+1); + } + + mainBus->printConnections(); +} + + +void ARM_Cortex_M3::makeGPRegister() { + const string names[] = {"r0", "r1", "r2", "r3", "r4", "r5", + "r6", "r7", "r8", "r9", "r10", "r11", "r12"}; + + + + for(int i = 0; i <= 12; ++i) { + icmRegInfoP reg = icmGetRegByIndex(processorP, i); + sal::simulator.makeGPRegister(32, (void *)reg, names[i]); + } + + // set SP pointer + // ARM Cortex M3: SP pointer is ID 13 + icmRegInfoP sp_reg = icmGetRegByIndex(processorP, 13); + setSPReg(sp_reg); +} + +void ARM_Cortex_M3::makeSTRegister() { + OVPStatusRegister *streg = new CortexM3StatusRegister(); + + sal::simulator.makeSTRegister(streg, "sp"); +} + +void ARM_Cortex_M3::makePCRegister() { + // ARM Cortex M3: PC pointer is ID 15 + icmRegInfoP pc_reg = icmGetRegByIndex(processorP, 15); + sal::simulator.makePCRegister(32, (void *)pc_reg, "PC"); +} + +int ARM_Cortex_M3::startSimulation(const char *app) { + bool loadPhysical = true; + bool verbose = true; + bool useEntry = true; + if(!cpu->loadLocalMemory(app, loadPhysical, verbose, useEntry)) + return -1; + + // application is loaded, now fill the callback memory with program data + fillCallbackMemory(); + +// icmSimulatePlatform(); + + while(1) { + // save PC + Addr pc_ptr = cpu->getPC(); + + sal::simulator.onInstrPtrChanged(pc_ptr); + + // simulate the platform + icmStopReason stopreason = cpu->simulate(1); + + if(stopreason!=0x00) { + // was simulation interrupted or did it complete + if(stopreason==ICM_SR_INTERRUPT) { + icmPrintf("*** simulation interrupted\n"); + } + + break; + } + } + //icmTerminate(); + + return 0; +} + +void ARM_Cortex_M3::makeCallbackMemory(size_t sizeText, size_t offText, size_t sizeMem, size_t offMem) { + mem = new unsigned char[sizeMem]; + //mem = new Int32[sizeMem>>2]; + textmem = new Int16[sizeText>>1]; + offset = offMem; + textOffset = offText; + memSize = sizeMem; + textMemSize = sizeText; +} + + +int main(int argc, char **argv) { + if(argc != 2) { + std::cerr << "Usage: " << argv[0] << " application" << std::endl; + exit(1); + } + + arm.init(false); + +// arm.createFullMMC(); + +// arm.makeCallbackMemory(0x100, 0x20000000); +// arm.makeCallbackMemory(0x8034, 0x0, 0x11c, 0x82e8); +// arm.makeCallbackMemory(0x8034, 0x0, 0x940, 0x8040); + arm.makeCallbackMemory(0x802c, 0x0, 0x930, 0x8038); + arm.mapMemToCallback(); + + + ovpplatform.setCpu((void *) &arm); + + arm.makeGPRegister(); + arm.makeSTRegister(); + arm.makePCRegister(); + + sal::simulator.finishedRegisterCreation(); + + arm.startSimulation(argv[1]); +} diff --git a/ovp/cortexM3/platform/platform.hpp b/ovp/cortexM3/platform/platform.hpp new file mode 100644 index 00000000..0a255857 --- /dev/null +++ b/ovp/cortexM3/platform/platform.hpp @@ -0,0 +1,32 @@ +#ifndef _armCortexM3_HPP_ +#define _armCortexM3_HPP_ + + +#include "../../OVPCpu.hpp" + +using namespace icmCpuManager; + +/** + * \class ARM_Cortex_M3 + * Implements the OVP platform for ARM Cortex M3 with callback memory + */ +class ARM_Cortex_M3 : public OVPCpu { + private: + + public: + ARM_Cortex_M3(); + ~ARM_Cortex_M3(); + void init(bool); + int startSimulation(const char*); + void createFullMMC(const char *); + void mapMemToCallback(); + + void makeGPRegister(); + void makeSTRegister(); + void makePCRegister(); + + void makeCallbackMemory(size_t, size_t, size_t, size_t); +}; + + +#endif diff --git a/ovp/cortexM3/platform/statreg.hpp b/ovp/cortexM3/platform/statreg.hpp new file mode 100644 index 00000000..e8d3c7a1 --- /dev/null +++ b/ovp/cortexM3/platform/statreg.hpp @@ -0,0 +1,90 @@ +#include "platform.hpp" +#include "../../OVPStatusRegister.hpp" + +extern ARM_Cortex_M3 arm; + +/** + * \class CortexM3StatusRegister + * Status register for ARM Cortex M3 + */ +class CortexM3StatusRegister : public OVPStatusRegister { + + private: + icmRegInfoP cpsr; //!< pointer to status register + icmProcessorP cpuP; + + public: + CortexM3StatusRegister() : OVPStatusRegister(32, icmGetRegByIndex(arm.getProcessorP(), 16)) { + cpuP = arm.getProcessorP(); + + // status register is index 16 + cpsr = icmGetRegByIndex(cpuP, 16); + } + + ~CortexM3StatusRegister() {} + + bool getFlag(int pos) const { + uint32_t val; + uint32_t bit; + icmReadRegInfoValue(cpuP, cpsr, (void *)&val); + + // put bit to correct place + bit = 1 << pos; + + // Flag at position pos + val = val & bit; + val = val >> pos; + + return val; + } + + void setFlag(int pos, bool newval) { + uint32_t val; + uint32_t bit = 1 << pos; + + icmReadRegInfoValue(cpuP, cpsr, (void *)&val); + + if(newval == 0) { + // AND with 0xFFFEFFFF (e.g.) + bit = ~bit; // invert bits + + val = val & bit; + } else { + // OR with 0x00010000 (e.g.) + val = val | bit; + } + } + + bool getSignFlag() const { + return getFlag(31); + } + + bool getZeroFlag() const { + return getFlag(30); + } + + bool getCarryFlag() const { + return getFlag(29); + } + + bool getOverflowFlag() const { + return getFlag(28); + } + + void setSignFlag(bool b) { + setFlag(31, b); + } + + void setZeroFlag(bool b) { + setFlag(30, b); + } + + void setCarryFlag(bool b) { + setFlag(29, b); + } + + void setOverflowFlag(bool b) { + setFlag(28, b); + } + +}; diff --git a/ovp/ovpworld.org/mmc/flakyMemory/1.0/model/CMakeLists.txt b/ovp/ovpworld.org/mmc/flakyMemory/1.0/model/CMakeLists.txt new file mode 100644 index 00000000..c915107f --- /dev/null +++ b/ovp/ovpworld.org/mmc/flakyMemory/1.0/model/CMakeLists.txt @@ -0,0 +1,13 @@ +set(SRCS + flipBits.cpp + model.cpp +) +add_definitions("-m32") +message(STATUS "flaky ld flags: ${HOST_LDFLAGS}") +add_library(flaky SHARED ${SRCS}) + +add_dependencies(flaky protomessages SAL) +set_target_properties(flaky PROPERTIES LINK_FLAGS "${HOST_LDFLAGS} -m32") + +target_link_libraries(flaky ${IMPERAS_VMISTUBS} ${LIBRARY_OUTPUT_PATH}/libSAL.a) + diff --git a/ovp/ovpworld.org/mmc/flakyMemory/1.0/model/flipBits.cpp b/ovp/ovpworld.org/mmc/flakyMemory/1.0/model/flipBits.cpp new file mode 100644 index 00000000..dcd14dda --- /dev/null +++ b/ovp/ovpworld.org/mmc/flakyMemory/1.0/model/flipBits.cpp @@ -0,0 +1,11 @@ +#include + +#include "flipBits.h" + +void flipBits(const void *value, Uns32 bytes, vmiProcessorP processor, Addr address) { + if (address == 0x019e) { + *((Uns32 *)value) ^= 1; + } +} + + diff --git a/ovp/ovpworld.org/mmc/flakyMemory/1.0/model/flipBits.h b/ovp/ovpworld.org/mmc/flakyMemory/1.0/model/flipBits.h new file mode 100644 index 00000000..5c52d358 --- /dev/null +++ b/ovp/ovpworld.org/mmc/flakyMemory/1.0/model/flipBits.h @@ -0,0 +1,10 @@ +#ifndef FLIP_BITS_H +#define FLIP_BITS_H +extern "C" { +#include "vmi/vmiTypes.h" + + +void flipBits(const void *value, Uns32 bytes, vmiProcessorP processor, Addr address); +} + +#endif diff --git a/ovp/ovpworld.org/mmc/flakyMemory/1.0/model/model.cpp b/ovp/ovpworld.org/mmc/flakyMemory/1.0/model/model.cpp new file mode 100644 index 00000000..7ffa7381 --- /dev/null +++ b/ovp/ovpworld.org/mmc/flakyMemory/1.0/model/model.cpp @@ -0,0 +1,189 @@ +// Modifies values read from or written to memory + +#include +#include +#include + +//#include +extern "C" { +// VMI module includes +#include "vmi/vmiMessage.h" +#include "vmi/vmiMmcAttrs.h" +#include "vmi/vmiMmc.h" +#include "vmi/vmiRt.h" +#include "vmi/vmiTypes.h" +#include "flipBits.h" +} + +//#include "../core/SAL/ovp/OVPController.hpp" +#include "SAL/SALInst.hpp" + +// Model prefix (used by vmiMessage interface) +#define CPU_PREFIX "flakyMemory" + +// ... +// Cache object +typedef struct flakyObjectS { + // MODELLING ARTIFACTS + memDomainP nextDomain; // next domain (FULL model) + memRegionP lastRegion; // last accessed (FULL model) + + Uns64 count; // intercepted reads and writes + +} flakyObject, *flakyObjectP; + +// ... +#define BUF_SIZE 30 +static char tmpCharBuffer[BUF_SIZE]; + + +// Return a static temporary string that has the digits in the passed string +// separated into groups by a comma, e.g. "1234567" -> "1,234,567". The result +// is in a static buffer so it will be overwritten by the next call. +static const char *getCommaString(const char *string) { + + static char buffer2[BUF_SIZE]; + + Uns32 length = strlen(string); + Uns32 count = 0; + char *dst = buffer2+BUF_SIZE; + const char *src = string+length; + + // copy null terminator for comma string + *--dst = *src--; + + // copy remaining characters in groups + do { + + *--dst = *src--; + + // insert comma every three characters + if((++count==3) && (src>=string)) { + count = 0; + *--dst = ','; + } + + } while((src>=string) && (dst>=buffer2)); + + return dst; +} + + +// Return a static temporary string that has the passed Uns64 value shown +// with digits separated by commas +static const char *uns64String(Uns64 value) { + sprintf(tmpCharBuffer, FMT_64u, value); + return getCommaString(tmpCharBuffer); +} + + +// Utility routine for statistics reporting +static void printStats(flakyObjectP info) { + vmiMessage("I", CPU_PREFIX, "TOTAL ALTERED READS/WRITES: %15s\n", uns64String(info->count)); +} + + +// Cache object constructor +static VMIMMC_CONSTRUCTOR_FN(flakyConstructor) { + //srand(time(NULL)); +} + +// Cache object link +static VMIMMC_LINK_FN(flakyLink) +{ + flakyObjectP flaky = (flakyObjectP)component; + VMI_ASSERT( + vmimmcGetNextPort(component, "mp1") == NULL, + "%sCannot accept a transparent connection", + vmimmcGetHierarchicalName(component) + ); + + memDomainP nextDomain = vmimmcGetNextDomain(component, "mp1"); + + // sanity check that we are in full mode + VMI_ASSERT( + nextDomain, + "%s: expected an opaque connection", + vmimmcGetHierarchicalName(component) + ); + flaky->nextDomain = nextDomain; +} + +// Cache object destructor +static VMIMMC_DESTRUCTOR_FN(flakyDestructor) { + flakyObjectP flaky = (flakyObjectP)component; + printStats(flaky); +} + +// N-byte read function +static VMI_MEM_READ_FN(readNFull) +{ + vmimmcPortP port = reinterpret_cast(userData); + flakyObjectP flaky = (flakyObjectP)port->component; + Uns32 shortAddress = (Uns32)address; + + // read from real memory connected to mmc: + vmirtReadNByteDomain( + flaky->nextDomain, + shortAddress, + value, + bytes, + &flaky->lastRegion, + MEM_AA_TRUE + ); + +// flipBits(value, bytes, processor, address); + //sal::simulator.onMemoryAccessEvent(address, bytes, false, processor.getPC()); + + // increment counter of reads and writes: + flaky->count += 1; +} + +// N-byte write function +static VMI_MEM_WRITE_FN(writeNFull) +{ + vmimmcPortP port = reinterpret_cast(userData); + flakyObjectP flaky = (flakyObjectP)port->component; + Uns32 shortAddress = (Uns32)address; + + //flipBits(value, bytes, processor, address); + + // write to real memory connected to this mmc: + vmirtWriteNByteDomain( + flaky->nextDomain, + shortAddress, + value, + bytes, + &flaky->lastRegion, + MEM_AA_TRUE + ); + + // increment counter of reads and writes: + flaky->count += 1; +} + + +vmimmcAttr modelAttrs = +{ + // VERSION + VMI_VERSION, // version string (THIS MUST BE FIRST) + VMI_MMC_MODEL, // type + sizeof(flakyObject), // size in bytes of MMC object + + // CONSTRUCTOR/DESTRUCTOR ROUTINES + flakyConstructor, // constructor + flakyLink, // link component + flakyDestructor, // destructor + + // MODEL REFRESH (AT START OF TIME SLICE) + 0, // refresh + + // FULL MODEL CALLBACKS + readNFull, // N-byte read callback + writeNFull, // N-byte write callback + + // TRANSPARENT MODEL CALLBACKS + 0, // N-byte read callback + 0 // N-byte write callback +}; + diff --git a/ovp/setImperas.sh b/ovp/setImperas.sh new file mode 100644 index 00000000..72d6715a --- /dev/null +++ b/ovp/setImperas.sh @@ -0,0 +1,11 @@ +#!/bin/bash +INSTDIR=/proj/i4danceos/ovp/current + +source $INSTDIR/bin/setup.sh + +setupImperas -m32 $INSTDIR + +export PATH=${PATH}:$IMPERAS_HOME/bin/$IMPERAS_ARCH +export IMPERASD_LICENSE_FILE=@faui49 +export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$IMPERAS_HOME/bin/$IMPERAS_ARCH:$IMPERAS_HOME/bin/$IMPERAS_HOME/External/lib +export IMPERASD_LICENSE_FILE=@faui49.informatik.uni-erlangen.de diff --git a/ovp/test1/CMakeLists.txt b/ovp/test1/CMakeLists.txt new file mode 100644 index 00000000..8b544803 --- /dev/null +++ b/ovp/test1/CMakeLists.txt @@ -0,0 +1,13 @@ +add_definitions(" -m32 ${IMPERAS_VMIINC} ") + +set(SRCS + $ENV{IMPERAS_HOME}/ImpPublic/source/host/icm/icmCpuManager.cpp + platform/flakyMemory.cpp + platform/beforeInstruction.cpp + platform/platform.cpp +) +add_executable(ovp ${SRCS}) +add_dependencies(ovp protomessages) +target_link_libraries(ovp ${SIM_LDFLAGS} ) +## OVP links all needed shared libraries via a runtimeloader +set_target_properties(ovp PROPERTIES LINK_FLAGS " -m32 ") diff --git a/ovp/test1/application.elf b/ovp/test1/application.elf new file mode 100755 index 0000000000000000000000000000000000000000..395dd5944480d16670eca29d0e76b6733388c166 GIT binary patch literal 88526 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 literal 0 HcmV?d00001 diff --git a/ovp/test1/application/application.c b/ovp/test1/application/application.c new file mode 100644 index 00000000..faec3ae5 --- /dev/null +++ b/ovp/test1/application/application.c @@ -0,0 +1,20 @@ +#include +#include + +int foo = 0x37; +int bar = 34; + +int main() { + long i; + printf("\nHello\n\n"); + + for (i=0; i<50000; i++) { + printf("%d\n", i); + foo = 0x37; + printf("foo: (0x%x) = 0x%x\n", &foo, foo); + bar = 34; + printf("bar: (0x%x) = %d\n\n", &bar, bar); + } + + return 0; +} diff --git a/ovp/test1/platform/beforeInstruction.cpp b/ovp/test1/platform/beforeInstruction.cpp new file mode 100644 index 00000000..2f30f082 --- /dev/null +++ b/ovp/test1/platform/beforeInstruction.cpp @@ -0,0 +1,91 @@ +#include "beforeInstruction.hpp" + +Uns8 bpCount; +Addr breakpoints[255]; + +//Ignore warning: deprecated conversion from string constant to ‘char*’ +#pragma GCC diagnostic ignored "-Wwrite-strings" + +void printArmCortexM3Registers(icmProcessorObject processor) { + Uns32 registers[17]; + icmPrintf("---------------\t\t---------------\n"); + readRegister(processor, "R0", registers[0]); + readRegister(processor, "R1", registers[1]); + readRegister(processor, "R2", registers[2]); + readRegister(processor, "R3", registers[3]); + readRegister(processor, "R4", registers[4]); + readRegister(processor, "R5", registers[5]); + readRegister(processor, "R6", registers[6]); + readRegister(processor, "R7", registers[7]); + readRegister(processor, "R8", registers[8]); + readRegister(processor, "R9", registers[9]); + readRegister(processor, "R10", registers[10]); + readRegister(processor, "R11", registers[11]); + readRegister(processor, "R12", registers[12]); + readRegister(processor, "SP", registers[13]); + readRegister(processor, "LR", registers[14]); + readRegister(processor, "PC", registers[15]); + readRegister(processor, "CPSR", registers[16]); + icmPrintf("R0: 0x%08x\t\t", registers[0]); + icmPrintf("R1: 0x%08x\n", registers[1]); + icmPrintf("R2: 0x%08x\t\t", registers[2]); + icmPrintf("R3: 0x%08x\n", registers[3]); + icmPrintf("R4: 0x%08x\t\t", registers[4]); + icmPrintf("R5: 0x%08x\n", registers[5]); + icmPrintf("R6: 0x%08x\t\t", registers[6]); + icmPrintf("R7: 0x%08x\n", registers[7]); + icmPrintf("R8: 0x%08x\t\t", registers[8]); + icmPrintf("R9: 0x%08x\n", registers[9]); + icmPrintf("R10: 0x%08x\t\t", registers[10]); + icmPrintf("R11: 0x%08x\n", registers[11]); + icmPrintf("R12: 0x%08x\n\n", registers[12]); + icmPrintf("SP: 0x%08x\t\t", registers[13]); + icmPrintf("LR: 0x%08x\n", registers[14]); + icmPrintf("PC: 0x%08x\n", registers[15]); + icmPrintf("PSR: 0x%08x\n\n", registers[16]); +} + +Bool readRegister(icmProcessorObject processor, char *regName, Uns32 &value) { + if (regName[0] == 'P' && regName[1] == 'C') { + value = (Uns32)processor.getPC(); + return True; + } else { + return processor.readReg(regName, &value); + } +} + +Bool writeRegister(icmProcessorObject processor, char *regName, Uns32 &newValue) { + if (regName[0] == 'P' && regName[1] == 'C') { + processor.setPC((Addr)newValue); + return True; + } else { + return processor.writeReg(regName, &newValue); + } +} + + +void addBreakpoint(Addr breakAddr) { + if (breakAddr != 0x00 && bpCount != 255) { + breakpoints[bpCount] = breakAddr; + bpCount++; + } +} + +Addr simulateUntilBP(icmProcessorObject processor) { + if (bpCount == 0) { + icmPlatform::Instance()->simulate(); + return 0x00; + } + + Addr currentPC = 0x00; + while (processor.simulate(1) == ICM_SR_SCHED) { + currentPC = processor.getPC(); + for (Uns8 u = 0; u < bpCount; u++) { + if (currentPC == breakpoints[u]) { + return currentPC; + } + } + } + + return 0x00; +} diff --git a/ovp/test1/platform/beforeInstruction.hpp b/ovp/test1/platform/beforeInstruction.hpp new file mode 100644 index 00000000..85c7c5b9 --- /dev/null +++ b/ovp/test1/platform/beforeInstruction.hpp @@ -0,0 +1,46 @@ +#ifndef BEFORE_INSTRUCTION_HPP +#define BEFORE_INSTRUCTION_HPP + +#include "icm/icmCpuManager.hpp" + +using namespace icmCpuManager; + +/** + * Prints all the registers for an ARM Cortex M3 processor. + * @param processor The processor (must be an ARM Cortex M3) + */ +void printArmCortexM3Registers(icmProcessorObject processor); + +/** + * Reads a register and stores its content in an Uns32 variable. + * @param processor The processor for which to read the register + * @param regName The name of the register as a string + * @param value The address of where to store the register's content + */ +Bool readRegister(icmProcessorObject processor, char *regName, Uns32 &value); + +/** + * Writes the value given as an Uns32 variable to a register. + * @param processor The processor for which to write the variable + * @param regName The name of the register as a string + * @param newValue The address of the new value to be written to the register + */ +Bool writeRegister(icmProcessorObject processor, char *regName, Uns32 &newValue); + + +/** + * Adds a breakpoint for simulateUntilBreakpoint + * @param breakAddr The address to be added as a breakpoint + */ +void addBreakpoint(Addr breakAddr); + +/** + * Simulates until breakpoint, + * or the entire application file at once if no breakpoint was added. + * Returns the address of the next instruction, + * or zero if simulation did not stop at a breakpoint. + * @param processor The processor to run the simulation on + */ +Addr simulateUntilBP(icmProcessorObject processor); + +#endif \ No newline at end of file diff --git a/ovp/test1/platform/flakyMemory.cpp b/ovp/test1/platform/flakyMemory.cpp new file mode 100644 index 00000000..ccef766d --- /dev/null +++ b/ovp/test1/platform/flakyMemory.cpp @@ -0,0 +1,66 @@ +#include "flakyMemory.hpp" + + +void createFlakyMem( + icmProcessorObject processor, + Addr lowAddr, + Addr highAddr, + const char *vlnvRoot +) { + + icmBusObject *mainBus; + icmBusObject *interBus; + icmBusObject *mmcBus; + icmMmcObject *mmc1; + icmMemoryObject *memory1; + icmMemoryObject *memory2; + icmMemoryObject *memory3; + +#if 0 + // get location of mmc object file: + const char *flakyMem = icmGetVlnvString( + vlnvRoot, + "ovpworld.org", + "mmc", + "flakyMemory", + "1.0", + "model" + ); +#endif + // create full MMC + mmc1 = new icmMmcObject("mmc1", "/srv/scratch/sirozipp/build/lib/libflaky.so", "modelAttrs", 0, False); + + // create the processor bus + mainBus = new icmBusObject("bus1", 32); + + // create the intermediate bus + interBus = new icmBusObject("bus2", 32); + + // create the bus connecting the mmc to the memory + mmcBus = new icmBusObject("bus3", 32); + + // connect mmc direct to processor ports + processor.connect(*mainBus, *mainBus); + + // connect master port of MMC to bus + mmc1->connect(*interBus, "sp1", False); + mmc1->connect(*mmcBus, "mp1", True); + + if (lowAddr != 0x00) { + memory1 = new icmMemoryObject("mem1", ICM_PRIV_RWX, lowAddr-1); + memory1->connect("memp1", *mainBus, 0x00); + } + memory2 = new icmMemoryObject("mem2", ICM_PRIV_RWX, highAddr-lowAddr); + memory2->connect("memp2", *mmcBus, lowAddr); + if (highAddr != 0xffffffff) { + memory3 = new icmMemoryObject("mem3", ICM_PRIV_RWX, 0xffffffff-(highAddr+1)); + memory3->connect("memp3", *mainBus, highAddr+1); + } + + mainBus->newBridge(*interBus, "br1", "sp2", "mp2", lowAddr, highAddr, lowAddr); + + // show the bus connections + mainBus->printConnections(); + interBus->printConnections(); + mmcBus->printConnections(); +} diff --git a/ovp/test1/platform/flakyMemory.hpp b/ovp/test1/platform/flakyMemory.hpp new file mode 100644 index 00000000..a39ca709 --- /dev/null +++ b/ovp/test1/platform/flakyMemory.hpp @@ -0,0 +1,21 @@ +#ifndef FLAKY_MEMORY_HPP +#define FLAKY_MEMORY_HPP + +#include "icm/icmCpuManager.hpp" + +using namespace icmCpuManager; + +/** Creates flaky memory by attaching an MMC for the specified address range. + * @param processor The processor on which to set up the MMC + * @param loAddr The lowest address for which to do on-the-fly manipulation. + * @param hiAddr The highest address for which to do manipulation. + */ +void createFlakyMem( + icmProcessorObject processor, + Addr loAddr, + Addr hiAddr, + const char *vlnvRoot = 0 +); + + +#endif \ No newline at end of file diff --git a/ovp/test1/platform/platform.cpp b/ovp/test1/platform/platform.cpp new file mode 100644 index 00000000..4934a2d2 --- /dev/null +++ b/ovp/test1/platform/platform.cpp @@ -0,0 +1,90 @@ +#include + +#include "icm/icmCpuManager.hpp" +#include "flakyMemory.hpp" +#include "beforeInstruction.hpp" + +// enable relaxed scheduling for maximum performance +#define SIM_ATTRS (ICM_ATTR_RELAXED_SCHED) + + +icmProcessorObject createPlatform( + const char *application, + bool gdb, + bool flaky=false, + Addr lowAddr=0x00, + Addr highAddr=0xffffffff +) { + // select library components + const char *vlnvRoot = 0; // when null use default library + const char *vlnvRoot2 ="/srv/scratch/sirozipp/build/lib/" ; + const char *model = icmGetVlnvString(vlnvRoot, + "arm.ovpworld.org", + "processor", + "armm", + "1.0", + "model"); + const char *semihosting = icmGetVlnvString(vlnvRoot, "arm.ovpworld.org", "semihosting", "armNewlib", "1.0", "model"); + + // set attributes for CPU model + icmAttrListObject icmAttr; + icmAttr.addAttr("endian", "little"); + icmAttr.addAttr("compatibility", "nopBKPT"); + icmAttr.addAttr("variant", "Cortex-M3"); + icmAttr.addAttr("UAL", "1"); + + icmProcessorObject processor( + "cpu-Cortex-M3", // CPU name + "armm", // CPU type + 0, // CPU cpuId + 0, // CPU model flags + 32, // address bits + model, // model file + "modelAttrs", // morpher attributes + gdb?ICM_ATTR_DEFAULT:SIM_ATTRS, // simulation attributes + &icmAttr, // user-defined attributes + semihosting, // semi-hosting file + "modelAttrs" // semi-hosting attributes + ); + +// if (flaky) { + createFlakyMem(processor, lowAddr, highAddr, vlnvRoot2); + // } + + if (gdb) { + processor.debugThisProcessor(); + } + + // load the processor object file + processor.loadLocalMemory(application, true, true, true); + + return processor; +} + + +// Main simulation routine +int main(int argc, char ** argv) { + const char *application = "application.elf"; + bool gdb = false; + Uns32 portNum = (Uns32)-1; + + if(argc >= 2) { + application = argv[1]; + if(argc >= 3) { + gdb = true; + portNum = (Uns32)atoi(argv[2]); + } + } + + icmPlatform platform( + "fiPlatformCpp", + ICM_VERBOSE | ICM_STOP_ON_CTRLC, + gdb ? "rsp" : 0, + gdb ? portNum : 0 + ); + icmProcessorObject processor = createPlatform(application, gdb); + + simulateUntilBP(processor); + + return 0; +} diff --git a/scripts/client.sh b/scripts/client.sh new file mode 100755 index 00000000..f6eb8411 --- /dev/null +++ b/scripts/client.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# +# client.sh +# Starts a single FailBochs client in an endless loop. Adds ./bochslibs to +# LD_LIBRARY_PATH if existent. Terminates if ./stop exists, or bochs +# terminates with exit status 1. +# +# Prerequisite: All necessary FailBochs ingredients (see multiple-clients.sh) +# in the current directory. +# +rm -f stop + +LIBDIR=$PWD/bochslibs +if [ -d $LIBDIR ] +then + export LD_LIBRARY_PATH=$LIBDIR +fi + +while [ ! -e stop ] +do + #nice -n 19 ./bochs -q 2>&1 | tee log.$$.txt | fgrep Result + #nice -n 18 ./bochs -q 2>&1 | fgrep Result + nice -n 18 ./bochs -q >/dev/null 2>&1 + if [ $? -eq 1 ] + then + break + fi +done +echo DONE diff --git a/scripts/colorize.pl b/scripts/colorize.pl new file mode 100755 index 00000000..30d32e27 --- /dev/null +++ b/scripts/colorize.pl @@ -0,0 +1,132 @@ +#! /usr/bin/perl -w + +# +# ripped from colorgcc Version: 1.3.2 +# http://schlueters.de/colorgcc.1.3.2.txt +# + +use Term::ANSIColor; + +sub initDefaults +{ + $nocolor{"dumb"} = "true"; + + $colors{"srcColor"} = color("cyan"); + $colors{"introColor"} = color("blue"); + + $colors{"warningFileNameColor"} = color("yellow"); + $colors{"warningNumberColor"} = color("yellow"); + $colors{"warningMessageColor"} = color("yellow"); + + $colors{"errorFileNameColor"} = color("bold red"); + $colors{"errorNumberColor"} = color("bold red"); + $colors{"errorMessageColor"} = color("bold red"); +} + +sub loadPreferences +{ +# Usage: loadPreferences("filename"); + + my($filename) = @_; + + open(PREFS, "<$filename") || return; + + while() + { + next if (m/^\#.*/); # It's a comment. + next if (!m/(.*):\s*(.*)/); # It's not of the form "foo: bar". + + $option = $1; + $value = $2; + + if ($option eq "nocolor") + { + # The nocolor option lists terminal types, separated by + # spaces, not to do color on. + foreach $termtype (split(/\s+/, $value)) + { + $nocolor{$termtype} = "true"; + } + } + else + { + $colors{$option} = color($value); + } + } + close(PREFS); +} + +sub srcscan +{ +# Usage: srcscan($text, $normalColor) +# $text -- the text to colorize +# $normalColor -- The escape sequence to use for non-source text. + +# Looks for text between ` and ', and colors it srcColor. + + my($line, $normalColor) = @_; + + my($srcon) = color("reset") . $colors{"srcColor"}; + my($srcoff) = color("reset") . $normalColor; + + $line = $normalColor . $line; + + # This substitute replaces `foo' with `AfooB' where A is the escape + # sequence that turns on the the desired source color, and B is the + # escape sequence that returns to $normalColor. + $line =~ s/\`(.*?)\'/\`$srcon$1$srcoff\'/g; + + print($line, color("reset")); +} + +# +# Main program +# + +# Set up default values for colors and compilers. +initDefaults(); + +# Read the configuration file, if there is one. +$configFile = $ENV{"HOME"} . "/.colorgccrc"; +if (-f $configFile) +{ + loadPreferences($configFile); +} + +# Colorize the input +while(<>) +{ + if (m/^(.*?):([0-9]+):(.*)$/) # filename:lineno:message + { + $field1 = $1 || ""; + $field2 = $2 || ""; + $field3 = $3 || ""; + + if ($field3 =~ m/\s+warning:.*/) + { + # Warning + print($colors{"warningFileNameColor"}, "$field1:", color("reset")); + print($colors{"warningNumberColor"}, "$field2:", color("reset")); + srcscan($field3, $colors{"warningMessageColor"}); + } + else + { + # Error + print($colors{"errorFileNameColor"}, "$field1:", color("reset")); + print($colors{"errorNumberColor"}, "$field2:", color("reset")); + srcscan($field3, $colors{"errorMessageColor"}); + } + print("\n"); + } + elsif (m/^(.*?):(.+):$/) # filename:message: + { + # No line number, treat as an "introductory" line of text. + srcscan($_, $colors{"introColor"}); + } elsif (m/No such file or directory/) { + print($colors{"errorFileNameColor"}, $_); + } else # Anything else. + { + # Doesn't seem to be a warning or an error. Print normally. + print(color("reset"), $_); + } +} diff --git a/scripts/distribute-experiment.sh b/scripts/distribute-experiment.sh new file mode 100755 index 00000000..d5ccaef7 --- /dev/null +++ b/scripts/distribute-experiment.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# +# distribute-experiment.sh [path/to/experiment-target] +# Distribute necessary FailBochs ingredients for experiment target to +# FAIL_DISTRIBUTE_HOSTS. Defaults to an experiment target in the current +# directory. +# +# Prerequisites: +# - (possibly overridden) env variables from fail-env.sh +# + +set -e +# determine absolute path of this script +SCRIPTDIR=$(readlink -f $(dirname $0)) +# env variable defaults +source $SCRIPTDIR/fail-env.sh + +if [ -n "$1" ]; then cd "$1"; fi + +# possibly necessary files +[ ! -e bochsrc ] && echo 'Warning: no bochsrc found' >&2 +[ ! -e BIOS-bochs-latest ] && echo 'Warning: no BIOS-bochs-latest found' >&2 +[ ! -e vgabios.bin ] && echo 'Warning: no vgabios.bin found' >&2 + +# necessary files +[ ! -e client.sh ] && cp -v $SCRIPTDIR/client.sh . +[ ! -e multiple-clients.sh ] && cp -v $SCRIPTDIR/multiple-clients.sh . + +# add bochs binary if it doesn't exist +if [ ! -e bochs ] +then + cp -v $(which bochs) . + strip bochs +fi + +# sync everything to experiment hosts +for h in $FAIL_DISTRIBUTE_HOSTS +do + echo Distributing to $h ... + rsync -az --partial --delete . $h:"$FAIL_EXPERIMENT_TARGETDIR" & +done + +wait +echo "Done." diff --git a/scripts/fail-env.sh b/scripts/fail-env.sh new file mode 100644 index 00000000..bd987c16 --- /dev/null +++ b/scripts/fail-env.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# +# fail-env.sh +# default values for several Fail* environment variables +# If you want to set your own defaults, or need a script to source from, e.g., +# your ~/.bashrc, please copy this file and do not edit it in-place. +# + +# A whitespace-separated list of hosts to rsync the experiment data to. This +# is not necessarily the same list as FAIL_EXPERIMENT_HOSTS (see below), as +# many hosts may share their homes via NFS. +export FAIL_DISTRIBUTE_HOSTS=${FAIL_DISTRIBUTE_HOSTS:='ios kos virtuos plutonium'} + +# A whitespace-separated list of hosts to run experiments on. If the host name +# is followed by a ':' and a number, this specifies the number of clients to +# run on that host (defaults to #CPUs+1). +export FAIL_EXPERIMENT_HOSTS=${FAIL_EXPERIMENT_HOSTS:="plutonium uran virtuos ios:6 kos:6 bohrium polonium radon $(for hostnr in $(seq 100 254); do echo fiws$hostnr; done)"} + +# A homedir-relative directory on the distribution hosts where all necessary +# Fail* ingredients reside (see multiple-clients.sh). +export FAIL_EXPERIMENT_TARGETDIR=.fail-experiment diff --git a/scripts/multiple-clients.sh b/scripts/multiple-clients.sh new file mode 100755 index 00000000..18d61875 --- /dev/null +++ b/scripts/multiple-clients.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# +# multiple-clients.sh [num_clients] +# Starts multiple client.sh instances in a new tmux session. The number of +# clients defaults to #CPUs+1. +# +# Prerequisites: +# - client.sh and all necessary FailBochs ingredients (bochs binary, bochsrc, +# BIOS/VGA-BIOS, boot image, possibly a saved state) in the current +# directory +# - tmux installed somewhere in $PATH +# - possibly missing dynamic libraries in ~/bochslibs (e.g., for running a +# i386 bochs binary in an x86_64 environment) +# + +set -e +LIBDIR=~/bochslibs + +# cleanup earlier failures +# (FIXME: you probably don't want this on your local machine!) +killall -q bochs || true + +# On many machines, ~ is mounted via NFS. To avoid the (severe) performance +# penalty, copy all experiment-related stuff to /tmp. +TMP=/tmp/fail.$(id -nu) +mkdir -p $TMP +rsync -a --delete * $TMP/ +if [ -d $LIBDIR ] +then + rsync -a --delete $LIBDIR $TMP/ +fi +cd $TMP + +# tmux, please shut up. +TMUX='tmux -q' +COMMAND=./client.sh +SESSION=failbochs.$$ + +# Calculate number of clients from #processors. +PROCESSORS=$(fgrep processor /proc/cpuinfo|wc -l) +if [ -z "$1" ] +then + NWIN=$(($PROCESSORS+1)) + #NWIN=$(($NWIN*2)) +else + NWIN=$1 +fi + +# Run $NWIN clients in a new tmux session. +$TMUX new-session -s $SESSION -d "$COMMAND" +for i in $(seq 1 $(($NWIN-1))) +do + $TMUX new-session -t $SESSION -d \; split-window -h "$COMMAND" + $TMUX new-session -t $SESSION -d \; select-layout tiled +done + +# Some diagnostics for the operator. +echo "$(uname -n) ($PROCESSORS CPUs @ $(fgrep MHz /proc/cpuinfo|head -n1|awk '{print $(NF)}') MHz): started $NWIN clients" +#$TMUX attach -t $SESSION diff --git a/scripts/rebuild-bochs.sh b/scripts/rebuild-bochs.sh new file mode 100755 index 00000000..bfd3e4c8 --- /dev/null +++ b/scripts/rebuild-bochs.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# +# - needs to be called from within your build directory +# - "rebuild-bochs.sh": rebuild all of both Fail and Bochs +# (e.g., possibly necessary if you don't understand what was changed by others) +# - "rebuild-bochs.sh fail": rebuild all of Fail and re-link Bochs +# (e.g., possibly necessary if you changed Fail-affecting aspects or the +# build system) +# - "rebuild-bochs.sh bochs": rebuild all of Bochs +# (e.g., necessary if you changed Bochs-affecting aspects/code that must be +# inlined in Bochs) +# - "rebuild-bochs.sh -": rebuild only changed parts of Fail and Bochs +# (e.g., sufficient if you only changed experiment code) +# - all of the previous options finally install Bochs +# +set -e + +if [ "$1" = fail -o -z "$1" ] +then + make clean +fi +if [ "$1" = bochs -o -z "$1" ] +then + make bochsallclean +fi + +#export PATH=/fs/staff/hsc/bin/ccache:$PATH + +# even if we only rebuilt fail, we need to link and install bochs again +nice make -j10 bochs 2>&1 | $(dirname $0)/colorize.pl 2>&1 +make bochsinstall diff --git a/scripts/runcampaign.sh b/scripts/runcampaign.sh new file mode 100755 index 00000000..7cdd3a2b --- /dev/null +++ b/scripts/runcampaign.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# +# runcampaign.sh +# Runs the campaign server, and launches clients on all $FAIL_EXPERIMENT_HOSTS. +# +# Prerequisites: +# - (possibly overridden) env variables from fail-env.sh +# + +set -e +# determine absolute path of this script +SCRIPTDIR=$(readlink -f $(dirname $0)) +# env variable defaults +source $SCRIPTDIR/fail-env.sh + +CMD="killall -q client.sh || true; cd $FAIL_EXPERIMENT_TARGETDIR; ./multiple-clients.sh" +SSH='ssh -o BatchMode=yes -o ConnectTimeout=60' +CONNECTION_ATTEMPTS=2 + +# runcampaign.sh +if [ ! -x "$1" ]; then echo "usage: $0 " >&2; exit 1; fi +CAMPAIGNSERVER_BINARY=$1 + +date +/usr/bin/time -po .time "$CAMPAIGNSERVER_BINARY" >/dev/null 2>&1 & +sleep .1 # wait until server is likely to have a listening socket opened + +for h in $FAIL_EXPERIMENT_HOSTS +do + if [[ $h == *:* ]] + then + # split in host:nclients + NCLIENTS=${h#*:} + h=${h%:*} + else + NCLIENTS= + fi + + ( + for i in $(seq $CONNECTION_ATTEMPTS) + do + $SSH $h "$CMD $NCLIENTS" && break + # failed? sleep 1-10s and retry. + sleep $(($RANDOM / (32768 / 10) + 1)) + echo retrying $h ... + done + ) & + disown +done + +wait +echo "duration:" +cat .time

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%0Ao$&U3RQC`HKCB(r8Ti!U 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ȣ|jWDyu*HvN+IB_bm_JfH>1hIYudXi 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 z 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%0Dd(G6N_z*n?|7pnoi3lPOxxx|y!-WV2 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
yd|XV{RnL7~DLe1mN`dy{UMh;Z>ZY)Q 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%0Affm0 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
u9urYOmyL17 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≦x2qY)63 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